<?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>122739</bug_id>
          
          <creation_ts>2013-10-13 21:53:48 -0700</creation_ts>
          <short_desc>FTL should use llvm.webkit.patchpoint for inline caches</short_desc>
          <delta_ts>2013-11-02 20:14:53 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>122740</dependson>
    
    <dependson>122939</dependson>
    
    <dependson>123071</dependson>
    
    <dependson>123076</dependson>
    
    <dependson>123085</dependson>
    
    <dependson>123164</dependson>
          <blocked>122318</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Filip Pizlo">fpizlo</reporter>
          <assigned_to name="Filip Pizlo">fpizlo</assigned_to>
          <cc>atrick</cc>
    
    <cc>barraclough</cc>
    
    <cc>benjamin</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>commit-queue</cc>
    
    <cc>ggaren</cc>
    
    <cc>mark.lam</cc>
    
    <cc>mhahnenberg</cc>
    
    <cc>msaboff</cc>
    
    <cc>nrotem</cc>
    
    <cc>oliver</cc>
    
    <cc>sam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>939355</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-10-13 21:53:48 -0700</bug_when>
    <thetext>...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>941653</commentid>
    <comment_count>1</comment_count>
      <attachid>214690</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-10-19 21:41:07 -0700</bug_when>
    <thetext>Created attachment 214690
it begins

But every time I think I can start rage-hacking this into existence, I find another set of prerequisites that I have to handle in another patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>942023</commentid>
    <comment_count>2</comment_count>
      <attachid>214779</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-10-21 14:20:07 -0700</bug_when>
    <thetext>Created attachment 214779
so much fun still to be had!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>942087</commentid>
    <comment_count>3</comment_count>
      <attachid>214795</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-10-21 16:58:47 -0700</bug_when>
    <thetext>Created attachment 214795
more!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>942129</commentid>
    <comment_count>4</comment_count>
      <attachid>214806</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-10-21 19:13:30 -0700</bug_when>
    <thetext>Created attachment 214806
slow path call stuff is written</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>942144</commentid>
    <comment_count>5</comment_count>
      <attachid>214811</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-10-21 21:09:00 -0700</bug_when>
    <thetext>Created attachment 214811
I think I wrote all of the code</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>942145</commentid>
    <comment_count>6</comment_count>
      <attachid>214812</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-10-21 21:13:57 -0700</bug_when>
    <thetext>Created attachment 214812
for real this time

Haven&apos;t tried compiling it yet.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>942146</commentid>
    <comment_count>7</comment_count>
      <attachid>214813</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-10-21 21:27:20 -0700</bug_when>
    <thetext>Created attachment 214813
starting to compile</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>942159</commentid>
    <comment_count>8</comment_count>
      <attachid>214819</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-10-21 22:50:12 -0700</bug_when>
    <thetext>Created attachment 214819
it compiles</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>942167</commentid>
    <comment_count>9</comment_count>
      <attachid>214821</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-10-21 23:32:37 -0700</bug_when>
    <thetext>Created attachment 214821
starting to work?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>942218</commentid>
    <comment_count>10</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2013-10-22 03:53:19 -0700</bug_when>
    <thetext>Attachment 214821 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/JavaScriptCore/JavaScriptCore.xcodeproj/project.pbxproj&apos;, u&apos;Source/JavaScriptCore/assembler/AbstractMacroAssembler.h&apos;, u&apos;Source/JavaScriptCore/assembler/LinkBuffer.cpp&apos;, u&apos;Source/JavaScriptCore/assembler/LinkBuffer.h&apos;, u&apos;Source/JavaScriptCore/ftl/FTLAbbreviations.h&apos;, u&apos;Source/JavaScriptCore/ftl/FTLCapabilities.cpp&apos;, u&apos;Source/JavaScriptCore/ftl/FTLCompile.cpp&apos;, u&apos;Source/JavaScriptCore/ftl/FTLInlineCacheDescriptor.h&apos;, u&apos;Source/JavaScriptCore/ftl/FTLInlineCacheSize.cpp&apos;, u&apos;Source/JavaScriptCore/ftl/FTLInlineCacheSize.h&apos;, u&apos;Source/JavaScriptCore/ftl/FTLIntrinsicRepository.h&apos;, u&apos;Source/JavaScriptCore/ftl/FTLJITFinalizer.cpp&apos;, u&apos;Source/JavaScriptCore/ftl/FTLJITFinalizer.h&apos;, u&apos;Source/JavaScriptCore/ftl/FTLLocation.cpp&apos;, u&apos;Source/JavaScriptCore/ftl/FTLLocation.h&apos;, u&apos;Source/JavaScriptCore/ftl/FTLLowerDFGToLLVM.cpp&apos;, u&apos;Source/JavaScriptCore/ftl/FTLOutput.h&apos;, u&apos;Source/JavaScriptCore/ftl/FTLSlowPathCall.cpp&apos;, u&apos;Source/JavaScriptCore/ftl/FTLSlowPathCall.h&apos;, u&apos;Source/JavaScriptCore/ftl/FTLSlowPathCallKey.cpp&apos;, u&apos;Source/JavaScriptCore/ftl/FTLSlowPathCallKey.h&apos;, u&apos;Source/JavaScriptCore/ftl/FTLStackMaps.cpp&apos;, u&apos;Source/JavaScriptCore/ftl/FTLStackMaps.h&apos;, u&apos;Source/JavaScriptCore/ftl/FTLState.h&apos;, u&apos;Source/JavaScriptCore/ftl/FTLThunks.cpp&apos;, u&apos;Source/JavaScriptCore/ftl/FTLThunks.h&apos;, u&apos;Source/JavaScriptCore/jit/CCallHelpers.h&apos;, u&apos;Source/JavaScriptCore/jit/GPRInfo.h&apos;, u&apos;Source/JavaScriptCore/jit/JITInlineCacheGenerator.cpp&apos;, u&apos;Source/JavaScriptCore/jit/JITInlineCacheGenerator.h&apos;, u&apos;Source/JavaScriptCore/jit/RegisterSet.cpp&apos;, u&apos;Source/JavaScriptCore/jit/RegisterSet.h&apos;, u&apos;Source/JavaScriptCore/runtime/Options.h&apos;, u&apos;Source/WTF/wtf/BitVector.cpp&apos;, u&apos;Source/WTF/wtf/BitVector.h&apos;, u&apos;Source/WTF/wtf/HashTraits.h&apos;, u&apos;Source/WTF/wtf/StdLibExtras.h&apos;]&quot; exit_code: 1
Source/WTF/wtf/BitVector.h:271:  An else statement can be removed when the prior &quot;if&quot; concludes with a return, break, continue or goto statement.  [readability/control_flow] [4]
Source/JavaScriptCore/ftl/FTLSlowPathCall.h:60:  The parameter name &quot;object&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/JavaScriptCore/ftl/FTLSlowPathCall.cpp:41:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
Total errors found: 3 in 37 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>942231</commentid>
    <comment_count>11</comment_count>
      <attachid>214821</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2013-10-22 04:34:39 -0700</bug_when>
    <thetext>Comment on attachment 214821
starting to work?

Attachment 214821 did not pass win-ews (win):
Output: http://webkit-queues.appspot.com/results/8858264</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>942318</commentid>
    <comment_count>12</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-10-22 08:58:54 -0700</bug_when>
    <thetext>This is going to take some effort to get right.  Just as I did with OSR, I think I&apos;ll first land the prototype that can do some simple inline cache and then file bugs for the things that need to be done before this passes all tests.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>942815</commentid>
    <comment_count>13</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-10-23 13:45:34 -0700</bug_when>
    <thetext>This looks like it works as of http://trac.webkit.org/changeset/157872.

Leaving this bug open since the corresponding LLVM support hasn&apos;t landed yet.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>946371</commentid>
    <comment_count>14</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-11-02 20:14:35 -0700</bug_when>
    <thetext>It&apos;s in trunk.  The remaining work to port the implementation to the slight changes between the original LLVM patch and what landed will be covered in https://bugs.webkit.org/show_bug.cgi?id=122318.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>214690</attachid>
            <date>2013-10-19 21:41:07 -0700</date>
            <delta_ts>2013-10-21 14:20:07 -0700</delta_ts>
            <desc>it begins</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>8602</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTGlua0J1ZmZlci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9MaW5rQnVmZmVyLmNw
cAkocmV2aXNpb24gMTU3NjkzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9M
aW5rQnVmZmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDEyLCAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTUxLDYgKzE1MSwxNSBAQCB2b2lkIExpbmtC
dWZmZXI6OmxpbmtDb2RlKHZvaWQqIG93bmVyVUlECiAKIHZvaWQgTGlua0J1ZmZlcjo6YWxsb2Nh
dGUoc2l6ZV90IGluaXRpYWxTaXplLCB2b2lkKiBvd25lclVJRCwgSklUQ29tcGlsYXRpb25FZmZv
cnQgZWZmb3J0KQogeworICAgIGlmIChtX2NvZGUpIHsKKyAgICAgICAgaWYgKGluaXRpYWxTaXpl
ID4gbV9zaXplKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICAgICAgbV9kaWRB
bGxvY2F0ZSA9IHRydWU7CisgICAgICAgIG1fc2l6ZSA9IGluaXRpYWxTaXplOworICAgICAgICBy
ZXR1cm47CisgICAgfQorICAgIAogICAgIG1fZXhlY3V0YWJsZU1lbW9yeSA9IG1fdm0tPmV4ZWN1
dGFibGVBbGxvY2F0b3IuYWxsb2NhdGUoKm1fdm0sIGluaXRpYWxTaXplLCBvd25lclVJRCwgZWZm
b3J0KTsKICAgICBpZiAoIW1fZXhlY3V0YWJsZU1lbW9yeSkKICAgICAgICAgcmV0dXJuOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9MaW5rQnVmZmVyLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9MaW5rQnVmZmVyLmgJKHJldmlz
aW9uIDE1NzY5MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTGlua0J1ZmZl
ci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykg
MjAwOSwgMjAxMCwgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMDksIDIwMTAsIDIwMTIsIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC05NCw2ICs5NCwyMiBA
QCBwdWJsaWM6CiAgICAgICAgIGxpbmtDb2RlKG93bmVyVUlELCBlZmZvcnQpOwogICAgIH0KIAor
ICAgIExpbmtCdWZmZXIoVk0mIHZtLCBNYWNyb0Fzc2VtYmxlciogbWFzbSwgdm9pZCogY29kZSwg
c2l6ZV90IHNpemUpCisgICAgICAgIDogbV9zaXplKHNpemUpCisjaWYgRU5BQkxFKEJSQU5DSF9D
T01QQUNUSU9OKQorICAgICAgICAsIG1faW5pdGlhbFNpemUoMCkKKyNlbmRpZgorICAgICAgICAs
IG1fZGlkQWxsb2NhdGUoZmFsc2UpCisgICAgICAgICwgbV9jb2RlKGNvZGUpCisgICAgICAgICwg
bV9hc3NlbWJsZXIobWFzbSkKKyAgICAgICAgLCBtX3ZtKCZ2bSkKKyNpZm5kZWYgTkRFQlVHCisg
ICAgICAgICwgbV9jb21wbGV0ZWQoZmFsc2UpCisjZW5kaWYKKyAgICB7CisgICAgICAgIGxpbmtD
b2RlKG93bmVyVUlELCBlZmZvcnQpOworICAgIH0KKwogICAgIH5MaW5rQnVmZmVyKCkKICAgICB7
CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2Vt
Ymxlclg4Ni5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIv
TWFjcm9Bc3NlbWJsZXJYODYuaAkocmV2aXNpb24gMTU3NjkzKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4Ni5oCSh3b3JraW5nIGNvcHkpCkBAIC0z
OCw2ICszOCw5IEBAIG5hbWVzcGFjZSBKU0MgewogCiBjbGFzcyBNYWNyb0Fzc2VtYmxlclg4NiA6
IHB1YmxpYyBNYWNyb0Fzc2VtYmxlclg4NkNvbW1vbiB7CiBwdWJsaWM6CisgICAgc3RhdGljIGNv
bnN0IHVuc2lnbmVkIG51bWJlck9mUmVnaXN0ZXJzID0gMTY7CisgICAgc3RhdGljIGNvbnN0IHVu
c2lnbmVkIG51bWJlck9mRlBSZWdpc3RlcnMgPSAxNjsKKyAgICAKICAgICBzdGF0aWMgY29uc3Qg
U2NhbGUgU2NhbGVQdHIgPSBUaW1lc0ZvdXI7CiAKICAgICB1c2luZyBNYWNyb0Fzc2VtYmxlclg4
NkNvbW1vbjo6YWRkMzI7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01h
Y3JvQXNzZW1ibGVyWDg2XzY0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4Nl82NC5oCShyZXZpc2lvbiAxNTc2OTMpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyWDg2XzY0LmgJKHdv
cmtpbmcgY29weSkKQEAgLTQwLDYgKzQwLDkgQEAgbmFtZXNwYWNlIEpTQyB7CiAKIGNsYXNzIE1h
Y3JvQXNzZW1ibGVyWDg2XzY0IDogcHVibGljIE1hY3JvQXNzZW1ibGVyWDg2Q29tbW9uIHsKIHB1
YmxpYzoKKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgbnVtYmVyT2ZSZWdpc3RlcnMgPSAxNjsK
KyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgbnVtYmVyT2ZGUFJlZ2lzdGVycyA9IDE2OworICAg
IAogICAgIHN0YXRpYyBjb25zdCBTY2FsZSBTY2FsZVB0ciA9IFRpbWVzRWlnaHQ7CiAKICAgICB1
c2luZyBNYWNyb0Fzc2VtYmxlclg4NkNvbW1vbjo6YWRkMzI7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZnRsL0ZUTElubGluZUNhY2hlU2l6ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2Z0bC9GVExJbmxpbmVDYWNoZVNpemUuY3BwCShyZXZpc2lvbiAwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExJbmxpbmVDYWNoZVNpemUuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsNzIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkZUTElubGlu
ZUNhY2hlU2l6ZS5oIgorCisjaWYgRU5BQkxFKEZUTF9KSVQpCisKKyNpbmNsdWRlICJKSVRJbmxp
bmVDYWNoZUdlbmVyYXRvci5oIgorI2luY2x1ZGUgIk1hY3JvQXNzZW1ibGVyLmgiCisKK25hbWVz
cGFjZSBKU0MgeyBuYW1lc3BhY2UgRlRMIHsKKworc3RhdGljIHNpemVfdCBzX3NpemVPZkdldEJ5
SWQ7CitzdGF0aWMgc2l6ZV90IHNfc2l6ZU9mUHV0QnlJZDsKKworc2l6ZV90IHNpemVPZkdldEJ5
SWQoKQoreworICAgIGlmIChzX3NpemVPZkdldEJ5SWQpCisgICAgICAgIHJldHVybiBzX3NpemVP
ZkdldEJ5SWQ7CisgICAgCisgICAgTWFjcm9Bc3NlbWJsZXIgaml0OworICAgIAorICAgIEpJVEdl
dEJ5SWRHZW5lcmF0b3IgZ2VuZXJhdG9yKAorICAgICAgICAwLCBDb2RlT3JpZ2luKCksIFJlZ2lz
dGVyU2V0KCksIEpTVmFsdWVSZWdzKEdQUkluZm86OnJlZ1Q2KSwgSlNWYWx1ZVJlZ3MoR1BSSW5m
bzo6cmVnVDcpLAorICAgICAgICBmYWxzZSk7CisgICAgZ2VuZXJhdG9yLmdlbmVyYXRlRmFzdFBh
dGgoaml0KTsKKyAgICAKKyAgICByZXR1cm4gc19zaXplT2ZHZXRCeUlkID0gaml0Lm1fYXNzZW1i
bGVyLmNvZGVTaXplKCk7Cit9CisKK3NpemVfdCBzaXplT2ZQdXRCeUlkKCkKK3sKKyAgICBpZiAo
c19zaXplT2ZQdXRCeUlkKQorICAgICAgICByZXR1cm4gc19zaXplT2ZQdXRCeUlkOworICAgIAor
ICAgIE1hY3JvQXNzZW1ibGVyIGppdDsKKyAgICAKKyAgICBKSVRQdXRCeUlkR2VuZXJhdG9yIGdl
bmVyYXRvcigKKyAgICAgICAgMCwgQ29kZU9yaWdpbigpLCBSZWdpc3RlclNldCgpLCBKU1ZhbHVl
UmVncyhHUFJJbmZvOjpyZWdUNiksIEpTVmFsdWVSZWdzKEdQUkluZm86OnJlZ1Q3KSwKKyAgICAg
ICAgR1BSSW5mbzo6cmVnVDgsIGZhbHNlLCBOb3RTdHJpY3RNb2RlLCBOb3REaXJlY3QpOworICAg
IGdlbmVyYXRvci5nZW5lcmF0ZUZhc3RQYXRoKGppdCk7CisgICAgCisgICAgcmV0dXJuIHNfc2l6
ZU9mUHV0QnlJZCA9IGppdC5tX2Fzc2VtYmxlci5jb2RlU2l6ZSgpOworfQorCit9IH0gLy8gbmFt
ZXNwYWNlIEpTQzo6RlRMCisKKyNlbmRpZiAvLyBFTkFCTEUoRlRMX0pJVCkKKwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExJbmxpbmVDYWNoZVNpemUuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTElubGluZUNhY2hlU2l6ZS5oCShyZXZpc2lv
biAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExJbmxpbmVDYWNoZVNpemUuaAko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEz
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgRlRMSW5saW5lQ2FjaGVTaXplX2gKKyNkZWZp
bmUgRlRMSW5saW5lQ2FjaGVTaXplX2gKKworI2lmIEVOQUJMRShGVExfSklUKQorCituYW1lc3Bh
Y2UgSlNDIHsgbmFtZXNwYWNlIEZUTCB7CisKK3NpemVfdCBzaXplT2ZHZXRCeUlkKCk7CitzaXpl
X3Qgc2l6ZU9mUHV0QnlJZCgpOworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6RlRMCisKKyNlbmRp
ZiAvLyBFTkFCTEUoRlRMX0pJVCkKKworI2VuZGlmIC8vIEZUTElubGluZUNhY2hlU2l6ZV9oCisK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lQ2FjaGVHZW5lcmF0b3Iu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lQ2Fj
aGVHZW5lcmF0b3IuY3BwCShyZXZpc2lvbiAxNTc2OTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVElubGluZUNhY2hlR2VuZXJhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQs
MTAgKzM0LDE2IEBACiAKIG5hbWVzcGFjZSBKU0MgewogCitzdGF0aWMgU3RydWN0dXJlU3R1Yklu
Zm8qIGdhcmJhZ2VTdHViSW5mbygpCit7CisgICAgc3RhdGljIFN0cnVjdHVyZVN0dWJJbmZvIHN0
dWJJbmZvOworICAgIHJldHVybiAmc3R1YkluZm87Cit9CisKIEpJVElubGluZUNhY2hlR2VuZXJh
dG9yOjpKSVRJbmxpbmVDYWNoZUdlbmVyYXRvcihDb2RlQmxvY2sqIGNvZGVCbG9jaywgQ29kZU9y
aWdpbiBjb2RlT3JpZ2luKQogICAgIDogbV9jb2RlQmxvY2soY29kZUJsb2NrKQogewotICAgIG1f
c3R1YkluZm8gPSBtX2NvZGVCbG9jay0+YWRkU3R1YkluZm8oKTsKKyAgICBtX3N0dWJJbmZvID0g
bV9jb2RlQmxvY2sgPyBtX2NvZGVCbG9jay0+YWRkU3R1YkluZm8oKSA6IGdhcmJhZ2VTdHViSW5m
bygpOwogICAgIG1fc3R1YkluZm8tPmNvZGVPcmlnaW4gPSBjb2RlT3JpZ2luOwogfQogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>214779</attachid>
            <date>2013-10-21 14:20:07 -0700</date>
            <delta_ts>2013-10-21 16:58:47 -0700</delta_ts>
            <desc>so much fun still to be had!</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>32154</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTGlua0J1ZmZlci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9MaW5rQnVmZmVyLmNw
cAkocmV2aXNpb24gMTU3NzA3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9M
aW5rQnVmZmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDEyLCAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTUxLDYgKzE1MSwxNSBAQCB2b2lkIExpbmtC
dWZmZXI6OmxpbmtDb2RlKHZvaWQqIG93bmVyVUlECiAKIHZvaWQgTGlua0J1ZmZlcjo6YWxsb2Nh
dGUoc2l6ZV90IGluaXRpYWxTaXplLCB2b2lkKiBvd25lclVJRCwgSklUQ29tcGlsYXRpb25FZmZv
cnQgZWZmb3J0KQogeworICAgIGlmIChtX2NvZGUpIHsKKyAgICAgICAgaWYgKGluaXRpYWxTaXpl
ID4gbV9zaXplKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICAgICAgbV9kaWRB
bGxvY2F0ZSA9IHRydWU7CisgICAgICAgIG1fc2l6ZSA9IGluaXRpYWxTaXplOworICAgICAgICBy
ZXR1cm47CisgICAgfQorICAgIAogICAgIG1fZXhlY3V0YWJsZU1lbW9yeSA9IG1fdm0tPmV4ZWN1
dGFibGVBbGxvY2F0b3IuYWxsb2NhdGUoKm1fdm0sIGluaXRpYWxTaXplLCBvd25lclVJRCwgZWZm
b3J0KTsKICAgICBpZiAoIW1fZXhlY3V0YWJsZU1lbW9yeSkKICAgICAgICAgcmV0dXJuOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9MaW5rQnVmZmVyLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9MaW5rQnVmZmVyLmgJKHJldmlz
aW9uIDE1NzcwNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTGlua0J1ZmZl
ci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykg
MjAwOSwgMjAxMCwgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMDksIDIwMTAsIDIwMTIsIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC05NCw2ICs5NCwyMiBA
QCBwdWJsaWM6CiAgICAgICAgIGxpbmtDb2RlKG93bmVyVUlELCBlZmZvcnQpOwogICAgIH0KIAor
ICAgIExpbmtCdWZmZXIoVk0mIHZtLCBNYWNyb0Fzc2VtYmxlciogbWFzbSwgdm9pZCogY29kZSwg
c2l6ZV90IHNpemUpCisgICAgICAgIDogbV9zaXplKHNpemUpCisjaWYgRU5BQkxFKEJSQU5DSF9D
T01QQUNUSU9OKQorICAgICAgICAsIG1faW5pdGlhbFNpemUoMCkKKyNlbmRpZgorICAgICAgICAs
IG1fZGlkQWxsb2NhdGUoZmFsc2UpCisgICAgICAgICwgbV9jb2RlKGNvZGUpCisgICAgICAgICwg
bV9hc3NlbWJsZXIobWFzbSkKKyAgICAgICAgLCBtX3ZtKCZ2bSkKKyNpZm5kZWYgTkRFQlVHCisg
ICAgICAgICwgbV9jb21wbGV0ZWQoZmFsc2UpCisjZW5kaWYKKyAgICB7CisgICAgICAgIGxpbmtD
b2RlKG93bmVyVUlELCBlZmZvcnQpOworICAgIH0KKwogICAgIH5MaW5rQnVmZmVyKCkKICAgICB7
CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDYXBhYmlsaXRpZXMu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ2FwYWJpbGl0
aWVzLmNwcAkocmV2aXNpb24gMTU3NzA3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9G
VExDYXBhYmlsaXRpZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05NCwxMCArOTQsMTMgQEAgaW5s
aW5lIENhcGFiaWxpdHlMZXZlbCBjYW5Db21waWxlKE5vZGUqIAogICAgIGNhc2UgR2V0Q2xvc3Vy
ZVJlZ2lzdGVyczoKICAgICBjYXNlIEdldENsb3N1cmVWYXI6CiAgICAgY2FzZSBQdXRDbG9zdXJl
VmFyOgotICAgIGNhc2UgR2V0QnlJZDoKICAgICBjYXNlIEludDUyVG9WYWx1ZToKICAgICAgICAg
Ly8gVGhlc2UgYXJlIE9LLgogICAgICAgICBicmVhazsKKyAgICBjYXNlIEdldEJ5SWQ6CisgICAg
ICAgIGlmIChub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkgPT0gQ2VsbFVzZSkKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICByZXR1cm4gQ2Fubm90Q29tcGlsZTsKICAgICBjYXNlIEdldEluZGV4
ZWRQcm9wZXJ0eVN0b3JhZ2U6CiAgICAgICAgIGlmIChpc1R5cGVkVmlldyhub2RlLT5hcnJheU1v
ZGUoKS50eXBlZEFycmF5VHlwZSgpKSkKICAgICAgICAgICAgIGJyZWFrOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2Z0bC9GVExJbmxpbmVDYWNoZVNpemUuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSW5saW5lQ2FjaGVTaXplLmNwcAkocmV2aXNp
b24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSW5saW5lQ2FjaGVTaXplLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDcyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJG
VExJbmxpbmVDYWNoZVNpemUuaCIKKworI2lmIEVOQUJMRShGVExfSklUKQorCisjaW5jbHVkZSAi
SklUSW5saW5lQ2FjaGVHZW5lcmF0b3IuaCIKKyNpbmNsdWRlICJNYWNyb0Fzc2VtYmxlci5oIgor
CituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEZUTCB7CisKK3N0YXRpYyBzaXplX3Qgc19zaXpl
T2ZHZXRCeUlkOworc3RhdGljIHNpemVfdCBzX3NpemVPZlB1dEJ5SWQ7CisKK3NpemVfdCBzaXpl
T2ZHZXRCeUlkKCkKK3sKKyAgICBpZiAoc19zaXplT2ZHZXRCeUlkKQorICAgICAgICByZXR1cm4g
c19zaXplT2ZHZXRCeUlkOworICAgIAorICAgIE1hY3JvQXNzZW1ibGVyIGppdDsKKyAgICAKKyAg
ICBKSVRHZXRCeUlkR2VuZXJhdG9yIGdlbmVyYXRvcigKKyAgICAgICAgMCwgQ29kZU9yaWdpbigp
LCBSZWdpc3RlclNldCgpLCBKU1ZhbHVlUmVncyhHUFJJbmZvOjpyZWdUNiksIEpTVmFsdWVSZWdz
KEdQUkluZm86OnJlZ1Q3KSwKKyAgICAgICAgZmFsc2UpOworICAgIGdlbmVyYXRvci5nZW5lcmF0
ZUZhc3RQYXRoKGppdCk7CisgICAgCisgICAgcmV0dXJuIHNfc2l6ZU9mR2V0QnlJZCA9IGppdC5t
X2Fzc2VtYmxlci5jb2RlU2l6ZSgpOworfQorCitzaXplX3Qgc2l6ZU9mUHV0QnlJZCgpCit7Cisg
ICAgaWYgKHNfc2l6ZU9mUHV0QnlJZCkKKyAgICAgICAgcmV0dXJuIHNfc2l6ZU9mUHV0QnlJZDsK
KyAgICAKKyAgICBNYWNyb0Fzc2VtYmxlciBqaXQ7CisgICAgCisgICAgSklUUHV0QnlJZEdlbmVy
YXRvciBnZW5lcmF0b3IoCisgICAgICAgIDAsIENvZGVPcmlnaW4oKSwgUmVnaXN0ZXJTZXQoKSwg
SlNWYWx1ZVJlZ3MoR1BSSW5mbzo6cmVnVDYpLCBKU1ZhbHVlUmVncyhHUFJJbmZvOjpyZWdUNyks
CisgICAgICAgIEdQUkluZm86OnJlZ1Q4LCBmYWxzZSwgTm90U3RyaWN0TW9kZSwgTm90RGlyZWN0
KTsKKyAgICBnZW5lcmF0b3IuZ2VuZXJhdGVGYXN0UGF0aChqaXQpOworICAgIAorICAgIHJldHVy
biBzX3NpemVPZlB1dEJ5SWQgPSBqaXQubV9hc3NlbWJsZXIuY29kZVNpemUoKTsKK30KKworfSB9
IC8vIG5hbWVzcGFjZSBKU0M6OkZUTAorCisjZW5kaWYgLy8gRU5BQkxFKEZUTF9KSVQpCisKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSW5saW5lQ2FjaGVTaXplLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExJbmxpbmVDYWNoZVNpemUuaAko
cmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSW5saW5lQ2FjaGVT
aXplLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0MSBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEZUTElubGluZUNhY2hlU2l6ZV9o
CisjZGVmaW5lIEZUTElubGluZUNhY2hlU2l6ZV9oCisKKyNpZiBFTkFCTEUoRlRMX0pJVCkKKwor
bmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBGVEwgeworCitzaXplX3Qgc2l6ZU9mR2V0QnlJZCgp
Oworc2l6ZV90IHNpemVPZlB1dEJ5SWQoKTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkZUTAor
CisjZW5kaWYgLy8gRU5BQkxFKEZUTF9KSVQpCisKKyNlbmRpZiAvLyBGVExJbmxpbmVDYWNoZVNp
emVfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTElubGluZUNhY2hlV3Jh
cHBlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSW5saW5l
Q2FjaGVXcmFwcGVyLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRs
L0ZUTElubGluZUNhY2hlV3JhcHBlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDcgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBG
VExJbmxpbmVDYWNoZVdyYXBwZXJfaAorI2RlZmluZSBGVExJbmxpbmVDYWNoZVdyYXBwZXJfaAor
CisjaWYgRU5BQkxFKEZUTF9KSVQpCisKKyNpbmNsdWRlICJKSVRJbmxpbmVDYWNoZUdlbmVyYXRv
ci5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEZUTCB7CisKK3RlbXBsYXRlPHR5cGVu
YW1lIEdlbmVyYXRvclR5cGU+CitzdHJ1Y3QgSW5saW5lQ2FjaGVXcmFwcGVyIHsKKyAgICBJbmxp
bmVDYWNoZVdyYXBwZXIoKSB7IH0KKyAgICAKKyAgICBJbmxpbmVDYWNoZVdyYXBwZXIoY29uc3Qg
R2VuZXJhdG9yVHlwZSYgZ2VuZXJhdG9yLCAKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpG
VEwKKworI2VuZGlmIC8vIEVOQUJMRShGVExfSklUKQorCisjZW5kaWYgLy8gRlRMSW5saW5lQ2Fj
aGVXcmFwcGVyX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExKSVRGaW5h
bGl6ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSklU
RmluYWxpemVyLmNwcAkocmV2aXNpb24gMTU3NzA3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Z0bC9GVExKSVRGaW5hbGl6ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04NCw2ICs4NCwxNyBA
QCBib29sIEpJVEZpbmFsaXplcjo6ZmluYWxpemVGdW5jdGlvbigpCiAgICAgICAgICAgICAgICAg
KCJGVEwgZXhpdCB0aHVua3MgZm9yICVzIiwgdG9DU3RyaW5nKENvZGVCbG9ja1dpdGhKSVRUeXBl
KG1fcGxhbi5jb2RlQmxvY2suZ2V0KCksIEpJVENvZGU6OkZUTEpJVCkpLmRhdGEoKSkpKTsKICAg
ICB9IC8vIGVsc2UgdGhpcyBmdW5jdGlvbiBoYWQgbm8gT1NSIGV4aXRzLCBzbyBubyBleGl0IHRo
dW5rcy4KICAgICAKKyAgICBpZiAoc2lkZUNvZGVMaW5rQnVmZmVyKSB7CisgICAgICAgIC8vIFNp
ZGUgY29kZSBpcyBmb3Igc3BlY2lhbCBzbG93IHBhdGhzIHRoYXQgd2UgZ2VuZXJhdGUgb3Vyc2Vs
dmVzLCBsaWtlIGZvciBpbmxpbmUKKyAgICAgICAgLy8gY2FjaGVzLgorICAgICAgICAKKyAgICAg
ICAgaml0Q29kZS0+YWRkSGFuZGxlKEZJTkFMSVpFX0RGR19DT0RFKAorICAgICAgICAgICAgKnNp
ZGVDb2RlTGlua0J1ZmZlciwKKyAgICAgICAgICAgICgiRlRMIHNpZGUgY29kZSBmb3IgJXMiLAor
ICAgICAgICAgICAgICAgIHRvQ1N0cmluZyhDb2RlQmxvY2tXaXRoSklUVHlwZShtX3BsYW4uY29k
ZUJsb2NrLmdldCgpLCBKSVRDb2RlOjpGVExKSVQpKS5kYXRhKCkpKQorICAgICAgICAgICAgLmV4
ZWN1dGFibGVNZW1vcnkoKSk7CisgICAgfQorICAgIAogICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0
ciB3aXRoQXJpdHlDaGVjazsKICAgICBpZiAoYXJpdHlDaGVjay5pc1NldCgpKQogICAgICAgICB3
aXRoQXJpdHlDaGVjayA9IGVudHJ5cG9pbnRMaW5rQnVmZmVyLT5sb2NhdGlvbk9mKGFyaXR5Q2hl
Y2spOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExKSVRGaW5hbGl6ZXIuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEpJVEZpbmFsaXplci5o
CShyZXZpc2lvbiAxNTc3MDcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEpJVEZp
bmFsaXplci5oCSh3b3JraW5nIGNvcHkpCkBAIC01MCw2ICs1MCw3IEBAIHB1YmxpYzoKIAogICAg
IE93blB0cjxMaW5rQnVmZmVyPiBleGl0VGh1bmtzTGlua0J1ZmZlcjsKICAgICBPd25QdHI8TGlu
a0J1ZmZlcj4gZW50cnlwb2ludExpbmtCdWZmZXI7CisgICAgT3duUHRyPExpbmtCdWZmZXI+IHNp
ZGVDb2RlTGlua0J1ZmZlcjsKICAgICBWZWN0b3I8T1NSRXhpdENvbXBpbGF0aW9uSW5mbz4gb3Ny
RXhpdDsKICAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgYXJpdHlDaGVjazsKICAgICBHZW5lcmF0
ZWRGdW5jdGlvbiBmdW5jdGlvbjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRM
TG93ZXJERkdUb0xMVk0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9m
dGwvRlRMTG93ZXJERkdUb0xMVk0uY3BwCShyZXZpc2lvbiAxNTc3MDcpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTIyMiwxOSArMTIyMiwxNCBAQCBwcml2YXRlOgogICAgIAogICAgIHZvaWQgY29tcGlsZUdldEJ5
SWQoKQogICAgIHsKLSAgICAgICAgTFZhbHVlIGJhc2UgPSAwOwotCi0gICAgICAgIHN3aXRjaCAo
bV9ub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkpIHsKLSAgICAgICAgY2FzZSBDZWxsVXNlOgotICAg
ICAgICAgICAgYmFzZSA9IGxvd0NlbGwobV9ub2RlLT5jaGlsZDEoKSk7Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgY2FzZSBVbnR5cGVkVXNlOgotICAgICAgICAgICAgYmFzZSA9IGxvd0pT
VmFsdWUobV9ub2RlLT5jaGlsZDEoKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgZGVm
YXVsdDoKLSAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgfQorICAgICAgICAvLyBVbnR5cGVkVXNlIGlzIGEgYml0IGhh
cmRlciB0byByZWFzb24gYWJvdXQgYW5kIEknbSBub3Qgc3VyZSBob3cgYmVzdCB0byBkbyBpdCwg
eWV0LgorICAgICAgICAvLyBCYXNpY2FsbHkgd2UgbmVlZCB0byBlbWl0IGEgY2VsbCBicmFuY2gg
dGhhdCB0YWtlcyB5b3UgdG8gdGhlIHNsb3cgcGF0aCwgYnV0IHRoZSBzbG93CisgICAgICAgIC8v
IHBhdGggaXMgZ2VuZXJhdGVkIGJ5IHRoZSBJQyBnZW5lcmF0b3Igc28gd2UgY2FuJ3QganVtcCB0
byBpdCBmcm9tIGhlcmUuIEFuZCB0aGUgSUMKKyAgICAgICAgLy8gZ2VuZXJhdG9yIGN1cnJlbnRs
eSBkb2Vzbid0IGtub3cgaG93IHRvIGVtaXQgc3VjaCBhIGJyYW5jaC4gU28sIGZvciBub3csIHdl
IGp1c3QKKyAgICAgICAgLy8gcmVzdHJpY3QgdGhpcyB0byBDZWxsVXNlLgorICAgICAgICBBU1NF
UlQobV9ub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkgPT0gQ2VsbFVzZSk7CisgICAgICAgIAorICAg
ICAgICBMVmFsdWUgYmFzZSA9IGxvd0NlbGwobV9ub2RlLT5jaGlsZDEoKSk7CiAgICAgICAgIAog
ICAgICAgICBTdHJpbmdJbXBsKiB1aWQgPSBtX2dyYXBoLmlkZW50aWZpZXJzKClbbV9ub2RlLT5p
ZGVudGlmaWVyTnVtYmVyKCldOwogICAgICAgICBzZXRKU1ZhbHVlKHZtQ2FsbChtX291dC5vcGVy
YXRpb24ob3BlcmF0aW9uR2V0QnlJZCksIG1fY2FsbEZyYW1lLCBtX291dC5pbnRQdHJaZXJvLCBi
YXNlLCBtX291dC5jb25zdEludFB0cih1aWQpKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZnRsL0ZUTFNsb3dQYXRoQ2FsbEtleS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9mdGwvRlRMU2xvd1BhdGhDYWxsS2V5LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZnRsL0ZUTFNsb3dQYXRoQ2FsbEtleS5oCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsMTIyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAor
ICovCisKKyNpZm5kZWYgRlRMU2xvd1BhdGhDYWxsS2V5X2gKKyNkZWZpbmUgRlRMU2xvd1BhdGhD
YWxsS2V5X2gKKworI2lmIEVOQUJMRShGVExfSklUKQorCisjaW5jbHVkZSAiUmVnaXN0ZXJTZXQu
aCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBGVEwgeworCisvLyBUaGlzIGlzIHVzZWQg
Zm9yIGNyZWF0aW5nIHNvbWUgc2FuaXR5IGluIHNsb3ctcGF0aCBjYWxscyBvdXQgb2YgdGhlIEZU
TCdzIGlubGluZQorLy8gY2FjaGVzLiBUaGUgaWRlYSBpcyB0aGF0IHdlIGRvbid0IHdhbnQgYWxs
IG9mIHRoZSByZWdpc3RlciBzYXZlL3Jlc3RvcmUgc3R1ZmYgdG8KKy8vIGJlIGdlbmVyYXRlZCBh
dCBlYWNoIElDIHNpdGUuIEluc3RlYWQsIHRoZSBJQyBzbG93IHBhdGggY2FsbCBzaXRlIHdpbGwg
anVzdCBzYXZlCisvLyB0aGUgcmVnaXN0ZXJzIG5lZWRlZCBmb3IgdGhlIGFyZ3VtZW50cy4gSXQg
d2lsbCBhcnJhbmdlIGZvciB0aGVyZSB0byBiZSBlbm91Z2gKKy8vIHNwYWNlIG9uIHRvcCBvZiBz
dGFjayB0byBzYXZlIHRoZSByZW1haW5pbmcgcmVnaXN0ZXJzIGFuZCB0aGUgcmV0dXJuIFBDLiBU
aGVuIGl0CisvLyB3aWxsIGNhbGwgYSBzaGFyZWQgdGh1bmsgdGhhdCB3aWxsIHNhdmUgdGhlIHJl
bWFpbmluZyByZWdpc3RlcnMuIFRoYXQgdGh1bmsgbmVlZHMKKy8vIHRvIGtub3cgdGhlIHN0YWNr
IG9mZnNldCBhdCB3aGljaCB0aGluZ3MgZ2V0IHNhdmVkIGFsb25nIHdpdGggdGhlIGNhbGwgdGFy
Z2V0LgorCisvLyBOb3RlIHRoYXQgdGhlIG9mZnNldCBpcyAqbm90IGluY2x1ZGluZyogdGhlIHJl
dHVybiBQQyB0aGF0IHdvdWxkIGJlIHB1c2hlZCBvbiBYODYuCisKK2NsYXNzIFNsb3dQYXRoQ2Fs
bEtleSB7CitwdWJsaWM6CisgICAgU2xvd1BhdGhDYWxsS2V5KCkKKyAgICAgICAgOiBtX2NhbGxU
YXJnZXQoMCkKKyAgICAgICAgLCBtX29mZnNldCgwKQorICAgIHsKKyAgICB9CisgICAgCisgICAg
U2xvd1BhdGhDYWxsS2V5KGNvbnN0IFJlZ2lzdGVyU2V0JiBzZXQsIHZvaWQqIGNhbGxUYXJnZXQs
IHNpemVfdCBvZmZzZXQpCisgICAgICAgIDogbV91c2VkUmVnaXN0ZXJzKHNldCkKKyAgICAgICAg
LCBtX2NhbGxUYXJnZXQoY2FsbFRhcmdldCkKKyAgICAgICAgLCBtX29mZnNldChvZmZzZXQpCisg
ICAgeworICAgIH0KKyAgICAKKyAgICBjb25zdCBSZWdpc3RlclNldCYgdXNlZFJlZ2lzdGVycygp
IGNvbnN0IHsgcmV0dXJuIG1fdXNlZFJlZ2lzdGVyczsgfQorICAgIHZvaWQqIGNhbGxUYXJnZXQo
KSBjb25zdCB7IHJldHVybiBtX2NhbGxUYXJnZXQ7IH0KKyAgICBzaXplX3Qgb2Zmc2V0KCkgY29u
c3QgeyByZXR1cm4gbV9vZmZzZXQ7IH0KKyAgICAKKyAgICBlbnVtIEVtcHR5VmFsdWVUYWcgeyBF
bXB0eVZhbHVlIH07CisgICAgZW51bSBEZWxldGVkVmFsdWVUYWcgeyBEZWxldGVkVmFsdWUgfTsK
KyAgICAKKyAgICBTbG93UGF0aENhbGxLZXkoRW1wdHlWYWx1ZVRhZykKKyAgICAgICAgOiBtX3Vz
ZWRSZWdpc3RlcnMoUmVnaXN0ZXJTZXQ6OkVtcHR5VmFsdWUpCisgICAgICAgICwgbV9jYWxsVGFy
Z2V0KDApCisgICAgICAgICwgbV9vZmZzZXQoMCkKKyAgICB7CisgICAgfQorICAgIAorICAgIFNs
b3dQYXRoQ2FsbEtleShEZWxldGVkVmFsdWVUYWcpCisgICAgICAgIDogbV91c2VkUmVnaXN0ZXJz
KEJpdFZlY3Rvcjo6RGVsZXRlZFZhbHVlKQorICAgICAgICAsIG1fY2FsbFRhcmdldCgwKQorICAg
ICAgICAsIG1fb2Zmc2V0KDApCisgICAgeworICAgIH0KKyAgICAKKyAgICBib29sIGlzRW1wdHlW
YWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdXNlZFJlZ2lzdGVycy5pc0VtcHR5VmFsdWUoKTsgfQor
ICAgIGJvb2wgaXNEZWxldGVkVmFsdWUoKSBjb25zdCB7IHJldHVybiBtX3VzZWRSZWdpc3RlcnMu
aXNEZWxldGVkVmFsdWUoKTsgfQorICAgIAorICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBTbG93
UGF0aENhbGxLZXkmIG90aGVyKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fdXNlZFJlZ2lzdGVy
cyA9PSBvdGhlci5tX3VzZWRSZWdpc3RlcnMKKyAgICAgICAgICAgICYmIG1fY2FsbFRhcmdldCA9
PSBvdGhlci5tX2NhbGxUYXJnZXQ7CisgICAgfQorICAgIHVuc2lnbmVkIGhhc2goKSBjb25zdAor
ICAgIHsKKyAgICAgICAgcmV0dXJuIG1fdXNlZFJlZ2lzdGVycy5oYXNoKCkgXiBQdHJIYXNoPHZv
aWQqPjo6aGFzaChtX2NhbGxUYXJnZXQpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBSZWdpc3Rl
clNldCBtX3VzZWRSZWdpc3RlcnM7CisgICAgdm9pZCogbV9jYWxsVGFyZ2V0OworfTsKKworc3Ry
dWN0IFNsb3dQYXRoQ2FsbEtleUhhc2ggeworICAgIHN0YXRpYyB1bnNpZ25lZCBoYXNoKGNvbnN0
IFNsb3dQYXRoQ2FsbEtleSYga2V5KSB7IHJldHVybiBrZXkuaGFzaCgpOyB9CisgICAgc3RhdGlj
IGJvb2wgZXF1YWwoY29uc3QgU2xvd1BhdGhDYWxsS2V5JiBhLCBjb25zdCBTbG93UGF0aENhbGxL
ZXkmIGIpIHsgcmV0dXJuIGEgPT0gYjsgfQorICAgIHN0YXRpYyBjb25zdCBib29sIHNhZmVUb0Nv
bXBhcmVUb0VtcHR5T3JEZWxldGVkID0gZmFsc2U7Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpT
Qzo6RlRMCisKK25hbWVzcGFjZSBXVEYgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3Qg
RGVmYXVsdEhhc2g7Cit0ZW1wbGF0ZTw+IHN0cnVjdCBEZWZhdWx0SGFzaDxKU0M6OkZUTDo6U2xv
d1BhdGhDYWxsS2V5PiB7CisgICAgdHlwZWRlZiBKU0M6OkZUTDo6U2xvd1BhdGhDYWxsS2V5SGFz
aCBIYXNoOworfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEhhc2hUcmFpdHM7Cit0
ZW1wbGF0ZTw+IHN0cnVjdCBIYXNoVHJhaXRzPEpTQzo6RlRMOjpTbG93UGF0aENhbGxLZXk+IDog
cHVibGljIEN1c3RvbUhhc2hUcmFpdHM8SlNDOjpGVEw6OlNsb3dQYXRoQ2FsbEtleT4geyB9Owor
Cit9IC8vIG5hbWVzcGFjZSBXVEYKKworI2VuZGlmIC8vIEVOQUJMRShGVExfSklUKQorCisjZW5k
aWYgLy8gRlRMU2xvd1BhdGhDYWxsS2V5X2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Z0bC9GVExUaHVua3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9m
dGwvRlRMVGh1bmtzLmNwcAkocmV2aXNpb24gMTU3NzA3KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2Z0bC9GVExUaHVua3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDQsNiArMTQ0LDQwIEBA
IE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBvc3JFeGl0R2VuZXJhdGlvblcKICAgICByZXR1cm4gRklO
QUxJWkVfQ09ERShwYXRjaEJ1ZmZlciwgKCJGVEwgT1NSIGV4aXQgZ2VuZXJhdGlvbiB0aHVuayBm
b3IgY2FsbEZyYW1lIGF0ICVzIiwgdG9DU3RyaW5nKGxvY2F0aW9uKS5kYXRhKCkpKTsKIH0KIAor
TWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHNsb3dQYXRoQ2FsbFRodW5rR2VuZXJhdG9yKFZNJiwgY29u
c3QgU2xvd1BhdGhDYWxsS2V5JiBrZXkpCit7CisgICAgQXNzZW1ibHlIZWxwZXJzIGppdCgmdm0s
IDApOworICAgIAorICAgIC8vIFdlIHdhbnQgdG8gc2F2ZSB0aGUgZ2l2ZW4gcmVnaXN0ZXJzIGF0
IHRoZSBnaXZlbiBvZmZzZXQsIHRoZW4gd2Ugd2FudCB0byBzYXZlIHRoZQorICAgIC8vIG9sZCBy
ZXR1cm4gYWRkcmVzcyBzb21ld2hlcmUgcGFzdCB0aGF0IG9mZnNldCwgYW5kIHRoZW4gZmluYWxs
eSB3ZSB3YW50IHRvIG1ha2UgdGhlCisgICAgLy8gY2FsbC4KKyAgICAKKyAgICBzaXplX3QgY3Vy
cmVudE9mZnNldCA9IGtleS5vZmZzZXQoKSArIHNpemVvZih2b2lkKik7CisgICAgCisjaWYgQ1BV
KFg4NikgfHwgQ1BVKFg4Nl82NCkKKyAgICBjdXJyZW50T2Zmc2V0ICs9IHNpemVvZih2b2lkKik7
CisjZW5kaWYKKyAgICAKKyAgICBmb3IgKE1hY3JvQXNzZW1ibGVyOjpSZWdpc3RlcklEIHJlZyA9
IE1hY3JvQXNzZW1ibGVyOjpmaXJzdFJlZ2lzdGVyKCk7IHJlZyA8PSBNYWNyb0Fzc2VtYmxlcjo6
bGFzdFJlZ2lzdGVyKCk7IHJlZyA9IHN0YXRpY19jYXN0PE1hY3JvQXNzZW1ibGVyOjpSZWdpc3Rl
cklEPihyZWcgKyAxKSkgeworICAgICAgICBpZiAoIWtleS51c2VkUmVnaXN0ZXJzKCkuZ2V0KHJl
ZykpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgaml0LnN0b3JlUHRyKHJlZywgQXNz
ZW1ibHlIZWxwZXJzOjpBZGRyZXNzKE1hY3JvQXNzZW1ibGVyOjpzdGFja1BvaW50ZXJSZWdpc3Rl
ciwgY3VycmVudE9mZnNldCkpOworICAgICAgICBjdXJyZW50T2Zmc2V0ICs9IHNpemVvZih2b2lk
Kik7CisgICAgfQorICAgIAorICAgIGZvciAoTWFjcm9Bc3NlbWJsZXI6OkZQUmVnaXN0ZXJJRCBy
ZWcgPSBNYWNyb0Fzc2VtYmxlcjo6Zmlyc3RGUFJlZ2lzdGVyKCk7IHJlZyA8PSBNYWNyb0Fzc2Vt
Ymxlcjo6bGFzdEZQUmVnaXN0ZXIoKTsgcmVnID0gc3RhdGljX2Nhc3Q8TWFjcm9Bc3NlbWJsZXI6
OkZQUmVnaXN0ZXJJRD4ocmVnICsgMSkpIHsKKyAgICAgICAgaWYgKCFrZXkudXNlZFJlZ2lzdGVy
cygpLmdldChyZWcpKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIGppdC5zdG9yZURv
dWJsZShyZWcsIEFzc2VtYmx5SGVscGVyczo6QWRkcmVzcyhNYWNyb0Fzc2VtYmxlcjo6c3RhY2tQ
b2ludGVyUmVnaXN0ZXIsIGN1cnJlbnRPZmZzZXQpKTsKKyAgICAgICAgY3VycmVudE9mZnNldCAr
PSBzaXplb2YoZG91YmxlKTsKKyAgICB9CisgICAgCisgICAgaml0LnByZXNlcnZlUmV0dXJuQWRk
cmVzc0FmdGVyQ2FsbChHUFJJbmZvOjpub25BcmdHUFIwKTsKKyAgICBqaXQuc3RvcmVQdHIoR1BS
SW5mbzo6bm9uQXJnR1BSMCwgQXNzZW1ibHlIZWxwZXJzOjpBZGRyZXNzKE1hY3JvQXNzZW1ibGVy
OjpzdGFja1BvaW50ZXJSZWdpc3Rlciwga2V5Lm9mZnNldCgpKSk7CisgICAgCisgICAgCit9CisK
IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpGVEwKIAogI2VuZGlmIC8vIEVOQUJMRShGVExfSklUKQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExUaHVua3MuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFRodW5rcy5oCShyZXZpc2lvbiAxNTc3MDcp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFRodW5rcy5oCSh3b3JraW5nIGNvcHkp
CkBAIC0zMSw2ICszMSw3IEBACiAjaWYgRU5BQkxFKEZUTF9KSVQpCiAKICNpbmNsdWRlICJGVExM
b2NhdGlvbi5oIgorI2luY2x1ZGUgIkZUTFNsb3dQYXRoQ2FsbEtleS5oIgogI2luY2x1ZGUgIk1h
Y3JvQXNzZW1ibGVyQ29kZVJlZi5oIgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAKQEAgLTQz
LDYgKzQ0LDcgQEAgbmFtZXNwYWNlIEZUTCB7CiBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgb3NyRXhp
dEdlbmVyYXRpb25XaXRob3V0U3RhY2tNYXBUaHVua0dlbmVyYXRvcihWTSopOwogCiBNYWNyb0Fz
c2VtYmxlckNvZGVSZWYgb3NyRXhpdEdlbmVyYXRpb25XaXRoU3RhY2tNYXBUaHVua0dlbmVyYXRv
cihWTSYsIGNvbnN0IExvY2F0aW9uJik7CitNYWNyb0Fzc2VtYmxlckNvZGVSZWYgc2xvd1BhdGhD
YWxsVGh1bmtHZW5lcmF0b3IoVk0mLCBjb25zdCBTbG93UGF0aENhbGxLZXkmKTsKIAogdGVtcGxh
dGU8dHlwZW5hbWUgTWFwVHlwZSwgdHlwZW5hbWUgS2V5VHlwZSwgdHlwZW5hbWUgR2VuZXJhdG9y
VHlwZT4KIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBnZW5lcmF0ZUlmTmVjZXNzYXJ5KApAQCAtNjUs
OCArNjcsMTUgQEAgcHVibGljOgogICAgICAgICAgICAgdm0sIG1fb3NyRXhpdFRodW5rcywgbG9j
YXRpb24sIG9zckV4aXRHZW5lcmF0aW9uV2l0aFN0YWNrTWFwVGh1bmtHZW5lcmF0b3IpOwogICAg
IH0KICAgICAKKyAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgZ2V0U2xvd1BhdGhDYWxsVGh1bmso
Vk0mIHZtLCBjb25zdCBTbG93UGF0aENhbGxLZXkmIGtleSkKKyAgICB7CisgICAgICAgIHJldHVy
biBnZW5lcmF0ZUlmTmVjZXNzYXJ5KAorICAgICAgICAgICAgdm0sIG1fc2xvd1BhdGhDYWxsVGh1
bmtzLCBrZXksIHNsb3dQYXRoQ2FsbFRodW5rR2VuZXJhdG9yKTsKKyAgICB9CisgICAgCiBwcml2
YXRlOgogICAgIEhhc2hNYXA8TG9jYXRpb24sIE1hY3JvQXNzZW1ibGVyQ29kZVJlZj4gbV9vc3JF
eGl0VGh1bmtzOworICAgIEhhc2hNYXA8U2xvd1BhdGhDYWxsS2V5LCBNYWNyb0Fzc2VtYmxlckNv
ZGVSZWY+IG1fc2xvd1BhdGhDYWxsVGh1bmtzOwogfTsKIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6
OkZUTApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9HUFJJbmZvLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9HUFJJbmZvLmgJKHJldmlzaW9uIDE1Nzcw
NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvR1BSSW5mby5oCSh3b3JraW5nIGNvcHkp
CkBAIC0zNzgsNyArMzc4LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBjb25zdCBHUFJSZWcgcmV0
dXJuVmFsdWVHUFIgPSBYODZSZWdpc3RlcnM6OmVheDsgLy8gcmVnVDAKICAgICBzdGF0aWMgY29u
c3QgR1BSUmVnIHJldHVyblZhbHVlR1BSMiA9IFg4NlJlZ2lzdGVyczo6ZWR4OyAvLyByZWdUMQog
ICAgIHN0YXRpYyBjb25zdCBHUFJSZWcgbm9uUHJlc2VydmVkTm9uUmV0dXJuR1BSID0gWDg2UmVn
aXN0ZXJzOjplc2k7Ci0KKyAgICAKICAgICBzdGF0aWMgR1BSUmVnIHRvUmVnaXN0ZXIodW5zaWdu
ZWQgaW5kZXgpCiAgICAgewogICAgICAgICBBU1NFUlQoaW5kZXggPCBudW1iZXJPZlJlZ2lzdGVy
cyk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZUNhY2hlR2VuZXJh
dG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGlu
ZUNhY2hlR2VuZXJhdG9yLmNwcAkocmV2aXNpb24gMTU3NzA3KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRJbmxpbmVDYWNoZUdlbmVyYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTM0LDEwICszNCwxNiBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAorc3RhdGljIFN0cnVjdHVyZVN0
dWJJbmZvKiBnYXJiYWdlU3R1YkluZm8oKQoreworICAgIHN0YXRpYyBTdHJ1Y3R1cmVTdHViSW5m
byBzdHViSW5mbzsKKyAgICByZXR1cm4gJnN0dWJJbmZvOworfQorCiBKSVRJbmxpbmVDYWNoZUdl
bmVyYXRvcjo6SklUSW5saW5lQ2FjaGVHZW5lcmF0b3IoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIENv
ZGVPcmlnaW4gY29kZU9yaWdpbikKICAgICA6IG1fY29kZUJsb2NrKGNvZGVCbG9jaykKIHsKLSAg
ICBtX3N0dWJJbmZvID0gbV9jb2RlQmxvY2stPmFkZFN0dWJJbmZvKCk7CisgICAgbV9zdHViSW5m
byA9IG1fY29kZUJsb2NrID8gbV9jb2RlQmxvY2stPmFkZFN0dWJJbmZvKCkgOiBnYXJiYWdlU3R1
YkluZm8oKTsKICAgICBtX3N0dWJJbmZvLT5jb2RlT3JpZ2luID0gY29kZU9yaWdpbjsKIH0KIApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVDYWNoZUdlbmVyYXRvci5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lQ2FjaGVH
ZW5lcmF0b3IuaAkocmV2aXNpb24gMTU3NzA3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRJbmxpbmVDYWNoZUdlbmVyYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC02Niw2ICs2Niw3
IEBAIHB1YmxpYzoKICAgICAgICAgbV9jYWxsID0gY2FsbDsKICAgICB9CiAgICAgCisgICAgTWFj
cm9Bc3NlbWJsZXI6OlBhdGNoYWJsZUp1bXAgc2xvd1BhdGhQYXRjaGFibGVKdW1wKCkgY29uc3Qg
eyByZXR1cm4gbV9zdHJ1Y3R1cmVDaGVjazsgfQogICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIHNs
b3dQYXRoSnVtcCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RydWN0dXJlQ2hlY2subV9qdW1wOyB9CiAK
ICAgICB2b2lkIGZpbmFsaXplKExpbmtCdWZmZXImKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvUmVnaXN0ZXJTZXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvUmVnaXN0ZXJTZXQuY3BwCShyZXZpc2lvbiAxNTc3MDcpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L1JlZ2lzdGVyU2V0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDYsNiAr
NDYsMjMgQEAgUmVnaXN0ZXJTZXQgUmVnaXN0ZXJTZXQ6OnNwZWNpYWxSZWdpc3RlcgogICAgIHJl
dHVybiByZXN1bHQ7CiB9CiAKK1JlZ2lzdGVyU2V0IFJlZ2lzdGVyU2V0OjpjYWxsZWVTYXZlUmVn
aXN0ZXJzKCkKK3sKKyAgICBSZWdpc3RlclNldCByZXN1bHQ7CisjaWYgVVNFKFg4Nl82NCkKKyAg
ICByZXN1bHQuc2V0KFg4NlJlZ2lzdGVyczo6cmJ4KTsKKyAgICByZXN1bHQuc2V0KFg4NlJlZ2lz
dGVyczo6cmJwKTsKKyAgICByZXN1bHQuc2V0KFg4NlJlZ2lzdGVyczo6cjEwKTsKKyAgICByZXN1
bHQuc2V0KFg4NlJlZ2lzdGVyczo6cjEyKTsKKyAgICByZXN1bHQuc2V0KFg4NlJlZ2lzdGVyczo6
cjEzKTsKKyAgICByZXN1bHQuc2V0KFg4NlJlZ2lzdGVyczo6cjE0KTsKKyAgICByZXN1bHQuc2V0
KFg4NlJlZ2lzdGVyczo6cjE1KTsKKyNlbHNlCisjZXJyb3IgIlVuc3VwcG9ydGVkIGluc3RydWN0
aW9uIHNldCIKKyNlbmRpZgorICAgIHJldHVybiByZXN1bHQ7Cit9CisKIH0gLy8gbmFtZXNwYWNl
IEpTQwogCiAjZW5kaWYgLy8gRU5BQkxFKEpJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvUmVnaXN0ZXJTZXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L1JlZ2lzdGVyU2V0LmgJKHJldmlzaW9uIDE1NzcwNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvUmVnaXN0ZXJTZXQuaAkod29ya2luZyBjb3B5KQpAQCAtNDMsNiArNDMsNyBAQCBw
dWJsaWM6CiAgICAgUmVnaXN0ZXJTZXQoKSB7IH0KICAgICAKICAgICBzdGF0aWMgUmVnaXN0ZXJT
ZXQgc3BlY2lhbFJlZ2lzdGVycygpOworICAgIHN0YXRpYyBSZWdpc3RlclNldCBjYWxsZWVTYXZl
UmVnaXN0ZXJzKCk7CiAKICAgICB2b2lkIHNldChHUFJSZWcgcmVnLCBib29sIHZhbHVlID0gdHJ1
ZSkKICAgICB7CkBAIC03NiwxMyArNzcsNTMgQEAgcHVibGljOgogICAgIGJvb2wgZ2V0KEZQUlJl
ZyByZWcpIGNvbnN0IHsgcmV0dXJuIG1fdmVjdG9yLmdldChNYWNyb0Fzc2VtYmxlcjo6cmVnaXN0
ZXJJbmRleChyZWcpKTsgfQogICAgIAogICAgIHZvaWQgbWVyZ2UoY29uc3QgUmVnaXN0ZXJTZXQm
IG90aGVyKSB7IG1fdmVjdG9yLm1lcmdlKG90aGVyLm1fdmVjdG9yKTsgfQorICAgIHZvaWQgZXhj
bHVkZShjb25zdCBSZWdpc3RlclNldCYgb3RoZXIpIHsgbV92ZWN0b3IuZXhjbHVkZShvdGhlci5t
X3ZlY3Rvcik7IH0KKyAgICAKKyAgICBzaXplX3QgbnVtYmVyT2ZTZXRSZWdpc3RlcnMoKSBjb25z
dCB7IHJldHVybiBtX3ZlY3Rvci5iaXRDb3VudCgpOyB9CisgICAgCisgICAgZW51bSBFbXB0eVZh
bHVlVGFnIHsgRW1wdHlWYWx1ZSB9OworICAgIGVudW0gRGVsZXRlZFZhbHVlVGFnIHsgRGVsZXRl
ZFZhbHVlIH07CisgICAgCisgICAgUmVnaXN0ZXJTZXQoRW1wdHlWYWx1ZVRhZykKKyAgICAgICAg
OiBtX3ZlY3RvcihCaXRWZWN0b3I6OkVtcHR5VmFsdWUpCisgICAgeworICAgIH0KKyAgICAKKyAg
ICBSZWdpc3RlclNldChEZWxldGVkVmFsdWVUYWcpCisgICAgICAgIDogbV92ZWN0b3IoQml0VmVj
dG9yOjpEZWxldGVkVmFsdWUpCisgICAgeworICAgIH0KKyAgICAKKyAgICBib29sIGlzRW1wdHlW
YWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdmVjdG9yLmlzRW1wdHlWYWx1ZSgpOyB9CisgICAgYm9v
bCBpc0RlbGV0ZWRWYWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdmN0b3IuaXNEZWxldGVkVmFsdWUo
KTsgfQorICAgIAorICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBSZWdpc3RlclNldCYgb3RoZXIp
IHsgcmV0dXJuIG1fdmVjdG9yID09IG90aGVyLm1fdmVjdG9yOyB9CisgICAgdW5zaWduZWQgaGFz
aCgpIGNvbnN0IHsgcmV0dXJuIG1fdmVjdG9yLmhhc2goKTsgfQogICAgIAogcHJpdmF0ZToKICAg
ICBCaXRWZWN0b3IgbV92ZWN0b3I7CiB9OwogCitzdHJ1Y3QgUmVnaXN0ZXJTZXRIYXNoIHsKKyAg
ICBzdGF0aWMgdW5zaWduZWQgaGFzaChjb25zdCBSZWdpc3RlclNldCYgc2V0KSB7IHJldHVybiBz
ZXQuaGFzaCgpOyB9CisgICAgc3RhdGljIGJvb2wgZXF1YWwoY29uc3QgUmVnaXN0ZXJTZXQmIGEs
IGNvbnN0IFJlZ2lzdGVyU2V0JiBiKSB7IHJldHVybiBhID09IGI7IH0KKyAgICBzdGF0aWMgY29u
c3QgYm9vbCBzYWZlVG9Db21wYXJlVG9FbXB0eU9yRGVsZXRlZCA9IGZhbHNlOworfTsKKwogfSAv
LyBuYW1lc3BhY2UgSlNDCiAKK25hbWVzcGFjZSBXVEYgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBU
PiBzdHJ1Y3QgRGVmYXVsdEhhc2g7Cit0ZW1wbGF0ZTw+IHN0cnVjdCBEZWZhdWx0SGFzaDxKU0M6
OlJlZ2lzdGVyU2V0PiB7CisgICAgdHlwZWRlZiBSZWdpc3RlclNldEhhc2ggSGFzaDsKK307CisK
K3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBIYXNoVHJhaXRzOwordGVtcGxhdGU8PiBzdHJ1
Y3QgSGFzaFRyYWl0czxKU0M6OlJlZ2lzdGVyU2V0PiA6IHB1YmxpYyBDdXN0b21IYXNoVHJhaXRz
PEpTQzo6UmVnaXN0ZXJTZXQ+IHsgfTsKKworfSAvLyBuYW1lc3BhY2UgV1RGCisKICNlbmRpZiAv
LyBFTkFCTEUoSklUKQogCiAjZW5kaWYgLy8gUmVnaXN0ZXJTZXRfaApJbmRleDogU291cmNlL1dU
Ri93dGYvQml0VmVjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9CaXRWZWN0
b3IuY3BwCShyZXZpc2lvbiAxNTc3MDcpCisrKyBTb3VyY2UvV1RGL3d0Zi9CaXRWZWN0b3IuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xMjQsNiArMTI0LDU3IEBAIHZvaWQgQml0VmVjdG9yOjptZXJn
ZVNsb3coY29uc3QgQml0VmVjdG8KICAgICAgICAgYS0+Yml0cygpW2ldIHw9IGItPmJpdHMoKVtp
XTsKIH0KIAordm9pZCBCaXRWZWN0b3I6OmV4Y2x1ZGVTbG93KGNvbnN0IEJpdFZlY3RvciYgb3Ro
ZXIpCit7CisgICAgaWYgKG90aGVyLmlzSW5saW5lKCkpIHsKKyAgICAgICAgQVNTRVJUKCFpc0lu
bGluZSgpKTsKKyAgICAgICAgKmJpdHMoKSAmPSB+Y2xlYW5zZUlubGluZUJpdHMob3RoZXIubV9i
aXRzT3JQb2ludGVyKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBpZiAoaXNJ
bmxpbmUoKSkgeworICAgICAgICBBU1NFUlQoIW90aGVyLmlzSW5saW5lKCkpOworICAgICAgICBt
X2JpdHNPclBvaW50ZXIgJj0gfipvdGhlci5vdXRPZkxpbmVCaXRzKCk7CisgICAgICAgIG1fYml0
c09yUG9pbnRlciB8PSAoc3RhdGljX2Nhc3Q8dWludHB0cl90PigxKSA8PCBtYXhJbmxpbmVCaXRz
KCkpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIE91dE9mTGluZUJpdHMqIGEg
PSBvdXRPZkxpbmVCaXRzKCk7CisgICAgY29uc3QgT3V0T2ZMaW5lQml0cyogYiA9IG90aGVyLm91
dE9mTGluZUJpdHMoKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSBzdGQ6Om1pbihhLT5udW1Xb3Jk
cygpLCBiLT5udW1Xb3JkcygpKTsgaS0tOykKKyAgICAgICAgYS0+Yml0cygpW2ldICY9IH5iLT5i
aXRzKClbaV07Cit9CisKK3NpemVfdCBCaXRWZWN0b3I6OmJpdENvdW50U2xvdygpIGNvbnN0Cit7
CisgICAgQVNTRVJUKCFpc0lubGluZSgpKTsKKyAgICBjb25zdCBPdXRPZkxpbmVCaXRzKiBiaXRz
ID0gb3V0T2ZMaW5lQml0cygpOworICAgIHNpemVfdCByZXN1bHQgPSAwOworICAgIGZvciAodW5z
aWduZWQgaSA9IGJpdHMtPm51bVdvcmRzKCk7IGktLTspCisgICAgICAgIHJlc3VsdCArPSBiaXRD
b3VudChiaXRzLT5iaXRzKClbaV0pOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK2Jvb2wgQml0
VmVjdG9yOjplcXVhbHNTbG93Q2FzZShjb25zdCBCaXRWZWN0b3ImIG90aGVyKSBjb25zdAorewor
ICAgIC8vIFRoaXMgaXMgcmVhbGx5IGNoZWVzeSwgYnV0IHByb2JhYmx5IGdvb2QgZW5vdWdoIGZv
ciBub3cuCisgICAgZm9yICh1bnNpZ25lZCBpID0gc3RkOjptYXgoc2l6ZSgpLCBvdGhlci5zaXpl
KCkpOyBpLS07KSB7CisgICAgICAgIGlmIChnZXQoaSkgIT0gb3RoZXIuZ2V0KGkpKQorICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordWludHB0
cl90IEJpdFZlY3Rvcjo6aGFzaFNsb3dDYXNlKCkgY29uc3QKK3sKKyAgICBBU1NFUlQoIWlzSW5s
aW5lKCkpOworICAgIGNvbnN0IE91dE9mTGluZUJpdHMqIGJpdHMgPSBvdXRPZkxpbmVCaXRzKCk7
CisgICAgdWludHB0cl90IHJlc3VsdCA9IDA7CisgICAgZm9yICh1bnNpZ25lZCBpID0gYml0cy0+
bnVtV29yZHMoKTsgaS0tOykKKyAgICAgICAgcmVzdWx0IF49IGJpdHMtPmJpdHMoKVtpXTsKKyAg
ICByZXR1cm4gcmVzdWx0OworfQorCiB2b2lkIEJpdFZlY3Rvcjo6ZHVtcChQcmludFN0cmVhbSYg
b3V0KQogewogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZSgpOyArK2kpIHsKSW5kZXg6
IFNvdXJjZS9XVEYvd3RmL0JpdFZlY3Rvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3Rm
L0JpdFZlY3Rvci5oCShyZXZpc2lvbiAxNTc3MDcpCisrKyBTb3VyY2UvV1RGL3d0Zi9CaXRWZWN0
b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMTc4LDggKzE3OCw2MCBAQCBwdWJsaWM6IAogICAgICAg
ICBtX2JpdHNPclBvaW50ZXIgfD0gb3RoZXIubV9iaXRzT3JQb2ludGVyOwogICAgIH0KICAgICAK
KyAgICB2b2lkIGV4Y2x1ZGUoY29uc3QgQml0VmVjdG9yJiBvdGhlcikKKyAgICB7CisgICAgICAg
IGlmICghaXNJbmxpbmUoKSB8fCAhb3RoZXIuaXNJbmxpbmUoKSkgeworICAgICAgICAgICAgZXhj
bHVkZVNsb3cob3RoZXIpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAg
IG1fYml0c09yUG9pbnRlciAmPSB+b3RoZXIubV9iaXRzT3JQb2ludGVyOworICAgIH0KKyAgICAK
KyAgICBzaXplX3QgYml0Q291bnQoKSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKGlzSW5saW5l
KCkpCisgICAgICAgICAgICByZXR1cm4gYml0Q291bnQoY2xlYW5zZUlubGluZUJpdHMobV9iaXRz
T3JQb2ludGVyKSk7CisgICAgICAgIHJldHVybiBiaXRDb3VudFNsb3coKTsKKyAgICB9CisgICAg
CiAgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJiBvdXQpOwogICAgIAorICAgIGVudW0gRW1wdHlW
YWx1ZVRhZyB7IEVtcHR5VmFsdWUgfTsKKyAgICBlbnVtIERlbGV0ZWRWYWx1ZVRhZyB7IERlbGV0
ZWRWYWx1ZSB9OworICAgIAorICAgIEJpdFZlY3RvcihFbXB0eVZhbHVlVGFnKQorICAgICAgICA6
IG1fYml0c09yUG9pbnRlcigwKQorICAgIHsKKyAgICB9CisgICAgCisgICAgQml0VmVjdG9yKERl
bGV0ZWRWYWx1ZVRhZykKKyAgICAgICAgOiBtX2JpdHNPclBvaW50ZXIoMSkKKyAgICB7CisgICAg
fQorICAgIAorICAgIGJvb2wgaXNFbXB0eVZhbHVlKCkgY29uc3QgeyByZXR1cm4gIW1fYml0c09y
UG9pbnRlcjsgfQorICAgIGJvb2wgaXNEZWxldGVkVmFsdWUoKSBjb25zdCB7IHJldHVybiBtX2Jp
dHNPclBvaW5lciA9PSAxOyB9CisgICAgCisgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEJpdFZl
Y3RvciYgb3RoZXIpCisgICAgeworICAgICAgICBpZiAoaXNJbmxpbmUoKSAmJiBvdGhlci5pc0lu
bGluZSgpKQorICAgICAgICAgICAgcmV0dXJuIG1fYml0c09yUG9pbnRlciA9PSBvdGhlci5tX2Jp
dHNPclBvaW50ZXI7CisgICAgICAgIHJldHVybiBlcXVhbHNTbG93Q2FzZShvdGhlcik7CisgICAg
fQorICAgIAorICAgIHVuc2lnbmVkIGhhc2goKSBjb25zdAorICAgIHsKKyAgICAgICAgLy8gVGhp
cyBpcyBhIHZlcnkgc2ltcGxlIGhhc2guIEp1c3QgeG9yIHRvZ2V0aGVyIHRoZSB3b3JkcyB0aGF0
IGhvbGQgdGhlIHZhcmlvdXMKKyAgICAgICAgLy8gYml0cyBhbmQgdGhlbiBjb21wdXRlIHRoZSBo
YXNoLiBUaGlzIG1ha2VzIGl0IHZlcnkgZWFzeSB0byBkZWFsIHdpdGggYml0dmVjdG9ycworICAg
ICAgICAvLyB0aGF0IGhhdmUgYSBsb3Qgb2YgdHJhaWxpbmcgemVybydzLgorICAgICAgICB1aW50
cHRyX3QgdmFsdWU7CisgICAgICAgIGlmIChpc0lubGluZSgpKQorICAgICAgICAgICAgdmFsdWUg
PSBjbGVhbnNlSW5saW5lQml0cyhtX2JpdHNPclBvaW50ZXIpOworICAgICAgICBlbHNlCisgICAg
ICAgICAgICB2YWx1ZSA9IGhhc2hTbG93Q2FzZSgpOworICAgICAgICByZXR1cm4gSW50SGFzaDx1
aW50cHRyX3Q+OjpoYXNoKHZhbHVlKTsKKyAgICB9CisgICAgCiBwcml2YXRlOgogICAgIHN0YXRp
YyB1bnNpZ25lZCBiaXRzSW5Qb2ludGVyKCkKICAgICB7CkBAIC0yMDcsNiArMjU5LDE0IEBAIHBy
aXZhdGU6CiAgICAgICAgIHJldHVybiBiaXRzICYgfihzdGF0aWNfY2FzdDx1aW50cHRyX3Q+KDEp
IDw8IG1heElubGluZUJpdHMoKSk7CiAgICAgfQogICAgIAorICAgIHN0YXRpYyBzaXplX3QgYml0
Q291bnQodWludHB0cl90IGJpdHMpCisgICAgeworICAgICAgICBpZiAoc2l6ZW9mKHVpbnRwdHJf
dCkgPT0gNCkKKyAgICAgICAgICAgIHJldHVybiBXVEY6OmJpdENvdW50KHN0YXRpY19jYXN0PHVu
c2lnbmVkPihiaXRzKSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJldHVybiBXVEY6OmJp
dENvdW50KHN0YXRpY19jYXN0PHVpbnQ2NF90PihiaXRzKSk7CisgICAgfQorICAgIAogICAgIGNs
YXNzIE91dE9mTGluZUJpdHMgewogICAgIHB1YmxpYzoKICAgICAgICAgc2l6ZV90IG51bUJpdHMo
KSBjb25zdCB7IHJldHVybiBtX251bUJpdHM7IH0KQEAgLTIzNiw2ICsyOTYsMTIgQEAgcHJpdmF0
ZToKICAgICBXVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBzZXRTbG93KGNvbnN0IEJpdFZlY3RvciYg
b3RoZXIpOwogICAgIAogICAgIFdURl9FWFBPUlRfUFJJVkFURSB2b2lkIG1lcmdlU2xvdyhjb25z
dCBCaXRWZWN0b3ImIG90aGVyKTsKKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBleGNsdWRl
U2xvdyhjb25zdCBCaXRWZWN0b3ImIG90aGVyKTsKKyAgICAKKyAgICBXVEZfRVhQT1JUX1BSSVZB
VEUgc2l6ZV90IGJpdENvdW50U2xvdygpIGNvbnN0OworICAgIAorICAgIFdURl9FWFBPUlRfUFJJ
VkFURSBib29sIGVxdWFsc1Nsb3dDYXNlKGNvbnN0IEJpdFZlY3RvciYgb3RoZXIpIGNvbnN0Owor
ICAgIFdURl9FWFBPUlRfUFJJVkFURSB1aW50cHRyX3QgaGFzaFNsb3dDYXNlKCkgY29uc3Q7CiAg
ICAgCiAgICAgdWludHB0cl90KiBiaXRzKCkKICAgICB7CkBAIC0yNTQsNiArMzIwLDIwIEBAIHBy
aXZhdGU6CiAgICAgdWludHB0cl90IG1fYml0c09yUG9pbnRlcjsKIH07CiAKK3N0cnVjdCBCaXRW
ZWN0b3JIYXNoIHsKKyAgICBzdGF0aWMgdW5zaWduZWQgaGFzaChjb25zdCBCaXRWZWN0b3ImIHZl
Y3RvcikgeyByZXR1cm4gdmVjdG9yLmhhc2goKTsgfQorICAgIHN0YXRpYyBib29sIGVxdWFsKGNv
bnN0IEJpdFZlY3RvciYgYSwgY29uc3QgQml0VmVjdG9yJiBiKSB7IHJldHVybiBhID09IGI7IH0K
KyAgICBzdGF0aWMgY29uc3QgYm9vbCBzYWZlVG9Db21wYXJlVG9FbXB0eU9yRGVsZXRlZCA9IGZh
bHNlOworfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IERlZmF1bHRIYXNoOwordGVt
cGxhdGU8PiBzdHJ1Y3QgRGVmYXVsdEhhc2g8Qml0VmVjdG9yPiB7CisgICAgdHlwZWRlZiBCaXRW
ZWN0b3JIYXNoIEhhc2g7Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgSGFzaFRy
YWl0czsKK3RlbXBsYXRlPD4gc3RydWN0IEhhc2hUcmFpdHM8Qml0VmVjdG9yPiA6IHB1YmxpYyBD
dXN0b21IYXNoVHJhaXRzPEJpdFZlY3Rvcj4geyB9OworCiB9IC8vIG5hbWVzcGFjZSBXVEYKIAog
dXNpbmcgV1RGOjpCaXRWZWN0b3I7CkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9IYXNoVHJhaXRzLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvSGFzaFRyYWl0cy5oCShyZXZpc2lvbiAxNTc3
MDcpCisrKyBTb3VyY2UvV1RGL3d0Zi9IYXNoVHJhaXRzLmgJKHdvcmtpbmcgY29weSkKQEAgLTIx
Niw2ICsyMTYsMzQgQEAgc3RydWN0IE51bGxhYmxlSGFzaFRyYWl0cyA6IHB1YmxpYyBIYXNoVAog
ICAgIHN0YXRpYyBUIGVtcHR5VmFsdWUoKSB7IHJldHVybiByZWludGVycHJldF9jYXN0PFQ+KDEp
OyB9CiB9OwogCisvLyBVc2VmdWwgZm9yIGNsYXNzZXMgdGhhdCB3YW50IGNvbXBsZXRlIGNvbnRy
b2wgb3ZlciB3aGF0IGlzIGVtcHR5IGFuZCB3aGF0IGlzIGRlbGV0ZWQsCisvLyBhbmQgaG93IHRv
IGNvbnN0cnVjdCBib3RoLgordGVtcGxhdGU8dHlwZW5hbWUgVD4KK3N0cnVjdCBDdXN0b21IYXNo
VHJhaXRzIHsKKyAgICBzdGF0aWMgY29uc3QgYm9vbCBlbXB0eVZhbHVlSXNaZXJvID0gZmFsc2U7
CisgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzSXNFbXB0eVZhbHVlRnVuY3Rpb24gPSB0cnVlOwor
ICAgIAorICAgIHN0YXRpYyB2b2lkIGNvbnN0cnVjdERlbGV0ZWRWYWx1ZShUJiBzbG90KQorICAg
IHsKKyAgICAgICAgbmV3IChOb3ROdWxsLCAmc2xvdCkgVChUOjpEZWxldGVkVmFsdWUpOworICAg
IH0KKyAgICAKKyAgICBzdGF0aWMgYm9vbCBpc0RlbGV0ZWRWYWx1ZShjb25zdCBUJiB2YWx1ZSkK
KyAgICB7CisgICAgICAgIHJldHVybiB2YWx1ZS5pc0RlbGV0ZWRWYWx1ZSgpOworICAgIH0KKyAg
ICAKKyAgICBzdGF0aWMgVCBlbXB0eVZhbHVlKCkKKyAgICB7CisgICAgICAgIHJldHVybiBUKFQ6
OkVtcHR5VmFsdWUpOworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgYm9vbCBpc0VtcHR5VmFsdWUo
Y29uc3QgVCYgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gdmFsdWUuaXNFbXB0eVZhbHVl
KCk7CisgICAgfQorfTsKKwogfSAvLyBuYW1lc3BhY2UgV1RGCiAKIHVzaW5nIFdURjo6SGFzaFRy
YWl0czsKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL1N0ZExpYkV4dHJhcy5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XVEYvd3RmL1N0ZExpYkV4dHJhcy5oCShyZXZpc2lvbiAxNTc3MDcpCisrKyBTb3Vy
Y2UvV1RGL3d0Zi9TdGRMaWJFeHRyYXMuaAkod29ya2luZyBjb3B5KQpAQCAtMTU3LDYgKzE1Nywx
MSBAQCBpbmxpbmUgc2l6ZV90IGJpdENvdW50KHVuc2lnbmVkIGJpdHMpCiAgICAgcmV0dXJuICgo
KGJpdHMgKyAoYml0cyA+PiA0KSkgJiAweEYwRjBGMEYpICogMHgxMDEwMTAxKSA+PiAyNDsKIH0K
IAoraW5saW5lIHNpemVfdCBiaXRDb3VudCh1aW50NjRfdCBiaXRzKQoreworICAgIHJldHVybiBi
aXRDb3VudChzdGF0aWNfY2FzdDx1bnNpZ25lZD4oYml0cykpICsgYml0Q291bnQoc3RhdGljX2Nh
c3Q8dW5zaWduZWQ+KGJpdHMgPj4gMzIpKTsKK30KKwogLy8gTWFjcm8gdGhhdCByZXR1cm5zIGEg
Y29tcGlsZSB0aW1lIGNvbnN0YW50IHdpdGggdGhlIGxlbmd0aCBvZiBhbiBhcnJheSwgYnV0IGdp
dmVzIGFuIGVycm9yIGlmIHBhc3NlZCBhIG5vbi1hcnJheS4KIHRlbXBsYXRlPHR5cGVuYW1lIFQs
IHNpemVfdCBTaXplPiBjaGFyICgmQXJyYXlMZW5ndGhIZWxwZXJGdW5jdGlvbihUICgmKVtTaXpl
XSkpW1NpemVdOwogLy8gR0NDIG5lZWRzIHNvbWUgaGVscCB0byBkZWR1Y2UgYSAwIGxlbmd0aCBh
cnJheS4K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>214795</attachid>
            <date>2013-10-21 16:58:47 -0700</date>
            <delta_ts>2013-10-21 19:13:30 -0700</delta_ts>
            <desc>more!</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>40873</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTGlua0J1ZmZlci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9MaW5rQnVmZmVyLmNw
cAkocmV2aXNpb24gMTU3NzA3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9M
aW5rQnVmZmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDEyLCAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTUxLDYgKzE1MSwxNSBAQCB2b2lkIExpbmtC
dWZmZXI6OmxpbmtDb2RlKHZvaWQqIG93bmVyVUlECiAKIHZvaWQgTGlua0J1ZmZlcjo6YWxsb2Nh
dGUoc2l6ZV90IGluaXRpYWxTaXplLCB2b2lkKiBvd25lclVJRCwgSklUQ29tcGlsYXRpb25FZmZv
cnQgZWZmb3J0KQogeworICAgIGlmIChtX2NvZGUpIHsKKyAgICAgICAgaWYgKGluaXRpYWxTaXpl
ID4gbV9zaXplKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICAgICAgbV9kaWRB
bGxvY2F0ZSA9IHRydWU7CisgICAgICAgIG1fc2l6ZSA9IGluaXRpYWxTaXplOworICAgICAgICBy
ZXR1cm47CisgICAgfQorICAgIAogICAgIG1fZXhlY3V0YWJsZU1lbW9yeSA9IG1fdm0tPmV4ZWN1
dGFibGVBbGxvY2F0b3IuYWxsb2NhdGUoKm1fdm0sIGluaXRpYWxTaXplLCBvd25lclVJRCwgZWZm
b3J0KTsKICAgICBpZiAoIW1fZXhlY3V0YWJsZU1lbW9yeSkKICAgICAgICAgcmV0dXJuOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9MaW5rQnVmZmVyLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9MaW5rQnVmZmVyLmgJKHJldmlz
aW9uIDE1NzcwNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTGlua0J1ZmZl
ci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykg
MjAwOSwgMjAxMCwgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMDksIDIwMTAsIDIwMTIsIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC05NCw2ICs5NCwyMiBA
QCBwdWJsaWM6CiAgICAgICAgIGxpbmtDb2RlKG93bmVyVUlELCBlZmZvcnQpOwogICAgIH0KIAor
ICAgIExpbmtCdWZmZXIoVk0mIHZtLCBNYWNyb0Fzc2VtYmxlciogbWFzbSwgdm9pZCogY29kZSwg
c2l6ZV90IHNpemUpCisgICAgICAgIDogbV9zaXplKHNpemUpCisjaWYgRU5BQkxFKEJSQU5DSF9D
T01QQUNUSU9OKQorICAgICAgICAsIG1faW5pdGlhbFNpemUoMCkKKyNlbmRpZgorICAgICAgICAs
IG1fZGlkQWxsb2NhdGUoZmFsc2UpCisgICAgICAgICwgbV9jb2RlKGNvZGUpCisgICAgICAgICwg
bV9hc3NlbWJsZXIobWFzbSkKKyAgICAgICAgLCBtX3ZtKCZ2bSkKKyNpZm5kZWYgTkRFQlVHCisg
ICAgICAgICwgbV9jb21wbGV0ZWQoZmFsc2UpCisjZW5kaWYKKyAgICB7CisgICAgICAgIGxpbmtD
b2RlKG93bmVyVUlELCBlZmZvcnQpOworICAgIH0KKwogICAgIH5MaW5rQnVmZmVyKCkKICAgICB7
CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDYXBhYmlsaXRpZXMu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ2FwYWJpbGl0
aWVzLmNwcAkocmV2aXNpb24gMTU3NzA3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9G
VExDYXBhYmlsaXRpZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05NCwxMCArOTQsMTMgQEAgaW5s
aW5lIENhcGFiaWxpdHlMZXZlbCBjYW5Db21waWxlKE5vZGUqIAogICAgIGNhc2UgR2V0Q2xvc3Vy
ZVJlZ2lzdGVyczoKICAgICBjYXNlIEdldENsb3N1cmVWYXI6CiAgICAgY2FzZSBQdXRDbG9zdXJl
VmFyOgotICAgIGNhc2UgR2V0QnlJZDoKICAgICBjYXNlIEludDUyVG9WYWx1ZToKICAgICAgICAg
Ly8gVGhlc2UgYXJlIE9LLgogICAgICAgICBicmVhazsKKyAgICBjYXNlIEdldEJ5SWQ6CisgICAg
ICAgIGlmIChub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkgPT0gQ2VsbFVzZSkKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICByZXR1cm4gQ2Fubm90Q29tcGlsZTsKICAgICBjYXNlIEdldEluZGV4
ZWRQcm9wZXJ0eVN0b3JhZ2U6CiAgICAgICAgIGlmIChpc1R5cGVkVmlldyhub2RlLT5hcnJheU1v
ZGUoKS50eXBlZEFycmF5VHlwZSgpKSkKICAgICAgICAgICAgIGJyZWFrOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2Z0bC9GVExJbmxpbmVDYWNoZVNpemUuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSW5saW5lQ2FjaGVTaXplLmNwcAkocmV2aXNp
b24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSW5saW5lQ2FjaGVTaXplLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDcyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJG
VExJbmxpbmVDYWNoZVNpemUuaCIKKworI2lmIEVOQUJMRShGVExfSklUKQorCisjaW5jbHVkZSAi
SklUSW5saW5lQ2FjaGVHZW5lcmF0b3IuaCIKKyNpbmNsdWRlICJNYWNyb0Fzc2VtYmxlci5oIgor
CituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEZUTCB7CisKK3N0YXRpYyBzaXplX3Qgc19zaXpl
T2ZHZXRCeUlkOworc3RhdGljIHNpemVfdCBzX3NpemVPZlB1dEJ5SWQ7CisKK3NpemVfdCBzaXpl
T2ZHZXRCeUlkKCkKK3sKKyAgICBpZiAoc19zaXplT2ZHZXRCeUlkKQorICAgICAgICByZXR1cm4g
c19zaXplT2ZHZXRCeUlkOworICAgIAorICAgIE1hY3JvQXNzZW1ibGVyIGppdDsKKyAgICAKKyAg
ICBKSVRHZXRCeUlkR2VuZXJhdG9yIGdlbmVyYXRvcigKKyAgICAgICAgMCwgQ29kZU9yaWdpbigp
LCBSZWdpc3RlclNldCgpLCBKU1ZhbHVlUmVncyhHUFJJbmZvOjpyZWdUNiksIEpTVmFsdWVSZWdz
KEdQUkluZm86OnJlZ1Q3KSwKKyAgICAgICAgZmFsc2UpOworICAgIGdlbmVyYXRvci5nZW5lcmF0
ZUZhc3RQYXRoKGppdCk7CisgICAgCisgICAgcmV0dXJuIHNfc2l6ZU9mR2V0QnlJZCA9IGppdC5t
X2Fzc2VtYmxlci5jb2RlU2l6ZSgpOworfQorCitzaXplX3Qgc2l6ZU9mUHV0QnlJZCgpCit7Cisg
ICAgaWYgKHNfc2l6ZU9mUHV0QnlJZCkKKyAgICAgICAgcmV0dXJuIHNfc2l6ZU9mUHV0QnlJZDsK
KyAgICAKKyAgICBNYWNyb0Fzc2VtYmxlciBqaXQ7CisgICAgCisgICAgSklUUHV0QnlJZEdlbmVy
YXRvciBnZW5lcmF0b3IoCisgICAgICAgIDAsIENvZGVPcmlnaW4oKSwgUmVnaXN0ZXJTZXQoKSwg
SlNWYWx1ZVJlZ3MoR1BSSW5mbzo6cmVnVDYpLCBKU1ZhbHVlUmVncyhHUFJJbmZvOjpyZWdUNyks
CisgICAgICAgIEdQUkluZm86OnJlZ1Q4LCBmYWxzZSwgTm90U3RyaWN0TW9kZSwgTm90RGlyZWN0
KTsKKyAgICBnZW5lcmF0b3IuZ2VuZXJhdGVGYXN0UGF0aChqaXQpOworICAgIAorICAgIHJldHVy
biBzX3NpemVPZlB1dEJ5SWQgPSBqaXQubV9hc3NlbWJsZXIuY29kZVNpemUoKTsKK30KKworfSB9
IC8vIG5hbWVzcGFjZSBKU0M6OkZUTAorCisjZW5kaWYgLy8gRU5BQkxFKEZUTF9KSVQpCisKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSW5saW5lQ2FjaGVTaXplLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExJbmxpbmVDYWNoZVNpemUuaAko
cmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSW5saW5lQ2FjaGVT
aXplLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0MSBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEZUTElubGluZUNhY2hlU2l6ZV9o
CisjZGVmaW5lIEZUTElubGluZUNhY2hlU2l6ZV9oCisKKyNpZiBFTkFCTEUoRlRMX0pJVCkKKwor
bmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBGVEwgeworCitzaXplX3Qgc2l6ZU9mR2V0QnlJZCgp
Oworc2l6ZV90IHNpemVPZlB1dEJ5SWQoKTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkZUTAor
CisjZW5kaWYgLy8gRU5BQkxFKEZUTF9KSVQpCisKKyNlbmRpZiAvLyBGVExJbmxpbmVDYWNoZVNp
emVfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTElubGluZUNhY2hlV3Jh
cHBlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSW5saW5l
Q2FjaGVXcmFwcGVyLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRs
L0ZUTElubGluZUNhY2hlV3JhcHBlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDcgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBG
VExJbmxpbmVDYWNoZVdyYXBwZXJfaAorI2RlZmluZSBGVExJbmxpbmVDYWNoZVdyYXBwZXJfaAor
CisjaWYgRU5BQkxFKEZUTF9KSVQpCisKKyNpbmNsdWRlICJKSVRJbmxpbmVDYWNoZUdlbmVyYXRv
ci5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEZUTCB7CisKK3RlbXBsYXRlPHR5cGVu
YW1lIEdlbmVyYXRvclR5cGU+CitzdHJ1Y3QgSW5saW5lQ2FjaGVXcmFwcGVyIHsKKyAgICBJbmxp
bmVDYWNoZVdyYXBwZXIoKSB7IH0KKyAgICAKKyAgICBJbmxpbmVDYWNoZVdyYXBwZXIoY29uc3Qg
R2VuZXJhdG9yVHlwZSYgZ2VuZXJhdG9yLCAKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpG
VEwKKworI2VuZGlmIC8vIEVOQUJMRShGVExfSklUKQorCisjZW5kaWYgLy8gRlRMSW5saW5lQ2Fj
aGVXcmFwcGVyX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExKSVRGaW5h
bGl6ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSklU
RmluYWxpemVyLmNwcAkocmV2aXNpb24gMTU3NzA3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Z0bC9GVExKSVRGaW5hbGl6ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04NCw2ICs4NCwxNyBA
QCBib29sIEpJVEZpbmFsaXplcjo6ZmluYWxpemVGdW5jdGlvbigpCiAgICAgICAgICAgICAgICAg
KCJGVEwgZXhpdCB0aHVua3MgZm9yICVzIiwgdG9DU3RyaW5nKENvZGVCbG9ja1dpdGhKSVRUeXBl
KG1fcGxhbi5jb2RlQmxvY2suZ2V0KCksIEpJVENvZGU6OkZUTEpJVCkpLmRhdGEoKSkpKTsKICAg
ICB9IC8vIGVsc2UgdGhpcyBmdW5jdGlvbiBoYWQgbm8gT1NSIGV4aXRzLCBzbyBubyBleGl0IHRo
dW5rcy4KICAgICAKKyAgICBpZiAoc2lkZUNvZGVMaW5rQnVmZmVyKSB7CisgICAgICAgIC8vIFNp
ZGUgY29kZSBpcyBmb3Igc3BlY2lhbCBzbG93IHBhdGhzIHRoYXQgd2UgZ2VuZXJhdGUgb3Vyc2Vs
dmVzLCBsaWtlIGZvciBpbmxpbmUKKyAgICAgICAgLy8gY2FjaGVzLgorICAgICAgICAKKyAgICAg
ICAgaml0Q29kZS0+YWRkSGFuZGxlKEZJTkFMSVpFX0RGR19DT0RFKAorICAgICAgICAgICAgKnNp
ZGVDb2RlTGlua0J1ZmZlciwKKyAgICAgICAgICAgICgiRlRMIHNpZGUgY29kZSBmb3IgJXMiLAor
ICAgICAgICAgICAgICAgIHRvQ1N0cmluZyhDb2RlQmxvY2tXaXRoSklUVHlwZShtX3BsYW4uY29k
ZUJsb2NrLmdldCgpLCBKSVRDb2RlOjpGVExKSVQpKS5kYXRhKCkpKQorICAgICAgICAgICAgLmV4
ZWN1dGFibGVNZW1vcnkoKSk7CisgICAgfQorICAgIAogICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0
ciB3aXRoQXJpdHlDaGVjazsKICAgICBpZiAoYXJpdHlDaGVjay5pc1NldCgpKQogICAgICAgICB3
aXRoQXJpdHlDaGVjayA9IGVudHJ5cG9pbnRMaW5rQnVmZmVyLT5sb2NhdGlvbk9mKGFyaXR5Q2hl
Y2spOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExKSVRGaW5hbGl6ZXIuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEpJVEZpbmFsaXplci5o
CShyZXZpc2lvbiAxNTc3MDcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEpJVEZp
bmFsaXplci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw2ICszNCw3IEBACiAjaW5jbHVkZSAiRlRM
R2VuZXJhdGVkRnVuY3Rpb24uaCIKICNpbmNsdWRlICJGVExKSVRDb2RlLmgiCiAjaW5jbHVkZSAi
RlRMT1NSRXhpdENvbXBpbGF0aW9uSW5mby5oIgorI2luY2x1ZGUgIkZUTFNsb3dQYXRoQ2FsbC5o
IgogI2luY2x1ZGUgIkxMVk1BUEkuaCIKICNpbmNsdWRlICJMaW5rQnVmZmVyLmgiCiAjaW5jbHVk
ZSAiTWFjcm9Bc3NlbWJsZXIuaCIKQEAgLTUwLDYgKzUxLDggQEAgcHVibGljOgogCiAgICAgT3du
UHRyPExpbmtCdWZmZXI+IGV4aXRUaHVua3NMaW5rQnVmZmVyOwogICAgIE93blB0cjxMaW5rQnVm
ZmVyPiBlbnRyeXBvaW50TGlua0J1ZmZlcjsKKyAgICBPd25QdHI8TGlua0J1ZmZlcj4gc2lkZUNv
ZGVMaW5rQnVmZmVyOworICAgIFZlY3RvcjxTbG93UGF0aENhbGw+IHNsb3dQYXRoQ2FsbHM7IC8v
IENhbGxzIGluc2lkZSB0aGUgc2lkZSBjb2RlLgogICAgIFZlY3RvcjxPU1JFeGl0Q29tcGlsYXRp
b25JbmZvPiBvc3JFeGl0OwogICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBhcml0eUNoZWNrOwog
ICAgIEdlbmVyYXRlZEZ1bmN0aW9uIGZ1bmN0aW9uOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2Z0bC9GVExMb3dlckRGR1RvTExWTS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvTExWTS5jcHAJKHJldmlzaW9uIDE1NzcwNykKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0xMVk0uY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xMjIyLDE5ICsxMjIyLDE0IEBAIHByaXZhdGU6CiAgICAgCiAgICAgdm9pZCBj
b21waWxlR2V0QnlJZCgpCiAgICAgewotICAgICAgICBMVmFsdWUgYmFzZSA9IDA7Ci0KLSAgICAg
ICAgc3dpdGNoIChtX25vZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSkgewotICAgICAgICBjYXNlIENl
bGxVc2U6Ci0gICAgICAgICAgICBiYXNlID0gbG93Q2VsbChtX25vZGUtPmNoaWxkMSgpKTsKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFVudHlwZWRVc2U6Ci0gICAgICAgICAgICBi
YXNlID0gbG93SlNWYWx1ZShtX25vZGUtPmNoaWxkMSgpKTsKLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQo
KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9CisgICAgICAgIC8vIFVudHlwZWRVc2Ug
aXMgYSBiaXQgaGFyZGVyIHRvIHJlYXNvbiBhYm91dCBhbmQgSSdtIG5vdCBzdXJlIGhvdyBiZXN0
IHRvIGRvIGl0LCB5ZXQuCisgICAgICAgIC8vIEJhc2ljYWxseSB3ZSBuZWVkIHRvIGVtaXQgYSBj
ZWxsIGJyYW5jaCB0aGF0IHRha2VzIHlvdSB0byB0aGUgc2xvdyBwYXRoLCBidXQgdGhlIHNsb3cK
KyAgICAgICAgLy8gcGF0aCBpcyBnZW5lcmF0ZWQgYnkgdGhlIElDIGdlbmVyYXRvciBzbyB3ZSBj
YW4ndCBqdW1wIHRvIGl0IGZyb20gaGVyZS4gQW5kIHRoZSBJQworICAgICAgICAvLyBnZW5lcmF0
b3IgY3VycmVudGx5IGRvZXNuJ3Qga25vdyBob3cgdG8gZW1pdCBzdWNoIGEgYnJhbmNoLiBTbywg
Zm9yIG5vdywgd2UganVzdAorICAgICAgICAvLyByZXN0cmljdCB0aGlzIHRvIENlbGxVc2UuCisg
ICAgICAgIEFTU0VSVChtX25vZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSA9PSBDZWxsVXNlKTsKKyAg
ICAgICAgCisgICAgICAgIExWYWx1ZSBiYXNlID0gbG93Q2VsbChtX25vZGUtPmNoaWxkMSgpKTsK
ICAgICAgICAgCiAgICAgICAgIFN0cmluZ0ltcGwqIHVpZCA9IG1fZ3JhcGguaWRlbnRpZmllcnMo
KVttX25vZGUtPmlkZW50aWZpZXJOdW1iZXIoKV07CiAgICAgICAgIHNldEpTVmFsdWUodm1DYWxs
KG1fb3V0Lm9wZXJhdGlvbihvcGVyYXRpb25HZXRCeUlkKSwgbV9jYWxsRnJhbWUsIG1fb3V0Lmlu
dFB0clplcm8sIGJhc2UsIG1fb3V0LmNvbnN0SW50UHRyKHVpZCkpKTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9mdGwvRlRMU2xvd1BhdGhDYWxsLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFNsb3dQYXRoQ2FsbC5jcHAJKHJldmlzaW9uIDApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFNsb3dQYXRoQ2FsbC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSw1MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRlRMU2xvd1BhdGhD
YWxsLmgiCisKKyNpZiBFTkFCTEUoRlRMX0pJVCkKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFj
ZSBGVEwgeworCituYW1lc3BhY2UgeworCisvLyBUaGlzIHdpbGwgYmUgYW4gUkFJSSB0aGluZ3kg
dGhhdCB3aWxsIHNldCB1cCB0aGUgbmVjZXNzYXJ5IHN0YWNrIHNpemVzIGFuZCBvZmZzZXRzIGFu
ZCBzdWNoLgorY2xhc3MgQ2FsbENvbnRleHQgeworcHJpdmF0ZToKK307CisKK30gLy8gYW5vbnlt
b3VzIG5hbWVzcGFjZQorCit2b2lkIGNhbGxPcGVyYXRpb24oCisgICAgU3RhdGUmIHN0YXRlLCBj
b25zdCBSZWdpc3RlclNldCYgdXNlZFJlZ2lzdGVycywgQ0NhbGxIZWxlcHJzJiBqaXQsIAorICAg
IEpfSklUT3BlcmF0aW9uX0VTc2lKSSBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIFN0cnVjdHVy
ZVN0dWJJbmZvKiBzdHViSW5mbywKKyAgICBHUFJSZWcgb2JqZWN0LCBTdHJpbmdJbXBsKiB1aWQp
Cit7CisgICAgCit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpGVEwKKworI2VuZGlmIC8vIEVO
QUJMRShGVExfSklUKQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFNsb3dQ
YXRoQ2FsbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMU2xv
d1BhdGhDYWxsLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZU
TFNsb3dQYXRoQ2FsbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjcgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBGVExTbG93UGF0
aENhbGxfaAorI2RlZmluZSBGVExTbG93UGF0aENhbGxfaAorCisjaWYgRU5BQkxFKEZUTF9KSVQp
CisKKyNpbmNsdWRlICJGVExTbG93UGF0aENhbGxLZXkuaCIKKyNpbmNsdWRlICJKSVRPcGVyYXRp
b25zLmgiCisjaW5jbHVkZSAiTWFjcm9Bc3NlbWJsZXIuaCIKKyNpbmNsdWRlICJTdHJ1Y3R1cmVT
dHViSW5mby5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEZUTCB7CisKK2NsYXNzIFN0
YXRlOworCitjbGFzcyBTbG93UGF0aENhbGwgeworcHVibGljOgorICAgIFNsb3dQYXRoQ2FsbCgp
IHsgfQorICAgIAorICAgIFNsb3dQYXRoQ2FsbChNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBjYWxsLCBj
b25zdCBTbG93UGF0aENhbGxLZXkmIGtleSkKKyAgICAgICAgOiBtX2NhbGwoY2FsbCkKKyAgICAg
ICAgLCBtX2tleShrZXkpCisgICAgeworICAgIH0KKyAgICAKKyAgICBNYWNyb0Fzc2VtYmxlcjo6
Q2FsbCBjYWxsKCkgY29uc3QgeyByZXR1cm4gbV9jYWxsOyB9CisgICAgU2xvd1BhdGhDYWxsS2V5
IGtleSgpIGNvbnN0IHsgcmV0dXJuIG1fa2V5OyB9CisgICAgCitwcml2YXRlOgorICAgIE1hY3Jv
QXNzZW1ibGVyOjpDYWxsIG1fY2FsbDsKKyAgICBTbG93UGF0aENhbGxLZXkgbV9rZXk7Cit9Owor
Cit2b2lkIGNhbGxPcGVyYXRpb24oCisgICAgU3RhdGUmLCBjb25zdCBSZWdpc3RlclNldCYsIEND
YWxsSGVscGVycyYsIEpfSklUT3BlcmF0aW9uX0VTc2lKSSwKKyAgICBHUFJSZWcgcmVzdWx0LCBT
dHJ1Y3R1cmVTdHViSW5mbyosIEdQUlJlZyBvYmplY3QsIFN0cmluZ0ltcGwqIHVpZCk7CisKK30g
fSAvLyBuYW1lc3BhY2UgSlNDOjpGVEwKKworI2VuZGlmIC8vIEVOQUJMRShGVExfSklUKQorCisj
ZW5kaWYgLy8gRlRMU2xvd1BhdGhDYWxsX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Z0bC9GVExTbG93UGF0aENhbGxLZXkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9mdGwvRlRMU2xvd1BhdGhDYWxsS2V5LmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMU2xvd1BhdGhDYWxsS2V5LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDQxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
IAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJGVExTbG93UGF0aENhbGxL
ZXkuaCIKKworI2lmIEVOQUJMRShGVExfSklUKQorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNl
IEZUTCB7CisKK3ZvaWQgU2xvd1BhdGhDYWxsS2V5OjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNv
bnN0Cit7CisgICAgb3V0LnByaW50KCI8dXNlZFJlZ2lzdGVycyA9ICIsIG1fdXNlZFJlZ2lzdGVy
cywgIiwgb2Zmc2V0ID0gIiArIG1fb2Zmc2V0LCAiLCBjYWxsVGFyZ2V0ID0gIiwgUmF3UG9pbnRl
cihtX2NhbGxUYXJnZXQpLCAiPiIpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6RlRMCisK
KyNlbmRpZiAvLyBFTkFCTEUoRlRMX0pJVCkKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Z0bC9GVExTbG93UGF0aENhbGxLZXkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZnRsL0ZUTFNsb3dQYXRoQ2FsbEtleS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Z0bC9GVExTbG93UGF0aENhbGxLZXkuaAkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDEyNiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAq
LworCisjaWZuZGVmIEZUTFNsb3dQYXRoQ2FsbEtleV9oCisjZGVmaW5lIEZUTFNsb3dQYXRoQ2Fs
bEtleV9oCisKKyNpZiBFTkFCTEUoRlRMX0pJVCkKKworI2luY2x1ZGUgIlJlZ2lzdGVyU2V0Lmgi
CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgRlRMIHsKKworLy8gVGhpcyBpcyB1c2VkIGZv
ciBjcmVhdGluZyBzb21lIHNhbml0eSBpbiBzbG93LXBhdGggY2FsbHMgb3V0IG9mIHRoZSBGVEwn
cyBpbmxpbmUKKy8vIGNhY2hlcy4gVGhlIGlkZWEgaXMgdGhhdCB3ZSBkb24ndCB3YW50IGFsbCBv
ZiB0aGUgcmVnaXN0ZXIgc2F2ZS9yZXN0b3JlIHN0dWZmIHRvCisvLyBiZSBnZW5lcmF0ZWQgYXQg
ZWFjaCBJQyBzaXRlLiBJbnN0ZWFkLCB0aGUgSUMgc2xvdyBwYXRoIGNhbGwgc2l0ZSB3aWxsIGp1
c3Qgc2F2ZQorLy8gdGhlIHJlZ2lzdGVycyBuZWVkZWQgZm9yIHRoZSBhcmd1bWVudHMuIEl0IHdp
bGwgYXJyYW5nZSBmb3IgdGhlcmUgdG8gYmUgZW5vdWdoCisvLyBzcGFjZSBvbiB0b3Agb2Ygc3Rh
Y2sgdG8gc2F2ZSB0aGUgcmVtYWluaW5nIHJlZ2lzdGVycyBhbmQgdGhlIHJldHVybiBQQy4gVGhl
biBpdAorLy8gd2lsbCBjYWxsIGEgc2hhcmVkIHRodW5rIHRoYXQgd2lsbCBzYXZlIHRoZSByZW1h
aW5pbmcgcmVnaXN0ZXJzLiBUaGF0IHRodW5rIG5lZWRzCisvLyB0byBrbm93IHRoZSBzdGFjayBv
ZmZzZXQgYXQgd2hpY2ggdGhpbmdzIGdldCBzYXZlZCBhbG9uZyB3aXRoIHRoZSBjYWxsIHRhcmdl
dC4KKworLy8gTm90ZSB0aGF0IHRoZSBvZmZzZXQgaXMgKm5vdCBpbmNsdWRpbmcqIHRoZSByZXR1
cm4gUEMgdGhhdCB3b3VsZCBiZSBwdXNoZWQgb24gWDg2LgorCitjbGFzcyBTbG93UGF0aENhbGxL
ZXkgeworcHVibGljOgorICAgIFNsb3dQYXRoQ2FsbEtleSgpCisgICAgICAgIDogbV9jYWxsVGFy
Z2V0KDApCisgICAgICAgICwgbV9vZmZzZXQoMCkKKyAgICB7CisgICAgfQorICAgIAorICAgIFNs
b3dQYXRoQ2FsbEtleShjb25zdCBSZWdpc3RlclNldCYgc2V0LCB2b2lkKiBjYWxsVGFyZ2V0LCBw
dHJkaWZmX3Qgb2Zmc2V0KQorICAgICAgICA6IG1fdXNlZFJlZ2lzdGVycyhzZXQpCisgICAgICAg
ICwgbV9jYWxsVGFyZ2V0KGNhbGxUYXJnZXQpCisgICAgICAgICwgbV9vZmZzZXQob2Zmc2V0KQor
ICAgIHsKKyAgICB9CisgICAgCisgICAgY29uc3QgUmVnaXN0ZXJTZXQmIHVzZWRSZWdpc3RlcnMo
KSBjb25zdCB7IHJldHVybiBtX3VzZWRSZWdpc3RlcnM7IH0KKyAgICB2b2lkKiBjYWxsVGFyZ2V0
KCkgY29uc3QgeyByZXR1cm4gbV9jYWxsVGFyZ2V0OyB9CisgICAgcHRyZGlmZl90IG9mZnNldCgp
IGNvbnN0IHsgcmV0dXJuIG1fb2Zmc2V0OyB9CisgICAgCisgICAgdm9pZCBkdW1wKFByaW50U3Ry
ZWFtJikgY29uc3Q7CisgICAgCisgICAgZW51bSBFbXB0eVZhbHVlVGFnIHsgRW1wdHlWYWx1ZSB9
OworICAgIGVudW0gRGVsZXRlZFZhbHVlVGFnIHsgRGVsZXRlZFZhbHVlIH07CisgICAgCisgICAg
U2xvd1BhdGhDYWxsS2V5KEVtcHR5VmFsdWVUYWcpCisgICAgICAgIDogbV91c2VkUmVnaXN0ZXJz
KFJlZ2lzdGVyU2V0OjpFbXB0eVZhbHVlKQorICAgICAgICAsIG1fY2FsbFRhcmdldCgwKQorICAg
ICAgICAsIG1fb2Zmc2V0KDApCisgICAgeworICAgIH0KKyAgICAKKyAgICBTbG93UGF0aENhbGxL
ZXkoRGVsZXRlZFZhbHVlVGFnKQorICAgICAgICA6IG1fdXNlZFJlZ2lzdGVycyhCaXRWZWN0b3I6
OkRlbGV0ZWRWYWx1ZSkKKyAgICAgICAgLCBtX2NhbGxUYXJnZXQoMCkKKyAgICAgICAgLCBtX29m
ZnNldCgwKQorICAgIHsKKyAgICB9CisgICAgCisgICAgYm9vbCBpc0VtcHR5VmFsdWUoKSBjb25z
dCB7IHJldHVybiBtX3VzZWRSZWdpc3RlcnMuaXNFbXB0eVZhbHVlKCk7IH0KKyAgICBib29sIGlz
RGVsZXRlZFZhbHVlKCkgY29uc3QgeyByZXR1cm4gbV91c2VkUmVnaXN0ZXJzLmlzRGVsZXRlZFZh
bHVlKCk7IH0KKyAgICAKKyAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgU2xvd1BhdGhDYWxsS2V5
JiBvdGhlcikKKyAgICB7CisgICAgICAgIHJldHVybiBtX3VzZWRSZWdpc3RlcnMgPT0gb3RoZXIu
bV91c2VkUmVnaXN0ZXJzCisgICAgICAgICAgICAmJiBtX2NhbGxUYXJnZXQgPT0gb3RoZXIubV9j
YWxsVGFyZ2V0CisgICAgICAgICAgICAmJiBtX29mZnNldCA9PSBvdGhlci5tX29mZnNldDsKKyAg
ICB9CisgICAgdW5zaWduZWQgaGFzaCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV91
c2VkUmVnaXN0ZXJzLmhhc2goKSArIFB0ckhhc2g8dm9pZCo+OjpoYXNoKG1fY2FsbFRhcmdldCkg
KyBtX29mZnNldDsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgUmVnaXN0ZXJTZXQgbV91c2VkUmVn
aXN0ZXJzOworICAgIHZvaWQqIG1fY2FsbFRhcmdldDsKKyAgICBwdHJkaWZmX3QgbV9vZmZzZXQ7
Cit9OworCitzdHJ1Y3QgU2xvd1BhdGhDYWxsS2V5SGFzaCB7CisgICAgc3RhdGljIHVuc2lnbmVk
IGhhc2goY29uc3QgU2xvd1BhdGhDYWxsS2V5JiBrZXkpIHsgcmV0dXJuIGtleS5oYXNoKCk7IH0K
KyAgICBzdGF0aWMgYm9vbCBlcXVhbChjb25zdCBTbG93UGF0aENhbGxLZXkmIGEsIGNvbnN0IFNs
b3dQYXRoQ2FsbEtleSYgYikgeyByZXR1cm4gYSA9PSBiOyB9CisgICAgc3RhdGljIGNvbnN0IGJv
b2wgc2FmZVRvQ29tcGFyZVRvRW1wdHlPckRlbGV0ZWQgPSBmYWxzZTsKK307CisKK30gfSAvLyBu
YW1lc3BhY2UgSlNDOjpGVEwKKworbmFtZXNwYWNlIFdURiB7CisKK3RlbXBsYXRlPHR5cGVuYW1l
IFQ+IHN0cnVjdCBEZWZhdWx0SGFzaDsKK3RlbXBsYXRlPD4gc3RydWN0IERlZmF1bHRIYXNoPEpT
Qzo6RlRMOjpTbG93UGF0aENhbGxLZXk+IHsKKyAgICB0eXBlZGVmIEpTQzo6RlRMOjpTbG93UGF0
aENhbGxLZXlIYXNoIEhhc2g7Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgSGFz
aFRyYWl0czsKK3RlbXBsYXRlPD4gc3RydWN0IEhhc2hUcmFpdHM8SlNDOjpGVEw6OlNsb3dQYXRo
Q2FsbEtleT4gOiBwdWJsaWMgQ3VzdG9tSGFzaFRyYWl0czxKU0M6OkZUTDo6U2xvd1BhdGhDYWxs
S2V5PiB7IH07CisKK30gLy8gbmFtZXNwYWNlIFdURgorCisjZW5kaWYgLy8gRU5BQkxFKEZUTF9K
SVQpCisKKyNlbmRpZiAvLyBGVExTbG93UGF0aENhbGxLZXlfaAorCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZnRsL0ZUTFRodW5rcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Z0bC9GVExUaHVua3MuY3BwCShyZXZpc2lvbiAxNTc3MDcpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZnRsL0ZUTFRodW5rcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0NCw2
ICsxNDQsNjcgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIG9zckV4aXRHZW5lcmF0aW9uVwogICAg
IHJldHVybiBGSU5BTElaRV9DT0RFKHBhdGNoQnVmZmVyLCAoIkZUTCBPU1IgZXhpdCBnZW5lcmF0
aW9uIHRodW5rIGZvciBjYWxsRnJhbWUgYXQgJXMiLCB0b0NTdHJpbmcobG9jYXRpb24pLmRhdGEo
KSkpOwogfQogCitNYWNyb0Fzc2VtYmxlckNvZGVSZWYgc2xvd1BhdGhDYWxsVGh1bmtHZW5lcmF0
b3IoVk0mLCBjb25zdCBTbG93UGF0aENhbGxLZXkmIGtleSkKK3sKKyAgICBBc3NlbWJseUhlbHBl
cnMgaml0KCZ2bSwgMCk7CisgICAgCisgICAgLy8gV2Ugd2FudCB0byBzYXZlIHRoZSBnaXZlbiBy
ZWdpc3RlcnMgYXQgdGhlIGdpdmVuIG9mZnNldCwgdGhlbiB3ZSB3YW50IHRvIHNhdmUgdGhlCisg
ICAgLy8gb2xkIHJldHVybiBhZGRyZXNzIHNvbWV3aGVyZSBwYXN0IHRoYXQgb2Zmc2V0LCBhbmQg
dGhlbiBmaW5hbGx5IHdlIHdhbnQgdG8gbWFrZSB0aGUKKyAgICAvLyBjYWxsLgorICAgIAorICAg
IHNpemVfdCBjdXJyZW50T2Zmc2V0ID0ga2V5Lm9mZnNldCgpICsgc2l6ZW9mKHZvaWQqKTsKKyAg
ICAKKyNpZiBDUFUoWDg2KSB8fCBDUFUoWDg2XzY0KQorICAgIGN1cnJlbnRPZmZzZXQgKz0gc2l6
ZW9mKHZvaWQqKTsKKyNlbmRpZgorICAgIAorICAgIGZvciAoTWFjcm9Bc3NlbWJsZXI6OlJlZ2lz
dGVySUQgcmVnID0gTWFjcm9Bc3NlbWJsZXI6OmZpcnN0UmVnaXN0ZXIoKTsgcmVnIDw9IE1hY3Jv
QXNzZW1ibGVyOjpsYXN0UmVnaXN0ZXIoKTsgcmVnID0gc3RhdGljX2Nhc3Q8TWFjcm9Bc3NlbWJs
ZXI6OlJlZ2lzdGVySUQ+KHJlZyArIDEpKSB7CisgICAgICAgIGlmICgha2V5LnVzZWRSZWdpc3Rl
cnMoKS5nZXQocmVnKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBqaXQuc3RvcmVQ
dHIocmVnLCBBc3NlbWJseUhlbHBlcnM6OkFkZHJlc3MoTWFjcm9Bc3NlbWJsZXI6OnN0YWNrUG9p
bnRlclJlZ2lzdGVyLCBjdXJyZW50T2Zmc2V0KSk7CisgICAgICAgIGN1cnJlbnRPZmZzZXQgKz0g
c2l6ZW9mKHZvaWQqKTsKKyAgICB9CisgICAgCisgICAgZm9yIChNYWNyb0Fzc2VtYmxlcjo6RlBS
ZWdpc3RlcklEIHJlZyA9IE1hY3JvQXNzZW1ibGVyOjpmaXJzdEZQUmVnaXN0ZXIoKTsgcmVnIDw9
IE1hY3JvQXNzZW1ibGVyOjpsYXN0RlBSZWdpc3RlcigpOyByZWcgPSBzdGF0aWNfY2FzdDxNYWNy
b0Fzc2VtYmxlcjo6RlBSZWdpc3RlcklEPihyZWcgKyAxKSkgeworICAgICAgICBpZiAoIWtleS51
c2VkUmVnaXN0ZXJzKCkuZ2V0KHJlZykpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAg
aml0LnN0b3JlRG91YmxlKHJlZywgQXNzZW1ibHlIZWxwZXJzOjpBZGRyZXNzKE1hY3JvQXNzZW1i
bGVyOjpzdGFja1BvaW50ZXJSZWdpc3RlciwgY3VycmVudE9mZnNldCkpOworICAgICAgICBjdXJy
ZW50T2Zmc2V0ICs9IHNpemVvZihkb3VibGUpOworICAgIH0KKyAgICAKKyAgICBqaXQucHJlc2Vy
dmVSZXR1cm5BZGRyZXNzQWZ0ZXJDYWxsKEdQUkluZm86Om5vbkFyZ0dQUjApOworICAgIGppdC5z
dG9yZVB0cihHUFJJbmZvOjpub25BcmdHUFIwLCBBc3NlbWJseUhlbHBlcnM6OkFkZHJlc3MoTWFj
cm9Bc3NlbWJsZXI6OnN0YWNrUG9pbnRlclJlZ2lzdGVyLCBrZXkub2Zmc2V0KCkpKTsKKyAgICAK
KyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsID0gaml0LmNhbGwoKTsKKyAgICAKKyAgICBqaXQu
bG9hZFB0cihBc3NlbWJseUhlbHBlcnM6OkFkZHJlc3MoTWFjcm9Bc3NlbWJsZXI6OnN0YWNrUG9p
bnRlclJlZ2lzdGVyLCBrZXkub2Zmc2V0KCkpLCBHUFJJbmZvOjpub25QcmVzZXJ2ZWROb25SZXR1
cm5HUFIpOworICAgIGppdC5yZXN0b3JlUmV0dXJuQWRkcmVzc0JlZm9yZVJldHVybihHUFJJbmZv
Ojpub25QcmVzZXJ2ZWROb25SZXR1cm5HUFIpOworICAgIAorICAgIGZvciAoTWFjcm9Bc3NlbWJs
ZXI6OkZQUmVnaXN0ZXJJRCByZWcgPSBNYWNyb0Fzc2VtYmxlcjo6bGFzdEZQUmVnaXN0ZXIoKTsg
OyByZWcgPSBzdGF0aWNfY2FzdDxNYWNyb0Fzc2VtYmxlcjo6RlBSZWdpc3RlcklEPihyZWcgLSAx
KSkgeworICAgICAgICBpZiAoIWtleS51c2VkUmVnaXN0ZXJzKCkuZ2V0KHJlZykpCisgICAgICAg
ICAgICBjb250aW51ZTsKKyAgICAgICAgY3VycmVudE9mZnNldCAtPSBzaXplb2YoZG91YmxlKTsK
KyAgICAgICAgaml0LmxvYWREb3VibGUoQXNzZW1ibHlIZWxwZXJzOjpBZGRyZXNzKE1hY3JvQXNz
ZW1ibGVyOjpzdGFja1BvaW50ZXJSZWdpc3RlciwgY3VycmVudE9mZnNldCksIHJlZyk7CisgICAg
ICAgIGlmIChyZWcgPT0gTWFjcm9Bc3NlbWJsZXI6OmZpcnN0RlBSZWdpc3RlcigpKQorICAgICAg
ICAgICAgYnJlYWs7CisgICAgfQorICAgIAorICAgIGZvciAoTWFjcm9Bc3NlbWJsZXI6OlJlZ2lz
dGVySUQgcmVnID0gTWFjcm9Bc3NlbWJsZXI6Omxhc3RSZWdpc3RlcigpOyA7IHJlZyA9IHN0YXRp
Y19jYXN0PE1hY3JvQXNzZW1ibGVyOjpSZWdpc3RlcklEPihyZWcgLSAxKSkgeworICAgICAgICBp
ZiAoIWtleS51c2VkUmVnaXN0ZXJzKCkuZ2V0KHJlZykpCisgICAgICAgICAgICBjb250aW51ZTsK
KyAgICAgICAgY3VycmVudE9mZnNldCAtPSBzaXplb2Yodm9pZCopOworICAgICAgICBqaXQubG9h
ZFB0cihBc3NlbWJseUhlbHBlcnM6OkFkZHJlc3MoTWFjcm9Bc3NlbWJsZXI6OnN0YWNrUG9pbnRl
clJlZ2lzdGVyLCBjdXJyZW50T2Zmc2V0KSwgcmVnKTsKKyAgICAgICAgaWYgKHJlZyA9PSBNYWNy
b0Fzc2VtYmxlcjo6Zmlyc3RSZWdpc3RlcigpKQorICAgICAgICAgICAgYnJlYWs7CisgICAgfQor
ICAgIAorICAgIGppdC5yZXQoKTsKKworICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIodm0sICZq
aXQsIEdMT0JBTF9USFVOS19JRCk7CisgICAgcGF0Y2hCdWZmZXIubGluayhjYWxsLCBrZXkuY2Fs
bFRhcmdldCgpKTsKKyAgICByZXR1cm4gRklOQUxJWkVfQ09ERShwYXRjaEJ1ZmZlciwgKCJGVEwg
c2xvdyBwYXRoIGNhbGwgdGh1bmsgZm9yICVzIiwgdG9DU3RyaW5nKGtleSkuZGF0YSgpKSk7Cit9
CisKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpGVEwKIAogI2VuZGlmIC8vIEVOQUJMRShGVExfSklU
KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExUaHVua3MuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFRodW5rcy5oCShyZXZpc2lvbiAxNTc3
MDcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFRodW5rcy5oCSh3b3JraW5nIGNv
cHkpCkBAIC0zMSw2ICszMSw3IEBACiAjaWYgRU5BQkxFKEZUTF9KSVQpCiAKICNpbmNsdWRlICJG
VExMb2NhdGlvbi5oIgorI2luY2x1ZGUgIkZUTFNsb3dQYXRoQ2FsbEtleS5oIgogI2luY2x1ZGUg
Ik1hY3JvQXNzZW1ibGVyQ29kZVJlZi5oIgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAKQEAg
LTQzLDYgKzQ0LDcgQEAgbmFtZXNwYWNlIEZUTCB7CiBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgb3Ny
RXhpdEdlbmVyYXRpb25XaXRob3V0U3RhY2tNYXBUaHVua0dlbmVyYXRvcihWTSopOwogCiBNYWNy
b0Fzc2VtYmxlckNvZGVSZWYgb3NyRXhpdEdlbmVyYXRpb25XaXRoU3RhY2tNYXBUaHVua0dlbmVy
YXRvcihWTSYsIGNvbnN0IExvY2F0aW9uJik7CitNYWNyb0Fzc2VtYmxlckNvZGVSZWYgc2xvd1Bh
dGhDYWxsVGh1bmtHZW5lcmF0b3IoVk0mLCBjb25zdCBTbG93UGF0aENhbGxLZXkmKTsKIAogdGVt
cGxhdGU8dHlwZW5hbWUgTWFwVHlwZSwgdHlwZW5hbWUgS2V5VHlwZSwgdHlwZW5hbWUgR2VuZXJh
dG9yVHlwZT4KIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBnZW5lcmF0ZUlmTmVjZXNzYXJ5KApAQCAt
NjUsOCArNjcsMTUgQEAgcHVibGljOgogICAgICAgICAgICAgdm0sIG1fb3NyRXhpdFRodW5rcywg
bG9jYXRpb24sIG9zckV4aXRHZW5lcmF0aW9uV2l0aFN0YWNrTWFwVGh1bmtHZW5lcmF0b3IpOwog
ICAgIH0KICAgICAKKyAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgZ2V0U2xvd1BhdGhDYWxsVGh1
bmsoVk0mIHZtLCBjb25zdCBTbG93UGF0aENhbGxLZXkmIGtleSkKKyAgICB7CisgICAgICAgIHJl
dHVybiBnZW5lcmF0ZUlmTmVjZXNzYXJ5KAorICAgICAgICAgICAgdm0sIG1fc2xvd1BhdGhDYWxs
VGh1bmtzLCBrZXksIHNsb3dQYXRoQ2FsbFRodW5rR2VuZXJhdG9yKTsKKyAgICB9CisgICAgCiBw
cml2YXRlOgogICAgIEhhc2hNYXA8TG9jYXRpb24sIE1hY3JvQXNzZW1ibGVyQ29kZVJlZj4gbV9v
c3JFeGl0VGh1bmtzOworICAgIEhhc2hNYXA8U2xvd1BhdGhDYWxsS2V5LCBNYWNyb0Fzc2VtYmxl
ckNvZGVSZWY+IG1fc2xvd1BhdGhDYWxsVGh1bmtzOwogfTsKIAogfSB9IC8vIG5hbWVzcGFjZSBK
U0M6OkZUTApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9HUFJJbmZvLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9HUFJJbmZvLmgJKHJldmlzaW9uIDE1
NzcwNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvR1BSSW5mby5oCSh3b3JraW5nIGNv
cHkpCkBAIC0zNzgsNyArMzc4LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBjb25zdCBHUFJSZWcg
cmV0dXJuVmFsdWVHUFIgPSBYODZSZWdpc3RlcnM6OmVheDsgLy8gcmVnVDAKICAgICBzdGF0aWMg
Y29uc3QgR1BSUmVnIHJldHVyblZhbHVlR1BSMiA9IFg4NlJlZ2lzdGVyczo6ZWR4OyAvLyByZWdU
MQogICAgIHN0YXRpYyBjb25zdCBHUFJSZWcgbm9uUHJlc2VydmVkTm9uUmV0dXJuR1BSID0gWDg2
UmVnaXN0ZXJzOjplc2k7Ci0KKyAgICAKICAgICBzdGF0aWMgR1BSUmVnIHRvUmVnaXN0ZXIodW5z
aWduZWQgaW5kZXgpCiAgICAgewogICAgICAgICBBU1NFUlQoaW5kZXggPCBudW1iZXJPZlJlZ2lz
dGVycyk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZUNhY2hlR2Vu
ZXJhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElu
bGluZUNhY2hlR2VuZXJhdG9yLmNwcAkocmV2aXNpb24gMTU3NzA3KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVDYWNoZUdlbmVyYXRvci5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTM0LDEwICszNCwxNiBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAorc3RhdGljIFN0cnVjdHVy
ZVN0dWJJbmZvKiBnYXJiYWdlU3R1YkluZm8oKQoreworICAgIHN0YXRpYyBTdHJ1Y3R1cmVTdHVi
SW5mbyBzdHViSW5mbzsKKyAgICByZXR1cm4gJnN0dWJJbmZvOworfQorCiBKSVRJbmxpbmVDYWNo
ZUdlbmVyYXRvcjo6SklUSW5saW5lQ2FjaGVHZW5lcmF0b3IoQ29kZUJsb2NrKiBjb2RlQmxvY2ss
IENvZGVPcmlnaW4gY29kZU9yaWdpbikKICAgICA6IG1fY29kZUJsb2NrKGNvZGVCbG9jaykKIHsK
LSAgICBtX3N0dWJJbmZvID0gbV9jb2RlQmxvY2stPmFkZFN0dWJJbmZvKCk7CisgICAgbV9zdHVi
SW5mbyA9IG1fY29kZUJsb2NrID8gbV9jb2RlQmxvY2stPmFkZFN0dWJJbmZvKCkgOiBnYXJiYWdl
U3R1YkluZm8oKTsKICAgICBtX3N0dWJJbmZvLT5jb2RlT3JpZ2luID0gY29kZU9yaWdpbjsKIH0K
IApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVDYWNoZUdlbmVyYXRv
ci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lQ2Fj
aGVHZW5lcmF0b3IuaAkocmV2aXNpb24gMTU3NzA3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVRJbmxpbmVDYWNoZUdlbmVyYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC02Niw2ICs2
Niw3IEBAIHB1YmxpYzoKICAgICAgICAgbV9jYWxsID0gY2FsbDsKICAgICB9CiAgICAgCisgICAg
TWFjcm9Bc3NlbWJsZXI6OlBhdGNoYWJsZUp1bXAgc2xvd1BhdGhQYXRjaGFibGVKdW1wKCkgY29u
c3QgeyByZXR1cm4gbV9zdHJ1Y3R1cmVDaGVjazsgfQogICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1w
IHNsb3dQYXRoSnVtcCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RydWN0dXJlQ2hlY2subV9qdW1wOyB9
CiAKICAgICB2b2lkIGZpbmFsaXplKExpbmtCdWZmZXImKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvUmVnaXN0ZXJTZXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvUmVnaXN0ZXJTZXQuY3BwCShyZXZpc2lvbiAxNTc3MDcpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L1JlZ2lzdGVyU2V0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDYs
NiArNDYsMjggQEAgUmVnaXN0ZXJTZXQgUmVnaXN0ZXJTZXQ6OnNwZWNpYWxSZWdpc3RlcgogICAg
IHJldHVybiByZXN1bHQ7CiB9CiAKK1JlZ2lzdGVyU2V0IFJlZ2lzdGVyU2V0OjpjYWxsZWVTYXZl
UmVnaXN0ZXJzKCkKK3sKKyAgICBSZWdpc3RlclNldCByZXN1bHQ7CisjaWYgVVNFKFg4Nl82NCkK
KyAgICByZXN1bHQuc2V0KFg4NlJlZ2lzdGVyczo6cmJ4KTsKKyAgICByZXN1bHQuc2V0KFg4NlJl
Z2lzdGVyczo6cmJwKTsKKyAgICByZXN1bHQuc2V0KFg4NlJlZ2lzdGVyczo6cjEwKTsKKyAgICBy
ZXN1bHQuc2V0KFg4NlJlZ2lzdGVyczo6cjEyKTsKKyAgICByZXN1bHQuc2V0KFg4NlJlZ2lzdGVy
czo6cjEzKTsKKyAgICByZXN1bHQuc2V0KFg4NlJlZ2lzdGVyczo6cjE0KTsKKyAgICByZXN1bHQu
c2V0KFg4NlJlZ2lzdGVyczo6cjE1KTsKKyNlbHNlCisjZXJyb3IgIlVuc3VwcG9ydGVkIGluc3Ry
dWN0aW9uIHNldCIKKyNlbmRpZgorICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgUmVnaXN0
ZXJTZXQ6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBtX3ZlY3Rvci5kdW1w
KG91dCk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIEpTQwogCiAjZW5kaWYgLy8gRU5BQkxFKEpJVCkK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVnaXN0ZXJTZXQuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlZ2lzdGVyU2V0LmgJKHJldmlzaW9uIDE1
NzcwNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVnaXN0ZXJTZXQuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNDMsNiArNDMsNyBAQCBwdWJsaWM6CiAgICAgUmVnaXN0ZXJTZXQoKSB7IH0K
ICAgICAKICAgICBzdGF0aWMgUmVnaXN0ZXJTZXQgc3BlY2lhbFJlZ2lzdGVycygpOworICAgIHN0
YXRpYyBSZWdpc3RlclNldCBjYWxsZWVTYXZlUmVnaXN0ZXJzKCk7CiAKICAgICB2b2lkIHNldChH
UFJSZWcgcmVnLCBib29sIHZhbHVlID0gdHJ1ZSkKICAgICB7CkBAIC03NiwxMyArNzcsNTUgQEAg
cHVibGljOgogICAgIGJvb2wgZ2V0KEZQUlJlZyByZWcpIGNvbnN0IHsgcmV0dXJuIG1fdmVjdG9y
LmdldChNYWNyb0Fzc2VtYmxlcjo6cmVnaXN0ZXJJbmRleChyZWcpKTsgfQogICAgIAogICAgIHZv
aWQgbWVyZ2UoY29uc3QgUmVnaXN0ZXJTZXQmIG90aGVyKSB7IG1fdmVjdG9yLm1lcmdlKG90aGVy
Lm1fdmVjdG9yKTsgfQorICAgIHZvaWQgZXhjbHVkZShjb25zdCBSZWdpc3RlclNldCYgb3RoZXIp
IHsgbV92ZWN0b3IuZXhjbHVkZShvdGhlci5tX3ZlY3Rvcik7IH0KKyAgICAKKyAgICBzaXplX3Qg
bnVtYmVyT2ZTZXRSZWdpc3RlcnMoKSBjb25zdCB7IHJldHVybiBtX3ZlY3Rvci5iaXRDb3VudCgp
OyB9CisgICAgCisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CisgICAgCisgICAg
ZW51bSBFbXB0eVZhbHVlVGFnIHsgRW1wdHlWYWx1ZSB9OworICAgIGVudW0gRGVsZXRlZFZhbHVl
VGFnIHsgRGVsZXRlZFZhbHVlIH07CisgICAgCisgICAgUmVnaXN0ZXJTZXQoRW1wdHlWYWx1ZVRh
ZykKKyAgICAgICAgOiBtX3ZlY3RvcihCaXRWZWN0b3I6OkVtcHR5VmFsdWUpCisgICAgeworICAg
IH0KKyAgICAKKyAgICBSZWdpc3RlclNldChEZWxldGVkVmFsdWVUYWcpCisgICAgICAgIDogbV92
ZWN0b3IoQml0VmVjdG9yOjpEZWxldGVkVmFsdWUpCisgICAgeworICAgIH0KKyAgICAKKyAgICBi
b29sIGlzRW1wdHlWYWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdmVjdG9yLmlzRW1wdHlWYWx1ZSgp
OyB9CisgICAgYm9vbCBpc0RlbGV0ZWRWYWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdmN0b3IuaXNE
ZWxldGVkVmFsdWUoKTsgfQorICAgIAorICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBSZWdpc3Rl
clNldCYgb3RoZXIpIHsgcmV0dXJuIG1fdmVjdG9yID09IG90aGVyLm1fdmVjdG9yOyB9CisgICAg
dW5zaWduZWQgaGFzaCgpIGNvbnN0IHsgcmV0dXJuIG1fdmVjdG9yLmhhc2goKTsgfQogICAgIAog
cHJpdmF0ZToKICAgICBCaXRWZWN0b3IgbV92ZWN0b3I7CiB9OwogCitzdHJ1Y3QgUmVnaXN0ZXJT
ZXRIYXNoIHsKKyAgICBzdGF0aWMgdW5zaWduZWQgaGFzaChjb25zdCBSZWdpc3RlclNldCYgc2V0
KSB7IHJldHVybiBzZXQuaGFzaCgpOyB9CisgICAgc3RhdGljIGJvb2wgZXF1YWwoY29uc3QgUmVn
aXN0ZXJTZXQmIGEsIGNvbnN0IFJlZ2lzdGVyU2V0JiBiKSB7IHJldHVybiBhID09IGI7IH0KKyAg
ICBzdGF0aWMgY29uc3QgYm9vbCBzYWZlVG9Db21wYXJlVG9FbXB0eU9yRGVsZXRlZCA9IGZhbHNl
OworfTsKKwogfSAvLyBuYW1lc3BhY2UgSlNDCiAKK25hbWVzcGFjZSBXVEYgeworCit0ZW1wbGF0
ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgRGVmYXVsdEhhc2g7Cit0ZW1wbGF0ZTw+IHN0cnVjdCBEZWZh
dWx0SGFzaDxKU0M6OlJlZ2lzdGVyU2V0PiB7CisgICAgdHlwZWRlZiBSZWdpc3RlclNldEhhc2gg
SGFzaDsKK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBIYXNoVHJhaXRzOwordGVt
cGxhdGU8PiBzdHJ1Y3QgSGFzaFRyYWl0czxKU0M6OlJlZ2lzdGVyU2V0PiA6IHB1YmxpYyBDdXN0
b21IYXNoVHJhaXRzPEpTQzo6UmVnaXN0ZXJTZXQ+IHsgfTsKKworfSAvLyBuYW1lc3BhY2UgV1RG
CisKICNlbmRpZiAvLyBFTkFCTEUoSklUKQogCiAjZW5kaWYgLy8gUmVnaXN0ZXJTZXRfaApJbmRl
eDogU291cmNlL1dURi93dGYvQml0VmVjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RG
L3d0Zi9CaXRWZWN0b3IuY3BwCShyZXZpc2lvbiAxNTc3MDcpCisrKyBTb3VyY2UvV1RGL3d0Zi9C
aXRWZWN0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjQsNyArMTI0LDU4IEBAIHZvaWQgQml0
VmVjdG9yOjptZXJnZVNsb3coY29uc3QgQml0VmVjdG8KICAgICAgICAgYS0+Yml0cygpW2ldIHw9
IGItPmJpdHMoKVtpXTsKIH0KIAotdm9pZCBCaXRWZWN0b3I6OmR1bXAoUHJpbnRTdHJlYW0mIG91
dCkKK3ZvaWQgQml0VmVjdG9yOjpleGNsdWRlU2xvdyhjb25zdCBCaXRWZWN0b3ImIG90aGVyKQor
eworICAgIGlmIChvdGhlci5pc0lubGluZSgpKSB7CisgICAgICAgIEFTU0VSVCghaXNJbmxpbmUo
KSk7CisgICAgICAgICpiaXRzKCkgJj0gfmNsZWFuc2VJbmxpbmVCaXRzKG90aGVyLm1fYml0c09y
UG9pbnRlcik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgaWYgKGlzSW5saW5l
KCkpIHsKKyAgICAgICAgQVNTRVJUKCFvdGhlci5pc0lubGluZSgpKTsKKyAgICAgICAgbV9iaXRz
T3JQb2ludGVyICY9IH4qb3RoZXIub3V0T2ZMaW5lQml0cygpOworICAgICAgICBtX2JpdHNPclBv
aW50ZXIgfD0gKHN0YXRpY19jYXN0PHVpbnRwdHJfdD4oMSkgPDwgbWF4SW5saW5lQml0cygpKTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBPdXRPZkxpbmVCaXRzKiBhID0gb3V0
T2ZMaW5lQml0cygpOworICAgIGNvbnN0IE91dE9mTGluZUJpdHMqIGIgPSBvdGhlci5vdXRPZkxp
bmVCaXRzKCk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gc3RkOjptaW4oYS0+bnVtV29yZHMoKSwg
Yi0+bnVtV29yZHMoKSk7IGktLTspCisgICAgICAgIGEtPmJpdHMoKVtpXSAmPSB+Yi0+Yml0cygp
W2ldOworfQorCitzaXplX3QgQml0VmVjdG9yOjpiaXRDb3VudFNsb3coKSBjb25zdAoreworICAg
IEFTU0VSVCghaXNJbmxpbmUoKSk7CisgICAgY29uc3QgT3V0T2ZMaW5lQml0cyogYml0cyA9IG91
dE9mTGluZUJpdHMoKTsKKyAgICBzaXplX3QgcmVzdWx0ID0gMDsKKyAgICBmb3IgKHVuc2lnbmVk
IGkgPSBiaXRzLT5udW1Xb3JkcygpOyBpLS07KQorICAgICAgICByZXN1bHQgKz0gYml0Q291bnQo
Yml0cy0+Yml0cygpW2ldKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitib29sIEJpdFZlY3Rv
cjo6ZXF1YWxzU2xvd0Nhc2UoY29uc3QgQml0VmVjdG9yJiBvdGhlcikgY29uc3QKK3sKKyAgICAv
LyBUaGlzIGlzIHJlYWxseSBjaGVlc3ksIGJ1dCBwcm9iYWJseSBnb29kIGVub3VnaCBmb3Igbm93
LgorICAgIGZvciAodW5zaWduZWQgaSA9IHN0ZDo6bWF4KHNpemUoKSwgb3RoZXIuc2l6ZSgpKTsg
aS0tOykgeworICAgICAgICBpZiAoZ2V0KGkpICE9IG90aGVyLmdldChpKSkKKyAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3VpbnRwdHJfdCBC
aXRWZWN0b3I6Omhhc2hTbG93Q2FzZSgpIGNvbnN0Cit7CisgICAgQVNTRVJUKCFpc0lubGluZSgp
KTsKKyAgICBjb25zdCBPdXRPZkxpbmVCaXRzKiBiaXRzID0gb3V0T2ZMaW5lQml0cygpOworICAg
IHVpbnRwdHJfdCByZXN1bHQgPSAwOworICAgIGZvciAodW5zaWduZWQgaSA9IGJpdHMtPm51bVdv
cmRzKCk7IGktLTspCisgICAgICAgIHJlc3VsdCBePSBiaXRzLT5iaXRzKClbaV07CisgICAgcmV0
dXJuIHJlc3VsdDsKK30KKwordm9pZCBCaXRWZWN0b3I6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkg
Y29uc3QKIHsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemUoKTsgKytpKSB7CiAgICAg
ICAgIGlmIChnZXQoaSkpCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9CaXRWZWN0b3IuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9CaXRWZWN0b3IuaAkocmV2aXNpb24gMTU3NzA3KQorKysg
U291cmNlL1dURi93dGYvQml0VmVjdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTE3OCw3ICsxNzgs
NTkgQEAgcHVibGljOiAKICAgICAgICAgbV9iaXRzT3JQb2ludGVyIHw9IG90aGVyLm1fYml0c09y
UG9pbnRlcjsKICAgICB9CiAgICAgCi0gICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJiBvdXQpOwor
ICAgIHZvaWQgZXhjbHVkZShjb25zdCBCaXRWZWN0b3ImIG90aGVyKQorICAgIHsKKyAgICAgICAg
aWYgKCFpc0lubGluZSgpIHx8ICFvdGhlci5pc0lubGluZSgpKSB7CisgICAgICAgICAgICBleGNs
dWRlU2xvdyhvdGhlcik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAg
bV9iaXRzT3JQb2ludGVyICY9IH5vdGhlci5tX2JpdHNPclBvaW50ZXI7CisgICAgfQorICAgIAor
ICAgIHNpemVfdCBiaXRDb3VudCgpIGNvbnN0CisgICAgeworICAgICAgICBpZiAoaXNJbmxpbmUo
KSkKKyAgICAgICAgICAgIHJldHVybiBiaXRDb3VudChjbGVhbnNlSW5saW5lQml0cyhtX2JpdHNP
clBvaW50ZXIpKTsKKyAgICAgICAgcmV0dXJuIGJpdENvdW50U2xvdygpOworICAgIH0KKyAgICAK
KyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3Q7CisgICAgCisgICAgZW51bSBF
bXB0eVZhbHVlVGFnIHsgRW1wdHlWYWx1ZSB9OworICAgIGVudW0gRGVsZXRlZFZhbHVlVGFnIHsg
RGVsZXRlZFZhbHVlIH07CisgICAgCisgICAgQml0VmVjdG9yKEVtcHR5VmFsdWVUYWcpCisgICAg
ICAgIDogbV9iaXRzT3JQb2ludGVyKDApCisgICAgeworICAgIH0KKyAgICAKKyAgICBCaXRWZWN0
b3IoRGVsZXRlZFZhbHVlVGFnKQorICAgICAgICA6IG1fYml0c09yUG9pbnRlcigxKQorICAgIHsK
KyAgICB9CisgICAgCisgICAgYm9vbCBpc0VtcHR5VmFsdWUoKSBjb25zdCB7IHJldHVybiAhbV9i
aXRzT3JQb2ludGVyOyB9CisgICAgYm9vbCBpc0RlbGV0ZWRWYWx1ZSgpIGNvbnN0IHsgcmV0dXJu
IG1fYml0c09yUG9pbmVyID09IDE7IH0KKyAgICAKKyAgICBib29sIG9wZXJhdG9yPT0oY29uc3Qg
Qml0VmVjdG9yJiBvdGhlcikKKyAgICB7CisgICAgICAgIGlmIChpc0lubGluZSgpICYmIG90aGVy
LmlzSW5saW5lKCkpCisgICAgICAgICAgICByZXR1cm4gbV9iaXRzT3JQb2ludGVyID09IG90aGVy
Lm1fYml0c09yUG9pbnRlcjsKKyAgICAgICAgcmV0dXJuIGVxdWFsc1Nsb3dDYXNlKG90aGVyKTsK
KyAgICB9CisgICAgCisgICAgdW5zaWduZWQgaGFzaCgpIGNvbnN0CisgICAgeworICAgICAgICAv
LyBUaGlzIGlzIGEgdmVyeSBzaW1wbGUgaGFzaC4gSnVzdCB4b3IgdG9nZXRoZXIgdGhlIHdvcmRz
IHRoYXQgaG9sZCB0aGUgdmFyaW91cworICAgICAgICAvLyBiaXRzIGFuZCB0aGVuIGNvbXB1dGUg
dGhlIGhhc2guIFRoaXMgbWFrZXMgaXQgdmVyeSBlYXN5IHRvIGRlYWwgd2l0aCBiaXR2ZWN0b3Jz
CisgICAgICAgIC8vIHRoYXQgaGF2ZSBhIGxvdCBvZiB0cmFpbGluZyB6ZXJvJ3MuCisgICAgICAg
IHVpbnRwdHJfdCB2YWx1ZTsKKyAgICAgICAgaWYgKGlzSW5saW5lKCkpCisgICAgICAgICAgICB2
YWx1ZSA9IGNsZWFuc2VJbmxpbmVCaXRzKG1fYml0c09yUG9pbnRlcik7CisgICAgICAgIGVsc2UK
KyAgICAgICAgICAgIHZhbHVlID0gaGFzaFNsb3dDYXNlKCk7CisgICAgICAgIHJldHVybiBJbnRI
YXNoPHVpbnRwdHJfdD46Omhhc2godmFsdWUpOworICAgIH0KICAgICAKIHByaXZhdGU6CiAgICAg
c3RhdGljIHVuc2lnbmVkIGJpdHNJblBvaW50ZXIoKQpAQCAtMjA3LDYgKzI1OSwxNCBAQCBwcml2
YXRlOgogICAgICAgICByZXR1cm4gYml0cyAmIH4oc3RhdGljX2Nhc3Q8dWludHB0cl90PigxKSA8
PCBtYXhJbmxpbmVCaXRzKCkpOwogICAgIH0KICAgICAKKyAgICBzdGF0aWMgc2l6ZV90IGJpdENv
dW50KHVpbnRwdHJfdCBiaXRzKQorICAgIHsKKyAgICAgICAgaWYgKHNpemVvZih1aW50cHRyX3Qp
ID09IDQpCisgICAgICAgICAgICByZXR1cm4gV1RGOjpiaXRDb3VudChzdGF0aWNfY2FzdDx1bnNp
Z25lZD4oYml0cykpOworICAgICAgICBlbHNlCisgICAgICAgICAgICByZXR1cm4gV1RGOjpiaXRD
b3VudChzdGF0aWNfY2FzdDx1aW50NjRfdD4oYml0cykpOworICAgIH0KKyAgICAKICAgICBjbGFz
cyBPdXRPZkxpbmVCaXRzIHsKICAgICBwdWJsaWM6CiAgICAgICAgIHNpemVfdCBudW1CaXRzKCkg
Y29uc3QgeyByZXR1cm4gbV9udW1CaXRzOyB9CkBAIC0yMzYsNiArMjk2LDEyIEBAIHByaXZhdGU6
CiAgICAgV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgc2V0U2xvdyhjb25zdCBCaXRWZWN0b3ImIG90
aGVyKTsKICAgICAKICAgICBXVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBtZXJnZVNsb3coY29uc3Qg
Qml0VmVjdG9yJiBvdGhlcik7CisgICAgV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgZXhjbHVkZVNs
b3coY29uc3QgQml0VmVjdG9yJiBvdGhlcik7CisgICAgCisgICAgV1RGX0VYUE9SVF9QUklWQVRF
IHNpemVfdCBiaXRDb3VudFNsb3coKSBjb25zdDsKKyAgICAKKyAgICBXVEZfRVhQT1JUX1BSSVZB
VEUgYm9vbCBlcXVhbHNTbG93Q2FzZShjb25zdCBCaXRWZWN0b3ImIG90aGVyKSBjb25zdDsKKyAg
ICBXVEZfRVhQT1JUX1BSSVZBVEUgdWludHB0cl90IGhhc2hTbG93Q2FzZSgpIGNvbnN0OwogICAg
IAogICAgIHVpbnRwdHJfdCogYml0cygpCiAgICAgewpAQCAtMjU0LDYgKzMyMCwyMCBAQCBwcml2
YXRlOgogICAgIHVpbnRwdHJfdCBtX2JpdHNPclBvaW50ZXI7CiB9OwogCitzdHJ1Y3QgQml0VmVj
dG9ySGFzaCB7CisgICAgc3RhdGljIHVuc2lnbmVkIGhhc2goY29uc3QgQml0VmVjdG9yJiB2ZWN0
b3IpIHsgcmV0dXJuIHZlY3Rvci5oYXNoKCk7IH0KKyAgICBzdGF0aWMgYm9vbCBlcXVhbChjb25z
dCBCaXRWZWN0b3ImIGEsIGNvbnN0IEJpdFZlY3RvciYgYikgeyByZXR1cm4gYSA9PSBiOyB9Cisg
ICAgc3RhdGljIGNvbnN0IGJvb2wgc2FmZVRvQ29tcGFyZVRvRW1wdHlPckRlbGV0ZWQgPSBmYWxz
ZTsKK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBEZWZhdWx0SGFzaDsKK3RlbXBs
YXRlPD4gc3RydWN0IERlZmF1bHRIYXNoPEJpdFZlY3Rvcj4geworICAgIHR5cGVkZWYgQml0VmVj
dG9ySGFzaCBIYXNoOworfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEhhc2hUcmFp
dHM7Cit0ZW1wbGF0ZTw+IHN0cnVjdCBIYXNoVHJhaXRzPEJpdFZlY3Rvcj4gOiBwdWJsaWMgQ3Vz
dG9tSGFzaFRyYWl0czxCaXRWZWN0b3I+IHsgfTsKKwogfSAvLyBuYW1lc3BhY2UgV1RGCiAKIHVz
aW5nIFdURjo6Qml0VmVjdG9yOwpJbmRleDogU291cmNlL1dURi93dGYvSGFzaFRyYWl0cy5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL0hhc2hUcmFpdHMuaAkocmV2aXNpb24gMTU3NzA3
KQorKysgU291cmNlL1dURi93dGYvSGFzaFRyYWl0cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMTYs
NiArMjE2LDM0IEBAIHN0cnVjdCBOdWxsYWJsZUhhc2hUcmFpdHMgOiBwdWJsaWMgSGFzaFQKICAg
ICBzdGF0aWMgVCBlbXB0eVZhbHVlKCkgeyByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxUPigxKTsg
fQogfTsKIAorLy8gVXNlZnVsIGZvciBjbGFzc2VzIHRoYXQgd2FudCBjb21wbGV0ZSBjb250cm9s
IG92ZXIgd2hhdCBpcyBlbXB0eSBhbmQgd2hhdCBpcyBkZWxldGVkLAorLy8gYW5kIGhvdyB0byBj
b25zdHJ1Y3QgYm90aC4KK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitzdHJ1Y3QgQ3VzdG9tSGFzaFRy
YWl0cyB7CisgICAgc3RhdGljIGNvbnN0IGJvb2wgZW1wdHlWYWx1ZUlzWmVybyA9IGZhbHNlOwor
ICAgIHN0YXRpYyBjb25zdCBib29sIGhhc0lzRW1wdHlWYWx1ZUZ1bmN0aW9uID0gdHJ1ZTsKKyAg
ICAKKyAgICBzdGF0aWMgdm9pZCBjb25zdHJ1Y3REZWxldGVkVmFsdWUoVCYgc2xvdCkKKyAgICB7
CisgICAgICAgIG5ldyAoTm90TnVsbCwgJnNsb3QpIFQoVDo6RGVsZXRlZFZhbHVlKTsKKyAgICB9
CisgICAgCisgICAgc3RhdGljIGJvb2wgaXNEZWxldGVkVmFsdWUoY29uc3QgVCYgdmFsdWUpCisg
ICAgeworICAgICAgICByZXR1cm4gdmFsdWUuaXNEZWxldGVkVmFsdWUoKTsKKyAgICB9CisgICAg
CisgICAgc3RhdGljIFQgZW1wdHlWYWx1ZSgpCisgICAgeworICAgICAgICByZXR1cm4gVChUOjpF
bXB0eVZhbHVlKTsKKyAgICB9CisgICAgCisgICAgc3RhdGljIGJvb2wgaXNFbXB0eVZhbHVlKGNv
bnN0IFQmIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHZhbHVlLmlzRW1wdHlWYWx1ZSgp
OworICAgIH0KK307CisKIH0gLy8gbmFtZXNwYWNlIFdURgogCiB1c2luZyBXVEY6Okhhc2hUcmFp
dHM7CkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9TdGRMaWJFeHRyYXMuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV1RGL3d0Zi9TdGRMaWJFeHRyYXMuaAkocmV2aXNpb24gMTU3NzA3KQorKysgU291cmNl
L1dURi93dGYvU3RkTGliRXh0cmFzLmgJKHdvcmtpbmcgY29weSkKQEAgLTE1Nyw2ICsxNTcsMTEg
QEAgaW5saW5lIHNpemVfdCBiaXRDb3VudCh1bnNpZ25lZCBiaXRzKQogICAgIHJldHVybiAoKChi
aXRzICsgKGJpdHMgPj4gNCkpICYgMHhGMEYwRjBGKSAqIDB4MTAxMDEwMSkgPj4gMjQ7CiB9CiAK
K2lubGluZSBzaXplX3QgYml0Q291bnQodWludDY0X3QgYml0cykKK3sKKyAgICByZXR1cm4gYml0
Q291bnQoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGJpdHMpKSArIGJpdENvdW50KHN0YXRpY19jYXN0
PHVuc2lnbmVkPihiaXRzID4+IDMyKSk7Cit9CisKIC8vIE1hY3JvIHRoYXQgcmV0dXJucyBhIGNv
bXBpbGUgdGltZSBjb25zdGFudCB3aXRoIHRoZSBsZW5ndGggb2YgYW4gYXJyYXksIGJ1dCBnaXZl
cyBhbiBlcnJvciBpZiBwYXNzZWQgYSBub24tYXJyYXkuCiB0ZW1wbGF0ZTx0eXBlbmFtZSBULCBz
aXplX3QgU2l6ZT4gY2hhciAoJkFycmF5TGVuZ3RoSGVscGVyRnVuY3Rpb24oVCAoJilbU2l6ZV0p
KVtTaXplXTsKIC8vIEdDQyBuZWVkcyBzb21lIGhlbHAgdG8gZGVkdWNlIGEgMCBsZW5ndGggYXJy
YXkuCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>214806</attachid>
            <date>2013-10-21 19:13:30 -0700</date>
            <delta_ts>2013-10-21 21:09:00 -0700</delta_ts>
            <desc>slow path call stuff is written</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>45652</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTGlua0J1ZmZlci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9MaW5rQnVmZmVyLmNw
cAkocmV2aXNpb24gMTU3NzA3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9M
aW5rQnVmZmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDEyLCAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTUxLDYgKzE1MSwxNSBAQCB2b2lkIExpbmtC
dWZmZXI6OmxpbmtDb2RlKHZvaWQqIG93bmVyVUlECiAKIHZvaWQgTGlua0J1ZmZlcjo6YWxsb2Nh
dGUoc2l6ZV90IGluaXRpYWxTaXplLCB2b2lkKiBvd25lclVJRCwgSklUQ29tcGlsYXRpb25FZmZv
cnQgZWZmb3J0KQogeworICAgIGlmIChtX2NvZGUpIHsKKyAgICAgICAgaWYgKGluaXRpYWxTaXpl
ID4gbV9zaXplKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICAgICAgbV9kaWRB
bGxvY2F0ZSA9IHRydWU7CisgICAgICAgIG1fc2l6ZSA9IGluaXRpYWxTaXplOworICAgICAgICBy
ZXR1cm47CisgICAgfQorICAgIAogICAgIG1fZXhlY3V0YWJsZU1lbW9yeSA9IG1fdm0tPmV4ZWN1
dGFibGVBbGxvY2F0b3IuYWxsb2NhdGUoKm1fdm0sIGluaXRpYWxTaXplLCBvd25lclVJRCwgZWZm
b3J0KTsKICAgICBpZiAoIW1fZXhlY3V0YWJsZU1lbW9yeSkKICAgICAgICAgcmV0dXJuOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9MaW5rQnVmZmVyLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9MaW5rQnVmZmVyLmgJKHJldmlz
aW9uIDE1NzcwNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTGlua0J1ZmZl
ci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykg
MjAwOSwgMjAxMCwgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMDksIDIwMTAsIDIwMTIsIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC05NCw2ICs5NCwyMiBA
QCBwdWJsaWM6CiAgICAgICAgIGxpbmtDb2RlKG93bmVyVUlELCBlZmZvcnQpOwogICAgIH0KIAor
ICAgIExpbmtCdWZmZXIoVk0mIHZtLCBNYWNyb0Fzc2VtYmxlciogbWFzbSwgdm9pZCogY29kZSwg
c2l6ZV90IHNpemUpCisgICAgICAgIDogbV9zaXplKHNpemUpCisjaWYgRU5BQkxFKEJSQU5DSF9D
T01QQUNUSU9OKQorICAgICAgICAsIG1faW5pdGlhbFNpemUoMCkKKyNlbmRpZgorICAgICAgICAs
IG1fZGlkQWxsb2NhdGUoZmFsc2UpCisgICAgICAgICwgbV9jb2RlKGNvZGUpCisgICAgICAgICwg
bV9hc3NlbWJsZXIobWFzbSkKKyAgICAgICAgLCBtX3ZtKCZ2bSkKKyNpZm5kZWYgTkRFQlVHCisg
ICAgICAgICwgbV9jb21wbGV0ZWQoZmFsc2UpCisjZW5kaWYKKyAgICB7CisgICAgICAgIGxpbmtD
b2RlKG93bmVyVUlELCBlZmZvcnQpOworICAgIH0KKwogICAgIH5MaW5rQnVmZmVyKCkKICAgICB7
CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDYXBhYmlsaXRpZXMu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ2FwYWJpbGl0
aWVzLmNwcAkocmV2aXNpb24gMTU3NzA3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9G
VExDYXBhYmlsaXRpZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05NCwxMCArOTQsMTMgQEAgaW5s
aW5lIENhcGFiaWxpdHlMZXZlbCBjYW5Db21waWxlKE5vZGUqIAogICAgIGNhc2UgR2V0Q2xvc3Vy
ZVJlZ2lzdGVyczoKICAgICBjYXNlIEdldENsb3N1cmVWYXI6CiAgICAgY2FzZSBQdXRDbG9zdXJl
VmFyOgotICAgIGNhc2UgR2V0QnlJZDoKICAgICBjYXNlIEludDUyVG9WYWx1ZToKICAgICAgICAg
Ly8gVGhlc2UgYXJlIE9LLgogICAgICAgICBicmVhazsKKyAgICBjYXNlIEdldEJ5SWQ6CisgICAg
ICAgIGlmIChub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkgPT0gQ2VsbFVzZSkKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICByZXR1cm4gQ2Fubm90Q29tcGlsZTsKICAgICBjYXNlIEdldEluZGV4
ZWRQcm9wZXJ0eVN0b3JhZ2U6CiAgICAgICAgIGlmIChpc1R5cGVkVmlldyhub2RlLT5hcnJheU1v
ZGUoKS50eXBlZEFycmF5VHlwZSgpKSkKICAgICAgICAgICAgIGJyZWFrOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2Z0bC9GVExJbmxpbmVDYWNoZVNpemUuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSW5saW5lQ2FjaGVTaXplLmNwcAkocmV2aXNp
b24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSW5saW5lQ2FjaGVTaXplLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDcyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJG
VExJbmxpbmVDYWNoZVNpemUuaCIKKworI2lmIEVOQUJMRShGVExfSklUKQorCisjaW5jbHVkZSAi
SklUSW5saW5lQ2FjaGVHZW5lcmF0b3IuaCIKKyNpbmNsdWRlICJNYWNyb0Fzc2VtYmxlci5oIgor
CituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEZUTCB7CisKK3N0YXRpYyBzaXplX3Qgc19zaXpl
T2ZHZXRCeUlkOworc3RhdGljIHNpemVfdCBzX3NpemVPZlB1dEJ5SWQ7CisKK3NpemVfdCBzaXpl
T2ZHZXRCeUlkKCkKK3sKKyAgICBpZiAoc19zaXplT2ZHZXRCeUlkKQorICAgICAgICByZXR1cm4g
c19zaXplT2ZHZXRCeUlkOworICAgIAorICAgIE1hY3JvQXNzZW1ibGVyIGppdDsKKyAgICAKKyAg
ICBKSVRHZXRCeUlkR2VuZXJhdG9yIGdlbmVyYXRvcigKKyAgICAgICAgMCwgQ29kZU9yaWdpbigp
LCBSZWdpc3RlclNldCgpLCBKU1ZhbHVlUmVncyhHUFJJbmZvOjpyZWdUNiksIEpTVmFsdWVSZWdz
KEdQUkluZm86OnJlZ1Q3KSwKKyAgICAgICAgZmFsc2UpOworICAgIGdlbmVyYXRvci5nZW5lcmF0
ZUZhc3RQYXRoKGppdCk7CisgICAgCisgICAgcmV0dXJuIHNfc2l6ZU9mR2V0QnlJZCA9IGppdC5t
X2Fzc2VtYmxlci5jb2RlU2l6ZSgpOworfQorCitzaXplX3Qgc2l6ZU9mUHV0QnlJZCgpCit7Cisg
ICAgaWYgKHNfc2l6ZU9mUHV0QnlJZCkKKyAgICAgICAgcmV0dXJuIHNfc2l6ZU9mUHV0QnlJZDsK
KyAgICAKKyAgICBNYWNyb0Fzc2VtYmxlciBqaXQ7CisgICAgCisgICAgSklUUHV0QnlJZEdlbmVy
YXRvciBnZW5lcmF0b3IoCisgICAgICAgIDAsIENvZGVPcmlnaW4oKSwgUmVnaXN0ZXJTZXQoKSwg
SlNWYWx1ZVJlZ3MoR1BSSW5mbzo6cmVnVDYpLCBKU1ZhbHVlUmVncyhHUFJJbmZvOjpyZWdUNyks
CisgICAgICAgIEdQUkluZm86OnJlZ1Q4LCBmYWxzZSwgTm90U3RyaWN0TW9kZSwgTm90RGlyZWN0
KTsKKyAgICBnZW5lcmF0b3IuZ2VuZXJhdGVGYXN0UGF0aChqaXQpOworICAgIAorICAgIHJldHVy
biBzX3NpemVPZlB1dEJ5SWQgPSBqaXQubV9hc3NlbWJsZXIuY29kZVNpemUoKTsKK30KKworfSB9
IC8vIG5hbWVzcGFjZSBKU0M6OkZUTAorCisjZW5kaWYgLy8gRU5BQkxFKEZUTF9KSVQpCisKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSW5saW5lQ2FjaGVTaXplLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExJbmxpbmVDYWNoZVNpemUuaAko
cmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSW5saW5lQ2FjaGVT
aXplLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0MSBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEZUTElubGluZUNhY2hlU2l6ZV9o
CisjZGVmaW5lIEZUTElubGluZUNhY2hlU2l6ZV9oCisKKyNpZiBFTkFCTEUoRlRMX0pJVCkKKwor
bmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBGVEwgeworCitzaXplX3Qgc2l6ZU9mR2V0QnlJZCgp
Oworc2l6ZV90IHNpemVPZlB1dEJ5SWQoKTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkZUTAor
CisjZW5kaWYgLy8gRU5BQkxFKEZUTF9KSVQpCisKKyNlbmRpZiAvLyBGVExJbmxpbmVDYWNoZVNp
emVfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTElubGluZUNhY2hlV3Jh
cHBlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSW5saW5l
Q2FjaGVXcmFwcGVyLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRs
L0ZUTElubGluZUNhY2hlV3JhcHBlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDcgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBG
VExJbmxpbmVDYWNoZVdyYXBwZXJfaAorI2RlZmluZSBGVExJbmxpbmVDYWNoZVdyYXBwZXJfaAor
CisjaWYgRU5BQkxFKEZUTF9KSVQpCisKKyNpbmNsdWRlICJKSVRJbmxpbmVDYWNoZUdlbmVyYXRv
ci5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEZUTCB7CisKK3RlbXBsYXRlPHR5cGVu
YW1lIEdlbmVyYXRvclR5cGU+CitzdHJ1Y3QgSW5saW5lQ2FjaGVXcmFwcGVyIHsKKyAgICBJbmxp
bmVDYWNoZVdyYXBwZXIoKSB7IH0KKyAgICAKKyAgICBJbmxpbmVDYWNoZVdyYXBwZXIoY29uc3Qg
R2VuZXJhdG9yVHlwZSYgZ2VuZXJhdG9yLCAKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpG
VEwKKworI2VuZGlmIC8vIEVOQUJMRShGVExfSklUKQorCisjZW5kaWYgLy8gRlRMSW5saW5lQ2Fj
aGVXcmFwcGVyX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExKSVRGaW5h
bGl6ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSklU
RmluYWxpemVyLmNwcAkocmV2aXNpb24gMTU3NzA3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Z0bC9GVExKSVRGaW5hbGl6ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04NCw2ICs4NCwxNyBA
QCBib29sIEpJVEZpbmFsaXplcjo6ZmluYWxpemVGdW5jdGlvbigpCiAgICAgICAgICAgICAgICAg
KCJGVEwgZXhpdCB0aHVua3MgZm9yICVzIiwgdG9DU3RyaW5nKENvZGVCbG9ja1dpdGhKSVRUeXBl
KG1fcGxhbi5jb2RlQmxvY2suZ2V0KCksIEpJVENvZGU6OkZUTEpJVCkpLmRhdGEoKSkpKTsKICAg
ICB9IC8vIGVsc2UgdGhpcyBmdW5jdGlvbiBoYWQgbm8gT1NSIGV4aXRzLCBzbyBubyBleGl0IHRo
dW5rcy4KICAgICAKKyAgICBpZiAoc2lkZUNvZGVMaW5rQnVmZmVyKSB7CisgICAgICAgIC8vIFNp
ZGUgY29kZSBpcyBmb3Igc3BlY2lhbCBzbG93IHBhdGhzIHRoYXQgd2UgZ2VuZXJhdGUgb3Vyc2Vs
dmVzLCBsaWtlIGZvciBpbmxpbmUKKyAgICAgICAgLy8gY2FjaGVzLgorICAgICAgICAKKyAgICAg
ICAgaml0Q29kZS0+YWRkSGFuZGxlKEZJTkFMSVpFX0RGR19DT0RFKAorICAgICAgICAgICAgKnNp
ZGVDb2RlTGlua0J1ZmZlciwKKyAgICAgICAgICAgICgiRlRMIHNpZGUgY29kZSBmb3IgJXMiLAor
ICAgICAgICAgICAgICAgIHRvQ1N0cmluZyhDb2RlQmxvY2tXaXRoSklUVHlwZShtX3BsYW4uY29k
ZUJsb2NrLmdldCgpLCBKSVRDb2RlOjpGVExKSVQpKS5kYXRhKCkpKQorICAgICAgICAgICAgLmV4
ZWN1dGFibGVNZW1vcnkoKSk7CisgICAgfQorICAgIAogICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0
ciB3aXRoQXJpdHlDaGVjazsKICAgICBpZiAoYXJpdHlDaGVjay5pc1NldCgpKQogICAgICAgICB3
aXRoQXJpdHlDaGVjayA9IGVudHJ5cG9pbnRMaW5rQnVmZmVyLT5sb2NhdGlvbk9mKGFyaXR5Q2hl
Y2spOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExKSVRGaW5hbGl6ZXIuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEpJVEZpbmFsaXplci5o
CShyZXZpc2lvbiAxNTc3MDcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEpJVEZp
bmFsaXplci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw2ICszNCw3IEBACiAjaW5jbHVkZSAiRlRM
R2VuZXJhdGVkRnVuY3Rpb24uaCIKICNpbmNsdWRlICJGVExKSVRDb2RlLmgiCiAjaW5jbHVkZSAi
RlRMT1NSRXhpdENvbXBpbGF0aW9uSW5mby5oIgorI2luY2x1ZGUgIkZUTFNsb3dQYXRoQ2FsbC5o
IgogI2luY2x1ZGUgIkxMVk1BUEkuaCIKICNpbmNsdWRlICJMaW5rQnVmZmVyLmgiCiAjaW5jbHVk
ZSAiTWFjcm9Bc3NlbWJsZXIuaCIKQEAgLTUwLDYgKzUxLDggQEAgcHVibGljOgogCiAgICAgT3du
UHRyPExpbmtCdWZmZXI+IGV4aXRUaHVua3NMaW5rQnVmZmVyOwogICAgIE93blB0cjxMaW5rQnVm
ZmVyPiBlbnRyeXBvaW50TGlua0J1ZmZlcjsKKyAgICBPd25QdHI8TGlua0J1ZmZlcj4gc2lkZUNv
ZGVMaW5rQnVmZmVyOworICAgIFZlY3RvcjxTbG93UGF0aENhbGw+IHNsb3dQYXRoQ2FsbHM7IC8v
IENhbGxzIGluc2lkZSB0aGUgc2lkZSBjb2RlLgogICAgIFZlY3RvcjxPU1JFeGl0Q29tcGlsYXRp
b25JbmZvPiBvc3JFeGl0OwogICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBhcml0eUNoZWNrOwog
ICAgIEdlbmVyYXRlZEZ1bmN0aW9uIGZ1bmN0aW9uOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2Z0bC9GVExMb3dlckRGR1RvTExWTS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvTExWTS5jcHAJKHJldmlzaW9uIDE1NzcwNykKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0xMVk0uY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xMjIyLDE5ICsxMjIyLDE0IEBAIHByaXZhdGU6CiAgICAgCiAgICAgdm9pZCBj
b21waWxlR2V0QnlJZCgpCiAgICAgewotICAgICAgICBMVmFsdWUgYmFzZSA9IDA7Ci0KLSAgICAg
ICAgc3dpdGNoIChtX25vZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSkgewotICAgICAgICBjYXNlIENl
bGxVc2U6Ci0gICAgICAgICAgICBiYXNlID0gbG93Q2VsbChtX25vZGUtPmNoaWxkMSgpKTsKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFVudHlwZWRVc2U6Ci0gICAgICAgICAgICBi
YXNlID0gbG93SlNWYWx1ZShtX25vZGUtPmNoaWxkMSgpKTsKLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQo
KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9CisgICAgICAgIC8vIFVudHlwZWRVc2Ug
aXMgYSBiaXQgaGFyZGVyIHRvIHJlYXNvbiBhYm91dCBhbmQgSSdtIG5vdCBzdXJlIGhvdyBiZXN0
IHRvIGRvIGl0LCB5ZXQuCisgICAgICAgIC8vIEJhc2ljYWxseSB3ZSBuZWVkIHRvIGVtaXQgYSBj
ZWxsIGJyYW5jaCB0aGF0IHRha2VzIHlvdSB0byB0aGUgc2xvdyBwYXRoLCBidXQgdGhlIHNsb3cK
KyAgICAgICAgLy8gcGF0aCBpcyBnZW5lcmF0ZWQgYnkgdGhlIElDIGdlbmVyYXRvciBzbyB3ZSBj
YW4ndCBqdW1wIHRvIGl0IGZyb20gaGVyZS4gQW5kIHRoZSBJQworICAgICAgICAvLyBnZW5lcmF0
b3IgY3VycmVudGx5IGRvZXNuJ3Qga25vdyBob3cgdG8gZW1pdCBzdWNoIGEgYnJhbmNoLiBTbywg
Zm9yIG5vdywgd2UganVzdAorICAgICAgICAvLyByZXN0cmljdCB0aGlzIHRvIENlbGxVc2UuCisg
ICAgICAgIEFTU0VSVChtX25vZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSA9PSBDZWxsVXNlKTsKKyAg
ICAgICAgCisgICAgICAgIExWYWx1ZSBiYXNlID0gbG93Q2VsbChtX25vZGUtPmNoaWxkMSgpKTsK
ICAgICAgICAgCiAgICAgICAgIFN0cmluZ0ltcGwqIHVpZCA9IG1fZ3JhcGguaWRlbnRpZmllcnMo
KVttX25vZGUtPmlkZW50aWZpZXJOdW1iZXIoKV07CiAgICAgICAgIHNldEpTVmFsdWUodm1DYWxs
KG1fb3V0Lm9wZXJhdGlvbihvcGVyYXRpb25HZXRCeUlkKSwgbV9jYWxsRnJhbWUsIG1fb3V0Lmlu
dFB0clplcm8sIGJhc2UsIG1fb3V0LmNvbnN0SW50UHRyKHVpZCkpKTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9mdGwvRlRMU2xvd1BhdGhDYWxsLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFNsb3dQYXRoQ2FsbC5jcHAJKHJldmlzaW9uIDApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFNsb3dQYXRoQ2FsbC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSwxNTcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkZUTFNsb3dQYXRo
Q2FsbC5oIgorCisjaWYgRU5BQkxFKEZUTF9KSVQpCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3Bh
Y2UgRlRMIHsKKworbmFtZXNwYWNlIHsKKworLy8gVGhpcyB3aWxsIGJlIGFuIFJBSUkgdGhpbmd5
IHRoYXQgd2lsbCBzZXQgdXAgdGhlIG5lY2Vzc2FyeSBzdGFjayBzaXplcyBhbmQgb2Zmc2V0cyBh
bmQgc3VjaC4KK2NsYXNzIENhbGxDb250ZXh0IHsKK3B1YmxpYzoKKyAgICBDYWxsQ29udGV4dCgK
KyAgICAgICAgU3RhdGUmIHN0YXRlLCBjb25zdCBSZWdpc3RlclNldCYgdXNlZFJlZ2lzdGVycywg
Q0NhbGxIZWxwZXJzJiBqaXQsCisgICAgICAgIHVuc2lnbmVkIG51bUFyZ3MsIEdQUlJlZyByZXR1
cm5SZWdpc3RlcikKKyAgICAgICAgOiBtX3N0YXRlKHN0YXRlKQorICAgICAgICAsIG1fdXNlZFJl
Z2lzdGVycyh1c2VkUmVnaXN0ZXJzKQorICAgICAgICAsIG1faml0KGppdCkKKyAgICAgICAgLCBt
X251bUFyZ3MobnVtQXJncykKKyAgICAgICAgLCBtX3JldHVyblJlZ2lzdGVyKHJldHVyblJlZ2lz
dGVyKQorICAgIHsKKyAgICAgICAgLy8gV2UgZG9uJ3QgY2FyZSB0aGF0IHlvdSdyZSB1c2luZyBj
YWxsZWUtc2F2ZSBvciBzdGFjayByZWdpc3RlcnMuCisgICAgICAgIG1fdXNlZFJlZ2lzdGVycy5l
eGNsdWRlKFJlZ2lzdGVyU2V0OjpzdGFja1JlZ2lzdGVycygpKTsKKyAgICAgICAgbV91c2VkUmVn
aXN0ZXJzLmV4Y2x1ZGUoUmVnaXN0ZXJTZXQ6OmNhbGxlZVNhdmVSZWdpc3RlcnMoKSk7CisgICAg
ICAgIAorICAgICAgICAvLyBUaGUgcmV0dXJuIHJlZ2lzdGVyIGRvZXNuJ3QgbmVlZCB0byBiZSBz
YXZlZC4KKyAgICAgICAgaWYgKG1fcmV0dXJuUmVnaXN0ZXIgIT0gSW52YWxpZEdQUlJlZykKKyAg
ICAgICAgICAgIG1fdXNlZFJlZ2lzdGVycy5leGNsdWRlKG1fcmV0dXJuUmVnaXN0ZXIpOworICAg
ICAgICAKKyAgICAgICAgLy8gVGhpcyBjb2RlIHJlbGllcyBvbiB1cyBiZWluZyA2NC1iaXQuIEZU
TCBpcyBjdXJyZW50bHkgYWx3YXlzIDY0LWJpdC4KKyAgICAgICAgc2l6ZV90IHdvcmRTaXplID0g
ODsKKyAgICAgICAgCisgICAgICAgIHNpemVfdCBzdGFja0J5dGVzTmVlZGVkRm9yUmV0dXJuQWRk
cmVzcyA9IHdvcmRTaXplOworICAgICAgICAKKyAgICAgICAgc2l6ZV90IG9mZnNldFRvU2F2aW5n
QXJlYSA9CisgICAgICAgICAgICAoc3RkOjptYXgobV9udW1BcmdzLCBHUFJJbmZvOjpudW1iZXJP
ZkFyZ3VtZW50UmVnaXN0ZXIpIC0gR1BSSW5mbzo6bnVtYmVyT2ZBcmd1bWVudFJlZ2lzdGVycykg
KiB3b3JkU2l6ZTsKKyAgICAgICAgCisgICAgICAgIHVuc2lnbmVkIG51bUFyZ3VtZW50UmVnaXN0
ZXJzVGhhdE5lZWRTYXZpbmcgPSAwOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBzdGQ6Om1p
bihHUFJJbmZvOjpudW1iZXJPZkFyZ3VtZW50UmVnaXN0ZXJzLCBudW1BcmdzKTsgaS0tOykgewor
ICAgICAgICAgICAgaWYgKG1fdXNlZFJlZ2lzdGVycy5nZXQoR1BSSW5mbzo6dG9Bcmd1bWVudFJl
Z2lzdGVyKGkpKSkKKyAgICAgICAgICAgICAgICBudW1Bcmd1bWVudFJlZ2lzdGVyc1RoYXROZWVk
U2F2aW5nKys7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHNpemVfdCBvZmZzZXRUb1Ro
dW5rU2F2aW5nQXJlYSA9CisgICAgICAgICAgICBvZmZzZXRUb1NhdmluZ0FyZWEgKworICAgICAg
ICAgICAgbnVtQXJndW1lbnRSZWdpc3RlcnNUaGF0TmVlZFNhdmluZyAqIHdvcmRTaXplOworICAg
ICAgICAKKyAgICAgICAgbV9zdGFja0J5dGVzTmVlZGVkID0KKyAgICAgICAgICAgIG9mZnNldFRv
VGh1bmtTYXZpbmdBcmVhICsKKyAgICAgICAgICAgIHN0YWNrQnl0ZXNOZWVkZWRGb3JSZXR1cm5B
ZGRyZXNzICsKKyAgICAgICAgICAgIChtX3VzZWRSZWdpc3RlcnMubnVtYmVyT2ZTZXRSZWdpc3Rl
cnMoKSAtIG51bUFyZ3VtZW50UmVnaXN0ZXJzVGhhdE5lZWRTYXZpbmcpICogd29yZFNpemU7Cisg
ICAgICAgIAorICAgICAgICBzaXplX3Qgc3RhY2tBbGlnbm1lbnQgPSAxNjsKKyAgICAgICAgCisg
ICAgICAgIG1fc3RhY2tCeXRlc05lZWRlZCA9IChtX3N0YWNrQnl0ZXNOZWVkZWQgKyBzdGFja0Fs
aWdubWVudCAtIDEpICYgfnN0YWNrQWxpZ25tZW50OworICAgICAgICAKKyAgICAgICAgbV9qaXQu
c3ViUHRyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKG1fc3RhY2tCeXRlc05lZWRlZCksIEND
YWxsSGVscGVyczo6c3RhY2tQb2ludGVyUmVnaXN0ZXIpOworICAgICAgICAKKyAgICAgICAgbV90
aHVua1NhdmVTZXQgPSBtX3VzZWRSZWdpc3RlcnM7CisgICAgICAgIAorICAgICAgICBmb3IgKHVu
c2lnbmVkIGkgPSBzdGQ6Om1pbihHUFJJbmZvOjpudW1iZXJPZkFyZ3VtZW50UmVnaXN0ZXJzLCBu
dW1BcmdzKTsgaS0tOykgeworICAgICAgICAgICAgaWYgKCFtX3VzZWRSZWdpc3RlcnMuZ2V0KEdQ
UkluZm86OnRvQXJndW1lbnRSZWdpc3RlcihpKSkpCisgICAgICAgICAgICAgICAgY29udGludWU7
CisgICAgICAgICAgICBHUFJSZWcgcmVnID0gR1BSSW5mbzo6dG9Bcmd1bWVudFJlZ2lzdGVyKGkp
OworICAgICAgICAgICAgbV9qaXQuc3RvcmVQdHIocmVnLCBDQ2FsbEhlbHBlcnM6OkFkZHJlc3Mo
Q0NhbGxIZWxwZXJzOjpzdGFja1BvaW50ZXJSZWdpc3Rlciwgb2Zmc2V0VG9TYXZpbmdBcmVhICsg
aSAqIHdvcmRTaXplKSk7CisgICAgICAgICAgICBtX3RodW5rU2F2ZVNldC5jbGVhcihyZWcpOwor
ICAgICAgICB9CisgICAgICAgIAorICAgICAgICBtX29mZnNldCA9IG9mZnNldFRvVGh1bmtTYXZp
bmdBcmVhOworICAgIH0KKyAgICAKKyAgICB+Q2FsbENvbnRleHQoKQorICAgIHsKKyAgICAgICAg
bV9qaXQubW92ZShHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwgbV9yZXR1cm5SZWdpc3Rlcik7Cisg
ICAgICAgIAorICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBzdGQ6Om1pbihHUFJJbmZvOjpudW1i
ZXJPZkFyZ3VtZW50UmVnaXN0ZXJzLCBtX251bUFyZ3MpOyBpLS07KSB7CisgICAgICAgICAgICBp
ZiAoIW1fdXNlZFJlZ2lzdGVycy5nZXQoR1BSSW5mbzo6dG9Bcmd1bWVudFJlZ2lzdGVyKGkpKSkK
KyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIEdQUlJlZyByZWcgPSBHUFJJ
bmZvOjp0b0FyZ3VtZW50UmVnaXN0ZXIoaSk7CisgICAgICAgICAgICBtX2ppdC5sb2FkUHRyKEND
YWxsSGVscGVyczo6QWRkcmVzcyhDQ2FsbEhlbHBlcnM6OnN0YWNrUG9pbnRlclJlZ2lzdGVyLCBv
ZmZzZXRUb1NhdmluZ0FyZWEgKyBpICogd29yZFNpemUpLCByZWcpOworICAgICAgICB9CisgICAg
ICAgIAorICAgICAgICBtX2ppdC5hZGRQdHIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIobV9z
dGFja0J5dGVzTmVlZGVkKSwgQ0NhbGxIZWxwZXJzOjpzdGFja1BvaW50ZXJSZWdpc3Rlcik7Cisg
ICAgfQorICAgIAorICAgIFJlZ2lzdGVyU2V0IHVzZWRSZWdpc3RlcnMoKSBjb25zdAorICAgIHsK
KyAgICAgICAgcmV0dXJuIG1fdGh1bmtTYXZlU2V0OworICAgIH0KKyAgICAKKyAgICBwdHJkaWZm
X3Qgb2Zmc2V0KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX29mZnNldDsKKyAgICB9
CisgICAgCisgICAgU2xvd1BhdGhDYWxsS2V5IGtleVdpdGhUYXJnZXQodm9pZCogY2FsbFRhcmdl
dCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBTbG93UGF0aENhbGxLZXkodXNlZFJlZ2lz
dGVycygpLCBjYWxsVGFyZ2V0LCBvZmZzZXQoKSk7CisgICAgfQorICAgIAorICAgIHZvaWQgbWFr
ZUNhbGwodm9pZCogY2FsbFRhcmdldCkgY29uc3QKKyAgICB7CisgICAgICAgIHN0YXRlLmZpbmFs
aXplci0+c2xvd1BhdGhDYWxscy5hcHBlbmQoU2xvd1BhdGhDYWxsKAorICAgICAgICAgICAgbV9q
aXQuY2FsbCgpLCBrZXlXaXRoVGFyZ2V0KGNhbGxUYXJnZXQpKSk7CisgICAgfQorICAgIAorcHJp
dmF0ZToKKyAgICBTdGF0ZSYgbV9zdGF0ZTsKKyAgICBSZWdpc3RlclNldCBtX3VzZWRSZWdpc3Rl
cnM7CisgICAgQ0NhbGxIZWxwZXJzIG1faml0OworICAgIHVuc2lnbmVkIG1fbnVtQXJnczsKKyAg
ICBzaXplX3QgbV9zdGFja0J5dGVzTmVlZGVkOworICAgIEdQUlJlZyBtX3JldHVyblJlZ2lzdGVy
OworICAgIFJlZ2lzdGVyU2V0IG1fb2Zmc2V0OworfTsKKworfSAvLyBhbm9ueW1vdXMgbmFtZXNw
YWNlCisKK3ZvaWQgY2FsbE9wZXJhdGlvbigKKyAgICBTdGF0ZSYgc3RhdGUsIGNvbnN0IFJlZ2lz
dGVyU2V0JiB1c2VkUmVnaXN0ZXJzLCBDQ2FsbEhlbHBlcnMmIGppdCwgCisgICAgSl9KSVRPcGVy
YXRpb25fRVNzaUpJIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgR1BSUmVnIGNhbGxGcmFtZVJl
Z2lzdGVyLAorICAgIFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbywgR1BSUmVnIG9iamVjdCwg
U3RyaW5nSW1wbCogdWlkKQoreworICAgIENhbGxDb250ZXh0IGNvbnRleHQoc3RhdGUsIHVzZWRS
ZWdpc3RlcnMsIGppdCwgNCwgcmVzdWx0KTsKKyAgICBqaXQuc2V0dXBBcmd1bWVudHMoY2FsbEZy
YW1lUmVnaXN0ZXIsIFRydXN0ZWRJbW1QdHIoc3R1YkluZm8pLCBvYmplY3QsIFRydXN0ZWRJbW1Q
dHIodWlkKSk7CisgICAgY29udGV4dC5tYWtlQ2FsbChvcGVyYXRpb24pOworfQorCit9IH0gLy8g
bmFtZXNwYWNlIEpTQzo6RlRMCisKKyNlbmRpZiAvLyBFTkFCTEUoRlRMX0pJVCkKKwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExTbG93UGF0aENhbGwuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFNsb3dQYXRoQ2FsbC5oCShyZXZpc2lvbiAw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExTbG93UGF0aENhbGwuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxLDY4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuIAorICovCisKKyNpZm5kZWYgRlRMU2xvd1BhdGhDYWxsX2gKKyNkZWZpbmUgRlRMU2xv
d1BhdGhDYWxsX2gKKworI2lmIEVOQUJMRShGVExfSklUKQorCisjaW5jbHVkZSAiRlRMU2xvd1Bh
dGhDYWxsS2V5LmgiCisjaW5jbHVkZSAiSklUT3BlcmF0aW9ucy5oIgorI2luY2x1ZGUgIk1hY3Jv
QXNzZW1ibGVyLmgiCisjaW5jbHVkZSAiU3RydWN0dXJlU3R1YkluZm8uaCIKKworbmFtZXNwYWNl
IEpTQyB7IG5hbWVzcGFjZSBGVEwgeworCitjbGFzcyBTdGF0ZTsKKworY2xhc3MgU2xvd1BhdGhD
YWxsIHsKK3B1YmxpYzoKKyAgICBTbG93UGF0aENhbGwoKSB7IH0KKyAgICAKKyAgICBTbG93UGF0
aENhbGwoTWFjcm9Bc3NlbWJsZXI6OkNhbGwgY2FsbCwgY29uc3QgU2xvd1BhdGhDYWxsS2V5JiBr
ZXkpCisgICAgICAgIDogbV9jYWxsKGNhbGwpCisgICAgICAgICwgbV9rZXkoa2V5KQorICAgIHsK
KyAgICB9CisgICAgCisgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgY2FsbCgpIGNvbnN0IHsgcmV0
dXJuIG1fY2FsbDsgfQorICAgIFNsb3dQYXRoQ2FsbEtleSBrZXkoKSBjb25zdCB7IHJldHVybiBt
X2tleTsgfQorICAgIAorcHJpdmF0ZToKKyAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBtX2NhbGw7
CisgICAgU2xvd1BhdGhDYWxsS2V5IG1fa2V5OworfTsKKwordm9pZCBjYWxsT3BlcmF0aW9uKAor
ICAgIFN0YXRlJiwgY29uc3QgUmVnaXN0ZXJTZXQmLCBDQ2FsbEhlbHBlcnMmLCBKX0pJVE9wZXJh
dGlvbl9FU3NpSkksCisgICAgR1BSUmVnIHJlc3VsdCwgR1BSUmVnIGNhbGxGcmFtZVJlZ2lzdGVy
LCBTdHJ1Y3R1cmVTdHViSW5mbyosIEdQUlJlZyBvYmplY3QsCisgICAgU3RyaW5nSW1wbCogdWlk
KTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkZUTAorCisjZW5kaWYgLy8gRU5BQkxFKEZUTF9K
SVQpCisKKyNlbmRpZiAvLyBGVExTbG93UGF0aENhbGxfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZnRsL0ZUTFNsb3dQYXRoQ2FsbEtleS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2Z0bC9GVExTbG93UGF0aENhbGxLZXkuY3BwCShyZXZpc2lvbiAwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExTbG93UGF0aENhbGxLZXkuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsNDEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkZUTFNsb3dQ
YXRoQ2FsbEtleS5oIgorCisjaWYgRU5BQkxFKEZUTF9KSVQpCisKK25hbWVzcGFjZSBKU0MgeyBu
YW1lc3BhY2UgRlRMIHsKKwordm9pZCBTbG93UGF0aENhbGxLZXk6OmR1bXAoUHJpbnRTdHJlYW0m
IG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQoIjx1c2VkUmVnaXN0ZXJzID0gIiwgbV91c2Vk
UmVnaXN0ZXJzLCAiLCBvZmZzZXQgPSAiICsgbV9vZmZzZXQsICIsIGNhbGxUYXJnZXQgPSAiLCBS
YXdQb2ludGVyKG1fY2FsbFRhcmdldCksICI+Iik7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlND
OjpGVEwKKworI2VuZGlmIC8vIEVOQUJMRShGVExfSklUKQorCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZnRsL0ZUTFNsb3dQYXRoQ2FsbEtleS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9mdGwvRlRMU2xvd1BhdGhDYWxsS2V5LmgJKHJldmlzaW9uIDApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFNsb3dQYXRoQ2FsbEtleS5oCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsMTI2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAorICovCisKKyNpZm5kZWYgRlRMU2xvd1BhdGhDYWxsS2V5X2gKKyNkZWZpbmUgRlRMU2xv
d1BhdGhDYWxsS2V5X2gKKworI2lmIEVOQUJMRShGVExfSklUKQorCisjaW5jbHVkZSAiUmVnaXN0
ZXJTZXQuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBGVEwgeworCisvLyBUaGlzIGlz
IHVzZWQgZm9yIGNyZWF0aW5nIHNvbWUgc2FuaXR5IGluIHNsb3ctcGF0aCBjYWxscyBvdXQgb2Yg
dGhlIEZUTCdzIGlubGluZQorLy8gY2FjaGVzLiBUaGUgaWRlYSBpcyB0aGF0IHdlIGRvbid0IHdh
bnQgYWxsIG9mIHRoZSByZWdpc3RlciBzYXZlL3Jlc3RvcmUgc3R1ZmYgdG8KKy8vIGJlIGdlbmVy
YXRlZCBhdCBlYWNoIElDIHNpdGUuIEluc3RlYWQsIHRoZSBJQyBzbG93IHBhdGggY2FsbCBzaXRl
IHdpbGwganVzdCBzYXZlCisvLyB0aGUgcmVnaXN0ZXJzIG5lZWRlZCBmb3IgdGhlIGFyZ3VtZW50
cy4gSXQgd2lsbCBhcnJhbmdlIGZvciB0aGVyZSB0byBiZSBlbm91Z2gKKy8vIHNwYWNlIG9uIHRv
cCBvZiBzdGFjayB0byBzYXZlIHRoZSByZW1haW5pbmcgcmVnaXN0ZXJzIGFuZCB0aGUgcmV0dXJu
IFBDLiBUaGVuIGl0CisvLyB3aWxsIGNhbGwgYSBzaGFyZWQgdGh1bmsgdGhhdCB3aWxsIHNhdmUg
dGhlIHJlbWFpbmluZyByZWdpc3RlcnMuIFRoYXQgdGh1bmsgbmVlZHMKKy8vIHRvIGtub3cgdGhl
IHN0YWNrIG9mZnNldCBhdCB3aGljaCB0aGluZ3MgZ2V0IHNhdmVkIGFsb25nIHdpdGggdGhlIGNh
bGwgdGFyZ2V0LgorCisvLyBOb3RlIHRoYXQgdGhlIG9mZnNldCBpcyAqbm90IGluY2x1ZGluZyog
dGhlIHJldHVybiBQQyB0aGF0IHdvdWxkIGJlIHB1c2hlZCBvbiBYODYuCisKK2NsYXNzIFNsb3dQ
YXRoQ2FsbEtleSB7CitwdWJsaWM6CisgICAgU2xvd1BhdGhDYWxsS2V5KCkKKyAgICAgICAgOiBt
X2NhbGxUYXJnZXQoMCkKKyAgICAgICAgLCBtX29mZnNldCgwKQorICAgIHsKKyAgICB9CisgICAg
CisgICAgU2xvd1BhdGhDYWxsS2V5KGNvbnN0IFJlZ2lzdGVyU2V0JiBzZXQsIHZvaWQqIGNhbGxU
YXJnZXQsIHB0cmRpZmZfdCBvZmZzZXQpCisgICAgICAgIDogbV91c2VkUmVnaXN0ZXJzKHNldCkK
KyAgICAgICAgLCBtX2NhbGxUYXJnZXQoY2FsbFRhcmdldCkKKyAgICAgICAgLCBtX29mZnNldChv
ZmZzZXQpCisgICAgeworICAgIH0KKyAgICAKKyAgICBjb25zdCBSZWdpc3RlclNldCYgdXNlZFJl
Z2lzdGVycygpIGNvbnN0IHsgcmV0dXJuIG1fdXNlZFJlZ2lzdGVyczsgfQorICAgIHZvaWQqIGNh
bGxUYXJnZXQoKSBjb25zdCB7IHJldHVybiBtX2NhbGxUYXJnZXQ7IH0KKyAgICBwdHJkaWZmX3Qg
b2Zmc2V0KCkgY29uc3QgeyByZXR1cm4gbV9vZmZzZXQ7IH0KKyAgICAKKyAgICB2b2lkIGR1bXAo
UHJpbnRTdHJlYW0mKSBjb25zdDsKKyAgICAKKyAgICBlbnVtIEVtcHR5VmFsdWVUYWcgeyBFbXB0
eVZhbHVlIH07CisgICAgZW51bSBEZWxldGVkVmFsdWVUYWcgeyBEZWxldGVkVmFsdWUgfTsKKyAg
ICAKKyAgICBTbG93UGF0aENhbGxLZXkoRW1wdHlWYWx1ZVRhZykKKyAgICAgICAgOiBtX3VzZWRS
ZWdpc3RlcnMoUmVnaXN0ZXJTZXQ6OkVtcHR5VmFsdWUpCisgICAgICAgICwgbV9jYWxsVGFyZ2V0
KDApCisgICAgICAgICwgbV9vZmZzZXQoMCkKKyAgICB7CisgICAgfQorICAgIAorICAgIFNsb3dQ
YXRoQ2FsbEtleShEZWxldGVkVmFsdWVUYWcpCisgICAgICAgIDogbV91c2VkUmVnaXN0ZXJzKEJp
dFZlY3Rvcjo6RGVsZXRlZFZhbHVlKQorICAgICAgICAsIG1fY2FsbFRhcmdldCgwKQorICAgICAg
ICAsIG1fb2Zmc2V0KDApCisgICAgeworICAgIH0KKyAgICAKKyAgICBib29sIGlzRW1wdHlWYWx1
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdXNlZFJlZ2lzdGVycy5pc0VtcHR5VmFsdWUoKTsgfQorICAg
IGJvb2wgaXNEZWxldGVkVmFsdWUoKSBjb25zdCB7IHJldHVybiBtX3VzZWRSZWdpc3RlcnMuaXNE
ZWxldGVkVmFsdWUoKTsgfQorICAgIAorICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBTbG93UGF0
aENhbGxLZXkmIG90aGVyKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fdXNlZFJlZ2lzdGVycyA9
PSBvdGhlci5tX3VzZWRSZWdpc3RlcnMKKyAgICAgICAgICAgICYmIG1fY2FsbFRhcmdldCA9PSBv
dGhlci5tX2NhbGxUYXJnZXQKKyAgICAgICAgICAgICYmIG1fb2Zmc2V0ID09IG90aGVyLm1fb2Zm
c2V0OworICAgIH0KKyAgICB1bnNpZ25lZCBoYXNoKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJl
dHVybiBtX3VzZWRSZWdpc3RlcnMuaGFzaCgpICsgUHRySGFzaDx2b2lkKj46Omhhc2gobV9jYWxs
VGFyZ2V0KSArIG1fb2Zmc2V0OworICAgIH0KKworcHJpdmF0ZToKKyAgICBSZWdpc3RlclNldCBt
X3VzZWRSZWdpc3RlcnM7CisgICAgdm9pZCogbV9jYWxsVGFyZ2V0OworICAgIHB0cmRpZmZfdCBt
X29mZnNldDsKK307CisKK3N0cnVjdCBTbG93UGF0aENhbGxLZXlIYXNoIHsKKyAgICBzdGF0aWMg
dW5zaWduZWQgaGFzaChjb25zdCBTbG93UGF0aENhbGxLZXkmIGtleSkgeyByZXR1cm4ga2V5Lmhh
c2goKTsgfQorICAgIHN0YXRpYyBib29sIGVxdWFsKGNvbnN0IFNsb3dQYXRoQ2FsbEtleSYgYSwg
Y29uc3QgU2xvd1BhdGhDYWxsS2V5JiBiKSB7IHJldHVybiBhID09IGI7IH0KKyAgICBzdGF0aWMg
Y29uc3QgYm9vbCBzYWZlVG9Db21wYXJlVG9FbXB0eU9yRGVsZXRlZCA9IGZhbHNlOworfTsKKwor
fSB9IC8vIG5hbWVzcGFjZSBKU0M6OkZUTAorCituYW1lc3BhY2UgV1RGIHsKKwordGVtcGxhdGU8
dHlwZW5hbWUgVD4gc3RydWN0IERlZmF1bHRIYXNoOwordGVtcGxhdGU8PiBzdHJ1Y3QgRGVmYXVs
dEhhc2g8SlNDOjpGVEw6OlNsb3dQYXRoQ2FsbEtleT4geworICAgIHR5cGVkZWYgSlNDOjpGVEw6
OlNsb3dQYXRoQ2FsbEtleUhhc2ggSGFzaDsKK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0
cnVjdCBIYXNoVHJhaXRzOwordGVtcGxhdGU8PiBzdHJ1Y3QgSGFzaFRyYWl0czxKU0M6OkZUTDo6
U2xvd1BhdGhDYWxsS2V5PiA6IHB1YmxpYyBDdXN0b21IYXNoVHJhaXRzPEpTQzo6RlRMOjpTbG93
UGF0aENhbGxLZXk+IHsgfTsKKworfSAvLyBuYW1lc3BhY2UgV1RGCisKKyNlbmRpZiAvLyBFTkFC
TEUoRlRMX0pJVCkKKworI2VuZGlmIC8vIEZUTFNsb3dQYXRoQ2FsbEtleV9oCisKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMVGh1bmtzLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFRodW5rcy5jcHAJKHJldmlzaW9uIDE1NzcwNykKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMVGh1bmtzLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMTQ0LDYgKzE0NCw2NyBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgb3NyRXhpdEdlbmVyYXRp
b25XCiAgICAgcmV0dXJuIEZJTkFMSVpFX0NPREUocGF0Y2hCdWZmZXIsICgiRlRMIE9TUiBleGl0
IGdlbmVyYXRpb24gdGh1bmsgZm9yIGNhbGxGcmFtZSBhdCAlcyIsIHRvQ1N0cmluZyhsb2NhdGlv
bikuZGF0YSgpKSk7CiB9CiAKK01hY3JvQXNzZW1ibGVyQ29kZVJlZiBzbG93UGF0aENhbGxUaHVu
a0dlbmVyYXRvcihWTSYsIGNvbnN0IFNsb3dQYXRoQ2FsbEtleSYga2V5KQoreworICAgIEFzc2Vt
Ymx5SGVscGVycyBqaXQoJnZtLCAwKTsKKyAgICAKKyAgICAvLyBXZSB3YW50IHRvIHNhdmUgdGhl
IGdpdmVuIHJlZ2lzdGVycyBhdCB0aGUgZ2l2ZW4gb2Zmc2V0LCB0aGVuIHdlIHdhbnQgdG8gc2F2
ZSB0aGUKKyAgICAvLyBvbGQgcmV0dXJuIGFkZHJlc3Mgc29tZXdoZXJlIHBhc3QgdGhhdCBvZmZz
ZXQsIGFuZCB0aGVuIGZpbmFsbHkgd2Ugd2FudCB0byBtYWtlIHRoZQorICAgIC8vIGNhbGwuCisg
ICAgCisgICAgc2l6ZV90IGN1cnJlbnRPZmZzZXQgPSBrZXkub2Zmc2V0KCkgKyBzaXplb2Yodm9p
ZCopOworICAgIAorI2lmIENQVShYODYpIHx8IENQVShYODZfNjQpCisgICAgY3VycmVudE9mZnNl
dCArPSBzaXplb2Yodm9pZCopOworI2VuZGlmCisgICAgCisgICAgZm9yIChNYWNyb0Fzc2VtYmxl
cjo6UmVnaXN0ZXJJRCByZWcgPSBNYWNyb0Fzc2VtYmxlcjo6Zmlyc3RSZWdpc3RlcigpOyByZWcg
PD0gTWFjcm9Bc3NlbWJsZXI6Omxhc3RSZWdpc3RlcigpOyByZWcgPSBzdGF0aWNfY2FzdDxNYWNy
b0Fzc2VtYmxlcjo6UmVnaXN0ZXJJRD4ocmVnICsgMSkpIHsKKyAgICAgICAgaWYgKCFrZXkudXNl
ZFJlZ2lzdGVycygpLmdldChyZWcpKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIGpp
dC5zdG9yZVB0cihyZWcsIEFzc2VtYmx5SGVscGVyczo6QWRkcmVzcyhNYWNyb0Fzc2VtYmxlcjo6
c3RhY2tQb2ludGVyUmVnaXN0ZXIsIGN1cnJlbnRPZmZzZXQpKTsKKyAgICAgICAgY3VycmVudE9m
ZnNldCArPSBzaXplb2Yodm9pZCopOworICAgIH0KKyAgICAKKyAgICBmb3IgKE1hY3JvQXNzZW1i
bGVyOjpGUFJlZ2lzdGVySUQgcmVnID0gTWFjcm9Bc3NlbWJsZXI6OmZpcnN0RlBSZWdpc3Rlcigp
OyByZWcgPD0gTWFjcm9Bc3NlbWJsZXI6Omxhc3RGUFJlZ2lzdGVyKCk7IHJlZyA9IHN0YXRpY19j
YXN0PE1hY3JvQXNzZW1ibGVyOjpGUFJlZ2lzdGVySUQ+KHJlZyArIDEpKSB7CisgICAgICAgIGlm
ICgha2V5LnVzZWRSZWdpc3RlcnMoKS5nZXQocmVnKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOwor
ICAgICAgICBqaXQuc3RvcmVEb3VibGUocmVnLCBBc3NlbWJseUhlbHBlcnM6OkFkZHJlc3MoTWFj
cm9Bc3NlbWJsZXI6OnN0YWNrUG9pbnRlclJlZ2lzdGVyLCBjdXJyZW50T2Zmc2V0KSk7CisgICAg
ICAgIGN1cnJlbnRPZmZzZXQgKz0gc2l6ZW9mKGRvdWJsZSk7CisgICAgfQorICAgIAorICAgIGpp
dC5wcmVzZXJ2ZVJldHVybkFkZHJlc3NBZnRlckNhbGwoR1BSSW5mbzo6bm9uQXJnR1BSMCk7Cisg
ICAgaml0LnN0b3JlUHRyKEdQUkluZm86Om5vbkFyZ0dQUjAsIEFzc2VtYmx5SGVscGVyczo6QWRk
cmVzcyhNYWNyb0Fzc2VtYmxlcjo6c3RhY2tQb2ludGVyUmVnaXN0ZXIsIGtleS5vZmZzZXQoKSkp
OworICAgIAorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGwgPSBqaXQuY2FsbCgpOworICAgIAor
ICAgIGppdC5sb2FkUHRyKEFzc2VtYmx5SGVscGVyczo6QWRkcmVzcyhNYWNyb0Fzc2VtYmxlcjo6
c3RhY2tQb2ludGVyUmVnaXN0ZXIsIGtleS5vZmZzZXQoKSksIEdQUkluZm86Om5vblByZXNlcnZl
ZE5vblJldHVybkdQUik7CisgICAgaml0LnJlc3RvcmVSZXR1cm5BZGRyZXNzQmVmb3JlUmV0dXJu
KEdQUkluZm86Om5vblByZXNlcnZlZE5vblJldHVybkdQUik7CisgICAgCisgICAgZm9yIChNYWNy
b0Fzc2VtYmxlcjo6RlBSZWdpc3RlcklEIHJlZyA9IE1hY3JvQXNzZW1ibGVyOjpsYXN0RlBSZWdp
c3RlcigpOyA7IHJlZyA9IHN0YXRpY19jYXN0PE1hY3JvQXNzZW1ibGVyOjpGUFJlZ2lzdGVySUQ+
KHJlZyAtIDEpKSB7CisgICAgICAgIGlmICgha2V5LnVzZWRSZWdpc3RlcnMoKS5nZXQocmVnKSkK
KyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBjdXJyZW50T2Zmc2V0IC09IHNpemVvZihk
b3VibGUpOworICAgICAgICBqaXQubG9hZERvdWJsZShBc3NlbWJseUhlbHBlcnM6OkFkZHJlc3Mo
TWFjcm9Bc3NlbWJsZXI6OnN0YWNrUG9pbnRlclJlZ2lzdGVyLCBjdXJyZW50T2Zmc2V0KSwgcmVn
KTsKKyAgICAgICAgaWYgKHJlZyA9PSBNYWNyb0Fzc2VtYmxlcjo6Zmlyc3RGUFJlZ2lzdGVyKCkp
CisgICAgICAgICAgICBicmVhazsKKyAgICB9CisgICAgCisgICAgZm9yIChNYWNyb0Fzc2VtYmxl
cjo6UmVnaXN0ZXJJRCByZWcgPSBNYWNyb0Fzc2VtYmxlcjo6bGFzdFJlZ2lzdGVyKCk7IDsgcmVn
ID0gc3RhdGljX2Nhc3Q8TWFjcm9Bc3NlbWJsZXI6OlJlZ2lzdGVySUQ+KHJlZyAtIDEpKSB7Cisg
ICAgICAgIGlmICgha2V5LnVzZWRSZWdpc3RlcnMoKS5nZXQocmVnKSkKKyAgICAgICAgICAgIGNv
bnRpbnVlOworICAgICAgICBjdXJyZW50T2Zmc2V0IC09IHNpemVvZih2b2lkKik7CisgICAgICAg
IGppdC5sb2FkUHRyKEFzc2VtYmx5SGVscGVyczo6QWRkcmVzcyhNYWNyb0Fzc2VtYmxlcjo6c3Rh
Y2tQb2ludGVyUmVnaXN0ZXIsIGN1cnJlbnRPZmZzZXQpLCByZWcpOworICAgICAgICBpZiAocmVn
ID09IE1hY3JvQXNzZW1ibGVyOjpmaXJzdFJlZ2lzdGVyKCkpCisgICAgICAgICAgICBicmVhazsK
KyAgICB9CisgICAgCisgICAgaml0LnJldCgpOworCisgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZl
cih2bSwgJmppdCwgR0xPQkFMX1RIVU5LX0lEKTsKKyAgICBwYXRjaEJ1ZmZlci5saW5rKGNhbGws
IGtleS5jYWxsVGFyZ2V0KCkpOworICAgIHJldHVybiBGSU5BTElaRV9DT0RFKHBhdGNoQnVmZmVy
LCAoIkZUTCBzbG93IHBhdGggY2FsbCB0aHVuayBmb3IgJXMiLCB0b0NTdHJpbmcoa2V5KS5kYXRh
KCkpKTsKK30KKwogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkZUTAogCiAjZW5kaWYgLy8gRU5BQkxF
KEZUTF9KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFRodW5rcy5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMVGh1bmtzLmgJKHJldmlz
aW9uIDE1NzcwNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMVGh1bmtzLmgJKHdv
cmtpbmcgY29weSkKQEAgLTMxLDYgKzMxLDcgQEAKICNpZiBFTkFCTEUoRlRMX0pJVCkKIAogI2lu
Y2x1ZGUgIkZUTExvY2F0aW9uLmgiCisjaW5jbHVkZSAiRlRMU2xvd1BhdGhDYWxsS2V5LmgiCiAj
aW5jbHVkZSAiTWFjcm9Bc3NlbWJsZXJDb2RlUmVmLmgiCiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAu
aD4KIApAQCAtNDMsNiArNDQsNyBAQCBuYW1lc3BhY2UgRlRMIHsKIE1hY3JvQXNzZW1ibGVyQ29k
ZVJlZiBvc3JFeGl0R2VuZXJhdGlvbldpdGhvdXRTdGFja01hcFRodW5rR2VuZXJhdG9yKFZNKik7
CiAKIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBvc3JFeGl0R2VuZXJhdGlvbldpdGhTdGFja01hcFRo
dW5rR2VuZXJhdG9yKFZNJiwgY29uc3QgTG9jYXRpb24mKTsKK01hY3JvQXNzZW1ibGVyQ29kZVJl
ZiBzbG93UGF0aENhbGxUaHVua0dlbmVyYXRvcihWTSYsIGNvbnN0IFNsb3dQYXRoQ2FsbEtleSYp
OwogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBNYXBUeXBlLCB0eXBlbmFtZSBLZXlUeXBlLCB0eXBlbmFt
ZSBHZW5lcmF0b3JUeXBlPgogTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGdlbmVyYXRlSWZOZWNlc3Nh
cnkoCkBAIC02NSw4ICs2NywxNSBAQCBwdWJsaWM6CiAgICAgICAgICAgICB2bSwgbV9vc3JFeGl0
VGh1bmtzLCBsb2NhdGlvbiwgb3NyRXhpdEdlbmVyYXRpb25XaXRoU3RhY2tNYXBUaHVua0dlbmVy
YXRvcik7CiAgICAgfQogICAgIAorICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBnZXRTbG93UGF0
aENhbGxUaHVuayhWTSYgdm0sIGNvbnN0IFNsb3dQYXRoQ2FsbEtleSYga2V5KQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIGdlbmVyYXRlSWZOZWNlc3NhcnkoCisgICAgICAgICAgICB2bSwgbV9zbG93
UGF0aENhbGxUaHVua3MsIGtleSwgc2xvd1BhdGhDYWxsVGh1bmtHZW5lcmF0b3IpOworICAgIH0K
KyAgICAKIHByaXZhdGU6CiAgICAgSGFzaE1hcDxMb2NhdGlvbiwgTWFjcm9Bc3NlbWJsZXJDb2Rl
UmVmPiBtX29zckV4aXRUaHVua3M7CisgICAgSGFzaE1hcDxTbG93UGF0aENhbGxLZXksIE1hY3Jv
QXNzZW1ibGVyQ29kZVJlZj4gbV9zbG93UGF0aENhbGxUaHVua3M7CiB9OwogCiB9IH0gLy8gbmFt
ZXNwYWNlIEpTQzo6RlRMCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0dQUkluZm8u
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0dQUkluZm8uaAkocmV2
aXNpb24gMTU3NzA3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9HUFJJbmZvLmgJKHdv
cmtpbmcgY29weSkKQEAgLTM3OCw3ICszNzgsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGNvbnN0
IEdQUlJlZyByZXR1cm5WYWx1ZUdQUiA9IFg4NlJlZ2lzdGVyczo6ZWF4OyAvLyByZWdUMAogICAg
IHN0YXRpYyBjb25zdCBHUFJSZWcgcmV0dXJuVmFsdWVHUFIyID0gWDg2UmVnaXN0ZXJzOjplZHg7
IC8vIHJlZ1QxCiAgICAgc3RhdGljIGNvbnN0IEdQUlJlZyBub25QcmVzZXJ2ZWROb25SZXR1cm5H
UFIgPSBYODZSZWdpc3RlcnM6OmVzaTsKLQorICAgIAogICAgIHN0YXRpYyBHUFJSZWcgdG9SZWdp
c3Rlcih1bnNpZ25lZCBpbmRleCkKICAgICB7CiAgICAgICAgIEFTU0VSVChpbmRleCA8IG51bWJl
ck9mUmVnaXN0ZXJzKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5l
Q2FjaGVHZW5lcmF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklUSW5saW5lQ2FjaGVHZW5lcmF0b3IuY3BwCShyZXZpc2lvbiAxNTc3MDcpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZUNhY2hlR2VuZXJhdG9yLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMzQsMTAgKzM0LDE2IEBACiAKIG5hbWVzcGFjZSBKU0MgewogCitzdGF0aWMg
U3RydWN0dXJlU3R1YkluZm8qIGdhcmJhZ2VTdHViSW5mbygpCit7CisgICAgc3RhdGljIFN0cnVj
dHVyZVN0dWJJbmZvIHN0dWJJbmZvOworICAgIHJldHVybiAmc3R1YkluZm87Cit9CisKIEpJVElu
bGluZUNhY2hlR2VuZXJhdG9yOjpKSVRJbmxpbmVDYWNoZUdlbmVyYXRvcihDb2RlQmxvY2sqIGNv
ZGVCbG9jaywgQ29kZU9yaWdpbiBjb2RlT3JpZ2luKQogICAgIDogbV9jb2RlQmxvY2soY29kZUJs
b2NrKQogewotICAgIG1fc3R1YkluZm8gPSBtX2NvZGVCbG9jay0+YWRkU3R1YkluZm8oKTsKKyAg
ICBtX3N0dWJJbmZvID0gbV9jb2RlQmxvY2sgPyBtX2NvZGVCbG9jay0+YWRkU3R1YkluZm8oKSA6
IGdhcmJhZ2VTdHViSW5mbygpOwogICAgIG1fc3R1YkluZm8tPmNvZGVPcmlnaW4gPSBjb2RlT3Jp
Z2luOwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZUNhY2hl
R2VuZXJhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJ
bmxpbmVDYWNoZUdlbmVyYXRvci5oCShyZXZpc2lvbiAxNTc3MDcpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVElubGluZUNhY2hlR2VuZXJhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAg
LTY2LDYgKzY2LDcgQEAgcHVibGljOgogICAgICAgICBtX2NhbGwgPSBjYWxsOwogICAgIH0KICAg
ICAKKyAgICBNYWNyb0Fzc2VtYmxlcjo6UGF0Y2hhYmxlSnVtcCBzbG93UGF0aFBhdGNoYWJsZUp1
bXAoKSBjb25zdCB7IHJldHVybiBtX3N0cnVjdHVyZUNoZWNrOyB9CiAgICAgTWFjcm9Bc3NlbWJs
ZXI6Okp1bXAgc2xvd1BhdGhKdW1wKCkgY29uc3QgeyByZXR1cm4gbV9zdHJ1Y3R1cmVDaGVjay5t
X2p1bXA7IH0KIAogICAgIHZvaWQgZmluYWxpemUoTGlua0J1ZmZlciYpOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9SZWdpc3RlclNldC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9SZWdpc3RlclNldC5jcHAJKHJldmlzaW9uIDE1NzcwNykKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVnaXN0ZXJTZXQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0zMywxMiArMzMsMTkgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKLVJlZ2lzdGVyU2V0IFJl
Z2lzdGVyU2V0OjpzcGVjaWFsUmVnaXN0ZXJzKCkKK1JlZ2lzdGVyU2V0IFJlZ2lzdGVyU2V0Ojpz
dGFja1JlZ2lzdGVycygpCiB7CiAgICAgUmVnaXN0ZXJTZXQgcmVzdWx0OwotICAgIHJlc3VsdC5z
ZXQoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIpOwogICAgIHJlc3VsdC5zZXQoTWFjcm9Bc3Nl
bWJsZXI6OnN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKICAgICByZXN1bHQuc2V0KE1hY3JvQXNzZW1i
bGVyOjpmcmFtZVBvaW50ZXJSZWdpc3Rlcik7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworUmVn
aXN0ZXJTZXQgUmVnaXN0ZXJTZXQ6OnNwZWNpYWxSZWdpc3RlcnMoKQoreworICAgIFJlZ2lzdGVy
U2V0IHJlc3VsdDsKKyAgICByZXN1bHQubWVyZ2Uoc3RhY2tSZWdpc3RlcnMoKSk7CisgICAgcmVz
dWx0LnNldChHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rlcik7CiAjaWYgVVNFKEpTVkFMVUU2NCkK
ICAgICByZXN1bHQuc2V0KEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3Rlcik7CiAgICAgcmVz
dWx0LnNldChHUFJJbmZvOjp0YWdNYXNrUmVnaXN0ZXIpOwpAQCAtNDYsNiArNTMsMjggQEAgUmVn
aXN0ZXJTZXQgUmVnaXN0ZXJTZXQ6OnNwZWNpYWxSZWdpc3RlcgogICAgIHJldHVybiByZXN1bHQ7
CiB9CiAKK1JlZ2lzdGVyU2V0IFJlZ2lzdGVyU2V0OjpjYWxsZWVTYXZlUmVnaXN0ZXJzKCkKK3sK
KyAgICBSZWdpc3RlclNldCByZXN1bHQ7CisjaWYgVVNFKFg4Nl82NCkKKyAgICByZXN1bHQuc2V0
KFg4NlJlZ2lzdGVyczo6cmJ4KTsKKyAgICByZXN1bHQuc2V0KFg4NlJlZ2lzdGVyczo6cmJwKTsK
KyAgICByZXN1bHQuc2V0KFg4NlJlZ2lzdGVyczo6cjEwKTsKKyAgICByZXN1bHQuc2V0KFg4NlJl
Z2lzdGVyczo6cjEyKTsKKyAgICByZXN1bHQuc2V0KFg4NlJlZ2lzdGVyczo6cjEzKTsKKyAgICBy
ZXN1bHQuc2V0KFg4NlJlZ2lzdGVyczo6cjE0KTsKKyAgICByZXN1bHQuc2V0KFg4NlJlZ2lzdGVy
czo6cjE1KTsKKyNlbHNlCisjZXJyb3IgIlVuc3VwcG9ydGVkIGluc3RydWN0aW9uIHNldCIKKyNl
bmRpZgorICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgUmVnaXN0ZXJTZXQ6OmR1bXAoUHJp
bnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBtX3ZlY3Rvci5kdW1wKG91dCk7Cit9CisKIH0g
Ly8gbmFtZXNwYWNlIEpTQwogCiAjZW5kaWYgLy8gRU5BQkxFKEpJVCkKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvUmVnaXN0ZXJTZXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L1JlZ2lzdGVyU2V0LmgJKHJldmlzaW9uIDE1NzcwNykKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVnaXN0ZXJTZXQuaAkod29ya2luZyBjb3B5KQpAQCAtNDIs
NyArNDIsOSBAQCBjbGFzcyBSZWdpc3RlclNldCB7CiBwdWJsaWM6CiAgICAgUmVnaXN0ZXJTZXQo
KSB7IH0KICAgICAKKyAgICBzdGF0aWMgUmVnaXN0ZXJTZXQgc3RhY2tSZWdpc3RlcnMoKTsKICAg
ICBzdGF0aWMgUmVnaXN0ZXJTZXQgc3BlY2lhbFJlZ2lzdGVycygpOworICAgIHN0YXRpYyBSZWdp
c3RlclNldCBjYWxsZWVTYXZlUmVnaXN0ZXJzKCk7CiAKICAgICB2b2lkIHNldChHUFJSZWcgcmVn
LCBib29sIHZhbHVlID0gdHJ1ZSkKICAgICB7CkBAIC03NiwxMyArNzgsNTUgQEAgcHVibGljOgog
ICAgIGJvb2wgZ2V0KEZQUlJlZyByZWcpIGNvbnN0IHsgcmV0dXJuIG1fdmVjdG9yLmdldChNYWNy
b0Fzc2VtYmxlcjo6cmVnaXN0ZXJJbmRleChyZWcpKTsgfQogICAgIAogICAgIHZvaWQgbWVyZ2Uo
Y29uc3QgUmVnaXN0ZXJTZXQmIG90aGVyKSB7IG1fdmVjdG9yLm1lcmdlKG90aGVyLm1fdmVjdG9y
KTsgfQorICAgIHZvaWQgZXhjbHVkZShjb25zdCBSZWdpc3RlclNldCYgb3RoZXIpIHsgbV92ZWN0
b3IuZXhjbHVkZShvdGhlci5tX3ZlY3Rvcik7IH0KKyAgICAKKyAgICBzaXplX3QgbnVtYmVyT2ZT
ZXRSZWdpc3RlcnMoKSBjb25zdCB7IHJldHVybiBtX3ZlY3Rvci5iaXRDb3VudCgpOyB9CisgICAg
CisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CisgICAgCisgICAgZW51bSBFbXB0
eVZhbHVlVGFnIHsgRW1wdHlWYWx1ZSB9OworICAgIGVudW0gRGVsZXRlZFZhbHVlVGFnIHsgRGVs
ZXRlZFZhbHVlIH07CisgICAgCisgICAgUmVnaXN0ZXJTZXQoRW1wdHlWYWx1ZVRhZykKKyAgICAg
ICAgOiBtX3ZlY3RvcihCaXRWZWN0b3I6OkVtcHR5VmFsdWUpCisgICAgeworICAgIH0KKyAgICAK
KyAgICBSZWdpc3RlclNldChEZWxldGVkVmFsdWVUYWcpCisgICAgICAgIDogbV92ZWN0b3IoQml0
VmVjdG9yOjpEZWxldGVkVmFsdWUpCisgICAgeworICAgIH0KKyAgICAKKyAgICBib29sIGlzRW1w
dHlWYWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdmVjdG9yLmlzRW1wdHlWYWx1ZSgpOyB9CisgICAg
Ym9vbCBpc0RlbGV0ZWRWYWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdmN0b3IuaXNEZWxldGVkVmFs
dWUoKTsgfQorICAgIAorICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBSZWdpc3RlclNldCYgb3Ro
ZXIpIHsgcmV0dXJuIG1fdmVjdG9yID09IG90aGVyLm1fdmVjdG9yOyB9CisgICAgdW5zaWduZWQg
aGFzaCgpIGNvbnN0IHsgcmV0dXJuIG1fdmVjdG9yLmhhc2goKTsgfQogICAgIAogcHJpdmF0ZToK
ICAgICBCaXRWZWN0b3IgbV92ZWN0b3I7CiB9OwogCitzdHJ1Y3QgUmVnaXN0ZXJTZXRIYXNoIHsK
KyAgICBzdGF0aWMgdW5zaWduZWQgaGFzaChjb25zdCBSZWdpc3RlclNldCYgc2V0KSB7IHJldHVy
biBzZXQuaGFzaCgpOyB9CisgICAgc3RhdGljIGJvb2wgZXF1YWwoY29uc3QgUmVnaXN0ZXJTZXQm
IGEsIGNvbnN0IFJlZ2lzdGVyU2V0JiBiKSB7IHJldHVybiBhID09IGI7IH0KKyAgICBzdGF0aWMg
Y29uc3QgYm9vbCBzYWZlVG9Db21wYXJlVG9FbXB0eU9yRGVsZXRlZCA9IGZhbHNlOworfTsKKwog
fSAvLyBuYW1lc3BhY2UgSlNDCiAKK25hbWVzcGFjZSBXVEYgeworCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBUPiBzdHJ1Y3QgRGVmYXVsdEhhc2g7Cit0ZW1wbGF0ZTw+IHN0cnVjdCBEZWZhdWx0SGFzaDxK
U0M6OlJlZ2lzdGVyU2V0PiB7CisgICAgdHlwZWRlZiBSZWdpc3RlclNldEhhc2ggSGFzaDsKK307
CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBIYXNoVHJhaXRzOwordGVtcGxhdGU8PiBz
dHJ1Y3QgSGFzaFRyYWl0czxKU0M6OlJlZ2lzdGVyU2V0PiA6IHB1YmxpYyBDdXN0b21IYXNoVHJh
aXRzPEpTQzo6UmVnaXN0ZXJTZXQ+IHsgfTsKKworfSAvLyBuYW1lc3BhY2UgV1RGCisKICNlbmRp
ZiAvLyBFTkFCTEUoSklUKQogCiAjZW5kaWYgLy8gUmVnaXN0ZXJTZXRfaApJbmRleDogU291cmNl
L1dURi93dGYvQml0VmVjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9CaXRW
ZWN0b3IuY3BwCShyZXZpc2lvbiAxNTc3MDcpCisrKyBTb3VyY2UvV1RGL3d0Zi9CaXRWZWN0b3Iu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjQsNyArMTI0LDU4IEBAIHZvaWQgQml0VmVjdG9yOjpt
ZXJnZVNsb3coY29uc3QgQml0VmVjdG8KICAgICAgICAgYS0+Yml0cygpW2ldIHw9IGItPmJpdHMo
KVtpXTsKIH0KIAotdm9pZCBCaXRWZWN0b3I6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkKK3ZvaWQg
Qml0VmVjdG9yOjpleGNsdWRlU2xvdyhjb25zdCBCaXRWZWN0b3ImIG90aGVyKQoreworICAgIGlm
IChvdGhlci5pc0lubGluZSgpKSB7CisgICAgICAgIEFTU0VSVCghaXNJbmxpbmUoKSk7CisgICAg
ICAgICpiaXRzKCkgJj0gfmNsZWFuc2VJbmxpbmVCaXRzKG90aGVyLm1fYml0c09yUG9pbnRlcik7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgaWYgKGlzSW5saW5lKCkpIHsKKyAg
ICAgICAgQVNTRVJUKCFvdGhlci5pc0lubGluZSgpKTsKKyAgICAgICAgbV9iaXRzT3JQb2ludGVy
ICY9IH4qb3RoZXIub3V0T2ZMaW5lQml0cygpOworICAgICAgICBtX2JpdHNPclBvaW50ZXIgfD0g
KHN0YXRpY19jYXN0PHVpbnRwdHJfdD4oMSkgPDwgbWF4SW5saW5lQml0cygpKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKyAgICAKKyAgICBPdXRPZkxpbmVCaXRzKiBhID0gb3V0T2ZMaW5lQml0
cygpOworICAgIGNvbnN0IE91dE9mTGluZUJpdHMqIGIgPSBvdGhlci5vdXRPZkxpbmVCaXRzKCk7
CisgICAgZm9yICh1bnNpZ25lZCBpID0gc3RkOjptaW4oYS0+bnVtV29yZHMoKSwgYi0+bnVtV29y
ZHMoKSk7IGktLTspCisgICAgICAgIGEtPmJpdHMoKVtpXSAmPSB+Yi0+Yml0cygpW2ldOworfQor
CitzaXplX3QgQml0VmVjdG9yOjpiaXRDb3VudFNsb3coKSBjb25zdAoreworICAgIEFTU0VSVCgh
aXNJbmxpbmUoKSk7CisgICAgY29uc3QgT3V0T2ZMaW5lQml0cyogYml0cyA9IG91dE9mTGluZUJp
dHMoKTsKKyAgICBzaXplX3QgcmVzdWx0ID0gMDsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSBiaXRz
LT5udW1Xb3JkcygpOyBpLS07KQorICAgICAgICByZXN1bHQgKz0gYml0Q291bnQoYml0cy0+Yml0
cygpW2ldKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitib29sIEJpdFZlY3Rvcjo6ZXF1YWxz
U2xvd0Nhc2UoY29uc3QgQml0VmVjdG9yJiBvdGhlcikgY29uc3QKK3sKKyAgICAvLyBUaGlzIGlz
IHJlYWxseSBjaGVlc3ksIGJ1dCBwcm9iYWJseSBnb29kIGVub3VnaCBmb3Igbm93LgorICAgIGZv
ciAodW5zaWduZWQgaSA9IHN0ZDo6bWF4KHNpemUoKSwgb3RoZXIuc2l6ZSgpKTsgaS0tOykgewor
ICAgICAgICBpZiAoZ2V0KGkpICE9IG90aGVyLmdldChpKSkKKyAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICB9CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3VpbnRwdHJfdCBCaXRWZWN0b3I6
Omhhc2hTbG93Q2FzZSgpIGNvbnN0Cit7CisgICAgQVNTRVJUKCFpc0lubGluZSgpKTsKKyAgICBj
b25zdCBPdXRPZkxpbmVCaXRzKiBiaXRzID0gb3V0T2ZMaW5lQml0cygpOworICAgIHVpbnRwdHJf
dCByZXN1bHQgPSAwOworICAgIGZvciAodW5zaWduZWQgaSA9IGJpdHMtPm51bVdvcmRzKCk7IGkt
LTspCisgICAgICAgIHJlc3VsdCBePSBiaXRzLT5iaXRzKClbaV07CisgICAgcmV0dXJuIHJlc3Vs
dDsKK30KKwordm9pZCBCaXRWZWN0b3I6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKIHsK
ICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemUoKTsgKytpKSB7CiAgICAgICAgIGlmIChn
ZXQoaSkpCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9CaXRWZWN0b3IuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV1RGL3d0Zi9CaXRWZWN0b3IuaAkocmV2aXNpb24gMTU3NzA3KQorKysgU291cmNlL1dU
Ri93dGYvQml0VmVjdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTE3OCw3ICsxNzgsNTkgQEAgcHVi
bGljOiAKICAgICAgICAgbV9iaXRzT3JQb2ludGVyIHw9IG90aGVyLm1fYml0c09yUG9pbnRlcjsK
ICAgICB9CiAgICAgCi0gICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJiBvdXQpOworICAgIHZvaWQg
ZXhjbHVkZShjb25zdCBCaXRWZWN0b3ImIG90aGVyKQorICAgIHsKKyAgICAgICAgaWYgKCFpc0lu
bGluZSgpIHx8ICFvdGhlci5pc0lubGluZSgpKSB7CisgICAgICAgICAgICBleGNsdWRlU2xvdyhv
dGhlcik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgbV9iaXRzT3JQ
b2ludGVyICY9IH5vdGhlci5tX2JpdHNPclBvaW50ZXI7CisgICAgfQorICAgIAorICAgIHNpemVf
dCBiaXRDb3VudCgpIGNvbnN0CisgICAgeworICAgICAgICBpZiAoaXNJbmxpbmUoKSkKKyAgICAg
ICAgICAgIHJldHVybiBiaXRDb3VudChjbGVhbnNlSW5saW5lQml0cyhtX2JpdHNPclBvaW50ZXIp
KTsKKyAgICAgICAgcmV0dXJuIGJpdENvdW50U2xvdygpOworICAgIH0KKyAgICAKKyAgICB2b2lk
IGR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3Q7CisgICAgCisgICAgZW51bSBFbXB0eVZhbHVl
VGFnIHsgRW1wdHlWYWx1ZSB9OworICAgIGVudW0gRGVsZXRlZFZhbHVlVGFnIHsgRGVsZXRlZFZh
bHVlIH07CisgICAgCisgICAgQml0VmVjdG9yKEVtcHR5VmFsdWVUYWcpCisgICAgICAgIDogbV9i
aXRzT3JQb2ludGVyKDApCisgICAgeworICAgIH0KKyAgICAKKyAgICBCaXRWZWN0b3IoRGVsZXRl
ZFZhbHVlVGFnKQorICAgICAgICA6IG1fYml0c09yUG9pbnRlcigxKQorICAgIHsKKyAgICB9Cisg
ICAgCisgICAgYm9vbCBpc0VtcHR5VmFsdWUoKSBjb25zdCB7IHJldHVybiAhbV9iaXRzT3JQb2lu
dGVyOyB9CisgICAgYm9vbCBpc0RlbGV0ZWRWYWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fYml0c09y
UG9pbmVyID09IDE7IH0KKyAgICAKKyAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgQml0VmVjdG9y
JiBvdGhlcikKKyAgICB7CisgICAgICAgIGlmIChpc0lubGluZSgpICYmIG90aGVyLmlzSW5saW5l
KCkpCisgICAgICAgICAgICByZXR1cm4gbV9iaXRzT3JQb2ludGVyID09IG90aGVyLm1fYml0c09y
UG9pbnRlcjsKKyAgICAgICAgcmV0dXJuIGVxdWFsc1Nsb3dDYXNlKG90aGVyKTsKKyAgICB9Cisg
ICAgCisgICAgdW5zaWduZWQgaGFzaCgpIGNvbnN0CisgICAgeworICAgICAgICAvLyBUaGlzIGlz
IGEgdmVyeSBzaW1wbGUgaGFzaC4gSnVzdCB4b3IgdG9nZXRoZXIgdGhlIHdvcmRzIHRoYXQgaG9s
ZCB0aGUgdmFyaW91cworICAgICAgICAvLyBiaXRzIGFuZCB0aGVuIGNvbXB1dGUgdGhlIGhhc2gu
IFRoaXMgbWFrZXMgaXQgdmVyeSBlYXN5IHRvIGRlYWwgd2l0aCBiaXR2ZWN0b3JzCisgICAgICAg
IC8vIHRoYXQgaGF2ZSBhIGxvdCBvZiB0cmFpbGluZyB6ZXJvJ3MuCisgICAgICAgIHVpbnRwdHJf
dCB2YWx1ZTsKKyAgICAgICAgaWYgKGlzSW5saW5lKCkpCisgICAgICAgICAgICB2YWx1ZSA9IGNs
ZWFuc2VJbmxpbmVCaXRzKG1fYml0c09yUG9pbnRlcik7CisgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgIHZhbHVlID0gaGFzaFNsb3dDYXNlKCk7CisgICAgICAgIHJldHVybiBJbnRIYXNoPHVpbnRw
dHJfdD46Omhhc2godmFsdWUpOworICAgIH0KICAgICAKIHByaXZhdGU6CiAgICAgc3RhdGljIHVu
c2lnbmVkIGJpdHNJblBvaW50ZXIoKQpAQCAtMjA3LDYgKzI1OSwxNCBAQCBwcml2YXRlOgogICAg
ICAgICByZXR1cm4gYml0cyAmIH4oc3RhdGljX2Nhc3Q8dWludHB0cl90PigxKSA8PCBtYXhJbmxp
bmVCaXRzKCkpOwogICAgIH0KICAgICAKKyAgICBzdGF0aWMgc2l6ZV90IGJpdENvdW50KHVpbnRw
dHJfdCBiaXRzKQorICAgIHsKKyAgICAgICAgaWYgKHNpemVvZih1aW50cHRyX3QpID09IDQpCisg
ICAgICAgICAgICByZXR1cm4gV1RGOjpiaXRDb3VudChzdGF0aWNfY2FzdDx1bnNpZ25lZD4oYml0
cykpOworICAgICAgICBlbHNlCisgICAgICAgICAgICByZXR1cm4gV1RGOjpiaXRDb3VudChzdGF0
aWNfY2FzdDx1aW50NjRfdD4oYml0cykpOworICAgIH0KKyAgICAKICAgICBjbGFzcyBPdXRPZkxp
bmVCaXRzIHsKICAgICBwdWJsaWM6CiAgICAgICAgIHNpemVfdCBudW1CaXRzKCkgY29uc3QgeyBy
ZXR1cm4gbV9udW1CaXRzOyB9CkBAIC0yMzYsNiArMjk2LDEyIEBAIHByaXZhdGU6CiAgICAgV1RG
X0VYUE9SVF9QUklWQVRFIHZvaWQgc2V0U2xvdyhjb25zdCBCaXRWZWN0b3ImIG90aGVyKTsKICAg
ICAKICAgICBXVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBtZXJnZVNsb3coY29uc3QgQml0VmVjdG9y
JiBvdGhlcik7CisgICAgV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgZXhjbHVkZVNsb3coY29uc3Qg
Qml0VmVjdG9yJiBvdGhlcik7CisgICAgCisgICAgV1RGX0VYUE9SVF9QUklWQVRFIHNpemVfdCBi
aXRDb3VudFNsb3coKSBjb25zdDsKKyAgICAKKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgYm9vbCBl
cXVhbHNTbG93Q2FzZShjb25zdCBCaXRWZWN0b3ImIG90aGVyKSBjb25zdDsKKyAgICBXVEZfRVhQ
T1JUX1BSSVZBVEUgdWludHB0cl90IGhhc2hTbG93Q2FzZSgpIGNvbnN0OwogICAgIAogICAgIHVp
bnRwdHJfdCogYml0cygpCiAgICAgewpAQCAtMjU0LDYgKzMyMCwyMCBAQCBwcml2YXRlOgogICAg
IHVpbnRwdHJfdCBtX2JpdHNPclBvaW50ZXI7CiB9OwogCitzdHJ1Y3QgQml0VmVjdG9ySGFzaCB7
CisgICAgc3RhdGljIHVuc2lnbmVkIGhhc2goY29uc3QgQml0VmVjdG9yJiB2ZWN0b3IpIHsgcmV0
dXJuIHZlY3Rvci5oYXNoKCk7IH0KKyAgICBzdGF0aWMgYm9vbCBlcXVhbChjb25zdCBCaXRWZWN0
b3ImIGEsIGNvbnN0IEJpdFZlY3RvciYgYikgeyByZXR1cm4gYSA9PSBiOyB9CisgICAgc3RhdGlj
IGNvbnN0IGJvb2wgc2FmZVRvQ29tcGFyZVRvRW1wdHlPckRlbGV0ZWQgPSBmYWxzZTsKK307CisK
K3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBEZWZhdWx0SGFzaDsKK3RlbXBsYXRlPD4gc3Ry
dWN0IERlZmF1bHRIYXNoPEJpdFZlY3Rvcj4geworICAgIHR5cGVkZWYgQml0VmVjdG9ySGFzaCBI
YXNoOworfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEhhc2hUcmFpdHM7Cit0ZW1w
bGF0ZTw+IHN0cnVjdCBIYXNoVHJhaXRzPEJpdFZlY3Rvcj4gOiBwdWJsaWMgQ3VzdG9tSGFzaFRy
YWl0czxCaXRWZWN0b3I+IHsgfTsKKwogfSAvLyBuYW1lc3BhY2UgV1RGCiAKIHVzaW5nIFdURjo6
Qml0VmVjdG9yOwpJbmRleDogU291cmNlL1dURi93dGYvSGFzaFRyYWl0cy5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XVEYvd3RmL0hhc2hUcmFpdHMuaAkocmV2aXNpb24gMTU3NzA3KQorKysgU291
cmNlL1dURi93dGYvSGFzaFRyYWl0cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMTYsNiArMjE2LDM0
IEBAIHN0cnVjdCBOdWxsYWJsZUhhc2hUcmFpdHMgOiBwdWJsaWMgSGFzaFQKICAgICBzdGF0aWMg
VCBlbXB0eVZhbHVlKCkgeyByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxUPigxKTsgfQogfTsKIAor
Ly8gVXNlZnVsIGZvciBjbGFzc2VzIHRoYXQgd2FudCBjb21wbGV0ZSBjb250cm9sIG92ZXIgd2hh
dCBpcyBlbXB0eSBhbmQgd2hhdCBpcyBkZWxldGVkLAorLy8gYW5kIGhvdyB0byBjb25zdHJ1Y3Qg
Ym90aC4KK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitzdHJ1Y3QgQ3VzdG9tSGFzaFRyYWl0cyB7Cisg
ICAgc3RhdGljIGNvbnN0IGJvb2wgZW1wdHlWYWx1ZUlzWmVybyA9IGZhbHNlOworICAgIHN0YXRp
YyBjb25zdCBib29sIGhhc0lzRW1wdHlWYWx1ZUZ1bmN0aW9uID0gdHJ1ZTsKKyAgICAKKyAgICBz
dGF0aWMgdm9pZCBjb25zdHJ1Y3REZWxldGVkVmFsdWUoVCYgc2xvdCkKKyAgICB7CisgICAgICAg
IG5ldyAoTm90TnVsbCwgJnNsb3QpIFQoVDo6RGVsZXRlZFZhbHVlKTsKKyAgICB9CisgICAgCisg
ICAgc3RhdGljIGJvb2wgaXNEZWxldGVkVmFsdWUoY29uc3QgVCYgdmFsdWUpCisgICAgeworICAg
ICAgICByZXR1cm4gdmFsdWUuaXNEZWxldGVkVmFsdWUoKTsKKyAgICB9CisgICAgCisgICAgc3Rh
dGljIFQgZW1wdHlWYWx1ZSgpCisgICAgeworICAgICAgICByZXR1cm4gVChUOjpFbXB0eVZhbHVl
KTsKKyAgICB9CisgICAgCisgICAgc3RhdGljIGJvb2wgaXNFbXB0eVZhbHVlKGNvbnN0IFQmIHZh
bHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHZhbHVlLmlzRW1wdHlWYWx1ZSgpOworICAgIH0K
K307CisKIH0gLy8gbmFtZXNwYWNlIFdURgogCiB1c2luZyBXVEY6Okhhc2hUcmFpdHM7CkluZGV4
OiBTb3VyY2UvV1RGL3d0Zi9TdGRMaWJFeHRyYXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RG
L3d0Zi9TdGRMaWJFeHRyYXMuaAkocmV2aXNpb24gMTU3NzA3KQorKysgU291cmNlL1dURi93dGYv
U3RkTGliRXh0cmFzLmgJKHdvcmtpbmcgY29weSkKQEAgLTE1Nyw2ICsxNTcsMTEgQEAgaW5saW5l
IHNpemVfdCBiaXRDb3VudCh1bnNpZ25lZCBiaXRzKQogICAgIHJldHVybiAoKChiaXRzICsgKGJp
dHMgPj4gNCkpICYgMHhGMEYwRjBGKSAqIDB4MTAxMDEwMSkgPj4gMjQ7CiB9CiAKK2lubGluZSBz
aXplX3QgYml0Q291bnQodWludDY0X3QgYml0cykKK3sKKyAgICByZXR1cm4gYml0Q291bnQoc3Rh
dGljX2Nhc3Q8dW5zaWduZWQ+KGJpdHMpKSArIGJpdENvdW50KHN0YXRpY19jYXN0PHVuc2lnbmVk
PihiaXRzID4+IDMyKSk7Cit9CisKIC8vIE1hY3JvIHRoYXQgcmV0dXJucyBhIGNvbXBpbGUgdGlt
ZSBjb25zdGFudCB3aXRoIHRoZSBsZW5ndGggb2YgYW4gYXJyYXksIGJ1dCBnaXZlcyBhbiBlcnJv
ciBpZiBwYXNzZWQgYSBub24tYXJyYXkuCiB0ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgU2l6
ZT4gY2hhciAoJkFycmF5TGVuZ3RoSGVscGVyRnVuY3Rpb24oVCAoJilbU2l6ZV0pKVtTaXplXTsK
IC8vIEdDQyBuZWVkcyBzb21lIGhlbHAgdG8gZGVkdWNlIGEgMCBsZW5ndGggYXJyYXkuCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>214811</attachid>
            <date>2013-10-21 21:09:00 -0700</date>
            <delta_ts>2013-10-21 21:13:57 -0700</delta_ts>
            <desc>I think I wrote all of the code</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>126562</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTGlua0J1ZmZlci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9MaW5rQnVmZmVyLmNw
cAkocmV2aXNpb24gMTU3NzA3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9M
aW5rQnVmZmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDEyLCAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzcsNyArMzcsMTEgQEAgTGlua0J1ZmZlcjo6
Q29kZVJlZiBMaW5rQnVmZmVyOjpmaW5hbGl6ZQogewogICAgIHBlcmZvcm1GaW5hbGl6YXRpb24o
KTsKICAgICAKLSAgICByZXR1cm4gQ29kZVJlZihtX2V4ZWN1dGFibGVNZW1vcnkpOworICAgIEFT
U0VSVChtX2RpZEFsbG9jYXRlKTsKKyAgICBpZiAobV9leGVjdXRhYmxlTWVtb3J5KQorICAgICAg
ICByZXR1cm4gQ29kZVJlZihtX2V4ZWN1dGFibGVNZW1vcnkpOworICAgIAorICAgIHJldHVybiBD
b2RlUmVmOjpjcmVhdGVTZWxmTWFuYWdlZENvZGVSZWYobV9jb2RlKTsKIH0KIAogTGlua0J1ZmZl
cjo6Q29kZVJlZiBMaW5rQnVmZmVyOjpmaW5hbGl6ZUNvZGVXaXRoRGlzYXNzZW1ibHkoY29uc3Qg
Y2hhciogZm9ybWF0LCAuLi4pCkBAIC0xNTEsNiArMTU1LDE1IEBAIHZvaWQgTGlua0J1ZmZlcjo6
bGlua0NvZGUodm9pZCogb3duZXJVSUQKIAogdm9pZCBMaW5rQnVmZmVyOjphbGxvY2F0ZShzaXpl
X3QgaW5pdGlhbFNpemUsIHZvaWQqIG93bmVyVUlELCBKSVRDb21waWxhdGlvbkVmZm9ydCBlZmZv
cnQpCiB7CisgICAgaWYgKG1fY29kZSkgeworICAgICAgICBpZiAoaW5pdGlhbFNpemUgPiBtX3Np
emUpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgICAgICBtX2RpZEFsbG9jYXRl
ID0gdHJ1ZTsKKyAgICAgICAgbV9zaXplID0gaW5pdGlhbFNpemU7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisgICAgCiAgICAgbV9leGVjdXRhYmxlTWVtb3J5ID0gbV92bS0+ZXhlY3V0YWJsZUFs
bG9jYXRvci5hbGxvY2F0ZSgqbV92bSwgaW5pdGlhbFNpemUsIG93bmVyVUlELCBlZmZvcnQpOwog
ICAgIGlmICghbV9leGVjdXRhYmxlTWVtb3J5KQogICAgICAgICByZXR1cm47CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0xpbmtCdWZmZXIuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0xpbmtCdWZmZXIuaAkocmV2aXNpb24gMTU3
NzA3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9MaW5rQnVmZmVyLmgJKHdv
cmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA5LCAy
MDEwLCAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAwOSwgMjAxMCwgMjAxMiwgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTk0LDYgKzk0LDIyIEBAIHB1Ymxp
YzoKICAgICAgICAgbGlua0NvZGUob3duZXJVSUQsIGVmZm9ydCk7CiAgICAgfQogCisgICAgTGlu
a0J1ZmZlcihWTSYgdm0sIE1hY3JvQXNzZW1ibGVyKiBtYXNtLCB2b2lkKiBjb2RlLCBzaXplX3Qg
c2l6ZSkKKyAgICAgICAgOiBtX3NpemUoc2l6ZSkKKyNpZiBFTkFCTEUoQlJBTkNIX0NPTVBBQ1RJ
T04pCisgICAgICAgICwgbV9pbml0aWFsU2l6ZSgwKQorI2VuZGlmCisgICAgICAgICwgbV9kaWRB
bGxvY2F0ZShmYWxzZSkKKyAgICAgICAgLCBtX2NvZGUoY29kZSkKKyAgICAgICAgLCBtX2Fzc2Vt
YmxlcihtYXNtKQorICAgICAgICAsIG1fdm0oJnZtKQorI2lmbmRlZiBOREVCVUcKKyAgICAgICAg
LCBtX2NvbXBsZXRlZChmYWxzZSkKKyNlbmRpZgorICAgIHsKKyAgICAgICAgbGlua0NvZGUob3du
ZXJVSUQsIGVmZm9ydCk7CisgICAgfQorCiAgICAgfkxpbmtCdWZmZXIoKQogICAgIHsKICAgICB9
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEFiYnJldmlhdGlvbnMuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEFiYnJldmlhdGlvbnMuaAko
cmV2aXNpb24gMTU3NzA3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExBYmJyZXZp
YXRpb25zLmgJKHdvcmtpbmcgY29weSkKQEAgLTE0NSw2ICsxNDUsNyBAQCBlbnVtIEJpdEV4dGVu
c2lvbiB7IFplcm9FeHRlbmQsIFNpZ25FeHRlCiBzdGF0aWMgaW5saW5lIExWYWx1ZSBjb25zdElu
dChMVHlwZSB0eXBlLCB1bnNpZ25lZCBsb25nIGxvbmcgdmFsdWUsIEJpdEV4dGVuc2lvbiBleHRl
bnNpb24gPSBaZXJvRXh0ZW5kKSB7IHJldHVybiBsbHZtLT5Db25zdEludCh0eXBlLCB2YWx1ZSwg
ZXh0ZW5zaW9uID09IFNpZ25FeHRlbmQpOyB9CiBzdGF0aWMgaW5saW5lIExWYWx1ZSBjb25zdFJl
YWwoTFR5cGUgdHlwZSwgZG91YmxlIHZhbHVlKSB7IHJldHVybiBsbHZtLT5Db25zdFJlYWwodHlw
ZSwgdmFsdWUpOyB9CiBzdGF0aWMgaW5saW5lIExWYWx1ZSBjb25zdEludFRvUHRyKExWYWx1ZSB2
YWx1ZSwgTFR5cGUgdHlwZSkgeyByZXR1cm4gbGx2bS0+Q29uc3RJbnRUb1B0cih2YWx1ZSwgdHlw
ZSk7IH0KK3N0YXRpYyBpbmxpbmUgTFZhbHVlIGNvbnN0TnVsbChMVHlwZSB0eXBlKSB7IHJldHVy
biBsbHZtLT5Db25zdE51bGwodHlwZSk7IH0KIHN0YXRpYyBpbmxpbmUgTFZhbHVlIGNvbnN0Qml0
Q2FzdChMVmFsdWUgdmFsdWUsIExUeXBlIHR5cGUpIHsgcmV0dXJuIGxsdm0tPkNvbnN0Qml0Q2Fz
dCh2YWx1ZSwgdHlwZSk7IH0KIAogc3RhdGljIGlubGluZSBMQmFzaWNCbG9jayBhcHBlbmRCYXNp
Y0Jsb2NrKExDb250ZXh0IGNvbnRleHQsIExWYWx1ZSBmdW5jdGlvbiwgY29uc3QgY2hhciogbmFt
ZSA9ICIiKSB7IHJldHVybiBsbHZtLT5BcHBlbmRCYXNpY0Jsb2NrSW5Db250ZXh0KGNvbnRleHQs
IGZ1bmN0aW9uLCBuYW1lKTsgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExD
YXBhYmlsaXRpZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwv
RlRMQ2FwYWJpbGl0aWVzLmNwcAkocmV2aXNpb24gMTU3NzA3KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Z0bC9GVExDYXBhYmlsaXRpZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05NCwxMCAr
OTQsMTMgQEAgaW5saW5lIENhcGFiaWxpdHlMZXZlbCBjYW5Db21waWxlKE5vZGUqIAogICAgIGNh
c2UgR2V0Q2xvc3VyZVJlZ2lzdGVyczoKICAgICBjYXNlIEdldENsb3N1cmVWYXI6CiAgICAgY2Fz
ZSBQdXRDbG9zdXJlVmFyOgotICAgIGNhc2UgR2V0QnlJZDoKICAgICBjYXNlIEludDUyVG9WYWx1
ZToKICAgICAgICAgLy8gVGhlc2UgYXJlIE9LLgogICAgICAgICBicmVhazsKKyAgICBjYXNlIEdl
dEJ5SWQ6CisgICAgICAgIGlmIChub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkgPT0gQ2VsbFVzZSkK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICByZXR1cm4gQ2Fubm90Q29tcGlsZTsKICAgICBj
YXNlIEdldEluZGV4ZWRQcm9wZXJ0eVN0b3JhZ2U6CiAgICAgICAgIGlmIChpc1R5cGVkVmlldyhu
b2RlLT5hcnJheU1vZGUoKS50eXBlZEFycmF5VHlwZSgpKSkKICAgICAgICAgICAgIGJyZWFrOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDb21waWxlLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENvbXBpbGUuY3BwCShyZXZpc2lvbiAx
NTc3MDcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENvbXBpbGUuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMTAsNiArMTEwLDcgQEAgc3RhdGljIHZvaWQgZml4RnVuY3Rpb25CYXNl
ZE9uU3RhY2tNYXBzKAogICAgIFN0YWNrTWFwczo6UmVjb3JkTWFwJiByZWNvcmRNYXApCiB7CiAg
ICAgVk0mIHZtID0gc3RhdGUuZ3JhcGgubV92bTsKKyAgICBTdGFja01hcHMgc3RhY2ttYXBzID0g
aml0Q29kZS0+c3RhY2ttYXBzOwogCiAgICAgRXhpdFRodW5rR2VuZXJhdG9yIGV4aXRUaHVua0dl
bmVyYXRvcihzdGF0ZSk7CiAgICAgZXhpdFRodW5rR2VuZXJhdG9yLmVtaXRUaHVua3MoKTsKQEAg
LTEzNiw2ICsxMzcsNzcgQEAgc3RhdGljIHZvaWQgZml4RnVuY3Rpb25CYXNlZE9uU3RhY2tNYXBz
KAogICAgICAgICBzdGF0ZS5maW5hbGl6ZXItPmV4aXRUaHVua3NMaW5rQnVmZmVyID0gbGlua0J1
ZmZlci5yZWxlYXNlKCk7CiAgICAgfQogCisgICAgaWYgKCFzdGF0ZS5nZXRCeUlkcy5pc0VtcHR5
KCkpIHsKKyAgICAgICAgQ0NhbGxIZWxwZXJzIHNsb3dQYXRoSklUKHZtLCBjb2RlQmxvY2spOwor
ICAgICAgICAKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gc3RhdGUuZ2V0QnlJZHMuc2l6ZSgp
OyBpLS07KSB7CisgICAgICAgICAgICBHZXRCeUlkRGVzY3JpcHRvciYgZ2V0QnlJZCA9IHN0YXRl
LmdldEJ5SWRzW2ldOworICAgICAgICAgICAgCisgICAgICAgICAgICBTdGFja01hcHM6OlJlY29y
ZE1hcDo6aXRlcmF0b3IgaXRlciA9IHJlY29yZE1hcC5maW5kKGdldEJ5SWQuc3RhY2ttYXBJRCgp
KTsKKyAgICAgICAgICAgIGlmIChpdGVyID09IHJlY29yZE1hcC5lbmQoKSkgeworICAgICAgICAg
ICAgICAgIC8vIEl0IHdhcyBvcHRpbWl6ZWQgb3V0LgorICAgICAgICAgICAgICAgIGNvbnRpbnVl
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICAvLyBGSVhNRTogTExW
TSBzaG91bGQgdGVsbCB1cyB3aGljaCByZWdpc3RlcnMgYXJlIGxpdmUuCisgICAgICAgICAgICBS
ZWdpc3RlclNldCB1c2VkUmVnaXN0ZXJzID0gUmVnaXN0ZXJTZXQ6OmFsbFJlZ2lzdGVycygpOwor
ICAgICAgICAgICAgCisgICAgICAgICAgICBTdGFja01hcHM6OlJlY29yZCYgcmVjb3JkID0gaXRl
ci0+dmFsdWU7CisKKyAgICAgICAgICAgIC8vIEZJWE1FOiBMTFZNIHNob3VsZCB0ZWxsIHVzIHdo
aWNoIHJlZ2lzdGVycyBhcmUgbGl2ZS4KKyAgICAgICAgICAgIFJlZ2lzdGVyU2V0IHVzZWRSZWdp
c3RlcnMgPSBSZWdpc3RlclNldDo6YWxsUmVnaXN0ZXJzKCk7CisgICAgICAgICAgICAKKyAgICAg
ICAgICAgIEdQUlJlZyBjYWxsRnJhbWVSZWdpc3RlciA9IHJlY29yZC5sb2NhdGlvbnNbMF0uZGly
ZWN0R1BSKHN0YWNrbWFwcyk7CisgICAgICAgICAgICBHUFJSZWcgYmFzZSA9IHJlY29yZC5sb2Nh
dGlvbnNbMV0uZGlyZWN0R1BSKHN0YWNrbWFwcyk7CisgICAgICAgICAgICBHUFJSZWcgcmVzdWx0
ID0gR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFI7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIEpJ
VEdldEJ5SWRHZW5lcmF0b3IgZ2VuKAorICAgICAgICAgICAgICAgIGNvZGVCbG9jaywgZ2V0QnlJ
ZC5jb2RlT3JpZ2luKCksIHVzZWRSZWdpc3RlcnMsIEpTVmFsdWVSZWdzKGJhc2UpLAorICAgICAg
ICAgICAgICAgIEpTVmFsdWVSZWdzKHJlc3VsdCksIGZhbHNlKTsKKyAgICAgICAgICAgIAorICAg
ICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIGJlZ2luID0gc2xvd1BhdGhKSVQubGFiZWwo
KTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgY2FsbCA9
IGNhbGxPcGVyYXRpb24oCisgICAgICAgICAgICAgICAgc3RhdGUsIHVzZWRSZWdpc3RlcnMsIHNs
b3dQYXRoSklULCBvcGVyYXRpb25HZXRCeUlkT3B0aW1pemUsIHJlc3VsdCwKKyAgICAgICAgICAg
ICAgICBjYWxsRnJhbWVSZWdpc3RlciwgZ2VuLnN0dWJJbmZvKCksIGJhc2UsIGdldEJ5SWQudWlk
KCkpOworICAgICAgICAgICAgCisgICAgICAgICAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGJl
Z2luLCBjYWxsKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgZ2V0QnlJZC5tX3Nsb3dQYXRo
RG9uZSA9IHNsb3dQYXRoSklULmp1bXAoKTsKKyAgICAgICAgICAgIGdldEJ5SWQubV9nZW5lcmF0
b3IgPSBnZW47CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHN0YXRlLmZpbmFsaXplci0+
c2xvd1BhdGhMaW5rQnVmZmVyID0gYWRvcHRQdHIoCisgICAgICAgICAgICBuZXcgTGlua0J1ZmZl
cih2bSwgJnNsb3dQYXRoSklULCBjb2RlQmxvY2ssIEpJVENvbXBpbGF0aW9uTXVzdFN1Y2NlZWQp
KTsKKyAgICAgICAgCisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IHN0YXRlLmdldEJ5SWRzLnNp
emUoKTsgaS0tOykgeworICAgICAgICAgICAgR2V0QnlJZERlc2NyaXB0b3ImIGdldEJ5SWQgPSBz
dGF0ZS5nZXRCeUlkc1tpXTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgU3RhY2tNYXBzOjpS
ZWNvcmRNYXA6Oml0ZXJhdG9yIGl0ZXIgPSByZWNvcmRNYXAuZmluZChnZXRCeUlkLnN0YWNrbWFw
SUQoKSk7CisgICAgICAgICAgICBpZiAoaXRlciA9PSByZWNvcmRNYXAuZW5kKCkpIHsKKyAgICAg
ICAgICAgICAgICAvLyBJdCB3YXMgb3B0aW1pemVkIG91dC4KKyAgICAgICAgICAgICAgICBjb250
aW51ZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgQ0NhbGxIZWxwZXJzIGZhc3RQYXRo
SklUKHZtLCBjb2RlQmxvY2spOworICAgICAgICAgICAgZ2V0QnlJZC5tX2dlbmVyYXRvci5nZW5l
cmF0ZUZhc3RQYXRoKGZhc3RQYXRoSklUKTsKKworICAgICAgICAgICAgY2hhciogc3RhcnRPZklD
ID0KKyAgICAgICAgICAgICAgICBiaXR3aXNlX2Nhc3Q8Y2hhcio+KGdlbmVyYXRlZEZ1bmN0aW9u
KSArIHJlY29yZC5pbnN0cnVjdGlvbk9mZnNldDsKKyAgICAgICAgICAgIHNpemVfdCBzaXplT2ZJ
QyA9IHNpemVPZkdldEJ5SUQoKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgTGlua0J1ZmZl
ciBsaW5rQnVmZmVyKHZtLCBmYXN0UGF0aEpJVCwgc3RhcnRPZklDLCBzaXplT2ZHZXRCeUlkKCkp
OworICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQobGlua0J1ZmZlci5pc1ZhbGlkKCkpOworICAg
ICAgICAgICAgCisgICAgICAgICAgICBzdGF0ZS5maW5hbGl6ZXItPnNsb3dQYXRoTGlua0J1ZmZl
ci0+bGluaygKKyAgICAgICAgICAgICAgICBnZXRCeUlkLm1fc2xvd1BhdGhEb25lLCBDb2RlTG9j
YXRpb25MYWJlbChzdGFydE9mSUMgKyBzaXplb2ZJQykpOworICAgICAgICAgICAgCisgICAgICAg
ICAgICBnZXRCeUlkLm1fZ2VuZXJhdG9yLmZpbmFsaXplKGxpbmtCdWZmZXIsICpzdGF0ZS5maW5h
bGl6ZXItPnNsb3dQYXRoTGlua0J1ZmZlcik7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGxp
bmtCdWZmZXIuZmluYWxpemVDb2RlV2l0aG91dERpc2Fzc2VtYmx5KCk7CisgICAgICAgIH0KKyAg
ICB9CisgICAgCiAgICAgUmVwYXRjaEJ1ZmZlciByZXBhdGNoQnVmZmVyKGNvZGVCbG9jayk7CiAg
ICAgCiAgICAgZm9yICh1bnNpZ25lZCBleGl0SW5kZXggPSBqaXRDb2RlLT5vc3JFeGl0LnNpemUo
KTsgZXhpdEluZGV4LS07KSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTElu
bGluZUNhY2hlRGVzY3JpcHRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9mdGwvRlRMSW5saW5lQ2FjaGVEZXNjcmlwdG9yLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZnRsL0ZUTElubGluZUNhY2hlRGVzY3JpcHRvci5oCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsNzEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCisgKi8KKworI2lmbmRlZiBGVExJbmxpbmVDYWNoZURlc2NyaXB0b3JfaAorI2RlZmluZSBG
VExJbmxpbmVDYWNoZURlc2NyaXB0b3JfaAorCisjaWYgRU5BQkxFKEZUTF9KSVQpCisKKyNpbmNs
dWRlIDx3dGYvdGV4dC9TdHJpbmdJbXBsLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2Ug
RlRMIHsKKworY2xhc3MgSW5saW5lQ2FjaGVEZXNjcmlwdG9yIHsKK3B1YmxpYzoKKyAgICBJbmxp
bmVDYWNoZURlc2NyaXB0b3IoKSB7IH0KKyAgICAKKyAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBt
X3Nsb3dQYXRoRG9uZTsKK307CisKK2NsYXNzIEdldEJ5SWREZXNjcmlwdG9yIDogcHVibGljIElu
bGluZUNhY2hlRGVzY3JpcHRvciB7CitwdWJsaWM6CisgICAgR2V0QnlJZERlc2NyaXB0b3IoKSB7
IH0KKyAgICAKKyAgICBHZXRCeUlkRGVzY3JpcHRvcih1bnNpZ25lZCBzdGFja21hcElELCBDb2Rl
T3JpZ2luIGNvZGVPcmlnaW4sIFN0cmluZ0ltcGwqIHVpZCkKKyAgICAgICAgOiBtX3N0YWNrbWFw
SUQoc3RhY2ttYXBJRCkKKyAgICAgICAgLCBtX2NvZGVPcmlnaW4oY29kZU9yaWdpbikKKyAgICAg
ICAgLCBtX3VpZCh1aWQpCisgICAgeworICAgIH0KKyAgICAKKyAgICB1bnNpZ25lZCBzdGFja21h
cElEKCkgY29uc3QgeyByZXR1cm4gbV9zdGFja21hcElEOyB9CisgICAgQ29kZU9yaWdpbiBjb2Rl
T3JpZ2luKCkgY29uc3QgeyByZXR1cm4gbV9jb2RlT3JpZ2luOyB9CisgICAgU3RyaW5nSW1wbCog
dWlkKCkgY29uc3QgeyByZXR1cm4gbV91aWQ7IH0KKyAgICAKK3ByaXZhdGU6CisgICAgdW5zaWdu
ZWQgbV9zdGFja21hcElEOworICAgIENvZGVPcmlnaW4gbV9jb2RlT3JpZ2luOworICAgIFN0cmlu
Z0ltcGwqIG1fdWlkOworCitwdWJsaWM6CisgICAgSklUR2V0QnlJZEdlbmVyYXRvciBtX2dlbmVy
YXRvcjsKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpGVEwKKworI2VuZGlmIC8vIEVOQUJM
RShGVExfSklUKQorCisjZW5kaWYgLy8gRlRMSW5saW5lQ2FjaGVEZXNjcmlwdG9yX2gKKwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExJbmxpbmVDYWNoZVNpemUuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSW5saW5lQ2FjaGVTaXplLmNw
cAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSW5saW5lQ2Fj
aGVTaXplLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDcyIEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJGVExJbmxpbmVDYWNoZVNpemUuaCIKKworI2lmIEVOQUJMRShGVExfSklUKQorCisj
aW5jbHVkZSAiSklUSW5saW5lQ2FjaGVHZW5lcmF0b3IuaCIKKyNpbmNsdWRlICJNYWNyb0Fzc2Vt
Ymxlci5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEZUTCB7CisKK3N0YXRpYyBzaXpl
X3Qgc19zaXplT2ZHZXRCeUlkOworc3RhdGljIHNpemVfdCBzX3NpemVPZlB1dEJ5SWQ7CisKK3Np
emVfdCBzaXplT2ZHZXRCeUlkKCkKK3sKKyAgICBpZiAoc19zaXplT2ZHZXRCeUlkKQorICAgICAg
ICByZXR1cm4gc19zaXplT2ZHZXRCeUlkOworICAgIAorICAgIE1hY3JvQXNzZW1ibGVyIGppdDsK
KyAgICAKKyAgICBKSVRHZXRCeUlkR2VuZXJhdG9yIGdlbmVyYXRvcigKKyAgICAgICAgMCwgQ29k
ZU9yaWdpbigpLCBSZWdpc3RlclNldCgpLCBKU1ZhbHVlUmVncyhHUFJJbmZvOjpyZWdUNiksIEpT
VmFsdWVSZWdzKEdQUkluZm86OnJlZ1Q3KSwKKyAgICAgICAgZmFsc2UpOworICAgIGdlbmVyYXRv
ci5nZW5lcmF0ZUZhc3RQYXRoKGppdCk7CisgICAgCisgICAgcmV0dXJuIHNfc2l6ZU9mR2V0QnlJ
ZCA9IGppdC5tX2Fzc2VtYmxlci5jb2RlU2l6ZSgpOworfQorCitzaXplX3Qgc2l6ZU9mUHV0QnlJ
ZCgpCit7CisgICAgaWYgKHNfc2l6ZU9mUHV0QnlJZCkKKyAgICAgICAgcmV0dXJuIHNfc2l6ZU9m
UHV0QnlJZDsKKyAgICAKKyAgICBNYWNyb0Fzc2VtYmxlciBqaXQ7CisgICAgCisgICAgSklUUHV0
QnlJZEdlbmVyYXRvciBnZW5lcmF0b3IoCisgICAgICAgIDAsIENvZGVPcmlnaW4oKSwgUmVnaXN0
ZXJTZXQoKSwgSlNWYWx1ZVJlZ3MoR1BSSW5mbzo6cmVnVDYpLCBKU1ZhbHVlUmVncyhHUFJJbmZv
OjpyZWdUNyksCisgICAgICAgIEdQUkluZm86OnJlZ1Q4LCBmYWxzZSwgTm90U3RyaWN0TW9kZSwg
Tm90RGlyZWN0KTsKKyAgICBnZW5lcmF0b3IuZ2VuZXJhdGVGYXN0UGF0aChqaXQpOworICAgIAor
ICAgIHJldHVybiBzX3NpemVPZlB1dEJ5SWQgPSBqaXQubV9hc3NlbWJsZXIuY29kZVNpemUoKTsK
K30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkZUTAorCisjZW5kaWYgLy8gRU5BQkxFKEZUTF9K
SVQpCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSW5saW5lQ2FjaGVTaXpl
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExJbmxpbmVDYWNo
ZVNpemUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSW5s
aW5lQ2FjaGVTaXplLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0MSBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEZUTElubGluZUNh
Y2hlU2l6ZV9oCisjZGVmaW5lIEZUTElubGluZUNhY2hlU2l6ZV9oCisKKyNpZiBFTkFCTEUoRlRM
X0pJVCkKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBGVEwgeworCitzaXplX3Qgc2l6ZU9m
R2V0QnlJZCgpOworc2l6ZV90IHNpemVPZlB1dEJ5SWQoKTsKKworfSB9IC8vIG5hbWVzcGFjZSBK
U0M6OkZUTAorCisjZW5kaWYgLy8gRU5BQkxFKEZUTF9KSVQpCisKKyNlbmRpZiAvLyBGVExJbmxp
bmVDYWNoZVNpemVfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEludHJp
bnNpY1JlcG9zaXRvcnkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRs
L0ZUTEludHJpbnNpY1JlcG9zaXRvcnkuaAkocmV2aXNpb24gMTU3NzA3KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Z0bC9GVExJbnRyaW5zaWNSZXBvc2l0b3J5LmgJKHdvcmtpbmcgY29weSkK
QEAgLTQ0LDYgKzQ0LDcgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBGVEwgewogICAgIG1h
Y3JvKG11bFdpdGhPdmVyZmxvdzY0LCAibGx2bS5zbXVsLndpdGgub3ZlcmZsb3cuaTY0IiwgZnVu
Y3Rpb25UeXBlKHN0cnVjdFR5cGUobV9jb250ZXh0LCBpbnQ2NCwgYm9vbGVhbiksIGludDY0LCBp
bnQ2NCkpIFwKICAgICBtYWNybyhzdWJXaXRoT3ZlcmZsb3czMiwgImxsdm0uc3N1Yi53aXRoLm92
ZXJmbG93LmkzMiIsIGZ1bmN0aW9uVHlwZShzdHJ1Y3RUeXBlKG1fY29udGV4dCwgaW50MzIsIGJv
b2xlYW4pLCBpbnQzMiwgaW50MzIpKSBcCiAgICAgbWFjcm8oc3ViV2l0aE92ZXJmbG93NjQsICJs
bHZtLnNzdWIud2l0aC5vdmVyZmxvdy5pNjQiLCBmdW5jdGlvblR5cGUoc3RydWN0VHlwZShtX2Nv
bnRleHQsIGludDY0LCBib29sZWFuKSwgaW50NjQsIGludDY0KSkgXAorICAgIG1hY3JvKHdlYmtp
dFBhdGNocG9pbnQsICJsbHZtLndlYmtpdC5wYXRjaHBvaW50IiwgZnVuY3Rpb25UeXBlKHZvaWRU
eXBlLCBpbnQzMiwgaW50MzIsIFZhcmlhZGljKSkgXAogICAgIG1hY3JvKHdlYmtpdFN0YWNrbWFw
LCAibGx2bS53ZWJraXQuc3RhY2ttYXAiLCBmdW5jdGlvblR5cGUodm9pZFR5cGUsIGludDMyLCBp
bnQzMiwgVmFyaWFkaWMpKSBcCiAgICAgbWFjcm8odHJhcCwgImxsdm0udHJhcCIsIGZ1bmN0aW9u
VHlwZSh2b2lkVHlwZSkpIFwKICAgICBtYWNybyhvc3JFeGl0LCAid2Via2l0X29zcl9leGl0Iiwg
ZnVuY3Rpb25UeXBlKHZvaWRUeXBlLCBib29sZWFuLCBpbnQzMiwgVmFyaWFkaWMpKQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExKSVRGaW5hbGl6ZXIuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSklURmluYWxpemVyLmNwcAkocmV2aXNp
b24gMTU3NzA3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExKSVRGaW5hbGl6ZXIu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC04NCw2ICs4NCwyNCBAQCBib29sIEpJVEZpbmFsaXplcjo6
ZmluYWxpemVGdW5jdGlvbigpCiAgICAgICAgICAgICAgICAgKCJGVEwgZXhpdCB0aHVua3MgZm9y
ICVzIiwgdG9DU3RyaW5nKENvZGVCbG9ja1dpdGhKSVRUeXBlKG1fcGxhbi5jb2RlQmxvY2suZ2V0
KCksIEpJVENvZGU6OkZUTEpJVCkpLmRhdGEoKSkpKTsKICAgICB9IC8vIGVsc2UgdGhpcyBmdW5j
dGlvbiBoYWQgbm8gT1NSIGV4aXRzLCBzbyBubyBleGl0IHRodW5rcy4KICAgICAKKyAgICBpZiAo
c2lkZUNvZGVMaW5rQnVmZmVyKSB7CisgICAgICAgIC8vIFNpZGUgY29kZSBpcyBmb3Igc3BlY2lh
bCBzbG93IHBhdGhzIHRoYXQgd2UgZ2VuZXJhdGUgb3Vyc2VsdmVzLCBsaWtlIGZvciBpbmxpbmUK
KyAgICAgICAgLy8gY2FjaGVzLgorICAgICAgICAKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0g
c2xvd1BhdGhDYWxscy5zaXplKCk7IGktLTspIHsKKyAgICAgICAgICAgIFNsb3dQYXRoQ2FsbCYg
Y2FsbCA9IHNsb3dQYXRoQ2FsbHNbaV07CisgICAgICAgICAgICBzaWRlQ29kZUxpbmtCdWZmZXIt
PmxpbmsoCisgICAgICAgICAgICAgICAgY2FsbC5jYWxsKCksCisgICAgICAgICAgICAgICAgbV9w
bGFuLnZtLm1fZnRsVGh1bmtzLT5nZXRTbG93UGF0aENhbGxUaHVuayhtX3BsYW4udm0sIGNhbGwu
a2V5KCkpKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaml0Q29kZS0+YWRkSGFuZGxl
KEZJTkFMSVpFX0RGR19DT0RFKAorICAgICAgICAgICAgKnNpZGVDb2RlTGlua0J1ZmZlciwKKyAg
ICAgICAgICAgICgiRlRMIHNpZGUgY29kZSBmb3IgJXMiLAorICAgICAgICAgICAgICAgIHRvQ1N0
cmluZyhDb2RlQmxvY2tXaXRoSklUVHlwZShtX3BsYW4uY29kZUJsb2NrLmdldCgpLCBKSVRDb2Rl
OjpGVExKSVQpKS5kYXRhKCkpKQorICAgICAgICAgICAgLmV4ZWN1dGFibGVNZW1vcnkoKSk7Cisg
ICAgfQorICAgIAogICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciB3aXRoQXJpdHlDaGVjazsKICAg
ICBpZiAoYXJpdHlDaGVjay5pc1NldCgpKQogICAgICAgICB3aXRoQXJpdHlDaGVjayA9IGVudHJ5
cG9pbnRMaW5rQnVmZmVyLT5sb2NhdGlvbk9mKGFyaXR5Q2hlY2spOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Z0bC9GVExKSVRGaW5hbGl6ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZnRsL0ZUTEpJVEZpbmFsaXplci5oCShyZXZpc2lvbiAxNTc3MDcpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEpJVEZpbmFsaXplci5oCSh3b3JraW5nIGNv
cHkpCkBAIC0zNCw2ICszNCw3IEBACiAjaW5jbHVkZSAiRlRMR2VuZXJhdGVkRnVuY3Rpb24uaCIK
ICNpbmNsdWRlICJGVExKSVRDb2RlLmgiCiAjaW5jbHVkZSAiRlRMT1NSRXhpdENvbXBpbGF0aW9u
SW5mby5oIgorI2luY2x1ZGUgIkZUTFNsb3dQYXRoQ2FsbC5oIgogI2luY2x1ZGUgIkxMVk1BUEku
aCIKICNpbmNsdWRlICJMaW5rQnVmZmVyLmgiCiAjaW5jbHVkZSAiTWFjcm9Bc3NlbWJsZXIuaCIK
QEAgLTUwLDYgKzUxLDggQEAgcHVibGljOgogCiAgICAgT3duUHRyPExpbmtCdWZmZXI+IGV4aXRU
aHVua3NMaW5rQnVmZmVyOwogICAgIE93blB0cjxMaW5rQnVmZmVyPiBlbnRyeXBvaW50TGlua0J1
ZmZlcjsKKyAgICBPd25QdHI8TGlua0J1ZmZlcj4gc2lkZUNvZGVMaW5rQnVmZmVyOworICAgIFZl
Y3RvcjxTbG93UGF0aENhbGw+IHNsb3dQYXRoQ2FsbHM7IC8vIENhbGxzIGluc2lkZSB0aGUgc2lk
ZSBjb2RlLgogICAgIFZlY3RvcjxPU1JFeGl0Q29tcGlsYXRpb25JbmZvPiBvc3JFeGl0OwogICAg
IE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBhcml0eUNoZWNrOwogICAgIEdlbmVyYXRlZEZ1bmN0aW9u
IGZ1bmN0aW9uOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb2NhdGlvbi5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb2NhdGlvbi5j
cHAJKHJldmlzaW9uIDE1NzcwNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG9j
YXRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xODAsNiArMTgwLDEyIEBAIHZvaWQgTG9jYXRp
b246OnJlc3RvcmVJbnRvKE1hY3JvQXNzZW1ibGUKICNlcnJvciAiQ1BVIGFyY2hpdGVjdHVyZSBu
b3Qgc3VwcG9ydGVkLiIKICNlbmRpZiAvLyBDUFUgY2FzZXMgZm9yIExvY2F0aW9uIG1ldGhvZHMK
IAorR1BSUmVnIExvY2F0aW9uOjpkaXJlY3RHUFIoKSBjb25zdAoreworICAgIEFTU0VSVCghYWRk
ZW5kKCkpOworICAgIHJldHVybiBncHIoKTsKK30KKwogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkZU
TAogCiBuYW1lc3BhY2UgV1RGIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRM
TG9jYXRpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExv
Y2F0aW9uLmgJKHJldmlzaW9uIDE1NzcwNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwv
RlRMTG9jYXRpb24uaAkod29ya2luZyBjb3B5KQpAQCAtMTU3LDYgKzE1Nyw3IEBAIHB1YmxpYzoK
ICAgICBib29sIGlzR1BSKCkgY29uc3Q7CiAgICAgYm9vbCBpbnZvbHZlc0dQUigpIGNvbnN0Owog
ICAgIEdQUlJlZyBncHIoKSBjb25zdDsKKyAgICBHUFJSRWcgZGlyZWN0R1BSKCkgY29uc3Q7IC8v
IEdldCB0aGUgR1BSIGFuZCBhc3NlcnQgdGhhdCB0aGVyZSBpcyBubyBhZGRlbmQuCiAgICAgCiAg
ICAgYm9vbCBpc0ZQUigpIGNvbnN0OwogICAgIEZQUlJlZyBmcHIoKSBjb25zdDsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0xMVk0uY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0xMVk0uY3BwCShyZXZp
c2lvbiAxNTc3MDcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9M
TFZNLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgxLDk2MyArMjgxLDk2NSBAQCBwcml2YXRlOgog
ICAgICAgICBjYXNlIEZsdXNoOgogICAgICAgICBjYXNlIFBoYW50b21Mb2NhbDoKICAgICAgICAg
Y2FzZSBTZXRBcmd1bWVudDoKLSAgICAgICAgY2FzZSBMb29wSGludDoKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICBjYXNlIEFyaXRoQWRkOgotICAgICAgICBjYXNlIFZhbHVlQWRkOgotICAg
ICAgICAgICAgY29tcGlsZUFkZFN1YigpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNh
c2UgQXJpdGhTdWI6Ci0gICAgICAgICAgICBjb21waWxlQWRkU3ViKCk7Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgY2FzZSBBcml0aE11bDoKLSAgICAgICAgICAgIGNvbXBpbGVBcml0aE11
bCgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQXJpdGhEaXY6Ci0gICAgICAg
ICAgICBjb21waWxlQXJpdGhEaXZNb2QoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBj
YXNlIEFyaXRoTW9kOgotICAgICAgICAgICAgY29tcGlsZUFyaXRoRGl2TW9kKCk7Ci0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgY2FzZSBBcml0aE1pbjoKLSAgICAgICAgY2FzZSBBcml0aE1h
eDoKLSAgICAgICAgICAgIGNvbXBpbGVBcml0aE1pbk9yTWF4KCk7Ci0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgY2FzZSBBcml0aEFiczoKLSAgICAgICAgICAgIGNvbXBpbGVBcml0aEFicygp
OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQXJpdGhOZWdhdGU6Ci0gICAgICAg
ICAgICBjb21waWxlQXJpdGhOZWdhdGUoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBj
YXNlIEJpdEFuZDoKLSAgICAgICAgICAgIGNvbXBpbGVCaXRBbmQoKTsKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICBjYXNlIEJpdE9yOgotICAgICAgICAgICAgY29tcGlsZUJpdE9yKCk7Ci0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBCaXRYb3I6Ci0gICAgICAgICAgICBjb21w
aWxlQml0WG9yKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBCaXRSU2hpZnQ6
Ci0gICAgICAgICAgICBjb21waWxlQml0UlNoaWZ0KCk7Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgY2FzZSBCaXRMU2hpZnQ6Ci0gICAgICAgICAgICBjb21waWxlQml0TFNoaWZ0KCk7Ci0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBCaXRVUlNoaWZ0OgotICAgICAgICAgICAg
Y29tcGlsZUJpdFVSU2hpZnQoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFVJ
bnQzMlRvTnVtYmVyOgotICAgICAgICAgICAgY29tcGlsZVVJbnQzMlRvTnVtYmVyKCk7Ci0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBJbnQzMlRvRG91YmxlOgotICAgICAgICAgICAg
Y29tcGlsZUludDMyVG9Eb3VibGUoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNl
IENoZWNrU3RydWN0dXJlOgotICAgICAgICAgICAgY29tcGlsZUNoZWNrU3RydWN0dXJlKCk7Ci0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBTdHJ1Y3R1cmVUcmFuc2l0aW9uV2F0Y2hw
b2ludDoKLSAgICAgICAgICAgIGNvbXBpbGVTdHJ1Y3R1cmVUcmFuc2l0aW9uV2F0Y2hwb2ludCgp
OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQXJyYXlpZnlUb1N0cnVjdHVyZToK
LSAgICAgICAgICAgIGNvbXBpbGVBcnJheWlmeVRvU3RydWN0dXJlKCk7Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgY2FzZSBQdXRTdHJ1Y3R1cmU6Ci0gICAgICAgICAgICBjb21waWxlUHV0
U3RydWN0dXJlKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBQaGFudG9tUHV0
U3RydWN0dXJlOgotICAgICAgICAgICAgY29tcGlsZVBoYW50b21QdXRTdHJ1Y3R1cmUoKTsKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEdldEJ5SWQ6Ci0gICAgICAgICAgICBjb21w
aWxlR2V0QnlJZCgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgR2V0QnV0dGVy
Zmx5OgotICAgICAgICAgICAgY29tcGlsZUdldEJ1dHRlcmZseSgpOwotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIGNhc2UgR2V0SW5kZXhlZFByb3BlcnR5U3RvcmFnZToKLSAgICAgICAgICAg
IGNvbXBpbGVHZXRJbmRleGVkUHJvcGVydHlTdG9yYWdlKCk7Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgY2FzZSBDaGVja0FycmF5OgotICAgICAgICAgICAgY29tcGlsZUNoZWNrQXJyYXko
KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEdldEFycmF5TGVuZ3RoOgotICAg
ICAgICAgICAgY29tcGlsZUdldEFycmF5TGVuZ3RoKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgY2FzZSBHZXRCeVZhbDoKLSAgICAgICAgICAgIGNvbXBpbGVHZXRCeVZhbCgpOwotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgUHV0QnlWYWw6Ci0gICAgICAgIGNhc2UgUHV0
QnlWYWxBbGlhczoKLSAgICAgICAgICAgIGNvbXBpbGVQdXRCeVZhbCgpOwotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIGNhc2UgR2V0QnlPZmZzZXQ6Ci0gICAgICAgICAgICBjb21waWxlR2V0
QnlPZmZzZXQoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFB1dEJ5T2Zmc2V0
OgotICAgICAgICAgICAgY29tcGlsZVB1dEJ5T2Zmc2V0KCk7Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgY2FzZSBHZXRHbG9iYWxWYXI6Ci0gICAgICAgICAgICBjb21waWxlR2V0R2xvYmFs
VmFyKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBQdXRHbG9iYWxWYXI6Ci0g
ICAgICAgICAgICBjb21waWxlUHV0R2xvYmFsVmFyKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgY2FzZSBHbG9iYWxWYXJXYXRjaHBvaW50OgotICAgICAgICAgICAgY29tcGlsZUdsb2Jh
bFZhcldhdGNocG9pbnQoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEdldE15
U2NvcGU6Ci0gICAgICAgICAgICBjb21waWxlR2V0TXlTY29wZSgpOwotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIGNhc2UgU2tpcFNjb3BlOgotICAgICAgICAgICAgY29tcGlsZVNraXBTY29w
ZSgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgR2V0Q2xvc3VyZVJlZ2lzdGVy
czoKLSAgICAgICAgICAgIGNvbXBpbGVHZXRDbG9zdXJlUmVnaXN0ZXJzKCk7Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgY2FzZSBHZXRDbG9zdXJlVmFyOgotICAgICAgICAgICAgY29tcGls
ZUdldENsb3N1cmVWYXIoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFB1dENs
b3N1cmVWYXI6Ci0gICAgICAgICAgICBjb21waWxlUHV0Q2xvc3VyZVZhcigpOwotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQ29tcGFyZUVxOgotICAgICAgICAgICAgY29tcGlsZUNv
bXBhcmVFcSgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQ29tcGFyZUVxQ29u
c3RhbnQ6Ci0gICAgICAgICAgICBjb21waWxlQ29tcGFyZUVxQ29uc3RhbnQoKTsKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICBjYXNlIENvbXBhcmVTdHJpY3RFcToKLSAgICAgICAgICAgIGNv
bXBpbGVDb21wYXJlU3RyaWN0RXEoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNl
IENvbXBhcmVTdHJpY3RFcUNvbnN0YW50OgotICAgICAgICAgICAgY29tcGlsZUNvbXBhcmVTdHJp
Y3RFcUNvbnN0YW50KCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBDb21wYXJl
TGVzczoKLSAgICAgICAgICAgIGNvbXBpbGVDb21wYXJlTGVzcygpOwotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIGNhc2UgQ29tcGFyZUxlc3NFcToKLSAgICAgICAgICAgIGNvbXBpbGVDb21w
YXJlTGVzc0VxKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBDb21wYXJlR3Jl
YXRlcjoKLSAgICAgICAgICAgIGNvbXBpbGVDb21wYXJlR3JlYXRlcigpOwotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIGNhc2UgQ29tcGFyZUdyZWF0ZXJFcToKLSAgICAgICAgICAgIGNvbXBp
bGVDb21wYXJlR3JlYXRlckVxKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBM
b2dpY2FsTm90OgotICAgICAgICAgICAgY29tcGlsZUxvZ2ljYWxOb3QoKTsKLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICBjYXNlIENhbGw6Ci0gICAgICAgIGNhc2UgQ29uc3RydWN0OgotICAg
ICAgICAgICAgY29tcGlsZUNhbGxPckNvbnN0cnVjdCgpOwotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIGNhc2UgSnVtcDoKLSAgICAgICAgICAgIGNvbXBpbGVKdW1wKCk7Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgY2FzZSBCcmFuY2g6Ci0gICAgICAgICAgICBjb21waWxlQnJhbmNo
KCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBTd2l0Y2g6Ci0gICAgICAgICAg
ICBjb21waWxlU3dpdGNoKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBSZXR1
cm46Ci0gICAgICAgICAgICBjb21waWxlUmV0dXJuKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgY2FzZSBGb3JjZU9TUkV4aXQ6Ci0gICAgICAgICAgICBjb21waWxlRm9yY2VPU1JFeGl0
KCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBWYWx1ZVRvSW50MzI6Ci0gICAg
ICAgICAgICBjb21waWxlVmFsdWVUb0ludDMyKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgY2FzZSBJbnQ1MlRvVmFsdWU6Ci0gICAgICAgICAgICBjb21waWxlSW50NTJUb1ZhbHVlKCk7
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIFJFTEVB
U0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQot
ICAgICAgICAKLSAgICAgICAgaWYgKG1fbm9kZS0+c2hvdWxkR2VuZXJhdGUoKSkKLSAgICAgICAg
ICAgIERGR19OT0RFX0RPX1RPX0NISUxEUkVOKG1fZ3JhcGgsIG1fbm9kZSwgdXNlKTsKLSAgICAg
ICAgCi0gICAgICAgIGlmIChtX25vZGUtPmFkanVzdGVkUmVmQ291bnQoKSkKLSAgICAgICAgICAg
IG1fbGl2ZS5hZGQobV9ub2RlKTsKLSAgICAgICAgCi0gICAgICAgIGlmIChzaG91bGRFeGVjdXRl
RWZmZWN0cykKLSAgICAgICAgICAgIG1faW50ZXJwcmV0ZXIuZXhlY3V0ZUVmZmVjdHMobm9kZUlu
ZGV4KTsKLSAgICAgICAgCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIHZvaWQg
Y29tcGlsZVZhbHVlVG9JbnQzMigpCi0gICAgewotICAgICAgICBBU1NFUlQobV9ub2RlLT5jaGls
ZDEoKS51c2VLaW5kKCkgPT0gQm9vbGVhblVzZSk7Ci0gICAgICAgIHNldEludDMyKG1fb3V0Lnpl
cm9FeHQobG93Qm9vbGVhbihtX25vZGUtPmNoaWxkMSgpKSwgbV9vdXQuaW50MzIpKTsKLSAgICB9
Ci0KLSAgICB2b2lkIGNvbXBpbGVJbnQ1MlRvVmFsdWUoKQotICAgIHsKLSAgICAgICAgc2V0SlNW
YWx1ZShsb3dKU1ZhbHVlKG1fbm9kZS0+Y2hpbGQxKCkpKTsKLSAgICB9Ci0KLSAgICB2b2lkIGNv
bXBpbGVVcHNpbG9uKCkKLSAgICB7Ci0gICAgICAgIExWYWx1ZSBkZXN0aW5hdGlvbiA9IG1fcGhp
cy5nZXQobV9ub2RlLT5waGkoKSk7Ci0gICAgICAgIAotICAgICAgICBzd2l0Y2ggKG1fbm9kZS0+
Y2hpbGQxKCkudXNlS2luZCgpKSB7Ci0gICAgICAgIGNhc2UgTnVtYmVyVXNlOgotICAgICAgICAg
ICAgbV9vdXQuc2V0KGxvd0RvdWJsZShtX25vZGUtPmNoaWxkMSgpKSwgZGVzdGluYXRpb24pOwot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgSW50MzJVc2U6Ci0gICAgICAgICAgICBt
X291dC5zZXQobG93SW50MzIobV9ub2RlLT5jaGlsZDEoKSksIGRlc3RpbmF0aW9uKTsKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIE1hY2hpbmVJbnRVc2U6Ci0gICAgICAgICAgICBt
X291dC5zZXQobG93SW50NTIobV9ub2RlLT5jaGlsZDEoKSksIGRlc3RpbmF0aW9uKTsKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEJvb2xlYW5Vc2U6Ci0gICAgICAgICAgICBtX291
dC5zZXQobG93Qm9vbGVhbihtX25vZGUtPmNoaWxkMSgpKSwgZGVzdGluYXRpb24pOwotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQ2VsbFVzZToKLSAgICAgICAgICAgIG1fb3V0LnNl
dChsb3dDZWxsKG1fbm9kZS0+Y2hpbGQxKCkpLCBkZXN0aW5hdGlvbik7Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgY2FzZSBVbnR5cGVkVXNlOgotICAgICAgICAgICAgbV9vdXQuc2V0KGxv
d0pTVmFsdWUobV9ub2RlLT5jaGlsZDEoKSksIGRlc3RpbmF0aW9uKTsKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JF
QUNIRUQoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfQotICAgIAotICAg
IHZvaWQgY29tcGlsZVBoaSgpCi0gICAgewotICAgICAgICBMVmFsdWUgc291cmNlID0gbV9waGlz
LmdldChtX25vZGUpOwotICAgICAgICAKLSAgICAgICAgc3dpdGNoIChtX25vZGUtPmZsYWdzKCkg
JiBOb2RlUmVzdWx0TWFzaykgewotICAgICAgICBjYXNlIE5vZGVSZXN1bHROdW1iZXI6Ci0gICAg
ICAgICAgICBzZXREb3VibGUobV9vdXQuZ2V0KHNvdXJjZSkpOwotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIGNhc2UgTm9kZVJlc3VsdEludDMyOgotICAgICAgICAgICAgc2V0SW50MzIobV9v
dXQuZ2V0KHNvdXJjZSkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgTm9kZVJl
c3VsdEludDUyOgotICAgICAgICAgICAgc2V0SW50NTIobV9vdXQuZ2V0KHNvdXJjZSkpOwotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgTm9kZVJlc3VsdEJvb2xlYW46Ci0gICAgICAg
ICAgICBzZXRCb29sZWFuKG1fb3V0LmdldChzb3VyY2UpKTsKLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICBjYXNlIE5vZGVSZXN1bHRKUzoKLSAgICAgICAgICAgIHNldEpTVmFsdWUobV9vdXQu
Z2V0KHNvdXJjZSkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAg
ICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgdm9pZCBjb21waWxlSlNDb25zdGFudCgpCi0g
ICAgewotICAgICAgICBKU1ZhbHVlIHZhbHVlID0gbV9ncmFwaC52YWx1ZU9mSlNDb25zdGFudCht
X25vZGUpOwotICAgICAgICBpZiAodmFsdWUuaXNEb3VibGUoKSkKLSAgICAgICAgICAgIHNldERv
dWJsZShtX291dC5jb25zdERvdWJsZSh2YWx1ZS5hc0RvdWJsZSgpKSk7Ci0gICAgICAgIGVsc2UK
LSAgICAgICAgICAgIHNldEpTVmFsdWUobV9vdXQuY29uc3RJbnQ2NChKU1ZhbHVlOjplbmNvZGUo
dmFsdWUpKSk7Ci0gICAgfQotICAgIAotICAgIHZvaWQgY29tcGlsZVdlYWtKU0NvbnN0YW50KCkK
LSAgICB7Ci0gICAgICAgIHNldEpTVmFsdWUod2Vha1BvaW50ZXIobV9ub2RlLT53ZWFrQ29uc3Rh
bnQoKSkpOwotICAgIH0KLSAgICAKLSAgICB2b2lkIGNvbXBpbGVHZXRBcmd1bWVudCgpCi0gICAg
ewotICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlID0gbV9ub2RlLT52YXJpYWJs
ZUFjY2Vzc0RhdGEoKTsKLSAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQgPSB2YXJpYWJs
ZS0+bWFjaGluZUxvY2FsKCk7Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUKG9wZXJhbmQuaXNBcmd1
bWVudCgpKTsKLQotICAgICAgICBMVmFsdWUganNWYWx1ZSA9IG1fb3V0LmxvYWQ2NChhZGRyZXNz
Rm9yKG9wZXJhbmQpKTsKLQotICAgICAgICBzd2l0Y2ggKHVzZUtpbmRGb3IodmFyaWFibGUtPmZs
dXNoRm9ybWF0KCkpKSB7Ci0gICAgICAgIGNhc2UgSW50MzJVc2U6Ci0gICAgICAgICAgICBzcGVj
dWxhdGVCYWNrd2FyZChCYWRUeXBlLCBqc1ZhbHVlVmFsdWUoanNWYWx1ZSksIG1fbm9kZSwgaXNO
b3RJbnQzMihqc1ZhbHVlKSk7Ci0gICAgICAgICAgICBzZXRJbnQzMih1bmJveEludDMyKGpzVmFs
dWUpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIENlbGxVc2U6Ci0gICAgICAg
ICAgICBzcGVjdWxhdGVCYWNrd2FyZChCYWRUeXBlLCBqc1ZhbHVlVmFsdWUoanNWYWx1ZSksIG1f
bm9kZSwgaXNOb3RDZWxsKGpzVmFsdWUpKTsKLSAgICAgICAgICAgIHNldEpTVmFsdWUoanNWYWx1
ZSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBCb29sZWFuVXNlOgotICAgICAg
ICAgICAgc3BlY3VsYXRlQmFja3dhcmQoQmFkVHlwZSwganNWYWx1ZVZhbHVlKGpzVmFsdWUpLCBt
X25vZGUsIGlzTm90Qm9vbGVhbihqc1ZhbHVlKSk7Ci0gICAgICAgICAgICBzZXRCb29sZWFuKHVu
Ym94Qm9vbGVhbihqc1ZhbHVlKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBV
bnR5cGVkVXNlOgotICAgICAgICAgICAgc2V0SlNWYWx1ZShqc1ZhbHVlKTsKLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9U
X1JFQUNIRUQoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfQotICAgIAot
ICAgIHZvaWQgY29tcGlsZUV4dHJhY3RPU1JFbnRyeUxvY2FsKCkKLSAgICB7Ci0gICAgICAgIEVu
Y29kZWRKU1ZhbHVlKiBidWZmZXIgPSBzdGF0aWNfY2FzdDxFbmNvZGVkSlNWYWx1ZSo+KAotICAg
ICAgICAgICAgbV9mdGxTdGF0ZS5qaXRDb2RlLT5mdGxGb3JPU1JFbnRyeSgpLT5lbnRyeUJ1ZmZl
cigpLT5kYXRhQnVmZmVyKCkpOwotICAgICAgICBzZXRKU1ZhbHVlKG1fb3V0LmxvYWQ2NChtX291
dC5hYnNvbHV0ZShidWZmZXIgKyBtX25vZGUtPnVubGlua2VkTG9jYWwoKS50b0xvY2FsKCkpKSk7
Ci0gICAgfQotICAgIAotICAgIHZvaWQgY29tcGlsZUdldExvY2FsKCkKLSAgICB7Ci0gICAgICAg
IC8vIEdldExvY2FscyBhcmlzZSBvbmx5IGZvciBjYXB0dXJlZCB2YXJpYWJsZXMuCi0gICAgICAg
IAotICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlID0gbV9ub2RlLT52YXJpYWJs
ZUFjY2Vzc0RhdGEoKTsKLSAgICAgICAgQWJzdHJhY3RWYWx1ZSYgdmFsdWUgPSBtX3N0YXRlLnZh
cmlhYmxlcygpLm9wZXJhbmQodmFyaWFibGUtPmxvY2FsKCkpOwotICAgICAgICAKLSAgICAgICAg
UkVMRUFTRV9BU1NFUlQodmFyaWFibGUtPmlzQ2FwdHVyZWQoKSk7Ci0gICAgICAgIAotICAgICAg
ICBpZiAoaXNJbnQzMlNwZWN1bGF0aW9uKHZhbHVlLm1fdHlwZSkpCi0gICAgICAgICAgICBzZXRJ
bnQzMihtX291dC5sb2FkMzIocGF5bG9hZEZvcih2YXJpYWJsZS0+bWFjaGluZUxvY2FsKCkpKSk7
Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHNldEpTVmFsdWUobV9vdXQubG9hZDY0KGFkZHJl
c3NGb3IodmFyaWFibGUtPm1hY2hpbmVMb2NhbCgpKSkpOwotICAgIH0KLSAgICAKLSAgICB2b2lk
IGNvbXBpbGVTZXRMb2NhbCgpCi0gICAgewotICAgICAgICBvYnNlcnZlTW92SGludChtX25vZGUp
OwotICAgICAgICAKLSAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZSA9IG1fbm9k
ZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCk7Ci0gICAgICAgIHN3aXRjaCAodmFyaWFibGUtPmZsdXNo
Rm9ybWF0KCkpIHsKLSAgICAgICAgY2FzZSBGbHVzaGVkSlNWYWx1ZTogewotICAgICAgICAgICAg
TFZhbHVlIHZhbHVlID0gbG93SlNWYWx1ZShtX25vZGUtPmNoaWxkMSgpKTsKLSAgICAgICAgICAg
IG1fb3V0LnN0b3JlNjQodmFsdWUsIGFkZHJlc3NGb3IodmFyaWFibGUtPm1hY2hpbmVMb2NhbCgp
KSk7Ci0gICAgICAgICAgICBtX3ZhbHVlU291cmNlcy5vcGVyYW5kKHZhcmlhYmxlLT5sb2NhbCgp
KSA9IFZhbHVlU291cmNlKFZhbHVlSW5KU1N0YWNrLCB2YXJpYWJsZS0+bWFjaGluZUxvY2FsKCkp
OwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAg
Y2FzZSBGbHVzaGVkRG91YmxlOiB7Ci0gICAgICAgICAgICBMVmFsdWUgdmFsdWUgPSBsb3dEb3Vi
bGUobV9ub2RlLT5jaGlsZDEoKSk7Ci0gICAgICAgICAgICBtX291dC5zdG9yZURvdWJsZSh2YWx1
ZSwgYWRkcmVzc0Zvcih2YXJpYWJsZS0+bWFjaGluZUxvY2FsKCkpKTsKLSAgICAgICAgICAgIG1f
dmFsdWVTb3VyY2VzLm9wZXJhbmQodmFyaWFibGUtPmxvY2FsKCkpID0gVmFsdWVTb3VyY2UoRG91
YmxlSW5KU1N0YWNrLCB2YXJpYWJsZS0+bWFjaGluZUxvY2FsKCkpOwotICAgICAgICAgICAgcmV0
dXJuOwotICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgY2FzZSBGbHVzaGVkSW50MzI6
IHsKLSAgICAgICAgICAgIExWYWx1ZSB2YWx1ZSA9IGxvd0ludDMyKG1fbm9kZS0+Y2hpbGQxKCkp
OwotICAgICAgICAgICAgbV9vdXQuc3RvcmUzMih2YWx1ZSwgcGF5bG9hZEZvcih2YXJpYWJsZS0+
bWFjaGluZUxvY2FsKCkpKTsKLSAgICAgICAgICAgIG1fdmFsdWVTb3VyY2VzLm9wZXJhbmQodmFy
aWFibGUtPmxvY2FsKCkpID0gVmFsdWVTb3VyY2UoSW50MzJJbkpTU3RhY2ssIHZhcmlhYmxlLT5t
YWNoaW5lTG9jYWwoKSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAg
ICAgIAotICAgICAgICBjYXNlIEZsdXNoZWRJbnQ1MjogewotICAgICAgICAgICAgTFZhbHVlIHZh
bHVlID0gbG93SW50NTIobV9ub2RlLT5jaGlsZDEoKSk7Ci0gICAgICAgICAgICBtX291dC5zdG9y
ZTY0KHZhbHVlLCBhZGRyZXNzRm9yKHZhcmlhYmxlLT5tYWNoaW5lTG9jYWwoKSkpOwotICAgICAg
ICAgICAgbV92YWx1ZVNvdXJjZXMub3BlcmFuZCh2YXJpYWJsZS0+bG9jYWwoKSkgPSBWYWx1ZVNv
dXJjZShJbnQ1MkluSlNTdGFjaywgdmFyaWFibGUtPm1hY2hpbmVMb2NhbCgpKTsKLSAgICAgICAg
ICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgIGNhc2UgRmx1c2hl
ZENlbGw6IHsKLSAgICAgICAgICAgIExWYWx1ZSB2YWx1ZSA9IGxvd0NlbGwobV9ub2RlLT5jaGls
ZDEoKSk7Ci0gICAgICAgICAgICBtX291dC5zdG9yZTY0KHZhbHVlLCBhZGRyZXNzRm9yKHZhcmlh
YmxlLT5tYWNoaW5lTG9jYWwoKSkpOwotICAgICAgICAgICAgbV92YWx1ZVNvdXJjZXMub3BlcmFu
ZCh2YXJpYWJsZS0+bG9jYWwoKSkgPSBWYWx1ZVNvdXJjZShWYWx1ZUluSlNTdGFjaywgdmFyaWFi
bGUtPm1hY2hpbmVMb2NhbCgpKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAg
ICAgICAgICAgCi0gICAgICAgIGNhc2UgRmx1c2hlZEJvb2xlYW46IHsKLSAgICAgICAgICAgIHNw
ZWN1bGF0ZUJvb2xlYW4obV9ub2RlLT5jaGlsZDEoKSk7Ci0gICAgICAgICAgICBtX291dC5zdG9y
ZTY0KAotICAgICAgICAgICAgICAgIGxvd0pTVmFsdWUobV9ub2RlLT5jaGlsZDEoKSwgTWFudWFs
T3BlcmFuZFNwZWN1bGF0aW9uKSwKLSAgICAgICAgICAgICAgICBhZGRyZXNzRm9yKHZhcmlhYmxl
LT5tYWNoaW5lTG9jYWwoKSkpOwotICAgICAgICAgICAgbV92YWx1ZVNvdXJjZXMub3BlcmFuZCh2
YXJpYWJsZS0+bG9jYWwoKSkgPSBWYWx1ZVNvdXJjZShWYWx1ZUluSlNTdGFjaywgdmFyaWFibGUt
Pm1hY2hpbmVMb2NhbCgpKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAg
ICAgICAgCi0gICAgICAgIGNhc2UgRGVhZEZsdXNoOgotICAgICAgICAgICAgUkVMRUFTRV9BU1NF
UlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgUkVMRUFTRV9B
U1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICB9Ci0gICAgCi0gICAgdm9pZCBjb21waWxlTW92SGlu
dCgpCi0gICAgewotICAgICAgICBvYnNlcnZlTW92SGludChtX25vZGUpOwotICAgIH0KLSAgICAK
LSAgICB2b2lkIGNvbXBpbGVab21iaWVIaW50KCkKLSAgICB7Ci0gICAgICAgIFZhcmlhYmxlQWNj
ZXNzRGF0YSogZGF0YSA9IG1fbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCk7Ci0gICAgICAgIG1f
bGFzdFNldE9wZXJhbmQgPSBkYXRhLT5sb2NhbCgpOwotICAgICAgICBtX3ZhbHVlU291cmNlcy5v
cGVyYW5kKGRhdGEtPmxvY2FsKCkpID0gVmFsdWVTb3VyY2UoU291cmNlSXNEZWFkKTsKLSAgICB9
Ci0gICAgCi0gICAgdm9pZCBjb21waWxlTW92SGludEFuZENoZWNrKCkKLSAgICB7Ci0gICAgICAg
IG9ic2VydmVNb3ZIaW50KG1fbm9kZSk7Ci0gICAgICAgIHNwZWN1bGF0ZShtX25vZGUtPmNoaWxk
MSgpKTsKLSAgICB9Ci0gICAgCi0gICAgdm9pZCBjb21waWxlUGhhbnRvbSgpCi0gICAgewotICAg
ICAgICBERkdfTk9ERV9ET19UT19DSElMRFJFTihtX2dyYXBoLCBtX25vZGUsIHNwZWN1bGF0ZSk7
Ci0gICAgfQotICAgIAotICAgIHZvaWQgY29tcGlsZUFkZFN1YigpCi0gICAgewotICAgICAgICBi
b29sIGlzU3ViID0gIG1fbm9kZS0+b3AoKSA9PSBBcml0aFN1YjsKLSAgICAgICAgc3dpdGNoICht
X25vZGUtPmJpbmFyeVVzZUtpbmQoKSkgewotICAgICAgICBjYXNlIEludDMyVXNlOiB7Ci0gICAg
ICAgICAgICBMVmFsdWUgbGVmdCA9IGxvd0ludDMyKG1fbm9kZS0+Y2hpbGQxKCkpOwotICAgICAg
ICAgICAgTFZhbHVlIHJpZ2h0ID0gbG93SW50MzIobV9ub2RlLT5jaGlsZDIoKSk7Ci0gICAgICAg
ICAgICBMVmFsdWUgcmVzdWx0ID0gaXNTdWIgPyBtX291dC5zdWIobGVmdCwgcmlnaHQpIDogbV9v
dXQuYWRkKGxlZnQsIHJpZ2h0KTsKLQotICAgICAgICAgICAgaWYgKGJ5dGVjb2RlQ2FuVHJ1bmNh
dGVJbnRlZ2VyKG1fbm9kZS0+YXJpdGhOb2RlRmxhZ3MoKSkpIHsKLSAgICAgICAgICAgICAgICBz
ZXRJbnQzMihyZXN1bHQpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQot
Ci0gICAgICAgICAgICBMVmFsdWUgb3ZlcmZsb3cgPSBpc1N1YiA/IG1fb3V0LnN1YldpdGhPdmVy
ZmxvdzMyKGxlZnQsIHJpZ2h0KSA6IG1fb3V0LmFkZFdpdGhPdmVyZmxvdzMyKGxlZnQsIHJpZ2h0
KTsKLQotICAgICAgICAgICAgc3BlY3VsYXRlKE92ZXJmbG93LCBub1ZhbHVlKCksIDAsIG1fb3V0
LmV4dHJhY3RWYWx1ZShvdmVyZmxvdywgMSkpOwotICAgICAgICAgICAgc2V0SW50MzIocmVzdWx0
KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAg
Y2FzZSBNYWNoaW5lSW50VXNlOiB7Ci0gICAgICAgICAgICBpZiAoIW1fc3RhdGUuZm9yTm9kZSht
X25vZGUtPmNoaWxkMSgpKS5jb3VsZEJlVHlwZShTcGVjSW50NTIpCi0gICAgICAgICAgICAgICAg
JiYgIW1fc3RhdGUuZm9yTm9kZShtX25vZGUtPmNoaWxkMigpKS5jb3VsZEJlVHlwZShTcGVjSW50
NTIpKSB7Ci0gICAgICAgICAgICAgICAgSW50NTJLaW5kIGtpbmQ7Ci0gICAgICAgICAgICAgICAg
TFZhbHVlIGxlZnQgPSBsb3dXaGljaGV2ZXJJbnQ1MihtX25vZGUtPmNoaWxkMSgpLCBraW5kKTsK
LSAgICAgICAgICAgICAgICBMVmFsdWUgcmlnaHQgPSBsb3dJbnQ1MihtX25vZGUtPmNoaWxkMigp
LCBraW5kKTsKLSAgICAgICAgICAgICAgICBzZXRJbnQ1Mihpc1N1YiA/IG1fb3V0LnN1YihsZWZ0
LCByaWdodCkgOiBtX291dC5hZGQobGVmdCwgcmlnaHQpLCBraW5kKTsKLSAgICAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICAgICAgTFZhbHVl
IGxlZnQgPSBsb3dJbnQ1MihtX25vZGUtPmNoaWxkMSgpKTsKLSAgICAgICAgICAgIExWYWx1ZSBy
aWdodCA9IGxvd0ludDUyKG1fbm9kZS0+Y2hpbGQyKCkpOwotICAgICAgICAgICAgTFZhbHVlIHJl
c3VsdCA9IGlzU3ViID8gbV9vdXQuc3ViKGxlZnQsIHJpZ2h0KSA6IG1fb3V0LmFkZChsZWZ0LCBy
aWdodCk7Ci0KLSAgICAgICAgICAgIExWYWx1ZSBvdmVyZmxvdyA9IGlzU3ViID8gbV9vdXQuc3Vi
V2l0aE92ZXJmbG93NjQobGVmdCwgcmlnaHQpIDogbV9vdXQuYWRkV2l0aE92ZXJmbG93NjQobGVm
dCwgcmlnaHQpOwotICAgICAgICAgICAgc3BlY3VsYXRlKEludDUyT3ZlcmZsb3csIG5vVmFsdWUo
KSwgMCwgbV9vdXQuZXh0cmFjdFZhbHVlKG92ZXJmbG93LCAxKSk7Ci0gICAgICAgICAgICBzZXRJ
bnQ1MihyZXN1bHQpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgICAg
IAotICAgICAgICBjYXNlIE51bWJlclVzZTogewotICAgICAgICAgICAgTFZhbHVlIEMxID0gbG93
RG91YmxlKG1fbm9kZS0+Y2hpbGQxKCkpOwotICAgICAgICAgICAgTFZhbHVlIEMyID0gbG93RG91
YmxlKG1fbm9kZS0+Y2hpbGQyKCkpOwotCi0gICAgICAgICAgICBzZXREb3VibGUoaXNTdWIgPyBt
X291dC5kb3VibGVTdWIoQzEsIEMyKSA6IG1fb3V0LmRvdWJsZUFkZChDMSwgQzIpKTsKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgZGVmYXVsdDoK
LSAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgfQotICAgIH0KLSAgICAKLSAgICB2b2lkIGNvbXBpbGVBcml0aE11bCgp
Ci0gICAgewotICAgICAgICBzd2l0Y2ggKG1fbm9kZS0+YmluYXJ5VXNlS2luZCgpKSB7Ci0gICAg
ICAgIGNhc2UgSW50MzJVc2U6IHsKLSAgICAgICAgICAgIExWYWx1ZSBsZWZ0ID0gbG93SW50MzIo
bV9ub2RlLT5jaGlsZDEoKSk7Ci0gICAgICAgICAgICBMVmFsdWUgcmlnaHQgPSBsb3dJbnQzMiht
X25vZGUtPmNoaWxkMigpKTsKLSAgICAgICAgICAgIExWYWx1ZSByZXN1bHQgPSBtX291dC5tdWwo
bGVmdCwgcmlnaHQpOwotCi0gICAgICAgICAgICBpZiAoIWJ5dGVjb2RlQ2FuVHJ1bmNhdGVJbnRl
Z2VyKG1fbm9kZS0+YXJpdGhOb2RlRmxhZ3MoKSkpIHsKLSAgICAgICAgICAgICAgICBMVmFsdWUg
b3ZlcmZsb3dSZXN1bHQgPSBtX291dC5tdWxXaXRoT3ZlcmZsb3czMihsZWZ0LCByaWdodCk7Ci0g
ICAgICAgICAgICAgICAgc3BlY3VsYXRlKE92ZXJmbG93LCBub1ZhbHVlKCksIDAsIG1fb3V0LmV4
dHJhY3RWYWx1ZShvdmVyZmxvd1Jlc3VsdCwgMSkpOwotICAgICAgICAgICAgfQotICAgICAgICAg
ICAgCi0gICAgICAgICAgICBpZiAoIWJ5dGVjb2RlQ2FuSWdub3JlTmVnYXRpdmVaZXJvKG1fbm9k
ZS0+YXJpdGhOb2RlRmxhZ3MoKSkpIHsKLSAgICAgICAgICAgICAgICBMQmFzaWNCbG9jayBzbG93
Q2FzZSA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiQXJpdGhNdWwgc2xvdyBjYXNlIikpOwotICAg
ICAgICAgICAgICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IEZUTF9ORVdfQkxPQ0sobV9v
dXQsICgiQXJpdGhNdWwgY29udGludWF0aW9uIikpOwotICAgICAgICAgICAgICAgIAotICAgICAg
ICAgICAgICAgIG1fb3V0LmJyYW5jaChtX291dC5ub3RaZXJvMzIocmVzdWx0KSwgY29udGludWF0
aW9uLCBzbG93Q2FzZSk7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgTEJhc2lj
QmxvY2sgbGFzdE5leHQgPSBtX291dC5hcHBlbmRUbyhzbG93Q2FzZSwgY29udGludWF0aW9uKTsK
LSAgICAgICAgICAgICAgICBMVmFsdWUgY29uZCA9IG1fb3V0LmJpdE9yKG1fb3V0Lmxlc3NUaGFu
KGxlZnQsIG1fb3V0LmludDMyWmVybyksIG1fb3V0Lmxlc3NUaGFuKHJpZ2h0LCBtX291dC5pbnQz
Mlplcm8pKTsKLSAgICAgICAgICAgICAgICBzcGVjdWxhdGUoTmVnYXRpdmVaZXJvLCBub1ZhbHVl
KCksIDAsIGNvbmQpOwotICAgICAgICAgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsK
LSAgICAgICAgICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0KTsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICAgICAgc2V0SW50MzIocmVzdWx0
KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAg
Y2FzZSBNYWNoaW5lSW50VXNlOiB7Ci0gICAgICAgICAgICBJbnQ1MktpbmQga2luZDsKLSAgICAg
ICAgICAgIExWYWx1ZSBsZWZ0ID0gbG93V2hpY2hldmVySW50NTIobV9ub2RlLT5jaGlsZDEoKSwg
a2luZCk7Ci0gICAgICAgICAgICBMVmFsdWUgcmlnaHQgPSBsb3dJbnQ1MihtX25vZGUtPmNoaWxk
MigpLCBvcHBvc2l0ZShraW5kKSk7Ci0gICAgICAgICAgICBMVmFsdWUgcmVzdWx0ID0gbV9vdXQu
bXVsKGxlZnQsIHJpZ2h0KTsKLQotCi0gICAgICAgICAgICBMVmFsdWUgb3ZlcmZsb3dSZXN1bHQg
PSBtX291dC5tdWxXaXRoT3ZlcmZsb3c2NChsZWZ0LCByaWdodCk7Ci0gICAgICAgICAgICBzcGVj
dWxhdGUoSW50NTJPdmVyZmxvdywgbm9WYWx1ZSgpLCAwLCBtX291dC5leHRyYWN0VmFsdWUob3Zl
cmZsb3dSZXN1bHQsIDEpKTsKLQotICAgICAgICAgICAgaWYgKCFieXRlY29kZUNhbklnbm9yZU5l
Z2F0aXZlWmVybyhtX25vZGUtPmFyaXRoTm9kZUZsYWdzKCkpKSB7Ci0gICAgICAgICAgICAgICAg
TEJhc2ljQmxvY2sgc2xvd0Nhc2UgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIkFyaXRoTXVsIHNs
b3cgY2FzZSIpKTsKLSAgICAgICAgICAgICAgICBMQmFzaWNCbG9jayBjb250aW51YXRpb24gPSBG
VExfTkVXX0JMT0NLKG1fb3V0LCAoIkFyaXRoTXVsIGNvbnRpbnVhdGlvbiIpKTsKLSAgICAgICAg
ICAgICAgICAKLSAgICAgICAgICAgICAgICBtX291dC5icmFuY2gobV9vdXQubm90WmVybzY0KHJl
c3VsdCksIGNvbnRpbnVhdGlvbiwgc2xvd0Nhc2UpOwotICAgICAgICAgICAgICAgIAotICAgICAg
ICAgICAgICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9vdXQuYXBwZW5kVG8oc2xvd0Nhc2Us
IGNvbnRpbnVhdGlvbik7Ci0gICAgICAgICAgICAgICAgTFZhbHVlIGNvbmQgPSBtX291dC5iaXRP
cihtX291dC5sZXNzVGhhbihsZWZ0LCBtX291dC5pbnQ2NFplcm8pLCBtX291dC5sZXNzVGhhbihy
aWdodCwgbV9vdXQuaW50NjRaZXJvKSk7Ci0gICAgICAgICAgICAgICAgc3BlY3VsYXRlKE5lZ2F0
aXZlWmVybywgbm9WYWx1ZSgpLCAwLCBjb25kKTsKLSAgICAgICAgICAgICAgICBtX291dC5qdW1w
KGNvbnRpbnVhdGlvbik7Ci0gICAgICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGludWF0
aW9uLCBsYXN0TmV4dCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgICAg
IHNldEludDUyKHJlc3VsdCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAg
ICAgICAgCi0gICAgICAgIGNhc2UgTnVtYmVyVXNlOiB7Ci0gICAgICAgICAgICBzZXREb3VibGUo
Ci0gICAgICAgICAgICAgICAgbV9vdXQuZG91YmxlTXVsKGxvd0RvdWJsZShtX25vZGUtPmNoaWxk
MSgpKSwgbG93RG91YmxlKG1fbm9kZS0+Y2hpbGQyKCkpKSk7Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBS
RUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
IH0KLSAgICB9Ci0KLSAgICB2b2lkIGNvbXBpbGVBcml0aERpdk1vZCgpCi0gICAgewotICAgICAg
ICBzd2l0Y2ggKG1fbm9kZS0+YmluYXJ5VXNlS2luZCgpKSB7Ci0gICAgICAgIGNhc2UgSW50MzJV
c2U6IHsKLSAgICAgICAgICAgIExWYWx1ZSBudW1lcmF0b3IgPSBsb3dJbnQzMihtX25vZGUtPmNo
aWxkMSgpKTsKLSAgICAgICAgICAgIExWYWx1ZSBkZW5vbWluYXRvciA9IGxvd0ludDMyKG1fbm9k
ZS0+Y2hpbGQyKCkpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBMQmFzaWNCbG9jayB1bnNh
ZmVEZW5vbWluYXRvciA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiQXJpdGhEaXZNb2QgdW5zYWZl
IGRlbm9taW5hdG9yIikpOwotICAgICAgICAgICAgTEJhc2ljQmxvY2sgY29udGludWF0aW9uID0g
RlRMX05FV19CTE9DSyhtX291dCwgKCJBcml0aERpdk1vZCBjb250aW51YXRpb24iKSk7Ci0gICAg
ICAgICAgICBMQmFzaWNCbG9jayBkb25lID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJBcml0aERp
dk1vZCBkb25lIikpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBWZWN0b3I8VmFsdWVGcm9t
QmxvY2ssIDM+IHJlc3VsdHM7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIExWYWx1ZSBhZGp1
c3RlZERlbm9taW5hdG9yID0gbV9vdXQuYWRkKGRlbm9taW5hdG9yLCBtX291dC5pbnQzMk9uZSk7
Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIG1fb3V0LmJyYW5jaChtX291dC5hYm92ZShhZGp1
c3RlZERlbm9taW5hdG9yLCBtX291dC5pbnQzMk9uZSksIGNvbnRpbnVhdGlvbiwgdW5zYWZlRGVu
b21pbmF0b3IpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4
dCA9IG1fb3V0LmFwcGVuZFRvKHVuc2FmZURlbm9taW5hdG9yLCBjb250aW51YXRpb24pOwotICAg
ICAgICAgICAgCi0gICAgICAgICAgICBMVmFsdWUgbmVnMlRvVGhlMzEgPSBtX291dC5jb25zdElu
dDMyKC0yMTQ3NDgzNjQ3LTEpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAoYnl0ZWNv
ZGVVc2VzQXNOdW1iZXIobV9ub2RlLT5hcml0aE5vZGVGbGFncygpKSkgewotICAgICAgICAgICAg
ICAgIExWYWx1ZSBjb25kID0gbV9vdXQuYml0T3IobV9vdXQuaXNaZXJvMzIoZGVub21pbmF0b3Ip
LCBtX291dC5lcXVhbChudW1lcmF0b3IsIG5lZzJUb1RoZTMxKSk7Ci0gICAgICAgICAgICAgICAg
c3BlY3VsYXRlKE92ZXJmbG93LCBub1ZhbHVlKCksIDAsIGNvbmQpOwotICAgICAgICAgICAgICAg
IG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAg
ICAgICAgICAgLy8gVGhpcyBpcyB0aGUgY2FzZSB3aGVyZSB3ZSBjb252ZXJ0IHRoZSByZXN1bHQg
dG8gYW4gaW50IGFmdGVyIHdlJ3JlIGRvbmUuIFNvLAotICAgICAgICAgICAgICAgIC8vIGlmIHRo
ZSBkZW5vbWluYXRvciBpcyB6ZXJvLCB0aGVuIHRoZSByZXN1bHQgc2hvdWxkIGJlIHplcm8uCi0g
ICAgICAgICAgICAgICAgLy8gSWYgdGhlIGRlbm9taW5hdG9yIGlzIG5vdCB6ZXJvIChpLmUuIGl0
J3MgLTEgYmVjYXVzZSB3ZSdyZSBndWFyZGVkIGJ5IHRoZQotICAgICAgICAgICAgICAgIC8vIGNo
ZWNrIGFib3ZlKSBhbmQgdGhlIG51bWVyYXRvciBpcyAtMl4zMSB0aGVuIHRoZSByZXN1bHQgc2hv
dWxkIGJlIC0yXjMxLgotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIExCYXNpY0Js
b2NrIGRpdkJ5WmVybyA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiQXJpdGhEaXYgZGl2aWRlIGJ5
IHplcm8iKSk7Ci0gICAgICAgICAgICAgICAgTEJhc2ljQmxvY2sgbm90RGl2QnlaZXJvID0gRlRM
X05FV19CTE9DSyhtX291dCwgKCJBcml0aERpdiBub3QgZGl2aWRlIGJ5IHplcm8iKSk7Ci0gICAg
ICAgICAgICAgICAgTEJhc2ljQmxvY2sgbmVnMlRvVGhlMzFCeU5lZzEgPSBGVExfTkVXX0JMT0NL
KG1fb3V0LCAoIkFyaXRoRGl2IC0yXjMxLy0xIikpOwotICAgICAgICAgICAgICAgIAotICAgICAg
ICAgICAgICAgIG1fb3V0LmJyYW5jaChtX291dC5pc1plcm8zMihkZW5vbWluYXRvciksIGRpdkJ5
WmVybywgbm90RGl2QnlaZXJvKTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBt
X291dC5hcHBlbmRUbyhkaXZCeVplcm8sIG5vdERpdkJ5WmVybyk7Ci0gICAgICAgICAgICAgICAg
cmVzdWx0cy5hcHBlbmQobV9vdXQuYW5jaG9yKG1fb3V0LmludDMyWmVybykpOwotICAgICAgICAg
ICAgICAgIG1fb3V0Lmp1bXAoZG9uZSk7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAg
ICAgbV9vdXQuYXBwZW5kVG8obm90RGl2QnlaZXJvLCBuZWcyVG9UaGUzMUJ5TmVnMSk7Ci0gICAg
ICAgICAgICAgICAgbV9vdXQuYnJhbmNoKG1fb3V0LmVxdWFsKG51bWVyYXRvciwgbmVnMlRvVGhl
MzEpLCBuZWcyVG9UaGUzMUJ5TmVnMSwgY29udGludWF0aW9uKTsKLSAgICAgICAgICAgICAgICAK
LSAgICAgICAgICAgICAgICBtX291dC5hcHBlbmRUbyhuZWcyVG9UaGUzMUJ5TmVnMSwgY29udGlu
dWF0aW9uKTsKLSAgICAgICAgICAgICAgICByZXN1bHRzLmFwcGVuZChtX291dC5hbmNob3IobmVn
MlRvVGhlMzEpKTsKLSAgICAgICAgICAgICAgICBtX291dC5qdW1wKGRvbmUpOwotICAgICAgICAg
ICAgfQotICAgICAgICAgICAgCi0gICAgICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51YXRp
b24sIGRvbmUpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAoIWJ5dGVjb2RlQ2FuSWdu
b3JlTmVnYXRpdmVaZXJvKG1fbm9kZS0+YXJpdGhOb2RlRmxhZ3MoKSkpIHsKLSAgICAgICAgICAg
ICAgICBMQmFzaWNCbG9jayB6ZXJvTnVtZXJhdG9yID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJB
cml0aERpdk1vZCB6ZXJvIG51bWVyYXRvciIpKTsKLSAgICAgICAgICAgICAgICBMQmFzaWNCbG9j
ayBudW1lcmF0b3JDb250aW51YXRpb24gPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIkFyaXRoRGl2
TW9kIG51bWVyYXRvciBjb250aW51YXRpb24iKSk7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAg
ICAgICAgICAgbV9vdXQuYnJhbmNoKG1fb3V0LmlzWmVybzMyKG51bWVyYXRvciksIHplcm9OdW1l
cmF0b3IsIG51bWVyYXRvckNvbnRpbnVhdGlvbik7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAg
ICAgICAgICAgTEJhc2ljQmxvY2sgaW5uZXJMYXN0TmV4dCA9IG1fb3V0LmFwcGVuZFRvKHplcm9O
dW1lcmF0b3IsIG51bWVyYXRvckNvbnRpbnVhdGlvbik7Ci0gICAgICAgICAgICAgICAgCi0gICAg
ICAgICAgICAgICAgc3BlY3VsYXRlKAotICAgICAgICAgICAgICAgICAgICBOZWdhdGl2ZVplcm8s
IG5vVmFsdWUoKSwgMCwgbV9vdXQubGVzc1RoYW4oZGVub21pbmF0b3IsIG1fb3V0LmludDMyWmVy
bykpOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIG1fb3V0Lmp1bXAobnVtZXJh
dG9yQ29udGludWF0aW9uKTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBtX291
dC5hcHBlbmRUbyhudW1lcmF0b3JDb250aW51YXRpb24sIGlubmVyTGFzdE5leHQpOwotICAgICAg
ICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgICAgICBMVmFsdWUgZGl2TW9kUmVzdWx0ID0g
bV9ub2RlLT5vcCgpID09IEFyaXRoRGl2Ci0gICAgICAgICAgICAgICAgPyBtX291dC5kaXYobnVt
ZXJhdG9yLCBkZW5vbWluYXRvcikKLSAgICAgICAgICAgICAgICA6IG1fb3V0LnJlbShudW1lcmF0
b3IsIGRlbm9taW5hdG9yKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKGJ5dGVjb2Rl
VXNlc0FzTnVtYmVyKG1fbm9kZS0+YXJpdGhOb2RlRmxhZ3MoKSkpIHsKLSAgICAgICAgICAgICAg
ICBzcGVjdWxhdGUoCi0gICAgICAgICAgICAgICAgICAgIE92ZXJmbG93LCBub1ZhbHVlKCksIDAs
Ci0gICAgICAgICAgICAgICAgICAgIG1fb3V0Lm5vdEVxdWFsKG1fb3V0Lm11bChkaXZNb2RSZXN1
bHQsIGRlbm9taW5hdG9yKSwgbnVtZXJhdG9yKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAKLSAgICAgICAgICAgIHJlc3VsdHMuYXBwZW5kKG1fb3V0LmFuY2hvcihkaXZNb2RSZXN1bHQp
KTsKLSAgICAgICAgICAgIG1fb3V0Lmp1bXAoZG9uZSk7Ci0gICAgICAgICAgICAKLSAgICAgICAg
ICAgIG1fb3V0LmFwcGVuZFRvKGRvbmUsIGxhc3ROZXh0KTsKLSAgICAgICAgICAgIAotICAgICAg
ICAgICAgc2V0SW50MzIobV9vdXQucGhpKG1fb3V0LmludDMyLCByZXN1bHRzKSk7Ci0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgIGNhc2UgTnVtYmVy
VXNlOiB7Ci0gICAgICAgICAgICBMVmFsdWUgQzEgPSBsb3dEb3VibGUobV9ub2RlLT5jaGlsZDEo
KSk7Ci0gICAgICAgICAgICBMVmFsdWUgQzIgPSBsb3dEb3VibGUobV9ub2RlLT5jaGlsZDIoKSk7
Ci0gICAgICAgICAgICBzZXREb3VibGUobV9ub2RlLT5vcCgpID09IEFyaXRoRGl2ID8gbV9vdXQu
ZG91YmxlRGl2KEMxLCBDMikgOiBtX291dC5kb3VibGVSZW0oQzEsIEMyKSk7Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgIGRlZmF1bHQ6Ci0gICAg
ICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgdm9pZCBjb21waWxlQXJpdGhNaW5Pck1heCgp
Ci0gICAgewotICAgICAgICBzd2l0Y2ggKG1fbm9kZS0+YmluYXJ5VXNlS2luZCgpKSB7Ci0gICAg
ICAgIGNhc2UgSW50MzJVc2U6IHsKLSAgICAgICAgICAgIExWYWx1ZSBsZWZ0ID0gbG93SW50MzIo
bV9ub2RlLT5jaGlsZDEoKSk7Ci0gICAgICAgICAgICBMVmFsdWUgcmlnaHQgPSBsb3dJbnQzMiht
X25vZGUtPmNoaWxkMigpKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgc2V0SW50MzIoCi0g
ICAgICAgICAgICAgICAgbV9vdXQuc2VsZWN0KAotICAgICAgICAgICAgICAgICAgICBtX25vZGUt
Pm9wKCkgPT0gQXJpdGhNaW4KLSAgICAgICAgICAgICAgICAgICAgICAgID8gbV9vdXQubGVzc1Ro
YW4obGVmdCwgcmlnaHQpCi0gICAgICAgICAgICAgICAgICAgICAgICA6IG1fb3V0Lmxlc3NUaGFu
KHJpZ2h0LCBsZWZ0KSwKLSAgICAgICAgICAgICAgICAgICAgbGVmdCwgcmlnaHQpKTsKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgY2FzZSBOdW1i
ZXJVc2U6IHsKLSAgICAgICAgICAgIExWYWx1ZSBsZWZ0ID0gbG93RG91YmxlKG1fbm9kZS0+Y2hp
bGQxKCkpOwotICAgICAgICAgICAgTFZhbHVlIHJpZ2h0ID0gbG93RG91YmxlKG1fbm9kZS0+Y2hp
bGQyKCkpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBMQmFzaWNCbG9jayBub3RMZXNzVGhh
biA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiQXJpdGhNaW4vQXJpdGhNYXggbm90IGxlc3MgdGhh
biIpKTsKLSAgICAgICAgICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IEZUTF9ORVdfQkxP
Q0sobV9vdXQsICgiQXJpdGhNaW4vQXJpdGhNYXggY29udGludWF0aW9uIikpOwotICAgICAgICAg
ICAgCi0gICAgICAgICAgICBWZWN0b3I8VmFsdWVGcm9tQmxvY2ssIDI+IHJlc3VsdHM7Ci0gICAg
ICAgICAgICAKLSAgICAgICAgICAgIHJlc3VsdHMuYXBwZW5kKG1fb3V0LmFuY2hvcihsZWZ0KSk7
Ci0gICAgICAgICAgICBtX291dC5icmFuY2goCi0gICAgICAgICAgICAgICAgbV9ub2RlLT5vcCgp
ID09IEFyaXRoTWluCi0gICAgICAgICAgICAgICAgICAgID8gbV9vdXQuZG91YmxlTGVzc1RoYW4o
bGVmdCwgcmlnaHQpCi0gICAgICAgICAgICAgICAgICAgIDogbV9vdXQuZG91YmxlR3JlYXRlclRo
YW4obGVmdCwgcmlnaHQpLAotICAgICAgICAgICAgICAgIGNvbnRpbnVhdGlvbiwgbm90TGVzc1Ro
YW4pOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG1f
b3V0LmFwcGVuZFRvKG5vdExlc3NUaGFuLCBjb250aW51YXRpb24pOwotICAgICAgICAgICAgcmVz
dWx0cy5hcHBlbmQobV9vdXQuYW5jaG9yKG1fb3V0LnNlbGVjdCgKLSAgICAgICAgICAgICAgICBt
X25vZGUtPm9wKCkgPT0gQXJpdGhNaW4KLSAgICAgICAgICAgICAgICAgICAgPyBtX291dC5kb3Vi
bGVHcmVhdGVyVGhhbk9yRXF1YWwobGVmdCwgcmlnaHQpCi0gICAgICAgICAgICAgICAgICAgIDog
bV9vdXQuZG91YmxlTGVzc1RoYW5PckVxdWFsKGxlZnQsIHJpZ2h0KSwKLSAgICAgICAgICAgICAg
ICByaWdodCwgbV9vdXQuY29uc3REb3VibGUoMC4wIC8gMC4wKSkpKTsKLSAgICAgICAgICAgIG1f
b3V0Lmp1bXAoY29udGludWF0aW9uKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgbV9vdXQu
YXBwZW5kVG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7Ci0gICAgICAgICAgICBzZXREb3VibGUo
bV9vdXQucGhpKG1fb3V0LmRvdWJsZVR5cGUsIHJlc3VsdHMpKTsKLSAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAg
IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgfQotICAgIH0KLSAgICAKLSAgICB2b2lkIGNvbXBpbGVBcml0aEFicygpCi0gICAgewotICAg
ICAgICBzd2l0Y2ggKG1fbm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpKSB7Ci0gICAgICAgIGNhc2Ug
SW50MzJVc2U6IHsKLSAgICAgICAgICAgIExWYWx1ZSB2YWx1ZSA9IGxvd0ludDMyKG1fbm9kZS0+
Y2hpbGQxKCkpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBMVmFsdWUgbWFzayA9IG1fb3V0
LmFTaHIodmFsdWUsIG1fb3V0LmNvbnN0SW50MzIoMzEpKTsKLSAgICAgICAgICAgIExWYWx1ZSBy
ZXN1bHQgPSBtX291dC5iaXRYb3IobWFzaywgbV9vdXQuYWRkKG1hc2ssIHZhbHVlKSk7Ci0gICAg
ICAgICAgICAKLSAgICAgICAgICAgIHNwZWN1bGF0ZShPdmVyZmxvdywgbm9WYWx1ZSgpLCAwLCBt
X291dC5lcXVhbChyZXN1bHQsIG1fb3V0LmNvbnN0SW50MzIoMSA8PCAzMSkpKTsKLSAgICAgICAg
ICAgIAotICAgICAgICAgICAgc2V0SW50MzIocmVzdWx0KTsKLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgY2FzZSBOdW1iZXJVc2U6IHsKLSAgICAg
ICAgICAgIHNldERvdWJsZShtX291dC5kb3VibGVBYnMobG93RG91YmxlKG1fbm9kZS0+Y2hpbGQx
KCkpKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICAgICAgCi0gICAg
ICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgdm9pZCBjb21w
aWxlQXJpdGhOZWdhdGUoKQotICAgIHsKLSAgICAgICAgc3dpdGNoIChtX25vZGUtPmNoaWxkMSgp
LnVzZUtpbmQoKSkgewotICAgICAgICBjYXNlIEludDMyVXNlOiB7Ci0gICAgICAgICAgICBMVmFs
dWUgdmFsdWUgPSBsb3dJbnQzMihtX25vZGUtPmNoaWxkMSgpKTsKLSAgICAgICAgICAgIAotICAg
ICAgICAgICAgTFZhbHVlIHJlc3VsdCA9IG1fb3V0Lm5lZyh2YWx1ZSk7Ci0gICAgICAgICAgICBp
ZiAoIWJ5dGVjb2RlQ2FuVHJ1bmNhdGVJbnRlZ2VyKG1fbm9kZS0+YXJpdGhOb2RlRmxhZ3MoKSkp
IHsKLSAgICAgICAgICAgICAgICBpZiAoYnl0ZWNvZGVDYW5JZ25vcmVOZWdhdGl2ZVplcm8obV9u
b2RlLT5hcml0aE5vZGVGbGFncygpKSkgewotICAgICAgICAgICAgICAgICAgICAvLyBXZSBkb24n
dCBoYXZlIGEgbmVnYXRlLXdpdGgtb3ZlcmZsb3cgaW50cmluc2ljLiBIb3BlZnVsbHkgdGhpcwot
ICAgICAgICAgICAgICAgICAgICAvLyBkb2VzIHRoZSB0cmljaywgdGhvdWdoLgotICAgICAgICAg
ICAgICAgICAgICBMVmFsdWUgb3ZlcmZsb3dSZXN1bHQgPSBtX291dC5zdWJXaXRoT3ZlcmZsb3cz
MihtX291dC5pbnQzMlplcm8sIHZhbHVlKTsKLSAgICAgICAgICAgICAgICAgICAgc3BlY3VsYXRl
KE92ZXJmbG93LCBub1ZhbHVlKCksIDAsIG1fb3V0LmV4dHJhY3RWYWx1ZShvdmVyZmxvd1Jlc3Vs
dCwgMSkpOwotICAgICAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICAgICAgICBzcGVj
dWxhdGUoT3ZlcmZsb3csIG5vVmFsdWUoKSwgMCwgbV9vdXQudGVzdElzWmVybzMyKHZhbHVlLCBt
X291dC5jb25zdEludDMyKDB4N2ZmZmZmZmYpKSk7Ci0KLSAgICAgICAgICAgIH0KLQotICAgICAg
ICAgICAgc2V0SW50MzIocmVzdWx0KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0g
ICAgICAgICAgICAKLSAgICAgICAgY2FzZSBNYWNoaW5lSW50VXNlOiB7Ci0gICAgICAgICAgICBp
ZiAoIW1fc3RhdGUuZm9yTm9kZShtX25vZGUtPmNoaWxkMSgpKS5jb3VsZEJlVHlwZShTcGVjSW50
NTIpKSB7Ci0gICAgICAgICAgICAgICAgSW50NTJLaW5kIGtpbmQ7Ci0gICAgICAgICAgICAgICAg
TFZhbHVlIHZhbHVlID0gbG93V2hpY2hldmVySW50NTIobV9ub2RlLT5jaGlsZDEoKSwga2luZCk7
Ci0gICAgICAgICAgICAgICAgTFZhbHVlIHJlc3VsdCA9IG1fb3V0Lm5lZyh2YWx1ZSk7Ci0gICAg
ICAgICAgICAgICAgaWYgKCFieXRlY29kZUNhbklnbm9yZU5lZ2F0aXZlWmVybyhtX25vZGUtPmFy
aXRoTm9kZUZsYWdzKCkpKQotICAgICAgICAgICAgICAgICAgICBzcGVjdWxhdGUoTmVnYXRpdmVa
ZXJvLCBub1ZhbHVlKCksIDAsIG1fb3V0LmlzWmVybzY0KHJlc3VsdCkpOwotICAgICAgICAgICAg
ICAgIHNldEludDUyKHJlc3VsdCwga2luZCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIExWYWx1ZSB2YWx1ZSA9IGxvd0lu
dDUyKG1fbm9kZS0+Y2hpbGQxKCkpOwotICAgICAgICAgICAgTFZhbHVlIG92ZXJmbG93UmVzdWx0
ID0gbV9vdXQuc3ViV2l0aE92ZXJmbG93NjQobV9vdXQuaW50NjRaZXJvLCB2YWx1ZSk7Ci0gICAg
ICAgICAgICBzcGVjdWxhdGUoSW50NTJPdmVyZmxvdywgbm9WYWx1ZSgpLCAwLCBtX291dC5leHRy
YWN0VmFsdWUob3ZlcmZsb3dSZXN1bHQsIDEpKTsKLSAgICAgICAgICAgIExWYWx1ZSByZXN1bHQg
PSBtX291dC5uZWcodmFsdWUpOwotICAgICAgICAgICAgc3BlY3VsYXRlKE5lZ2F0aXZlWmVybywg
bm9WYWx1ZSgpLCAwLCBtX291dC5pc1plcm82NChyZXN1bHQpKTsKLSAgICAgICAgICAgIHNldElu
dDUyKHJlc3VsdCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICAgICAg
Ci0gICAgICAgIGNhc2UgTnVtYmVyVXNlOiB7Ci0gICAgICAgICAgICBzZXREb3VibGUobV9vdXQu
ZG91YmxlTmVnKGxvd0RvdWJsZShtX25vZGUtPmNoaWxkMSgpKSkpOwotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICBkZWZhdWx0OgotICAgICAgICAg
ICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICB9Ci0gICAgfQotICAgIAotICAgIHZvaWQgY29tcGlsZUJpdEFuZCgpCi0gICAgewotICAg
ICAgICBzZXRJbnQzMihtX291dC5iaXRBbmQobG93SW50MzIobV9ub2RlLT5jaGlsZDEoKSksIGxv
d0ludDMyKG1fbm9kZS0+Y2hpbGQyKCkpKSk7Ci0gICAgfQotICAgIAotICAgIHZvaWQgY29tcGls
ZUJpdE9yKCkKLSAgICB7Ci0gICAgICAgIHNldEludDMyKG1fb3V0LmJpdE9yKGxvd0ludDMyKG1f
bm9kZS0+Y2hpbGQxKCkpLCBsb3dJbnQzMihtX25vZGUtPmNoaWxkMigpKSkpOwotICAgIH0KLSAg
ICAKLSAgICB2b2lkIGNvbXBpbGVCaXRYb3IoKQotICAgIHsKLSAgICAgICAgc2V0SW50MzIobV9v
dXQuYml0WG9yKGxvd0ludDMyKG1fbm9kZS0+Y2hpbGQxKCkpLCBsb3dJbnQzMihtX25vZGUtPmNo
aWxkMigpKSkpOwotICAgIH0KLSAgICAKLSAgICB2b2lkIGNvbXBpbGVCaXRSU2hpZnQoKQotICAg
IHsKLSAgICAgICAgc2V0SW50MzIobV9vdXQuYVNocigKLSAgICAgICAgICAgIGxvd0ludDMyKG1f
bm9kZS0+Y2hpbGQxKCkpLAotICAgICAgICAgICAgbV9vdXQuYml0QW5kKGxvd0ludDMyKG1fbm9k
ZS0+Y2hpbGQyKCkpLCBtX291dC5jb25zdEludDMyKDMxKSkpKTsKLSAgICB9Ci0gICAgCi0gICAg
dm9pZCBjb21waWxlQml0TFNoaWZ0KCkKLSAgICB7Ci0gICAgICAgIHNldEludDMyKG1fb3V0LnNo
bCgKLSAgICAgICAgICAgIGxvd0ludDMyKG1fbm9kZS0+Y2hpbGQxKCkpLAotICAgICAgICAgICAg
bV9vdXQuYml0QW5kKGxvd0ludDMyKG1fbm9kZS0+Y2hpbGQyKCkpLCBtX291dC5jb25zdEludDMy
KDMxKSkpKTsKLSAgICB9Ci0gICAgCi0gICAgdm9pZCBjb21waWxlQml0VVJTaGlmdCgpCi0gICAg
ewotICAgICAgICBzZXRJbnQzMihtX291dC5sU2hyKAotICAgICAgICAgICAgbG93SW50MzIobV9u
b2RlLT5jaGlsZDEoKSksCi0gICAgICAgICAgICBtX291dC5iaXRBbmQobG93SW50MzIobV9ub2Rl
LT5jaGlsZDIoKSksIG1fb3V0LmNvbnN0SW50MzIoMzEpKSkpOwotICAgIH0KLSAgICAKLSAgICB2
b2lkIGNvbXBpbGVVSW50MzJUb051bWJlcigpCi0gICAgewotICAgICAgICBMVmFsdWUgdmFsdWUg
PSBsb3dJbnQzMihtX25vZGUtPmNoaWxkMSgpKTsKLQotICAgICAgICBpZiAoIW5vZGVDYW5TcGVj
dWxhdGVJbnQzMihtX25vZGUtPmFyaXRoTm9kZUZsYWdzKCkpKSB7Ci0gICAgICAgICAgICBzZXRE
b3VibGUobV9vdXQudW5zaWduZWRUb0RvdWJsZSh2YWx1ZSkpOwotICAgICAgICAgICAgcmV0dXJu
OwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBzcGVjdWxhdGVGb3J3YXJkKAotICAgICAg
ICAgICAgT3ZlcmZsb3csIG5vVmFsdWUoKSwgMCwgbV9vdXQubGVzc1RoYW4odmFsdWUsIG1fb3V0
LmludDMyWmVybyksCi0gICAgICAgICAgICBGb3JtYXR0ZWRWYWx1ZShWYWx1ZUZvcm1hdFVJbnQz
MiwgdmFsdWUpKTsKLSAgICAgICAgc2V0SW50MzIodmFsdWUpOwotICAgIH0KLSAgICAKLSAgICB2
b2lkIGNvbXBpbGVJbnQzMlRvRG91YmxlKCkKLSAgICB7Ci0gICAgICAgIC8vIFRoaXMgbm9kZSBp
cyB0cmlja3kgdG8gY29tcGlsZSBpbiB0aGUgREZHIGJhY2tlbmQgYmVjYXVzZSBpdCB0cmllcyB0
bwotICAgICAgICAvLyBhdm9pZCBjb252ZXJ0aW5nIGNoaWxkMSB0byBhIGRvdWJsZSBpbi1wbGFj
ZSwgYXMgdGhhdCB3b3VsZCBtYWtlIHN1YnNlcXVlbnQKLSAgICAgICAgLy8gaW50IHVzZXMgb2Yg
b2YgY2hpbGQxIGZhaWwuIEJ1dCB0aGUgRlRMIG5lZWRzIG5vIHN1Y2ggc3BlY2lhbCBtYWdpYywg
c2luY2UKLSAgICAgICAgLy8gdW5saWtlIHRoZSBERkcgYmFja2VuZCwgdGhlIEZUTCBhbGxvd3Mg
ZWFjaCBub2RlIHRvIGhhdmUgbXVsdGlwbGUKLSAgICAgICAgLy8gY29udGVtcG9yYW5lb3VzIGxv
dy1sZXZlbCByZXByZXNlbnRhdGlvbnMuIFNvLCB0aGlzIGdpdmVzIGNoaWxkMSBhIGRvdWJsZQot
ICAgICAgICAvLyByZXByZXNlbnRhdGlvbiBhbmQgdGhlbiBmb3J3YXJkcyB0aGF0IHJlcHJlc2Vu
dGF0aW9uIHRvIG1fbm9kZS4KLSAgICAgICAgCi0gICAgICAgIHNldERvdWJsZShsb3dEb3VibGUo
bV9ub2RlLT5jaGlsZDEoKSkpOwotICAgIH0KLSAgICAKLSAgICB2b2lkIGNvbXBpbGVDaGVja1N0
cnVjdHVyZSgpCi0gICAgewotICAgICAgICBMVmFsdWUgY2VsbCA9IGxvd0NlbGwobV9ub2RlLT5j
aGlsZDEoKSk7Ci0gICAgICAgIAotICAgICAgICBFeGl0S2luZCBleGl0S2luZDsKLSAgICAgICAg
aWYgKG1fbm9kZS0+Y2hpbGQxKCktPm9wKCkgPT0gV2Vha0pTQ29uc3RhbnQpCi0gICAgICAgICAg
ICBleGl0S2luZCA9IEJhZFdlYWtDb25zdGFudENhY2hlOwotICAgICAgICBlbHNlCi0gICAgICAg
ICAgICBleGl0S2luZCA9IEJhZENhY2hlOwotICAgICAgICAKLSAgICAgICAgTFZhbHVlIHN0cnVj
dHVyZSA9IG1fb3V0LmxvYWRQdHIoY2VsbCwgbV9oZWFwcy5KU0NlbGxfc3RydWN0dXJlKTsKLSAg
ICAgICAgCi0gICAgICAgIGlmIChtX25vZGUtPnN0cnVjdHVyZVNldCgpLnNpemUoKSA9PSAxKSB7
Ci0gICAgICAgICAgICBzcGVjdWxhdGUoCi0gICAgICAgICAgICAgICAgZXhpdEtpbmQsIGpzVmFs
dWVWYWx1ZShjZWxsKSwgMCwKLSAgICAgICAgICAgICAgICBtX291dC5ub3RFcXVhbChzdHJ1Y3R1
cmUsIHdlYWtQb2ludGVyKG1fbm9kZS0+c3RydWN0dXJlU2V0KClbMF0pKSk7Ci0gICAgICAgICAg
ICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIExCYXNpY0Jsb2NrIGNvbnRp
bnVhdGlvbiA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiQ2hlY2tTdHJ1Y3R1cmUgY29udGludWF0
aW9uIikpOwotICAgICAgICAKLSAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291dC5p
bnNlcnROZXdCbG9ja3NCZWZvcmUoY29udGludWF0aW9uKTsKLSAgICAgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IG1fbm9kZS0+c3RydWN0dXJlU2V0KCkuc2l6ZSgpIC0gMTsgKytpKSB7Ci0g
ICAgICAgICAgICBMQmFzaWNCbG9jayBuZXh0U3RydWN0dXJlID0gRlRMX05FV19CTE9DSyhtX291
dCwgKCJDaGVja1N0cnVjdHVyZSBuZXh0U3RydWN0dXJlIikpOwotICAgICAgICAgICAgbV9vdXQu
YnJhbmNoKAotICAgICAgICAgICAgICAgIG1fb3V0LmVxdWFsKHN0cnVjdHVyZSwgd2Vha1BvaW50
ZXIobV9ub2RlLT5zdHJ1Y3R1cmVTZXQoKVtpXSkpLAotICAgICAgICAgICAgICAgIGNvbnRpbnVh
dGlvbiwgbmV4dFN0cnVjdHVyZSk7Ci0gICAgICAgICAgICBtX291dC5hcHBlbmRUbyhuZXh0U3Ry
dWN0dXJlKTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgc3BlY3VsYXRlKAotICAgICAg
ICAgICAgZXhpdEtpbmQsIGpzVmFsdWVWYWx1ZShjZWxsKSwgMCwKLSAgICAgICAgICAgIG1fb3V0
Lm5vdEVxdWFsKHN0cnVjdHVyZSwgd2Vha1BvaW50ZXIobV9ub2RlLT5zdHJ1Y3R1cmVTZXQoKS5s
YXN0KCkpKSk7Ci0gICAgICAgIAotICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7Ci0g
ICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOwotICAgIH0KLSAg
ICAKLSAgICB2b2lkIGNvbXBpbGVTdHJ1Y3R1cmVUcmFuc2l0aW9uV2F0Y2hwb2ludCgpCi0gICAg
ewotICAgICAgICBhZGRXZWFrUmVmZXJlbmNlKG1fbm9kZS0+c3RydWN0dXJlKCkpOwotICAgICAg
ICAKLSAgICAgICAgLy8gRklYTUU6IEltcGxlbWVudCBzdHJ1Y3R1cmUgdHJhbnNpdGlvbiB3YXRj
aHBvaW50cy4KLSAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTExMzY0NwotICAgICAgICAKLSAgICAgICAgc3BlY3VsYXRlQ2VsbChtX25vZGUtPmNoaWxk
MSgpKTsKLSAgICB9Ci0gICAgCi0gICAgdm9pZCBjb21waWxlQXJyYXlpZnlUb1N0cnVjdHVyZSgp
Ci0gICAgewotICAgICAgICBMVmFsdWUgY2VsbCA9IGxvd0NlbGwobV9ub2RlLT5jaGlsZDEoKSk7
Ci0gICAgICAgIExWYWx1ZSBwcm9wZXJ0eSA9ICEhbV9ub2RlLT5jaGlsZDIoKSA/IGxvd0ludDMy
KG1fbm9kZS0+Y2hpbGQyKCkpIDogMDsKLSAgICAgICAgCi0gICAgICAgIExCYXNpY0Jsb2NrIHVu
ZXhwZWN0ZWRTdHJ1Y3R1cmUgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIkFycmF5aWZ5VG9TdHJ1
Y3R1cmUgdW5leHBlY3RlZCBzdHJ1Y3R1cmUiKSk7Ci0gICAgICAgIExCYXNpY0Jsb2NrIGNvbnRp
bnVhdGlvbiA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiQXJyYXlpZnlUb1N0cnVjdHVyZSBjb250
aW51YXRpb24iKSk7Ci0gICAgICAgIAotICAgICAgICBMVmFsdWUgc3RydWN0dXJlID0gbV9vdXQu
bG9hZFB0cihjZWxsLCBtX2hlYXBzLkpTQ2VsbF9zdHJ1Y3R1cmUpOwotICAgICAgICAKLSAgICAg
ICAgbV9vdXQuYnJhbmNoKAotICAgICAgICAgICAgbV9vdXQubm90RXF1YWwoc3RydWN0dXJlLCB3
ZWFrUG9pbnRlcihtX25vZGUtPnN0cnVjdHVyZSgpKSksCi0gICAgICAgICAgICB1bmV4cGVjdGVk
U3RydWN0dXJlLCBjb250aW51YXRpb24pOwotICAgICAgICAKLSAgICAgICAgTEJhc2ljQmxvY2sg
bGFzdE5leHQgPSBtX291dC5hcHBlbmRUbyh1bmV4cGVjdGVkU3RydWN0dXJlLCBjb250aW51YXRp
b24pOwotICAgICAgICAKLSAgICAgICAgaWYgKHByb3BlcnR5KSB7Ci0gICAgICAgICAgICBzd2l0
Y2ggKG1fbm9kZS0+YXJyYXlNb2RlKCkudHlwZSgpKSB7Ci0gICAgICAgICAgICBjYXNlIEFycmF5
OjpJbnQzMjoKLSAgICAgICAgICAgIGNhc2UgQXJyYXk6OkRvdWJsZToKLSAgICAgICAgICAgIGNh
c2UgQXJyYXk6OkNvbnRpZ3VvdXM6Ci0gICAgICAgICAgICAgICAgc3BlY3VsYXRlKAotICAgICAg
ICAgICAgICAgICAgICBVbmNvdW50YWJsZSwgbm9WYWx1ZSgpLCAwLAotICAgICAgICAgICAgICAg
ICAgICBtX291dC5hYm92ZU9yRXF1YWwocHJvcGVydHksIG1fb3V0LmNvbnN0SW50MzIoTUlOX1NQ
QVJTRV9BUlJBWV9JTkRFWCkpKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg
IGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAg
IH0KLSAgICAgICAgCi0gICAgICAgIHN3aXRjaCAobV9ub2RlLT5hcnJheU1vZGUoKS50eXBlKCkp
IHsKLSAgICAgICAgY2FzZSBBcnJheTo6SW50MzI6Ci0gICAgICAgICAgICB2bUNhbGwobV9vdXQu
b3BlcmF0aW9uKG9wZXJhdGlvbkVuc3VyZUludDMyKSwgbV9jYWxsRnJhbWUsIGNlbGwpOwotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQXJyYXk6OkRvdWJsZToKLSAgICAgICAgICAg
IHZtQ2FsbChtX291dC5vcGVyYXRpb24ob3BlcmF0aW9uRW5zdXJlRG91YmxlKSwgbV9jYWxsRnJh
bWUsIGNlbGwpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQXJyYXk6OkNvbnRp
Z3VvdXM6Ci0gICAgICAgICAgICBpZiAobV9ub2RlLT5hcnJheU1vZGUoKS5jb252ZXJzaW9uKCkg
PT0gQXJyYXk6OlJhZ2VDb252ZXJ0KQotICAgICAgICAgICAgICAgIHZtQ2FsbChtX291dC5vcGVy
YXRpb24ob3BlcmF0aW9uUmFnZUVuc3VyZUNvbnRpZ3VvdXMpLCBtX2NhbGxGcmFtZSwgY2VsbCk7
Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgdm1DYWxsKG1fb3V0Lm9wZXJhdGlv
bihvcGVyYXRpb25FbnN1cmVDb250aWd1b3VzKSwgbV9jYWxsRnJhbWUsIGNlbGwpOwotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQXJyYXk6OkFycmF5U3RvcmFnZToKLSAgICAgICAg
Y2FzZSBBcnJheTo6U2xvd1B1dEFycmF5U3RvcmFnZToKLSAgICAgICAgICAgIHZtQ2FsbChtX291
dC5vcGVyYXRpb24ob3BlcmF0aW9uRW5zdXJlQXJyYXlTdG9yYWdlKSwgbV9jYWxsRnJhbWUsIGNl
bGwpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBS
RUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
IH0KLSAgICAgICAgCi0gICAgICAgIHN0cnVjdHVyZSA9IG1fb3V0LmxvYWRQdHIoY2VsbCwgbV9o
ZWFwcy5KU0NlbGxfc3RydWN0dXJlKTsKLSAgICAgICAgc3BlY3VsYXRlKAotICAgICAgICAgICAg
QmFkSW5kZXhpbmdUeXBlLCBqc1ZhbHVlVmFsdWUoY2VsbCksIDAsCi0gICAgICAgICAgICBtX291
dC5ub3RFcXVhbChzdHJ1Y3R1cmUsIHdlYWtQb2ludGVyKG1fbm9kZS0+c3RydWN0dXJlKCkpKSk7
Ci0gICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKLSAgICAgICAgCi0gICAgICAgIG1f
b3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOwotICAgIH0KLSAgICAKLSAgICB2
b2lkIGNvbXBpbGVQdXRTdHJ1Y3R1cmUoKQotICAgIHsKLSAgICAgICAgbV9mdGxTdGF0ZS5qaXRD
b2RlLT5jb21tb24ubm90aWZ5Q29tcGlsaW5nU3RydWN0dXJlVHJhbnNpdGlvbihtX2dyYXBoLm1f
cGxhbiwgY29kZUJsb2NrKCksIG1fbm9kZSk7Ci0gICAgICAgIAotICAgICAgICBtX291dC5zdG9y
ZTY0KAotICAgICAgICAgICAgbV9vdXQuY29uc3RJbnRQdHIobV9ub2RlLT5zdHJ1Y3R1cmVUcmFu
c2l0aW9uRGF0YSgpLm5ld1N0cnVjdHVyZSksCi0gICAgICAgICAgICBsb3dDZWxsKG1fbm9kZS0+
Y2hpbGQxKCkpLCBtX2hlYXBzLkpTQ2VsbF9zdHJ1Y3R1cmUpOwotICAgIH0KLSAgICAKLSAgICB2
b2lkIGNvbXBpbGVQaGFudG9tUHV0U3RydWN0dXJlKCkKLSAgICB7Ci0gICAgICAgIG1fZnRsU3Rh
dGUuaml0Q29kZS0+Y29tbW9uLm5vdGlmeUNvbXBpbGluZ1N0cnVjdHVyZVRyYW5zaXRpb24obV9n
cmFwaC5tX3BsYW4sIGNvZGVCbG9jaygpLCBtX25vZGUpOwotICAgIH0KLSAgICAKLSAgICB2b2lk
IGNvbXBpbGVHZXRCeUlkKCkKLSAgICB7Ci0gICAgICAgIExWYWx1ZSBiYXNlID0gMDsKLQotICAg
ICAgICBzd2l0Y2ggKG1fbm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpKSB7Ci0gICAgICAgIGNhc2Ug
Q2VsbFVzZToKLSAgICAgICAgICAgIGJhc2UgPSBsb3dDZWxsKG1fbm9kZS0+Y2hpbGQxKCkpOwot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgVW50eXBlZFVzZToKLSAgICAgICAgICAg
IGJhc2UgPSBsb3dKU1ZhbHVlKG1fbm9kZS0+Y2hpbGQxKCkpOwotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hF
RCgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIFN0
cmluZ0ltcGwqIHVpZCA9IG1fZ3JhcGguaWRlbnRpZmllcnMoKVttX25vZGUtPmlkZW50aWZpZXJO
dW1iZXIoKV07Ci0gICAgICAgIHNldEpTVmFsdWUodm1DYWxsKG1fb3V0Lm9wZXJhdGlvbihvcGVy
YXRpb25HZXRCeUlkKSwgbV9jYWxsRnJhbWUsIG1fb3V0LmludFB0clplcm8sIGJhc2UsIG1fb3V0
LmNvbnN0SW50UHRyKHVpZCkpKTsKKyAgICAgICAgIGNhc2UgTG9vcEhpbnQ6CisgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICBjYXNlIEFyaXRoQWRkOgorICAgICAgICAgY2FzZSBWYWx1ZUFk
ZDoKKyAgICAgICAgICAgICBjb21waWxlQWRkU3ViKCk7CisgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICBjYXNlIEFyaXRoU3ViOgorICAgICAgICAgICAgIGNvbXBpbGVBZGRTdWIoKTsKKyAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgIGNhc2UgQXJpdGhNdWw6CisgICAgICAgICAgICAg
Y29tcGlsZUFyaXRoTXVsKCk7CisgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICBjYXNlIEFy
aXRoRGl2OgorICAgICAgICAgICAgIGNvbXBpbGVBcml0aERpdk1vZCgpOworICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgY2FzZSBBcml0aE1vZDoKKyAgICAgICAgICAgICBjb21waWxlQXJp
dGhEaXZNb2QoKTsKKyAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgIGNhc2UgQXJpdGhNaW46
CisgICAgICAgICBjYXNlIEFyaXRoTWF4OgorICAgICAgICAgICAgIGNvbXBpbGVBcml0aE1pbk9y
TWF4KCk7CisgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICBjYXNlIEFyaXRoQWJzOgorICAg
ICAgICAgICAgIGNvbXBpbGVBcml0aEFicygpOworICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgY2FzZSBBcml0aE5lZ2F0ZToKKyAgICAgICAgICAgICBjb21waWxlQXJpdGhOZWdhdGUoKTsK
KyAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgIGNhc2UgQml0QW5kOgorICAgICAgICAgICAg
IGNvbXBpbGVCaXRBbmQoKTsKKyAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgIGNhc2UgQml0
T3I6CisgICAgICAgICAgICAgY29tcGlsZUJpdE9yKCk7CisgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICBjYXNlIEJpdFhvcjoKKyAgICAgICAgICAgICBjb21waWxlQml0WG9yKCk7CisgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICBjYXNlIEJpdFJTaGlmdDoKKyAgICAgICAgICAgICBj
b21waWxlQml0UlNoaWZ0KCk7CisgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICBjYXNlIEJp
dExTaGlmdDoKKyAgICAgICAgICAgICBjb21waWxlQml0TFNoaWZ0KCk7CisgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICBjYXNlIEJpdFVSU2hpZnQ6CisgICAgICAgICAgICAgY29tcGlsZUJp
dFVSU2hpZnQoKTsKKyAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgIGNhc2UgVUludDMyVG9O
dW1iZXI6CisgICAgICAgICAgICAgY29tcGlsZVVJbnQzMlRvTnVtYmVyKCk7CisgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICBjYXNlIEludDMyVG9Eb3VibGU6CisgICAgICAgICAgICAgY29t
cGlsZUludDMyVG9Eb3VibGUoKTsKKyAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgIGNhc2Ug
Q2hlY2tTdHJ1Y3R1cmU6CisgICAgICAgICAgICAgY29tcGlsZUNoZWNrU3RydWN0dXJlKCk7Cisg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICBjYXNlIFN0cnVjdHVyZVRyYW5zaXRpb25XYXRj
aHBvaW50OgorICAgICAgICAgICAgIGNvbXBpbGVTdHJ1Y3R1cmVUcmFuc2l0aW9uV2F0Y2hwb2lu
dCgpOworICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgY2FzZSBBcnJheWlmeVRvU3RydWN0
dXJlOgorICAgICAgICAgICAgIGNvbXBpbGVBcnJheWlmeVRvU3RydWN0dXJlKCk7CisgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICBjYXNlIFB1dFN0cnVjdHVyZToKKyAgICAgICAgICAgICBj
b21waWxlUHV0U3RydWN0dXJlKCk7CisgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICBjYXNl
IFBoYW50b21QdXRTdHJ1Y3R1cmU6CisgICAgICAgICAgICAgY29tcGlsZVBoYW50b21QdXRTdHJ1
Y3R1cmUoKTsKKyAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgIGNhc2UgR2V0QnlJZDoKKyAg
ICAgICAgICAgICBjb21waWxlR2V0QnlJZCgpOworICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgY2FzZSBHZXRCdXR0ZXJmbHk6CisgICAgICAgICAgICAgY29tcGlsZUdldEJ1dHRlcmZseSgp
OworICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgY2FzZSBHZXRJbmRleGVkUHJvcGVydHlT
dG9yYWdlOgorICAgICAgICAgICAgIGNvbXBpbGVHZXRJbmRleGVkUHJvcGVydHlTdG9yYWdlKCk7
CisgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICBjYXNlIENoZWNrQXJyYXk6CisgICAgICAg
ICAgICAgY29tcGlsZUNoZWNrQXJyYXkoKTsKKyAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
IGNhc2UgR2V0QXJyYXlMZW5ndGg6CisgICAgICAgICAgICAgY29tcGlsZUdldEFycmF5TGVuZ3Ro
KCk7CisgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICBjYXNlIEdldEJ5VmFsOgorICAgICAg
ICAgICAgIGNvbXBpbGVHZXRCeVZhbCgpOworICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
Y2FzZSBQdXRCeVZhbDoKKyAgICAgICAgIGNhc2UgUHV0QnlWYWxBbGlhczoKKyAgICAgICAgICAg
ICBjb21waWxlUHV0QnlWYWwoKTsKKyAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgIGNhc2Ug
R2V0QnlPZmZzZXQ6CisgICAgICAgICAgICAgY29tcGlsZUdldEJ5T2Zmc2V0KCk7CisgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICBjYXNlIFB1dEJ5T2Zmc2V0OgorICAgICAgICAgICAgIGNv
bXBpbGVQdXRCeU9mZnNldCgpOworICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgY2FzZSBH
ZXRHbG9iYWxWYXI6CisgICAgICAgICAgICAgY29tcGlsZUdldEdsb2JhbFZhcigpOworICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgY2FzZSBQdXRHbG9iYWxWYXI6CisgICAgICAgICAgICAg
Y29tcGlsZVB1dEdsb2JhbFZhcigpOworICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgY2Fz
ZSBHbG9iYWxWYXJXYXRjaHBvaW50OgorICAgICAgICAgICAgIGNvbXBpbGVHbG9iYWxWYXJXYXRj
aHBvaW50KCk7CisgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICBjYXNlIEdldE15U2NvcGU6
CisgICAgICAgICAgICAgY29tcGlsZUdldE15U2NvcGUoKTsKKyAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgIGNhc2UgU2tpcFNjb3BlOgorICAgICAgICAgICAgIGNvbXBpbGVTa2lwU2NvcGUo
KTsKKyAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgIGNhc2UgR2V0Q2xvc3VyZVJlZ2lzdGVy
czoKKyAgICAgICAgICAgICBjb21waWxlR2V0Q2xvc3VyZVJlZ2lzdGVycygpOworICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgY2FzZSBHZXRDbG9zdXJlVmFyOgorICAgICAgICAgICAgIGNv
bXBpbGVHZXRDbG9zdXJlVmFyKCk7CisgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICBjYXNl
IFB1dENsb3N1cmVWYXI6CisgICAgICAgICAgICAgY29tcGlsZVB1dENsb3N1cmVWYXIoKTsKKyAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgIGNhc2UgQ29tcGFyZUVxOgorICAgICAgICAgICAg
IGNvbXBpbGVDb21wYXJlRXEoKTsKKyAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgIGNhc2Ug
Q29tcGFyZUVxQ29uc3RhbnQ6CisgICAgICAgICAgICAgY29tcGlsZUNvbXBhcmVFcUNvbnN0YW50
KCk7CisgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICBjYXNlIENvbXBhcmVTdHJpY3RFcToK
KyAgICAgICAgICAgICBjb21waWxlQ29tcGFyZVN0cmljdEVxKCk7CisgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICBjYXNlIENvbXBhcmVTdHJpY3RFcUNvbnN0YW50OgorICAgICAgICAgICAg
IGNvbXBpbGVDb21wYXJlU3RyaWN0RXFDb25zdGFudCgpOworICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgY2FzZSBDb21wYXJlTGVzczoKKyAgICAgICAgICAgICBjb21waWxlQ29tcGFyZUxl
c3MoKTsKKyAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgIGNhc2UgQ29tcGFyZUxlc3NFcToK
KyAgICAgICAgICAgICBjb21waWxlQ29tcGFyZUxlc3NFcSgpOworICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgY2FzZSBDb21wYXJlR3JlYXRlcjoKKyAgICAgICAgICAgICBjb21waWxlQ29t
cGFyZUdyZWF0ZXIoKTsKKyAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgIGNhc2UgQ29tcGFy
ZUdyZWF0ZXJFcToKKyAgICAgICAgICAgICBjb21waWxlQ29tcGFyZUdyZWF0ZXJFcSgpOworICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgY2FzZSBMb2dpY2FsTm90OgorICAgICAgICAgICAg
IGNvbXBpbGVMb2dpY2FsTm90KCk7CisgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICBjYXNl
IENhbGw6CisgICAgICAgICBjYXNlIENvbnN0cnVjdDoKKyAgICAgICAgICAgICBjb21waWxlQ2Fs
bE9yQ29uc3RydWN0KCk7CisgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICBjYXNlIEp1bXA6
CisgICAgICAgICAgICAgY29tcGlsZUp1bXAoKTsKKyAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgIGNhc2UgQnJhbmNoOgorICAgICAgICAgICAgIGNvbXBpbGVCcmFuY2goKTsKKyAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgIGNhc2UgU3dpdGNoOgorICAgICAgICAgICAgIGNvbXBpbGVT
d2l0Y2goKTsKKyAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgIGNhc2UgUmV0dXJuOgorICAg
ICAgICAgICAgIGNvbXBpbGVSZXR1cm4oKTsKKyAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
IGNhc2UgRm9yY2VPU1JFeGl0OgorICAgICAgICAgICAgIGNvbXBpbGVGb3JjZU9TUkV4aXQoKTsK
KyAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgIGNhc2UgVmFsdWVUb0ludDMyOgorICAgICAg
ICAgICAgIGNvbXBpbGVWYWx1ZVRvSW50MzIoKTsKKyAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgIGNhc2UgSW50NTJUb1ZhbHVlOgorICAgICAgICAgICAgIGNvbXBpbGVJbnQ1MlRvVmFsdWUo
KTsKKyAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAg
UkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgIH0KKworICAgICAgICAgaWYgKG1fbm9kZS0+c2hvdWxkR2VuZXJhdGUoKSkKKyAgICAgICAg
ICAgICBERkdfTk9ERV9ET19UT19DSElMRFJFTihtX2dyYXBoLCBtX25vZGUsIHVzZSk7CisKKyAg
ICAgICAgIGlmIChtX25vZGUtPmFkanVzdGVkUmVmQ291bnQoKSkKKyAgICAgICAgICAgICBtX2xp
dmUuYWRkKG1fbm9kZSk7CisKKyAgICAgICAgIGlmIChzaG91bGRFeGVjdXRlRWZmZWN0cykKKyAg
ICAgICAgICAgICBtX2ludGVycHJldGVyLmV4ZWN1dGVFZmZlY3RzKG5vZGVJbmRleCk7CisKKyAg
ICAgICAgIHJldHVybiB0cnVlOworICAgICB9CisKKyAgICAgdm9pZCBjb21waWxlVmFsdWVUb0lu
dDMyKCkKKyAgICAgeworICAgICAgICAgQVNTRVJUKG1fbm9kZS0+Y2hpbGQxKCkudXNlS2luZCgp
ID09IEJvb2xlYW5Vc2UpOworICAgICAgICAgc2V0SW50MzIobV9vdXQuemVyb0V4dChsb3dCb29s
ZWFuKG1fbm9kZS0+Y2hpbGQxKCkpLCBtX291dC5pbnQzMikpOworICAgICB9CisKKyAgICAgdm9p
ZCBjb21waWxlSW50NTJUb1ZhbHVlKCkKKyAgICAgeworICAgICAgICAgc2V0SlNWYWx1ZShsb3dK
U1ZhbHVlKG1fbm9kZS0+Y2hpbGQxKCkpKTsKKyAgICAgfQorCisgICAgIHZvaWQgY29tcGlsZVVw
c2lsb24oKQorICAgICB7CisgICAgICAgICBMVmFsdWUgZGVzdGluYXRpb24gPSBtX3BoaXMuZ2V0
KG1fbm9kZS0+cGhpKCkpOworCisgICAgICAgICBzd2l0Y2ggKG1fbm9kZS0+Y2hpbGQxKCkudXNl
S2luZCgpKSB7CisgICAgICAgICBjYXNlIE51bWJlclVzZToKKyAgICAgICAgICAgICBtX291dC5z
ZXQobG93RG91YmxlKG1fbm9kZS0+Y2hpbGQxKCkpLCBkZXN0aW5hdGlvbik7CisgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICBjYXNlIEludDMyVXNlOgorICAgICAgICAgICAgIG1fb3V0LnNl
dChsb3dJbnQzMihtX25vZGUtPmNoaWxkMSgpKSwgZGVzdGluYXRpb24pOworICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgY2FzZSBNYWNoaW5lSW50VXNlOgorICAgICAgICAgICAgIG1fb3V0
LnNldChsb3dJbnQ1MihtX25vZGUtPmNoaWxkMSgpKSwgZGVzdGluYXRpb24pOworICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgY2FzZSBCb29sZWFuVXNlOgorICAgICAgICAgICAgIG1fb3V0
LnNldChsb3dCb29sZWFuKG1fbm9kZS0+Y2hpbGQxKCkpLCBkZXN0aW5hdGlvbik7CisgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICBjYXNlIENlbGxVc2U6CisgICAgICAgICAgICAgbV9vdXQu
c2V0KGxvd0NlbGwobV9ub2RlLT5jaGlsZDEoKSksIGRlc3RpbmF0aW9uKTsKKyAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgIGNhc2UgVW50eXBlZFVzZToKKyAgICAgICAgICAgICBtX291dC5z
ZXQobG93SlNWYWx1ZShtX25vZGUtPmNoaWxkMSgpKSwgZGVzdGluYXRpb24pOworICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICBSRUxFQVNFX0FTU0VS
VF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgfQorICAgICB9
CisKKyAgICAgdm9pZCBjb21waWxlUGhpKCkKKyAgICAgeworICAgICAgICAgTFZhbHVlIHNvdXJj
ZSA9IG1fcGhpcy5nZXQobV9ub2RlKTsKKworICAgICAgICAgc3dpdGNoIChtX25vZGUtPmZsYWdz
KCkgJiBOb2RlUmVzdWx0TWFzaykgeworICAgICAgICAgY2FzZSBOb2RlUmVzdWx0TnVtYmVyOgor
ICAgICAgICAgICAgIHNldERvdWJsZShtX291dC5nZXQoc291cmNlKSk7CisgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICBjYXNlIE5vZGVSZXN1bHRJbnQzMjoKKyAgICAgICAgICAgICBzZXRJ
bnQzMihtX291dC5nZXQoc291cmNlKSk7CisgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICBj
YXNlIE5vZGVSZXN1bHRJbnQ1MjoKKyAgICAgICAgICAgICBzZXRJbnQ1MihtX291dC5nZXQoc291
cmNlKSk7CisgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICBjYXNlIE5vZGVSZXN1bHRCb29s
ZWFuOgorICAgICAgICAgICAgIHNldEJvb2xlYW4obV9vdXQuZ2V0KHNvdXJjZSkpOworICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgY2FzZSBOb2RlUmVzdWx0SlM6CisgICAgICAgICAgICAg
c2V0SlNWYWx1ZShtX291dC5nZXQoc291cmNlKSk7CisgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICBkZWZhdWx0OgorICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7
CisgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICB9CisgICAgIH0KKworICAgICB2b2lkIGNv
bXBpbGVKU0NvbnN0YW50KCkKKyAgICAgeworICAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IG1fZ3Jh
cGgudmFsdWVPZkpTQ29uc3RhbnQobV9ub2RlKTsKKyAgICAgICAgIGlmICh2YWx1ZS5pc0RvdWJs
ZSgpKQorICAgICAgICAgICAgIHNldERvdWJsZShtX291dC5jb25zdERvdWJsZSh2YWx1ZS5hc0Rv
dWJsZSgpKSk7CisgICAgICAgICBlbHNlCisgICAgICAgICAgICAgc2V0SlNWYWx1ZShtX291dC5j
b25zdEludDY0KEpTVmFsdWU6OmVuY29kZSh2YWx1ZSkpKTsKKyAgICAgfQorCisgICAgIHZvaWQg
Y29tcGlsZVdlYWtKU0NvbnN0YW50KCkKKyAgICAgeworICAgICAgICAgc2V0SlNWYWx1ZSh3ZWFr
UG9pbnRlcihtX25vZGUtPndlYWtDb25zdGFudCgpKSk7CisgICAgIH0KKworICAgICB2b2lkIGNv
bXBpbGVHZXRBcmd1bWVudCgpCisgICAgIHsKKyAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSog
dmFyaWFibGUgPSBtX25vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpOworICAgICAgICAgVmlydHVh
bFJlZ2lzdGVyIG9wZXJhbmQgPSB2YXJpYWJsZS0+bWFjaGluZUxvY2FsKCk7CisgICAgICAgICBS
RUxFQVNFX0FTU0VSVChvcGVyYW5kLmlzQXJndW1lbnQoKSk7CisKKyAgICAgICAgIExWYWx1ZSBq
c1ZhbHVlID0gbV9vdXQubG9hZDY0KGFkZHJlc3NGb3Iob3BlcmFuZCkpOworCisgICAgICAgICBz
d2l0Y2ggKHVzZUtpbmRGb3IodmFyaWFibGUtPmZsdXNoRm9ybWF0KCkpKSB7CisgICAgICAgICBj
YXNlIEludDMyVXNlOgorICAgICAgICAgICAgIHNwZWN1bGF0ZUJhY2t3YXJkKEJhZFR5cGUsIGpz
VmFsdWVWYWx1ZShqc1ZhbHVlKSwgbV9ub2RlLCBpc05vdEludDMyKGpzVmFsdWUpKTsKKyAgICAg
ICAgICAgICBzZXRJbnQzMih1bmJveEludDMyKGpzVmFsdWUpKTsKKyAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgIGNhc2UgQ2VsbFVzZToKKyAgICAgICAgICAgICBzcGVjdWxhdGVCYWNrd2Fy
ZChCYWRUeXBlLCBqc1ZhbHVlVmFsdWUoanNWYWx1ZSksIG1fbm9kZSwgaXNOb3RDZWxsKGpzVmFs
dWUpKTsKKyAgICAgICAgICAgICBzZXRKU1ZhbHVlKGpzVmFsdWUpOworICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgY2FzZSBCb29sZWFuVXNlOgorICAgICAgICAgICAgIHNwZWN1bGF0ZUJh
Y2t3YXJkKEJhZFR5cGUsIGpzVmFsdWVWYWx1ZShqc1ZhbHVlKSwgbV9ub2RlLCBpc05vdEJvb2xl
YW4oanNWYWx1ZSkpOworICAgICAgICAgICAgIHNldEJvb2xlYW4odW5ib3hCb29sZWFuKGpzVmFs
dWUpKTsKKyAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgIGNhc2UgVW50eXBlZFVzZToKKyAg
ICAgICAgICAgICBzZXRKU1ZhbHVlKGpzVmFsdWUpOworICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgp
OworICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgfQorICAgICB9CisKKyAgICAgdm9pZCBj
b21waWxlRXh0cmFjdE9TUkVudHJ5TG9jYWwoKQorICAgICB7CisgICAgICAgICBFbmNvZGVkSlNW
YWx1ZSogYnVmZmVyID0gc3RhdGljX2Nhc3Q8RW5jb2RlZEpTVmFsdWUqPigKKyAgICAgICAgICAg
ICBtX2Z0bFN0YXRlLmppdENvZGUtPmZ0bEZvck9TUkVudHJ5KCktPmVudHJ5QnVmZmVyKCktPmRh
dGFCdWZmZXIoKSk7CisgICAgICAgICBzZXRKU1ZhbHVlKG1fb3V0LmxvYWQ2NChtX291dC5hYnNv
bHV0ZShidWZmZXIgKyBtX25vZGUtPnVubGlua2VkTG9jYWwoKS50b0xvY2FsKCkpKSk7CisgICAg
IH0KKworICAgICB2b2lkIGNvbXBpbGVHZXRMb2NhbCgpCisgICAgIHsKKyAgICAgICAgIC8vIEdl
dExvY2FscyBhcmlzZSBvbmx5IGZvciBjYXB0dXJlZCB2YXJpYWJsZXMuCisKKyAgICAgICAgIFZh
cmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGUgPSBtX25vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgp
OworICAgICAgICAgQWJzdHJhY3RWYWx1ZSYgdmFsdWUgPSBtX3N0YXRlLnZhcmlhYmxlcygpLm9w
ZXJhbmQodmFyaWFibGUtPmxvY2FsKCkpOworCisgICAgICAgICBSRUxFQVNFX0FTU0VSVCh2YXJp
YWJsZS0+aXNDYXB0dXJlZCgpKTsKKworICAgICAgICAgaWYgKGlzSW50MzJTcGVjdWxhdGlvbih2
YWx1ZS5tX3R5cGUpKQorICAgICAgICAgICAgIHNldEludDMyKG1fb3V0LmxvYWQzMihwYXlsb2Fk
Rm9yKHZhcmlhYmxlLT5tYWNoaW5lTG9jYWwoKSkpKTsKKyAgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgICBzZXRKU1ZhbHVlKG1fb3V0LmxvYWQ2NChhZGRyZXNzRm9yKHZhcmlhYmxlLT5tYWNoaW5l
TG9jYWwoKSkpKTsKKyAgICAgfQorCisgICAgIHZvaWQgY29tcGlsZVNldExvY2FsKCkKKyAgICAg
eworICAgICAgICAgb2JzZXJ2ZU1vdkhpbnQobV9ub2RlKTsKKworICAgICAgICAgVmFyaWFibGVB
Y2Nlc3NEYXRhKiB2YXJpYWJsZSA9IG1fbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCk7CisgICAg
ICAgICBzd2l0Y2ggKHZhcmlhYmxlLT5mbHVzaEZvcm1hdCgpKSB7CisgICAgICAgICBjYXNlIEZs
dXNoZWRKU1ZhbHVlOiB7CisgICAgICAgICAgICAgTFZhbHVlIHZhbHVlID0gbG93SlNWYWx1ZSht
X25vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgICAgICBtX291dC5zdG9yZTY0KHZhbHVlLCBhZGRy
ZXNzRm9yKHZhcmlhYmxlLT5tYWNoaW5lTG9jYWwoKSkpOworICAgICAgICAgICAgIG1fdmFsdWVT
b3VyY2VzLm9wZXJhbmQodmFyaWFibGUtPmxvY2FsKCkpID0gVmFsdWVTb3VyY2UoVmFsdWVJbkpT
U3RhY2ssIHZhcmlhYmxlLT5tYWNoaW5lTG9jYWwoKSk7CisgICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICAgfQorCisgICAgICAgICBjYXNlIEZsdXNoZWREb3VibGU6IHsKKyAgICAgICAgICAg
ICBMVmFsdWUgdmFsdWUgPSBsb3dEb3VibGUobV9ub2RlLT5jaGlsZDEoKSk7CisgICAgICAgICAg
ICAgbV9vdXQuc3RvcmVEb3VibGUodmFsdWUsIGFkZHJlc3NGb3IodmFyaWFibGUtPm1hY2hpbmVM
b2NhbCgpKSk7CisgICAgICAgICAgICAgbV92YWx1ZVNvdXJjZXMub3BlcmFuZCh2YXJpYWJsZS0+
bG9jYWwoKSkgPSBWYWx1ZVNvdXJjZShEb3VibGVJbkpTU3RhY2ssIHZhcmlhYmxlLT5tYWNoaW5l
TG9jYWwoKSk7CisgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgfQorCisgICAgICAgICBj
YXNlIEZsdXNoZWRJbnQzMjogeworICAgICAgICAgICAgIExWYWx1ZSB2YWx1ZSA9IGxvd0ludDMy
KG1fbm9kZS0+Y2hpbGQxKCkpOworICAgICAgICAgICAgIG1fb3V0LnN0b3JlMzIodmFsdWUsIHBh
eWxvYWRGb3IodmFyaWFibGUtPm1hY2hpbmVMb2NhbCgpKSk7CisgICAgICAgICAgICAgbV92YWx1
ZVNvdXJjZXMub3BlcmFuZCh2YXJpYWJsZS0+bG9jYWwoKSkgPSBWYWx1ZVNvdXJjZShJbnQzMklu
SlNTdGFjaywgdmFyaWFibGUtPm1hY2hpbmVMb2NhbCgpKTsKKyAgICAgICAgICAgICByZXR1cm47
CisgICAgICAgICB9CisKKyAgICAgICAgIGNhc2UgRmx1c2hlZEludDUyOiB7CisgICAgICAgICAg
ICAgTFZhbHVlIHZhbHVlID0gbG93SW50NTIobV9ub2RlLT5jaGlsZDEoKSk7CisgICAgICAgICAg
ICAgbV9vdXQuc3RvcmU2NCh2YWx1ZSwgYWRkcmVzc0Zvcih2YXJpYWJsZS0+bWFjaGluZUxvY2Fs
KCkpKTsKKyAgICAgICAgICAgICBtX3ZhbHVlU291cmNlcy5vcGVyYW5kKHZhcmlhYmxlLT5sb2Nh
bCgpKSA9IFZhbHVlU291cmNlKEludDUySW5KU1N0YWNrLCB2YXJpYWJsZS0+bWFjaGluZUxvY2Fs
KCkpOworICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgIH0KKworICAgICAgICAgY2FzZSBG
bHVzaGVkQ2VsbDogeworICAgICAgICAgICAgIExWYWx1ZSB2YWx1ZSA9IGxvd0NlbGwobV9ub2Rl
LT5jaGlsZDEoKSk7CisgICAgICAgICAgICAgbV9vdXQuc3RvcmU2NCh2YWx1ZSwgYWRkcmVzc0Zv
cih2YXJpYWJsZS0+bWFjaGluZUxvY2FsKCkpKTsKKyAgICAgICAgICAgICBtX3ZhbHVlU291cmNl
cy5vcGVyYW5kKHZhcmlhYmxlLT5sb2NhbCgpKSA9IFZhbHVlU291cmNlKFZhbHVlSW5KU1N0YWNr
LCB2YXJpYWJsZS0+bWFjaGluZUxvY2FsKCkpOworICAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgIH0KKworICAgICAgICAgY2FzZSBGbHVzaGVkQm9vbGVhbjogeworICAgICAgICAgICAgIHNw
ZWN1bGF0ZUJvb2xlYW4obV9ub2RlLT5jaGlsZDEoKSk7CisgICAgICAgICAgICAgbV9vdXQuc3Rv
cmU2NCgKKyAgICAgICAgICAgICAgICAgbG93SlNWYWx1ZShtX25vZGUtPmNoaWxkMSgpLCBNYW51
YWxPcGVyYW5kU3BlY3VsYXRpb24pLAorICAgICAgICAgICAgICAgICBhZGRyZXNzRm9yKHZhcmlh
YmxlLT5tYWNoaW5lTG9jYWwoKSkpOworICAgICAgICAgICAgIG1fdmFsdWVTb3VyY2VzLm9wZXJh
bmQodmFyaWFibGUtPmxvY2FsKCkpID0gVmFsdWVTb3VyY2UoVmFsdWVJbkpTU3RhY2ssIHZhcmlh
YmxlLT5tYWNoaW5lTG9jYWwoKSk7CisgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgfQor
CisgICAgICAgICBjYXNlIERlYWRGbHVzaDoKKyAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9O
T1RfUkVBQ0hFRCgpOworICAgICAgICAgfQorCisgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1Rf
UkVBQ0hFRCgpOworICAgICB9CisKKyAgICAgdm9pZCBjb21waWxlTW92SGludCgpCisgICAgIHsK
KyAgICAgICAgIG9ic2VydmVNb3ZIaW50KG1fbm9kZSk7CisgICAgIH0KKworICAgICB2b2lkIGNv
bXBpbGVab21iaWVIaW50KCkKKyAgICAgeworICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiBk
YXRhID0gbV9ub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKKyAgICAgICAgIG1fbGFzdFNldE9w
ZXJhbmQgPSBkYXRhLT5sb2NhbCgpOworICAgICAgICAgbV92YWx1ZVNvdXJjZXMub3BlcmFuZChk
YXRhLT5sb2NhbCgpKSA9IFZhbHVlU291cmNlKFNvdXJjZUlzRGVhZCk7CisgICAgIH0KKworICAg
ICB2b2lkIGNvbXBpbGVNb3ZIaW50QW5kQ2hlY2soKQorICAgICB7CisgICAgICAgICBvYnNlcnZl
TW92SGludChtX25vZGUpOworICAgICAgICAgc3BlY3VsYXRlKG1fbm9kZS0+Y2hpbGQxKCkpOwor
ICAgICB9CisKKyAgICAgdm9pZCBjb21waWxlUGhhbnRvbSgpCisgICAgIHsKKyAgICAgICAgIERG
R19OT0RFX0RPX1RPX0NISUxEUkVOKG1fZ3JhcGgsIG1fbm9kZSwgc3BlY3VsYXRlKTsKKyAgICAg
fQorCisgICAgIHZvaWQgY29tcGlsZUFkZFN1YigpCisgICAgIHsKKyAgICAgICAgIGJvb2wgaXNT
dWIgPSAgbV9ub2RlLT5vcCgpID09IEFyaXRoU3ViOworICAgICAgICAgc3dpdGNoIChtX25vZGUt
PmJpbmFyeVVzZUtpbmQoKSkgeworICAgICAgICAgY2FzZSBJbnQzMlVzZTogeworICAgICAgICAg
ICAgIExWYWx1ZSBsZWZ0ID0gbG93SW50MzIobV9ub2RlLT5jaGlsZDEoKSk7CisgICAgICAgICAg
ICAgTFZhbHVlIHJpZ2h0ID0gbG93SW50MzIobV9ub2RlLT5jaGlsZDIoKSk7CisgICAgICAgICAg
ICAgTFZhbHVlIHJlc3VsdCA9IGlzU3ViID8gbV9vdXQuc3ViKGxlZnQsIHJpZ2h0KSA6IG1fb3V0
LmFkZChsZWZ0LCByaWdodCk7CisKKyAgICAgICAgICAgICBpZiAoYnl0ZWNvZGVDYW5UcnVuY2F0
ZUludGVnZXIobV9ub2RlLT5hcml0aE5vZGVGbGFncygpKSkgeworICAgICAgICAgICAgICAgICBz
ZXRJbnQzMihyZXN1bHQpOworICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgICBMVmFsdWUgb3ZlcmZsb3cgPSBpc1N1YiA/IG1fb3V0LnN1YldpdGhP
dmVyZmxvdzMyKGxlZnQsIHJpZ2h0KSA6IG1fb3V0LmFkZFdpdGhPdmVyZmxvdzMyKGxlZnQsIHJp
Z2h0KTsKKworICAgICAgICAgICAgIHNwZWN1bGF0ZShPdmVyZmxvdywgbm9WYWx1ZSgpLCAwLCBt
X291dC5leHRyYWN0VmFsdWUob3ZlcmZsb3csIDEpKTsKKyAgICAgICAgICAgICBzZXRJbnQzMihy
ZXN1bHQpOworICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgfQorCisgICAgICAgICBjYXNl
IE1hY2hpbmVJbnRVc2U6IHsKKyAgICAgICAgICAgICBpZiAoIW1fc3RhdGUuZm9yTm9kZShtX25v
ZGUtPmNoaWxkMSgpKS5jb3VsZEJlVHlwZShTcGVjSW50NTIpCisgICAgICAgICAgICAgICAgICYm
ICFtX3N0YXRlLmZvck5vZGUobV9ub2RlLT5jaGlsZDIoKSkuY291bGRCZVR5cGUoU3BlY0ludDUy
KSkgeworICAgICAgICAgICAgICAgICBJbnQ1MktpbmQga2luZDsKKyAgICAgICAgICAgICAgICAg
TFZhbHVlIGxlZnQgPSBsb3dXaGljaGV2ZXJJbnQ1MihtX25vZGUtPmNoaWxkMSgpLCBraW5kKTsK
KyAgICAgICAgICAgICAgICAgTFZhbHVlIHJpZ2h0ID0gbG93SW50NTIobV9ub2RlLT5jaGlsZDIo
KSwga2luZCk7CisgICAgICAgICAgICAgICAgIHNldEludDUyKGlzU3ViID8gbV9vdXQuc3ViKGxl
ZnQsIHJpZ2h0KSA6IG1fb3V0LmFkZChsZWZ0LCByaWdodCksIGtpbmQpOworICAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICBMVmFsdWUgbGVmdCA9
IGxvd0ludDUyKG1fbm9kZS0+Y2hpbGQxKCkpOworICAgICAgICAgICAgIExWYWx1ZSByaWdodCA9
IGxvd0ludDUyKG1fbm9kZS0+Y2hpbGQyKCkpOworICAgICAgICAgICAgIExWYWx1ZSByZXN1bHQg
PSBpc1N1YiA/IG1fb3V0LnN1YihsZWZ0LCByaWdodCkgOiBtX291dC5hZGQobGVmdCwgcmlnaHQp
OworCisgICAgICAgICAgICAgTFZhbHVlIG92ZXJmbG93ID0gaXNTdWIgPyBtX291dC5zdWJXaXRo
T3ZlcmZsb3c2NChsZWZ0LCByaWdodCkgOiBtX291dC5hZGRXaXRoT3ZlcmZsb3c2NChsZWZ0LCBy
aWdodCk7CisgICAgICAgICAgICAgc3BlY3VsYXRlKEludDUyT3ZlcmZsb3csIG5vVmFsdWUoKSwg
MCwgbV9vdXQuZXh0cmFjdFZhbHVlKG92ZXJmbG93LCAxKSk7CisgICAgICAgICAgICAgc2V0SW50
NTIocmVzdWx0KTsKKyAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgIH0KKworICAgICAgICAg
Y2FzZSBOdW1iZXJVc2U6IHsKKyAgICAgICAgICAgICBMVmFsdWUgQzEgPSBsb3dEb3VibGUobV9u
b2RlLT5jaGlsZDEoKSk7CisgICAgICAgICAgICAgTFZhbHVlIEMyID0gbG93RG91YmxlKG1fbm9k
ZS0+Y2hpbGQyKCkpOworCisgICAgICAgICAgICAgc2V0RG91YmxlKGlzU3ViID8gbV9vdXQuZG91
YmxlU3ViKEMxLCBDMikgOiBtX291dC5kb3VibGVBZGQoQzEsIEMyKSk7CisgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICB9CisKKyAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgUkVM
RUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
IH0KKyAgICAgfQorCisgICAgIHZvaWQgY29tcGlsZUFyaXRoTXVsKCkKKyAgICAgeworICAgICAg
ICAgc3dpdGNoIChtX25vZGUtPmJpbmFyeVVzZUtpbmQoKSkgeworICAgICAgICAgY2FzZSBJbnQz
MlVzZTogeworICAgICAgICAgICAgIExWYWx1ZSBsZWZ0ID0gbG93SW50MzIobV9ub2RlLT5jaGls
ZDEoKSk7CisgICAgICAgICAgICAgTFZhbHVlIHJpZ2h0ID0gbG93SW50MzIobV9ub2RlLT5jaGls
ZDIoKSk7CisgICAgICAgICAgICAgTFZhbHVlIHJlc3VsdCA9IG1fb3V0Lm11bChsZWZ0LCByaWdo
dCk7CisKKyAgICAgICAgICAgICBpZiAoIWJ5dGVjb2RlQ2FuVHJ1bmNhdGVJbnRlZ2VyKG1fbm9k
ZS0+YXJpdGhOb2RlRmxhZ3MoKSkpIHsKKyAgICAgICAgICAgICAgICAgTFZhbHVlIG92ZXJmbG93
UmVzdWx0ID0gbV9vdXQubXVsV2l0aE92ZXJmbG93MzIobGVmdCwgcmlnaHQpOworICAgICAgICAg
ICAgICAgICBzcGVjdWxhdGUoT3ZlcmZsb3csIG5vVmFsdWUoKSwgMCwgbV9vdXQuZXh0cmFjdFZh
bHVlKG92ZXJmbG93UmVzdWx0LCAxKSk7CisgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAg
aWYgKCFieXRlY29kZUNhbklnbm9yZU5lZ2F0aXZlWmVybyhtX25vZGUtPmFyaXRoTm9kZUZsYWdz
KCkpKSB7CisgICAgICAgICAgICAgICAgIExCYXNpY0Jsb2NrIHNsb3dDYXNlID0gRlRMX05FV19C
TE9DSyhtX291dCwgKCJBcml0aE11bCBzbG93IGNhc2UiKSk7CisgICAgICAgICAgICAgICAgIExC
YXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiQXJpdGhNdWwg
Y29udGludWF0aW9uIikpOworCisgICAgICAgICAgICAgICAgIG1fb3V0LmJyYW5jaChtX291dC5u
b3RaZXJvMzIocmVzdWx0KSwgY29udGludWF0aW9uLCBzbG93Q2FzZSk7CisKKyAgICAgICAgICAg
ICAgICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291dC5hcHBlbmRUbyhzbG93Q2FzZSwgY29u
dGludWF0aW9uKTsKKyAgICAgICAgICAgICAgICAgTFZhbHVlIGNvbmQgPSBtX291dC5iaXRPciht
X291dC5sZXNzVGhhbihsZWZ0LCBtX291dC5pbnQzMlplcm8pLCBtX291dC5sZXNzVGhhbihyaWdo
dCwgbV9vdXQuaW50MzJaZXJvKSk7CisgICAgICAgICAgICAgICAgIHNwZWN1bGF0ZShOZWdhdGl2
ZVplcm8sIG5vVmFsdWUoKSwgMCwgY29uZCk7CisgICAgICAgICAgICAgICAgIG1fb3V0Lmp1bXAo
Y29udGludWF0aW9uKTsKKyAgICAgICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGludWF0
aW9uLCBsYXN0TmV4dCk7CisgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgc2V0SW50MzIo
cmVzdWx0KTsKKyAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgIH0KKworICAgICAgICAgY2Fz
ZSBNYWNoaW5lSW50VXNlOiB7CisgICAgICAgICAgICAgSW50NTJLaW5kIGtpbmQ7CisgICAgICAg
ICAgICAgTFZhbHVlIGxlZnQgPSBsb3dXaGljaGV2ZXJJbnQ1MihtX25vZGUtPmNoaWxkMSgpLCBr
aW5kKTsKKyAgICAgICAgICAgICBMVmFsdWUgcmlnaHQgPSBsb3dJbnQ1MihtX25vZGUtPmNoaWxk
MigpLCBvcHBvc2l0ZShraW5kKSk7CisgICAgICAgICAgICAgTFZhbHVlIHJlc3VsdCA9IG1fb3V0
Lm11bChsZWZ0LCByaWdodCk7CisKKworICAgICAgICAgICAgIExWYWx1ZSBvdmVyZmxvd1Jlc3Vs
dCA9IG1fb3V0Lm11bFdpdGhPdmVyZmxvdzY0KGxlZnQsIHJpZ2h0KTsKKyAgICAgICAgICAgICBz
cGVjdWxhdGUoSW50NTJPdmVyZmxvdywgbm9WYWx1ZSgpLCAwLCBtX291dC5leHRyYWN0VmFsdWUo
b3ZlcmZsb3dSZXN1bHQsIDEpKTsKKworICAgICAgICAgICAgIGlmICghYnl0ZWNvZGVDYW5JZ25v
cmVOZWdhdGl2ZVplcm8obV9ub2RlLT5hcml0aE5vZGVGbGFncygpKSkgeworICAgICAgICAgICAg
ICAgICBMQmFzaWNCbG9jayBzbG93Q2FzZSA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiQXJpdGhN
dWwgc2xvdyBjYXNlIikpOworICAgICAgICAgICAgICAgICBMQmFzaWNCbG9jayBjb250aW51YXRp
b24gPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIkFyaXRoTXVsIGNvbnRpbnVhdGlvbiIpKTsKKwor
ICAgICAgICAgICAgICAgICBtX291dC5icmFuY2gobV9vdXQubm90WmVybzY0KHJlc3VsdCksIGNv
bnRpbnVhdGlvbiwgc2xvd0Nhc2UpOworCisgICAgICAgICAgICAgICAgIExCYXNpY0Jsb2NrIGxh
c3ROZXh0ID0gbV9vdXQuYXBwZW5kVG8oc2xvd0Nhc2UsIGNvbnRpbnVhdGlvbik7CisgICAgICAg
ICAgICAgICAgIExWYWx1ZSBjb25kID0gbV9vdXQuYml0T3IobV9vdXQubGVzc1RoYW4obGVmdCwg
bV9vdXQuaW50NjRaZXJvKSwgbV9vdXQubGVzc1RoYW4ocmlnaHQsIG1fb3V0LmludDY0WmVybykp
OworICAgICAgICAgICAgICAgICBzcGVjdWxhdGUoTmVnYXRpdmVaZXJvLCBub1ZhbHVlKCksIDAs
IGNvbmQpOworICAgICAgICAgICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CisgICAg
ICAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOworICAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgIHNldEludDUyKHJlc3VsdCk7CisgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICB9CisKKyAgICAgICAgIGNhc2UgTnVtYmVyVXNlOiB7CisgICAg
ICAgICAgICAgc2V0RG91YmxlKAorICAgICAgICAgICAgICAgICBtX291dC5kb3VibGVNdWwobG93
RG91YmxlKG1fbm9kZS0+Y2hpbGQxKCkpLCBsb3dEb3VibGUobV9ub2RlLT5jaGlsZDIoKSkpKTsK
KyAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgIH0KKworICAgICAgICAgZGVmYXVsdDoKKyAg
ICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgfQorICAgICB9CisKKyAgICAgdm9pZCBjb21waWxlQXJpdGhEaXZNb2Qo
KQorICAgICB7CisgICAgICAgICBzd2l0Y2ggKG1fbm9kZS0+YmluYXJ5VXNlS2luZCgpKSB7Cisg
ICAgICAgICBjYXNlIEludDMyVXNlOiB7CisgICAgICAgICAgICAgTFZhbHVlIG51bWVyYXRvciA9
IGxvd0ludDMyKG1fbm9kZS0+Y2hpbGQxKCkpOworICAgICAgICAgICAgIExWYWx1ZSBkZW5vbWlu
YXRvciA9IGxvd0ludDMyKG1fbm9kZS0+Y2hpbGQyKCkpOworCisgICAgICAgICAgICAgTEJhc2lj
QmxvY2sgdW5zYWZlRGVub21pbmF0b3IgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIkFyaXRoRGl2
TW9kIHVuc2FmZSBkZW5vbWluYXRvciIpKTsKKyAgICAgICAgICAgICBMQmFzaWNCbG9jayBjb250
aW51YXRpb24gPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIkFyaXRoRGl2TW9kIGNvbnRpbnVhdGlv
biIpKTsKKyAgICAgICAgICAgICBMQmFzaWNCbG9jayBkb25lID0gRlRMX05FV19CTE9DSyhtX291
dCwgKCJBcml0aERpdk1vZCBkb25lIikpOworCisgICAgICAgICAgICAgVmVjdG9yPFZhbHVlRnJv
bUJsb2NrLCAzPiByZXN1bHRzOworCisgICAgICAgICAgICAgTFZhbHVlIGFkanVzdGVkRGVub21p
bmF0b3IgPSBtX291dC5hZGQoZGVub21pbmF0b3IsIG1fb3V0LmludDMyT25lKTsKKworICAgICAg
ICAgICAgIG1fb3V0LmJyYW5jaChtX291dC5hYm92ZShhZGp1c3RlZERlbm9taW5hdG9yLCBtX291
dC5pbnQzMk9uZSksIGNvbnRpbnVhdGlvbiwgdW5zYWZlRGVub21pbmF0b3IpOworCisgICAgICAg
ICAgICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291dC5hcHBlbmRUbyh1bnNhZmVEZW5vbWlu
YXRvciwgY29udGludWF0aW9uKTsKKworICAgICAgICAgICAgIExWYWx1ZSBuZWcyVG9UaGUzMSA9
IG1fb3V0LmNvbnN0SW50MzIoLTIxNDc0ODM2NDctMSk7CisKKyAgICAgICAgICAgICBpZiAoYnl0
ZWNvZGVVc2VzQXNOdW1iZXIobV9ub2RlLT5hcml0aE5vZGVGbGFncygpKSkgeworICAgICAgICAg
ICAgICAgICBMVmFsdWUgY29uZCA9IG1fb3V0LmJpdE9yKG1fb3V0LmlzWmVybzMyKGRlbm9taW5h
dG9yKSwgbV9vdXQuZXF1YWwobnVtZXJhdG9yLCBuZWcyVG9UaGUzMSkpOworICAgICAgICAgICAg
ICAgICBzcGVjdWxhdGUoT3ZlcmZsb3csIG5vVmFsdWUoKSwgMCwgY29uZCk7CisgICAgICAgICAg
ICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKKyAgICAgICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgICAgICAgICAvLyBUaGlzIGlzIHRoZSBjYXNlIHdoZXJlIHdlIGNvbnZlcnQgdGhl
IHJlc3VsdCB0byBhbiBpbnQgYWZ0ZXIgd2UncmUgZG9uZS4gU28sCisgICAgICAgICAgICAgICAg
IC8vIGlmIHRoZSBkZW5vbWluYXRvciBpcyB6ZXJvLCB0aGVuIHRoZSByZXN1bHQgc2hvdWxkIGJl
IHplcm8uCisgICAgICAgICAgICAgICAgIC8vIElmIHRoZSBkZW5vbWluYXRvciBpcyBub3QgemVy
byAoaS5lLiBpdCdzIC0xIGJlY2F1c2Ugd2UncmUgZ3VhcmRlZCBieSB0aGUKKyAgICAgICAgICAg
ICAgICAgLy8gY2hlY2sgYWJvdmUpIGFuZCB0aGUgbnVtZXJhdG9yIGlzIC0yXjMxIHRoZW4gdGhl
IHJlc3VsdCBzaG91bGQgYmUgLTJeMzEuCisKKyAgICAgICAgICAgICAgICAgTEJhc2ljQmxvY2sg
ZGl2QnlaZXJvID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJBcml0aERpdiBkaXZpZGUgYnkgemVy
byIpKTsKKyAgICAgICAgICAgICAgICAgTEJhc2ljQmxvY2sgbm90RGl2QnlaZXJvID0gRlRMX05F
V19CTE9DSyhtX291dCwgKCJBcml0aERpdiBub3QgZGl2aWRlIGJ5IHplcm8iKSk7CisgICAgICAg
ICAgICAgICAgIExCYXNpY0Jsb2NrIG5lZzJUb1RoZTMxQnlOZWcxID0gRlRMX05FV19CTE9DSyht
X291dCwgKCJBcml0aERpdiAtMl4zMS8tMSIpKTsKKworICAgICAgICAgICAgICAgICBtX291dC5i
cmFuY2gobV9vdXQuaXNaZXJvMzIoZGVub21pbmF0b3IpLCBkaXZCeVplcm8sIG5vdERpdkJ5WmVy
byk7CisKKyAgICAgICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8oZGl2QnlaZXJvLCBub3REaXZC
eVplcm8pOworICAgICAgICAgICAgICAgICByZXN1bHRzLmFwcGVuZChtX291dC5hbmNob3IobV9v
dXQuaW50MzJaZXJvKSk7CisgICAgICAgICAgICAgICAgIG1fb3V0Lmp1bXAoZG9uZSk7CisKKyAg
ICAgICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8obm90RGl2QnlaZXJvLCBuZWcyVG9UaGUzMUJ5
TmVnMSk7CisgICAgICAgICAgICAgICAgIG1fb3V0LmJyYW5jaChtX291dC5lcXVhbChudW1lcmF0
b3IsIG5lZzJUb1RoZTMxKSwgbmVnMlRvVGhlMzFCeU5lZzEsIGNvbnRpbnVhdGlvbik7CisKKyAg
ICAgICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8obmVnMlRvVGhlMzFCeU5lZzEsIGNvbnRpbnVh
dGlvbik7CisgICAgICAgICAgICAgICAgIHJlc3VsdHMuYXBwZW5kKG1fb3V0LmFuY2hvcihuZWcy
VG9UaGUzMSkpOworICAgICAgICAgICAgICAgICBtX291dC5qdW1wKGRvbmUpOworICAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgZG9uZSk7
CisKKyAgICAgICAgICAgICBpZiAoIWJ5dGVjb2RlQ2FuSWdub3JlTmVnYXRpdmVaZXJvKG1fbm9k
ZS0+YXJpdGhOb2RlRmxhZ3MoKSkpIHsKKyAgICAgICAgICAgICAgICAgTEJhc2ljQmxvY2sgemVy
b051bWVyYXRvciA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiQXJpdGhEaXZNb2QgemVybyBudW1l
cmF0b3IiKSk7CisgICAgICAgICAgICAgICAgIExCYXNpY0Jsb2NrIG51bWVyYXRvckNvbnRpbnVh
dGlvbiA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiQXJpdGhEaXZNb2QgbnVtZXJhdG9yIGNvbnRp
bnVhdGlvbiIpKTsKKworICAgICAgICAgICAgICAgICBtX291dC5icmFuY2gobV9vdXQuaXNaZXJv
MzIobnVtZXJhdG9yKSwgemVyb051bWVyYXRvciwgbnVtZXJhdG9yQ29udGludWF0aW9uKTsKKwor
ICAgICAgICAgICAgICAgICBMQmFzaWNCbG9jayBpbm5lckxhc3ROZXh0ID0gbV9vdXQuYXBwZW5k
VG8oemVyb051bWVyYXRvciwgbnVtZXJhdG9yQ29udGludWF0aW9uKTsKKworICAgICAgICAgICAg
ICAgICBzcGVjdWxhdGUoCisgICAgICAgICAgICAgICAgICAgICBOZWdhdGl2ZVplcm8sIG5vVmFs
dWUoKSwgMCwgbV9vdXQubGVzc1RoYW4oZGVub21pbmF0b3IsIG1fb3V0LmludDMyWmVybykpOwor
CisgICAgICAgICAgICAgICAgIG1fb3V0Lmp1bXAobnVtZXJhdG9yQ29udGludWF0aW9uKTsKKwor
ICAgICAgICAgICAgICAgICBtX291dC5hcHBlbmRUbyhudW1lcmF0b3JDb250aW51YXRpb24sIGlu
bmVyTGFzdE5leHQpOworICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgIExWYWx1ZSBkaXZN
b2RSZXN1bHQgPSBtX25vZGUtPm9wKCkgPT0gQXJpdGhEaXYKKyAgICAgICAgICAgICAgICAgPyBt
X291dC5kaXYobnVtZXJhdG9yLCBkZW5vbWluYXRvcikKKyAgICAgICAgICAgICAgICAgOiBtX291
dC5yZW0obnVtZXJhdG9yLCBkZW5vbWluYXRvcik7CisKKyAgICAgICAgICAgICBpZiAoYnl0ZWNv
ZGVVc2VzQXNOdW1iZXIobV9ub2RlLT5hcml0aE5vZGVGbGFncygpKSkgeworICAgICAgICAgICAg
ICAgICBzcGVjdWxhdGUoCisgICAgICAgICAgICAgICAgICAgICBPdmVyZmxvdywgbm9WYWx1ZSgp
LCAwLAorICAgICAgICAgICAgICAgICAgICAgbV9vdXQubm90RXF1YWwobV9vdXQubXVsKGRpdk1v
ZFJlc3VsdCwgZGVub21pbmF0b3IpLCBudW1lcmF0b3IpKTsKKyAgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgICByZXN1bHRzLmFwcGVuZChtX291dC5hbmNob3IoZGl2TW9kUmVzdWx0KSk7Cisg
ICAgICAgICAgICAgbV9vdXQuanVtcChkb25lKTsKKworICAgICAgICAgICAgIG1fb3V0LmFwcGVu
ZFRvKGRvbmUsIGxhc3ROZXh0KTsKKworICAgICAgICAgICAgIHNldEludDMyKG1fb3V0LnBoaSht
X291dC5pbnQzMiwgcmVzdWx0cykpOworICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgfQor
CisgICAgICAgICBjYXNlIE51bWJlclVzZTogeworICAgICAgICAgICAgIExWYWx1ZSBDMSA9IGxv
d0RvdWJsZShtX25vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgICAgICBMVmFsdWUgQzIgPSBsb3dE
b3VibGUobV9ub2RlLT5jaGlsZDIoKSk7CisgICAgICAgICAgICAgc2V0RG91YmxlKG1fbm9kZS0+
b3AoKSA9PSBBcml0aERpdiA/IG1fb3V0LmRvdWJsZURpdihDMSwgQzIpIDogbV9vdXQuZG91Ymxl
UmVtKEMxLCBDMikpOworICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgfQorCisgICAgICAg
ICBkZWZhdWx0OgorICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cisg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICB9CisgICAgIH0KKworICAgICB2b2lkIGNvbXBp
bGVBcml0aE1pbk9yTWF4KCkKKyAgICAgeworICAgICAgICAgc3dpdGNoIChtX25vZGUtPmJpbmFy
eVVzZUtpbmQoKSkgeworICAgICAgICAgY2FzZSBJbnQzMlVzZTogeworICAgICAgICAgICAgIExW
YWx1ZSBsZWZ0ID0gbG93SW50MzIobV9ub2RlLT5jaGlsZDEoKSk7CisgICAgICAgICAgICAgTFZh
bHVlIHJpZ2h0ID0gbG93SW50MzIobV9ub2RlLT5jaGlsZDIoKSk7CisKKyAgICAgICAgICAgICBz
ZXRJbnQzMigKKyAgICAgICAgICAgICAgICAgbV9vdXQuc2VsZWN0KAorICAgICAgICAgICAgICAg
ICAgICAgbV9ub2RlLT5vcCgpID09IEFyaXRoTWluCisgICAgICAgICAgICAgICAgICAgICAgICAg
PyBtX291dC5sZXNzVGhhbihsZWZ0LCByaWdodCkKKyAgICAgICAgICAgICAgICAgICAgICAgICA6
IG1fb3V0Lmxlc3NUaGFuKHJpZ2h0LCBsZWZ0KSwKKyAgICAgICAgICAgICAgICAgICAgIGxlZnQs
IHJpZ2h0KSk7CisgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICB9CisKKyAgICAgICAgIGNh
c2UgTnVtYmVyVXNlOiB7CisgICAgICAgICAgICAgTFZhbHVlIGxlZnQgPSBsb3dEb3VibGUobV9u
b2RlLT5jaGlsZDEoKSk7CisgICAgICAgICAgICAgTFZhbHVlIHJpZ2h0ID0gbG93RG91YmxlKG1f
bm9kZS0+Y2hpbGQyKCkpOworCisgICAgICAgICAgICAgTEJhc2ljQmxvY2sgbm90TGVzc1RoYW4g
PSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIkFyaXRoTWluL0FyaXRoTWF4IG5vdCBsZXNzIHRoYW4i
KSk7CisgICAgICAgICAgICAgTEJhc2ljQmxvY2sgY29udGludWF0aW9uID0gRlRMX05FV19CTE9D
SyhtX291dCwgKCJBcml0aE1pbi9Bcml0aE1heCBjb250aW51YXRpb24iKSk7CisKKyAgICAgICAg
ICAgICBWZWN0b3I8VmFsdWVGcm9tQmxvY2ssIDI+IHJlc3VsdHM7CisKKyAgICAgICAgICAgICBy
ZXN1bHRzLmFwcGVuZChtX291dC5hbmNob3IobGVmdCkpOworICAgICAgICAgICAgIG1fb3V0LmJy
YW5jaCgKKyAgICAgICAgICAgICAgICAgbV9ub2RlLT5vcCgpID09IEFyaXRoTWluCisgICAgICAg
ICAgICAgICAgICAgICA/IG1fb3V0LmRvdWJsZUxlc3NUaGFuKGxlZnQsIHJpZ2h0KQorICAgICAg
ICAgICAgICAgICAgICAgOiBtX291dC5kb3VibGVHcmVhdGVyVGhhbihsZWZ0LCByaWdodCksCisg
ICAgICAgICAgICAgICAgIGNvbnRpbnVhdGlvbiwgbm90TGVzc1RoYW4pOworCisgICAgICAgICAg
ICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291dC5hcHBlbmRUbyhub3RMZXNzVGhhbiwgY29u
dGludWF0aW9uKTsKKyAgICAgICAgICAgICByZXN1bHRzLmFwcGVuZChtX291dC5hbmNob3IobV9v
dXQuc2VsZWN0KAorICAgICAgICAgICAgICAgICBtX25vZGUtPm9wKCkgPT0gQXJpdGhNaW4KKyAg
ICAgICAgICAgICAgICAgICAgID8gbV9vdXQuZG91YmxlR3JlYXRlclRoYW5PckVxdWFsKGxlZnQs
IHJpZ2h0KQorICAgICAgICAgICAgICAgICAgICAgOiBtX291dC5kb3VibGVMZXNzVGhhbk9yRXF1
YWwobGVmdCwgcmlnaHQpLAorICAgICAgICAgICAgICAgICByaWdodCwgbV9vdXQuY29uc3REb3Vi
bGUoMC4wIC8gMC4wKSkpKTsKKyAgICAgICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7
CisKKyAgICAgICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0KTsK
KyAgICAgICAgICAgICBzZXREb3VibGUobV9vdXQucGhpKG1fb3V0LmRvdWJsZVR5cGUsIHJlc3Vs
dHMpKTsKKyAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgIH0KKworICAgICAgICAgZGVmYXVs
dDoKKyAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgfQorICAgICB9CisKKyAgICAgdm9pZCBjb21waWxlQXJpdGhB
YnMoKQorICAgICB7CisgICAgICAgICBzd2l0Y2ggKG1fbm9kZS0+Y2hpbGQxKCkudXNlS2luZCgp
KSB7CisgICAgICAgICBjYXNlIEludDMyVXNlOiB7CisgICAgICAgICAgICAgTFZhbHVlIHZhbHVl
ID0gbG93SW50MzIobV9ub2RlLT5jaGlsZDEoKSk7CisKKyAgICAgICAgICAgICBMVmFsdWUgbWFz
ayA9IG1fb3V0LmFTaHIodmFsdWUsIG1fb3V0LmNvbnN0SW50MzIoMzEpKTsKKyAgICAgICAgICAg
ICBMVmFsdWUgcmVzdWx0ID0gbV9vdXQuYml0WG9yKG1hc2ssIG1fb3V0LmFkZChtYXNrLCB2YWx1
ZSkpOworCisgICAgICAgICAgICAgc3BlY3VsYXRlKE92ZXJmbG93LCBub1ZhbHVlKCksIDAsIG1f
b3V0LmVxdWFsKHJlc3VsdCwgbV9vdXQuY29uc3RJbnQzMigxIDw8IDMxKSkpOworCisgICAgICAg
ICAgICAgc2V0SW50MzIocmVzdWx0KTsKKyAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgIH0K
KworICAgICAgICAgY2FzZSBOdW1iZXJVc2U6IHsKKyAgICAgICAgICAgICBzZXREb3VibGUobV9v
dXQuZG91YmxlQWJzKGxvd0RvdWJsZShtX25vZGUtPmNoaWxkMSgpKSkpOworICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgfQorCisgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgIFJF
TEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICB9CisgICAgIH0KKworICAgICB2b2lkIGNvbXBpbGVBcml0aE5lZ2F0ZSgpCisgICAgIHsKKyAg
ICAgICAgIHN3aXRjaCAobV9ub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkpIHsKKyAgICAgICAgIGNh
c2UgSW50MzJVc2U6IHsKKyAgICAgICAgICAgICBMVmFsdWUgdmFsdWUgPSBsb3dJbnQzMihtX25v
ZGUtPmNoaWxkMSgpKTsKKworICAgICAgICAgICAgIExWYWx1ZSByZXN1bHQgPSBtX291dC5uZWco
dmFsdWUpOworICAgICAgICAgICAgIGlmICghYnl0ZWNvZGVDYW5UcnVuY2F0ZUludGVnZXIobV9u
b2RlLT5hcml0aE5vZGVGbGFncygpKSkgeworICAgICAgICAgICAgICAgICBpZiAoYnl0ZWNvZGVD
YW5JZ25vcmVOZWdhdGl2ZVplcm8obV9ub2RlLT5hcml0aE5vZGVGbGFncygpKSkgeworICAgICAg
ICAgICAgICAgICAgICAgLy8gV2UgZG9uJ3QgaGF2ZSBhIG5lZ2F0ZS13aXRoLW92ZXJmbG93IGlu
dHJpbnNpYy4gSG9wZWZ1bGx5IHRoaXMKKyAgICAgICAgICAgICAgICAgICAgIC8vIGRvZXMgdGhl
IHRyaWNrLCB0aG91Z2guCisgICAgICAgICAgICAgICAgICAgICBMVmFsdWUgb3ZlcmZsb3dSZXN1
bHQgPSBtX291dC5zdWJXaXRoT3ZlcmZsb3czMihtX291dC5pbnQzMlplcm8sIHZhbHVlKTsKKyAg
ICAgICAgICAgICAgICAgICAgIHNwZWN1bGF0ZShPdmVyZmxvdywgbm9WYWx1ZSgpLCAwLCBtX291
dC5leHRyYWN0VmFsdWUob3ZlcmZsb3dSZXN1bHQsIDEpKTsKKyAgICAgICAgICAgICAgICAgfSBl
bHNlCisgICAgICAgICAgICAgICAgICAgICBzcGVjdWxhdGUoT3ZlcmZsb3csIG5vVmFsdWUoKSwg
MCwgbV9vdXQudGVzdElzWmVybzMyKHZhbHVlLCBtX291dC5jb25zdEludDMyKDB4N2ZmZmZmZmYp
KSk7CisKKyAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICBzZXRJbnQzMihyZXN1bHQpOwor
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgfQorCisgICAgICAgICBjYXNlIE1hY2hpbmVJ
bnRVc2U6IHsKKyAgICAgICAgICAgICBpZiAoIW1fc3RhdGUuZm9yTm9kZShtX25vZGUtPmNoaWxk
MSgpKS5jb3VsZEJlVHlwZShTcGVjSW50NTIpKSB7CisgICAgICAgICAgICAgICAgIEludDUyS2lu
ZCBraW5kOworICAgICAgICAgICAgICAgICBMVmFsdWUgdmFsdWUgPSBsb3dXaGljaGV2ZXJJbnQ1
MihtX25vZGUtPmNoaWxkMSgpLCBraW5kKTsKKyAgICAgICAgICAgICAgICAgTFZhbHVlIHJlc3Vs
dCA9IG1fb3V0Lm5lZyh2YWx1ZSk7CisgICAgICAgICAgICAgICAgIGlmICghYnl0ZWNvZGVDYW5J
Z25vcmVOZWdhdGl2ZVplcm8obV9ub2RlLT5hcml0aE5vZGVGbGFncygpKSkKKyAgICAgICAgICAg
ICAgICAgICAgIHNwZWN1bGF0ZShOZWdhdGl2ZVplcm8sIG5vVmFsdWUoKSwgMCwgbV9vdXQuaXNa
ZXJvNjQocmVzdWx0KSk7CisgICAgICAgICAgICAgICAgIHNldEludDUyKHJlc3VsdCwga2luZCk7
CisgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
IExWYWx1ZSB2YWx1ZSA9IGxvd0ludDUyKG1fbm9kZS0+Y2hpbGQxKCkpOworICAgICAgICAgICAg
IExWYWx1ZSBvdmVyZmxvd1Jlc3VsdCA9IG1fb3V0LnN1YldpdGhPdmVyZmxvdzY0KG1fb3V0Lmlu
dDY0WmVybywgdmFsdWUpOworICAgICAgICAgICAgIHNwZWN1bGF0ZShJbnQ1Mk92ZXJmbG93LCBu
b1ZhbHVlKCksIDAsIG1fb3V0LmV4dHJhY3RWYWx1ZShvdmVyZmxvd1Jlc3VsdCwgMSkpOworICAg
ICAgICAgICAgIExWYWx1ZSByZXN1bHQgPSBtX291dC5uZWcodmFsdWUpOworICAgICAgICAgICAg
IHNwZWN1bGF0ZShOZWdhdGl2ZVplcm8sIG5vVmFsdWUoKSwgMCwgbV9vdXQuaXNaZXJvNjQocmVz
dWx0KSk7CisgICAgICAgICAgICAgc2V0SW50NTIocmVzdWx0KTsKKyAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgIH0KKworICAgICAgICAgY2FzZSBOdW1iZXJVc2U6IHsKKyAgICAgICAgICAg
ICBzZXREb3VibGUobV9vdXQuZG91YmxlTmVnKGxvd0RvdWJsZShtX25vZGUtPmNoaWxkMSgpKSkp
OworICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgfQorCisgICAgICAgICBkZWZhdWx0Ogor
ICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICB9CisgICAgIH0KKworICAgICB2b2lkIGNvbXBpbGVCaXRBbmQoKQor
ICAgICB7CisgICAgICAgICBzZXRJbnQzMihtX291dC5iaXRBbmQobG93SW50MzIobV9ub2RlLT5j
aGlsZDEoKSksIGxvd0ludDMyKG1fbm9kZS0+Y2hpbGQyKCkpKSk7CisgICAgIH0KKworICAgICB2
b2lkIGNvbXBpbGVCaXRPcigpCisgICAgIHsKKyAgICAgICAgIHNldEludDMyKG1fb3V0LmJpdE9y
KGxvd0ludDMyKG1fbm9kZS0+Y2hpbGQxKCkpLCBsb3dJbnQzMihtX25vZGUtPmNoaWxkMigpKSkp
OworICAgICB9CisKKyAgICAgdm9pZCBjb21waWxlQml0WG9yKCkKKyAgICAgeworICAgICAgICAg
c2V0SW50MzIobV9vdXQuYml0WG9yKGxvd0ludDMyKG1fbm9kZS0+Y2hpbGQxKCkpLCBsb3dJbnQz
MihtX25vZGUtPmNoaWxkMigpKSkpOworICAgICB9CisKKyAgICAgdm9pZCBjb21waWxlQml0UlNo
aWZ0KCkKKyAgICAgeworICAgICAgICAgc2V0SW50MzIobV9vdXQuYVNocigKKyAgICAgICAgICAg
ICBsb3dJbnQzMihtX25vZGUtPmNoaWxkMSgpKSwKKyAgICAgICAgICAgICBtX291dC5iaXRBbmQo
bG93SW50MzIobV9ub2RlLT5jaGlsZDIoKSksIG1fb3V0LmNvbnN0SW50MzIoMzEpKSkpOworICAg
ICB9CisKKyAgICAgdm9pZCBjb21waWxlQml0TFNoaWZ0KCkKKyAgICAgeworICAgICAgICAgc2V0
SW50MzIobV9vdXQuc2hsKAorICAgICAgICAgICAgIGxvd0ludDMyKG1fbm9kZS0+Y2hpbGQxKCkp
LAorICAgICAgICAgICAgIG1fb3V0LmJpdEFuZChsb3dJbnQzMihtX25vZGUtPmNoaWxkMigpKSwg
bV9vdXQuY29uc3RJbnQzMigzMSkpKSk7CisgICAgIH0KKworICAgICB2b2lkIGNvbXBpbGVCaXRV
UlNoaWZ0KCkKKyAgICAgeworICAgICAgICAgc2V0SW50MzIobV9vdXQubFNocigKKyAgICAgICAg
ICAgICBsb3dJbnQzMihtX25vZGUtPmNoaWxkMSgpKSwKKyAgICAgICAgICAgICBtX291dC5iaXRB
bmQobG93SW50MzIobV9ub2RlLT5jaGlsZDIoKSksIG1fb3V0LmNvbnN0SW50MzIoMzEpKSkpOwor
ICAgICB9CisKKyAgICAgdm9pZCBjb21waWxlVUludDMyVG9OdW1iZXIoKQorICAgICB7CisgICAg
ICAgICBMVmFsdWUgdmFsdWUgPSBsb3dJbnQzMihtX25vZGUtPmNoaWxkMSgpKTsKKworICAgICAg
ICAgaWYgKCFub2RlQ2FuU3BlY3VsYXRlSW50MzIobV9ub2RlLT5hcml0aE5vZGVGbGFncygpKSkg
eworICAgICAgICAgICAgIHNldERvdWJsZShtX291dC51bnNpZ25lZFRvRG91YmxlKHZhbHVlKSk7
CisgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgfQorCisgICAgICAgICBzcGVjdWxhdGVG
b3J3YXJkKAorICAgICAgICAgICAgIE92ZXJmbG93LCBub1ZhbHVlKCksIDAsIG1fb3V0Lmxlc3NU
aGFuKHZhbHVlLCBtX291dC5pbnQzMlplcm8pLAorICAgICAgICAgICAgIEZvcm1hdHRlZFZhbHVl
KFZhbHVlRm9ybWF0VUludDMyLCB2YWx1ZSkpOworICAgICAgICAgc2V0SW50MzIodmFsdWUpOwor
ICAgICB9CisKKyAgICAgdm9pZCBjb21waWxlSW50MzJUb0RvdWJsZSgpCisgICAgIHsKKyAgICAg
ICAgIC8vIFRoaXMgbm9kZSBpcyB0cmlja3kgdG8gY29tcGlsZSBpbiB0aGUgREZHIGJhY2tlbmQg
YmVjYXVzZSBpdCB0cmllcyB0bworICAgICAgICAgLy8gYXZvaWQgY29udmVydGluZyBjaGlsZDEg
dG8gYSBkb3VibGUgaW4tcGxhY2UsIGFzIHRoYXQgd291bGQgbWFrZSBzdWJzZXF1ZW50CisgICAg
ICAgICAvLyBpbnQgdXNlcyBvZiBvZiBjaGlsZDEgZmFpbC4gQnV0IHRoZSBGVEwgbmVlZHMgbm8g
c3VjaCBzcGVjaWFsIG1hZ2ljLCBzaW5jZQorICAgICAgICAgLy8gdW5saWtlIHRoZSBERkcgYmFj
a2VuZCwgdGhlIEZUTCBhbGxvd3MgZWFjaCBub2RlIHRvIGhhdmUgbXVsdGlwbGUKKyAgICAgICAg
IC8vIGNvbnRlbXBvcmFuZW91cyBsb3ctbGV2ZWwgcmVwcmVzZW50YXRpb25zLiBTbywgdGhpcyBn
aXZlcyBjaGlsZDEgYSBkb3VibGUKKyAgICAgICAgIC8vIHJlcHJlc2VudGF0aW9uIGFuZCB0aGVu
IGZvcndhcmRzIHRoYXQgcmVwcmVzZW50YXRpb24gdG8gbV9ub2RlLgorCisgICAgICAgICBzZXRE
b3VibGUobG93RG91YmxlKG1fbm9kZS0+Y2hpbGQxKCkpKTsKKyAgICAgfQorCisgICAgIHZvaWQg
Y29tcGlsZUNoZWNrU3RydWN0dXJlKCkKKyAgICAgeworICAgICAgICAgTFZhbHVlIGNlbGwgPSBs
b3dDZWxsKG1fbm9kZS0+Y2hpbGQxKCkpOworCisgICAgICAgICBFeGl0S2luZCBleGl0S2luZDsK
KyAgICAgICAgIGlmIChtX25vZGUtPmNoaWxkMSgpLT5vcCgpID09IFdlYWtKU0NvbnN0YW50KQor
ICAgICAgICAgICAgIGV4aXRLaW5kID0gQmFkV2Vha0NvbnN0YW50Q2FjaGU7CisgICAgICAgICBl
bHNlCisgICAgICAgICAgICAgZXhpdEtpbmQgPSBCYWRDYWNoZTsKKworICAgICAgICAgTFZhbHVl
IHN0cnVjdHVyZSA9IG1fb3V0LmxvYWRQdHIoY2VsbCwgbV9oZWFwcy5KU0NlbGxfc3RydWN0dXJl
KTsKKworICAgICAgICAgaWYgKG1fbm9kZS0+c3RydWN0dXJlU2V0KCkuc2l6ZSgpID09IDEpIHsK
KyAgICAgICAgICAgICBzcGVjdWxhdGUoCisgICAgICAgICAgICAgICAgIGV4aXRLaW5kLCBqc1Zh
bHVlVmFsdWUoY2VsbCksIDAsCisgICAgICAgICAgICAgICAgIG1fb3V0Lm5vdEVxdWFsKHN0cnVj
dHVyZSwgd2Vha1BvaW50ZXIobV9ub2RlLT5zdHJ1Y3R1cmVTZXQoKVswXSkpKTsKKyAgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgICB9CisKKyAgICAgICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVh
dGlvbiA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiQ2hlY2tTdHJ1Y3R1cmUgY29udGludWF0aW9u
IikpOworCisgICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0Lmluc2VydE5ld0Js
b2Nrc0JlZm9yZShjb250aW51YXRpb24pOworICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IG1fbm9kZS0+c3RydWN0dXJlU2V0KCkuc2l6ZSgpIC0gMTsgKytpKSB7CisgICAgICAgICAg
ICAgTEJhc2ljQmxvY2sgbmV4dFN0cnVjdHVyZSA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiQ2hl
Y2tTdHJ1Y3R1cmUgbmV4dFN0cnVjdHVyZSIpKTsKKyAgICAgICAgICAgICBtX291dC5icmFuY2go
CisgICAgICAgICAgICAgICAgIG1fb3V0LmVxdWFsKHN0cnVjdHVyZSwgd2Vha1BvaW50ZXIobV9u
b2RlLT5zdHJ1Y3R1cmVTZXQoKVtpXSkpLAorICAgICAgICAgICAgICAgICBjb250aW51YXRpb24s
IG5leHRTdHJ1Y3R1cmUpOworICAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKG5leHRTdHJ1Y3R1
cmUpOworICAgICAgICAgfQorCisgICAgICAgICBzcGVjdWxhdGUoCisgICAgICAgICAgICAgZXhp
dEtpbmQsIGpzVmFsdWVWYWx1ZShjZWxsKSwgMCwKKyAgICAgICAgICAgICBtX291dC5ub3RFcXVh
bChzdHJ1Y3R1cmUsIHdlYWtQb2ludGVyKG1fbm9kZS0+c3RydWN0dXJlU2V0KCkubGFzdCgpKSkp
OworCisgICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CisgICAgICAgICBtX291dC5h
cHBlbmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0KTsKKyAgICAgfQorCisgICAgIHZvaWQgY29t
cGlsZVN0cnVjdHVyZVRyYW5zaXRpb25XYXRjaHBvaW50KCkKKyAgICAgeworICAgICAgICAgYWRk
V2Vha1JlZmVyZW5jZShtX25vZGUtPnN0cnVjdHVyZSgpKTsKKworICAgICAgICAgLy8gRklYTUU6
IEltcGxlbWVudCBzdHJ1Y3R1cmUgdHJhbnNpdGlvbiB3YXRjaHBvaW50cy4KKyAgICAgICAgIC8v
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTM2NDcKKworICAgICAg
ICAgc3BlY3VsYXRlQ2VsbChtX25vZGUtPmNoaWxkMSgpKTsKKyAgICAgfQorCisgICAgIHZvaWQg
Y29tcGlsZUFycmF5aWZ5VG9TdHJ1Y3R1cmUoKQorICAgICB7CisgICAgICAgICBMVmFsdWUgY2Vs
bCA9IGxvd0NlbGwobV9ub2RlLT5jaGlsZDEoKSk7CisgICAgICAgICBMVmFsdWUgcHJvcGVydHkg
PSAhIW1fbm9kZS0+Y2hpbGQyKCkgPyBsb3dJbnQzMihtX25vZGUtPmNoaWxkMigpKSA6IDA7CisK
KyAgICAgICAgIExCYXNpY0Jsb2NrIHVuZXhwZWN0ZWRTdHJ1Y3R1cmUgPSBGVExfTkVXX0JMT0NL
KG1fb3V0LCAoIkFycmF5aWZ5VG9TdHJ1Y3R1cmUgdW5leHBlY3RlZCBzdHJ1Y3R1cmUiKSk7Cisg
ICAgICAgICBMQmFzaWNCbG9jayBjb250aW51YXRpb24gPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAo
IkFycmF5aWZ5VG9TdHJ1Y3R1cmUgY29udGludWF0aW9uIikpOworCisgICAgICAgICBMVmFsdWUg
c3RydWN0dXJlID0gbV9vdXQubG9hZFB0cihjZWxsLCBtX2hlYXBzLkpTQ2VsbF9zdHJ1Y3R1cmUp
OworCisgICAgICAgICBtX291dC5icmFuY2goCisgICAgICAgICAgICAgbV9vdXQubm90RXF1YWwo
c3RydWN0dXJlLCB3ZWFrUG9pbnRlcihtX25vZGUtPnN0cnVjdHVyZSgpKSksCisgICAgICAgICAg
ICAgdW5leHBlY3RlZFN0cnVjdHVyZSwgY29udGludWF0aW9uKTsKKworICAgICAgICAgTEJhc2lj
QmxvY2sgbGFzdE5leHQgPSBtX291dC5hcHBlbmRUbyh1bmV4cGVjdGVkU3RydWN0dXJlLCBjb250
aW51YXRpb24pOworCisgICAgICAgICBpZiAocHJvcGVydHkpIHsKKyAgICAgICAgICAgICBzd2l0
Y2ggKG1fbm9kZS0+YXJyYXlNb2RlKCkudHlwZSgpKSB7CisgICAgICAgICAgICAgY2FzZSBBcnJh
eTo6SW50MzI6CisgICAgICAgICAgICAgY2FzZSBBcnJheTo6RG91YmxlOgorICAgICAgICAgICAg
IGNhc2UgQXJyYXk6OkNvbnRpZ3VvdXM6CisgICAgICAgICAgICAgICAgIHNwZWN1bGF0ZSgKKyAg
ICAgICAgICAgICAgICAgICAgIFVuY291bnRhYmxlLCBub1ZhbHVlKCksIDAsCisgICAgICAgICAg
ICAgICAgICAgICBtX291dC5hYm92ZU9yRXF1YWwocHJvcGVydHksIG1fb3V0LmNvbnN0SW50MzIo
TUlOX1NQQVJTRV9BUlJBWV9JTkRFWCkpKTsKKyAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAg
fQorICAgICAgICAgfQorCisgICAgICAgICBzd2l0Y2ggKG1fbm9kZS0+YXJyYXlNb2RlKCkudHlw
ZSgpKSB7CisgICAgICAgICBjYXNlIEFycmF5OjpJbnQzMjoKKyAgICAgICAgICAgICB2bUNhbGwo
bV9vdXQub3BlcmF0aW9uKG9wZXJhdGlvbkVuc3VyZUludDMyKSwgbV9jYWxsRnJhbWUsIGNlbGwp
OworICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgY2FzZSBBcnJheTo6RG91YmxlOgorICAg
ICAgICAgICAgIHZtQ2FsbChtX291dC5vcGVyYXRpb24ob3BlcmF0aW9uRW5zdXJlRG91YmxlKSwg
bV9jYWxsRnJhbWUsIGNlbGwpOworICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgY2FzZSBB
cnJheTo6Q29udGlndW91czoKKyAgICAgICAgICAgICBpZiAobV9ub2RlLT5hcnJheU1vZGUoKS5j
b252ZXJzaW9uKCkgPT0gQXJyYXk6OlJhZ2VDb252ZXJ0KQorICAgICAgICAgICAgICAgICB2bUNh
bGwobV9vdXQub3BlcmF0aW9uKG9wZXJhdGlvblJhZ2VFbnN1cmVDb250aWd1b3VzKSwgbV9jYWxs
RnJhbWUsIGNlbGwpOworICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgdm1DYWxs
KG1fb3V0Lm9wZXJhdGlvbihvcGVyYXRpb25FbnN1cmVDb250aWd1b3VzKSwgbV9jYWxsRnJhbWUs
IGNlbGwpOworICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgY2FzZSBBcnJheTo6QXJyYXlT
dG9yYWdlOgorICAgICAgICAgY2FzZSBBcnJheTo6U2xvd1B1dEFycmF5U3RvcmFnZToKKyAgICAg
ICAgICAgICB2bUNhbGwobV9vdXQub3BlcmF0aW9uKG9wZXJhdGlvbkVuc3VyZUFycmF5U3RvcmFn
ZSksIG1fY2FsbEZyYW1lLCBjZWxsKTsKKyAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgIGRl
ZmF1bHQ6CisgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgIH0KKworICAgICAgICAgc3RydWN0dXJlID0gbV9vdXQu
bG9hZFB0cihjZWxsLCBtX2hlYXBzLkpTQ2VsbF9zdHJ1Y3R1cmUpOworICAgICAgICAgc3BlY3Vs
YXRlKAorICAgICAgICAgICAgIEJhZEluZGV4aW5nVHlwZSwganNWYWx1ZVZhbHVlKGNlbGwpLCAw
LAorICAgICAgICAgICAgIG1fb3V0Lm5vdEVxdWFsKHN0cnVjdHVyZSwgd2Vha1BvaW50ZXIobV9u
b2RlLT5zdHJ1Y3R1cmUoKSkpKTsKKyAgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsK
KworICAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7CisgICAg
IH0KKworICAgICB2b2lkIGNvbXBpbGVQdXRTdHJ1Y3R1cmUoKQorICAgICB7CisgICAgICAgICBt
X2Z0bFN0YXRlLmppdENvZGUtPmNvbW1vbi5ub3RpZnlDb21waWxpbmdTdHJ1Y3R1cmVUcmFuc2l0
aW9uKG1fZ3JhcGgubV9wbGFuLCBjb2RlQmxvY2soKSwgbV9ub2RlKTsKKworICAgICAgICAgbV9v
dXQuc3RvcmU2NCgKKyAgICAgICAgICAgICBtX291dC5jb25zdEludFB0cihtX25vZGUtPnN0cnVj
dHVyZVRyYW5zaXRpb25EYXRhKCkubmV3U3RydWN0dXJlKSwKKyAgICAgICAgICAgICBsb3dDZWxs
KG1fbm9kZS0+Y2hpbGQxKCkpLCBtX2hlYXBzLkpTQ2VsbF9zdHJ1Y3R1cmUpOworICAgICB9CisK
KyAgICAgdm9pZCBjb21waWxlUGhhbnRvbVB1dFN0cnVjdHVyZSgpCisgICAgIHsKKyAgICAgICAg
IG1fZnRsU3RhdGUuaml0Q29kZS0+Y29tbW9uLm5vdGlmeUNvbXBpbGluZ1N0cnVjdHVyZVRyYW5z
aXRpb24obV9ncmFwaC5tX3BsYW4sIGNvZGVCbG9jaygpLCBtX25vZGUpOworICAgICB9CisKKyAg
ICAgdm9pZCBjb21waWxlR2V0QnlJZCgpCisgICAgIHsKKyAgICAgICAgIC8vIFVudHlwZWRVc2Ug
aXMgYSBiaXQgaGFyZGVyIHRvIHJlYXNvbiBhYm91dCBhbmQgSSdtIG5vdCBzdXJlIGhvdyBiZXN0
IHRvIGRvIGl0LCB5ZXQuCisgICAgICAgICAvLyBCYXNpY2FsbHkgd2UgbmVlZCB0byBlbWl0IGEg
Y2VsbCBicmFuY2ggdGhhdCB0YWtlcyB5b3UgdG8gdGhlIHNsb3cgcGF0aCwgYnV0IHRoZSBzbG93
CisgICAgICAgICAvLyBwYXRoIGlzIGdlbmVyYXRlZCBieSB0aGUgSUMgZ2VuZXJhdG9yIHNvIHdl
IGNhbid0IGp1bXAgdG8gaXQgZnJvbSBoZXJlLiBBbmQgdGhlIElDCisgICAgICAgICAvLyBnZW5l
cmF0b3IgY3VycmVudGx5IGRvZXNuJ3Qga25vdyBob3cgdG8gZW1pdCBzdWNoIGEgYnJhbmNoLiBT
bywgZm9yIG5vdywgd2UganVzdAorICAgICAgICAgLy8gcmVzdHJpY3QgdGhpcyB0byBDZWxsVXNl
LgorICAgICAgICAgQVNTRVJUKG1fbm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpID09IENlbGxVc2Up
OworCisgICAgICAgICBMVmFsdWUgYmFzZSA9IGxvd0NlbGwobV9ub2RlLT5jaGlsZDEoKSk7Cisg
ICAgICAgICBTdHJpbmdJbXBsKiB1aWQgPSBtX2dyYXBoLmlkZW50aWZpZXJzKClbbV9ub2RlLT5p
ZGVudGlmaWVyTnVtYmVyKCldOworICAgICAKKyAgICAgICAgIC8vIEFyZ3VtZW50czogaWQsIGJ5
dGVzLCB0YXJnZXQsIG51bUFyZ3MsIGFyZ3MuLi4KKyAgICAgICAgIHVuc2lnbmVkIHN0YWNrbWFw
SUQgPSBtX3N0YWNrbWFwSURzKys7CisgICAgICAgICBzZXRKU1ZhbHVlKG1fb3V0LmNhbGwoCisg
ICAgICAgICAgICAgbV9vdXQud2Via2l0UGF0Y2hwb2ludEludHJpbnNpYygpLAorICAgICAgICAg
ICAgIG1fb3V0LmNvbnN0SW50MzIoc3RhY2ttYXBJRCksIG1fb3V0LmNvbnN0SW50MzIoc2l6ZU9m
R2V0QnlJZCgpKSwKKyAgICAgICAgICAgICBjb25zdE51bGwobV9vdXQucmVmOCksIG1fb3V0LmNv
bnN0SW50MzIoMiksIG1fY2FsbEZyYW1lLCBiYXNlKSk7CisgICAgICAgICAKKyAgICAgICAgIG1f
ZnRsU3RhdGUuZ2V0QnlJZHMuYXBwZW5kKEdldEJ5SWREZXNjcmlwdG9yKHN0YWNrbWFwSUQsIG1f
bm9kZS0+Y29kZU9yaWdpbiwgdWlkKSk7CiAgICAgfQogICAgIAogICAgIHZvaWQgY29tcGlsZUdl
dEJ1dHRlcmZseSgpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFNsb3dQYXRo
Q2FsbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExTbG93
UGF0aENhbGwuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9G
VExTbG93UGF0aENhbGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTYxIEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJGVExTbG93UGF0aENhbGwuaCIKKworI2lmIEVOQUJMRShGVExfSklU
KQorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEZUTCB7CisKK25hbWVzcGFjZSB7CisKKy8v
IFRoaXMgd2lsbCBiZSBhbiBSQUlJIHRoaW5neSB0aGF0IHdpbGwgc2V0IHVwIHRoZSBuZWNlc3Nh
cnkgc3RhY2sgc2l6ZXMgYW5kIG9mZnNldHMgYW5kIHN1Y2guCitjbGFzcyBDYWxsQ29udGV4dCB7
CitwdWJsaWM6CisgICAgQ2FsbENvbnRleHQoCisgICAgICAgIFN0YXRlJiBzdGF0ZSwgY29uc3Qg
UmVnaXN0ZXJTZXQmIHVzZWRSZWdpc3RlcnMsIENDYWxsSGVscGVycyYgaml0LAorICAgICAgICB1
bnNpZ25lZCBudW1BcmdzLCBHUFJSZWcgcmV0dXJuUmVnaXN0ZXIpCisgICAgICAgIDogbV9zdGF0
ZShzdGF0ZSkKKyAgICAgICAgLCBtX3VzZWRSZWdpc3RlcnModXNlZFJlZ2lzdGVycykKKyAgICAg
ICAgLCBtX2ppdChqaXQpCisgICAgICAgICwgbV9udW1BcmdzKG51bUFyZ3MpCisgICAgICAgICwg
bV9yZXR1cm5SZWdpc3RlcihyZXR1cm5SZWdpc3RlcikKKyAgICB7CisgICAgICAgIC8vIFdlIGRv
bid0IGNhcmUgdGhhdCB5b3UncmUgdXNpbmcgY2FsbGVlLXNhdmUgb3Igc3RhY2sgcmVnaXN0ZXJz
LgorICAgICAgICBtX3VzZWRSZWdpc3RlcnMuZXhjbHVkZShSZWdpc3RlclNldDo6c3RhY2tSZWdp
c3RlcnMoKSk7CisgICAgICAgIG1fdXNlZFJlZ2lzdGVycy5leGNsdWRlKFJlZ2lzdGVyU2V0Ojpj
YWxsZWVTYXZlUmVnaXN0ZXJzKCkpOworICAgICAgICAKKyAgICAgICAgLy8gVGhlIHJldHVybiBy
ZWdpc3RlciBkb2Vzbid0IG5lZWQgdG8gYmUgc2F2ZWQuCisgICAgICAgIGlmIChtX3JldHVyblJl
Z2lzdGVyICE9IEludmFsaWRHUFJSZWcpCisgICAgICAgICAgICBtX3VzZWRSZWdpc3RlcnMuZXhj
bHVkZShtX3JldHVyblJlZ2lzdGVyKTsKKyAgICAgICAgCisgICAgICAgIC8vIFRoaXMgY29kZSBy
ZWxpZXMgb24gdXMgYmVpbmcgNjQtYml0LiBGVEwgaXMgY3VycmVudGx5IGFsd2F5cyA2NC1iaXQu
CisgICAgICAgIHNpemVfdCB3b3JkU2l6ZSA9IDg7CisgICAgICAgIAorICAgICAgICBzaXplX3Qg
c3RhY2tCeXRlc05lZWRlZEZvclJldHVybkFkZHJlc3MgPSB3b3JkU2l6ZTsKKyAgICAgICAgCisg
ICAgICAgIHNpemVfdCBvZmZzZXRUb1NhdmluZ0FyZWEgPQorICAgICAgICAgICAgKHN0ZDo6bWF4
KG1fbnVtQXJncywgR1BSSW5mbzo6bnVtYmVyT2ZBcmd1bWVudFJlZ2lzdGVyKSAtIEdQUkluZm86
Om51bWJlck9mQXJndW1lbnRSZWdpc3RlcnMpICogd29yZFNpemU7CisgICAgICAgIAorICAgICAg
ICB1bnNpZ25lZCBudW1Bcmd1bWVudFJlZ2lzdGVyc1RoYXROZWVkU2F2aW5nID0gMDsKKyAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gc3RkOjptaW4oR1BSSW5mbzo6bnVtYmVyT2ZBcmd1bWVudFJl
Z2lzdGVycywgbnVtQXJncyk7IGktLTspIHsKKyAgICAgICAgICAgIGlmIChtX3VzZWRSZWdpc3Rl
cnMuZ2V0KEdQUkluZm86OnRvQXJndW1lbnRSZWdpc3RlcihpKSkpCisgICAgICAgICAgICAgICAg
bnVtQXJndW1lbnRSZWdpc3RlcnNUaGF0TmVlZFNhdmluZysrOworICAgICAgICB9CisgICAgICAg
IAorICAgICAgICBzaXplX3Qgb2Zmc2V0VG9UaHVua1NhdmluZ0FyZWEgPQorICAgICAgICAgICAg
b2Zmc2V0VG9TYXZpbmdBcmVhICsKKyAgICAgICAgICAgIG51bUFyZ3VtZW50UmVnaXN0ZXJzVGhh
dE5lZWRTYXZpbmcgKiB3b3JkU2l6ZTsKKyAgICAgICAgCisgICAgICAgIG1fc3RhY2tCeXRlc05l
ZWRlZCA9CisgICAgICAgICAgICBvZmZzZXRUb1RodW5rU2F2aW5nQXJlYSArCisgICAgICAgICAg
ICBzdGFja0J5dGVzTmVlZGVkRm9yUmV0dXJuQWRkcmVzcyArCisgICAgICAgICAgICAobV91c2Vk
UmVnaXN0ZXJzLm51bWJlck9mU2V0UmVnaXN0ZXJzKCkgLSBudW1Bcmd1bWVudFJlZ2lzdGVyc1Ro
YXROZWVkU2F2aW5nKSAqIHdvcmRTaXplOworICAgICAgICAKKyAgICAgICAgc2l6ZV90IHN0YWNr
QWxpZ25tZW50ID0gMTY7CisgICAgICAgIAorICAgICAgICBtX3N0YWNrQnl0ZXNOZWVkZWQgPSAo
bV9zdGFja0J5dGVzTmVlZGVkICsgc3RhY2tBbGlnbm1lbnQgLSAxKSAmIH5zdGFja0FsaWdubWVu
dDsKKyAgICAgICAgCisgICAgICAgIG1faml0LnN1YlB0cihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJ
bW0zMihtX3N0YWNrQnl0ZXNOZWVkZWQpLCBDQ2FsbEhlbHBlcnM6OnN0YWNrUG9pbnRlclJlZ2lz
dGVyKTsKKyAgICAgICAgCisgICAgICAgIG1fdGh1bmtTYXZlU2V0ID0gbV91c2VkUmVnaXN0ZXJz
OworICAgICAgICAKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gc3RkOjptaW4oR1BSSW5mbzo6
bnVtYmVyT2ZBcmd1bWVudFJlZ2lzdGVycywgbnVtQXJncyk7IGktLTspIHsKKyAgICAgICAgICAg
IGlmICghbV91c2VkUmVnaXN0ZXJzLmdldChHUFJJbmZvOjp0b0FyZ3VtZW50UmVnaXN0ZXIoaSkp
KQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgR1BSUmVnIHJlZyA9IEdQ
UkluZm86OnRvQXJndW1lbnRSZWdpc3RlcihpKTsKKyAgICAgICAgICAgIG1faml0LnN0b3JlUHRy
KHJlZywgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKENDYWxsSGVscGVyczo6c3RhY2tQb2ludGVyUmVn
aXN0ZXIsIG9mZnNldFRvU2F2aW5nQXJlYSArIGkgKiB3b3JkU2l6ZSkpOworICAgICAgICAgICAg
bV90aHVua1NhdmVTZXQuY2xlYXIocmVnKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAg
bV9vZmZzZXQgPSBvZmZzZXRUb1RodW5rU2F2aW5nQXJlYTsKKyAgICB9CisgICAgCisgICAgfkNh
bGxDb250ZXh0KCkKKyAgICB7CisgICAgICAgIG1faml0Lm1vdmUoR1BSSW5mbzo6cmV0dXJuVmFs
dWVHUFIsIG1fcmV0dXJuUmVnaXN0ZXIpOworICAgICAgICAKKyAgICAgICAgZm9yICh1bnNpZ25l
ZCBpID0gc3RkOjptaW4oR1BSSW5mbzo6bnVtYmVyT2ZBcmd1bWVudFJlZ2lzdGVycywgbV9udW1B
cmdzKTsgaS0tOykgeworICAgICAgICAgICAgaWYgKCFtX3VzZWRSZWdpc3RlcnMuZ2V0KEdQUklu
Zm86OnRvQXJndW1lbnRSZWdpc3RlcihpKSkpCisgICAgICAgICAgICAgICAgY29udGludWU7Cisg
ICAgICAgICAgICBHUFJSZWcgcmVnID0gR1BSSW5mbzo6dG9Bcmd1bWVudFJlZ2lzdGVyKGkpOwor
ICAgICAgICAgICAgbV9qaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoQ0NhbGxIZWxw
ZXJzOjpzdGFja1BvaW50ZXJSZWdpc3Rlciwgb2Zmc2V0VG9TYXZpbmdBcmVhICsgaSAqIHdvcmRT
aXplKSwgcmVnKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgbV9qaXQuYWRkUHRyKEND
YWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKG1fc3RhY2tCeXRlc05lZWRlZCksIENDYWxsSGVscGVy
czo6c3RhY2tQb2ludGVyUmVnaXN0ZXIpOworICAgIH0KKyAgICAKKyAgICBSZWdpc3RlclNldCB1
c2VkUmVnaXN0ZXJzKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX3RodW5rU2F2ZVNl
dDsKKyAgICB9CisgICAgCisgICAgcHRyZGlmZl90IG9mZnNldCgpIGNvbnN0CisgICAgeworICAg
ICAgICByZXR1cm4gbV9vZmZzZXQ7CisgICAgfQorICAgIAorICAgIFNsb3dQYXRoQ2FsbEtleSBr
ZXlXaXRoVGFyZ2V0KHZvaWQqIGNhbGxUYXJnZXQpIGNvbnN0CisgICAgeworICAgICAgICByZXR1
cm4gU2xvd1BhdGhDYWxsS2V5KHVzZWRSZWdpc3RlcnMoKSwgY2FsbFRhcmdldCwgb2Zmc2V0KCkp
OworICAgIH0KKyAgICAKKyAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBtYWtlQ2FsbCh2b2lkKiBj
YWxsVGFyZ2V0KSBjb25zdAorICAgIHsKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgcmVz
dWx0ID0gbV9qaXQuY2FsbCgpOworICAgICAgICBzdGF0ZS5maW5hbGl6ZXItPnNsb3dQYXRoQ2Fs
bHMuYXBwZW5kKFNsb3dQYXRoQ2FsbCgKKyAgICAgICAgICAgIHJlc3VsdCwga2V5V2l0aFRhcmdl
dChjYWxsVGFyZ2V0KSkpOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICAKK3By
aXZhdGU6CisgICAgU3RhdGUmIG1fc3RhdGU7CisgICAgUmVnaXN0ZXJTZXQgbV91c2VkUmVnaXN0
ZXJzOworICAgIENDYWxsSGVscGVycyBtX2ppdDsKKyAgICB1bnNpZ25lZCBtX251bUFyZ3M7Cisg
ICAgc2l6ZV90IG1fc3RhY2tCeXRlc05lZWRlZDsKKyAgICBHUFJSZWcgbV9yZXR1cm5SZWdpc3Rl
cjsKKyAgICBSZWdpc3RlclNldCBtX29mZnNldDsKK307CisKK30gLy8gYW5vbnltb3VzIG5hbWVz
cGFjZQorCitNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKAorICAgIFN0YXRlJiBz
dGF0ZSwgY29uc3QgUmVnaXN0ZXJTZXQmIHVzZWRSZWdpc3RlcnMsIENDYWxsSGVscGVycyYgaml0
LCAKKyAgICBKX0pJVE9wZXJhdGlvbl9FU3NpSkkgb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBH
UFJSZWcgY2FsbEZyYW1lUmVnaXN0ZXIsCisgICAgU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZv
LCBHUFJSZWcgb2JqZWN0LCBTdHJpbmdJbXBsKiB1aWQpCit7CisgICAgQ2FsbENvbnRleHQgY29u
dGV4dChzdGF0ZSwgdXNlZFJlZ2lzdGVycywgaml0LCA0LCByZXN1bHQpOworICAgIGppdC5zZXR1
cEFyZ3VtZW50cyhjYWxsRnJhbWVSZWdpc3RlciwgVHJ1c3RlZEltbVB0cihzdHViSW5mbyksIG9i
amVjdCwgVHJ1c3RlZEltbVB0cih1aWQpKTsKKyAgICByZXR1cm4gY29udGV4dC5tYWtlQ2FsbChv
cGVyYXRpb24pOworICAgIC8vIEZJWE1FOiBGVEwgc2hvdWxkIHN1cHBvcnQgZXhjZXB0aW9ucy4K
KyAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTEzNjIyCit9
CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpGVEwKKworI2VuZGlmIC8vIEVOQUJMRShGVExfSklU
KQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFNsb3dQYXRoQ2FsbC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMU2xvd1BhdGhDYWxsLmgJ
KHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFNsb3dQYXRoQ2Fs
bC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBGVExTbG93UGF0aENhbGxfaAorI2Rl
ZmluZSBGVExTbG93UGF0aENhbGxfaAorCisjaWYgRU5BQkxFKEZUTF9KSVQpCisKKyNpbmNsdWRl
ICJGVExTbG93UGF0aENhbGxLZXkuaCIKKyNpbmNsdWRlICJKSVRPcGVyYXRpb25zLmgiCisjaW5j
bHVkZSAiTWFjcm9Bc3NlbWJsZXIuaCIKKyNpbmNsdWRlICJTdHJ1Y3R1cmVTdHViSW5mby5oIgor
CituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEZUTCB7CisKK2NsYXNzIFN0YXRlOworCitjbGFz
cyBTbG93UGF0aENhbGwgeworcHVibGljOgorICAgIFNsb3dQYXRoQ2FsbCgpIHsgfQorICAgIAor
ICAgIFNsb3dQYXRoQ2FsbChNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBjYWxsLCBjb25zdCBTbG93UGF0
aENhbGxLZXkmIGtleSkKKyAgICAgICAgOiBtX2NhbGwoY2FsbCkKKyAgICAgICAgLCBtX2tleShr
ZXkpCisgICAgeworICAgIH0KKyAgICAKKyAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBjYWxsKCkg
Y29uc3QgeyByZXR1cm4gbV9jYWxsOyB9CisgICAgU2xvd1BhdGhDYWxsS2V5IGtleSgpIGNvbnN0
IHsgcmV0dXJuIG1fa2V5OyB9CisgICAgCitwcml2YXRlOgorICAgIE1hY3JvQXNzZW1ibGVyOjpD
YWxsIG1fY2FsbDsKKyAgICBTbG93UGF0aENhbGxLZXkgbV9rZXk7Cit9OworCitNYWNyb0Fzc2Vt
Ymxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKAorICAgIFN0YXRlJiwgY29uc3QgUmVnaXN0ZXJTZXQm
LCBDQ2FsbEhlbHBlcnMmLCBKX0pJVE9wZXJhdGlvbl9FU3NpSkksCisgICAgR1BSUmVnIHJlc3Vs
dCwgR1BSUmVnIGNhbGxGcmFtZVJlZ2lzdGVyLCBTdHJ1Y3R1cmVTdHViSW5mbyosIEdQUlJlZyBv
YmplY3QsCisgICAgU3RyaW5nSW1wbCogdWlkKTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkZU
TAorCisjZW5kaWYgLy8gRU5BQkxFKEZUTF9KSVQpCisKKyNlbmRpZiAvLyBGVExTbG93UGF0aENh
bGxfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFNsb3dQYXRoQ2FsbEtl
eS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExTbG93UGF0
aENhbGxLZXkuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9G
VExTbG93UGF0aENhbGxLZXkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDEgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIkZUTFNsb3dQYXRoQ2FsbEtleS5oIgorCisjaWYgRU5BQkxFKEZU
TF9KSVQpCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgRlRMIHsKKwordm9pZCBTbG93UGF0
aENhbGxLZXk6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQo
Ijx1c2VkUmVnaXN0ZXJzID0gIiwgbV91c2VkUmVnaXN0ZXJzLCAiLCBvZmZzZXQgPSAiICsgbV9v
ZmZzZXQsICIsIGNhbGxUYXJnZXQgPSAiLCBSYXdQb2ludGVyKG1fY2FsbFRhcmdldCksICI+Iik7
Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpGVEwKKworI2VuZGlmIC8vIEVOQUJMRShGVExf
SklUKQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFNsb3dQYXRoQ2FsbEtl
eS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMU2xvd1BhdGhD
YWxsS2V5LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFNs
b3dQYXRoQ2FsbEtleS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTI2IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgRlRMU2xvd1Bh
dGhDYWxsS2V5X2gKKyNkZWZpbmUgRlRMU2xvd1BhdGhDYWxsS2V5X2gKKworI2lmIEVOQUJMRShG
VExfSklUKQorCisjaW5jbHVkZSAiUmVnaXN0ZXJTZXQuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5h
bWVzcGFjZSBGVEwgeworCisvLyBUaGlzIGlzIHVzZWQgZm9yIGNyZWF0aW5nIHNvbWUgc2FuaXR5
IGluIHNsb3ctcGF0aCBjYWxscyBvdXQgb2YgdGhlIEZUTCdzIGlubGluZQorLy8gY2FjaGVzLiBU
aGUgaWRlYSBpcyB0aGF0IHdlIGRvbid0IHdhbnQgYWxsIG9mIHRoZSByZWdpc3RlciBzYXZlL3Jl
c3RvcmUgc3R1ZmYgdG8KKy8vIGJlIGdlbmVyYXRlZCBhdCBlYWNoIElDIHNpdGUuIEluc3RlYWQs
IHRoZSBJQyBzbG93IHBhdGggY2FsbCBzaXRlIHdpbGwganVzdCBzYXZlCisvLyB0aGUgcmVnaXN0
ZXJzIG5lZWRlZCBmb3IgdGhlIGFyZ3VtZW50cy4gSXQgd2lsbCBhcnJhbmdlIGZvciB0aGVyZSB0
byBiZSBlbm91Z2gKKy8vIHNwYWNlIG9uIHRvcCBvZiBzdGFjayB0byBzYXZlIHRoZSByZW1haW5p
bmcgcmVnaXN0ZXJzIGFuZCB0aGUgcmV0dXJuIFBDLiBUaGVuIGl0CisvLyB3aWxsIGNhbGwgYSBz
aGFyZWQgdGh1bmsgdGhhdCB3aWxsIHNhdmUgdGhlIHJlbWFpbmluZyByZWdpc3RlcnMuIFRoYXQg
dGh1bmsgbmVlZHMKKy8vIHRvIGtub3cgdGhlIHN0YWNrIG9mZnNldCBhdCB3aGljaCB0aGluZ3Mg
Z2V0IHNhdmVkIGFsb25nIHdpdGggdGhlIGNhbGwgdGFyZ2V0LgorCisvLyBOb3RlIHRoYXQgdGhl
IG9mZnNldCBpcyAqbm90IGluY2x1ZGluZyogdGhlIHJldHVybiBQQyB0aGF0IHdvdWxkIGJlIHB1
c2hlZCBvbiBYODYuCisKK2NsYXNzIFNsb3dQYXRoQ2FsbEtleSB7CitwdWJsaWM6CisgICAgU2xv
d1BhdGhDYWxsS2V5KCkKKyAgICAgICAgOiBtX2NhbGxUYXJnZXQoMCkKKyAgICAgICAgLCBtX29m
ZnNldCgwKQorICAgIHsKKyAgICB9CisgICAgCisgICAgU2xvd1BhdGhDYWxsS2V5KGNvbnN0IFJl
Z2lzdGVyU2V0JiBzZXQsIHZvaWQqIGNhbGxUYXJnZXQsIHB0cmRpZmZfdCBvZmZzZXQpCisgICAg
ICAgIDogbV91c2VkUmVnaXN0ZXJzKHNldCkKKyAgICAgICAgLCBtX2NhbGxUYXJnZXQoY2FsbFRh
cmdldCkKKyAgICAgICAgLCBtX29mZnNldChvZmZzZXQpCisgICAgeworICAgIH0KKyAgICAKKyAg
ICBjb25zdCBSZWdpc3RlclNldCYgdXNlZFJlZ2lzdGVycygpIGNvbnN0IHsgcmV0dXJuIG1fdXNl
ZFJlZ2lzdGVyczsgfQorICAgIHZvaWQqIGNhbGxUYXJnZXQoKSBjb25zdCB7IHJldHVybiBtX2Nh
bGxUYXJnZXQ7IH0KKyAgICBwdHJkaWZmX3Qgb2Zmc2V0KCkgY29uc3QgeyByZXR1cm4gbV9vZmZz
ZXQ7IH0KKyAgICAKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKKyAgICAKKyAg
ICBlbnVtIEVtcHR5VmFsdWVUYWcgeyBFbXB0eVZhbHVlIH07CisgICAgZW51bSBEZWxldGVkVmFs
dWVUYWcgeyBEZWxldGVkVmFsdWUgfTsKKyAgICAKKyAgICBTbG93UGF0aENhbGxLZXkoRW1wdHlW
YWx1ZVRhZykKKyAgICAgICAgOiBtX3VzZWRSZWdpc3RlcnMoUmVnaXN0ZXJTZXQ6OkVtcHR5VmFs
dWUpCisgICAgICAgICwgbV9jYWxsVGFyZ2V0KDApCisgICAgICAgICwgbV9vZmZzZXQoMCkKKyAg
ICB7CisgICAgfQorICAgIAorICAgIFNsb3dQYXRoQ2FsbEtleShEZWxldGVkVmFsdWVUYWcpCisg
ICAgICAgIDogbV91c2VkUmVnaXN0ZXJzKEJpdFZlY3Rvcjo6RGVsZXRlZFZhbHVlKQorICAgICAg
ICAsIG1fY2FsbFRhcmdldCgwKQorICAgICAgICAsIG1fb2Zmc2V0KDApCisgICAgeworICAgIH0K
KyAgICAKKyAgICBib29sIGlzRW1wdHlWYWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdXNlZFJlZ2lz
dGVycy5pc0VtcHR5VmFsdWUoKTsgfQorICAgIGJvb2wgaXNEZWxldGVkVmFsdWUoKSBjb25zdCB7
IHJldHVybiBtX3VzZWRSZWdpc3RlcnMuaXNEZWxldGVkVmFsdWUoKTsgfQorICAgIAorICAgIGJv
b2wgb3BlcmF0b3I9PShjb25zdCBTbG93UGF0aENhbGxLZXkmIG90aGVyKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIG1fdXNlZFJlZ2lzdGVycyA9PSBvdGhlci5tX3VzZWRSZWdpc3RlcnMKKyAgICAg
ICAgICAgICYmIG1fY2FsbFRhcmdldCA9PSBvdGhlci5tX2NhbGxUYXJnZXQKKyAgICAgICAgICAg
ICYmIG1fb2Zmc2V0ID09IG90aGVyLm1fb2Zmc2V0OworICAgIH0KKyAgICB1bnNpZ25lZCBoYXNo
KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX3VzZWRSZWdpc3RlcnMuaGFzaCgpICsg
UHRySGFzaDx2b2lkKj46Omhhc2gobV9jYWxsVGFyZ2V0KSArIG1fb2Zmc2V0OworICAgIH0KKwor
cHJpdmF0ZToKKyAgICBSZWdpc3RlclNldCBtX3VzZWRSZWdpc3RlcnM7CisgICAgdm9pZCogbV9j
YWxsVGFyZ2V0OworICAgIHB0cmRpZmZfdCBtX29mZnNldDsKK307CisKK3N0cnVjdCBTbG93UGF0
aENhbGxLZXlIYXNoIHsKKyAgICBzdGF0aWMgdW5zaWduZWQgaGFzaChjb25zdCBTbG93UGF0aENh
bGxLZXkmIGtleSkgeyByZXR1cm4ga2V5Lmhhc2goKTsgfQorICAgIHN0YXRpYyBib29sIGVxdWFs
KGNvbnN0IFNsb3dQYXRoQ2FsbEtleSYgYSwgY29uc3QgU2xvd1BhdGhDYWxsS2V5JiBiKSB7IHJl
dHVybiBhID09IGI7IH0KKyAgICBzdGF0aWMgY29uc3QgYm9vbCBzYWZlVG9Db21wYXJlVG9FbXB0
eU9yRGVsZXRlZCA9IGZhbHNlOworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkZUTAorCitu
YW1lc3BhY2UgV1RGIHsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IERlZmF1bHRIYXNo
OwordGVtcGxhdGU8PiBzdHJ1Y3QgRGVmYXVsdEhhc2g8SlNDOjpGVEw6OlNsb3dQYXRoQ2FsbEtl
eT4geworICAgIHR5cGVkZWYgSlNDOjpGVEw6OlNsb3dQYXRoQ2FsbEtleUhhc2ggSGFzaDsKK307
CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBIYXNoVHJhaXRzOwordGVtcGxhdGU8PiBz
dHJ1Y3QgSGFzaFRyYWl0czxKU0M6OkZUTDo6U2xvd1BhdGhDYWxsS2V5PiA6IHB1YmxpYyBDdXN0
b21IYXNoVHJhaXRzPEpTQzo6RlRMOjpTbG93UGF0aENhbGxLZXk+IHsgfTsKKworfSAvLyBuYW1l
c3BhY2UgV1RGCisKKyNlbmRpZiAvLyBFTkFCTEUoRlRMX0pJVCkKKworI2VuZGlmIC8vIEZUTFNs
b3dQYXRoQ2FsbEtleV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMU3Rh
Y2tNYXBzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFN0
YWNrTWFwcy5jcHAJKHJldmlzaW9uIDE1NzcwNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9m
dGwvRlRMU3RhY2tNYXBzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzMsNiArNzMsMTEgQEAgdm9p
ZCBTdGFja01hcHM6OkxvY2F0aW9uOjpkdW1wKFByaW50U3RyZQogICAgIG91dC5wcmludCgiKCIs
IGtpbmQsICIsIHJlZyIsIGR3YXJmUmVnTnVtLCAiLCAiLCBvZmZzZXQsICIpIik7CiB9CiAKK0dQ
UlJlZyBTdGFja01hcHM6OkxvY2F0aW9uOjpkaXJlY3RHUFIoU3RhY2tNYXBzJiBzdGFja21hcHMp
IGNvbnN0Cit7CisgICAgcmV0dXJuIEZUTDo6TG9jYXRpb246OmZvclN0YWNrbWFwcyhzdGFja21h
cHMsICp0aGlzKS5kaXJlY3RHUFIoKTsKK30KKwogdm9pZCBTdGFja01hcHM6OkxvY2F0aW9uOjpy
ZXN0b3JlSW50bygKICAgICBNYWNyb0Fzc2VtYmxlciYgaml0LCBTdGFja01hcHMmIHN0YWNrbWFw
cywgY2hhciogc2F2ZWRSZWdpc3RlcnMsIEdQUlJlZyByZXN1bHQpIGNvbnN0CiB7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFN0YWNrTWFwcy5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMU3RhY2tNYXBzLmgJKHJldmlzaW9uIDE1NzcwNykK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMU3RhY2tNYXBzLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTY0LDYgKzY0LDcgQEAgc3RydWN0IFN0YWNrTWFwcyB7CiAgICAgICAgIHZvaWQgcGFy
c2UoRGF0YVZpZXcqLCB1bnNpZ25lZCYgb2Zmc2V0KTsKICAgICAgICAgdm9pZCBkdW1wKFByaW50
U3RyZWFtJiBvdXQpIGNvbnN0OwogICAgICAgICAKKyAgICAgICAgR1BSUmVnIGRpcmVjdEdQUihT
dGFja01hcHMmKSBjb25zdDsKICAgICAgICAgdm9pZCByZXN0b3JlSW50byhNYWNyb0Fzc2VtYmxl
ciYsIFN0YWNrTWFwcyYsIGNoYXIqIHNhdmVkUmVnaXN0ZXJzLCBHUFJSZWcgcmVzdWx0KSBjb25z
dDsKICAgICB9OwogICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExTdGF0
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMU3RhdGUuaAko
cmV2aXNpb24gMTU3NzA3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExTdGF0ZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC01Niw2ICs1Niw3IEBAIHB1YmxpYzoKICAgICBSZWZQdHI8SklU
Q29kZT4gaml0Q29kZTsKICAgICBHZW5lcmF0ZWRGdW5jdGlvbiBnZW5lcmF0ZWRGdW5jdGlvbjsK
ICAgICBKSVRGaW5hbGl6ZXIqIGZpbmFsaXplcjsKKyAgICBTZWdtZW50ZWRWZWN0b3I8R2V0QnlJ
ZERlc2NyaXB0b3I+IGdldEJ5SWRzOwogICAgIFZlY3RvcjxDU3RyaW5nPiBjb2RlU2VjdGlvbk5h
bWVzOwogICAgIFZlY3RvcjxDU3RyaW5nPiBkYXRhU2VjdGlvbk5hbWVzOwogICAgIFJlZkNvdW50
ZWRBcnJheTxMU2VjdGlvbldvcmQ+IHN0YWNrbWFwc1NlY3Rpb247CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZnRsL0ZUTFRodW5rcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Z0bC9GVExUaHVua3MuY3BwCShyZXZpc2lvbiAxNTc3MDcpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZnRsL0ZUTFRodW5rcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0NCw2
ICsxNDQsNjcgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIG9zckV4aXRHZW5lcmF0aW9uVwogICAg
IHJldHVybiBGSU5BTElaRV9DT0RFKHBhdGNoQnVmZmVyLCAoIkZUTCBPU1IgZXhpdCBnZW5lcmF0
aW9uIHRodW5rIGZvciBjYWxsRnJhbWUgYXQgJXMiLCB0b0NTdHJpbmcobG9jYXRpb24pLmRhdGEo
KSkpOwogfQogCitNYWNyb0Fzc2VtYmxlckNvZGVSZWYgc2xvd1BhdGhDYWxsVGh1bmtHZW5lcmF0
b3IoVk0mLCBjb25zdCBTbG93UGF0aENhbGxLZXkmIGtleSkKK3sKKyAgICBBc3NlbWJseUhlbHBl
cnMgaml0KCZ2bSwgMCk7CisgICAgCisgICAgLy8gV2Ugd2FudCB0byBzYXZlIHRoZSBnaXZlbiBy
ZWdpc3RlcnMgYXQgdGhlIGdpdmVuIG9mZnNldCwgdGhlbiB3ZSB3YW50IHRvIHNhdmUgdGhlCisg
ICAgLy8gb2xkIHJldHVybiBhZGRyZXNzIHNvbWV3aGVyZSBwYXN0IHRoYXQgb2Zmc2V0LCBhbmQg
dGhlbiBmaW5hbGx5IHdlIHdhbnQgdG8gbWFrZSB0aGUKKyAgICAvLyBjYWxsLgorICAgIAorICAg
IHNpemVfdCBjdXJyZW50T2Zmc2V0ID0ga2V5Lm9mZnNldCgpICsgc2l6ZW9mKHZvaWQqKTsKKyAg
ICAKKyNpZiBDUFUoWDg2KSB8fCBDUFUoWDg2XzY0KQorICAgIGN1cnJlbnRPZmZzZXQgKz0gc2l6
ZW9mKHZvaWQqKTsKKyNlbmRpZgorICAgIAorICAgIGZvciAoTWFjcm9Bc3NlbWJsZXI6OlJlZ2lz
dGVySUQgcmVnID0gTWFjcm9Bc3NlbWJsZXI6OmZpcnN0UmVnaXN0ZXIoKTsgcmVnIDw9IE1hY3Jv
QXNzZW1ibGVyOjpsYXN0UmVnaXN0ZXIoKTsgcmVnID0gc3RhdGljX2Nhc3Q8TWFjcm9Bc3NlbWJs
ZXI6OlJlZ2lzdGVySUQ+KHJlZyArIDEpKSB7CisgICAgICAgIGlmICgha2V5LnVzZWRSZWdpc3Rl
cnMoKS5nZXQocmVnKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBqaXQuc3RvcmVQ
dHIocmVnLCBBc3NlbWJseUhlbHBlcnM6OkFkZHJlc3MoTWFjcm9Bc3NlbWJsZXI6OnN0YWNrUG9p
bnRlclJlZ2lzdGVyLCBjdXJyZW50T2Zmc2V0KSk7CisgICAgICAgIGN1cnJlbnRPZmZzZXQgKz0g
c2l6ZW9mKHZvaWQqKTsKKyAgICB9CisgICAgCisgICAgZm9yIChNYWNyb0Fzc2VtYmxlcjo6RlBS
ZWdpc3RlcklEIHJlZyA9IE1hY3JvQXNzZW1ibGVyOjpmaXJzdEZQUmVnaXN0ZXIoKTsgcmVnIDw9
IE1hY3JvQXNzZW1ibGVyOjpsYXN0RlBSZWdpc3RlcigpOyByZWcgPSBzdGF0aWNfY2FzdDxNYWNy
b0Fzc2VtYmxlcjo6RlBSZWdpc3RlcklEPihyZWcgKyAxKSkgeworICAgICAgICBpZiAoIWtleS51
c2VkUmVnaXN0ZXJzKCkuZ2V0KHJlZykpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAg
aml0LnN0b3JlRG91YmxlKHJlZywgQXNzZW1ibHlIZWxwZXJzOjpBZGRyZXNzKE1hY3JvQXNzZW1i
bGVyOjpzdGFja1BvaW50ZXJSZWdpc3RlciwgY3VycmVudE9mZnNldCkpOworICAgICAgICBjdXJy
ZW50T2Zmc2V0ICs9IHNpemVvZihkb3VibGUpOworICAgIH0KKyAgICAKKyAgICBqaXQucHJlc2Vy
dmVSZXR1cm5BZGRyZXNzQWZ0ZXJDYWxsKEdQUkluZm86Om5vbkFyZ0dQUjApOworICAgIGppdC5z
dG9yZVB0cihHUFJJbmZvOjpub25BcmdHUFIwLCBBc3NlbWJseUhlbHBlcnM6OkFkZHJlc3MoTWFj
cm9Bc3NlbWJsZXI6OnN0YWNrUG9pbnRlclJlZ2lzdGVyLCBrZXkub2Zmc2V0KCkpKTsKKyAgICAK
KyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsID0gaml0LmNhbGwoKTsKKyAgICAKKyAgICBqaXQu
bG9hZFB0cihBc3NlbWJseUhlbHBlcnM6OkFkZHJlc3MoTWFjcm9Bc3NlbWJsZXI6OnN0YWNrUG9p
bnRlclJlZ2lzdGVyLCBrZXkub2Zmc2V0KCkpLCBHUFJJbmZvOjpub25QcmVzZXJ2ZWROb25SZXR1
cm5HUFIpOworICAgIGppdC5yZXN0b3JlUmV0dXJuQWRkcmVzc0JlZm9yZVJldHVybihHUFJJbmZv
Ojpub25QcmVzZXJ2ZWROb25SZXR1cm5HUFIpOworICAgIAorICAgIGZvciAoTWFjcm9Bc3NlbWJs
ZXI6OkZQUmVnaXN0ZXJJRCByZWcgPSBNYWNyb0Fzc2VtYmxlcjo6bGFzdEZQUmVnaXN0ZXIoKTsg
OyByZWcgPSBzdGF0aWNfY2FzdDxNYWNyb0Fzc2VtYmxlcjo6RlBSZWdpc3RlcklEPihyZWcgLSAx
KSkgeworICAgICAgICBpZiAoIWtleS51c2VkUmVnaXN0ZXJzKCkuZ2V0KHJlZykpCisgICAgICAg
ICAgICBjb250aW51ZTsKKyAgICAgICAgY3VycmVudE9mZnNldCAtPSBzaXplb2YoZG91YmxlKTsK
KyAgICAgICAgaml0LmxvYWREb3VibGUoQXNzZW1ibHlIZWxwZXJzOjpBZGRyZXNzKE1hY3JvQXNz
ZW1ibGVyOjpzdGFja1BvaW50ZXJSZWdpc3RlciwgY3VycmVudE9mZnNldCksIHJlZyk7CisgICAg
ICAgIGlmIChyZWcgPT0gTWFjcm9Bc3NlbWJsZXI6OmZpcnN0RlBSZWdpc3RlcigpKQorICAgICAg
ICAgICAgYnJlYWs7CisgICAgfQorICAgIAorICAgIGZvciAoTWFjcm9Bc3NlbWJsZXI6OlJlZ2lz
dGVySUQgcmVnID0gTWFjcm9Bc3NlbWJsZXI6Omxhc3RSZWdpc3RlcigpOyA7IHJlZyA9IHN0YXRp
Y19jYXN0PE1hY3JvQXNzZW1ibGVyOjpSZWdpc3RlcklEPihyZWcgLSAxKSkgeworICAgICAgICBp
ZiAoIWtleS51c2VkUmVnaXN0ZXJzKCkuZ2V0KHJlZykpCisgICAgICAgICAgICBjb250aW51ZTsK
KyAgICAgICAgY3VycmVudE9mZnNldCAtPSBzaXplb2Yodm9pZCopOworICAgICAgICBqaXQubG9h
ZFB0cihBc3NlbWJseUhlbHBlcnM6OkFkZHJlc3MoTWFjcm9Bc3NlbWJsZXI6OnN0YWNrUG9pbnRl
clJlZ2lzdGVyLCBjdXJyZW50T2Zmc2V0KSwgcmVnKTsKKyAgICAgICAgaWYgKHJlZyA9PSBNYWNy
b0Fzc2VtYmxlcjo6Zmlyc3RSZWdpc3RlcigpKQorICAgICAgICAgICAgYnJlYWs7CisgICAgfQor
ICAgIAorICAgIGppdC5yZXQoKTsKKworICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIodm0sICZq
aXQsIEdMT0JBTF9USFVOS19JRCk7CisgICAgcGF0Y2hCdWZmZXIubGluayhjYWxsLCBrZXkuY2Fs
bFRhcmdldCgpKTsKKyAgICByZXR1cm4gRklOQUxJWkVfQ09ERShwYXRjaEJ1ZmZlciwgKCJGVEwg
c2xvdyBwYXRoIGNhbGwgdGh1bmsgZm9yICVzIiwgdG9DU3RyaW5nKGtleSkuZGF0YSgpKSk7Cit9
CisKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpGVEwKIAogI2VuZGlmIC8vIEVOQUJMRShGVExfSklU
KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExUaHVua3MuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFRodW5rcy5oCShyZXZpc2lvbiAxNTc3
MDcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFRodW5rcy5oCSh3b3JraW5nIGNv
cHkpCkBAIC0zMSw2ICszMSw3IEBACiAjaWYgRU5BQkxFKEZUTF9KSVQpCiAKICNpbmNsdWRlICJG
VExMb2NhdGlvbi5oIgorI2luY2x1ZGUgIkZUTFNsb3dQYXRoQ2FsbEtleS5oIgogI2luY2x1ZGUg
Ik1hY3JvQXNzZW1ibGVyQ29kZVJlZi5oIgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAKQEAg
LTQzLDYgKzQ0LDcgQEAgbmFtZXNwYWNlIEZUTCB7CiBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgb3Ny
RXhpdEdlbmVyYXRpb25XaXRob3V0U3RhY2tNYXBUaHVua0dlbmVyYXRvcihWTSopOwogCiBNYWNy
b0Fzc2VtYmxlckNvZGVSZWYgb3NyRXhpdEdlbmVyYXRpb25XaXRoU3RhY2tNYXBUaHVua0dlbmVy
YXRvcihWTSYsIGNvbnN0IExvY2F0aW9uJik7CitNYWNyb0Fzc2VtYmxlckNvZGVSZWYgc2xvd1Bh
dGhDYWxsVGh1bmtHZW5lcmF0b3IoVk0mLCBjb25zdCBTbG93UGF0aENhbGxLZXkmKTsKIAogdGVt
cGxhdGU8dHlwZW5hbWUgTWFwVHlwZSwgdHlwZW5hbWUgS2V5VHlwZSwgdHlwZW5hbWUgR2VuZXJh
dG9yVHlwZT4KIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBnZW5lcmF0ZUlmTmVjZXNzYXJ5KApAQCAt
NjUsOCArNjcsMTUgQEAgcHVibGljOgogICAgICAgICAgICAgdm0sIG1fb3NyRXhpdFRodW5rcywg
bG9jYXRpb24sIG9zckV4aXRHZW5lcmF0aW9uV2l0aFN0YWNrTWFwVGh1bmtHZW5lcmF0b3IpOwog
ICAgIH0KICAgICAKKyAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgZ2V0U2xvd1BhdGhDYWxsVGh1
bmsoVk0mIHZtLCBjb25zdCBTbG93UGF0aENhbGxLZXkmIGtleSkKKyAgICB7CisgICAgICAgIHJl
dHVybiBnZW5lcmF0ZUlmTmVjZXNzYXJ5KAorICAgICAgICAgICAgdm0sIG1fc2xvd1BhdGhDYWxs
VGh1bmtzLCBrZXksIHNsb3dQYXRoQ2FsbFRodW5rR2VuZXJhdG9yKTsKKyAgICB9CisgICAgCiBw
cml2YXRlOgogICAgIEhhc2hNYXA8TG9jYXRpb24sIE1hY3JvQXNzZW1ibGVyQ29kZVJlZj4gbV9v
c3JFeGl0VGh1bmtzOworICAgIEhhc2hNYXA8U2xvd1BhdGhDYWxsS2V5LCBNYWNyb0Fzc2VtYmxl
ckNvZGVSZWY+IG1fc2xvd1BhdGhDYWxsVGh1bmtzOwogfTsKIAogfSB9IC8vIG5hbWVzcGFjZSBK
U0M6OkZUTApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9HUFJJbmZvLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9HUFJJbmZvLmgJKHJldmlzaW9uIDE1
NzcwNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvR1BSSW5mby5oCSh3b3JraW5nIGNv
cHkpCkBAIC0zNzgsNyArMzc4LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBjb25zdCBHUFJSZWcg
cmV0dXJuVmFsdWVHUFIgPSBYODZSZWdpc3RlcnM6OmVheDsgLy8gcmVnVDAKICAgICBzdGF0aWMg
Y29uc3QgR1BSUmVnIHJldHVyblZhbHVlR1BSMiA9IFg4NlJlZ2lzdGVyczo6ZWR4OyAvLyByZWdU
MQogICAgIHN0YXRpYyBjb25zdCBHUFJSZWcgbm9uUHJlc2VydmVkTm9uUmV0dXJuR1BSID0gWDg2
UmVnaXN0ZXJzOjplc2k7Ci0KKyAgICAKICAgICBzdGF0aWMgR1BSUmVnIHRvUmVnaXN0ZXIodW5z
aWduZWQgaW5kZXgpCiAgICAgewogICAgICAgICBBU1NFUlQoaW5kZXggPCBudW1iZXJPZlJlZ2lz
dGVycyk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZUNhY2hlR2Vu
ZXJhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElu
bGluZUNhY2hlR2VuZXJhdG9yLmNwcAkocmV2aXNpb24gMTU3NzA3KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVDYWNoZUdlbmVyYXRvci5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTM0LDEwICszNCwxNiBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAorc3RhdGljIFN0cnVjdHVy
ZVN0dWJJbmZvKiBnYXJiYWdlU3R1YkluZm8oKQoreworICAgIHN0YXRpYyBTdHJ1Y3R1cmVTdHVi
SW5mbyBzdHViSW5mbzsKKyAgICByZXR1cm4gJnN0dWJJbmZvOworfQorCiBKSVRJbmxpbmVDYWNo
ZUdlbmVyYXRvcjo6SklUSW5saW5lQ2FjaGVHZW5lcmF0b3IoQ29kZUJsb2NrKiBjb2RlQmxvY2ss
IENvZGVPcmlnaW4gY29kZU9yaWdpbikKICAgICA6IG1fY29kZUJsb2NrKGNvZGVCbG9jaykKIHsK
LSAgICBtX3N0dWJJbmZvID0gbV9jb2RlQmxvY2stPmFkZFN0dWJJbmZvKCk7CisgICAgbV9zdHVi
SW5mbyA9IG1fY29kZUJsb2NrID8gbV9jb2RlQmxvY2stPmFkZFN0dWJJbmZvKCkgOiBnYXJiYWdl
U3R1YkluZm8oKTsKICAgICBtX3N0dWJJbmZvLT5jb2RlT3JpZ2luID0gY29kZU9yaWdpbjsKIH0K
IApAQCAtNjMsMjkgKzY5LDM0IEBAIEpJVEJ5SWRHZW5lcmF0b3I6OkpJVEJ5SWRHZW5lcmF0b3Io
CiAjZW5kaWYKIH0KIAotdm9pZCBKSVRCeUlkR2VuZXJhdG9yOjpmaW5hbGl6ZShMaW5rQnVmZmVy
JiBsaW5rQnVmZmVyKQordm9pZCBKSVRCeUlkR2VuZXJhdG9yOjpmaW5hbGl6ZShMaW5rQnVmZmVy
JiBmYXN0UGF0aCwgTGlua0J1ZmZlciYgc2xvd1BhdGgpCiB7Ci0gICAgQ29kZUxvY2F0aW9uQ2Fs
bCBjYWxsUmV0dXJuTG9jYXRpb24gPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2YobV9jYWxsKTsKKyAg
ICBDb2RlTG9jYXRpb25DYWxsIGNhbGxSZXR1cm5Mb2NhdGlvbiA9IHNsb3dQYXRoLmxvY2F0aW9u
T2YobV9jYWxsKTsKICAgICBtX3N0dWJJbmZvLT5jYWxsUmV0dXJuTG9jYXRpb24gPSBjYWxsUmV0
dXJuTG9jYXRpb247CiAgICAgbV9zdHViSW5mby0+cGF0Y2guZGVsdGFDaGVja0ltbVRvQ2FsbCA9
IE1hY3JvQXNzZW1ibGVyOjpkaWZmZXJlbmNlQmV0d2VlbkNvZGVQdHIoCi0gICAgICAgIGxpbmtC
dWZmZXIubG9jYXRpb25PZihtX3N0cnVjdHVyZUltbSksIGNhbGxSZXR1cm5Mb2NhdGlvbik7Cisg
ICAgICAgIGZhc3RQYXRoLmxvY2F0aW9uT2YobV9zdHJ1Y3R1cmVJbW0pLCBjYWxsUmV0dXJuTG9j
YXRpb24pOwogICAgIG1fc3R1YkluZm8tPnBhdGNoLmRlbHRhQ2FsbFRvU3RydWN0Q2hlY2sgPSBN
YWNyb0Fzc2VtYmxlcjo6ZGlmZmVyZW5jZUJldHdlZW5Db2RlUHRyKAotICAgICAgICBjYWxsUmV0
dXJuTG9jYXRpb24sIGxpbmtCdWZmZXIubG9jYXRpb25PZihtX3N0cnVjdHVyZUNoZWNrKSk7Cisg
ICAgICAgIGNhbGxSZXR1cm5Mb2NhdGlvbiwgZmFzdFBhdGgubG9jYXRpb25PZihtX3N0cnVjdHVy
ZUNoZWNrKSk7CiAjaWYgVVNFKEpTVkFMVUU2NCkKICAgICBtX3N0dWJJbmZvLT5wYXRjaC5kZWx0
YUNhbGxUb0xvYWRPclN0b3JlID0gTWFjcm9Bc3NlbWJsZXI6OmRpZmZlcmVuY2VCZXR3ZWVuQ29k
ZVB0cigKLSAgICAgICAgY2FsbFJldHVybkxvY2F0aW9uLCBsaW5rQnVmZmVyLmxvY2F0aW9uT2Yo
bV9sb2FkT3JTdG9yZSkpOworICAgICAgICBjYWxsUmV0dXJuTG9jYXRpb24sIGZhc3RQYXRoLmxv
Y2F0aW9uT2YobV9sb2FkT3JTdG9yZSkpOwogI2Vsc2UKICAgICBtX3N0dWJJbmZvLT5wYXRjaC5k
ZWx0YUNhbGxUb1RhZ0xvYWRPclN0b3JlID0gTWFjcm9Bc3NlbWJsZXI6OmRpZmZlcmVuY2VCZXR3
ZWVuQ29kZVB0cigKLSAgICAgICAgY2FsbFJldHVybkxvY2F0aW9uLCBsaW5rQnVmZmVyLmxvY2F0
aW9uT2YobV90YWdMb2FkT3JTdG9yZSkpOworICAgICAgICBjYWxsUmV0dXJuTG9jYXRpb24sIGZh
c3RQYXRoLmxvY2F0aW9uT2YobV90YWdMb2FkT3JTdG9yZSkpOwogICAgIG1fc3R1YkluZm8tPnBh
dGNoLmRlbHRhQ2FsbFRvUGF5bG9hZExvYWRPclN0b3JlID0gTWFjcm9Bc3NlbWJsZXI6OmRpZmZl
cmVuY2VCZXR3ZWVuQ29kZVB0cigKLSAgICAgICAgY2FsbFJldHVybkxvY2F0aW9uLCBsaW5rQnVm
ZmVyLmxvY2F0aW9uT2YobV9sb2FkT3JTdG9yZSkpOworICAgICAgICBjYWxsUmV0dXJuTG9jYXRp
b24sIGZhc3RQYXRoLmxvY2F0aW9uT2YobV9sb2FkT3JTdG9yZSkpOwogI2VuZGlmCiAgICAgbV9z
dHViSW5mby0+cGF0Y2guZGVsdGFDYWxsVG9TbG93Q2FzZSA9IE1hY3JvQXNzZW1ibGVyOjpkaWZm
ZXJlbmNlQmV0d2VlbkNvZGVQdHIoCi0gICAgICAgIGNhbGxSZXR1cm5Mb2NhdGlvbiwgbGlua0J1
ZmZlci5sb2NhdGlvbk9mKG1fc2xvd1BhdGhCZWdpbikpOworICAgICAgICBjYWxsUmV0dXJuTG9j
YXRpb24sIHNsb3dQYXRoLmxvY2F0aW9uT2YobV9zbG93UGF0aEJlZ2luKSk7CiAgICAgbV9zdHVi
SW5mby0+cGF0Y2guZGVsdGFDYWxsVG9Eb25lID0gTWFjcm9Bc3NlbWJsZXI6OmRpZmZlcmVuY2VC
ZXR3ZWVuQ29kZVB0cigKLSAgICAgICAgY2FsbFJldHVybkxvY2F0aW9uLCBsaW5rQnVmZmVyLmxv
Y2F0aW9uT2YobV9kb25lKSk7CisgICAgICAgIGNhbGxSZXR1cm5Mb2NhdGlvbiwgZmFzdFBhdGgu
bG9jYXRpb25PZihtX2RvbmUpKTsKICAgICBtX3N0dWJJbmZvLT5wYXRjaC5kZWx0YUNhbGxUb1N0
b3JhZ2VMb2FkID0gTWFjcm9Bc3NlbWJsZXI6OmRpZmZlcmVuY2VCZXR3ZWVuQ29kZVB0cigKLSAg
ICAgICAgY2FsbFJldHVybkxvY2F0aW9uLCBsaW5rQnVmZmVyLmxvY2F0aW9uT2YobV9wcm9wZXJ0
eVN0b3JhZ2VMb2FkKSk7CisgICAgICAgIGNhbGxSZXR1cm5Mb2NhdGlvbiwgZmFzdFBhdGgubG9j
YXRpb25PZihtX3Byb3BlcnR5U3RvcmFnZUxvYWQpKTsKK30KKwordm9pZCBKSVRCeUlkR2VuZXJh
dG9yOjpmaW5hbGl6ZShMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKQoreworICAgIGZpbmFsaXplKGxp
bmtCdWZmZXIsIGxpbmtCdWZmZXIpOwogfQogCiB2b2lkIEpJVEJ5SWRHZW5lcmF0b3I6OmdlbmVy
YXRlRmFzdFBhdGhDaGVja3MoTWFjcm9Bc3NlbWJsZXImIGppdCwgR1BSUmVnIGJ1dHRlcmZseSkK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lQ2FjaGVHZW5lcmF0b3Iu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZUNhY2hl
R2VuZXJhdG9yLmgJKHJldmlzaW9uIDE1NzcwNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklUSW5saW5lQ2FjaGVHZW5lcmF0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtNjYsOCArNjYs
MTAgQEAgcHVibGljOgogICAgICAgICBtX2NhbGwgPSBjYWxsOwogICAgIH0KICAgICAKKyAgICBN
YWNyb0Fzc2VtYmxlcjo6UGF0Y2hhYmxlSnVtcCBzbG93UGF0aFBhdGNoYWJsZUp1bXAoKSBjb25z
dCB7IHJldHVybiBtX3N0cnVjdHVyZUNoZWNrOyB9CiAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAg
c2xvd1BhdGhKdW1wKCkgY29uc3QgeyByZXR1cm4gbV9zdHJ1Y3R1cmVDaGVjay5tX2p1bXA7IH0K
IAorICAgIHZvaWQgZmluYWxpemUoTGlua0J1ZmZlciYgZmFzdFBhdGhMaW5rQnVmZmVyLCBMaW5r
QnVmZmVyJiBzbG93UGF0aExpbmtCdWZmZXIpOwogICAgIHZvaWQgZmluYWxpemUoTGlua0J1ZmZl
ciYpOwogICAgIAogcHJvdGVjdGVkOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9S
ZWdpc3RlclNldC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9S
ZWdpc3RlclNldC5jcHAJKHJldmlzaW9uIDE1NzcwNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvUmVnaXN0ZXJTZXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMywxMiArMzMsMTkgQEAK
IAogbmFtZXNwYWNlIEpTQyB7CiAKLVJlZ2lzdGVyU2V0IFJlZ2lzdGVyU2V0OjpzcGVjaWFsUmVn
aXN0ZXJzKCkKK1JlZ2lzdGVyU2V0IFJlZ2lzdGVyU2V0OjpzdGFja1JlZ2lzdGVycygpCiB7CiAg
ICAgUmVnaXN0ZXJTZXQgcmVzdWx0OwotICAgIHJlc3VsdC5zZXQoR1BSSW5mbzo6Y2FsbEZyYW1l
UmVnaXN0ZXIpOwogICAgIHJlc3VsdC5zZXQoTWFjcm9Bc3NlbWJsZXI6OnN0YWNrUG9pbnRlclJl
Z2lzdGVyKTsKICAgICByZXN1bHQuc2V0KE1hY3JvQXNzZW1ibGVyOjpmcmFtZVBvaW50ZXJSZWdp
c3Rlcik7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworUmVnaXN0ZXJTZXQgUmVnaXN0ZXJTZXQ6
OnNwZWNpYWxSZWdpc3RlcnMoKQoreworICAgIFJlZ2lzdGVyU2V0IHJlc3VsdDsKKyAgICByZXN1
bHQubWVyZ2Uoc3RhY2tSZWdpc3RlcnMoKSk7CisgICAgcmVzdWx0LnNldChHUFJJbmZvOjpjYWxs
RnJhbWVSZWdpc3Rlcik7CiAjaWYgVVNFKEpTVkFMVUU2NCkKICAgICByZXN1bHQuc2V0KEdQUklu
Zm86OnRhZ1R5cGVOdW1iZXJSZWdpc3Rlcik7CiAgICAgcmVzdWx0LnNldChHUFJJbmZvOjp0YWdN
YXNrUmVnaXN0ZXIpOwpAQCAtNDYsNiArNTMsNTIgQEAgUmVnaXN0ZXJTZXQgUmVnaXN0ZXJTZXQ6
OnNwZWNpYWxSZWdpc3RlcgogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKK1JlZ2lzdGVyU2V0IFJl
Z2lzdGVyU2V0OjpjYWxsZWVTYXZlUmVnaXN0ZXJzKCkKK3sKKyAgICBSZWdpc3RlclNldCByZXN1
bHQ7CisjaWYgVVNFKFg4Nl82NCkKKyAgICByZXN1bHQuc2V0KFg4NlJlZ2lzdGVyczo6cmJ4KTsK
KyAgICByZXN1bHQuc2V0KFg4NlJlZ2lzdGVyczo6cmJwKTsKKyAgICByZXN1bHQuc2V0KFg4NlJl
Z2lzdGVyczo6cjEwKTsKKyAgICByZXN1bHQuc2V0KFg4NlJlZ2lzdGVyczo6cjEyKTsKKyAgICBy
ZXN1bHQuc2V0KFg4NlJlZ2lzdGVyczo6cjEzKTsKKyAgICByZXN1bHQuc2V0KFg4NlJlZ2lzdGVy
czo6cjE0KTsKKyAgICByZXN1bHQuc2V0KFg4NlJlZ2lzdGVyczo6cjE1KTsKKyNlbHNlCisjZXJy
b3IgIlVuc3VwcG9ydGVkIGluc3RydWN0aW9uIHNldCIKKyNlbmRpZgorICAgIHJldHVybiByZXN1
bHQ7Cit9CisKK1JlZ2lzdGVyU2V0IFJlZ2lzdGVyU2V0OjphbGxHUFJzKCkKK3sKKyAgICBSZWdp
c3RlclNldCByZXN1bHQ7CisgICAgZm9yIChNYWNyb0Fzc2VtYmxlcjo6UmVnaXN0ZXJJRCByZWcg
PSBNYWNyb0Fzc2VtYmxlcjo6Zmlyc3RSZWdpc3RlcigpOyByZWcgPD0gTWFjcm9Bc3NlbWJsZXI6
Omxhc3RSZWdpc3RlcigpOyByZWcgPSBzdGF0aWNfY2FzdDxNYWNyb0Fzc2VtYmxlcjo6UmVnaXN0
ZXJJRD4ocmVnICsgMSkpCisgICAgICAgIHJlc3VsdC5zZXQocmVnKTsKKyAgICByZXR1cm4gcmVz
dWx0OworfQorCitSZWdpc3RlclNldCBSZWdpc3RlclNldDo6YWxsRlBScygpCit7CisgICAgUmVn
aXN0ZXJTZXQgcmVzdWx0OworICAgIGZvciAoTWFjcm9Bc3NlbWJsZXI6OkZQUmVnaXN0ZXJJRCBy
ZWcgPSBNYWNyb0Fzc2VtYmxlcjo6Zmlyc3RGUFJlZ2lzdGVyKCk7IHJlZyA8PSBNYWNyb0Fzc2Vt
Ymxlcjo6bGFzdEZQUmVnaXN0ZXIoKTsgcmVnID0gc3RhdGljX2Nhc3Q8TWFjcm9Bc3NlbWJsZXI6
OkZQUmVnaXN0ZXJJRD4ocmVnICsgMSkpCisgICAgICAgIHJlc3VsdC5zZXQocmVnKTsKKyAgICBy
ZXR1cm4gcmVzdWx0OworfQorCitSZWdpc3RlclNldCBSZWdpc3RlcnJTZXQ6OmFsbFJlZ2lzdGVy
cygpCit7CisgICAgUmVnaXN0ZXJTZXQgcmVzdWx0OworICAgIHJlc3VsdC5tZXJnZShhbGxHUFJz
KCkpOworICAgIHJlc3VsdC5tZXJnZShhbGxGUFJzKCkpOworICAgIHJldHVybiByZXN1bHQ7Cit9
CisKK3ZvaWQgUmVnaXN0ZXJTZXQ6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAg
ICBtX3ZlY3Rvci5kdW1wKG91dCk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIEpTQwogCiAjZW5kaWYg
Ly8gRU5BQkxFKEpJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVnaXN0ZXJT
ZXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlZ2lzdGVyU2V0
LmgJKHJldmlzaW9uIDE1NzcwNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVnaXN0
ZXJTZXQuaAkod29ya2luZyBjb3B5KQpAQCAtNDIsNyArNDIsMTIgQEAgY2xhc3MgUmVnaXN0ZXJT
ZXQgewogcHVibGljOgogICAgIFJlZ2lzdGVyU2V0KCkgeyB9CiAgICAgCisgICAgc3RhdGljIFJl
Z2lzdGVyU2V0IHN0YWNrUmVnaXN0ZXJzKCk7CiAgICAgc3RhdGljIFJlZ2lzdGVyU2V0IHNwZWNp
YWxSZWdpc3RlcnMoKTsKKyAgICBzdGF0aWMgUmVnaXN0ZXJTZXQgY2FsbGVlU2F2ZVJlZ2lzdGVy
cygpOworICAgIHN0YXRpYyBSZWdpc3RlclNldCBhbGxHUFJzKCk7CisgICAgc3RhdGljIFJlZ2lz
dGVyU2V0IGFsbEZQUnMoKTsKKyAgICBzdGF0aWMgUmVnaXN0ZXJTZXQgYWxsUmVnaXN0ZXJzKCk7
CiAKICAgICB2b2lkIHNldChHUFJSZWcgcmVnLCBib29sIHZhbHVlID0gdHJ1ZSkKICAgICB7CkBA
IC03NiwxMyArODEsNTUgQEAgcHVibGljOgogICAgIGJvb2wgZ2V0KEZQUlJlZyByZWcpIGNvbnN0
IHsgcmV0dXJuIG1fdmVjdG9yLmdldChNYWNyb0Fzc2VtYmxlcjo6cmVnaXN0ZXJJbmRleChyZWcp
KTsgfQogICAgIAogICAgIHZvaWQgbWVyZ2UoY29uc3QgUmVnaXN0ZXJTZXQmIG90aGVyKSB7IG1f
dmVjdG9yLm1lcmdlKG90aGVyLm1fdmVjdG9yKTsgfQorICAgIHZvaWQgZXhjbHVkZShjb25zdCBS
ZWdpc3RlclNldCYgb3RoZXIpIHsgbV92ZWN0b3IuZXhjbHVkZShvdGhlci5tX3ZlY3Rvcik7IH0K
KyAgICAKKyAgICBzaXplX3QgbnVtYmVyT2ZTZXRSZWdpc3RlcnMoKSBjb25zdCB7IHJldHVybiBt
X3ZlY3Rvci5iaXRDb3VudCgpOyB9CisgICAgCisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikg
Y29uc3Q7CisgICAgCisgICAgZW51bSBFbXB0eVZhbHVlVGFnIHsgRW1wdHlWYWx1ZSB9OworICAg
IGVudW0gRGVsZXRlZFZhbHVlVGFnIHsgRGVsZXRlZFZhbHVlIH07CisgICAgCisgICAgUmVnaXN0
ZXJTZXQoRW1wdHlWYWx1ZVRhZykKKyAgICAgICAgOiBtX3ZlY3RvcihCaXRWZWN0b3I6OkVtcHR5
VmFsdWUpCisgICAgeworICAgIH0KKyAgICAKKyAgICBSZWdpc3RlclNldChEZWxldGVkVmFsdWVU
YWcpCisgICAgICAgIDogbV92ZWN0b3IoQml0VmVjdG9yOjpEZWxldGVkVmFsdWUpCisgICAgewor
ICAgIH0KKyAgICAKKyAgICBib29sIGlzRW1wdHlWYWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdmVj
dG9yLmlzRW1wdHlWYWx1ZSgpOyB9CisgICAgYm9vbCBpc0RlbGV0ZWRWYWx1ZSgpIGNvbnN0IHsg
cmV0dXJuIG1fdmN0b3IuaXNEZWxldGVkVmFsdWUoKTsgfQorICAgIAorICAgIGJvb2wgb3BlcmF0
b3I9PShjb25zdCBSZWdpc3RlclNldCYgb3RoZXIpIHsgcmV0dXJuIG1fdmVjdG9yID09IG90aGVy
Lm1fdmVjdG9yOyB9CisgICAgdW5zaWduZWQgaGFzaCgpIGNvbnN0IHsgcmV0dXJuIG1fdmVjdG9y
Lmhhc2goKTsgfQogICAgIAogcHJpdmF0ZToKICAgICBCaXRWZWN0b3IgbV92ZWN0b3I7CiB9Owog
CitzdHJ1Y3QgUmVnaXN0ZXJTZXRIYXNoIHsKKyAgICBzdGF0aWMgdW5zaWduZWQgaGFzaChjb25z
dCBSZWdpc3RlclNldCYgc2V0KSB7IHJldHVybiBzZXQuaGFzaCgpOyB9CisgICAgc3RhdGljIGJv
b2wgZXF1YWwoY29uc3QgUmVnaXN0ZXJTZXQmIGEsIGNvbnN0IFJlZ2lzdGVyU2V0JiBiKSB7IHJl
dHVybiBhID09IGI7IH0KKyAgICBzdGF0aWMgY29uc3QgYm9vbCBzYWZlVG9Db21wYXJlVG9FbXB0
eU9yRGVsZXRlZCA9IGZhbHNlOworfTsKKwogfSAvLyBuYW1lc3BhY2UgSlNDCiAKK25hbWVzcGFj
ZSBXVEYgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgRGVmYXVsdEhhc2g7Cit0ZW1w
bGF0ZTw+IHN0cnVjdCBEZWZhdWx0SGFzaDxKU0M6OlJlZ2lzdGVyU2V0PiB7CisgICAgdHlwZWRl
ZiBSZWdpc3RlclNldEhhc2ggSGFzaDsKK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVj
dCBIYXNoVHJhaXRzOwordGVtcGxhdGU8PiBzdHJ1Y3QgSGFzaFRyYWl0czxKU0M6OlJlZ2lzdGVy
U2V0PiA6IHB1YmxpYyBDdXN0b21IYXNoVHJhaXRzPEpTQzo6UmVnaXN0ZXJTZXQ+IHsgfTsKKwor
fSAvLyBuYW1lc3BhY2UgV1RGCisKICNlbmRpZiAvLyBFTkFCTEUoSklUKQogCiAjZW5kaWYgLy8g
UmVnaXN0ZXJTZXRfaApJbmRleDogU291cmNlL1dURi93dGYvQml0VmVjdG9yLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9CaXRWZWN0b3IuY3BwCShyZXZpc2lvbiAxNTc3MDcpCisr
KyBTb3VyY2UvV1RGL3d0Zi9CaXRWZWN0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjQsNyAr
MTI0LDU4IEBAIHZvaWQgQml0VmVjdG9yOjptZXJnZVNsb3coY29uc3QgQml0VmVjdG8KICAgICAg
ICAgYS0+Yml0cygpW2ldIHw9IGItPmJpdHMoKVtpXTsKIH0KIAotdm9pZCBCaXRWZWN0b3I6OmR1
bXAoUHJpbnRTdHJlYW0mIG91dCkKK3ZvaWQgQml0VmVjdG9yOjpleGNsdWRlU2xvdyhjb25zdCBC
aXRWZWN0b3ImIG90aGVyKQoreworICAgIGlmIChvdGhlci5pc0lubGluZSgpKSB7CisgICAgICAg
IEFTU0VSVCghaXNJbmxpbmUoKSk7CisgICAgICAgICpiaXRzKCkgJj0gfmNsZWFuc2VJbmxpbmVC
aXRzKG90aGVyLm1fYml0c09yUG9pbnRlcik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAg
CisgICAgaWYgKGlzSW5saW5lKCkpIHsKKyAgICAgICAgQVNTRVJUKCFvdGhlci5pc0lubGluZSgp
KTsKKyAgICAgICAgbV9iaXRzT3JQb2ludGVyICY9IH4qb3RoZXIub3V0T2ZMaW5lQml0cygpOwor
ICAgICAgICBtX2JpdHNPclBvaW50ZXIgfD0gKHN0YXRpY19jYXN0PHVpbnRwdHJfdD4oMSkgPDwg
bWF4SW5saW5lQml0cygpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBPdXRP
ZkxpbmVCaXRzKiBhID0gb3V0T2ZMaW5lQml0cygpOworICAgIGNvbnN0IE91dE9mTGluZUJpdHMq
IGIgPSBvdGhlci5vdXRPZkxpbmVCaXRzKCk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gc3RkOjpt
aW4oYS0+bnVtV29yZHMoKSwgYi0+bnVtV29yZHMoKSk7IGktLTspCisgICAgICAgIGEtPmJpdHMo
KVtpXSAmPSB+Yi0+Yml0cygpW2ldOworfQorCitzaXplX3QgQml0VmVjdG9yOjpiaXRDb3VudFNs
b3coKSBjb25zdAoreworICAgIEFTU0VSVCghaXNJbmxpbmUoKSk7CisgICAgY29uc3QgT3V0T2ZM
aW5lQml0cyogYml0cyA9IG91dE9mTGluZUJpdHMoKTsKKyAgICBzaXplX3QgcmVzdWx0ID0gMDsK
KyAgICBmb3IgKHVuc2lnbmVkIGkgPSBiaXRzLT5udW1Xb3JkcygpOyBpLS07KQorICAgICAgICBy
ZXN1bHQgKz0gYml0Q291bnQoYml0cy0+Yml0cygpW2ldKTsKKyAgICByZXR1cm4gcmVzdWx0Owor
fQorCitib29sIEJpdFZlY3Rvcjo6ZXF1YWxzU2xvd0Nhc2UoY29uc3QgQml0VmVjdG9yJiBvdGhl
cikgY29uc3QKK3sKKyAgICAvLyBUaGlzIGlzIHJlYWxseSBjaGVlc3ksIGJ1dCBwcm9iYWJseSBn
b29kIGVub3VnaCBmb3Igbm93LgorICAgIGZvciAodW5zaWduZWQgaSA9IHN0ZDo6bWF4KHNpemUo
KSwgb3RoZXIuc2l6ZSgpKTsgaS0tOykgeworICAgICAgICBpZiAoZ2V0KGkpICE9IG90aGVyLmdl
dChpKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgcmV0dXJuIHRydWU7
Cit9CisKK3VpbnRwdHJfdCBCaXRWZWN0b3I6Omhhc2hTbG93Q2FzZSgpIGNvbnN0Cit7CisgICAg
QVNTRVJUKCFpc0lubGluZSgpKTsKKyAgICBjb25zdCBPdXRPZkxpbmVCaXRzKiBiaXRzID0gb3V0
T2ZMaW5lQml0cygpOworICAgIHVpbnRwdHJfdCByZXN1bHQgPSAwOworICAgIGZvciAodW5zaWdu
ZWQgaSA9IGJpdHMtPm51bVdvcmRzKCk7IGktLTspCisgICAgICAgIHJlc3VsdCBePSBiaXRzLT5i
aXRzKClbaV07CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCBCaXRWZWN0b3I6OmR1bXAo
UHJpbnRTdHJlYW0mIG91dCkgY29uc3QKIHsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNp
emUoKTsgKytpKSB7CiAgICAgICAgIGlmIChnZXQoaSkpCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9C
aXRWZWN0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9CaXRWZWN0b3IuaAkocmV2
aXNpb24gMTU3NzA3KQorKysgU291cmNlL1dURi93dGYvQml0VmVjdG9yLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTE3OCw3ICsxNzgsNTkgQEAgcHVibGljOiAKICAgICAgICAgbV9iaXRzT3JQb2ludGVy
IHw9IG90aGVyLm1fYml0c09yUG9pbnRlcjsKICAgICB9CiAgICAgCi0gICAgdm9pZCBkdW1wKFBy
aW50U3RyZWFtJiBvdXQpOworICAgIHZvaWQgZXhjbHVkZShjb25zdCBCaXRWZWN0b3ImIG90aGVy
KQorICAgIHsKKyAgICAgICAgaWYgKCFpc0lubGluZSgpIHx8ICFvdGhlci5pc0lubGluZSgpKSB7
CisgICAgICAgICAgICBleGNsdWRlU2xvdyhvdGhlcik7CisgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgIH0KKyAgICAgICAgbV9iaXRzT3JQb2ludGVyICY9IH5vdGhlci5tX2JpdHNPclBvaW50
ZXI7CisgICAgfQorICAgIAorICAgIHNpemVfdCBiaXRDb3VudCgpIGNvbnN0CisgICAgeworICAg
ICAgICBpZiAoaXNJbmxpbmUoKSkKKyAgICAgICAgICAgIHJldHVybiBiaXRDb3VudChjbGVhbnNl
SW5saW5lQml0cyhtX2JpdHNPclBvaW50ZXIpKTsKKyAgICAgICAgcmV0dXJuIGJpdENvdW50U2xv
dygpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3Q7
CisgICAgCisgICAgZW51bSBFbXB0eVZhbHVlVGFnIHsgRW1wdHlWYWx1ZSB9OworICAgIGVudW0g
RGVsZXRlZFZhbHVlVGFnIHsgRGVsZXRlZFZhbHVlIH07CisgICAgCisgICAgQml0VmVjdG9yKEVt
cHR5VmFsdWVUYWcpCisgICAgICAgIDogbV9iaXRzT3JQb2ludGVyKDApCisgICAgeworICAgIH0K
KyAgICAKKyAgICBCaXRWZWN0b3IoRGVsZXRlZFZhbHVlVGFnKQorICAgICAgICA6IG1fYml0c09y
UG9pbnRlcigxKQorICAgIHsKKyAgICB9CisgICAgCisgICAgYm9vbCBpc0VtcHR5VmFsdWUoKSBj
b25zdCB7IHJldHVybiAhbV9iaXRzT3JQb2ludGVyOyB9CisgICAgYm9vbCBpc0RlbGV0ZWRWYWx1
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fYml0c09yUG9pbmVyID09IDE7IH0KKyAgICAKKyAgICBib29s
IG9wZXJhdG9yPT0oY29uc3QgQml0VmVjdG9yJiBvdGhlcikKKyAgICB7CisgICAgICAgIGlmIChp
c0lubGluZSgpICYmIG90aGVyLmlzSW5saW5lKCkpCisgICAgICAgICAgICByZXR1cm4gbV9iaXRz
T3JQb2ludGVyID09IG90aGVyLm1fYml0c09yUG9pbnRlcjsKKyAgICAgICAgcmV0dXJuIGVxdWFs
c1Nsb3dDYXNlKG90aGVyKTsKKyAgICB9CisgICAgCisgICAgdW5zaWduZWQgaGFzaCgpIGNvbnN0
CisgICAgeworICAgICAgICAvLyBUaGlzIGlzIGEgdmVyeSBzaW1wbGUgaGFzaC4gSnVzdCB4b3Ig
dG9nZXRoZXIgdGhlIHdvcmRzIHRoYXQgaG9sZCB0aGUgdmFyaW91cworICAgICAgICAvLyBiaXRz
IGFuZCB0aGVuIGNvbXB1dGUgdGhlIGhhc2guIFRoaXMgbWFrZXMgaXQgdmVyeSBlYXN5IHRvIGRl
YWwgd2l0aCBiaXR2ZWN0b3JzCisgICAgICAgIC8vIHRoYXQgaGF2ZSBhIGxvdCBvZiB0cmFpbGlu
ZyB6ZXJvJ3MuCisgICAgICAgIHVpbnRwdHJfdCB2YWx1ZTsKKyAgICAgICAgaWYgKGlzSW5saW5l
KCkpCisgICAgICAgICAgICB2YWx1ZSA9IGNsZWFuc2VJbmxpbmVCaXRzKG1fYml0c09yUG9pbnRl
cik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHZhbHVlID0gaGFzaFNsb3dDYXNlKCk7Cisg
ICAgICAgIHJldHVybiBJbnRIYXNoPHVpbnRwdHJfdD46Omhhc2godmFsdWUpOworICAgIH0KICAg
ICAKIHByaXZhdGU6CiAgICAgc3RhdGljIHVuc2lnbmVkIGJpdHNJblBvaW50ZXIoKQpAQCAtMjA3
LDYgKzI1OSwxNCBAQCBwcml2YXRlOgogICAgICAgICByZXR1cm4gYml0cyAmIH4oc3RhdGljX2Nh
c3Q8dWludHB0cl90PigxKSA8PCBtYXhJbmxpbmVCaXRzKCkpOwogICAgIH0KICAgICAKKyAgICBz
dGF0aWMgc2l6ZV90IGJpdENvdW50KHVpbnRwdHJfdCBiaXRzKQorICAgIHsKKyAgICAgICAgaWYg
KHNpemVvZih1aW50cHRyX3QpID09IDQpCisgICAgICAgICAgICByZXR1cm4gV1RGOjpiaXRDb3Vu
dChzdGF0aWNfY2FzdDx1bnNpZ25lZD4oYml0cykpOworICAgICAgICBlbHNlCisgICAgICAgICAg
ICByZXR1cm4gV1RGOjpiaXRDb3VudChzdGF0aWNfY2FzdDx1aW50NjRfdD4oYml0cykpOworICAg
IH0KKyAgICAKICAgICBjbGFzcyBPdXRPZkxpbmVCaXRzIHsKICAgICBwdWJsaWM6CiAgICAgICAg
IHNpemVfdCBudW1CaXRzKCkgY29uc3QgeyByZXR1cm4gbV9udW1CaXRzOyB9CkBAIC0yMzYsNiAr
Mjk2LDEyIEBAIHByaXZhdGU6CiAgICAgV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgc2V0U2xvdyhj
b25zdCBCaXRWZWN0b3ImIG90aGVyKTsKICAgICAKICAgICBXVEZfRVhQT1JUX1BSSVZBVEUgdm9p
ZCBtZXJnZVNsb3coY29uc3QgQml0VmVjdG9yJiBvdGhlcik7CisgICAgV1RGX0VYUE9SVF9QUklW
QVRFIHZvaWQgZXhjbHVkZVNsb3coY29uc3QgQml0VmVjdG9yJiBvdGhlcik7CisgICAgCisgICAg
V1RGX0VYUE9SVF9QUklWQVRFIHNpemVfdCBiaXRDb3VudFNsb3coKSBjb25zdDsKKyAgICAKKyAg
ICBXVEZfRVhQT1JUX1BSSVZBVEUgYm9vbCBlcXVhbHNTbG93Q2FzZShjb25zdCBCaXRWZWN0b3Im
IG90aGVyKSBjb25zdDsKKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgdWludHB0cl90IGhhc2hTbG93
Q2FzZSgpIGNvbnN0OwogICAgIAogICAgIHVpbnRwdHJfdCogYml0cygpCiAgICAgewpAQCAtMjU0
LDYgKzMyMCwyMCBAQCBwcml2YXRlOgogICAgIHVpbnRwdHJfdCBtX2JpdHNPclBvaW50ZXI7CiB9
OwogCitzdHJ1Y3QgQml0VmVjdG9ySGFzaCB7CisgICAgc3RhdGljIHVuc2lnbmVkIGhhc2goY29u
c3QgQml0VmVjdG9yJiB2ZWN0b3IpIHsgcmV0dXJuIHZlY3Rvci5oYXNoKCk7IH0KKyAgICBzdGF0
aWMgYm9vbCBlcXVhbChjb25zdCBCaXRWZWN0b3ImIGEsIGNvbnN0IEJpdFZlY3RvciYgYikgeyBy
ZXR1cm4gYSA9PSBiOyB9CisgICAgc3RhdGljIGNvbnN0IGJvb2wgc2FmZVRvQ29tcGFyZVRvRW1w
dHlPckRlbGV0ZWQgPSBmYWxzZTsKK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBE
ZWZhdWx0SGFzaDsKK3RlbXBsYXRlPD4gc3RydWN0IERlZmF1bHRIYXNoPEJpdFZlY3Rvcj4gewor
ICAgIHR5cGVkZWYgQml0VmVjdG9ySGFzaCBIYXNoOworfTsKKwordGVtcGxhdGU8dHlwZW5hbWUg
VD4gc3RydWN0IEhhc2hUcmFpdHM7Cit0ZW1wbGF0ZTw+IHN0cnVjdCBIYXNoVHJhaXRzPEJpdFZl
Y3Rvcj4gOiBwdWJsaWMgQ3VzdG9tSGFzaFRyYWl0czxCaXRWZWN0b3I+IHsgfTsKKwogfSAvLyBu
YW1lc3BhY2UgV1RGCiAKIHVzaW5nIFdURjo6Qml0VmVjdG9yOwpJbmRleDogU291cmNlL1dURi93
dGYvSGFzaFRyYWl0cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL0hhc2hUcmFpdHMu
aAkocmV2aXNpb24gMTU3NzA3KQorKysgU291cmNlL1dURi93dGYvSGFzaFRyYWl0cy5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yMTYsNiArMjE2LDM0IEBAIHN0cnVjdCBOdWxsYWJsZUhhc2hUcmFpdHMg
OiBwdWJsaWMgSGFzaFQKICAgICBzdGF0aWMgVCBlbXB0eVZhbHVlKCkgeyByZXR1cm4gcmVpbnRl
cnByZXRfY2FzdDxUPigxKTsgfQogfTsKIAorLy8gVXNlZnVsIGZvciBjbGFzc2VzIHRoYXQgd2Fu
dCBjb21wbGV0ZSBjb250cm9sIG92ZXIgd2hhdCBpcyBlbXB0eSBhbmQgd2hhdCBpcyBkZWxldGVk
LAorLy8gYW5kIGhvdyB0byBjb25zdHJ1Y3QgYm90aC4KK3RlbXBsYXRlPHR5cGVuYW1lIFQ+Citz
dHJ1Y3QgQ3VzdG9tSGFzaFRyYWl0cyB7CisgICAgc3RhdGljIGNvbnN0IGJvb2wgZW1wdHlWYWx1
ZUlzWmVybyA9IGZhbHNlOworICAgIHN0YXRpYyBjb25zdCBib29sIGhhc0lzRW1wdHlWYWx1ZUZ1
bmN0aW9uID0gdHJ1ZTsKKyAgICAKKyAgICBzdGF0aWMgdm9pZCBjb25zdHJ1Y3REZWxldGVkVmFs
dWUoVCYgc2xvdCkKKyAgICB7CisgICAgICAgIG5ldyAoTm90TnVsbCwgJnNsb3QpIFQoVDo6RGVs
ZXRlZFZhbHVlKTsKKyAgICB9CisgICAgCisgICAgc3RhdGljIGJvb2wgaXNEZWxldGVkVmFsdWUo
Y29uc3QgVCYgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gdmFsdWUuaXNEZWxldGVkVmFs
dWUoKTsKKyAgICB9CisgICAgCisgICAgc3RhdGljIFQgZW1wdHlWYWx1ZSgpCisgICAgeworICAg
ICAgICByZXR1cm4gVChUOjpFbXB0eVZhbHVlKTsKKyAgICB9CisgICAgCisgICAgc3RhdGljIGJv
b2wgaXNFbXB0eVZhbHVlKGNvbnN0IFQmIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHZh
bHVlLmlzRW1wdHlWYWx1ZSgpOworICAgIH0KK307CisKIH0gLy8gbmFtZXNwYWNlIFdURgogCiB1
c2luZyBXVEY6Okhhc2hUcmFpdHM7CkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9TdGRMaWJFeHRyYXMu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9TdGRMaWJFeHRyYXMuaAkocmV2aXNpb24g
MTU3NzA3KQorKysgU291cmNlL1dURi93dGYvU3RkTGliRXh0cmFzLmgJKHdvcmtpbmcgY29weSkK
QEAgLTE1Nyw2ICsxNTcsMTEgQEAgaW5saW5lIHNpemVfdCBiaXRDb3VudCh1bnNpZ25lZCBiaXRz
KQogICAgIHJldHVybiAoKChiaXRzICsgKGJpdHMgPj4gNCkpICYgMHhGMEYwRjBGKSAqIDB4MTAx
MDEwMSkgPj4gMjQ7CiB9CiAKK2lubGluZSBzaXplX3QgYml0Q291bnQodWludDY0X3QgYml0cykK
K3sKKyAgICByZXR1cm4gYml0Q291bnQoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGJpdHMpKSArIGJp
dENvdW50KHN0YXRpY19jYXN0PHVuc2lnbmVkPihiaXRzID4+IDMyKSk7Cit9CisKIC8vIE1hY3Jv
IHRoYXQgcmV0dXJucyBhIGNvbXBpbGUgdGltZSBjb25zdGFudCB3aXRoIHRoZSBsZW5ndGggb2Yg
YW4gYXJyYXksIGJ1dCBnaXZlcyBhbiBlcnJvciBpZiBwYXNzZWQgYSBub24tYXJyYXkuCiB0ZW1w
bGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgU2l6ZT4gY2hhciAoJkFycmF5TGVuZ3RoSGVscGVyRnVu
Y3Rpb24oVCAoJilbU2l6ZV0pKVtTaXplXTsKIC8vIEdDQyBuZWVkcyBzb21lIGhlbHAgdG8gZGVk
dWNlIGEgMCBsZW5ndGggYXJyYXkuCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>214812</attachid>
            <date>2013-10-21 21:13:57 -0700</date>
            <delta_ts>2013-10-21 21:27:20 -0700</delta_ts>
            <desc>for real this time</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>59510</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTGlua0J1ZmZlci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9MaW5rQnVmZmVyLmNw
cAkocmV2aXNpb24gMTU3NzA3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9M
aW5rQnVmZmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDEyLCAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzcsNyArMzcsMTEgQEAgTGlua0J1ZmZlcjo6
Q29kZVJlZiBMaW5rQnVmZmVyOjpmaW5hbGl6ZQogewogICAgIHBlcmZvcm1GaW5hbGl6YXRpb24o
KTsKICAgICAKLSAgICByZXR1cm4gQ29kZVJlZihtX2V4ZWN1dGFibGVNZW1vcnkpOworICAgIEFT
U0VSVChtX2RpZEFsbG9jYXRlKTsKKyAgICBpZiAobV9leGVjdXRhYmxlTWVtb3J5KQorICAgICAg
ICByZXR1cm4gQ29kZVJlZihtX2V4ZWN1dGFibGVNZW1vcnkpOworICAgIAorICAgIHJldHVybiBD
b2RlUmVmOjpjcmVhdGVTZWxmTWFuYWdlZENvZGVSZWYobV9jb2RlKTsKIH0KIAogTGlua0J1ZmZl
cjo6Q29kZVJlZiBMaW5rQnVmZmVyOjpmaW5hbGl6ZUNvZGVXaXRoRGlzYXNzZW1ibHkoY29uc3Qg
Y2hhciogZm9ybWF0LCAuLi4pCkBAIC0xNTEsNiArMTU1LDE1IEBAIHZvaWQgTGlua0J1ZmZlcjo6
bGlua0NvZGUodm9pZCogb3duZXJVSUQKIAogdm9pZCBMaW5rQnVmZmVyOjphbGxvY2F0ZShzaXpl
X3QgaW5pdGlhbFNpemUsIHZvaWQqIG93bmVyVUlELCBKSVRDb21waWxhdGlvbkVmZm9ydCBlZmZv
cnQpCiB7CisgICAgaWYgKG1fY29kZSkgeworICAgICAgICBpZiAoaW5pdGlhbFNpemUgPiBtX3Np
emUpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgICAgICBtX2RpZEFsbG9jYXRl
ID0gdHJ1ZTsKKyAgICAgICAgbV9zaXplID0gaW5pdGlhbFNpemU7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisgICAgCiAgICAgbV9leGVjdXRhYmxlTWVtb3J5ID0gbV92bS0+ZXhlY3V0YWJsZUFs
bG9jYXRvci5hbGxvY2F0ZSgqbV92bSwgaW5pdGlhbFNpemUsIG93bmVyVUlELCBlZmZvcnQpOwog
ICAgIGlmICghbV9leGVjdXRhYmxlTWVtb3J5KQogICAgICAgICByZXR1cm47CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0xpbmtCdWZmZXIuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0xpbmtCdWZmZXIuaAkocmV2aXNpb24gMTU3
NzA3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9MaW5rQnVmZmVyLmgJKHdv
cmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA5LCAy
MDEwLCAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAwOSwgMjAxMCwgMjAxMiwgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTk0LDYgKzk0LDIyIEBAIHB1Ymxp
YzoKICAgICAgICAgbGlua0NvZGUob3duZXJVSUQsIGVmZm9ydCk7CiAgICAgfQogCisgICAgTGlu
a0J1ZmZlcihWTSYgdm0sIE1hY3JvQXNzZW1ibGVyKiBtYXNtLCB2b2lkKiBjb2RlLCBzaXplX3Qg
c2l6ZSkKKyAgICAgICAgOiBtX3NpemUoc2l6ZSkKKyNpZiBFTkFCTEUoQlJBTkNIX0NPTVBBQ1RJ
T04pCisgICAgICAgICwgbV9pbml0aWFsU2l6ZSgwKQorI2VuZGlmCisgICAgICAgICwgbV9kaWRB
bGxvY2F0ZShmYWxzZSkKKyAgICAgICAgLCBtX2NvZGUoY29kZSkKKyAgICAgICAgLCBtX2Fzc2Vt
YmxlcihtYXNtKQorICAgICAgICAsIG1fdm0oJnZtKQorI2lmbmRlZiBOREVCVUcKKyAgICAgICAg
LCBtX2NvbXBsZXRlZChmYWxzZSkKKyNlbmRpZgorICAgIHsKKyAgICAgICAgbGlua0NvZGUob3du
ZXJVSUQsIGVmZm9ydCk7CisgICAgfQorCiAgICAgfkxpbmtCdWZmZXIoKQogICAgIHsKICAgICB9
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEFiYnJldmlhdGlvbnMuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEFiYnJldmlhdGlvbnMuaAko
cmV2aXNpb24gMTU3NzA3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExBYmJyZXZp
YXRpb25zLmgJKHdvcmtpbmcgY29weSkKQEAgLTE0NSw2ICsxNDUsNyBAQCBlbnVtIEJpdEV4dGVu
c2lvbiB7IFplcm9FeHRlbmQsIFNpZ25FeHRlCiBzdGF0aWMgaW5saW5lIExWYWx1ZSBjb25zdElu
dChMVHlwZSB0eXBlLCB1bnNpZ25lZCBsb25nIGxvbmcgdmFsdWUsIEJpdEV4dGVuc2lvbiBleHRl
bnNpb24gPSBaZXJvRXh0ZW5kKSB7IHJldHVybiBsbHZtLT5Db25zdEludCh0eXBlLCB2YWx1ZSwg
ZXh0ZW5zaW9uID09IFNpZ25FeHRlbmQpOyB9CiBzdGF0aWMgaW5saW5lIExWYWx1ZSBjb25zdFJl
YWwoTFR5cGUgdHlwZSwgZG91YmxlIHZhbHVlKSB7IHJldHVybiBsbHZtLT5Db25zdFJlYWwodHlw
ZSwgdmFsdWUpOyB9CiBzdGF0aWMgaW5saW5lIExWYWx1ZSBjb25zdEludFRvUHRyKExWYWx1ZSB2
YWx1ZSwgTFR5cGUgdHlwZSkgeyByZXR1cm4gbGx2bS0+Q29uc3RJbnRUb1B0cih2YWx1ZSwgdHlw
ZSk7IH0KK3N0YXRpYyBpbmxpbmUgTFZhbHVlIGNvbnN0TnVsbChMVHlwZSB0eXBlKSB7IHJldHVy
biBsbHZtLT5Db25zdE51bGwodHlwZSk7IH0KIHN0YXRpYyBpbmxpbmUgTFZhbHVlIGNvbnN0Qml0
Q2FzdChMVmFsdWUgdmFsdWUsIExUeXBlIHR5cGUpIHsgcmV0dXJuIGxsdm0tPkNvbnN0Qml0Q2Fz
dCh2YWx1ZSwgdHlwZSk7IH0KIAogc3RhdGljIGlubGluZSBMQmFzaWNCbG9jayBhcHBlbmRCYXNp
Y0Jsb2NrKExDb250ZXh0IGNvbnRleHQsIExWYWx1ZSBmdW5jdGlvbiwgY29uc3QgY2hhciogbmFt
ZSA9ICIiKSB7IHJldHVybiBsbHZtLT5BcHBlbmRCYXNpY0Jsb2NrSW5Db250ZXh0KGNvbnRleHQs
IGZ1bmN0aW9uLCBuYW1lKTsgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExD
YXBhYmlsaXRpZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwv
RlRMQ2FwYWJpbGl0aWVzLmNwcAkocmV2aXNpb24gMTU3NzA3KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Z0bC9GVExDYXBhYmlsaXRpZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05NCwxMCAr
OTQsMTMgQEAgaW5saW5lIENhcGFiaWxpdHlMZXZlbCBjYW5Db21waWxlKE5vZGUqIAogICAgIGNh
c2UgR2V0Q2xvc3VyZVJlZ2lzdGVyczoKICAgICBjYXNlIEdldENsb3N1cmVWYXI6CiAgICAgY2Fz
ZSBQdXRDbG9zdXJlVmFyOgotICAgIGNhc2UgR2V0QnlJZDoKICAgICBjYXNlIEludDUyVG9WYWx1
ZToKICAgICAgICAgLy8gVGhlc2UgYXJlIE9LLgogICAgICAgICBicmVhazsKKyAgICBjYXNlIEdl
dEJ5SWQ6CisgICAgICAgIGlmIChub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkgPT0gQ2VsbFVzZSkK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICByZXR1cm4gQ2Fubm90Q29tcGlsZTsKICAgICBj
YXNlIEdldEluZGV4ZWRQcm9wZXJ0eVN0b3JhZ2U6CiAgICAgICAgIGlmIChpc1R5cGVkVmlldyhu
b2RlLT5hcnJheU1vZGUoKS50eXBlZEFycmF5VHlwZSgpKSkKICAgICAgICAgICAgIGJyZWFrOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDb21waWxlLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENvbXBpbGUuY3BwCShyZXZpc2lvbiAx
NTc3MDcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENvbXBpbGUuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMTAsNiArMTEwLDcgQEAgc3RhdGljIHZvaWQgZml4RnVuY3Rpb25CYXNl
ZE9uU3RhY2tNYXBzKAogICAgIFN0YWNrTWFwczo6UmVjb3JkTWFwJiByZWNvcmRNYXApCiB7CiAg
ICAgVk0mIHZtID0gc3RhdGUuZ3JhcGgubV92bTsKKyAgICBTdGFja01hcHMgc3RhY2ttYXBzID0g
aml0Q29kZS0+c3RhY2ttYXBzOwogCiAgICAgRXhpdFRodW5rR2VuZXJhdG9yIGV4aXRUaHVua0dl
bmVyYXRvcihzdGF0ZSk7CiAgICAgZXhpdFRodW5rR2VuZXJhdG9yLmVtaXRUaHVua3MoKTsKQEAg
LTEzNiw2ICsxMzcsNzQgQEAgc3RhdGljIHZvaWQgZml4RnVuY3Rpb25CYXNlZE9uU3RhY2tNYXBz
KAogICAgICAgICBzdGF0ZS5maW5hbGl6ZXItPmV4aXRUaHVua3NMaW5rQnVmZmVyID0gbGlua0J1
ZmZlci5yZWxlYXNlKCk7CiAgICAgfQogCisgICAgaWYgKCFzdGF0ZS5nZXRCeUlkcy5pc0VtcHR5
KCkpIHsKKyAgICAgICAgQ0NhbGxIZWxwZXJzIHNsb3dQYXRoSklUKHZtLCBjb2RlQmxvY2spOwor
ICAgICAgICAKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gc3RhdGUuZ2V0QnlJZHMuc2l6ZSgp
OyBpLS07KSB7CisgICAgICAgICAgICBHZXRCeUlkRGVzY3JpcHRvciYgZ2V0QnlJZCA9IHN0YXRl
LmdldEJ5SWRzW2ldOworICAgICAgICAgICAgCisgICAgICAgICAgICBTdGFja01hcHM6OlJlY29y
ZE1hcDo6aXRlcmF0b3IgaXRlciA9IHJlY29yZE1hcC5maW5kKGdldEJ5SWQuc3RhY2ttYXBJRCgp
KTsKKyAgICAgICAgICAgIGlmIChpdGVyID09IHJlY29yZE1hcC5lbmQoKSkgeworICAgICAgICAg
ICAgICAgIC8vIEl0IHdhcyBvcHRpbWl6ZWQgb3V0LgorICAgICAgICAgICAgICAgIGNvbnRpbnVl
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBTdGFja01hcHM6OlJl
Y29yZCYgcmVjb3JkID0gaXRlci0+dmFsdWU7CisKKyAgICAgICAgICAgIC8vIEZJWE1FOiBMTFZN
IHNob3VsZCB0ZWxsIHVzIHdoaWNoIHJlZ2lzdGVycyBhcmUgbGl2ZS4KKyAgICAgICAgICAgIFJl
Z2lzdGVyU2V0IHVzZWRSZWdpc3RlcnMgPSBSZWdpc3RlclNldDo6YWxsUmVnaXN0ZXJzKCk7Cisg
ICAgICAgICAgICAKKyAgICAgICAgICAgIEdQUlJlZyBjYWxsRnJhbWVSZWdpc3RlciA9IHJlY29y
ZC5sb2NhdGlvbnNbMF0uZGlyZWN0R1BSKHN0YWNrbWFwcyk7CisgICAgICAgICAgICBHUFJSZWcg
YmFzZSA9IHJlY29yZC5sb2NhdGlvbnNbMV0uZGlyZWN0R1BSKHN0YWNrbWFwcyk7CisgICAgICAg
ICAgICBHUFJSZWcgcmVzdWx0ID0gR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFI7CisgICAgICAgICAg
ICAKKyAgICAgICAgICAgIEpJVEdldEJ5SWRHZW5lcmF0b3IgZ2VuKAorICAgICAgICAgICAgICAg
IGNvZGVCbG9jaywgZ2V0QnlJZC5jb2RlT3JpZ2luKCksIHVzZWRSZWdpc3RlcnMsIEpTVmFsdWVS
ZWdzKGJhc2UpLAorICAgICAgICAgICAgICAgIEpTVmFsdWVSZWdzKHJlc3VsdCksIGZhbHNlKTsK
KyAgICAgICAgICAgIAorICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIGJlZ2luID0g
c2xvd1BhdGhKSVQubGFiZWwoKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgTWFjcm9Bc3Nl
bWJsZXI6OkNhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24oCisgICAgICAgICAgICAgICAgc3RhdGUs
IHVzZWRSZWdpc3RlcnMsIHNsb3dQYXRoSklULCBvcGVyYXRpb25HZXRCeUlkT3B0aW1pemUsIHJl
c3VsdCwKKyAgICAgICAgICAgICAgICBjYWxsRnJhbWVSZWdpc3RlciwgZ2VuLnN0dWJJbmZvKCks
IGJhc2UsIGdldEJ5SWQudWlkKCkpOworICAgICAgICAgICAgCisgICAgICAgICAgICBnZW4ucmVw
b3J0U2xvd1BhdGhDYWxsKGJlZ2luLCBjYWxsKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAg
Z2V0QnlJZC5tX3Nsb3dQYXRoRG9uZSA9IHNsb3dQYXRoSklULmp1bXAoKTsKKyAgICAgICAgICAg
IGdldEJ5SWQubV9nZW5lcmF0b3IgPSBnZW47CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAg
IHN0YXRlLmZpbmFsaXplci0+c2xvd1BhdGhMaW5rQnVmZmVyID0gYWRvcHRQdHIoCisgICAgICAg
ICAgICBuZXcgTGlua0J1ZmZlcih2bSwgJnNsb3dQYXRoSklULCBjb2RlQmxvY2ssIEpJVENvbXBp
bGF0aW9uTXVzdFN1Y2NlZWQpKTsKKyAgICAgICAgCisgICAgICAgIGZvciAodW5zaWduZWQgaSA9
IHN0YXRlLmdldEJ5SWRzLnNpemUoKTsgaS0tOykgeworICAgICAgICAgICAgR2V0QnlJZERlc2Ny
aXB0b3ImIGdldEJ5SWQgPSBzdGF0ZS5nZXRCeUlkc1tpXTsKKyAgICAgICAgICAgIAorICAgICAg
ICAgICAgU3RhY2tNYXBzOjpSZWNvcmRNYXA6Oml0ZXJhdG9yIGl0ZXIgPSByZWNvcmRNYXAuZmlu
ZChnZXRCeUlkLnN0YWNrbWFwSUQoKSk7CisgICAgICAgICAgICBpZiAoaXRlciA9PSByZWNvcmRN
YXAuZW5kKCkpIHsKKyAgICAgICAgICAgICAgICAvLyBJdCB3YXMgb3B0aW1pemVkIG91dC4KKyAg
ICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgQ0Nh
bGxIZWxwZXJzIGZhc3RQYXRoSklUKHZtLCBjb2RlQmxvY2spOworICAgICAgICAgICAgZ2V0QnlJ
ZC5tX2dlbmVyYXRvci5nZW5lcmF0ZUZhc3RQYXRoKGZhc3RQYXRoSklUKTsKKworICAgICAgICAg
ICAgY2hhciogc3RhcnRPZklDID0KKyAgICAgICAgICAgICAgICBiaXR3aXNlX2Nhc3Q8Y2hhcio+
KGdlbmVyYXRlZEZ1bmN0aW9uKSArIHJlY29yZC5pbnN0cnVjdGlvbk9mZnNldDsKKyAgICAgICAg
ICAgIHNpemVfdCBzaXplT2ZJQyA9IHNpemVPZkdldEJ5SUQoKTsKKyAgICAgICAgICAgIAorICAg
ICAgICAgICAgTGlua0J1ZmZlciBsaW5rQnVmZmVyKHZtLCBmYXN0UGF0aEpJVCwgc3RhcnRPZklD
LCBzaXplT2ZHZXRCeUlkKCkpOworICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQobGlua0J1ZmZl
ci5pc1ZhbGlkKCkpOworICAgICAgICAgICAgCisgICAgICAgICAgICBzdGF0ZS5maW5hbGl6ZXIt
PnNsb3dQYXRoTGlua0J1ZmZlci0+bGluaygKKyAgICAgICAgICAgICAgICBnZXRCeUlkLm1fc2xv
d1BhdGhEb25lLCBDb2RlTG9jYXRpb25MYWJlbChzdGFydE9mSUMgKyBzaXplb2ZJQykpOworICAg
ICAgICAgICAgCisgICAgICAgICAgICBnZXRCeUlkLm1fZ2VuZXJhdG9yLmZpbmFsaXplKGxpbmtC
dWZmZXIsICpzdGF0ZS5maW5hbGl6ZXItPnNsb3dQYXRoTGlua0J1ZmZlcik7CisgICAgICAgICAg
ICAKKyAgICAgICAgICAgIGxpbmtCdWZmZXIuZmluYWxpemVDb2RlV2l0aG91dERpc2Fzc2VtYmx5
KCk7CisgICAgICAgIH0KKyAgICB9CisgICAgCiAgICAgUmVwYXRjaEJ1ZmZlciByZXBhdGNoQnVm
ZmVyKGNvZGVCbG9jayk7CiAgICAgCiAgICAgZm9yICh1bnNpZ25lZCBleGl0SW5kZXggPSBqaXRD
b2RlLT5vc3JFeGl0LnNpemUoKTsgZXhpdEluZGV4LS07KSB7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZnRsL0ZUTElubGluZUNhY2hlRGVzY3JpcHRvci5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSW5saW5lQ2FjaGVEZXNjcmlwdG9yLmgJKHJldmlz
aW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTElubGluZUNhY2hlRGVzY3Jp
cHRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNzEgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBGVExJbmxpbmVDYWNoZURlc2Ny
aXB0b3JfaAorI2RlZmluZSBGVExJbmxpbmVDYWNoZURlc2NyaXB0b3JfaAorCisjaWYgRU5BQkxF
KEZUTF9KSVQpCisKKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdJbXBsLmg+CisKK25hbWVzcGFj
ZSBKU0MgeyBuYW1lc3BhY2UgRlRMIHsKKworY2xhc3MgSW5saW5lQ2FjaGVEZXNjcmlwdG9yIHsK
K3B1YmxpYzoKKyAgICBJbmxpbmVDYWNoZURlc2NyaXB0b3IoKSB7IH0KKyAgICAKKyAgICBNYWNy
b0Fzc2VtYmxlcjo6SnVtcCBtX3Nsb3dQYXRoRG9uZTsKK307CisKK2NsYXNzIEdldEJ5SWREZXNj
cmlwdG9yIDogcHVibGljIElubGluZUNhY2hlRGVzY3JpcHRvciB7CitwdWJsaWM6CisgICAgR2V0
QnlJZERlc2NyaXB0b3IoKSB7IH0KKyAgICAKKyAgICBHZXRCeUlkRGVzY3JpcHRvcih1bnNpZ25l
ZCBzdGFja21hcElELCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4sIFN0cmluZ0ltcGwqIHVpZCkKKyAg
ICAgICAgOiBtX3N0YWNrbWFwSUQoc3RhY2ttYXBJRCkKKyAgICAgICAgLCBtX2NvZGVPcmlnaW4o
Y29kZU9yaWdpbikKKyAgICAgICAgLCBtX3VpZCh1aWQpCisgICAgeworICAgIH0KKyAgICAKKyAg
ICB1bnNpZ25lZCBzdGFja21hcElEKCkgY29uc3QgeyByZXR1cm4gbV9zdGFja21hcElEOyB9Cisg
ICAgQ29kZU9yaWdpbiBjb2RlT3JpZ2luKCkgY29uc3QgeyByZXR1cm4gbV9jb2RlT3JpZ2luOyB9
CisgICAgU3RyaW5nSW1wbCogdWlkKCkgY29uc3QgeyByZXR1cm4gbV91aWQ7IH0KKyAgICAKK3By
aXZhdGU6CisgICAgdW5zaWduZWQgbV9zdGFja21hcElEOworICAgIENvZGVPcmlnaW4gbV9jb2Rl
T3JpZ2luOworICAgIFN0cmluZ0ltcGwqIG1fdWlkOworCitwdWJsaWM6CisgICAgSklUR2V0QnlJ
ZEdlbmVyYXRvciBtX2dlbmVyYXRvcjsKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpGVEwK
KworI2VuZGlmIC8vIEVOQUJMRShGVExfSklUKQorCisjZW5kaWYgLy8gRlRMSW5saW5lQ2FjaGVE
ZXNjcmlwdG9yX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExJbmxpbmVD
YWNoZVNpemUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRM
SW5saW5lQ2FjaGVTaXplLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9mdGwvRlRMSW5saW5lQ2FjaGVTaXplLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDcy
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJGVExJbmxpbmVDYWNoZVNpemUuaCIKKworI2lmIEVO
QUJMRShGVExfSklUKQorCisjaW5jbHVkZSAiSklUSW5saW5lQ2FjaGVHZW5lcmF0b3IuaCIKKyNp
bmNsdWRlICJNYWNyb0Fzc2VtYmxlci5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEZU
TCB7CisKK3N0YXRpYyBzaXplX3Qgc19zaXplT2ZHZXRCeUlkOworc3RhdGljIHNpemVfdCBzX3Np
emVPZlB1dEJ5SWQ7CisKK3NpemVfdCBzaXplT2ZHZXRCeUlkKCkKK3sKKyAgICBpZiAoc19zaXpl
T2ZHZXRCeUlkKQorICAgICAgICByZXR1cm4gc19zaXplT2ZHZXRCeUlkOworICAgIAorICAgIE1h
Y3JvQXNzZW1ibGVyIGppdDsKKyAgICAKKyAgICBKSVRHZXRCeUlkR2VuZXJhdG9yIGdlbmVyYXRv
cigKKyAgICAgICAgMCwgQ29kZU9yaWdpbigpLCBSZWdpc3RlclNldCgpLCBKU1ZhbHVlUmVncyhH
UFJJbmZvOjpyZWdUNiksIEpTVmFsdWVSZWdzKEdQUkluZm86OnJlZ1Q3KSwKKyAgICAgICAgZmFs
c2UpOworICAgIGdlbmVyYXRvci5nZW5lcmF0ZUZhc3RQYXRoKGppdCk7CisgICAgCisgICAgcmV0
dXJuIHNfc2l6ZU9mR2V0QnlJZCA9IGppdC5tX2Fzc2VtYmxlci5jb2RlU2l6ZSgpOworfQorCitz
aXplX3Qgc2l6ZU9mUHV0QnlJZCgpCit7CisgICAgaWYgKHNfc2l6ZU9mUHV0QnlJZCkKKyAgICAg
ICAgcmV0dXJuIHNfc2l6ZU9mUHV0QnlJZDsKKyAgICAKKyAgICBNYWNyb0Fzc2VtYmxlciBqaXQ7
CisgICAgCisgICAgSklUUHV0QnlJZEdlbmVyYXRvciBnZW5lcmF0b3IoCisgICAgICAgIDAsIENv
ZGVPcmlnaW4oKSwgUmVnaXN0ZXJTZXQoKSwgSlNWYWx1ZVJlZ3MoR1BSSW5mbzo6cmVnVDYpLCBK
U1ZhbHVlUmVncyhHUFJJbmZvOjpyZWdUNyksCisgICAgICAgIEdQUkluZm86OnJlZ1Q4LCBmYWxz
ZSwgTm90U3RyaWN0TW9kZSwgTm90RGlyZWN0KTsKKyAgICBnZW5lcmF0b3IuZ2VuZXJhdGVGYXN0
UGF0aChqaXQpOworICAgIAorICAgIHJldHVybiBzX3NpemVPZlB1dEJ5SWQgPSBqaXQubV9hc3Nl
bWJsZXIuY29kZVNpemUoKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkZUTAorCisjZW5k
aWYgLy8gRU5BQkxFKEZUTF9KSVQpCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwv
RlRMSW5saW5lQ2FjaGVTaXplLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Z0bC9GVExJbmxpbmVDYWNoZVNpemUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9mdGwvRlRMSW5saW5lQ2FjaGVTaXplLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSw0MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisj
aWZuZGVmIEZUTElubGluZUNhY2hlU2l6ZV9oCisjZGVmaW5lIEZUTElubGluZUNhY2hlU2l6ZV9o
CisKKyNpZiBFTkFCTEUoRlRMX0pJVCkKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBGVEwg
eworCitzaXplX3Qgc2l6ZU9mR2V0QnlJZCgpOworc2l6ZV90IHNpemVPZlB1dEJ5SWQoKTsKKwor
fSB9IC8vIG5hbWVzcGFjZSBKU0M6OkZUTAorCisjZW5kaWYgLy8gRU5BQkxFKEZUTF9KSVQpCisK
KyNlbmRpZiAvLyBGVExJbmxpbmVDYWNoZVNpemVfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZnRsL0ZUTEludHJpbnNpY1JlcG9zaXRvcnkuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZnRsL0ZUTEludHJpbnNpY1JlcG9zaXRvcnkuaAkocmV2aXNpb24gMTU3
NzA3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExJbnRyaW5zaWNSZXBvc2l0b3J5
LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDYgKzQ0LDcgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVz
cGFjZSBGVEwgewogICAgIG1hY3JvKG11bFdpdGhPdmVyZmxvdzY0LCAibGx2bS5zbXVsLndpdGgu
b3ZlcmZsb3cuaTY0IiwgZnVuY3Rpb25UeXBlKHN0cnVjdFR5cGUobV9jb250ZXh0LCBpbnQ2NCwg
Ym9vbGVhbiksIGludDY0LCBpbnQ2NCkpIFwKICAgICBtYWNybyhzdWJXaXRoT3ZlcmZsb3czMiwg
Imxsdm0uc3N1Yi53aXRoLm92ZXJmbG93LmkzMiIsIGZ1bmN0aW9uVHlwZShzdHJ1Y3RUeXBlKG1f
Y29udGV4dCwgaW50MzIsIGJvb2xlYW4pLCBpbnQzMiwgaW50MzIpKSBcCiAgICAgbWFjcm8oc3Vi
V2l0aE92ZXJmbG93NjQsICJsbHZtLnNzdWIud2l0aC5vdmVyZmxvdy5pNjQiLCBmdW5jdGlvblR5
cGUoc3RydWN0VHlwZShtX2NvbnRleHQsIGludDY0LCBib29sZWFuKSwgaW50NjQsIGludDY0KSkg
XAorICAgIG1hY3JvKHdlYmtpdFBhdGNocG9pbnQsICJsbHZtLndlYmtpdC5wYXRjaHBvaW50Iiwg
ZnVuY3Rpb25UeXBlKHZvaWRUeXBlLCBpbnQzMiwgaW50MzIsIFZhcmlhZGljKSkgXAogICAgIG1h
Y3JvKHdlYmtpdFN0YWNrbWFwLCAibGx2bS53ZWJraXQuc3RhY2ttYXAiLCBmdW5jdGlvblR5cGUo
dm9pZFR5cGUsIGludDMyLCBpbnQzMiwgVmFyaWFkaWMpKSBcCiAgICAgbWFjcm8odHJhcCwgImxs
dm0udHJhcCIsIGZ1bmN0aW9uVHlwZSh2b2lkVHlwZSkpIFwKICAgICBtYWNybyhvc3JFeGl0LCAi
d2Via2l0X29zcl9leGl0IiwgZnVuY3Rpb25UeXBlKHZvaWRUeXBlLCBib29sZWFuLCBpbnQzMiwg
VmFyaWFkaWMpKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExKSVRGaW5hbGl6
ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSklURmlu
YWxpemVyLmNwcAkocmV2aXNpb24gMTU3NzA3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0
bC9GVExKSVRGaW5hbGl6ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04NCw2ICs4NCwyNCBAQCBi
b29sIEpJVEZpbmFsaXplcjo6ZmluYWxpemVGdW5jdGlvbigpCiAgICAgICAgICAgICAgICAgKCJG
VEwgZXhpdCB0aHVua3MgZm9yICVzIiwgdG9DU3RyaW5nKENvZGVCbG9ja1dpdGhKSVRUeXBlKG1f
cGxhbi5jb2RlQmxvY2suZ2V0KCksIEpJVENvZGU6OkZUTEpJVCkpLmRhdGEoKSkpKTsKICAgICB9
IC8vIGVsc2UgdGhpcyBmdW5jdGlvbiBoYWQgbm8gT1NSIGV4aXRzLCBzbyBubyBleGl0IHRodW5r
cy4KICAgICAKKyAgICBpZiAoc2lkZUNvZGVMaW5rQnVmZmVyKSB7CisgICAgICAgIC8vIFNpZGUg
Y29kZSBpcyBmb3Igc3BlY2lhbCBzbG93IHBhdGhzIHRoYXQgd2UgZ2VuZXJhdGUgb3Vyc2VsdmVz
LCBsaWtlIGZvciBpbmxpbmUKKyAgICAgICAgLy8gY2FjaGVzLgorICAgICAgICAKKyAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gc2xvd1BhdGhDYWxscy5zaXplKCk7IGktLTspIHsKKyAgICAgICAg
ICAgIFNsb3dQYXRoQ2FsbCYgY2FsbCA9IHNsb3dQYXRoQ2FsbHNbaV07CisgICAgICAgICAgICBz
aWRlQ29kZUxpbmtCdWZmZXItPmxpbmsoCisgICAgICAgICAgICAgICAgY2FsbC5jYWxsKCksCisg
ICAgICAgICAgICAgICAgbV9wbGFuLnZtLm1fZnRsVGh1bmtzLT5nZXRTbG93UGF0aENhbGxUaHVu
ayhtX3BsYW4udm0sIGNhbGwua2V5KCkpKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAg
aml0Q29kZS0+YWRkSGFuZGxlKEZJTkFMSVpFX0RGR19DT0RFKAorICAgICAgICAgICAgKnNpZGVD
b2RlTGlua0J1ZmZlciwKKyAgICAgICAgICAgICgiRlRMIHNpZGUgY29kZSBmb3IgJXMiLAorICAg
ICAgICAgICAgICAgIHRvQ1N0cmluZyhDb2RlQmxvY2tXaXRoSklUVHlwZShtX3BsYW4uY29kZUJs
b2NrLmdldCgpLCBKSVRDb2RlOjpGVExKSVQpKS5kYXRhKCkpKQorICAgICAgICAgICAgLmV4ZWN1
dGFibGVNZW1vcnkoKSk7CisgICAgfQorICAgIAogICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciB3
aXRoQXJpdHlDaGVjazsKICAgICBpZiAoYXJpdHlDaGVjay5pc1NldCgpKQogICAgICAgICB3aXRo
QXJpdHlDaGVjayA9IGVudHJ5cG9pbnRMaW5rQnVmZmVyLT5sb2NhdGlvbk9mKGFyaXR5Q2hlY2sp
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExKSVRGaW5hbGl6ZXIuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEpJVEZpbmFsaXplci5oCShy
ZXZpc2lvbiAxNTc3MDcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEpJVEZpbmFs
aXplci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw2ICszNCw3IEBACiAjaW5jbHVkZSAiRlRMR2Vu
ZXJhdGVkRnVuY3Rpb24uaCIKICNpbmNsdWRlICJGVExKSVRDb2RlLmgiCiAjaW5jbHVkZSAiRlRM
T1NSRXhpdENvbXBpbGF0aW9uSW5mby5oIgorI2luY2x1ZGUgIkZUTFNsb3dQYXRoQ2FsbC5oIgog
I2luY2x1ZGUgIkxMVk1BUEkuaCIKICNpbmNsdWRlICJMaW5rQnVmZmVyLmgiCiAjaW5jbHVkZSAi
TWFjcm9Bc3NlbWJsZXIuaCIKQEAgLTUwLDYgKzUxLDggQEAgcHVibGljOgogCiAgICAgT3duUHRy
PExpbmtCdWZmZXI+IGV4aXRUaHVua3NMaW5rQnVmZmVyOwogICAgIE93blB0cjxMaW5rQnVmZmVy
PiBlbnRyeXBvaW50TGlua0J1ZmZlcjsKKyAgICBPd25QdHI8TGlua0J1ZmZlcj4gc2lkZUNvZGVM
aW5rQnVmZmVyOworICAgIFZlY3RvcjxTbG93UGF0aENhbGw+IHNsb3dQYXRoQ2FsbHM7IC8vIENh
bGxzIGluc2lkZSB0aGUgc2lkZSBjb2RlLgogICAgIFZlY3RvcjxPU1JFeGl0Q29tcGlsYXRpb25J
bmZvPiBvc3JFeGl0OwogICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBhcml0eUNoZWNrOwogICAg
IEdlbmVyYXRlZEZ1bmN0aW9uIGZ1bmN0aW9uOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Z0bC9GVExMb2NhdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Z0bC9GVExMb2NhdGlvbi5jcHAJKHJldmlzaW9uIDE1NzcwNykKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9mdGwvRlRMTG9jYXRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xODAsNiArMTgw
LDEyIEBAIHZvaWQgTG9jYXRpb246OnJlc3RvcmVJbnRvKE1hY3JvQXNzZW1ibGUKICNlcnJvciAi
Q1BVIGFyY2hpdGVjdHVyZSBub3Qgc3VwcG9ydGVkLiIKICNlbmRpZiAvLyBDUFUgY2FzZXMgZm9y
IExvY2F0aW9uIG1ldGhvZHMKIAorR1BSUmVnIExvY2F0aW9uOjpkaXJlY3RHUFIoKSBjb25zdAor
eworICAgIEFTU0VSVCghYWRkZW5kKCkpOworICAgIHJldHVybiBncHIoKTsKK30KKwogfSB9IC8v
IG5hbWVzcGFjZSBKU0M6OkZUTAogCiBuYW1lc3BhY2UgV1RGIHsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9mdGwvRlRMTG9jYXRpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZnRsL0ZUTExvY2F0aW9uLmgJKHJldmlzaW9uIDE1NzcwNykKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9mdGwvRlRMTG9jYXRpb24uaAkod29ya2luZyBjb3B5KQpAQCAtMTU3LDYg
KzE1Nyw3IEBAIHB1YmxpYzoKICAgICBib29sIGlzR1BSKCkgY29uc3Q7CiAgICAgYm9vbCBpbnZv
bHZlc0dQUigpIGNvbnN0OwogICAgIEdQUlJlZyBncHIoKSBjb25zdDsKKyAgICBHUFJSRWcgZGly
ZWN0R1BSKCkgY29uc3Q7IC8vIEdldCB0aGUgR1BSIGFuZCBhc3NlcnQgdGhhdCB0aGVyZSBpcyBu
byBhZGRlbmQuCiAgICAgCiAgICAgYm9vbCBpc0ZQUigpIGNvbnN0OwogICAgIEZQUlJlZyBmcHIo
KSBjb25zdDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0xM
Vk0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJE
RkdUb0xMVk0uY3BwCShyZXZpc2lvbiAxNTc3MDcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTIyMiwyMiArMTIy
MiwyNCBAQCBwcml2YXRlOgogICAgIAogICAgIHZvaWQgY29tcGlsZUdldEJ5SWQoKQogICAgIHsK
LSAgICAgICAgTFZhbHVlIGJhc2UgPSAwOworICAgICAgICAvLyBVbnR5cGVkVXNlIGlzIGEgYml0
IGhhcmRlciB0byByZWFzb24gYWJvdXQgYW5kIEknbSBub3Qgc3VyZSBob3cgYmVzdCB0byBkbyBp
dCwgeWV0LgorICAgICAgICAvLyBCYXNpY2FsbHkgd2UgbmVlZCB0byBlbWl0IGEgY2VsbCBicmFu
Y2ggdGhhdCB0YWtlcyB5b3UgdG8gdGhlIHNsb3cgcGF0aCwgYnV0IHRoZSBzbG93CisgICAgICAg
IC8vIHBhdGggaXMgZ2VuZXJhdGVkIGJ5IHRoZSBJQyBnZW5lcmF0b3Igc28gd2UgY2FuJ3QganVt
cCB0byBpdCBmcm9tIGhlcmUuIEFuZCB0aGUgSUMKKyAgICAgICAgLy8gZ2VuZXJhdG9yIGN1cnJl
bnRseSBkb2Vzbid0IGtub3cgaG93IHRvIGVtaXQgc3VjaCBhIGJyYW5jaC4gU28sIGZvciBub3cs
IHdlIGp1c3QKKyAgICAgICAgLy8gcmVzdHJpY3QgdGhpcyB0byBDZWxsVXNlLgorICAgICAgICBB
U1NFUlQobV9ub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkgPT0gQ2VsbFVzZSk7CiAKLSAgICAgICAg
c3dpdGNoIChtX25vZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSkgewotICAgICAgICBjYXNlIENlbGxV
c2U6Ci0gICAgICAgICAgICBiYXNlID0gbG93Q2VsbChtX25vZGUtPmNoaWxkMSgpKTsKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFVudHlwZWRVc2U6Ci0gICAgICAgICAgICBiYXNl
ID0gbG93SlNWYWx1ZShtX25vZGUtPmNoaWxkMSgpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICBkZWZhdWx0OgotICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIAorICAgICAgICBMVmFsdWUg
YmFzZSA9IGxvd0NlbGwobV9ub2RlLT5jaGlsZDEoKSk7CiAgICAgICAgIFN0cmluZ0ltcGwqIHVp
ZCA9IG1fZ3JhcGguaWRlbnRpZmllcnMoKVttX25vZGUtPmlkZW50aWZpZXJOdW1iZXIoKV07Ci0g
ICAgICAgIHNldEpTVmFsdWUodm1DYWxsKG1fb3V0Lm9wZXJhdGlvbihvcGVyYXRpb25HZXRCeUlk
KSwgbV9jYWxsRnJhbWUsIG1fb3V0LmludFB0clplcm8sIGJhc2UsIG1fb3V0LmNvbnN0SW50UHRy
KHVpZCkpKTsKKyAgICAKKyAgICAgICAgLy8gQXJndW1lbnRzOiBpZCwgYnl0ZXMsIHRhcmdldCwg
bnVtQXJncywgYXJncy4uLgorICAgICAgICB1bnNpZ25lZCBzdGFja21hcElEID0gbV9zdGFja21h
cElEcysrOworICAgICAgICBzZXRKU1ZhbHVlKG1fb3V0LmNhbGwoCisgICAgICAgICAgICBtX291
dC53ZWJraXRQYXRjaHBvaW50SW50cmluc2ljKCksCisgICAgICAgICAgICBtX291dC5jb25zdElu
dDMyKHN0YWNrbWFwSUQpLCBtX291dC5jb25zdEludDMyKHNpemVPZkdldEJ5SWQoKSksCisgICAg
ICAgICAgICBjb25zdE51bGwobV9vdXQucmVmOCksIG1fb3V0LmNvbnN0SW50MzIoMiksIG1fY2Fs
bEZyYW1lLCBiYXNlKSk7CisgICAgICAgIAorICAgICAgICBtX2Z0bFN0YXRlLmdldEJ5SWRzLmFw
cGVuZChHZXRCeUlkRGVzY3JpcHRvcihzdGFja21hcElELCBtX25vZGUtPmNvZGVPcmlnaW4sIHVp
ZCkpOwogICAgIH0KICAgICAKICAgICB2b2lkIGNvbXBpbGVHZXRCdXR0ZXJmbHkoKQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExTbG93UGF0aENhbGwuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMU2xvd1BhdGhDYWxsLmNwcAkocmV2aXNp
b24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMU2xvd1BhdGhDYWxsLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE2MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRlRM
U2xvd1BhdGhDYWxsLmgiCisKKyNpZiBFTkFCTEUoRlRMX0pJVCkKKworbmFtZXNwYWNlIEpTQyB7
IG5hbWVzcGFjZSBGVEwgeworCituYW1lc3BhY2UgeworCisvLyBUaGlzIHdpbGwgYmUgYW4gUkFJ
SSB0aGluZ3kgdGhhdCB3aWxsIHNldCB1cCB0aGUgbmVjZXNzYXJ5IHN0YWNrIHNpemVzIGFuZCBv
ZmZzZXRzIGFuZCBzdWNoLgorY2xhc3MgQ2FsbENvbnRleHQgeworcHVibGljOgorICAgIENhbGxD
b250ZXh0KAorICAgICAgICBTdGF0ZSYgc3RhdGUsIGNvbnN0IFJlZ2lzdGVyU2V0JiB1c2VkUmVn
aXN0ZXJzLCBDQ2FsbEhlbHBlcnMmIGppdCwKKyAgICAgICAgdW5zaWduZWQgbnVtQXJncywgR1BS
UmVnIHJldHVyblJlZ2lzdGVyKQorICAgICAgICA6IG1fc3RhdGUoc3RhdGUpCisgICAgICAgICwg
bV91c2VkUmVnaXN0ZXJzKHVzZWRSZWdpc3RlcnMpCisgICAgICAgICwgbV9qaXQoaml0KQorICAg
ICAgICAsIG1fbnVtQXJncyhudW1BcmdzKQorICAgICAgICAsIG1fcmV0dXJuUmVnaXN0ZXIocmV0
dXJuUmVnaXN0ZXIpCisgICAgeworICAgICAgICAvLyBXZSBkb24ndCBjYXJlIHRoYXQgeW91J3Jl
IHVzaW5nIGNhbGxlZS1zYXZlIG9yIHN0YWNrIHJlZ2lzdGVycy4KKyAgICAgICAgbV91c2VkUmVn
aXN0ZXJzLmV4Y2x1ZGUoUmVnaXN0ZXJTZXQ6OnN0YWNrUmVnaXN0ZXJzKCkpOworICAgICAgICBt
X3VzZWRSZWdpc3RlcnMuZXhjbHVkZShSZWdpc3RlclNldDo6Y2FsbGVlU2F2ZVJlZ2lzdGVycygp
KTsKKyAgICAgICAgCisgICAgICAgIC8vIFRoZSByZXR1cm4gcmVnaXN0ZXIgZG9lc24ndCBuZWVk
IHRvIGJlIHNhdmVkLgorICAgICAgICBpZiAobV9yZXR1cm5SZWdpc3RlciAhPSBJbnZhbGlkR1BS
UmVnKQorICAgICAgICAgICAgbV91c2VkUmVnaXN0ZXJzLmV4Y2x1ZGUobV9yZXR1cm5SZWdpc3Rl
cik7CisgICAgICAgIAorICAgICAgICAvLyBUaGlzIGNvZGUgcmVsaWVzIG9uIHVzIGJlaW5nIDY0
LWJpdC4gRlRMIGlzIGN1cnJlbnRseSBhbHdheXMgNjQtYml0LgorICAgICAgICBzaXplX3Qgd29y
ZFNpemUgPSA4OworICAgICAgICAKKyAgICAgICAgc2l6ZV90IHN0YWNrQnl0ZXNOZWVkZWRGb3JS
ZXR1cm5BZGRyZXNzID0gd29yZFNpemU7CisgICAgICAgIAorICAgICAgICBzaXplX3Qgb2Zmc2V0
VG9TYXZpbmdBcmVhID0KKyAgICAgICAgICAgIChzdGQ6Om1heChtX251bUFyZ3MsIEdQUkluZm86
Om51bWJlck9mQXJndW1lbnRSZWdpc3RlcikgLSBHUFJJbmZvOjpudW1iZXJPZkFyZ3VtZW50UmVn
aXN0ZXJzKSAqIHdvcmRTaXplOworICAgICAgICAKKyAgICAgICAgdW5zaWduZWQgbnVtQXJndW1l
bnRSZWdpc3RlcnNUaGF0TmVlZFNhdmluZyA9IDA7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9
IHN0ZDo6bWluKEdQUkluZm86Om51bWJlck9mQXJndW1lbnRSZWdpc3RlcnMsIG51bUFyZ3MpOyBp
LS07KSB7CisgICAgICAgICAgICBpZiAobV91c2VkUmVnaXN0ZXJzLmdldChHUFJJbmZvOjp0b0Fy
Z3VtZW50UmVnaXN0ZXIoaSkpKQorICAgICAgICAgICAgICAgIG51bUFyZ3VtZW50UmVnaXN0ZXJz
VGhhdE5lZWRTYXZpbmcrKzsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgc2l6ZV90IG9m
ZnNldFRvVGh1bmtTYXZpbmdBcmVhID0KKyAgICAgICAgICAgIG9mZnNldFRvU2F2aW5nQXJlYSAr
CisgICAgICAgICAgICBudW1Bcmd1bWVudFJlZ2lzdGVyc1RoYXROZWVkU2F2aW5nICogd29yZFNp
emU7CisgICAgICAgIAorICAgICAgICBtX3N0YWNrQnl0ZXNOZWVkZWQgPQorICAgICAgICAgICAg
b2Zmc2V0VG9UaHVua1NhdmluZ0FyZWEgKworICAgICAgICAgICAgc3RhY2tCeXRlc05lZWRlZEZv
clJldHVybkFkZHJlc3MgKworICAgICAgICAgICAgKG1fdXNlZFJlZ2lzdGVycy5udW1iZXJPZlNl
dFJlZ2lzdGVycygpIC0gbnVtQXJndW1lbnRSZWdpc3RlcnNUaGF0TmVlZFNhdmluZykgKiB3b3Jk
U2l6ZTsKKyAgICAgICAgCisgICAgICAgIHNpemVfdCBzdGFja0FsaWdubWVudCA9IDE2OworICAg
ICAgICAKKyAgICAgICAgbV9zdGFja0J5dGVzTmVlZGVkID0gKG1fc3RhY2tCeXRlc05lZWRlZCAr
IHN0YWNrQWxpZ25tZW50IC0gMSkgJiB+c3RhY2tBbGlnbm1lbnQ7CisgICAgICAgIAorICAgICAg
ICBtX2ppdC5zdWJQdHIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIobV9zdGFja0J5dGVzTmVl
ZGVkKSwgQ0NhbGxIZWxwZXJzOjpzdGFja1BvaW50ZXJSZWdpc3Rlcik7CisgICAgICAgIAorICAg
ICAgICBtX3RodW5rU2F2ZVNldCA9IG1fdXNlZFJlZ2lzdGVyczsKKyAgICAgICAgCisgICAgICAg
IGZvciAodW5zaWduZWQgaSA9IHN0ZDo6bWluKEdQUkluZm86Om51bWJlck9mQXJndW1lbnRSZWdp
c3RlcnMsIG51bUFyZ3MpOyBpLS07KSB7CisgICAgICAgICAgICBpZiAoIW1fdXNlZFJlZ2lzdGVy
cy5nZXQoR1BSSW5mbzo6dG9Bcmd1bWVudFJlZ2lzdGVyKGkpKSkKKyAgICAgICAgICAgICAgICBj
b250aW51ZTsKKyAgICAgICAgICAgIEdQUlJlZyByZWcgPSBHUFJJbmZvOjp0b0FyZ3VtZW50UmVn
aXN0ZXIoaSk7CisgICAgICAgICAgICBtX2ppdC5zdG9yZVB0cihyZWcsIENDYWxsSGVscGVyczo6
QWRkcmVzcyhDQ2FsbEhlbHBlcnM6OnN0YWNrUG9pbnRlclJlZ2lzdGVyLCBvZmZzZXRUb1Nhdmlu
Z0FyZWEgKyBpICogd29yZFNpemUpKTsKKyAgICAgICAgICAgIG1fdGh1bmtTYXZlU2V0LmNsZWFy
KHJlZyk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIG1fb2Zmc2V0ID0gb2Zmc2V0VG9U
aHVua1NhdmluZ0FyZWE7CisgICAgfQorICAgIAorICAgIH5DYWxsQ29udGV4dCgpCisgICAgewor
ICAgICAgICBtX2ppdC5tb3ZlKEdQUkluZm86OnJldHVyblZhbHVlR1BSLCBtX3JldHVyblJlZ2lz
dGVyKTsKKyAgICAgICAgCisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IHN0ZDo6bWluKEdQUklu
Zm86Om51bWJlck9mQXJndW1lbnRSZWdpc3RlcnMsIG1fbnVtQXJncyk7IGktLTspIHsKKyAgICAg
ICAgICAgIGlmICghbV91c2VkUmVnaXN0ZXJzLmdldChHUFJJbmZvOjp0b0FyZ3VtZW50UmVnaXN0
ZXIoaSkpKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgR1BSUmVnIHJl
ZyA9IEdQUkluZm86OnRvQXJndW1lbnRSZWdpc3RlcihpKTsKKyAgICAgICAgICAgIG1faml0Lmxv
YWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKENDYWxsSGVscGVyczo6c3RhY2tQb2ludGVyUmVn
aXN0ZXIsIG9mZnNldFRvU2F2aW5nQXJlYSArIGkgKiB3b3JkU2l6ZSksIHJlZyk7CisgICAgICAg
IH0KKyAgICAgICAgCisgICAgICAgIG1faml0LmFkZFB0cihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJ
bW0zMihtX3N0YWNrQnl0ZXNOZWVkZWQpLCBDQ2FsbEhlbHBlcnM6OnN0YWNrUG9pbnRlclJlZ2lz
dGVyKTsKKyAgICB9CisgICAgCisgICAgUmVnaXN0ZXJTZXQgdXNlZFJlZ2lzdGVycygpIGNvbnN0
CisgICAgeworICAgICAgICByZXR1cm4gbV90aHVua1NhdmVTZXQ7CisgICAgfQorICAgIAorICAg
IHB0cmRpZmZfdCBvZmZzZXQoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fb2Zmc2V0
OworICAgIH0KKyAgICAKKyAgICBTbG93UGF0aENhbGxLZXkga2V5V2l0aFRhcmdldCh2b2lkKiBj
YWxsVGFyZ2V0KSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIFNsb3dQYXRoQ2FsbEtleSh1
c2VkUmVnaXN0ZXJzKCksIGNhbGxUYXJnZXQsIG9mZnNldCgpKTsKKyAgICB9CisgICAgCisgICAg
TWFjcm9Bc3NlbWJsZXI6OkNhbGwgbWFrZUNhbGwodm9pZCogY2FsbFRhcmdldCkgY29uc3QKKyAg
ICB7CisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIHJlc3VsdCA9IG1faml0LmNhbGwoKTsK
KyAgICAgICAgc3RhdGUuZmluYWxpemVyLT5zbG93UGF0aENhbGxzLmFwcGVuZChTbG93UGF0aENh
bGwoCisgICAgICAgICAgICByZXN1bHQsIGtleVdpdGhUYXJnZXQoY2FsbFRhcmdldCkpKTsKKyAg
ICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAgCitwcml2YXRlOgorICAgIFN0YXRlJiBt
X3N0YXRlOworICAgIFJlZ2lzdGVyU2V0IG1fdXNlZFJlZ2lzdGVyczsKKyAgICBDQ2FsbEhlbHBl
cnMgbV9qaXQ7CisgICAgdW5zaWduZWQgbV9udW1BcmdzOworICAgIHNpemVfdCBtX3N0YWNrQnl0
ZXNOZWVkZWQ7CisgICAgR1BSUmVnIG1fcmV0dXJuUmVnaXN0ZXI7CisgICAgUmVnaXN0ZXJTZXQg
bV9vZmZzZXQ7Cit9OworCit9IC8vIGFub255bW91cyBuYW1lc3BhY2UKKworTWFjcm9Bc3NlbWJs
ZXI6OkNhbGwgY2FsbE9wZXJhdGlvbigKKyAgICBTdGF0ZSYgc3RhdGUsIGNvbnN0IFJlZ2lzdGVy
U2V0JiB1c2VkUmVnaXN0ZXJzLCBDQ2FsbEhlbHBlcnMmIGppdCwgCisgICAgSl9KSVRPcGVyYXRp
b25fRVNzaUpJIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgR1BSUmVnIGNhbGxGcmFtZVJlZ2lz
dGVyLAorICAgIFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbywgR1BSUmVnIG9iamVjdCwgU3Ry
aW5nSW1wbCogdWlkKQoreworICAgIENhbGxDb250ZXh0IGNvbnRleHQoc3RhdGUsIHVzZWRSZWdp
c3RlcnMsIGppdCwgNCwgcmVzdWx0KTsKKyAgICBqaXQuc2V0dXBBcmd1bWVudHMoY2FsbEZyYW1l
UmVnaXN0ZXIsIFRydXN0ZWRJbW1QdHIoc3R1YkluZm8pLCBvYmplY3QsIFRydXN0ZWRJbW1QdHIo
dWlkKSk7CisgICAgcmV0dXJuIGNvbnRleHQubWFrZUNhbGwob3BlcmF0aW9uKTsKKyAgICAvLyBG
SVhNRTogRlRMIHNob3VsZCBzdXBwb3J0IGV4Y2VwdGlvbnMuCisgICAgLy8gaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExMzYyMgorfQorCit9IH0gLy8gbmFtZXNwYWNl
IEpTQzo6RlRMCisKKyNlbmRpZiAvLyBFTkFCTEUoRlRMX0pJVCkKKwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Z0bC9GVExTbG93UGF0aENhbGwuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZnRsL0ZUTFNsb3dQYXRoQ2FsbC5oCShyZXZpc2lvbiAwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExTbG93UGF0aENhbGwuaAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDY4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAor
ICovCisKKyNpZm5kZWYgRlRMU2xvd1BhdGhDYWxsX2gKKyNkZWZpbmUgRlRMU2xvd1BhdGhDYWxs
X2gKKworI2lmIEVOQUJMRShGVExfSklUKQorCisjaW5jbHVkZSAiRlRMU2xvd1BhdGhDYWxsS2V5
LmgiCisjaW5jbHVkZSAiSklUT3BlcmF0aW9ucy5oIgorI2luY2x1ZGUgIk1hY3JvQXNzZW1ibGVy
LmgiCisjaW5jbHVkZSAiU3RydWN0dXJlU3R1YkluZm8uaCIKKworbmFtZXNwYWNlIEpTQyB7IG5h
bWVzcGFjZSBGVEwgeworCitjbGFzcyBTdGF0ZTsKKworY2xhc3MgU2xvd1BhdGhDYWxsIHsKK3B1
YmxpYzoKKyAgICBTbG93UGF0aENhbGwoKSB7IH0KKyAgICAKKyAgICBTbG93UGF0aENhbGwoTWFj
cm9Bc3NlbWJsZXI6OkNhbGwgY2FsbCwgY29uc3QgU2xvd1BhdGhDYWxsS2V5JiBrZXkpCisgICAg
ICAgIDogbV9jYWxsKGNhbGwpCisgICAgICAgICwgbV9rZXkoa2V5KQorICAgIHsKKyAgICB9Cisg
ICAgCisgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgY2FsbCgpIGNvbnN0IHsgcmV0dXJuIG1fY2Fs
bDsgfQorICAgIFNsb3dQYXRoQ2FsbEtleSBrZXkoKSBjb25zdCB7IHJldHVybiBtX2tleTsgfQor
ICAgIAorcHJpdmF0ZToKKyAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBtX2NhbGw7CisgICAgU2xv
d1BhdGhDYWxsS2V5IG1fa2V5OworfTsKKworTWFjcm9Bc3NlbWJsZXI6OkNhbGwgY2FsbE9wZXJh
dGlvbigKKyAgICBTdGF0ZSYsIGNvbnN0IFJlZ2lzdGVyU2V0JiwgQ0NhbGxIZWxwZXJzJiwgSl9K
SVRPcGVyYXRpb25fRVNzaUpJLAorICAgIEdQUlJlZyByZXN1bHQsIEdQUlJlZyBjYWxsRnJhbWVS
ZWdpc3RlciwgU3RydWN0dXJlU3R1YkluZm8qLCBHUFJSZWcgb2JqZWN0LAorICAgIFN0cmluZ0lt
cGwqIHVpZCk7CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpGVEwKKworI2VuZGlmIC8vIEVOQUJM
RShGVExfSklUKQorCisjZW5kaWYgLy8gRlRMU2xvd1BhdGhDYWxsX2gKKwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2Z0bC9GVExTbG93UGF0aENhbGxLZXkuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMU2xvd1BhdGhDYWxsS2V5LmNwcAkocmV2aXNp
b24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMU2xvd1BhdGhDYWxsS2V5LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJG
VExTbG93UGF0aENhbGxLZXkuaCIKKworI2lmIEVOQUJMRShGVExfSklUKQorCituYW1lc3BhY2Ug
SlNDIHsgbmFtZXNwYWNlIEZUTCB7CisKK3ZvaWQgU2xvd1BhdGhDYWxsS2V5OjpkdW1wKFByaW50
U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50KCI8dXNlZFJlZ2lzdGVycyA9ICIs
IG1fdXNlZFJlZ2lzdGVycywgIiwgb2Zmc2V0ID0gIiArIG1fb2Zmc2V0LCAiLCBjYWxsVGFyZ2V0
ID0gIiwgUmF3UG9pbnRlcihtX2NhbGxUYXJnZXQpLCAiPiIpOworfQorCit9IH0gLy8gbmFtZXNw
YWNlIEpTQzo6RlRMCisKKyNlbmRpZiAvLyBFTkFCTEUoRlRMX0pJVCkKKwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2Z0bC9GVExTbG93UGF0aENhbGxLZXkuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFNsb3dQYXRoQ2FsbEtleS5oCShyZXZpc2lvbiAw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExTbG93UGF0aENhbGxLZXkuaAkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDEyNiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEZUTFNsb3dQYXRoQ2FsbEtleV9oCisjZGVmaW5l
IEZUTFNsb3dQYXRoQ2FsbEtleV9oCisKKyNpZiBFTkFCTEUoRlRMX0pJVCkKKworI2luY2x1ZGUg
IlJlZ2lzdGVyU2V0LmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgRlRMIHsKKworLy8g
VGhpcyBpcyB1c2VkIGZvciBjcmVhdGluZyBzb21lIHNhbml0eSBpbiBzbG93LXBhdGggY2FsbHMg
b3V0IG9mIHRoZSBGVEwncyBpbmxpbmUKKy8vIGNhY2hlcy4gVGhlIGlkZWEgaXMgdGhhdCB3ZSBk
b24ndCB3YW50IGFsbCBvZiB0aGUgcmVnaXN0ZXIgc2F2ZS9yZXN0b3JlIHN0dWZmIHRvCisvLyBi
ZSBnZW5lcmF0ZWQgYXQgZWFjaCBJQyBzaXRlLiBJbnN0ZWFkLCB0aGUgSUMgc2xvdyBwYXRoIGNh
bGwgc2l0ZSB3aWxsIGp1c3Qgc2F2ZQorLy8gdGhlIHJlZ2lzdGVycyBuZWVkZWQgZm9yIHRoZSBh
cmd1bWVudHMuIEl0IHdpbGwgYXJyYW5nZSBmb3IgdGhlcmUgdG8gYmUgZW5vdWdoCisvLyBzcGFj
ZSBvbiB0b3Agb2Ygc3RhY2sgdG8gc2F2ZSB0aGUgcmVtYWluaW5nIHJlZ2lzdGVycyBhbmQgdGhl
IHJldHVybiBQQy4gVGhlbiBpdAorLy8gd2lsbCBjYWxsIGEgc2hhcmVkIHRodW5rIHRoYXQgd2ls
bCBzYXZlIHRoZSByZW1haW5pbmcgcmVnaXN0ZXJzLiBUaGF0IHRodW5rIG5lZWRzCisvLyB0byBr
bm93IHRoZSBzdGFjayBvZmZzZXQgYXQgd2hpY2ggdGhpbmdzIGdldCBzYXZlZCBhbG9uZyB3aXRo
IHRoZSBjYWxsIHRhcmdldC4KKworLy8gTm90ZSB0aGF0IHRoZSBvZmZzZXQgaXMgKm5vdCBpbmNs
dWRpbmcqIHRoZSByZXR1cm4gUEMgdGhhdCB3b3VsZCBiZSBwdXNoZWQgb24gWDg2LgorCitjbGFz
cyBTbG93UGF0aENhbGxLZXkgeworcHVibGljOgorICAgIFNsb3dQYXRoQ2FsbEtleSgpCisgICAg
ICAgIDogbV9jYWxsVGFyZ2V0KDApCisgICAgICAgICwgbV9vZmZzZXQoMCkKKyAgICB7CisgICAg
fQorICAgIAorICAgIFNsb3dQYXRoQ2FsbEtleShjb25zdCBSZWdpc3RlclNldCYgc2V0LCB2b2lk
KiBjYWxsVGFyZ2V0LCBwdHJkaWZmX3Qgb2Zmc2V0KQorICAgICAgICA6IG1fdXNlZFJlZ2lzdGVy
cyhzZXQpCisgICAgICAgICwgbV9jYWxsVGFyZ2V0KGNhbGxUYXJnZXQpCisgICAgICAgICwgbV9v
ZmZzZXQob2Zmc2V0KQorICAgIHsKKyAgICB9CisgICAgCisgICAgY29uc3QgUmVnaXN0ZXJTZXQm
IHVzZWRSZWdpc3RlcnMoKSBjb25zdCB7IHJldHVybiBtX3VzZWRSZWdpc3RlcnM7IH0KKyAgICB2
b2lkKiBjYWxsVGFyZ2V0KCkgY29uc3QgeyByZXR1cm4gbV9jYWxsVGFyZ2V0OyB9CisgICAgcHRy
ZGlmZl90IG9mZnNldCgpIGNvbnN0IHsgcmV0dXJuIG1fb2Zmc2V0OyB9CisgICAgCisgICAgdm9p
ZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CisgICAgCisgICAgZW51bSBFbXB0eVZhbHVlVGFn
IHsgRW1wdHlWYWx1ZSB9OworICAgIGVudW0gRGVsZXRlZFZhbHVlVGFnIHsgRGVsZXRlZFZhbHVl
IH07CisgICAgCisgICAgU2xvd1BhdGhDYWxsS2V5KEVtcHR5VmFsdWVUYWcpCisgICAgICAgIDog
bV91c2VkUmVnaXN0ZXJzKFJlZ2lzdGVyU2V0OjpFbXB0eVZhbHVlKQorICAgICAgICAsIG1fY2Fs
bFRhcmdldCgwKQorICAgICAgICAsIG1fb2Zmc2V0KDApCisgICAgeworICAgIH0KKyAgICAKKyAg
ICBTbG93UGF0aENhbGxLZXkoRGVsZXRlZFZhbHVlVGFnKQorICAgICAgICA6IG1fdXNlZFJlZ2lz
dGVycyhCaXRWZWN0b3I6OkRlbGV0ZWRWYWx1ZSkKKyAgICAgICAgLCBtX2NhbGxUYXJnZXQoMCkK
KyAgICAgICAgLCBtX29mZnNldCgwKQorICAgIHsKKyAgICB9CisgICAgCisgICAgYm9vbCBpc0Vt
cHR5VmFsdWUoKSBjb25zdCB7IHJldHVybiBtX3VzZWRSZWdpc3RlcnMuaXNFbXB0eVZhbHVlKCk7
IH0KKyAgICBib29sIGlzRGVsZXRlZFZhbHVlKCkgY29uc3QgeyByZXR1cm4gbV91c2VkUmVnaXN0
ZXJzLmlzRGVsZXRlZFZhbHVlKCk7IH0KKyAgICAKKyAgICBib29sIG9wZXJhdG9yPT0oY29uc3Qg
U2xvd1BhdGhDYWxsS2V5JiBvdGhlcikKKyAgICB7CisgICAgICAgIHJldHVybiBtX3VzZWRSZWdp
c3RlcnMgPT0gb3RoZXIubV91c2VkUmVnaXN0ZXJzCisgICAgICAgICAgICAmJiBtX2NhbGxUYXJn
ZXQgPT0gb3RoZXIubV9jYWxsVGFyZ2V0CisgICAgICAgICAgICAmJiBtX29mZnNldCA9PSBvdGhl
ci5tX29mZnNldDsKKyAgICB9CisgICAgdW5zaWduZWQgaGFzaCgpIGNvbnN0CisgICAgeworICAg
ICAgICByZXR1cm4gbV91c2VkUmVnaXN0ZXJzLmhhc2goKSArIFB0ckhhc2g8dm9pZCo+OjpoYXNo
KG1fY2FsbFRhcmdldCkgKyBtX29mZnNldDsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgUmVnaXN0
ZXJTZXQgbV91c2VkUmVnaXN0ZXJzOworICAgIHZvaWQqIG1fY2FsbFRhcmdldDsKKyAgICBwdHJk
aWZmX3QgbV9vZmZzZXQ7Cit9OworCitzdHJ1Y3QgU2xvd1BhdGhDYWxsS2V5SGFzaCB7CisgICAg
c3RhdGljIHVuc2lnbmVkIGhhc2goY29uc3QgU2xvd1BhdGhDYWxsS2V5JiBrZXkpIHsgcmV0dXJu
IGtleS5oYXNoKCk7IH0KKyAgICBzdGF0aWMgYm9vbCBlcXVhbChjb25zdCBTbG93UGF0aENhbGxL
ZXkmIGEsIGNvbnN0IFNsb3dQYXRoQ2FsbEtleSYgYikgeyByZXR1cm4gYSA9PSBiOyB9CisgICAg
c3RhdGljIGNvbnN0IGJvb2wgc2FmZVRvQ29tcGFyZVRvRW1wdHlPckRlbGV0ZWQgPSBmYWxzZTsK
K307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpGVEwKKworbmFtZXNwYWNlIFdURiB7CisKK3Rl
bXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBEZWZhdWx0SGFzaDsKK3RlbXBsYXRlPD4gc3RydWN0
IERlZmF1bHRIYXNoPEpTQzo6RlRMOjpTbG93UGF0aENhbGxLZXk+IHsKKyAgICB0eXBlZGVmIEpT
Qzo6RlRMOjpTbG93UGF0aENhbGxLZXlIYXNoIEhhc2g7Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBUPiBzdHJ1Y3QgSGFzaFRyYWl0czsKK3RlbXBsYXRlPD4gc3RydWN0IEhhc2hUcmFpdHM8SlND
OjpGVEw6OlNsb3dQYXRoQ2FsbEtleT4gOiBwdWJsaWMgQ3VzdG9tSGFzaFRyYWl0czxKU0M6OkZU
TDo6U2xvd1BhdGhDYWxsS2V5PiB7IH07CisKK30gLy8gbmFtZXNwYWNlIFdURgorCisjZW5kaWYg
Ly8gRU5BQkxFKEZUTF9KSVQpCisKKyNlbmRpZiAvLyBGVExTbG93UGF0aENhbGxLZXlfaAorCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFN0YWNrTWFwcy5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExTdGFja01hcHMuY3BwCShyZXZpc2lv
biAxNTc3MDcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFN0YWNrTWFwcy5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTczLDYgKzczLDExIEBAIHZvaWQgU3RhY2tNYXBzOjpMb2NhdGlv
bjo6ZHVtcChQcmludFN0cmUKICAgICBvdXQucHJpbnQoIigiLCBraW5kLCAiLCByZWciLCBkd2Fy
ZlJlZ051bSwgIiwgIiwgb2Zmc2V0LCAiKSIpOwogfQogCitHUFJSZWcgU3RhY2tNYXBzOjpMb2Nh
dGlvbjo6ZGlyZWN0R1BSKFN0YWNrTWFwcyYgc3RhY2ttYXBzKSBjb25zdAoreworICAgIHJldHVy
biBGVEw6OkxvY2F0aW9uOjpmb3JTdGFja21hcHMoc3RhY2ttYXBzLCAqdGhpcykuZGlyZWN0R1BS
KCk7Cit9CisKIHZvaWQgU3RhY2tNYXBzOjpMb2NhdGlvbjo6cmVzdG9yZUludG8oCiAgICAgTWFj
cm9Bc3NlbWJsZXImIGppdCwgU3RhY2tNYXBzJiBzdGFja21hcHMsIGNoYXIqIHNhdmVkUmVnaXN0
ZXJzLCBHUFJSZWcgcmVzdWx0KSBjb25zdAogewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Z0bC9GVExTdGFja01hcHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZnRsL0ZUTFN0YWNrTWFwcy5oCShyZXZpc2lvbiAxNTc3MDcpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZnRsL0ZUTFN0YWNrTWFwcy5oCSh3b3JraW5nIGNvcHkpCkBAIC02NCw2ICs2NCw3IEBA
IHN0cnVjdCBTdGFja01hcHMgewogICAgICAgICB2b2lkIHBhcnNlKERhdGFWaWV3KiwgdW5zaWdu
ZWQmIG9mZnNldCk7CiAgICAgICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdDsK
ICAgICAgICAgCisgICAgICAgIEdQUlJlZyBkaXJlY3RHUFIoU3RhY2tNYXBzJikgY29uc3Q7CiAg
ICAgICAgIHZvaWQgcmVzdG9yZUludG8oTWFjcm9Bc3NlbWJsZXImLCBTdGFja01hcHMmLCBjaGFy
KiBzYXZlZFJlZ2lzdGVycywgR1BSUmVnIHJlc3VsdCkgY29uc3Q7CiAgICAgfTsKICAgICAKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMU3RhdGUuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFN0YXRlLmgJKHJldmlzaW9uIDE1NzcwNykKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMU3RhdGUuaAkod29ya2luZyBjb3B5KQpAQCAt
NTYsNiArNTYsNyBAQCBwdWJsaWM6CiAgICAgUmVmUHRyPEpJVENvZGU+IGppdENvZGU7CiAgICAg
R2VuZXJhdGVkRnVuY3Rpb24gZ2VuZXJhdGVkRnVuY3Rpb247CiAgICAgSklURmluYWxpemVyKiBm
aW5hbGl6ZXI7CisgICAgU2VnbWVudGVkVmVjdG9yPEdldEJ5SWREZXNjcmlwdG9yPiBnZXRCeUlk
czsKICAgICBWZWN0b3I8Q1N0cmluZz4gY29kZVNlY3Rpb25OYW1lczsKICAgICBWZWN0b3I8Q1N0
cmluZz4gZGF0YVNlY3Rpb25OYW1lczsKICAgICBSZWZDb3VudGVkQXJyYXk8TFNlY3Rpb25Xb3Jk
PiBzdGFja21hcHNTZWN0aW9uOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExU
aHVua3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMVGh1
bmtzLmNwcAkocmV2aXNpb24gMTU3NzA3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9G
VExUaHVua3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDQsNiArMTQ0LDY3IEBAIE1hY3JvQXNz
ZW1ibGVyQ29kZVJlZiBvc3JFeGl0R2VuZXJhdGlvblcKICAgICByZXR1cm4gRklOQUxJWkVfQ09E
RShwYXRjaEJ1ZmZlciwgKCJGVEwgT1NSIGV4aXQgZ2VuZXJhdGlvbiB0aHVuayBmb3IgY2FsbEZy
YW1lIGF0ICVzIiwgdG9DU3RyaW5nKGxvY2F0aW9uKS5kYXRhKCkpKTsKIH0KIAorTWFjcm9Bc3Nl
bWJsZXJDb2RlUmVmIHNsb3dQYXRoQ2FsbFRodW5rR2VuZXJhdG9yKFZNJiwgY29uc3QgU2xvd1Bh
dGhDYWxsS2V5JiBrZXkpCit7CisgICAgQXNzZW1ibHlIZWxwZXJzIGppdCgmdm0sIDApOworICAg
IAorICAgIC8vIFdlIHdhbnQgdG8gc2F2ZSB0aGUgZ2l2ZW4gcmVnaXN0ZXJzIGF0IHRoZSBnaXZl
biBvZmZzZXQsIHRoZW4gd2Ugd2FudCB0byBzYXZlIHRoZQorICAgIC8vIG9sZCByZXR1cm4gYWRk
cmVzcyBzb21ld2hlcmUgcGFzdCB0aGF0IG9mZnNldCwgYW5kIHRoZW4gZmluYWxseSB3ZSB3YW50
IHRvIG1ha2UgdGhlCisgICAgLy8gY2FsbC4KKyAgICAKKyAgICBzaXplX3QgY3VycmVudE9mZnNl
dCA9IGtleS5vZmZzZXQoKSArIHNpemVvZih2b2lkKik7CisgICAgCisjaWYgQ1BVKFg4NikgfHwg
Q1BVKFg4Nl82NCkKKyAgICBjdXJyZW50T2Zmc2V0ICs9IHNpemVvZih2b2lkKik7CisjZW5kaWYK
KyAgICAKKyAgICBmb3IgKE1hY3JvQXNzZW1ibGVyOjpSZWdpc3RlcklEIHJlZyA9IE1hY3JvQXNz
ZW1ibGVyOjpmaXJzdFJlZ2lzdGVyKCk7IHJlZyA8PSBNYWNyb0Fzc2VtYmxlcjo6bGFzdFJlZ2lz
dGVyKCk7IHJlZyA9IHN0YXRpY19jYXN0PE1hY3JvQXNzZW1ibGVyOjpSZWdpc3RlcklEPihyZWcg
KyAxKSkgeworICAgICAgICBpZiAoIWtleS51c2VkUmVnaXN0ZXJzKCkuZ2V0KHJlZykpCisgICAg
ICAgICAgICBjb250aW51ZTsKKyAgICAgICAgaml0LnN0b3JlUHRyKHJlZywgQXNzZW1ibHlIZWxw
ZXJzOjpBZGRyZXNzKE1hY3JvQXNzZW1ibGVyOjpzdGFja1BvaW50ZXJSZWdpc3RlciwgY3VycmVu
dE9mZnNldCkpOworICAgICAgICBjdXJyZW50T2Zmc2V0ICs9IHNpemVvZih2b2lkKik7CisgICAg
fQorICAgIAorICAgIGZvciAoTWFjcm9Bc3NlbWJsZXI6OkZQUmVnaXN0ZXJJRCByZWcgPSBNYWNy
b0Fzc2VtYmxlcjo6Zmlyc3RGUFJlZ2lzdGVyKCk7IHJlZyA8PSBNYWNyb0Fzc2VtYmxlcjo6bGFz
dEZQUmVnaXN0ZXIoKTsgcmVnID0gc3RhdGljX2Nhc3Q8TWFjcm9Bc3NlbWJsZXI6OkZQUmVnaXN0
ZXJJRD4ocmVnICsgMSkpIHsKKyAgICAgICAgaWYgKCFrZXkudXNlZFJlZ2lzdGVycygpLmdldChy
ZWcpKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIGppdC5zdG9yZURvdWJsZShyZWcs
IEFzc2VtYmx5SGVscGVyczo6QWRkcmVzcyhNYWNyb0Fzc2VtYmxlcjo6c3RhY2tQb2ludGVyUmVn
aXN0ZXIsIGN1cnJlbnRPZmZzZXQpKTsKKyAgICAgICAgY3VycmVudE9mZnNldCArPSBzaXplb2Yo
ZG91YmxlKTsKKyAgICB9CisgICAgCisgICAgaml0LnByZXNlcnZlUmV0dXJuQWRkcmVzc0FmdGVy
Q2FsbChHUFJJbmZvOjpub25BcmdHUFIwKTsKKyAgICBqaXQuc3RvcmVQdHIoR1BSSW5mbzo6bm9u
QXJnR1BSMCwgQXNzZW1ibHlIZWxwZXJzOjpBZGRyZXNzKE1hY3JvQXNzZW1ibGVyOjpzdGFja1Bv
aW50ZXJSZWdpc3Rlciwga2V5Lm9mZnNldCgpKSk7CisgICAgCisgICAgSklUQ29tcGlsZXI6OkNh
bGwgY2FsbCA9IGppdC5jYWxsKCk7CisgICAgCisgICAgaml0LmxvYWRQdHIoQXNzZW1ibHlIZWxw
ZXJzOjpBZGRyZXNzKE1hY3JvQXNzZW1ibGVyOjpzdGFja1BvaW50ZXJSZWdpc3Rlciwga2V5Lm9m
ZnNldCgpKSwgR1BSSW5mbzo6bm9uUHJlc2VydmVkTm9uUmV0dXJuR1BSKTsKKyAgICBqaXQucmVz
dG9yZVJldHVybkFkZHJlc3NCZWZvcmVSZXR1cm4oR1BSSW5mbzo6bm9uUHJlc2VydmVkTm9uUmV0
dXJuR1BSKTsKKyAgICAKKyAgICBmb3IgKE1hY3JvQXNzZW1ibGVyOjpGUFJlZ2lzdGVySUQgcmVn
ID0gTWFjcm9Bc3NlbWJsZXI6Omxhc3RGUFJlZ2lzdGVyKCk7IDsgcmVnID0gc3RhdGljX2Nhc3Q8
TWFjcm9Bc3NlbWJsZXI6OkZQUmVnaXN0ZXJJRD4ocmVnIC0gMSkpIHsKKyAgICAgICAgaWYgKCFr
ZXkudXNlZFJlZ2lzdGVycygpLmdldChyZWcpKQorICAgICAgICAgICAgY29udGludWU7CisgICAg
ICAgIGN1cnJlbnRPZmZzZXQgLT0gc2l6ZW9mKGRvdWJsZSk7CisgICAgICAgIGppdC5sb2FkRG91
YmxlKEFzc2VtYmx5SGVscGVyczo6QWRkcmVzcyhNYWNyb0Fzc2VtYmxlcjo6c3RhY2tQb2ludGVy
UmVnaXN0ZXIsIGN1cnJlbnRPZmZzZXQpLCByZWcpOworICAgICAgICBpZiAocmVnID09IE1hY3Jv
QXNzZW1ibGVyOjpmaXJzdEZQUmVnaXN0ZXIoKSkKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0K
KyAgICAKKyAgICBmb3IgKE1hY3JvQXNzZW1ibGVyOjpSZWdpc3RlcklEIHJlZyA9IE1hY3JvQXNz
ZW1ibGVyOjpsYXN0UmVnaXN0ZXIoKTsgOyByZWcgPSBzdGF0aWNfY2FzdDxNYWNyb0Fzc2VtYmxl
cjo6UmVnaXN0ZXJJRD4ocmVnIC0gMSkpIHsKKyAgICAgICAgaWYgKCFrZXkudXNlZFJlZ2lzdGVy
cygpLmdldChyZWcpKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIGN1cnJlbnRPZmZz
ZXQgLT0gc2l6ZW9mKHZvaWQqKTsKKyAgICAgICAgaml0LmxvYWRQdHIoQXNzZW1ibHlIZWxwZXJz
OjpBZGRyZXNzKE1hY3JvQXNzZW1ibGVyOjpzdGFja1BvaW50ZXJSZWdpc3RlciwgY3VycmVudE9m
ZnNldCksIHJlZyk7CisgICAgICAgIGlmIChyZWcgPT0gTWFjcm9Bc3NlbWJsZXI6OmZpcnN0UmVn
aXN0ZXIoKSkKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KKyAgICAKKyAgICBqaXQucmV0KCk7
CisKKyAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKHZtLCAmaml0LCBHTE9CQUxfVEhVTktfSUQp
OworICAgIHBhdGNoQnVmZmVyLmxpbmsoY2FsbCwga2V5LmNhbGxUYXJnZXQoKSk7CisgICAgcmV0
dXJuIEZJTkFMSVpFX0NPREUocGF0Y2hCdWZmZXIsICgiRlRMIHNsb3cgcGF0aCBjYWxsIHRodW5r
IGZvciAlcyIsIHRvQ1N0cmluZyhrZXkpLmRhdGEoKSkpOworfQorCiB9IH0gLy8gbmFtZXNwYWNl
IEpTQzo6RlRMCiAKICNlbmRpZiAvLyBFTkFCTEUoRlRMX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9mdGwvRlRMVGh1bmtzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Z0bC9GVExUaHVua3MuaAkocmV2aXNpb24gMTU3NzA3KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Z0bC9GVExUaHVua3MuaAkod29ya2luZyBjb3B5KQpAQCAtMzEsNiArMzEsNyBA
QAogI2lmIEVOQUJMRShGVExfSklUKQogCiAjaW5jbHVkZSAiRlRMTG9jYXRpb24uaCIKKyNpbmNs
dWRlICJGVExTbG93UGF0aENhbGxLZXkuaCIKICNpbmNsdWRlICJNYWNyb0Fzc2VtYmxlckNvZGVS
ZWYuaCIKICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgogCkBAIC00Myw2ICs0NCw3IEBAIG5hbWVz
cGFjZSBGVEwgewogTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIG9zckV4aXRHZW5lcmF0aW9uV2l0aG91
dFN0YWNrTWFwVGh1bmtHZW5lcmF0b3IoVk0qKTsKIAogTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIG9z
ckV4aXRHZW5lcmF0aW9uV2l0aFN0YWNrTWFwVGh1bmtHZW5lcmF0b3IoVk0mLCBjb25zdCBMb2Nh
dGlvbiYpOworTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHNsb3dQYXRoQ2FsbFRodW5rR2VuZXJhdG9y
KFZNJiwgY29uc3QgU2xvd1BhdGhDYWxsS2V5Jik7CiAKIHRlbXBsYXRlPHR5cGVuYW1lIE1hcFR5
cGUsIHR5cGVuYW1lIEtleVR5cGUsIHR5cGVuYW1lIEdlbmVyYXRvclR5cGU+CiBNYWNyb0Fzc2Vt
YmxlckNvZGVSZWYgZ2VuZXJhdGVJZk5lY2Vzc2FyeSgKQEAgLTY1LDggKzY3LDE1IEBAIHB1Ymxp
YzoKICAgICAgICAgICAgIHZtLCBtX29zckV4aXRUaHVua3MsIGxvY2F0aW9uLCBvc3JFeGl0R2Vu
ZXJhdGlvbldpdGhTdGFja01hcFRodW5rR2VuZXJhdG9yKTsKICAgICB9CiAgICAgCisgICAgTWFj
cm9Bc3NlbWJsZXJDb2RlUmVmIGdldFNsb3dQYXRoQ2FsbFRodW5rKFZNJiB2bSwgY29uc3QgU2xv
d1BhdGhDYWxsS2V5JiBrZXkpCisgICAgeworICAgICAgICByZXR1cm4gZ2VuZXJhdGVJZk5lY2Vz
c2FyeSgKKyAgICAgICAgICAgIHZtLCBtX3Nsb3dQYXRoQ2FsbFRodW5rcywga2V5LCBzbG93UGF0
aENhbGxUaHVua0dlbmVyYXRvcik7CisgICAgfQorICAgIAogcHJpdmF0ZToKICAgICBIYXNoTWFw
PExvY2F0aW9uLCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY+IG1fb3NyRXhpdFRodW5rczsKKyAgICBI
YXNoTWFwPFNsb3dQYXRoQ2FsbEtleSwgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPiBtX3Nsb3dQYXRo
Q2FsbFRodW5rczsKIH07CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpGVEwKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvR1BSSW5mby5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvR1BSSW5mby5oCShyZXZpc2lvbiAxNTc3MDcpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0dQUkluZm8uaAkod29ya2luZyBjb3B5KQpAQCAtMzc4LDcgKzM3OCw3
IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgY29uc3QgR1BSUmVnIHJldHVyblZhbHVlR1BSID0gWDg2
UmVnaXN0ZXJzOjplYXg7IC8vIHJlZ1QwCiAgICAgc3RhdGljIGNvbnN0IEdQUlJlZyByZXR1cm5W
YWx1ZUdQUjIgPSBYODZSZWdpc3RlcnM6OmVkeDsgLy8gcmVnVDEKICAgICBzdGF0aWMgY29uc3Qg
R1BSUmVnIG5vblByZXNlcnZlZE5vblJldHVybkdQUiA9IFg4NlJlZ2lzdGVyczo6ZXNpOwotCisg
ICAgCiAgICAgc3RhdGljIEdQUlJlZyB0b1JlZ2lzdGVyKHVuc2lnbmVkIGluZGV4KQogICAgIHsK
ICAgICAgICAgQVNTRVJUKGluZGV4IDwgbnVtYmVyT2ZSZWdpc3RlcnMpOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVDYWNoZUdlbmVyYXRvci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVDYWNoZUdlbmVyYXRvci5j
cHAJKHJldmlzaW9uIDE1NzcwNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5s
aW5lQ2FjaGVHZW5lcmF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNCwxMCArMzQsMTYgQEAK
IAogbmFtZXNwYWNlIEpTQyB7CiAKK3N0YXRpYyBTdHJ1Y3R1cmVTdHViSW5mbyogZ2FyYmFnZVN0
dWJJbmZvKCkKK3sKKyAgICBzdGF0aWMgU3RydWN0dXJlU3R1YkluZm8gc3R1YkluZm87CisgICAg
cmV0dXJuICZzdHViSW5mbzsKK30KKwogSklUSW5saW5lQ2FjaGVHZW5lcmF0b3I6OkpJVElubGlu
ZUNhY2hlR2VuZXJhdG9yKENvZGVCbG9jayogY29kZUJsb2NrLCBDb2RlT3JpZ2luIGNvZGVPcmln
aW4pCiAgICAgOiBtX2NvZGVCbG9jayhjb2RlQmxvY2spCiB7Ci0gICAgbV9zdHViSW5mbyA9IG1f
Y29kZUJsb2NrLT5hZGRTdHViSW5mbygpOworICAgIG1fc3R1YkluZm8gPSBtX2NvZGVCbG9jayA/
IG1fY29kZUJsb2NrLT5hZGRTdHViSW5mbygpIDogZ2FyYmFnZVN0dWJJbmZvKCk7CiAgICAgbV9z
dHViSW5mby0+Y29kZU9yaWdpbiA9IGNvZGVPcmlnaW47CiB9CiAKQEAgLTYzLDI5ICs2OSwzNCBA
QCBKSVRCeUlkR2VuZXJhdG9yOjpKSVRCeUlkR2VuZXJhdG9yKAogI2VuZGlmCiB9CiAKLXZvaWQg
SklUQnlJZEdlbmVyYXRvcjo6ZmluYWxpemUoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikKK3ZvaWQg
SklUQnlJZEdlbmVyYXRvcjo6ZmluYWxpemUoTGlua0J1ZmZlciYgZmFzdFBhdGgsIExpbmtCdWZm
ZXImIHNsb3dQYXRoKQogewotICAgIENvZGVMb2NhdGlvbkNhbGwgY2FsbFJldHVybkxvY2F0aW9u
ID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mKG1fY2FsbCk7CisgICAgQ29kZUxvY2F0aW9uQ2FsbCBj
YWxsUmV0dXJuTG9jYXRpb24gPSBzbG93UGF0aC5sb2NhdGlvbk9mKG1fY2FsbCk7CiAgICAgbV9z
dHViSW5mby0+Y2FsbFJldHVybkxvY2F0aW9uID0gY2FsbFJldHVybkxvY2F0aW9uOwogICAgIG1f
c3R1YkluZm8tPnBhdGNoLmRlbHRhQ2hlY2tJbW1Ub0NhbGwgPSBNYWNyb0Fzc2VtYmxlcjo6ZGlm
ZmVyZW5jZUJldHdlZW5Db2RlUHRyKAotICAgICAgICBsaW5rQnVmZmVyLmxvY2F0aW9uT2YobV9z
dHJ1Y3R1cmVJbW0pLCBjYWxsUmV0dXJuTG9jYXRpb24pOworICAgICAgICBmYXN0UGF0aC5sb2Nh
dGlvbk9mKG1fc3RydWN0dXJlSW1tKSwgY2FsbFJldHVybkxvY2F0aW9uKTsKICAgICBtX3N0dWJJ
bmZvLT5wYXRjaC5kZWx0YUNhbGxUb1N0cnVjdENoZWNrID0gTWFjcm9Bc3NlbWJsZXI6OmRpZmZl
cmVuY2VCZXR3ZWVuQ29kZVB0cigKLSAgICAgICAgY2FsbFJldHVybkxvY2F0aW9uLCBsaW5rQnVm
ZmVyLmxvY2F0aW9uT2YobV9zdHJ1Y3R1cmVDaGVjaykpOworICAgICAgICBjYWxsUmV0dXJuTG9j
YXRpb24sIGZhc3RQYXRoLmxvY2F0aW9uT2YobV9zdHJ1Y3R1cmVDaGVjaykpOwogI2lmIFVTRShK
U1ZBTFVFNjQpCiAgICAgbV9zdHViSW5mby0+cGF0Y2guZGVsdGFDYWxsVG9Mb2FkT3JTdG9yZSA9
IE1hY3JvQXNzZW1ibGVyOjpkaWZmZXJlbmNlQmV0d2VlbkNvZGVQdHIoCi0gICAgICAgIGNhbGxS
ZXR1cm5Mb2NhdGlvbiwgbGlua0J1ZmZlci5sb2NhdGlvbk9mKG1fbG9hZE9yU3RvcmUpKTsKKyAg
ICAgICAgY2FsbFJldHVybkxvY2F0aW9uLCBmYXN0UGF0aC5sb2NhdGlvbk9mKG1fbG9hZE9yU3Rv
cmUpKTsKICNlbHNlCiAgICAgbV9zdHViSW5mby0+cGF0Y2guZGVsdGFDYWxsVG9UYWdMb2FkT3JT
dG9yZSA9IE1hY3JvQXNzZW1ibGVyOjpkaWZmZXJlbmNlQmV0d2VlbkNvZGVQdHIoCi0gICAgICAg
IGNhbGxSZXR1cm5Mb2NhdGlvbiwgbGlua0J1ZmZlci5sb2NhdGlvbk9mKG1fdGFnTG9hZE9yU3Rv
cmUpKTsKKyAgICAgICAgY2FsbFJldHVybkxvY2F0aW9uLCBmYXN0UGF0aC5sb2NhdGlvbk9mKG1f
dGFnTG9hZE9yU3RvcmUpKTsKICAgICBtX3N0dWJJbmZvLT5wYXRjaC5kZWx0YUNhbGxUb1BheWxv
YWRMb2FkT3JTdG9yZSA9IE1hY3JvQXNzZW1ibGVyOjpkaWZmZXJlbmNlQmV0d2VlbkNvZGVQdHIo
Ci0gICAgICAgIGNhbGxSZXR1cm5Mb2NhdGlvbiwgbGlua0J1ZmZlci5sb2NhdGlvbk9mKG1fbG9h
ZE9yU3RvcmUpKTsKKyAgICAgICAgY2FsbFJldHVybkxvY2F0aW9uLCBmYXN0UGF0aC5sb2NhdGlv
bk9mKG1fbG9hZE9yU3RvcmUpKTsKICNlbmRpZgogICAgIG1fc3R1YkluZm8tPnBhdGNoLmRlbHRh
Q2FsbFRvU2xvd0Nhc2UgPSBNYWNyb0Fzc2VtYmxlcjo6ZGlmZmVyZW5jZUJldHdlZW5Db2RlUHRy
KAotICAgICAgICBjYWxsUmV0dXJuTG9jYXRpb24sIGxpbmtCdWZmZXIubG9jYXRpb25PZihtX3Ns
b3dQYXRoQmVnaW4pKTsKKyAgICAgICAgY2FsbFJldHVybkxvY2F0aW9uLCBzbG93UGF0aC5sb2Nh
dGlvbk9mKG1fc2xvd1BhdGhCZWdpbikpOwogICAgIG1fc3R1YkluZm8tPnBhdGNoLmRlbHRhQ2Fs
bFRvRG9uZSA9IE1hY3JvQXNzZW1ibGVyOjpkaWZmZXJlbmNlQmV0d2VlbkNvZGVQdHIoCi0gICAg
ICAgIGNhbGxSZXR1cm5Mb2NhdGlvbiwgbGlua0J1ZmZlci5sb2NhdGlvbk9mKG1fZG9uZSkpOwor
ICAgICAgICBjYWxsUmV0dXJuTG9jYXRpb24sIGZhc3RQYXRoLmxvY2F0aW9uT2YobV9kb25lKSk7
CiAgICAgbV9zdHViSW5mby0+cGF0Y2guZGVsdGFDYWxsVG9TdG9yYWdlTG9hZCA9IE1hY3JvQXNz
ZW1ibGVyOjpkaWZmZXJlbmNlQmV0d2VlbkNvZGVQdHIoCi0gICAgICAgIGNhbGxSZXR1cm5Mb2Nh
dGlvbiwgbGlua0J1ZmZlci5sb2NhdGlvbk9mKG1fcHJvcGVydHlTdG9yYWdlTG9hZCkpOworICAg
ICAgICBjYWxsUmV0dXJuTG9jYXRpb24sIGZhc3RQYXRoLmxvY2F0aW9uT2YobV9wcm9wZXJ0eVN0
b3JhZ2VMb2FkKSk7Cit9CisKK3ZvaWQgSklUQnlJZEdlbmVyYXRvcjo6ZmluYWxpemUoTGlua0J1
ZmZlciYgbGlua0J1ZmZlcikKK3sKKyAgICBmaW5hbGl6ZShsaW5rQnVmZmVyLCBsaW5rQnVmZmVy
KTsKIH0KIAogdm9pZCBKSVRCeUlkR2VuZXJhdG9yOjpnZW5lcmF0ZUZhc3RQYXRoQ2hlY2tzKE1h
Y3JvQXNzZW1ibGVyJiBqaXQsIEdQUlJlZyBidXR0ZXJmbHkpCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVElubGluZUNhY2hlR2VuZXJhdG9yLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVDYWNoZUdlbmVyYXRvci5oCShyZXZpc2lv
biAxNTc3MDcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZUNhY2hlR2Vu
ZXJhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTY2LDggKzY2LDEwIEBAIHB1YmxpYzoKICAgICAg
ICAgbV9jYWxsID0gY2FsbDsKICAgICB9CiAgICAgCisgICAgTWFjcm9Bc3NlbWJsZXI6OlBhdGNo
YWJsZUp1bXAgc2xvd1BhdGhQYXRjaGFibGVKdW1wKCkgY29uc3QgeyByZXR1cm4gbV9zdHJ1Y3R1
cmVDaGVjazsgfQogICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIHNsb3dQYXRoSnVtcCgpIGNvbnN0
IHsgcmV0dXJuIG1fc3RydWN0dXJlQ2hlY2subV9qdW1wOyB9CiAKKyAgICB2b2lkIGZpbmFsaXpl
KExpbmtCdWZmZXImIGZhc3RQYXRoTGlua0J1ZmZlciwgTGlua0J1ZmZlciYgc2xvd1BhdGhMaW5r
QnVmZmVyKTsKICAgICB2b2lkIGZpbmFsaXplKExpbmtCdWZmZXImKTsKICAgICAKIHByb3RlY3Rl
ZDoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVnaXN0ZXJTZXQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVnaXN0ZXJTZXQuY3BwCShyZXZp
c2lvbiAxNTc3MDcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlZ2lzdGVyU2V0LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzMsMTIgKzMzLDE5IEBACiAKIG5hbWVzcGFjZSBKU0Mgewog
Ci1SZWdpc3RlclNldCBSZWdpc3RlclNldDo6c3BlY2lhbFJlZ2lzdGVycygpCitSZWdpc3RlclNl
dCBSZWdpc3RlclNldDo6c3RhY2tSZWdpc3RlcnMoKQogewogICAgIFJlZ2lzdGVyU2V0IHJlc3Vs
dDsKLSAgICByZXN1bHQuc2V0KEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyKTsKICAgICByZXN1
bHQuc2V0KE1hY3JvQXNzZW1ibGVyOjpzdGFja1BvaW50ZXJSZWdpc3Rlcik7CiAgICAgcmVzdWx0
LnNldChNYWNyb0Fzc2VtYmxlcjo6ZnJhbWVQb2ludGVyUmVnaXN0ZXIpOworICAgIHJldHVybiBy
ZXN1bHQ7Cit9CisKK1JlZ2lzdGVyU2V0IFJlZ2lzdGVyU2V0OjpzcGVjaWFsUmVnaXN0ZXJzKCkK
K3sKKyAgICBSZWdpc3RlclNldCByZXN1bHQ7CisgICAgcmVzdWx0Lm1lcmdlKHN0YWNrUmVnaXN0
ZXJzKCkpOworICAgIHJlc3VsdC5zZXQoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIpOwogI2lm
IFVTRShKU1ZBTFVFNjQpCiAgICAgcmVzdWx0LnNldChHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVn
aXN0ZXIpOwogICAgIHJlc3VsdC5zZXQoR1BSSW5mbzo6dGFnTWFza1JlZ2lzdGVyKTsKQEAgLTQ2
LDYgKzUzLDUyIEBAIFJlZ2lzdGVyU2V0IFJlZ2lzdGVyU2V0OjpzcGVjaWFsUmVnaXN0ZXIKICAg
ICByZXR1cm4gcmVzdWx0OwogfQogCitSZWdpc3RlclNldCBSZWdpc3RlclNldDo6Y2FsbGVlU2F2
ZVJlZ2lzdGVycygpCit7CisgICAgUmVnaXN0ZXJTZXQgcmVzdWx0OworI2lmIFVTRShYODZfNjQp
CisgICAgcmVzdWx0LnNldChYODZSZWdpc3RlcnM6OnJieCk7CisgICAgcmVzdWx0LnNldChYODZS
ZWdpc3RlcnM6OnJicCk7CisgICAgcmVzdWx0LnNldChYODZSZWdpc3RlcnM6OnIxMCk7CisgICAg
cmVzdWx0LnNldChYODZSZWdpc3RlcnM6OnIxMik7CisgICAgcmVzdWx0LnNldChYODZSZWdpc3Rl
cnM6OnIxMyk7CisgICAgcmVzdWx0LnNldChYODZSZWdpc3RlcnM6OnIxNCk7CisgICAgcmVzdWx0
LnNldChYODZSZWdpc3RlcnM6OnIxNSk7CisjZWxzZQorI2Vycm9yICJVbnN1cHBvcnRlZCBpbnN0
cnVjdGlvbiBzZXQiCisjZW5kaWYKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitSZWdpc3RlclNl
dCBSZWdpc3RlclNldDo6YWxsR1BScygpCit7CisgICAgUmVnaXN0ZXJTZXQgcmVzdWx0OworICAg
IGZvciAoTWFjcm9Bc3NlbWJsZXI6OlJlZ2lzdGVySUQgcmVnID0gTWFjcm9Bc3NlbWJsZXI6OmZp
cnN0UmVnaXN0ZXIoKTsgcmVnIDw9IE1hY3JvQXNzZW1ibGVyOjpsYXN0UmVnaXN0ZXIoKTsgcmVn
ID0gc3RhdGljX2Nhc3Q8TWFjcm9Bc3NlbWJsZXI6OlJlZ2lzdGVySUQ+KHJlZyArIDEpKQorICAg
ICAgICByZXN1bHQuc2V0KHJlZyk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworUmVnaXN0ZXJT
ZXQgUmVnaXN0ZXJTZXQ6OmFsbEZQUnMoKQoreworICAgIFJlZ2lzdGVyU2V0IHJlc3VsdDsKKyAg
ICBmb3IgKE1hY3JvQXNzZW1ibGVyOjpGUFJlZ2lzdGVySUQgcmVnID0gTWFjcm9Bc3NlbWJsZXI6
OmZpcnN0RlBSZWdpc3RlcigpOyByZWcgPD0gTWFjcm9Bc3NlbWJsZXI6Omxhc3RGUFJlZ2lzdGVy
KCk7IHJlZyA9IHN0YXRpY19jYXN0PE1hY3JvQXNzZW1ibGVyOjpGUFJlZ2lzdGVySUQ+KHJlZyAr
IDEpKQorICAgICAgICByZXN1bHQuc2V0KHJlZyk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwor
UmVnaXN0ZXJTZXQgUmVnaXN0ZXJyU2V0OjphbGxSZWdpc3RlcnMoKQoreworICAgIFJlZ2lzdGVy
U2V0IHJlc3VsdDsKKyAgICByZXN1bHQubWVyZ2UoYWxsR1BScygpKTsKKyAgICByZXN1bHQubWVy
Z2UoYWxsRlBScygpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIFJlZ2lzdGVyU2V0
OjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgbV92ZWN0b3IuZHVtcChvdXQp
OworfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKIAogI2VuZGlmIC8vIEVOQUJMRShKSVQpCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlZ2lzdGVyU2V0LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZWdpc3RlclNldC5oCShyZXZpc2lvbiAxNTc3MDcp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlZ2lzdGVyU2V0LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTQyLDcgKzQyLDEyIEBAIGNsYXNzIFJlZ2lzdGVyU2V0IHsKIHB1YmxpYzoKICAgICBS
ZWdpc3RlclNldCgpIHsgfQogICAgIAorICAgIHN0YXRpYyBSZWdpc3RlclNldCBzdGFja1JlZ2lz
dGVycygpOwogICAgIHN0YXRpYyBSZWdpc3RlclNldCBzcGVjaWFsUmVnaXN0ZXJzKCk7CisgICAg
c3RhdGljIFJlZ2lzdGVyU2V0IGNhbGxlZVNhdmVSZWdpc3RlcnMoKTsKKyAgICBzdGF0aWMgUmVn
aXN0ZXJTZXQgYWxsR1BScygpOworICAgIHN0YXRpYyBSZWdpc3RlclNldCBhbGxGUFJzKCk7Cisg
ICAgc3RhdGljIFJlZ2lzdGVyU2V0IGFsbFJlZ2lzdGVycygpOwogCiAgICAgdm9pZCBzZXQoR1BS
UmVnIHJlZywgYm9vbCB2YWx1ZSA9IHRydWUpCiAgICAgewpAQCAtNzYsMTMgKzgxLDU1IEBAIHB1
YmxpYzoKICAgICBib29sIGdldChGUFJSZWcgcmVnKSBjb25zdCB7IHJldHVybiBtX3ZlY3Rvci5n
ZXQoTWFjcm9Bc3NlbWJsZXI6OnJlZ2lzdGVySW5kZXgocmVnKSk7IH0KICAgICAKICAgICB2b2lk
IG1lcmdlKGNvbnN0IFJlZ2lzdGVyU2V0JiBvdGhlcikgeyBtX3ZlY3Rvci5tZXJnZShvdGhlci5t
X3ZlY3Rvcik7IH0KKyAgICB2b2lkIGV4Y2x1ZGUoY29uc3QgUmVnaXN0ZXJTZXQmIG90aGVyKSB7
IG1fdmVjdG9yLmV4Y2x1ZGUob3RoZXIubV92ZWN0b3IpOyB9CisgICAgCisgICAgc2l6ZV90IG51
bWJlck9mU2V0UmVnaXN0ZXJzKCkgY29uc3QgeyByZXR1cm4gbV92ZWN0b3IuYml0Q291bnQoKTsg
fQorICAgIAorICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OworICAgIAorICAgIGVu
dW0gRW1wdHlWYWx1ZVRhZyB7IEVtcHR5VmFsdWUgfTsKKyAgICBlbnVtIERlbGV0ZWRWYWx1ZVRh
ZyB7IERlbGV0ZWRWYWx1ZSB9OworICAgIAorICAgIFJlZ2lzdGVyU2V0KEVtcHR5VmFsdWVUYWcp
CisgICAgICAgIDogbV92ZWN0b3IoQml0VmVjdG9yOjpFbXB0eVZhbHVlKQorICAgIHsKKyAgICB9
CisgICAgCisgICAgUmVnaXN0ZXJTZXQoRGVsZXRlZFZhbHVlVGFnKQorICAgICAgICA6IG1fdmVj
dG9yKEJpdFZlY3Rvcjo6RGVsZXRlZFZhbHVlKQorICAgIHsKKyAgICB9CisgICAgCisgICAgYm9v
bCBpc0VtcHR5VmFsdWUoKSBjb25zdCB7IHJldHVybiBtX3ZlY3Rvci5pc0VtcHR5VmFsdWUoKTsg
fQorICAgIGJvb2wgaXNEZWxldGVkVmFsdWUoKSBjb25zdCB7IHJldHVybiBtX3ZjdG9yLmlzRGVs
ZXRlZFZhbHVlKCk7IH0KKyAgICAKKyAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgUmVnaXN0ZXJT
ZXQmIG90aGVyKSB7IHJldHVybiBtX3ZlY3RvciA9PSBvdGhlci5tX3ZlY3RvcjsgfQorICAgIHVu
c2lnbmVkIGhhc2goKSBjb25zdCB7IHJldHVybiBtX3ZlY3Rvci5oYXNoKCk7IH0KICAgICAKIHBy
aXZhdGU6CiAgICAgQml0VmVjdG9yIG1fdmVjdG9yOwogfTsKIAorc3RydWN0IFJlZ2lzdGVyU2V0
SGFzaCB7CisgICAgc3RhdGljIHVuc2lnbmVkIGhhc2goY29uc3QgUmVnaXN0ZXJTZXQmIHNldCkg
eyByZXR1cm4gc2V0Lmhhc2goKTsgfQorICAgIHN0YXRpYyBib29sIGVxdWFsKGNvbnN0IFJlZ2lz
dGVyU2V0JiBhLCBjb25zdCBSZWdpc3RlclNldCYgYikgeyByZXR1cm4gYSA9PSBiOyB9CisgICAg
c3RhdGljIGNvbnN0IGJvb2wgc2FmZVRvQ29tcGFyZVRvRW1wdHlPckRlbGV0ZWQgPSBmYWxzZTsK
K307CisKIH0gLy8gbmFtZXNwYWNlIEpTQwogCituYW1lc3BhY2UgV1RGIHsKKwordGVtcGxhdGU8
dHlwZW5hbWUgVD4gc3RydWN0IERlZmF1bHRIYXNoOwordGVtcGxhdGU8PiBzdHJ1Y3QgRGVmYXVs
dEhhc2g8SlNDOjpSZWdpc3RlclNldD4geworICAgIHR5cGVkZWYgUmVnaXN0ZXJTZXRIYXNoIEhh
c2g7Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgSGFzaFRyYWl0czsKK3RlbXBs
YXRlPD4gc3RydWN0IEhhc2hUcmFpdHM8SlNDOjpSZWdpc3RlclNldD4gOiBwdWJsaWMgQ3VzdG9t
SGFzaFRyYWl0czxKU0M6OlJlZ2lzdGVyU2V0PiB7IH07CisKK30gLy8gbmFtZXNwYWNlIFdURgor
CiAjZW5kaWYgLy8gRU5BQkxFKEpJVCkKIAogI2VuZGlmIC8vIFJlZ2lzdGVyU2V0X2gKSW5kZXg6
IFNvdXJjZS9XVEYvd3RmL0JpdFZlY3Rvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93
dGYvQml0VmVjdG9yLmNwcAkocmV2aXNpb24gMTU3NzA3KQorKysgU291cmNlL1dURi93dGYvQml0
VmVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTI0LDcgKzEyNCw1OCBAQCB2b2lkIEJpdFZl
Y3Rvcjo6bWVyZ2VTbG93KGNvbnN0IEJpdFZlY3RvCiAgICAgICAgIGEtPmJpdHMoKVtpXSB8PSBi
LT5iaXRzKClbaV07CiB9CiAKLXZvaWQgQml0VmVjdG9yOjpkdW1wKFByaW50U3RyZWFtJiBvdXQp
Cit2b2lkIEJpdFZlY3Rvcjo6ZXhjbHVkZVNsb3coY29uc3QgQml0VmVjdG9yJiBvdGhlcikKK3sK
KyAgICBpZiAob3RoZXIuaXNJbmxpbmUoKSkgeworICAgICAgICBBU1NFUlQoIWlzSW5saW5lKCkp
OworICAgICAgICAqYml0cygpICY9IH5jbGVhbnNlSW5saW5lQml0cyhvdGhlci5tX2JpdHNPclBv
aW50ZXIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIGlmIChpc0lubGluZSgp
KSB7CisgICAgICAgIEFTU0VSVCghb3RoZXIuaXNJbmxpbmUoKSk7CisgICAgICAgIG1fYml0c09y
UG9pbnRlciAmPSB+Km90aGVyLm91dE9mTGluZUJpdHMoKTsKKyAgICAgICAgbV9iaXRzT3JQb2lu
dGVyIHw9IChzdGF0aWNfY2FzdDx1aW50cHRyX3Q+KDEpIDw8IG1heElubGluZUJpdHMoKSk7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgT3V0T2ZMaW5lQml0cyogYSA9IG91dE9m
TGluZUJpdHMoKTsKKyAgICBjb25zdCBPdXRPZkxpbmVCaXRzKiBiID0gb3RoZXIub3V0T2ZMaW5l
Qml0cygpOworICAgIGZvciAodW5zaWduZWQgaSA9IHN0ZDo6bWluKGEtPm51bVdvcmRzKCksIGIt
Pm51bVdvcmRzKCkpOyBpLS07KQorICAgICAgICBhLT5iaXRzKClbaV0gJj0gfmItPmJpdHMoKVtp
XTsKK30KKworc2l6ZV90IEJpdFZlY3Rvcjo6Yml0Q291bnRTbG93KCkgY29uc3QKK3sKKyAgICBB
U1NFUlQoIWlzSW5saW5lKCkpOworICAgIGNvbnN0IE91dE9mTGluZUJpdHMqIGJpdHMgPSBvdXRP
ZkxpbmVCaXRzKCk7CisgICAgc2l6ZV90IHJlc3VsdCA9IDA7CisgICAgZm9yICh1bnNpZ25lZCBp
ID0gYml0cy0+bnVtV29yZHMoKTsgaS0tOykKKyAgICAgICAgcmVzdWx0ICs9IGJpdENvdW50KGJp
dHMtPmJpdHMoKVtpXSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworYm9vbCBCaXRWZWN0b3I6
OmVxdWFsc1Nsb3dDYXNlKGNvbnN0IEJpdFZlY3RvciYgb3RoZXIpIGNvbnN0Cit7CisgICAgLy8g
VGhpcyBpcyByZWFsbHkgY2hlZXN5LCBidXQgcHJvYmFibHkgZ29vZCBlbm91Z2ggZm9yIG5vdy4K
KyAgICBmb3IgKHVuc2lnbmVkIGkgPSBzdGQ6Om1heChzaXplKCksIG90aGVyLnNpemUoKSk7IGkt
LTspIHsKKyAgICAgICAgaWYgKGdldChpKSAhPSBvdGhlci5nZXQoaSkpCisgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgfQorICAgIHJldHVybiB0cnVlOworfQorCit1aW50cHRyX3QgQml0
VmVjdG9yOjpoYXNoU2xvd0Nhc2UoKSBjb25zdAoreworICAgIEFTU0VSVCghaXNJbmxpbmUoKSk7
CisgICAgY29uc3QgT3V0T2ZMaW5lQml0cyogYml0cyA9IG91dE9mTGluZUJpdHMoKTsKKyAgICB1
aW50cHRyX3QgcmVzdWx0ID0gMDsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSBiaXRzLT5udW1Xb3Jk
cygpOyBpLS07KQorICAgICAgICByZXN1bHQgXj0gYml0cy0+Yml0cygpW2ldOworICAgIHJldHVy
biByZXN1bHQ7Cit9CisKK3ZvaWQgQml0VmVjdG9yOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNv
bnN0CiB7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplKCk7ICsraSkgewogICAgICAg
ICBpZiAoZ2V0KGkpKQpJbmRleDogU291cmNlL1dURi93dGYvQml0VmVjdG9yLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dURi93dGYvQml0VmVjdG9yLmgJKHJldmlzaW9uIDE1NzcwNykKKysrIFNv
dXJjZS9XVEYvd3RmL0JpdFZlY3Rvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNzgsNyArMTc4LDU5
IEBAIHB1YmxpYzogCiAgICAgICAgIG1fYml0c09yUG9pbnRlciB8PSBvdGhlci5tX2JpdHNPclBv
aW50ZXI7CiAgICAgfQogICAgIAotICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYgb3V0KTsKKyAg
ICB2b2lkIGV4Y2x1ZGUoY29uc3QgQml0VmVjdG9yJiBvdGhlcikKKyAgICB7CisgICAgICAgIGlm
ICghaXNJbmxpbmUoKSB8fCAhb3RoZXIuaXNJbmxpbmUoKSkgeworICAgICAgICAgICAgZXhjbHVk
ZVNsb3cob3RoZXIpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIG1f
Yml0c09yUG9pbnRlciAmPSB+b3RoZXIubV9iaXRzT3JQb2ludGVyOworICAgIH0KKyAgICAKKyAg
ICBzaXplX3QgYml0Q291bnQoKSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKGlzSW5saW5lKCkp
CisgICAgICAgICAgICByZXR1cm4gYml0Q291bnQoY2xlYW5zZUlubGluZUJpdHMobV9iaXRzT3JQ
b2ludGVyKSk7CisgICAgICAgIHJldHVybiBiaXRDb3VudFNsb3coKTsKKyAgICB9CisgICAgCisg
ICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0OworICAgIAorICAgIGVudW0gRW1w
dHlWYWx1ZVRhZyB7IEVtcHR5VmFsdWUgfTsKKyAgICBlbnVtIERlbGV0ZWRWYWx1ZVRhZyB7IERl
bGV0ZWRWYWx1ZSB9OworICAgIAorICAgIEJpdFZlY3RvcihFbXB0eVZhbHVlVGFnKQorICAgICAg
ICA6IG1fYml0c09yUG9pbnRlcigwKQorICAgIHsKKyAgICB9CisgICAgCisgICAgQml0VmVjdG9y
KERlbGV0ZWRWYWx1ZVRhZykKKyAgICAgICAgOiBtX2JpdHNPclBvaW50ZXIoMSkKKyAgICB7Cisg
ICAgfQorICAgIAorICAgIGJvb2wgaXNFbXB0eVZhbHVlKCkgY29uc3QgeyByZXR1cm4gIW1fYml0
c09yUG9pbnRlcjsgfQorICAgIGJvb2wgaXNEZWxldGVkVmFsdWUoKSBjb25zdCB7IHJldHVybiBt
X2JpdHNPclBvaW5lciA9PSAxOyB9CisgICAgCisgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEJp
dFZlY3RvciYgb3RoZXIpCisgICAgeworICAgICAgICBpZiAoaXNJbmxpbmUoKSAmJiBvdGhlci5p
c0lubGluZSgpKQorICAgICAgICAgICAgcmV0dXJuIG1fYml0c09yUG9pbnRlciA9PSBvdGhlci5t
X2JpdHNPclBvaW50ZXI7CisgICAgICAgIHJldHVybiBlcXVhbHNTbG93Q2FzZShvdGhlcik7Cisg
ICAgfQorICAgIAorICAgIHVuc2lnbmVkIGhhc2goKSBjb25zdAorICAgIHsKKyAgICAgICAgLy8g
VGhpcyBpcyBhIHZlcnkgc2ltcGxlIGhhc2guIEp1c3QgeG9yIHRvZ2V0aGVyIHRoZSB3b3JkcyB0
aGF0IGhvbGQgdGhlIHZhcmlvdXMKKyAgICAgICAgLy8gYml0cyBhbmQgdGhlbiBjb21wdXRlIHRo
ZSBoYXNoLiBUaGlzIG1ha2VzIGl0IHZlcnkgZWFzeSB0byBkZWFsIHdpdGggYml0dmVjdG9ycwor
ICAgICAgICAvLyB0aGF0IGhhdmUgYSBsb3Qgb2YgdHJhaWxpbmcgemVybydzLgorICAgICAgICB1
aW50cHRyX3QgdmFsdWU7CisgICAgICAgIGlmIChpc0lubGluZSgpKQorICAgICAgICAgICAgdmFs
dWUgPSBjbGVhbnNlSW5saW5lQml0cyhtX2JpdHNPclBvaW50ZXIpOworICAgICAgICBlbHNlCisg
ICAgICAgICAgICB2YWx1ZSA9IGhhc2hTbG93Q2FzZSgpOworICAgICAgICByZXR1cm4gSW50SGFz
aDx1aW50cHRyX3Q+OjpoYXNoKHZhbHVlKTsKKyAgICB9CiAgICAgCiBwcml2YXRlOgogICAgIHN0
YXRpYyB1bnNpZ25lZCBiaXRzSW5Qb2ludGVyKCkKQEAgLTIwNyw2ICsyNTksMTQgQEAgcHJpdmF0
ZToKICAgICAgICAgcmV0dXJuIGJpdHMgJiB+KHN0YXRpY19jYXN0PHVpbnRwdHJfdD4oMSkgPDwg
bWF4SW5saW5lQml0cygpKTsKICAgICB9CiAgICAgCisgICAgc3RhdGljIHNpemVfdCBiaXRDb3Vu
dCh1aW50cHRyX3QgYml0cykKKyAgICB7CisgICAgICAgIGlmIChzaXplb2YodWludHB0cl90KSA9
PSA0KQorICAgICAgICAgICAgcmV0dXJuIFdURjo6Yml0Q291bnQoc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQ+KGJpdHMpKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcmV0dXJuIFdURjo6Yml0Q291
bnQoc3RhdGljX2Nhc3Q8dWludDY0X3Q+KGJpdHMpKTsKKyAgICB9CisgICAgCiAgICAgY2xhc3Mg
T3V0T2ZMaW5lQml0cyB7CiAgICAgcHVibGljOgogICAgICAgICBzaXplX3QgbnVtQml0cygpIGNv
bnN0IHsgcmV0dXJuIG1fbnVtQml0czsgfQpAQCAtMjM2LDYgKzI5NiwxMiBAQCBwcml2YXRlOgog
ICAgIFdURl9FWFBPUlRfUFJJVkFURSB2b2lkIHNldFNsb3coY29uc3QgQml0VmVjdG9yJiBvdGhl
cik7CiAgICAgCiAgICAgV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgbWVyZ2VTbG93KGNvbnN0IEJp
dFZlY3RvciYgb3RoZXIpOworICAgIFdURl9FWFBPUlRfUFJJVkFURSB2b2lkIGV4Y2x1ZGVTbG93
KGNvbnN0IEJpdFZlY3RvciYgb3RoZXIpOworICAgIAorICAgIFdURl9FWFBPUlRfUFJJVkFURSBz
aXplX3QgYml0Q291bnRTbG93KCkgY29uc3Q7CisgICAgCisgICAgV1RGX0VYUE9SVF9QUklWQVRF
IGJvb2wgZXF1YWxzU2xvd0Nhc2UoY29uc3QgQml0VmVjdG9yJiBvdGhlcikgY29uc3Q7CisgICAg
V1RGX0VYUE9SVF9QUklWQVRFIHVpbnRwdHJfdCBoYXNoU2xvd0Nhc2UoKSBjb25zdDsKICAgICAK
ICAgICB1aW50cHRyX3QqIGJpdHMoKQogICAgIHsKQEAgLTI1NCw2ICszMjAsMjAgQEAgcHJpdmF0
ZToKICAgICB1aW50cHRyX3QgbV9iaXRzT3JQb2ludGVyOwogfTsKIAorc3RydWN0IEJpdFZlY3Rv
ckhhc2ggeworICAgIHN0YXRpYyB1bnNpZ25lZCBoYXNoKGNvbnN0IEJpdFZlY3RvciYgdmVjdG9y
KSB7IHJldHVybiB2ZWN0b3IuaGFzaCgpOyB9CisgICAgc3RhdGljIGJvb2wgZXF1YWwoY29uc3Qg
Qml0VmVjdG9yJiBhLCBjb25zdCBCaXRWZWN0b3ImIGIpIHsgcmV0dXJuIGEgPT0gYjsgfQorICAg
IHN0YXRpYyBjb25zdCBib29sIHNhZmVUb0NvbXBhcmVUb0VtcHR5T3JEZWxldGVkID0gZmFsc2U7
Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgRGVmYXVsdEhhc2g7Cit0ZW1wbGF0
ZTw+IHN0cnVjdCBEZWZhdWx0SGFzaDxCaXRWZWN0b3I+IHsKKyAgICB0eXBlZGVmIEJpdFZlY3Rv
ckhhc2ggSGFzaDsKK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBIYXNoVHJhaXRz
OwordGVtcGxhdGU8PiBzdHJ1Y3QgSGFzaFRyYWl0czxCaXRWZWN0b3I+IDogcHVibGljIEN1c3Rv
bUhhc2hUcmFpdHM8Qml0VmVjdG9yPiB7IH07CisKIH0gLy8gbmFtZXNwYWNlIFdURgogCiB1c2lu
ZyBXVEY6OkJpdFZlY3RvcjsKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL0hhc2hUcmFpdHMuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9IYXNoVHJhaXRzLmgJKHJldmlzaW9uIDE1NzcwNykK
KysrIFNvdXJjZS9XVEYvd3RmL0hhc2hUcmFpdHMuaAkod29ya2luZyBjb3B5KQpAQCAtMjE2LDYg
KzIxNiwzNCBAQCBzdHJ1Y3QgTnVsbGFibGVIYXNoVHJhaXRzIDogcHVibGljIEhhc2hUCiAgICAg
c3RhdGljIFQgZW1wdHlWYWx1ZSgpIHsgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8VD4oMSk7IH0K
IH07CiAKKy8vIFVzZWZ1bCBmb3IgY2xhc3NlcyB0aGF0IHdhbnQgY29tcGxldGUgY29udHJvbCBv
dmVyIHdoYXQgaXMgZW1wdHkgYW5kIHdoYXQgaXMgZGVsZXRlZCwKKy8vIGFuZCBob3cgdG8gY29u
c3RydWN0IGJvdGguCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorc3RydWN0IEN1c3RvbUhhc2hUcmFp
dHMgeworICAgIHN0YXRpYyBjb25zdCBib29sIGVtcHR5VmFsdWVJc1plcm8gPSBmYWxzZTsKKyAg
ICBzdGF0aWMgY29uc3QgYm9vbCBoYXNJc0VtcHR5VmFsdWVGdW5jdGlvbiA9IHRydWU7CisgICAg
CisgICAgc3RhdGljIHZvaWQgY29uc3RydWN0RGVsZXRlZFZhbHVlKFQmIHNsb3QpCisgICAgewor
ICAgICAgICBuZXcgKE5vdE51bGwsICZzbG90KSBUKFQ6OkRlbGV0ZWRWYWx1ZSk7CisgICAgfQor
ICAgIAorICAgIHN0YXRpYyBib29sIGlzRGVsZXRlZFZhbHVlKGNvbnN0IFQmIHZhbHVlKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIHZhbHVlLmlzRGVsZXRlZFZhbHVlKCk7CisgICAgfQorICAgIAor
ICAgIHN0YXRpYyBUIGVtcHR5VmFsdWUoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIFQoVDo6RW1w
dHlWYWx1ZSk7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBib29sIGlzRW1wdHlWYWx1ZShjb25z
dCBUJiB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiB2YWx1ZS5pc0VtcHR5VmFsdWUoKTsK
KyAgICB9Cit9OworCiB9IC8vIG5hbWVzcGFjZSBXVEYKIAogdXNpbmcgV1RGOjpIYXNoVHJhaXRz
OwpJbmRleDogU291cmNlL1dURi93dGYvU3RkTGliRXh0cmFzLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dURi93dGYvU3RkTGliRXh0cmFzLmgJKHJldmlzaW9uIDE1NzcwNykKKysrIFNvdXJjZS9X
VEYvd3RmL1N0ZExpYkV4dHJhcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNTcsNiArMTU3LDExIEBA
IGlubGluZSBzaXplX3QgYml0Q291bnQodW5zaWduZWQgYml0cykKICAgICByZXR1cm4gKCgoYml0
cyArIChiaXRzID4+IDQpKSAmIDB4RjBGMEYwRikgKiAweDEwMTAxMDEpID4+IDI0OwogfQogCitp
bmxpbmUgc2l6ZV90IGJpdENvdW50KHVpbnQ2NF90IGJpdHMpCit7CisgICAgcmV0dXJuIGJpdENv
dW50KHN0YXRpY19jYXN0PHVuc2lnbmVkPihiaXRzKSkgKyBiaXRDb3VudChzdGF0aWNfY2FzdDx1
bnNpZ25lZD4oYml0cyA+PiAzMikpOworfQorCiAvLyBNYWNybyB0aGF0IHJldHVybnMgYSBjb21w
aWxlIHRpbWUgY29uc3RhbnQgd2l0aCB0aGUgbGVuZ3RoIG9mIGFuIGFycmF5LCBidXQgZ2l2ZXMg
YW4gZXJyb3IgaWYgcGFzc2VkIGEgbm9uLWFycmF5LgogdGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6
ZV90IFNpemU+IGNoYXIgKCZBcnJheUxlbmd0aEhlbHBlckZ1bmN0aW9uKFQgKCYpW1NpemVdKSlb
U2l6ZV07CiAvLyBHQ0MgbmVlZHMgc29tZSBoZWxwIHRvIGRlZHVjZSBhIDAgbGVuZ3RoIGFycmF5
Lgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>214813</attachid>
            <date>2013-10-21 21:27:20 -0700</date>
            <delta_ts>2013-10-21 22:50:12 -0700</delta_ts>
            <desc>starting to compile</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>70329</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxNTc3MDcpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkod29ya2luZyBjb3B5KQpAQCAtMTI5LDYgKzEyOSwxMyBAQAogCQkwRjI0RTU1NjE3RjBC
NzFDMDBBQkIyMTcgLyogSW5saW5lQ2FsbEZyYW1lU2V0LmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjI0RTU1NDE3RjBCNzFDMDBBQkIyMTcgLyogSW5s
aW5lQ2FsbEZyYW1lU2V0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKIAkJMEYyNEU1NTgxN0Y3NEVEQjAwQUJCMjE3IC8qIFZhbHVlUmVjb3ZlcnkuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyNEU1NTcx
N0Y3NEVEQjAwQUJCMjE3IC8qIFZhbHVlUmVjb3ZlcnkuY3BwICovOyB9OwogCQkwRjI1NkMzNjE2
MjdCMEFEMDA3RjI3ODMgLyogREZHQ2FsbEFycmF5QWxsb2NhdG9yU2xvd1BhdGhHZW5lcmF0b3Iu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMjU2QzM0
MTYyN0IwQUEwMDdGMjc4MyAvKiBERkdDYWxsQXJyYXlBbGxvY2F0b3JTbG93UGF0aEdlbmVyYXRv
ci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBG
MjVGMUFFMTgxNjM1RjMwMDUyMkYzOSAvKiBGVExJbmxpbmVDYWNoZURlc2NyaXB0b3IuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMjVGMUE3MTgxNjM1
RjMwMDUyMkYzOSAvKiBGVExJbmxpbmVDYWNoZURlc2NyaXB0b3IuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRjI1RjFBRjE4MTYzNUYzMDA1MjJG
MzkgLyogRlRMSW5saW5lQ2FjaGVTaXplLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGMjVGMUE4MTgxNjM1RjMwMDUyMkYzOSAvKiBGVExJbmxpbmVD
YWNoZVNpemUuY3BwICovOyB9OworCQkwRjI1RjFCMDE4MTYzNUYzMDA1MjJGMzkgLyogRlRMSW5s
aW5lQ2FjaGVTaXplLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRjI1RjFBOTE4MTYzNUYzMDA1MjJGMzkgLyogRlRMSW5saW5lQ2FjaGVTaXplLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEYyNUYxQjEx
ODE2MzVGMzAwNTIyRjM5IC8qIEZUTFNsb3dQYXRoQ2FsbC5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjI1RjFBQTE4MTYzNUYzMDA1MjJGMzkgLyog
RlRMU2xvd1BhdGhDYWxsLmNwcCAqLzsgfTsKKwkJMEYyNUYxQjIxODE2MzVGMzAwNTIyRjM5IC8q
IEZUTFNsb3dQYXRoQ2FsbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEYyNUYxQUIxODE2MzVGMzAwNTIyRjM5IC8qIEZUTFNsb3dQYXRoQ2FsbC5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGMjVGMUIz
MTgxNjM1RjMwMDUyMkYzOSAvKiBGVExTbG93UGF0aENhbGxLZXkuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyNUYxQUMxODE2MzVGMzAwNTIyRjM5
IC8qIEZUTFNsb3dQYXRoQ2FsbEtleS5jcHAgKi87IH07CisJCTBGMjVGMUI0MTgxNjM1RjMwMDUy
MkYzOSAvKiBGVExTbG93UGF0aENhbGxLZXkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGMjVGMUFEMTgxNjM1RjMwMDUyMkYzOSAvKiBGVExTbG93UGF0
aENhbGxLZXkuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwogCQkwRjJCNjZBQzE3QjZCNTNGMDBBN0FFM0YgLyogR0NJbmNvbWluZ1JlZkNvdW50ZWQuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkI2NkE4MTdC
NkI1M0QwMEE3QUUzRiAvKiBHQ0luY29taW5nUmVmQ291bnRlZC5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGMkI2NkFEMTdCNkI1NDUwMEE3QUUz
RiAvKiBHQ0luY29taW5nUmVmQ291bnRlZElubGluZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkI2NkE5MTdCNkI1M0QwMEE3QUUzRiAvKiBHQ0lu
Y29taW5nUmVmQ291bnRlZElubGluZXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwogCQkwRjJCNjZBRTE3QjZCNTQ1MDBBN0FFM0YgLyogR0NJbmNvbWlu
Z1JlZkNvdW50ZWRTZXQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDBGMkI2NkFBMTdCNkI1M0QwMEE3QUUzRiAvKiBHQ0luY29taW5nUmVmQ291bnRlZFNl
dC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC0x
Mzg0LDYgKzEzOTEsMTMgQEAKIAkJMEYyNEU1NTQxN0YwQjcxQzAwQUJCMjE3IC8qIElubGluZUNh
bGxGcmFtZVNldC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbmxpbmVDYWxs
RnJhbWVTZXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYyNEU1NTcxN0Y3NEVE
QjAwQUJCMjE3IC8qIFZhbHVlUmVjb3ZlcnkuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gVmFsdWVSZWNvdmVyeS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTBGMjU2QzM0MTYyN0IwQUEwMDdGMjc4MyAvKiBERkdDYWxsQXJyYXlBbGxvY2F0b3JTbG93
UGF0aEdlbmVyYXRvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdDYWxs
QXJyYXlBbGxvY2F0b3JTbG93UGF0aEdlbmVyYXRvci5oOyBwYXRoID0gZGZnL0RGR0NhbGxBcnJh
eUFsbG9jYXRvclNsb3dQYXRoR2VuZXJhdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTBGMjVGMUE3MTgxNjM1RjMwMDUyMkYzOSAvKiBGVExJbmxpbmVDYWNoZURlc2NyaXB0b3Iu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gRlRMSW5saW5lQ2FjaGVEZXNjcmlw
dG9yLmg7IHBhdGggPSBmdGwvRlRMSW5saW5lQ2FjaGVEZXNjcmlwdG9yLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTBGMjVGMUE4MTgxNjM1RjMwMDUyMkYzOSAvKiBGVExJbmxpbmVD
YWNoZVNpemUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gRlRMSW5s
aW5lQ2FjaGVTaXplLmNwcDsgcGF0aCA9IGZ0bC9GVExJbmxpbmVDYWNoZVNpemUuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjI1RjFBOTE4MTYzNUYzMDA1MjJGMzkgLyogRlRM
SW5saW5lQ2FjaGVTaXplLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEZUTElu
bGluZUNhY2hlU2l6ZS5oOyBwYXRoID0gZnRsL0ZUTElubGluZUNhY2hlU2l6ZS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQkwRjI1RjFBQTE4MTYzNUYzMDA1MjJGMzkgLyogRlRMU2xv
d1BhdGhDYWxsLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEZUTFNs
b3dQYXRoQ2FsbC5jcHA7IHBhdGggPSBmdGwvRlRMU2xvd1BhdGhDYWxsLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyNUYxQUIxODE2MzVGMzAwNTIyRjM5IC8qIEZUTFNsb3dQ
YXRoQ2FsbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBGVExTbG93UGF0aENh
bGwuaDsgcGF0aCA9IGZ0bC9GVExTbG93UGF0aENhbGwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJMEYyNUYxQUMxODE2MzVGMzAwNTIyRjM5IC8qIEZUTFNsb3dQYXRoQ2FsbEtleS5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBGVExTbG93UGF0aENhbGxL
ZXkuY3BwOyBwYXRoID0gZnRsL0ZUTFNsb3dQYXRoQ2FsbEtleS5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTBGMjVGMUFEMTgxNjM1RjMwMDUyMkYzOSAvKiBGVExTbG93UGF0aENh
bGxLZXkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gRlRMU2xvd1BhdGhDYWxs
S2V5Lmg7IHBhdGggPSBmdGwvRlRMU2xvd1BhdGhDYWxsS2V5Lmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTBGMkI2NkE4MTdCNkI1M0QwMEE3QUUzRiAvKiBHQ0luY29taW5nUmVmQ291
bnRlZC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBHQ0luY29taW5nUmVmQ291bnRlZC5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkwRjJCNjZBOTE3QjZCNTNEMDBBN0FFM0YgLyogR0NJbmNvbWlu
Z1JlZkNvdW50ZWRJbmxpbmVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEdDSW5jb21pbmdSZWZDb3VudGVk
SW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjJCNjZBQTE3QjZCNTNE
MDBBN0FFM0YgLyogR0NJbmNvbWluZ1JlZkNvdW50ZWRTZXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gR0NJ
bmNvbWluZ1JlZkNvdW50ZWRTZXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTI3
MzMsNiArMjc0Nyw5IEBACiAJCQkJMEZEOEEzMTUxN0Q1MUYyMjAwQ0EyQzQwIC8qIEZUTEZvck9T
UkVudHJ5SklUQ29kZS5jcHAgKi8sCiAJCQkJMEZEOEEzMTYxN0Q1MUYyMjAwQ0EyQzQwIC8qIEZU
TEZvck9TUkVudHJ5SklUQ29kZS5oICovLAogCQkJCUE3OEE5NzdDMTc5NzM4RDUwMDlERjc0NCAv
KiBGVExHZW5lcmF0ZWRGdW5jdGlvbi5oICovLAorCQkJCTBGMjVGMUE3MTgxNjM1RjMwMDUyMkYz
OSAvKiBGVExJbmxpbmVDYWNoZURlc2NyaXB0b3IuaCAqLywKKwkJCQkwRjI1RjFBODE4MTYzNUYz
MDA1MjJGMzkgLyogRlRMSW5saW5lQ2FjaGVTaXplLmNwcCAqLywKKwkJCQkwRjI1RjFBOTE4MTYz
NUYzMDA1MjJGMzkgLyogRlRMSW5saW5lQ2FjaGVTaXplLmggKi8sCiAJCQkJMEZFQTBBMjYxNzA5
NjIzQjAwQkI3MjJDIC8qIEZUTEludHJpbnNpY1JlcG9zaXRvcnkuY3BwICovLAogCQkJCTBGRUEw
QTIyMTcwOTYwNjkwMEJCNzIyQyAvKiBGVExJbnRyaW5zaWNSZXBvc2l0b3J5LmggKi8sCiAJCQkJ
MEZFQTBBMDIxNzA1MTNEQjAwQkI3MjJDIC8qIEZUTEpJVENvZGUuY3BwICovLApAQCAtMjc1Nyw2
ICsyNzc0LDEwIEBACiAJCQkJMEZFQTBBMDYxNzA1MTNEQjAwQkI3MjJDIC8qIEZUTE91dHB1dC5o
ICovLAogCQkJCTBGQ0VGQUE5MTgwNEMxM0UwMDQ3MkNFNCAvKiBGVExTYXZlUmVzdG9yZS5jcHAg
Ki8sCiAJCQkJMEZDRUZBQUExODA0QzEzRTAwNDcyQ0U0IC8qIEZUTFNhdmVSZXN0b3JlLmggKi8s
CisJCQkJMEYyNUYxQUExODE2MzVGMzAwNTIyRjM5IC8qIEZUTFNsb3dQYXRoQ2FsbC5jcHAgKi8s
CisJCQkJMEYyNUYxQUIxODE2MzVGMzAwNTIyRjM5IC8qIEZUTFNsb3dQYXRoQ2FsbC5oICovLAor
CQkJCTBGMjVGMUFDMTgxNjM1RjMwMDUyMkYzOSAvKiBGVExTbG93UGF0aENhbGxLZXkuY3BwICov
LAorCQkJCTBGMjVGMUFEMTgxNjM1RjMwMDUyMkYzOSAvKiBGVExTbG93UGF0aENhbGxLZXkuaCAq
LywKIAkJCQkwRjlEMzM5ODE4MDNBREI3MDA3M0MyQkMgLyogRlRMU3RhY2tNYXBzLmNwcCAqLywK
IAkJCQkwRjlEMzM5OTE4MDNBREI3MDA3M0MyQkMgLyogRlRMU3RhY2tNYXBzLmggKi8sCiAJCQkJ
MEZFQTBBMTUxNzA2QkI5MDAwQkI3MjJDIC8qIEZUTFN0YXRlLmNwcCAqLywKQEAgLTQzOTAsNiAr
NDQxMSw3IEBACiAJCQkJMTQwRDE3RDcwRThBRDRBOTAwMENEMTdEIC8qIEpTQmFzZVByaXZhdGUu
aCBpbiBIZWFkZXJzICovLAogCQkJCTg2RkE5RTkyMTQyQkJCMkUwMDE3NzNCNyAvKiBKU0JvdW5k
RnVuY3Rpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDE5MEUxNkY1Q0QwMEIzNDQ2MCAv
KiBKU0NhbGxiYWNrQ29uc3RydWN0b3IuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGMjVGMUIyMTgx
NjM1RjMwMDUyMkYzOSAvKiBGVExTbG93UGF0aENhbGwuaCBpbiBIZWFkZXJzICovLAogCQkJCUJD
MThDNDFBMEUxNkY1Q0QwMEIzNDQ2MCAvKiBKU0NhbGxiYWNrRnVuY3Rpb24uaCBpbiBIZWFkZXJz
ICovLAogCQkJCUJDMThDNDFCMEUxNkY1Q0QwMEIzNDQ2MCAvKiBKU0NhbGxiYWNrT2JqZWN0Lmgg
aW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQxQzBFMTZGNUNEMDBCMzQ0NjAgLyogSlNDYWxsYmFj
a09iamVjdEZ1bmN0aW9ucy5oIGluIEhlYWRlcnMgKi8sCkBAIC00NTA3LDYgKzQ1MjksNyBAQAog
CQkJCTBGNDY4MENCMTRCQkIxNzIwMEJGRTI3MiAvKiBMTEludE9mZmxpbmVBc21Db25maWcuaCBp
biBIZWFkZXJzICovLAogCQkJCUZFRDI4N0IyMTVFQzlBNTcwMERBODE2MSAvKiBMTEludE9wY29k
ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY0NjgwQTUxNEJBN0Y4RDAwQkZFMjcyIC8qIExMSW50
U2xvd1BhdGhzLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjI1RjFBRTE4MTYzNUYzMDA1MjJGMzkg
LyogRlRMSW5saW5lQ2FjaGVEZXNjcmlwdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQlBN0JEQUVD
QjE3RjRFQTE0MDBGNjE0MEMgLyogSlNBcnJheUl0ZXJhdG9yLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkwRjBCODM5RDE0QkNGNDY2MDA4ODVCNEYgLyogTExJbnRUaHVua3MuaCBpbiBIZWFkZXJzICov
LAogCQkJCUE3RTVBQjM4MTc5OUU0QjIwMEQyODMzRCAvKiBMTFZNRGlzYXNzZW1ibGVyLmggaW4g
SGVhZGVycyAqLywKQEAgLTQ2NTIsNiArNDY3NSw3IEBACiAJCQkJQkMxOEM0NkEwRTE2RjVDRDAw
QjM0NDYwIC8qIFN0cmluZ1Byb3RvdHlwZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTQyRTMxM0Ix
MzRGRjBBNjAwQUZBREI1IC8qIFN0cm9uZy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTQ1NzIyODYx
NDM3RTE0MDAwNUZERTI2IC8qIFN0cm9uZ0lubGluZXMuaCBpbiBIZWFkZXJzICovLAorCQkJCTBG
MjVGMUI0MTgxNjM1RjMwMDUyMkYzOSAvKiBGVExTbG93UGF0aENhbGxLZXkuaCBpbiBIZWFkZXJz
ICovLAogCQkJCUE3Q0EzQUU2MTdEQTQxQUUwMDY1MzhBRiAvKiBXZWFrTWFwUHJvdG90eXBlLmgg
aW4gSGVhZGVycyAqLywKIAkJCQlCQ0RFM0FCODBFNkM4MkY1MDAxNDUzQTcgLyogU3RydWN0dXJl
LmggaW4gSGVhZGVycyAqLywKIAkJCQk3RTRFRTcwOTBFQkI3OTYzMDA1OTM0QUEgLyogU3RydWN0
dXJlQ2hhaW4uaCBpbiBIZWFkZXJzICovLApAQCAtNDcwMCw2ICs0NzI0LDcgQEAKIAkJCQlCQzE4
QzQyMDBFMTZGNUNEMDBCMzQ0NjAgLyogVk0uaCBpbiBIZWFkZXJzICovLAogCQkJCUZFNEEzMzIw
MTVCRDJFMDcwMDZGNTRGMyAvKiBWTUluc3BlY3Rvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRkU2
NjE3MjgxNzc0RTAzNTAwNDk1QjAwIC8qIFZNU3RhY2tCb3VuZHMuaCBpbiBIZWFkZXJzICovLAor
CQkJCTBGMjVGMUIwMTgxNjM1RjMwMDUyMkYzOSAvKiBGVExJbmxpbmVDYWNoZVNpemUuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTBGQzgxNTE1MTQwNTExOUIwMENGQTYwMyAvKiBWVGFibGVTcGVjdHJ1
bS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRkVEOTRGMkYxNzFFM0UyMzAwQkU3N0E0IC8qIFdhdGNo
ZG9nLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjkxOUQyNjE1ODUzQ0UzMDA0QTRFN0QgLyogV2F0
Y2hwb2ludC5oIGluIEhlYWRlcnMgKi8sCkBAIC01MTY4LDYgKzUxOTMsNyBAQAogCQkJCTE0N0Yz
OUMxMTA3RUMzNzYwMDQyN0E0OCAvKiBDb21tb25JZGVudGlmaWVycy5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQlBNzA5RjJGMjE3QTBBQzJBMDA1MTJFOTggLyogQ29tbW9uU2xvd1BhdGhzLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTY1NTNBMzMxMTdBMUYxRUUwMDhDRjZGMyAvKiBDb21tb25TbG93
UGF0aHNFeGNlcHRpb25zLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGMjVGMUIzMTgxNjM1RjMw
MDUyMkYzOSAvKiBGVExTbG93UGF0aENhbGxLZXkuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTdF
NUEzQTcxNzk3NDMyRDAwRTg5M0MwIC8qIENvbXBpbGF0aW9uUmVzdWx0LmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTE0N0YzOUMyMTA3RUMzNzYwMDQyN0E0OCAvKiBDb21wbGV0aW9uLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTE0NkIxNkQ4MTJFQjVCNTkwMDFCRUMxQiAvKiBDb25zZXJ2YXRpdmVS
b290cy5jcHAgaW4gU291cmNlcyAqLywKQEAgLTUxODEsNiArNTIwNyw3IEBACiAJCQkJMEZEOEEz
MUIxN0Q1MUYyMjAwQ0EyQzQwIC8qIEZUTE9TUkVudHJ5LmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTE0N0YzOUM1MTA3RUMzNzYwMDQyN0E0OCAvKiBEYXRlSW5zdGFuY2UuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJMTQ3RjM5QzYxMDdFQzM3NjAwNDI3QTQ4IC8qIERhdGVQcm90b3R5cGUuY3BwIGlu
IFNvdXJjZXMgKi8sCisJCQkJMEYyNUYxQjExODE2MzVGMzAwNTIyRjM5IC8qIEZUTFNsb3dQYXRo
Q2FsbC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDI4MDgyMzEwN0VDMDJDMDAxM0U3QjIgLyog
RGVidWdnZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkMzMTM1NjUwRjMwMkZBMzAwM0RGRDNB
IC8qIERlYnVnZ2VyQWN0aXZhdGlvbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDk1NTlFRTBE
RENEREY3MDA2NDgwODcgLyogRGVidWdnZXJDYWxsRnJhbWUuY3BwIGluIFNvdXJjZXMgKi8sCkBA
IC01NTQ1LDYgKzU1NzIsNyBAQAogCQkJCTBGMkI2NzBBMTdCNkI1QUIwMEE3QUUzRiAvKiBUeXBl
ZEFycmF5VHlwZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkY0Mjc0QTE1OEVCRTkxMDA0Q0I5
RkYgLyogdWRpczg2LmMgaW4gU291cmNlcyAqLywKIAkJCQkwRkY0Mjc0MDE1OEVCRThCMDA0Q0I5
RkYgLyogdWRpczg2X2RlY29kZS5jIGluIFNvdXJjZXMgKi8sCisJCQkJMEYyNUYxQUYxODE2MzVG
MzAwNTIyRjM5IC8qIEZUTElubGluZUNhY2hlU2l6ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkw
RkY0Mjc0MzE1OEVCRTkxMDA0Q0I5RkYgLyogdWRpczg2X2lucHV0LmMgaW4gU291cmNlcyAqLywK
IAkJCQkwRkY0Mjc0RDE1OEVCRkU2MDA0Q0I5RkYgLyogdWRpczg2X2l0YWJfaG9sZGVyLmMgaW4g
U291cmNlcyAqLywKIAkJCQkwRkY0Mjc0NTE1OEVCRTkxMDA0Q0I5RkYgLyogdWRpczg2X3N5bi1h
dHQuYyBpbiBTb3VyY2VzICovLApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxl
ci9MaW5rQnVmZmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNz
ZW1ibGVyL0xpbmtCdWZmZXIuY3BwCShyZXZpc2lvbiAxNTc3MDcpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYXNzZW1ibGVyL0xpbmtCdWZmZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUg
KzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIsIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zNyw3ICsz
NywxMSBAQCBMaW5rQnVmZmVyOjpDb2RlUmVmIExpbmtCdWZmZXI6OmZpbmFsaXplCiB7CiAgICAg
cGVyZm9ybUZpbmFsaXphdGlvbigpOwogICAgIAotICAgIHJldHVybiBDb2RlUmVmKG1fZXhlY3V0
YWJsZU1lbW9yeSk7CisgICAgQVNTRVJUKG1fZGlkQWxsb2NhdGUpOworICAgIGlmIChtX2V4ZWN1
dGFibGVNZW1vcnkpCisgICAgICAgIHJldHVybiBDb2RlUmVmKG1fZXhlY3V0YWJsZU1lbW9yeSk7
CisgICAgCisgICAgcmV0dXJuIENvZGVSZWY6OmNyZWF0ZVNlbGZNYW5hZ2VkQ29kZVJlZihtX2Nv
ZGUpOwogfQogCiBMaW5rQnVmZmVyOjpDb2RlUmVmIExpbmtCdWZmZXI6OmZpbmFsaXplQ29kZVdp
dGhEaXNhc3NlbWJseShjb25zdCBjaGFyKiBmb3JtYXQsIC4uLikKQEAgLTE1MSw2ICsxNTUsMTUg
QEAgdm9pZCBMaW5rQnVmZmVyOjpsaW5rQ29kZSh2b2lkKiBvd25lclVJRAogCiB2b2lkIExpbmtC
dWZmZXI6OmFsbG9jYXRlKHNpemVfdCBpbml0aWFsU2l6ZSwgdm9pZCogb3duZXJVSUQsIEpJVENv
bXBpbGF0aW9uRWZmb3J0IGVmZm9ydCkKIHsKKyAgICBpZiAobV9jb2RlKSB7CisgICAgICAgIGlm
IChpbml0aWFsU2l6ZSA+IG1fc2l6ZSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgCisg
ICAgICAgIG1fZGlkQWxsb2NhdGUgPSB0cnVlOworICAgICAgICBtX3NpemUgPSBpbml0aWFsU2l6
ZTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKICAgICBtX2V4ZWN1dGFibGVNZW1vcnkg
PSBtX3ZtLT5leGVjdXRhYmxlQWxsb2NhdG9yLmFsbG9jYXRlKCptX3ZtLCBpbml0aWFsU2l6ZSwg
b3duZXJVSUQsIGVmZm9ydCk7CiAgICAgaWYgKCFtX2V4ZWN1dGFibGVNZW1vcnkpCiAgICAgICAg
IHJldHVybjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTGlua0J1ZmZl
ci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTGlua0J1
ZmZlci5oCShyZXZpc2lvbiAxNTc3MDcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1i
bGVyL0xpbmtCdWZmZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMDksIDIwMTAsIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA5LCAyMDEwLCAyMDEyLCAyMDEzIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAt
OTQsNiArOTQsMjIgQEAgcHVibGljOgogICAgICAgICBsaW5rQ29kZShvd25lclVJRCwgZWZmb3J0
KTsKICAgICB9CiAKKyAgICBMaW5rQnVmZmVyKFZNJiB2bSwgTWFjcm9Bc3NlbWJsZXIqIG1hc20s
IHZvaWQqIGNvZGUsIHNpemVfdCBzaXplKQorICAgICAgICA6IG1fc2l6ZShzaXplKQorI2lmIEVO
QUJMRShCUkFOQ0hfQ09NUEFDVElPTikKKyAgICAgICAgLCBtX2luaXRpYWxTaXplKDApCisjZW5k
aWYKKyAgICAgICAgLCBtX2RpZEFsbG9jYXRlKGZhbHNlKQorICAgICAgICAsIG1fY29kZShjb2Rl
KQorICAgICAgICAsIG1fYXNzZW1ibGVyKG1hc20pCisgICAgICAgICwgbV92bSgmdm0pCisjaWZu
ZGVmIE5ERUJVRworICAgICAgICAsIG1fY29tcGxldGVkKGZhbHNlKQorI2VuZGlmCisgICAgewor
ICAgICAgICBsaW5rQ29kZSgwLCBKSVRDb21waWxhdGlvbkNhbkZhaWwpOworICAgIH0KKwogICAg
IH5MaW5rQnVmZmVyKCkKICAgICB7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Z0bC9GVExBYmJyZXZpYXRpb25zLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2Z0bC9GVExBYmJyZXZpYXRpb25zLmgJKHJldmlzaW9uIDE1NzcwNykKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9mdGwvRlRMQWJicmV2aWF0aW9ucy5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
NDUsNiArMTQ1LDcgQEAgZW51bSBCaXRFeHRlbnNpb24geyBaZXJvRXh0ZW5kLCBTaWduRXh0ZQog
c3RhdGljIGlubGluZSBMVmFsdWUgY29uc3RJbnQoTFR5cGUgdHlwZSwgdW5zaWduZWQgbG9uZyBs
b25nIHZhbHVlLCBCaXRFeHRlbnNpb24gZXh0ZW5zaW9uID0gWmVyb0V4dGVuZCkgeyByZXR1cm4g
bGx2bS0+Q29uc3RJbnQodHlwZSwgdmFsdWUsIGV4dGVuc2lvbiA9PSBTaWduRXh0ZW5kKTsgfQog
c3RhdGljIGlubGluZSBMVmFsdWUgY29uc3RSZWFsKExUeXBlIHR5cGUsIGRvdWJsZSB2YWx1ZSkg
eyByZXR1cm4gbGx2bS0+Q29uc3RSZWFsKHR5cGUsIHZhbHVlKTsgfQogc3RhdGljIGlubGluZSBM
VmFsdWUgY29uc3RJbnRUb1B0cihMVmFsdWUgdmFsdWUsIExUeXBlIHR5cGUpIHsgcmV0dXJuIGxs
dm0tPkNvbnN0SW50VG9QdHIodmFsdWUsIHR5cGUpOyB9CitzdGF0aWMgaW5saW5lIExWYWx1ZSBj
b25zdE51bGwoTFR5cGUgdHlwZSkgeyByZXR1cm4gbGx2bS0+Q29uc3ROdWxsKHR5cGUpOyB9CiBz
dGF0aWMgaW5saW5lIExWYWx1ZSBjb25zdEJpdENhc3QoTFZhbHVlIHZhbHVlLCBMVHlwZSB0eXBl
KSB7IHJldHVybiBsbHZtLT5Db25zdEJpdENhc3QodmFsdWUsIHR5cGUpOyB9CiAKIHN0YXRpYyBp
bmxpbmUgTEJhc2ljQmxvY2sgYXBwZW5kQmFzaWNCbG9jayhMQ29udGV4dCBjb250ZXh0LCBMVmFs
dWUgZnVuY3Rpb24sIGNvbnN0IGNoYXIqIG5hbWUgPSAiIikgeyByZXR1cm4gbGx2bS0+QXBwZW5k
QmFzaWNCbG9ja0luQ29udGV4dChjb250ZXh0LCBmdW5jdGlvbiwgbmFtZSk7IH0KSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ2FwYWJpbGl0aWVzLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENhcGFiaWxpdGllcy5jcHAJKHJldmlzaW9u
IDE1NzcwNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ2FwYWJpbGl0aWVzLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtOTQsMTAgKzk0LDEzIEBAIGlubGluZSBDYXBhYmlsaXR5TGV2
ZWwgY2FuQ29tcGlsZShOb2RlKiAKICAgICBjYXNlIEdldENsb3N1cmVSZWdpc3RlcnM6CiAgICAg
Y2FzZSBHZXRDbG9zdXJlVmFyOgogICAgIGNhc2UgUHV0Q2xvc3VyZVZhcjoKLSAgICBjYXNlIEdl
dEJ5SWQ6CiAgICAgY2FzZSBJbnQ1MlRvVmFsdWU6CiAgICAgICAgIC8vIFRoZXNlIGFyZSBPSy4K
ICAgICAgICAgYnJlYWs7CisgICAgY2FzZSBHZXRCeUlkOgorICAgICAgICBpZiAobm9kZS0+Y2hp
bGQxKCkudXNlS2luZCgpID09IENlbGxVc2UpCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
cmV0dXJuIENhbm5vdENvbXBpbGU7CiAgICAgY2FzZSBHZXRJbmRleGVkUHJvcGVydHlTdG9yYWdl
OgogICAgICAgICBpZiAoaXNUeXBlZFZpZXcobm9kZS0+YXJyYXlNb2RlKCkudHlwZWRBcnJheVR5
cGUoKSkpCiAgICAgICAgICAgICBicmVhazsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9m
dGwvRlRMQ29tcGlsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0
bC9GVExDb21waWxlLmNwcAkocmV2aXNpb24gMTU3NzA3KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2Z0bC9GVExDb21waWxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTEwLDYgKzExMCw3IEBA
IHN0YXRpYyB2b2lkIGZpeEZ1bmN0aW9uQmFzZWRPblN0YWNrTWFwcygKICAgICBTdGFja01hcHM6
OlJlY29yZE1hcCYgcmVjb3JkTWFwKQogewogICAgIFZNJiB2bSA9IHN0YXRlLmdyYXBoLm1fdm07
CisgICAgU3RhY2tNYXBzIHN0YWNrbWFwcyA9IGppdENvZGUtPnN0YWNrbWFwczsKIAogICAgIEV4
aXRUaHVua0dlbmVyYXRvciBleGl0VGh1bmtHZW5lcmF0b3Ioc3RhdGUpOwogICAgIGV4aXRUaHVu
a0dlbmVyYXRvci5lbWl0VGh1bmtzKCk7CkBAIC0xMzYsNiArMTM3LDc2IEBAIHN0YXRpYyB2b2lk
IGZpeEZ1bmN0aW9uQmFzZWRPblN0YWNrTWFwcygKICAgICAgICAgc3RhdGUuZmluYWxpemVyLT5l
eGl0VGh1bmtzTGlua0J1ZmZlciA9IGxpbmtCdWZmZXIucmVsZWFzZSgpOwogICAgIH0KIAorICAg
IGlmICghc3RhdGUuZ2V0QnlJZHMuaXNFbXB0eSgpKSB7CisgICAgICAgIENDYWxsSGVscGVycyBz
bG93UGF0aEpJVCh2bSwgY29kZUJsb2NrKTsKKyAgICAgICAgCisgICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IHN0YXRlLmdldEJ5SWRzLnNpemUoKTsgaS0tOykgeworICAgICAgICAgICAgR2V0QnlJ
ZERlc2NyaXB0b3ImIGdldEJ5SWQgPSBzdGF0ZS5nZXRCeUlkc1tpXTsKKyAgICAgICAgICAgIAor
ICAgICAgICAgICAgU3RhY2tNYXBzOjpSZWNvcmRNYXA6Oml0ZXJhdG9yIGl0ZXIgPSByZWNvcmRN
YXAuZmluZChnZXRCeUlkLnN0YWNrbWFwSUQoKSk7CisgICAgICAgICAgICBpZiAoaXRlciA9PSBy
ZWNvcmRNYXAuZW5kKCkpIHsKKyAgICAgICAgICAgICAgICAvLyBJdCB3YXMgb3B0aW1pemVkIG91
dC4KKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IAorICAgICAgICAgICAgU3RhY2tNYXBzOjpSZWNvcmQmIHJlY29yZCA9IGl0ZXItPnZhbHVlOwor
CisgICAgICAgICAgICAvLyBGSVhNRTogTExWTSBzaG91bGQgdGVsbCB1cyB3aGljaCByZWdpc3Rl
cnMgYXJlIGxpdmUuCisgICAgICAgICAgICBSZWdpc3RlclNldCB1c2VkUmVnaXN0ZXJzID0gUmVn
aXN0ZXJTZXQ6OmFsbFJlZ2lzdGVycygpOworICAgICAgICAgICAgCisgICAgICAgICAgICBHUFJS
ZWcgY2FsbEZyYW1lUmVnaXN0ZXIgPSByZWNvcmQubG9jYXRpb25zWzBdLmRpcmVjdEdQUihzdGFj
a21hcHMpOworICAgICAgICAgICAgR1BSUmVnIGJhc2UgPSByZWNvcmQubG9jYXRpb25zWzFdLmRp
cmVjdEdQUihzdGFja21hcHMpOworICAgICAgICAgICAgR1BSUmVnIHJlc3VsdCA9IEdQUkluZm86
OnJldHVyblZhbHVlR1BSOworICAgICAgICAgICAgCisgICAgICAgICAgICBKSVRHZXRCeUlkR2Vu
ZXJhdG9yIGdlbigKKyAgICAgICAgICAgICAgICBjb2RlQmxvY2ssIGdldEJ5SWQuY29kZU9yaWdp
bigpLCB1c2VkUmVnaXN0ZXJzLCBKU1ZhbHVlUmVncyhiYXNlKSwKKyAgICAgICAgICAgICAgICBK
U1ZhbHVlUmVncyhyZXN1bHQpLCBmYWxzZSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIE1h
Y3JvQXNzZW1ibGVyOjpMYWJlbCBiZWdpbiA9IHNsb3dQYXRoSklULmxhYmVsKCk7CisgICAgICAg
ICAgICAKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGNhbGwgPSBjYWxsT3BlcmF0
aW9uKAorICAgICAgICAgICAgICAgIHN0YXRlLCB1c2VkUmVnaXN0ZXJzLCBzbG93UGF0aEpJVCwg
b3BlcmF0aW9uR2V0QnlJZE9wdGltaXplLCByZXN1bHQsCisgICAgICAgICAgICAgICAgY2FsbEZy
YW1lUmVnaXN0ZXIsIGdlbi5zdHViSW5mbygpLCBiYXNlLCBnZXRCeUlkLnVpZCgpKTsKKyAgICAg
ICAgICAgIAorICAgICAgICAgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChiZWdpbiwgY2FsbCk7
CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGdldEJ5SWQubV9zbG93UGF0aERvbmUgPSBzbG93
UGF0aEpJVC5qdW1wKCk7CisgICAgICAgICAgICBnZXRCeUlkLm1fZ2VuZXJhdG9yID0gZ2VuOwor
ICAgICAgICB9CisgICAgICAgIAorICAgICAgICBzdGF0ZS5maW5hbGl6ZXItPnNsb3dQYXRoTGlu
a0J1ZmZlciA9IGFkb3B0UHRyKAorICAgICAgICAgICAgbmV3IExpbmtCdWZmZXIodm0sICZzbG93
UGF0aEpJVCwgY29kZUJsb2NrLCBKSVRDb21waWxhdGlvbk11c3RTdWNjZWVkKSk7CisgICAgICAg
IAorICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBzdGF0ZS5nZXRCeUlkcy5zaXplKCk7IGktLTsp
IHsKKyAgICAgICAgICAgIEdldEJ5SWREZXNjcmlwdG9yJiBnZXRCeUlkID0gc3RhdGUuZ2V0QnlJ
ZHNbaV07CisgICAgICAgICAgICAKKyAgICAgICAgICAgIFN0YWNrTWFwczo6UmVjb3JkTWFwOjpp
dGVyYXRvciBpdGVyID0gcmVjb3JkTWFwLmZpbmQoZ2V0QnlJZC5zdGFja21hcElEKCkpOworICAg
ICAgICAgICAgaWYgKGl0ZXIgPT0gcmVjb3JkTWFwLmVuZCgpKSB7CisgICAgICAgICAgICAgICAg
Ly8gSXQgd2FzIG9wdGltaXplZCBvdXQuCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgIENDYWxsSGVscGVycyBmYXN0UGF0aEpJVCh2bSwgY29k
ZUJsb2NrKTsKKyAgICAgICAgICAgIGdldEJ5SWQubV9nZW5lcmF0b3IuZ2VuZXJhdGVGYXN0UGF0
aChmYXN0UGF0aEpJVCk7CisKKyAgICAgICAgICAgIGNoYXIqIHN0YXJ0T2ZJQyA9CisgICAgICAg
ICAgICAgICAgYml0d2lzZV9jYXN0PGNoYXIqPihnZW5lcmF0ZWRGdW5jdGlvbikgKyByZWNvcmQu
aW5zdHJ1Y3Rpb25PZmZzZXQ7CisgICAgICAgICAgICBzaXplX3Qgc2l6ZU9mSUMgPSBzaXplT2ZH
ZXRCeUlEKCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIExpbmtCdWZmZXIgbGlua0J1ZmZl
cih2bSwgZmFzdFBhdGhKSVQsIHN0YXJ0T2ZJQywgc2l6ZU9mR2V0QnlJZCgpKTsKKyAgICAgICAg
ICAgIC8vIE5vdGU6IHdlIGNvdWxkIGhhbmRsZSB0aGUgIWlzVmFsaWQoKSBjYXNlLiBXZSBqdXN0
IGRvbid0IGFwcGVhciB0byBoYXZlIGEKKyAgICAgICAgICAgIC8vIHJlYXNvbiB0byBkbyBzbywg
eWV0LgorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQobGlua0J1ZmZlci5pc1ZhbGlkKCkpOwor
ICAgICAgICAgICAgCisgICAgICAgICAgICBzdGF0ZS5maW5hbGl6ZXItPnNsb3dQYXRoTGlua0J1
ZmZlci0+bGluaygKKyAgICAgICAgICAgICAgICBnZXRCeUlkLm1fc2xvd1BhdGhEb25lLCBDb2Rl
TG9jYXRpb25MYWJlbChzdGFydE9mSUMgKyBzaXplb2ZJQykpOworICAgICAgICAgICAgCisgICAg
ICAgICAgICBnZXRCeUlkLm1fZ2VuZXJhdG9yLmZpbmFsaXplKGxpbmtCdWZmZXIsICpzdGF0ZS5m
aW5hbGl6ZXItPnNsb3dQYXRoTGlua0J1ZmZlcik7CisgICAgICAgICAgICAKKyAgICAgICAgICAg
IGxpbmtCdWZmZXIuZmluYWxpemVDb2RlV2l0aG91dERpc2Fzc2VtYmx5KCk7CisgICAgICAgIH0K
KyAgICB9CisgICAgCiAgICAgUmVwYXRjaEJ1ZmZlciByZXBhdGNoQnVmZmVyKGNvZGVCbG9jayk7
CiAgICAgCiAgICAgZm9yICh1bnNpZ25lZCBleGl0SW5kZXggPSBqaXRDb2RlLT5vc3JFeGl0LnNp
emUoKTsgZXhpdEluZGV4LS07KSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZU
TElubGluZUNhY2hlRGVzY3JpcHRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9mdGwvRlRMSW5saW5lQ2FjaGVEZXNjcmlwdG9yLmgJKHJldmlzaW9uIDApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTElubGluZUNhY2hlRGVzY3JpcHRvci5oCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsNzEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCisgKi8KKworI2lmbmRlZiBGVExJbmxpbmVDYWNoZURlc2NyaXB0b3JfaAorI2RlZmlu
ZSBGVExJbmxpbmVDYWNoZURlc2NyaXB0b3JfaAorCisjaWYgRU5BQkxFKEZUTF9KSVQpCisKKyNp
bmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdJbXBsLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3Bh
Y2UgRlRMIHsKKworY2xhc3MgSW5saW5lQ2FjaGVEZXNjcmlwdG9yIHsKK3B1YmxpYzoKKyAgICBJ
bmxpbmVDYWNoZURlc2NyaXB0b3IoKSB7IH0KKyAgICAKKyAgICBNYWNyb0Fzc2VtYmxlcjo6SnVt
cCBtX3Nsb3dQYXRoRG9uZTsKK307CisKK2NsYXNzIEdldEJ5SWREZXNjcmlwdG9yIDogcHVibGlj
IElubGluZUNhY2hlRGVzY3JpcHRvciB7CitwdWJsaWM6CisgICAgR2V0QnlJZERlc2NyaXB0b3Io
KSB7IH0KKyAgICAKKyAgICBHZXRCeUlkRGVzY3JpcHRvcih1bnNpZ25lZCBzdGFja21hcElELCBD
b2RlT3JpZ2luIGNvZGVPcmlnaW4sIFN0cmluZ0ltcGwqIHVpZCkKKyAgICAgICAgOiBtX3N0YWNr
bWFwSUQoc3RhY2ttYXBJRCkKKyAgICAgICAgLCBtX2NvZGVPcmlnaW4oY29kZU9yaWdpbikKKyAg
ICAgICAgLCBtX3VpZCh1aWQpCisgICAgeworICAgIH0KKyAgICAKKyAgICB1bnNpZ25lZCBzdGFj
a21hcElEKCkgY29uc3QgeyByZXR1cm4gbV9zdGFja21hcElEOyB9CisgICAgQ29kZU9yaWdpbiBj
b2RlT3JpZ2luKCkgY29uc3QgeyByZXR1cm4gbV9jb2RlT3JpZ2luOyB9CisgICAgU3RyaW5nSW1w
bCogdWlkKCkgY29uc3QgeyByZXR1cm4gbV91aWQ7IH0KKyAgICAKK3ByaXZhdGU6CisgICAgdW5z
aWduZWQgbV9zdGFja21hcElEOworICAgIENvZGVPcmlnaW4gbV9jb2RlT3JpZ2luOworICAgIFN0
cmluZ0ltcGwqIG1fdWlkOworCitwdWJsaWM6CisgICAgSklUR2V0QnlJZEdlbmVyYXRvciBtX2dl
bmVyYXRvcjsKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpGVEwKKworI2VuZGlmIC8vIEVO
QUJMRShGVExfSklUKQorCisjZW5kaWYgLy8gRlRMSW5saW5lQ2FjaGVEZXNjcmlwdG9yX2gKKwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExJbmxpbmVDYWNoZVNpemUuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSW5saW5lQ2FjaGVTaXpl
LmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSW5saW5l
Q2FjaGVTaXplLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDcyIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJGVExJbmxpbmVDYWNoZVNpemUuaCIKKworI2lmIEVOQUJMRShGVExfSklUKQor
CisjaW5jbHVkZSAiSklUSW5saW5lQ2FjaGVHZW5lcmF0b3IuaCIKKyNpbmNsdWRlICJNYWNyb0Fz
c2VtYmxlci5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEZUTCB7CisKK3N0YXRpYyBz
aXplX3Qgc19zaXplT2ZHZXRCeUlkOworc3RhdGljIHNpemVfdCBzX3NpemVPZlB1dEJ5SWQ7CisK
K3NpemVfdCBzaXplT2ZHZXRCeUlkKCkKK3sKKyAgICBpZiAoc19zaXplT2ZHZXRCeUlkKQorICAg
ICAgICByZXR1cm4gc19zaXplT2ZHZXRCeUlkOworICAgIAorICAgIE1hY3JvQXNzZW1ibGVyIGpp
dDsKKyAgICAKKyAgICBKSVRHZXRCeUlkR2VuZXJhdG9yIGdlbmVyYXRvcigKKyAgICAgICAgMCwg
Q29kZU9yaWdpbigpLCBSZWdpc3RlclNldCgpLCBKU1ZhbHVlUmVncyhHUFJJbmZvOjpyZWdUNiks
IEpTVmFsdWVSZWdzKEdQUkluZm86OnJlZ1Q3KSwKKyAgICAgICAgZmFsc2UpOworICAgIGdlbmVy
YXRvci5nZW5lcmF0ZUZhc3RQYXRoKGppdCk7CisgICAgCisgICAgcmV0dXJuIHNfc2l6ZU9mR2V0
QnlJZCA9IGppdC5tX2Fzc2VtYmxlci5jb2RlU2l6ZSgpOworfQorCitzaXplX3Qgc2l6ZU9mUHV0
QnlJZCgpCit7CisgICAgaWYgKHNfc2l6ZU9mUHV0QnlJZCkKKyAgICAgICAgcmV0dXJuIHNfc2l6
ZU9mUHV0QnlJZDsKKyAgICAKKyAgICBNYWNyb0Fzc2VtYmxlciBqaXQ7CisgICAgCisgICAgSklU
UHV0QnlJZEdlbmVyYXRvciBnZW5lcmF0b3IoCisgICAgICAgIDAsIENvZGVPcmlnaW4oKSwgUmVn
aXN0ZXJTZXQoKSwgSlNWYWx1ZVJlZ3MoR1BSSW5mbzo6cmVnVDYpLCBKU1ZhbHVlUmVncyhHUFJJ
bmZvOjpyZWdUNyksCisgICAgICAgIEdQUkluZm86OnJlZ1Q4LCBmYWxzZSwgTm90U3RyaWN0TW9k
ZSwgTm90RGlyZWN0KTsKKyAgICBnZW5lcmF0b3IuZ2VuZXJhdGVGYXN0UGF0aChqaXQpOworICAg
IAorICAgIHJldHVybiBzX3NpemVPZlB1dEJ5SWQgPSBqaXQubV9hc3NlbWJsZXIuY29kZVNpemUo
KTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkZUTAorCisjZW5kaWYgLy8gRU5BQkxFKEZU
TF9KSVQpCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSW5saW5lQ2FjaGVT
aXplLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExJbmxpbmVD
YWNoZVNpemUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRM
SW5saW5lQ2FjaGVTaXplLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0MSBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEZUTElubGlu
ZUNhY2hlU2l6ZV9oCisjZGVmaW5lIEZUTElubGluZUNhY2hlU2l6ZV9oCisKKyNpZiBFTkFCTEUo
RlRMX0pJVCkKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBGVEwgeworCitzaXplX3Qgc2l6
ZU9mR2V0QnlJZCgpOworc2l6ZV90IHNpemVPZlB1dEJ5SWQoKTsKKworfSB9IC8vIG5hbWVzcGFj
ZSBKU0M6OkZUTAorCisjZW5kaWYgLy8gRU5BQkxFKEZUTF9KSVQpCisKKyNlbmRpZiAvLyBGVExJ
bmxpbmVDYWNoZVNpemVfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTElu
dHJpbnNpY1JlcG9zaXRvcnkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZnRsL0ZUTEludHJpbnNpY1JlcG9zaXRvcnkuaAkocmV2aXNpb24gMTU3NzA3KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2Z0bC9GVExJbnRyaW5zaWNSZXBvc2l0b3J5LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTQ0LDYgKzQ0LDcgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBGVEwgewogICAg
IG1hY3JvKG11bFdpdGhPdmVyZmxvdzY0LCAibGx2bS5zbXVsLndpdGgub3ZlcmZsb3cuaTY0Iiwg
ZnVuY3Rpb25UeXBlKHN0cnVjdFR5cGUobV9jb250ZXh0LCBpbnQ2NCwgYm9vbGVhbiksIGludDY0
LCBpbnQ2NCkpIFwKICAgICBtYWNybyhzdWJXaXRoT3ZlcmZsb3czMiwgImxsdm0uc3N1Yi53aXRo
Lm92ZXJmbG93LmkzMiIsIGZ1bmN0aW9uVHlwZShzdHJ1Y3RUeXBlKG1fY29udGV4dCwgaW50MzIs
IGJvb2xlYW4pLCBpbnQzMiwgaW50MzIpKSBcCiAgICAgbWFjcm8oc3ViV2l0aE92ZXJmbG93NjQs
ICJsbHZtLnNzdWIud2l0aC5vdmVyZmxvdy5pNjQiLCBmdW5jdGlvblR5cGUoc3RydWN0VHlwZSht
X2NvbnRleHQsIGludDY0LCBib29sZWFuKSwgaW50NjQsIGludDY0KSkgXAorICAgIG1hY3JvKHdl
YmtpdFBhdGNocG9pbnQsICJsbHZtLndlYmtpdC5wYXRjaHBvaW50IiwgZnVuY3Rpb25UeXBlKHZv
aWRUeXBlLCBpbnQzMiwgaW50MzIsIFZhcmlhZGljKSkgXAogICAgIG1hY3JvKHdlYmtpdFN0YWNr
bWFwLCAibGx2bS53ZWJraXQuc3RhY2ttYXAiLCBmdW5jdGlvblR5cGUodm9pZFR5cGUsIGludDMy
LCBpbnQzMiwgVmFyaWFkaWMpKSBcCiAgICAgbWFjcm8odHJhcCwgImxsdm0udHJhcCIsIGZ1bmN0
aW9uVHlwZSh2b2lkVHlwZSkpIFwKICAgICBtYWNybyhvc3JFeGl0LCAid2Via2l0X29zcl9leGl0
IiwgZnVuY3Rpb25UeXBlKHZvaWRUeXBlLCBib29sZWFuLCBpbnQzMiwgVmFyaWFkaWMpKQpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExKSVRGaW5hbGl6ZXIuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSklURmluYWxpemVyLmNwcAkocmV2
aXNpb24gMTU3NzA3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExKSVRGaW5hbGl6
ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04NCw2ICs4NCwyNCBAQCBib29sIEpJVEZpbmFsaXpl
cjo6ZmluYWxpemVGdW5jdGlvbigpCiAgICAgICAgICAgICAgICAgKCJGVEwgZXhpdCB0aHVua3Mg
Zm9yICVzIiwgdG9DU3RyaW5nKENvZGVCbG9ja1dpdGhKSVRUeXBlKG1fcGxhbi5jb2RlQmxvY2su
Z2V0KCksIEpJVENvZGU6OkZUTEpJVCkpLmRhdGEoKSkpKTsKICAgICB9IC8vIGVsc2UgdGhpcyBm
dW5jdGlvbiBoYWQgbm8gT1NSIGV4aXRzLCBzbyBubyBleGl0IHRodW5rcy4KICAgICAKKyAgICBp
ZiAoc2lkZUNvZGVMaW5rQnVmZmVyKSB7CisgICAgICAgIC8vIFNpZGUgY29kZSBpcyBmb3Igc3Bl
Y2lhbCBzbG93IHBhdGhzIHRoYXQgd2UgZ2VuZXJhdGUgb3Vyc2VsdmVzLCBsaWtlIGZvciBpbmxp
bmUKKyAgICAgICAgLy8gY2FjaGVzLgorICAgICAgICAKKyAgICAgICAgZm9yICh1bnNpZ25lZCBp
ID0gc2xvd1BhdGhDYWxscy5zaXplKCk7IGktLTspIHsKKyAgICAgICAgICAgIFNsb3dQYXRoQ2Fs
bCYgY2FsbCA9IHNsb3dQYXRoQ2FsbHNbaV07CisgICAgICAgICAgICBzaWRlQ29kZUxpbmtCdWZm
ZXItPmxpbmsoCisgICAgICAgICAgICAgICAgY2FsbC5jYWxsKCksCisgICAgICAgICAgICAgICAg
bV9wbGFuLnZtLm1fZnRsVGh1bmtzLT5nZXRTbG93UGF0aENhbGxUaHVuayhtX3BsYW4udm0sIGNh
bGwua2V5KCkpKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaml0Q29kZS0+YWRkSGFu
ZGxlKEZJTkFMSVpFX0RGR19DT0RFKAorICAgICAgICAgICAgKnNpZGVDb2RlTGlua0J1ZmZlciwK
KyAgICAgICAgICAgICgiRlRMIHNpZGUgY29kZSBmb3IgJXMiLAorICAgICAgICAgICAgICAgIHRv
Q1N0cmluZyhDb2RlQmxvY2tXaXRoSklUVHlwZShtX3BsYW4uY29kZUJsb2NrLmdldCgpLCBKSVRD
b2RlOjpGVExKSVQpKS5kYXRhKCkpKQorICAgICAgICAgICAgLmV4ZWN1dGFibGVNZW1vcnkoKSk7
CisgICAgfQorICAgIAogICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciB3aXRoQXJpdHlDaGVjazsK
ICAgICBpZiAoYXJpdHlDaGVjay5pc1NldCgpKQogICAgICAgICB3aXRoQXJpdHlDaGVjayA9IGVu
dHJ5cG9pbnRMaW5rQnVmZmVyLT5sb2NhdGlvbk9mKGFyaXR5Q2hlY2spOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2Z0bC9GVExKSVRGaW5hbGl6ZXIuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEpJVEZpbmFsaXplci5oCShyZXZpc2lvbiAxNTc3MDcp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEpJVEZpbmFsaXplci5oCSh3b3JraW5n
IGNvcHkpCkBAIC0zNCw2ICszNCw3IEBACiAjaW5jbHVkZSAiRlRMR2VuZXJhdGVkRnVuY3Rpb24u
aCIKICNpbmNsdWRlICJGVExKSVRDb2RlLmgiCiAjaW5jbHVkZSAiRlRMT1NSRXhpdENvbXBpbGF0
aW9uSW5mby5oIgorI2luY2x1ZGUgIkZUTFNsb3dQYXRoQ2FsbC5oIgogI2luY2x1ZGUgIkxMVk1B
UEkuaCIKICNpbmNsdWRlICJMaW5rQnVmZmVyLmgiCiAjaW5jbHVkZSAiTWFjcm9Bc3NlbWJsZXIu
aCIKQEAgLTUwLDYgKzUxLDggQEAgcHVibGljOgogCiAgICAgT3duUHRyPExpbmtCdWZmZXI+IGV4
aXRUaHVua3NMaW5rQnVmZmVyOwogICAgIE93blB0cjxMaW5rQnVmZmVyPiBlbnRyeXBvaW50TGlu
a0J1ZmZlcjsKKyAgICBPd25QdHI8TGlua0J1ZmZlcj4gc2lkZUNvZGVMaW5rQnVmZmVyOworICAg
IFZlY3RvcjxTbG93UGF0aENhbGw+IHNsb3dQYXRoQ2FsbHM7IC8vIENhbGxzIGluc2lkZSB0aGUg
c2lkZSBjb2RlLgogICAgIFZlY3RvcjxPU1JFeGl0Q29tcGlsYXRpb25JbmZvPiBvc3JFeGl0Owog
ICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBhcml0eUNoZWNrOwogICAgIEdlbmVyYXRlZEZ1bmN0
aW9uIGZ1bmN0aW9uOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb2NhdGlv
bi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb2NhdGlv
bi5jcHAJKHJldmlzaW9uIDE1NzcwNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRM
TG9jYXRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xODAsNiArMTgwLDEyIEBAIHZvaWQgTG9j
YXRpb246OnJlc3RvcmVJbnRvKE1hY3JvQXNzZW1ibGUKICNlcnJvciAiQ1BVIGFyY2hpdGVjdHVy
ZSBub3Qgc3VwcG9ydGVkLiIKICNlbmRpZiAvLyBDUFUgY2FzZXMgZm9yIExvY2F0aW9uIG1ldGhv
ZHMKIAorR1BSUmVnIExvY2F0aW9uOjpkaXJlY3RHUFIoKSBjb25zdAoreworICAgIEFTU0VSVCgh
YWRkZW5kKCkpOworICAgIHJldHVybiBncHIoKTsKK30KKwogfSB9IC8vIG5hbWVzcGFjZSBKU0M6
OkZUTAogCiBuYW1lc3BhY2UgV1RGIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwv
RlRMTG9jYXRpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZU
TExvY2F0aW9uLmgJKHJldmlzaW9uIDE1NzcwNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9m
dGwvRlRMTG9jYXRpb24uaAkod29ya2luZyBjb3B5KQpAQCAtMTU3LDYgKzE1Nyw3IEBAIHB1Ymxp
YzoKICAgICBib29sIGlzR1BSKCkgY29uc3Q7CiAgICAgYm9vbCBpbnZvbHZlc0dQUigpIGNvbnN0
OwogICAgIEdQUlJlZyBncHIoKSBjb25zdDsKKyAgICBHUFJSRWcgZGlyZWN0R1BSKCkgY29uc3Q7
IC8vIEdldCB0aGUgR1BSIGFuZCBhc3NlcnQgdGhhdCB0aGVyZSBpcyBubyBhZGRlbmQuCiAgICAg
CiAgICAgYm9vbCBpc0ZQUigpIGNvbnN0OwogICAgIEZQUlJlZyBmcHIoKSBjb25zdDsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0xMVk0uY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0xMVk0uY3BwCShy
ZXZpc2lvbiAxNTc3MDcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZH
VG9MTFZNLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTIyMiwyMiArMTIyMiwyOSBAQCBwcml2YXRl
OgogICAgIAogICAgIHZvaWQgY29tcGlsZUdldEJ5SWQoKQogICAgIHsKLSAgICAgICAgTFZhbHVl
IGJhc2UgPSAwOworICAgICAgICAvLyBVbnR5cGVkVXNlIGlzIGEgYml0IGhhcmRlciB0byByZWFz
b24gYWJvdXQgYW5kIEknbSBub3Qgc3VyZSBob3cgYmVzdCB0byBkbyBpdCwgeWV0LgorICAgICAg
ICAvLyBCYXNpY2FsbHkgd2UgbmVlZCB0byBlbWl0IGEgY2VsbCBicmFuY2ggdGhhdCB0YWtlcyB5
b3UgdG8gdGhlIHNsb3cgcGF0aCwgYnV0IHRoZSBzbG93CisgICAgICAgIC8vIHBhdGggaXMgZ2Vu
ZXJhdGVkIGJ5IHRoZSBJQyBnZW5lcmF0b3Igc28gd2UgY2FuJ3QganVtcCB0byBpdCBmcm9tIGhl
cmUuIEFuZCB0aGUgSUMKKyAgICAgICAgLy8gZ2VuZXJhdG9yIGN1cnJlbnRseSBkb2Vzbid0IGtu
b3cgaG93IHRvIGVtaXQgc3VjaCBhIGJyYW5jaC4gU28sIGZvciBub3csIHdlIGp1c3QKKyAgICAg
ICAgLy8gcmVzdHJpY3QgdGhpcyB0byBDZWxsVXNlLgorICAgICAgICBBU1NFUlQobV9ub2RlLT5j
aGlsZDEoKS51c2VLaW5kKCkgPT0gQ2VsbFVzZSk7CiAKLSAgICAgICAgc3dpdGNoIChtX25vZGUt
PmNoaWxkMSgpLnVzZUtpbmQoKSkgewotICAgICAgICBjYXNlIENlbGxVc2U6Ci0gICAgICAgICAg
ICBiYXNlID0gbG93Q2VsbChtX25vZGUtPmNoaWxkMSgpKTsKLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICBjYXNlIFVudHlwZWRVc2U6Ci0gICAgICAgICAgICBiYXNlID0gbG93SlNWYWx1ZSht
X25vZGUtPmNoaWxkMSgpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBkZWZhdWx0Ogot
ICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICBMVmFsdWUgYmFzZSA9IGxvd0NlbGwobV9ub2RlLT5jaGlsZDEoKSk7Cisg
ICAgICAgIFN0cmluZ0ltcGwqIHVpZCA9IG1fZ3JhcGguaWRlbnRpZmllcnMoKVttX25vZGUtPmlk
ZW50aWZpZXJOdW1iZXIoKV07CisKKyAgICAgICAgaWYgKCFPcHRpb25zOjpmdGxJQ1VzZXNQYXRj
aHBvaW50KCkpIHsKKyAgICAgICAgICAgIHNldEpTVmFsdWUodm1DYWxsKG1fb3V0Lm9wZXJhdGlv
bihvcGVyYXRpb25HZXRCeUlkKSwgbV9jYWxsRnJhbWUsIG1fb3V0LmludFB0clplcm8sIGJhc2Us
IG1fb3V0LmNvbnN0SW50UHRyKHVpZCkpKTsKKyAgICAgICAgICAgIHJldHVybjsKICAgICAgICAg
fQorCisgICAgICAgIC8vIEFyZ3VtZW50czogaWQsIGJ5dGVzLCB0YXJnZXQsIG51bUFyZ3MsIGFy
Z3MuLi4KKyAgICAgICAgdW5zaWduZWQgc3RhY2ttYXBJRCA9IG1fc3RhY2ttYXBJRHMrKzsKKyAg
ICAgICAgc2V0SlNWYWx1ZShtX291dC5jYWxsKAorICAgICAgICAgICAgbV9vdXQud2Via2l0UGF0
Y2hwb2ludEludHJpbnNpYygpLAorICAgICAgICAgICAgbV9vdXQuY29uc3RJbnQzMihzdGFja21h
cElEKSwgbV9vdXQuY29uc3RJbnQzMihzaXplT2ZHZXRCeUlkKCkpLAorICAgICAgICAgICAgY29u
c3ROdWxsKG1fb3V0LnJlZjgpLCBtX291dC5jb25zdEludDMyKDIpLCBtX2NhbGxGcmFtZSwgYmFz
ZSkpOwogICAgICAgICAKLSAgICAgICAgU3RyaW5nSW1wbCogdWlkID0gbV9ncmFwaC5pZGVudGlm
aWVycygpW21fbm9kZS0+aWRlbnRpZmllck51bWJlcigpXTsKLSAgICAgICAgc2V0SlNWYWx1ZSh2
bUNhbGwobV9vdXQub3BlcmF0aW9uKG9wZXJhdGlvbkdldEJ5SWQpLCBtX2NhbGxGcmFtZSwgbV9v
dXQuaW50UHRyWmVybywgYmFzZSwgbV9vdXQuY29uc3RJbnRQdHIodWlkKSkpOworICAgICAgICBt
X2Z0bFN0YXRlLmdldEJ5SWRzLmFwcGVuZChHZXRCeUlkRGVzY3JpcHRvcihzdGFja21hcElELCBt
X25vZGUtPmNvZGVPcmlnaW4sIHVpZCkpOwogICAgIH0KICAgICAKICAgICB2b2lkIGNvbXBpbGVH
ZXRCdXR0ZXJmbHkoKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExTbG93UGF0
aENhbGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMU2xv
d1BhdGhDYWxsLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwv
RlRMU2xvd1BhdGhDYWxsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE2MSBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiRlRMU2xvd1BhdGhDYWxsLmgiCisKKyNpZiBFTkFCTEUoRlRMX0pJ
VCkKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBGVEwgeworCituYW1lc3BhY2UgeworCisv
LyBUaGlzIHdpbGwgYmUgYW4gUkFJSSB0aGluZ3kgdGhhdCB3aWxsIHNldCB1cCB0aGUgbmVjZXNz
YXJ5IHN0YWNrIHNpemVzIGFuZCBvZmZzZXRzIGFuZCBzdWNoLgorY2xhc3MgQ2FsbENvbnRleHQg
eworcHVibGljOgorICAgIENhbGxDb250ZXh0KAorICAgICAgICBTdGF0ZSYgc3RhdGUsIGNvbnN0
IFJlZ2lzdGVyU2V0JiB1c2VkUmVnaXN0ZXJzLCBDQ2FsbEhlbHBlcnMmIGppdCwKKyAgICAgICAg
dW5zaWduZWQgbnVtQXJncywgR1BSUmVnIHJldHVyblJlZ2lzdGVyKQorICAgICAgICA6IG1fc3Rh
dGUoc3RhdGUpCisgICAgICAgICwgbV91c2VkUmVnaXN0ZXJzKHVzZWRSZWdpc3RlcnMpCisgICAg
ICAgICwgbV9qaXQoaml0KQorICAgICAgICAsIG1fbnVtQXJncyhudW1BcmdzKQorICAgICAgICAs
IG1fcmV0dXJuUmVnaXN0ZXIocmV0dXJuUmVnaXN0ZXIpCisgICAgeworICAgICAgICAvLyBXZSBk
b24ndCBjYXJlIHRoYXQgeW91J3JlIHVzaW5nIGNhbGxlZS1zYXZlIG9yIHN0YWNrIHJlZ2lzdGVy
cy4KKyAgICAgICAgbV91c2VkUmVnaXN0ZXJzLmV4Y2x1ZGUoUmVnaXN0ZXJTZXQ6OnN0YWNrUmVn
aXN0ZXJzKCkpOworICAgICAgICBtX3VzZWRSZWdpc3RlcnMuZXhjbHVkZShSZWdpc3RlclNldDo6
Y2FsbGVlU2F2ZVJlZ2lzdGVycygpKTsKKyAgICAgICAgCisgICAgICAgIC8vIFRoZSByZXR1cm4g
cmVnaXN0ZXIgZG9lc24ndCBuZWVkIHRvIGJlIHNhdmVkLgorICAgICAgICBpZiAobV9yZXR1cm5S
ZWdpc3RlciAhPSBJbnZhbGlkR1BSUmVnKQorICAgICAgICAgICAgbV91c2VkUmVnaXN0ZXJzLmV4
Y2x1ZGUobV9yZXR1cm5SZWdpc3Rlcik7CisgICAgICAgIAorICAgICAgICAvLyBUaGlzIGNvZGUg
cmVsaWVzIG9uIHVzIGJlaW5nIDY0LWJpdC4gRlRMIGlzIGN1cnJlbnRseSBhbHdheXMgNjQtYml0
LgorICAgICAgICBzaXplX3Qgd29yZFNpemUgPSA4OworICAgICAgICAKKyAgICAgICAgc2l6ZV90
IHN0YWNrQnl0ZXNOZWVkZWRGb3JSZXR1cm5BZGRyZXNzID0gd29yZFNpemU7CisgICAgICAgIAor
ICAgICAgICBzaXplX3Qgb2Zmc2V0VG9TYXZpbmdBcmVhID0KKyAgICAgICAgICAgIChzdGQ6Om1h
eChtX251bUFyZ3MsIEdQUkluZm86Om51bWJlck9mQXJndW1lbnRSZWdpc3RlcikgLSBHUFJJbmZv
OjpudW1iZXJPZkFyZ3VtZW50UmVnaXN0ZXJzKSAqIHdvcmRTaXplOworICAgICAgICAKKyAgICAg
ICAgdW5zaWduZWQgbnVtQXJndW1lbnRSZWdpc3RlcnNUaGF0TmVlZFNhdmluZyA9IDA7CisgICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IHN0ZDo6bWluKEdQUkluZm86Om51bWJlck9mQXJndW1lbnRS
ZWdpc3RlcnMsIG51bUFyZ3MpOyBpLS07KSB7CisgICAgICAgICAgICBpZiAobV91c2VkUmVnaXN0
ZXJzLmdldChHUFJJbmZvOjp0b0FyZ3VtZW50UmVnaXN0ZXIoaSkpKQorICAgICAgICAgICAgICAg
IG51bUFyZ3VtZW50UmVnaXN0ZXJzVGhhdE5lZWRTYXZpbmcrKzsKKyAgICAgICAgfQorICAgICAg
ICAKKyAgICAgICAgc2l6ZV90IG9mZnNldFRvVGh1bmtTYXZpbmdBcmVhID0KKyAgICAgICAgICAg
IG9mZnNldFRvU2F2aW5nQXJlYSArCisgICAgICAgICAgICBudW1Bcmd1bWVudFJlZ2lzdGVyc1Ro
YXROZWVkU2F2aW5nICogd29yZFNpemU7CisgICAgICAgIAorICAgICAgICBtX3N0YWNrQnl0ZXNO
ZWVkZWQgPQorICAgICAgICAgICAgb2Zmc2V0VG9UaHVua1NhdmluZ0FyZWEgKworICAgICAgICAg
ICAgc3RhY2tCeXRlc05lZWRlZEZvclJldHVybkFkZHJlc3MgKworICAgICAgICAgICAgKG1fdXNl
ZFJlZ2lzdGVycy5udW1iZXJPZlNldFJlZ2lzdGVycygpIC0gbnVtQXJndW1lbnRSZWdpc3RlcnNU
aGF0TmVlZFNhdmluZykgKiB3b3JkU2l6ZTsKKyAgICAgICAgCisgICAgICAgIHNpemVfdCBzdGFj
a0FsaWdubWVudCA9IDE2OworICAgICAgICAKKyAgICAgICAgbV9zdGFja0J5dGVzTmVlZGVkID0g
KG1fc3RhY2tCeXRlc05lZWRlZCArIHN0YWNrQWxpZ25tZW50IC0gMSkgJiB+c3RhY2tBbGlnbm1l
bnQ7CisgICAgICAgIAorICAgICAgICBtX2ppdC5zdWJQdHIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVk
SW1tMzIobV9zdGFja0J5dGVzTmVlZGVkKSwgQ0NhbGxIZWxwZXJzOjpzdGFja1BvaW50ZXJSZWdp
c3Rlcik7CisgICAgICAgIAorICAgICAgICBtX3RodW5rU2F2ZVNldCA9IG1fdXNlZFJlZ2lzdGVy
czsKKyAgICAgICAgCisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IHN0ZDo6bWluKEdQUkluZm86
Om51bWJlck9mQXJndW1lbnRSZWdpc3RlcnMsIG51bUFyZ3MpOyBpLS07KSB7CisgICAgICAgICAg
ICBpZiAoIW1fdXNlZFJlZ2lzdGVycy5nZXQoR1BSSW5mbzo6dG9Bcmd1bWVudFJlZ2lzdGVyKGkp
KSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIEdQUlJlZyByZWcgPSBH
UFJJbmZvOjp0b0FyZ3VtZW50UmVnaXN0ZXIoaSk7CisgICAgICAgICAgICBtX2ppdC5zdG9yZVB0
cihyZWcsIENDYWxsSGVscGVyczo6QWRkcmVzcyhDQ2FsbEhlbHBlcnM6OnN0YWNrUG9pbnRlclJl
Z2lzdGVyLCBvZmZzZXRUb1NhdmluZ0FyZWEgKyBpICogd29yZFNpemUpKTsKKyAgICAgICAgICAg
IG1fdGh1bmtTYXZlU2V0LmNsZWFyKHJlZyk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAg
IG1fb2Zmc2V0ID0gb2Zmc2V0VG9UaHVua1NhdmluZ0FyZWE7CisgICAgfQorICAgIAorICAgIH5D
YWxsQ29udGV4dCgpCisgICAgeworICAgICAgICBtX2ppdC5tb3ZlKEdQUkluZm86OnJldHVyblZh
bHVlR1BSLCBtX3JldHVyblJlZ2lzdGVyKTsKKyAgICAgICAgCisgICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IHN0ZDo6bWluKEdQUkluZm86Om51bWJlck9mQXJndW1lbnRSZWdpc3RlcnMsIG1fbnVt
QXJncyk7IGktLTspIHsKKyAgICAgICAgICAgIGlmICghbV91c2VkUmVnaXN0ZXJzLmdldChHUFJJ
bmZvOjp0b0FyZ3VtZW50UmVnaXN0ZXIoaSkpKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOwor
ICAgICAgICAgICAgR1BSUmVnIHJlZyA9IEdQUkluZm86OnRvQXJndW1lbnRSZWdpc3RlcihpKTsK
KyAgICAgICAgICAgIG1faml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKENDYWxsSGVs
cGVyczo6c3RhY2tQb2ludGVyUmVnaXN0ZXIsIG9mZnNldFRvU2F2aW5nQXJlYSArIGkgKiB3b3Jk
U2l6ZSksIHJlZyk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIG1faml0LmFkZFB0cihD
Q2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihtX3N0YWNrQnl0ZXNOZWVkZWQpLCBDQ2FsbEhlbHBl
cnM6OnN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKKyAgICB9CisgICAgCisgICAgUmVnaXN0ZXJTZXQg
dXNlZFJlZ2lzdGVycygpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV90aHVua1NhdmVT
ZXQ7CisgICAgfQorICAgIAorICAgIHB0cmRpZmZfdCBvZmZzZXQoKSBjb25zdAorICAgIHsKKyAg
ICAgICAgcmV0dXJuIG1fb2Zmc2V0OworICAgIH0KKyAgICAKKyAgICBTbG93UGF0aENhbGxLZXkg
a2V5V2l0aFRhcmdldCh2b2lkKiBjYWxsVGFyZ2V0KSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0
dXJuIFNsb3dQYXRoQ2FsbEtleSh1c2VkUmVnaXN0ZXJzKCksIGNhbGxUYXJnZXQsIG9mZnNldCgp
KTsKKyAgICB9CisgICAgCisgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgbWFrZUNhbGwodm9pZCog
Y2FsbFRhcmdldCkgY29uc3QKKyAgICB7CisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIHJl
c3VsdCA9IG1faml0LmNhbGwoKTsKKyAgICAgICAgc3RhdGUuZmluYWxpemVyLT5zbG93UGF0aENh
bGxzLmFwcGVuZChTbG93UGF0aENhbGwoCisgICAgICAgICAgICByZXN1bHQsIGtleVdpdGhUYXJn
ZXQoY2FsbFRhcmdldCkpKTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAgCitw
cml2YXRlOgorICAgIFN0YXRlJiBtX3N0YXRlOworICAgIFJlZ2lzdGVyU2V0IG1fdXNlZFJlZ2lz
dGVyczsKKyAgICBDQ2FsbEhlbHBlcnMgbV9qaXQ7CisgICAgdW5zaWduZWQgbV9udW1BcmdzOwor
ICAgIHNpemVfdCBtX3N0YWNrQnl0ZXNOZWVkZWQ7CisgICAgR1BSUmVnIG1fcmV0dXJuUmVnaXN0
ZXI7CisgICAgUmVnaXN0ZXJTZXQgbV9vZmZzZXQ7Cit9OworCit9IC8vIGFub255bW91cyBuYW1l
c3BhY2UKKworTWFjcm9Bc3NlbWJsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbigKKyAgICBTdGF0ZSYg
c3RhdGUsIGNvbnN0IFJlZ2lzdGVyU2V0JiB1c2VkUmVnaXN0ZXJzLCBDQ2FsbEhlbHBlcnMmIGpp
dCwgCisgICAgSl9KSVRPcGVyYXRpb25fRVNzaUpJIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwg
R1BSUmVnIGNhbGxGcmFtZVJlZ2lzdGVyLAorICAgIFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5m
bywgR1BSUmVnIG9iamVjdCwgU3RyaW5nSW1wbCogdWlkKQoreworICAgIENhbGxDb250ZXh0IGNv
bnRleHQoc3RhdGUsIHVzZWRSZWdpc3RlcnMsIGppdCwgNCwgcmVzdWx0KTsKKyAgICBqaXQuc2V0
dXBBcmd1bWVudHMoY2FsbEZyYW1lUmVnaXN0ZXIsIFRydXN0ZWRJbW1QdHIoc3R1YkluZm8pLCBv
YmplY3QsIFRydXN0ZWRJbW1QdHIodWlkKSk7CisgICAgcmV0dXJuIGNvbnRleHQubWFrZUNhbGwo
b3BlcmF0aW9uKTsKKyAgICAvLyBGSVhNRTogRlRMIHNob3VsZCBzdXBwb3J0IGV4Y2VwdGlvbnMu
CisgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExMzYyMgor
fQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6RlRMCisKKyNlbmRpZiAvLyBFTkFCTEUoRlRMX0pJ
VCkKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExTbG93UGF0aENhbGwuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFNsb3dQYXRoQ2FsbC5o
CShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExTbG93UGF0aENh
bGwuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDY4IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgRlRMU2xvd1BhdGhDYWxsX2gKKyNk
ZWZpbmUgRlRMU2xvd1BhdGhDYWxsX2gKKworI2lmIEVOQUJMRShGVExfSklUKQorCisjaW5jbHVk
ZSAiRlRMU2xvd1BhdGhDYWxsS2V5LmgiCisjaW5jbHVkZSAiSklUT3BlcmF0aW9ucy5oIgorI2lu
Y2x1ZGUgIk1hY3JvQXNzZW1ibGVyLmgiCisjaW5jbHVkZSAiU3RydWN0dXJlU3R1YkluZm8uaCIK
KworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBGVEwgeworCitjbGFzcyBTdGF0ZTsKKworY2xh
c3MgU2xvd1BhdGhDYWxsIHsKK3B1YmxpYzoKKyAgICBTbG93UGF0aENhbGwoKSB7IH0KKyAgICAK
KyAgICBTbG93UGF0aENhbGwoTWFjcm9Bc3NlbWJsZXI6OkNhbGwgY2FsbCwgY29uc3QgU2xvd1Bh
dGhDYWxsS2V5JiBrZXkpCisgICAgICAgIDogbV9jYWxsKGNhbGwpCisgICAgICAgICwgbV9rZXko
a2V5KQorICAgIHsKKyAgICB9CisgICAgCisgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgY2FsbCgp
IGNvbnN0IHsgcmV0dXJuIG1fY2FsbDsgfQorICAgIFNsb3dQYXRoQ2FsbEtleSBrZXkoKSBjb25z
dCB7IHJldHVybiBtX2tleTsgfQorICAgIAorcHJpdmF0ZToKKyAgICBNYWNyb0Fzc2VtYmxlcjo6
Q2FsbCBtX2NhbGw7CisgICAgU2xvd1BhdGhDYWxsS2V5IG1fa2V5OworfTsKKworTWFjcm9Bc3Nl
bWJsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbigKKyAgICBTdGF0ZSYsIGNvbnN0IFJlZ2lzdGVyU2V0
JiwgQ0NhbGxIZWxwZXJzJiwgSl9KSVRPcGVyYXRpb25fRVNzaUpJLAorICAgIEdQUlJlZyByZXN1
bHQsIEdQUlJlZyBjYWxsRnJhbWVSZWdpc3RlciwgU3RydWN0dXJlU3R1YkluZm8qLCBHUFJSZWcg
b2JqZWN0LAorICAgIFN0cmluZ0ltcGwqIHVpZCk7CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpG
VEwKKworI2VuZGlmIC8vIEVOQUJMRShGVExfSklUKQorCisjZW5kaWYgLy8gRlRMU2xvd1BhdGhD
YWxsX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExTbG93UGF0aENhbGxL
ZXkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMU2xvd1Bh
dGhDYWxsS2V5LmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwv
RlRMU2xvd1BhdGhDYWxsS2V5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQxIEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpbmNsdWRlICJGVExTbG93UGF0aENhbGxLZXkuaCIKKworI2lmIEVOQUJMRShG
VExfSklUKQorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEZUTCB7CisKK3ZvaWQgU2xvd1Bh
dGhDYWxsS2V5OjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50
KCI8dXNlZFJlZ2lzdGVycyA9ICIsIG1fdXNlZFJlZ2lzdGVycywgIiwgb2Zmc2V0ID0gIiArIG1f
b2Zmc2V0LCAiLCBjYWxsVGFyZ2V0ID0gIiwgUmF3UG9pbnRlcihtX2NhbGxUYXJnZXQpLCAiPiIp
OworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6RlRMCisKKyNlbmRpZiAvLyBFTkFCTEUoRlRM
X0pJVCkKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExTbG93UGF0aENhbGxL
ZXkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFNsb3dQYXRo
Q2FsbEtleS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExT
bG93UGF0aENhbGxLZXkuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEyNiBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEZUTFNsb3dQ
YXRoQ2FsbEtleV9oCisjZGVmaW5lIEZUTFNsb3dQYXRoQ2FsbEtleV9oCisKKyNpZiBFTkFCTEUo
RlRMX0pJVCkKKworI2luY2x1ZGUgIlJlZ2lzdGVyU2V0LmgiCisKK25hbWVzcGFjZSBKU0MgeyBu
YW1lc3BhY2UgRlRMIHsKKworLy8gVGhpcyBpcyB1c2VkIGZvciBjcmVhdGluZyBzb21lIHNhbml0
eSBpbiBzbG93LXBhdGggY2FsbHMgb3V0IG9mIHRoZSBGVEwncyBpbmxpbmUKKy8vIGNhY2hlcy4g
VGhlIGlkZWEgaXMgdGhhdCB3ZSBkb24ndCB3YW50IGFsbCBvZiB0aGUgcmVnaXN0ZXIgc2F2ZS9y
ZXN0b3JlIHN0dWZmIHRvCisvLyBiZSBnZW5lcmF0ZWQgYXQgZWFjaCBJQyBzaXRlLiBJbnN0ZWFk
LCB0aGUgSUMgc2xvdyBwYXRoIGNhbGwgc2l0ZSB3aWxsIGp1c3Qgc2F2ZQorLy8gdGhlIHJlZ2lz
dGVycyBuZWVkZWQgZm9yIHRoZSBhcmd1bWVudHMuIEl0IHdpbGwgYXJyYW5nZSBmb3IgdGhlcmUg
dG8gYmUgZW5vdWdoCisvLyBzcGFjZSBvbiB0b3Agb2Ygc3RhY2sgdG8gc2F2ZSB0aGUgcmVtYWlu
aW5nIHJlZ2lzdGVycyBhbmQgdGhlIHJldHVybiBQQy4gVGhlbiBpdAorLy8gd2lsbCBjYWxsIGEg
c2hhcmVkIHRodW5rIHRoYXQgd2lsbCBzYXZlIHRoZSByZW1haW5pbmcgcmVnaXN0ZXJzLiBUaGF0
IHRodW5rIG5lZWRzCisvLyB0byBrbm93IHRoZSBzdGFjayBvZmZzZXQgYXQgd2hpY2ggdGhpbmdz
IGdldCBzYXZlZCBhbG9uZyB3aXRoIHRoZSBjYWxsIHRhcmdldC4KKworLy8gTm90ZSB0aGF0IHRo
ZSBvZmZzZXQgaXMgKm5vdCBpbmNsdWRpbmcqIHRoZSByZXR1cm4gUEMgdGhhdCB3b3VsZCBiZSBw
dXNoZWQgb24gWDg2LgorCitjbGFzcyBTbG93UGF0aENhbGxLZXkgeworcHVibGljOgorICAgIFNs
b3dQYXRoQ2FsbEtleSgpCisgICAgICAgIDogbV9jYWxsVGFyZ2V0KDApCisgICAgICAgICwgbV9v
ZmZzZXQoMCkKKyAgICB7CisgICAgfQorICAgIAorICAgIFNsb3dQYXRoQ2FsbEtleShjb25zdCBS
ZWdpc3RlclNldCYgc2V0LCB2b2lkKiBjYWxsVGFyZ2V0LCBwdHJkaWZmX3Qgb2Zmc2V0KQorICAg
ICAgICA6IG1fdXNlZFJlZ2lzdGVycyhzZXQpCisgICAgICAgICwgbV9jYWxsVGFyZ2V0KGNhbGxU
YXJnZXQpCisgICAgICAgICwgbV9vZmZzZXQob2Zmc2V0KQorICAgIHsKKyAgICB9CisgICAgCisg
ICAgY29uc3QgUmVnaXN0ZXJTZXQmIHVzZWRSZWdpc3RlcnMoKSBjb25zdCB7IHJldHVybiBtX3Vz
ZWRSZWdpc3RlcnM7IH0KKyAgICB2b2lkKiBjYWxsVGFyZ2V0KCkgY29uc3QgeyByZXR1cm4gbV9j
YWxsVGFyZ2V0OyB9CisgICAgcHRyZGlmZl90IG9mZnNldCgpIGNvbnN0IHsgcmV0dXJuIG1fb2Zm
c2V0OyB9CisgICAgCisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CisgICAgCisg
ICAgZW51bSBFbXB0eVZhbHVlVGFnIHsgRW1wdHlWYWx1ZSB9OworICAgIGVudW0gRGVsZXRlZFZh
bHVlVGFnIHsgRGVsZXRlZFZhbHVlIH07CisgICAgCisgICAgU2xvd1BhdGhDYWxsS2V5KEVtcHR5
VmFsdWVUYWcpCisgICAgICAgIDogbV91c2VkUmVnaXN0ZXJzKFJlZ2lzdGVyU2V0OjpFbXB0eVZh
bHVlKQorICAgICAgICAsIG1fY2FsbFRhcmdldCgwKQorICAgICAgICAsIG1fb2Zmc2V0KDApCisg
ICAgeworICAgIH0KKyAgICAKKyAgICBTbG93UGF0aENhbGxLZXkoRGVsZXRlZFZhbHVlVGFnKQor
ICAgICAgICA6IG1fdXNlZFJlZ2lzdGVycyhCaXRWZWN0b3I6OkRlbGV0ZWRWYWx1ZSkKKyAgICAg
ICAgLCBtX2NhbGxUYXJnZXQoMCkKKyAgICAgICAgLCBtX29mZnNldCgwKQorICAgIHsKKyAgICB9
CisgICAgCisgICAgYm9vbCBpc0VtcHR5VmFsdWUoKSBjb25zdCB7IHJldHVybiBtX3VzZWRSZWdp
c3RlcnMuaXNFbXB0eVZhbHVlKCk7IH0KKyAgICBib29sIGlzRGVsZXRlZFZhbHVlKCkgY29uc3Qg
eyByZXR1cm4gbV91c2VkUmVnaXN0ZXJzLmlzRGVsZXRlZFZhbHVlKCk7IH0KKyAgICAKKyAgICBi
b29sIG9wZXJhdG9yPT0oY29uc3QgU2xvd1BhdGhDYWxsS2V5JiBvdGhlcikKKyAgICB7CisgICAg
ICAgIHJldHVybiBtX3VzZWRSZWdpc3RlcnMgPT0gb3RoZXIubV91c2VkUmVnaXN0ZXJzCisgICAg
ICAgICAgICAmJiBtX2NhbGxUYXJnZXQgPT0gb3RoZXIubV9jYWxsVGFyZ2V0CisgICAgICAgICAg
ICAmJiBtX29mZnNldCA9PSBvdGhlci5tX29mZnNldDsKKyAgICB9CisgICAgdW5zaWduZWQgaGFz
aCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV91c2VkUmVnaXN0ZXJzLmhhc2goKSAr
IFB0ckhhc2g8dm9pZCo+OjpoYXNoKG1fY2FsbFRhcmdldCkgKyBtX29mZnNldDsKKyAgICB9CisK
K3ByaXZhdGU6CisgICAgUmVnaXN0ZXJTZXQgbV91c2VkUmVnaXN0ZXJzOworICAgIHZvaWQqIG1f
Y2FsbFRhcmdldDsKKyAgICBwdHJkaWZmX3QgbV9vZmZzZXQ7Cit9OworCitzdHJ1Y3QgU2xvd1Bh
dGhDYWxsS2V5SGFzaCB7CisgICAgc3RhdGljIHVuc2lnbmVkIGhhc2goY29uc3QgU2xvd1BhdGhD
YWxsS2V5JiBrZXkpIHsgcmV0dXJuIGtleS5oYXNoKCk7IH0KKyAgICBzdGF0aWMgYm9vbCBlcXVh
bChjb25zdCBTbG93UGF0aENhbGxLZXkmIGEsIGNvbnN0IFNsb3dQYXRoQ2FsbEtleSYgYikgeyBy
ZXR1cm4gYSA9PSBiOyB9CisgICAgc3RhdGljIGNvbnN0IGJvb2wgc2FmZVRvQ29tcGFyZVRvRW1w
dHlPckRlbGV0ZWQgPSBmYWxzZTsKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpGVEwKKwor
bmFtZXNwYWNlIFdURiB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBEZWZhdWx0SGFz
aDsKK3RlbXBsYXRlPD4gc3RydWN0IERlZmF1bHRIYXNoPEpTQzo6RlRMOjpTbG93UGF0aENhbGxL
ZXk+IHsKKyAgICB0eXBlZGVmIEpTQzo6RlRMOjpTbG93UGF0aENhbGxLZXlIYXNoIEhhc2g7Cit9
OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgSGFzaFRyYWl0czsKK3RlbXBsYXRlPD4g
c3RydWN0IEhhc2hUcmFpdHM8SlNDOjpGVEw6OlNsb3dQYXRoQ2FsbEtleT4gOiBwdWJsaWMgQ3Vz
dG9tSGFzaFRyYWl0czxKU0M6OkZUTDo6U2xvd1BhdGhDYWxsS2V5PiB7IH07CisKK30gLy8gbmFt
ZXNwYWNlIFdURgorCisjZW5kaWYgLy8gRU5BQkxFKEZUTF9KSVQpCisKKyNlbmRpZiAvLyBGVExT
bG93UGF0aENhbGxLZXlfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFN0
YWNrTWFwcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExT
dGFja01hcHMuY3BwCShyZXZpc2lvbiAxNTc3MDcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZnRsL0ZUTFN0YWNrTWFwcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTczLDYgKzczLDExIEBAIHZv
aWQgU3RhY2tNYXBzOjpMb2NhdGlvbjo6ZHVtcChQcmludFN0cmUKICAgICBvdXQucHJpbnQoIigi
LCBraW5kLCAiLCByZWciLCBkd2FyZlJlZ051bSwgIiwgIiwgb2Zmc2V0LCAiKSIpOwogfQogCitH
UFJSZWcgU3RhY2tNYXBzOjpMb2NhdGlvbjo6ZGlyZWN0R1BSKFN0YWNrTWFwcyYgc3RhY2ttYXBz
KSBjb25zdAoreworICAgIHJldHVybiBGVEw6OkxvY2F0aW9uOjpmb3JTdGFja21hcHMoc3RhY2tt
YXBzLCAqdGhpcykuZGlyZWN0R1BSKCk7Cit9CisKIHZvaWQgU3RhY2tNYXBzOjpMb2NhdGlvbjo6
cmVzdG9yZUludG8oCiAgICAgTWFjcm9Bc3NlbWJsZXImIGppdCwgU3RhY2tNYXBzJiBzdGFja21h
cHMsIGNoYXIqIHNhdmVkUmVnaXN0ZXJzLCBHUFJSZWcgcmVzdWx0KSBjb25zdAogewpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExTdGFja01hcHMuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFN0YWNrTWFwcy5oCShyZXZpc2lvbiAxNTc3MDcp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFN0YWNrTWFwcy5oCSh3b3JraW5nIGNv
cHkpCkBAIC02NCw2ICs2NCw3IEBAIHN0cnVjdCBTdGFja01hcHMgewogICAgICAgICB2b2lkIHBh
cnNlKERhdGFWaWV3KiwgdW5zaWduZWQmIG9mZnNldCk7CiAgICAgICAgIHZvaWQgZHVtcChQcmlu
dFN0cmVhbSYgb3V0KSBjb25zdDsKICAgICAgICAgCisgICAgICAgIEdQUlJlZyBkaXJlY3RHUFIo
U3RhY2tNYXBzJikgY29uc3Q7CiAgICAgICAgIHZvaWQgcmVzdG9yZUludG8oTWFjcm9Bc3NlbWJs
ZXImLCBTdGFja01hcHMmLCBjaGFyKiBzYXZlZFJlZ2lzdGVycywgR1BSUmVnIHJlc3VsdCkgY29u
c3Q7CiAgICAgfTsKICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMU3Rh
dGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFN0YXRlLmgJ
KHJldmlzaW9uIDE1NzcwNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMU3RhdGUu
aAkod29ya2luZyBjb3B5KQpAQCAtNTYsNiArNTYsNyBAQCBwdWJsaWM6CiAgICAgUmVmUHRyPEpJ
VENvZGU+IGppdENvZGU7CiAgICAgR2VuZXJhdGVkRnVuY3Rpb24gZ2VuZXJhdGVkRnVuY3Rpb247
CiAgICAgSklURmluYWxpemVyKiBmaW5hbGl6ZXI7CisgICAgU2VnbWVudGVkVmVjdG9yPEdldEJ5
SWREZXNjcmlwdG9yPiBnZXRCeUlkczsKICAgICBWZWN0b3I8Q1N0cmluZz4gY29kZVNlY3Rpb25O
YW1lczsKICAgICBWZWN0b3I8Q1N0cmluZz4gZGF0YVNlY3Rpb25OYW1lczsKICAgICBSZWZDb3Vu
dGVkQXJyYXk8TFNlY3Rpb25Xb3JkPiBzdGFja21hcHNTZWN0aW9uOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Z0bC9GVExUaHVua3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9mdGwvRlRMVGh1bmtzLmNwcAkocmV2aXNpb24gMTU3NzA3KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2Z0bC9GVExUaHVua3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDQs
NiArMTQ0LDY3IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBvc3JFeGl0R2VuZXJhdGlvblcKICAg
ICByZXR1cm4gRklOQUxJWkVfQ09ERShwYXRjaEJ1ZmZlciwgKCJGVEwgT1NSIGV4aXQgZ2VuZXJh
dGlvbiB0aHVuayBmb3IgY2FsbEZyYW1lIGF0ICVzIiwgdG9DU3RyaW5nKGxvY2F0aW9uKS5kYXRh
KCkpKTsKIH0KIAorTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHNsb3dQYXRoQ2FsbFRodW5rR2VuZXJh
dG9yKFZNJiwgY29uc3QgU2xvd1BhdGhDYWxsS2V5JiBrZXkpCit7CisgICAgQXNzZW1ibHlIZWxw
ZXJzIGppdCgmdm0sIDApOworICAgIAorICAgIC8vIFdlIHdhbnQgdG8gc2F2ZSB0aGUgZ2l2ZW4g
cmVnaXN0ZXJzIGF0IHRoZSBnaXZlbiBvZmZzZXQsIHRoZW4gd2Ugd2FudCB0byBzYXZlIHRoZQor
ICAgIC8vIG9sZCByZXR1cm4gYWRkcmVzcyBzb21ld2hlcmUgcGFzdCB0aGF0IG9mZnNldCwgYW5k
IHRoZW4gZmluYWxseSB3ZSB3YW50IHRvIG1ha2UgdGhlCisgICAgLy8gY2FsbC4KKyAgICAKKyAg
ICBzaXplX3QgY3VycmVudE9mZnNldCA9IGtleS5vZmZzZXQoKSArIHNpemVvZih2b2lkKik7Cisg
ICAgCisjaWYgQ1BVKFg4NikgfHwgQ1BVKFg4Nl82NCkKKyAgICBjdXJyZW50T2Zmc2V0ICs9IHNp
emVvZih2b2lkKik7CisjZW5kaWYKKyAgICAKKyAgICBmb3IgKE1hY3JvQXNzZW1ibGVyOjpSZWdp
c3RlcklEIHJlZyA9IE1hY3JvQXNzZW1ibGVyOjpmaXJzdFJlZ2lzdGVyKCk7IHJlZyA8PSBNYWNy
b0Fzc2VtYmxlcjo6bGFzdFJlZ2lzdGVyKCk7IHJlZyA9IHN0YXRpY19jYXN0PE1hY3JvQXNzZW1i
bGVyOjpSZWdpc3RlcklEPihyZWcgKyAxKSkgeworICAgICAgICBpZiAoIWtleS51c2VkUmVnaXN0
ZXJzKCkuZ2V0KHJlZykpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgaml0LnN0b3Jl
UHRyKHJlZywgQXNzZW1ibHlIZWxwZXJzOjpBZGRyZXNzKE1hY3JvQXNzZW1ibGVyOjpzdGFja1Bv
aW50ZXJSZWdpc3RlciwgY3VycmVudE9mZnNldCkpOworICAgICAgICBjdXJyZW50T2Zmc2V0ICs9
IHNpemVvZih2b2lkKik7CisgICAgfQorICAgIAorICAgIGZvciAoTWFjcm9Bc3NlbWJsZXI6OkZQ
UmVnaXN0ZXJJRCByZWcgPSBNYWNyb0Fzc2VtYmxlcjo6Zmlyc3RGUFJlZ2lzdGVyKCk7IHJlZyA8
PSBNYWNyb0Fzc2VtYmxlcjo6bGFzdEZQUmVnaXN0ZXIoKTsgcmVnID0gc3RhdGljX2Nhc3Q8TWFj
cm9Bc3NlbWJsZXI6OkZQUmVnaXN0ZXJJRD4ocmVnICsgMSkpIHsKKyAgICAgICAgaWYgKCFrZXku
dXNlZFJlZ2lzdGVycygpLmdldChyZWcpKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAg
IGppdC5zdG9yZURvdWJsZShyZWcsIEFzc2VtYmx5SGVscGVyczo6QWRkcmVzcyhNYWNyb0Fzc2Vt
Ymxlcjo6c3RhY2tQb2ludGVyUmVnaXN0ZXIsIGN1cnJlbnRPZmZzZXQpKTsKKyAgICAgICAgY3Vy
cmVudE9mZnNldCArPSBzaXplb2YoZG91YmxlKTsKKyAgICB9CisgICAgCisgICAgaml0LnByZXNl
cnZlUmV0dXJuQWRkcmVzc0FmdGVyQ2FsbChHUFJJbmZvOjpub25BcmdHUFIwKTsKKyAgICBqaXQu
c3RvcmVQdHIoR1BSSW5mbzo6bm9uQXJnR1BSMCwgQXNzZW1ibHlIZWxwZXJzOjpBZGRyZXNzKE1h
Y3JvQXNzZW1ibGVyOjpzdGFja1BvaW50ZXJSZWdpc3Rlciwga2V5Lm9mZnNldCgpKSk7CisgICAg
CisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbCA9IGppdC5jYWxsKCk7CisgICAgCisgICAgaml0
LmxvYWRQdHIoQXNzZW1ibHlIZWxwZXJzOjpBZGRyZXNzKE1hY3JvQXNzZW1ibGVyOjpzdGFja1Bv
aW50ZXJSZWdpc3Rlciwga2V5Lm9mZnNldCgpKSwgR1BSSW5mbzo6bm9uUHJlc2VydmVkTm9uUmV0
dXJuR1BSKTsKKyAgICBqaXQucmVzdG9yZVJldHVybkFkZHJlc3NCZWZvcmVSZXR1cm4oR1BSSW5m
bzo6bm9uUHJlc2VydmVkTm9uUmV0dXJuR1BSKTsKKyAgICAKKyAgICBmb3IgKE1hY3JvQXNzZW1i
bGVyOjpGUFJlZ2lzdGVySUQgcmVnID0gTWFjcm9Bc3NlbWJsZXI6Omxhc3RGUFJlZ2lzdGVyKCk7
IDsgcmVnID0gc3RhdGljX2Nhc3Q8TWFjcm9Bc3NlbWJsZXI6OkZQUmVnaXN0ZXJJRD4ocmVnIC0g
MSkpIHsKKyAgICAgICAgaWYgKCFrZXkudXNlZFJlZ2lzdGVycygpLmdldChyZWcpKQorICAgICAg
ICAgICAgY29udGludWU7CisgICAgICAgIGN1cnJlbnRPZmZzZXQgLT0gc2l6ZW9mKGRvdWJsZSk7
CisgICAgICAgIGppdC5sb2FkRG91YmxlKEFzc2VtYmx5SGVscGVyczo6QWRkcmVzcyhNYWNyb0Fz
c2VtYmxlcjo6c3RhY2tQb2ludGVyUmVnaXN0ZXIsIGN1cnJlbnRPZmZzZXQpLCByZWcpOworICAg
ICAgICBpZiAocmVnID09IE1hY3JvQXNzZW1ibGVyOjpmaXJzdEZQUmVnaXN0ZXIoKSkKKyAgICAg
ICAgICAgIGJyZWFrOworICAgIH0KKyAgICAKKyAgICBmb3IgKE1hY3JvQXNzZW1ibGVyOjpSZWdp
c3RlcklEIHJlZyA9IE1hY3JvQXNzZW1ibGVyOjpsYXN0UmVnaXN0ZXIoKTsgOyByZWcgPSBzdGF0
aWNfY2FzdDxNYWNyb0Fzc2VtYmxlcjo6UmVnaXN0ZXJJRD4ocmVnIC0gMSkpIHsKKyAgICAgICAg
aWYgKCFrZXkudXNlZFJlZ2lzdGVycygpLmdldChyZWcpKQorICAgICAgICAgICAgY29udGludWU7
CisgICAgICAgIGN1cnJlbnRPZmZzZXQgLT0gc2l6ZW9mKHZvaWQqKTsKKyAgICAgICAgaml0Lmxv
YWRQdHIoQXNzZW1ibHlIZWxwZXJzOjpBZGRyZXNzKE1hY3JvQXNzZW1ibGVyOjpzdGFja1BvaW50
ZXJSZWdpc3RlciwgY3VycmVudE9mZnNldCksIHJlZyk7CisgICAgICAgIGlmIChyZWcgPT0gTWFj
cm9Bc3NlbWJsZXI6OmZpcnN0UmVnaXN0ZXIoKSkKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0K
KyAgICAKKyAgICBqaXQucmV0KCk7CisKKyAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKHZtLCAm
aml0LCBHTE9CQUxfVEhVTktfSUQpOworICAgIHBhdGNoQnVmZmVyLmxpbmsoY2FsbCwga2V5LmNh
bGxUYXJnZXQoKSk7CisgICAgcmV0dXJuIEZJTkFMSVpFX0NPREUocGF0Y2hCdWZmZXIsICgiRlRM
IHNsb3cgcGF0aCBjYWxsIHRodW5rIGZvciAlcyIsIHRvQ1N0cmluZyhrZXkpLmRhdGEoKSkpOwor
fQorCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6RlRMCiAKICNlbmRpZiAvLyBFTkFCTEUoRlRMX0pJ
VCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMVGh1bmtzLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExUaHVua3MuaAkocmV2aXNpb24gMTU3
NzA3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExUaHVua3MuaAkod29ya2luZyBj
b3B5KQpAQCAtMzEsNiArMzEsNyBAQAogI2lmIEVOQUJMRShGVExfSklUKQogCiAjaW5jbHVkZSAi
RlRMTG9jYXRpb24uaCIKKyNpbmNsdWRlICJGVExTbG93UGF0aENhbGxLZXkuaCIKICNpbmNsdWRl
ICJNYWNyb0Fzc2VtYmxlckNvZGVSZWYuaCIKICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgogCkBA
IC00Myw2ICs0NCw3IEBAIG5hbWVzcGFjZSBGVEwgewogTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIG9z
ckV4aXRHZW5lcmF0aW9uV2l0aG91dFN0YWNrTWFwVGh1bmtHZW5lcmF0b3IoVk0qKTsKIAogTWFj
cm9Bc3NlbWJsZXJDb2RlUmVmIG9zckV4aXRHZW5lcmF0aW9uV2l0aFN0YWNrTWFwVGh1bmtHZW5l
cmF0b3IoVk0mLCBjb25zdCBMb2NhdGlvbiYpOworTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHNsb3dQ
YXRoQ2FsbFRodW5rR2VuZXJhdG9yKFZNJiwgY29uc3QgU2xvd1BhdGhDYWxsS2V5Jik7CiAKIHRl
bXBsYXRlPHR5cGVuYW1lIE1hcFR5cGUsIHR5cGVuYW1lIEtleVR5cGUsIHR5cGVuYW1lIEdlbmVy
YXRvclR5cGU+CiBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgZ2VuZXJhdGVJZk5lY2Vzc2FyeSgKQEAg
LTY1LDggKzY3LDE1IEBAIHB1YmxpYzoKICAgICAgICAgICAgIHZtLCBtX29zckV4aXRUaHVua3Ms
IGxvY2F0aW9uLCBvc3JFeGl0R2VuZXJhdGlvbldpdGhTdGFja01hcFRodW5rR2VuZXJhdG9yKTsK
ICAgICB9CiAgICAgCisgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGdldFNsb3dQYXRoQ2FsbFRo
dW5rKFZNJiB2bSwgY29uc3QgU2xvd1BhdGhDYWxsS2V5JiBrZXkpCisgICAgeworICAgICAgICBy
ZXR1cm4gZ2VuZXJhdGVJZk5lY2Vzc2FyeSgKKyAgICAgICAgICAgIHZtLCBtX3Nsb3dQYXRoQ2Fs
bFRodW5rcywga2V5LCBzbG93UGF0aENhbGxUaHVua0dlbmVyYXRvcik7CisgICAgfQorICAgIAog
cHJpdmF0ZToKICAgICBIYXNoTWFwPExvY2F0aW9uLCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY+IG1f
b3NyRXhpdFRodW5rczsKKyAgICBIYXNoTWFwPFNsb3dQYXRoQ2FsbEtleSwgTWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmPiBtX3Nsb3dQYXRoQ2FsbFRodW5rczsKIH07CiAKIH0gfSAvLyBuYW1lc3BhY2Ug
SlNDOjpGVEwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lQ2FjaGVH
ZW5lcmF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
SW5saW5lQ2FjaGVHZW5lcmF0b3IuY3BwCShyZXZpc2lvbiAxNTc3MDcpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVElubGluZUNhY2hlR2VuZXJhdG9yLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMzQsMTAgKzM0LDE2IEBACiAKIG5hbWVzcGFjZSBKU0MgewogCitzdGF0aWMgU3RydWN0
dXJlU3R1YkluZm8qIGdhcmJhZ2VTdHViSW5mbygpCit7CisgICAgc3RhdGljIFN0cnVjdHVyZVN0
dWJJbmZvIHN0dWJJbmZvOworICAgIHJldHVybiAmc3R1YkluZm87Cit9CisKIEpJVElubGluZUNh
Y2hlR2VuZXJhdG9yOjpKSVRJbmxpbmVDYWNoZUdlbmVyYXRvcihDb2RlQmxvY2sqIGNvZGVCbG9j
aywgQ29kZU9yaWdpbiBjb2RlT3JpZ2luKQogICAgIDogbV9jb2RlQmxvY2soY29kZUJsb2NrKQog
ewotICAgIG1fc3R1YkluZm8gPSBtX2NvZGVCbG9jay0+YWRkU3R1YkluZm8oKTsKKyAgICBtX3N0
dWJJbmZvID0gbV9jb2RlQmxvY2sgPyBtX2NvZGVCbG9jay0+YWRkU3R1YkluZm8oKSA6IGdhcmJh
Z2VTdHViSW5mbygpOwogICAgIG1fc3R1YkluZm8tPmNvZGVPcmlnaW4gPSBjb2RlT3JpZ2luOwog
fQogCkBAIC02MywyOSArNjksMzQgQEAgSklUQnlJZEdlbmVyYXRvcjo6SklUQnlJZEdlbmVyYXRv
cigKICNlbmRpZgogfQogCi12b2lkIEpJVEJ5SWRHZW5lcmF0b3I6OmZpbmFsaXplKExpbmtCdWZm
ZXImIGxpbmtCdWZmZXIpCit2b2lkIEpJVEJ5SWRHZW5lcmF0b3I6OmZpbmFsaXplKExpbmtCdWZm
ZXImIGZhc3RQYXRoLCBMaW5rQnVmZmVyJiBzbG93UGF0aCkKIHsKLSAgICBDb2RlTG9jYXRpb25D
YWxsIGNhbGxSZXR1cm5Mb2NhdGlvbiA9IGxpbmtCdWZmZXIubG9jYXRpb25PZihtX2NhbGwpOwor
ICAgIENvZGVMb2NhdGlvbkNhbGwgY2FsbFJldHVybkxvY2F0aW9uID0gc2xvd1BhdGgubG9jYXRp
b25PZihtX2NhbGwpOwogICAgIG1fc3R1YkluZm8tPmNhbGxSZXR1cm5Mb2NhdGlvbiA9IGNhbGxS
ZXR1cm5Mb2NhdGlvbjsKICAgICBtX3N0dWJJbmZvLT5wYXRjaC5kZWx0YUNoZWNrSW1tVG9DYWxs
ID0gTWFjcm9Bc3NlbWJsZXI6OmRpZmZlcmVuY2VCZXR3ZWVuQ29kZVB0cigKLSAgICAgICAgbGlu
a0J1ZmZlci5sb2NhdGlvbk9mKG1fc3RydWN0dXJlSW1tKSwgY2FsbFJldHVybkxvY2F0aW9uKTsK
KyAgICAgICAgZmFzdFBhdGgubG9jYXRpb25PZihtX3N0cnVjdHVyZUltbSksIGNhbGxSZXR1cm5M
b2NhdGlvbik7CiAgICAgbV9zdHViSW5mby0+cGF0Y2guZGVsdGFDYWxsVG9TdHJ1Y3RDaGVjayA9
IE1hY3JvQXNzZW1ibGVyOjpkaWZmZXJlbmNlQmV0d2VlbkNvZGVQdHIoCi0gICAgICAgIGNhbGxS
ZXR1cm5Mb2NhdGlvbiwgbGlua0J1ZmZlci5sb2NhdGlvbk9mKG1fc3RydWN0dXJlQ2hlY2spKTsK
KyAgICAgICAgY2FsbFJldHVybkxvY2F0aW9uLCBmYXN0UGF0aC5sb2NhdGlvbk9mKG1fc3RydWN0
dXJlQ2hlY2spKTsKICNpZiBVU0UoSlNWQUxVRTY0KQogICAgIG1fc3R1YkluZm8tPnBhdGNoLmRl
bHRhQ2FsbFRvTG9hZE9yU3RvcmUgPSBNYWNyb0Fzc2VtYmxlcjo6ZGlmZmVyZW5jZUJldHdlZW5D
b2RlUHRyKAotICAgICAgICBjYWxsUmV0dXJuTG9jYXRpb24sIGxpbmtCdWZmZXIubG9jYXRpb25P
ZihtX2xvYWRPclN0b3JlKSk7CisgICAgICAgIGNhbGxSZXR1cm5Mb2NhdGlvbiwgZmFzdFBhdGgu
bG9jYXRpb25PZihtX2xvYWRPclN0b3JlKSk7CiAjZWxzZQogICAgIG1fc3R1YkluZm8tPnBhdGNo
LmRlbHRhQ2FsbFRvVGFnTG9hZE9yU3RvcmUgPSBNYWNyb0Fzc2VtYmxlcjo6ZGlmZmVyZW5jZUJl
dHdlZW5Db2RlUHRyKAotICAgICAgICBjYWxsUmV0dXJuTG9jYXRpb24sIGxpbmtCdWZmZXIubG9j
YXRpb25PZihtX3RhZ0xvYWRPclN0b3JlKSk7CisgICAgICAgIGNhbGxSZXR1cm5Mb2NhdGlvbiwg
ZmFzdFBhdGgubG9jYXRpb25PZihtX3RhZ0xvYWRPclN0b3JlKSk7CiAgICAgbV9zdHViSW5mby0+
cGF0Y2guZGVsdGFDYWxsVG9QYXlsb2FkTG9hZE9yU3RvcmUgPSBNYWNyb0Fzc2VtYmxlcjo6ZGlm
ZmVyZW5jZUJldHdlZW5Db2RlUHRyKAotICAgICAgICBjYWxsUmV0dXJuTG9jYXRpb24sIGxpbmtC
dWZmZXIubG9jYXRpb25PZihtX2xvYWRPclN0b3JlKSk7CisgICAgICAgIGNhbGxSZXR1cm5Mb2Nh
dGlvbiwgZmFzdFBhdGgubG9jYXRpb25PZihtX2xvYWRPclN0b3JlKSk7CiAjZW5kaWYKICAgICBt
X3N0dWJJbmZvLT5wYXRjaC5kZWx0YUNhbGxUb1Nsb3dDYXNlID0gTWFjcm9Bc3NlbWJsZXI6OmRp
ZmZlcmVuY2VCZXR3ZWVuQ29kZVB0cigKLSAgICAgICAgY2FsbFJldHVybkxvY2F0aW9uLCBsaW5r
QnVmZmVyLmxvY2F0aW9uT2YobV9zbG93UGF0aEJlZ2luKSk7CisgICAgICAgIGNhbGxSZXR1cm5M
b2NhdGlvbiwgc2xvd1BhdGgubG9jYXRpb25PZihtX3Nsb3dQYXRoQmVnaW4pKTsKICAgICBtX3N0
dWJJbmZvLT5wYXRjaC5kZWx0YUNhbGxUb0RvbmUgPSBNYWNyb0Fzc2VtYmxlcjo6ZGlmZmVyZW5j
ZUJldHdlZW5Db2RlUHRyKAotICAgICAgICBjYWxsUmV0dXJuTG9jYXRpb24sIGxpbmtCdWZmZXIu
bG9jYXRpb25PZihtX2RvbmUpKTsKKyAgICAgICAgY2FsbFJldHVybkxvY2F0aW9uLCBmYXN0UGF0
aC5sb2NhdGlvbk9mKG1fZG9uZSkpOwogICAgIG1fc3R1YkluZm8tPnBhdGNoLmRlbHRhQ2FsbFRv
U3RvcmFnZUxvYWQgPSBNYWNyb0Fzc2VtYmxlcjo6ZGlmZmVyZW5jZUJldHdlZW5Db2RlUHRyKAot
ICAgICAgICBjYWxsUmV0dXJuTG9jYXRpb24sIGxpbmtCdWZmZXIubG9jYXRpb25PZihtX3Byb3Bl
cnR5U3RvcmFnZUxvYWQpKTsKKyAgICAgICAgY2FsbFJldHVybkxvY2F0aW9uLCBmYXN0UGF0aC5s
b2NhdGlvbk9mKG1fcHJvcGVydHlTdG9yYWdlTG9hZCkpOworfQorCit2b2lkIEpJVEJ5SWRHZW5l
cmF0b3I6OmZpbmFsaXplKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpCit7CisgICAgZmluYWxpemUo
bGlua0J1ZmZlciwgbGlua0J1ZmZlcik7CiB9CiAKIHZvaWQgSklUQnlJZEdlbmVyYXRvcjo6Z2Vu
ZXJhdGVGYXN0UGF0aENoZWNrcyhNYWNyb0Fzc2VtYmxlciYgaml0LCBHUFJSZWcgYnV0dGVyZmx5
KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVDYWNoZUdlbmVyYXRv
ci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lQ2Fj
aGVHZW5lcmF0b3IuaAkocmV2aXNpb24gMTU3NzA3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVRJbmxpbmVDYWNoZUdlbmVyYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC02Niw4ICs2
NiwxMCBAQCBwdWJsaWM6CiAgICAgICAgIG1fY2FsbCA9IGNhbGw7CiAgICAgfQogICAgIAorICAg
IE1hY3JvQXNzZW1ibGVyOjpQYXRjaGFibGVKdW1wIHNsb3dQYXRoUGF0Y2hhYmxlSnVtcCgpIGNv
bnN0IHsgcmV0dXJuIG1fc3RydWN0dXJlQ2hlY2s7IH0KICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVt
cCBzbG93UGF0aEp1bXAoKSBjb25zdCB7IHJldHVybiBtX3N0cnVjdHVyZUNoZWNrLm1fanVtcDsg
fQogCisgICAgdm9pZCBmaW5hbGl6ZShMaW5rQnVmZmVyJiBmYXN0UGF0aExpbmtCdWZmZXIsIExp
bmtCdWZmZXImIHNsb3dQYXRoTGlua0J1ZmZlcik7CiAgICAgdm9pZCBmaW5hbGl6ZShMaW5rQnVm
ZmVyJik7CiAgICAgCiBwcm90ZWN0ZWQ6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L1JlZ2lzdGVyU2V0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L1JlZ2lzdGVyU2V0LmNwcAkocmV2aXNpb24gMTU3NzA3KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9SZWdpc3RlclNldC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMzLDEyICszMywxOSBA
QAogCiBuYW1lc3BhY2UgSlNDIHsKIAotUmVnaXN0ZXJTZXQgUmVnaXN0ZXJTZXQ6OnNwZWNpYWxS
ZWdpc3RlcnMoKQorUmVnaXN0ZXJTZXQgUmVnaXN0ZXJTZXQ6OnN0YWNrUmVnaXN0ZXJzKCkKIHsK
ICAgICBSZWdpc3RlclNldCByZXN1bHQ7Ci0gICAgcmVzdWx0LnNldChHUFJJbmZvOjpjYWxsRnJh
bWVSZWdpc3Rlcik7CiAgICAgcmVzdWx0LnNldChNYWNyb0Fzc2VtYmxlcjo6c3RhY2tQb2ludGVy
UmVnaXN0ZXIpOwogICAgIHJlc3VsdC5zZXQoTWFjcm9Bc3NlbWJsZXI6OmZyYW1lUG9pbnRlclJl
Z2lzdGVyKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitSZWdpc3RlclNldCBSZWdpc3RlclNl
dDo6c3BlY2lhbFJlZ2lzdGVycygpCit7CisgICAgUmVnaXN0ZXJTZXQgcmVzdWx0OworICAgIHJl
c3VsdC5tZXJnZShzdGFja1JlZ2lzdGVycygpKTsKKyAgICByZXN1bHQuc2V0KEdQUkluZm86OmNh
bGxGcmFtZVJlZ2lzdGVyKTsKICNpZiBVU0UoSlNWQUxVRTY0KQogICAgIHJlc3VsdC5zZXQoR1BS
SW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyKTsKICAgICByZXN1bHQuc2V0KEdQUkluZm86OnRh
Z01hc2tSZWdpc3Rlcik7CkBAIC00Niw2ICs1Myw1MiBAQCBSZWdpc3RlclNldCBSZWdpc3RlclNl
dDo6c3BlY2lhbFJlZ2lzdGVyCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAorUmVnaXN0ZXJTZXQg
UmVnaXN0ZXJTZXQ6OmNhbGxlZVNhdmVSZWdpc3RlcnMoKQoreworICAgIFJlZ2lzdGVyU2V0IHJl
c3VsdDsKKyNpZiBVU0UoWDg2XzY0KQorICAgIHJlc3VsdC5zZXQoWDg2UmVnaXN0ZXJzOjpyYngp
OworICAgIHJlc3VsdC5zZXQoWDg2UmVnaXN0ZXJzOjpyYnApOworICAgIHJlc3VsdC5zZXQoWDg2
UmVnaXN0ZXJzOjpyMTApOworICAgIHJlc3VsdC5zZXQoWDg2UmVnaXN0ZXJzOjpyMTIpOworICAg
IHJlc3VsdC5zZXQoWDg2UmVnaXN0ZXJzOjpyMTMpOworICAgIHJlc3VsdC5zZXQoWDg2UmVnaXN0
ZXJzOjpyMTQpOworICAgIHJlc3VsdC5zZXQoWDg2UmVnaXN0ZXJzOjpyMTUpOworI2Vsc2UKKyNl
cnJvciAiVW5zdXBwb3J0ZWQgaW5zdHJ1Y3Rpb24gc2V0IgorI2VuZGlmCisgICAgcmV0dXJuIHJl
c3VsdDsKK30KKworUmVnaXN0ZXJTZXQgUmVnaXN0ZXJTZXQ6OmFsbEdQUnMoKQoreworICAgIFJl
Z2lzdGVyU2V0IHJlc3VsdDsKKyAgICBmb3IgKE1hY3JvQXNzZW1ibGVyOjpSZWdpc3RlcklEIHJl
ZyA9IE1hY3JvQXNzZW1ibGVyOjpmaXJzdFJlZ2lzdGVyKCk7IHJlZyA8PSBNYWNyb0Fzc2VtYmxl
cjo6bGFzdFJlZ2lzdGVyKCk7IHJlZyA9IHN0YXRpY19jYXN0PE1hY3JvQXNzZW1ibGVyOjpSZWdp
c3RlcklEPihyZWcgKyAxKSkKKyAgICAgICAgcmVzdWx0LnNldChyZWcpOworICAgIHJldHVybiBy
ZXN1bHQ7Cit9CisKK1JlZ2lzdGVyU2V0IFJlZ2lzdGVyU2V0OjphbGxGUFJzKCkKK3sKKyAgICBS
ZWdpc3RlclNldCByZXN1bHQ7CisgICAgZm9yIChNYWNyb0Fzc2VtYmxlcjo6RlBSZWdpc3RlcklE
IHJlZyA9IE1hY3JvQXNzZW1ibGVyOjpmaXJzdEZQUmVnaXN0ZXIoKTsgcmVnIDw9IE1hY3JvQXNz
ZW1ibGVyOjpsYXN0RlBSZWdpc3RlcigpOyByZWcgPSBzdGF0aWNfY2FzdDxNYWNyb0Fzc2VtYmxl
cjo6RlBSZWdpc3RlcklEPihyZWcgKyAxKSkKKyAgICAgICAgcmVzdWx0LnNldChyZWcpOworICAg
IHJldHVybiByZXN1bHQ7Cit9CisKK1JlZ2lzdGVyU2V0IFJlZ2lzdGVyclNldDo6YWxsUmVnaXN0
ZXJzKCkKK3sKKyAgICBSZWdpc3RlclNldCByZXN1bHQ7CisgICAgcmVzdWx0Lm1lcmdlKGFsbEdQ
UnMoKSk7CisgICAgcmVzdWx0Lm1lcmdlKGFsbEZQUnMoKSk7CisgICAgcmV0dXJuIHJlc3VsdDsK
K30KKwordm9pZCBSZWdpc3RlclNldDo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAorewor
ICAgIG1fdmVjdG9yLmR1bXAob3V0KTsKK30KKwogfSAvLyBuYW1lc3BhY2UgSlNDCiAKICNlbmRp
ZiAvLyBFTkFCTEUoSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZWdpc3Rl
clNldC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVnaXN0ZXJT
ZXQuaAkocmV2aXNpb24gMTU3NzA3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZWdp
c3RlclNldC5oCSh3b3JraW5nIGNvcHkpCkBAIC00Miw3ICs0MiwxMiBAQCBjbGFzcyBSZWdpc3Rl
clNldCB7CiBwdWJsaWM6CiAgICAgUmVnaXN0ZXJTZXQoKSB7IH0KICAgICAKKyAgICBzdGF0aWMg
UmVnaXN0ZXJTZXQgc3RhY2tSZWdpc3RlcnMoKTsKICAgICBzdGF0aWMgUmVnaXN0ZXJTZXQgc3Bl
Y2lhbFJlZ2lzdGVycygpOworICAgIHN0YXRpYyBSZWdpc3RlclNldCBjYWxsZWVTYXZlUmVnaXN0
ZXJzKCk7CisgICAgc3RhdGljIFJlZ2lzdGVyU2V0IGFsbEdQUnMoKTsKKyAgICBzdGF0aWMgUmVn
aXN0ZXJTZXQgYWxsRlBScygpOworICAgIHN0YXRpYyBSZWdpc3RlclNldCBhbGxSZWdpc3RlcnMo
KTsKIAogICAgIHZvaWQgc2V0KEdQUlJlZyByZWcsIGJvb2wgdmFsdWUgPSB0cnVlKQogICAgIHsK
QEAgLTc2LDEzICs4MSw1NSBAQCBwdWJsaWM6CiAgICAgYm9vbCBnZXQoRlBSUmVnIHJlZykgY29u
c3QgeyByZXR1cm4gbV92ZWN0b3IuZ2V0KE1hY3JvQXNzZW1ibGVyOjpyZWdpc3RlckluZGV4KHJl
ZykpOyB9CiAgICAgCiAgICAgdm9pZCBtZXJnZShjb25zdCBSZWdpc3RlclNldCYgb3RoZXIpIHsg
bV92ZWN0b3IubWVyZ2Uob3RoZXIubV92ZWN0b3IpOyB9CisgICAgdm9pZCBleGNsdWRlKGNvbnN0
IFJlZ2lzdGVyU2V0JiBvdGhlcikgeyBtX3ZlY3Rvci5leGNsdWRlKG90aGVyLm1fdmVjdG9yKTsg
fQorICAgIAorICAgIHNpemVfdCBudW1iZXJPZlNldFJlZ2lzdGVycygpIGNvbnN0IHsgcmV0dXJu
IG1fdmVjdG9yLmJpdENvdW50KCk7IH0KKyAgICAKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0m
KSBjb25zdDsKKyAgICAKKyAgICBlbnVtIEVtcHR5VmFsdWVUYWcgeyBFbXB0eVZhbHVlIH07Cisg
ICAgZW51bSBEZWxldGVkVmFsdWVUYWcgeyBEZWxldGVkVmFsdWUgfTsKKyAgICAKKyAgICBSZWdp
c3RlclNldChFbXB0eVZhbHVlVGFnKQorICAgICAgICA6IG1fdmVjdG9yKEJpdFZlY3Rvcjo6RW1w
dHlWYWx1ZSkKKyAgICB7CisgICAgfQorICAgIAorICAgIFJlZ2lzdGVyU2V0KERlbGV0ZWRWYWx1
ZVRhZykKKyAgICAgICAgOiBtX3ZlY3RvcihCaXRWZWN0b3I6OkRlbGV0ZWRWYWx1ZSkKKyAgICB7
CisgICAgfQorICAgIAorICAgIGJvb2wgaXNFbXB0eVZhbHVlKCkgY29uc3QgeyByZXR1cm4gbV92
ZWN0b3IuaXNFbXB0eVZhbHVlKCk7IH0KKyAgICBib29sIGlzRGVsZXRlZFZhbHVlKCkgY29uc3Qg
eyByZXR1cm4gbV92ZWN0b3IuaXNEZWxldGVkVmFsdWUoKTsgfQorICAgIAorICAgIGJvb2wgb3Bl
cmF0b3I9PShjb25zdCBSZWdpc3RlclNldCYgb3RoZXIpIGNvbnN0IHsgcmV0dXJuIG1fdmVjdG9y
ID09IG90aGVyLm1fdmVjdG9yOyB9CisgICAgdW5zaWduZWQgaGFzaCgpIGNvbnN0IHsgcmV0dXJu
IG1fdmVjdG9yLmhhc2goKTsgfQogICAgIAogcHJpdmF0ZToKICAgICBCaXRWZWN0b3IgbV92ZWN0
b3I7CiB9OwogCitzdHJ1Y3QgUmVnaXN0ZXJTZXRIYXNoIHsKKyAgICBzdGF0aWMgdW5zaWduZWQg
aGFzaChjb25zdCBSZWdpc3RlclNldCYgc2V0KSB7IHJldHVybiBzZXQuaGFzaCgpOyB9CisgICAg
c3RhdGljIGJvb2wgZXF1YWwoY29uc3QgUmVnaXN0ZXJTZXQmIGEsIGNvbnN0IFJlZ2lzdGVyU2V0
JiBiKSB7IHJldHVybiBhID09IGI7IH0KKyAgICBzdGF0aWMgY29uc3QgYm9vbCBzYWZlVG9Db21w
YXJlVG9FbXB0eU9yRGVsZXRlZCA9IGZhbHNlOworfTsKKwogfSAvLyBuYW1lc3BhY2UgSlNDCiAK
K25hbWVzcGFjZSBXVEYgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgRGVmYXVsdEhh
c2g7Cit0ZW1wbGF0ZTw+IHN0cnVjdCBEZWZhdWx0SGFzaDxKU0M6OlJlZ2lzdGVyU2V0PiB7Cisg
ICAgdHlwZWRlZiBKU0M6OlJlZ2lzdGVyU2V0SGFzaCBIYXNoOworfTsKKwordGVtcGxhdGU8dHlw
ZW5hbWUgVD4gc3RydWN0IEhhc2hUcmFpdHM7Cit0ZW1wbGF0ZTw+IHN0cnVjdCBIYXNoVHJhaXRz
PEpTQzo6UmVnaXN0ZXJTZXQ+IDogcHVibGljIEN1c3RvbUhhc2hUcmFpdHM8SlNDOjpSZWdpc3Rl
clNldD4geyB9OworCit9IC8vIG5hbWVzcGFjZSBXVEYKKwogI2VuZGlmIC8vIEVOQUJMRShKSVQp
CiAKICNlbmRpZiAvLyBSZWdpc3RlclNldF9oCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9PcHRpb25zLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvT3B0aW9ucy5oCShyZXZpc2lvbiAxNTc3MDcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9PcHRpb25zLmgJKHdvcmtpbmcgY29weSkKQEAgLTEyNSw2ICsxMjUsNyBAQCB0
eXBlZGVmIE9wdGlvblJhbmdlIG9wdGlvblJhbmdlOwogICAgIHYoYm9vbCwgZnRsVHJhcHNPbk9T
UkV4aXQsIGZhbHNlKSBcCiAgICAgdihib29sLCBmdGxPU1JFeGl0T21pdHNNYXJzaGFsbGluZywg
ZmFsc2UpIFwKICAgICB2KGJvb2wsIGZ0bE9TUkV4aXRVc2VzU3RhY2ttYXAsIGZhbHNlKSBcCisg
ICAgdihib29sLCBmdGxJQ1VzZXNQYXRjaHBvaW50LCBmYWxzZSkgXAogICAgIHYoYm9vbCwgdXNl
TExWTU9TUkV4aXRJbnRyaW5zaWMsIGZhbHNlKSBcCiAgICAgdihib29sLCBkdW1wTExWTUlSLCBm
YWxzZSkgXAogICAgIHYoYm9vbCwgbGx2bUFsd2F5c0ZhaWxzQmVmb3JlQ29tcGlsZSwgZmFsc2Up
IFwKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL0JpdFZlY3Rvci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dURi93dGYvQml0VmVjdG9yLmNwcAkocmV2aXNpb24gMTU3NzA3KQorKysgU291cmNlL1dU
Ri93dGYvQml0VmVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTI0LDcgKzEyNCw1OCBAQCB2
b2lkIEJpdFZlY3Rvcjo6bWVyZ2VTbG93KGNvbnN0IEJpdFZlY3RvCiAgICAgICAgIGEtPmJpdHMo
KVtpXSB8PSBiLT5iaXRzKClbaV07CiB9CiAKLXZvaWQgQml0VmVjdG9yOjpkdW1wKFByaW50U3Ry
ZWFtJiBvdXQpCit2b2lkIEJpdFZlY3Rvcjo6ZXhjbHVkZVNsb3coY29uc3QgQml0VmVjdG9yJiBv
dGhlcikKK3sKKyAgICBpZiAob3RoZXIuaXNJbmxpbmUoKSkgeworICAgICAgICBBU1NFUlQoIWlz
SW5saW5lKCkpOworICAgICAgICAqYml0cygpICY9IH5jbGVhbnNlSW5saW5lQml0cyhvdGhlci5t
X2JpdHNPclBvaW50ZXIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIGlmIChp
c0lubGluZSgpKSB7CisgICAgICAgIEFTU0VSVCghb3RoZXIuaXNJbmxpbmUoKSk7CisgICAgICAg
IG1fYml0c09yUG9pbnRlciAmPSB+Km90aGVyLm91dE9mTGluZUJpdHMoKS0+Yml0cygpOworICAg
ICAgICBtX2JpdHNPclBvaW50ZXIgfD0gKHN0YXRpY19jYXN0PHVpbnRwdHJfdD4oMSkgPDwgbWF4
SW5saW5lQml0cygpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBPdXRPZkxp
bmVCaXRzKiBhID0gb3V0T2ZMaW5lQml0cygpOworICAgIGNvbnN0IE91dE9mTGluZUJpdHMqIGIg
PSBvdGhlci5vdXRPZkxpbmVCaXRzKCk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gc3RkOjptaW4o
YS0+bnVtV29yZHMoKSwgYi0+bnVtV29yZHMoKSk7IGktLTspCisgICAgICAgIGEtPmJpdHMoKVtp
XSAmPSB+Yi0+Yml0cygpW2ldOworfQorCitzaXplX3QgQml0VmVjdG9yOjpiaXRDb3VudFNsb3co
KSBjb25zdAoreworICAgIEFTU0VSVCghaXNJbmxpbmUoKSk7CisgICAgY29uc3QgT3V0T2ZMaW5l
Qml0cyogYml0cyA9IG91dE9mTGluZUJpdHMoKTsKKyAgICBzaXplX3QgcmVzdWx0ID0gMDsKKyAg
ICBmb3IgKHVuc2lnbmVkIGkgPSBiaXRzLT5udW1Xb3JkcygpOyBpLS07KQorICAgICAgICByZXN1
bHQgKz0gYml0Q291bnQoYml0cy0+Yml0cygpW2ldKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQor
Citib29sIEJpdFZlY3Rvcjo6ZXF1YWxzU2xvd0Nhc2UoY29uc3QgQml0VmVjdG9yJiBvdGhlcikg
Y29uc3QKK3sKKyAgICAvLyBUaGlzIGlzIHJlYWxseSBjaGVlc3ksIGJ1dCBwcm9iYWJseSBnb29k
IGVub3VnaCBmb3Igbm93LgorICAgIGZvciAodW5zaWduZWQgaSA9IHN0ZDo6bWF4KHNpemUoKSwg
b3RoZXIuc2l6ZSgpKTsgaS0tOykgeworICAgICAgICBpZiAoZ2V0KGkpICE9IG90aGVyLmdldChp
KSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgcmV0dXJuIHRydWU7Cit9
CisKK3VpbnRwdHJfdCBCaXRWZWN0b3I6Omhhc2hTbG93Q2FzZSgpIGNvbnN0Cit7CisgICAgQVNT
RVJUKCFpc0lubGluZSgpKTsKKyAgICBjb25zdCBPdXRPZkxpbmVCaXRzKiBiaXRzID0gb3V0T2ZM
aW5lQml0cygpOworICAgIHVpbnRwdHJfdCByZXN1bHQgPSAwOworICAgIGZvciAodW5zaWduZWQg
aSA9IGJpdHMtPm51bVdvcmRzKCk7IGktLTspCisgICAgICAgIHJlc3VsdCBePSBiaXRzLT5iaXRz
KClbaV07CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCBCaXRWZWN0b3I6OmR1bXAoUHJp
bnRTdHJlYW0mIG91dCkgY29uc3QKIHsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemUo
KTsgKytpKSB7CiAgICAgICAgIGlmIChnZXQoaSkpCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9CaXRW
ZWN0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9CaXRWZWN0b3IuaAkocmV2aXNp
b24gMTU3NzA3KQorKysgU291cmNlL1dURi93dGYvQml0VmVjdG9yLmgJKHdvcmtpbmcgY29weSkK
QEAgLTI4LDYgKzI4LDggQEAKIAogI2luY2x1ZGUgPHN0ZGlvLmg+CiAjaW5jbHVkZSA8d3RmL0Fz
c2VydGlvbnMuaD4KKyNpbmNsdWRlIDx3dGYvSGFzaEZ1bmN0aW9ucy5oPgorI2luY2x1ZGUgPHd0
Zi9IYXNoVHJhaXRzLmg+CiAjaW5jbHVkZSA8d3RmL1ByaW50U3RyZWFtLmg+CiAjaW5jbHVkZSA8
d3RmL1N0ZExpYkV4dHJhcy5oPgogCkBAIC0xNzgsNyArMTgwLDU5IEBAIHB1YmxpYzogCiAgICAg
ICAgIG1fYml0c09yUG9pbnRlciB8PSBvdGhlci5tX2JpdHNPclBvaW50ZXI7CiAgICAgfQogICAg
IAotICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYgb3V0KTsKKyAgICB2b2lkIGV4Y2x1ZGUoY29u
c3QgQml0VmVjdG9yJiBvdGhlcikKKyAgICB7CisgICAgICAgIGlmICghaXNJbmxpbmUoKSB8fCAh
b3RoZXIuaXNJbmxpbmUoKSkgeworICAgICAgICAgICAgZXhjbHVkZVNsb3cob3RoZXIpOworICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIG1fYml0c09yUG9pbnRlciAmPSB+
b3RoZXIubV9iaXRzT3JQb2ludGVyOworICAgIH0KKyAgICAKKyAgICBzaXplX3QgYml0Q291bnQo
KSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKGlzSW5saW5lKCkpCisgICAgICAgICAgICByZXR1
cm4gYml0Q291bnQoY2xlYW5zZUlubGluZUJpdHMobV9iaXRzT3JQb2ludGVyKSk7CisgICAgICAg
IHJldHVybiBiaXRDb3VudFNsb3coKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBkdW1wKFByaW50
U3RyZWFtJiBvdXQpIGNvbnN0OworICAgIAorICAgIGVudW0gRW1wdHlWYWx1ZVRhZyB7IEVtcHR5
VmFsdWUgfTsKKyAgICBlbnVtIERlbGV0ZWRWYWx1ZVRhZyB7IERlbGV0ZWRWYWx1ZSB9OworICAg
IAorICAgIEJpdFZlY3RvcihFbXB0eVZhbHVlVGFnKQorICAgICAgICA6IG1fYml0c09yUG9pbnRl
cigwKQorICAgIHsKKyAgICB9CisgICAgCisgICAgQml0VmVjdG9yKERlbGV0ZWRWYWx1ZVRhZykK
KyAgICAgICAgOiBtX2JpdHNPclBvaW50ZXIoMSkKKyAgICB7CisgICAgfQorICAgIAorICAgIGJv
b2wgaXNFbXB0eVZhbHVlKCkgY29uc3QgeyByZXR1cm4gIW1fYml0c09yUG9pbnRlcjsgfQorICAg
IGJvb2wgaXNEZWxldGVkVmFsdWUoKSBjb25zdCB7IHJldHVybiBtX2JpdHNPclBvaW50ZXIgPT0g
MTsgfQorICAgIAorICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBCaXRWZWN0b3ImIG90aGVyKSBj
b25zdAorICAgIHsKKyAgICAgICAgaWYgKGlzSW5saW5lKCkgJiYgb3RoZXIuaXNJbmxpbmUoKSkK
KyAgICAgICAgICAgIHJldHVybiBtX2JpdHNPclBvaW50ZXIgPT0gb3RoZXIubV9iaXRzT3JQb2lu
dGVyOworICAgICAgICByZXR1cm4gZXF1YWxzU2xvd0Nhc2Uob3RoZXIpOworICAgIH0KKyAgICAK
KyAgICB1bnNpZ25lZCBoYXNoKCkgY29uc3QKKyAgICB7CisgICAgICAgIC8vIFRoaXMgaXMgYSB2
ZXJ5IHNpbXBsZSBoYXNoLiBKdXN0IHhvciB0b2dldGhlciB0aGUgd29yZHMgdGhhdCBob2xkIHRo
ZSB2YXJpb3VzCisgICAgICAgIC8vIGJpdHMgYW5kIHRoZW4gY29tcHV0ZSB0aGUgaGFzaC4gVGhp
cyBtYWtlcyBpdCB2ZXJ5IGVhc3kgdG8gZGVhbCB3aXRoIGJpdHZlY3RvcnMKKyAgICAgICAgLy8g
dGhhdCBoYXZlIGEgbG90IG9mIHRyYWlsaW5nIHplcm8ncy4KKyAgICAgICAgdWludHB0cl90IHZh
bHVlOworICAgICAgICBpZiAoaXNJbmxpbmUoKSkKKyAgICAgICAgICAgIHZhbHVlID0gY2xlYW5z
ZUlubGluZUJpdHMobV9iaXRzT3JQb2ludGVyKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAg
dmFsdWUgPSBoYXNoU2xvd0Nhc2UoKTsKKyAgICAgICAgcmV0dXJuIEludEhhc2g8dWludHB0cl90
Pjo6aGFzaCh2YWx1ZSk7CisgICAgfQogICAgIAogcHJpdmF0ZToKICAgICBzdGF0aWMgdW5zaWdu
ZWQgYml0c0luUG9pbnRlcigpCkBAIC0yMDcsNiArMjYxLDE0IEBAIHByaXZhdGU6CiAgICAgICAg
IHJldHVybiBiaXRzICYgfihzdGF0aWNfY2FzdDx1aW50cHRyX3Q+KDEpIDw8IG1heElubGluZUJp
dHMoKSk7CiAgICAgfQogICAgIAorICAgIHN0YXRpYyBzaXplX3QgYml0Q291bnQodWludHB0cl90
IGJpdHMpCisgICAgeworICAgICAgICBpZiAoc2l6ZW9mKHVpbnRwdHJfdCkgPT0gNCkKKyAgICAg
ICAgICAgIHJldHVybiBXVEY6OmJpdENvdW50KHN0YXRpY19jYXN0PHVuc2lnbmVkPihiaXRzKSk7
CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJldHVybiBXVEY6OmJpdENvdW50KHN0YXRpY19j
YXN0PHVpbnQ2NF90PihiaXRzKSk7CisgICAgfQorICAgIAogICAgIGNsYXNzIE91dE9mTGluZUJp
dHMgewogICAgIHB1YmxpYzoKICAgICAgICAgc2l6ZV90IG51bUJpdHMoKSBjb25zdCB7IHJldHVy
biBtX251bUJpdHM7IH0KQEAgLTIzNiw2ICsyOTgsMTIgQEAgcHJpdmF0ZToKICAgICBXVEZfRVhQ
T1JUX1BSSVZBVEUgdm9pZCBzZXRTbG93KGNvbnN0IEJpdFZlY3RvciYgb3RoZXIpOwogICAgIAog
ICAgIFdURl9FWFBPUlRfUFJJVkFURSB2b2lkIG1lcmdlU2xvdyhjb25zdCBCaXRWZWN0b3ImIG90
aGVyKTsKKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBleGNsdWRlU2xvdyhjb25zdCBCaXRW
ZWN0b3ImIG90aGVyKTsKKyAgICAKKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgc2l6ZV90IGJpdENv
dW50U2xvdygpIGNvbnN0OworICAgIAorICAgIFdURl9FWFBPUlRfUFJJVkFURSBib29sIGVxdWFs
c1Nsb3dDYXNlKGNvbnN0IEJpdFZlY3RvciYgb3RoZXIpIGNvbnN0OworICAgIFdURl9FWFBPUlRf
UFJJVkFURSB1aW50cHRyX3QgaGFzaFNsb3dDYXNlKCkgY29uc3Q7CiAgICAgCiAgICAgdWludHB0
cl90KiBiaXRzKCkKICAgICB7CkBAIC0yNTQsNiArMzIyLDIwIEBAIHByaXZhdGU6CiAgICAgdWlu
dHB0cl90IG1fYml0c09yUG9pbnRlcjsKIH07CiAKK3N0cnVjdCBCaXRWZWN0b3JIYXNoIHsKKyAg
ICBzdGF0aWMgdW5zaWduZWQgaGFzaChjb25zdCBCaXRWZWN0b3ImIHZlY3RvcikgeyByZXR1cm4g
dmVjdG9yLmhhc2goKTsgfQorICAgIHN0YXRpYyBib29sIGVxdWFsKGNvbnN0IEJpdFZlY3RvciYg
YSwgY29uc3QgQml0VmVjdG9yJiBiKSB7IHJldHVybiBhID09IGI7IH0KKyAgICBzdGF0aWMgY29u
c3QgYm9vbCBzYWZlVG9Db21wYXJlVG9FbXB0eU9yRGVsZXRlZCA9IGZhbHNlOworfTsKKwordGVt
cGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IERlZmF1bHRIYXNoOwordGVtcGxhdGU8PiBzdHJ1Y3Qg
RGVmYXVsdEhhc2g8Qml0VmVjdG9yPiB7CisgICAgdHlwZWRlZiBCaXRWZWN0b3JIYXNoIEhhc2g7
Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgSGFzaFRyYWl0czsKK3RlbXBsYXRl
PD4gc3RydWN0IEhhc2hUcmFpdHM8Qml0VmVjdG9yPiA6IHB1YmxpYyBDdXN0b21IYXNoVHJhaXRz
PEJpdFZlY3Rvcj4geyB9OworCiB9IC8vIG5hbWVzcGFjZSBXVEYKIAogdXNpbmcgV1RGOjpCaXRW
ZWN0b3I7CkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9IYXNoVHJhaXRzLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dURi93dGYvSGFzaFRyYWl0cy5oCShyZXZpc2lvbiAxNTc3MDcpCisrKyBTb3VyY2Uv
V1RGL3d0Zi9IYXNoVHJhaXRzLmgJKHdvcmtpbmcgY29weSkKQEAgLTIxNiw2ICsyMTYsMzQgQEAg
c3RydWN0IE51bGxhYmxlSGFzaFRyYWl0cyA6IHB1YmxpYyBIYXNoVAogICAgIHN0YXRpYyBUIGVt
cHR5VmFsdWUoKSB7IHJldHVybiByZWludGVycHJldF9jYXN0PFQ+KDEpOyB9CiB9OwogCisvLyBV
c2VmdWwgZm9yIGNsYXNzZXMgdGhhdCB3YW50IGNvbXBsZXRlIGNvbnRyb2wgb3ZlciB3aGF0IGlz
IGVtcHR5IGFuZCB3aGF0IGlzIGRlbGV0ZWQsCisvLyBhbmQgaG93IHRvIGNvbnN0cnVjdCBib3Ro
LgordGVtcGxhdGU8dHlwZW5hbWUgVD4KK3N0cnVjdCBDdXN0b21IYXNoVHJhaXRzIHsKKyAgICBz
dGF0aWMgY29uc3QgYm9vbCBlbXB0eVZhbHVlSXNaZXJvID0gZmFsc2U7CisgICAgc3RhdGljIGNv
bnN0IGJvb2wgaGFzSXNFbXB0eVZhbHVlRnVuY3Rpb24gPSB0cnVlOworICAgIAorICAgIHN0YXRp
YyB2b2lkIGNvbnN0cnVjdERlbGV0ZWRWYWx1ZShUJiBzbG90KQorICAgIHsKKyAgICAgICAgbmV3
IChOb3ROdWxsLCAmc2xvdCkgVChUOjpEZWxldGVkVmFsdWUpOworICAgIH0KKyAgICAKKyAgICBz
dGF0aWMgYm9vbCBpc0RlbGV0ZWRWYWx1ZShjb25zdCBUJiB2YWx1ZSkKKyAgICB7CisgICAgICAg
IHJldHVybiB2YWx1ZS5pc0RlbGV0ZWRWYWx1ZSgpOworICAgIH0KKyAgICAKKyAgICBzdGF0aWMg
VCBlbXB0eVZhbHVlKCkKKyAgICB7CisgICAgICAgIHJldHVybiBUKFQ6OkVtcHR5VmFsdWUpOwor
ICAgIH0KKyAgICAKKyAgICBzdGF0aWMgYm9vbCBpc0VtcHR5VmFsdWUoY29uc3QgVCYgdmFsdWUp
CisgICAgeworICAgICAgICByZXR1cm4gdmFsdWUuaXNFbXB0eVZhbHVlKCk7CisgICAgfQorfTsK
KwogfSAvLyBuYW1lc3BhY2UgV1RGCiAKIHVzaW5nIFdURjo6SGFzaFRyYWl0czsKSW5kZXg6IFNv
dXJjZS9XVEYvd3RmL1N0ZExpYkV4dHJhcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3Rm
L1N0ZExpYkV4dHJhcy5oCShyZXZpc2lvbiAxNTc3MDcpCisrKyBTb3VyY2UvV1RGL3d0Zi9TdGRM
aWJFeHRyYXMuaAkod29ya2luZyBjb3B5KQpAQCAtMTU3LDYgKzE1NywxMSBAQCBpbmxpbmUgc2l6
ZV90IGJpdENvdW50KHVuc2lnbmVkIGJpdHMpCiAgICAgcmV0dXJuICgoKGJpdHMgKyAoYml0cyA+
PiA0KSkgJiAweEYwRjBGMEYpICogMHgxMDEwMTAxKSA+PiAyNDsKIH0KIAoraW5saW5lIHNpemVf
dCBiaXRDb3VudCh1aW50NjRfdCBiaXRzKQoreworICAgIHJldHVybiBiaXRDb3VudChzdGF0aWNf
Y2FzdDx1bnNpZ25lZD4oYml0cykpICsgYml0Q291bnQoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGJp
dHMgPj4gMzIpKTsKK30KKwogLy8gTWFjcm8gdGhhdCByZXR1cm5zIGEgY29tcGlsZSB0aW1lIGNv
bnN0YW50IHdpdGggdGhlIGxlbmd0aCBvZiBhbiBhcnJheSwgYnV0IGdpdmVzIGFuIGVycm9yIGlm
IHBhc3NlZCBhIG5vbi1hcnJheS4KIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBTaXplPiBj
aGFyICgmQXJyYXlMZW5ndGhIZWxwZXJGdW5jdGlvbihUICgmKVtTaXplXSkpW1NpemVdOwogLy8g
R0NDIG5lZWRzIHNvbWUgaGVscCB0byBkZWR1Y2UgYSAwIGxlbmd0aCBhcnJheS4K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>214819</attachid>
            <date>2013-10-21 22:50:12 -0700</date>
            <delta_ts>2013-10-21 23:32:37 -0700</delta_ts>
            <desc>it compiles</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>76523</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxNTc3MDcpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkod29ya2luZyBjb3B5KQpAQCAtMTI5LDYgKzEyOSwxMyBAQAogCQkwRjI0RTU1NjE3RjBC
NzFDMDBBQkIyMTcgLyogSW5saW5lQ2FsbEZyYW1lU2V0LmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjI0RTU1NDE3RjBCNzFDMDBBQkIyMTcgLyogSW5s
aW5lQ2FsbEZyYW1lU2V0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKIAkJMEYyNEU1NTgxN0Y3NEVEQjAwQUJCMjE3IC8qIFZhbHVlUmVjb3ZlcnkuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyNEU1NTcx
N0Y3NEVEQjAwQUJCMjE3IC8qIFZhbHVlUmVjb3ZlcnkuY3BwICovOyB9OwogCQkwRjI1NkMzNjE2
MjdCMEFEMDA3RjI3ODMgLyogREZHQ2FsbEFycmF5QWxsb2NhdG9yU2xvd1BhdGhHZW5lcmF0b3Iu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMjU2QzM0
MTYyN0IwQUEwMDdGMjc4MyAvKiBERkdDYWxsQXJyYXlBbGxvY2F0b3JTbG93UGF0aEdlbmVyYXRv
ci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBG
MjVGMUFFMTgxNjM1RjMwMDUyMkYzOSAvKiBGVExJbmxpbmVDYWNoZURlc2NyaXB0b3IuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMjVGMUE3MTgxNjM1
RjMwMDUyMkYzOSAvKiBGVExJbmxpbmVDYWNoZURlc2NyaXB0b3IuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRjI1RjFBRjE4MTYzNUYzMDA1MjJG
MzkgLyogRlRMSW5saW5lQ2FjaGVTaXplLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGMjVGMUE4MTgxNjM1RjMwMDUyMkYzOSAvKiBGVExJbmxpbmVD
YWNoZVNpemUuY3BwICovOyB9OworCQkwRjI1RjFCMDE4MTYzNUYzMDA1MjJGMzkgLyogRlRMSW5s
aW5lQ2FjaGVTaXplLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRjI1RjFBOTE4MTYzNUYzMDA1MjJGMzkgLyogRlRMSW5saW5lQ2FjaGVTaXplLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEYyNUYxQjEx
ODE2MzVGMzAwNTIyRjM5IC8qIEZUTFNsb3dQYXRoQ2FsbC5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjI1RjFBQTE4MTYzNUYzMDA1MjJGMzkgLyog
RlRMU2xvd1BhdGhDYWxsLmNwcCAqLzsgfTsKKwkJMEYyNUYxQjIxODE2MzVGMzAwNTIyRjM5IC8q
IEZUTFNsb3dQYXRoQ2FsbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEYyNUYxQUIxODE2MzVGMzAwNTIyRjM5IC8qIEZUTFNsb3dQYXRoQ2FsbC5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGMjVGMUIz
MTgxNjM1RjMwMDUyMkYzOSAvKiBGVExTbG93UGF0aENhbGxLZXkuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyNUYxQUMxODE2MzVGMzAwNTIyRjM5
IC8qIEZUTFNsb3dQYXRoQ2FsbEtleS5jcHAgKi87IH07CisJCTBGMjVGMUI0MTgxNjM1RjMwMDUy
MkYzOSAvKiBGVExTbG93UGF0aENhbGxLZXkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGMjVGMUFEMTgxNjM1RjMwMDUyMkYzOSAvKiBGVExTbG93UGF0
aENhbGxLZXkuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwogCQkwRjJCNjZBQzE3QjZCNTNGMDBBN0FFM0YgLyogR0NJbmNvbWluZ1JlZkNvdW50ZWQuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkI2NkE4MTdC
NkI1M0QwMEE3QUUzRiAvKiBHQ0luY29taW5nUmVmQ291bnRlZC5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGMkI2NkFEMTdCNkI1NDUwMEE3QUUz
RiAvKiBHQ0luY29taW5nUmVmQ291bnRlZElubGluZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkI2NkE5MTdCNkI1M0QwMEE3QUUzRiAvKiBHQ0lu
Y29taW5nUmVmQ291bnRlZElubGluZXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwogCQkwRjJCNjZBRTE3QjZCNTQ1MDBBN0FFM0YgLyogR0NJbmNvbWlu
Z1JlZkNvdW50ZWRTZXQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDBGMkI2NkFBMTdCNkI1M0QwMEE3QUUzRiAvKiBHQ0luY29taW5nUmVmQ291bnRlZFNl
dC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC0x
Mzg0LDYgKzEzOTEsMTMgQEAKIAkJMEYyNEU1NTQxN0YwQjcxQzAwQUJCMjE3IC8qIElubGluZUNh
bGxGcmFtZVNldC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbmxpbmVDYWxs
RnJhbWVTZXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYyNEU1NTcxN0Y3NEVE
QjAwQUJCMjE3IC8qIFZhbHVlUmVjb3ZlcnkuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gVmFsdWVSZWNvdmVyeS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTBGMjU2QzM0MTYyN0IwQUEwMDdGMjc4MyAvKiBERkdDYWxsQXJyYXlBbGxvY2F0b3JTbG93
UGF0aEdlbmVyYXRvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdDYWxs
QXJyYXlBbGxvY2F0b3JTbG93UGF0aEdlbmVyYXRvci5oOyBwYXRoID0gZGZnL0RGR0NhbGxBcnJh
eUFsbG9jYXRvclNsb3dQYXRoR2VuZXJhdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTBGMjVGMUE3MTgxNjM1RjMwMDUyMkYzOSAvKiBGVExJbmxpbmVDYWNoZURlc2NyaXB0b3Iu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gRlRMSW5saW5lQ2FjaGVEZXNjcmlw
dG9yLmg7IHBhdGggPSBmdGwvRlRMSW5saW5lQ2FjaGVEZXNjcmlwdG9yLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTBGMjVGMUE4MTgxNjM1RjMwMDUyMkYzOSAvKiBGVExJbmxpbmVD
YWNoZVNpemUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gRlRMSW5s
aW5lQ2FjaGVTaXplLmNwcDsgcGF0aCA9IGZ0bC9GVExJbmxpbmVDYWNoZVNpemUuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjI1RjFBOTE4MTYzNUYzMDA1MjJGMzkgLyogRlRM
SW5saW5lQ2FjaGVTaXplLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEZUTElu
bGluZUNhY2hlU2l6ZS5oOyBwYXRoID0gZnRsL0ZUTElubGluZUNhY2hlU2l6ZS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQkwRjI1RjFBQTE4MTYzNUYzMDA1MjJGMzkgLyogRlRMU2xv
d1BhdGhDYWxsLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEZUTFNs
b3dQYXRoQ2FsbC5jcHA7IHBhdGggPSBmdGwvRlRMU2xvd1BhdGhDYWxsLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyNUYxQUIxODE2MzVGMzAwNTIyRjM5IC8qIEZUTFNsb3dQ
YXRoQ2FsbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBGVExTbG93UGF0aENh
bGwuaDsgcGF0aCA9IGZ0bC9GVExTbG93UGF0aENhbGwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJMEYyNUYxQUMxODE2MzVGMzAwNTIyRjM5IC8qIEZUTFNsb3dQYXRoQ2FsbEtleS5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBGVExTbG93UGF0aENhbGxL
ZXkuY3BwOyBwYXRoID0gZnRsL0ZUTFNsb3dQYXRoQ2FsbEtleS5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTBGMjVGMUFEMTgxNjM1RjMwMDUyMkYzOSAvKiBGVExTbG93UGF0aENh
bGxLZXkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gRlRMU2xvd1BhdGhDYWxs
S2V5Lmg7IHBhdGggPSBmdGwvRlRMU2xvd1BhdGhDYWxsS2V5Lmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTBGMkI2NkE4MTdCNkI1M0QwMEE3QUUzRiAvKiBHQ0luY29taW5nUmVmQ291
bnRlZC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBHQ0luY29taW5nUmVmQ291bnRlZC5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkwRjJCNjZBOTE3QjZCNTNEMDBBN0FFM0YgLyogR0NJbmNvbWlu
Z1JlZkNvdW50ZWRJbmxpbmVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEdDSW5jb21pbmdSZWZDb3VudGVk
SW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjJCNjZBQTE3QjZCNTNE
MDBBN0FFM0YgLyogR0NJbmNvbWluZ1JlZkNvdW50ZWRTZXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gR0NJ
bmNvbWluZ1JlZkNvdW50ZWRTZXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTI3
MzMsNiArMjc0Nyw5IEBACiAJCQkJMEZEOEEzMTUxN0Q1MUYyMjAwQ0EyQzQwIC8qIEZUTEZvck9T
UkVudHJ5SklUQ29kZS5jcHAgKi8sCiAJCQkJMEZEOEEzMTYxN0Q1MUYyMjAwQ0EyQzQwIC8qIEZU
TEZvck9TUkVudHJ5SklUQ29kZS5oICovLAogCQkJCUE3OEE5NzdDMTc5NzM4RDUwMDlERjc0NCAv
KiBGVExHZW5lcmF0ZWRGdW5jdGlvbi5oICovLAorCQkJCTBGMjVGMUE3MTgxNjM1RjMwMDUyMkYz
OSAvKiBGVExJbmxpbmVDYWNoZURlc2NyaXB0b3IuaCAqLywKKwkJCQkwRjI1RjFBODE4MTYzNUYz
MDA1MjJGMzkgLyogRlRMSW5saW5lQ2FjaGVTaXplLmNwcCAqLywKKwkJCQkwRjI1RjFBOTE4MTYz
NUYzMDA1MjJGMzkgLyogRlRMSW5saW5lQ2FjaGVTaXplLmggKi8sCiAJCQkJMEZFQTBBMjYxNzA5
NjIzQjAwQkI3MjJDIC8qIEZUTEludHJpbnNpY1JlcG9zaXRvcnkuY3BwICovLAogCQkJCTBGRUEw
QTIyMTcwOTYwNjkwMEJCNzIyQyAvKiBGVExJbnRyaW5zaWNSZXBvc2l0b3J5LmggKi8sCiAJCQkJ
MEZFQTBBMDIxNzA1MTNEQjAwQkI3MjJDIC8qIEZUTEpJVENvZGUuY3BwICovLApAQCAtMjc1Nyw2
ICsyNzc0LDEwIEBACiAJCQkJMEZFQTBBMDYxNzA1MTNEQjAwQkI3MjJDIC8qIEZUTE91dHB1dC5o
ICovLAogCQkJCTBGQ0VGQUE5MTgwNEMxM0UwMDQ3MkNFNCAvKiBGVExTYXZlUmVzdG9yZS5jcHAg
Ki8sCiAJCQkJMEZDRUZBQUExODA0QzEzRTAwNDcyQ0U0IC8qIEZUTFNhdmVSZXN0b3JlLmggKi8s
CisJCQkJMEYyNUYxQUExODE2MzVGMzAwNTIyRjM5IC8qIEZUTFNsb3dQYXRoQ2FsbC5jcHAgKi8s
CisJCQkJMEYyNUYxQUIxODE2MzVGMzAwNTIyRjM5IC8qIEZUTFNsb3dQYXRoQ2FsbC5oICovLAor
CQkJCTBGMjVGMUFDMTgxNjM1RjMwMDUyMkYzOSAvKiBGVExTbG93UGF0aENhbGxLZXkuY3BwICov
LAorCQkJCTBGMjVGMUFEMTgxNjM1RjMwMDUyMkYzOSAvKiBGVExTbG93UGF0aENhbGxLZXkuaCAq
LywKIAkJCQkwRjlEMzM5ODE4MDNBREI3MDA3M0MyQkMgLyogRlRMU3RhY2tNYXBzLmNwcCAqLywK
IAkJCQkwRjlEMzM5OTE4MDNBREI3MDA3M0MyQkMgLyogRlRMU3RhY2tNYXBzLmggKi8sCiAJCQkJ
MEZFQTBBMTUxNzA2QkI5MDAwQkI3MjJDIC8qIEZUTFN0YXRlLmNwcCAqLywKQEAgLTQzOTAsNiAr
NDQxMSw3IEBACiAJCQkJMTQwRDE3RDcwRThBRDRBOTAwMENEMTdEIC8qIEpTQmFzZVByaXZhdGUu
aCBpbiBIZWFkZXJzICovLAogCQkJCTg2RkE5RTkyMTQyQkJCMkUwMDE3NzNCNyAvKiBKU0JvdW5k
RnVuY3Rpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDE5MEUxNkY1Q0QwMEIzNDQ2MCAv
KiBKU0NhbGxiYWNrQ29uc3RydWN0b3IuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGMjVGMUIyMTgx
NjM1RjMwMDUyMkYzOSAvKiBGVExTbG93UGF0aENhbGwuaCBpbiBIZWFkZXJzICovLAogCQkJCUJD
MThDNDFBMEUxNkY1Q0QwMEIzNDQ2MCAvKiBKU0NhbGxiYWNrRnVuY3Rpb24uaCBpbiBIZWFkZXJz
ICovLAogCQkJCUJDMThDNDFCMEUxNkY1Q0QwMEIzNDQ2MCAvKiBKU0NhbGxiYWNrT2JqZWN0Lmgg
aW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQxQzBFMTZGNUNEMDBCMzQ0NjAgLyogSlNDYWxsYmFj
a09iamVjdEZ1bmN0aW9ucy5oIGluIEhlYWRlcnMgKi8sCkBAIC00NTA3LDYgKzQ1MjksNyBAQAog
CQkJCTBGNDY4MENCMTRCQkIxNzIwMEJGRTI3MiAvKiBMTEludE9mZmxpbmVBc21Db25maWcuaCBp
biBIZWFkZXJzICovLAogCQkJCUZFRDI4N0IyMTVFQzlBNTcwMERBODE2MSAvKiBMTEludE9wY29k
ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY0NjgwQTUxNEJBN0Y4RDAwQkZFMjcyIC8qIExMSW50
U2xvd1BhdGhzLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjI1RjFBRTE4MTYzNUYzMDA1MjJGMzkg
LyogRlRMSW5saW5lQ2FjaGVEZXNjcmlwdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQlBN0JEQUVD
QjE3RjRFQTE0MDBGNjE0MEMgLyogSlNBcnJheUl0ZXJhdG9yLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkwRjBCODM5RDE0QkNGNDY2MDA4ODVCNEYgLyogTExJbnRUaHVua3MuaCBpbiBIZWFkZXJzICov
LAogCQkJCUE3RTVBQjM4MTc5OUU0QjIwMEQyODMzRCAvKiBMTFZNRGlzYXNzZW1ibGVyLmggaW4g
SGVhZGVycyAqLywKQEAgLTQ2NTIsNiArNDY3NSw3IEBACiAJCQkJQkMxOEM0NkEwRTE2RjVDRDAw
QjM0NDYwIC8qIFN0cmluZ1Byb3RvdHlwZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTQyRTMxM0Ix
MzRGRjBBNjAwQUZBREI1IC8qIFN0cm9uZy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTQ1NzIyODYx
NDM3RTE0MDAwNUZERTI2IC8qIFN0cm9uZ0lubGluZXMuaCBpbiBIZWFkZXJzICovLAorCQkJCTBG
MjVGMUI0MTgxNjM1RjMwMDUyMkYzOSAvKiBGVExTbG93UGF0aENhbGxLZXkuaCBpbiBIZWFkZXJz
ICovLAogCQkJCUE3Q0EzQUU2MTdEQTQxQUUwMDY1MzhBRiAvKiBXZWFrTWFwUHJvdG90eXBlLmgg
aW4gSGVhZGVycyAqLywKIAkJCQlCQ0RFM0FCODBFNkM4MkY1MDAxNDUzQTcgLyogU3RydWN0dXJl
LmggaW4gSGVhZGVycyAqLywKIAkJCQk3RTRFRTcwOTBFQkI3OTYzMDA1OTM0QUEgLyogU3RydWN0
dXJlQ2hhaW4uaCBpbiBIZWFkZXJzICovLApAQCAtNDcwMCw2ICs0NzI0LDcgQEAKIAkJCQlCQzE4
QzQyMDBFMTZGNUNEMDBCMzQ0NjAgLyogVk0uaCBpbiBIZWFkZXJzICovLAogCQkJCUZFNEEzMzIw
MTVCRDJFMDcwMDZGNTRGMyAvKiBWTUluc3BlY3Rvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRkU2
NjE3MjgxNzc0RTAzNTAwNDk1QjAwIC8qIFZNU3RhY2tCb3VuZHMuaCBpbiBIZWFkZXJzICovLAor
CQkJCTBGMjVGMUIwMTgxNjM1RjMwMDUyMkYzOSAvKiBGVExJbmxpbmVDYWNoZVNpemUuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTBGQzgxNTE1MTQwNTExOUIwMENGQTYwMyAvKiBWVGFibGVTcGVjdHJ1
bS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRkVEOTRGMkYxNzFFM0UyMzAwQkU3N0E0IC8qIFdhdGNo
ZG9nLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjkxOUQyNjE1ODUzQ0UzMDA0QTRFN0QgLyogV2F0
Y2hwb2ludC5oIGluIEhlYWRlcnMgKi8sCkBAIC01MTY4LDYgKzUxOTMsNyBAQAogCQkJCTE0N0Yz
OUMxMTA3RUMzNzYwMDQyN0E0OCAvKiBDb21tb25JZGVudGlmaWVycy5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQlBNzA5RjJGMjE3QTBBQzJBMDA1MTJFOTggLyogQ29tbW9uU2xvd1BhdGhzLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTY1NTNBMzMxMTdBMUYxRUUwMDhDRjZGMyAvKiBDb21tb25TbG93
UGF0aHNFeGNlcHRpb25zLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGMjVGMUIzMTgxNjM1RjMw
MDUyMkYzOSAvKiBGVExTbG93UGF0aENhbGxLZXkuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTdF
NUEzQTcxNzk3NDMyRDAwRTg5M0MwIC8qIENvbXBpbGF0aW9uUmVzdWx0LmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTE0N0YzOUMyMTA3RUMzNzYwMDQyN0E0OCAvKiBDb21wbGV0aW9uLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTE0NkIxNkQ4MTJFQjVCNTkwMDFCRUMxQiAvKiBDb25zZXJ2YXRpdmVS
b290cy5jcHAgaW4gU291cmNlcyAqLywKQEAgLTUxODEsNiArNTIwNyw3IEBACiAJCQkJMEZEOEEz
MUIxN0Q1MUYyMjAwQ0EyQzQwIC8qIEZUTE9TUkVudHJ5LmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTE0N0YzOUM1MTA3RUMzNzYwMDQyN0E0OCAvKiBEYXRlSW5zdGFuY2UuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJMTQ3RjM5QzYxMDdFQzM3NjAwNDI3QTQ4IC8qIERhdGVQcm90b3R5cGUuY3BwIGlu
IFNvdXJjZXMgKi8sCisJCQkJMEYyNUYxQjExODE2MzVGMzAwNTIyRjM5IC8qIEZUTFNsb3dQYXRo
Q2FsbC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDI4MDgyMzEwN0VDMDJDMDAxM0U3QjIgLyog
RGVidWdnZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkMzMTM1NjUwRjMwMkZBMzAwM0RGRDNB
IC8qIERlYnVnZ2VyQWN0aXZhdGlvbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDk1NTlFRTBE
RENEREY3MDA2NDgwODcgLyogRGVidWdnZXJDYWxsRnJhbWUuY3BwIGluIFNvdXJjZXMgKi8sCkBA
IC01NTQ1LDYgKzU1NzIsNyBAQAogCQkJCTBGMkI2NzBBMTdCNkI1QUIwMEE3QUUzRiAvKiBUeXBl
ZEFycmF5VHlwZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkY0Mjc0QTE1OEVCRTkxMDA0Q0I5
RkYgLyogdWRpczg2LmMgaW4gU291cmNlcyAqLywKIAkJCQkwRkY0Mjc0MDE1OEVCRThCMDA0Q0I5
RkYgLyogdWRpczg2X2RlY29kZS5jIGluIFNvdXJjZXMgKi8sCisJCQkJMEYyNUYxQUYxODE2MzVG
MzAwNTIyRjM5IC8qIEZUTElubGluZUNhY2hlU2l6ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkw
RkY0Mjc0MzE1OEVCRTkxMDA0Q0I5RkYgLyogdWRpczg2X2lucHV0LmMgaW4gU291cmNlcyAqLywK
IAkJCQkwRkY0Mjc0RDE1OEVCRkU2MDA0Q0I5RkYgLyogdWRpczg2X2l0YWJfaG9sZGVyLmMgaW4g
U291cmNlcyAqLywKIAkJCQkwRkY0Mjc0NTE1OEVCRTkxMDA0Q0I5RkYgLyogdWRpczg2X3N5bi1h
dHQuYyBpbiBTb3VyY2VzICovLApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxl
ci9BYnN0cmFjdE1hY3JvQXNzZW1ibGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Fzc2VtYmxlci9BYnN0cmFjdE1hY3JvQXNzZW1ibGVyLmgJKHJldmlzaW9uIDE1Nzcw
NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQWJzdHJhY3RNYWNyb0Fzc2Vt
Ymxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC04MTgsMTQgKzgxOCwxNSBAQCBwdWJsaWM6CiAgICAg
ewogICAgICAgICBBc3NlbWJsZXJUeXBlOjpjYWNoZUZsdXNoKGNvZGUsIHNpemUpOwogICAgIH0K
KworICAgIEFzc2VtYmxlclR5cGUgbV9hc3NlbWJsZXI7CisgICAgCiBwcm90ZWN0ZWQ6CiAgICAg
QWJzdHJhY3RNYWNyb0Fzc2VtYmxlcigpCiAgICAgICAgIDogbV9yYW5kb21Tb3VyY2UoY3J5cHRv
Z3JhcGhpY2FsbHlSYW5kb21OdW1iZXIoKSkKICAgICB7CiAgICAgfQogCi0gICAgQXNzZW1ibGVy
VHlwZSBtX2Fzc2VtYmxlcjsKLSAgICAKICAgICB1aW50MzJfdCByYW5kb20oKQogICAgIHsKICAg
ICAgICAgcmV0dXJuIG1fcmFuZG9tU291cmNlLmdldFVpbnQzMigpOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9MaW5rQnVmZmVyLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0xpbmtCdWZmZXIuY3BwCShyZXZpc2lvbiAxNTc3
MDcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0xpbmtCdWZmZXIuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIsIDIw
MTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCkBAIC0zNyw3ICszNywxMSBAQCBMaW5rQnVmZmVyOjpDb2RlUmVmIExpbmtCdWZm
ZXI6OmZpbmFsaXplCiB7CiAgICAgcGVyZm9ybUZpbmFsaXphdGlvbigpOwogICAgIAotICAgIHJl
dHVybiBDb2RlUmVmKG1fZXhlY3V0YWJsZU1lbW9yeSk7CisgICAgQVNTRVJUKG1fZGlkQWxsb2Nh
dGUpOworICAgIGlmIChtX2V4ZWN1dGFibGVNZW1vcnkpCisgICAgICAgIHJldHVybiBDb2RlUmVm
KG1fZXhlY3V0YWJsZU1lbW9yeSk7CisgICAgCisgICAgcmV0dXJuIENvZGVSZWY6OmNyZWF0ZVNl
bGZNYW5hZ2VkQ29kZVJlZihNYWNyb0Fzc2VtYmxlckNvZGVQdHIobV9jb2RlKSk7CiB9CiAKIExp
bmtCdWZmZXI6OkNvZGVSZWYgTGlua0J1ZmZlcjo6ZmluYWxpemVDb2RlV2l0aERpc2Fzc2VtYmx5
KGNvbnN0IGNoYXIqIGZvcm1hdCwgLi4uKQpAQCAtMTUxLDYgKzE1NSwxNSBAQCB2b2lkIExpbmtC
dWZmZXI6OmxpbmtDb2RlKHZvaWQqIG93bmVyVUlECiAKIHZvaWQgTGlua0J1ZmZlcjo6YWxsb2Nh
dGUoc2l6ZV90IGluaXRpYWxTaXplLCB2b2lkKiBvd25lclVJRCwgSklUQ29tcGlsYXRpb25FZmZv
cnQgZWZmb3J0KQogeworICAgIGlmIChtX2NvZGUpIHsKKyAgICAgICAgaWYgKGluaXRpYWxTaXpl
ID4gbV9zaXplKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICAgICAgbV9kaWRB
bGxvY2F0ZSA9IHRydWU7CisgICAgICAgIG1fc2l6ZSA9IGluaXRpYWxTaXplOworICAgICAgICBy
ZXR1cm47CisgICAgfQorICAgIAogICAgIG1fZXhlY3V0YWJsZU1lbW9yeSA9IG1fdm0tPmV4ZWN1
dGFibGVBbGxvY2F0b3IuYWxsb2NhdGUoKm1fdm0sIGluaXRpYWxTaXplLCBvd25lclVJRCwgZWZm
b3J0KTsKICAgICBpZiAoIW1fZXhlY3V0YWJsZU1lbW9yeSkKICAgICAgICAgcmV0dXJuOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9MaW5rQnVmZmVyLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9MaW5rQnVmZmVyLmgJKHJldmlz
aW9uIDE1NzcwNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTGlua0J1ZmZl
ci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykg
MjAwOSwgMjAxMCwgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMDksIDIwMTAsIDIwMTIsIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC05NCw2ICs5NCwyMiBA
QCBwdWJsaWM6CiAgICAgICAgIGxpbmtDb2RlKG93bmVyVUlELCBlZmZvcnQpOwogICAgIH0KIAor
ICAgIExpbmtCdWZmZXIoVk0mIHZtLCBNYWNyb0Fzc2VtYmxlciogbWFzbSwgdm9pZCogY29kZSwg
c2l6ZV90IHNpemUpCisgICAgICAgIDogbV9zaXplKHNpemUpCisjaWYgRU5BQkxFKEJSQU5DSF9D
T01QQUNUSU9OKQorICAgICAgICAsIG1faW5pdGlhbFNpemUoMCkKKyNlbmRpZgorICAgICAgICAs
IG1fZGlkQWxsb2NhdGUoZmFsc2UpCisgICAgICAgICwgbV9jb2RlKGNvZGUpCisgICAgICAgICwg
bV9hc3NlbWJsZXIobWFzbSkKKyAgICAgICAgLCBtX3ZtKCZ2bSkKKyNpZm5kZWYgTkRFQlVHCisg
ICAgICAgICwgbV9jb21wbGV0ZWQoZmFsc2UpCisjZW5kaWYKKyAgICB7CisgICAgICAgIGxpbmtD
b2RlKDAsIEpJVENvbXBpbGF0aW9uQ2FuRmFpbCk7CisgICAgfQorCiAgICAgfkxpbmtCdWZmZXIo
KQogICAgIHsKICAgICB9CkBAIC0xMTcsNiArMTMzLDExIEBAIHB1YmxpYzoKICAgICAgICAgTWFj
cm9Bc3NlbWJsZXI6OmxpbmtDYWxsKGNvZGUoKSwgY2FsbCwgZnVuY3Rpb24pOwogICAgIH0KICAg
ICAKKyAgICB2b2lkIGxpbmsoQ2FsbCBjYWxsLCBDb2RlTG9jYXRpb25MYWJlbCBsYWJlbCkKKyAg
ICB7CisgICAgICAgIGxpbmsoY2FsbCwgRnVuY3Rpb25QdHIobGFiZWwuZXhlY3V0YWJsZUFkZHJl
c3MoKSkpOworICAgIH0KKyAgICAKICAgICB2b2lkIGxpbmsoSnVtcCBqdW1wLCBDb2RlTG9jYXRp
b25MYWJlbCBsYWJlbCkKICAgICB7CiAgICAgICAgIGp1bXAubV9sYWJlbCA9IGFwcGx5T2Zmc2V0
KGp1bXAubV9sYWJlbCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEFiYnJl
dmlhdGlvbnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEFi
YnJldmlhdGlvbnMuaAkocmV2aXNpb24gMTU3NzA3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Z0bC9GVExBYmJyZXZpYXRpb25zLmgJKHdvcmtpbmcgY29weSkKQEAgLTE0NSw2ICsxNDUsNyBA
QCBlbnVtIEJpdEV4dGVuc2lvbiB7IFplcm9FeHRlbmQsIFNpZ25FeHRlCiBzdGF0aWMgaW5saW5l
IExWYWx1ZSBjb25zdEludChMVHlwZSB0eXBlLCB1bnNpZ25lZCBsb25nIGxvbmcgdmFsdWUsIEJp
dEV4dGVuc2lvbiBleHRlbnNpb24gPSBaZXJvRXh0ZW5kKSB7IHJldHVybiBsbHZtLT5Db25zdElu
dCh0eXBlLCB2YWx1ZSwgZXh0ZW5zaW9uID09IFNpZ25FeHRlbmQpOyB9CiBzdGF0aWMgaW5saW5l
IExWYWx1ZSBjb25zdFJlYWwoTFR5cGUgdHlwZSwgZG91YmxlIHZhbHVlKSB7IHJldHVybiBsbHZt
LT5Db25zdFJlYWwodHlwZSwgdmFsdWUpOyB9CiBzdGF0aWMgaW5saW5lIExWYWx1ZSBjb25zdElu
dFRvUHRyKExWYWx1ZSB2YWx1ZSwgTFR5cGUgdHlwZSkgeyByZXR1cm4gbGx2bS0+Q29uc3RJbnRU
b1B0cih2YWx1ZSwgdHlwZSk7IH0KK3N0YXRpYyBpbmxpbmUgTFZhbHVlIGNvbnN0TnVsbChMVHlw
ZSB0eXBlKSB7IHJldHVybiBsbHZtLT5Db25zdE51bGwodHlwZSk7IH0KIHN0YXRpYyBpbmxpbmUg
TFZhbHVlIGNvbnN0Qml0Q2FzdChMVmFsdWUgdmFsdWUsIExUeXBlIHR5cGUpIHsgcmV0dXJuIGxs
dm0tPkNvbnN0Qml0Q2FzdCh2YWx1ZSwgdHlwZSk7IH0KIAogc3RhdGljIGlubGluZSBMQmFzaWNC
bG9jayBhcHBlbmRCYXNpY0Jsb2NrKExDb250ZXh0IGNvbnRleHQsIExWYWx1ZSBmdW5jdGlvbiwg
Y29uc3QgY2hhciogbmFtZSA9ICIiKSB7IHJldHVybiBsbHZtLT5BcHBlbmRCYXNpY0Jsb2NrSW5D
b250ZXh0KGNvbnRleHQsIGZ1bmN0aW9uLCBuYW1lKTsgfQpAQCAtMjQ4LDYgKzI0OSwxNiBAQCBz
dGF0aWMgaW5saW5lIExWYWx1ZSBidWlsZENhbGwoTEJ1aWxkZXIgCiAgICAgTFZhbHVlIGFyZ3Nb
XSA9IHsgYXJnMSwgYXJnMiwgYXJnMywgYXJnNCB9OwogICAgIHJldHVybiBidWlsZENhbGwoYnVp
bGRlciwgZnVuY3Rpb24sIGFyZ3MsIDQpOwogfQorc3RhdGljIGlubGluZSBMVmFsdWUgYnVpbGRD
YWxsKExCdWlsZGVyIGJ1aWxkZXIsIExWYWx1ZSBmdW5jdGlvbiwgTFZhbHVlIGFyZzEsIExWYWx1
ZSBhcmcyLCBMVmFsdWUgYXJnMywgTFZhbHVlIGFyZzQsIExWYWx1ZSBhcmc1KQoreworICAgIExW
YWx1ZSBhcmdzW10gPSB7IGFyZzEsIGFyZzIsIGFyZzMsIGFyZzQsIGFyZzUgfTsKKyAgICByZXR1
cm4gYnVpbGRDYWxsKGJ1aWxkZXIsIGZ1bmN0aW9uLCBhcmdzLCA1KTsKK30KK3N0YXRpYyBpbmxp
bmUgTFZhbHVlIGJ1aWxkQ2FsbChMQnVpbGRlciBidWlsZGVyLCBMVmFsdWUgZnVuY3Rpb24sIExW
YWx1ZSBhcmcxLCBMVmFsdWUgYXJnMiwgTFZhbHVlIGFyZzMsIExWYWx1ZSBhcmc0LCBMVmFsdWUg
YXJnNSwgTFZhbHVlIGFyZzYpCit7CisgICAgTFZhbHVlIGFyZ3NbXSA9IHsgYXJnMSwgYXJnMiwg
YXJnMywgYXJnNCwgYXJnNSwgYXJnNiB9OworICAgIHJldHVybiBidWlsZENhbGwoYnVpbGRlciwg
ZnVuY3Rpb24sIGFyZ3MsIDYpOworfQogZW51bSBUYWlsQ2FsbE1vZGUgeyBJc05vdFRhaWxDYWxs
LCBJc1RhaWxDYWxsIH07CiBzdGF0aWMgaW5saW5lIHZvaWQgc2V0VGFpbENhbGwoTFZhbHVlIGNh
bGwsIFRhaWxDYWxsTW9kZSBtb2RlKSB7IGxsdm0tPlNldFRhaWxDYWxsKGNhbGwsIG1vZGUgPT0g
SXNUYWlsQ2FsbCk7IH0KIHN0YXRpYyBpbmxpbmUgTFZhbHVlIGJ1aWxkRXh0cmFjdFZhbHVlKExC
dWlsZGVyIGJ1aWxkZXIsIExWYWx1ZSBhZ2dWYWwsIHVuc2lnbmVkIGluZGV4KSB7IHJldHVybiBs
bHZtLT5CdWlsZEV4dHJhY3RWYWx1ZShidWlsZGVyLCBhZ2dWYWwsIGluZGV4LCAiIik7IH0KSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ2FwYWJpbGl0aWVzLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENhcGFiaWxpdGllcy5jcHAJKHJl
dmlzaW9uIDE1NzcwNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ2FwYWJpbGl0
aWVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTQsMTAgKzk0LDEzIEBAIGlubGluZSBDYXBhYmls
aXR5TGV2ZWwgY2FuQ29tcGlsZShOb2RlKiAKICAgICBjYXNlIEdldENsb3N1cmVSZWdpc3RlcnM6
CiAgICAgY2FzZSBHZXRDbG9zdXJlVmFyOgogICAgIGNhc2UgUHV0Q2xvc3VyZVZhcjoKLSAgICBj
YXNlIEdldEJ5SWQ6CiAgICAgY2FzZSBJbnQ1MlRvVmFsdWU6CiAgICAgICAgIC8vIFRoZXNlIGFy
ZSBPSy4KICAgICAgICAgYnJlYWs7CisgICAgY2FzZSBHZXRCeUlkOgorICAgICAgICBpZiAobm9k
ZS0+Y2hpbGQxKCkudXNlS2luZCgpID09IENlbGxVc2UpCisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgcmV0dXJuIENhbm5vdENvbXBpbGU7CiAgICAgY2FzZSBHZXRJbmRleGVkUHJvcGVydHlT
dG9yYWdlOgogICAgICAgICBpZiAoaXNUeXBlZFZpZXcobm9kZS0+YXJyYXlNb2RlKCkudHlwZWRB
cnJheVR5cGUoKSkpCiAgICAgICAgICAgICBicmVhazsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9mdGwvRlRMQ29tcGlsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2Z0bC9GVExDb21waWxlLmNwcAkocmV2aXNpb24gMTU3NzA3KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Z0bC9GVExDb21waWxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQsNiArMzQs
NyBAQAogI2luY2x1ZGUgIkRhdGFWaWV3LmgiCiAjaW5jbHVkZSAiRGlzYXNzZW1ibGVyLmgiCiAj
aW5jbHVkZSAiRlRMRXhpdFRodW5rR2VuZXJhdG9yLmgiCisjaW5jbHVkZSAiRlRMSW5saW5lQ2Fj
aGVTaXplLmgiCiAjaW5jbHVkZSAiRlRMSklUQ29kZS5oIgogI2luY2x1ZGUgIkZUTFRodW5rcy5o
IgogI2luY2x1ZGUgIkpJVFN0dWJzLmgiCkBAIC0xMTAsNiArMTExLDcgQEAgc3RhdGljIHZvaWQg
Zml4RnVuY3Rpb25CYXNlZE9uU3RhY2tNYXBzKAogICAgIFN0YWNrTWFwczo6UmVjb3JkTWFwJiBy
ZWNvcmRNYXApCiB7CiAgICAgVk0mIHZtID0gc3RhdGUuZ3JhcGgubV92bTsKKyAgICBTdGFja01h
cHMgc3RhY2ttYXBzID0gaml0Q29kZS0+c3RhY2ttYXBzOwogCiAgICAgRXhpdFRodW5rR2VuZXJh
dG9yIGV4aXRUaHVua0dlbmVyYXRvcihzdGF0ZSk7CiAgICAgZXhpdFRodW5rR2VuZXJhdG9yLmVt
aXRUaHVua3MoKTsKQEAgLTEzNiw2ICsxMzgsNzggQEAgc3RhdGljIHZvaWQgZml4RnVuY3Rpb25C
YXNlZE9uU3RhY2tNYXBzKAogICAgICAgICBzdGF0ZS5maW5hbGl6ZXItPmV4aXRUaHVua3NMaW5r
QnVmZmVyID0gbGlua0J1ZmZlci5yZWxlYXNlKCk7CiAgICAgfQogCisgICAgaWYgKCFzdGF0ZS5n
ZXRCeUlkcy5pc0VtcHR5KCkpIHsKKyAgICAgICAgQ0NhbGxIZWxwZXJzIHNsb3dQYXRoSklUKCZ2
bSwgY29kZUJsb2NrKTsKKyAgICAgICAgCisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IHN0YXRl
LmdldEJ5SWRzLnNpemUoKTsgaS0tOykgeworICAgICAgICAgICAgR2V0QnlJZERlc2NyaXB0b3Im
IGdldEJ5SWQgPSBzdGF0ZS5nZXRCeUlkc1tpXTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAg
U3RhY2tNYXBzOjpSZWNvcmRNYXA6Oml0ZXJhdG9yIGl0ZXIgPSByZWNvcmRNYXAuZmluZChnZXRC
eUlkLnN0YWNrbWFwSUQoKSk7CisgICAgICAgICAgICBpZiAoaXRlciA9PSByZWNvcmRNYXAuZW5k
KCkpIHsKKyAgICAgICAgICAgICAgICAvLyBJdCB3YXMgb3B0aW1pemVkIG91dC4KKyAgICAgICAg
ICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAg
ICAgU3RhY2tNYXBzOjpSZWNvcmQmIHJlY29yZCA9IGl0ZXItPnZhbHVlOworCisgICAgICAgICAg
ICAvLyBGSVhNRTogTExWTSBzaG91bGQgdGVsbCB1cyB3aGljaCByZWdpc3RlcnMgYXJlIGxpdmUu
CisgICAgICAgICAgICBSZWdpc3RlclNldCB1c2VkUmVnaXN0ZXJzID0gUmVnaXN0ZXJTZXQ6OmFs
bFJlZ2lzdGVycygpOworICAgICAgICAgICAgCisgICAgICAgICAgICBHUFJSZWcgY2FsbEZyYW1l
UmVnaXN0ZXIgPSByZWNvcmQubG9jYXRpb25zWzBdLmRpcmVjdEdQUihzdGFja21hcHMpOworICAg
ICAgICAgICAgR1BSUmVnIGJhc2UgPSByZWNvcmQubG9jYXRpb25zWzFdLmRpcmVjdEdQUihzdGFj
a21hcHMpOworICAgICAgICAgICAgR1BSUmVnIHJlc3VsdCA9IEdQUkluZm86OnJldHVyblZhbHVl
R1BSOworICAgICAgICAgICAgCisgICAgICAgICAgICBKSVRHZXRCeUlkR2VuZXJhdG9yIGdlbigK
KyAgICAgICAgICAgICAgICBjb2RlQmxvY2ssIGdldEJ5SWQuY29kZU9yaWdpbigpLCB1c2VkUmVn
aXN0ZXJzLCBKU1ZhbHVlUmVncyhiYXNlKSwKKyAgICAgICAgICAgICAgICBKU1ZhbHVlUmVncyhy
ZXN1bHQpLCBmYWxzZSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVy
OjpMYWJlbCBiZWdpbiA9IHNsb3dQYXRoSklULmxhYmVsKCk7CisgICAgICAgICAgICAKKyAgICAg
ICAgICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKAorICAgICAg
ICAgICAgICAgIHN0YXRlLCB1c2VkUmVnaXN0ZXJzLCBzbG93UGF0aEpJVCwgb3BlcmF0aW9uR2V0
QnlJZE9wdGltaXplLCByZXN1bHQsCisgICAgICAgICAgICAgICAgY2FsbEZyYW1lUmVnaXN0ZXIs
IGdlbi5zdHViSW5mbygpLCBiYXNlLCBnZXRCeUlkLnVpZCgpKTsKKyAgICAgICAgICAgIAorICAg
ICAgICAgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChiZWdpbiwgY2FsbCk7CisgICAgICAgICAg
ICAKKyAgICAgICAgICAgIGdldEJ5SWQubV9zbG93UGF0aERvbmUgPSBzbG93UGF0aEpJVC5qdW1w
KCk7CisgICAgICAgICAgICBnZXRCeUlkLm1fZ2VuZXJhdG9yID0gZ2VuOworICAgICAgICB9Cisg
ICAgICAgIAorICAgICAgICBzdGF0ZS5maW5hbGl6ZXItPnNpZGVDb2RlTGlua0J1ZmZlciA9IGFk
b3B0UHRyKAorICAgICAgICAgICAgbmV3IExpbmtCdWZmZXIodm0sICZzbG93UGF0aEpJVCwgY29k
ZUJsb2NrLCBKSVRDb21waWxhdGlvbk11c3RTdWNjZWVkKSk7CisgICAgICAgIAorICAgICAgICBm
b3IgKHVuc2lnbmVkIGkgPSBzdGF0ZS5nZXRCeUlkcy5zaXplKCk7IGktLTspIHsKKyAgICAgICAg
ICAgIEdldEJ5SWREZXNjcmlwdG9yJiBnZXRCeUlkID0gc3RhdGUuZ2V0QnlJZHNbaV07CisgICAg
ICAgICAgICAKKyAgICAgICAgICAgIFN0YWNrTWFwczo6UmVjb3JkTWFwOjppdGVyYXRvciBpdGVy
ID0gcmVjb3JkTWFwLmZpbmQoZ2V0QnlJZC5zdGFja21hcElEKCkpOworICAgICAgICAgICAgaWYg
KGl0ZXIgPT0gcmVjb3JkTWFwLmVuZCgpKSB7CisgICAgICAgICAgICAgICAgLy8gSXQgd2FzIG9w
dGltaXplZCBvdXQuCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAKKyAgICAgICAgICAgIFN0YWNrTWFwczo6UmVjb3JkJiByZWNvcmQgPSBpdGVy
LT52YWx1ZTsKKworICAgICAgICAgICAgQ0NhbGxIZWxwZXJzIGZhc3RQYXRoSklUKCZ2bSwgY29k
ZUJsb2NrKTsKKyAgICAgICAgICAgIGdldEJ5SWQubV9nZW5lcmF0b3IuZ2VuZXJhdGVGYXN0UGF0
aChmYXN0UGF0aEpJVCk7CisKKyAgICAgICAgICAgIGNoYXIqIHN0YXJ0T2ZJQyA9CisgICAgICAg
ICAgICAgICAgYml0d2lzZV9jYXN0PGNoYXIqPihnZW5lcmF0ZWRGdW5jdGlvbikgKyByZWNvcmQu
aW5zdHJ1Y3Rpb25PZmZzZXQ7CisgICAgICAgICAgICBzaXplX3Qgc2l6ZU9mSUMgPSBzaXplT2ZH
ZXRCeUlkKCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIExpbmtCdWZmZXIgbGlua0J1ZmZl
cih2bSwgJmZhc3RQYXRoSklULCBzdGFydE9mSUMsIHNpemVPZklDKTsKKyAgICAgICAgICAgIC8v
IE5vdGU6IHdlIGNvdWxkIGhhbmRsZSB0aGUgIWlzVmFsaWQoKSBjYXNlLiBXZSBqdXN0IGRvbid0
IGFwcGVhciB0byBoYXZlIGEKKyAgICAgICAgICAgIC8vIHJlYXNvbiB0byBkbyBzbywgeWV0Lgor
ICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQobGlua0J1ZmZlci5pc1ZhbGlkKCkpOworICAgICAg
ICAgICAgCisgICAgICAgICAgICBzdGF0ZS5maW5hbGl6ZXItPnNpZGVDb2RlTGlua0J1ZmZlci0+
bGluaygKKyAgICAgICAgICAgICAgICBnZXRCeUlkLm1fc2xvd1BhdGhEb25lLCBDb2RlTG9jYXRp
b25MYWJlbChzdGFydE9mSUMgKyBzaXplT2ZJQykpOworICAgICAgICAgICAgCisgICAgICAgICAg
ICBnZXRCeUlkLm1fZ2VuZXJhdG9yLmZpbmFsaXplKGxpbmtCdWZmZXIsICpzdGF0ZS5maW5hbGl6
ZXItPnNpZGVDb2RlTGlua0J1ZmZlcik7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGxpbmtC
dWZmZXIuZmluYWxpemVDb2RlV2l0aG91dERpc2Fzc2VtYmx5KCk7CisgICAgICAgIH0KKyAgICB9
CisgICAgCiAgICAgUmVwYXRjaEJ1ZmZlciByZXBhdGNoQnVmZmVyKGNvZGVCbG9jayk7CiAgICAg
CiAgICAgZm9yICh1bnNpZ25lZCBleGl0SW5kZXggPSBqaXRDb2RlLT5vc3JFeGl0LnNpemUoKTsg
ZXhpdEluZGV4LS07KSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTElubGlu
ZUNhY2hlRGVzY3JpcHRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9m
dGwvRlRMSW5saW5lQ2FjaGVEZXNjcmlwdG9yLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZnRsL0ZUTElubGluZUNhY2hlRGVzY3JpcHRvci5oCSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsNzQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4g
CisgKi8KKworI2lmbmRlZiBGVExJbmxpbmVDYWNoZURlc2NyaXB0b3JfaAorI2RlZmluZSBGVExJ
bmxpbmVDYWNoZURlc2NyaXB0b3JfaAorCisjaWYgRU5BQkxFKEZUTF9KSVQpCisKKyNpbmNsdWRl
ICJDb2RlT3JpZ2luLmgiCisjaW5jbHVkZSAiSklUSW5saW5lQ2FjaGVHZW5lcmF0b3IuaCIKKyNp
bmNsdWRlICJNYWNyb0Fzc2VtYmxlci5oIgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0ltcGwu
aD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBGVEwgeworCitjbGFzcyBJbmxpbmVDYWNo
ZURlc2NyaXB0b3IgeworcHVibGljOgorICAgIElubGluZUNhY2hlRGVzY3JpcHRvcigpIHsgfQor
ICAgIAorICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIG1fc2xvd1BhdGhEb25lOworfTsKKworY2xh
c3MgR2V0QnlJZERlc2NyaXB0b3IgOiBwdWJsaWMgSW5saW5lQ2FjaGVEZXNjcmlwdG9yIHsKK3B1
YmxpYzoKKyAgICBHZXRCeUlkRGVzY3JpcHRvcigpIHsgfQorICAgIAorICAgIEdldEJ5SWREZXNj
cmlwdG9yKHVuc2lnbmVkIHN0YWNrbWFwSUQsIENvZGVPcmlnaW4gY29kZU9yaWdpbiwgU3RyaW5n
SW1wbCogdWlkKQorICAgICAgICA6IG1fc3RhY2ttYXBJRChzdGFja21hcElEKQorICAgICAgICAs
IG1fY29kZU9yaWdpbihjb2RlT3JpZ2luKQorICAgICAgICAsIG1fdWlkKHVpZCkKKyAgICB7Cisg
ICAgfQorICAgIAorICAgIHVuc2lnbmVkIHN0YWNrbWFwSUQoKSBjb25zdCB7IHJldHVybiBtX3N0
YWNrbWFwSUQ7IH0KKyAgICBDb2RlT3JpZ2luIGNvZGVPcmlnaW4oKSBjb25zdCB7IHJldHVybiBt
X2NvZGVPcmlnaW47IH0KKyAgICBTdHJpbmdJbXBsKiB1aWQoKSBjb25zdCB7IHJldHVybiBtX3Vp
ZDsgfQorICAgIAorcHJpdmF0ZToKKyAgICB1bnNpZ25lZCBtX3N0YWNrbWFwSUQ7CisgICAgQ29k
ZU9yaWdpbiBtX2NvZGVPcmlnaW47CisgICAgU3RyaW5nSW1wbCogbV91aWQ7CisKK3B1YmxpYzoK
KyAgICBKSVRHZXRCeUlkR2VuZXJhdG9yIG1fZ2VuZXJhdG9yOworfTsKKworfSB9IC8vIG5hbWVz
cGFjZSBKU0M6OkZUTAorCisjZW5kaWYgLy8gRU5BQkxFKEZUTF9KSVQpCisKKyNlbmRpZiAvLyBG
VExJbmxpbmVDYWNoZURlc2NyaXB0b3JfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZnRsL0ZUTElubGluZUNhY2hlU2l6ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Z0bC9GVExJbmxpbmVDYWNoZVNpemUuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2Z0bC9GVExJbmxpbmVDYWNoZVNpemUuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsNzIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4g
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkZUTElubGluZUNhY2hlU2l6
ZS5oIgorCisjaWYgRU5BQkxFKEZUTF9KSVQpCisKKyNpbmNsdWRlICJKSVRJbmxpbmVDYWNoZUdl
bmVyYXRvci5oIgorI2luY2x1ZGUgIk1hY3JvQXNzZW1ibGVyLmgiCisKK25hbWVzcGFjZSBKU0Mg
eyBuYW1lc3BhY2UgRlRMIHsKKworc3RhdGljIHNpemVfdCBzX3NpemVPZkdldEJ5SWQ7CitzdGF0
aWMgc2l6ZV90IHNfc2l6ZU9mUHV0QnlJZDsKKworc2l6ZV90IHNpemVPZkdldEJ5SWQoKQorewor
ICAgIGlmIChzX3NpemVPZkdldEJ5SWQpCisgICAgICAgIHJldHVybiBzX3NpemVPZkdldEJ5SWQ7
CisgICAgCisgICAgTWFjcm9Bc3NlbWJsZXIgaml0OworICAgIAorICAgIEpJVEdldEJ5SWRHZW5l
cmF0b3IgZ2VuZXJhdG9yKAorICAgICAgICAwLCBDb2RlT3JpZ2luKCksIFJlZ2lzdGVyU2V0KCks
IEpTVmFsdWVSZWdzKEdQUkluZm86OnJlZ1Q2KSwgSlNWYWx1ZVJlZ3MoR1BSSW5mbzo6cmVnVDcp
LAorICAgICAgICBmYWxzZSk7CisgICAgZ2VuZXJhdG9yLmdlbmVyYXRlRmFzdFBhdGgoaml0KTsK
KyAgICAKKyAgICByZXR1cm4gc19zaXplT2ZHZXRCeUlkID0gaml0Lm1fYXNzZW1ibGVyLmNvZGVT
aXplKCk7Cit9CisKK3NpemVfdCBzaXplT2ZQdXRCeUlkKCkKK3sKKyAgICBpZiAoc19zaXplT2ZQ
dXRCeUlkKQorICAgICAgICByZXR1cm4gc19zaXplT2ZQdXRCeUlkOworICAgIAorICAgIE1hY3Jv
QXNzZW1ibGVyIGppdDsKKyAgICAKKyAgICBKSVRQdXRCeUlkR2VuZXJhdG9yIGdlbmVyYXRvcigK
KyAgICAgICAgMCwgQ29kZU9yaWdpbigpLCBSZWdpc3RlclNldCgpLCBKU1ZhbHVlUmVncyhHUFJJ
bmZvOjpyZWdUNiksIEpTVmFsdWVSZWdzKEdQUkluZm86OnJlZ1Q3KSwKKyAgICAgICAgR1BSSW5m
bzo6cmVnVDgsIGZhbHNlLCBOb3RTdHJpY3RNb2RlLCBOb3REaXJlY3QpOworICAgIGdlbmVyYXRv
ci5nZW5lcmF0ZUZhc3RQYXRoKGppdCk7CisgICAgCisgICAgcmV0dXJuIHNfc2l6ZU9mUHV0QnlJ
ZCA9IGppdC5tX2Fzc2VtYmxlci5jb2RlU2l6ZSgpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpT
Qzo6RlRMCisKKyNlbmRpZiAvLyBFTkFCTEUoRlRMX0pJVCkKKwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Z0bC9GVExJbmxpbmVDYWNoZVNpemUuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZnRsL0ZUTElubGluZUNhY2hlU2l6ZS5oCShyZXZpc2lvbiAwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExJbmxpbmVDYWNoZVNpemUuaAkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDQxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAorICovCisKKyNpZm5kZWYgRlRMSW5saW5lQ2FjaGVTaXplX2gKKyNkZWZpbmUgRlRMSW5s
aW5lQ2FjaGVTaXplX2gKKworI2lmIEVOQUJMRShGVExfSklUKQorCituYW1lc3BhY2UgSlNDIHsg
bmFtZXNwYWNlIEZUTCB7CisKK3NpemVfdCBzaXplT2ZHZXRCeUlkKCk7CitzaXplX3Qgc2l6ZU9m
UHV0QnlJZCgpOworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6RlRMCisKKyNlbmRpZiAvLyBFTkFC
TEUoRlRMX0pJVCkKKworI2VuZGlmIC8vIEZUTElubGluZUNhY2hlU2l6ZV9oCisKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSW50cmluc2ljUmVwb3NpdG9yeS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSW50cmluc2ljUmVwb3NpdG9yeS5o
CShyZXZpc2lvbiAxNTc3MDcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEludHJp
bnNpY1JlcG9zaXRvcnkuaAkod29ya2luZyBjb3B5KQpAQCAtNDQsNiArNDQsNyBAQCBuYW1lc3Bh
Y2UgSlNDIHsgbmFtZXNwYWNlIEZUTCB7CiAgICAgbWFjcm8obXVsV2l0aE92ZXJmbG93NjQsICJs
bHZtLnNtdWwud2l0aC5vdmVyZmxvdy5pNjQiLCBmdW5jdGlvblR5cGUoc3RydWN0VHlwZShtX2Nv
bnRleHQsIGludDY0LCBib29sZWFuKSwgaW50NjQsIGludDY0KSkgXAogICAgIG1hY3JvKHN1Yldp
dGhPdmVyZmxvdzMyLCAibGx2bS5zc3ViLndpdGgub3ZlcmZsb3cuaTMyIiwgZnVuY3Rpb25UeXBl
KHN0cnVjdFR5cGUobV9jb250ZXh0LCBpbnQzMiwgYm9vbGVhbiksIGludDMyLCBpbnQzMikpIFwK
ICAgICBtYWNybyhzdWJXaXRoT3ZlcmZsb3c2NCwgImxsdm0uc3N1Yi53aXRoLm92ZXJmbG93Lmk2
NCIsIGZ1bmN0aW9uVHlwZShzdHJ1Y3RUeXBlKG1fY29udGV4dCwgaW50NjQsIGJvb2xlYW4pLCBp
bnQ2NCwgaW50NjQpKSBcCisgICAgbWFjcm8od2Via2l0UGF0Y2hwb2ludCwgImxsdm0ud2Via2l0
LnBhdGNocG9pbnQiLCBmdW5jdGlvblR5cGUodm9pZFR5cGUsIGludDMyLCBpbnQzMiwgVmFyaWFk
aWMpKSBcCiAgICAgbWFjcm8od2Via2l0U3RhY2ttYXAsICJsbHZtLndlYmtpdC5zdGFja21hcCIs
IGZ1bmN0aW9uVHlwZSh2b2lkVHlwZSwgaW50MzIsIGludDMyLCBWYXJpYWRpYykpIFwKICAgICBt
YWNybyh0cmFwLCAibGx2bS50cmFwIiwgZnVuY3Rpb25UeXBlKHZvaWRUeXBlKSkgXAogICAgIG1h
Y3JvKG9zckV4aXQsICJ3ZWJraXRfb3NyX2V4aXQiLCBmdW5jdGlvblR5cGUodm9pZFR5cGUsIGJv
b2xlYW4sIGludDMyLCBWYXJpYWRpYykpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRs
L0ZUTEpJVEZpbmFsaXplci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Z0bC9GVExKSVRGaW5hbGl6ZXIuY3BwCShyZXZpc2lvbiAxNTc3MDcpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZnRsL0ZUTEpJVEZpbmFsaXplci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg0
LDYgKzg0LDI0IEBAIGJvb2wgSklURmluYWxpemVyOjpmaW5hbGl6ZUZ1bmN0aW9uKCkKICAgICAg
ICAgICAgICAgICAoIkZUTCBleGl0IHRodW5rcyBmb3IgJXMiLCB0b0NTdHJpbmcoQ29kZUJsb2Nr
V2l0aEpJVFR5cGUobV9wbGFuLmNvZGVCbG9jay5nZXQoKSwgSklUQ29kZTo6RlRMSklUKSkuZGF0
YSgpKSkpOwogICAgIH0gLy8gZWxzZSB0aGlzIGZ1bmN0aW9uIGhhZCBubyBPU1IgZXhpdHMsIHNv
IG5vIGV4aXQgdGh1bmtzLgogICAgIAorICAgIGlmIChzaWRlQ29kZUxpbmtCdWZmZXIpIHsKKyAg
ICAgICAgLy8gU2lkZSBjb2RlIGlzIGZvciBzcGVjaWFsIHNsb3cgcGF0aHMgdGhhdCB3ZSBnZW5l
cmF0ZSBvdXJzZWx2ZXMsIGxpa2UgZm9yIGlubGluZQorICAgICAgICAvLyBjYWNoZXMuCisgICAg
ICAgIAorICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBzbG93UGF0aENhbGxzLnNpemUoKTsgaS0t
OykgeworICAgICAgICAgICAgU2xvd1BhdGhDYWxsJiBjYWxsID0gc2xvd1BhdGhDYWxsc1tpXTsK
KyAgICAgICAgICAgIHNpZGVDb2RlTGlua0J1ZmZlci0+bGluaygKKyAgICAgICAgICAgICAgICBj
YWxsLmNhbGwoKSwKKyAgICAgICAgICAgICAgICBDb2RlTG9jYXRpb25MYWJlbChtX3BsYW4udm0u
ZnRsVGh1bmtzLT5nZXRTbG93UGF0aENhbGxUaHVuayhtX3BsYW4udm0sIGNhbGwua2V5KCkpLmNv
ZGUoKSkpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBqaXRDb2RlLT5hZGRIYW5kbGUo
RklOQUxJWkVfREZHX0NPREUoCisgICAgICAgICAgICAqc2lkZUNvZGVMaW5rQnVmZmVyLAorICAg
ICAgICAgICAgKCJGVEwgc2lkZSBjb2RlIGZvciAlcyIsCisgICAgICAgICAgICAgICAgdG9DU3Ry
aW5nKENvZGVCbG9ja1dpdGhKSVRUeXBlKG1fcGxhbi5jb2RlQmxvY2suZ2V0KCksIEpJVENvZGU6
OkZUTEpJVCkpLmRhdGEoKSkpCisgICAgICAgICAgICAuZXhlY3V0YWJsZU1lbW9yeSgpKTsKKyAg
ICB9CisgICAgCiAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIHdpdGhBcml0eUNoZWNrOwogICAg
IGlmIChhcml0eUNoZWNrLmlzU2V0KCkpCiAgICAgICAgIHdpdGhBcml0eUNoZWNrID0gZW50cnlw
b2ludExpbmtCdWZmZXItPmxvY2F0aW9uT2YoYXJpdHlDaGVjayk7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZnRsL0ZUTEpJVEZpbmFsaXplci5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9mdGwvRlRMSklURmluYWxpemVyLmgJKHJldmlzaW9uIDE1NzcwNykKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSklURmluYWxpemVyLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTM0LDYgKzM0LDcgQEAKICNpbmNsdWRlICJGVExHZW5lcmF0ZWRGdW5jdGlvbi5oIgog
I2luY2x1ZGUgIkZUTEpJVENvZGUuaCIKICNpbmNsdWRlICJGVExPU1JFeGl0Q29tcGlsYXRpb25J
bmZvLmgiCisjaW5jbHVkZSAiRlRMU2xvd1BhdGhDYWxsLmgiCiAjaW5jbHVkZSAiTExWTUFQSS5o
IgogI2luY2x1ZGUgIkxpbmtCdWZmZXIuaCIKICNpbmNsdWRlICJNYWNyb0Fzc2VtYmxlci5oIgpA
QCAtNTAsNiArNTEsOCBAQCBwdWJsaWM6CiAKICAgICBPd25QdHI8TGlua0J1ZmZlcj4gZXhpdFRo
dW5rc0xpbmtCdWZmZXI7CiAgICAgT3duUHRyPExpbmtCdWZmZXI+IGVudHJ5cG9pbnRMaW5rQnVm
ZmVyOworICAgIE93blB0cjxMaW5rQnVmZmVyPiBzaWRlQ29kZUxpbmtCdWZmZXI7CisgICAgVmVj
dG9yPFNsb3dQYXRoQ2FsbD4gc2xvd1BhdGhDYWxsczsgLy8gQ2FsbHMgaW5zaWRlIHRoZSBzaWRl
IGNvZGUuCiAgICAgVmVjdG9yPE9TUkV4aXRDb21waWxhdGlvbkluZm8+IG9zckV4aXQ7CiAgICAg
TWFjcm9Bc3NlbWJsZXI6OkxhYmVsIGFyaXR5Q2hlY2s7CiAgICAgR2VuZXJhdGVkRnVuY3Rpb24g
ZnVuY3Rpb247CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvY2F0aW9uLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvY2F0aW9uLmNw
cAkocmV2aXNpb24gMTU3NzA3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb2Nh
dGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE4MCw2ICsxODAsMTIgQEAgdm9pZCBMb2NhdGlv
bjo6cmVzdG9yZUludG8oTWFjcm9Bc3NlbWJsZQogI2Vycm9yICJDUFUgYXJjaGl0ZWN0dXJlIG5v
dCBzdXBwb3J0ZWQuIgogI2VuZGlmIC8vIENQVSBjYXNlcyBmb3IgTG9jYXRpb24gbWV0aG9kcwog
CitHUFJSZWcgTG9jYXRpb246OmRpcmVjdEdQUigpIGNvbnN0Cit7CisgICAgQVNTRVJUKCFhZGRl
bmQoKSk7CisgICAgcmV0dXJuIGdwcigpOworfQorCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6RlRM
CiAKIG5hbWVzcGFjZSBXVEYgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExM
b2NhdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG9j
YXRpb24uaAkocmV2aXNpb24gMTU3NzA3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9G
VExMb2NhdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNTcsNiArMTU3LDcgQEAgcHVibGljOgog
ICAgIGJvb2wgaXNHUFIoKSBjb25zdDsKICAgICBib29sIGludm9sdmVzR1BSKCkgY29uc3Q7CiAg
ICAgR1BSUmVnIGdwcigpIGNvbnN0OworICAgIEdQUlJlZyBkaXJlY3RHUFIoKSBjb25zdDsgLy8g
R2V0IHRoZSBHUFIgYW5kIGFzc2VydCB0aGF0IHRoZXJlIGlzIG5vIGFkZGVuZC4KICAgICAKICAg
ICBib29sIGlzRlBSKCkgY29uc3Q7CiAgICAgRlBSUmVnIGZwcigpIGNvbnN0OwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvTExWTS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvTExWTS5jcHAJKHJldmlz
aW9uIDE1NzcwNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0xM
Vk0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw2ICszNSw3IEBACiAjaW5jbHVkZSAiRlRMRXhp
dFRodW5rR2VuZXJhdG9yLmgiCiAjaW5jbHVkZSAiRlRMRm9yT1NSRW50cnlKSVRDb2RlLmgiCiAj
aW5jbHVkZSAiRlRMRm9ybWF0dGVkVmFsdWUuaCIKKyNpbmNsdWRlICJGVExJbmxpbmVDYWNoZVNp
emUuaCIKICNpbmNsdWRlICJGVExMb3dlcmVkTm9kZVZhbHVlLmgiCiAjaW5jbHVkZSAiRlRMT3V0
cHV0LmgiCiAjaW5jbHVkZSAiRlRMVGh1bmtzLmgiCkBAIC0xMjIyLDIyICsxMjIzLDI5IEBAIHBy
aXZhdGU6CiAgICAgCiAgICAgdm9pZCBjb21waWxlR2V0QnlJZCgpCiAgICAgewotICAgICAgICBM
VmFsdWUgYmFzZSA9IDA7CisgICAgICAgIC8vIFVudHlwZWRVc2UgaXMgYSBiaXQgaGFyZGVyIHRv
IHJlYXNvbiBhYm91dCBhbmQgSSdtIG5vdCBzdXJlIGhvdyBiZXN0IHRvIGRvIGl0LCB5ZXQuCisg
ICAgICAgIC8vIEJhc2ljYWxseSB3ZSBuZWVkIHRvIGVtaXQgYSBjZWxsIGJyYW5jaCB0aGF0IHRh
a2VzIHlvdSB0byB0aGUgc2xvdyBwYXRoLCBidXQgdGhlIHNsb3cKKyAgICAgICAgLy8gcGF0aCBp
cyBnZW5lcmF0ZWQgYnkgdGhlIElDIGdlbmVyYXRvciBzbyB3ZSBjYW4ndCBqdW1wIHRvIGl0IGZy
b20gaGVyZS4gQW5kIHRoZSBJQworICAgICAgICAvLyBnZW5lcmF0b3IgY3VycmVudGx5IGRvZXNu
J3Qga25vdyBob3cgdG8gZW1pdCBzdWNoIGEgYnJhbmNoLiBTbywgZm9yIG5vdywgd2UganVzdAor
ICAgICAgICAvLyByZXN0cmljdCB0aGlzIHRvIENlbGxVc2UuCisgICAgICAgIEFTU0VSVChtX25v
ZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSA9PSBDZWxsVXNlKTsKIAotICAgICAgICBzd2l0Y2ggKG1f
bm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpKSB7Ci0gICAgICAgIGNhc2UgQ2VsbFVzZToKLSAgICAg
ICAgICAgIGJhc2UgPSBsb3dDZWxsKG1fbm9kZS0+Y2hpbGQxKCkpOwotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIGNhc2UgVW50eXBlZFVzZToKLSAgICAgICAgICAgIGJhc2UgPSBsb3dKU1Zh
bHVlKG1fbm9kZS0+Y2hpbGQxKCkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGRlZmF1
bHQ6Ci0gICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIExWYWx1ZSBiYXNlID0gbG93Q2VsbChtX25vZGUtPmNoaWxkMSgp
KTsKKyAgICAgICAgU3RyaW5nSW1wbCogdWlkID0gbV9ncmFwaC5pZGVudGlmaWVycygpW21fbm9k
ZS0+aWRlbnRpZmllck51bWJlcigpXTsKKworICAgICAgICBpZiAoIU9wdGlvbnM6OmZ0bElDVXNl
c1BhdGNocG9pbnQoKSkgeworICAgICAgICAgICAgc2V0SlNWYWx1ZSh2bUNhbGwobV9vdXQub3Bl
cmF0aW9uKG9wZXJhdGlvbkdldEJ5SWQpLCBtX2NhbGxGcmFtZSwgbV9vdXQuaW50UHRyWmVybywg
YmFzZSwgbV9vdXQuY29uc3RJbnRQdHIodWlkKSkpOworICAgICAgICAgICAgcmV0dXJuOwogICAg
ICAgICB9CisKKyAgICAgICAgLy8gQXJndW1lbnRzOiBpZCwgYnl0ZXMsIHRhcmdldCwgbnVtQXJn
cywgYXJncy4uLgorICAgICAgICB1bnNpZ25lZCBzdGFja21hcElEID0gbV9zdGFja21hcElEcysr
OworICAgICAgICBzZXRKU1ZhbHVlKG1fb3V0LmNhbGwoCisgICAgICAgICAgICBtX291dC53ZWJr
aXRQYXRjaHBvaW50SW50cmluc2ljKCksCisgICAgICAgICAgICBtX291dC5jb25zdEludDMyKHN0
YWNrbWFwSUQpLCBtX291dC5jb25zdEludDMyKHNpemVPZkdldEJ5SWQoKSksCisgICAgICAgICAg
ICBjb25zdE51bGwobV9vdXQucmVmOCksIG1fb3V0LmNvbnN0SW50MzIoMiksIG1fY2FsbEZyYW1l
LCBiYXNlKSk7CiAgICAgICAgIAotICAgICAgICBTdHJpbmdJbXBsKiB1aWQgPSBtX2dyYXBoLmlk
ZW50aWZpZXJzKClbbV9ub2RlLT5pZGVudGlmaWVyTnVtYmVyKCldOwotICAgICAgICBzZXRKU1Zh
bHVlKHZtQ2FsbChtX291dC5vcGVyYXRpb24ob3BlcmF0aW9uR2V0QnlJZCksIG1fY2FsbEZyYW1l
LCBtX291dC5pbnRQdHJaZXJvLCBiYXNlLCBtX291dC5jb25zdEludFB0cih1aWQpKSk7CisgICAg
ICAgIG1fZnRsU3RhdGUuZ2V0QnlJZHMuYXBwZW5kKEdldEJ5SWREZXNjcmlwdG9yKHN0YWNrbWFw
SUQsIG1fbm9kZS0+Y29kZU9yaWdpbiwgdWlkKSk7CiAgICAgfQogICAgIAogICAgIHZvaWQgY29t
cGlsZUdldEJ1dHRlcmZseSgpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE91
dHB1dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT3V0cHV0
LmgJKHJldmlzaW9uIDE1NzcwNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT3V0
cHV0LmgJKHdvcmtpbmcgY29weSkKQEAgLTM0OCw2ICszNDgsOCBAQCBwdWJsaWM6CiAgICAgTFZh
bHVlIGNhbGwoTFZhbHVlIGZ1bmN0aW9uLCBMVmFsdWUgYXJnMSwgTFZhbHVlIGFyZzIpIHsgcmV0
dXJuIGJ1aWxkQ2FsbChtX2J1aWxkZXIsIGZ1bmN0aW9uLCBhcmcxLCBhcmcyKTsgfQogICAgIExW
YWx1ZSBjYWxsKExWYWx1ZSBmdW5jdGlvbiwgTFZhbHVlIGFyZzEsIExWYWx1ZSBhcmcyLCBMVmFs
dWUgYXJnMykgeyByZXR1cm4gYnVpbGRDYWxsKG1fYnVpbGRlciwgZnVuY3Rpb24sIGFyZzEsIGFy
ZzIsIGFyZzMpOyB9CiAgICAgTFZhbHVlIGNhbGwoTFZhbHVlIGZ1bmN0aW9uLCBMVmFsdWUgYXJn
MSwgTFZhbHVlIGFyZzIsIExWYWx1ZSBhcmczLCBMVmFsdWUgYXJnNCkgeyByZXR1cm4gYnVpbGRD
YWxsKG1fYnVpbGRlciwgZnVuY3Rpb24sIGFyZzEsIGFyZzIsIGFyZzMsIGFyZzQpOyB9CisgICAg
TFZhbHVlIGNhbGwoTFZhbHVlIGZ1bmN0aW9uLCBMVmFsdWUgYXJnMSwgTFZhbHVlIGFyZzIsIExW
YWx1ZSBhcmczLCBMVmFsdWUgYXJnNCwgTFZhbHVlIGFyZzUpIHsgcmV0dXJuIGJ1aWxkQ2FsbCht
X2J1aWxkZXIsIGZ1bmN0aW9uLCBhcmcxLCBhcmcyLCBhcmczLCBhcmc0LCBhcmc1KTsgfQorICAg
IExWYWx1ZSBjYWxsKExWYWx1ZSBmdW5jdGlvbiwgTFZhbHVlIGFyZzEsIExWYWx1ZSBhcmcyLCBM
VmFsdWUgYXJnMywgTFZhbHVlIGFyZzQsIExWYWx1ZSBhcmc1LCBMVmFsdWUgYXJnNikgeyByZXR1
cm4gYnVpbGRDYWxsKG1fYnVpbGRlciwgZnVuY3Rpb24sIGFyZzEsIGFyZzIsIGFyZzMsIGFyZzQs
IGFyZzUsIGFyZzYpOyB9CiAgICAgCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rpb25UeXBl
PgogICAgIExWYWx1ZSBvcGVyYXRpb24oRnVuY3Rpb25UeXBlIGZ1bmN0aW9uKQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExTbG93UGF0aENhbGwuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMU2xvd1BhdGhDYWxsLmNwcAkocmV2aXNpb24g
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMU2xvd1BhdGhDYWxsLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDE2OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRlRMU2xv
d1BhdGhDYWxsLmgiCisKKyNpZiBFTkFCTEUoRlRMX0pJVCkKKworI2luY2x1ZGUgIkNDYWxsSGVs
cGVycy5oIgorI2luY2x1ZGUgIkZUTFN0YXRlLmgiCisjaW5jbHVkZSAiR1BSSW5mby5oIgorCitu
YW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEZUTCB7CisKK25hbWVzcGFjZSB7CisKKy8vIFRoaXMg
Y29kZSByZWxpZXMgb24gdXMgYmVpbmcgNjQtYml0LiBGVEwgaXMgY3VycmVudGx5IGFsd2F5cyA2
NC1iaXQuCitzdGF0aWMgY29uc3Qgc2l6ZV90IHdvcmRTaXplID0gODsKKyAgICAgICAgCisvLyBU
aGlzIHdpbGwgYmUgYW4gUkFJSSB0aGluZ3kgdGhhdCB3aWxsIHNldCB1cCB0aGUgbmVjZXNzYXJ5
IHN0YWNrIHNpemVzIGFuZCBvZmZzZXRzIGFuZCBzdWNoLgorY2xhc3MgQ2FsbENvbnRleHQgewor
cHVibGljOgorICAgIENhbGxDb250ZXh0KAorICAgICAgICBTdGF0ZSYgc3RhdGUsIGNvbnN0IFJl
Z2lzdGVyU2V0JiB1c2VkUmVnaXN0ZXJzLCBDQ2FsbEhlbHBlcnMmIGppdCwKKyAgICAgICAgdW5z
aWduZWQgbnVtQXJncywgR1BSUmVnIHJldHVyblJlZ2lzdGVyKQorICAgICAgICA6IG1fc3RhdGUo
c3RhdGUpCisgICAgICAgICwgbV91c2VkUmVnaXN0ZXJzKHVzZWRSZWdpc3RlcnMpCisgICAgICAg
ICwgbV9qaXQoaml0KQorICAgICAgICAsIG1fbnVtQXJncyhudW1BcmdzKQorICAgICAgICAsIG1f
cmV0dXJuUmVnaXN0ZXIocmV0dXJuUmVnaXN0ZXIpCisgICAgeworICAgICAgICAvLyBXZSBkb24n
dCBjYXJlIHRoYXQgeW91J3JlIHVzaW5nIGNhbGxlZS1zYXZlIG9yIHN0YWNrIHJlZ2lzdGVycy4K
KyAgICAgICAgbV91c2VkUmVnaXN0ZXJzLmV4Y2x1ZGUoUmVnaXN0ZXJTZXQ6OnN0YWNrUmVnaXN0
ZXJzKCkpOworICAgICAgICBtX3VzZWRSZWdpc3RlcnMuZXhjbHVkZShSZWdpc3RlclNldDo6Y2Fs
bGVlU2F2ZVJlZ2lzdGVycygpKTsKKyAgICAgICAgCisgICAgICAgIC8vIFRoZSByZXR1cm4gcmVn
aXN0ZXIgZG9lc24ndCBuZWVkIHRvIGJlIHNhdmVkLgorICAgICAgICBpZiAobV9yZXR1cm5SZWdp
c3RlciAhPSBJbnZhbGlkR1BSUmVnKQorICAgICAgICAgICAgbV91c2VkUmVnaXN0ZXJzLmNsZWFy
KG1fcmV0dXJuUmVnaXN0ZXIpOworICAgICAgICAKKyAgICAgICAgc2l6ZV90IHN0YWNrQnl0ZXNO
ZWVkZWRGb3JSZXR1cm5BZGRyZXNzID0gd29yZFNpemU7CisgICAgICAgIAorICAgICAgICBtX29m
ZnNldFRvU2F2aW5nQXJlYSA9CisgICAgICAgICAgICAoc3RkOjptYXgobV9udW1BcmdzLCBOVU1C
RVJfT0ZfQVJHVU1FTlRfUkVHSVNURVJTKSAtIE5VTUJFUl9PRl9BUkdVTUVOVF9SRUdJU1RFUlMp
ICogd29yZFNpemU7CisgICAgICAgIAorICAgICAgICB1bnNpZ25lZCBudW1Bcmd1bWVudFJlZ2lz
dGVyc1RoYXROZWVkU2F2aW5nID0gMDsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gc3RkOjpt
aW4oTlVNQkVSX09GX0FSR1VNRU5UX1JFR0lTVEVSUywgbnVtQXJncyk7IGktLTspIHsKKyAgICAg
ICAgICAgIGlmIChtX3VzZWRSZWdpc3RlcnMuZ2V0KEdQUkluZm86OnRvQXJndW1lbnRSZWdpc3Rl
cihpKSkpCisgICAgICAgICAgICAgICAgbnVtQXJndW1lbnRSZWdpc3RlcnNUaGF0TmVlZFNhdmlu
ZysrOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBzaXplX3Qgb2Zmc2V0VG9UaHVua1Nh
dmluZ0FyZWEgPQorICAgICAgICAgICAgbV9vZmZzZXRUb1NhdmluZ0FyZWEgKworICAgICAgICAg
ICAgbnVtQXJndW1lbnRSZWdpc3RlcnNUaGF0TmVlZFNhdmluZyAqIHdvcmRTaXplOworICAgICAg
ICAKKyAgICAgICAgbV9zdGFja0J5dGVzTmVlZGVkID0KKyAgICAgICAgICAgIG9mZnNldFRvVGh1
bmtTYXZpbmdBcmVhICsKKyAgICAgICAgICAgIHN0YWNrQnl0ZXNOZWVkZWRGb3JSZXR1cm5BZGRy
ZXNzICsKKyAgICAgICAgICAgIChtX3VzZWRSZWdpc3RlcnMubnVtYmVyT2ZTZXRSZWdpc3RlcnMo
KSAtIG51bUFyZ3VtZW50UmVnaXN0ZXJzVGhhdE5lZWRTYXZpbmcpICogd29yZFNpemU7CisgICAg
ICAgIAorICAgICAgICBzaXplX3Qgc3RhY2tBbGlnbm1lbnQgPSAxNjsKKyAgICAgICAgCisgICAg
ICAgIG1fc3RhY2tCeXRlc05lZWRlZCA9IChtX3N0YWNrQnl0ZXNOZWVkZWQgKyBzdGFja0FsaWdu
bWVudCAtIDEpICYgfnN0YWNrQWxpZ25tZW50OworICAgICAgICAKKyAgICAgICAgbV9qaXQuc3Vi
UHRyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKG1fc3RhY2tCeXRlc05lZWRlZCksIENDYWxs
SGVscGVyczo6c3RhY2tQb2ludGVyUmVnaXN0ZXIpOworICAgICAgICAKKyAgICAgICAgbV90aHVu
a1NhdmVTZXQgPSBtX3VzZWRSZWdpc3RlcnM7CisgICAgICAgIAorICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSBzdGQ6Om1pbihOVU1CRVJfT0ZfQVJHVU1FTlRfUkVHSVNURVJTLCBudW1BcmdzKTsg
aS0tOykgeworICAgICAgICAgICAgaWYgKCFtX3VzZWRSZWdpc3RlcnMuZ2V0KEdQUkluZm86OnRv
QXJndW1lbnRSZWdpc3RlcihpKSkpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAg
ICAgICBHUFJSZWcgcmVnID0gR1BSSW5mbzo6dG9Bcmd1bWVudFJlZ2lzdGVyKGkpOworICAgICAg
ICAgICAgbV9qaXQuc3RvcmVQdHIocmVnLCBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoQ0NhbGxIZWxw
ZXJzOjpzdGFja1BvaW50ZXJSZWdpc3RlciwgbV9vZmZzZXRUb1NhdmluZ0FyZWEgKyBpICogd29y
ZFNpemUpKTsKKyAgICAgICAgICAgIG1fdGh1bmtTYXZlU2V0LmNsZWFyKHJlZyk7CisgICAgICAg
IH0KKyAgICAgICAgCisgICAgICAgIG1fb2Zmc2V0ID0gb2Zmc2V0VG9UaHVua1NhdmluZ0FyZWE7
CisgICAgfQorICAgIAorICAgIH5DYWxsQ29udGV4dCgpCisgICAgeworICAgICAgICBtX2ppdC5t
b3ZlKEdQUkluZm86OnJldHVyblZhbHVlR1BSLCBtX3JldHVyblJlZ2lzdGVyKTsKKyAgICAgICAg
CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IHN0ZDo6bWluKE5VTUJFUl9PRl9BUkdVTUVOVF9S
RUdJU1RFUlMsIG1fbnVtQXJncyk7IGktLTspIHsKKyAgICAgICAgICAgIGlmICghbV91c2VkUmVn
aXN0ZXJzLmdldChHUFJJbmZvOjp0b0FyZ3VtZW50UmVnaXN0ZXIoaSkpKQorICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOworICAgICAgICAgICAgR1BSUmVnIHJlZyA9IEdQUkluZm86OnRvQXJndW1l
bnRSZWdpc3RlcihpKTsKKyAgICAgICAgICAgIG1faml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpB
ZGRyZXNzKENDYWxsSGVscGVyczo6c3RhY2tQb2ludGVyUmVnaXN0ZXIsIG1fb2Zmc2V0VG9TYXZp
bmdBcmVhICsgaSAqIHdvcmRTaXplKSwgcmVnKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAg
ICAgbV9qaXQuYWRkUHRyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKG1fc3RhY2tCeXRlc05l
ZWRlZCksIENDYWxsSGVscGVyczo6c3RhY2tQb2ludGVyUmVnaXN0ZXIpOworICAgIH0KKyAgICAK
KyAgICBSZWdpc3RlclNldCB1c2VkUmVnaXN0ZXJzKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJl
dHVybiBtX3RodW5rU2F2ZVNldDsKKyAgICB9CisgICAgCisgICAgcHRyZGlmZl90IG9mZnNldCgp
IGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9vZmZzZXQ7CisgICAgfQorICAgIAorICAg
IFNsb3dQYXRoQ2FsbEtleSBrZXlXaXRoVGFyZ2V0KHZvaWQqIGNhbGxUYXJnZXQpIGNvbnN0Cisg
ICAgeworICAgICAgICByZXR1cm4gU2xvd1BhdGhDYWxsS2V5KHVzZWRSZWdpc3RlcnMoKSwgY2Fs
bFRhcmdldCwgb2Zmc2V0KCkpOworICAgIH0KKyAgICAKKyAgICBNYWNyb0Fzc2VtYmxlcjo6Q2Fs
bCBtYWtlQ2FsbCh2b2lkKiBjYWxsVGFyZ2V0KQorICAgIHsKKyAgICAgICAgTWFjcm9Bc3NlbWJs
ZXI6OkNhbGwgcmVzdWx0ID0gbV9qaXQuY2FsbCgpOworICAgICAgICBtX3N0YXRlLmZpbmFsaXpl
ci0+c2xvd1BhdGhDYWxscy5hcHBlbmQoU2xvd1BhdGhDYWxsKAorICAgICAgICAgICAgcmVzdWx0
LCBrZXlXaXRoVGFyZ2V0KGNhbGxUYXJnZXQpKSk7CisgICAgICAgIHJldHVybiByZXN1bHQ7Cisg
ICAgfQorICAgIAorcHJpdmF0ZToKKyAgICBTdGF0ZSYgbV9zdGF0ZTsKKyAgICBSZWdpc3RlclNl
dCBtX3VzZWRSZWdpc3RlcnM7CisgICAgQ0NhbGxIZWxwZXJzIG1faml0OworICAgIHVuc2lnbmVk
IG1fbnVtQXJnczsKKyAgICBHUFJSZWcgbV9yZXR1cm5SZWdpc3RlcjsKKyAgICBzaXplX3QgbV9v
ZmZzZXRUb1NhdmluZ0FyZWE7CisgICAgc2l6ZV90IG1fc3RhY2tCeXRlc05lZWRlZDsKKyAgICBS
ZWdpc3RlclNldCBtX3RodW5rU2F2ZVNldDsKKyAgICBwdHJkaWZmX3QgbV9vZmZzZXQ7Cit9Owor
Cit9IC8vIGFub255bW91cyBuYW1lc3BhY2UKKworTWFjcm9Bc3NlbWJsZXI6OkNhbGwgY2FsbE9w
ZXJhdGlvbigKKyAgICBTdGF0ZSYgc3RhdGUsIGNvbnN0IFJlZ2lzdGVyU2V0JiB1c2VkUmVnaXN0
ZXJzLCBDQ2FsbEhlbHBlcnMmIGppdCwgCisgICAgSl9KSVRPcGVyYXRpb25fRVNzaUpJIG9wZXJh
dGlvbiwgR1BSUmVnIHJlc3VsdCwgR1BSUmVnIGNhbGxGcmFtZVJlZ2lzdGVyLAorICAgIFN0cnVj
dHVyZVN0dWJJbmZvKiBzdHViSW5mbywgR1BSUmVnIG9iamVjdCwgU3RyaW5nSW1wbCogdWlkKQor
eworICAgIENhbGxDb250ZXh0IGNvbnRleHQoc3RhdGUsIHVzZWRSZWdpc3RlcnMsIGppdCwgNCwg
cmVzdWx0KTsKKyAgICBqaXQuc2V0dXBBcmd1bWVudHMoCisgICAgICAgIGNhbGxGcmFtZVJlZ2lz
dGVyLCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoc3R1YkluZm8pLCBvYmplY3QsCisgICAg
ICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cih1aWQpKTsKKyAgICByZXR1cm4gY29udGV4
dC5tYWtlQ2FsbChiaXR3aXNlX2Nhc3Q8dm9pZCo+KG9wZXJhdGlvbikpOworICAgIC8vIEZJWE1F
OiBGVEwgc2hvdWxkIHN1cHBvcnQgZXhjZXB0aW9ucy4KKyAgICAvLyBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTEzNjIyCit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlND
OjpGVEwKKworI2VuZGlmIC8vIEVOQUJMRShGVExfSklUKQorCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZnRsL0ZUTFNsb3dQYXRoQ2FsbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9mdGwvRlRMU2xvd1BhdGhDYWxsLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZnRsL0ZUTFNsb3dQYXRoQ2FsbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsNjggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8K
KworI2lmbmRlZiBGVExTbG93UGF0aENhbGxfaAorI2RlZmluZSBGVExTbG93UGF0aENhbGxfaAor
CisjaWYgRU5BQkxFKEZUTF9KSVQpCisKKyNpbmNsdWRlICJDQ2FsbEhlbHBlcnMuaCIKKyNpbmNs
dWRlICJGVExTbG93UGF0aENhbGxLZXkuaCIKKyNpbmNsdWRlICJKSVRPcGVyYXRpb25zLmgiCisj
aW5jbHVkZSAiU3RydWN0dXJlU3R1YkluZm8uaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFj
ZSBGVEwgeworCitjbGFzcyBTdGF0ZTsKKworY2xhc3MgU2xvd1BhdGhDYWxsIHsKK3B1YmxpYzoK
KyAgICBTbG93UGF0aENhbGwoKSB7IH0KKyAgICAKKyAgICBTbG93UGF0aENhbGwoTWFjcm9Bc3Nl
bWJsZXI6OkNhbGwgY2FsbCwgY29uc3QgU2xvd1BhdGhDYWxsS2V5JiBrZXkpCisgICAgICAgIDog
bV9jYWxsKGNhbGwpCisgICAgICAgICwgbV9rZXkoa2V5KQorICAgIHsKKyAgICB9CisgICAgCisg
ICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgY2FsbCgpIGNvbnN0IHsgcmV0dXJuIG1fY2FsbDsgfQor
ICAgIFNsb3dQYXRoQ2FsbEtleSBrZXkoKSBjb25zdCB7IHJldHVybiBtX2tleTsgfQorICAgIAor
cHJpdmF0ZToKKyAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBtX2NhbGw7CisgICAgU2xvd1BhdGhD
YWxsS2V5IG1fa2V5OworfTsKKworTWFjcm9Bc3NlbWJsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbigK
KyAgICBTdGF0ZSYsIGNvbnN0IFJlZ2lzdGVyU2V0JiwgQ0NhbGxIZWxwZXJzJiwgSl9KSVRPcGVy
YXRpb25fRVNzaUpJLAorICAgIEdQUlJlZyByZXN1bHQsIEdQUlJlZyBjYWxsRnJhbWVSZWdpc3Rl
ciwgU3RydWN0dXJlU3R1YkluZm8qLCBHUFJSZWcgb2JqZWN0LAorICAgIFN0cmluZ0ltcGwqIHVp
ZCk7CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpGVEwKKworI2VuZGlmIC8vIEVOQUJMRShGVExf
SklUKQorCisjZW5kaWYgLy8gRlRMU2xvd1BhdGhDYWxsX2gKKwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Z0bC9GVExTbG93UGF0aENhbGxLZXkuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMU2xvd1BhdGhDYWxsS2V5LmNwcAkocmV2aXNpb24gMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMU2xvd1BhdGhDYWxsS2V5LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDQxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJGVExTbG93
UGF0aENhbGxLZXkuaCIKKworI2lmIEVOQUJMRShGVExfSklUKQorCituYW1lc3BhY2UgSlNDIHsg
bmFtZXNwYWNlIEZUTCB7CisKK3ZvaWQgU2xvd1BhdGhDYWxsS2V5OjpkdW1wKFByaW50U3RyZWFt
JiBvdXQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50KCI8dXNlZFJlZ2lzdGVycyA9ICIsIG1fdXNl
ZFJlZ2lzdGVycywgIiwgb2Zmc2V0ID0gIiwgbV9vZmZzZXQsICIsIGNhbGxUYXJnZXQgPSAiLCBS
YXdQb2ludGVyKG1fY2FsbFRhcmdldCksICI+Iik7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlND
OjpGVEwKKworI2VuZGlmIC8vIEVOQUJMRShGVExfSklUKQorCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZnRsL0ZUTFNsb3dQYXRoQ2FsbEtleS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9mdGwvRlRMU2xvd1BhdGhDYWxsS2V5LmgJKHJldmlzaW9uIDApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFNsb3dQYXRoQ2FsbEtleS5oCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsMTI2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAorICovCisKKyNpZm5kZWYgRlRMU2xvd1BhdGhDYWxsS2V5X2gKKyNkZWZpbmUgRlRMU2xv
d1BhdGhDYWxsS2V5X2gKKworI2lmIEVOQUJMRShGVExfSklUKQorCisjaW5jbHVkZSAiUmVnaXN0
ZXJTZXQuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBGVEwgeworCisvLyBUaGlzIGlz
IHVzZWQgZm9yIGNyZWF0aW5nIHNvbWUgc2FuaXR5IGluIHNsb3ctcGF0aCBjYWxscyBvdXQgb2Yg
dGhlIEZUTCdzIGlubGluZQorLy8gY2FjaGVzLiBUaGUgaWRlYSBpcyB0aGF0IHdlIGRvbid0IHdh
bnQgYWxsIG9mIHRoZSByZWdpc3RlciBzYXZlL3Jlc3RvcmUgc3R1ZmYgdG8KKy8vIGJlIGdlbmVy
YXRlZCBhdCBlYWNoIElDIHNpdGUuIEluc3RlYWQsIHRoZSBJQyBzbG93IHBhdGggY2FsbCBzaXRl
IHdpbGwganVzdCBzYXZlCisvLyB0aGUgcmVnaXN0ZXJzIG5lZWRlZCBmb3IgdGhlIGFyZ3VtZW50
cy4gSXQgd2lsbCBhcnJhbmdlIGZvciB0aGVyZSB0byBiZSBlbm91Z2gKKy8vIHNwYWNlIG9uIHRv
cCBvZiBzdGFjayB0byBzYXZlIHRoZSByZW1haW5pbmcgcmVnaXN0ZXJzIGFuZCB0aGUgcmV0dXJu
IFBDLiBUaGVuIGl0CisvLyB3aWxsIGNhbGwgYSBzaGFyZWQgdGh1bmsgdGhhdCB3aWxsIHNhdmUg
dGhlIHJlbWFpbmluZyByZWdpc3RlcnMuIFRoYXQgdGh1bmsgbmVlZHMKKy8vIHRvIGtub3cgdGhl
IHN0YWNrIG9mZnNldCBhdCB3aGljaCB0aGluZ3MgZ2V0IHNhdmVkIGFsb25nIHdpdGggdGhlIGNh
bGwgdGFyZ2V0LgorCisvLyBOb3RlIHRoYXQgdGhlIG9mZnNldCBpcyAqbm90IGluY2x1ZGluZyog
dGhlIHJldHVybiBQQyB0aGF0IHdvdWxkIGJlIHB1c2hlZCBvbiBYODYuCisKK2NsYXNzIFNsb3dQ
YXRoQ2FsbEtleSB7CitwdWJsaWM6CisgICAgU2xvd1BhdGhDYWxsS2V5KCkKKyAgICAgICAgOiBt
X2NhbGxUYXJnZXQoMCkKKyAgICAgICAgLCBtX29mZnNldCgwKQorICAgIHsKKyAgICB9CisgICAg
CisgICAgU2xvd1BhdGhDYWxsS2V5KGNvbnN0IFJlZ2lzdGVyU2V0JiBzZXQsIHZvaWQqIGNhbGxU
YXJnZXQsIHB0cmRpZmZfdCBvZmZzZXQpCisgICAgICAgIDogbV91c2VkUmVnaXN0ZXJzKHNldCkK
KyAgICAgICAgLCBtX2NhbGxUYXJnZXQoY2FsbFRhcmdldCkKKyAgICAgICAgLCBtX29mZnNldChv
ZmZzZXQpCisgICAgeworICAgIH0KKyAgICAKKyAgICBjb25zdCBSZWdpc3RlclNldCYgdXNlZFJl
Z2lzdGVycygpIGNvbnN0IHsgcmV0dXJuIG1fdXNlZFJlZ2lzdGVyczsgfQorICAgIHZvaWQqIGNh
bGxUYXJnZXQoKSBjb25zdCB7IHJldHVybiBtX2NhbGxUYXJnZXQ7IH0KKyAgICBwdHJkaWZmX3Qg
b2Zmc2V0KCkgY29uc3QgeyByZXR1cm4gbV9vZmZzZXQ7IH0KKyAgICAKKyAgICB2b2lkIGR1bXAo
UHJpbnRTdHJlYW0mKSBjb25zdDsKKyAgICAKKyAgICBlbnVtIEVtcHR5VmFsdWVUYWcgeyBFbXB0
eVZhbHVlIH07CisgICAgZW51bSBEZWxldGVkVmFsdWVUYWcgeyBEZWxldGVkVmFsdWUgfTsKKyAg
ICAKKyAgICBTbG93UGF0aENhbGxLZXkoRW1wdHlWYWx1ZVRhZykKKyAgICAgICAgOiBtX3VzZWRS
ZWdpc3RlcnMoUmVnaXN0ZXJTZXQ6OkVtcHR5VmFsdWUpCisgICAgICAgICwgbV9jYWxsVGFyZ2V0
KDApCisgICAgICAgICwgbV9vZmZzZXQoMCkKKyAgICB7CisgICAgfQorICAgIAorICAgIFNsb3dQ
YXRoQ2FsbEtleShEZWxldGVkVmFsdWVUYWcpCisgICAgICAgIDogbV91c2VkUmVnaXN0ZXJzKFJl
Z2lzdGVyU2V0OjpEZWxldGVkVmFsdWUpCisgICAgICAgICwgbV9jYWxsVGFyZ2V0KDApCisgICAg
ICAgICwgbV9vZmZzZXQoMCkKKyAgICB7CisgICAgfQorICAgIAorICAgIGJvb2wgaXNFbXB0eVZh
bHVlKCkgY29uc3QgeyByZXR1cm4gbV91c2VkUmVnaXN0ZXJzLmlzRW1wdHlWYWx1ZSgpOyB9Cisg
ICAgYm9vbCBpc0RlbGV0ZWRWYWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdXNlZFJlZ2lzdGVycy5p
c0RlbGV0ZWRWYWx1ZSgpOyB9CisgICAgCisgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFNsb3dQ
YXRoQ2FsbEtleSYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV91c2VkUmVn
aXN0ZXJzID09IG90aGVyLm1fdXNlZFJlZ2lzdGVycworICAgICAgICAgICAgJiYgbV9jYWxsVGFy
Z2V0ID09IG90aGVyLm1fY2FsbFRhcmdldAorICAgICAgICAgICAgJiYgbV9vZmZzZXQgPT0gb3Ro
ZXIubV9vZmZzZXQ7CisgICAgfQorICAgIHVuc2lnbmVkIGhhc2goKSBjb25zdAorICAgIHsKKyAg
ICAgICAgcmV0dXJuIG1fdXNlZFJlZ2lzdGVycy5oYXNoKCkgKyBQdHJIYXNoPHZvaWQqPjo6aGFz
aChtX2NhbGxUYXJnZXQpICsgbV9vZmZzZXQ7CisgICAgfQorCitwcml2YXRlOgorICAgIFJlZ2lz
dGVyU2V0IG1fdXNlZFJlZ2lzdGVyczsKKyAgICB2b2lkKiBtX2NhbGxUYXJnZXQ7CisgICAgcHRy
ZGlmZl90IG1fb2Zmc2V0OworfTsKKworc3RydWN0IFNsb3dQYXRoQ2FsbEtleUhhc2ggeworICAg
IHN0YXRpYyB1bnNpZ25lZCBoYXNoKGNvbnN0IFNsb3dQYXRoQ2FsbEtleSYga2V5KSB7IHJldHVy
biBrZXkuaGFzaCgpOyB9CisgICAgc3RhdGljIGJvb2wgZXF1YWwoY29uc3QgU2xvd1BhdGhDYWxs
S2V5JiBhLCBjb25zdCBTbG93UGF0aENhbGxLZXkmIGIpIHsgcmV0dXJuIGEgPT0gYjsgfQorICAg
IHN0YXRpYyBjb25zdCBib29sIHNhZmVUb0NvbXBhcmVUb0VtcHR5T3JEZWxldGVkID0gZmFsc2U7
Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6RlRMCisKK25hbWVzcGFjZSBXVEYgeworCit0
ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgRGVmYXVsdEhhc2g7Cit0ZW1wbGF0ZTw+IHN0cnVj
dCBEZWZhdWx0SGFzaDxKU0M6OkZUTDo6U2xvd1BhdGhDYWxsS2V5PiB7CisgICAgdHlwZWRlZiBK
U0M6OkZUTDo6U2xvd1BhdGhDYWxsS2V5SGFzaCBIYXNoOworfTsKKwordGVtcGxhdGU8dHlwZW5h
bWUgVD4gc3RydWN0IEhhc2hUcmFpdHM7Cit0ZW1wbGF0ZTw+IHN0cnVjdCBIYXNoVHJhaXRzPEpT
Qzo6RlRMOjpTbG93UGF0aENhbGxLZXk+IDogcHVibGljIEN1c3RvbUhhc2hUcmFpdHM8SlNDOjpG
VEw6OlNsb3dQYXRoQ2FsbEtleT4geyB9OworCit9IC8vIG5hbWVzcGFjZSBXVEYKKworI2VuZGlm
IC8vIEVOQUJMRShGVExfSklUKQorCisjZW5kaWYgLy8gRlRMU2xvd1BhdGhDYWxsS2V5X2gKKwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExTdGFja01hcHMuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMU3RhY2tNYXBzLmNwcAkocmV2aXNp
b24gMTU3NzA3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExTdGFja01hcHMuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC03Myw2ICs3MywxMSBAQCB2b2lkIFN0YWNrTWFwczo6TG9jYXRp
b246OmR1bXAoUHJpbnRTdHJlCiAgICAgb3V0LnByaW50KCIoIiwga2luZCwgIiwgcmVnIiwgZHdh
cmZSZWdOdW0sICIsICIsIG9mZnNldCwgIikiKTsKIH0KIAorR1BSUmVnIFN0YWNrTWFwczo6TG9j
YXRpb246OmRpcmVjdEdQUihTdGFja01hcHMmIHN0YWNrbWFwcykgY29uc3QKK3sKKyAgICByZXR1
cm4gRlRMOjpMb2NhdGlvbjo6Zm9yU3RhY2ttYXBzKHN0YWNrbWFwcywgKnRoaXMpLmRpcmVjdEdQ
UigpOworfQorCiB2b2lkIFN0YWNrTWFwczo6TG9jYXRpb246OnJlc3RvcmVJbnRvKAogICAgIE1h
Y3JvQXNzZW1ibGVyJiBqaXQsIFN0YWNrTWFwcyYgc3RhY2ttYXBzLCBjaGFyKiBzYXZlZFJlZ2lz
dGVycywgR1BSUmVnIHJlc3VsdCkgY29uc3QKIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9mdGwvRlRMU3RhY2tNYXBzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Z0bC9GVExTdGFja01hcHMuaAkocmV2aXNpb24gMTU3NzA3KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Z0bC9GVExTdGFja01hcHMuaAkod29ya2luZyBjb3B5KQpAQCAtNjQsNiArNjQsNyBA
QCBzdHJ1Y3QgU3RhY2tNYXBzIHsKICAgICAgICAgdm9pZCBwYXJzZShEYXRhVmlldyosIHVuc2ln
bmVkJiBvZmZzZXQpOwogICAgICAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3Q7
CiAgICAgICAgIAorICAgICAgICBHUFJSZWcgZGlyZWN0R1BSKFN0YWNrTWFwcyYpIGNvbnN0Owog
ICAgICAgICB2b2lkIHJlc3RvcmVJbnRvKE1hY3JvQXNzZW1ibGVyJiwgU3RhY2tNYXBzJiwgY2hh
ciogc2F2ZWRSZWdpc3RlcnMsIEdQUlJlZyByZXN1bHQpIGNvbnN0OwogICAgIH07CiAgICAgCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFN0YXRlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExTdGF0ZS5oCShyZXZpc2lvbiAxNTc3MDcpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFN0YXRlLmgJKHdvcmtpbmcgY29weSkKQEAg
LTMzLDYgKzMzLDcgQEAKICNpbmNsdWRlICJERkdHcmFwaC5oIgogI2luY2x1ZGUgIkZUTEFiYnJl
dmlhdGlvbnMuaCIKICNpbmNsdWRlICJGVExHZW5lcmF0ZWRGdW5jdGlvbi5oIgorI2luY2x1ZGUg
IkZUTElubGluZUNhY2hlRGVzY3JpcHRvci5oIgogI2luY2x1ZGUgIkZUTEpJVENvZGUuaCIKICNp
bmNsdWRlICJGVExKSVRGaW5hbGl6ZXIuaCIKICNpbmNsdWRlICJGVExTdGFja01hcHMuaCIKQEAg
LTU2LDYgKzU3LDcgQEAgcHVibGljOgogICAgIFJlZlB0cjxKSVRDb2RlPiBqaXRDb2RlOwogICAg
IEdlbmVyYXRlZEZ1bmN0aW9uIGdlbmVyYXRlZEZ1bmN0aW9uOwogICAgIEpJVEZpbmFsaXplciog
ZmluYWxpemVyOworICAgIFNlZ21lbnRlZFZlY3RvcjxHZXRCeUlkRGVzY3JpcHRvcj4gZ2V0QnlJ
ZHM7CiAgICAgVmVjdG9yPENTdHJpbmc+IGNvZGVTZWN0aW9uTmFtZXM7CiAgICAgVmVjdG9yPENT
dHJpbmc+IGRhdGFTZWN0aW9uTmFtZXM7CiAgICAgUmVmQ291bnRlZEFycmF5PExTZWN0aW9uV29y
ZD4gc3RhY2ttYXBzU2VjdGlvbjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRM
VGh1bmtzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFRo
dW5rcy5jcHAJKHJldmlzaW9uIDE1NzcwNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwv
RlRMVGh1bmtzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQ0LDYgKzE0NCw2NyBAQCBNYWNyb0Fz
c2VtYmxlckNvZGVSZWYgb3NyRXhpdEdlbmVyYXRpb25XCiAgICAgcmV0dXJuIEZJTkFMSVpFX0NP
REUocGF0Y2hCdWZmZXIsICgiRlRMIE9TUiBleGl0IGdlbmVyYXRpb24gdGh1bmsgZm9yIGNhbGxG
cmFtZSBhdCAlcyIsIHRvQ1N0cmluZyhsb2NhdGlvbikuZGF0YSgpKSk7CiB9CiAKK01hY3JvQXNz
ZW1ibGVyQ29kZVJlZiBzbG93UGF0aENhbGxUaHVua0dlbmVyYXRvcihWTSYgdm0sIGNvbnN0IFNs
b3dQYXRoQ2FsbEtleSYga2V5KQoreworICAgIEFzc2VtYmx5SGVscGVycyBqaXQoJnZtLCAwKTsK
KyAgICAKKyAgICAvLyBXZSB3YW50IHRvIHNhdmUgdGhlIGdpdmVuIHJlZ2lzdGVycyBhdCB0aGUg
Z2l2ZW4gb2Zmc2V0LCB0aGVuIHdlIHdhbnQgdG8gc2F2ZSB0aGUKKyAgICAvLyBvbGQgcmV0dXJu
IGFkZHJlc3Mgc29tZXdoZXJlIHBhc3QgdGhhdCBvZmZzZXQsIGFuZCB0aGVuIGZpbmFsbHkgd2Ug
d2FudCB0byBtYWtlIHRoZQorICAgIC8vIGNhbGwuCisgICAgCisgICAgc2l6ZV90IGN1cnJlbnRP
ZmZzZXQgPSBrZXkub2Zmc2V0KCkgKyBzaXplb2Yodm9pZCopOworICAgIAorI2lmIENQVShYODYp
IHx8IENQVShYODZfNjQpCisgICAgY3VycmVudE9mZnNldCArPSBzaXplb2Yodm9pZCopOworI2Vu
ZGlmCisgICAgCisgICAgZm9yIChNYWNyb0Fzc2VtYmxlcjo6UmVnaXN0ZXJJRCByZWcgPSBNYWNy
b0Fzc2VtYmxlcjo6Zmlyc3RSZWdpc3RlcigpOyByZWcgPD0gTWFjcm9Bc3NlbWJsZXI6Omxhc3RS
ZWdpc3RlcigpOyByZWcgPSBzdGF0aWNfY2FzdDxNYWNyb0Fzc2VtYmxlcjo6UmVnaXN0ZXJJRD4o
cmVnICsgMSkpIHsKKyAgICAgICAgaWYgKCFrZXkudXNlZFJlZ2lzdGVycygpLmdldChyZWcpKQor
ICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIGppdC5zdG9yZVB0cihyZWcsIEFzc2VtYmx5
SGVscGVyczo6QWRkcmVzcyhNYWNyb0Fzc2VtYmxlcjo6c3RhY2tQb2ludGVyUmVnaXN0ZXIsIGN1
cnJlbnRPZmZzZXQpKTsKKyAgICAgICAgY3VycmVudE9mZnNldCArPSBzaXplb2Yodm9pZCopOwor
ICAgIH0KKyAgICAKKyAgICBmb3IgKE1hY3JvQXNzZW1ibGVyOjpGUFJlZ2lzdGVySUQgcmVnID0g
TWFjcm9Bc3NlbWJsZXI6OmZpcnN0RlBSZWdpc3RlcigpOyByZWcgPD0gTWFjcm9Bc3NlbWJsZXI6
Omxhc3RGUFJlZ2lzdGVyKCk7IHJlZyA9IHN0YXRpY19jYXN0PE1hY3JvQXNzZW1ibGVyOjpGUFJl
Z2lzdGVySUQ+KHJlZyArIDEpKSB7CisgICAgICAgIGlmICgha2V5LnVzZWRSZWdpc3RlcnMoKS5n
ZXQocmVnKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBqaXQuc3RvcmVEb3VibGUo
cmVnLCBBc3NlbWJseUhlbHBlcnM6OkFkZHJlc3MoTWFjcm9Bc3NlbWJsZXI6OnN0YWNrUG9pbnRl
clJlZ2lzdGVyLCBjdXJyZW50T2Zmc2V0KSk7CisgICAgICAgIGN1cnJlbnRPZmZzZXQgKz0gc2l6
ZW9mKGRvdWJsZSk7CisgICAgfQorICAgIAorICAgIGppdC5wcmVzZXJ2ZVJldHVybkFkZHJlc3NB
ZnRlckNhbGwoR1BSSW5mbzo6bm9uQXJnR1BSMCk7CisgICAgaml0LnN0b3JlUHRyKEdQUkluZm86
Om5vbkFyZ0dQUjAsIEFzc2VtYmx5SGVscGVyczo6QWRkcmVzcyhNYWNyb0Fzc2VtYmxlcjo6c3Rh
Y2tQb2ludGVyUmVnaXN0ZXIsIGtleS5vZmZzZXQoKSkpOworICAgIAorICAgIEpJVENvbXBpbGVy
OjpDYWxsIGNhbGwgPSBqaXQuY2FsbCgpOworICAgIAorICAgIGppdC5sb2FkUHRyKEFzc2VtYmx5
SGVscGVyczo6QWRkcmVzcyhNYWNyb0Fzc2VtYmxlcjo6c3RhY2tQb2ludGVyUmVnaXN0ZXIsIGtl
eS5vZmZzZXQoKSksIEdQUkluZm86Om5vblByZXNlcnZlZE5vblJldHVybkdQUik7CisgICAgaml0
LnJlc3RvcmVSZXR1cm5BZGRyZXNzQmVmb3JlUmV0dXJuKEdQUkluZm86Om5vblByZXNlcnZlZE5v
blJldHVybkdQUik7CisgICAgCisgICAgZm9yIChNYWNyb0Fzc2VtYmxlcjo6RlBSZWdpc3RlcklE
IHJlZyA9IE1hY3JvQXNzZW1ibGVyOjpsYXN0RlBSZWdpc3RlcigpOyA7IHJlZyA9IHN0YXRpY19j
YXN0PE1hY3JvQXNzZW1ibGVyOjpGUFJlZ2lzdGVySUQ+KHJlZyAtIDEpKSB7CisgICAgICAgIGlm
ICgha2V5LnVzZWRSZWdpc3RlcnMoKS5nZXQocmVnKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOwor
ICAgICAgICBjdXJyZW50T2Zmc2V0IC09IHNpemVvZihkb3VibGUpOworICAgICAgICBqaXQubG9h
ZERvdWJsZShBc3NlbWJseUhlbHBlcnM6OkFkZHJlc3MoTWFjcm9Bc3NlbWJsZXI6OnN0YWNrUG9p
bnRlclJlZ2lzdGVyLCBjdXJyZW50T2Zmc2V0KSwgcmVnKTsKKyAgICAgICAgaWYgKHJlZyA9PSBN
YWNyb0Fzc2VtYmxlcjo6Zmlyc3RGUFJlZ2lzdGVyKCkpCisgICAgICAgICAgICBicmVhazsKKyAg
ICB9CisgICAgCisgICAgZm9yIChNYWNyb0Fzc2VtYmxlcjo6UmVnaXN0ZXJJRCByZWcgPSBNYWNy
b0Fzc2VtYmxlcjo6bGFzdFJlZ2lzdGVyKCk7IDsgcmVnID0gc3RhdGljX2Nhc3Q8TWFjcm9Bc3Nl
bWJsZXI6OlJlZ2lzdGVySUQ+KHJlZyAtIDEpKSB7CisgICAgICAgIGlmICgha2V5LnVzZWRSZWdp
c3RlcnMoKS5nZXQocmVnKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBjdXJyZW50
T2Zmc2V0IC09IHNpemVvZih2b2lkKik7CisgICAgICAgIGppdC5sb2FkUHRyKEFzc2VtYmx5SGVs
cGVyczo6QWRkcmVzcyhNYWNyb0Fzc2VtYmxlcjo6c3RhY2tQb2ludGVyUmVnaXN0ZXIsIGN1cnJl
bnRPZmZzZXQpLCByZWcpOworICAgICAgICBpZiAocmVnID09IE1hY3JvQXNzZW1ibGVyOjpmaXJz
dFJlZ2lzdGVyKCkpCisgICAgICAgICAgICBicmVhazsKKyAgICB9CisgICAgCisgICAgaml0LnJl
dCgpOworCisgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcih2bSwgJmppdCwgR0xPQkFMX1RIVU5L
X0lEKTsKKyAgICBwYXRjaEJ1ZmZlci5saW5rKGNhbGwsIEZ1bmN0aW9uUHRyKGtleS5jYWxsVGFy
Z2V0KCkpKTsKKyAgICByZXR1cm4gRklOQUxJWkVfQ09ERShwYXRjaEJ1ZmZlciwgKCJGVEwgc2xv
dyBwYXRoIGNhbGwgdGh1bmsgZm9yICVzIiwgdG9DU3RyaW5nKGtleSkuZGF0YSgpKSk7Cit9CisK
IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpGVEwKIAogI2VuZGlmIC8vIEVOQUJMRShGVExfSklUKQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExUaHVua3MuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFRodW5rcy5oCShyZXZpc2lvbiAxNTc3MDcp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFRodW5rcy5oCSh3b3JraW5nIGNvcHkp
CkBAIC0zMSw2ICszMSw3IEBACiAjaWYgRU5BQkxFKEZUTF9KSVQpCiAKICNpbmNsdWRlICJGVExM
b2NhdGlvbi5oIgorI2luY2x1ZGUgIkZUTFNsb3dQYXRoQ2FsbEtleS5oIgogI2luY2x1ZGUgIk1h
Y3JvQXNzZW1ibGVyQ29kZVJlZi5oIgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAKQEAgLTQz
LDYgKzQ0LDcgQEAgbmFtZXNwYWNlIEZUTCB7CiBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgb3NyRXhp
dEdlbmVyYXRpb25XaXRob3V0U3RhY2tNYXBUaHVua0dlbmVyYXRvcihWTSopOwogCiBNYWNyb0Fz
c2VtYmxlckNvZGVSZWYgb3NyRXhpdEdlbmVyYXRpb25XaXRoU3RhY2tNYXBUaHVua0dlbmVyYXRv
cihWTSYsIGNvbnN0IExvY2F0aW9uJik7CitNYWNyb0Fzc2VtYmxlckNvZGVSZWYgc2xvd1BhdGhD
YWxsVGh1bmtHZW5lcmF0b3IoVk0mLCBjb25zdCBTbG93UGF0aENhbGxLZXkmKTsKIAogdGVtcGxh
dGU8dHlwZW5hbWUgTWFwVHlwZSwgdHlwZW5hbWUgS2V5VHlwZSwgdHlwZW5hbWUgR2VuZXJhdG9y
VHlwZT4KIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBnZW5lcmF0ZUlmTmVjZXNzYXJ5KApAQCAtNjUs
OCArNjcsMTUgQEAgcHVibGljOgogICAgICAgICAgICAgdm0sIG1fb3NyRXhpdFRodW5rcywgbG9j
YXRpb24sIG9zckV4aXRHZW5lcmF0aW9uV2l0aFN0YWNrTWFwVGh1bmtHZW5lcmF0b3IpOwogICAg
IH0KICAgICAKKyAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgZ2V0U2xvd1BhdGhDYWxsVGh1bmso
Vk0mIHZtLCBjb25zdCBTbG93UGF0aENhbGxLZXkmIGtleSkKKyAgICB7CisgICAgICAgIHJldHVy
biBnZW5lcmF0ZUlmTmVjZXNzYXJ5KAorICAgICAgICAgICAgdm0sIG1fc2xvd1BhdGhDYWxsVGh1
bmtzLCBrZXksIHNsb3dQYXRoQ2FsbFRodW5rR2VuZXJhdG9yKTsKKyAgICB9CisgICAgCiBwcml2
YXRlOgogICAgIEhhc2hNYXA8TG9jYXRpb24sIE1hY3JvQXNzZW1ibGVyQ29kZVJlZj4gbV9vc3JF
eGl0VGh1bmtzOworICAgIEhhc2hNYXA8U2xvd1BhdGhDYWxsS2V5LCBNYWNyb0Fzc2VtYmxlckNv
ZGVSZWY+IG1fc2xvd1BhdGhDYWxsVGh1bmtzOwogfTsKIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6
OkZUTApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DQ2FsbEhlbHBlcnMuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NDYWxsSGVscGVycy5oCShyZXZp
c2lvbiAxNTc3MDcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NDYWxsSGVscGVycy5o
CSh3b3JraW5nIGNvcHkpCkBAIC05MDYsNiArOTA2LDEzIEBAIHB1YmxpYzoKICAgICAgICAgc2V0
dXBUd29TdHViQXJnc0dQUjxHUFJJbmZvOjphcmd1bWVudEdQUjAsIEdQUkluZm86OmFyZ3VtZW50
R1BSMT4oYXJnMSwgYXJnMik7CiAgICAgfQogICAgIAorICAgIEFMV0FZU19JTkxJTkUgdm9pZCBz
ZXR1cEFyZ3VtZW50cyhHUFJSZWcgYXJnMSwgVHJ1c3RlZEltbVB0ciBhcmcyLCBHUFJSZWcgYXJn
MywgVHJ1c3RlZEltbVB0ciBhcmc0KQorICAgIHsKKyAgICAgICAgc2V0dXBUd29TdHViQXJnc0dQ
UjxHUFJJbmZvOjphcmd1bWVudEdQUjAsIEdQUkluZm86OmFyZ3VtZW50R1BSMj4oYXJnMSwgYXJn
Myk7CisgICAgICAgIG1vdmUoYXJnMiwgR1BSSW5mbzo6YXJndW1lbnRHUFIxKTsKKyAgICAgICAg
bW92ZShhcmc0LCBHUFJJbmZvOjphcmd1bWVudEdQUjMpOworICAgIH0KKyAgICAKICAgICBBTFdB
WVNfSU5MSU5FIHZvaWQgc2V0dXBBcmd1bWVudHMoVHJ1c3RlZEltbVB0ciBhcmcxKQogICAgIHsK
ICAgICAgICAgbW92ZShhcmcxLCBHUFJJbmZvOjphcmd1bWVudEdQUjApOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9HUFJJbmZvLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9HUFJJbmZvLmgJKHJldmlzaW9uIDE1NzcwNykKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvR1BSSW5mby5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNzksNyArMjc5LDcg
QEAgcHJpdmF0ZToKICNlbmRpZgogCiAjaWYgQ1BVKFg4NikKLSNkZWZpbmUgTlVNQkVSX09GX0FS
R1VNRU5UX1JFR0lTVEVSUyAwCisjZGVmaW5lIE5VTUJFUl9PRl9BUkdVTUVOVF9SRUdJU1RFUlMg
MHUKIAogY2xhc3MgR1BSSW5mbyB7CiBwdWJsaWM6CkBAIC0zNDIsNyArMzQyLDcgQEAgcHJpdmF0
ZToKICNlbmRpZgogCiAjaWYgQ1BVKFg4Nl82NCkKLSNkZWZpbmUgTlVNQkVSX09GX0FSR1VNRU5U
X1JFR0lTVEVSUyA2CisjZGVmaW5lIE5VTUJFUl9PRl9BUkdVTUVOVF9SRUdJU1RFUlMgNnUKIAog
Y2xhc3MgR1BSSW5mbyB7CiBwdWJsaWM6CkBAIC00MjMsNyArNDIzLDcgQEAgcHJpdmF0ZToKICNl
bmRpZgogCiAjaWYgQ1BVKEFSTSkKLSNkZWZpbmUgTlVNQkVSX09GX0FSR1VNRU5UX1JFR0lTVEVS
UyA0CisjZGVmaW5lIE5VTUJFUl9PRl9BUkdVTUVOVF9SRUdJU1RFUlMgNHUKIAogY2xhc3MgR1BS
SW5mbyB7CiBwdWJsaWM6CkBAIC00OTcsNyArNDk3LDcgQEAgcHJpdmF0ZToKICNlbmRpZgogCiAj
aWYgQ1BVKEFSTTY0KQotI2RlZmluZSBOVU1CRVJfT0ZfQVJHVU1FTlRfUkVHSVNURVJTIDgKKyNk
ZWZpbmUgTlVNQkVSX09GX0FSR1VNRU5UX1JFR0lTVEVSUyA4dQogCiBjbGFzcyBHUFJJbmZvIHsK
IHB1YmxpYzoKQEAgLTU5MCw3ICs1OTAsNyBAQCBwcml2YXRlOgogI2VuZGlmCiAKICNpZiBDUFUo
TUlQUykKLSNkZWZpbmUgTlVNQkVSX09GX0FSR1VNRU5UX1JFR0lTVEVSUyA0CisjZGVmaW5lIE5V
TUJFUl9PRl9BUkdVTUVOVF9SRUdJU1RFUlMgNHUKIAogY2xhc3MgR1BSSW5mbyB7CiBwdWJsaWM6
CkBAIC02NTgsNyArNjU4LDcgQEAgcHJpdmF0ZToKICNlbmRpZgogCiAjaWYgQ1BVKFNINCkKLSNk
ZWZpbmUgTlVNQkVSX09GX0FSR1VNRU5UX1JFR0lTVEVSUyA0CisjZGVmaW5lIE5VTUJFUl9PRl9B
UkdVTUVOVF9SRUdJU1RFUlMgNHUKIAogY2xhc3MgR1BSSW5mbyB7CiBwdWJsaWM6CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZUNhY2hlR2VuZXJhdG9yLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZUNhY2hlR2VuZXJh
dG9yLmNwcAkocmV2aXNpb24gMTU3NzA3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVRJbmxpbmVDYWNoZUdlbmVyYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0LDEwICszNCwx
NiBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAorc3RhdGljIFN0cnVjdHVyZVN0dWJJbmZvKiBnYXJi
YWdlU3R1YkluZm8oKQoreworICAgIHN0YXRpYyBTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8g
PSBuZXcgU3RydWN0dXJlU3R1YkluZm8oKTsKKyAgICByZXR1cm4gc3R1YkluZm87Cit9CisKIEpJ
VElubGluZUNhY2hlR2VuZXJhdG9yOjpKSVRJbmxpbmVDYWNoZUdlbmVyYXRvcihDb2RlQmxvY2sq
IGNvZGVCbG9jaywgQ29kZU9yaWdpbiBjb2RlT3JpZ2luKQogICAgIDogbV9jb2RlQmxvY2soY29k
ZUJsb2NrKQogewotICAgIG1fc3R1YkluZm8gPSBtX2NvZGVCbG9jay0+YWRkU3R1YkluZm8oKTsK
KyAgICBtX3N0dWJJbmZvID0gbV9jb2RlQmxvY2sgPyBtX2NvZGVCbG9jay0+YWRkU3R1YkluZm8o
KSA6IGdhcmJhZ2VTdHViSW5mbygpOwogICAgIG1fc3R1YkluZm8tPmNvZGVPcmlnaW4gPSBjb2Rl
T3JpZ2luOwogfQogCkBAIC02MywyOSArNjksMzQgQEAgSklUQnlJZEdlbmVyYXRvcjo6SklUQnlJ
ZEdlbmVyYXRvcigKICNlbmRpZgogfQogCi12b2lkIEpJVEJ5SWRHZW5lcmF0b3I6OmZpbmFsaXpl
KExpbmtCdWZmZXImIGxpbmtCdWZmZXIpCit2b2lkIEpJVEJ5SWRHZW5lcmF0b3I6OmZpbmFsaXpl
KExpbmtCdWZmZXImIGZhc3RQYXRoLCBMaW5rQnVmZmVyJiBzbG93UGF0aCkKIHsKLSAgICBDb2Rl
TG9jYXRpb25DYWxsIGNhbGxSZXR1cm5Mb2NhdGlvbiA9IGxpbmtCdWZmZXIubG9jYXRpb25PZiht
X2NhbGwpOworICAgIENvZGVMb2NhdGlvbkNhbGwgY2FsbFJldHVybkxvY2F0aW9uID0gc2xvd1Bh
dGgubG9jYXRpb25PZihtX2NhbGwpOwogICAgIG1fc3R1YkluZm8tPmNhbGxSZXR1cm5Mb2NhdGlv
biA9IGNhbGxSZXR1cm5Mb2NhdGlvbjsKICAgICBtX3N0dWJJbmZvLT5wYXRjaC5kZWx0YUNoZWNr
SW1tVG9DYWxsID0gTWFjcm9Bc3NlbWJsZXI6OmRpZmZlcmVuY2VCZXR3ZWVuQ29kZVB0cigKLSAg
ICAgICAgbGlua0J1ZmZlci5sb2NhdGlvbk9mKG1fc3RydWN0dXJlSW1tKSwgY2FsbFJldHVybkxv
Y2F0aW9uKTsKKyAgICAgICAgZmFzdFBhdGgubG9jYXRpb25PZihtX3N0cnVjdHVyZUltbSksIGNh
bGxSZXR1cm5Mb2NhdGlvbik7CiAgICAgbV9zdHViSW5mby0+cGF0Y2guZGVsdGFDYWxsVG9TdHJ1
Y3RDaGVjayA9IE1hY3JvQXNzZW1ibGVyOjpkaWZmZXJlbmNlQmV0d2VlbkNvZGVQdHIoCi0gICAg
ICAgIGNhbGxSZXR1cm5Mb2NhdGlvbiwgbGlua0J1ZmZlci5sb2NhdGlvbk9mKG1fc3RydWN0dXJl
Q2hlY2spKTsKKyAgICAgICAgY2FsbFJldHVybkxvY2F0aW9uLCBmYXN0UGF0aC5sb2NhdGlvbk9m
KG1fc3RydWN0dXJlQ2hlY2spKTsKICNpZiBVU0UoSlNWQUxVRTY0KQogICAgIG1fc3R1YkluZm8t
PnBhdGNoLmRlbHRhQ2FsbFRvTG9hZE9yU3RvcmUgPSBNYWNyb0Fzc2VtYmxlcjo6ZGlmZmVyZW5j
ZUJldHdlZW5Db2RlUHRyKAotICAgICAgICBjYWxsUmV0dXJuTG9jYXRpb24sIGxpbmtCdWZmZXIu
bG9jYXRpb25PZihtX2xvYWRPclN0b3JlKSk7CisgICAgICAgIGNhbGxSZXR1cm5Mb2NhdGlvbiwg
ZmFzdFBhdGgubG9jYXRpb25PZihtX2xvYWRPclN0b3JlKSk7CiAjZWxzZQogICAgIG1fc3R1Yklu
Zm8tPnBhdGNoLmRlbHRhQ2FsbFRvVGFnTG9hZE9yU3RvcmUgPSBNYWNyb0Fzc2VtYmxlcjo6ZGlm
ZmVyZW5jZUJldHdlZW5Db2RlUHRyKAotICAgICAgICBjYWxsUmV0dXJuTG9jYXRpb24sIGxpbmtC
dWZmZXIubG9jYXRpb25PZihtX3RhZ0xvYWRPclN0b3JlKSk7CisgICAgICAgIGNhbGxSZXR1cm5M
b2NhdGlvbiwgZmFzdFBhdGgubG9jYXRpb25PZihtX3RhZ0xvYWRPclN0b3JlKSk7CiAgICAgbV9z
dHViSW5mby0+cGF0Y2guZGVsdGFDYWxsVG9QYXlsb2FkTG9hZE9yU3RvcmUgPSBNYWNyb0Fzc2Vt
Ymxlcjo6ZGlmZmVyZW5jZUJldHdlZW5Db2RlUHRyKAotICAgICAgICBjYWxsUmV0dXJuTG9jYXRp
b24sIGxpbmtCdWZmZXIubG9jYXRpb25PZihtX2xvYWRPclN0b3JlKSk7CisgICAgICAgIGNhbGxS
ZXR1cm5Mb2NhdGlvbiwgZmFzdFBhdGgubG9jYXRpb25PZihtX2xvYWRPclN0b3JlKSk7CiAjZW5k
aWYKICAgICBtX3N0dWJJbmZvLT5wYXRjaC5kZWx0YUNhbGxUb1Nsb3dDYXNlID0gTWFjcm9Bc3Nl
bWJsZXI6OmRpZmZlcmVuY2VCZXR3ZWVuQ29kZVB0cigKLSAgICAgICAgY2FsbFJldHVybkxvY2F0
aW9uLCBsaW5rQnVmZmVyLmxvY2F0aW9uT2YobV9zbG93UGF0aEJlZ2luKSk7CisgICAgICAgIGNh
bGxSZXR1cm5Mb2NhdGlvbiwgc2xvd1BhdGgubG9jYXRpb25PZihtX3Nsb3dQYXRoQmVnaW4pKTsK
ICAgICBtX3N0dWJJbmZvLT5wYXRjaC5kZWx0YUNhbGxUb0RvbmUgPSBNYWNyb0Fzc2VtYmxlcjo6
ZGlmZmVyZW5jZUJldHdlZW5Db2RlUHRyKAotICAgICAgICBjYWxsUmV0dXJuTG9jYXRpb24sIGxp
bmtCdWZmZXIubG9jYXRpb25PZihtX2RvbmUpKTsKKyAgICAgICAgY2FsbFJldHVybkxvY2F0aW9u
LCBmYXN0UGF0aC5sb2NhdGlvbk9mKG1fZG9uZSkpOwogICAgIG1fc3R1YkluZm8tPnBhdGNoLmRl
bHRhQ2FsbFRvU3RvcmFnZUxvYWQgPSBNYWNyb0Fzc2VtYmxlcjo6ZGlmZmVyZW5jZUJldHdlZW5D
b2RlUHRyKAotICAgICAgICBjYWxsUmV0dXJuTG9jYXRpb24sIGxpbmtCdWZmZXIubG9jYXRpb25P
ZihtX3Byb3BlcnR5U3RvcmFnZUxvYWQpKTsKKyAgICAgICAgY2FsbFJldHVybkxvY2F0aW9uLCBm
YXN0UGF0aC5sb2NhdGlvbk9mKG1fcHJvcGVydHlTdG9yYWdlTG9hZCkpOworfQorCit2b2lkIEpJ
VEJ5SWRHZW5lcmF0b3I6OmZpbmFsaXplKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpCit7CisgICAg
ZmluYWxpemUobGlua0J1ZmZlciwgbGlua0J1ZmZlcik7CiB9CiAKIHZvaWQgSklUQnlJZEdlbmVy
YXRvcjo6Z2VuZXJhdGVGYXN0UGF0aENoZWNrcyhNYWNyb0Fzc2VtYmxlciYgaml0LCBHUFJSZWcg
YnV0dGVyZmx5KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVDYWNo
ZUdlbmVyYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
SW5saW5lQ2FjaGVHZW5lcmF0b3IuaAkocmV2aXNpb24gMTU3NzA3KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVDYWNoZUdlbmVyYXRvci5oCSh3b3JraW5nIGNvcHkpCkBA
IC02Niw4ICs2NiwxMCBAQCBwdWJsaWM6CiAgICAgICAgIG1fY2FsbCA9IGNhbGw7CiAgICAgfQog
ICAgIAorICAgIE1hY3JvQXNzZW1ibGVyOjpQYXRjaGFibGVKdW1wIHNsb3dQYXRoUGF0Y2hhYmxl
SnVtcCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RydWN0dXJlQ2hlY2s7IH0KICAgICBNYWNyb0Fzc2Vt
Ymxlcjo6SnVtcCBzbG93UGF0aEp1bXAoKSBjb25zdCB7IHJldHVybiBtX3N0cnVjdHVyZUNoZWNr
Lm1fanVtcDsgfQogCisgICAgdm9pZCBmaW5hbGl6ZShMaW5rQnVmZmVyJiBmYXN0UGF0aExpbmtC
dWZmZXIsIExpbmtCdWZmZXImIHNsb3dQYXRoTGlua0J1ZmZlcik7CiAgICAgdm9pZCBmaW5hbGl6
ZShMaW5rQnVmZmVyJik7CiAgICAgCiBwcm90ZWN0ZWQ6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L1JlZ2lzdGVyU2V0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L1JlZ2lzdGVyU2V0LmNwcAkocmV2aXNpb24gMTU3NzA3KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9SZWdpc3RlclNldC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMzLDEy
ICszMywxOSBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAotUmVnaXN0ZXJTZXQgUmVnaXN0ZXJTZXQ6
OnNwZWNpYWxSZWdpc3RlcnMoKQorUmVnaXN0ZXJTZXQgUmVnaXN0ZXJTZXQ6OnN0YWNrUmVnaXN0
ZXJzKCkKIHsKICAgICBSZWdpc3RlclNldCByZXN1bHQ7Ci0gICAgcmVzdWx0LnNldChHUFJJbmZv
OjpjYWxsRnJhbWVSZWdpc3Rlcik7CiAgICAgcmVzdWx0LnNldChNYWNyb0Fzc2VtYmxlcjo6c3Rh
Y2tQb2ludGVyUmVnaXN0ZXIpOwogICAgIHJlc3VsdC5zZXQoTWFjcm9Bc3NlbWJsZXI6OmZyYW1l
UG9pbnRlclJlZ2lzdGVyKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitSZWdpc3RlclNldCBS
ZWdpc3RlclNldDo6c3BlY2lhbFJlZ2lzdGVycygpCit7CisgICAgUmVnaXN0ZXJTZXQgcmVzdWx0
OworICAgIHJlc3VsdC5tZXJnZShzdGFja1JlZ2lzdGVycygpKTsKKyAgICByZXN1bHQuc2V0KEdQ
UkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyKTsKICNpZiBVU0UoSlNWQUxVRTY0KQogICAgIHJlc3Vs
dC5zZXQoR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyKTsKICAgICByZXN1bHQuc2V0KEdQ
UkluZm86OnRhZ01hc2tSZWdpc3Rlcik7CkBAIC00Niw2ICs1Myw1MiBAQCBSZWdpc3RlclNldCBS
ZWdpc3RlclNldDo6c3BlY2lhbFJlZ2lzdGVyCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAorUmVn
aXN0ZXJTZXQgUmVnaXN0ZXJTZXQ6OmNhbGxlZVNhdmVSZWdpc3RlcnMoKQoreworICAgIFJlZ2lz
dGVyU2V0IHJlc3VsdDsKKyNpZiBDUFUoWDg2XzY0KQorICAgIHJlc3VsdC5zZXQoWDg2UmVnaXN0
ZXJzOjplYngpOworICAgIHJlc3VsdC5zZXQoWDg2UmVnaXN0ZXJzOjplYnApOworICAgIHJlc3Vs
dC5zZXQoWDg2UmVnaXN0ZXJzOjpyMTApOworICAgIHJlc3VsdC5zZXQoWDg2UmVnaXN0ZXJzOjpy
MTIpOworICAgIHJlc3VsdC5zZXQoWDg2UmVnaXN0ZXJzOjpyMTMpOworICAgIHJlc3VsdC5zZXQo
WDg2UmVnaXN0ZXJzOjpyMTQpOworICAgIHJlc3VsdC5zZXQoWDg2UmVnaXN0ZXJzOjpyMTUpOwor
I2Vsc2UKKyNlcnJvciAiVW5zdXBwb3J0ZWQgaW5zdHJ1Y3Rpb24gc2V0IgorI2VuZGlmCisgICAg
cmV0dXJuIHJlc3VsdDsKK30KKworUmVnaXN0ZXJTZXQgUmVnaXN0ZXJTZXQ6OmFsbEdQUnMoKQor
eworICAgIFJlZ2lzdGVyU2V0IHJlc3VsdDsKKyAgICBmb3IgKE1hY3JvQXNzZW1ibGVyOjpSZWdp
c3RlcklEIHJlZyA9IE1hY3JvQXNzZW1ibGVyOjpmaXJzdFJlZ2lzdGVyKCk7IHJlZyA8PSBNYWNy
b0Fzc2VtYmxlcjo6bGFzdFJlZ2lzdGVyKCk7IHJlZyA9IHN0YXRpY19jYXN0PE1hY3JvQXNzZW1i
bGVyOjpSZWdpc3RlcklEPihyZWcgKyAxKSkKKyAgICAgICAgcmVzdWx0LnNldChyZWcpOworICAg
IHJldHVybiByZXN1bHQ7Cit9CisKK1JlZ2lzdGVyU2V0IFJlZ2lzdGVyU2V0OjphbGxGUFJzKCkK
K3sKKyAgICBSZWdpc3RlclNldCByZXN1bHQ7CisgICAgZm9yIChNYWNyb0Fzc2VtYmxlcjo6RlBS
ZWdpc3RlcklEIHJlZyA9IE1hY3JvQXNzZW1ibGVyOjpmaXJzdEZQUmVnaXN0ZXIoKTsgcmVnIDw9
IE1hY3JvQXNzZW1ibGVyOjpsYXN0RlBSZWdpc3RlcigpOyByZWcgPSBzdGF0aWNfY2FzdDxNYWNy
b0Fzc2VtYmxlcjo6RlBSZWdpc3RlcklEPihyZWcgKyAxKSkKKyAgICAgICAgcmVzdWx0LnNldChy
ZWcpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK1JlZ2lzdGVyU2V0IFJlZ2lzdGVyU2V0Ojph
bGxSZWdpc3RlcnMoKQoreworICAgIFJlZ2lzdGVyU2V0IHJlc3VsdDsKKyAgICByZXN1bHQubWVy
Z2UoYWxsR1BScygpKTsKKyAgICByZXN1bHQubWVyZ2UoYWxsRlBScygpKTsKKyAgICByZXR1cm4g
cmVzdWx0OworfQorCit2b2lkIFJlZ2lzdGVyU2V0OjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNv
bnN0Cit7CisgICAgbV92ZWN0b3IuZHVtcChvdXQpOworfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MK
IAogI2VuZGlmIC8vIEVOQUJMRShKSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L1JlZ2lzdGVyU2V0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9S
ZWdpc3RlclNldC5oCShyZXZpc2lvbiAxNTc3MDcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L1JlZ2lzdGVyU2V0LmgJKHdvcmtpbmcgY29weSkKQEAgLTQyLDcgKzQyLDEyIEBAIGNsYXNz
IFJlZ2lzdGVyU2V0IHsKIHB1YmxpYzoKICAgICBSZWdpc3RlclNldCgpIHsgfQogICAgIAorICAg
IHN0YXRpYyBSZWdpc3RlclNldCBzdGFja1JlZ2lzdGVycygpOwogICAgIHN0YXRpYyBSZWdpc3Rl
clNldCBzcGVjaWFsUmVnaXN0ZXJzKCk7CisgICAgc3RhdGljIFJlZ2lzdGVyU2V0IGNhbGxlZVNh
dmVSZWdpc3RlcnMoKTsKKyAgICBzdGF0aWMgUmVnaXN0ZXJTZXQgYWxsR1BScygpOworICAgIHN0
YXRpYyBSZWdpc3RlclNldCBhbGxGUFJzKCk7CisgICAgc3RhdGljIFJlZ2lzdGVyU2V0IGFsbFJl
Z2lzdGVycygpOwogCiAgICAgdm9pZCBzZXQoR1BSUmVnIHJlZywgYm9vbCB2YWx1ZSA9IHRydWUp
CiAgICAgewpAQCAtNzYsMTMgKzgxLDU1IEBAIHB1YmxpYzoKICAgICBib29sIGdldChGUFJSZWcg
cmVnKSBjb25zdCB7IHJldHVybiBtX3ZlY3Rvci5nZXQoTWFjcm9Bc3NlbWJsZXI6OnJlZ2lzdGVy
SW5kZXgocmVnKSk7IH0KICAgICAKICAgICB2b2lkIG1lcmdlKGNvbnN0IFJlZ2lzdGVyU2V0JiBv
dGhlcikgeyBtX3ZlY3Rvci5tZXJnZShvdGhlci5tX3ZlY3Rvcik7IH0KKyAgICB2b2lkIGV4Y2x1
ZGUoY29uc3QgUmVnaXN0ZXJTZXQmIG90aGVyKSB7IG1fdmVjdG9yLmV4Y2x1ZGUob3RoZXIubV92
ZWN0b3IpOyB9CisgICAgCisgICAgc2l6ZV90IG51bWJlck9mU2V0UmVnaXN0ZXJzKCkgY29uc3Qg
eyByZXR1cm4gbV92ZWN0b3IuYml0Q291bnQoKTsgfQorICAgIAorICAgIHZvaWQgZHVtcChQcmlu
dFN0cmVhbSYpIGNvbnN0OworICAgIAorICAgIGVudW0gRW1wdHlWYWx1ZVRhZyB7IEVtcHR5VmFs
dWUgfTsKKyAgICBlbnVtIERlbGV0ZWRWYWx1ZVRhZyB7IERlbGV0ZWRWYWx1ZSB9OworICAgIAor
ICAgIFJlZ2lzdGVyU2V0KEVtcHR5VmFsdWVUYWcpCisgICAgICAgIDogbV92ZWN0b3IoQml0VmVj
dG9yOjpFbXB0eVZhbHVlKQorICAgIHsKKyAgICB9CisgICAgCisgICAgUmVnaXN0ZXJTZXQoRGVs
ZXRlZFZhbHVlVGFnKQorICAgICAgICA6IG1fdmVjdG9yKEJpdFZlY3Rvcjo6RGVsZXRlZFZhbHVl
KQorICAgIHsKKyAgICB9CisgICAgCisgICAgYm9vbCBpc0VtcHR5VmFsdWUoKSBjb25zdCB7IHJl
dHVybiBtX3ZlY3Rvci5pc0VtcHR5VmFsdWUoKTsgfQorICAgIGJvb2wgaXNEZWxldGVkVmFsdWUo
KSBjb25zdCB7IHJldHVybiBtX3ZlY3Rvci5pc0RlbGV0ZWRWYWx1ZSgpOyB9CisgICAgCisgICAg
Ym9vbCBvcGVyYXRvcj09KGNvbnN0IFJlZ2lzdGVyU2V0JiBvdGhlcikgY29uc3QgeyByZXR1cm4g
bV92ZWN0b3IgPT0gb3RoZXIubV92ZWN0b3I7IH0KKyAgICB1bnNpZ25lZCBoYXNoKCkgY29uc3Qg
eyByZXR1cm4gbV92ZWN0b3IuaGFzaCgpOyB9CiAgICAgCiBwcml2YXRlOgogICAgIEJpdFZlY3Rv
ciBtX3ZlY3RvcjsKIH07CiAKK3N0cnVjdCBSZWdpc3RlclNldEhhc2ggeworICAgIHN0YXRpYyB1
bnNpZ25lZCBoYXNoKGNvbnN0IFJlZ2lzdGVyU2V0JiBzZXQpIHsgcmV0dXJuIHNldC5oYXNoKCk7
IH0KKyAgICBzdGF0aWMgYm9vbCBlcXVhbChjb25zdCBSZWdpc3RlclNldCYgYSwgY29uc3QgUmVn
aXN0ZXJTZXQmIGIpIHsgcmV0dXJuIGEgPT0gYjsgfQorICAgIHN0YXRpYyBjb25zdCBib29sIHNh
ZmVUb0NvbXBhcmVUb0VtcHR5T3JEZWxldGVkID0gZmFsc2U7Cit9OworCiB9IC8vIG5hbWVzcGFj
ZSBKU0MKIAorbmFtZXNwYWNlIFdURiB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBE
ZWZhdWx0SGFzaDsKK3RlbXBsYXRlPD4gc3RydWN0IERlZmF1bHRIYXNoPEpTQzo6UmVnaXN0ZXJT
ZXQ+IHsKKyAgICB0eXBlZGVmIEpTQzo6UmVnaXN0ZXJTZXRIYXNoIEhhc2g7Cit9OworCit0ZW1w
bGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgSGFzaFRyYWl0czsKK3RlbXBsYXRlPD4gc3RydWN0IEhh
c2hUcmFpdHM8SlNDOjpSZWdpc3RlclNldD4gOiBwdWJsaWMgQ3VzdG9tSGFzaFRyYWl0czxKU0M6
OlJlZ2lzdGVyU2V0PiB7IH07CisKK30gLy8gbmFtZXNwYWNlIFdURgorCiAjZW5kaWYgLy8gRU5B
QkxFKEpJVCkKIAogI2VuZGlmIC8vIFJlZ2lzdGVyU2V0X2gKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL09wdGlvbnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9PcHRpb25zLmgJKHJldmlzaW9uIDE1NzcwNykKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuaAkod29ya2luZyBjb3B5KQpAQCAtMTI1LDYgKzEy
NSw3IEBAIHR5cGVkZWYgT3B0aW9uUmFuZ2Ugb3B0aW9uUmFuZ2U7CiAgICAgdihib29sLCBmdGxU
cmFwc09uT1NSRXhpdCwgZmFsc2UpIFwKICAgICB2KGJvb2wsIGZ0bE9TUkV4aXRPbWl0c01hcnNo
YWxsaW5nLCBmYWxzZSkgXAogICAgIHYoYm9vbCwgZnRsT1NSRXhpdFVzZXNTdGFja21hcCwgZmFs
c2UpIFwKKyAgICB2KGJvb2wsIGZ0bElDVXNlc1BhdGNocG9pbnQsIGZhbHNlKSBcCiAgICAgdihi
b29sLCB1c2VMTFZNT1NSRXhpdEludHJpbnNpYywgZmFsc2UpIFwKICAgICB2KGJvb2wsIGR1bXBM
TFZNSVIsIGZhbHNlKSBcCiAgICAgdihib29sLCBsbHZtQWx3YXlzRmFpbHNCZWZvcmVDb21waWxl
LCBmYWxzZSkgXApJbmRleDogU291cmNlL1dURi93dGYvQml0VmVjdG9yLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV1RGL3d0Zi9CaXRWZWN0b3IuY3BwCShyZXZpc2lvbiAxNTc3MDcpCisrKyBT
b3VyY2UvV1RGL3d0Zi9CaXRWZWN0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjQsNyArMTI0
LDU4IEBAIHZvaWQgQml0VmVjdG9yOjptZXJnZVNsb3coY29uc3QgQml0VmVjdG8KICAgICAgICAg
YS0+Yml0cygpW2ldIHw9IGItPmJpdHMoKVtpXTsKIH0KIAotdm9pZCBCaXRWZWN0b3I6OmR1bXAo
UHJpbnRTdHJlYW0mIG91dCkKK3ZvaWQgQml0VmVjdG9yOjpleGNsdWRlU2xvdyhjb25zdCBCaXRW
ZWN0b3ImIG90aGVyKQoreworICAgIGlmIChvdGhlci5pc0lubGluZSgpKSB7CisgICAgICAgIEFT
U0VSVCghaXNJbmxpbmUoKSk7CisgICAgICAgICpiaXRzKCkgJj0gfmNsZWFuc2VJbmxpbmVCaXRz
KG90aGVyLm1fYml0c09yUG9pbnRlcik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisg
ICAgaWYgKGlzSW5saW5lKCkpIHsKKyAgICAgICAgQVNTRVJUKCFvdGhlci5pc0lubGluZSgpKTsK
KyAgICAgICAgbV9iaXRzT3JQb2ludGVyICY9IH4qb3RoZXIub3V0T2ZMaW5lQml0cygpLT5iaXRz
KCk7CisgICAgICAgIG1fYml0c09yUG9pbnRlciB8PSAoc3RhdGljX2Nhc3Q8dWludHB0cl90Pigx
KSA8PCBtYXhJbmxpbmVCaXRzKCkpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorICAg
IE91dE9mTGluZUJpdHMqIGEgPSBvdXRPZkxpbmVCaXRzKCk7CisgICAgY29uc3QgT3V0T2ZMaW5l
Qml0cyogYiA9IG90aGVyLm91dE9mTGluZUJpdHMoKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSBz
dGQ6Om1pbihhLT5udW1Xb3JkcygpLCBiLT5udW1Xb3JkcygpKTsgaS0tOykKKyAgICAgICAgYS0+
Yml0cygpW2ldICY9IH5iLT5iaXRzKClbaV07Cit9CisKK3NpemVfdCBCaXRWZWN0b3I6OmJpdENv
dW50U2xvdygpIGNvbnN0Cit7CisgICAgQVNTRVJUKCFpc0lubGluZSgpKTsKKyAgICBjb25zdCBP
dXRPZkxpbmVCaXRzKiBiaXRzID0gb3V0T2ZMaW5lQml0cygpOworICAgIHNpemVfdCByZXN1bHQg
PSAwOworICAgIGZvciAodW5zaWduZWQgaSA9IGJpdHMtPm51bVdvcmRzKCk7IGktLTspCisgICAg
ICAgIHJlc3VsdCArPSBiaXRDb3VudChiaXRzLT5iaXRzKClbaV0pOworICAgIHJldHVybiByZXN1
bHQ7Cit9CisKK2Jvb2wgQml0VmVjdG9yOjplcXVhbHNTbG93Q2FzZShjb25zdCBCaXRWZWN0b3Im
IG90aGVyKSBjb25zdAoreworICAgIC8vIFRoaXMgaXMgcmVhbGx5IGNoZWVzeSwgYnV0IHByb2Jh
Ymx5IGdvb2QgZW5vdWdoIGZvciBub3cuCisgICAgZm9yICh1bnNpZ25lZCBpID0gc3RkOjptYXgo
c2l6ZSgpLCBvdGhlci5zaXplKCkpOyBpLS07KSB7CisgICAgICAgIGlmIChnZXQoaSkgIT0gb3Ro
ZXIuZ2V0KGkpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICByZXR1cm4g
dHJ1ZTsKK30KKwordWludHB0cl90IEJpdFZlY3Rvcjo6aGFzaFNsb3dDYXNlKCkgY29uc3QKK3sK
KyAgICBBU1NFUlQoIWlzSW5saW5lKCkpOworICAgIGNvbnN0IE91dE9mTGluZUJpdHMqIGJpdHMg
PSBvdXRPZkxpbmVCaXRzKCk7CisgICAgdWludHB0cl90IHJlc3VsdCA9IDA7CisgICAgZm9yICh1
bnNpZ25lZCBpID0gYml0cy0+bnVtV29yZHMoKTsgaS0tOykKKyAgICAgICAgcmVzdWx0IF49IGJp
dHMtPmJpdHMoKVtpXTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIEJpdFZlY3Rvcjo6
ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAogewogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgc2l6ZSgpOyArK2kpIHsKICAgICAgICAgaWYgKGdldChpKSkKSW5kZXg6IFNvdXJjZS9XVEYv
d3RmL0JpdFZlY3Rvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL0JpdFZlY3Rvci5o
CShyZXZpc2lvbiAxNTc3MDcpCisrKyBTb3VyY2UvV1RGL3d0Zi9CaXRWZWN0b3IuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMjgsNiArMjgsOCBAQAogCiAjaW5jbHVkZSA8c3RkaW8uaD4KICNpbmNsdWRl
IDx3dGYvQXNzZXJ0aW9ucy5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoRnVuY3Rpb25zLmg+CisjaW5j
bHVkZSA8d3RmL0hhc2hUcmFpdHMuaD4KICNpbmNsdWRlIDx3dGYvUHJpbnRTdHJlYW0uaD4KICNp
bmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CiAKQEAgLTE3OCw3ICsxODAsNTkgQEAgcHVibGlj
OiAKICAgICAgICAgbV9iaXRzT3JQb2ludGVyIHw9IG90aGVyLm1fYml0c09yUG9pbnRlcjsKICAg
ICB9CiAgICAgCi0gICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJiBvdXQpOworICAgIHZvaWQgZXhj
bHVkZShjb25zdCBCaXRWZWN0b3ImIG90aGVyKQorICAgIHsKKyAgICAgICAgaWYgKCFpc0lubGlu
ZSgpIHx8ICFvdGhlci5pc0lubGluZSgpKSB7CisgICAgICAgICAgICBleGNsdWRlU2xvdyhvdGhl
cik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgbV9iaXRzT3JQb2lu
dGVyICY9IH5vdGhlci5tX2JpdHNPclBvaW50ZXI7CisgICAgfQorICAgIAorICAgIHNpemVfdCBi
aXRDb3VudCgpIGNvbnN0CisgICAgeworICAgICAgICBpZiAoaXNJbmxpbmUoKSkKKyAgICAgICAg
ICAgIHJldHVybiBiaXRDb3VudChjbGVhbnNlSW5saW5lQml0cyhtX2JpdHNPclBvaW50ZXIpKTsK
KyAgICAgICAgcmV0dXJuIGJpdENvdW50U2xvdygpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGR1
bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3Q7CisgICAgCisgICAgZW51bSBFbXB0eVZhbHVlVGFn
IHsgRW1wdHlWYWx1ZSB9OworICAgIGVudW0gRGVsZXRlZFZhbHVlVGFnIHsgRGVsZXRlZFZhbHVl
IH07CisgICAgCisgICAgQml0VmVjdG9yKEVtcHR5VmFsdWVUYWcpCisgICAgICAgIDogbV9iaXRz
T3JQb2ludGVyKDApCisgICAgeworICAgIH0KKyAgICAKKyAgICBCaXRWZWN0b3IoRGVsZXRlZFZh
bHVlVGFnKQorICAgICAgICA6IG1fYml0c09yUG9pbnRlcigxKQorICAgIHsKKyAgICB9CisgICAg
CisgICAgYm9vbCBpc0VtcHR5VmFsdWUoKSBjb25zdCB7IHJldHVybiAhbV9iaXRzT3JQb2ludGVy
OyB9CisgICAgYm9vbCBpc0RlbGV0ZWRWYWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fYml0c09yUG9p
bnRlciA9PSAxOyB9CisgICAgCisgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEJpdFZlY3RvciYg
b3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICBpZiAoaXNJbmxpbmUoKSAmJiBvdGhlci5pc0lu
bGluZSgpKQorICAgICAgICAgICAgcmV0dXJuIG1fYml0c09yUG9pbnRlciA9PSBvdGhlci5tX2Jp
dHNPclBvaW50ZXI7CisgICAgICAgIHJldHVybiBlcXVhbHNTbG93Q2FzZShvdGhlcik7CisgICAg
fQorICAgIAorICAgIHVuc2lnbmVkIGhhc2goKSBjb25zdAorICAgIHsKKyAgICAgICAgLy8gVGhp
cyBpcyBhIHZlcnkgc2ltcGxlIGhhc2guIEp1c3QgeG9yIHRvZ2V0aGVyIHRoZSB3b3JkcyB0aGF0
IGhvbGQgdGhlIHZhcmlvdXMKKyAgICAgICAgLy8gYml0cyBhbmQgdGhlbiBjb21wdXRlIHRoZSBo
YXNoLiBUaGlzIG1ha2VzIGl0IHZlcnkgZWFzeSB0byBkZWFsIHdpdGggYml0dmVjdG9ycworICAg
ICAgICAvLyB0aGF0IGhhdmUgYSBsb3Qgb2YgdHJhaWxpbmcgemVybydzLgorICAgICAgICB1aW50
cHRyX3QgdmFsdWU7CisgICAgICAgIGlmIChpc0lubGluZSgpKQorICAgICAgICAgICAgdmFsdWUg
PSBjbGVhbnNlSW5saW5lQml0cyhtX2JpdHNPclBvaW50ZXIpOworICAgICAgICBlbHNlCisgICAg
ICAgICAgICB2YWx1ZSA9IGhhc2hTbG93Q2FzZSgpOworICAgICAgICByZXR1cm4gSW50SGFzaDx1
aW50cHRyX3Q+OjpoYXNoKHZhbHVlKTsKKyAgICB9CiAgICAgCiBwcml2YXRlOgogICAgIHN0YXRp
YyB1bnNpZ25lZCBiaXRzSW5Qb2ludGVyKCkKQEAgLTIwNyw2ICsyNjEsMTQgQEAgcHJpdmF0ZToK
ICAgICAgICAgcmV0dXJuIGJpdHMgJiB+KHN0YXRpY19jYXN0PHVpbnRwdHJfdD4oMSkgPDwgbWF4
SW5saW5lQml0cygpKTsKICAgICB9CiAgICAgCisgICAgc3RhdGljIHNpemVfdCBiaXRDb3VudCh1
aW50cHRyX3QgYml0cykKKyAgICB7CisgICAgICAgIGlmIChzaXplb2YodWludHB0cl90KSA9PSA0
KQorICAgICAgICAgICAgcmV0dXJuIFdURjo6Yml0Q291bnQoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+
KGJpdHMpKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcmV0dXJuIFdURjo6Yml0Q291bnQo
c3RhdGljX2Nhc3Q8dWludDY0X3Q+KGJpdHMpKTsKKyAgICB9CisgICAgCiAgICAgY2xhc3MgT3V0
T2ZMaW5lQml0cyB7CiAgICAgcHVibGljOgogICAgICAgICBzaXplX3QgbnVtQml0cygpIGNvbnN0
IHsgcmV0dXJuIG1fbnVtQml0czsgfQpAQCAtMjM2LDYgKzI5OCwxMiBAQCBwcml2YXRlOgogICAg
IFdURl9FWFBPUlRfUFJJVkFURSB2b2lkIHNldFNsb3coY29uc3QgQml0VmVjdG9yJiBvdGhlcik7
CiAgICAgCiAgICAgV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgbWVyZ2VTbG93KGNvbnN0IEJpdFZl
Y3RvciYgb3RoZXIpOworICAgIFdURl9FWFBPUlRfUFJJVkFURSB2b2lkIGV4Y2x1ZGVTbG93KGNv
bnN0IEJpdFZlY3RvciYgb3RoZXIpOworICAgIAorICAgIFdURl9FWFBPUlRfUFJJVkFURSBzaXpl
X3QgYml0Q291bnRTbG93KCkgY29uc3Q7CisgICAgCisgICAgV1RGX0VYUE9SVF9QUklWQVRFIGJv
b2wgZXF1YWxzU2xvd0Nhc2UoY29uc3QgQml0VmVjdG9yJiBvdGhlcikgY29uc3Q7CisgICAgV1RG
X0VYUE9SVF9QUklWQVRFIHVpbnRwdHJfdCBoYXNoU2xvd0Nhc2UoKSBjb25zdDsKICAgICAKICAg
ICB1aW50cHRyX3QqIGJpdHMoKQogICAgIHsKQEAgLTI1NCw2ICszMjIsMjAgQEAgcHJpdmF0ZToK
ICAgICB1aW50cHRyX3QgbV9iaXRzT3JQb2ludGVyOwogfTsKIAorc3RydWN0IEJpdFZlY3Rvckhh
c2ggeworICAgIHN0YXRpYyB1bnNpZ25lZCBoYXNoKGNvbnN0IEJpdFZlY3RvciYgdmVjdG9yKSB7
IHJldHVybiB2ZWN0b3IuaGFzaCgpOyB9CisgICAgc3RhdGljIGJvb2wgZXF1YWwoY29uc3QgQml0
VmVjdG9yJiBhLCBjb25zdCBCaXRWZWN0b3ImIGIpIHsgcmV0dXJuIGEgPT0gYjsgfQorICAgIHN0
YXRpYyBjb25zdCBib29sIHNhZmVUb0NvbXBhcmVUb0VtcHR5T3JEZWxldGVkID0gZmFsc2U7Cit9
OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgRGVmYXVsdEhhc2g7Cit0ZW1wbGF0ZTw+
IHN0cnVjdCBEZWZhdWx0SGFzaDxCaXRWZWN0b3I+IHsKKyAgICB0eXBlZGVmIEJpdFZlY3Rvckhh
c2ggSGFzaDsKK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBIYXNoVHJhaXRzOwor
dGVtcGxhdGU8PiBzdHJ1Y3QgSGFzaFRyYWl0czxCaXRWZWN0b3I+IDogcHVibGljIEN1c3RvbUhh
c2hUcmFpdHM8Qml0VmVjdG9yPiB7IH07CisKIH0gLy8gbmFtZXNwYWNlIFdURgogCiB1c2luZyBX
VEY6OkJpdFZlY3RvcjsKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL0hhc2hUcmFpdHMuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9IYXNoVHJhaXRzLmgJKHJldmlzaW9uIDE1NzcwNykKKysr
IFNvdXJjZS9XVEYvd3RmL0hhc2hUcmFpdHMuaAkod29ya2luZyBjb3B5KQpAQCAtMjE2LDYgKzIx
NiwzNCBAQCBzdHJ1Y3QgTnVsbGFibGVIYXNoVHJhaXRzIDogcHVibGljIEhhc2hUCiAgICAgc3Rh
dGljIFQgZW1wdHlWYWx1ZSgpIHsgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8VD4oMSk7IH0KIH07
CiAKKy8vIFVzZWZ1bCBmb3IgY2xhc3NlcyB0aGF0IHdhbnQgY29tcGxldGUgY29udHJvbCBvdmVy
IHdoYXQgaXMgZW1wdHkgYW5kIHdoYXQgaXMgZGVsZXRlZCwKKy8vIGFuZCBob3cgdG8gY29uc3Ry
dWN0IGJvdGguCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorc3RydWN0IEN1c3RvbUhhc2hUcmFpdHMg
OiBwdWJsaWMgR2VuZXJpY0hhc2hUcmFpdHM8VD4geworICAgIHN0YXRpYyBjb25zdCBib29sIGVt
cHR5VmFsdWVJc1plcm8gPSBmYWxzZTsKKyAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNJc0VtcHR5
VmFsdWVGdW5jdGlvbiA9IHRydWU7CisgICAgCisgICAgc3RhdGljIHZvaWQgY29uc3RydWN0RGVs
ZXRlZFZhbHVlKFQmIHNsb3QpCisgICAgeworICAgICAgICBuZXcgKE5vdE51bGwsICZzbG90KSBU
KFQ6OkRlbGV0ZWRWYWx1ZSk7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBib29sIGlzRGVsZXRl
ZFZhbHVlKGNvbnN0IFQmIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHZhbHVlLmlzRGVs
ZXRlZFZhbHVlKCk7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBUIGVtcHR5VmFsdWUoKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIFQoVDo6RW1wdHlWYWx1ZSk7CisgICAgfQorICAgIAorICAgIHN0
YXRpYyBib29sIGlzRW1wdHlWYWx1ZShjb25zdCBUJiB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJl
dHVybiB2YWx1ZS5pc0VtcHR5VmFsdWUoKTsKKyAgICB9Cit9OworCiB9IC8vIG5hbWVzcGFjZSBX
VEYKIAogdXNpbmcgV1RGOjpIYXNoVHJhaXRzOwpJbmRleDogU291cmNlL1dURi93dGYvU3RkTGli
RXh0cmFzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvU3RkTGliRXh0cmFzLmgJKHJl
dmlzaW9uIDE1NzcwNykKKysrIFNvdXJjZS9XVEYvd3RmL1N0ZExpYkV4dHJhcy5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xNTcsNiArMTU3LDExIEBAIGlubGluZSBzaXplX3QgYml0Q291bnQodW5zaWdu
ZWQgYml0cykKICAgICByZXR1cm4gKCgoYml0cyArIChiaXRzID4+IDQpKSAmIDB4RjBGMEYwRikg
KiAweDEwMTAxMDEpID4+IDI0OwogfQogCitpbmxpbmUgc2l6ZV90IGJpdENvdW50KHVpbnQ2NF90
IGJpdHMpCit7CisgICAgcmV0dXJuIGJpdENvdW50KHN0YXRpY19jYXN0PHVuc2lnbmVkPihiaXRz
KSkgKyBiaXRDb3VudChzdGF0aWNfY2FzdDx1bnNpZ25lZD4oYml0cyA+PiAzMikpOworfQorCiAv
LyBNYWNybyB0aGF0IHJldHVybnMgYSBjb21waWxlIHRpbWUgY29uc3RhbnQgd2l0aCB0aGUgbGVu
Z3RoIG9mIGFuIGFycmF5LCBidXQgZ2l2ZXMgYW4gZXJyb3IgaWYgcGFzc2VkIGEgbm9uLWFycmF5
LgogdGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IFNpemU+IGNoYXIgKCZBcnJheUxlbmd0aEhl
bHBlckZ1bmN0aW9uKFQgKCYpW1NpemVdKSlbU2l6ZV07CiAvLyBHQ0MgbmVlZHMgc29tZSBoZWxw
IHRvIGRlZHVjZSBhIDAgbGVuZ3RoIGFycmF5Lgo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>214821</attachid>
            <date>2013-10-21 23:32:37 -0700</date>
            <delta_ts>2013-10-22 04:34:39 -0700</delta_ts>
            <desc>starting to work?</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>78137</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxNTc3MDcpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkod29ya2luZyBjb3B5KQpAQCAtMTI5LDYgKzEyOSwxMyBAQAogCQkwRjI0RTU1NjE3RjBC
NzFDMDBBQkIyMTcgLyogSW5saW5lQ2FsbEZyYW1lU2V0LmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjI0RTU1NDE3RjBCNzFDMDBBQkIyMTcgLyogSW5s
aW5lQ2FsbEZyYW1lU2V0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKIAkJMEYyNEU1NTgxN0Y3NEVEQjAwQUJCMjE3IC8qIFZhbHVlUmVjb3ZlcnkuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyNEU1NTcx
N0Y3NEVEQjAwQUJCMjE3IC8qIFZhbHVlUmVjb3ZlcnkuY3BwICovOyB9OwogCQkwRjI1NkMzNjE2
MjdCMEFEMDA3RjI3ODMgLyogREZHQ2FsbEFycmF5QWxsb2NhdG9yU2xvd1BhdGhHZW5lcmF0b3Iu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMjU2QzM0
MTYyN0IwQUEwMDdGMjc4MyAvKiBERkdDYWxsQXJyYXlBbGxvY2F0b3JTbG93UGF0aEdlbmVyYXRv
ci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBG
MjVGMUFFMTgxNjM1RjMwMDUyMkYzOSAvKiBGVExJbmxpbmVDYWNoZURlc2NyaXB0b3IuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMjVGMUE3MTgxNjM1
RjMwMDUyMkYzOSAvKiBGVExJbmxpbmVDYWNoZURlc2NyaXB0b3IuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRjI1RjFBRjE4MTYzNUYzMDA1MjJG
MzkgLyogRlRMSW5saW5lQ2FjaGVTaXplLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGMjVGMUE4MTgxNjM1RjMwMDUyMkYzOSAvKiBGVExJbmxpbmVD
YWNoZVNpemUuY3BwICovOyB9OworCQkwRjI1RjFCMDE4MTYzNUYzMDA1MjJGMzkgLyogRlRMSW5s
aW5lQ2FjaGVTaXplLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRjI1RjFBOTE4MTYzNUYzMDA1MjJGMzkgLyogRlRMSW5saW5lQ2FjaGVTaXplLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEYyNUYxQjEx
ODE2MzVGMzAwNTIyRjM5IC8qIEZUTFNsb3dQYXRoQ2FsbC5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjI1RjFBQTE4MTYzNUYzMDA1MjJGMzkgLyog
RlRMU2xvd1BhdGhDYWxsLmNwcCAqLzsgfTsKKwkJMEYyNUYxQjIxODE2MzVGMzAwNTIyRjM5IC8q
IEZUTFNsb3dQYXRoQ2FsbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEYyNUYxQUIxODE2MzVGMzAwNTIyRjM5IC8qIEZUTFNsb3dQYXRoQ2FsbC5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGMjVGMUIz
MTgxNjM1RjMwMDUyMkYzOSAvKiBGVExTbG93UGF0aENhbGxLZXkuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyNUYxQUMxODE2MzVGMzAwNTIyRjM5
IC8qIEZUTFNsb3dQYXRoQ2FsbEtleS5jcHAgKi87IH07CisJCTBGMjVGMUI0MTgxNjM1RjMwMDUy
MkYzOSAvKiBGVExTbG93UGF0aENhbGxLZXkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGMjVGMUFEMTgxNjM1RjMwMDUyMkYzOSAvKiBGVExTbG93UGF0
aENhbGxLZXkuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwogCQkwRjJCNjZBQzE3QjZCNTNGMDBBN0FFM0YgLyogR0NJbmNvbWluZ1JlZkNvdW50ZWQuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkI2NkE4MTdC
NkI1M0QwMEE3QUUzRiAvKiBHQ0luY29taW5nUmVmQ291bnRlZC5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGMkI2NkFEMTdCNkI1NDUwMEE3QUUz
RiAvKiBHQ0luY29taW5nUmVmQ291bnRlZElubGluZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkI2NkE5MTdCNkI1M0QwMEE3QUUzRiAvKiBHQ0lu
Y29taW5nUmVmQ291bnRlZElubGluZXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwogCQkwRjJCNjZBRTE3QjZCNTQ1MDBBN0FFM0YgLyogR0NJbmNvbWlu
Z1JlZkNvdW50ZWRTZXQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDBGMkI2NkFBMTdCNkI1M0QwMEE3QUUzRiAvKiBHQ0luY29taW5nUmVmQ291bnRlZFNl
dC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC0x
Mzg0LDYgKzEzOTEsMTMgQEAKIAkJMEYyNEU1NTQxN0YwQjcxQzAwQUJCMjE3IC8qIElubGluZUNh
bGxGcmFtZVNldC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbmxpbmVDYWxs
RnJhbWVTZXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYyNEU1NTcxN0Y3NEVE
QjAwQUJCMjE3IC8qIFZhbHVlUmVjb3ZlcnkuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gVmFsdWVSZWNvdmVyeS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTBGMjU2QzM0MTYyN0IwQUEwMDdGMjc4MyAvKiBERkdDYWxsQXJyYXlBbGxvY2F0b3JTbG93
UGF0aEdlbmVyYXRvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdDYWxs
QXJyYXlBbGxvY2F0b3JTbG93UGF0aEdlbmVyYXRvci5oOyBwYXRoID0gZGZnL0RGR0NhbGxBcnJh
eUFsbG9jYXRvclNsb3dQYXRoR2VuZXJhdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTBGMjVGMUE3MTgxNjM1RjMwMDUyMkYzOSAvKiBGVExJbmxpbmVDYWNoZURlc2NyaXB0b3Iu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gRlRMSW5saW5lQ2FjaGVEZXNjcmlw
dG9yLmg7IHBhdGggPSBmdGwvRlRMSW5saW5lQ2FjaGVEZXNjcmlwdG9yLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTBGMjVGMUE4MTgxNjM1RjMwMDUyMkYzOSAvKiBGVExJbmxpbmVD
YWNoZVNpemUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gRlRMSW5s
aW5lQ2FjaGVTaXplLmNwcDsgcGF0aCA9IGZ0bC9GVExJbmxpbmVDYWNoZVNpemUuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjI1RjFBOTE4MTYzNUYzMDA1MjJGMzkgLyogRlRM
SW5saW5lQ2FjaGVTaXplLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEZUTElu
bGluZUNhY2hlU2l6ZS5oOyBwYXRoID0gZnRsL0ZUTElubGluZUNhY2hlU2l6ZS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQkwRjI1RjFBQTE4MTYzNUYzMDA1MjJGMzkgLyogRlRMU2xv
d1BhdGhDYWxsLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEZUTFNs
b3dQYXRoQ2FsbC5jcHA7IHBhdGggPSBmdGwvRlRMU2xvd1BhdGhDYWxsLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyNUYxQUIxODE2MzVGMzAwNTIyRjM5IC8qIEZUTFNsb3dQ
YXRoQ2FsbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBGVExTbG93UGF0aENh
bGwuaDsgcGF0aCA9IGZ0bC9GVExTbG93UGF0aENhbGwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJMEYyNUYxQUMxODE2MzVGMzAwNTIyRjM5IC8qIEZUTFNsb3dQYXRoQ2FsbEtleS5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBGVExTbG93UGF0aENhbGxL
ZXkuY3BwOyBwYXRoID0gZnRsL0ZUTFNsb3dQYXRoQ2FsbEtleS5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTBGMjVGMUFEMTgxNjM1RjMwMDUyMkYzOSAvKiBGVExTbG93UGF0aENh
bGxLZXkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gRlRMU2xvd1BhdGhDYWxs
S2V5Lmg7IHBhdGggPSBmdGwvRlRMU2xvd1BhdGhDYWxsS2V5Lmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTBGMkI2NkE4MTdCNkI1M0QwMEE3QUUzRiAvKiBHQ0luY29taW5nUmVmQ291
bnRlZC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBHQ0luY29taW5nUmVmQ291bnRlZC5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkwRjJCNjZBOTE3QjZCNTNEMDBBN0FFM0YgLyogR0NJbmNvbWlu
Z1JlZkNvdW50ZWRJbmxpbmVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEdDSW5jb21pbmdSZWZDb3VudGVk
SW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjJCNjZBQTE3QjZCNTNE
MDBBN0FFM0YgLyogR0NJbmNvbWluZ1JlZkNvdW50ZWRTZXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gR0NJ
bmNvbWluZ1JlZkNvdW50ZWRTZXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTI3
MzMsNiArMjc0Nyw5IEBACiAJCQkJMEZEOEEzMTUxN0Q1MUYyMjAwQ0EyQzQwIC8qIEZUTEZvck9T
UkVudHJ5SklUQ29kZS5jcHAgKi8sCiAJCQkJMEZEOEEzMTYxN0Q1MUYyMjAwQ0EyQzQwIC8qIEZU
TEZvck9TUkVudHJ5SklUQ29kZS5oICovLAogCQkJCUE3OEE5NzdDMTc5NzM4RDUwMDlERjc0NCAv
KiBGVExHZW5lcmF0ZWRGdW5jdGlvbi5oICovLAorCQkJCTBGMjVGMUE3MTgxNjM1RjMwMDUyMkYz
OSAvKiBGVExJbmxpbmVDYWNoZURlc2NyaXB0b3IuaCAqLywKKwkJCQkwRjI1RjFBODE4MTYzNUYz
MDA1MjJGMzkgLyogRlRMSW5saW5lQ2FjaGVTaXplLmNwcCAqLywKKwkJCQkwRjI1RjFBOTE4MTYz
NUYzMDA1MjJGMzkgLyogRlRMSW5saW5lQ2FjaGVTaXplLmggKi8sCiAJCQkJMEZFQTBBMjYxNzA5
NjIzQjAwQkI3MjJDIC8qIEZUTEludHJpbnNpY1JlcG9zaXRvcnkuY3BwICovLAogCQkJCTBGRUEw
QTIyMTcwOTYwNjkwMEJCNzIyQyAvKiBGVExJbnRyaW5zaWNSZXBvc2l0b3J5LmggKi8sCiAJCQkJ
MEZFQTBBMDIxNzA1MTNEQjAwQkI3MjJDIC8qIEZUTEpJVENvZGUuY3BwICovLApAQCAtMjc1Nyw2
ICsyNzc0LDEwIEBACiAJCQkJMEZFQTBBMDYxNzA1MTNEQjAwQkI3MjJDIC8qIEZUTE91dHB1dC5o
ICovLAogCQkJCTBGQ0VGQUE5MTgwNEMxM0UwMDQ3MkNFNCAvKiBGVExTYXZlUmVzdG9yZS5jcHAg
Ki8sCiAJCQkJMEZDRUZBQUExODA0QzEzRTAwNDcyQ0U0IC8qIEZUTFNhdmVSZXN0b3JlLmggKi8s
CisJCQkJMEYyNUYxQUExODE2MzVGMzAwNTIyRjM5IC8qIEZUTFNsb3dQYXRoQ2FsbC5jcHAgKi8s
CisJCQkJMEYyNUYxQUIxODE2MzVGMzAwNTIyRjM5IC8qIEZUTFNsb3dQYXRoQ2FsbC5oICovLAor
CQkJCTBGMjVGMUFDMTgxNjM1RjMwMDUyMkYzOSAvKiBGVExTbG93UGF0aENhbGxLZXkuY3BwICov
LAorCQkJCTBGMjVGMUFEMTgxNjM1RjMwMDUyMkYzOSAvKiBGVExTbG93UGF0aENhbGxLZXkuaCAq
LywKIAkJCQkwRjlEMzM5ODE4MDNBREI3MDA3M0MyQkMgLyogRlRMU3RhY2tNYXBzLmNwcCAqLywK
IAkJCQkwRjlEMzM5OTE4MDNBREI3MDA3M0MyQkMgLyogRlRMU3RhY2tNYXBzLmggKi8sCiAJCQkJ
MEZFQTBBMTUxNzA2QkI5MDAwQkI3MjJDIC8qIEZUTFN0YXRlLmNwcCAqLywKQEAgLTQzOTAsNiAr
NDQxMSw3IEBACiAJCQkJMTQwRDE3RDcwRThBRDRBOTAwMENEMTdEIC8qIEpTQmFzZVByaXZhdGUu
aCBpbiBIZWFkZXJzICovLAogCQkJCTg2RkE5RTkyMTQyQkJCMkUwMDE3NzNCNyAvKiBKU0JvdW5k
RnVuY3Rpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDE5MEUxNkY1Q0QwMEIzNDQ2MCAv
KiBKU0NhbGxiYWNrQ29uc3RydWN0b3IuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGMjVGMUIyMTgx
NjM1RjMwMDUyMkYzOSAvKiBGVExTbG93UGF0aENhbGwuaCBpbiBIZWFkZXJzICovLAogCQkJCUJD
MThDNDFBMEUxNkY1Q0QwMEIzNDQ2MCAvKiBKU0NhbGxiYWNrRnVuY3Rpb24uaCBpbiBIZWFkZXJz
ICovLAogCQkJCUJDMThDNDFCMEUxNkY1Q0QwMEIzNDQ2MCAvKiBKU0NhbGxiYWNrT2JqZWN0Lmgg
aW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQxQzBFMTZGNUNEMDBCMzQ0NjAgLyogSlNDYWxsYmFj
a09iamVjdEZ1bmN0aW9ucy5oIGluIEhlYWRlcnMgKi8sCkBAIC00NTA3LDYgKzQ1MjksNyBAQAog
CQkJCTBGNDY4MENCMTRCQkIxNzIwMEJGRTI3MiAvKiBMTEludE9mZmxpbmVBc21Db25maWcuaCBp
biBIZWFkZXJzICovLAogCQkJCUZFRDI4N0IyMTVFQzlBNTcwMERBODE2MSAvKiBMTEludE9wY29k
ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY0NjgwQTUxNEJBN0Y4RDAwQkZFMjcyIC8qIExMSW50
U2xvd1BhdGhzLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjI1RjFBRTE4MTYzNUYzMDA1MjJGMzkg
LyogRlRMSW5saW5lQ2FjaGVEZXNjcmlwdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQlBN0JEQUVD
QjE3RjRFQTE0MDBGNjE0MEMgLyogSlNBcnJheUl0ZXJhdG9yLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkwRjBCODM5RDE0QkNGNDY2MDA4ODVCNEYgLyogTExJbnRUaHVua3MuaCBpbiBIZWFkZXJzICov
LAogCQkJCUE3RTVBQjM4MTc5OUU0QjIwMEQyODMzRCAvKiBMTFZNRGlzYXNzZW1ibGVyLmggaW4g
SGVhZGVycyAqLywKQEAgLTQ2NTIsNiArNDY3NSw3IEBACiAJCQkJQkMxOEM0NkEwRTE2RjVDRDAw
QjM0NDYwIC8qIFN0cmluZ1Byb3RvdHlwZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTQyRTMxM0Ix
MzRGRjBBNjAwQUZBREI1IC8qIFN0cm9uZy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTQ1NzIyODYx
NDM3RTE0MDAwNUZERTI2IC8qIFN0cm9uZ0lubGluZXMuaCBpbiBIZWFkZXJzICovLAorCQkJCTBG
MjVGMUI0MTgxNjM1RjMwMDUyMkYzOSAvKiBGVExTbG93UGF0aENhbGxLZXkuaCBpbiBIZWFkZXJz
ICovLAogCQkJCUE3Q0EzQUU2MTdEQTQxQUUwMDY1MzhBRiAvKiBXZWFrTWFwUHJvdG90eXBlLmgg
aW4gSGVhZGVycyAqLywKIAkJCQlCQ0RFM0FCODBFNkM4MkY1MDAxNDUzQTcgLyogU3RydWN0dXJl
LmggaW4gSGVhZGVycyAqLywKIAkJCQk3RTRFRTcwOTBFQkI3OTYzMDA1OTM0QUEgLyogU3RydWN0
dXJlQ2hhaW4uaCBpbiBIZWFkZXJzICovLApAQCAtNDcwMCw2ICs0NzI0LDcgQEAKIAkJCQlCQzE4
QzQyMDBFMTZGNUNEMDBCMzQ0NjAgLyogVk0uaCBpbiBIZWFkZXJzICovLAogCQkJCUZFNEEzMzIw
MTVCRDJFMDcwMDZGNTRGMyAvKiBWTUluc3BlY3Rvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRkU2
NjE3MjgxNzc0RTAzNTAwNDk1QjAwIC8qIFZNU3RhY2tCb3VuZHMuaCBpbiBIZWFkZXJzICovLAor
CQkJCTBGMjVGMUIwMTgxNjM1RjMwMDUyMkYzOSAvKiBGVExJbmxpbmVDYWNoZVNpemUuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTBGQzgxNTE1MTQwNTExOUIwMENGQTYwMyAvKiBWVGFibGVTcGVjdHJ1
bS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRkVEOTRGMkYxNzFFM0UyMzAwQkU3N0E0IC8qIFdhdGNo
ZG9nLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjkxOUQyNjE1ODUzQ0UzMDA0QTRFN0QgLyogV2F0
Y2hwb2ludC5oIGluIEhlYWRlcnMgKi8sCkBAIC01MTY4LDYgKzUxOTMsNyBAQAogCQkJCTE0N0Yz
OUMxMTA3RUMzNzYwMDQyN0E0OCAvKiBDb21tb25JZGVudGlmaWVycy5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQlBNzA5RjJGMjE3QTBBQzJBMDA1MTJFOTggLyogQ29tbW9uU2xvd1BhdGhzLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTY1NTNBMzMxMTdBMUYxRUUwMDhDRjZGMyAvKiBDb21tb25TbG93
UGF0aHNFeGNlcHRpb25zLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGMjVGMUIzMTgxNjM1RjMw
MDUyMkYzOSAvKiBGVExTbG93UGF0aENhbGxLZXkuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTdF
NUEzQTcxNzk3NDMyRDAwRTg5M0MwIC8qIENvbXBpbGF0aW9uUmVzdWx0LmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTE0N0YzOUMyMTA3RUMzNzYwMDQyN0E0OCAvKiBDb21wbGV0aW9uLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTE0NkIxNkQ4MTJFQjVCNTkwMDFCRUMxQiAvKiBDb25zZXJ2YXRpdmVS
b290cy5jcHAgaW4gU291cmNlcyAqLywKQEAgLTUxODEsNiArNTIwNyw3IEBACiAJCQkJMEZEOEEz
MUIxN0Q1MUYyMjAwQ0EyQzQwIC8qIEZUTE9TUkVudHJ5LmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTE0N0YzOUM1MTA3RUMzNzYwMDQyN0E0OCAvKiBEYXRlSW5zdGFuY2UuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJMTQ3RjM5QzYxMDdFQzM3NjAwNDI3QTQ4IC8qIERhdGVQcm90b3R5cGUuY3BwIGlu
IFNvdXJjZXMgKi8sCisJCQkJMEYyNUYxQjExODE2MzVGMzAwNTIyRjM5IC8qIEZUTFNsb3dQYXRo
Q2FsbC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDI4MDgyMzEwN0VDMDJDMDAxM0U3QjIgLyog
RGVidWdnZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkMzMTM1NjUwRjMwMkZBMzAwM0RGRDNB
IC8qIERlYnVnZ2VyQWN0aXZhdGlvbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDk1NTlFRTBE
RENEREY3MDA2NDgwODcgLyogRGVidWdnZXJDYWxsRnJhbWUuY3BwIGluIFNvdXJjZXMgKi8sCkBA
IC01NTQ1LDYgKzU1NzIsNyBAQAogCQkJCTBGMkI2NzBBMTdCNkI1QUIwMEE3QUUzRiAvKiBUeXBl
ZEFycmF5VHlwZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkY0Mjc0QTE1OEVCRTkxMDA0Q0I5
RkYgLyogdWRpczg2LmMgaW4gU291cmNlcyAqLywKIAkJCQkwRkY0Mjc0MDE1OEVCRThCMDA0Q0I5
RkYgLyogdWRpczg2X2RlY29kZS5jIGluIFNvdXJjZXMgKi8sCisJCQkJMEYyNUYxQUYxODE2MzVG
MzAwNTIyRjM5IC8qIEZUTElubGluZUNhY2hlU2l6ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkw
RkY0Mjc0MzE1OEVCRTkxMDA0Q0I5RkYgLyogdWRpczg2X2lucHV0LmMgaW4gU291cmNlcyAqLywK
IAkJCQkwRkY0Mjc0RDE1OEVCRkU2MDA0Q0I5RkYgLyogdWRpczg2X2l0YWJfaG9sZGVyLmMgaW4g
U291cmNlcyAqLywKIAkJCQkwRkY0Mjc0NTE1OEVCRTkxMDA0Q0I5RkYgLyogdWRpczg2X3N5bi1h
dHQuYyBpbiBTb3VyY2VzICovLApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxl
ci9BYnN0cmFjdE1hY3JvQXNzZW1ibGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Fzc2VtYmxlci9BYnN0cmFjdE1hY3JvQXNzZW1ibGVyLmgJKHJldmlzaW9uIDE1Nzcw
NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQWJzdHJhY3RNYWNyb0Fzc2Vt
Ymxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC04MTgsMTQgKzgxOCwxNSBAQCBwdWJsaWM6CiAgICAg
ewogICAgICAgICBBc3NlbWJsZXJUeXBlOjpjYWNoZUZsdXNoKGNvZGUsIHNpemUpOwogICAgIH0K
KworICAgIEFzc2VtYmxlclR5cGUgbV9hc3NlbWJsZXI7CisgICAgCiBwcm90ZWN0ZWQ6CiAgICAg
QWJzdHJhY3RNYWNyb0Fzc2VtYmxlcigpCiAgICAgICAgIDogbV9yYW5kb21Tb3VyY2UoY3J5cHRv
Z3JhcGhpY2FsbHlSYW5kb21OdW1iZXIoKSkKICAgICB7CiAgICAgfQogCi0gICAgQXNzZW1ibGVy
VHlwZSBtX2Fzc2VtYmxlcjsKLSAgICAKICAgICB1aW50MzJfdCByYW5kb20oKQogICAgIHsKICAg
ICAgICAgcmV0dXJuIG1fcmFuZG9tU291cmNlLmdldFVpbnQzMigpOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9MaW5rQnVmZmVyLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0xpbmtCdWZmZXIuY3BwCShyZXZpc2lvbiAxNTc3
MDcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0xpbmtCdWZmZXIuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIsIDIw
MTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCkBAIC0zNyw3ICszNywxMSBAQCBMaW5rQnVmZmVyOjpDb2RlUmVmIExpbmtCdWZm
ZXI6OmZpbmFsaXplCiB7CiAgICAgcGVyZm9ybUZpbmFsaXphdGlvbigpOwogICAgIAotICAgIHJl
dHVybiBDb2RlUmVmKG1fZXhlY3V0YWJsZU1lbW9yeSk7CisgICAgQVNTRVJUKG1fZGlkQWxsb2Nh
dGUpOworICAgIGlmIChtX2V4ZWN1dGFibGVNZW1vcnkpCisgICAgICAgIHJldHVybiBDb2RlUmVm
KG1fZXhlY3V0YWJsZU1lbW9yeSk7CisgICAgCisgICAgcmV0dXJuIENvZGVSZWY6OmNyZWF0ZVNl
bGZNYW5hZ2VkQ29kZVJlZihNYWNyb0Fzc2VtYmxlckNvZGVQdHIobV9jb2RlKSk7CiB9CiAKIExp
bmtCdWZmZXI6OkNvZGVSZWYgTGlua0J1ZmZlcjo6ZmluYWxpemVDb2RlV2l0aERpc2Fzc2VtYmx5
KGNvbnN0IGNoYXIqIGZvcm1hdCwgLi4uKQpAQCAtMTM0LDcgKzEzOCw2IEBAIHZvaWQgTGlua0J1
ZmZlcjo6Y29weUNvbXBhY3RBbmRMaW5rQ29kZSgKIAogdm9pZCBMaW5rQnVmZmVyOjpsaW5rQ29k
ZSh2b2lkKiBvd25lclVJRCwgSklUQ29tcGlsYXRpb25FZmZvcnQgZWZmb3J0KQogewotICAgIEFT
U0VSVCghbV9jb2RlKTsKICNpZiAhRU5BQkxFKEJSQU5DSF9DT01QQUNUSU9OKQogICAgIEFzc2Vt
YmxlckJ1ZmZlciYgYnVmZmVyID0gbV9hc3NlbWJsZXItPm1fYXNzZW1ibGVyLmJ1ZmZlcigpOwog
ICAgIGFsbG9jYXRlKGJ1ZmZlci5jb2RlU2l6ZSgpLCBvd25lclVJRCwgZWZmb3J0KTsKQEAgLTE1
MSw2ICsxNTQsMTUgQEAgdm9pZCBMaW5rQnVmZmVyOjpsaW5rQ29kZSh2b2lkKiBvd25lclVJRAog
CiB2b2lkIExpbmtCdWZmZXI6OmFsbG9jYXRlKHNpemVfdCBpbml0aWFsU2l6ZSwgdm9pZCogb3du
ZXJVSUQsIEpJVENvbXBpbGF0aW9uRWZmb3J0IGVmZm9ydCkKIHsKKyAgICBpZiAobV9jb2RlKSB7
CisgICAgICAgIGlmIChpbml0aWFsU2l6ZSA+IG1fc2l6ZSkKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgCisgICAgICAgIG1fZGlkQWxsb2NhdGUgPSB0cnVlOworICAgICAgICBtX3NpemUg
PSBpbml0aWFsU2l6ZTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKICAgICBtX2V4ZWN1
dGFibGVNZW1vcnkgPSBtX3ZtLT5leGVjdXRhYmxlQWxsb2NhdG9yLmFsbG9jYXRlKCptX3ZtLCBp
bml0aWFsU2l6ZSwgb3duZXJVSUQsIGVmZm9ydCk7CiAgICAgaWYgKCFtX2V4ZWN1dGFibGVNZW1v
cnkpCiAgICAgICAgIHJldHVybjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJs
ZXIvTGlua0J1ZmZlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3Nl
bWJsZXIvTGlua0J1ZmZlci5oCShyZXZpc2lvbiAxNTc3MDcpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYXNzZW1ibGVyL0xpbmtCdWZmZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUg
QEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDksIDIwMTAsIDIwMTIgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA5LCAyMDEwLCAyMDEyLCAyMDEz
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwpAQCAtOTQsNiArOTQsMjIgQEAgcHVibGljOgogICAgICAgICBsaW5rQ29kZShvd25l
clVJRCwgZWZmb3J0KTsKICAgICB9CiAKKyAgICBMaW5rQnVmZmVyKFZNJiB2bSwgTWFjcm9Bc3Nl
bWJsZXIqIG1hc20sIHZvaWQqIGNvZGUsIHNpemVfdCBzaXplKQorICAgICAgICA6IG1fc2l6ZShz
aXplKQorI2lmIEVOQUJMRShCUkFOQ0hfQ09NUEFDVElPTikKKyAgICAgICAgLCBtX2luaXRpYWxT
aXplKDApCisjZW5kaWYKKyAgICAgICAgLCBtX2RpZEFsbG9jYXRlKGZhbHNlKQorICAgICAgICAs
IG1fY29kZShjb2RlKQorICAgICAgICAsIG1fYXNzZW1ibGVyKG1hc20pCisgICAgICAgICwgbV92
bSgmdm0pCisjaWZuZGVmIE5ERUJVRworICAgICAgICAsIG1fY29tcGxldGVkKGZhbHNlKQorI2Vu
ZGlmCisgICAgeworICAgICAgICBsaW5rQ29kZSgwLCBKSVRDb21waWxhdGlvbkNhbkZhaWwpOwor
ICAgIH0KKwogICAgIH5MaW5rQnVmZmVyKCkKICAgICB7CiAgICAgfQpAQCAtMTE3LDYgKzEzMywx
MSBAQCBwdWJsaWM6CiAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpsaW5rQ2FsbChjb2RlKCksIGNh
bGwsIGZ1bmN0aW9uKTsKICAgICB9CiAgICAgCisgICAgdm9pZCBsaW5rKENhbGwgY2FsbCwgQ29k
ZUxvY2F0aW9uTGFiZWwgbGFiZWwpCisgICAgeworICAgICAgICBsaW5rKGNhbGwsIEZ1bmN0aW9u
UHRyKGxhYmVsLmV4ZWN1dGFibGVBZGRyZXNzKCkpKTsKKyAgICB9CisgICAgCiAgICAgdm9pZCBs
aW5rKEp1bXAganVtcCwgQ29kZUxvY2F0aW9uTGFiZWwgbGFiZWwpCiAgICAgewogICAgICAgICBq
dW1wLm1fbGFiZWwgPSBhcHBseU9mZnNldChqdW1wLm1fbGFiZWwpOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Z0bC9GVExBYmJyZXZpYXRpb25zLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2Z0bC9GVExBYmJyZXZpYXRpb25zLmgJKHJldmlzaW9uIDE1NzcwNykK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQWJicmV2aWF0aW9ucy5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xNDUsNiArMTQ1LDcgQEAgZW51bSBCaXRFeHRlbnNpb24geyBaZXJvRXh0ZW5k
LCBTaWduRXh0ZQogc3RhdGljIGlubGluZSBMVmFsdWUgY29uc3RJbnQoTFR5cGUgdHlwZSwgdW5z
aWduZWQgbG9uZyBsb25nIHZhbHVlLCBCaXRFeHRlbnNpb24gZXh0ZW5zaW9uID0gWmVyb0V4dGVu
ZCkgeyByZXR1cm4gbGx2bS0+Q29uc3RJbnQodHlwZSwgdmFsdWUsIGV4dGVuc2lvbiA9PSBTaWdu
RXh0ZW5kKTsgfQogc3RhdGljIGlubGluZSBMVmFsdWUgY29uc3RSZWFsKExUeXBlIHR5cGUsIGRv
dWJsZSB2YWx1ZSkgeyByZXR1cm4gbGx2bS0+Q29uc3RSZWFsKHR5cGUsIHZhbHVlKTsgfQogc3Rh
dGljIGlubGluZSBMVmFsdWUgY29uc3RJbnRUb1B0cihMVmFsdWUgdmFsdWUsIExUeXBlIHR5cGUp
IHsgcmV0dXJuIGxsdm0tPkNvbnN0SW50VG9QdHIodmFsdWUsIHR5cGUpOyB9CitzdGF0aWMgaW5s
aW5lIExWYWx1ZSBjb25zdE51bGwoTFR5cGUgdHlwZSkgeyByZXR1cm4gbGx2bS0+Q29uc3ROdWxs
KHR5cGUpOyB9CiBzdGF0aWMgaW5saW5lIExWYWx1ZSBjb25zdEJpdENhc3QoTFZhbHVlIHZhbHVl
LCBMVHlwZSB0eXBlKSB7IHJldHVybiBsbHZtLT5Db25zdEJpdENhc3QodmFsdWUsIHR5cGUpOyB9
CiAKIHN0YXRpYyBpbmxpbmUgTEJhc2ljQmxvY2sgYXBwZW5kQmFzaWNCbG9jayhMQ29udGV4dCBj
b250ZXh0LCBMVmFsdWUgZnVuY3Rpb24sIGNvbnN0IGNoYXIqIG5hbWUgPSAiIikgeyByZXR1cm4g
bGx2bS0+QXBwZW5kQmFzaWNCbG9ja0luQ29udGV4dChjb250ZXh0LCBmdW5jdGlvbiwgbmFtZSk7
IH0KQEAgLTI0OCw2ICsyNDksMTYgQEAgc3RhdGljIGlubGluZSBMVmFsdWUgYnVpbGRDYWxsKExC
dWlsZGVyIAogICAgIExWYWx1ZSBhcmdzW10gPSB7IGFyZzEsIGFyZzIsIGFyZzMsIGFyZzQgfTsK
ICAgICByZXR1cm4gYnVpbGRDYWxsKGJ1aWxkZXIsIGZ1bmN0aW9uLCBhcmdzLCA0KTsKIH0KK3N0
YXRpYyBpbmxpbmUgTFZhbHVlIGJ1aWxkQ2FsbChMQnVpbGRlciBidWlsZGVyLCBMVmFsdWUgZnVu
Y3Rpb24sIExWYWx1ZSBhcmcxLCBMVmFsdWUgYXJnMiwgTFZhbHVlIGFyZzMsIExWYWx1ZSBhcmc0
LCBMVmFsdWUgYXJnNSkKK3sKKyAgICBMVmFsdWUgYXJnc1tdID0geyBhcmcxLCBhcmcyLCBhcmcz
LCBhcmc0LCBhcmc1IH07CisgICAgcmV0dXJuIGJ1aWxkQ2FsbChidWlsZGVyLCBmdW5jdGlvbiwg
YXJncywgNSk7Cit9CitzdGF0aWMgaW5saW5lIExWYWx1ZSBidWlsZENhbGwoTEJ1aWxkZXIgYnVp
bGRlciwgTFZhbHVlIGZ1bmN0aW9uLCBMVmFsdWUgYXJnMSwgTFZhbHVlIGFyZzIsIExWYWx1ZSBh
cmczLCBMVmFsdWUgYXJnNCwgTFZhbHVlIGFyZzUsIExWYWx1ZSBhcmc2KQoreworICAgIExWYWx1
ZSBhcmdzW10gPSB7IGFyZzEsIGFyZzIsIGFyZzMsIGFyZzQsIGFyZzUsIGFyZzYgfTsKKyAgICBy
ZXR1cm4gYnVpbGRDYWxsKGJ1aWxkZXIsIGZ1bmN0aW9uLCBhcmdzLCA2KTsKK30KIGVudW0gVGFp
bENhbGxNb2RlIHsgSXNOb3RUYWlsQ2FsbCwgSXNUYWlsQ2FsbCB9Owogc3RhdGljIGlubGluZSB2
b2lkIHNldFRhaWxDYWxsKExWYWx1ZSBjYWxsLCBUYWlsQ2FsbE1vZGUgbW9kZSkgeyBsbHZtLT5T
ZXRUYWlsQ2FsbChjYWxsLCBtb2RlID09IElzVGFpbENhbGwpOyB9CiBzdGF0aWMgaW5saW5lIExW
YWx1ZSBidWlsZEV4dHJhY3RWYWx1ZShMQnVpbGRlciBidWlsZGVyLCBMVmFsdWUgYWdnVmFsLCB1
bnNpZ25lZCBpbmRleCkgeyByZXR1cm4gbGx2bS0+QnVpbGRFeHRyYWN0VmFsdWUoYnVpbGRlciwg
YWdnVmFsLCBpbmRleCwgIiIpOyB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZU
TENhcGFiaWxpdGllcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0
bC9GVExDYXBhYmlsaXRpZXMuY3BwCShyZXZpc2lvbiAxNTc3MDcpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZnRsL0ZUTENhcGFiaWxpdGllcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk0LDEw
ICs5NCwxMyBAQCBpbmxpbmUgQ2FwYWJpbGl0eUxldmVsIGNhbkNvbXBpbGUoTm9kZSogCiAgICAg
Y2FzZSBHZXRDbG9zdXJlUmVnaXN0ZXJzOgogICAgIGNhc2UgR2V0Q2xvc3VyZVZhcjoKICAgICBj
YXNlIFB1dENsb3N1cmVWYXI6Ci0gICAgY2FzZSBHZXRCeUlkOgogICAgIGNhc2UgSW50NTJUb1Zh
bHVlOgogICAgICAgICAvLyBUaGVzZSBhcmUgT0suCiAgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
R2V0QnlJZDoKKyAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSA9PSBDZWxsVXNl
KQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIHJldHVybiBDYW5ub3RDb21waWxlOwogICAg
IGNhc2UgR2V0SW5kZXhlZFByb3BlcnR5U3RvcmFnZToKICAgICAgICAgaWYgKGlzVHlwZWRWaWV3
KG5vZGUtPmFycmF5TW9kZSgpLnR5cGVkQXJyYXlUeXBlKCkpKQogICAgICAgICAgICAgYnJlYWs7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENvbXBpbGUuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ29tcGlsZS5jcHAJKHJldmlzaW9u
IDE1NzcwNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ29tcGlsZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTM0LDYgKzM0LDcgQEAKICNpbmNsdWRlICJEYXRhVmlldy5oIgogI2lu
Y2x1ZGUgIkRpc2Fzc2VtYmxlci5oIgogI2luY2x1ZGUgIkZUTEV4aXRUaHVua0dlbmVyYXRvci5o
IgorI2luY2x1ZGUgIkZUTElubGluZUNhY2hlU2l6ZS5oIgogI2luY2x1ZGUgIkZUTEpJVENvZGUu
aCIKICNpbmNsdWRlICJGVExUaHVua3MuaCIKICNpbmNsdWRlICJKSVRTdHVicy5oIgpAQCAtMTEw
LDYgKzExMSw3IEBAIHN0YXRpYyB2b2lkIGZpeEZ1bmN0aW9uQmFzZWRPblN0YWNrTWFwcygKICAg
ICBTdGFja01hcHM6OlJlY29yZE1hcCYgcmVjb3JkTWFwKQogewogICAgIFZNJiB2bSA9IHN0YXRl
LmdyYXBoLm1fdm07CisgICAgU3RhY2tNYXBzIHN0YWNrbWFwcyA9IGppdENvZGUtPnN0YWNrbWFw
czsKIAogICAgIEV4aXRUaHVua0dlbmVyYXRvciBleGl0VGh1bmtHZW5lcmF0b3Ioc3RhdGUpOwog
ICAgIGV4aXRUaHVua0dlbmVyYXRvci5lbWl0VGh1bmtzKCk7CkBAIC0xMzYsNiArMTM4LDc4IEBA
IHN0YXRpYyB2b2lkIGZpeEZ1bmN0aW9uQmFzZWRPblN0YWNrTWFwcygKICAgICAgICAgc3RhdGUu
ZmluYWxpemVyLT5leGl0VGh1bmtzTGlua0J1ZmZlciA9IGxpbmtCdWZmZXIucmVsZWFzZSgpOwog
ICAgIH0KIAorICAgIGlmICghc3RhdGUuZ2V0QnlJZHMuaXNFbXB0eSgpKSB7CisgICAgICAgIEND
YWxsSGVscGVycyBzbG93UGF0aEpJVCgmdm0sIGNvZGVCbG9jayk7CisgICAgICAgIAorICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSBzdGF0ZS5nZXRCeUlkcy5zaXplKCk7IGktLTspIHsKKyAgICAg
ICAgICAgIEdldEJ5SWREZXNjcmlwdG9yJiBnZXRCeUlkID0gc3RhdGUuZ2V0QnlJZHNbaV07Cisg
ICAgICAgICAgICAKKyAgICAgICAgICAgIFN0YWNrTWFwczo6UmVjb3JkTWFwOjppdGVyYXRvciBp
dGVyID0gcmVjb3JkTWFwLmZpbmQoZ2V0QnlJZC5zdGFja21hcElEKCkpOworICAgICAgICAgICAg
aWYgKGl0ZXIgPT0gcmVjb3JkTWFwLmVuZCgpKSB7CisgICAgICAgICAgICAgICAgLy8gSXQgd2Fz
IG9wdGltaXplZCBvdXQuCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICAKKyAgICAgICAgICAgIFN0YWNrTWFwczo6UmVjb3JkJiByZWNvcmQgPSBp
dGVyLT52YWx1ZTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgVU5VU0VEX1BBUkFNKHJlY29y
ZCk7IC8vIEZJWE1FOiB1c2UgQW55UmVncy4KKworICAgICAgICAgICAgLy8gRklYTUU6IExMVk0g
c2hvdWxkIHRlbGwgdXMgd2hpY2ggcmVnaXN0ZXJzIGFyZSBsaXZlLgorICAgICAgICAgICAgUmVn
aXN0ZXJTZXQgdXNlZFJlZ2lzdGVycyA9IFJlZ2lzdGVyU2V0OjphbGxSZWdpc3RlcnMoKTsKKyAg
ICAgICAgICAgIAorICAgICAgICAgICAgR1BSUmVnIGNhbGxGcmFtZVJlZ2lzdGVyID0gR1BSSW5m
bzo6YXJndW1lbnRHUFIwOworICAgICAgICAgICAgR1BSUmVnIGJhc2UgPSBHUFJJbmZvOjphcmd1
bWVudEdQUjE7CisgICAgICAgICAgICBHUFJSZWcgcmVzdWx0ID0gR1BSSW5mbzo6cmV0dXJuVmFs
dWVHUFI7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIEpJVEdldEJ5SWRHZW5lcmF0b3IgZ2Vu
KAorICAgICAgICAgICAgICAgIGNvZGVCbG9jaywgZ2V0QnlJZC5jb2RlT3JpZ2luKCksIHVzZWRS
ZWdpc3RlcnMsIEpTVmFsdWVSZWdzKGJhc2UpLAorICAgICAgICAgICAgICAgIEpTVmFsdWVSZWdz
KHJlc3VsdCksIGZhbHNlKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgTWFjcm9Bc3NlbWJs
ZXI6OkxhYmVsIGJlZ2luID0gc2xvd1BhdGhKSVQubGFiZWwoKTsKKyAgICAgICAgICAgIAorICAg
ICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24oCisgICAg
ICAgICAgICAgICAgc3RhdGUsIHVzZWRSZWdpc3RlcnMsIHNsb3dQYXRoSklULCBvcGVyYXRpb25H
ZXRCeUlkT3B0aW1pemUsIHJlc3VsdCwKKyAgICAgICAgICAgICAgICBjYWxsRnJhbWVSZWdpc3Rl
ciwgZ2VuLnN0dWJJbmZvKCksIGJhc2UsIGdldEJ5SWQudWlkKCkpOworICAgICAgICAgICAgCisg
ICAgICAgICAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGJlZ2luLCBjYWxsKTsKKyAgICAgICAg
ICAgIAorICAgICAgICAgICAgZ2V0QnlJZC5tX3Nsb3dQYXRoRG9uZSA9IHNsb3dQYXRoSklULmp1
bXAoKTsKKyAgICAgICAgICAgIGdldEJ5SWQubV9nZW5lcmF0b3IgPSBnZW47CisgICAgICAgIH0K
KyAgICAgICAgCisgICAgICAgIHN0YXRlLmZpbmFsaXplci0+c2lkZUNvZGVMaW5rQnVmZmVyID0g
YWRvcHRQdHIoCisgICAgICAgICAgICBuZXcgTGlua0J1ZmZlcih2bSwgJnNsb3dQYXRoSklULCBj
b2RlQmxvY2ssIEpJVENvbXBpbGF0aW9uTXVzdFN1Y2NlZWQpKTsKKyAgICAgICAgCisgICAgICAg
IGZvciAodW5zaWduZWQgaSA9IHN0YXRlLmdldEJ5SWRzLnNpemUoKTsgaS0tOykgeworICAgICAg
ICAgICAgR2V0QnlJZERlc2NyaXB0b3ImIGdldEJ5SWQgPSBzdGF0ZS5nZXRCeUlkc1tpXTsKKyAg
ICAgICAgICAgIAorICAgICAgICAgICAgU3RhY2tNYXBzOjpSZWNvcmRNYXA6Oml0ZXJhdG9yIGl0
ZXIgPSByZWNvcmRNYXAuZmluZChnZXRCeUlkLnN0YWNrbWFwSUQoKSk7CisgICAgICAgICAgICBp
ZiAoaXRlciA9PSByZWNvcmRNYXAuZW5kKCkpIHsKKyAgICAgICAgICAgICAgICAvLyBJdCB3YXMg
b3B0aW1pemVkIG91dC4KKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIAorICAgICAgICAgICAgU3RhY2tNYXBzOjpSZWNvcmQmIHJlY29yZCA9IGl0
ZXItPnZhbHVlOworCisgICAgICAgICAgICBDQ2FsbEhlbHBlcnMgZmFzdFBhdGhKSVQoJnZtLCBj
b2RlQmxvY2spOworICAgICAgICAgICAgZ2V0QnlJZC5tX2dlbmVyYXRvci5nZW5lcmF0ZUZhc3RQ
YXRoKGZhc3RQYXRoSklUKTsKKworICAgICAgICAgICAgY2hhciogc3RhcnRPZklDID0KKyAgICAg
ICAgICAgICAgICBiaXR3aXNlX2Nhc3Q8Y2hhcio+KGdlbmVyYXRlZEZ1bmN0aW9uKSArIHJlY29y
ZC5pbnN0cnVjdGlvbk9mZnNldDsKKyAgICAgICAgICAgIHNpemVfdCBzaXplT2ZJQyA9IHNpemVP
ZkdldEJ5SWQoKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgTGlua0J1ZmZlciBsaW5rQnVm
ZmVyKHZtLCAmZmFzdFBhdGhKSVQsIHN0YXJ0T2ZJQywgc2l6ZU9mSUMpOworICAgICAgICAgICAg
Ly8gTm90ZTogd2UgY291bGQgaGFuZGxlIHRoZSAhaXNWYWxpZCgpIGNhc2UuIFdlIGp1c3QgZG9u
J3QgYXBwZWFyIHRvIGhhdmUgYQorICAgICAgICAgICAgLy8gcmVhc29uIHRvIGRvIHNvLCB5ZXQu
CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChsaW5rQnVmZmVyLmlzVmFsaWQoKSk7CisgICAg
ICAgICAgICAKKyAgICAgICAgICAgIHN0YXRlLmZpbmFsaXplci0+c2lkZUNvZGVMaW5rQnVmZmVy
LT5saW5rKAorICAgICAgICAgICAgICAgIGdldEJ5SWQubV9zbG93UGF0aERvbmUsIENvZGVMb2Nh
dGlvbkxhYmVsKHN0YXJ0T2ZJQyArIHNpemVPZklDKSk7CisgICAgICAgICAgICAKKyAgICAgICAg
ICAgIGdldEJ5SWQubV9nZW5lcmF0b3IuZmluYWxpemUobGlua0J1ZmZlciwgKnN0YXRlLmZpbmFs
aXplci0+c2lkZUNvZGVMaW5rQnVmZmVyKTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKICAgICBS
ZXBhdGNoQnVmZmVyIHJlcGF0Y2hCdWZmZXIoY29kZUJsb2NrKTsKICAgICAKICAgICBmb3IgKHVu
c2lnbmVkIGV4aXRJbmRleCA9IGppdENvZGUtPm9zckV4aXQuc2l6ZSgpOyBleGl0SW5kZXgtLTsp
IHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSW5saW5lQ2FjaGVEZXNjcmlw
dG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExJbmxpbmVD
YWNoZURlc2NyaXB0b3IuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9m
dGwvRlRMSW5saW5lQ2FjaGVEZXNjcmlwdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw3
NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZu
ZGVmIEZUTElubGluZUNhY2hlRGVzY3JpcHRvcl9oCisjZGVmaW5lIEZUTElubGluZUNhY2hlRGVz
Y3JpcHRvcl9oCisKKyNpZiBFTkFCTEUoRlRMX0pJVCkKKworI2luY2x1ZGUgIkNvZGVPcmlnaW4u
aCIKKyNpbmNsdWRlICJKSVRJbmxpbmVDYWNoZUdlbmVyYXRvci5oIgorI2luY2x1ZGUgIk1hY3Jv
QXNzZW1ibGVyLmgiCisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nSW1wbC5oPgorCituYW1lc3Bh
Y2UgSlNDIHsgbmFtZXNwYWNlIEZUTCB7CisKK2NsYXNzIElubGluZUNhY2hlRGVzY3JpcHRvciB7
CitwdWJsaWM6CisgICAgSW5saW5lQ2FjaGVEZXNjcmlwdG9yKCkgeyB9CisgICAgCisgICAgTWFj
cm9Bc3NlbWJsZXI6Okp1bXAgbV9zbG93UGF0aERvbmU7Cit9OworCitjbGFzcyBHZXRCeUlkRGVz
Y3JpcHRvciA6IHB1YmxpYyBJbmxpbmVDYWNoZURlc2NyaXB0b3IgeworcHVibGljOgorICAgIEdl
dEJ5SWREZXNjcmlwdG9yKCkgeyB9CisgICAgCisgICAgR2V0QnlJZERlc2NyaXB0b3IodW5zaWdu
ZWQgc3RhY2ttYXBJRCwgQ29kZU9yaWdpbiBjb2RlT3JpZ2luLCBTdHJpbmdJbXBsKiB1aWQpCisg
ICAgICAgIDogbV9zdGFja21hcElEKHN0YWNrbWFwSUQpCisgICAgICAgICwgbV9jb2RlT3JpZ2lu
KGNvZGVPcmlnaW4pCisgICAgICAgICwgbV91aWQodWlkKQorICAgIHsKKyAgICB9CisgICAgCisg
ICAgdW5zaWduZWQgc3RhY2ttYXBJRCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhY2ttYXBJRDsgfQor
ICAgIENvZGVPcmlnaW4gY29kZU9yaWdpbigpIGNvbnN0IHsgcmV0dXJuIG1fY29kZU9yaWdpbjsg
fQorICAgIFN0cmluZ0ltcGwqIHVpZCgpIGNvbnN0IHsgcmV0dXJuIG1fdWlkOyB9CisgICAgCitw
cml2YXRlOgorICAgIHVuc2lnbmVkIG1fc3RhY2ttYXBJRDsKKyAgICBDb2RlT3JpZ2luIG1fY29k
ZU9yaWdpbjsKKyAgICBTdHJpbmdJbXBsKiBtX3VpZDsKKworcHVibGljOgorICAgIEpJVEdldEJ5
SWRHZW5lcmF0b3IgbV9nZW5lcmF0b3I7Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6RlRM
CisKKyNlbmRpZiAvLyBFTkFCTEUoRlRMX0pJVCkKKworI2VuZGlmIC8vIEZUTElubGluZUNhY2hl
RGVzY3JpcHRvcl9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSW5saW5l
Q2FjaGVTaXplLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZU
TElubGluZUNhY2hlU2l6ZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZnRsL0ZUTElubGluZUNhY2hlU2l6ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw3
MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5j
bHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRlRMSW5saW5lQ2FjaGVTaXplLmgiCisKKyNpZiBF
TkFCTEUoRlRMX0pJVCkKKworI2luY2x1ZGUgIkpJVElubGluZUNhY2hlR2VuZXJhdG9yLmgiCisj
aW5jbHVkZSAiTWFjcm9Bc3NlbWJsZXIuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBG
VEwgeworCitzdGF0aWMgc2l6ZV90IHNfc2l6ZU9mR2V0QnlJZDsKK3N0YXRpYyBzaXplX3Qgc19z
aXplT2ZQdXRCeUlkOworCitzaXplX3Qgc2l6ZU9mR2V0QnlJZCgpCit7CisgICAgaWYgKHNfc2l6
ZU9mR2V0QnlJZCkKKyAgICAgICAgcmV0dXJuIHNfc2l6ZU9mR2V0QnlJZDsKKyAgICAKKyAgICBN
YWNyb0Fzc2VtYmxlciBqaXQ7CisgICAgCisgICAgSklUR2V0QnlJZEdlbmVyYXRvciBnZW5lcmF0
b3IoCisgICAgICAgIDAsIENvZGVPcmlnaW4oKSwgUmVnaXN0ZXJTZXQoKSwgSlNWYWx1ZVJlZ3Mo
R1BSSW5mbzo6cmVnVDYpLCBKU1ZhbHVlUmVncyhHUFJJbmZvOjpyZWdUNyksCisgICAgICAgIGZh
bHNlKTsKKyAgICBnZW5lcmF0b3IuZ2VuZXJhdGVGYXN0UGF0aChqaXQpOworICAgIAorICAgIHJl
dHVybiBzX3NpemVPZkdldEJ5SWQgPSBqaXQubV9hc3NlbWJsZXIuY29kZVNpemUoKTsKK30KKwor
c2l6ZV90IHNpemVPZlB1dEJ5SWQoKQoreworICAgIGlmIChzX3NpemVPZlB1dEJ5SWQpCisgICAg
ICAgIHJldHVybiBzX3NpemVPZlB1dEJ5SWQ7CisgICAgCisgICAgTWFjcm9Bc3NlbWJsZXIgaml0
OworICAgIAorICAgIEpJVFB1dEJ5SWRHZW5lcmF0b3IgZ2VuZXJhdG9yKAorICAgICAgICAwLCBD
b2RlT3JpZ2luKCksIFJlZ2lzdGVyU2V0KCksIEpTVmFsdWVSZWdzKEdQUkluZm86OnJlZ1Q2KSwg
SlNWYWx1ZVJlZ3MoR1BSSW5mbzo6cmVnVDcpLAorICAgICAgICBHUFJJbmZvOjpyZWdUOCwgZmFs
c2UsIE5vdFN0cmljdE1vZGUsIE5vdERpcmVjdCk7CisgICAgZ2VuZXJhdG9yLmdlbmVyYXRlRmFz
dFBhdGgoaml0KTsKKyAgICAKKyAgICByZXR1cm4gc19zaXplT2ZQdXRCeUlkID0gaml0Lm1fYXNz
ZW1ibGVyLmNvZGVTaXplKCk7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpGVEwKKworI2Vu
ZGlmIC8vIEVOQUJMRShGVExfSklUKQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRs
L0ZUTElubGluZUNhY2hlU2l6ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9mdGwvRlRMSW5saW5lQ2FjaGVTaXplLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZnRsL0ZUTElubGluZUNhY2hlU2l6ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsNDEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKwor
I2lmbmRlZiBGVExJbmxpbmVDYWNoZVNpemVfaAorI2RlZmluZSBGVExJbmxpbmVDYWNoZVNpemVf
aAorCisjaWYgRU5BQkxFKEZUTF9KSVQpCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgRlRM
IHsKKworc2l6ZV90IHNpemVPZkdldEJ5SWQoKTsKK3NpemVfdCBzaXplT2ZQdXRCeUlkKCk7CisK
K30gfSAvLyBuYW1lc3BhY2UgSlNDOjpGVEwKKworI2VuZGlmIC8vIEVOQUJMRShGVExfSklUKQor
CisjZW5kaWYgLy8gRlRMSW5saW5lQ2FjaGVTaXplX2gKKwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Z0bC9GVExJbnRyaW5zaWNSZXBvc2l0b3J5LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2Z0bC9GVExJbnRyaW5zaWNSZXBvc2l0b3J5LmgJKHJldmlzaW9uIDE1
NzcwNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSW50cmluc2ljUmVwb3NpdG9y
eS5oCSh3b3JraW5nIGNvcHkpCkBAIC00NCw2ICs0NCw3IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1l
c3BhY2UgRlRMIHsKICAgICBtYWNybyhtdWxXaXRoT3ZlcmZsb3c2NCwgImxsdm0uc211bC53aXRo
Lm92ZXJmbG93Lmk2NCIsIGZ1bmN0aW9uVHlwZShzdHJ1Y3RUeXBlKG1fY29udGV4dCwgaW50NjQs
IGJvb2xlYW4pLCBpbnQ2NCwgaW50NjQpKSBcCiAgICAgbWFjcm8oc3ViV2l0aE92ZXJmbG93MzIs
ICJsbHZtLnNzdWIud2l0aC5vdmVyZmxvdy5pMzIiLCBmdW5jdGlvblR5cGUoc3RydWN0VHlwZSht
X2NvbnRleHQsIGludDMyLCBib29sZWFuKSwgaW50MzIsIGludDMyKSkgXAogICAgIG1hY3JvKHN1
YldpdGhPdmVyZmxvdzY0LCAibGx2bS5zc3ViLndpdGgub3ZlcmZsb3cuaTY0IiwgZnVuY3Rpb25U
eXBlKHN0cnVjdFR5cGUobV9jb250ZXh0LCBpbnQ2NCwgYm9vbGVhbiksIGludDY0LCBpbnQ2NCkp
IFwKKyAgICBtYWNybyh3ZWJraXRQYXRjaHBvaW50SW50NjQsICJsbHZtLndlYmtpdC5wYXRjaHBv
aW50Lmk2NCIsIGZ1bmN0aW9uVHlwZShpbnQ2NCwgaW50MzIsIGludDMyLCByZWY4LCBpbnQzMiwg
VmFyaWFkaWMpKSBcCiAgICAgbWFjcm8od2Via2l0U3RhY2ttYXAsICJsbHZtLndlYmtpdC5zdGFj
a21hcCIsIGZ1bmN0aW9uVHlwZSh2b2lkVHlwZSwgaW50MzIsIGludDMyLCBWYXJpYWRpYykpIFwK
ICAgICBtYWNybyh0cmFwLCAibGx2bS50cmFwIiwgZnVuY3Rpb25UeXBlKHZvaWRUeXBlKSkgXAog
ICAgIG1hY3JvKG9zckV4aXQsICJ3ZWJraXRfb3NyX2V4aXQiLCBmdW5jdGlvblR5cGUodm9pZFR5
cGUsIGJvb2xlYW4sIGludDMyLCBWYXJpYWRpYykpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZnRsL0ZUTEpJVEZpbmFsaXplci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Z0bC9GVExKSVRGaW5hbGl6ZXIuY3BwCShyZXZpc2lvbiAxNTc3MDcpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEpJVEZpbmFsaXplci5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTg0LDYgKzg0LDI0IEBAIGJvb2wgSklURmluYWxpemVyOjpmaW5hbGl6ZUZ1bmN0aW9uKCkK
ICAgICAgICAgICAgICAgICAoIkZUTCBleGl0IHRodW5rcyBmb3IgJXMiLCB0b0NTdHJpbmcoQ29k
ZUJsb2NrV2l0aEpJVFR5cGUobV9wbGFuLmNvZGVCbG9jay5nZXQoKSwgSklUQ29kZTo6RlRMSklU
KSkuZGF0YSgpKSkpOwogICAgIH0gLy8gZWxzZSB0aGlzIGZ1bmN0aW9uIGhhZCBubyBPU1IgZXhp
dHMsIHNvIG5vIGV4aXQgdGh1bmtzLgogICAgIAorICAgIGlmIChzaWRlQ29kZUxpbmtCdWZmZXIp
IHsKKyAgICAgICAgLy8gU2lkZSBjb2RlIGlzIGZvciBzcGVjaWFsIHNsb3cgcGF0aHMgdGhhdCB3
ZSBnZW5lcmF0ZSBvdXJzZWx2ZXMsIGxpa2UgZm9yIGlubGluZQorICAgICAgICAvLyBjYWNoZXMu
CisgICAgICAgIAorICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBzbG93UGF0aENhbGxzLnNpemUo
KTsgaS0tOykgeworICAgICAgICAgICAgU2xvd1BhdGhDYWxsJiBjYWxsID0gc2xvd1BhdGhDYWxs
c1tpXTsKKyAgICAgICAgICAgIHNpZGVDb2RlTGlua0J1ZmZlci0+bGluaygKKyAgICAgICAgICAg
ICAgICBjYWxsLmNhbGwoKSwKKyAgICAgICAgICAgICAgICBDb2RlTG9jYXRpb25MYWJlbChtX3Bs
YW4udm0uZnRsVGh1bmtzLT5nZXRTbG93UGF0aENhbGxUaHVuayhtX3BsYW4udm0sIGNhbGwua2V5
KCkpLmNvZGUoKSkpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBqaXRDb2RlLT5hZGRI
YW5kbGUoRklOQUxJWkVfREZHX0NPREUoCisgICAgICAgICAgICAqc2lkZUNvZGVMaW5rQnVmZmVy
LAorICAgICAgICAgICAgKCJGVEwgc2lkZSBjb2RlIGZvciAlcyIsCisgICAgICAgICAgICAgICAg
dG9DU3RyaW5nKENvZGVCbG9ja1dpdGhKSVRUeXBlKG1fcGxhbi5jb2RlQmxvY2suZ2V0KCksIEpJ
VENvZGU6OkZUTEpJVCkpLmRhdGEoKSkpCisgICAgICAgICAgICAuZXhlY3V0YWJsZU1lbW9yeSgp
KTsKKyAgICB9CisgICAgCiAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIHdpdGhBcml0eUNoZWNr
OwogICAgIGlmIChhcml0eUNoZWNrLmlzU2V0KCkpCiAgICAgICAgIHdpdGhBcml0eUNoZWNrID0g
ZW50cnlwb2ludExpbmtCdWZmZXItPmxvY2F0aW9uT2YoYXJpdHlDaGVjayk7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEpJVEZpbmFsaXplci5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSklURmluYWxpemVyLmgJKHJldmlzaW9uIDE1Nzcw
NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSklURmluYWxpemVyLmgJKHdvcmtp
bmcgY29weSkKQEAgLTM0LDYgKzM0LDcgQEAKICNpbmNsdWRlICJGVExHZW5lcmF0ZWRGdW5jdGlv
bi5oIgogI2luY2x1ZGUgIkZUTEpJVENvZGUuaCIKICNpbmNsdWRlICJGVExPU1JFeGl0Q29tcGls
YXRpb25JbmZvLmgiCisjaW5jbHVkZSAiRlRMU2xvd1BhdGhDYWxsLmgiCiAjaW5jbHVkZSAiTExW
TUFQSS5oIgogI2luY2x1ZGUgIkxpbmtCdWZmZXIuaCIKICNpbmNsdWRlICJNYWNyb0Fzc2VtYmxl
ci5oIgpAQCAtNTAsNiArNTEsOCBAQCBwdWJsaWM6CiAKICAgICBPd25QdHI8TGlua0J1ZmZlcj4g
ZXhpdFRodW5rc0xpbmtCdWZmZXI7CiAgICAgT3duUHRyPExpbmtCdWZmZXI+IGVudHJ5cG9pbnRM
aW5rQnVmZmVyOworICAgIE93blB0cjxMaW5rQnVmZmVyPiBzaWRlQ29kZUxpbmtCdWZmZXI7Cisg
ICAgVmVjdG9yPFNsb3dQYXRoQ2FsbD4gc2xvd1BhdGhDYWxsczsgLy8gQ2FsbHMgaW5zaWRlIHRo
ZSBzaWRlIGNvZGUuCiAgICAgVmVjdG9yPE9TUkV4aXRDb21waWxhdGlvbkluZm8+IG9zckV4aXQ7
CiAgICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIGFyaXR5Q2hlY2s7CiAgICAgR2VuZXJhdGVkRnVu
Y3Rpb24gZnVuY3Rpb247CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvY2F0
aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvY2F0
aW9uLmNwcAkocmV2aXNpb24gMTU3NzA3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9G
VExMb2NhdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE4MCw2ICsxODAsMTIgQEAgdm9pZCBM
b2NhdGlvbjo6cmVzdG9yZUludG8oTWFjcm9Bc3NlbWJsZQogI2Vycm9yICJDUFUgYXJjaGl0ZWN0
dXJlIG5vdCBzdXBwb3J0ZWQuIgogI2VuZGlmIC8vIENQVSBjYXNlcyBmb3IgTG9jYXRpb24gbWV0
aG9kcwogCitHUFJSZWcgTG9jYXRpb246OmRpcmVjdEdQUigpIGNvbnN0Cit7CisgICAgQVNTRVJU
KCFhZGRlbmQoKSk7CisgICAgcmV0dXJuIGdwcigpOworfQorCiB9IH0gLy8gbmFtZXNwYWNlIEpT
Qzo6RlRMCiAKIG5hbWVzcGFjZSBXVEYgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0
bC9GVExMb2NhdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwv
RlRMTG9jYXRpb24uaAkocmV2aXNpb24gMTU3NzA3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Z0bC9GVExMb2NhdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNTcsNiArMTU3LDcgQEAgcHVi
bGljOgogICAgIGJvb2wgaXNHUFIoKSBjb25zdDsKICAgICBib29sIGludm9sdmVzR1BSKCkgY29u
c3Q7CiAgICAgR1BSUmVnIGdwcigpIGNvbnN0OworICAgIEdQUlJlZyBkaXJlY3RHUFIoKSBjb25z
dDsgLy8gR2V0IHRoZSBHUFIgYW5kIGFzc2VydCB0aGF0IHRoZXJlIGlzIG5vIGFkZGVuZC4KICAg
ICAKICAgICBib29sIGlzRlBSKCkgY29uc3Q7CiAgICAgRlBSUmVnIGZwcigpIGNvbnN0OwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvTExWTS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvTExWTS5jcHAJ
KHJldmlzaW9uIDE1NzcwNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJE
RkdUb0xMVk0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw2ICszNSw3IEBACiAjaW5jbHVkZSAi
RlRMRXhpdFRodW5rR2VuZXJhdG9yLmgiCiAjaW5jbHVkZSAiRlRMRm9yT1NSRW50cnlKSVRDb2Rl
LmgiCiAjaW5jbHVkZSAiRlRMRm9ybWF0dGVkVmFsdWUuaCIKKyNpbmNsdWRlICJGVExJbmxpbmVD
YWNoZVNpemUuaCIKICNpbmNsdWRlICJGVExMb3dlcmVkTm9kZVZhbHVlLmgiCiAjaW5jbHVkZSAi
RlRMT3V0cHV0LmgiCiAjaW5jbHVkZSAiRlRMVGh1bmtzLmgiCkBAIC0xMjIyLDIyICsxMjIzLDI5
IEBAIHByaXZhdGU6CiAgICAgCiAgICAgdm9pZCBjb21waWxlR2V0QnlJZCgpCiAgICAgewotICAg
ICAgICBMVmFsdWUgYmFzZSA9IDA7CisgICAgICAgIC8vIFVudHlwZWRVc2UgaXMgYSBiaXQgaGFy
ZGVyIHRvIHJlYXNvbiBhYm91dCBhbmQgSSdtIG5vdCBzdXJlIGhvdyBiZXN0IHRvIGRvIGl0LCB5
ZXQuCisgICAgICAgIC8vIEJhc2ljYWxseSB3ZSBuZWVkIHRvIGVtaXQgYSBjZWxsIGJyYW5jaCB0
aGF0IHRha2VzIHlvdSB0byB0aGUgc2xvdyBwYXRoLCBidXQgdGhlIHNsb3cKKyAgICAgICAgLy8g
cGF0aCBpcyBnZW5lcmF0ZWQgYnkgdGhlIElDIGdlbmVyYXRvciBzbyB3ZSBjYW4ndCBqdW1wIHRv
IGl0IGZyb20gaGVyZS4gQW5kIHRoZSBJQworICAgICAgICAvLyBnZW5lcmF0b3IgY3VycmVudGx5
IGRvZXNuJ3Qga25vdyBob3cgdG8gZW1pdCBzdWNoIGEgYnJhbmNoLiBTbywgZm9yIG5vdywgd2Ug
anVzdAorICAgICAgICAvLyByZXN0cmljdCB0aGlzIHRvIENlbGxVc2UuCisgICAgICAgIEFTU0VS
VChtX25vZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSA9PSBDZWxsVXNlKTsKIAotICAgICAgICBzd2l0
Y2ggKG1fbm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpKSB7Ci0gICAgICAgIGNhc2UgQ2VsbFVzZToK
LSAgICAgICAgICAgIGJhc2UgPSBsb3dDZWxsKG1fbm9kZS0+Y2hpbGQxKCkpOwotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgVW50eXBlZFVzZToKLSAgICAgICAgICAgIGJhc2UgPSBs
b3dKU1ZhbHVlKG1fbm9kZS0+Y2hpbGQxKCkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
IGRlZmF1bHQ6Ci0gICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIExWYWx1ZSBiYXNlID0gbG93Q2VsbChtX25vZGUtPmNo
aWxkMSgpKTsKKyAgICAgICAgU3RyaW5nSW1wbCogdWlkID0gbV9ncmFwaC5pZGVudGlmaWVycygp
W21fbm9kZS0+aWRlbnRpZmllck51bWJlcigpXTsKKworICAgICAgICBpZiAoIU9wdGlvbnM6OmZ0
bElDVXNlc1BhdGNocG9pbnQoKSkgeworICAgICAgICAgICAgc2V0SlNWYWx1ZSh2bUNhbGwobV9v
dXQub3BlcmF0aW9uKG9wZXJhdGlvbkdldEJ5SWQpLCBtX2NhbGxGcmFtZSwgbV9vdXQuaW50UHRy
WmVybywgYmFzZSwgbV9vdXQuY29uc3RJbnRQdHIodWlkKSkpOworICAgICAgICAgICAgcmV0dXJu
OwogICAgICAgICB9CisKKyAgICAgICAgLy8gQXJndW1lbnRzOiBpZCwgYnl0ZXMsIHRhcmdldCwg
bnVtQXJncywgYXJncy4uLgorICAgICAgICB1bnNpZ25lZCBzdGFja21hcElEID0gbV9zdGFja21h
cElEcysrOworICAgICAgICBzZXRKU1ZhbHVlKG1fb3V0LmNhbGwoCisgICAgICAgICAgICBtX291
dC53ZWJraXRQYXRjaHBvaW50SW50NjRJbnRyaW5zaWMoKSwKKyAgICAgICAgICAgIG1fb3V0LmNv
bnN0SW50MzIoc3RhY2ttYXBJRCksIG1fb3V0LmNvbnN0SW50MzIoc2l6ZU9mR2V0QnlJZCgpKSwK
KyAgICAgICAgICAgIGNvbnN0TnVsbChtX291dC5yZWY4KSwgbV9vdXQuY29uc3RJbnQzMigyKSwg
bV9jYWxsRnJhbWUsIGJhc2UpKTsKICAgICAgICAgCi0gICAgICAgIFN0cmluZ0ltcGwqIHVpZCA9
IG1fZ3JhcGguaWRlbnRpZmllcnMoKVttX25vZGUtPmlkZW50aWZpZXJOdW1iZXIoKV07Ci0gICAg
ICAgIHNldEpTVmFsdWUodm1DYWxsKG1fb3V0Lm9wZXJhdGlvbihvcGVyYXRpb25HZXRCeUlkKSwg
bV9jYWxsRnJhbWUsIG1fb3V0LmludFB0clplcm8sIGJhc2UsIG1fb3V0LmNvbnN0SW50UHRyKHVp
ZCkpKTsKKyAgICAgICAgbV9mdGxTdGF0ZS5nZXRCeUlkcy5hcHBlbmQoR2V0QnlJZERlc2NyaXB0
b3Ioc3RhY2ttYXBJRCwgbV9ub2RlLT5jb2RlT3JpZ2luLCB1aWQpKTsKICAgICB9CiAgICAgCiAg
ICAgdm9pZCBjb21waWxlR2V0QnV0dGVyZmx5KCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9mdGwvRlRMT3V0cHV0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0
bC9GVExPdXRwdXQuaAkocmV2aXNpb24gMTU3NzA3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Z0bC9GVExPdXRwdXQuaAkod29ya2luZyBjb3B5KQpAQCAtMzQ4LDYgKzM0OCw4IEBAIHB1Ymxp
YzoKICAgICBMVmFsdWUgY2FsbChMVmFsdWUgZnVuY3Rpb24sIExWYWx1ZSBhcmcxLCBMVmFsdWUg
YXJnMikgeyByZXR1cm4gYnVpbGRDYWxsKG1fYnVpbGRlciwgZnVuY3Rpb24sIGFyZzEsIGFyZzIp
OyB9CiAgICAgTFZhbHVlIGNhbGwoTFZhbHVlIGZ1bmN0aW9uLCBMVmFsdWUgYXJnMSwgTFZhbHVl
IGFyZzIsIExWYWx1ZSBhcmczKSB7IHJldHVybiBidWlsZENhbGwobV9idWlsZGVyLCBmdW5jdGlv
biwgYXJnMSwgYXJnMiwgYXJnMyk7IH0KICAgICBMVmFsdWUgY2FsbChMVmFsdWUgZnVuY3Rpb24s
IExWYWx1ZSBhcmcxLCBMVmFsdWUgYXJnMiwgTFZhbHVlIGFyZzMsIExWYWx1ZSBhcmc0KSB7IHJl
dHVybiBidWlsZENhbGwobV9idWlsZGVyLCBmdW5jdGlvbiwgYXJnMSwgYXJnMiwgYXJnMywgYXJn
NCk7IH0KKyAgICBMVmFsdWUgY2FsbChMVmFsdWUgZnVuY3Rpb24sIExWYWx1ZSBhcmcxLCBMVmFs
dWUgYXJnMiwgTFZhbHVlIGFyZzMsIExWYWx1ZSBhcmc0LCBMVmFsdWUgYXJnNSkgeyByZXR1cm4g
YnVpbGRDYWxsKG1fYnVpbGRlciwgZnVuY3Rpb24sIGFyZzEsIGFyZzIsIGFyZzMsIGFyZzQsIGFy
ZzUpOyB9CisgICAgTFZhbHVlIGNhbGwoTFZhbHVlIGZ1bmN0aW9uLCBMVmFsdWUgYXJnMSwgTFZh
bHVlIGFyZzIsIExWYWx1ZSBhcmczLCBMVmFsdWUgYXJnNCwgTFZhbHVlIGFyZzUsIExWYWx1ZSBh
cmc2KSB7IHJldHVybiBidWlsZENhbGwobV9idWlsZGVyLCBmdW5jdGlvbiwgYXJnMSwgYXJnMiwg
YXJnMywgYXJnNCwgYXJnNSwgYXJnNik7IH0KICAgICAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBG
dW5jdGlvblR5cGU+CiAgICAgTFZhbHVlIG9wZXJhdGlvbihGdW5jdGlvblR5cGUgZnVuY3Rpb24p
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFNsb3dQYXRoQ2FsbC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExTbG93UGF0aENhbGwuY3Bw
CShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExTbG93UGF0aENh
bGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTc5IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJGVExTbG93UGF0aENhbGwuaCIKKworI2lmIEVOQUJMRShGVExfSklUKQorCisjaW5jbHVk
ZSAiQ0NhbGxIZWxwZXJzLmgiCisjaW5jbHVkZSAiRlRMU3RhdGUuaCIKKyNpbmNsdWRlICJHUFJJ
bmZvLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgRlRMIHsKKworbmFtZXNwYWNlIHsK
KworLy8gVGhpcyBjb2RlIHJlbGllcyBvbiB1cyBiZWluZyA2NC1iaXQuIEZUTCBpcyBjdXJyZW50
bHkgYWx3YXlzIDY0LWJpdC4KK3N0YXRpYyBjb25zdCBzaXplX3Qgd29yZFNpemUgPSA4OworICAg
ICAgICAKKy8vIFRoaXMgd2lsbCBiZSBhbiBSQUlJIHRoaW5neSB0aGF0IHdpbGwgc2V0IHVwIHRo
ZSBuZWNlc3Nhcnkgc3RhY2sgc2l6ZXMgYW5kIG9mZnNldHMgYW5kIHN1Y2guCitjbGFzcyBDYWxs
Q29udGV4dCB7CitwdWJsaWM6CisgICAgQ2FsbENvbnRleHQoCisgICAgICAgIFN0YXRlJiBzdGF0
ZSwgY29uc3QgUmVnaXN0ZXJTZXQmIHVzZWRSZWdpc3RlcnMsIENDYWxsSGVscGVycyYgaml0LAor
ICAgICAgICB1bnNpZ25lZCBudW1BcmdzLCBHUFJSZWcgcmV0dXJuUmVnaXN0ZXIpCisgICAgICAg
IDogbV9zdGF0ZShzdGF0ZSkKKyAgICAgICAgLCBtX3VzZWRSZWdpc3RlcnModXNlZFJlZ2lzdGVy
cykKKyAgICAgICAgLCBtX2ppdChqaXQpCisgICAgICAgICwgbV9udW1BcmdzKG51bUFyZ3MpCisg
ICAgICAgICwgbV9yZXR1cm5SZWdpc3RlcihyZXR1cm5SZWdpc3RlcikKKyAgICB7CisgICAgICAg
IGRhdGFMb2coIkRlYWxpbmcgd2l0aCByZWdpc3RlcnM6ICIsIG1fdXNlZFJlZ2lzdGVycywgIlxu
Iik7CisgICAgICAgIAorICAgICAgICAvLyBXZSBkb24ndCBjYXJlIHRoYXQgeW91J3JlIHVzaW5n
IGNhbGxlZS1zYXZlIG9yIHN0YWNrIHJlZ2lzdGVycy4KKyAgICAgICAgbV91c2VkUmVnaXN0ZXJz
LmV4Y2x1ZGUoUmVnaXN0ZXJTZXQ6OnN0YWNrUmVnaXN0ZXJzKCkpOworCisgICAgICAgIGRhdGFM
b2coIkFmdGVyIGV4Y2x1ZGluZyBzdGFjazogIiwgbV91c2VkUmVnaXN0ZXJzLCAiXG4iKTsKKyAg
ICAgICAgbV91c2VkUmVnaXN0ZXJzLmV4Y2x1ZGUoUmVnaXN0ZXJTZXQ6OmNhbGxlZVNhdmVSZWdp
c3RlcnMoKSk7CisgICAgICAgIAorICAgICAgICBkYXRhTG9nKCJBZnRlciBleGNsdWRpbmcgY2Fs
bGVlIHNhdmU6ICIsIG1fdXNlZFJlZ2lzdGVycywgIlxuIik7CisKKyAgICAgICAgLy8gVGhlIHJl
dHVybiByZWdpc3RlciBkb2Vzbid0IG5lZWQgdG8gYmUgc2F2ZWQuCisgICAgICAgIGlmIChtX3Jl
dHVyblJlZ2lzdGVyICE9IEludmFsaWRHUFJSZWcpCisgICAgICAgICAgICBtX3VzZWRSZWdpc3Rl
cnMuY2xlYXIobV9yZXR1cm5SZWdpc3Rlcik7CisgICAgICAgIAorICAgICAgICBkYXRhTG9nKCJB
ZnRlciBjbGVhcmluZyByZXR1cm46ICIsIG1fdXNlZFJlZ2lzdGVycywgIlxuIik7CisKKyAgICAg
ICAgc2l6ZV90IHN0YWNrQnl0ZXNOZWVkZWRGb3JSZXR1cm5BZGRyZXNzID0gd29yZFNpemU7Cisg
ICAgICAgIAorICAgICAgICBtX29mZnNldFRvU2F2aW5nQXJlYSA9CisgICAgICAgICAgICAoc3Rk
OjptYXgobV9udW1BcmdzLCBOVU1CRVJfT0ZfQVJHVU1FTlRfUkVHSVNURVJTKSAtIE5VTUJFUl9P
Rl9BUkdVTUVOVF9SRUdJU1RFUlMpICogd29yZFNpemU7CisgICAgICAgIAorICAgICAgICB1bnNp
Z25lZCBudW1Bcmd1bWVudFJlZ2lzdGVyc1RoYXROZWVkU2F2aW5nID0gMDsKKyAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gc3RkOjptaW4oTlVNQkVSX09GX0FSR1VNRU5UX1JFR0lTVEVSUywgbnVt
QXJncyk7IGktLTspIHsKKyAgICAgICAgICAgIGlmIChtX3VzZWRSZWdpc3RlcnMuZ2V0KEdQUklu
Zm86OnRvQXJndW1lbnRSZWdpc3RlcihpKSkpCisgICAgICAgICAgICAgICAgbnVtQXJndW1lbnRS
ZWdpc3RlcnNUaGF0TmVlZFNhdmluZysrOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBz
aXplX3Qgb2Zmc2V0VG9UaHVua1NhdmluZ0FyZWEgPQorICAgICAgICAgICAgbV9vZmZzZXRUb1Nh
dmluZ0FyZWEgKworICAgICAgICAgICAgbnVtQXJndW1lbnRSZWdpc3RlcnNUaGF0TmVlZFNhdmlu
ZyAqIHdvcmRTaXplOworICAgICAgICAKKyAgICAgICAgbV9zdGFja0J5dGVzTmVlZGVkID0KKyAg
ICAgICAgICAgIG9mZnNldFRvVGh1bmtTYXZpbmdBcmVhICsKKyAgICAgICAgICAgIHN0YWNrQnl0
ZXNOZWVkZWRGb3JSZXR1cm5BZGRyZXNzICsKKyAgICAgICAgICAgIChtX3VzZWRSZWdpc3RlcnMu
bnVtYmVyT2ZTZXRSZWdpc3RlcnMoKSAtIG51bUFyZ3VtZW50UmVnaXN0ZXJzVGhhdE5lZWRTYXZp
bmcpICogd29yZFNpemU7CisgICAgICAgIAorICAgICAgICBzaXplX3Qgc3RhY2tBbGlnbm1lbnQg
PSAxNjsKKyAgICAgICAgCisgICAgICAgIG1fc3RhY2tCeXRlc05lZWRlZCA9IChtX3N0YWNrQnl0
ZXNOZWVkZWQgKyBzdGFja0FsaWdubWVudCAtIDEpICYgfnN0YWNrQWxpZ25tZW50OworICAgICAg
ICAKKyAgICAgICAgbV9qaXQuc3ViUHRyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKG1fc3Rh
Y2tCeXRlc05lZWRlZCksIENDYWxsSGVscGVyczo6c3RhY2tQb2ludGVyUmVnaXN0ZXIpOworICAg
ICAgICAKKyAgICAgICAgbV90aHVua1NhdmVTZXQgPSBtX3VzZWRSZWdpc3RlcnM7CisgICAgICAg
IAorICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBzdGQ6Om1pbihOVU1CRVJfT0ZfQVJHVU1FTlRf
UkVHSVNURVJTLCBudW1BcmdzKTsgaS0tOykgeworICAgICAgICAgICAgaWYgKCFtX3VzZWRSZWdp
c3RlcnMuZ2V0KEdQUkluZm86OnRvQXJndW1lbnRSZWdpc3RlcihpKSkpCisgICAgICAgICAgICAg
ICAgY29udGludWU7CisgICAgICAgICAgICBHUFJSZWcgcmVnID0gR1BSSW5mbzo6dG9Bcmd1bWVu
dFJlZ2lzdGVyKGkpOworICAgICAgICAgICAgbV9qaXQuc3RvcmVQdHIocmVnLCBDQ2FsbEhlbHBl
cnM6OkFkZHJlc3MoQ0NhbGxIZWxwZXJzOjpzdGFja1BvaW50ZXJSZWdpc3RlciwgbV9vZmZzZXRU
b1NhdmluZ0FyZWEgKyBpICogd29yZFNpemUpKTsKKyAgICAgICAgICAgIG1fdGh1bmtTYXZlU2V0
LmNsZWFyKHJlZyk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGRhdGFMb2coIkFmdGVy
IGV4Y2x1ZGluZyBhcmd1bWVudHM6ICIsIG1fdGh1bmtTYXZlU2V0LCAiXG4iKTsKKworICAgICAg
ICBtX29mZnNldCA9IG9mZnNldFRvVGh1bmtTYXZpbmdBcmVhOworICAgIH0KKyAgICAKKyAgICB+
Q2FsbENvbnRleHQoKQorICAgIHsKKyAgICAgICAgbV9qaXQubW92ZShHUFJJbmZvOjpyZXR1cm5W
YWx1ZUdQUiwgbV9yZXR1cm5SZWdpc3Rlcik7CisgICAgICAgIAorICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSBzdGQ6Om1pbihOVU1CRVJfT0ZfQVJHVU1FTlRfUkVHSVNURVJTLCBtX251bUFyZ3Mp
OyBpLS07KSB7CisgICAgICAgICAgICBpZiAoIW1fdXNlZFJlZ2lzdGVycy5nZXQoR1BSSW5mbzo6
dG9Bcmd1bWVudFJlZ2lzdGVyKGkpKSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAg
ICAgICAgIEdQUlJlZyByZWcgPSBHUFJJbmZvOjp0b0FyZ3VtZW50UmVnaXN0ZXIoaSk7CisgICAg
ICAgICAgICBtX2ppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhDQ2FsbEhlbHBlcnM6
OnN0YWNrUG9pbnRlclJlZ2lzdGVyLCBtX29mZnNldFRvU2F2aW5nQXJlYSArIGkgKiB3b3JkU2l6
ZSksIHJlZyk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIG1faml0LmFkZFB0cihDQ2Fs
bEhlbHBlcnM6OlRydXN0ZWRJbW0zMihtX3N0YWNrQnl0ZXNOZWVkZWQpLCBDQ2FsbEhlbHBlcnM6
OnN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKKyAgICB9CisgICAgCisgICAgUmVnaXN0ZXJTZXQgdXNl
ZFJlZ2lzdGVycygpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV90aHVua1NhdmVTZXQ7
CisgICAgfQorICAgIAorICAgIHB0cmRpZmZfdCBvZmZzZXQoKSBjb25zdAorICAgIHsKKyAgICAg
ICAgcmV0dXJuIG1fb2Zmc2V0OworICAgIH0KKyAgICAKKyAgICBTbG93UGF0aENhbGxLZXkga2V5
V2l0aFRhcmdldCh2b2lkKiBjYWxsVGFyZ2V0KSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJu
IFNsb3dQYXRoQ2FsbEtleSh1c2VkUmVnaXN0ZXJzKCksIGNhbGxUYXJnZXQsIG9mZnNldCgpKTsK
KyAgICB9CisgICAgCisgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgbWFrZUNhbGwodm9pZCogY2Fs
bFRhcmdldCkKKyAgICB7CisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIHJlc3VsdCA9IG1f
aml0LmNhbGwoKTsKKyAgICAgICAgbV9zdGF0ZS5maW5hbGl6ZXItPnNsb3dQYXRoQ2FsbHMuYXBw
ZW5kKFNsb3dQYXRoQ2FsbCgKKyAgICAgICAgICAgIHJlc3VsdCwga2V5V2l0aFRhcmdldChjYWxs
VGFyZ2V0KSkpOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICAKK3ByaXZhdGU6
CisgICAgU3RhdGUmIG1fc3RhdGU7CisgICAgUmVnaXN0ZXJTZXQgbV91c2VkUmVnaXN0ZXJzOwor
ICAgIENDYWxsSGVscGVycyBtX2ppdDsKKyAgICB1bnNpZ25lZCBtX251bUFyZ3M7CisgICAgR1BS
UmVnIG1fcmV0dXJuUmVnaXN0ZXI7CisgICAgc2l6ZV90IG1fb2Zmc2V0VG9TYXZpbmdBcmVhOwor
ICAgIHNpemVfdCBtX3N0YWNrQnl0ZXNOZWVkZWQ7CisgICAgUmVnaXN0ZXJTZXQgbV90aHVua1Nh
dmVTZXQ7CisgICAgcHRyZGlmZl90IG1fb2Zmc2V0OworfTsKKworfSAvLyBhbm9ueW1vdXMgbmFt
ZXNwYWNlCisKK01hY3JvQXNzZW1ibGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oCisgICAgU3RhdGUm
IHN0YXRlLCBjb25zdCBSZWdpc3RlclNldCYgdXNlZFJlZ2lzdGVycywgQ0NhbGxIZWxwZXJzJiBq
aXQsIAorICAgIEpfSklUT3BlcmF0aW9uX0VTc2lKSSBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQs
IEdQUlJlZyBjYWxsRnJhbWVSZWdpc3RlciwKKyAgICBTdHJ1Y3R1cmVTdHViSW5mbyogc3R1Yklu
Zm8sIEdQUlJlZyBvYmplY3QsIFN0cmluZ0ltcGwqIHVpZCkKK3sKKyAgICBDYWxsQ29udGV4dCBj
b250ZXh0KHN0YXRlLCB1c2VkUmVnaXN0ZXJzLCBqaXQsIDQsIHJlc3VsdCk7CisgICAgaml0LnNl
dHVwQXJndW1lbnRzKAorICAgICAgICBjYWxsRnJhbWVSZWdpc3RlciwgQ0NhbGxIZWxwZXJzOjpU
cnVzdGVkSW1tUHRyKHN0dWJJbmZvKSwgb2JqZWN0LAorICAgICAgICBDQ2FsbEhlbHBlcnM6OlRy
dXN0ZWRJbW1QdHIodWlkKSk7CisgICAgcmV0dXJuIGNvbnRleHQubWFrZUNhbGwoYml0d2lzZV9j
YXN0PHZvaWQqPihvcGVyYXRpb24pKTsKKyAgICAvLyBGSVhNRTogRlRMIHNob3VsZCBzdXBwb3J0
IGV4Y2VwdGlvbnMuCisgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTExMzYyMgorfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6RlRMCisKKyNlbmRpZiAvLyBF
TkFCTEUoRlRMX0pJVCkKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExTbG93
UGF0aENhbGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFNs
b3dQYXRoQ2FsbC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9G
VExTbG93UGF0aENhbGwuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDY4IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgRlRMU2xvd1Bh
dGhDYWxsX2gKKyNkZWZpbmUgRlRMU2xvd1BhdGhDYWxsX2gKKworI2lmIEVOQUJMRShGVExfSklU
KQorCisjaW5jbHVkZSAiQ0NhbGxIZWxwZXJzLmgiCisjaW5jbHVkZSAiRlRMU2xvd1BhdGhDYWxs
S2V5LmgiCisjaW5jbHVkZSAiSklUT3BlcmF0aW9ucy5oIgorI2luY2x1ZGUgIlN0cnVjdHVyZVN0
dWJJbmZvLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgRlRMIHsKKworY2xhc3MgU3Rh
dGU7CisKK2NsYXNzIFNsb3dQYXRoQ2FsbCB7CitwdWJsaWM6CisgICAgU2xvd1BhdGhDYWxsKCkg
eyB9CisgICAgCisgICAgU2xvd1BhdGhDYWxsKE1hY3JvQXNzZW1ibGVyOjpDYWxsIGNhbGwsIGNv
bnN0IFNsb3dQYXRoQ2FsbEtleSYga2V5KQorICAgICAgICA6IG1fY2FsbChjYWxsKQorICAgICAg
ICAsIG1fa2V5KGtleSkKKyAgICB7CisgICAgfQorICAgIAorICAgIE1hY3JvQXNzZW1ibGVyOjpD
YWxsIGNhbGwoKSBjb25zdCB7IHJldHVybiBtX2NhbGw7IH0KKyAgICBTbG93UGF0aENhbGxLZXkg
a2V5KCkgY29uc3QgeyByZXR1cm4gbV9rZXk7IH0KKyAgICAKK3ByaXZhdGU6CisgICAgTWFjcm9B
c3NlbWJsZXI6OkNhbGwgbV9jYWxsOworICAgIFNsb3dQYXRoQ2FsbEtleSBtX2tleTsKK307CisK
K01hY3JvQXNzZW1ibGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oCisgICAgU3RhdGUmLCBjb25zdCBS
ZWdpc3RlclNldCYsIENDYWxsSGVscGVycyYsIEpfSklUT3BlcmF0aW9uX0VTc2lKSSwKKyAgICBH
UFJSZWcgcmVzdWx0LCBHUFJSZWcgY2FsbEZyYW1lUmVnaXN0ZXIsIFN0cnVjdHVyZVN0dWJJbmZv
KiwgR1BSUmVnIG9iamVjdCwKKyAgICBTdHJpbmdJbXBsKiB1aWQpOworCit9IH0gLy8gbmFtZXNw
YWNlIEpTQzo6RlRMCisKKyNlbmRpZiAvLyBFTkFCTEUoRlRMX0pJVCkKKworI2VuZGlmIC8vIEZU
TFNsb3dQYXRoQ2FsbF9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMU2xv
d1BhdGhDYWxsS2V5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRs
L0ZUTFNsb3dQYXRoQ2FsbEtleS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZnRsL0ZUTFNsb3dQYXRoQ2FsbEtleS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSw0MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRlRMU2xvd1BhdGhDYWxsS2V5LmgiCisKKyNp
ZiBFTkFCTEUoRlRMX0pJVCkKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBGVEwgeworCit2
b2lkIFNsb3dQYXRoQ2FsbEtleTo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAg
IG91dC5wcmludCgiPHVzZWRSZWdpc3RlcnMgPSAiLCBtX3VzZWRSZWdpc3RlcnMsICIsIG9mZnNl
dCA9ICIsIG1fb2Zmc2V0LCAiLCBjYWxsVGFyZ2V0ID0gIiwgUmF3UG9pbnRlcihtX2NhbGxUYXJn
ZXQpLCAiPiIpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6RlRMCisKKyNlbmRpZiAvLyBF
TkFCTEUoRlRMX0pJVCkKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExTbG93
UGF0aENhbGxLZXkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZU
TFNsb3dQYXRoQ2FsbEtleS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Z0bC9GVExTbG93UGF0aENhbGxLZXkuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEyNiBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVm
IEZUTFNsb3dQYXRoQ2FsbEtleV9oCisjZGVmaW5lIEZUTFNsb3dQYXRoQ2FsbEtleV9oCisKKyNp
ZiBFTkFCTEUoRlRMX0pJVCkKKworI2luY2x1ZGUgIlJlZ2lzdGVyU2V0LmgiCisKK25hbWVzcGFj
ZSBKU0MgeyBuYW1lc3BhY2UgRlRMIHsKKworLy8gVGhpcyBpcyB1c2VkIGZvciBjcmVhdGluZyBz
b21lIHNhbml0eSBpbiBzbG93LXBhdGggY2FsbHMgb3V0IG9mIHRoZSBGVEwncyBpbmxpbmUKKy8v
IGNhY2hlcy4gVGhlIGlkZWEgaXMgdGhhdCB3ZSBkb24ndCB3YW50IGFsbCBvZiB0aGUgcmVnaXN0
ZXIgc2F2ZS9yZXN0b3JlIHN0dWZmIHRvCisvLyBiZSBnZW5lcmF0ZWQgYXQgZWFjaCBJQyBzaXRl
LiBJbnN0ZWFkLCB0aGUgSUMgc2xvdyBwYXRoIGNhbGwgc2l0ZSB3aWxsIGp1c3Qgc2F2ZQorLy8g
dGhlIHJlZ2lzdGVycyBuZWVkZWQgZm9yIHRoZSBhcmd1bWVudHMuIEl0IHdpbGwgYXJyYW5nZSBm
b3IgdGhlcmUgdG8gYmUgZW5vdWdoCisvLyBzcGFjZSBvbiB0b3Agb2Ygc3RhY2sgdG8gc2F2ZSB0
aGUgcmVtYWluaW5nIHJlZ2lzdGVycyBhbmQgdGhlIHJldHVybiBQQy4gVGhlbiBpdAorLy8gd2ls
bCBjYWxsIGEgc2hhcmVkIHRodW5rIHRoYXQgd2lsbCBzYXZlIHRoZSByZW1haW5pbmcgcmVnaXN0
ZXJzLiBUaGF0IHRodW5rIG5lZWRzCisvLyB0byBrbm93IHRoZSBzdGFjayBvZmZzZXQgYXQgd2hp
Y2ggdGhpbmdzIGdldCBzYXZlZCBhbG9uZyB3aXRoIHRoZSBjYWxsIHRhcmdldC4KKworLy8gTm90
ZSB0aGF0IHRoZSBvZmZzZXQgaXMgKm5vdCBpbmNsdWRpbmcqIHRoZSByZXR1cm4gUEMgdGhhdCB3
b3VsZCBiZSBwdXNoZWQgb24gWDg2LgorCitjbGFzcyBTbG93UGF0aENhbGxLZXkgeworcHVibGlj
OgorICAgIFNsb3dQYXRoQ2FsbEtleSgpCisgICAgICAgIDogbV9jYWxsVGFyZ2V0KDApCisgICAg
ICAgICwgbV9vZmZzZXQoMCkKKyAgICB7CisgICAgfQorICAgIAorICAgIFNsb3dQYXRoQ2FsbEtl
eShjb25zdCBSZWdpc3RlclNldCYgc2V0LCB2b2lkKiBjYWxsVGFyZ2V0LCBwdHJkaWZmX3Qgb2Zm
c2V0KQorICAgICAgICA6IG1fdXNlZFJlZ2lzdGVycyhzZXQpCisgICAgICAgICwgbV9jYWxsVGFy
Z2V0KGNhbGxUYXJnZXQpCisgICAgICAgICwgbV9vZmZzZXQob2Zmc2V0KQorICAgIHsKKyAgICB9
CisgICAgCisgICAgY29uc3QgUmVnaXN0ZXJTZXQmIHVzZWRSZWdpc3RlcnMoKSBjb25zdCB7IHJl
dHVybiBtX3VzZWRSZWdpc3RlcnM7IH0KKyAgICB2b2lkKiBjYWxsVGFyZ2V0KCkgY29uc3QgeyBy
ZXR1cm4gbV9jYWxsVGFyZ2V0OyB9CisgICAgcHRyZGlmZl90IG9mZnNldCgpIGNvbnN0IHsgcmV0
dXJuIG1fb2Zmc2V0OyB9CisgICAgCisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7
CisgICAgCisgICAgZW51bSBFbXB0eVZhbHVlVGFnIHsgRW1wdHlWYWx1ZSB9OworICAgIGVudW0g
RGVsZXRlZFZhbHVlVGFnIHsgRGVsZXRlZFZhbHVlIH07CisgICAgCisgICAgU2xvd1BhdGhDYWxs
S2V5KEVtcHR5VmFsdWVUYWcpCisgICAgICAgIDogbV91c2VkUmVnaXN0ZXJzKFJlZ2lzdGVyU2V0
OjpFbXB0eVZhbHVlKQorICAgICAgICAsIG1fY2FsbFRhcmdldCgwKQorICAgICAgICAsIG1fb2Zm
c2V0KDApCisgICAgeworICAgIH0KKyAgICAKKyAgICBTbG93UGF0aENhbGxLZXkoRGVsZXRlZFZh
bHVlVGFnKQorICAgICAgICA6IG1fdXNlZFJlZ2lzdGVycyhSZWdpc3RlclNldDo6RGVsZXRlZFZh
bHVlKQorICAgICAgICAsIG1fY2FsbFRhcmdldCgwKQorICAgICAgICAsIG1fb2Zmc2V0KDApCisg
ICAgeworICAgIH0KKyAgICAKKyAgICBib29sIGlzRW1wdHlWYWx1ZSgpIGNvbnN0IHsgcmV0dXJu
IG1fdXNlZFJlZ2lzdGVycy5pc0VtcHR5VmFsdWUoKTsgfQorICAgIGJvb2wgaXNEZWxldGVkVmFs
dWUoKSBjb25zdCB7IHJldHVybiBtX3VzZWRSZWdpc3RlcnMuaXNEZWxldGVkVmFsdWUoKTsgfQor
ICAgIAorICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBTbG93UGF0aENhbGxLZXkmIG90aGVyKSBj
b25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fdXNlZFJlZ2lzdGVycyA9PSBvdGhlci5tX3Vz
ZWRSZWdpc3RlcnMKKyAgICAgICAgICAgICYmIG1fY2FsbFRhcmdldCA9PSBvdGhlci5tX2NhbGxU
YXJnZXQKKyAgICAgICAgICAgICYmIG1fb2Zmc2V0ID09IG90aGVyLm1fb2Zmc2V0OworICAgIH0K
KyAgICB1bnNpZ25lZCBoYXNoKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX3VzZWRS
ZWdpc3RlcnMuaGFzaCgpICsgUHRySGFzaDx2b2lkKj46Omhhc2gobV9jYWxsVGFyZ2V0KSArIG1f
b2Zmc2V0OworICAgIH0KKworcHJpdmF0ZToKKyAgICBSZWdpc3RlclNldCBtX3VzZWRSZWdpc3Rl
cnM7CisgICAgdm9pZCogbV9jYWxsVGFyZ2V0OworICAgIHB0cmRpZmZfdCBtX29mZnNldDsKK307
CisKK3N0cnVjdCBTbG93UGF0aENhbGxLZXlIYXNoIHsKKyAgICBzdGF0aWMgdW5zaWduZWQgaGFz
aChjb25zdCBTbG93UGF0aENhbGxLZXkmIGtleSkgeyByZXR1cm4ga2V5Lmhhc2goKTsgfQorICAg
IHN0YXRpYyBib29sIGVxdWFsKGNvbnN0IFNsb3dQYXRoQ2FsbEtleSYgYSwgY29uc3QgU2xvd1Bh
dGhDYWxsS2V5JiBiKSB7IHJldHVybiBhID09IGI7IH0KKyAgICBzdGF0aWMgY29uc3QgYm9vbCBz
YWZlVG9Db21wYXJlVG9FbXB0eU9yRGVsZXRlZCA9IGZhbHNlOworfTsKKworfSB9IC8vIG5hbWVz
cGFjZSBKU0M6OkZUTAorCituYW1lc3BhY2UgV1RGIHsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4g
c3RydWN0IERlZmF1bHRIYXNoOwordGVtcGxhdGU8PiBzdHJ1Y3QgRGVmYXVsdEhhc2g8SlNDOjpG
VEw6OlNsb3dQYXRoQ2FsbEtleT4geworICAgIHR5cGVkZWYgSlNDOjpGVEw6OlNsb3dQYXRoQ2Fs
bEtleUhhc2ggSGFzaDsKK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBIYXNoVHJh
aXRzOwordGVtcGxhdGU8PiBzdHJ1Y3QgSGFzaFRyYWl0czxKU0M6OkZUTDo6U2xvd1BhdGhDYWxs
S2V5PiA6IHB1YmxpYyBDdXN0b21IYXNoVHJhaXRzPEpTQzo6RlRMOjpTbG93UGF0aENhbGxLZXk+
IHsgfTsKKworfSAvLyBuYW1lc3BhY2UgV1RGCisKKyNlbmRpZiAvLyBFTkFCTEUoRlRMX0pJVCkK
KworI2VuZGlmIC8vIEZUTFNsb3dQYXRoQ2FsbEtleV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9mdGwvRlRMU3RhY2tNYXBzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZnRsL0ZUTFN0YWNrTWFwcy5jcHAJKHJldmlzaW9uIDE1NzcwNykKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMU3RhY2tNYXBzLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NzMsNiArNzMsMTEgQEAgdm9pZCBTdGFja01hcHM6OkxvY2F0aW9uOjpkdW1wKFByaW50U3RyZQog
ICAgIG91dC5wcmludCgiKCIsIGtpbmQsICIsIHJlZyIsIGR3YXJmUmVnTnVtLCAiLCAiLCBvZmZz
ZXQsICIpIik7CiB9CiAKK0dQUlJlZyBTdGFja01hcHM6OkxvY2F0aW9uOjpkaXJlY3RHUFIoU3Rh
Y2tNYXBzJiBzdGFja21hcHMpIGNvbnN0Cit7CisgICAgcmV0dXJuIEZUTDo6TG9jYXRpb246OmZv
clN0YWNrbWFwcyhzdGFja21hcHMsICp0aGlzKS5kaXJlY3RHUFIoKTsKK30KKwogdm9pZCBTdGFj
a01hcHM6OkxvY2F0aW9uOjpyZXN0b3JlSW50bygKICAgICBNYWNyb0Fzc2VtYmxlciYgaml0LCBT
dGFja01hcHMmIHN0YWNrbWFwcywgY2hhciogc2F2ZWRSZWdpc3RlcnMsIEdQUlJlZyByZXN1bHQp
IGNvbnN0CiB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFN0YWNrTWFwcy5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMU3RhY2tNYXBzLmgJ
KHJldmlzaW9uIDE1NzcwNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMU3RhY2tN
YXBzLmgJKHdvcmtpbmcgY29weSkKQEAgLTY0LDYgKzY0LDcgQEAgc3RydWN0IFN0YWNrTWFwcyB7
CiAgICAgICAgIHZvaWQgcGFyc2UoRGF0YVZpZXcqLCB1bnNpZ25lZCYgb2Zmc2V0KTsKICAgICAg
ICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0OwogICAgICAgICAKKyAgICAgICAg
R1BSUmVnIGRpcmVjdEdQUihTdGFja01hcHMmKSBjb25zdDsKICAgICAgICAgdm9pZCByZXN0b3Jl
SW50byhNYWNyb0Fzc2VtYmxlciYsIFN0YWNrTWFwcyYsIGNoYXIqIHNhdmVkUmVnaXN0ZXJzLCBH
UFJSZWcgcmVzdWx0KSBjb25zdDsKICAgICB9OwogICAgIApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Z0bC9GVExTdGF0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9mdGwvRlRMU3RhdGUuaAkocmV2aXNpb24gMTU3NzA3KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2Z0bC9GVExTdGF0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw2ICszMyw3IEBACiAjaW5j
bHVkZSAiREZHR3JhcGguaCIKICNpbmNsdWRlICJGVExBYmJyZXZpYXRpb25zLmgiCiAjaW5jbHVk
ZSAiRlRMR2VuZXJhdGVkRnVuY3Rpb24uaCIKKyNpbmNsdWRlICJGVExJbmxpbmVDYWNoZURlc2Ny
aXB0b3IuaCIKICNpbmNsdWRlICJGVExKSVRDb2RlLmgiCiAjaW5jbHVkZSAiRlRMSklURmluYWxp
emVyLmgiCiAjaW5jbHVkZSAiRlRMU3RhY2tNYXBzLmgiCkBAIC01Niw2ICs1Nyw3IEBAIHB1Ymxp
YzoKICAgICBSZWZQdHI8SklUQ29kZT4gaml0Q29kZTsKICAgICBHZW5lcmF0ZWRGdW5jdGlvbiBn
ZW5lcmF0ZWRGdW5jdGlvbjsKICAgICBKSVRGaW5hbGl6ZXIqIGZpbmFsaXplcjsKKyAgICBTZWdt
ZW50ZWRWZWN0b3I8R2V0QnlJZERlc2NyaXB0b3I+IGdldEJ5SWRzOwogICAgIFZlY3RvcjxDU3Ry
aW5nPiBjb2RlU2VjdGlvbk5hbWVzOwogICAgIFZlY3RvcjxDU3RyaW5nPiBkYXRhU2VjdGlvbk5h
bWVzOwogICAgIFJlZkNvdW50ZWRBcnJheTxMU2VjdGlvbldvcmQ+IHN0YWNrbWFwc1NlY3Rpb247
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFRodW5rcy5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExUaHVua3MuY3BwCShyZXZpc2lvbiAx
NTc3MDcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFRodW5rcy5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTE0NCw2ICsxNDQsNjcgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIG9zckV4
aXRHZW5lcmF0aW9uVwogICAgIHJldHVybiBGSU5BTElaRV9DT0RFKHBhdGNoQnVmZmVyLCAoIkZU
TCBPU1IgZXhpdCBnZW5lcmF0aW9uIHRodW5rIGZvciBjYWxsRnJhbWUgYXQgJXMiLCB0b0NTdHJp
bmcobG9jYXRpb24pLmRhdGEoKSkpOwogfQogCitNYWNyb0Fzc2VtYmxlckNvZGVSZWYgc2xvd1Bh
dGhDYWxsVGh1bmtHZW5lcmF0b3IoVk0mIHZtLCBjb25zdCBTbG93UGF0aENhbGxLZXkmIGtleSkK
K3sKKyAgICBBc3NlbWJseUhlbHBlcnMgaml0KCZ2bSwgMCk7CisgICAgCisgICAgLy8gV2Ugd2Fu
dCB0byBzYXZlIHRoZSBnaXZlbiByZWdpc3RlcnMgYXQgdGhlIGdpdmVuIG9mZnNldCwgdGhlbiB3
ZSB3YW50IHRvIHNhdmUgdGhlCisgICAgLy8gb2xkIHJldHVybiBhZGRyZXNzIHNvbWV3aGVyZSBw
YXN0IHRoYXQgb2Zmc2V0LCBhbmQgdGhlbiBmaW5hbGx5IHdlIHdhbnQgdG8gbWFrZSB0aGUKKyAg
ICAvLyBjYWxsLgorICAgIAorICAgIHNpemVfdCBjdXJyZW50T2Zmc2V0ID0ga2V5Lm9mZnNldCgp
ICsgc2l6ZW9mKHZvaWQqKTsKKyAgICAKKyNpZiBDUFUoWDg2KSB8fCBDUFUoWDg2XzY0KQorICAg
IGN1cnJlbnRPZmZzZXQgKz0gc2l6ZW9mKHZvaWQqKTsKKyNlbmRpZgorICAgIAorICAgIGZvciAo
TWFjcm9Bc3NlbWJsZXI6OlJlZ2lzdGVySUQgcmVnID0gTWFjcm9Bc3NlbWJsZXI6OmZpcnN0UmVn
aXN0ZXIoKTsgcmVnIDw9IE1hY3JvQXNzZW1ibGVyOjpsYXN0UmVnaXN0ZXIoKTsgcmVnID0gc3Rh
dGljX2Nhc3Q8TWFjcm9Bc3NlbWJsZXI6OlJlZ2lzdGVySUQ+KHJlZyArIDEpKSB7CisgICAgICAg
IGlmICgha2V5LnVzZWRSZWdpc3RlcnMoKS5nZXQocmVnKSkKKyAgICAgICAgICAgIGNvbnRpbnVl
OworICAgICAgICBqaXQuc3RvcmVQdHIocmVnLCBBc3NlbWJseUhlbHBlcnM6OkFkZHJlc3MoTWFj
cm9Bc3NlbWJsZXI6OnN0YWNrUG9pbnRlclJlZ2lzdGVyLCBjdXJyZW50T2Zmc2V0KSk7CisgICAg
ICAgIGN1cnJlbnRPZmZzZXQgKz0gc2l6ZW9mKHZvaWQqKTsKKyAgICB9CisgICAgCisgICAgZm9y
IChNYWNyb0Fzc2VtYmxlcjo6RlBSZWdpc3RlcklEIHJlZyA9IE1hY3JvQXNzZW1ibGVyOjpmaXJz
dEZQUmVnaXN0ZXIoKTsgcmVnIDw9IE1hY3JvQXNzZW1ibGVyOjpsYXN0RlBSZWdpc3RlcigpOyBy
ZWcgPSBzdGF0aWNfY2FzdDxNYWNyb0Fzc2VtYmxlcjo6RlBSZWdpc3RlcklEPihyZWcgKyAxKSkg
eworICAgICAgICBpZiAoIWtleS51c2VkUmVnaXN0ZXJzKCkuZ2V0KHJlZykpCisgICAgICAgICAg
ICBjb250aW51ZTsKKyAgICAgICAgaml0LnN0b3JlRG91YmxlKHJlZywgQXNzZW1ibHlIZWxwZXJz
OjpBZGRyZXNzKE1hY3JvQXNzZW1ibGVyOjpzdGFja1BvaW50ZXJSZWdpc3RlciwgY3VycmVudE9m
ZnNldCkpOworICAgICAgICBjdXJyZW50T2Zmc2V0ICs9IHNpemVvZihkb3VibGUpOworICAgIH0K
KyAgICAKKyAgICBqaXQucHJlc2VydmVSZXR1cm5BZGRyZXNzQWZ0ZXJDYWxsKEdQUkluZm86Om5v
bkFyZ0dQUjApOworICAgIGppdC5zdG9yZVB0cihHUFJJbmZvOjpub25BcmdHUFIwLCBBc3NlbWJs
eUhlbHBlcnM6OkFkZHJlc3MoTWFjcm9Bc3NlbWJsZXI6OnN0YWNrUG9pbnRlclJlZ2lzdGVyLCBr
ZXkub2Zmc2V0KCkpKTsKKyAgICAKKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsID0gaml0LmNh
bGwoKTsKKyAgICAKKyAgICBqaXQubG9hZFB0cihBc3NlbWJseUhlbHBlcnM6OkFkZHJlc3MoTWFj
cm9Bc3NlbWJsZXI6OnN0YWNrUG9pbnRlclJlZ2lzdGVyLCBrZXkub2Zmc2V0KCkpLCBHUFJJbmZv
Ojpub25QcmVzZXJ2ZWROb25SZXR1cm5HUFIpOworICAgIGppdC5yZXN0b3JlUmV0dXJuQWRkcmVz
c0JlZm9yZVJldHVybihHUFJJbmZvOjpub25QcmVzZXJ2ZWROb25SZXR1cm5HUFIpOworICAgIAor
ICAgIGZvciAoTWFjcm9Bc3NlbWJsZXI6OkZQUmVnaXN0ZXJJRCByZWcgPSBNYWNyb0Fzc2VtYmxl
cjo6bGFzdEZQUmVnaXN0ZXIoKTsgOyByZWcgPSBzdGF0aWNfY2FzdDxNYWNyb0Fzc2VtYmxlcjo6
RlBSZWdpc3RlcklEPihyZWcgLSAxKSkgeworICAgICAgICBpZiAoa2V5LnVzZWRSZWdpc3RlcnMo
KS5nZXQocmVnKSkgeworICAgICAgICAgICAgY3VycmVudE9mZnNldCAtPSBzaXplb2YoZG91Ymxl
KTsKKyAgICAgICAgICAgIGppdC5sb2FkRG91YmxlKEFzc2VtYmx5SGVscGVyczo6QWRkcmVzcyhN
YWNyb0Fzc2VtYmxlcjo6c3RhY2tQb2ludGVyUmVnaXN0ZXIsIGN1cnJlbnRPZmZzZXQpLCByZWcp
OworICAgICAgICB9CisgICAgICAgIGlmIChyZWcgPT0gTWFjcm9Bc3NlbWJsZXI6OmZpcnN0RlBS
ZWdpc3RlcigpKQorICAgICAgICAgICAgYnJlYWs7CisgICAgfQorICAgIAorICAgIGZvciAoTWFj
cm9Bc3NlbWJsZXI6OlJlZ2lzdGVySUQgcmVnID0gTWFjcm9Bc3NlbWJsZXI6Omxhc3RSZWdpc3Rl
cigpOyA7IHJlZyA9IHN0YXRpY19jYXN0PE1hY3JvQXNzZW1ibGVyOjpSZWdpc3RlcklEPihyZWcg
LSAxKSkgeworICAgICAgICBpZiAoa2V5LnVzZWRSZWdpc3RlcnMoKS5nZXQocmVnKSkgeworICAg
ICAgICAgICAgY3VycmVudE9mZnNldCAtPSBzaXplb2Yodm9pZCopOworICAgICAgICAgICAgaml0
LmxvYWRQdHIoQXNzZW1ibHlIZWxwZXJzOjpBZGRyZXNzKE1hY3JvQXNzZW1ibGVyOjpzdGFja1Bv
aW50ZXJSZWdpc3RlciwgY3VycmVudE9mZnNldCksIHJlZyk7CisgICAgICAgIH0KKyAgICAgICAg
aWYgKHJlZyA9PSBNYWNyb0Fzc2VtYmxlcjo6Zmlyc3RSZWdpc3RlcigpKQorICAgICAgICAgICAg
YnJlYWs7CisgICAgfQorICAgIAorICAgIGppdC5yZXQoKTsKKworICAgIExpbmtCdWZmZXIgcGF0
Y2hCdWZmZXIodm0sICZqaXQsIEdMT0JBTF9USFVOS19JRCk7CisgICAgcGF0Y2hCdWZmZXIubGlu
ayhjYWxsLCBGdW5jdGlvblB0cihrZXkuY2FsbFRhcmdldCgpKSk7CisgICAgcmV0dXJuIEZJTkFM
SVpFX0NPREUocGF0Y2hCdWZmZXIsICgiRlRMIHNsb3cgcGF0aCBjYWxsIHRodW5rIGZvciAlcyIs
IHRvQ1N0cmluZyhrZXkpLmRhdGEoKSkpOworfQorCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6RlRM
CiAKICNlbmRpZiAvLyBFTkFCTEUoRlRMX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9mdGwvRlRMVGh1bmtzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0
bC9GVExUaHVua3MuaAkocmV2aXNpb24gMTU3NzA3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Z0bC9GVExUaHVua3MuaAkod29ya2luZyBjb3B5KQpAQCAtMzEsNiArMzEsNyBAQAogI2lmIEVO
QUJMRShGVExfSklUKQogCiAjaW5jbHVkZSAiRlRMTG9jYXRpb24uaCIKKyNpbmNsdWRlICJGVExT
bG93UGF0aENhbGxLZXkuaCIKICNpbmNsdWRlICJNYWNyb0Fzc2VtYmxlckNvZGVSZWYuaCIKICNp
bmNsdWRlIDx3dGYvSGFzaE1hcC5oPgogCkBAIC00Myw2ICs0NCw3IEBAIG5hbWVzcGFjZSBGVEwg
ewogTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIG9zckV4aXRHZW5lcmF0aW9uV2l0aG91dFN0YWNrTWFw
VGh1bmtHZW5lcmF0b3IoVk0qKTsKIAogTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIG9zckV4aXRHZW5l
cmF0aW9uV2l0aFN0YWNrTWFwVGh1bmtHZW5lcmF0b3IoVk0mLCBjb25zdCBMb2NhdGlvbiYpOwor
TWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHNsb3dQYXRoQ2FsbFRodW5rR2VuZXJhdG9yKFZNJiwgY29u
c3QgU2xvd1BhdGhDYWxsS2V5Jik7CiAKIHRlbXBsYXRlPHR5cGVuYW1lIE1hcFR5cGUsIHR5cGVu
YW1lIEtleVR5cGUsIHR5cGVuYW1lIEdlbmVyYXRvclR5cGU+CiBNYWNyb0Fzc2VtYmxlckNvZGVS
ZWYgZ2VuZXJhdGVJZk5lY2Vzc2FyeSgKQEAgLTY1LDggKzY3LDE1IEBAIHB1YmxpYzoKICAgICAg
ICAgICAgIHZtLCBtX29zckV4aXRUaHVua3MsIGxvY2F0aW9uLCBvc3JFeGl0R2VuZXJhdGlvbldp
dGhTdGFja01hcFRodW5rR2VuZXJhdG9yKTsKICAgICB9CiAgICAgCisgICAgTWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmIGdldFNsb3dQYXRoQ2FsbFRodW5rKFZNJiB2bSwgY29uc3QgU2xvd1BhdGhDYWxs
S2V5JiBrZXkpCisgICAgeworICAgICAgICByZXR1cm4gZ2VuZXJhdGVJZk5lY2Vzc2FyeSgKKyAg
ICAgICAgICAgIHZtLCBtX3Nsb3dQYXRoQ2FsbFRodW5rcywga2V5LCBzbG93UGF0aENhbGxUaHVu
a0dlbmVyYXRvcik7CisgICAgfQorICAgIAogcHJpdmF0ZToKICAgICBIYXNoTWFwPExvY2F0aW9u
LCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY+IG1fb3NyRXhpdFRodW5rczsKKyAgICBIYXNoTWFwPFNs
b3dQYXRoQ2FsbEtleSwgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPiBtX3Nsb3dQYXRoQ2FsbFRodW5r
czsKIH07CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpGVEwKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvQ0NhbGxIZWxwZXJzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9DQ2FsbEhlbHBlcnMuaAkocmV2aXNpb24gMTU3NzA3KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9DQ2FsbEhlbHBlcnMuaAkod29ya2luZyBjb3B5KQpAQCAtOTA2LDYg
KzkwNiwxMyBAQCBwdWJsaWM6CiAgICAgICAgIHNldHVwVHdvU3R1YkFyZ3NHUFI8R1BSSW5mbzo6
YXJndW1lbnRHUFIwLCBHUFJJbmZvOjphcmd1bWVudEdQUjE+KGFyZzEsIGFyZzIpOwogICAgIH0K
ICAgICAKKyAgICBBTFdBWVNfSU5MSU5FIHZvaWQgc2V0dXBBcmd1bWVudHMoR1BSUmVnIGFyZzEs
IFRydXN0ZWRJbW1QdHIgYXJnMiwgR1BSUmVnIGFyZzMsIFRydXN0ZWRJbW1QdHIgYXJnNCkKKyAg
ICB7CisgICAgICAgIHNldHVwVHdvU3R1YkFyZ3NHUFI8R1BSSW5mbzo6YXJndW1lbnRHUFIwLCBH
UFJJbmZvOjphcmd1bWVudEdQUjI+KGFyZzEsIGFyZzMpOworICAgICAgICBtb3ZlKGFyZzIsIEdQ
UkluZm86OmFyZ3VtZW50R1BSMSk7CisgICAgICAgIG1vdmUoYXJnNCwgR1BSSW5mbzo6YXJndW1l
bnRHUFIzKTsKKyAgICB9CisgICAgCiAgICAgQUxXQVlTX0lOTElORSB2b2lkIHNldHVwQXJndW1l
bnRzKFRydXN0ZWRJbW1QdHIgYXJnMSkKICAgICB7CiAgICAgICAgIG1vdmUoYXJnMSwgR1BSSW5m
bzo6YXJndW1lbnRHUFIwKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvR1BSSW5m
by5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvR1BSSW5mby5oCShy
ZXZpc2lvbiAxNTc3MDcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0dQUkluZm8uaAko
d29ya2luZyBjb3B5KQpAQCAtMjc5LDcgKzI3OSw3IEBAIHByaXZhdGU6CiAjZW5kaWYKIAogI2lm
IENQVShYODYpCi0jZGVmaW5lIE5VTUJFUl9PRl9BUkdVTUVOVF9SRUdJU1RFUlMgMAorI2RlZmlu
ZSBOVU1CRVJfT0ZfQVJHVU1FTlRfUkVHSVNURVJTIDB1CiAKIGNsYXNzIEdQUkluZm8gewogcHVi
bGljOgpAQCAtMzQyLDcgKzM0Miw3IEBAIHByaXZhdGU6CiAjZW5kaWYKIAogI2lmIENQVShYODZf
NjQpCi0jZGVmaW5lIE5VTUJFUl9PRl9BUkdVTUVOVF9SRUdJU1RFUlMgNgorI2RlZmluZSBOVU1C
RVJfT0ZfQVJHVU1FTlRfUkVHSVNURVJTIDZ1CiAKIGNsYXNzIEdQUkluZm8gewogcHVibGljOgpA
QCAtNDIzLDcgKzQyMyw3IEBAIHByaXZhdGU6CiAjZW5kaWYKIAogI2lmIENQVShBUk0pCi0jZGVm
aW5lIE5VTUJFUl9PRl9BUkdVTUVOVF9SRUdJU1RFUlMgNAorI2RlZmluZSBOVU1CRVJfT0ZfQVJH
VU1FTlRfUkVHSVNURVJTIDR1CiAKIGNsYXNzIEdQUkluZm8gewogcHVibGljOgpAQCAtNDk3LDcg
KzQ5Nyw3IEBAIHByaXZhdGU6CiAjZW5kaWYKIAogI2lmIENQVShBUk02NCkKLSNkZWZpbmUgTlVN
QkVSX09GX0FSR1VNRU5UX1JFR0lTVEVSUyA4CisjZGVmaW5lIE5VTUJFUl9PRl9BUkdVTUVOVF9S
RUdJU1RFUlMgOHUKIAogY2xhc3MgR1BSSW5mbyB7CiBwdWJsaWM6CkBAIC01OTAsNyArNTkwLDcg
QEAgcHJpdmF0ZToKICNlbmRpZgogCiAjaWYgQ1BVKE1JUFMpCi0jZGVmaW5lIE5VTUJFUl9PRl9B
UkdVTUVOVF9SRUdJU1RFUlMgNAorI2RlZmluZSBOVU1CRVJfT0ZfQVJHVU1FTlRfUkVHSVNURVJT
IDR1CiAKIGNsYXNzIEdQUkluZm8gewogcHVibGljOgpAQCAtNjU4LDcgKzY1OCw3IEBAIHByaXZh
dGU6CiAjZW5kaWYKIAogI2lmIENQVShTSDQpCi0jZGVmaW5lIE5VTUJFUl9PRl9BUkdVTUVOVF9S
RUdJU1RFUlMgNAorI2RlZmluZSBOVU1CRVJfT0ZfQVJHVU1FTlRfUkVHSVNURVJTIDR1CiAKIGNs
YXNzIEdQUkluZm8gewogcHVibGljOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVRJbmxpbmVDYWNoZUdlbmVyYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRJbmxpbmVDYWNoZUdlbmVyYXRvci5jcHAJKHJldmlzaW9uIDE1NzcwNykK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lQ2FjaGVHZW5lcmF0b3IuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0zNCwxMCArMzQsMTYgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAK
K3N0YXRpYyBTdHJ1Y3R1cmVTdHViSW5mbyogZ2FyYmFnZVN0dWJJbmZvKCkKK3sKKyAgICBzdGF0
aWMgU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvID0gbmV3IFN0cnVjdHVyZVN0dWJJbmZvKCk7
CisgICAgcmV0dXJuIHN0dWJJbmZvOworfQorCiBKSVRJbmxpbmVDYWNoZUdlbmVyYXRvcjo6SklU
SW5saW5lQ2FjaGVHZW5lcmF0b3IoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIENvZGVPcmlnaW4gY29k
ZU9yaWdpbikKICAgICA6IG1fY29kZUJsb2NrKGNvZGVCbG9jaykKIHsKLSAgICBtX3N0dWJJbmZv
ID0gbV9jb2RlQmxvY2stPmFkZFN0dWJJbmZvKCk7CisgICAgbV9zdHViSW5mbyA9IG1fY29kZUJs
b2NrID8gbV9jb2RlQmxvY2stPmFkZFN0dWJJbmZvKCkgOiBnYXJiYWdlU3R1YkluZm8oKTsKICAg
ICBtX3N0dWJJbmZvLT5jb2RlT3JpZ2luID0gY29kZU9yaWdpbjsKIH0KIApAQCAtNjMsMjkgKzY5
LDM0IEBAIEpJVEJ5SWRHZW5lcmF0b3I6OkpJVEJ5SWRHZW5lcmF0b3IoCiAjZW5kaWYKIH0KIAot
dm9pZCBKSVRCeUlkR2VuZXJhdG9yOjpmaW5hbGl6ZShMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKQor
dm9pZCBKSVRCeUlkR2VuZXJhdG9yOjpmaW5hbGl6ZShMaW5rQnVmZmVyJiBmYXN0UGF0aCwgTGlu
a0J1ZmZlciYgc2xvd1BhdGgpCiB7Ci0gICAgQ29kZUxvY2F0aW9uQ2FsbCBjYWxsUmV0dXJuTG9j
YXRpb24gPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2YobV9jYWxsKTsKKyAgICBDb2RlTG9jYXRpb25D
YWxsIGNhbGxSZXR1cm5Mb2NhdGlvbiA9IHNsb3dQYXRoLmxvY2F0aW9uT2YobV9jYWxsKTsKICAg
ICBtX3N0dWJJbmZvLT5jYWxsUmV0dXJuTG9jYXRpb24gPSBjYWxsUmV0dXJuTG9jYXRpb247CiAg
ICAgbV9zdHViSW5mby0+cGF0Y2guZGVsdGFDaGVja0ltbVRvQ2FsbCA9IE1hY3JvQXNzZW1ibGVy
OjpkaWZmZXJlbmNlQmV0d2VlbkNvZGVQdHIoCi0gICAgICAgIGxpbmtCdWZmZXIubG9jYXRpb25P
ZihtX3N0cnVjdHVyZUltbSksIGNhbGxSZXR1cm5Mb2NhdGlvbik7CisgICAgICAgIGZhc3RQYXRo
LmxvY2F0aW9uT2YobV9zdHJ1Y3R1cmVJbW0pLCBjYWxsUmV0dXJuTG9jYXRpb24pOwogICAgIG1f
c3R1YkluZm8tPnBhdGNoLmRlbHRhQ2FsbFRvU3RydWN0Q2hlY2sgPSBNYWNyb0Fzc2VtYmxlcjo6
ZGlmZmVyZW5jZUJldHdlZW5Db2RlUHRyKAotICAgICAgICBjYWxsUmV0dXJuTG9jYXRpb24sIGxp
bmtCdWZmZXIubG9jYXRpb25PZihtX3N0cnVjdHVyZUNoZWNrKSk7CisgICAgICAgIGNhbGxSZXR1
cm5Mb2NhdGlvbiwgZmFzdFBhdGgubG9jYXRpb25PZihtX3N0cnVjdHVyZUNoZWNrKSk7CiAjaWYg
VVNFKEpTVkFMVUU2NCkKICAgICBtX3N0dWJJbmZvLT5wYXRjaC5kZWx0YUNhbGxUb0xvYWRPclN0
b3JlID0gTWFjcm9Bc3NlbWJsZXI6OmRpZmZlcmVuY2VCZXR3ZWVuQ29kZVB0cigKLSAgICAgICAg
Y2FsbFJldHVybkxvY2F0aW9uLCBsaW5rQnVmZmVyLmxvY2F0aW9uT2YobV9sb2FkT3JTdG9yZSkp
OworICAgICAgICBjYWxsUmV0dXJuTG9jYXRpb24sIGZhc3RQYXRoLmxvY2F0aW9uT2YobV9sb2Fk
T3JTdG9yZSkpOwogI2Vsc2UKICAgICBtX3N0dWJJbmZvLT5wYXRjaC5kZWx0YUNhbGxUb1RhZ0xv
YWRPclN0b3JlID0gTWFjcm9Bc3NlbWJsZXI6OmRpZmZlcmVuY2VCZXR3ZWVuQ29kZVB0cigKLSAg
ICAgICAgY2FsbFJldHVybkxvY2F0aW9uLCBsaW5rQnVmZmVyLmxvY2F0aW9uT2YobV90YWdMb2Fk
T3JTdG9yZSkpOworICAgICAgICBjYWxsUmV0dXJuTG9jYXRpb24sIGZhc3RQYXRoLmxvY2F0aW9u
T2YobV90YWdMb2FkT3JTdG9yZSkpOwogICAgIG1fc3R1YkluZm8tPnBhdGNoLmRlbHRhQ2FsbFRv
UGF5bG9hZExvYWRPclN0b3JlID0gTWFjcm9Bc3NlbWJsZXI6OmRpZmZlcmVuY2VCZXR3ZWVuQ29k
ZVB0cigKLSAgICAgICAgY2FsbFJldHVybkxvY2F0aW9uLCBsaW5rQnVmZmVyLmxvY2F0aW9uT2Yo
bV9sb2FkT3JTdG9yZSkpOworICAgICAgICBjYWxsUmV0dXJuTG9jYXRpb24sIGZhc3RQYXRoLmxv
Y2F0aW9uT2YobV9sb2FkT3JTdG9yZSkpOwogI2VuZGlmCiAgICAgbV9zdHViSW5mby0+cGF0Y2gu
ZGVsdGFDYWxsVG9TbG93Q2FzZSA9IE1hY3JvQXNzZW1ibGVyOjpkaWZmZXJlbmNlQmV0d2VlbkNv
ZGVQdHIoCi0gICAgICAgIGNhbGxSZXR1cm5Mb2NhdGlvbiwgbGlua0J1ZmZlci5sb2NhdGlvbk9m
KG1fc2xvd1BhdGhCZWdpbikpOworICAgICAgICBjYWxsUmV0dXJuTG9jYXRpb24sIHNsb3dQYXRo
LmxvY2F0aW9uT2YobV9zbG93UGF0aEJlZ2luKSk7CiAgICAgbV9zdHViSW5mby0+cGF0Y2guZGVs
dGFDYWxsVG9Eb25lID0gTWFjcm9Bc3NlbWJsZXI6OmRpZmZlcmVuY2VCZXR3ZWVuQ29kZVB0cigK
LSAgICAgICAgY2FsbFJldHVybkxvY2F0aW9uLCBsaW5rQnVmZmVyLmxvY2F0aW9uT2YobV9kb25l
KSk7CisgICAgICAgIGNhbGxSZXR1cm5Mb2NhdGlvbiwgZmFzdFBhdGgubG9jYXRpb25PZihtX2Rv
bmUpKTsKICAgICBtX3N0dWJJbmZvLT5wYXRjaC5kZWx0YUNhbGxUb1N0b3JhZ2VMb2FkID0gTWFj
cm9Bc3NlbWJsZXI6OmRpZmZlcmVuY2VCZXR3ZWVuQ29kZVB0cigKLSAgICAgICAgY2FsbFJldHVy
bkxvY2F0aW9uLCBsaW5rQnVmZmVyLmxvY2F0aW9uT2YobV9wcm9wZXJ0eVN0b3JhZ2VMb2FkKSk7
CisgICAgICAgIGNhbGxSZXR1cm5Mb2NhdGlvbiwgZmFzdFBhdGgubG9jYXRpb25PZihtX3Byb3Bl
cnR5U3RvcmFnZUxvYWQpKTsKK30KKwordm9pZCBKSVRCeUlkR2VuZXJhdG9yOjpmaW5hbGl6ZShM
aW5rQnVmZmVyJiBsaW5rQnVmZmVyKQoreworICAgIGZpbmFsaXplKGxpbmtCdWZmZXIsIGxpbmtC
dWZmZXIpOwogfQogCiB2b2lkIEpJVEJ5SWRHZW5lcmF0b3I6OmdlbmVyYXRlRmFzdFBhdGhDaGVj
a3MoTWFjcm9Bc3NlbWJsZXImIGppdCwgR1BSUmVnIGJ1dHRlcmZseSkKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lQ2FjaGVHZW5lcmF0b3IuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZUNhY2hlR2VuZXJhdG9yLmgJKHJl
dmlzaW9uIDE1NzcwNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lQ2Fj
aGVHZW5lcmF0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtNjYsOCArNjYsMTAgQEAgcHVibGljOgog
ICAgICAgICBtX2NhbGwgPSBjYWxsOwogICAgIH0KICAgICAKKyAgICBNYWNyb0Fzc2VtYmxlcjo6
UGF0Y2hhYmxlSnVtcCBzbG93UGF0aFBhdGNoYWJsZUp1bXAoKSBjb25zdCB7IHJldHVybiBtX3N0
cnVjdHVyZUNoZWNrOyB9CiAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgc2xvd1BhdGhKdW1wKCkg
Y29uc3QgeyByZXR1cm4gbV9zdHJ1Y3R1cmVDaGVjay5tX2p1bXA7IH0KIAorICAgIHZvaWQgZmlu
YWxpemUoTGlua0J1ZmZlciYgZmFzdFBhdGhMaW5rQnVmZmVyLCBMaW5rQnVmZmVyJiBzbG93UGF0
aExpbmtCdWZmZXIpOwogICAgIHZvaWQgZmluYWxpemUoTGlua0J1ZmZlciYpOwogICAgIAogcHJv
dGVjdGVkOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZWdpc3RlclNldC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZWdpc3RlclNldC5jcHAJ
KHJldmlzaW9uIDE1NzcwNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVnaXN0ZXJT
ZXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMywxMiArMzMsMTkgQEAKIAogbmFtZXNwYWNlIEpT
QyB7CiAKLVJlZ2lzdGVyU2V0IFJlZ2lzdGVyU2V0OjpzcGVjaWFsUmVnaXN0ZXJzKCkKK1JlZ2lz
dGVyU2V0IFJlZ2lzdGVyU2V0OjpzdGFja1JlZ2lzdGVycygpCiB7CiAgICAgUmVnaXN0ZXJTZXQg
cmVzdWx0OwotICAgIHJlc3VsdC5zZXQoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIpOwogICAg
IHJlc3VsdC5zZXQoTWFjcm9Bc3NlbWJsZXI6OnN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKICAgICBy
ZXN1bHQuc2V0KE1hY3JvQXNzZW1ibGVyOjpmcmFtZVBvaW50ZXJSZWdpc3Rlcik7CisgICAgcmV0
dXJuIHJlc3VsdDsKK30KKworUmVnaXN0ZXJTZXQgUmVnaXN0ZXJTZXQ6OnNwZWNpYWxSZWdpc3Rl
cnMoKQoreworICAgIFJlZ2lzdGVyU2V0IHJlc3VsdDsKKyAgICByZXN1bHQubWVyZ2Uoc3RhY2tS
ZWdpc3RlcnMoKSk7CisgICAgcmVzdWx0LnNldChHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rlcik7
CiAjaWYgVVNFKEpTVkFMVUU2NCkKICAgICByZXN1bHQuc2V0KEdQUkluZm86OnRhZ1R5cGVOdW1i
ZXJSZWdpc3Rlcik7CiAgICAgcmVzdWx0LnNldChHUFJJbmZvOjp0YWdNYXNrUmVnaXN0ZXIpOwpA
QCAtNDYsNiArNTMsNTIgQEAgUmVnaXN0ZXJTZXQgUmVnaXN0ZXJTZXQ6OnNwZWNpYWxSZWdpc3Rl
cgogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKK1JlZ2lzdGVyU2V0IFJlZ2lzdGVyU2V0OjpjYWxs
ZWVTYXZlUmVnaXN0ZXJzKCkKK3sKKyAgICBSZWdpc3RlclNldCByZXN1bHQ7CisjaWYgQ1BVKFg4
Nl82NCkKKyAgICByZXN1bHQuc2V0KFg4NlJlZ2lzdGVyczo6ZWJ4KTsKKyAgICByZXN1bHQuc2V0
KFg4NlJlZ2lzdGVyczo6ZWJwKTsKKyAgICByZXN1bHQuc2V0KFg4NlJlZ2lzdGVyczo6cjEwKTsK
KyAgICByZXN1bHQuc2V0KFg4NlJlZ2lzdGVyczo6cjEyKTsKKyAgICByZXN1bHQuc2V0KFg4NlJl
Z2lzdGVyczo6cjEzKTsKKyAgICByZXN1bHQuc2V0KFg4NlJlZ2lzdGVyczo6cjE0KTsKKyAgICBy
ZXN1bHQuc2V0KFg4NlJlZ2lzdGVyczo6cjE1KTsKKyNlbHNlCisjZXJyb3IgIlVuc3VwcG9ydGVk
IGluc3RydWN0aW9uIHNldCIKKyNlbmRpZgorICAgIHJldHVybiByZXN1bHQ7Cit9CisKK1JlZ2lz
dGVyU2V0IFJlZ2lzdGVyU2V0OjphbGxHUFJzKCkKK3sKKyAgICBSZWdpc3RlclNldCByZXN1bHQ7
CisgICAgZm9yIChNYWNyb0Fzc2VtYmxlcjo6UmVnaXN0ZXJJRCByZWcgPSBNYWNyb0Fzc2VtYmxl
cjo6Zmlyc3RSZWdpc3RlcigpOyByZWcgPD0gTWFjcm9Bc3NlbWJsZXI6Omxhc3RSZWdpc3Rlcigp
OyByZWcgPSBzdGF0aWNfY2FzdDxNYWNyb0Fzc2VtYmxlcjo6UmVnaXN0ZXJJRD4ocmVnICsgMSkp
CisgICAgICAgIHJlc3VsdC5zZXQocmVnKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitSZWdp
c3RlclNldCBSZWdpc3RlclNldDo6YWxsRlBScygpCit7CisgICAgUmVnaXN0ZXJTZXQgcmVzdWx0
OworICAgIGZvciAoTWFjcm9Bc3NlbWJsZXI6OkZQUmVnaXN0ZXJJRCByZWcgPSBNYWNyb0Fzc2Vt
Ymxlcjo6Zmlyc3RGUFJlZ2lzdGVyKCk7IHJlZyA8PSBNYWNyb0Fzc2VtYmxlcjo6bGFzdEZQUmVn
aXN0ZXIoKTsgcmVnID0gc3RhdGljX2Nhc3Q8TWFjcm9Bc3NlbWJsZXI6OkZQUmVnaXN0ZXJJRD4o
cmVnICsgMSkpCisgICAgICAgIHJlc3VsdC5zZXQocmVnKTsKKyAgICByZXR1cm4gcmVzdWx0Owor
fQorCitSZWdpc3RlclNldCBSZWdpc3RlclNldDo6YWxsUmVnaXN0ZXJzKCkKK3sKKyAgICBSZWdp
c3RlclNldCByZXN1bHQ7CisgICAgcmVzdWx0Lm1lcmdlKGFsbEdQUnMoKSk7CisgICAgcmVzdWx0
Lm1lcmdlKGFsbEZQUnMoKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCBSZWdpc3Rl
clNldDo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIG1fdmVjdG9yLmR1bXAo
b3V0KTsKK30KKwogfSAvLyBuYW1lc3BhY2UgSlNDCiAKICNlbmRpZiAvLyBFTkFCTEUoSklUKQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZWdpc3RlclNldC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVnaXN0ZXJTZXQuaAkocmV2aXNpb24gMTU3
NzA3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZWdpc3RlclNldC5oCSh3b3JraW5n
IGNvcHkpCkBAIC00Miw3ICs0MiwxMiBAQCBjbGFzcyBSZWdpc3RlclNldCB7CiBwdWJsaWM6CiAg
ICAgUmVnaXN0ZXJTZXQoKSB7IH0KICAgICAKKyAgICBzdGF0aWMgUmVnaXN0ZXJTZXQgc3RhY2tS
ZWdpc3RlcnMoKTsKICAgICBzdGF0aWMgUmVnaXN0ZXJTZXQgc3BlY2lhbFJlZ2lzdGVycygpOwor
ICAgIHN0YXRpYyBSZWdpc3RlclNldCBjYWxsZWVTYXZlUmVnaXN0ZXJzKCk7CisgICAgc3RhdGlj
IFJlZ2lzdGVyU2V0IGFsbEdQUnMoKTsKKyAgICBzdGF0aWMgUmVnaXN0ZXJTZXQgYWxsRlBScygp
OworICAgIHN0YXRpYyBSZWdpc3RlclNldCBhbGxSZWdpc3RlcnMoKTsKIAogICAgIHZvaWQgc2V0
KEdQUlJlZyByZWcsIGJvb2wgdmFsdWUgPSB0cnVlKQogICAgIHsKQEAgLTc2LDEzICs4MSw1NSBA
QCBwdWJsaWM6CiAgICAgYm9vbCBnZXQoRlBSUmVnIHJlZykgY29uc3QgeyByZXR1cm4gbV92ZWN0
b3IuZ2V0KE1hY3JvQXNzZW1ibGVyOjpyZWdpc3RlckluZGV4KHJlZykpOyB9CiAgICAgCiAgICAg
dm9pZCBtZXJnZShjb25zdCBSZWdpc3RlclNldCYgb3RoZXIpIHsgbV92ZWN0b3IubWVyZ2Uob3Ro
ZXIubV92ZWN0b3IpOyB9CisgICAgdm9pZCBleGNsdWRlKGNvbnN0IFJlZ2lzdGVyU2V0JiBvdGhl
cikgeyBtX3ZlY3Rvci5leGNsdWRlKG90aGVyLm1fdmVjdG9yKTsgfQorICAgIAorICAgIHNpemVf
dCBudW1iZXJPZlNldFJlZ2lzdGVycygpIGNvbnN0IHsgcmV0dXJuIG1fdmVjdG9yLmJpdENvdW50
KCk7IH0KKyAgICAKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKKyAgICAKKyAg
ICBlbnVtIEVtcHR5VmFsdWVUYWcgeyBFbXB0eVZhbHVlIH07CisgICAgZW51bSBEZWxldGVkVmFs
dWVUYWcgeyBEZWxldGVkVmFsdWUgfTsKKyAgICAKKyAgICBSZWdpc3RlclNldChFbXB0eVZhbHVl
VGFnKQorICAgICAgICA6IG1fdmVjdG9yKEJpdFZlY3Rvcjo6RW1wdHlWYWx1ZSkKKyAgICB7Cisg
ICAgfQorICAgIAorICAgIFJlZ2lzdGVyU2V0KERlbGV0ZWRWYWx1ZVRhZykKKyAgICAgICAgOiBt
X3ZlY3RvcihCaXRWZWN0b3I6OkRlbGV0ZWRWYWx1ZSkKKyAgICB7CisgICAgfQorICAgIAorICAg
IGJvb2wgaXNFbXB0eVZhbHVlKCkgY29uc3QgeyByZXR1cm4gbV92ZWN0b3IuaXNFbXB0eVZhbHVl
KCk7IH0KKyAgICBib29sIGlzRGVsZXRlZFZhbHVlKCkgY29uc3QgeyByZXR1cm4gbV92ZWN0b3Iu
aXNEZWxldGVkVmFsdWUoKTsgfQorICAgIAorICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBSZWdp
c3RlclNldCYgb3RoZXIpIGNvbnN0IHsgcmV0dXJuIG1fdmVjdG9yID09IG90aGVyLm1fdmVjdG9y
OyB9CisgICAgdW5zaWduZWQgaGFzaCgpIGNvbnN0IHsgcmV0dXJuIG1fdmVjdG9yLmhhc2goKTsg
fQogICAgIAogcHJpdmF0ZToKICAgICBCaXRWZWN0b3IgbV92ZWN0b3I7CiB9OwogCitzdHJ1Y3Qg
UmVnaXN0ZXJTZXRIYXNoIHsKKyAgICBzdGF0aWMgdW5zaWduZWQgaGFzaChjb25zdCBSZWdpc3Rl
clNldCYgc2V0KSB7IHJldHVybiBzZXQuaGFzaCgpOyB9CisgICAgc3RhdGljIGJvb2wgZXF1YWwo
Y29uc3QgUmVnaXN0ZXJTZXQmIGEsIGNvbnN0IFJlZ2lzdGVyU2V0JiBiKSB7IHJldHVybiBhID09
IGI7IH0KKyAgICBzdGF0aWMgY29uc3QgYm9vbCBzYWZlVG9Db21wYXJlVG9FbXB0eU9yRGVsZXRl
ZCA9IGZhbHNlOworfTsKKwogfSAvLyBuYW1lc3BhY2UgSlNDCiAKK25hbWVzcGFjZSBXVEYgewor
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgRGVmYXVsdEhhc2g7Cit0ZW1wbGF0ZTw+IHN0
cnVjdCBEZWZhdWx0SGFzaDxKU0M6OlJlZ2lzdGVyU2V0PiB7CisgICAgdHlwZWRlZiBKU0M6OlJl
Z2lzdGVyU2V0SGFzaCBIYXNoOworfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEhh
c2hUcmFpdHM7Cit0ZW1wbGF0ZTw+IHN0cnVjdCBIYXNoVHJhaXRzPEpTQzo6UmVnaXN0ZXJTZXQ+
IDogcHVibGljIEN1c3RvbUhhc2hUcmFpdHM8SlNDOjpSZWdpc3RlclNldD4geyB9OworCit9IC8v
IG5hbWVzcGFjZSBXVEYKKwogI2VuZGlmIC8vIEVOQUJMRShKSVQpCiAKICNlbmRpZiAvLyBSZWdp
c3RlclNldF9oCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5oCShy
ZXZpc2lvbiAxNTc3MDcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25z
LmgJKHdvcmtpbmcgY29weSkKQEAgLTEyNSw2ICsxMjUsNyBAQCB0eXBlZGVmIE9wdGlvblJhbmdl
IG9wdGlvblJhbmdlOwogICAgIHYoYm9vbCwgZnRsVHJhcHNPbk9TUkV4aXQsIGZhbHNlKSBcCiAg
ICAgdihib29sLCBmdGxPU1JFeGl0T21pdHNNYXJzaGFsbGluZywgZmFsc2UpIFwKICAgICB2KGJv
b2wsIGZ0bE9TUkV4aXRVc2VzU3RhY2ttYXAsIGZhbHNlKSBcCisgICAgdihib29sLCBmdGxJQ1Vz
ZXNQYXRjaHBvaW50LCBmYWxzZSkgXAogICAgIHYoYm9vbCwgdXNlTExWTU9TUkV4aXRJbnRyaW5z
aWMsIGZhbHNlKSBcCiAgICAgdihib29sLCBkdW1wTExWTUlSLCBmYWxzZSkgXAogICAgIHYoYm9v
bCwgbGx2bUFsd2F5c0ZhaWxzQmVmb3JlQ29tcGlsZSwgZmFsc2UpIFwKSW5kZXg6IFNvdXJjZS9X
VEYvd3RmL0JpdFZlY3Rvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvQml0VmVj
dG9yLmNwcAkocmV2aXNpb24gMTU3NzA3KQorKysgU291cmNlL1dURi93dGYvQml0VmVjdG9yLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzcsMTQgKzM3LDE0IEBAIG5hbWVzcGFjZSBXVEYgewogdm9p
ZCBCaXRWZWN0b3I6OnNldFNsb3coY29uc3QgQml0VmVjdG9yJiBvdGhlcikKIHsKICAgICB1aW50
cHRyX3QgbmV3Qml0c09yUG9pbnRlcjsKLSAgICBpZiAob3RoZXIuaXNJbmxpbmUoKSkKKyAgICBp
ZiAob3RoZXIuaXNJbmxpbmUoKSB8fCBvdGhlci5pc0VtcHR5T3JEZWxldGVkVmFsdWUoKSkKICAg
ICAgICAgbmV3Qml0c09yUG9pbnRlciA9IG90aGVyLm1fYml0c09yUG9pbnRlcjsKICAgICBlbHNl
IHsKICAgICAgICAgT3V0T2ZMaW5lQml0cyogbmV3T3V0T2ZMaW5lQml0cyA9IE91dE9mTGluZUJp
dHM6OmNyZWF0ZShvdGhlci5zaXplKCkpOwogICAgICAgICBtZW1jcHkobmV3T3V0T2ZMaW5lQml0
cy0+Yml0cygpLCBvdGhlci5iaXRzKCksIGJ5dGVDb3VudChvdGhlci5zaXplKCkpKTsKICAgICAg
ICAgbmV3Qml0c09yUG9pbnRlciA9IGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KG5ld091dE9mTGlu
ZUJpdHMpID4+IDE7CiAgICAgfQotICAgIGlmICghaXNJbmxpbmUoKSkKKyAgICBpZiAoIWlzSW5s
aW5lKCkgJiYgIWlzRW1wdHlPckRlbGV0ZWRWYWx1ZSgpKQogICAgICAgICBPdXRPZkxpbmVCaXRz
OjpkZXN0cm95KG91dE9mTGluZUJpdHMoKSk7CiAgICAgbV9iaXRzT3JQb2ludGVyID0gbmV3Qml0
c09yUG9pbnRlcjsKIH0KQEAgLTEyNCw3ICsxMjQsNTkgQEAgdm9pZCBCaXRWZWN0b3I6Om1lcmdl
U2xvdyhjb25zdCBCaXRWZWN0bwogICAgICAgICBhLT5iaXRzKClbaV0gfD0gYi0+Yml0cygpW2ld
OwogfQogCi12b2lkIEJpdFZlY3Rvcjo6ZHVtcChQcmludFN0cmVhbSYgb3V0KQordm9pZCBCaXRW
ZWN0b3I6OmV4Y2x1ZGVTbG93KGNvbnN0IEJpdFZlY3RvciYgb3RoZXIpCit7CisgICAgaWYgKG90
aGVyLmlzSW5saW5lKCkpIHsKKyAgICAgICAgQVNTRVJUKCFpc0lubGluZSgpKTsKKyAgICAgICAg
KmJpdHMoKSAmPSB+Y2xlYW5zZUlubGluZUJpdHMob3RoZXIubV9iaXRzT3JQb2ludGVyKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBpZiAoaXNJbmxpbmUoKSkgeworICAgICAg
ICBBU1NFUlQoIW90aGVyLmlzSW5saW5lKCkpOworICAgICAgICBtX2JpdHNPclBvaW50ZXIgJj0g
fipvdGhlci5vdXRPZkxpbmVCaXRzKCktPmJpdHMoKTsKKyAgICAgICAgbV9iaXRzT3JQb2ludGVy
IHw9IChzdGF0aWNfY2FzdDx1aW50cHRyX3Q+KDEpIDw8IG1heElubGluZUJpdHMoKSk7CisgICAg
ICAgIEFTU0VSVChpc0lubGluZSgpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAg
ICBPdXRPZkxpbmVCaXRzKiBhID0gb3V0T2ZMaW5lQml0cygpOworICAgIGNvbnN0IE91dE9mTGlu
ZUJpdHMqIGIgPSBvdGhlci5vdXRPZkxpbmVCaXRzKCk7CisgICAgZm9yICh1bnNpZ25lZCBpID0g
c3RkOjptaW4oYS0+bnVtV29yZHMoKSwgYi0+bnVtV29yZHMoKSk7IGktLTspCisgICAgICAgIGEt
PmJpdHMoKVtpXSAmPSB+Yi0+Yml0cygpW2ldOworfQorCitzaXplX3QgQml0VmVjdG9yOjpiaXRD
b3VudFNsb3coKSBjb25zdAoreworICAgIEFTU0VSVCghaXNJbmxpbmUoKSk7CisgICAgY29uc3Qg
T3V0T2ZMaW5lQml0cyogYml0cyA9IG91dE9mTGluZUJpdHMoKTsKKyAgICBzaXplX3QgcmVzdWx0
ID0gMDsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSBiaXRzLT5udW1Xb3JkcygpOyBpLS07KQorICAg
ICAgICByZXN1bHQgKz0gYml0Q291bnQoYml0cy0+Yml0cygpW2ldKTsKKyAgICByZXR1cm4gcmVz
dWx0OworfQorCitib29sIEJpdFZlY3Rvcjo6ZXF1YWxzU2xvd0Nhc2UoY29uc3QgQml0VmVjdG9y
JiBvdGhlcikgY29uc3QKK3sKKyAgICAvLyBUaGlzIGlzIHJlYWxseSBjaGVlc3ksIGJ1dCBwcm9i
YWJseSBnb29kIGVub3VnaCBmb3Igbm93LgorICAgIGZvciAodW5zaWduZWQgaSA9IHN0ZDo6bWF4
KHNpemUoKSwgb3RoZXIuc2l6ZSgpKTsgaS0tOykgeworICAgICAgICBpZiAoZ2V0KGkpICE9IG90
aGVyLmdldChpKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgcmV0dXJu
IHRydWU7Cit9CisKK3VpbnRwdHJfdCBCaXRWZWN0b3I6Omhhc2hTbG93Q2FzZSgpIGNvbnN0Cit7
CisgICAgQVNTRVJUKCFpc0lubGluZSgpKTsKKyAgICBjb25zdCBPdXRPZkxpbmVCaXRzKiBiaXRz
ID0gb3V0T2ZMaW5lQml0cygpOworICAgIHVpbnRwdHJfdCByZXN1bHQgPSAwOworICAgIGZvciAo
dW5zaWduZWQgaSA9IGJpdHMtPm51bVdvcmRzKCk7IGktLTspCisgICAgICAgIHJlc3VsdCBePSBi
aXRzLT5iaXRzKClbaV07CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCBCaXRWZWN0b3I6
OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKIHsKICAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IHNpemUoKTsgKytpKSB7CiAgICAgICAgIGlmIChnZXQoaSkpCkluZGV4OiBTb3VyY2UvV1RG
L3d0Zi9CaXRWZWN0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9CaXRWZWN0b3Iu
aAkocmV2aXNpb24gMTU3NzA3KQorKysgU291cmNlL1dURi93dGYvQml0VmVjdG9yLmgJKHdvcmtp
bmcgY29weSkKQEAgLTI4LDYgKzI4LDggQEAKIAogI2luY2x1ZGUgPHN0ZGlvLmg+CiAjaW5jbHVk
ZSA8d3RmL0Fzc2VydGlvbnMuaD4KKyNpbmNsdWRlIDx3dGYvSGFzaEZ1bmN0aW9ucy5oPgorI2lu
Y2x1ZGUgPHd0Zi9IYXNoVHJhaXRzLmg+CiAjaW5jbHVkZSA8d3RmL1ByaW50U3RyZWFtLmg+CiAj
aW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgogCkBAIC0xNzYsOSArMTc4LDY2IEBAIHB1Ymxp
YzogCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgbV9iaXRzT3JQb2lu
dGVyIHw9IG90aGVyLm1fYml0c09yUG9pbnRlcjsKKyAgICAgICAgQVNTRVJUKGlzSW5saW5lKCkp
OwogICAgIH0KICAgICAKLSAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mIG91dCk7CisgICAgdm9p
ZCBleGNsdWRlKGNvbnN0IEJpdFZlY3RvciYgb3RoZXIpCisgICAgeworICAgICAgICBpZiAoIWlz
SW5saW5lKCkgfHwgIW90aGVyLmlzSW5saW5lKCkpIHsKKyAgICAgICAgICAgIGV4Y2x1ZGVTbG93
KG90aGVyKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBtX2JpdHNP
clBvaW50ZXIgJj0gfm90aGVyLm1fYml0c09yUG9pbnRlcjsKKyAgICAgICAgbV9iaXRzT3JQb2lu
dGVyIHw9IChzdGF0aWNfY2FzdDx1aW50cHRyX3Q+KDEpIDw8IG1heElubGluZUJpdHMoKSk7Cisg
ICAgICAgIEFTU0VSVChpc0lubGluZSgpKTsKKyAgICB9CisgICAgCisgICAgc2l6ZV90IGJpdENv
dW50KCkgY29uc3QKKyAgICB7CisgICAgICAgIGlmIChpc0lubGluZSgpKQorICAgICAgICAgICAg
cmV0dXJuIGJpdENvdW50KGNsZWFuc2VJbmxpbmVCaXRzKG1fYml0c09yUG9pbnRlcikpOworICAg
ICAgICByZXR1cm4gYml0Q291bnRTbG93KCk7CisgICAgfQorICAgIAorICAgIHZvaWQgZHVtcChQ
cmludFN0cmVhbSYgb3V0KSBjb25zdDsKKyAgICAKKyAgICBlbnVtIEVtcHR5VmFsdWVUYWcgeyBF
bXB0eVZhbHVlIH07CisgICAgZW51bSBEZWxldGVkVmFsdWVUYWcgeyBEZWxldGVkVmFsdWUgfTsK
KyAgICAKKyAgICBCaXRWZWN0b3IoRW1wdHlWYWx1ZVRhZykKKyAgICAgICAgOiBtX2JpdHNPclBv
aW50ZXIoMCkKKyAgICB7CisgICAgfQorICAgIAorICAgIEJpdFZlY3RvcihEZWxldGVkVmFsdWVU
YWcpCisgICAgICAgIDogbV9iaXRzT3JQb2ludGVyKDEpCisgICAgeworICAgIH0KKyAgICAKKyAg
ICBib29sIGlzRW1wdHlWYWx1ZSgpIGNvbnN0IHsgcmV0dXJuICFtX2JpdHNPclBvaW50ZXI7IH0K
KyAgICBib29sIGlzRGVsZXRlZFZhbHVlKCkgY29uc3QgeyByZXR1cm4gbV9iaXRzT3JQb2ludGVy
ID09IDE7IH0KKyAgICAKKyAgICBib29sIGlzRW1wdHlPckRlbGV0ZWRWYWx1ZSgpIGNvbnN0IHsg
cmV0dXJuIG1fYml0c09yUG9pbnRlciA8PSAxOyB9CisgICAgCisgICAgYm9vbCBvcGVyYXRvcj09
KGNvbnN0IEJpdFZlY3RvciYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICBpZiAoaXNJbmxp
bmUoKSAmJiBvdGhlci5pc0lubGluZSgpKQorICAgICAgICAgICAgcmV0dXJuIG1fYml0c09yUG9p
bnRlciA9PSBvdGhlci5tX2JpdHNPclBvaW50ZXI7CisgICAgICAgIHJldHVybiBlcXVhbHNTbG93
Q2FzZShvdGhlcik7CisgICAgfQorICAgIAorICAgIHVuc2lnbmVkIGhhc2goKSBjb25zdAorICAg
IHsKKyAgICAgICAgLy8gVGhpcyBpcyBhIHZlcnkgc2ltcGxlIGhhc2guIEp1c3QgeG9yIHRvZ2V0
aGVyIHRoZSB3b3JkcyB0aGF0IGhvbGQgdGhlIHZhcmlvdXMKKyAgICAgICAgLy8gYml0cyBhbmQg
dGhlbiBjb21wdXRlIHRoZSBoYXNoLiBUaGlzIG1ha2VzIGl0IHZlcnkgZWFzeSB0byBkZWFsIHdp
dGggYml0dmVjdG9ycworICAgICAgICAvLyB0aGF0IGhhdmUgYSBsb3Qgb2YgdHJhaWxpbmcgemVy
bydzLgorICAgICAgICB1aW50cHRyX3QgdmFsdWU7CisgICAgICAgIGlmIChpc0lubGluZSgpKQor
ICAgICAgICAgICAgdmFsdWUgPSBjbGVhbnNlSW5saW5lQml0cyhtX2JpdHNPclBvaW50ZXIpOwor
ICAgICAgICBlbHNlCisgICAgICAgICAgICB2YWx1ZSA9IGhhc2hTbG93Q2FzZSgpOworICAgICAg
ICByZXR1cm4gSW50SGFzaDx1aW50cHRyX3Q+OjpoYXNoKHZhbHVlKTsKKyAgICB9CiAgICAgCiBw
cml2YXRlOgogICAgIHN0YXRpYyB1bnNpZ25lZCBiaXRzSW5Qb2ludGVyKCkKQEAgLTIwNyw2ICsy
NjYsMTQgQEAgcHJpdmF0ZToKICAgICAgICAgcmV0dXJuIGJpdHMgJiB+KHN0YXRpY19jYXN0PHVp
bnRwdHJfdD4oMSkgPDwgbWF4SW5saW5lQml0cygpKTsKICAgICB9CiAgICAgCisgICAgc3RhdGlj
IHNpemVfdCBiaXRDb3VudCh1aW50cHRyX3QgYml0cykKKyAgICB7CisgICAgICAgIGlmIChzaXpl
b2YodWludHB0cl90KSA9PSA0KQorICAgICAgICAgICAgcmV0dXJuIFdURjo6Yml0Q291bnQoc3Rh
dGljX2Nhc3Q8dW5zaWduZWQ+KGJpdHMpKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcmV0
dXJuIFdURjo6Yml0Q291bnQoc3RhdGljX2Nhc3Q8dWludDY0X3Q+KGJpdHMpKTsKKyAgICB9Cisg
ICAgCiAgICAgY2xhc3MgT3V0T2ZMaW5lQml0cyB7CiAgICAgcHVibGljOgogICAgICAgICBzaXpl
X3QgbnVtQml0cygpIGNvbnN0IHsgcmV0dXJuIG1fbnVtQml0czsgfQpAQCAtMjM2LDYgKzMwMywx
MiBAQCBwcml2YXRlOgogICAgIFdURl9FWFBPUlRfUFJJVkFURSB2b2lkIHNldFNsb3coY29uc3Qg
Qml0VmVjdG9yJiBvdGhlcik7CiAgICAgCiAgICAgV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgbWVy
Z2VTbG93KGNvbnN0IEJpdFZlY3RvciYgb3RoZXIpOworICAgIFdURl9FWFBPUlRfUFJJVkFURSB2
b2lkIGV4Y2x1ZGVTbG93KGNvbnN0IEJpdFZlY3RvciYgb3RoZXIpOworICAgIAorICAgIFdURl9F
WFBPUlRfUFJJVkFURSBzaXplX3QgYml0Q291bnRTbG93KCkgY29uc3Q7CisgICAgCisgICAgV1RG
X0VYUE9SVF9QUklWQVRFIGJvb2wgZXF1YWxzU2xvd0Nhc2UoY29uc3QgQml0VmVjdG9yJiBvdGhl
cikgY29uc3Q7CisgICAgV1RGX0VYUE9SVF9QUklWQVRFIHVpbnRwdHJfdCBoYXNoU2xvd0Nhc2Uo
KSBjb25zdDsKICAgICAKICAgICB1aW50cHRyX3QqIGJpdHMoKQogICAgIHsKQEAgLTI1NCw2ICsz
MjcsMjAgQEAgcHJpdmF0ZToKICAgICB1aW50cHRyX3QgbV9iaXRzT3JQb2ludGVyOwogfTsKIAor
c3RydWN0IEJpdFZlY3Rvckhhc2ggeworICAgIHN0YXRpYyB1bnNpZ25lZCBoYXNoKGNvbnN0IEJp
dFZlY3RvciYgdmVjdG9yKSB7IHJldHVybiB2ZWN0b3IuaGFzaCgpOyB9CisgICAgc3RhdGljIGJv
b2wgZXF1YWwoY29uc3QgQml0VmVjdG9yJiBhLCBjb25zdCBCaXRWZWN0b3ImIGIpIHsgcmV0dXJu
IGEgPT0gYjsgfQorICAgIHN0YXRpYyBjb25zdCBib29sIHNhZmVUb0NvbXBhcmVUb0VtcHR5T3JE
ZWxldGVkID0gZmFsc2U7Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgRGVmYXVs
dEhhc2g7Cit0ZW1wbGF0ZTw+IHN0cnVjdCBEZWZhdWx0SGFzaDxCaXRWZWN0b3I+IHsKKyAgICB0
eXBlZGVmIEJpdFZlY3Rvckhhc2ggSGFzaDsKK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0
cnVjdCBIYXNoVHJhaXRzOwordGVtcGxhdGU8PiBzdHJ1Y3QgSGFzaFRyYWl0czxCaXRWZWN0b3I+
IDogcHVibGljIEN1c3RvbUhhc2hUcmFpdHM8Qml0VmVjdG9yPiB7IH07CisKIH0gLy8gbmFtZXNw
YWNlIFdURgogCiB1c2luZyBXVEY6OkJpdFZlY3RvcjsKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL0hh
c2hUcmFpdHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9IYXNoVHJhaXRzLmgJKHJl
dmlzaW9uIDE1NzcwNykKKysrIFNvdXJjZS9XVEYvd3RmL0hhc2hUcmFpdHMuaAkod29ya2luZyBj
b3B5KQpAQCAtMjE2LDYgKzIxNiwzNCBAQCBzdHJ1Y3QgTnVsbGFibGVIYXNoVHJhaXRzIDogcHVi
bGljIEhhc2hUCiAgICAgc3RhdGljIFQgZW1wdHlWYWx1ZSgpIHsgcmV0dXJuIHJlaW50ZXJwcmV0
X2Nhc3Q8VD4oMSk7IH0KIH07CiAKKy8vIFVzZWZ1bCBmb3IgY2xhc3NlcyB0aGF0IHdhbnQgY29t
cGxldGUgY29udHJvbCBvdmVyIHdoYXQgaXMgZW1wdHkgYW5kIHdoYXQgaXMgZGVsZXRlZCwKKy8v
IGFuZCBob3cgdG8gY29uc3RydWN0IGJvdGguCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorc3RydWN0
IEN1c3RvbUhhc2hUcmFpdHMgOiBwdWJsaWMgR2VuZXJpY0hhc2hUcmFpdHM8VD4geworICAgIHN0
YXRpYyBjb25zdCBib29sIGVtcHR5VmFsdWVJc1plcm8gPSBmYWxzZTsKKyAgICBzdGF0aWMgY29u
c3QgYm9vbCBoYXNJc0VtcHR5VmFsdWVGdW5jdGlvbiA9IHRydWU7CisgICAgCisgICAgc3RhdGlj
IHZvaWQgY29uc3RydWN0RGVsZXRlZFZhbHVlKFQmIHNsb3QpCisgICAgeworICAgICAgICBuZXcg
KE5vdE51bGwsICZzbG90KSBUKFQ6OkRlbGV0ZWRWYWx1ZSk7CisgICAgfQorICAgIAorICAgIHN0
YXRpYyBib29sIGlzRGVsZXRlZFZhbHVlKGNvbnN0IFQmIHZhbHVlKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIHZhbHVlLmlzRGVsZXRlZFZhbHVlKCk7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBU
IGVtcHR5VmFsdWUoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIFQoVDo6RW1wdHlWYWx1ZSk7Cisg
ICAgfQorICAgIAorICAgIHN0YXRpYyBib29sIGlzRW1wdHlWYWx1ZShjb25zdCBUJiB2YWx1ZSkK
KyAgICB7CisgICAgICAgIHJldHVybiB2YWx1ZS5pc0VtcHR5VmFsdWUoKTsKKyAgICB9Cit9Owor
CiB9IC8vIG5hbWVzcGFjZSBXVEYKIAogdXNpbmcgV1RGOjpIYXNoVHJhaXRzOwpJbmRleDogU291
cmNlL1dURi93dGYvU3RkTGliRXh0cmFzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYv
U3RkTGliRXh0cmFzLmgJKHJldmlzaW9uIDE1NzcwNykKKysrIFNvdXJjZS9XVEYvd3RmL1N0ZExp
YkV4dHJhcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNTcsNiArMTU3LDExIEBAIGlubGluZSBzaXpl
X3QgYml0Q291bnQodW5zaWduZWQgYml0cykKICAgICByZXR1cm4gKCgoYml0cyArIChiaXRzID4+
IDQpKSAmIDB4RjBGMEYwRikgKiAweDEwMTAxMDEpID4+IDI0OwogfQogCitpbmxpbmUgc2l6ZV90
IGJpdENvdW50KHVpbnQ2NF90IGJpdHMpCit7CisgICAgcmV0dXJuIGJpdENvdW50KHN0YXRpY19j
YXN0PHVuc2lnbmVkPihiaXRzKSkgKyBiaXRDb3VudChzdGF0aWNfY2FzdDx1bnNpZ25lZD4oYml0
cyA+PiAzMikpOworfQorCiAvLyBNYWNybyB0aGF0IHJldHVybnMgYSBjb21waWxlIHRpbWUgY29u
c3RhbnQgd2l0aCB0aGUgbGVuZ3RoIG9mIGFuIGFycmF5LCBidXQgZ2l2ZXMgYW4gZXJyb3IgaWYg
cGFzc2VkIGEgbm9uLWFycmF5LgogdGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IFNpemU+IGNo
YXIgKCZBcnJheUxlbmd0aEhlbHBlckZ1bmN0aW9uKFQgKCYpW1NpemVdKSlbU2l6ZV07CiAvLyBH
Q0MgbmVlZHMgc29tZSBoZWxwIHRvIGRlZHVjZSBhIDAgbGVuZ3RoIGFycmF5Lgo=
</data>
<flag name="commit-queue"
          id="237434"
          type_id="3"
          status="-"
          setter="buildbot"
    />
          </attachment>
      

    </bug>

</bugzilla>