<?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>140032</bug_id>
          
          <creation_ts>2015-01-01 14:28:57 -0800</creation_ts>
          <short_desc>Modernize coding style of HTMLTreeBuilder</short_desc>
          <delta_ts>2015-01-02 10:17:06 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>DOM</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>140042</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Darin Adler">darin</reporter>
          <assigned_to name="Darin Adler">darin</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>mitz</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1058354</commentid>
    <comment_count>0</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2015-01-01 14:28:57 -0800</bug_when>
    <thetext>Modernize coding style of HTMLTreeBuilder</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1058357</commentid>
    <comment_count>1</comment_count>
      <attachid>243872</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2015-01-01 14:58:20 -0800</bug_when>
    <thetext>Created attachment 243872
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1058377</commentid>
    <comment_count>2</comment_count>
      <attachid>243877</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2015-01-01 17:01:04 -0800</bug_when>
    <thetext>Created attachment 243877
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1058392</commentid>
    <comment_count>3</comment_count>
      <attachid>243877</attachid>
    <who name="Andreas Kling">kling</who>
    <bug_when>2015-01-02 00:35:53 -0800</bug_when>
    <thetext>Comment on attachment 243877
Patch

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

r=me

&gt; Source/WebCore/ChangeLog:19
&gt; +        - Initialize scalars in the class definition rather than each constructor.
&gt; +        - Use Ref/RefPtr instead of PassRefPtr.

Sweet!

&gt; Source/WebCore/html/parser/HTMLTreeBuilder.cpp:139
&gt; -        , m_isAll8BitData(m_text.length() &amp;&amp; m_text.is8Bit())
&gt; +        , m_isAll8BitData(m_text.is8Bit())

Are you sure this is cool? String::is8Bit() does not null-check String::m_impl whereas String::length() does.
(I don&apos;t know why String::is8Bit() doesn&apos;t null-check; seems like null strings could be considered 8-bit to me.)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1058418</commentid>
    <comment_count>4</comment_count>
      <attachid>243877</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2015-01-02 08:22:28 -0800</bug_when>
    <thetext>Comment on attachment 243877
Patch

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

&gt;&gt; Source/WebCore/html/parser/HTMLTreeBuilder.cpp:139
&gt;&gt; +        , m_isAll8BitData(m_text.is8Bit())
&gt; 
&gt; Are you sure this is cool? String::is8Bit() does not null-check String::m_impl whereas String::length() does.
&gt; (I don&apos;t know why String::is8Bit() doesn&apos;t null-check; seems like null strings could be considered 8-bit to me.)

Yes. Note the ASSERT(!isEmpty()) that immediately follows this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1058421</commentid>
    <comment_count>5</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2015-01-02 08:31:52 -0800</bug_when>
    <thetext>Committed r177859: &lt;http://trac.webkit.org/changeset/177859&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1058433</commentid>
    <comment_count>6</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2015-01-02 10:01:54 -0800</bug_when>
    <thetext>This caused many assertion failures on regression tests and API tests. Will roll out.

https://build.webkit.org/builders/Apple%20Yosemite%20Debug%20WK2%20(Tests)/builds/1203

ASSERTION FAILED: m_insertionMode == InsertionMode::InTable
/Volumes/Data/slave/yosemite-debug/build/Source/WebCore/html/parser/HTMLTreeBuilder.cpp(1137) : void WebCore::HTMLTreeBuilder::processStartTag(WebCore::AtomicHTMLToken &amp;)
1   0x110f920e0 WTFCrash
2   0x1130842c4 WebCore::HTMLTreeBuilder::processStartTag(WebCore::AtomicHTMLToken&amp;)
3   0x113083987 WebCore::HTMLTreeBuilder::processToken(WebCore::AtomicHTMLToken&amp;)
4   0x113082b8b WebCore::HTMLTreeBuilder::constructTree(WebCore::AtomicHTMLToken&amp;)
5   0x112f81ba7 WebCore::HTMLDocumentParser::constructTreeFromHTMLToken(WebCore::HTMLToken&amp;)
6   0x112f80fbb WebCore::HTMLDocumentParser::pumpTokenizer(WebCore::HTMLDocumentParser::SynchronousMode)
7   0x112f805c9 WebCore::HTMLDocumentParser::pumpTokenizerIfPossible(WebCore::HTMLDocumentParser::SynchronousMode)
8   0x112f82a89 WebCore::HTMLDocumentParser::resumeParsingAfterScriptExecution()
9   0x112f82e7f WebCore::HTMLDocumentParser::notifyFinished(WebCore::CachedResource*)
10  0x112f82edf non-virtual thunk to WebCore::HTMLDocumentParser::notifyFinished(WebCore::CachedResource*)
11  0x112730922 WebCore::CachedResource::checkNotify()</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1058435</commentid>
    <comment_count>7</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-01-02 10:04:31 -0800</bug_when>
    <thetext>Re-opened since this is blocked by bug 140042</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1058440</commentid>
    <comment_count>8</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2015-01-02 10:11:34 -0800</bug_when>
    <thetext>That was just a single bad assertion that should have been removed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1058441</commentid>
    <comment_count>9</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2015-01-02 10:17:06 -0800</bug_when>
    <thetext>Committed r177863: &lt;http://trac.webkit.org/changeset/177863&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>243872</attachid>
            <date>2015-01-01 14:58:20 -0800</date>
            <delta_ts>2015-01-01 17:01:00 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-140032-20150101145823.patch</filename>
            <type>text/plain</type>
            <size>161510</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTc3ODQ1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNjE4OTczNjA3MGY3ZWQ3
ZmZlZWRlNDA1ZTI5ZjA1YmNhZTI1NDMxMS4uYTNhMWU0MTJkZGM5NTcyZjYxM2YyYjQ5MzU4MDlk
YTE2ZmJkMTVmYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEzNyBAQAorMjAxNS0wMS0wMSAgRGFy
aW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CisKKyAgICAgICAgTW9kZXJuaXplIGNvZGluZyBz
dHlsZSBvZiBIVE1MVHJlZUJ1aWxkZXIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTE0MDAzMgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIENoYW5nZXMgaW5jbHVkZToKKyAgICAgICAgLSBVc2UgcmVmZXJlbmNl
cyByYXRoZXIgdGhhbiBwb2ludGVycy4KKyAgICAgICAgLSBNYXJrIGRhdGEgbWVtYmVycyBjb25z
dCB0aGF0IGFyZSBmdWxseSBzZXQgdXAgaW4gdGhlIGNvbnN0cnVjdG9yLgorICAgICAgICAtIFJl
bW92ZSBtYW55IHVubmVlZGVkIGluY2x1ZGVzIGFuZCBmb3J3YXJkIGRlY2xhcmF0aW9ucy4KKyAg
ICAgICAgLSBGaXggY29uZGl0aW9uYWxzIHRvIGJlIGNvbnNpc3RlbnQgYW5kIGNvcnJlY3QuCisg
ICAgICAgIC0gTWVyZ2Ugc29tZSBtdWx0aS1saW5lIGNvbnN0cnVjdHMgaW50byBhIHNpbmdsZSBs
aW5lLgorICAgICAgICAtIFVwZGF0ZSB3aGF0d2cub3JnIFVSTHM7IG5vdCBzdXJlIHdlIHNob3Vs
ZCBrZWVwIHRoZXNlLCB0aG91Z2guCisgICAgICAgIC0gQ3V0IGRvd24gb24gdXNlIG9mIFdURl9N
QUtFX05PTkNPUFlBQkxFIHNpbmNlIGZvciBtYW55IGNsYXNzZXMgaXQncworICAgICAgICAgIGlt
cG9zc2libGUgdG8gY29weSBhbnl3YXkgZHVlIHRvIHJlZmVyZW5jZXMsIG9yIGhhcm1sZXNzIHRv
IGNvcHkuCisgICAgICAgIC0gTWFkZSBtb3JlIHRoaW5ncyBwcml2YXRlLgorICAgICAgICAtIElu
aXRpYWxpemUgc2NhbGFycyBpbiB0aGUgY2xhc3MgZGVmaW50aW9uIHJhdGhlciB0aGFuIGVhY2gg
Y29uc3RydWN0b3IuCisgICAgICAgIC0gVXNlIFJlZi9SZWZQdHIgaW5zdGVhZCBvZiBQYXNzUmVm
UHRyLgorCisgICAgICAgICogaHRtbC9wYXJzZXIvSFRNTERvY3VtZW50UGFyc2VyLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkhUTUxEb2N1bWVudFBhcnNlcjo6SFRNTERvY3VtZW50UGFyc2VyKTog
UGFzcyByZWZlcmVuY2UgcmF0aGVyIHRoYW4gcG9pbnRlciB0bworICAgICAgICB0aGUgY29udGV4
dCBlbGVtZW50LgorICAgICAgICAoV2ViQ29yZTo6SFRNTERvY3VtZW50UGFyc2VyOjpkZXRhY2gp
OiBSZW1vdmVkIGNhbGwgdG8gSFRNTFRyZWVCdWlsZGVyOjpkZXRhY2guIFRoaXMgd29yaworICAg
ICAgICBpcyBpbnN0ZWFkIGRvbmUgd2hlbiB0aGUgdHJlZSBidWlsZGVyIGlzIGRlc3Ryb3llZC4K
KyAgICAgICAgKFdlYkNvcmU6OkhUTUxEb2N1bWVudFBhcnNlcjo6Y29uc3RydWN0VHJlZUZyb21I
VE1MVG9rZW4pOiBQYXNzIHJlZmVyZW5jZSByYXRoZXIgdGhhbiBwb2ludGVyLgorCisgICAgICAg
ICogaHRtbC9wYXJzZXIvSFRNTFRyZWVCdWlsZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnVu
aW5pdGlhbGl6ZWRQb3NpdGlvblZhbHVlMSk6IE1hcmtlZCB0aGlzIGlubGluZSBiZWNhdXNlIGl0
J3MgdHJpdmlhbC4gSXQgd2FzCisgICAgICAgIHByb2JhYmx5IGdldHRpbmcgaW5saW5lZCBhbHJl
YWR5LgorICAgICAgICAoV2ViQ29yZTo6aXNDYXB0aW9uQ29sT3JDb2xncm91cFRhZyk6IEZvcm1h
dCBvbiBhIHNpbmdsZSBsaW5lLgorICAgICAgICAoV2ViQ29yZTo6aXNUYWJsZUJvZHlDb250ZXh0
VGFnKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjppc05vbkFuY2hvckZvcm1hdHRpbmdUYWcp
OiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxUcmVlQnVpbGRlcjo6RXh0ZXJuYWxDaGFy
YWN0ZXJUb2tlbkJ1ZmZlcjo6RXh0ZXJuYWxDaGFyYWN0ZXJUb2tlbkJ1ZmZlcik6CisgICAgICAg
IFRha2UgcmVmZXJlbmNlIGluc3RlYWQgb2YgcG9pbnRlci4KKyAgICAgICAgKFdlYkNvcmU6OkhU
TUxUcmVlQnVpbGRlcjo6RXh0ZXJuYWxDaGFyYWN0ZXJUb2tlbkJ1ZmZlcjo6dGFrZVJlbWFpbmlu
Zyk6IFVzZSBtYWtlU3RyaW5nIGhlbHBlci4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxUcmVlQnVp
bGRlcjo6RXh0ZXJuYWxDaGFyYWN0ZXJUb2tlbkJ1ZmZlcjo6c2tpcExlYWRpbmcpOiBUd2VhayBm
b3JtYXR0aW5nLgorICAgICAgICAoV2ViQ29yZTo6SFRNTFRyZWVCdWlsZGVyOjpFeHRlcm5hbENo
YXJhY3RlclRva2VuQnVmZmVyOjp0YWtlTGVhZGluZyk6IEJvdGggb2YgdGhlIGFib3ZlLgorICAg
ICAgICAoV2ViQ29yZTo6SFRNTFRyZWVCdWlsZGVyOjpFeHRlcm5hbENoYXJhY3RlclRva2VuQnVm
ZmVyOjptYWtlU3RyaW5nKTogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpIVE1MVHJlZUJ1aWxk
ZXI6OmlzUGFyc2luZ1RlbXBsYXRlQ29udGVudHMpOiBNb3ZlZCB0aGUgYm9keSBvZiB0aGlzIGZ1
bmN0aW9uIGhlcmUsCisgICAgICAgIHNpbmNlIGl0J3Mgb25seSB1c2VkIGluc2lkZSB0aGUgY2xh
c3MuCisgICAgICAgIChXZWJDb3JlOjpIVE1MVHJlZUJ1aWxkZXI6OmlzUGFyc2luZ0ZyYWdtZW50
T3JUZW1wbGF0ZUNvbnRlbnRzKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpIVE1MVHJlZUJ1
aWxkZXI6OkhUTUxUcmVlQnVpbGRlcik6IEdldCByaWQgb2YgZGVhZCBjb2RlIHRoYXQgaGFuZGxl
cyBhIG51bGwgY29udGV4dAorICAgICAgICBlbGVtZW50LiBUaGUgRklYTUUgbWVudGlvbnMgYSBi
dWcgdGhhdCBpcyBvYnNvbGV0ZS4gQWxzbyByZW9yZGVyIHRoZSBkYXRhIG1lbWJlcnMgdG8gYmUg
YSBiaXQKKyAgICAgICAgbW9yZSBsb2dpY2FsIGFuZCBzZXQgdGhlIG5ldyBtX2Rlc3RydWN0aW9u
UHJvaGliaXRlZCB0byBmYWxzZSBhdCB0aGUgZW5kIG9mIHRoZSBjb25zdHJ1Y3RvciwKKyAgICAg
ICAgdG8gY2hlY2sgaWYgd2UgYWNjaWRlbnRhbGx5IGRlc3Ryb3kgdGhlIHRyZWUgYnVpbGRlciB3
aGlsZSBjb25zdHJ1Y3RpbmcgaXQuCisgICAgICAgIChXZWJDb3JlOjpIVE1MVHJlZUJ1aWxkZXI6
OkZyYWdtZW50UGFyc2luZ0NvbnRleHQ6OkZyYWdtZW50UGFyc2luZ0NvbnRleHQpOiBVcGRhdGVk
IHRvIHRha2UKKyAgICAgICAgYSByZWZlcmVuY2UgYW5kIHRvIGxldCBtX2ZyYWdtZW50IGdldCBp
bml0aWFsaXplZCBpbiB0aGUgY2xhc3MgZGVmaW5pdGlvbi4KKyAgICAgICAgKFdlYkNvcmU6OkhU
TUxUcmVlQnVpbGRlcjo6RnJhZ21lbnRQYXJzaW5nQ29udGV4dDo6ZnJhZ21lbnQpOiBNb3ZlZCB0
aGlzIGhlcmUgc2luY2UgaXQncyBvbmx5CisgICAgICAgIHVzZWQgaW5zaWRlIHRoZSBjbGFzcy4K
KyAgICAgICAgKFdlYkNvcmU6OkhUTUxUcmVlQnVpbGRlcjo6RnJhZ21lbnRQYXJzaW5nQ29udGV4
dDo6Y29udGV4dEVsZW1lbnQpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxUcmVlQnVp
bGRlcjo6RnJhZ21lbnRQYXJzaW5nQ29udGV4dDo6Y29udGV4dEVsZW1lbnRTdGFja0l0ZW0pOiBE
aXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxUcmVlQnVpbGRlcjo6dGFrZVNjcmlwdFRvUHJv
Y2Vzcyk6IENoYW5nZWQgcmV0dXJuIHR5cGUgdG8gUmVmUHRyIGluc3RlYWQgb2YKKyAgICAgICAg
UGFzc1JlZlB0ci4gQWRkZWQgY29kZSB0byBoYW5kbGUgbV9zY3JpcHRUb1Byb2Nlc3Mgb2YgbnVs
bCwgc2luY2UgcmVhZGluZyB0aGUgY29kZSBhdCB0aGUKKyAgICAgICAgc2luZ2xlIGNhbGwgc2l0
ZSBtYWtlcyBpdCBjbGVhciB0aGF0IGl0J3Mgbm90IGd1YXJhbnRlZWQgdG8gYmUgbm9uLW51bGwh
IEFkZGVkIGRlc3RydWN0aW9uLQorICAgICAgICByZWxhdGVkIGFzc2VydGlvbnMgc2luY2UgdGhp
cyBpcyBhIHB1YmxpYyBmdW5jdGlvbi4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxUcmVlQnVpbGRl
cjo6Y29uc3RydWN0VHJlZSk6IFVwZGF0ZWQgZm9yIHJlZmVyZW5jZSByYXRoZXIgdGhhbiBwb2lu
dGVyLiBBbHNvCisgICAgICAgIGFkZGVkIGRlc3RydWN0aW9uLXJlbGF0ZWQgYXNzZXJ0aW9ucyBz
aW5jZSB0aGlzIGlzIGEgcHVibGljIGZ1bmN0aW9uLgorICAgICAgICAoV2ViQ29yZTo6SFRNTFRy
ZWVCdWlsZGVyOjpwcm9jZXNzVG9rZW4pOiBVcGRhdGVkIHRvIHRha2UgYSByZWZlcmVuY2UuCisg
ICAgICAgIChXZWJDb3JlOjpIVE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NEb2N0eXBlVG9rZW4pOiBE
aXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc0Zha2VTdGFy
dFRhZyk6IERpdHRvLiBBbHNvIHRha2UgYW4gcnZhbHVlIHJlZmVyZW5jZSBmb3IKKyAgICAgICAg
dGhlIHZlY3RvciBvZiBhdHRyaWJ1dGVzIHRoYXQgd2Ugd2lsbCBwdXQgaW50byB0aGUgdG9rZW4u
CisgICAgICAgIChXZWJDb3JlOjpIVE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NGYWtlRW5kVGFnKTog
RGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpIVE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NGYWtlUEVu
ZFRhZ0lmUEluQnV0dG9uU2NvcGUpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxUcmVl
QnVpbGRlcjo6YXR0cmlidXRlc0ZvcklzaW5kZXhJbnB1dCk6IERpdHRvLgorICAgICAgICAoV2Vi
Q29yZTo6SFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNzSXNpbmRleFN0YXJ0VGFnRm9ySW5Cb2R5KTog
RGl0dG8uCisgICAgICAgIChXZWJDb3JlOjppc0xpKTogRGl0dG8uCisgICAgICAgIChXZWJDb3Jl
Ojppc0RkT3JEdCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6SFRNTFRyZWVCdWlsZGVyOjpw
cm9jZXNzQ2xvc2VXaGVuTmVzdGVkVGFnKTogQ2hhbmdlZCBsb29wIHRvIHVzZSByZWZlcmVuY2UK
KyAgICAgICAgcmF0aGVyIHRoYW4gcG9pbnRlciBmb3IgbmV2ZXItbnVsbCBzdGFja0l0ZW0uIEFs
c28gdXNlIGF1dG8gYW5kIGEgZm9yIGxvb3AgdG8gbWFrZSB0aGUKKyAgICAgICAgbG9vcCBlYXNp
ZXIgdG8gcmVhZC4KKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZUNhc2VNYXApOiBUd2Vha2VkIGZv
cm1hdHRpbmcuCisgICAgICAgIChXZWJDb3JlOjphZGp1c3RBdHRyaWJ1dGVzKTogRGl0dG8uCisg
ICAgICAgIChXZWJDb3JlOjpIVE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NTdGFydFRhZ0ZvckluQm9k
eSk6IFVzZSByZWZlcmVuY2UgaW5zdGVhZCBvZiBwb2ludGVyLgorICAgICAgICBTZXQgaW5zZXJ0
aW9uIG1vZGUgZGlyZWN0bHkgaW5zdGVhZCBvZiB1c2luZyBhIHNldEluc2VydGlvbk1vZGUgZnVu
Y3Rpb24uCisgICAgICAgIChXZWJDb3JlOjpIVE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NUZW1wbGF0
ZVN0YXJ0VGFnKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpIVE1MVHJlZUJ1aWxkZXI6OnBy
b2Nlc3NUZW1wbGF0ZUVuZFRhZyk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6SFRNTFRyZWVC
dWlsZGVyOjpwcm9jZXNzRW5kT2ZGaWxlRm9ySW5UZW1wbGF0ZUNvbnRlbnRzKTogRGl0dG8uCisg
ICAgICAgIChXZWJDb3JlOjpIVE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NDb2xncm91cEVuZFRhZ0Zv
ckluQ29sdW1uR3JvdXApOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxUcmVlQnVpbGRl
cjo6Y2xvc2VUaGVDZWxsKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpIVE1MVHJlZUJ1aWxk
ZXI6OnByb2Nlc3NTdGFydFRhZ0ZvckluVGFibGUpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6
OkhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc1N0YXJ0VGFnKTogRGl0dG8uIFR3ZWFrZWQgYXNzZXJ0
aW9ucywgc28gdGhhdCB3ZQorICAgICAgICBhc3NlcnQgd2hhdCBzdGF0ZSB3ZSBhcmUgaW4gYmVm
b3JlIHdlIGZhbGwgdGhyb3VnaCB0byBlYWNoIGNhc2UsIHJhdGhlciB0aGFuIGFzc2VydGluZwor
ICAgICAgICBpbnNpZGUgZWFjaCBjYXNlLiBUaGUgcGVyLWNhc2UgYXNzZXJ0aW9ucyB3ZXJlIHNv
cnQgb2YgZXhjZXNzaXZlIGFuZCByZXBldGl0aXZlIGFuZAorICAgICAgICBldmVuIGEgYml0IGhh
cmQgdG8gdW5kZXJzdGFuZC4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxUcmVlQnVpbGRlcjo6cHJv
Y2Vzc0h0bWxTdGFydFRhZ0ZvckluQm9keSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6SFRN
TFRyZWVCdWlsZGVyOjpwcm9jZXNzQm9keUVuZFRhZ0ZvckluQm9keSk6IERpdHRvLgorICAgICAg
ICAoV2ViQ29yZTo6SFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNzQW55T3RoZXJFbmRUYWdGb3JJbkJv
ZHkpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxUcmVlQnVpbGRlcjo6Y2FsbFRoZUFk
b3B0aW9uQWdlbmN5KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpIVE1MVHJlZUJ1aWxkZXI6
OnJlc2V0SW5zZXJ0aW9uTW9kZUFwcHJvcHJpYXRlbHkpOiBEaXR0by4KKyAgICAgICAgKFdlYkNv
cmU6OkhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc0VuZFRhZ0ZvckluVGFibGVCb2R5KTogRGl0dG8u
CisgICAgICAgIChXZWJDb3JlOjpIVE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NFbmRUYWdGb3JJblJv
dyk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6SFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNzRW5k
VGFnRm9ySW5DZWxsKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpIVE1MVHJlZUJ1aWxkZXI6
OnByb2Nlc3NFbmRUYWdGb3JJbkJvZHkpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxU
cmVlQnVpbGRlcjo6cHJvY2Vzc0NhcHRpb25FbmRUYWdGb3JJbkNhcHRpb24pOiBEaXR0by4KKyAg
ICAgICAgKFdlYkNvcmU6OkhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc1RyRW5kVGFnRm9ySW5Sb3cp
OiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc1RhYmxl
RW5kVGFnRm9ySW5UYWJsZSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6SFRNTFRyZWVCdWls
ZGVyOjpwcm9jZXNzRW5kVGFnRm9ySW5UYWJsZSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6
SFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNzRW5kVGFnKTogRGl0dG8uCisgICAgICAgIChXZWJDb3Jl
OjpIVE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NDb21tZW50KTogRGl0dG8uCisgICAgICAgIChXZWJD
b3JlOjpIVE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NDaGFyYWN0ZXIpOiBEaXR0by4KKyAgICAgICAg
KFdlYkNvcmU6OkhUTUxUcmVlQnVpbGRlcjo6aW5zZXJ0UGhvbmVOdW1iZXJMaW5rKTogRGl0dG8u
CisgICAgICAgIChXZWJDb3JlOjpIVE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NDaGFyYWN0ZXJCdWZm
ZXIpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc0No
YXJhY3RlckJ1ZmZlckZvckluQm9keSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6SFRNTFRy
ZWVCdWlsZGVyOjpwcm9jZXNzRW5kT2ZGaWxlKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpI
VE1MVHJlZUJ1aWxkZXI6OmRlZmF1bHRGb3JJbml0aWFsKTogRGl0dG8uCisgICAgICAgIChXZWJD
b3JlOjpIVE1MVHJlZUJ1aWxkZXI6OmRlZmF1bHRGb3JCZWZvcmVIVE1MKTogRGl0dG8uCisgICAg
ICAgIChXZWJDb3JlOjpIVE1MVHJlZUJ1aWxkZXI6OmRlZmF1bHRGb3JCZWZvcmVIZWFkKTogRGl0
dG8uCisgICAgICAgIChXZWJDb3JlOjpIVE1MVHJlZUJ1aWxkZXI6OmRlZmF1bHRGb3JJbkhlYWQp
OiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxUcmVlQnVpbGRlcjo6ZGVmYXVsdEZvcklu
SGVhZE5vc2NyaXB0KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpIVE1MVHJlZUJ1aWxkZXI6
OmRlZmF1bHRGb3JBZnRlckhlYWQpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxUcmVl
QnVpbGRlcjo6ZGVmYXVsdEZvckluVGFibGVUZXh0KTogRGl0dG8uCisgICAgICAgIChXZWJDb3Jl
OjpIVE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NTdGFydFRhZ0ZvckluSGVhZCk6IERpdHRvLgorICAg
ICAgICAoV2ViQ29yZTo6SFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNzR2VuZXJpY1JDREFUQVN0YXJ0
VGFnKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpIVE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NH
ZW5lcmljUmF3VGV4dFN0YXJ0VGFnKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpIVE1MVHJl
ZUJ1aWxkZXI6OnByb2Nlc3NTY3JpcHRTdGFydFRhZyk6IERpdHRvLgorICAgICAgICAoV2ViQ29y
ZTo6SFRNTFRyZWVCdWlsZGVyOjphZGp1c3RlZEN1cnJlbnRTdGFja0l0ZW0pOiBNYWRlIHRoaXMg
cmV0dXJuIGEgcmVmZXJlbmNlLgorICAgICAgICAoV2ViQ29yZTo6SFRNTFRyZWVCdWlsZGVyOjpz
aG91bGRQcm9jZXNzVG9rZW5JbkZvcmVpZ25Db250ZW50KTogTW9yZSBvZiB0aGUgc2FtZS4KKyAg
ICAgICAgKFdlYkNvcmU6OkhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc1Rva2VuSW5Gb3JlaWduQ29u
dGVudCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6SFRNTFRyZWVCdWlsZGVyOjpmaW5pc2hl
ZCk6IENoYW5nZWQgbV9pc0F0dGFjaGVkIGFzc2VydGlvbiB0byAhbV9kZXN0cm95ZWQuCisgICAg
ICAgIEFsc28gdXBkYXRlZCB0aGUgY29tbWVudC4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxUcmVl
QnVpbGRlcjo6cGFyc2VFcnJvcik6IE1hcmtlZCB0aGlzIGVtcHR5IGZ1bmN0aW9uIGlubGluZS4K
KworICAgICAgICAqIGh0bWwvcGFyc2VyL0hUTUxUcmVlQnVpbGRlci5oOiBSZW1vdmVkIG1vc3Qg
aW5jbHVkZXMgYW5kIGZvcndhcmQgZGVjbGFyYXRpb25zLgorICAgICAgICBDaGFuZ2VkIHRoZSBw
aG9uZSBudW1iZXIgZnVuY3Rpb25zIGNvbmRpdGlvbmFsIHRvIGJlIGNvcnJlY3QuIFJlbW92ZWQg
YSBub24taGVscGZ1bAorICAgICAgICBGSVhNRSBhYm91dCBhc3NlcnRpb25zIHdlIHJlYWxseSBk
b24ndCBuZWVkLiBSZW1vdmVkIHVubmVlZGVkIHVzZSBvZiB0aGUgaW5saW5lIGtleXdvcmQsCisg
ICAgICAgIGNoYW5nZWQgdHlwZXMgdG8gcmVmZXJlbmNlcyByYXRoZXIgdGhhbiBwb2ludGVyLiBS
ZW1vdmVkIHVubmVlZGVkIHB1YmxpYyBpbnNlcnRpb25Nb2RlCisgICAgICAgIGFuZCBzZXRJbnNl
cnRpb25Nb2RlIGZ1bmN0aW9ucy4gQm90aCBhcmUgdGhpbmdzIHRoYXQgYXJlIG9ubHkgZG9uZSBp
bnNpZGUgdGhpcyBjbGFzcyBhbmQKKyAgICAgICAgbV9pbnNlcnRpb25Nb2RlIGNhbiBiZSBhY2Nl
c3NlZCBkaXJlY3RseSBpbnN0ZWFkLiBBZGRlZCBhIGRlc3RydWN0b3IgdGhhdCBpbXBsZW1lbnRz
CisgICAgICAgIHRoZSBkZXN0cnVjdGlvbiBhc3NlcnRpb25zLiBBc3NlcnRlZCAhbV9kZXN0cm95
ZWQgYXQgdGhlIHN0YXJ0IG9mIGFsbCB0aGUgcHVibGljIGZ1bmN0aW9ucy4KKworICAgICAgICAq
IGh0bWwvcGFyc2VyL1RleHREb2N1bWVudFBhcnNlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpU
ZXh0RG9jdW1lbnRQYXJzZXI6Omluc2VydEZha2VQcmVFbGVtZW50KTogVXNlIHJlZmVyZW5jZSBy
YXRoZXIgdGhhbiBwb2ludGVyLgorCiAyMDE1LTAxLTAxICBaYWxhbiBCdWp0YXMgIDx6YWxhbkBh
cHBsZS5jb20+CiAKICAgICAgICAgU2F0dXJhdGVkIGFyaXRobWV0aWNzOiBJbmNvcnJlY3QgZmxv
YXQvZG91YmxlIGNsYW1waW5nLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJz
ZXIvSFRNTERvY3VtZW50UGFyc2VyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hU
TUxEb2N1bWVudFBhcnNlci5jcHAKaW5kZXggZTBmYjVmY2FiNTc4OTMwNDRlYmNhM2MyNmQ0NGNm
MzI2YmZmZTdjYy4uMjBjZmY1YzBmZDdlYTg5MTE1YTA2Y2Y0OTQ4NTZiODQ1NTU3ZWZkZCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTERvY3VtZW50UGFyc2VyLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MRG9jdW1lbnRQYXJzZXIuY3Bw
CkBAIC05Miw3ICs5Miw3IEBAIEhUTUxEb2N1bWVudFBhcnNlcjo6SFRNTERvY3VtZW50UGFyc2Vy
KERvY3VtZW50RnJhZ21lbnQmIGZyYWdtZW50LCBFbGVtZW50KiBjb250CiAgICAgLCBtX29wdGlv
bnMoZnJhZ21lbnQuZG9jdW1lbnQoKSkKICAgICAsIG1fdG9rZW4oc3RkOjptYWtlX3VuaXF1ZTxI
VE1MVG9rZW4+KCkpCiAgICAgLCBtX3Rva2VuaXplcihzdGQ6Om1ha2VfdW5pcXVlPEhUTUxUb2tl
bml6ZXI+KG1fb3B0aW9ucykpCi0gICAgLCBtX3RyZWVCdWlsZGVyKHN0ZDo6bWFrZV91bmlxdWU8
SFRNTFRyZWVCdWlsZGVyPigqdGhpcywgZnJhZ21lbnQsIGNvbnRleHRFbGVtZW50LCB0aGlzLT5w
YXJzZXJDb250ZW50UG9saWN5KCksIG1fb3B0aW9ucykpCisgICAgLCBtX3RyZWVCdWlsZGVyKHN0
ZDo6bWFrZV91bmlxdWU8SFRNTFRyZWVCdWlsZGVyPigqdGhpcywgZnJhZ21lbnQsICpjb250ZXh0
RWxlbWVudCwgdGhpcy0+cGFyc2VyQ29udGVudFBvbGljeSgpLCBtX29wdGlvbnMpKQogICAgICwg
bV94c3NBdWRpdG9yRGVsZWdhdGUoZnJhZ21lbnQuZG9jdW1lbnQoKSkKICAgICAsIG1fZW5kV2Fz
RGVsYXllZChmYWxzZSkKICAgICAsIG1faGF2ZUJhY2tncm91bmRQYXJzZXIoZmFsc2UpCkBAIC0x
MTgsNyArMTE4LDYgQEAgdm9pZCBIVE1MRG9jdW1lbnRQYXJzZXI6OmRldGFjaCgpCiAKICAgICBp
ZiAobV9zY3JpcHRSdW5uZXIpCiAgICAgICAgIG1fc2NyaXB0UnVubmVyLT5kZXRhY2goKTsKLSAg
ICBtX3RyZWVCdWlsZGVyLT5kZXRhY2goKTsKICAgICAvLyBGSVhNRTogSXQgc2VlbXMgd3Jvbmcg
dGhhdCB3ZSB3b3VsZCBoYXZlIGEgcHJlbG9hZCBzY2FubmVyIGhlcmUuCiAgICAgLy8gWWV0IGR1
cmluZyBmYXN0L2RvbS9IVE1MU2NyaXB0RWxlbWVudC9zY3JpcHQtbG9hZC1ldmVudHMuaHRtbCB3
ZSBkby4KICAgICBtX3ByZWxvYWRTY2FubmVyID0gbnVsbHB0cjsKQEAgLTM0OSw3ICszNDgsNyBA
QCB2b2lkIEhUTUxEb2N1bWVudFBhcnNlcjo6Y29uc3RydWN0VHJlZUZyb21IVE1MVG9rZW4oSFRN
TFRva2VuJiByYXdUb2tlbikKICAgICBpZiAocmF3VG9rZW4udHlwZSgpICE9IEhUTUxUb2tlbjo6
Q2hhcmFjdGVyKQogICAgICAgICByYXdUb2tlbi5jbGVhcigpOwogCi0gICAgbV90cmVlQnVpbGRl
ci0+Y29uc3RydWN0VHJlZSgmdG9rZW4pOworICAgIG1fdHJlZUJ1aWxkZXItPmNvbnN0cnVjdFRy
ZWUodG9rZW4pOwogCiAgICAgaWYgKCFyYXdUb2tlbi5pc1VuaW5pdGlhbGl6ZWQoKSkgewogICAg
ICAgICBBU1NFUlQocmF3VG9rZW4udHlwZSgpID09IEhUTUxUb2tlbjo6Q2hhcmFjdGVyKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxUcmVlQnVpbGRlci5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MVHJlZUJ1aWxkZXIuY3BwCmluZGV4IDE5
NTg4YWU3Y2IxMGQ1MjU5ZWE3ZTcxOWQ5YzI3ZjA1ZWYzMGE1ZDUuLmRlZDc3Y2VlMDZhM2RkNzg2
NWYzYThjODQzODhhY2E2YzQxMDQwZjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwv
cGFyc2VyL0hUTUxUcmVlQnVpbGRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJz
ZXIvSFRNTFRyZWVCdWlsZGVyLmNwcApAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQg
KEMpIDIwMTAgR29vZ2xlLCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDExLCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzAsMjMgKzMwLDE4IEBACiAjaW5jbHVkZSAiRG9jdW1l
bnRGcmFnbWVudC5oIgogI2luY2x1ZGUgIkhUTUxEb2N1bWVudC5oIgogI2luY2x1ZGUgIkhUTUxE
b2N1bWVudFBhcnNlci5oIgotI2luY2x1ZGUgIkhUTUxGb3JtQ29udHJvbEVsZW1lbnQuaCIKICNp
bmNsdWRlICJIVE1MRm9ybUVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MT3B0R3JvdXBFbGVtZW50
LmgiCi0jaW5jbHVkZSAiSFRNTE9wdGlvbkVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MUGFyc2Vy
SWRpb21zLmgiCi0jaW5jbHVkZSAiSFRNTFRhYmxlRWxlbWVudC5oIgotI2luY2x1ZGUgIkhUTUxU
ZW1wbGF0ZUVsZW1lbnQuaCIKICNpbmNsdWRlICJMb2NhbGl6ZWRTdHJpbmdzLmgiCiAjaW5jbHVk
ZSAiTm90SW1wbGVtZW50ZWQuaCIKICNpbmNsdWRlICJYTGlua05hbWVzLmgiCiAjaW5jbHVkZSAi
WE1MTlNOYW1lcy5oIgogI2luY2x1ZGUgIlhNTE5hbWVzLmgiCi0jaW5jbHVkZSA8d3RmL01haW5U
aHJlYWQuaD4KICNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KICNpbmNsdWRlIDx3dGYv
dW5pY29kZS9DaGFyYWN0ZXJOYW1lcy5oPgogCi0jaWYgRU5BQkxFKFRFTEVQSE9ORV9OVU1CRVJf
REVURUNUSU9OKQorI2lmIEVOQUJMRShURUxFUEhPTkVfTlVNQkVSX0RFVEVDVElPTikgJiYgUExB
VEZPUk0oSU9TKQogI2luY2x1ZGUgIlRlbGVwaG9uZU51bWJlckRldGVjdG9yLmgiCiAjZW5kaWYK
IApAQCAtNjMsNyArNTgsNyBAQCBpbmxpbmUgYm9vbCBpc0hUTUxTcGFjZU9yUmVwbGFjZW1lbnRD
aGFyYWN0ZXIoVUNoYXIgY2hhcmFjdGVyKQogCiB9CiAKLXN0YXRpYyBUZXh0UG9zaXRpb24gdW5p
bml0aWFsaXplZFBvc2l0aW9uVmFsdWUxKCkKK3N0YXRpYyBpbmxpbmUgVGV4dFBvc2l0aW9uIHVu
aW5pdGlhbGl6ZWRQb3NpdGlvblZhbHVlMSgpCiB7CiAgICAgcmV0dXJuIFRleHRQb3NpdGlvbihP
cmRpbmFsTnVtYmVyOjpmcm9tT25lQmFzZWRJbnQoLTEpLCBPcmRpbmFsTnVtYmVyOjpmaXJzdCgp
KTsKIH0KQEAgLTkwLDkgKzg1LDcgQEAgc3RhdGljIGJvb2wgaXNOdW1iZXJlZEhlYWRlclRhZyhj
b25zdCBBdG9taWNTdHJpbmcmIHRhZ05hbWUpCiAKIHN0YXRpYyBib29sIGlzQ2FwdGlvbkNvbE9y
Q29sZ3JvdXBUYWcoY29uc3QgQXRvbWljU3RyaW5nJiB0YWdOYW1lKQogewotICAgIHJldHVybiB0
YWdOYW1lID09IGNhcHRpb25UYWcKLSAgICAgICAgfHwgdGFnTmFtZSA9PSBjb2xUYWcKLSAgICAg
ICAgfHwgdGFnTmFtZSA9PSBjb2xncm91cFRhZzsKKyAgICByZXR1cm4gdGFnTmFtZSA9PSBjYXB0
aW9uVGFnIHx8IHRhZ05hbWUgPT0gY29sVGFnIHx8IHRhZ05hbWUgPT0gY29sZ3JvdXBUYWc7CiB9
CiAKIHN0YXRpYyBib29sIGlzVGFibGVDZWxsQ29udGV4dFRhZyhjb25zdCBBdG9taWNTdHJpbmcm
IHRhZ05hbWUpCkBAIC0xMDIsOSArOTUsNyBAQCBzdGF0aWMgYm9vbCBpc1RhYmxlQ2VsbENvbnRl
eHRUYWcoY29uc3QgQXRvbWljU3RyaW5nJiB0YWdOYW1lKQogCiBzdGF0aWMgYm9vbCBpc1RhYmxl
Qm9keUNvbnRleHRUYWcoY29uc3QgQXRvbWljU3RyaW5nJiB0YWdOYW1lKQogewotICAgIHJldHVy
biB0YWdOYW1lID09IHRib2R5VGFnCi0gICAgICAgIHx8IHRhZ05hbWUgPT0gdGZvb3RUYWcKLSAg
ICAgICAgfHwgdGFnTmFtZSA9PSB0aGVhZFRhZzsKKyAgICByZXR1cm4gdGFnTmFtZSA9PSB0Ym9k
eVRhZyB8fCB0YWdOYW1lID09IHRmb290VGFnIHx8IHRhZ05hbWUgPT0gdGhlYWRUYWc7CiB9CiAK
IHN0YXRpYyBib29sIGlzTm9uQW5jaG9yTm9uTm9ickZvcm1hdHRpbmdUYWcoY29uc3QgQXRvbWlj
U3RyaW5nJiB0YWdOYW1lKQpAQCAtMTI1LDI5ICsxMTYsMjcgQEAgc3RhdGljIGJvb2wgaXNOb25B
bmNob3JOb25Ob2JyRm9ybWF0dGluZ1RhZyhjb25zdCBBdG9taWNTdHJpbmcmIHRhZ05hbWUpCiAK
IHN0YXRpYyBib29sIGlzTm9uQW5jaG9yRm9ybWF0dGluZ1RhZyhjb25zdCBBdG9taWNTdHJpbmcm
IHRhZ05hbWUpCiB7Ci0gICAgcmV0dXJuIHRhZ05hbWUgPT0gbm9iclRhZwotICAgICAgICB8fCBp
c05vbkFuY2hvck5vbk5vYnJGb3JtYXR0aW5nVGFnKHRhZ05hbWUpOworICAgIHJldHVybiB0YWdO
YW1lID09IG5vYnJUYWcgfHwgaXNOb25BbmNob3JOb25Ob2JyRm9ybWF0dGluZ1RhZyh0YWdOYW1l
KTsKIH0KIAotLy8gaHR0cDovL3d3dy53aGF0d2cub3JnL3NwZWNzL3dlYi1hcHBzL2N1cnJlbnQt
d29yay9tdWx0aXBhZ2UvcGFyc2luZy5odG1sI2Zvcm1hdHRpbmcKKy8vIGh0dHBzOi8vaHRtbC5z
cGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL3N5bnRheC5odG1sI2Zvcm1hdHRpbmcKIHN0YXRpYyBi
b29sIGlzRm9ybWF0dGluZ1RhZyhjb25zdCBBdG9taWNTdHJpbmcmIHRhZ05hbWUpCiB7CiAgICAg
cmV0dXJuIHRhZ05hbWUgPT0gYVRhZyB8fCBpc05vbkFuY2hvckZvcm1hdHRpbmdUYWcodGFnTmFt
ZSk7CiB9CiAKIGNsYXNzIEhUTUxUcmVlQnVpbGRlcjo6RXh0ZXJuYWxDaGFyYWN0ZXJUb2tlbkJ1
ZmZlciB7Ci0gICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoRXh0ZXJuYWxDaGFyYWN0ZXJUb2tlbkJ1
ZmZlcik7CiBwdWJsaWM6Ci0gICAgZXhwbGljaXQgRXh0ZXJuYWxDaGFyYWN0ZXJUb2tlbkJ1ZmZl
cihBdG9taWNIVE1MVG9rZW4qIHRva2VuKQotICAgICAgICA6IG1fdGV4dCh0b2tlbi0+Y2hhcmFj
dGVycygpLCB0b2tlbi0+Y2hhcmFjdGVyc0xlbmd0aCgpKQotICAgICAgICAsIG1faXNBbGw4Qml0
RGF0YSh0b2tlbi0+aXNBbGw4Qml0RGF0YSgpKQorICAgIGV4cGxpY2l0IEV4dGVybmFsQ2hhcmFj
dGVyVG9rZW5CdWZmZXIoQXRvbWljSFRNTFRva2VuJiB0b2tlbikKKyAgICAgICAgOiBtX3RleHQo
dG9rZW4uY2hhcmFjdGVycygpLCB0b2tlbi5jaGFyYWN0ZXJzTGVuZ3RoKCkpCisgICAgICAgICwg
bV9pc0FsbDhCaXREYXRhKHRva2VuLmlzQWxsOEJpdERhdGEoKSkKICAgICB7CiAgICAgICAgIEFT
U0VSVCghaXNFbXB0eSgpKTsKICAgICB9CiAKICAgICBleHBsaWNpdCBFeHRlcm5hbENoYXJhY3Rl
clRva2VuQnVmZmVyKGNvbnN0IFN0cmluZyYgc3RyaW5nKQogICAgICAgICA6IG1fdGV4dChzdHJp
bmcpCi0gICAgICAgICwgbV9pc0FsbDhCaXREYXRhKG1fdGV4dC5sZW5ndGgoKSAmJiBtX3RleHQu
aXM4Qml0KCkpCisgICAgICAgICwgbV9pc0FsbDhCaXREYXRhKG1fdGV4dC5pczhCaXQoKSkKICAg
ICB7CiAgICAgICAgIEFTU0VSVCghaXNFbXB0eSgpKTsKICAgICB9CkBAIC0xODUsMTEgKzE3NCw3
IEBAIHB1YmxpYzoKIAogICAgIFN0cmluZyB0YWtlUmVtYWluaW5nKCkKICAgICB7Ci0gICAgICAg
IFN0cmluZyByZXN1bHQ7Ci0gICAgICAgIGlmIChtX3RleHQuaXM4Qml0KCkgfHwgIWlzQWxsOEJp
dERhdGEoKSkKLSAgICAgICAgICAgIHJlc3VsdCA9IG1fdGV4dC50b1N0cmluZygpOwotICAgICAg
ICBlbHNlCi0gICAgICAgICAgICByZXN1bHQgPSBTdHJpbmc6Om1ha2U4Qml0RnJvbTE2Qml0U291
cmNlKG1fdGV4dC5jaGFyYWN0ZXJzMTYoKSwgbV90ZXh0Lmxlbmd0aCgpKTsKKyAgICAgICAgU3Ry
aW5nIHJlc3VsdCA9IG1ha2VTdHJpbmcobV90ZXh0KTsKICAgICAgICAgbV90ZXh0ID0gU3RyaW5n
VmlldygpOwogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KQEAgLTIyMSw4ICsyMDYsNyBA
QCBwdWJsaWM6CiAgICAgfQogCiBwcml2YXRlOgotICAgIHRlbXBsYXRlPGJvb2wgY2hhcmFjdGVy
UHJlZGljYXRlKFVDaGFyKT4KLSAgICB2b2lkIHNraXBMZWFkaW5nKCkKKyAgICB0ZW1wbGF0ZTxi
b29sIGNoYXJhY3RlclByZWRpY2F0ZShVQ2hhcik+IHZvaWQgc2tpcExlYWRpbmcoKQogICAgIHsK
ICAgICAgICAgQVNTRVJUKCFpc0VtcHR5KCkpOwogICAgICAgICB3aGlsZSAoY2hhcmFjdGVyUHJl
ZGljYXRlKG1fdGV4dFswXSkpIHsKQEAgLTIzMiwxMjIgKzIxNiwxMjkgQEAgcHJpdmF0ZToKICAg
ICAgICAgfQogICAgIH0KIAotICAgIHRlbXBsYXRlPGJvb2wgY2hhcmFjdGVyUHJlZGljYXRlKFVD
aGFyKT4KLSAgICBTdHJpbmcgdGFrZUxlYWRpbmcoKQorICAgIHRlbXBsYXRlPGJvb2wgY2hhcmFj
dGVyUHJlZGljYXRlKFVDaGFyKT4gU3RyaW5nIHRha2VMZWFkaW5nKCkKICAgICB7CiAgICAgICAg
IEFTU0VSVCghaXNFbXB0eSgpKTsKICAgICAgICAgU3RyaW5nVmlldyBzdGFydCA9IG1fdGV4dDsK
ICAgICAgICAgc2tpcExlYWRpbmc8Y2hhcmFjdGVyUHJlZGljYXRlPigpOwogICAgICAgICBpZiAo
c3RhcnQubGVuZ3RoKCkgPT0gbV90ZXh0Lmxlbmd0aCgpKQogICAgICAgICAgICAgcmV0dXJuIFN0
cmluZygpOwotICAgICAgICBTdHJpbmdWaWV3IGxlYWRpbmcgPSBzdGFydC5zdWJzdHJpbmcoMCwg
c3RhcnQubGVuZ3RoKCkgLSBtX3RleHQubGVuZ3RoKCkpOwotICAgICAgICBpZiAobGVhZGluZy5p
czhCaXQoKSB8fCAhaXNBbGw4Qml0RGF0YSgpKQotICAgICAgICAgICAgcmV0dXJuIGxlYWRpbmcu
dG9TdHJpbmcoKTsKLSAgICAgICAgcmV0dXJuIFN0cmluZzo6bWFrZThCaXRGcm9tMTZCaXRTb3Vy
Y2UobGVhZGluZy5jaGFyYWN0ZXJzMTYoKSwgbGVhZGluZy5sZW5ndGgoKSk7CisgICAgICAgIHJl
dHVybiBtYWtlU3RyaW5nKHN0YXJ0LnN1YnN0cmluZygwLCBzdGFydC5sZW5ndGgoKSAtIG1fdGV4
dC5sZW5ndGgoKSkpOworICAgIH0KKworICAgIFN0cmluZyBtYWtlU3RyaW5nKFN0cmluZ1ZpZXcg
c3RyaW5nVmlldykgY29uc3QKKyAgICB7CisgICAgICAgIGlmIChzdHJpbmdWaWV3LmlzOEJpdCgp
IHx8ICFpc0FsbDhCaXREYXRhKCkpCisgICAgICAgICAgICByZXR1cm4gc3RyaW5nVmlldy50b1N0
cmluZygpOworICAgICAgICByZXR1cm4gU3RyaW5nOjptYWtlOEJpdEZyb20xNkJpdFNvdXJjZShz
dHJpbmdWaWV3LmNoYXJhY3RlcnMxNigpLCBzdHJpbmdWaWV3Lmxlbmd0aCgpKTsKICAgICB9CiAK
ICAgICBTdHJpbmdWaWV3IG1fdGV4dDsKICAgICBib29sIG1faXNBbGw4Qml0RGF0YTsKIH07CiAK
LQotSFRNTFRyZWVCdWlsZGVyOjpIVE1MVHJlZUJ1aWxkZXIoSFRNTERvY3VtZW50UGFyc2VyJiBw
YXJzZXIsIEhUTUxEb2N1bWVudCYgZG9jdW1lbnQsIFBhcnNlckNvbnRlbnRQb2xpY3kgcGFyc2Vy
Q29udGVudFBvbGljeSwgY29uc3QgSFRNTFBhcnNlck9wdGlvbnMmIG9wdGlvbnMpCi0gICAgOiBt
X2ZyYW1lc2V0T2sodHJ1ZSkKLSNpZm5kZWYgTkRFQlVHCi0gICAgLCBtX2lzQXR0YWNoZWQodHJ1
ZSkKK2lubGluZSBib29sIEhUTUxUcmVlQnVpbGRlcjo6aXNQYXJzaW5nVGVtcGxhdGVDb250ZW50
cygpIGNvbnN0Cit7CisjaWYgRU5BQkxFKFRFTVBMQVRFX0VMRU1FTlQpCisgICAgcmV0dXJuIG1f
dHJlZS5vcGVuRWxlbWVudHMoKS0+aGFzVGVtcGxhdGVJbkhUTUxTY29wZSgpOworI2Vsc2UKKyAg
ICByZXR1cm4gZmFsc2U7CiAjZW5kaWYKK30KKworaW5saW5lIGJvb2wgSFRNTFRyZWVCdWlsZGVy
Ojppc1BhcnNpbmdGcmFnbWVudE9yVGVtcGxhdGVDb250ZW50cygpIGNvbnN0Cit7CisgICAgcmV0
dXJuIGlzUGFyc2luZ0ZyYWdtZW50KCkgfHwgaXNQYXJzaW5nVGVtcGxhdGVDb250ZW50cygpOwor
fQorCitIVE1MVHJlZUJ1aWxkZXI6OkhUTUxUcmVlQnVpbGRlcihjb25zdCBIVE1MRG9jdW1lbnRQ
YXJzZXImIHBhcnNlciwgSFRNTERvY3VtZW50JiBkb2N1bWVudCwgUGFyc2VyQ29udGVudFBvbGlj
eSBwYXJzZXJDb250ZW50UG9saWN5LCBjb25zdCBIVE1MUGFyc2VyT3B0aW9ucyYgb3B0aW9ucykK
KyAgICA6IG1fcGFyc2VyKHBhcnNlcikKKyAgICAsIG1fb3B0aW9ucyhvcHRpb25zKQogICAgICwg
bV90cmVlKGRvY3VtZW50LCBwYXJzZXJDb250ZW50UG9saWN5LCBvcHRpb25zLm1heGltdW1ET01U
cmVlRGVwdGgpCi0gICAgLCBtX2luc2VydGlvbk1vZGUoSW5zZXJ0aW9uTW9kZTo6SW5pdGlhbCkK
LSAgICAsIG1fb3JpZ2luYWxJbnNlcnRpb25Nb2RlKEluc2VydGlvbk1vZGU6OkluaXRpYWwpCi0g
ICAgLCBtX3Nob3VsZFNraXBMZWFkaW5nTmV3bGluZShmYWxzZSkKLSAgICAsIG1fcGFyc2VyKHBh
cnNlcikKICAgICAsIG1fc2NyaXB0VG9Qcm9jZXNzU3RhcnRQb3NpdGlvbih1bmluaXRpYWxpemVk
UG9zaXRpb25WYWx1ZTEoKSkKLSAgICAsIG1fb3B0aW9ucyhvcHRpb25zKQogeworI2lmICFBU1NF
UlRfRElTQUJMRUQKKyAgICBtX2Rlc3RydWN0aW9uUHJvaGliaXRlZCA9IGZhbHNlOworI2VuZGlm
CiB9CiAKLS8vIEZJWE1FOiBNZW1iZXIgdmFyaWFibGVzIHNob3VsZCBiZSBncm91cGVkIGludG8g
c2VsZi1pbml0aWFsaXppbmcgc3RydWN0cyB0bwotLy8gbWluaW1pemUgY29kZSBkdXBsaWNhdGlv
biBiZXR3ZWVuIHRoZXNlIGNvbnN0cnVjdG9ycy4KLUhUTUxUcmVlQnVpbGRlcjo6SFRNTFRyZWVC
dWlsZGVyKEhUTUxEb2N1bWVudFBhcnNlciYgcGFyc2VyLCBEb2N1bWVudEZyYWdtZW50JiBmcmFn
bWVudCwgRWxlbWVudCogY29udGV4dEVsZW1lbnQsIFBhcnNlckNvbnRlbnRQb2xpY3kgcGFyc2Vy
Q29udGVudFBvbGljeSwgY29uc3QgSFRNTFBhcnNlck9wdGlvbnMmIG9wdGlvbnMpCi0gICAgOiBt
X2ZyYW1lc2V0T2sodHJ1ZSkKLSNpZm5kZWYgTkRFQlVHCi0gICAgLCBtX2lzQXR0YWNoZWQodHJ1
ZSkKLSNlbmRpZgorSFRNTFRyZWVCdWlsZGVyOjpIVE1MVHJlZUJ1aWxkZXIoY29uc3QgSFRNTERv
Y3VtZW50UGFyc2VyJiBwYXJzZXIsIERvY3VtZW50RnJhZ21lbnQmIGZyYWdtZW50LCBFbGVtZW50
JiBjb250ZXh0RWxlbWVudCwgUGFyc2VyQ29udGVudFBvbGljeSBwYXJzZXJDb250ZW50UG9saWN5
LCBjb25zdCBIVE1MUGFyc2VyT3B0aW9ucyYgb3B0aW9ucykKKyAgICA6IG1fcGFyc2VyKHBhcnNl
cikKKyAgICAsIG1fb3B0aW9ucyhvcHRpb25zKQogICAgICwgbV9mcmFnbWVudENvbnRleHQoZnJh
Z21lbnQsIGNvbnRleHRFbGVtZW50KQogICAgICwgbV90cmVlKGZyYWdtZW50LCBwYXJzZXJDb250
ZW50UG9saWN5LCBvcHRpb25zLm1heGltdW1ET01UcmVlRGVwdGgpCi0gICAgLCBtX2luc2VydGlv
bk1vZGUoSW5zZXJ0aW9uTW9kZTo6SW5pdGlhbCkKLSAgICAsIG1fb3JpZ2luYWxJbnNlcnRpb25N
b2RlKEluc2VydGlvbk1vZGU6OkluaXRpYWwpCi0gICAgLCBtX3Nob3VsZFNraXBMZWFkaW5nTmV3
bGluZShmYWxzZSkKLSAgICAsIG1fcGFyc2VyKHBhcnNlcikKICAgICAsIG1fc2NyaXB0VG9Qcm9j
ZXNzU3RhcnRQb3NpdGlvbih1bmluaXRpYWxpemVkUG9zaXRpb25WYWx1ZTEoKSkKLSAgICAsIG1f
b3B0aW9ucyhvcHRpb25zKQogewogICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7Ci0gICAgLy8g
RklYTUU6IFRoaXMgYXNzZXJ0aW9uIHdpbGwgYmVjb21lIGludmFsaWQgaWYgPGh0dHA6Ly93ZWJr
aXQub3JnL2IvNjAzMTY+IGlzIGZpeGVkLgotICAgIEFTU0VSVChjb250ZXh0RWxlbWVudCk7Ci0g
ICAgaWYgKGNvbnRleHRFbGVtZW50KSB7Ci0gICAgICAgIC8vIFN0ZXBzIDQuMi00LjYgb2YgdGhl
IEhUTUw1IEZyYWdtZW50IENhc2UgcGFyc2luZyBhbGdvcml0aG06Ci0gICAgICAgIC8vIGh0dHA6
Ly93d3cud2hhdHdnLm9yZy9zcGVjcy93ZWItYXBwcy9jdXJyZW50LXdvcmsvbXVsdGlwYWdlL3Ro
ZS1lbmQuaHRtbCNmcmFnbWVudC1jYXNlCi0gICAgICAgIC8vIEZvciBlZmZpY2llbmN5LCB3ZSBz
a2lwIHN0ZXAgNC4yICgiTGV0IHJvb3QgYmUgYSBuZXcgaHRtbCBlbGVtZW50IHdpdGggbm8gYXR0
cmlidXRlcyIpCi0gICAgICAgIC8vIGFuZCBpbnN0ZWFkIHVzZSB0aGUgRG9jdW1lbnRGcmFnbWVu
dCBhcyBhIHJvb3Qgbm9kZS4KLSAgICAgICAgbV90cmVlLm9wZW5FbGVtZW50cygpLT5wdXNoUm9v
dE5vZGUoSFRNTFN0YWNrSXRlbTo6Y3JlYXRlKCZmcmFnbWVudCwgSFRNTFN0YWNrSXRlbTo6SXRl
bUZvckRvY3VtZW50RnJhZ21lbnROb2RlKSk7CisKKyAgICAvLyBodHRwczovL2h0bWwuc3BlYy53
aGF0d2cub3JnL211bHRpcGFnZS9zeW50YXguaHRtbCNwYXJzaW5nLWh0bWwtZnJhZ21lbnRzCisg
ICAgLy8gRm9yIGVmZmljaWVuY3ksIHdlIHNraXAgc3RlcCA1ICgiTGV0IHJvb3QgYmUgYSBuZXcg
aHRtbCBlbGVtZW50IHdpdGggbm8gYXR0cmlidXRlcyIpIGFuZCBpbnN0ZWFkIHVzZSB0aGUgRG9j
dW1lbnRGcmFnbWVudCBhcyBhIHJvb3Qgbm9kZS4KKyAgICBtX3RyZWUub3BlbkVsZW1lbnRzKCkt
PnB1c2hSb290Tm9kZShIVE1MU3RhY2tJdGVtOjpjcmVhdGUoJmZyYWdtZW50LCBIVE1MU3RhY2tJ
dGVtOjpJdGVtRm9yRG9jdW1lbnRGcmFnbWVudE5vZGUpKTsKIAogI2lmIEVOQUJMRShURU1QTEFU
RV9FTEVNRU5UKQotICAgICAgICBpZiAoY29udGV4dEVsZW1lbnQtPmhhc1RhZ05hbWUodGVtcGxh
dGVUYWcpKQotICAgICAgICAgICAgbV90ZW1wbGF0ZUluc2VydGlvbk1vZGVzLmFwcGVuZChJbnNl
cnRpb25Nb2RlOjpUZW1wbGF0ZUNvbnRlbnRzKTsKKyAgICBpZiAoY29udGV4dEVsZW1lbnQuaGFz
VGFnTmFtZSh0ZW1wbGF0ZVRhZykpCisgICAgICAgIG1fdGVtcGxhdGVJbnNlcnRpb25Nb2Rlcy5h
cHBlbmQoSW5zZXJ0aW9uTW9kZTo6VGVtcGxhdGVDb250ZW50cyk7CiAjZW5kaWYKIAotICAgICAg
ICByZXNldEluc2VydGlvbk1vZGVBcHByb3ByaWF0ZWx5KCk7Ci0gICAgICAgIG1fdHJlZS5zZXRG
b3JtKCFjb250ZXh0RWxlbWVudCB8fCBpczxIVE1MRm9ybUVsZW1lbnQ+KCpjb250ZXh0RWxlbWVu
dCkgPyBkb3duY2FzdDxIVE1MRm9ybUVsZW1lbnQ+KGNvbnRleHRFbGVtZW50KSA6IEhUTUxGb3Jt
RWxlbWVudDo6ZmluZENsb3Nlc3RGb3JtQW5jZXN0b3IoKmNvbnRleHRFbGVtZW50KSk7Ci0gICAg
fQotfQorICAgIHJlc2V0SW5zZXJ0aW9uTW9kZUFwcHJvcHJpYXRlbHkoKTsKIAotSFRNTFRyZWVC
dWlsZGVyOjp+SFRNTFRyZWVCdWlsZGVyKCkKLXsKLX0KKyAgICBtX3RyZWUuc2V0Rm9ybShpczxI
VE1MRm9ybUVsZW1lbnQ+KGNvbnRleHRFbGVtZW50KSA/ICZkb3duY2FzdDxIVE1MRm9ybUVsZW1l
bnQ+KGNvbnRleHRFbGVtZW50KSA6IEhUTUxGb3JtRWxlbWVudDo6ZmluZENsb3Nlc3RGb3JtQW5j
ZXN0b3IoY29udGV4dEVsZW1lbnQpKTsKIAotdm9pZCBIVE1MVHJlZUJ1aWxkZXI6OmRldGFjaCgp
Ci17Ci0jaWZuZGVmIE5ERUJVRwotICAgIC8vIFRoaXMgY2FsbCBtYWtlcyBsaXR0bGUgc2Vuc2Ug
aW4gZnJhZ21lbnQgbW9kZSwgYnV0IGZvciBjb25zaXN0ZW5jeQotICAgIC8vIERvY3VtZW50UGFy
c2VyIGV4cGVjdHMgZGV0YWNoKCkgdG8gYWx3YXlzIGJlIGNhbGxlZCBiZWZvcmUgaXQncyBkZXN0
cm95ZWQuCi0gICAgbV9pc0F0dGFjaGVkID0gZmFsc2U7CisjaWYgIUFTU0VSVF9ESVNBQkxFRAor
ICAgIG1fZGVzdHJ1Y3Rpb25Qcm9oaWJpdGVkID0gZmFsc2U7CiAjZW5kaWYKLSAgICAvLyBIVE1M
Q29uc3RydWN0aW9uU2l0ZSBtaWdodCBiZSBvbiB0aGUgY2FsbHN0YWNrIHdoZW4gZGV0YWNoKCkg
aXMgY2FsbGVkCi0gICAgLy8gb3RoZXJ3aXNlIHdlJ2QganVzdCBjYWxsIG1fdHJlZS5jbGVhcigp
IGhlcmUgaW5zdGVhZC4KLSAgICBtX3RyZWUuZGV0YWNoKCk7CiB9CiAKIEhUTUxUcmVlQnVpbGRl
cjo6RnJhZ21lbnRQYXJzaW5nQ29udGV4dDo6RnJhZ21lbnRQYXJzaW5nQ29udGV4dCgpCi0gICAg
OiBtX2ZyYWdtZW50KDApCiB7CiB9CiAKLUhUTUxUcmVlQnVpbGRlcjo6RnJhZ21lbnRQYXJzaW5n
Q29udGV4dDo6RnJhZ21lbnRQYXJzaW5nQ29udGV4dChEb2N1bWVudEZyYWdtZW50JiBmcmFnbWVu
dCwgRWxlbWVudCogY29udGV4dEVsZW1lbnQpCitIVE1MVHJlZUJ1aWxkZXI6OkZyYWdtZW50UGFy
c2luZ0NvbnRleHQ6OkZyYWdtZW50UGFyc2luZ0NvbnRleHQoRG9jdW1lbnRGcmFnbWVudCYgZnJh
Z21lbnQsIEVsZW1lbnQmIGNvbnRleHRFbGVtZW50KQogICAgIDogbV9mcmFnbWVudCgmZnJhZ21l
bnQpCiB7CiAgICAgQVNTRVJUKCFmcmFnbWVudC5oYXNDaGlsZE5vZGVzKCkpOwotICAgIG1fY29u
dGV4dEVsZW1lbnRTdGFja0l0ZW0gPSBIVE1MU3RhY2tJdGVtOjpjcmVhdGUoY29udGV4dEVsZW1l
bnQsIEhUTUxTdGFja0l0ZW06Okl0ZW1Gb3JDb250ZXh0RWxlbWVudCk7CisgICAgbV9jb250ZXh0
RWxlbWVudFN0YWNrSXRlbSA9IEhUTUxTdGFja0l0ZW06OmNyZWF0ZSgmY29udGV4dEVsZW1lbnQs
IEhUTUxTdGFja0l0ZW06Okl0ZW1Gb3JDb250ZXh0RWxlbWVudCk7CiB9CiAKLUhUTUxUcmVlQnVp
bGRlcjo6RnJhZ21lbnRQYXJzaW5nQ29udGV4dDo6fkZyYWdtZW50UGFyc2luZ0NvbnRleHQoKQor
aW5saW5lIERvY3VtZW50RnJhZ21lbnQqIEhUTUxUcmVlQnVpbGRlcjo6RnJhZ21lbnRQYXJzaW5n
Q29udGV4dDo6ZnJhZ21lbnQoKSBjb25zdAogeworICAgIHJldHVybiBtX2ZyYWdtZW50OwogfQog
Ci1QYXNzUmVmUHRyPEVsZW1lbnQ+IEhUTUxUcmVlQnVpbGRlcjo6dGFrZVNjcmlwdFRvUHJvY2Vz
cyhUZXh0UG9zaXRpb24mIHNjcmlwdFN0YXJ0UG9zaXRpb24pCitpbmxpbmUgRWxlbWVudCYgSFRN
TFRyZWVCdWlsZGVyOjpGcmFnbWVudFBhcnNpbmdDb250ZXh0Ojpjb250ZXh0RWxlbWVudCgpIGNv
bnN0CiB7Ci0gICAgQVNTRVJUKG1fc2NyaXB0VG9Qcm9jZXNzKTsKKyAgICByZXR1cm4gKmNvbnRl
eHRFbGVtZW50U3RhY2tJdGVtKCkuZWxlbWVudCgpOworfQorCitpbmxpbmUgSFRNTFN0YWNrSXRl
bSYgSFRNTFRyZWVCdWlsZGVyOjpGcmFnbWVudFBhcnNpbmdDb250ZXh0Ojpjb250ZXh0RWxlbWVu
dFN0YWNrSXRlbSgpIGNvbnN0Cit7CisgICAgQVNTRVJUKG1fZnJhZ21lbnQpOworICAgIHJldHVy
biAqbV9jb250ZXh0RWxlbWVudFN0YWNrSXRlbTsKK30KKworUmVmUHRyPEVsZW1lbnQ+IEhUTUxU
cmVlQnVpbGRlcjo6dGFrZVNjcmlwdFRvUHJvY2VzcyhUZXh0UG9zaXRpb24mIHNjcmlwdFN0YXJ0
UG9zaXRpb24pCit7CisgICAgQVNTRVJUKCFtX2Rlc3Ryb3llZCk7CisKKyAgICBpZiAoIW1fc2Ny
aXB0VG9Qcm9jZXNzKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKwogICAgIC8vIFVucGF1c2Ug
b3Vyc2VsdmVzLCBjYWxsZXJzIG1heSBwYXVzZSB1cyBhZ2FpbiB3aGVuIHByb2Nlc3NpbmcgdGhl
IHNjcmlwdC4KLSAgICAvLyBUaGUgSFRNTDUgc3BlYyBpcyB3cml0dGVuIGFzIHRob3VnaCBzY3Jp
cHRzIGFyZSBleGVjdXRlZCBpbnNpZGUgdGhlIHRyZWUKLSAgICAvLyBidWlsZGVyLiAgV2UgcGF1
c2UgdGhlIHBhcnNlciB0byBleGl0IHRoZSB0cmVlIGJ1aWxkZXIsIGFuZCB0aGVuIHJlc3VtZQot
ICAgIC8vIGJlZm9yZSBydW5uaW5nIHNjcmlwdHMuCisgICAgLy8gVGhlIEhUTUw1IHNwZWMgaXMg
d3JpdHRlbiBhcyB0aG91Z2ggc2NyaXB0cyBhcmUgZXhlY3V0ZWQgaW5zaWRlIHRoZSB0cmVlIGJ1
aWxkZXIuCisgICAgLy8gV2UgcGF1c2UgdGhlIHBhcnNlciB0byBleGl0IHRoZSB0cmVlIGJ1aWxk
ZXIsIGFuZCB0aGVuIHJlc3VtZSBiZWZvcmUgcnVubmluZyBzY3JpcHRzLgogICAgIHNjcmlwdFN0
YXJ0UG9zaXRpb24gPSBtX3NjcmlwdFRvUHJvY2Vzc1N0YXJ0UG9zaXRpb247CiAgICAgbV9zY3Jp
cHRUb1Byb2Nlc3NTdGFydFBvc2l0aW9uID0gdW5pbml0aWFsaXplZFBvc2l0aW9uVmFsdWUxKCk7
Ci0gICAgcmV0dXJuIG1fc2NyaXB0VG9Qcm9jZXNzLnJlbGVhc2UoKTsKKyAgICByZXR1cm4gV1RG
Ojptb3ZlKG1fc2NyaXB0VG9Qcm9jZXNzKTsKIH0KIAotdm9pZCBIVE1MVHJlZUJ1aWxkZXI6OmNv
bnN0cnVjdFRyZWUoQXRvbWljSFRNTFRva2VuKiB0b2tlbikKK3ZvaWQgSFRNTFRyZWVCdWlsZGVy
Ojpjb25zdHJ1Y3RUcmVlKEF0b21pY0hUTUxUb2tlbiYgdG9rZW4pCiB7CisjaWYgIUFTU0VSVF9E
SVNBQkxFRAorICAgIEFTU0VSVCghbV9kZXN0cm95ZWQpOworICAgIEFTU0VSVCghbV9kZXN0cnVj
dGlvblByb2hpYml0ZWQpOworICAgIG1fZGVzdHJ1Y3Rpb25Qcm9oaWJpdGVkID0gdHJ1ZTsKKyNl
bmRpZgorCiAgICAgaWYgKHNob3VsZFByb2Nlc3NUb2tlbkluRm9yZWlnbkNvbnRlbnQodG9rZW4p
KQogICAgICAgICBwcm9jZXNzVG9rZW5JbkZvcmVpZ25Db250ZW50KHRva2VuKTsKICAgICBlbHNl
CkBAIC0zNTUsNyArMzQ2LDcgQEAgdm9pZCBIVE1MVHJlZUJ1aWxkZXI6OmNvbnN0cnVjdFRyZWUo
QXRvbWljSFRNTFRva2VuKiB0b2tlbikKIAogICAgIGlmIChtX3BhcnNlci50b2tlbml6ZXIoKSkg
ewogICAgICAgICBib29sIGluRm9yZWlnbkNvbnRlbnQgPSAhbV90cmVlLmlzRW1wdHkoKQotICAg
ICAgICAgICAgJiYgIWFkanVzdGVkQ3VycmVudFN0YWNrSXRlbSgpLT5pc0luSFRNTE5hbWVzcGFj
ZSgpCisgICAgICAgICAgICAmJiAhYWRqdXN0ZWRDdXJyZW50U3RhY2tJdGVtKCkuaXNJbkhUTUxO
YW1lc3BhY2UoKQogICAgICAgICAgICAgJiYgIUhUTUxFbGVtZW50U3RhY2s6OmlzSFRNTEludGVn
cmF0aW9uUG9pbnQobV90cmVlLmN1cnJlbnRTdGFja0l0ZW0oKSkKICAgICAgICAgICAgICYmICFI
VE1MRWxlbWVudFN0YWNrOjppc01hdGhNTFRleHRJbnRlZ3JhdGlvblBvaW50KG1fdHJlZS5jdXJy
ZW50U3RhY2tJdGVtKCkpOwogCkBAIC0zNjMsMTMgKzM1NCwxNyBAQCB2b2lkIEhUTUxUcmVlQnVp
bGRlcjo6Y29uc3RydWN0VHJlZShBdG9taWNIVE1MVG9rZW4qIHRva2VuKQogICAgICAgICBtX3Bh
cnNlci50b2tlbml6ZXIoKS0+c2V0U2hvdWxkQWxsb3dDREFUQShpbkZvcmVpZ25Db250ZW50KTsK
ICAgICB9CiAKKyNpZiAhQVNTRVJUX0RJU0FCTEVECisgICAgbV9kZXN0cnVjdGlvblByb2hpYml0
ZWQgPSBmYWxzZTsKKyNlbmRpZgorCiAgICAgbV90cmVlLmV4ZWN1dGVRdWV1ZWRUYXNrcygpOwot
ICAgIC8vIFdlIG1pZ2h0IGJlIGRldGFjaGVkIG5vdy4KKyAgICAvLyBUaGUgdHJlZSBidWlsZGVy
IG1pZ2h0IGhhdmUgYmVlbiBkZXN0cm95ZWQgYXMgYW4gaW5kaXJlY3QgcmVzdWx0IG9mIGV4ZWN1
dGluZyB0aGUgcXVldWVkIHRhc2tzLgogfQogCi12b2lkIEhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vz
c1Rva2VuKEF0b21pY0hUTUxUb2tlbiogdG9rZW4pCit2b2lkIEhUTUxUcmVlQnVpbGRlcjo6cHJv
Y2Vzc1Rva2VuKEF0b21pY0hUTUxUb2tlbiYgdG9rZW4pCiB7Ci0gICAgc3dpdGNoICh0b2tlbi0+
dHlwZSgpKSB7CisgICAgc3dpdGNoICh0b2tlbi50eXBlKCkpIHsKICAgICBjYXNlIEhUTUxUb2tl
bjo6VW5pbml0aWFsaXplZDoKICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAg
IGJyZWFrOwpAQCAtMzk5LDEyICszOTQsMTIgQEAgdm9pZCBIVE1MVHJlZUJ1aWxkZXI6OnByb2Nl
c3NUb2tlbihBdG9taWNIVE1MVG9rZW4qIHRva2VuKQogICAgIH0KIH0KIAotdm9pZCBIVE1MVHJl
ZUJ1aWxkZXI6OnByb2Nlc3NEb2N0eXBlVG9rZW4oQXRvbWljSFRNTFRva2VuKiB0b2tlbikKK3Zv
aWQgSFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNzRG9jdHlwZVRva2VuKEF0b21pY0hUTUxUb2tlbiYg
dG9rZW4pCiB7Ci0gICAgQVNTRVJUKHRva2VuLT50eXBlKCkgPT0gSFRNTFRva2VuOjpET0NUWVBF
KTsKKyAgICBBU1NFUlQodG9rZW4udHlwZSgpID09IEhUTUxUb2tlbjo6RE9DVFlQRSk7CiAgICAg
aWYgKG1faW5zZXJ0aW9uTW9kZSA9PSBJbnNlcnRpb25Nb2RlOjpJbml0aWFsKSB7Ci0gICAgICAg
IG1fdHJlZS5pbnNlcnREb2N0eXBlKHRva2VuKTsKLSAgICAgICAgc2V0SW5zZXJ0aW9uTW9kZShJ
bnNlcnRpb25Nb2RlOjpCZWZvcmVIVE1MKTsKKyAgICAgICAgbV90cmVlLmluc2VydERvY3R5cGUo
JnRva2VuKTsKKyAgICAgICAgbV9pbnNlcnRpb25Nb2RlID0gSW5zZXJ0aW9uTW9kZTo6QmVmb3Jl
SFRNTDsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBpZiAobV9pbnNlcnRpb25Nb2RlID09
IEluc2VydGlvbk1vZGU6OkluVGFibGVUZXh0KSB7CkBAIC00MTUsMTcgKzQxMCwxNyBAQCB2b2lk
IEhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc0RvY3R5cGVUb2tlbihBdG9taWNIVE1MVG9rZW4qIHRv
a2VuKQogICAgIHBhcnNlRXJyb3IodG9rZW4pOwogfQogCi12b2lkIEhUTUxUcmVlQnVpbGRlcjo6
cHJvY2Vzc0Zha2VTdGFydFRhZyhjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBjb25zdCBW
ZWN0b3I8QXR0cmlidXRlPiYgYXR0cmlidXRlcykKK3ZvaWQgSFRNTFRyZWVCdWlsZGVyOjpwcm9j
ZXNzRmFrZVN0YXJ0VGFnKGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIFZlY3RvcjxBdHRy
aWJ1dGU+JiYgYXR0cmlidXRlcykKIHsKICAgICAvLyBGSVhNRTogV2UnbGwgbmVlZCBhIGZhbmNp
ZXIgY29udmVyc2lvbiB0aGFuIGp1c3QgImxvY2FsTmFtZSIgZm9yIFNWRy9NYXRoTUwgdGFncy4K
LSAgICBBdG9taWNIVE1MVG9rZW4gZmFrZVRva2VuKEhUTUxUb2tlbjo6U3RhcnRUYWcsIHRhZ05h
bWUubG9jYWxOYW1lKCksIGF0dHJpYnV0ZXMpOwotICAgIHByb2Nlc3NTdGFydFRhZygmZmFrZVRv
a2VuKTsKKyAgICBBdG9taWNIVE1MVG9rZW4gZmFrZVRva2VuKEhUTUxUb2tlbjo6U3RhcnRUYWcs
IHRhZ05hbWUubG9jYWxOYW1lKCksIFdURjo6bW92ZShhdHRyaWJ1dGVzKSk7CisgICAgcHJvY2Vz
c1N0YXJ0VGFnKGZha2VUb2tlbik7CiB9CiAKIHZvaWQgSFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNz
RmFrZUVuZFRhZyhjb25zdCBBdG9taWNTdHJpbmcmIHRhZ05hbWUpCiB7CiAgICAgQXRvbWljSFRN
TFRva2VuIGZha2VUb2tlbihIVE1MVG9rZW46OkVuZFRhZywgdGFnTmFtZSk7Ci0gICAgcHJvY2Vz
c0VuZFRhZygmZmFrZVRva2VuKTsKKyAgICBwcm9jZXNzRW5kVGFnKGZha2VUb2tlbik7CiB9CiAK
IHZvaWQgSFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNzRmFrZUVuZFRhZyhjb25zdCBRdWFsaWZpZWRO
YW1lJiB0YWdOYW1lKQpAQCAtNDQ2LDEyICs0NDEsMTIgQEAgdm9pZCBIVE1MVHJlZUJ1aWxkZXI6
OnByb2Nlc3NGYWtlUEVuZFRhZ0lmUEluQnV0dG9uU2NvcGUoKQogICAgIGlmICghbV90cmVlLm9w
ZW5FbGVtZW50cygpLT5pbkJ1dHRvblNjb3BlKHBUYWcubG9jYWxOYW1lKCkpKQogICAgICAgICBy
ZXR1cm47CiAgICAgQXRvbWljSFRNTFRva2VuIGVuZFAoSFRNTFRva2VuOjpFbmRUYWcsIHBUYWcu
bG9jYWxOYW1lKCkpOwotICAgIHByb2Nlc3NFbmRUYWcoJmVuZFApOworICAgIHByb2Nlc3NFbmRU
YWcoZW5kUCk7CiB9CiAKLVZlY3RvcjxBdHRyaWJ1dGU+IEhUTUxUcmVlQnVpbGRlcjo6YXR0cmli
dXRlc0ZvcklzaW5kZXhJbnB1dChBdG9taWNIVE1MVG9rZW4qIHRva2VuKQorVmVjdG9yPEF0dHJp
YnV0ZT4gSFRNTFRyZWVCdWlsZGVyOjphdHRyaWJ1dGVzRm9ySXNpbmRleElucHV0KEF0b21pY0hU
TUxUb2tlbiYgdG9rZW4pCiB7Ci0gICAgVmVjdG9yPEF0dHJpYnV0ZT4gYXR0cmlidXRlcyA9IHRv
a2VuLT5hdHRyaWJ1dGVzKCk7CisgICAgVmVjdG9yPEF0dHJpYnV0ZT4gYXR0cmlidXRlcyA9IHRv
a2VuLmF0dHJpYnV0ZXMoKTsKICAgICBmb3IgKGludCBpID0gYXR0cmlidXRlcy5zaXplKCkgLSAx
OyBpID49IDA7IC0taSkgewogICAgICAgICBjb25zdCBRdWFsaWZpZWROYW1lJiBuYW1lID0gYXR0
cmlidXRlcy5hdChpKS5uYW1lKCk7CiAgICAgICAgIGlmIChuYW1lLm1hdGNoZXMobmFtZUF0dHIp
IHx8IG5hbWUubWF0Y2hlcyhhY3Rpb25BdHRyKSB8fCBuYW1lLm1hdGNoZXMocHJvbXB0QXR0cikp
CkBAIC00NjIsMjEgKzQ1NywyMSBAQCBWZWN0b3I8QXR0cmlidXRlPiBIVE1MVHJlZUJ1aWxkZXI6
OmF0dHJpYnV0ZXNGb3JJc2luZGV4SW5wdXQoQXRvbWljSFRNTFRva2VuKiB0bwogICAgIHJldHVy
biBhdHRyaWJ1dGVzOwogfQogCi12b2lkIEhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc0lzaW5kZXhT
dGFydFRhZ0ZvckluQm9keShBdG9taWNIVE1MVG9rZW4qIHRva2VuKQordm9pZCBIVE1MVHJlZUJ1
aWxkZXI6OnByb2Nlc3NJc2luZGV4U3RhcnRUYWdGb3JJbkJvZHkoQXRvbWljSFRNTFRva2VuJiB0
b2tlbikKIHsKLSAgICBBU1NFUlQodG9rZW4tPnR5cGUoKSA9PSBIVE1MVG9rZW46OlN0YXJ0VGFn
KTsKLSAgICBBU1NFUlQodG9rZW4tPm5hbWUoKSA9PSBpc2luZGV4VGFnKTsKKyAgICBBU1NFUlQo
dG9rZW4udHlwZSgpID09IEhUTUxUb2tlbjo6U3RhcnRUYWcpOworICAgIEFTU0VSVCh0b2tlbi5u
YW1lKCkgPT0gaXNpbmRleFRhZyk7CiAgICAgcGFyc2VFcnJvcih0b2tlbik7CiAgICAgaWYgKG1f
dHJlZS5mb3JtKCkgJiYgIWlzUGFyc2luZ1RlbXBsYXRlQ29udGVudHMoKSkKICAgICAgICAgcmV0
dXJuOwogICAgIG5vdEltcGxlbWVudGVkKCk7IC8vIEFja25vd2xlZGdlIHNlbGYtY2xvc2luZyBm
bGFnCiAgICAgcHJvY2Vzc0Zha2VTdGFydFRhZyhmb3JtVGFnKTsKLSAgICBBdHRyaWJ1dGUqIGFj
dGlvbkF0dHJpYnV0ZSA9IHRva2VuLT5nZXRBdHRyaWJ1dGVJdGVtKGFjdGlvbkF0dHIpOworICAg
IEF0dHJpYnV0ZSogYWN0aW9uQXR0cmlidXRlID0gdG9rZW4uZ2V0QXR0cmlidXRlSXRlbShhY3Rp
b25BdHRyKTsKICAgICBpZiAoYWN0aW9uQXR0cmlidXRlKQogICAgICAgICBtX3RyZWUuZm9ybSgp
LT5zZXRBdHRyaWJ1dGUoYWN0aW9uQXR0ciwgYWN0aW9uQXR0cmlidXRlLT52YWx1ZSgpKTsKICAg
ICBwcm9jZXNzRmFrZVN0YXJ0VGFnKGhyVGFnKTsKICAgICBwcm9jZXNzRmFrZVN0YXJ0VGFnKGxh
YmVsVGFnKTsKLSAgICBBdHRyaWJ1dGUqIHByb21wdEF0dHJpYnV0ZSA9IHRva2VuLT5nZXRBdHRy
aWJ1dGVJdGVtKHByb21wdEF0dHIpOworICAgIEF0dHJpYnV0ZSogcHJvbXB0QXR0cmlidXRlID0g
dG9rZW4uZ2V0QXR0cmlidXRlSXRlbShwcm9tcHRBdHRyKTsKICAgICBpZiAocHJvbXB0QXR0cmli
dXRlKQogICAgICAgICBwcm9jZXNzRmFrZUNoYXJhY3RlcnMocHJvbXB0QXR0cmlidXRlLT52YWx1
ZSgpKTsKICAgICBlbHNlCkBAIC00OTAsNDEgKzQ4NSwzNiBAQCB2b2lkIEhUTUxUcmVlQnVpbGRl
cjo6cHJvY2Vzc0lzaW5kZXhTdGFydFRhZ0ZvckluQm9keShBdG9taWNIVE1MVG9rZW4qIHRva2Vu
KQogCiBuYW1lc3BhY2UgewogCi1ib29sIGlzTGkoY29uc3QgSFRNTFN0YWNrSXRlbSogaXRlbSkK
K2Jvb2wgaXNMaShjb25zdCBIVE1MU3RhY2tJdGVtJiBpdGVtKQogewotICAgIHJldHVybiBpdGVt
LT5oYXNUYWdOYW1lKGxpVGFnKTsKKyAgICByZXR1cm4gaXRlbS5oYXNUYWdOYW1lKGxpVGFnKTsK
IH0KIAotYm9vbCBpc0RkT3JEdChjb25zdCBIVE1MU3RhY2tJdGVtKiBpdGVtKQorYm9vbCBpc0Rk
T3JEdChjb25zdCBIVE1MU3RhY2tJdGVtJiBpdGVtKQogewotICAgIHJldHVybiBpdGVtLT5oYXNU
YWdOYW1lKGRkVGFnKQotICAgICAgICB8fCBpdGVtLT5oYXNUYWdOYW1lKGR0VGFnKTsKKyAgICBy
ZXR1cm4gaXRlbS5oYXNUYWdOYW1lKGRkVGFnKSB8fCBpdGVtLmhhc1RhZ05hbWUoZHRUYWcpOwog
fQogCiB9CiAKLXRlbXBsYXRlIDxib29sIHNob3VsZENsb3NlKGNvbnN0IEhUTUxTdGFja0l0ZW0q
KT4KLXZvaWQgSFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNzQ2xvc2VXaGVuTmVzdGVkVGFnKEF0b21p
Y0hUTUxUb2tlbiogdG9rZW4pCit0ZW1wbGF0ZSA8Ym9vbCBzaG91bGRDbG9zZShjb25zdCBIVE1M
U3RhY2tJdGVtJik+IHZvaWQgSFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNzQ2xvc2VXaGVuTmVzdGVk
VGFnKEF0b21pY0hUTUxUb2tlbiYgdG9rZW4pCiB7CiAgICAgbV9mcmFtZXNldE9rID0gZmFsc2U7
Ci0gICAgSFRNTEVsZW1lbnRTdGFjazo6RWxlbWVudFJlY29yZCogbm9kZVJlY29yZCA9IG1fdHJl
ZS5vcGVuRWxlbWVudHMoKS0+dG9wUmVjb3JkKCk7Ci0gICAgd2hpbGUgKDEpIHsKLSAgICAgICAg
UmVmUHRyPEhUTUxTdGFja0l0ZW0+IGl0ZW0gPSBub2RlUmVjb3JkLT5zdGFja0l0ZW0oKTsKLSAg
ICAgICAgaWYgKHNob3VsZENsb3NlKGl0ZW0uZ2V0KCkpKSB7Ci0gICAgICAgICAgICBBU1NFUlQo
aXRlbS0+aXNFbGVtZW50Tm9kZSgpKTsKLSAgICAgICAgICAgIHByb2Nlc3NGYWtlRW5kVGFnKGl0
ZW0tPmxvY2FsTmFtZSgpKTsKKyAgICBmb3IgKGF1dG8qIG5vZGVSZWNvcmQgPSBtX3RyZWUub3Bl
bkVsZW1lbnRzKCktPnRvcFJlY29yZCgpOyA7IG5vZGVSZWNvcmQgPSBub2RlUmVjb3JkLT5uZXh0
KCkpIHsKKyAgICAgICAgSFRNTFN0YWNrSXRlbSYgaXRlbSA9ICpub2RlUmVjb3JkLT5zdGFja0l0
ZW0oKTsKKyAgICAgICAgaWYgKHNob3VsZENsb3NlKGl0ZW0pKSB7CisgICAgICAgICAgICBBU1NF
UlQoaXRlbS5pc0VsZW1lbnROb2RlKCkpOworICAgICAgICAgICAgcHJvY2Vzc0Zha2VFbmRUYWco
aXRlbS5sb2NhbE5hbWUoKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQotICAgICAg
ICBpZiAoaXRlbS0+aXNTcGVjaWFsTm9kZSgpICYmICFpdGVtLT5oYXNUYWdOYW1lKGFkZHJlc3NU
YWcpICYmICFpdGVtLT5oYXNUYWdOYW1lKGRpdlRhZykgJiYgIWl0ZW0tPmhhc1RhZ05hbWUocFRh
ZykpCisgICAgICAgIGlmIChpdGVtLmlzU3BlY2lhbE5vZGUoKSAmJiAhaXRlbS5oYXNUYWdOYW1l
KGFkZHJlc3NUYWcpICYmICFpdGVtLmhhc1RhZ05hbWUoZGl2VGFnKSAmJiAhaXRlbS5oYXNUYWdO
YW1lKHBUYWcpKQogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIG5vZGVSZWNvcmQgPSBub2Rl
UmVjb3JkLT5uZXh0KCk7CiAgICAgfQogICAgIHByb2Nlc3NGYWtlUEVuZFRhZ0lmUEluQnV0dG9u
U2NvcGUoKTsKLSAgICBtX3RyZWUuaW5zZXJ0SFRNTEVsZW1lbnQodG9rZW4pOworICAgIG1fdHJl
ZS5pbnNlcnRIVE1MRWxlbWVudCgmdG9rZW4pOwogfQogCi10ZW1wbGF0ZSA8dHlwZW5hbWUgVGFi
bGVRdWFsaWZpZWROYW1lPgotc3RhdGljIEhhc2hNYXA8QXRvbWljU3RyaW5nLCBRdWFsaWZpZWRO
YW1lPiBjcmVhdGVDYXNlTWFwKGNvbnN0IFRhYmxlUXVhbGlmaWVkTmFtZSogY29uc3QgbmFtZXNb
XSwgdW5zaWduZWQgbGVuZ3RoKQordGVtcGxhdGUgPHR5cGVuYW1lIFRhYmxlUXVhbGlmaWVkTmFt
ZT4gc3RhdGljIEhhc2hNYXA8QXRvbWljU3RyaW5nLCBRdWFsaWZpZWROYW1lPiBjcmVhdGVDYXNl
TWFwKGNvbnN0IFRhYmxlUXVhbGlmaWVkTmFtZSogY29uc3QgbmFtZXNbXSwgdW5zaWduZWQgbGVu
Z3RoKQogewogICAgIEhhc2hNYXA8QXRvbWljU3RyaW5nLCBRdWFsaWZpZWROYW1lPiBtYXA7CiAg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7CkBAIC01NTUsOCArNTQ1
LDcgQEAgc3RhdGljIGlubGluZSB2b2lkIGFkanVzdEF0dHJpYnV0ZXMoSGFzaE1hcDxBdG9taWNT
dHJpbmcsIFF1YWxpZmllZE5hbWU+JiBtYXAsIEEKICAgICB9CiB9CiAKLXRlbXBsYXRlPGNvbnN0
IFF1YWxpZmllZE5hbWUqIGNvbnN0KiBhdHRyaWJ1dGVzVGFibGUoKSwgdW5zaWduZWQgYXR0cmli
dXRlc1RhYmxlTGVuZ3RoPgotc3RhdGljIHZvaWQgYWRqdXN0QXR0cmlidXRlcyhBdG9taWNIVE1M
VG9rZW4mIHRva2VuKQordGVtcGxhdGU8Y29uc3QgUXVhbGlmaWVkTmFtZSogY29uc3QqIGF0dHJp
YnV0ZXNUYWJsZSgpLCB1bnNpZ25lZCBhdHRyaWJ1dGVzVGFibGVMZW5ndGg+IHN0YXRpYyB2b2lk
IGFkanVzdEF0dHJpYnV0ZXMoQXRvbWljSFRNTFRva2VuJiB0b2tlbikKIHsKICAgICBzdGF0aWMg
TmV2ZXJEZXN0cm95ZWQ8SGFzaE1hcDxBdG9taWNTdHJpbmcsIFF1YWxpZmllZE5hbWU+PiBtYXAg
PSBjcmVhdGVDYXNlTWFwKGF0dHJpYnV0ZXNUYWJsZSgpLCBhdHRyaWJ1dGVzVGFibGVMZW5ndGgp
OwogICAgIGFkanVzdEF0dHJpYnV0ZXMobWFwLCB0b2tlbik7CkBAIC02MDAsMjggKzU4OSwyOCBA
QCBzdGF0aWMgdm9pZCBhZGp1c3RGb3JlaWduQXR0cmlidXRlcyhBdG9taWNIVE1MVG9rZW4mIHRv
a2VuKQogICAgIGFkanVzdEF0dHJpYnV0ZXMobWFwLCB0b2tlbik7CiB9CiAKLXZvaWQgSFRNTFRy
ZWVCdWlsZGVyOjpwcm9jZXNzU3RhcnRUYWdGb3JJbkJvZHkoQXRvbWljSFRNTFRva2VuKiB0b2tl
bikKK3ZvaWQgSFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNzU3RhcnRUYWdGb3JJbkJvZHkoQXRvbWlj
SFRNTFRva2VuJiB0b2tlbikKIHsKLSAgICBBU1NFUlQodG9rZW4tPnR5cGUoKSA9PSBIVE1MVG9r
ZW46OlN0YXJ0VGFnKTsKLSAgICBpZiAodG9rZW4tPm5hbWUoKSA9PSBodG1sVGFnKSB7CisgICAg
QVNTRVJUKHRva2VuLnR5cGUoKSA9PSBIVE1MVG9rZW46OlN0YXJ0VGFnKTsKKyAgICBpZiAodG9r
ZW4ubmFtZSgpID09IGh0bWxUYWcpIHsKICAgICAgICAgcHJvY2Vzc0h0bWxTdGFydFRhZ0Zvcklu
Qm9keSh0b2tlbik7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgaWYgKHRva2VuLT5uYW1l
KCkgPT0gYmFzZVRhZwotICAgICAgICB8fCB0b2tlbi0+bmFtZSgpID09IGJhc2Vmb250VGFnCi0g
ICAgICAgIHx8IHRva2VuLT5uYW1lKCkgPT0gYmdzb3VuZFRhZwotICAgICAgICB8fCB0b2tlbi0+
bmFtZSgpID09IGNvbW1hbmRUYWcKLSAgICAgICAgfHwgdG9rZW4tPm5hbWUoKSA9PSBsaW5rVGFn
Ci0gICAgICAgIHx8IHRva2VuLT5uYW1lKCkgPT0gbWV0YVRhZwotICAgICAgICB8fCB0b2tlbi0+
bmFtZSgpID09IG5vZnJhbWVzVGFnCi0gICAgICAgIHx8IHRva2VuLT5uYW1lKCkgPT0gc2NyaXB0
VGFnCi0gICAgICAgIHx8IHRva2VuLT5uYW1lKCkgPT0gc3R5bGVUYWcKLSAgICAgICAgfHwgdG9r
ZW4tPm5hbWUoKSA9PSB0aXRsZVRhZykgeworICAgIGlmICh0b2tlbi5uYW1lKCkgPT0gYmFzZVRh
ZworICAgICAgICB8fCB0b2tlbi5uYW1lKCkgPT0gYmFzZWZvbnRUYWcKKyAgICAgICAgfHwgdG9r
ZW4ubmFtZSgpID09IGJnc291bmRUYWcKKyAgICAgICAgfHwgdG9rZW4ubmFtZSgpID09IGNvbW1h
bmRUYWcKKyAgICAgICAgfHwgdG9rZW4ubmFtZSgpID09IGxpbmtUYWcKKyAgICAgICAgfHwgdG9r
ZW4ubmFtZSgpID09IG1ldGFUYWcKKyAgICAgICAgfHwgdG9rZW4ubmFtZSgpID09IG5vZnJhbWVz
VGFnCisgICAgICAgIHx8IHRva2VuLm5hbWUoKSA9PSBzY3JpcHRUYWcKKyAgICAgICAgfHwgdG9r
ZW4ubmFtZSgpID09IHN0eWxlVGFnCisgICAgICAgIHx8IHRva2VuLm5hbWUoKSA9PSB0aXRsZVRh
ZykgewogICAgICAgICBib29sIGRpZFByb2Nlc3MgPSBwcm9jZXNzU3RhcnRUYWdGb3JJbkhlYWQo
dG9rZW4pOwogICAgICAgICBBU1NFUlRfVU5VU0VEKGRpZFByb2Nlc3MsIGRpZFByb2Nlc3MpOwog
ICAgICAgICByZXR1cm47CiAgICAgfQotICAgIGlmICh0b2tlbi0+bmFtZSgpID09IGJvZHlUYWcp
IHsKKyAgICBpZiAodG9rZW4ubmFtZSgpID09IGJvZHlUYWcpIHsKICAgICAgICAgcGFyc2VFcnJv
cih0b2tlbik7CiAgICAgICAgIGJvb2wgZnJhZ21lbnRPclRlbXBsYXRlQ2FzZSA9ICFtX3RyZWUu
b3BlbkVsZW1lbnRzKCktPnNlY29uZEVsZW1lbnRJc0hUTUxCb2R5RWxlbWVudCgpIHx8IG1fdHJl
ZS5vcGVuRWxlbWVudHMoKS0+aGFzT25seU9uZUVsZW1lbnQoKTsKICNpZiBFTkFCTEUoVEVNUExB
VEVfRUxFTUVOVCkKQEAgLTYzMiwxMCArNjIxLDEwIEBAIHZvaWQgSFRNTFRyZWVCdWlsZGVyOjpw
cm9jZXNzU3RhcnRUYWdGb3JJbkJvZHkoQXRvbWljSFRNTFRva2VuKiB0b2tlbikKICAgICAgICAg
ICAgIHJldHVybjsKICAgICAgICAgfQogICAgICAgICBtX2ZyYW1lc2V0T2sgPSBmYWxzZTsKLSAg
ICAgICAgbV90cmVlLmluc2VydEhUTUxCb2R5U3RhcnRUYWdJbkJvZHkodG9rZW4pOworICAgICAg
ICBtX3RyZWUuaW5zZXJ0SFRNTEJvZHlTdGFydFRhZ0luQm9keSgmdG9rZW4pOwogICAgICAgICBy
ZXR1cm47CiAgICAgfQotICAgIGlmICh0b2tlbi0+bmFtZSgpID09IGZyYW1lc2V0VGFnKSB7Cisg
ICAgaWYgKHRva2VuLm5hbWUoKSA9PSBmcmFtZXNldFRhZykgewogICAgICAgICBwYXJzZUVycm9y
KHRva2VuKTsKICAgICAgICAgaWYgKCFtX3RyZWUub3BlbkVsZW1lbnRzKCktPnNlY29uZEVsZW1l
bnRJc0hUTUxCb2R5RWxlbWVudCgpIHx8IG1fdHJlZS5vcGVuRWxlbWVudHMoKS0+aGFzT25seU9u
ZUVsZW1lbnQoKSkgewogICAgICAgICAgICAgQVNTRVJUKGlzUGFyc2luZ0ZyYWdtZW50T3JUZW1w
bGF0ZUNvbnRlbnRzKCkpOwpAQCAtNjQ3LDc4ICs2MzYsNzggQEAgdm9pZCBIVE1MVHJlZUJ1aWxk
ZXI6OnByb2Nlc3NTdGFydFRhZ0ZvckluQm9keShBdG9taWNIVE1MVG9rZW4qIHRva2VuKQogICAg
ICAgICBtX3RyZWUub3BlbkVsZW1lbnRzKCktPnBvcFVudGlsKG1fdHJlZS5vcGVuRWxlbWVudHMo
KS0+Ym9keUVsZW1lbnQoKSk7CiAgICAgICAgIG1fdHJlZS5vcGVuRWxlbWVudHMoKS0+cG9wSFRN
TEJvZHlFbGVtZW50KCk7CiAgICAgICAgIEFTU0VSVChtX3RyZWUub3BlbkVsZW1lbnRzKCktPnRv
cCgpID09IG1fdHJlZS5vcGVuRWxlbWVudHMoKS0+aHRtbEVsZW1lbnQoKSk7Ci0gICAgICAgIG1f
dHJlZS5pbnNlcnRIVE1MRWxlbWVudCh0b2tlbik7Ci0gICAgICAgIHNldEluc2VydGlvbk1vZGUo
SW5zZXJ0aW9uTW9kZTo6SW5GcmFtZXNldCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAg
aWYgKHRva2VuLT5uYW1lKCkgPT0gYWRkcmVzc1RhZwotICAgICAgICB8fCB0b2tlbi0+bmFtZSgp
ID09IGFydGljbGVUYWcKLSAgICAgICAgfHwgdG9rZW4tPm5hbWUoKSA9PSBhc2lkZVRhZwotICAg
ICAgICB8fCB0b2tlbi0+bmFtZSgpID09IGJsb2NrcXVvdGVUYWcKLSAgICAgICAgfHwgdG9rZW4t
Pm5hbWUoKSA9PSBjZW50ZXJUYWcKLSAgICAgICAgfHwgdG9rZW4tPm5hbWUoKSA9PSBkZXRhaWxz
VGFnCi0gICAgICAgIHx8IHRva2VuLT5uYW1lKCkgPT0gZGlyVGFnCi0gICAgICAgIHx8IHRva2Vu
LT5uYW1lKCkgPT0gZGl2VGFnCi0gICAgICAgIHx8IHRva2VuLT5uYW1lKCkgPT0gZGxUYWcKLSAg
ICAgICAgfHwgdG9rZW4tPm5hbWUoKSA9PSBmaWVsZHNldFRhZwotICAgICAgICB8fCB0b2tlbi0+
bmFtZSgpID09IGZpZ2NhcHRpb25UYWcKLSAgICAgICAgfHwgdG9rZW4tPm5hbWUoKSA9PSBmaWd1
cmVUYWcKLSAgICAgICAgfHwgdG9rZW4tPm5hbWUoKSA9PSBmb290ZXJUYWcKLSAgICAgICAgfHwg
dG9rZW4tPm5hbWUoKSA9PSBoZWFkZXJUYWcKLSAgICAgICAgfHwgdG9rZW4tPm5hbWUoKSA9PSBo
Z3JvdXBUYWcKLSAgICAgICAgfHwgdG9rZW4tPm5hbWUoKSA9PSBtYWluVGFnCi0gICAgICAgIHx8
IHRva2VuLT5uYW1lKCkgPT0gbWVudVRhZwotICAgICAgICB8fCB0b2tlbi0+bmFtZSgpID09IG5h
dlRhZwotICAgICAgICB8fCB0b2tlbi0+bmFtZSgpID09IG9sVGFnCi0gICAgICAgIHx8IHRva2Vu
LT5uYW1lKCkgPT0gcFRhZwotICAgICAgICB8fCB0b2tlbi0+bmFtZSgpID09IHNlY3Rpb25UYWcK
LSAgICAgICAgfHwgdG9rZW4tPm5hbWUoKSA9PSBzdW1tYXJ5VGFnCi0gICAgICAgIHx8IHRva2Vu
LT5uYW1lKCkgPT0gdWxUYWcpIHsKKyAgICAgICAgbV90cmVlLmluc2VydEhUTUxFbGVtZW50KCZ0
b2tlbik7CisgICAgICAgIG1faW5zZXJ0aW9uTW9kZSA9IEluc2VydGlvbk1vZGU6OkluRnJhbWVz
ZXQ7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgaWYgKHRva2VuLm5hbWUoKSA9PSBhZGRy
ZXNzVGFnCisgICAgICAgIHx8IHRva2VuLm5hbWUoKSA9PSBhcnRpY2xlVGFnCisgICAgICAgIHx8
IHRva2VuLm5hbWUoKSA9PSBhc2lkZVRhZworICAgICAgICB8fCB0b2tlbi5uYW1lKCkgPT0gYmxv
Y2txdW90ZVRhZworICAgICAgICB8fCB0b2tlbi5uYW1lKCkgPT0gY2VudGVyVGFnCisgICAgICAg
IHx8IHRva2VuLm5hbWUoKSA9PSBkZXRhaWxzVGFnCisgICAgICAgIHx8IHRva2VuLm5hbWUoKSA9
PSBkaXJUYWcKKyAgICAgICAgfHwgdG9rZW4ubmFtZSgpID09IGRpdlRhZworICAgICAgICB8fCB0
b2tlbi5uYW1lKCkgPT0gZGxUYWcKKyAgICAgICAgfHwgdG9rZW4ubmFtZSgpID09IGZpZWxkc2V0
VGFnCisgICAgICAgIHx8IHRva2VuLm5hbWUoKSA9PSBmaWdjYXB0aW9uVGFnCisgICAgICAgIHx8
IHRva2VuLm5hbWUoKSA9PSBmaWd1cmVUYWcKKyAgICAgICAgfHwgdG9rZW4ubmFtZSgpID09IGZv
b3RlclRhZworICAgICAgICB8fCB0b2tlbi5uYW1lKCkgPT0gaGVhZGVyVGFnCisgICAgICAgIHx8
IHRva2VuLm5hbWUoKSA9PSBoZ3JvdXBUYWcKKyAgICAgICAgfHwgdG9rZW4ubmFtZSgpID09IG1h
aW5UYWcKKyAgICAgICAgfHwgdG9rZW4ubmFtZSgpID09IG1lbnVUYWcKKyAgICAgICAgfHwgdG9r
ZW4ubmFtZSgpID09IG5hdlRhZworICAgICAgICB8fCB0b2tlbi5uYW1lKCkgPT0gb2xUYWcKKyAg
ICAgICAgfHwgdG9rZW4ubmFtZSgpID09IHBUYWcKKyAgICAgICAgfHwgdG9rZW4ubmFtZSgpID09
IHNlY3Rpb25UYWcKKyAgICAgICAgfHwgdG9rZW4ubmFtZSgpID09IHN1bW1hcnlUYWcKKyAgICAg
ICAgfHwgdG9rZW4ubmFtZSgpID09IHVsVGFnKSB7CiAgICAgICAgIHByb2Nlc3NGYWtlUEVuZFRh
Z0lmUEluQnV0dG9uU2NvcGUoKTsKLSAgICAgICAgbV90cmVlLmluc2VydEhUTUxFbGVtZW50KHRv
a2VuKTsKKyAgICAgICAgbV90cmVlLmluc2VydEhUTUxFbGVtZW50KCZ0b2tlbik7CiAgICAgICAg
IHJldHVybjsKICAgICB9Ci0gICAgaWYgKGlzTnVtYmVyZWRIZWFkZXJUYWcodG9rZW4tPm5hbWUo
KSkpIHsKKyAgICBpZiAoaXNOdW1iZXJlZEhlYWRlclRhZyh0b2tlbi5uYW1lKCkpKSB7CiAgICAg
ICAgIHByb2Nlc3NGYWtlUEVuZFRhZ0lmUEluQnV0dG9uU2NvcGUoKTsKICAgICAgICAgaWYgKG1f
dHJlZS5jdXJyZW50U3RhY2tJdGVtKCktPmlzTnVtYmVyZWRIZWFkZXJFbGVtZW50KCkpIHsKICAg
ICAgICAgICAgIHBhcnNlRXJyb3IodG9rZW4pOwogICAgICAgICAgICAgbV90cmVlLm9wZW5FbGVt
ZW50cygpLT5wb3AoKTsKICAgICAgICAgfQotICAgICAgICBtX3RyZWUuaW5zZXJ0SFRNTEVsZW1l
bnQodG9rZW4pOworICAgICAgICBtX3RyZWUuaW5zZXJ0SFRNTEVsZW1lbnQoJnRva2VuKTsKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBpZiAodG9rZW4tPm5hbWUoKSA9PSBwcmVUYWcgfHwg
dG9rZW4tPm5hbWUoKSA9PSBsaXN0aW5nVGFnKSB7CisgICAgaWYgKHRva2VuLm5hbWUoKSA9PSBw
cmVUYWcgfHwgdG9rZW4ubmFtZSgpID09IGxpc3RpbmdUYWcpIHsKICAgICAgICAgcHJvY2Vzc0Zh
a2VQRW5kVGFnSWZQSW5CdXR0b25TY29wZSgpOwotICAgICAgICBtX3RyZWUuaW5zZXJ0SFRNTEVs
ZW1lbnQodG9rZW4pOworICAgICAgICBtX3RyZWUuaW5zZXJ0SFRNTEVsZW1lbnQoJnRva2VuKTsK
ICAgICAgICAgbV9zaG91bGRTa2lwTGVhZGluZ05ld2xpbmUgPSB0cnVlOwogICAgICAgICBtX2Zy
YW1lc2V0T2sgPSBmYWxzZTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBpZiAodG9rZW4t
Pm5hbWUoKSA9PSBmb3JtVGFnKSB7CisgICAgaWYgKHRva2VuLm5hbWUoKSA9PSBmb3JtVGFnKSB7
CiAgICAgICAgIGlmIChtX3RyZWUuZm9ybSgpICYmICFpc1BhcnNpbmdUZW1wbGF0ZUNvbnRlbnRz
KCkpIHsKICAgICAgICAgICAgIHBhcnNlRXJyb3IodG9rZW4pOwogICAgICAgICAgICAgcmV0dXJu
OwogICAgICAgICB9CiAgICAgICAgIHByb2Nlc3NGYWtlUEVuZFRhZ0lmUEluQnV0dG9uU2NvcGUo
KTsKLSAgICAgICAgbV90cmVlLmluc2VydEhUTUxGb3JtRWxlbWVudCh0b2tlbik7CisgICAgICAg
IG1fdHJlZS5pbnNlcnRIVE1MRm9ybUVsZW1lbnQoJnRva2VuKTsKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KLSAgICBpZiAodG9rZW4tPm5hbWUoKSA9PSBsaVRhZykgeworICAgIGlmICh0b2tlbi5u
YW1lKCkgPT0gbGlUYWcpIHsKICAgICAgICAgcHJvY2Vzc0Nsb3NlV2hlbk5lc3RlZFRhZzxpc0xp
Pih0b2tlbik7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgaWYgKHRva2VuLT5uYW1lKCkg
PT0gZGRUYWcgfHwgdG9rZW4tPm5hbWUoKSA9PSBkdFRhZykgeworICAgIGlmICh0b2tlbi5uYW1l
KCkgPT0gZGRUYWcgfHwgdG9rZW4ubmFtZSgpID09IGR0VGFnKSB7CiAgICAgICAgIHByb2Nlc3ND
bG9zZVdoZW5OZXN0ZWRUYWc8aXNEZE9yRHQ+KHRva2VuKTsKICAgICAgICAgcmV0dXJuOwogICAg
IH0KLSAgICBpZiAodG9rZW4tPm5hbWUoKSA9PSBwbGFpbnRleHRUYWcpIHsKKyAgICBpZiAodG9r
ZW4ubmFtZSgpID09IHBsYWludGV4dFRhZykgewogICAgICAgICBwcm9jZXNzRmFrZVBFbmRUYWdJ
ZlBJbkJ1dHRvblNjb3BlKCk7Ci0gICAgICAgIG1fdHJlZS5pbnNlcnRIVE1MRWxlbWVudCh0b2tl
bik7CisgICAgICAgIG1fdHJlZS5pbnNlcnRIVE1MRWxlbWVudCgmdG9rZW4pOwogICAgICAgICBp
ZiAobV9wYXJzZXIudG9rZW5pemVyKCkpCiAgICAgICAgICAgICBtX3BhcnNlci50b2tlbml6ZXIo
KS0+c2V0U3RhdGUoSFRNTFRva2VuaXplcjo6UExBSU5URVhUU3RhdGUpOwogICAgICAgICByZXR1
cm47CiAgICAgfQotICAgIGlmICh0b2tlbi0+bmFtZSgpID09IGJ1dHRvblRhZykgeworICAgIGlm
ICh0b2tlbi5uYW1lKCkgPT0gYnV0dG9uVGFnKSB7CiAgICAgICAgIGlmIChtX3RyZWUub3BlbkVs
ZW1lbnRzKCktPmluU2NvcGUoYnV0dG9uVGFnKSkgewogICAgICAgICAgICAgcGFyc2VFcnJvcih0
b2tlbik7CiAgICAgICAgICAgICBwcm9jZXNzRmFrZUVuZFRhZyhidXR0b25UYWcpOwpAQCAtNzI2
LDExICs3MTUsMTEgQEAgdm9pZCBIVE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NTdGFydFRhZ0Zvcklu
Qm9keShBdG9taWNIVE1MVG9rZW4qIHRva2VuKQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAg
ICB9CiAgICAgICAgIG1fdHJlZS5yZWNvbnN0cnVjdFRoZUFjdGl2ZUZvcm1hdHRpbmdFbGVtZW50
cygpOwotICAgICAgICBtX3RyZWUuaW5zZXJ0SFRNTEVsZW1lbnQodG9rZW4pOworICAgICAgICBt
X3RyZWUuaW5zZXJ0SFRNTEVsZW1lbnQoJnRva2VuKTsKICAgICAgICAgbV9mcmFtZXNldE9rID0g
ZmFsc2U7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgaWYgKHRva2VuLT5uYW1lKCkgPT0g
YVRhZykgeworICAgIGlmICh0b2tlbi5uYW1lKCkgPT0gYVRhZykgewogICAgICAgICBFbGVtZW50
KiBhY3RpdmVBVGFnID0gbV90cmVlLmFjdGl2ZUZvcm1hdHRpbmdFbGVtZW50cygpLT5jbG9zZXN0
RWxlbWVudEluU2NvcGVXaXRoTmFtZShhVGFnLmxvY2FsTmFtZSgpKTsKICAgICAgICAgaWYgKGFj
dGl2ZUFUYWcpIHsKICAgICAgICAgICAgIHBhcnNlRXJyb3IodG9rZW4pOwpAQCAtNzQwLDEyMSAr
NzI5LDExNyBAQCB2b2lkIEhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc1N0YXJ0VGFnRm9ySW5Cb2R5
KEF0b21pY0hUTUxUb2tlbiogdG9rZW4pCiAgICAgICAgICAgICAgICAgbV90cmVlLm9wZW5FbGVt
ZW50cygpLT5yZW1vdmUoYWN0aXZlQVRhZyk7CiAgICAgICAgIH0KICAgICAgICAgbV90cmVlLnJl
Y29uc3RydWN0VGhlQWN0aXZlRm9ybWF0dGluZ0VsZW1lbnRzKCk7Ci0gICAgICAgIG1fdHJlZS5p
bnNlcnRGb3JtYXR0aW5nRWxlbWVudCh0b2tlbik7CisgICAgICAgIG1fdHJlZS5pbnNlcnRGb3Jt
YXR0aW5nRWxlbWVudCgmdG9rZW4pOwogICAgICAgICByZXR1cm47CiAgICAgfQotICAgIGlmIChp
c05vbkFuY2hvck5vbk5vYnJGb3JtYXR0aW5nVGFnKHRva2VuLT5uYW1lKCkpKSB7CisgICAgaWYg
KGlzTm9uQW5jaG9yTm9uTm9ickZvcm1hdHRpbmdUYWcodG9rZW4ubmFtZSgpKSkgewogICAgICAg
ICBtX3RyZWUucmVjb25zdHJ1Y3RUaGVBY3RpdmVGb3JtYXR0aW5nRWxlbWVudHMoKTsKLSAgICAg
ICAgbV90cmVlLmluc2VydEZvcm1hdHRpbmdFbGVtZW50KHRva2VuKTsKKyAgICAgICAgbV90cmVl
Lmluc2VydEZvcm1hdHRpbmdFbGVtZW50KCZ0b2tlbik7CiAgICAgICAgIHJldHVybjsKICAgICB9
Ci0gICAgaWYgKHRva2VuLT5uYW1lKCkgPT0gbm9iclRhZykgeworICAgIGlmICh0b2tlbi5uYW1l
KCkgPT0gbm9iclRhZykgewogICAgICAgICBtX3RyZWUucmVjb25zdHJ1Y3RUaGVBY3RpdmVGb3Jt
YXR0aW5nRWxlbWVudHMoKTsKICAgICAgICAgaWYgKG1fdHJlZS5vcGVuRWxlbWVudHMoKS0+aW5T
Y29wZShub2JyVGFnKSkgewogICAgICAgICAgICAgcGFyc2VFcnJvcih0b2tlbik7CiAgICAgICAg
ICAgICBwcm9jZXNzRmFrZUVuZFRhZyhub2JyVGFnKTsKICAgICAgICAgICAgIG1fdHJlZS5yZWNv
bnN0cnVjdFRoZUFjdGl2ZUZvcm1hdHRpbmdFbGVtZW50cygpOwogICAgICAgICB9Ci0gICAgICAg
IG1fdHJlZS5pbnNlcnRGb3JtYXR0aW5nRWxlbWVudCh0b2tlbik7CisgICAgICAgIG1fdHJlZS5p
bnNlcnRGb3JtYXR0aW5nRWxlbWVudCgmdG9rZW4pOwogICAgICAgICByZXR1cm47CiAgICAgfQot
ICAgIGlmICh0b2tlbi0+bmFtZSgpID09IGFwcGxldFRhZwotICAgICAgICB8fCB0b2tlbi0+bmFt
ZSgpID09IGVtYmVkVGFnCi0gICAgICAgIHx8IHRva2VuLT5uYW1lKCkgPT0gb2JqZWN0VGFnKSB7
CisgICAgaWYgKHRva2VuLm5hbWUoKSA9PSBhcHBsZXRUYWcgfHwgdG9rZW4ubmFtZSgpID09IGVt
YmVkVGFnIHx8IHRva2VuLm5hbWUoKSA9PSBvYmplY3RUYWcpIHsKICAgICAgICAgaWYgKCFwbHVn
aW5Db250ZW50SXNBbGxvd2VkKG1fdHJlZS5wYXJzZXJDb250ZW50UG9saWN5KCkpKQogICAgICAg
ICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBpZiAodG9rZW4tPm5hbWUoKSA9PSBhcHBsZXRUYWcK
LSAgICAgICAgfHwgdG9rZW4tPm5hbWUoKSA9PSBtYXJxdWVlVGFnCi0gICAgICAgIHx8IHRva2Vu
LT5uYW1lKCkgPT0gb2JqZWN0VGFnKSB7CisgICAgaWYgKHRva2VuLm5hbWUoKSA9PSBhcHBsZXRU
YWcgfHwgdG9rZW4ubmFtZSgpID09IG1hcnF1ZWVUYWcgfHwgdG9rZW4ubmFtZSgpID09IG9iamVj
dFRhZykgewogICAgICAgICBtX3RyZWUucmVjb25zdHJ1Y3RUaGVBY3RpdmVGb3JtYXR0aW5nRWxl
bWVudHMoKTsKLSAgICAgICAgbV90cmVlLmluc2VydEhUTUxFbGVtZW50KHRva2VuKTsKKyAgICAg
ICAgbV90cmVlLmluc2VydEhUTUxFbGVtZW50KCZ0b2tlbik7CiAgICAgICAgIG1fdHJlZS5hY3Rp
dmVGb3JtYXR0aW5nRWxlbWVudHMoKS0+YXBwZW5kTWFya2VyKCk7CiAgICAgICAgIG1fZnJhbWVz
ZXRPayA9IGZhbHNlOwogICAgICAgICByZXR1cm47CiAgICAgfQotICAgIGlmICh0b2tlbi0+bmFt
ZSgpID09IHRhYmxlVGFnKSB7CisgICAgaWYgKHRva2VuLm5hbWUoKSA9PSB0YWJsZVRhZykgewog
ICAgICAgICBpZiAoIW1fdHJlZS5pblF1aXJrc01vZGUoKSAmJiBtX3RyZWUub3BlbkVsZW1lbnRz
KCktPmluQnV0dG9uU2NvcGUocFRhZykpCiAgICAgICAgICAgICBwcm9jZXNzRmFrZUVuZFRhZyhw
VGFnKTsKLSAgICAgICAgbV90cmVlLmluc2VydEhUTUxFbGVtZW50KHRva2VuKTsKKyAgICAgICAg
bV90cmVlLmluc2VydEhUTUxFbGVtZW50KCZ0b2tlbik7CiAgICAgICAgIG1fZnJhbWVzZXRPayA9
IGZhbHNlOwotICAgICAgICBzZXRJbnNlcnRpb25Nb2RlKEluc2VydGlvbk1vZGU6OkluVGFibGUp
OworICAgICAgICBtX2luc2VydGlvbk1vZGUgPSBJbnNlcnRpb25Nb2RlOjpJblRhYmxlOwogICAg
ICAgICByZXR1cm47CiAgICAgfQotICAgIGlmICh0b2tlbi0+bmFtZSgpID09IGltYWdlVGFnKSB7
CisgICAgaWYgKHRva2VuLm5hbWUoKSA9PSBpbWFnZVRhZykgewogICAgICAgICBwYXJzZUVycm9y
KHRva2VuKTsKICAgICAgICAgLy8gQXBwYXJlbnRseSB3ZSdyZSBub3Qgc3VwcG9zZWQgdG8gYXNr
LgotICAgICAgICB0b2tlbi0+c2V0TmFtZShpbWdUYWcubG9jYWxOYW1lKCkpOworICAgICAgICB0
b2tlbi5zZXROYW1lKGltZ1RhZy5sb2NhbE5hbWUoKSk7CiAgICAgICAgIC8vIE5vdGUgdGhlIGZh
bGwgdGhyb3VnaCB0byB0aGUgaW1nVGFnIGhhbmRsaW5nIGJlbG93IQogICAgIH0KLSAgICBpZiAo
dG9rZW4tPm5hbWUoKSA9PSBhcmVhVGFnCi0gICAgICAgIHx8IHRva2VuLT5uYW1lKCkgPT0gYnJU
YWcKLSAgICAgICAgfHwgdG9rZW4tPm5hbWUoKSA9PSBlbWJlZFRhZwotICAgICAgICB8fCB0b2tl
bi0+bmFtZSgpID09IGltZ1RhZwotICAgICAgICB8fCB0b2tlbi0+bmFtZSgpID09IGtleWdlblRh
ZwotICAgICAgICB8fCB0b2tlbi0+bmFtZSgpID09IHdiclRhZykgeworICAgIGlmICh0b2tlbi5u
YW1lKCkgPT0gYXJlYVRhZworICAgICAgICB8fCB0b2tlbi5uYW1lKCkgPT0gYnJUYWcKKyAgICAg
ICAgfHwgdG9rZW4ubmFtZSgpID09IGVtYmVkVGFnCisgICAgICAgIHx8IHRva2VuLm5hbWUoKSA9
PSBpbWdUYWcKKyAgICAgICAgfHwgdG9rZW4ubmFtZSgpID09IGtleWdlblRhZworICAgICAgICB8
fCB0b2tlbi5uYW1lKCkgPT0gd2JyVGFnKSB7CiAgICAgICAgIG1fdHJlZS5yZWNvbnN0cnVjdFRo
ZUFjdGl2ZUZvcm1hdHRpbmdFbGVtZW50cygpOwotICAgICAgICBtX3RyZWUuaW5zZXJ0U2VsZkNs
b3NpbmdIVE1MRWxlbWVudCh0b2tlbik7CisgICAgICAgIG1fdHJlZS5pbnNlcnRTZWxmQ2xvc2lu
Z0hUTUxFbGVtZW50KCZ0b2tlbik7CiAgICAgICAgIG1fZnJhbWVzZXRPayA9IGZhbHNlOwogICAg
ICAgICByZXR1cm47CiAgICAgfQotICAgIGlmICh0b2tlbi0+bmFtZSgpID09IGlucHV0VGFnKSB7
Ci0gICAgICAgIEF0dHJpYnV0ZSogdHlwZUF0dHJpYnV0ZSA9IHRva2VuLT5nZXRBdHRyaWJ1dGVJ
dGVtKHR5cGVBdHRyKTsKKyAgICBpZiAodG9rZW4ubmFtZSgpID09IGlucHV0VGFnKSB7CisgICAg
ICAgIEF0dHJpYnV0ZSogdHlwZUF0dHJpYnV0ZSA9IHRva2VuLmdldEF0dHJpYnV0ZUl0ZW0odHlw
ZUF0dHIpOwogICAgICAgICBtX3RyZWUucmVjb25zdHJ1Y3RUaGVBY3RpdmVGb3JtYXR0aW5nRWxl
bWVudHMoKTsKLSAgICAgICAgbV90cmVlLmluc2VydFNlbGZDbG9zaW5nSFRNTEVsZW1lbnQodG9r
ZW4pOworICAgICAgICBtX3RyZWUuaW5zZXJ0U2VsZkNsb3NpbmdIVE1MRWxlbWVudCgmdG9rZW4p
OwogICAgICAgICBpZiAoIXR5cGVBdHRyaWJ1dGUgfHwgIWVxdWFsSWdub3JpbmdDYXNlKHR5cGVB
dHRyaWJ1dGUtPnZhbHVlKCksICJoaWRkZW4iKSkKICAgICAgICAgICAgIG1fZnJhbWVzZXRPayA9
IGZhbHNlOwogICAgICAgICByZXR1cm47CiAgICAgfQotICAgIGlmICh0b2tlbi0+bmFtZSgpID09
IHBhcmFtVGFnCi0gICAgICAgIHx8IHRva2VuLT5uYW1lKCkgPT0gc291cmNlVGFnCi0gICAgICAg
IHx8IHRva2VuLT5uYW1lKCkgPT0gdHJhY2tUYWcpIHsKLSAgICAgICAgbV90cmVlLmluc2VydFNl
bGZDbG9zaW5nSFRNTEVsZW1lbnQodG9rZW4pOworICAgIGlmICh0b2tlbi5uYW1lKCkgPT0gcGFy
YW1UYWcKKyAgICAgICAgfHwgdG9rZW4ubmFtZSgpID09IHNvdXJjZVRhZworICAgICAgICB8fCB0
b2tlbi5uYW1lKCkgPT0gdHJhY2tUYWcpIHsKKyAgICAgICAgbV90cmVlLmluc2VydFNlbGZDbG9z
aW5nSFRNTEVsZW1lbnQoJnRva2VuKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBpZiAo
dG9rZW4tPm5hbWUoKSA9PSBoclRhZykgeworICAgIGlmICh0b2tlbi5uYW1lKCkgPT0gaHJUYWcp
IHsKICAgICAgICAgcHJvY2Vzc0Zha2VQRW5kVGFnSWZQSW5CdXR0b25TY29wZSgpOwotICAgICAg
ICBtX3RyZWUuaW5zZXJ0U2VsZkNsb3NpbmdIVE1MRWxlbWVudCh0b2tlbik7CisgICAgICAgIG1f
dHJlZS5pbnNlcnRTZWxmQ2xvc2luZ0hUTUxFbGVtZW50KCZ0b2tlbik7CiAgICAgICAgIG1fZnJh
bWVzZXRPayA9IGZhbHNlOwogICAgICAgICByZXR1cm47CiAgICAgfQotICAgIGlmICh0b2tlbi0+
bmFtZSgpID09IGlzaW5kZXhUYWcpIHsKKyAgICBpZiAodG9rZW4ubmFtZSgpID09IGlzaW5kZXhU
YWcpIHsKICAgICAgICAgcHJvY2Vzc0lzaW5kZXhTdGFydFRhZ0ZvckluQm9keSh0b2tlbik7CiAg
ICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgaWYgKHRva2VuLT5uYW1lKCkgPT0gdGV4dGFyZWFU
YWcpIHsKLSAgICAgICAgbV90cmVlLmluc2VydEhUTUxFbGVtZW50KHRva2VuKTsKKyAgICBpZiAo
dG9rZW4ubmFtZSgpID09IHRleHRhcmVhVGFnKSB7CisgICAgICAgIG1fdHJlZS5pbnNlcnRIVE1M
RWxlbWVudCgmdG9rZW4pOwogICAgICAgICBtX3Nob3VsZFNraXBMZWFkaW5nTmV3bGluZSA9IHRy
dWU7CiAgICAgICAgIGlmIChtX3BhcnNlci50b2tlbml6ZXIoKSkKICAgICAgICAgICAgIG1fcGFy
c2VyLnRva2VuaXplcigpLT5zZXRTdGF0ZShIVE1MVG9rZW5pemVyOjpSQ0RBVEFTdGF0ZSk7CiAg
ICAgICAgIG1fb3JpZ2luYWxJbnNlcnRpb25Nb2RlID0gbV9pbnNlcnRpb25Nb2RlOwogICAgICAg
ICBtX2ZyYW1lc2V0T2sgPSBmYWxzZTsKLSAgICAgICAgc2V0SW5zZXJ0aW9uTW9kZShJbnNlcnRp
b25Nb2RlOjpUZXh0KTsKKyAgICAgICAgbV9pbnNlcnRpb25Nb2RlID0gSW5zZXJ0aW9uTW9kZTo6
VGV4dDsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBpZiAodG9rZW4tPm5hbWUoKSA9PSB4
bXBUYWcpIHsKKyAgICBpZiAodG9rZW4ubmFtZSgpID09IHhtcFRhZykgewogICAgICAgICBwcm9j
ZXNzRmFrZVBFbmRUYWdJZlBJbkJ1dHRvblNjb3BlKCk7CiAgICAgICAgIG1fdHJlZS5yZWNvbnN0
cnVjdFRoZUFjdGl2ZUZvcm1hdHRpbmdFbGVtZW50cygpOwogICAgICAgICBtX2ZyYW1lc2V0T2sg
PSBmYWxzZTsKICAgICAgICAgcHJvY2Vzc0dlbmVyaWNSYXdUZXh0U3RhcnRUYWcodG9rZW4pOwog
ICAgICAgICByZXR1cm47CiAgICAgfQotICAgIGlmICh0b2tlbi0+bmFtZSgpID09IGlmcmFtZVRh
ZykgeworICAgIGlmICh0b2tlbi5uYW1lKCkgPT0gaWZyYW1lVGFnKSB7CiAgICAgICAgIG1fZnJh
bWVzZXRPayA9IGZhbHNlOwogICAgICAgICBwcm9jZXNzR2VuZXJpY1Jhd1RleHRTdGFydFRhZyh0
b2tlbik7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgaWYgKHRva2VuLT5uYW1lKCkgPT0g
bm9lbWJlZFRhZyAmJiBtX29wdGlvbnMucGx1Z2luc0VuYWJsZWQpIHsKKyAgICBpZiAodG9rZW4u
bmFtZSgpID09IG5vZW1iZWRUYWcgJiYgbV9vcHRpb25zLnBsdWdpbnNFbmFibGVkKSB7CiAgICAg
ICAgIHByb2Nlc3NHZW5lcmljUmF3VGV4dFN0YXJ0VGFnKHRva2VuKTsKICAgICAgICAgcmV0dXJu
OwogICAgIH0KLSAgICBpZiAodG9rZW4tPm5hbWUoKSA9PSBub3NjcmlwdFRhZyAmJiBtX29wdGlv
bnMuc2NyaXB0RW5hYmxlZCkgeworICAgIGlmICh0b2tlbi5uYW1lKCkgPT0gbm9zY3JpcHRUYWcg
JiYgbV9vcHRpb25zLnNjcmlwdEVuYWJsZWQpIHsKICAgICAgICAgcHJvY2Vzc0dlbmVyaWNSYXdU
ZXh0U3RhcnRUYWcodG9rZW4pOwogICAgICAgICByZXR1cm47CiAgICAgfQotICAgIGlmICh0b2tl
bi0+bmFtZSgpID09IHNlbGVjdFRhZykgeworICAgIGlmICh0b2tlbi5uYW1lKCkgPT0gc2VsZWN0
VGFnKSB7CiAgICAgICAgIG1fdHJlZS5yZWNvbnN0cnVjdFRoZUFjdGl2ZUZvcm1hdHRpbmdFbGVt
ZW50cygpOwotICAgICAgICBtX3RyZWUuaW5zZXJ0SFRNTEVsZW1lbnQodG9rZW4pOworICAgICAg
ICBtX3RyZWUuaW5zZXJ0SFRNTEVsZW1lbnQoJnRva2VuKTsKICAgICAgICAgbV9mcmFtZXNldE9r
ID0gZmFsc2U7CiAgICAgICAgIGlmIChtX2luc2VydGlvbk1vZGUgPT0gSW5zZXJ0aW9uTW9kZTo6
SW5UYWJsZQogICAgICAgICAgICAgfHwgbV9pbnNlcnRpb25Nb2RlID09IEluc2VydGlvbk1vZGU6
OkluQ2FwdGlvbgpAQCAtODYyLDg1ICs4NDcsODYgQEAgdm9pZCBIVE1MVHJlZUJ1aWxkZXI6OnBy
b2Nlc3NTdGFydFRhZ0ZvckluQm9keShBdG9taWNIVE1MVG9rZW4qIHRva2VuKQogICAgICAgICAg
ICAgfHwgbV9pbnNlcnRpb25Nb2RlID09IEluc2VydGlvbk1vZGU6OkluVGFibGVCb2R5CiAgICAg
ICAgICAgICB8fCBtX2luc2VydGlvbk1vZGUgPT0gSW5zZXJ0aW9uTW9kZTo6SW5Sb3cKICAgICAg
ICAgICAgIHx8IG1faW5zZXJ0aW9uTW9kZSA9PSBJbnNlcnRpb25Nb2RlOjpJbkNlbGwpCi0gICAg
ICAgICAgICBzZXRJbnNlcnRpb25Nb2RlKEluc2VydGlvbk1vZGU6OkluU2VsZWN0SW5UYWJsZSk7
CisgICAgICAgICAgICBtX2luc2VydGlvbk1vZGUgPSBJbnNlcnRpb25Nb2RlOjpJblNlbGVjdElu
VGFibGU7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHNldEluc2VydGlvbk1vZGUoSW5zZXJ0
aW9uTW9kZTo6SW5TZWxlY3QpOworICAgICAgICAgICAgbV9pbnNlcnRpb25Nb2RlID0gSW5zZXJ0
aW9uTW9kZTo6SW5TZWxlY3Q7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgaWYgKHRva2Vu
LT5uYW1lKCkgPT0gb3B0Z3JvdXBUYWcgfHwgdG9rZW4tPm5hbWUoKSA9PSBvcHRpb25UYWcpIHsK
KyAgICBpZiAodG9rZW4ubmFtZSgpID09IG9wdGdyb3VwVGFnIHx8IHRva2VuLm5hbWUoKSA9PSBv
cHRpb25UYWcpIHsKICAgICAgICAgaWYgKGlzPEhUTUxPcHRpb25FbGVtZW50PigqbV90cmVlLmN1
cnJlbnRTdGFja0l0ZW0oKS0+bm9kZSgpKSkgewogICAgICAgICAgICAgQXRvbWljSFRNTFRva2Vu
IGVuZE9wdGlvbihIVE1MVG9rZW46OkVuZFRhZywgb3B0aW9uVGFnLmxvY2FsTmFtZSgpKTsKLSAg
ICAgICAgICAgIHByb2Nlc3NFbmRUYWcoJmVuZE9wdGlvbik7CisgICAgICAgICAgICBwcm9jZXNz
RW5kVGFnKGVuZE9wdGlvbik7CiAgICAgICAgIH0KICAgICAgICAgbV90cmVlLnJlY29uc3RydWN0
VGhlQWN0aXZlRm9ybWF0dGluZ0VsZW1lbnRzKCk7Ci0gICAgICAgIG1fdHJlZS5pbnNlcnRIVE1M
RWxlbWVudCh0b2tlbik7CisgICAgICAgIG1fdHJlZS5pbnNlcnRIVE1MRWxlbWVudCgmdG9rZW4p
OwogICAgICAgICByZXR1cm47CiAgICAgfQotICAgIGlmICh0b2tlbi0+bmFtZSgpID09IHJiVGFn
IHx8IHRva2VuLT5uYW1lKCkgPT0gcnRjVGFnKSB7CisgICAgaWYgKHRva2VuLm5hbWUoKSA9PSBy
YlRhZyB8fCB0b2tlbi5uYW1lKCkgPT0gcnRjVGFnKSB7CiAgICAgICAgIGlmIChtX3RyZWUub3Bl
bkVsZW1lbnRzKCktPmluU2NvcGUocnVieVRhZy5sb2NhbE5hbWUoKSkpIHsKICAgICAgICAgICAg
IG1fdHJlZS5nZW5lcmF0ZUltcGxpZWRFbmRUYWdzKCk7CiAgICAgICAgICAgICBpZiAoIW1fdHJl
ZS5jdXJyZW50U3RhY2tJdGVtKCktPmhhc1RhZ05hbWUocnVieVRhZykpCiAgICAgICAgICAgICAg
ICAgcGFyc2VFcnJvcih0b2tlbik7CiAgICAgICAgIH0KLSAgICAgICAgbV90cmVlLmluc2VydEhU
TUxFbGVtZW50KHRva2VuKTsKKyAgICAgICAgbV90cmVlLmluc2VydEhUTUxFbGVtZW50KCZ0b2tl
bik7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgaWYgKHRva2VuLT5uYW1lKCkgPT0gcnRU
YWcgfHwgdG9rZW4tPm5hbWUoKSA9PSBycFRhZykgeworICAgIGlmICh0b2tlbi5uYW1lKCkgPT0g
cnRUYWcgfHwgdG9rZW4ubmFtZSgpID09IHJwVGFnKSB7CiAgICAgICAgIGlmIChtX3RyZWUub3Bl
bkVsZW1lbnRzKCktPmluU2NvcGUocnVieVRhZy5sb2NhbE5hbWUoKSkpIHsKICAgICAgICAgICAg
IG1fdHJlZS5nZW5lcmF0ZUltcGxpZWRFbmRUYWdzV2l0aEV4Y2x1c2lvbihydGNUYWcubG9jYWxO
YW1lKCkpOwogICAgICAgICAgICAgaWYgKCFtX3RyZWUuY3VycmVudFN0YWNrSXRlbSgpLT5oYXNU
YWdOYW1lKHJ1YnlUYWcpICYmICFtX3RyZWUuY3VycmVudFN0YWNrSXRlbSgpLT5oYXNUYWdOYW1l
KHJ0Y1RhZykpCiAgICAgICAgICAgICAgICAgcGFyc2VFcnJvcih0b2tlbik7CiAgICAgICAgIH0K
LSAgICAgICAgbV90cmVlLmluc2VydEhUTUxFbGVtZW50KHRva2VuKTsKKyAgICAgICAgbV90cmVl
Lmluc2VydEhUTUxFbGVtZW50KCZ0b2tlbik7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAg
aWYgKHRva2VuLT5uYW1lKCkgPT0gTWF0aE1MTmFtZXM6Om1hdGhUYWcubG9jYWxOYW1lKCkpIHsK
KyAgICBpZiAodG9rZW4ubmFtZSgpID09IE1hdGhNTE5hbWVzOjptYXRoVGFnLmxvY2FsTmFtZSgp
KSB7CiAgICAgICAgIG1fdHJlZS5yZWNvbnN0cnVjdFRoZUFjdGl2ZUZvcm1hdHRpbmdFbGVtZW50
cygpOwotICAgICAgICBhZGp1c3RNYXRoTUxBdHRyaWJ1dGVzKCp0b2tlbik7Ci0gICAgICAgIGFk
anVzdEZvcmVpZ25BdHRyaWJ1dGVzKCp0b2tlbik7Ci0gICAgICAgIG1fdHJlZS5pbnNlcnRGb3Jl
aWduRWxlbWVudCh0b2tlbiwgTWF0aE1MTmFtZXM6Om1hdGhtbE5hbWVzcGFjZVVSSSk7CisgICAg
ICAgIGFkanVzdE1hdGhNTEF0dHJpYnV0ZXModG9rZW4pOworICAgICAgICBhZGp1c3RGb3JlaWdu
QXR0cmlidXRlcyh0b2tlbik7CisgICAgICAgIG1fdHJlZS5pbnNlcnRGb3JlaWduRWxlbWVudCgm
dG9rZW4sIE1hdGhNTE5hbWVzOjptYXRobWxOYW1lc3BhY2VVUkkpOwogICAgICAgICByZXR1cm47
CiAgICAgfQotICAgIGlmICh0b2tlbi0+bmFtZSgpID09IFNWR05hbWVzOjpzdmdUYWcubG9jYWxO
YW1lKCkpIHsKKyAgICBpZiAodG9rZW4ubmFtZSgpID09IFNWR05hbWVzOjpzdmdUYWcubG9jYWxO
YW1lKCkpIHsKICAgICAgICAgbV90cmVlLnJlY29uc3RydWN0VGhlQWN0aXZlRm9ybWF0dGluZ0Vs
ZW1lbnRzKCk7Ci0gICAgICAgIGFkanVzdFNWR0F0dHJpYnV0ZXMoKnRva2VuKTsKLSAgICAgICAg
YWRqdXN0Rm9yZWlnbkF0dHJpYnV0ZXMoKnRva2VuKTsKLSAgICAgICAgbV90cmVlLmluc2VydEZv
cmVpZ25FbGVtZW50KHRva2VuLCBTVkdOYW1lczo6c3ZnTmFtZXNwYWNlVVJJKTsKKyAgICAgICAg
YWRqdXN0U1ZHQXR0cmlidXRlcyh0b2tlbik7CisgICAgICAgIGFkanVzdEZvcmVpZ25BdHRyaWJ1
dGVzKHRva2VuKTsKKyAgICAgICAgbV90cmVlLmluc2VydEZvcmVpZ25FbGVtZW50KCZ0b2tlbiwg
U1ZHTmFtZXM6OnN2Z05hbWVzcGFjZVVSSSk7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAg
aWYgKGlzQ2FwdGlvbkNvbE9yQ29sZ3JvdXBUYWcodG9rZW4tPm5hbWUoKSkKLSAgICAgICAgfHwg
dG9rZW4tPm5hbWUoKSA9PSBmcmFtZVRhZwotICAgICAgICB8fCB0b2tlbi0+bmFtZSgpID09IGhl
YWRUYWcKLSAgICAgICAgfHwgaXNUYWJsZUJvZHlDb250ZXh0VGFnKHRva2VuLT5uYW1lKCkpCi0g
ICAgICAgIHx8IGlzVGFibGVDZWxsQ29udGV4dFRhZyh0b2tlbi0+bmFtZSgpKQotICAgICAgICB8
fCB0b2tlbi0+bmFtZSgpID09IHRyVGFnKSB7CisgICAgaWYgKGlzQ2FwdGlvbkNvbE9yQ29sZ3Jv
dXBUYWcodG9rZW4ubmFtZSgpKQorICAgICAgICB8fCB0b2tlbi5uYW1lKCkgPT0gZnJhbWVUYWcK
KyAgICAgICAgfHwgdG9rZW4ubmFtZSgpID09IGhlYWRUYWcKKyAgICAgICAgfHwgaXNUYWJsZUJv
ZHlDb250ZXh0VGFnKHRva2VuLm5hbWUoKSkKKyAgICAgICAgfHwgaXNUYWJsZUNlbGxDb250ZXh0
VGFnKHRva2VuLm5hbWUoKSkKKyAgICAgICAgfHwgdG9rZW4ubmFtZSgpID09IHRyVGFnKSB7CiAg
ICAgICAgIHBhcnNlRXJyb3IodG9rZW4pOwogICAgICAgICByZXR1cm47CiAgICAgfQogI2lmIEVO
QUJMRShURU1QTEFURV9FTEVNRU5UKQotICAgIGlmICh0b2tlbi0+bmFtZSgpID09IHRlbXBsYXRl
VGFnKSB7CisgICAgaWYgKHRva2VuLm5hbWUoKSA9PSB0ZW1wbGF0ZVRhZykgewogICAgICAgICBw
cm9jZXNzVGVtcGxhdGVTdGFydFRhZyh0b2tlbik7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAj
ZW5kaWYKICAgICBtX3RyZWUucmVjb25zdHJ1Y3RUaGVBY3RpdmVGb3JtYXR0aW5nRWxlbWVudHMo
KTsKLSAgICBtX3RyZWUuaW5zZXJ0SFRNTEVsZW1lbnQodG9rZW4pOworICAgIG1fdHJlZS5pbnNl
cnRIVE1MRWxlbWVudCgmdG9rZW4pOwogfQogCiAjaWYgRU5BQkxFKFRFTVBMQVRFX0VMRU1FTlQp
Ci12b2lkIEhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc1RlbXBsYXRlU3RhcnRUYWcoQXRvbWljSFRN
TFRva2VuKiB0b2tlbikKKwordm9pZCBIVE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NUZW1wbGF0ZVN0
YXJ0VGFnKEF0b21pY0hUTUxUb2tlbiYgdG9rZW4pCiB7CiAgICAgbV90cmVlLmFjdGl2ZUZvcm1h
dHRpbmdFbGVtZW50cygpLT5hcHBlbmRNYXJrZXIoKTsKLSAgICBtX3RyZWUuaW5zZXJ0SFRNTEVs
ZW1lbnQodG9rZW4pOworICAgIG1fdHJlZS5pbnNlcnRIVE1MRWxlbWVudCgmdG9rZW4pOwogICAg
IG1fdGVtcGxhdGVJbnNlcnRpb25Nb2Rlcy5hcHBlbmQoSW5zZXJ0aW9uTW9kZTo6VGVtcGxhdGVD
b250ZW50cyk7Ci0gICAgc2V0SW5zZXJ0aW9uTW9kZShJbnNlcnRpb25Nb2RlOjpUZW1wbGF0ZUNv
bnRlbnRzKTsKKyAgICBtX2luc2VydGlvbk1vZGUgPSBJbnNlcnRpb25Nb2RlOjpUZW1wbGF0ZUNv
bnRlbnRzOwogfQogCi1ib29sIEhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc1RlbXBsYXRlRW5kVGFn
KEF0b21pY0hUTUxUb2tlbiogdG9rZW4pCitib29sIEhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc1Rl
bXBsYXRlRW5kVGFnKEF0b21pY0hUTUxUb2tlbiYgdG9rZW4pCiB7Ci0gICAgQVNTRVJUKHRva2Vu
LT5uYW1lKCkgPT0gdGVtcGxhdGVUYWcubG9jYWxOYW1lKCkpOworICAgIEFTU0VSVCh0b2tlbi5u
YW1lKCkgPT0gdGVtcGxhdGVUYWcubG9jYWxOYW1lKCkpOwogICAgIGlmICghbV90cmVlLm9wZW5F
bGVtZW50cygpLT5oYXNUZW1wbGF0ZUluSFRNTFNjb3BlKCkpIHsKLSAgICAgICAgQVNTRVJUKG1f
dGVtcGxhdGVJbnNlcnRpb25Nb2Rlcy5pc0VtcHR5KCkgfHwgKG1fdGVtcGxhdGVJbnNlcnRpb25N
b2Rlcy5zaXplKCkgPT0gMSAmJiBtX2ZyYWdtZW50Q29udGV4dC5jb250ZXh0RWxlbWVudCgpLT5o
YXNUYWdOYW1lKHRlbXBsYXRlVGFnKSkpOworICAgICAgICBBU1NFUlQobV90ZW1wbGF0ZUluc2Vy
dGlvbk1vZGVzLmlzRW1wdHkoKSB8fCAobV90ZW1wbGF0ZUluc2VydGlvbk1vZGVzLnNpemUoKSA9
PSAxICYmIG1fZnJhZ21lbnRDb250ZXh0LmNvbnRleHRFbGVtZW50KCkuaGFzVGFnTmFtZSh0ZW1w
bGF0ZVRhZykpKTsKICAgICAgICAgcGFyc2VFcnJvcih0b2tlbik7CiAgICAgICAgIHJldHVybiBm
YWxzZTsKICAgICB9CkBAIC05NTQsMTUgKzk0MCwxNiBAQCBib29sIEhUTUxUcmVlQnVpbGRlcjo6
cHJvY2Vzc1RlbXBsYXRlRW5kVGFnKEF0b21pY0hUTUxUb2tlbiogdG9rZW4pCiAgICAgcmV0dXJu
IHRydWU7CiB9CiAKLWJvb2wgSFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNzRW5kT2ZGaWxlRm9ySW5U
ZW1wbGF0ZUNvbnRlbnRzKEF0b21pY0hUTUxUb2tlbiogdG9rZW4pCitib29sIEhUTUxUcmVlQnVp
bGRlcjo6cHJvY2Vzc0VuZE9mRmlsZUZvckluVGVtcGxhdGVDb250ZW50cyhBdG9taWNIVE1MVG9r
ZW4mIHRva2VuKQogewogICAgIEF0b21pY0hUTUxUb2tlbiBlbmRUZW1wbGF0ZShIVE1MVG9rZW46
OkVuZFRhZywgdGVtcGxhdGVUYWcubG9jYWxOYW1lKCkpOwotICAgIGlmICghcHJvY2Vzc1RlbXBs
YXRlRW5kVGFnKCZlbmRUZW1wbGF0ZSkpCisgICAgaWYgKCFwcm9jZXNzVGVtcGxhdGVFbmRUYWco
ZW5kVGVtcGxhdGUpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBwcm9jZXNzRW5kT2ZG
aWxlKHRva2VuKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KKwogI2VuZGlmCiAKIGJvb2wgSFRNTFRy
ZWVCdWlsZGVyOjpwcm9jZXNzQ29sZ3JvdXBFbmRUYWdGb3JJbkNvbHVtbkdyb3VwKCkKQEAgLTk3
OCwxNCArOTY1LDE0IEBAIGJvb2wgSFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNzQ29sZ3JvdXBFbmRU
YWdGb3JJbkNvbHVtbkdyb3VwKCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KICAgICBt
X3RyZWUub3BlbkVsZW1lbnRzKCktPnBvcCgpOwotICAgIHNldEluc2VydGlvbk1vZGUoSW5zZXJ0
aW9uTW9kZTo6SW5UYWJsZSk7CisgICAgbV9pbnNlcnRpb25Nb2RlID0gSW5zZXJ0aW9uTW9kZTo6
SW5UYWJsZTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAogLy8gaHR0cDovL3d3dy53aGF0d2cub3Jn
L3NwZWNzL3dlYi1hcHBzL2N1cnJlbnQtd29yay9tdWx0aXBhZ2UvdG9rZW5pemF0aW9uLmh0bWwj
Y2xvc2UtdGhlLWNlbGwKIHZvaWQgSFRNTFRyZWVCdWlsZGVyOjpjbG9zZVRoZUNlbGwoKQogewot
ICAgIEFTU0VSVChpbnNlcnRpb25Nb2RlKCkgPT0gSW5zZXJ0aW9uTW9kZTo6SW5DZWxsKTsKKyAg
ICBBU1NFUlQobV9pbnNlcnRpb25Nb2RlID09IEluc2VydGlvbk1vZGU6OkluQ2VsbCk7CiAgICAg
aWYgKG1fdHJlZS5vcGVuRWxlbWVudHMoKS0+aW5UYWJsZVNjb3BlKHRkVGFnKSkgewogICAgICAg
ICBBU1NFUlQoIW1fdHJlZS5vcGVuRWxlbWVudHMoKS0+aW5UYWJsZVNjb3BlKHRoVGFnKSk7CiAg
ICAgICAgIHByb2Nlc3NGYWtlRW5kVGFnKHRkVGFnKTsKQEAgLTk5Myw0NSArOTgwLDQ1IEBAIHZv
aWQgSFRNTFRyZWVCdWlsZGVyOjpjbG9zZVRoZUNlbGwoKQogICAgIH0KICAgICBBU1NFUlQobV90
cmVlLm9wZW5FbGVtZW50cygpLT5pblRhYmxlU2NvcGUodGhUYWcpKTsKICAgICBwcm9jZXNzRmFr
ZUVuZFRhZyh0aFRhZyk7Ci0gICAgQVNTRVJUKGluc2VydGlvbk1vZGUoKSA9PSBJbnNlcnRpb25N
b2RlOjpJblJvdyk7CisgICAgQVNTRVJUKG1faW5zZXJ0aW9uTW9kZSA9PSBJbnNlcnRpb25Nb2Rl
OjpJblJvdyk7CiB9CiAKLXZvaWQgSFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNzU3RhcnRUYWdGb3JJ
blRhYmxlKEF0b21pY0hUTUxUb2tlbiogdG9rZW4pCit2b2lkIEhUTUxUcmVlQnVpbGRlcjo6cHJv
Y2Vzc1N0YXJ0VGFnRm9ySW5UYWJsZShBdG9taWNIVE1MVG9rZW4mIHRva2VuKQogewotICAgIEFT
U0VSVCh0b2tlbi0+dHlwZSgpID09IEhUTUxUb2tlbjo6U3RhcnRUYWcpOwotICAgIGlmICh0b2tl
bi0+bmFtZSgpID09IGNhcHRpb25UYWcpIHsKKyAgICBBU1NFUlQodG9rZW4udHlwZSgpID09IEhU
TUxUb2tlbjo6U3RhcnRUYWcpOworICAgIGlmICh0b2tlbi5uYW1lKCkgPT0gY2FwdGlvblRhZykg
ewogICAgICAgICBtX3RyZWUub3BlbkVsZW1lbnRzKCktPnBvcFVudGlsVGFibGVTY29wZU1hcmtl
cigpOwogICAgICAgICBtX3RyZWUuYWN0aXZlRm9ybWF0dGluZ0VsZW1lbnRzKCktPmFwcGVuZE1h
cmtlcigpOwotICAgICAgICBtX3RyZWUuaW5zZXJ0SFRNTEVsZW1lbnQodG9rZW4pOwotICAgICAg
ICBzZXRJbnNlcnRpb25Nb2RlKEluc2VydGlvbk1vZGU6OkluQ2FwdGlvbik7CisgICAgICAgIG1f
dHJlZS5pbnNlcnRIVE1MRWxlbWVudCgmdG9rZW4pOworICAgICAgICBtX2luc2VydGlvbk1vZGUg
PSBJbnNlcnRpb25Nb2RlOjpJbkNhcHRpb247CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAg
aWYgKHRva2VuLT5uYW1lKCkgPT0gY29sZ3JvdXBUYWcpIHsKKyAgICBpZiAodG9rZW4ubmFtZSgp
ID09IGNvbGdyb3VwVGFnKSB7CiAgICAgICAgIG1fdHJlZS5vcGVuRWxlbWVudHMoKS0+cG9wVW50
aWxUYWJsZVNjb3BlTWFya2VyKCk7Ci0gICAgICAgIG1fdHJlZS5pbnNlcnRIVE1MRWxlbWVudCh0
b2tlbik7Ci0gICAgICAgIHNldEluc2VydGlvbk1vZGUoSW5zZXJ0aW9uTW9kZTo6SW5Db2x1bW5H
cm91cCk7CisgICAgICAgIG1fdHJlZS5pbnNlcnRIVE1MRWxlbWVudCgmdG9rZW4pOworICAgICAg
ICBtX2luc2VydGlvbk1vZGUgPSBJbnNlcnRpb25Nb2RlOjpJbkNvbHVtbkdyb3VwOwogICAgICAg
ICByZXR1cm47CiAgICAgfQotICAgIGlmICh0b2tlbi0+bmFtZSgpID09IGNvbFRhZykgeworICAg
IGlmICh0b2tlbi5uYW1lKCkgPT0gY29sVGFnKSB7CiAgICAgICAgIHByb2Nlc3NGYWtlU3RhcnRU
YWcoY29sZ3JvdXBUYWcpOwotICAgICAgICBBU1NFUlQoaW5zZXJ0aW9uTW9kZSgpID09IEluc2Vy
dGlvbk1vZGU6OkluQ29sdW1uR3JvdXApOworICAgICAgICBBU1NFUlQobV9pbnNlcnRpb25Nb2Rl
ID09IEluc2VydGlvbk1vZGU6OkluQ29sdW1uR3JvdXApOwogICAgICAgICBwcm9jZXNzU3RhcnRU
YWcodG9rZW4pOwogICAgICAgICByZXR1cm47CiAgICAgfQotICAgIGlmIChpc1RhYmxlQm9keUNv
bnRleHRUYWcodG9rZW4tPm5hbWUoKSkpIHsKKyAgICBpZiAoaXNUYWJsZUJvZHlDb250ZXh0VGFn
KHRva2VuLm5hbWUoKSkpIHsKICAgICAgICAgbV90cmVlLm9wZW5FbGVtZW50cygpLT5wb3BVbnRp
bFRhYmxlU2NvcGVNYXJrZXIoKTsKLSAgICAgICAgbV90cmVlLmluc2VydEhUTUxFbGVtZW50KHRv
a2VuKTsKLSAgICAgICAgc2V0SW5zZXJ0aW9uTW9kZShJbnNlcnRpb25Nb2RlOjpJblRhYmxlQm9k
eSk7CisgICAgICAgIG1fdHJlZS5pbnNlcnRIVE1MRWxlbWVudCgmdG9rZW4pOworICAgICAgICBt
X2luc2VydGlvbk1vZGUgPSBJbnNlcnRpb25Nb2RlOjpJblRhYmxlQm9keTsKICAgICAgICAgcmV0
dXJuOwogICAgIH0KLSAgICBpZiAoaXNUYWJsZUNlbGxDb250ZXh0VGFnKHRva2VuLT5uYW1lKCkp
Ci0gICAgICAgIHx8IHRva2VuLT5uYW1lKCkgPT0gdHJUYWcpIHsKKyAgICBpZiAoaXNUYWJsZUNl
bGxDb250ZXh0VGFnKHRva2VuLm5hbWUoKSkKKyAgICAgICAgfHwgdG9rZW4ubmFtZSgpID09IHRy
VGFnKSB7CiAgICAgICAgIHByb2Nlc3NGYWtlU3RhcnRUYWcodGJvZHlUYWcpOwotICAgICAgICBB
U1NFUlQoaW5zZXJ0aW9uTW9kZSgpID09IEluc2VydGlvbk1vZGU6OkluVGFibGVCb2R5KTsKKyAg
ICAgICAgQVNTRVJUKG1faW5zZXJ0aW9uTW9kZSA9PSBJbnNlcnRpb25Nb2RlOjpJblRhYmxlQm9k
eSk7CiAgICAgICAgIHByb2Nlc3NTdGFydFRhZyh0b2tlbik7CiAgICAgICAgIHJldHVybjsKICAg
ICB9Ci0gICAgaWYgKHRva2VuLT5uYW1lKCkgPT0gdGFibGVUYWcpIHsKKyAgICBpZiAodG9rZW4u
bmFtZSgpID09IHRhYmxlVGFnKSB7CiAgICAgICAgIHBhcnNlRXJyb3IodG9rZW4pOwogICAgICAg
ICBpZiAoIXByb2Nlc3NUYWJsZUVuZFRhZ0ZvckluVGFibGUoKSkgewogICAgICAgICAgICAgQVNT
RVJUKGlzUGFyc2luZ0ZyYWdtZW50T3JUZW1wbGF0ZUNvbnRlbnRzKCkpOwpAQCAtMTA0MCwyOSAr
MTAyNywyOSBAQCB2b2lkIEhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc1N0YXJ0VGFnRm9ySW5UYWJs
ZShBdG9taWNIVE1MVG9rZW4qIHRva2VuKQogICAgICAgICBwcm9jZXNzU3RhcnRUYWcodG9rZW4p
OwogICAgICAgICByZXR1cm47CiAgICAgfQotICAgIGlmICh0b2tlbi0+bmFtZSgpID09IHN0eWxl
VGFnIHx8IHRva2VuLT5uYW1lKCkgPT0gc2NyaXB0VGFnKSB7CisgICAgaWYgKHRva2VuLm5hbWUo
KSA9PSBzdHlsZVRhZyB8fCB0b2tlbi5uYW1lKCkgPT0gc2NyaXB0VGFnKSB7CiAgICAgICAgIHBy
b2Nlc3NTdGFydFRhZ0ZvckluSGVhZCh0b2tlbik7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0g
ICAgaWYgKHRva2VuLT5uYW1lKCkgPT0gaW5wdXRUYWcpIHsKLSAgICAgICAgQXR0cmlidXRlKiB0
eXBlQXR0cmlidXRlID0gdG9rZW4tPmdldEF0dHJpYnV0ZUl0ZW0odHlwZUF0dHIpOworICAgIGlm
ICh0b2tlbi5uYW1lKCkgPT0gaW5wdXRUYWcpIHsKKyAgICAgICAgQXR0cmlidXRlKiB0eXBlQXR0
cmlidXRlID0gdG9rZW4uZ2V0QXR0cmlidXRlSXRlbSh0eXBlQXR0cik7CiAgICAgICAgIGlmICh0
eXBlQXR0cmlidXRlICYmIGVxdWFsSWdub3JpbmdDYXNlKHR5cGVBdHRyaWJ1dGUtPnZhbHVlKCks
ICJoaWRkZW4iKSkgewogICAgICAgICAgICAgcGFyc2VFcnJvcih0b2tlbik7Ci0gICAgICAgICAg
ICBtX3RyZWUuaW5zZXJ0U2VsZkNsb3NpbmdIVE1MRWxlbWVudCh0b2tlbik7CisgICAgICAgICAg
ICBtX3RyZWUuaW5zZXJ0U2VsZkNsb3NpbmdIVE1MRWxlbWVudCgmdG9rZW4pOwogICAgICAgICAg
ICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgICAgIC8vIEZhbGwgdGhyb3VnaCB0byAiYW55dGhp
bmcgZWxzZSIgY2FzZS4KICAgICB9Ci0gICAgaWYgKHRva2VuLT5uYW1lKCkgPT0gZm9ybVRhZykg
eworICAgIGlmICh0b2tlbi5uYW1lKCkgPT0gZm9ybVRhZykgewogICAgICAgICBwYXJzZUVycm9y
KHRva2VuKTsKICAgICAgICAgaWYgKG1fdHJlZS5mb3JtKCkgJiYgIWlzUGFyc2luZ1RlbXBsYXRl
Q29udGVudHMoKSkKICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgbV90cmVlLmluc2VydEhU
TUxGb3JtRWxlbWVudCh0b2tlbiwgdHJ1ZSk7CisgICAgICAgIG1fdHJlZS5pbnNlcnRIVE1MRm9y
bUVsZW1lbnQoJnRva2VuLCB0cnVlKTsKICAgICAgICAgbV90cmVlLm9wZW5FbGVtZW50cygpLT5w
b3AoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICNpZiBFTkFCTEUoVEVNUExBVEVfRUxFTUVO
VCkKLSAgICBpZiAodG9rZW4tPm5hbWUoKSA9PSB0ZW1wbGF0ZVRhZykgeworICAgIGlmICh0b2tl
bi5uYW1lKCkgPT0gdGVtcGxhdGVUYWcpIHsKICAgICAgICAgcHJvY2Vzc1RlbXBsYXRlU3RhcnRU
YWcodG9rZW4pOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtMTA3Miw3MSArMTA1OSw3MCBA
QCB2b2lkIEhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc1N0YXJ0VGFnRm9ySW5UYWJsZShBdG9taWNI
VE1MVG9rZW4qIHRva2VuKQogICAgIHByb2Nlc3NTdGFydFRhZ0ZvckluQm9keSh0b2tlbik7CiB9
CiAKLXZvaWQgSFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNzU3RhcnRUYWcoQXRvbWljSFRNTFRva2Vu
KiB0b2tlbikKK3ZvaWQgSFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNzU3RhcnRUYWcoQXRvbWljSFRN
TFRva2VuJiB0b2tlbikKIHsKLSAgICBBU1NFUlQodG9rZW4tPnR5cGUoKSA9PSBIVE1MVG9rZW46
OlN0YXJ0VGFnKTsKLSAgICBzd2l0Y2ggKGluc2VydGlvbk1vZGUoKSkgeworICAgIEFTU0VSVCh0
b2tlbi50eXBlKCkgPT0gSFRNTFRva2VuOjpTdGFydFRhZyk7CisgICAgc3dpdGNoIChtX2luc2Vy
dGlvbk1vZGUpIHsKICAgICBjYXNlIEluc2VydGlvbk1vZGU6OkluaXRpYWw6Ci0gICAgICAgIEFT
U0VSVChpbnNlcnRpb25Nb2RlKCkgPT0gSW5zZXJ0aW9uTW9kZTo6SW5pdGlhbCk7CiAgICAgICAg
IGRlZmF1bHRGb3JJbml0aWFsKCk7CisgICAgICAgIEFTU0VSVChtX2luc2VydGlvbk1vZGUgPT0g
SW5zZXJ0aW9uTW9kZTo6QmVmb3JlSFRNTCk7CiAgICAgICAgIEZBTExUSFJPVUdIOwogICAgIGNh
c2UgSW5zZXJ0aW9uTW9kZTo6QmVmb3JlSFRNTDoKLSAgICAgICAgQVNTRVJUKGluc2VydGlvbk1v
ZGUoKSA9PSBJbnNlcnRpb25Nb2RlOjpCZWZvcmVIVE1MKTsKLSAgICAgICAgaWYgKHRva2VuLT5u
YW1lKCkgPT0gaHRtbFRhZykgewotICAgICAgICAgICAgbV90cmVlLmluc2VydEhUTUxIdG1sU3Rh
cnRUYWdCZWZvcmVIVE1MKHRva2VuKTsKLSAgICAgICAgICAgIHNldEluc2VydGlvbk1vZGUoSW5z
ZXJ0aW9uTW9kZTo6QmVmb3JlSGVhZCk7CisgICAgICAgIGlmICh0b2tlbi5uYW1lKCkgPT0gaHRt
bFRhZykgeworICAgICAgICAgICAgbV90cmVlLmluc2VydEhUTUxIdG1sU3RhcnRUYWdCZWZvcmVI
VE1MKCZ0b2tlbik7CisgICAgICAgICAgICBtX2luc2VydGlvbk1vZGUgPSBJbnNlcnRpb25Nb2Rl
OjpCZWZvcmVIZWFkOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgICAgIGRl
ZmF1bHRGb3JCZWZvcmVIVE1MKCk7CisgICAgICAgIEFTU0VSVChtX2luc2VydGlvbk1vZGUgPT0g
SW5zZXJ0aW9uTW9kZTo6QmVmb3JlSGVhZCk7CiAgICAgICAgIEZBTExUSFJPVUdIOwogICAgIGNh
c2UgSW5zZXJ0aW9uTW9kZTo6QmVmb3JlSGVhZDoKLSAgICAgICAgQVNTRVJUKGluc2VydGlvbk1v
ZGUoKSA9PSBJbnNlcnRpb25Nb2RlOjpCZWZvcmVIZWFkKTsKLSAgICAgICAgaWYgKHRva2VuLT5u
YW1lKCkgPT0gaHRtbFRhZykgeworICAgICAgICBpZiAodG9rZW4ubmFtZSgpID09IGh0bWxUYWcp
IHsKICAgICAgICAgICAgIHByb2Nlc3NIdG1sU3RhcnRUYWdGb3JJbkJvZHkodG9rZW4pOwogICAg
ICAgICAgICAgcmV0dXJuOwogICAgICAgICB9Ci0gICAgICAgIGlmICh0b2tlbi0+bmFtZSgpID09
IGhlYWRUYWcpIHsKLSAgICAgICAgICAgIG1fdHJlZS5pbnNlcnRIVE1MSGVhZEVsZW1lbnQodG9r
ZW4pOwotICAgICAgICAgICAgc2V0SW5zZXJ0aW9uTW9kZShJbnNlcnRpb25Nb2RlOjpJbkhlYWQp
OworICAgICAgICBpZiAodG9rZW4ubmFtZSgpID09IGhlYWRUYWcpIHsKKyAgICAgICAgICAgIG1f
dHJlZS5pbnNlcnRIVE1MSGVhZEVsZW1lbnQoJnRva2VuKTsKKyAgICAgICAgICAgIG1faW5zZXJ0
aW9uTW9kZSA9IEluc2VydGlvbk1vZGU6OkluSGVhZDsKICAgICAgICAgICAgIHJldHVybjsKICAg
ICAgICAgfQogICAgICAgICBkZWZhdWx0Rm9yQmVmb3JlSGVhZCgpOworICAgICAgICBBU1NFUlQo
bV9pbnNlcnRpb25Nb2RlID09IEluc2VydGlvbk1vZGU6OkluSGVhZCk7CiAgICAgICAgIEZBTExU
SFJPVUdIOwogICAgIGNhc2UgSW5zZXJ0aW9uTW9kZTo6SW5IZWFkOgotICAgICAgICBBU1NFUlQo
aW5zZXJ0aW9uTW9kZSgpID09IEluc2VydGlvbk1vZGU6OkluSGVhZCk7CiAgICAgICAgIGlmIChw
cm9jZXNzU3RhcnRUYWdGb3JJbkhlYWQodG9rZW4pKQogICAgICAgICAgICAgcmV0dXJuOwogICAg
ICAgICBkZWZhdWx0Rm9ySW5IZWFkKCk7CisgICAgICAgIEFTU0VSVChtX2luc2VydGlvbk1vZGUg
PT0gSW5zZXJ0aW9uTW9kZTo6QWZ0ZXJIZWFkKTsKICAgICAgICAgRkFMTFRIUk9VR0g7CiAgICAg
Y2FzZSBJbnNlcnRpb25Nb2RlOjpBZnRlckhlYWQ6Ci0gICAgICAgIEFTU0VSVChpbnNlcnRpb25N
b2RlKCkgPT0gSW5zZXJ0aW9uTW9kZTo6QWZ0ZXJIZWFkKTsKLSAgICAgICAgaWYgKHRva2VuLT5u
YW1lKCkgPT0gaHRtbFRhZykgeworICAgICAgICBpZiAodG9rZW4ubmFtZSgpID09IGh0bWxUYWcp
IHsKICAgICAgICAgICAgIHByb2Nlc3NIdG1sU3RhcnRUYWdGb3JJbkJvZHkodG9rZW4pOwogICAg
ICAgICAgICAgcmV0dXJuOwogICAgICAgICB9Ci0gICAgICAgIGlmICh0b2tlbi0+bmFtZSgpID09
IGJvZHlUYWcpIHsKKyAgICAgICAgaWYgKHRva2VuLm5hbWUoKSA9PSBib2R5VGFnKSB7CiAgICAg
ICAgICAgICBtX2ZyYW1lc2V0T2sgPSBmYWxzZTsKLSAgICAgICAgICAgIG1fdHJlZS5pbnNlcnRI
VE1MQm9keUVsZW1lbnQodG9rZW4pOwotICAgICAgICAgICAgc2V0SW5zZXJ0aW9uTW9kZShJbnNl
cnRpb25Nb2RlOjpJbkJvZHkpOworICAgICAgICAgICAgbV90cmVlLmluc2VydEhUTUxCb2R5RWxl
bWVudCgmdG9rZW4pOworICAgICAgICAgICAgbV9pbnNlcnRpb25Nb2RlID0gSW5zZXJ0aW9uTW9k
ZTo6SW5Cb2R5OwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9Ci0gICAgICAgIGlmICh0
b2tlbi0+bmFtZSgpID09IGZyYW1lc2V0VGFnKSB7Ci0gICAgICAgICAgICBtX3RyZWUuaW5zZXJ0
SFRNTEVsZW1lbnQodG9rZW4pOwotICAgICAgICAgICAgc2V0SW5zZXJ0aW9uTW9kZShJbnNlcnRp
b25Nb2RlOjpJbkZyYW1lc2V0KTsKKyAgICAgICAgaWYgKHRva2VuLm5hbWUoKSA9PSBmcmFtZXNl
dFRhZykgeworICAgICAgICAgICAgbV90cmVlLmluc2VydEhUTUxFbGVtZW50KCZ0b2tlbik7Cisg
ICAgICAgICAgICBtX2luc2VydGlvbk1vZGUgPSBJbnNlcnRpb25Nb2RlOjpJbkZyYW1lc2V0Owog
ICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9Ci0gICAgICAgIGlmICh0b2tlbi0+bmFtZSgp
ID09IGJhc2VUYWcKLSAgICAgICAgICAgIHx8IHRva2VuLT5uYW1lKCkgPT0gYmFzZWZvbnRUYWcK
LSAgICAgICAgICAgIHx8IHRva2VuLT5uYW1lKCkgPT0gYmdzb3VuZFRhZwotICAgICAgICAgICAg
fHwgdG9rZW4tPm5hbWUoKSA9PSBsaW5rVGFnCi0gICAgICAgICAgICB8fCB0b2tlbi0+bmFtZSgp
ID09IG1ldGFUYWcKLSAgICAgICAgICAgIHx8IHRva2VuLT5uYW1lKCkgPT0gbm9mcmFtZXNUYWcK
LSAgICAgICAgICAgIHx8IHRva2VuLT5uYW1lKCkgPT0gc2NyaXB0VGFnCi0gICAgICAgICAgICB8
fCB0b2tlbi0+bmFtZSgpID09IHN0eWxlVGFnCisgICAgICAgIGlmICh0b2tlbi5uYW1lKCkgPT0g
YmFzZVRhZworICAgICAgICAgICAgfHwgdG9rZW4ubmFtZSgpID09IGJhc2Vmb250VGFnCisgICAg
ICAgICAgICB8fCB0b2tlbi5uYW1lKCkgPT0gYmdzb3VuZFRhZworICAgICAgICAgICAgfHwgdG9r
ZW4ubmFtZSgpID09IGxpbmtUYWcKKyAgICAgICAgICAgIHx8IHRva2VuLm5hbWUoKSA9PSBtZXRh
VGFnCisgICAgICAgICAgICB8fCB0b2tlbi5uYW1lKCkgPT0gbm9mcmFtZXNUYWcKKyAgICAgICAg
ICAgIHx8IHRva2VuLm5hbWUoKSA9PSBzY3JpcHRUYWcKKyAgICAgICAgICAgIHx8IHRva2VuLm5h
bWUoKSA9PSBzdHlsZVRhZwogI2lmIEVOQUJMRShURU1QTEFURV9FTEVNRU5UKQotICAgICAgICAg
ICAgfHwgdG9rZW4tPm5hbWUoKSA9PSB0ZW1wbGF0ZVRhZworICAgICAgICAgICAgfHwgdG9rZW4u
bmFtZSgpID09IHRlbXBsYXRlVGFnCiAjZW5kaWYKLSAgICAgICAgICAgIHx8IHRva2VuLT5uYW1l
KCkgPT0gdGl0bGVUYWcpIHsKKyAgICAgICAgICAgIHx8IHRva2VuLm5hbWUoKSA9PSB0aXRsZVRh
ZykgewogICAgICAgICAgICAgcGFyc2VFcnJvcih0b2tlbik7CiAgICAgICAgICAgICBBU1NFUlQo
bV90cmVlLmhlYWQoKSk7CiAgICAgICAgICAgICBtX3RyZWUub3BlbkVsZW1lbnRzKCktPnB1c2hI
VE1MSGVhZEVsZW1lbnQobV90cmVlLmhlYWRTdGFja0l0ZW0oKSk7CkBAIC0xMTQ0LDI2ICsxMTMw
LDI1IEBAIHZvaWQgSFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNzU3RhcnRUYWcoQXRvbWljSFRNTFRv
a2VuKiB0b2tlbikKICAgICAgICAgICAgIG1fdHJlZS5vcGVuRWxlbWVudHMoKS0+cmVtb3ZlSFRN
TEhlYWRFbGVtZW50KG1fdHJlZS5oZWFkKCkpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAg
ICB9Ci0gICAgICAgIGlmICh0b2tlbi0+bmFtZSgpID09IGhlYWRUYWcpIHsKKyAgICAgICAgaWYg
KHRva2VuLm5hbWUoKSA9PSBoZWFkVGFnKSB7CiAgICAgICAgICAgICBwYXJzZUVycm9yKHRva2Vu
KTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgICAgICBkZWZhdWx0Rm9yQWZ0
ZXJIZWFkKCk7CisgICAgICAgIEFTU0VSVChtX2luc2VydGlvbk1vZGUgPT0gSW5zZXJ0aW9uTW9k
ZTo6SW5Cb2R5KTsKICAgICAgICAgRkFMTFRIUk9VR0g7CiAgICAgY2FzZSBJbnNlcnRpb25Nb2Rl
OjpJbkJvZHk6Ci0gICAgICAgIEFTU0VSVChpbnNlcnRpb25Nb2RlKCkgPT0gSW5zZXJ0aW9uTW9k
ZTo6SW5Cb2R5KTsKICAgICAgICAgcHJvY2Vzc1N0YXJ0VGFnRm9ySW5Cb2R5KHRva2VuKTsKKyAg
ICAgICAgQVNTRVJUKG1faW5zZXJ0aW9uTW9kZSA9PSBJbnNlcnRpb25Nb2RlOjpJblRhYmxlKTsK
ICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBJbnNlcnRpb25Nb2RlOjpJblRhYmxlOgotICAgICAg
ICBBU1NFUlQoaW5zZXJ0aW9uTW9kZSgpID09IEluc2VydGlvbk1vZGU6OkluVGFibGUpOwogICAg
ICAgICBwcm9jZXNzU3RhcnRUYWdGb3JJblRhYmxlKHRva2VuKTsKICAgICAgICAgYnJlYWs7CiAg
ICAgY2FzZSBJbnNlcnRpb25Nb2RlOjpJbkNhcHRpb246Ci0gICAgICAgIEFTU0VSVChpbnNlcnRp
b25Nb2RlKCkgPT0gSW5zZXJ0aW9uTW9kZTo6SW5DYXB0aW9uKTsKLSAgICAgICAgaWYgKGlzQ2Fw
dGlvbkNvbE9yQ29sZ3JvdXBUYWcodG9rZW4tPm5hbWUoKSkKLSAgICAgICAgICAgIHx8IGlzVGFi
bGVCb2R5Q29udGV4dFRhZyh0b2tlbi0+bmFtZSgpKQotICAgICAgICAgICAgfHwgaXNUYWJsZUNl
bGxDb250ZXh0VGFnKHRva2VuLT5uYW1lKCkpCi0gICAgICAgICAgICB8fCB0b2tlbi0+bmFtZSgp
ID09IHRyVGFnKSB7CisgICAgICAgIGlmIChpc0NhcHRpb25Db2xPckNvbGdyb3VwVGFnKHRva2Vu
Lm5hbWUoKSkKKyAgICAgICAgICAgIHx8IGlzVGFibGVCb2R5Q29udGV4dFRhZyh0b2tlbi5uYW1l
KCkpCisgICAgICAgICAgICB8fCBpc1RhYmxlQ2VsbENvbnRleHRUYWcodG9rZW4ubmFtZSgpKQor
ICAgICAgICAgICAgfHwgdG9rZW4ubmFtZSgpID09IHRyVGFnKSB7CiAgICAgICAgICAgICBwYXJz
ZUVycm9yKHRva2VuKTsKICAgICAgICAgICAgIGlmICghcHJvY2Vzc0NhcHRpb25FbmRUYWdGb3JJ
bkNhcHRpb24oKSkgewogICAgICAgICAgICAgICAgIEFTU0VSVChpc1BhcnNpbmdGcmFnbWVudCgp
KTsKQEAgLTExNzUsMTcgKzExNjAsMTYgQEAgdm9pZCBIVE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NT
dGFydFRhZyhBdG9taWNIVE1MVG9rZW4qIHRva2VuKQogICAgICAgICBwcm9jZXNzU3RhcnRUYWdG
b3JJbkJvZHkodG9rZW4pOwogICAgICAgICBicmVhazsKICAgICBjYXNlIEluc2VydGlvbk1vZGU6
OkluQ29sdW1uR3JvdXA6Ci0gICAgICAgIEFTU0VSVChpbnNlcnRpb25Nb2RlKCkgPT0gSW5zZXJ0
aW9uTW9kZTo6SW5Db2x1bW5Hcm91cCk7Ci0gICAgICAgIGlmICh0b2tlbi0+bmFtZSgpID09IGh0
bWxUYWcpIHsKKyAgICAgICAgaWYgKHRva2VuLm5hbWUoKSA9PSBodG1sVGFnKSB7CiAgICAgICAg
ICAgICBwcm9jZXNzSHRtbFN0YXJ0VGFnRm9ySW5Cb2R5KHRva2VuKTsKICAgICAgICAgICAgIHJl
dHVybjsKICAgICAgICAgfQotICAgICAgICBpZiAodG9rZW4tPm5hbWUoKSA9PSBjb2xUYWcpIHsK
LSAgICAgICAgICAgIG1fdHJlZS5pbnNlcnRTZWxmQ2xvc2luZ0hUTUxFbGVtZW50KHRva2VuKTsK
KyAgICAgICAgaWYgKHRva2VuLm5hbWUoKSA9PSBjb2xUYWcpIHsKKyAgICAgICAgICAgIG1fdHJl
ZS5pbnNlcnRTZWxmQ2xvc2luZ0hUTUxFbGVtZW50KCZ0b2tlbik7CiAgICAgICAgICAgICByZXR1
cm47CiAgICAgICAgIH0KICNpZiBFTkFCTEUoVEVNUExBVEVfRUxFTUVOVCkKLSAgICAgICAgaWYg
KHRva2VuLT5uYW1lKCkgPT0gdGVtcGxhdGVUYWcpIHsKKyAgICAgICAgaWYgKHRva2VuLm5hbWUo
KSA9PSB0ZW1wbGF0ZVRhZykgewogICAgICAgICAgICAgcHJvY2Vzc1RlbXBsYXRlU3RhcnRUYWco
dG9rZW4pOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CkBAIC0xMTk3LDIxICsxMTgx
LDIwIEBAIHZvaWQgSFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNzU3RhcnRUYWcoQXRvbWljSFRNTFRv
a2VuKiB0b2tlbikKICAgICAgICAgcHJvY2Vzc1N0YXJ0VGFnKHRva2VuKTsKICAgICAgICAgYnJl
YWs7CiAgICAgY2FzZSBJbnNlcnRpb25Nb2RlOjpJblRhYmxlQm9keToKLSAgICAgICAgQVNTRVJU
KGluc2VydGlvbk1vZGUoKSA9PSBJbnNlcnRpb25Nb2RlOjpJblRhYmxlQm9keSk7Ci0gICAgICAg
IGlmICh0b2tlbi0+bmFtZSgpID09IHRyVGFnKSB7CisgICAgICAgIGlmICh0b2tlbi5uYW1lKCkg
PT0gdHJUYWcpIHsKICAgICAgICAgICAgIG1fdHJlZS5vcGVuRWxlbWVudHMoKS0+cG9wVW50aWxU
YWJsZUJvZHlTY29wZU1hcmtlcigpOyAvLyBIb3cgaXMgdGhlcmUgZXZlciBhbnl0aGluZyB0byBw
b3A/Ci0gICAgICAgICAgICBtX3RyZWUuaW5zZXJ0SFRNTEVsZW1lbnQodG9rZW4pOwotICAgICAg
ICAgICAgc2V0SW5zZXJ0aW9uTW9kZShJbnNlcnRpb25Nb2RlOjpJblJvdyk7CisgICAgICAgICAg
ICBtX3RyZWUuaW5zZXJ0SFRNTEVsZW1lbnQoJnRva2VuKTsKKyAgICAgICAgICAgIG1faW5zZXJ0
aW9uTW9kZSA9IEluc2VydGlvbk1vZGU6OkluUm93OwogICAgICAgICAgICAgcmV0dXJuOwogICAg
ICAgICB9Ci0gICAgICAgIGlmIChpc1RhYmxlQ2VsbENvbnRleHRUYWcodG9rZW4tPm5hbWUoKSkp
IHsKKyAgICAgICAgaWYgKGlzVGFibGVDZWxsQ29udGV4dFRhZyh0b2tlbi5uYW1lKCkpKSB7CiAg
ICAgICAgICAgICBwYXJzZUVycm9yKHRva2VuKTsKICAgICAgICAgICAgIHByb2Nlc3NGYWtlU3Rh
cnRUYWcodHJUYWcpOwotICAgICAgICAgICAgQVNTRVJUKGluc2VydGlvbk1vZGUoKSA9PSBJbnNl
cnRpb25Nb2RlOjpJblJvdyk7CisgICAgICAgICAgICBBU1NFUlQobV9pbnNlcnRpb25Nb2RlID09
IEluc2VydGlvbk1vZGU6OkluUm93KTsKICAgICAgICAgICAgIHByb2Nlc3NTdGFydFRhZyh0b2tl
bik7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KLSAgICAgICAgaWYgKGlzQ2FwdGlv
bkNvbE9yQ29sZ3JvdXBUYWcodG9rZW4tPm5hbWUoKSkgfHwgaXNUYWJsZUJvZHlDb250ZXh0VGFn
KHRva2VuLT5uYW1lKCkpKSB7CisgICAgICAgIGlmIChpc0NhcHRpb25Db2xPckNvbGdyb3VwVGFn
KHRva2VuLm5hbWUoKSkgfHwgaXNUYWJsZUJvZHlDb250ZXh0VGFnKHRva2VuLm5hbWUoKSkpIHsK
ICAgICAgICAgICAgIC8vIEZJWE1FOiBUaGlzIGlzIHNsb3cuCiAgICAgICAgICAgICBpZiAoIW1f
dHJlZS5vcGVuRWxlbWVudHMoKS0+aW5UYWJsZVNjb3BlKHRib2R5VGFnKSAmJiAhbV90cmVlLm9w
ZW5FbGVtZW50cygpLT5pblRhYmxlU2NvcGUodGhlYWRUYWcpICYmICFtX3RyZWUub3BlbkVsZW1l
bnRzKCktPmluVGFibGVTY29wZSh0Zm9vdFRhZykpIHsKICAgICAgICAgICAgICAgICBBU1NFUlQo
aXNQYXJzaW5nRnJhZ21lbnRPclRlbXBsYXRlQ29udGVudHMoKSk7CkBAIC0xMjI3LDMzICsxMjEw
LDMxIEBAIHZvaWQgSFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNzU3RhcnRUYWcoQXRvbWljSFRNTFRv
a2VuKiB0b2tlbikKICAgICAgICAgcHJvY2Vzc1N0YXJ0VGFnRm9ySW5UYWJsZSh0b2tlbik7CiAg
ICAgICAgIGJyZWFrOwogICAgIGNhc2UgSW5zZXJ0aW9uTW9kZTo6SW5Sb3c6Ci0gICAgICAgIEFT
U0VSVChpbnNlcnRpb25Nb2RlKCkgPT0gSW5zZXJ0aW9uTW9kZTo6SW5Sb3cpOwotICAgICAgICBp
ZiAoaXNUYWJsZUNlbGxDb250ZXh0VGFnKHRva2VuLT5uYW1lKCkpKSB7CisgICAgICAgIGlmIChp
c1RhYmxlQ2VsbENvbnRleHRUYWcodG9rZW4ubmFtZSgpKSkgewogICAgICAgICAgICAgbV90cmVl
Lm9wZW5FbGVtZW50cygpLT5wb3BVbnRpbFRhYmxlUm93U2NvcGVNYXJrZXIoKTsKLSAgICAgICAg
ICAgIG1fdHJlZS5pbnNlcnRIVE1MRWxlbWVudCh0b2tlbik7Ci0gICAgICAgICAgICBzZXRJbnNl
cnRpb25Nb2RlKEluc2VydGlvbk1vZGU6OkluQ2VsbCk7CisgICAgICAgICAgICBtX3RyZWUuaW5z
ZXJ0SFRNTEVsZW1lbnQoJnRva2VuKTsKKyAgICAgICAgICAgIG1faW5zZXJ0aW9uTW9kZSA9IElu
c2VydGlvbk1vZGU6OkluQ2VsbDsKICAgICAgICAgICAgIG1fdHJlZS5hY3RpdmVGb3JtYXR0aW5n
RWxlbWVudHMoKS0+YXBwZW5kTWFya2VyKCk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAg
IH0KLSAgICAgICAgaWYgKHRva2VuLT5uYW1lKCkgPT0gdHJUYWcKLSAgICAgICAgICAgIHx8IGlz
Q2FwdGlvbkNvbE9yQ29sZ3JvdXBUYWcodG9rZW4tPm5hbWUoKSkKLSAgICAgICAgICAgIHx8IGlz
VGFibGVCb2R5Q29udGV4dFRhZyh0b2tlbi0+bmFtZSgpKSkgeworICAgICAgICBpZiAodG9rZW4u
bmFtZSgpID09IHRyVGFnCisgICAgICAgICAgICB8fCBpc0NhcHRpb25Db2xPckNvbGdyb3VwVGFn
KHRva2VuLm5hbWUoKSkKKyAgICAgICAgICAgIHx8IGlzVGFibGVCb2R5Q29udGV4dFRhZyh0b2tl
bi5uYW1lKCkpKSB7CiAgICAgICAgICAgICBpZiAoIXByb2Nlc3NUckVuZFRhZ0ZvckluUm93KCkp
IHsKICAgICAgICAgICAgICAgICBBU1NFUlQoaXNQYXJzaW5nRnJhZ21lbnRPclRlbXBsYXRlQ29u
dGVudHMoKSk7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQotICAgICAg
ICAgICAgQVNTRVJUKGluc2VydGlvbk1vZGUoKSA9PSBJbnNlcnRpb25Nb2RlOjpJblRhYmxlQm9k
eSk7CisgICAgICAgICAgICBBU1NFUlQobV9pbnNlcnRpb25Nb2RlID09IEluc2VydGlvbk1vZGU6
OkluVGFibGVCb2R5KTsKICAgICAgICAgICAgIHByb2Nlc3NTdGFydFRhZyh0b2tlbik7CiAgICAg
ICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgcHJvY2Vzc1N0YXJ0VGFnRm9ySW5U
YWJsZSh0b2tlbik7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgSW5zZXJ0aW9uTW9kZTo6SW5D
ZWxsOgotICAgICAgICBBU1NFUlQoaW5zZXJ0aW9uTW9kZSgpID09IEluc2VydGlvbk1vZGU6Oklu
Q2VsbCk7Ci0gICAgICAgIGlmIChpc0NhcHRpb25Db2xPckNvbGdyb3VwVGFnKHRva2VuLT5uYW1l
KCkpCi0gICAgICAgICAgICB8fCBpc1RhYmxlQ2VsbENvbnRleHRUYWcodG9rZW4tPm5hbWUoKSkK
LSAgICAgICAgICAgIHx8IHRva2VuLT5uYW1lKCkgPT0gdHJUYWcKLSAgICAgICAgICAgIHx8IGlz
VGFibGVCb2R5Q29udGV4dFRhZyh0b2tlbi0+bmFtZSgpKSkgeworICAgICAgICBpZiAoaXNDYXB0
aW9uQ29sT3JDb2xncm91cFRhZyh0b2tlbi5uYW1lKCkpCisgICAgICAgICAgICB8fCBpc1RhYmxl
Q2VsbENvbnRleHRUYWcodG9rZW4ubmFtZSgpKQorICAgICAgICAgICAgfHwgdG9rZW4ubmFtZSgp
ID09IHRyVGFnCisgICAgICAgICAgICB8fCBpc1RhYmxlQm9keUNvbnRleHRUYWcodG9rZW4ubmFt
ZSgpKSkgewogICAgICAgICAgICAgLy8gRklYTUU6IFRoaXMgY291bGQgYmUgbW9yZSBlZmZpY2ll
bnQuCiAgICAgICAgICAgICBpZiAoIW1fdHJlZS5vcGVuRWxlbWVudHMoKS0+aW5UYWJsZVNjb3Bl
KHRkVGFnKSAmJiAhbV90cmVlLm9wZW5FbGVtZW50cygpLT5pblRhYmxlU2NvcGUodGhUYWcpKSB7
CiAgICAgICAgICAgICAgICAgQVNTRVJUKGlzUGFyc2luZ0ZyYWdtZW50KCkpOwpAQCAtMTI2OCwz
MSArMTI0OSwyOSBAQCB2b2lkIEhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc1N0YXJ0VGFnKEF0b21p
Y0hUTUxUb2tlbiogdG9rZW4pCiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgSW5zZXJ0aW9uTW9k
ZTo6QWZ0ZXJCb2R5OgogICAgIGNhc2UgSW5zZXJ0aW9uTW9kZTo6QWZ0ZXJBZnRlckJvZHk6Ci0g
ICAgICAgIEFTU0VSVChpbnNlcnRpb25Nb2RlKCkgPT0gSW5zZXJ0aW9uTW9kZTo6QWZ0ZXJCb2R5
IHx8IGluc2VydGlvbk1vZGUoKSA9PSBJbnNlcnRpb25Nb2RlOjpBZnRlckFmdGVyQm9keSk7Ci0g
ICAgICAgIGlmICh0b2tlbi0+bmFtZSgpID09IGh0bWxUYWcpIHsKKyAgICAgICAgaWYgKHRva2Vu
Lm5hbWUoKSA9PSBodG1sVGFnKSB7CiAgICAgICAgICAgICBwcm9jZXNzSHRtbFN0YXJ0VGFnRm9y
SW5Cb2R5KHRva2VuKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQotICAgICAgICBz
ZXRJbnNlcnRpb25Nb2RlKEluc2VydGlvbk1vZGU6OkluQm9keSk7CisgICAgICAgIG1faW5zZXJ0
aW9uTW9kZSA9IEluc2VydGlvbk1vZGU6OkluQm9keTsKICAgICAgICAgcHJvY2Vzc1N0YXJ0VGFn
KHRva2VuKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBJbnNlcnRpb25Nb2RlOjpJbkhlYWRO
b3NjcmlwdDoKLSAgICAgICAgQVNTRVJUKGluc2VydGlvbk1vZGUoKSA9PSBJbnNlcnRpb25Nb2Rl
OjpJbkhlYWROb3NjcmlwdCk7Ci0gICAgICAgIGlmICh0b2tlbi0+bmFtZSgpID09IGh0bWxUYWcp
IHsKKyAgICAgICAgaWYgKHRva2VuLm5hbWUoKSA9PSBodG1sVGFnKSB7CiAgICAgICAgICAgICBw
cm9jZXNzSHRtbFN0YXJ0VGFnRm9ySW5Cb2R5KHRva2VuKTsKICAgICAgICAgICAgIHJldHVybjsK
ICAgICAgICAgfQotICAgICAgICBpZiAodG9rZW4tPm5hbWUoKSA9PSBiYXNlZm9udFRhZwotICAg
ICAgICAgICAgfHwgdG9rZW4tPm5hbWUoKSA9PSBiZ3NvdW5kVGFnCi0gICAgICAgICAgICB8fCB0
b2tlbi0+bmFtZSgpID09IGxpbmtUYWcKLSAgICAgICAgICAgIHx8IHRva2VuLT5uYW1lKCkgPT0g
bWV0YVRhZwotICAgICAgICAgICAgfHwgdG9rZW4tPm5hbWUoKSA9PSBub2ZyYW1lc1RhZwotICAg
ICAgICAgICAgfHwgdG9rZW4tPm5hbWUoKSA9PSBzdHlsZVRhZykgeworICAgICAgICBpZiAodG9r
ZW4ubmFtZSgpID09IGJhc2Vmb250VGFnCisgICAgICAgICAgICB8fCB0b2tlbi5uYW1lKCkgPT0g
Ymdzb3VuZFRhZworICAgICAgICAgICAgfHwgdG9rZW4ubmFtZSgpID09IGxpbmtUYWcKKyAgICAg
ICAgICAgIHx8IHRva2VuLm5hbWUoKSA9PSBtZXRhVGFnCisgICAgICAgICAgICB8fCB0b2tlbi5u
YW1lKCkgPT0gbm9mcmFtZXNUYWcKKyAgICAgICAgICAgIHx8IHRva2VuLm5hbWUoKSA9PSBzdHls
ZVRhZykgewogICAgICAgICAgICAgYm9vbCBkaWRQcm9jZXNzID0gcHJvY2Vzc1N0YXJ0VGFnRm9y
SW5IZWFkKHRva2VuKTsKICAgICAgICAgICAgIEFTU0VSVF9VTlVTRUQoZGlkUHJvY2VzcywgZGlk
UHJvY2Vzcyk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KLSAgICAgICAgaWYgKHRv
a2VuLT5uYW1lKCkgPT0gaHRtbFRhZyB8fCB0b2tlbi0+bmFtZSgpID09IG5vc2NyaXB0VGFnKSB7
CisgICAgICAgIGlmICh0b2tlbi5uYW1lKCkgPT0gaHRtbFRhZyB8fCB0b2tlbi5uYW1lKCkgPT0g
bm9zY3JpcHRUYWcpIHsKICAgICAgICAgICAgIHBhcnNlRXJyb3IodG9rZW4pOwogICAgICAgICAg
ICAgcmV0dXJuOwogICAgICAgICB9CkBAIC0xMzAwLDI1ICsxMjc5LDI0IEBAIHZvaWQgSFRNTFRy
ZWVCdWlsZGVyOjpwcm9jZXNzU3RhcnRUYWcoQXRvbWljSFRNTFRva2VuKiB0b2tlbikKICAgICAg
ICAgcHJvY2Vzc1Rva2VuKHRva2VuKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBJbnNlcnRp
b25Nb2RlOjpJbkZyYW1lc2V0OgotICAgICAgICBBU1NFUlQoaW5zZXJ0aW9uTW9kZSgpID09IElu
c2VydGlvbk1vZGU6OkluRnJhbWVzZXQpOwotICAgICAgICBpZiAodG9rZW4tPm5hbWUoKSA9PSBo
dG1sVGFnKSB7CisgICAgICAgIGlmICh0b2tlbi5uYW1lKCkgPT0gaHRtbFRhZykgewogICAgICAg
ICAgICAgcHJvY2Vzc0h0bWxTdGFydFRhZ0ZvckluQm9keSh0b2tlbik7CiAgICAgICAgICAgICBy
ZXR1cm47CiAgICAgICAgIH0KLSAgICAgICAgaWYgKHRva2VuLT5uYW1lKCkgPT0gZnJhbWVzZXRU
YWcpIHsKLSAgICAgICAgICAgIG1fdHJlZS5pbnNlcnRIVE1MRWxlbWVudCh0b2tlbik7CisgICAg
ICAgIGlmICh0b2tlbi5uYW1lKCkgPT0gZnJhbWVzZXRUYWcpIHsKKyAgICAgICAgICAgIG1fdHJl
ZS5pbnNlcnRIVE1MRWxlbWVudCgmdG9rZW4pOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAg
ICB9Ci0gICAgICAgIGlmICh0b2tlbi0+bmFtZSgpID09IGZyYW1lVGFnKSB7Ci0gICAgICAgICAg
ICBtX3RyZWUuaW5zZXJ0U2VsZkNsb3NpbmdIVE1MRWxlbWVudCh0b2tlbik7CisgICAgICAgIGlm
ICh0b2tlbi5uYW1lKCkgPT0gZnJhbWVUYWcpIHsKKyAgICAgICAgICAgIG1fdHJlZS5pbnNlcnRT
ZWxmQ2xvc2luZ0hUTUxFbGVtZW50KCZ0b2tlbik7CiAgICAgICAgICAgICByZXR1cm47CiAgICAg
ICAgIH0KLSAgICAgICAgaWYgKHRva2VuLT5uYW1lKCkgPT0gbm9mcmFtZXNUYWcpIHsKKyAgICAg
ICAgaWYgKHRva2VuLm5hbWUoKSA9PSBub2ZyYW1lc1RhZykgewogICAgICAgICAgICAgcHJvY2Vz
c1N0YXJ0VGFnRm9ySW5IZWFkKHRva2VuKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAg
fQogI2lmIEVOQUJMRShURU1QTEFURV9FTEVNRU5UKQotICAgICAgICBpZiAodG9rZW4tPm5hbWUo
KSA9PSB0ZW1wbGF0ZVRhZykgeworICAgICAgICBpZiAodG9rZW4ubmFtZSgpID09IHRlbXBsYXRl
VGFnKSB7CiAgICAgICAgICAgICBwcm9jZXNzVGVtcGxhdGVTdGFydFRhZyh0b2tlbik7CiAgICAg
ICAgICAgICByZXR1cm47CiAgICAgICAgIH0KQEAgLTEzMjcsODMgKzEzMDUsNzggQEAgdm9pZCBI
VE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NTdGFydFRhZyhBdG9taWNIVE1MVG9rZW4qIHRva2VuKQog
ICAgICAgICBicmVhazsKICAgICBjYXNlIEluc2VydGlvbk1vZGU6OkFmdGVyRnJhbWVzZXQ6CiAg
ICAgY2FzZSBJbnNlcnRpb25Nb2RlOjpBZnRlckFmdGVyRnJhbWVzZXQ6Ci0gICAgICAgIEFTU0VS
VChpbnNlcnRpb25Nb2RlKCkgPT0gSW5zZXJ0aW9uTW9kZTo6QWZ0ZXJGcmFtZXNldCB8fCBpbnNl
cnRpb25Nb2RlKCkgPT0gSW5zZXJ0aW9uTW9kZTo6QWZ0ZXJBZnRlckZyYW1lc2V0KTsKLSAgICAg
ICAgaWYgKHRva2VuLT5uYW1lKCkgPT0gaHRtbFRhZykgeworICAgICAgICBpZiAodG9rZW4ubmFt
ZSgpID09IGh0bWxUYWcpIHsKICAgICAgICAgICAgIHByb2Nlc3NIdG1sU3RhcnRUYWdGb3JJbkJv
ZHkodG9rZW4pOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9Ci0gICAgICAgIGlmICh0
b2tlbi0+bmFtZSgpID09IG5vZnJhbWVzVGFnKSB7CisgICAgICAgIGlmICh0b2tlbi5uYW1lKCkg
PT0gbm9mcmFtZXNUYWcpIHsKICAgICAgICAgICAgIHByb2Nlc3NTdGFydFRhZ0ZvckluSGVhZCh0
b2tlbik7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgcGFyc2VFcnJv
cih0b2tlbik7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgSW5zZXJ0aW9uTW9kZTo6SW5TZWxl
Y3RJblRhYmxlOgotICAgICAgICBBU1NFUlQoaW5zZXJ0aW9uTW9kZSgpID09IEluc2VydGlvbk1v
ZGU6OkluU2VsZWN0SW5UYWJsZSk7Ci0gICAgICAgIGlmICh0b2tlbi0+bmFtZSgpID09IGNhcHRp
b25UYWcKLSAgICAgICAgICAgIHx8IHRva2VuLT5uYW1lKCkgPT0gdGFibGVUYWcKLSAgICAgICAg
ICAgIHx8IGlzVGFibGVCb2R5Q29udGV4dFRhZyh0b2tlbi0+bmFtZSgpKQotICAgICAgICAgICAg
fHwgdG9rZW4tPm5hbWUoKSA9PSB0clRhZwotICAgICAgICAgICAgfHwgaXNUYWJsZUNlbGxDb250
ZXh0VGFnKHRva2VuLT5uYW1lKCkpKSB7CisgICAgICAgIGlmICh0b2tlbi5uYW1lKCkgPT0gY2Fw
dGlvblRhZworICAgICAgICAgICAgfHwgdG9rZW4ubmFtZSgpID09IHRhYmxlVGFnCisgICAgICAg
ICAgICB8fCBpc1RhYmxlQm9keUNvbnRleHRUYWcodG9rZW4ubmFtZSgpKQorICAgICAgICAgICAg
fHwgdG9rZW4ubmFtZSgpID09IHRyVGFnCisgICAgICAgICAgICB8fCBpc1RhYmxlQ2VsbENvbnRl
eHRUYWcodG9rZW4ubmFtZSgpKSkgewogICAgICAgICAgICAgcGFyc2VFcnJvcih0b2tlbik7CiAg
ICAgICAgICAgICBBdG9taWNIVE1MVG9rZW4gZW5kU2VsZWN0KEhUTUxUb2tlbjo6RW5kVGFnLCBz
ZWxlY3RUYWcubG9jYWxOYW1lKCkpOwotICAgICAgICAgICAgcHJvY2Vzc0VuZFRhZygmZW5kU2Vs
ZWN0KTsKKyAgICAgICAgICAgIHByb2Nlc3NFbmRUYWcoZW5kU2VsZWN0KTsKICAgICAgICAgICAg
IHByb2Nlc3NTdGFydFRhZyh0b2tlbik7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0K
ICAgICAgICAgRkFMTFRIUk9VR0g7CiAgICAgY2FzZSBJbnNlcnRpb25Nb2RlOjpJblNlbGVjdDoK
LSAgICAgICAgQVNTRVJUKGluc2VydGlvbk1vZGUoKSA9PSBJbnNlcnRpb25Nb2RlOjpJblNlbGVj
dCB8fCBpbnNlcnRpb25Nb2RlKCkgPT0gSW5zZXJ0aW9uTW9kZTo6SW5TZWxlY3RJblRhYmxlKTsK
LSAgICAgICAgaWYgKHRva2VuLT5uYW1lKCkgPT0gaHRtbFRhZykgeworICAgICAgICBpZiAodG9r
ZW4ubmFtZSgpID09IGh0bWxUYWcpIHsKICAgICAgICAgICAgIHByb2Nlc3NIdG1sU3RhcnRUYWdG
b3JJbkJvZHkodG9rZW4pOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9Ci0gICAgICAg
IGlmICh0b2tlbi0+bmFtZSgpID09IG9wdGlvblRhZykgeworICAgICAgICBpZiAodG9rZW4ubmFt
ZSgpID09IG9wdGlvblRhZykgewogICAgICAgICAgICAgaWYgKGlzPEhUTUxPcHRpb25FbGVtZW50
PigqbV90cmVlLmN1cnJlbnRTdGFja0l0ZW0oKS0+bm9kZSgpKSkgewogICAgICAgICAgICAgICAg
IEF0b21pY0hUTUxUb2tlbiBlbmRPcHRpb24oSFRNTFRva2VuOjpFbmRUYWcsIG9wdGlvblRhZy5s
b2NhbE5hbWUoKSk7Ci0gICAgICAgICAgICAgICAgcHJvY2Vzc0VuZFRhZygmZW5kT3B0aW9uKTsK
KyAgICAgICAgICAgICAgICBwcm9jZXNzRW5kVGFnKGVuZE9wdGlvbik7CiAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICBtX3RyZWUuaW5zZXJ0SFRNTEVsZW1lbnQodG9rZW4pOworICAgICAgICAg
ICAgbV90cmVlLmluc2VydEhUTUxFbGVtZW50KCZ0b2tlbik7CiAgICAgICAgICAgICByZXR1cm47
CiAgICAgICAgIH0KLSAgICAgICAgaWYgKHRva2VuLT5uYW1lKCkgPT0gb3B0Z3JvdXBUYWcpIHsK
KyAgICAgICAgaWYgKHRva2VuLm5hbWUoKSA9PSBvcHRncm91cFRhZykgewogICAgICAgICAgICAg
aWYgKGlzPEhUTUxPcHRpb25FbGVtZW50PigqbV90cmVlLmN1cnJlbnRTdGFja0l0ZW0oKS0+bm9k
ZSgpKSkgewogICAgICAgICAgICAgICAgIEF0b21pY0hUTUxUb2tlbiBlbmRPcHRpb24oSFRNTFRv
a2VuOjpFbmRUYWcsIG9wdGlvblRhZy5sb2NhbE5hbWUoKSk7Ci0gICAgICAgICAgICAgICAgcHJv
Y2Vzc0VuZFRhZygmZW5kT3B0aW9uKTsKKyAgICAgICAgICAgICAgICBwcm9jZXNzRW5kVGFnKGVu
ZE9wdGlvbik7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBpZiAoaXM8SFRNTE9wdEdyb3Vw
RWxlbWVudD4oKm1fdHJlZS5jdXJyZW50U3RhY2tJdGVtKCktPm5vZGUoKSkpIHsKICAgICAgICAg
ICAgICAgICBBdG9taWNIVE1MVG9rZW4gZW5kT3B0Z3JvdXAoSFRNTFRva2VuOjpFbmRUYWcsIG9w
dGdyb3VwVGFnLmxvY2FsTmFtZSgpKTsKLSAgICAgICAgICAgICAgICBwcm9jZXNzRW5kVGFnKCZl
bmRPcHRncm91cCk7CisgICAgICAgICAgICAgICAgcHJvY2Vzc0VuZFRhZyhlbmRPcHRncm91cCk7
CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBtX3RyZWUuaW5zZXJ0SFRNTEVsZW1lbnQodG9r
ZW4pOworICAgICAgICAgICAgbV90cmVlLmluc2VydEhUTUxFbGVtZW50KCZ0b2tlbik7CiAgICAg
ICAgICAgICByZXR1cm47CiAgICAgICAgIH0KLSAgICAgICAgaWYgKHRva2VuLT5uYW1lKCkgPT0g
c2VsZWN0VGFnKSB7CisgICAgICAgIGlmICh0b2tlbi5uYW1lKCkgPT0gc2VsZWN0VGFnKSB7CiAg
ICAgICAgICAgICBwYXJzZUVycm9yKHRva2VuKTsKICAgICAgICAgICAgIEF0b21pY0hUTUxUb2tl
biBlbmRTZWxlY3QoSFRNTFRva2VuOjpFbmRUYWcsIHNlbGVjdFRhZy5sb2NhbE5hbWUoKSk7Ci0g
ICAgICAgICAgICBwcm9jZXNzRW5kVGFnKCZlbmRTZWxlY3QpOworICAgICAgICAgICAgcHJvY2Vz
c0VuZFRhZyhlbmRTZWxlY3QpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9Ci0gICAg
ICAgIGlmICh0b2tlbi0+bmFtZSgpID09IGlucHV0VGFnCi0gICAgICAgICAgICB8fCB0b2tlbi0+
bmFtZSgpID09IGtleWdlblRhZwotICAgICAgICAgICAgfHwgdG9rZW4tPm5hbWUoKSA9PSB0ZXh0
YXJlYVRhZykgeworICAgICAgICBpZiAodG9rZW4ubmFtZSgpID09IGlucHV0VGFnIHx8IHRva2Vu
Lm5hbWUoKSA9PSBrZXlnZW5UYWcgfHwgdG9rZW4ubmFtZSgpID09IHRleHRhcmVhVGFnKSB7CiAg
ICAgICAgICAgICBwYXJzZUVycm9yKHRva2VuKTsKICAgICAgICAgICAgIGlmICghbV90cmVlLm9w
ZW5FbGVtZW50cygpLT5pblNlbGVjdFNjb3BlKHNlbGVjdFRhZykpIHsKICAgICAgICAgICAgICAg
ICBBU1NFUlQoaXNQYXJzaW5nRnJhZ21lbnQoKSk7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwog
ICAgICAgICAgICAgfQogICAgICAgICAgICAgQXRvbWljSFRNTFRva2VuIGVuZFNlbGVjdChIVE1M
VG9rZW46OkVuZFRhZywgc2VsZWN0VGFnLmxvY2FsTmFtZSgpKTsKLSAgICAgICAgICAgIHByb2Nl
c3NFbmRUYWcoJmVuZFNlbGVjdCk7CisgICAgICAgICAgICBwcm9jZXNzRW5kVGFnKGVuZFNlbGVj
dCk7CiAgICAgICAgICAgICBwcm9jZXNzU3RhcnRUYWcodG9rZW4pOwogICAgICAgICAgICAgcmV0
dXJuOwogICAgICAgICB9Ci0gICAgICAgIGlmICh0b2tlbi0+bmFtZSgpID09IHNjcmlwdFRhZykg
eworICAgICAgICBpZiAodG9rZW4ubmFtZSgpID09IHNjcmlwdFRhZykgewogICAgICAgICAgICAg
Ym9vbCBkaWRQcm9jZXNzID0gcHJvY2Vzc1N0YXJ0VGFnRm9ySW5IZWFkKHRva2VuKTsKICAgICAg
ICAgICAgIEFTU0VSVF9VTlVTRUQoZGlkUHJvY2VzcywgZGlkUHJvY2Vzcyk7CiAgICAgICAgICAg
ICByZXR1cm47CiAgICAgICAgIH0KICNpZiBFTkFCTEUoVEVNUExBVEVfRUxFTUVOVCkKLSAgICAg
ICAgaWYgKHRva2VuLT5uYW1lKCkgPT0gdGVtcGxhdGVUYWcpIHsKKyAgICAgICAgaWYgKHRva2Vu
Lm5hbWUoKSA9PSB0ZW1wbGF0ZVRhZykgewogICAgICAgICAgICAgcHJvY2Vzc1RlbXBsYXRlU3Rh
cnRUYWcodG9rZW4pOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CkBAIC0xNDE2LDMx
ICsxMzg5LDMxIEBAIHZvaWQgSFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNzU3RhcnRUYWcoQXRvbWlj
SFRNTFRva2VuKiB0b2tlbikKICAgICBjYXNlIEluc2VydGlvbk1vZGU6OlRleHQ6CiAgICAgICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICBicmVhazsKLSAgICBjYXNlIEluc2VydGlv
bk1vZGU6OlRlbXBsYXRlQ29udGVudHM6CiAjaWYgRU5BQkxFKFRFTVBMQVRFX0VMRU1FTlQpCi0g
ICAgICAgIGlmICh0b2tlbi0+bmFtZSgpID09IHRlbXBsYXRlVGFnKSB7CisgICAgY2FzZSBJbnNl
cnRpb25Nb2RlOjpUZW1wbGF0ZUNvbnRlbnRzOgorICAgICAgICBpZiAodG9rZW4ubmFtZSgpID09
IHRlbXBsYXRlVGFnKSB7CiAgICAgICAgICAgICBwcm9jZXNzVGVtcGxhdGVTdGFydFRhZyh0b2tl
bik7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIAotICAgICAgICBpZiAodG9rZW4t
Pm5hbWUoKSA9PSBsaW5rVGFnCi0gICAgICAgICAgICB8fCB0b2tlbi0+bmFtZSgpID09IHNjcmlw
dFRhZwotICAgICAgICAgICAgfHwgdG9rZW4tPm5hbWUoKSA9PSBzdHlsZVRhZwotICAgICAgICAg
ICAgfHwgdG9rZW4tPm5hbWUoKSA9PSBtZXRhVGFnKSB7CisgICAgICAgIGlmICh0b2tlbi5uYW1l
KCkgPT0gbGlua1RhZworICAgICAgICAgICAgfHwgdG9rZW4ubmFtZSgpID09IHNjcmlwdFRhZwor
ICAgICAgICAgICAgfHwgdG9rZW4ubmFtZSgpID09IHN0eWxlVGFnCisgICAgICAgICAgICB8fCB0
b2tlbi5uYW1lKCkgPT0gbWV0YVRhZykgewogICAgICAgICAgICAgcHJvY2Vzc1N0YXJ0VGFnRm9y
SW5IZWFkKHRva2VuKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCiAgICAgICAg
IEluc2VydGlvbk1vZGUgaW5zZXJ0aW9uTW9kZSA9IEluc2VydGlvbk1vZGU6OlRlbXBsYXRlQ29u
dGVudHM7Ci0gICAgICAgIGlmICh0b2tlbi0+bmFtZSgpID09IGZyYW1lVGFnKQorICAgICAgICBp
ZiAodG9rZW4ubmFtZSgpID09IGZyYW1lVGFnKQogICAgICAgICAgICAgaW5zZXJ0aW9uTW9kZSA9
IEluc2VydGlvbk1vZGU6OkluRnJhbWVzZXQ7Ci0gICAgICAgIGVsc2UgaWYgKHRva2VuLT5uYW1l
KCkgPT0gY29sVGFnKQorICAgICAgICBlbHNlIGlmICh0b2tlbi5uYW1lKCkgPT0gY29sVGFnKQog
ICAgICAgICAgICAgaW5zZXJ0aW9uTW9kZSA9IEluc2VydGlvbk1vZGU6OkluQ29sdW1uR3JvdXA7
Ci0gICAgICAgIGVsc2UgaWYgKGlzQ2FwdGlvbkNvbE9yQ29sZ3JvdXBUYWcodG9rZW4tPm5hbWUo
KSkgfHwgaXNUYWJsZUJvZHlDb250ZXh0VGFnKHRva2VuLT5uYW1lKCkpKQorICAgICAgICBlbHNl
IGlmIChpc0NhcHRpb25Db2xPckNvbGdyb3VwVGFnKHRva2VuLm5hbWUoKSkgfHwgaXNUYWJsZUJv
ZHlDb250ZXh0VGFnKHRva2VuLm5hbWUoKSkpCiAgICAgICAgICAgICBpbnNlcnRpb25Nb2RlID0g
SW5zZXJ0aW9uTW9kZTo6SW5UYWJsZTsKLSAgICAgICAgZWxzZSBpZiAodG9rZW4tPm5hbWUoKSA9
PSB0clRhZykKKyAgICAgICAgZWxzZSBpZiAodG9rZW4ubmFtZSgpID09IHRyVGFnKQogICAgICAg
ICAgICAgaW5zZXJ0aW9uTW9kZSA9IEluc2VydGlvbk1vZGU6OkluVGFibGVCb2R5OwotICAgICAg
ICBlbHNlIGlmIChpc1RhYmxlQ2VsbENvbnRleHRUYWcodG9rZW4tPm5hbWUoKSkpCisgICAgICAg
IGVsc2UgaWYgKGlzVGFibGVDZWxsQ29udGV4dFRhZyh0b2tlbi5uYW1lKCkpKQogICAgICAgICAg
ICAgaW5zZXJ0aW9uTW9kZSA9IEluc2VydGlvbk1vZGU6OkluUm93OwogICAgICAgICBlbHNlCiAg
ICAgICAgICAgICBpbnNlcnRpb25Nb2RlID0gSW5zZXJ0aW9uTW9kZTo6SW5Cb2R5OwpAQCAtMTQ0
OCwxNyArMTQyMSwxNSBAQCB2b2lkIEhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc1N0YXJ0VGFnKEF0
b21pY0hUTUxUb2tlbiogdG9rZW4pCiAgICAgICAgIEFTU0VSVChpbnNlcnRpb25Nb2RlICE9IElu
c2VydGlvbk1vZGU6OlRlbXBsYXRlQ29udGVudHMpOwogICAgICAgICBBU1NFUlQobV90ZW1wbGF0
ZUluc2VydGlvbk1vZGVzLmxhc3QoKSA9PSBJbnNlcnRpb25Nb2RlOjpUZW1wbGF0ZUNvbnRlbnRz
KTsKICAgICAgICAgbV90ZW1wbGF0ZUluc2VydGlvbk1vZGVzLmxhc3QoKSA9IGluc2VydGlvbk1v
ZGU7Ci0gICAgICAgIHNldEluc2VydGlvbk1vZGUoaW5zZXJ0aW9uTW9kZSk7CisgICAgICAgIG1f
aW5zZXJ0aW9uTW9kZSA9IGluc2VydGlvbk1vZGU7CiAKICAgICAgICAgcHJvY2Vzc1N0YXJ0VGFn
KHRva2VuKTsKLSNlbHNlCi0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotI2VuZGlmCiAg
ICAgICAgIGJyZWFrOworI2VuZGlmCiAgICAgfQogfQogCi12b2lkIEhUTUxUcmVlQnVpbGRlcjo6
cHJvY2Vzc0h0bWxTdGFydFRhZ0ZvckluQm9keShBdG9taWNIVE1MVG9rZW4qIHRva2VuKQordm9p
ZCBIVE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NIdG1sU3RhcnRUYWdGb3JJbkJvZHkoQXRvbWljSFRN
TFRva2VuJiB0b2tlbikKIHsKICAgICBwYXJzZUVycm9yKHRva2VuKTsKICNpZiBFTkFCTEUoVEVN
UExBVEVfRUxFTUVOVCkKQEAgLTE0NjcsNDUgKzE0MzgsNDMgQEAgdm9pZCBIVE1MVHJlZUJ1aWxk
ZXI6OnByb2Nlc3NIdG1sU3RhcnRUYWdGb3JJbkJvZHkoQXRvbWljSFRNTFRva2VuKiB0b2tlbikK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KICNlbmRpZgotICAgIG1fdHJlZS5pbnNlcnRIVE1MSHRt
bFN0YXJ0VGFnSW5Cb2R5KHRva2VuKTsKKyAgICBtX3RyZWUuaW5zZXJ0SFRNTEh0bWxTdGFydFRh
Z0luQm9keSgmdG9rZW4pOwogfQogCi1ib29sIEhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc0JvZHlF
bmRUYWdGb3JJbkJvZHkoQXRvbWljSFRNTFRva2VuKiB0b2tlbikKK2Jvb2wgSFRNTFRyZWVCdWls
ZGVyOjpwcm9jZXNzQm9keUVuZFRhZ0ZvckluQm9keShBdG9taWNIVE1MVG9rZW4mIHRva2VuKQog
ewotICAgIEFTU0VSVCh0b2tlbi0+dHlwZSgpID09IEhUTUxUb2tlbjo6RW5kVGFnKTsKLSAgICBB
U1NFUlQodG9rZW4tPm5hbWUoKSA9PSBib2R5VGFnKTsKKyAgICBBU1NFUlQodG9rZW4udHlwZSgp
ID09IEhUTUxUb2tlbjo6RW5kVGFnKTsKKyAgICBBU1NFUlQodG9rZW4ubmFtZSgpID09IGJvZHlU
YWcpOwogICAgIGlmICghbV90cmVlLm9wZW5FbGVtZW50cygpLT5pblNjb3BlKGJvZHlUYWcubG9j
YWxOYW1lKCkpKSB7CiAgICAgICAgIHBhcnNlRXJyb3IodG9rZW4pOwogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgfQogICAgIG5vdEltcGxlbWVudGVkKCk7IC8vIEVtaXQgYSBtb3JlIHNwZWNp
ZmljIHBhcnNlIGVycm9yIGJhc2VkIG9uIHN0YWNrIGNvbnRlbnRzLgotICAgIHNldEluc2VydGlv
bk1vZGUoSW5zZXJ0aW9uTW9kZTo6QWZ0ZXJCb2R5KTsKKyAgICBtX2luc2VydGlvbk1vZGUgPSBJ
bnNlcnRpb25Nb2RlOjpBZnRlckJvZHk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgSFRN
TFRyZWVCdWlsZGVyOjpwcm9jZXNzQW55T3RoZXJFbmRUYWdGb3JJbkJvZHkoQXRvbWljSFRNTFRv
a2VuKiB0b2tlbikKK3ZvaWQgSFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNzQW55T3RoZXJFbmRUYWdG
b3JJbkJvZHkoQXRvbWljSFRNTFRva2VuJiB0b2tlbikKIHsKLSAgICBBU1NFUlQodG9rZW4tPnR5
cGUoKSA9PSBIVE1MVG9rZW46OkVuZFRhZyk7Ci0gICAgSFRNTEVsZW1lbnRTdGFjazo6RWxlbWVu
dFJlY29yZCogcmVjb3JkID0gbV90cmVlLm9wZW5FbGVtZW50cygpLT50b3BSZWNvcmQoKTsKLSAg
ICB3aGlsZSAoMSkgewotICAgICAgICBSZWZQdHI8SFRNTFN0YWNrSXRlbT4gaXRlbSA9IHJlY29y
ZC0+c3RhY2tJdGVtKCk7Ci0gICAgICAgIGlmIChpdGVtLT5tYXRjaGVzSFRNTFRhZyh0b2tlbi0+
bmFtZSgpKSkgewotICAgICAgICAgICAgbV90cmVlLmdlbmVyYXRlSW1wbGllZEVuZFRhZ3NXaXRo
RXhjbHVzaW9uKHRva2VuLT5uYW1lKCkpOwotICAgICAgICAgICAgaWYgKCFtX3RyZWUuY3VycmVu
dFN0YWNrSXRlbSgpLT5tYXRjaGVzSFRNTFRhZyh0b2tlbi0+bmFtZSgpKSkKKyAgICBBU1NFUlQo
dG9rZW4udHlwZSgpID09IEhUTUxUb2tlbjo6RW5kVGFnKTsKKyAgICBmb3IgKGF1dG8qIHJlY29y
ZCA9IG1fdHJlZS5vcGVuRWxlbWVudHMoKS0+dG9wUmVjb3JkKCk7IDsgcmVjb3JkID0gcmVjb3Jk
LT5uZXh0KCkpIHsKKyAgICAgICAgSFRNTFN0YWNrSXRlbSYgaXRlbSA9ICpyZWNvcmQtPnN0YWNr
SXRlbSgpOworICAgICAgICBpZiAoaXRlbS5tYXRjaGVzSFRNTFRhZyh0b2tlbi5uYW1lKCkpKSB7
CisgICAgICAgICAgICBtX3RyZWUuZ2VuZXJhdGVJbXBsaWVkRW5kVGFnc1dpdGhFeGNsdXNpb24o
dG9rZW4ubmFtZSgpKTsKKyAgICAgICAgICAgIGlmICghbV90cmVlLmN1cnJlbnRTdGFja0l0ZW0o
KS0+bWF0Y2hlc0hUTUxUYWcodG9rZW4ubmFtZSgpKSkKICAgICAgICAgICAgICAgICBwYXJzZUVy
cm9yKHRva2VuKTsKLSAgICAgICAgICAgIG1fdHJlZS5vcGVuRWxlbWVudHMoKS0+cG9wVW50aWxQ
b3BwZWQoaXRlbS0+ZWxlbWVudCgpKTsKKyAgICAgICAgICAgIG1fdHJlZS5vcGVuRWxlbWVudHMo
KS0+cG9wVW50aWxQb3BwZWQoaXRlbS5lbGVtZW50KCkpOwogICAgICAgICAgICAgcmV0dXJuOwog
ICAgICAgICB9Ci0gICAgICAgIGlmIChpdGVtLT5pc1NwZWNpYWxOb2RlKCkpIHsKKyAgICAgICAg
aWYgKGl0ZW0uaXNTcGVjaWFsTm9kZSgpKSB7CiAgICAgICAgICAgICBwYXJzZUVycm9yKHRva2Vu
KTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQotICAgICAgICByZWNvcmQgPSByZWNv
cmQtPm5leHQoKTsKICAgICB9CiB9CiAKIC8vIGh0dHA6Ly93d3cud2hhdHdnLm9yZy9zcGVjcy93
ZWItYXBwcy9jdXJyZW50LXdvcmsvbXVsdGlwYWdlL3Rva2VuaXphdGlvbi5odG1sI3BhcnNpbmct
bWFpbi1pbmJvZHkKLXZvaWQgSFRNTFRyZWVCdWlsZGVyOjpjYWxsVGhlQWRvcHRpb25BZ2VuY3ko
QXRvbWljSFRNTFRva2VuKiB0b2tlbikKK3ZvaWQgSFRNTFRyZWVCdWlsZGVyOjpjYWxsVGhlQWRv
cHRpb25BZ2VuY3koQXRvbWljSFRNTFRva2VuJiB0b2tlbikKIHsKICAgICAvLyBUaGUgYWRvcHRp
b24gYWdlbmN5IGFsZ29yaXRobSBpcyBOXjIuIFdlIGxpbWl0IHRoZSBudW1iZXIgb2YgaXRlcmF0
aW9ucwogICAgIC8vIHRvIHN0b3AgZnJvbSBoYW5naW5nIHRoZSB3aG9sZSBicm93c2VyLiBUaGlz
IGxpbWl0IGlzIHNwZWNpZmllZCBpbiB0aGUKQEAgLTE1MTcsNyArMTQ4Niw3IEBAIHZvaWQgSFRN
TFRyZWVCdWlsZGVyOjpjYWxsVGhlQWRvcHRpb25BZ2VuY3koQXRvbWljSFRNTFRva2VuKiB0b2tl
bikKICAgICAvLyAxLCAyLCAzIGFuZCAxNiBhcmUgY292ZXJlZCBieSB0aGUgZm9yKCkgbG9vcC4K
ICAgICBmb3IgKGludCBpID0gMDsgaSA8IG91dGVySXRlcmF0aW9uTGltaXQ7ICsraSkgewogICAg
ICAgICAvLyA0LgotICAgICAgICBFbGVtZW50KiBmb3JtYXR0aW5nRWxlbWVudCA9IG1fdHJlZS5h
Y3RpdmVGb3JtYXR0aW5nRWxlbWVudHMoKS0+Y2xvc2VzdEVsZW1lbnRJblNjb3BlV2l0aE5hbWUo
dG9rZW4tPm5hbWUoKSk7CisgICAgICAgIEVsZW1lbnQqIGZvcm1hdHRpbmdFbGVtZW50ID0gbV90
cmVlLmFjdGl2ZUZvcm1hdHRpbmdFbGVtZW50cygpLT5jbG9zZXN0RWxlbWVudEluU2NvcGVXaXRo
TmFtZSh0b2tlbi5uYW1lKCkpOwogICAgICAgICAvLyA0LmEKICAgICAgICAgaWYgKCFmb3JtYXR0
aW5nRWxlbWVudCkKICAgICAgICAgICAgIHJldHVybiBwcm9jZXNzQW55T3RoZXJFbmRUYWdGb3JJ
bkJvZHkodG9rZW4pOwpAQCAtMTUyOCw3ICsxNDk3LDcgQEAgdm9pZCBIVE1MVHJlZUJ1aWxkZXI6
OmNhbGxUaGVBZG9wdGlvbkFnZW5jeShBdG9taWNIVE1MVG9rZW4qIHRva2VuKQogICAgICAgICAg
ICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgICAgIC8vIDQuYgotICAgICAgICBIVE1MRWxlbWVu
dFN0YWNrOjpFbGVtZW50UmVjb3JkKiBmb3JtYXR0aW5nRWxlbWVudFJlY29yZCA9IG1fdHJlZS5v
cGVuRWxlbWVudHMoKS0+ZmluZChmb3JtYXR0aW5nRWxlbWVudCk7CisgICAgICAgIGF1dG8qIGZv
cm1hdHRpbmdFbGVtZW50UmVjb3JkID0gbV90cmVlLm9wZW5FbGVtZW50cygpLT5maW5kKGZvcm1h
dHRpbmdFbGVtZW50KTsKICAgICAgICAgaWYgKCFmb3JtYXR0aW5nRWxlbWVudFJlY29yZCkgewog
ICAgICAgICAgICAgcGFyc2VFcnJvcih0b2tlbik7CiAgICAgICAgICAgICBtX3RyZWUuYWN0aXZl
Rm9ybWF0dGluZ0VsZW1lbnRzKCktPnJlbW92ZShmb3JtYXR0aW5nRWxlbWVudCk7CkBAIC0xNTM4
LDcgKzE1MDcsNyBAQCB2b2lkIEhUTUxUcmVlQnVpbGRlcjo6Y2FsbFRoZUFkb3B0aW9uQWdlbmN5
KEF0b21pY0hUTUxUb2tlbiogdG9rZW4pCiAgICAgICAgIGlmIChmb3JtYXR0aW5nRWxlbWVudCAh
PSBtX3RyZWUuY3VycmVudEVsZW1lbnQoKSkKICAgICAgICAgICAgIHBhcnNlRXJyb3IodG9rZW4p
OwogICAgICAgICAvLyA1LgotICAgICAgICBIVE1MRWxlbWVudFN0YWNrOjpFbGVtZW50UmVjb3Jk
KiBmdXJ0aGVzdEJsb2NrID0gbV90cmVlLm9wZW5FbGVtZW50cygpLT5mdXJ0aGVzdEJsb2NrRm9y
Rm9ybWF0dGluZ0VsZW1lbnQoZm9ybWF0dGluZ0VsZW1lbnQpOworICAgICAgICBhdXRvKiBmdXJ0
aGVzdEJsb2NrID0gbV90cmVlLm9wZW5FbGVtZW50cygpLT5mdXJ0aGVzdEJsb2NrRm9yRm9ybWF0
dGluZ0VsZW1lbnQoZm9ybWF0dGluZ0VsZW1lbnQpOwogICAgICAgICAvLyA2LgogICAgICAgICBp
ZiAoIWZ1cnRoZXN0QmxvY2spIHsKICAgICAgICAgICAgIG1fdHJlZS5vcGVuRWxlbWVudHMoKS0+
cG9wVW50aWxQb3BwZWQoZm9ybWF0dGluZ0VsZW1lbnQpOwpAQCAtMTU1MSw5ICsxNTIwLDkgQEAg
dm9pZCBIVE1MVHJlZUJ1aWxkZXI6OmNhbGxUaGVBZG9wdGlvbkFnZW5jeShBdG9taWNIVE1MVG9r
ZW4qIHRva2VuKQogICAgICAgICAvLyA4LgogICAgICAgICBIVE1MRm9ybWF0dGluZ0VsZW1lbnRM
aXN0OjpCb29rbWFyayBib29rbWFyayA9IG1fdHJlZS5hY3RpdmVGb3JtYXR0aW5nRWxlbWVudHMo
KS0+Ym9va21hcmtGb3IoZm9ybWF0dGluZ0VsZW1lbnQpOwogICAgICAgICAvLyA5LgotICAgICAg
ICBIVE1MRWxlbWVudFN0YWNrOjpFbGVtZW50UmVjb3JkKiBub2RlID0gZnVydGhlc3RCbG9jazsK
LSAgICAgICAgSFRNTEVsZW1lbnRTdGFjazo6RWxlbWVudFJlY29yZCogbmV4dE5vZGUgPSBub2Rl
LT5uZXh0KCk7Ci0gICAgICAgIEhUTUxFbGVtZW50U3RhY2s6OkVsZW1lbnRSZWNvcmQqIGxhc3RO
b2RlID0gZnVydGhlc3RCbG9jazsKKyAgICAgICAgYXV0byogbm9kZSA9IGZ1cnRoZXN0QmxvY2s7
CisgICAgICAgIGF1dG8qIG5leHROb2RlID0gbm9kZS0+bmV4dCgpOworICAgICAgICBhdXRvKiBs
YXN0Tm9kZSA9IGZ1cnRoZXN0QmxvY2s7CiAgICAgICAgIC8vIDkuMSwgOS4yLCA5LjMgYW5kIDku
MTEgYXJlIGNvdmVyZWQgYnkgdGhlIGZvcigpIGxvb3AuCiAgICAgICAgIGZvciAoaW50IGkgPSAw
OyBpIDwgaW5uZXJJdGVyYXRpb25MaW1pdDsgKytpKSB7CiAgICAgICAgICAgICAvLyA5LjQKQEAg
LTE2MDQsOSArMTU3Myw4IEBAIHZvaWQgSFRNTFRyZWVCdWlsZGVyOjpyZXNldEluc2VydGlvbk1v
ZGVBcHByb3ByaWF0ZWx5KCkKIHsKICAgICAvLyBodHRwOi8vd3d3LndoYXR3Zy5vcmcvc3BlY3Mv
d2ViLWFwcHMvY3VycmVudC13b3JrL211bHRpcGFnZS9wYXJzaW5nLmh0bWwjcmVzZXQtdGhlLWlu
c2VydGlvbi1tb2RlLWFwcHJvcHJpYXRlbHkKICAgICBib29sIGxhc3QgPSBmYWxzZTsKLSAgICBI
VE1MRWxlbWVudFN0YWNrOjpFbGVtZW50UmVjb3JkKiBub2RlUmVjb3JkID0gbV90cmVlLm9wZW5F
bGVtZW50cygpLT50b3BSZWNvcmQoKTsKLSAgICB3aGlsZSAoMSkgewotICAgICAgICBSZWZQdHI8
SFRNTFN0YWNrSXRlbT4gaXRlbSA9IG5vZGVSZWNvcmQtPnN0YWNrSXRlbSgpOworICAgIGZvciAo
YXV0byogcmVjb3JkID0gbV90cmVlLm9wZW5FbGVtZW50cygpLT50b3BSZWNvcmQoKTsgOyByZWNv
cmQgPSByZWNvcmQtPm5leHQoKSkgeworICAgICAgICBIVE1MU3RhY2tJdGVtKiBpdGVtID0gcmVj
b3JkLT5zdGFja0l0ZW0oKS5nZXQoKTsKICAgICAgICAgaWYgKGl0ZW0tPm5vZGUoKSA9PSBtX3Ry
ZWUub3BlbkVsZW1lbnRzKCktPnJvb3ROb2RlKCkpIHsKICAgICAgICAgICAgIGxhc3QgPSB0cnVl
OwogI2lmIEVOQUJMRShURU1QTEFURV9FTEVNRU5UKQpAQCAtMTYxNiw3OCArMTU4NCwxMDQgQEAg
dm9pZCBIVE1MVHJlZUJ1aWxkZXI6OnJlc2V0SW5zZXJ0aW9uTW9kZUFwcHJvcHJpYXRlbHkoKQog
ICAgICAgICAgICAgYm9vbCBzaG91bGRDcmVhdGVJdGVtID0gdHJ1ZTsKICNlbmRpZgogICAgICAg
ICAgICAgaWYgKHNob3VsZENyZWF0ZUl0ZW0pCi0gICAgICAgICAgICAgICAgaXRlbSA9IG1fZnJh
Z21lbnRDb250ZXh0LmNvbnRleHRFbGVtZW50U3RhY2tJdGVtKCk7CisgICAgICAgICAgICAgICAg
aXRlbSA9ICZtX2ZyYWdtZW50Q29udGV4dC5jb250ZXh0RWxlbWVudFN0YWNrSXRlbSgpOwogICAg
ICAgICB9CisKICNpZiBFTkFCTEUoVEVNUExBVEVfRUxFTUVOVCkKLSAgICAgICAgaWYgKGl0ZW0t
Pmhhc1RhZ05hbWUodGVtcGxhdGVUYWcpKQotICAgICAgICAgICAgcmV0dXJuIHNldEluc2VydGlv
bk1vZGUobV90ZW1wbGF0ZUluc2VydGlvbk1vZGVzLmxhc3QoKSk7CisgICAgICAgIGlmIChpdGVt
LT5oYXNUYWdOYW1lKHRlbXBsYXRlVGFnKSkgeworICAgICAgICAgICAgbV9pbnNlcnRpb25Nb2Rl
ID0gbV90ZW1wbGF0ZUluc2VydGlvbk1vZGVzLmxhc3QoKTsKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgfQogI2VuZGlmCiAgICAgICAgIGlmIChpdGVtLT5oYXNUYWdOYW1lKHNlbGVjdFRh
ZykpIHsKICNpZiBFTkFCTEUoVEVNUExBVEVfRUxFTUVOVCkKICAgICAgICAgICAgIGlmICghbGFz
dCkgewogICAgICAgICAgICAgICAgIHdoaWxlIChpdGVtLT5ub2RlKCkgIT0gbV90cmVlLm9wZW5F
bGVtZW50cygpLT5yb290Tm9kZSgpICYmICFpdGVtLT5oYXNUYWdOYW1lKHRlbXBsYXRlVGFnKSkg
ewotICAgICAgICAgICAgICAgICAgICBub2RlUmVjb3JkID0gbm9kZVJlY29yZC0+bmV4dCgpOwot
ICAgICAgICAgICAgICAgICAgICBpdGVtID0gbm9kZVJlY29yZC0+c3RhY2tJdGVtKCk7Ci0gICAg
ICAgICAgICAgICAgICAgIGlmIChpczxIVE1MVGFibGVFbGVtZW50PigqaXRlbS0+bm9kZSgpKSkK
LSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzZXRJbnNlcnRpb25Nb2RlKEluc2VydGlv
bk1vZGU6OkluU2VsZWN0SW5UYWJsZSk7CisgICAgICAgICAgICAgICAgICAgIHJlY29yZCA9IHJl
Y29yZC0+bmV4dCgpOworICAgICAgICAgICAgICAgICAgICBpdGVtID0gcmVjb3JkLT5zdGFja0l0
ZW0oKS5nZXQoKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGlzPEhUTUxUYWJsZUVsZW1lbnQ+
KCppdGVtLT5ub2RlKCkpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBtX2luc2VydGlvbk1v
ZGUgPSBJbnNlcnRpb25Nb2RlOjpJblNlbGVjdEluVGFibGU7CisgICAgICAgICAgICAgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICB9CiAjZW5kaWYKLSAgICAgICAgICAgIHJldHVybiBzZXRJbnNlcnRpb25Nb2Rl
KEluc2VydGlvbk1vZGU6OkluU2VsZWN0KTsKLSAgICAgICAgfQotICAgICAgICBpZiAoaXRlbS0+
aGFzVGFnTmFtZSh0ZFRhZykgfHwgaXRlbS0+aGFzVGFnTmFtZSh0aFRhZykpCi0gICAgICAgICAg
ICByZXR1cm4gc2V0SW5zZXJ0aW9uTW9kZShJbnNlcnRpb25Nb2RlOjpJbkNlbGwpOwotICAgICAg
ICBpZiAoaXRlbS0+aGFzVGFnTmFtZSh0clRhZykpCi0gICAgICAgICAgICByZXR1cm4gc2V0SW5z
ZXJ0aW9uTW9kZShJbnNlcnRpb25Nb2RlOjpJblJvdyk7Ci0gICAgICAgIGlmIChpdGVtLT5oYXNU
YWdOYW1lKHRib2R5VGFnKSB8fCBpdGVtLT5oYXNUYWdOYW1lKHRoZWFkVGFnKSB8fCBpdGVtLT5o
YXNUYWdOYW1lKHRmb290VGFnKSkKLSAgICAgICAgICAgIHJldHVybiBzZXRJbnNlcnRpb25Nb2Rl
KEluc2VydGlvbk1vZGU6OkluVGFibGVCb2R5KTsKLSAgICAgICAgaWYgKGl0ZW0tPmhhc1RhZ05h
bWUoY2FwdGlvblRhZykpCi0gICAgICAgICAgICByZXR1cm4gc2V0SW5zZXJ0aW9uTW9kZShJbnNl
cnRpb25Nb2RlOjpJbkNhcHRpb24pOworICAgICAgICAgICAgbV9pbnNlcnRpb25Nb2RlID0gSW5z
ZXJ0aW9uTW9kZTo6SW5TZWxlY3Q7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAg
ICAgICAgaWYgKGl0ZW0tPmhhc1RhZ05hbWUodGRUYWcpIHx8IGl0ZW0tPmhhc1RhZ05hbWUodGhU
YWcpKSB7CisgICAgICAgICAgICBtX2luc2VydGlvbk1vZGUgPSBJbnNlcnRpb25Nb2RlOjpJbkNl
bGw7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgaWYgKGl0ZW0tPmhh
c1RhZ05hbWUodHJUYWcpKSB7CisgICAgICAgICAgICBtX2luc2VydGlvbk1vZGUgPSBJbnNlcnRp
b25Nb2RlOjpJblJvdzsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBp
ZiAoaXRlbS0+aGFzVGFnTmFtZSh0Ym9keVRhZykgfHwgaXRlbS0+aGFzVGFnTmFtZSh0aGVhZFRh
ZykgfHwgaXRlbS0+aGFzVGFnTmFtZSh0Zm9vdFRhZykpIHsKKyAgICAgICAgICAgIG1faW5zZXJ0
aW9uTW9kZSA9IEluc2VydGlvbk1vZGU6OkluVGFibGVCb2R5OworICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICB9CisgICAgICAgIGlmIChpdGVtLT5oYXNUYWdOYW1lKGNhcHRpb25UYWcpKSB7
CisgICAgICAgICAgICBtX2luc2VydGlvbk1vZGUgPSBJbnNlcnRpb25Nb2RlOjpJbkNhcHRpb247
CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KICAgICAgICAgaWYgKGl0ZW0tPmhhc1Rh
Z05hbWUoY29sZ3JvdXBUYWcpKSB7Ci0gICAgICAgICAgICByZXR1cm4gc2V0SW5zZXJ0aW9uTW9k
ZShJbnNlcnRpb25Nb2RlOjpJbkNvbHVtbkdyb3VwKTsKKyAgICAgICAgICAgIG1faW5zZXJ0aW9u
TW9kZSA9IEluc2VydGlvbk1vZGU6OkluQ29sdW1uR3JvdXA7CisgICAgICAgICAgICByZXR1cm47
CisgICAgICAgIH0KKyAgICAgICAgaWYgKGlzPEhUTUxUYWJsZUVsZW1lbnQ+KCppdGVtLT5ub2Rl
KCkpKSB7CisgICAgICAgICAgICBtX2luc2VydGlvbk1vZGUgPSBJbnNlcnRpb25Nb2RlOjpJblRh
YmxlOworICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9Ci0gICAgICAgIGlmIChpczxIVE1M
VGFibGVFbGVtZW50PigqaXRlbS0+bm9kZSgpKSkKLSAgICAgICAgICAgIHJldHVybiBzZXRJbnNl
cnRpb25Nb2RlKEluc2VydGlvbk1vZGU6OkluVGFibGUpOwogICAgICAgICBpZiAoaXRlbS0+aGFz
VGFnTmFtZShoZWFkVGFnKSkgewogI2lmIEVOQUJMRShURU1QTEFURV9FTEVNRU5UKQotICAgICAg
ICAgICAgaWYgKCFtX2ZyYWdtZW50Q29udGV4dC5mcmFnbWVudCgpIHx8IG1fZnJhZ21lbnRDb250
ZXh0LmNvbnRleHRFbGVtZW50KCkgIT0gaXRlbS0+bm9kZSgpKQotICAgICAgICAgICAgICAgIHJl
dHVybiBzZXRJbnNlcnRpb25Nb2RlKEluc2VydGlvbk1vZGU6OkluSGVhZCk7CisgICAgICAgICAg
ICBpZiAoIW1fZnJhZ21lbnRDb250ZXh0LmZyYWdtZW50KCkgfHwgJm1fZnJhZ21lbnRDb250ZXh0
LmNvbnRleHRFbGVtZW50KCkgIT0gaXRlbS0+bm9kZSgpKSB7CisgICAgICAgICAgICAgICAgbV9p
bnNlcnRpb25Nb2RlID0gSW5zZXJ0aW9uTW9kZTo6SW5IZWFkOworICAgICAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgICAgIH0KICNlbmRpZgotICAgICAgICAgICAgcmV0dXJuIHNldEluc2Vy
dGlvbk1vZGUoSW5zZXJ0aW9uTW9kZTo6SW5Cb2R5KTsKKyAgICAgICAgICAgIG1faW5zZXJ0aW9u
TW9kZSA9IEluc2VydGlvbk1vZGU6OkluQm9keTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgfQorICAgICAgICBpZiAoaXRlbS0+aGFzVGFnTmFtZShib2R5VGFnKSkgeworICAgICAgICAg
ICAgbV9pbnNlcnRpb25Nb2RlID0gSW5zZXJ0aW9uTW9kZTo6SW5Cb2R5OworICAgICAgICAgICAg
cmV0dXJuOwogICAgICAgICB9Ci0gICAgICAgIGlmIChpdGVtLT5oYXNUYWdOYW1lKGJvZHlUYWcp
KQotICAgICAgICAgICAgcmV0dXJuIHNldEluc2VydGlvbk1vZGUoSW5zZXJ0aW9uTW9kZTo6SW5C
b2R5KTsKICAgICAgICAgaWYgKGl0ZW0tPmhhc1RhZ05hbWUoZnJhbWVzZXRUYWcpKSB7Ci0gICAg
ICAgICAgICByZXR1cm4gc2V0SW5zZXJ0aW9uTW9kZShJbnNlcnRpb25Nb2RlOjpJbkZyYW1lc2V0
KTsKKyAgICAgICAgICAgIG1faW5zZXJ0aW9uTW9kZSA9IEluc2VydGlvbk1vZGU6OkluRnJhbWVz
ZXQ7CisgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgaWYgKGl0ZW0tPmhh
c1RhZ05hbWUoaHRtbFRhZykpIHsKLSAgICAgICAgICAgIGlmIChtX3RyZWUuaGVhZFN0YWNrSXRl
bSgpKQotICAgICAgICAgICAgICAgIHJldHVybiBzZXRJbnNlcnRpb25Nb2RlKEluc2VydGlvbk1v
ZGU6OkFmdGVySGVhZCk7CisgICAgICAgICAgICBpZiAobV90cmVlLmhlYWRTdGFja0l0ZW0oKSkg
eworICAgICAgICAgICAgICAgIG1faW5zZXJ0aW9uTW9kZSA9IEluc2VydGlvbk1vZGU6OkFmdGVy
SGVhZDsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CiAgICAgICAgICAg
ICBBU1NFUlQoaXNQYXJzaW5nRnJhZ21lbnQoKSk7Ci0gICAgICAgICAgICByZXR1cm4gc2V0SW5z
ZXJ0aW9uTW9kZShJbnNlcnRpb25Nb2RlOjpCZWZvcmVIZWFkKTsKKyAgICAgICAgICAgIG1faW5z
ZXJ0aW9uTW9kZSA9IEluc2VydGlvbk1vZGU6OkJlZm9yZUhlYWQ7CisgICAgICAgICAgICByZXR1
cm47CiAgICAgICAgIH0KICAgICAgICAgaWYgKGxhc3QpIHsKICAgICAgICAgICAgIEFTU0VSVChp
c1BhcnNpbmdGcmFnbWVudCgpKTsKLSAgICAgICAgICAgIHJldHVybiBzZXRJbnNlcnRpb25Nb2Rl
KEluc2VydGlvbk1vZGU6OkluQm9keSk7CisgICAgICAgICAgICBtX2luc2VydGlvbk1vZGUgPSBJ
bnNlcnRpb25Nb2RlOjpJbkJvZHk7CisgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KLSAg
ICAgICAgbm9kZVJlY29yZCA9IG5vZGVSZWNvcmQtPm5leHQoKTsKICAgICB9CiB9CiAKLXZvaWQg
SFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNzRW5kVGFnRm9ySW5UYWJsZUJvZHkoQXRvbWljSFRNTFRv
a2VuKiB0b2tlbikKK3ZvaWQgSFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNzRW5kVGFnRm9ySW5UYWJs
ZUJvZHkoQXRvbWljSFRNTFRva2VuJiB0b2tlbikKIHsKLSAgICBBU1NFUlQodG9rZW4tPnR5cGUo
KSA9PSBIVE1MVG9rZW46OkVuZFRhZyk7Ci0gICAgaWYgKGlzVGFibGVCb2R5Q29udGV4dFRhZyh0
b2tlbi0+bmFtZSgpKSkgewotICAgICAgICBpZiAoIW1fdHJlZS5vcGVuRWxlbWVudHMoKS0+aW5U
YWJsZVNjb3BlKHRva2VuLT5uYW1lKCkpKSB7CisgICAgQVNTRVJUKHRva2VuLnR5cGUoKSA9PSBI
VE1MVG9rZW46OkVuZFRhZyk7CisgICAgaWYgKGlzVGFibGVCb2R5Q29udGV4dFRhZyh0b2tlbi5u
YW1lKCkpKSB7CisgICAgICAgIGlmICghbV90cmVlLm9wZW5FbGVtZW50cygpLT5pblRhYmxlU2Nv
cGUodG9rZW4ubmFtZSgpKSkgewogICAgICAgICAgICAgcGFyc2VFcnJvcih0b2tlbik7CiAgICAg
ICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgbV90cmVlLm9wZW5FbGVtZW50cygp
LT5wb3BVbnRpbFRhYmxlQm9keVNjb3BlTWFya2VyKCk7CiAgICAgICAgIG1fdHJlZS5vcGVuRWxl
bWVudHMoKS0+cG9wKCk7Ci0gICAgICAgIHNldEluc2VydGlvbk1vZGUoSW5zZXJ0aW9uTW9kZTo6
SW5UYWJsZSk7CisgICAgICAgIG1faW5zZXJ0aW9uTW9kZSA9IEluc2VydGlvbk1vZGU6OkluVGFi
bGU7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgaWYgKHRva2VuLT5uYW1lKCkgPT0gdGFi
bGVUYWcpIHsKKyAgICBpZiAodG9rZW4ubmFtZSgpID09IHRhYmxlVGFnKSB7CiAgICAgICAgIC8v
IEZJWE1FOiBUaGlzIGlzIHNsb3cuCiAgICAgICAgIGlmICghbV90cmVlLm9wZW5FbGVtZW50cygp
LT5pblRhYmxlU2NvcGUodGJvZHlUYWcpICYmICFtX3RyZWUub3BlbkVsZW1lbnRzKCktPmluVGFi
bGVTY29wZSh0aGVhZFRhZykgJiYgIW1fdHJlZS5vcGVuRWxlbWVudHMoKS0+aW5UYWJsZVNjb3Bl
KHRmb290VGFnKSkgewogICAgICAgICAgICAgQVNTRVJUKGlzUGFyc2luZ0ZyYWdtZW50T3JUZW1w
bGF0ZUNvbnRlbnRzKCkpOwpAQCAtMTcwMCw4MyArMTY5NCw4MyBAQCB2b2lkIEhUTUxUcmVlQnVp
bGRlcjo6cHJvY2Vzc0VuZFRhZ0ZvckluVGFibGVCb2R5KEF0b21pY0hUTUxUb2tlbiogdG9rZW4p
CiAgICAgICAgIHByb2Nlc3NFbmRUYWcodG9rZW4pOwogICAgICAgICByZXR1cm47CiAgICAgfQot
ICAgIGlmICh0b2tlbi0+bmFtZSgpID09IGJvZHlUYWcKLSAgICAgICAgfHwgaXNDYXB0aW9uQ29s
T3JDb2xncm91cFRhZyh0b2tlbi0+bmFtZSgpKQotICAgICAgICB8fCB0b2tlbi0+bmFtZSgpID09
IGh0bWxUYWcKLSAgICAgICAgfHwgaXNUYWJsZUNlbGxDb250ZXh0VGFnKHRva2VuLT5uYW1lKCkp
Ci0gICAgICAgIHx8IHRva2VuLT5uYW1lKCkgPT0gdHJUYWcpIHsKKyAgICBpZiAodG9rZW4ubmFt
ZSgpID09IGJvZHlUYWcKKyAgICAgICAgfHwgaXNDYXB0aW9uQ29sT3JDb2xncm91cFRhZyh0b2tl
bi5uYW1lKCkpCisgICAgICAgIHx8IHRva2VuLm5hbWUoKSA9PSBodG1sVGFnCisgICAgICAgIHx8
IGlzVGFibGVDZWxsQ29udGV4dFRhZyh0b2tlbi5uYW1lKCkpCisgICAgICAgIHx8IHRva2VuLm5h
bWUoKSA9PSB0clRhZykgewogICAgICAgICBwYXJzZUVycm9yKHRva2VuKTsKICAgICAgICAgcmV0
dXJuOwogICAgIH0KICAgICBwcm9jZXNzRW5kVGFnRm9ySW5UYWJsZSh0b2tlbik7CiB9CiAKLXZv
aWQgSFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNzRW5kVGFnRm9ySW5Sb3coQXRvbWljSFRNTFRva2Vu
KiB0b2tlbikKK3ZvaWQgSFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNzRW5kVGFnRm9ySW5Sb3coQXRv
bWljSFRNTFRva2VuJiB0b2tlbikKIHsKLSAgICBBU1NFUlQodG9rZW4tPnR5cGUoKSA9PSBIVE1M
VG9rZW46OkVuZFRhZyk7Ci0gICAgaWYgKHRva2VuLT5uYW1lKCkgPT0gdHJUYWcpIHsKKyAgICBB
U1NFUlQodG9rZW4udHlwZSgpID09IEhUTUxUb2tlbjo6RW5kVGFnKTsKKyAgICBpZiAodG9rZW4u
bmFtZSgpID09IHRyVGFnKSB7CiAgICAgICAgIHByb2Nlc3NUckVuZFRhZ0ZvckluUm93KCk7CiAg
ICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgaWYgKHRva2VuLT5uYW1lKCkgPT0gdGFibGVUYWcp
IHsKKyAgICBpZiAodG9rZW4ubmFtZSgpID09IHRhYmxlVGFnKSB7CiAgICAgICAgIGlmICghcHJv
Y2Vzc1RyRW5kVGFnRm9ySW5Sb3coKSkgewogICAgICAgICAgICAgQVNTRVJUKGlzUGFyc2luZ0Zy
YWdtZW50T3JUZW1wbGF0ZUNvbnRlbnRzKCkpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAg
ICB9Ci0gICAgICAgIEFTU0VSVChpbnNlcnRpb25Nb2RlKCkgPT0gSW5zZXJ0aW9uTW9kZTo6SW5U
YWJsZUJvZHkpOworICAgICAgICBBU1NFUlQobV9pbnNlcnRpb25Nb2RlID09IEluc2VydGlvbk1v
ZGU6OkluVGFibGVCb2R5KTsKICAgICAgICAgcHJvY2Vzc0VuZFRhZyh0b2tlbik7CiAgICAgICAg
IHJldHVybjsKICAgICB9Ci0gICAgaWYgKGlzVGFibGVCb2R5Q29udGV4dFRhZyh0b2tlbi0+bmFt
ZSgpKSkgewotICAgICAgICBpZiAoIW1fdHJlZS5vcGVuRWxlbWVudHMoKS0+aW5UYWJsZVNjb3Bl
KHRva2VuLT5uYW1lKCkpKSB7CisgICAgaWYgKGlzVGFibGVCb2R5Q29udGV4dFRhZyh0b2tlbi5u
YW1lKCkpKSB7CisgICAgICAgIGlmICghbV90cmVlLm9wZW5FbGVtZW50cygpLT5pblRhYmxlU2Nv
cGUodG9rZW4ubmFtZSgpKSkgewogICAgICAgICAgICAgcGFyc2VFcnJvcih0b2tlbik7CiAgICAg
ICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgcHJvY2Vzc0Zha2VFbmRUYWcodHJU
YWcpOwotICAgICAgICBBU1NFUlQoaW5zZXJ0aW9uTW9kZSgpID09IEluc2VydGlvbk1vZGU6Oklu
VGFibGVCb2R5KTsKKyAgICAgICAgQVNTRVJUKG1faW5zZXJ0aW9uTW9kZSA9PSBJbnNlcnRpb25N
b2RlOjpJblRhYmxlQm9keSk7CiAgICAgICAgIHByb2Nlc3NFbmRUYWcodG9rZW4pOwogICAgICAg
ICByZXR1cm47CiAgICAgfQotICAgIGlmICh0b2tlbi0+bmFtZSgpID09IGJvZHlUYWcKLSAgICAg
ICAgfHwgaXNDYXB0aW9uQ29sT3JDb2xncm91cFRhZyh0b2tlbi0+bmFtZSgpKQotICAgICAgICB8
fCB0b2tlbi0+bmFtZSgpID09IGh0bWxUYWcKLSAgICAgICAgfHwgaXNUYWJsZUNlbGxDb250ZXh0
VGFnKHRva2VuLT5uYW1lKCkpKSB7CisgICAgaWYgKHRva2VuLm5hbWUoKSA9PSBib2R5VGFnCisg
ICAgICAgIHx8IGlzQ2FwdGlvbkNvbE9yQ29sZ3JvdXBUYWcodG9rZW4ubmFtZSgpKQorICAgICAg
ICB8fCB0b2tlbi5uYW1lKCkgPT0gaHRtbFRhZworICAgICAgICB8fCBpc1RhYmxlQ2VsbENvbnRl
eHRUYWcodG9rZW4ubmFtZSgpKSkgewogICAgICAgICBwYXJzZUVycm9yKHRva2VuKTsKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KICAgICBwcm9jZXNzRW5kVGFnRm9ySW5UYWJsZSh0b2tlbik7CiB9
CiAKLXZvaWQgSFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNzRW5kVGFnRm9ySW5DZWxsKEF0b21pY0hU
TUxUb2tlbiogdG9rZW4pCit2b2lkIEhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc0VuZFRhZ0Zvcklu
Q2VsbChBdG9taWNIVE1MVG9rZW4mIHRva2VuKQogewotICAgIEFTU0VSVCh0b2tlbi0+dHlwZSgp
ID09IEhUTUxUb2tlbjo6RW5kVGFnKTsKLSAgICBpZiAoaXNUYWJsZUNlbGxDb250ZXh0VGFnKHRv
a2VuLT5uYW1lKCkpKSB7Ci0gICAgICAgIGlmICghbV90cmVlLm9wZW5FbGVtZW50cygpLT5pblRh
YmxlU2NvcGUodG9rZW4tPm5hbWUoKSkpIHsKKyAgICBBU1NFUlQodG9rZW4udHlwZSgpID09IEhU
TUxUb2tlbjo6RW5kVGFnKTsKKyAgICBpZiAoaXNUYWJsZUNlbGxDb250ZXh0VGFnKHRva2VuLm5h
bWUoKSkpIHsKKyAgICAgICAgaWYgKCFtX3RyZWUub3BlbkVsZW1lbnRzKCktPmluVGFibGVTY29w
ZSh0b2tlbi5uYW1lKCkpKSB7CiAgICAgICAgICAgICBwYXJzZUVycm9yKHRva2VuKTsKICAgICAg
ICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgICAgICBtX3RyZWUuZ2VuZXJhdGVJbXBsaWVk
RW5kVGFncygpOwotICAgICAgICBpZiAoIW1fdHJlZS5jdXJyZW50U3RhY2tJdGVtKCktPm1hdGNo
ZXNIVE1MVGFnKHRva2VuLT5uYW1lKCkpKQorICAgICAgICBpZiAoIW1fdHJlZS5jdXJyZW50U3Rh
Y2tJdGVtKCktPm1hdGNoZXNIVE1MVGFnKHRva2VuLm5hbWUoKSkpCiAgICAgICAgICAgICBwYXJz
ZUVycm9yKHRva2VuKTsKLSAgICAgICAgbV90cmVlLm9wZW5FbGVtZW50cygpLT5wb3BVbnRpbFBv
cHBlZCh0b2tlbi0+bmFtZSgpKTsKKyAgICAgICAgbV90cmVlLm9wZW5FbGVtZW50cygpLT5wb3BV
bnRpbFBvcHBlZCh0b2tlbi5uYW1lKCkpOwogICAgICAgICBtX3RyZWUuYWN0aXZlRm9ybWF0dGlu
Z0VsZW1lbnRzKCktPmNsZWFyVG9MYXN0TWFya2VyKCk7Ci0gICAgICAgIHNldEluc2VydGlvbk1v
ZGUoSW5zZXJ0aW9uTW9kZTo6SW5Sb3cpOworICAgICAgICBtX2luc2VydGlvbk1vZGUgPSBJbnNl
cnRpb25Nb2RlOjpJblJvdzsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBpZiAodG9rZW4t
Pm5hbWUoKSA9PSBib2R5VGFnCi0gICAgICAgIHx8IGlzQ2FwdGlvbkNvbE9yQ29sZ3JvdXBUYWco
dG9rZW4tPm5hbWUoKSkKLSAgICAgICAgfHwgdG9rZW4tPm5hbWUoKSA9PSBodG1sVGFnKSB7Cisg
ICAgaWYgKHRva2VuLm5hbWUoKSA9PSBib2R5VGFnCisgICAgICAgIHx8IGlzQ2FwdGlvbkNvbE9y
Q29sZ3JvdXBUYWcodG9rZW4ubmFtZSgpKQorICAgICAgICB8fCB0b2tlbi5uYW1lKCkgPT0gaHRt
bFRhZykgewogICAgICAgICBwYXJzZUVycm9yKHRva2VuKTsKICAgICAgICAgcmV0dXJuOwogICAg
IH0KLSAgICBpZiAodG9rZW4tPm5hbWUoKSA9PSB0YWJsZVRhZwotICAgICAgICB8fCB0b2tlbi0+
bmFtZSgpID09IHRyVGFnCi0gICAgICAgIHx8IGlzVGFibGVCb2R5Q29udGV4dFRhZyh0b2tlbi0+
bmFtZSgpKSkgewotICAgICAgICBpZiAoIW1fdHJlZS5vcGVuRWxlbWVudHMoKS0+aW5UYWJsZVNj
b3BlKHRva2VuLT5uYW1lKCkpKSB7CisgICAgaWYgKHRva2VuLm5hbWUoKSA9PSB0YWJsZVRhZwor
ICAgICAgICB8fCB0b2tlbi5uYW1lKCkgPT0gdHJUYWcKKyAgICAgICAgfHwgaXNUYWJsZUJvZHlD
b250ZXh0VGFnKHRva2VuLm5hbWUoKSkpIHsKKyAgICAgICAgaWYgKCFtX3RyZWUub3BlbkVsZW1l
bnRzKCktPmluVGFibGVTY29wZSh0b2tlbi5uYW1lKCkpKSB7CiAjaWYgRU5BQkxFKFRFTVBMQVRF
X0VMRU1FTlQpCi0gICAgICAgICAgICBBU1NFUlQoaXNUYWJsZUJvZHlDb250ZXh0VGFnKHRva2Vu
LT5uYW1lKCkpIHx8IG1fdHJlZS5vcGVuRWxlbWVudHMoKS0+aW5UYWJsZVNjb3BlKHRlbXBsYXRl
VGFnKSB8fCBpc1BhcnNpbmdGcmFnbWVudCgpKTsKKyAgICAgICAgICAgIEFTU0VSVChpc1RhYmxl
Qm9keUNvbnRleHRUYWcodG9rZW4ubmFtZSgpKSB8fCBtX3RyZWUub3BlbkVsZW1lbnRzKCktPmlu
VGFibGVTY29wZSh0ZW1wbGF0ZVRhZykgfHwgaXNQYXJzaW5nRnJhZ21lbnQoKSk7CiAjZWxzZQot
ICAgICAgICAgICAgQVNTRVJUKGlzVGFibGVCb2R5Q29udGV4dFRhZyh0b2tlbi0+bmFtZSgpKSB8
fCBpc1BhcnNpbmdGcmFnbWVudCgpKTsKKyAgICAgICAgICAgIEFTU0VSVChpc1RhYmxlQm9keUNv
bnRleHRUYWcodG9rZW4ubmFtZSgpKSB8fCBpc1BhcnNpbmdGcmFnbWVudCgpKTsKICNlbmRpZgog
ICAgICAgICAgICAgcGFyc2VFcnJvcih0b2tlbik7CiAgICAgICAgICAgICByZXR1cm47CkBAIC0x
Nzg4LDU1ICsxNzgyLDU1IEBAIHZvaWQgSFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNzRW5kVGFnRm9y
SW5DZWxsKEF0b21pY0hUTUxUb2tlbiogdG9rZW4pCiAgICAgcHJvY2Vzc0VuZFRhZ0ZvckluQm9k
eSh0b2tlbik7CiB9CiAKLXZvaWQgSFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNzRW5kVGFnRm9ySW5C
b2R5KEF0b21pY0hUTUxUb2tlbiogdG9rZW4pCit2b2lkIEhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vz
c0VuZFRhZ0ZvckluQm9keShBdG9taWNIVE1MVG9rZW4mIHRva2VuKQogewotICAgIEFTU0VSVCh0
b2tlbi0+dHlwZSgpID09IEhUTUxUb2tlbjo6RW5kVGFnKTsKLSAgICBpZiAodG9rZW4tPm5hbWUo
KSA9PSBib2R5VGFnKSB7CisgICAgQVNTRVJUKHRva2VuLnR5cGUoKSA9PSBIVE1MVG9rZW46OkVu
ZFRhZyk7CisgICAgaWYgKHRva2VuLm5hbWUoKSA9PSBib2R5VGFnKSB7CiAgICAgICAgIHByb2Nl
c3NCb2R5RW5kVGFnRm9ySW5Cb2R5KHRva2VuKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAg
ICBpZiAodG9rZW4tPm5hbWUoKSA9PSBodG1sVGFnKSB7CisgICAgaWYgKHRva2VuLm5hbWUoKSA9
PSBodG1sVGFnKSB7CiAgICAgICAgIEF0b21pY0hUTUxUb2tlbiBlbmRCb2R5KEhUTUxUb2tlbjo6
RW5kVGFnLCBib2R5VGFnLmxvY2FsTmFtZSgpKTsKLSAgICAgICAgaWYgKHByb2Nlc3NCb2R5RW5k
VGFnRm9ySW5Cb2R5KCZlbmRCb2R5KSkKKyAgICAgICAgaWYgKHByb2Nlc3NCb2R5RW5kVGFnRm9y
SW5Cb2R5KGVuZEJvZHkpKQogICAgICAgICAgICAgcHJvY2Vzc0VuZFRhZyh0b2tlbik7CiAgICAg
ICAgIHJldHVybjsKICAgICB9Ci0gICAgaWYgKHRva2VuLT5uYW1lKCkgPT0gYWRkcmVzc1RhZwot
ICAgICAgICB8fCB0b2tlbi0+bmFtZSgpID09IGFydGljbGVUYWcKLSAgICAgICAgfHwgdG9rZW4t
Pm5hbWUoKSA9PSBhc2lkZVRhZwotICAgICAgICB8fCB0b2tlbi0+bmFtZSgpID09IGJsb2NrcXVv
dGVUYWcKLSAgICAgICAgfHwgdG9rZW4tPm5hbWUoKSA9PSBidXR0b25UYWcKLSAgICAgICAgfHwg
dG9rZW4tPm5hbWUoKSA9PSBjZW50ZXJUYWcKLSAgICAgICAgfHwgdG9rZW4tPm5hbWUoKSA9PSBk
ZXRhaWxzVGFnCi0gICAgICAgIHx8IHRva2VuLT5uYW1lKCkgPT0gZGlyVGFnCi0gICAgICAgIHx8
IHRva2VuLT5uYW1lKCkgPT0gZGl2VGFnCi0gICAgICAgIHx8IHRva2VuLT5uYW1lKCkgPT0gZGxU
YWcKLSAgICAgICAgfHwgdG9rZW4tPm5hbWUoKSA9PSBmaWVsZHNldFRhZwotICAgICAgICB8fCB0
b2tlbi0+bmFtZSgpID09IGZpZ2NhcHRpb25UYWcKLSAgICAgICAgfHwgdG9rZW4tPm5hbWUoKSA9
PSBmaWd1cmVUYWcKLSAgICAgICAgfHwgdG9rZW4tPm5hbWUoKSA9PSBmb290ZXJUYWcKLSAgICAg
ICAgfHwgdG9rZW4tPm5hbWUoKSA9PSBoZWFkZXJUYWcKLSAgICAgICAgfHwgdG9rZW4tPm5hbWUo
KSA9PSBoZ3JvdXBUYWcKLSAgICAgICAgfHwgdG9rZW4tPm5hbWUoKSA9PSBsaXN0aW5nVGFnCi0g
ICAgICAgIHx8IHRva2VuLT5uYW1lKCkgPT0gbWFpblRhZwotICAgICAgICB8fCB0b2tlbi0+bmFt
ZSgpID09IG1lbnVUYWcKLSAgICAgICAgfHwgdG9rZW4tPm5hbWUoKSA9PSBuYXZUYWcKLSAgICAg
ICAgfHwgdG9rZW4tPm5hbWUoKSA9PSBvbFRhZwotICAgICAgICB8fCB0b2tlbi0+bmFtZSgpID09
IHByZVRhZwotICAgICAgICB8fCB0b2tlbi0+bmFtZSgpID09IHNlY3Rpb25UYWcKLSAgICAgICAg
fHwgdG9rZW4tPm5hbWUoKSA9PSBzdW1tYXJ5VGFnCi0gICAgICAgIHx8IHRva2VuLT5uYW1lKCkg
PT0gdWxUYWcpIHsKLSAgICAgICAgaWYgKCFtX3RyZWUub3BlbkVsZW1lbnRzKCktPmluU2NvcGUo
dG9rZW4tPm5hbWUoKSkpIHsKKyAgICBpZiAodG9rZW4ubmFtZSgpID09IGFkZHJlc3NUYWcKKyAg
ICAgICAgfHwgdG9rZW4ubmFtZSgpID09IGFydGljbGVUYWcKKyAgICAgICAgfHwgdG9rZW4ubmFt
ZSgpID09IGFzaWRlVGFnCisgICAgICAgIHx8IHRva2VuLm5hbWUoKSA9PSBibG9ja3F1b3RlVGFn
CisgICAgICAgIHx8IHRva2VuLm5hbWUoKSA9PSBidXR0b25UYWcKKyAgICAgICAgfHwgdG9rZW4u
bmFtZSgpID09IGNlbnRlclRhZworICAgICAgICB8fCB0b2tlbi5uYW1lKCkgPT0gZGV0YWlsc1Rh
ZworICAgICAgICB8fCB0b2tlbi5uYW1lKCkgPT0gZGlyVGFnCisgICAgICAgIHx8IHRva2VuLm5h
bWUoKSA9PSBkaXZUYWcKKyAgICAgICAgfHwgdG9rZW4ubmFtZSgpID09IGRsVGFnCisgICAgICAg
IHx8IHRva2VuLm5hbWUoKSA9PSBmaWVsZHNldFRhZworICAgICAgICB8fCB0b2tlbi5uYW1lKCkg
PT0gZmlnY2FwdGlvblRhZworICAgICAgICB8fCB0b2tlbi5uYW1lKCkgPT0gZmlndXJlVGFnCisg
ICAgICAgIHx8IHRva2VuLm5hbWUoKSA9PSBmb290ZXJUYWcKKyAgICAgICAgfHwgdG9rZW4ubmFt
ZSgpID09IGhlYWRlclRhZworICAgICAgICB8fCB0b2tlbi5uYW1lKCkgPT0gaGdyb3VwVGFnCisg
ICAgICAgIHx8IHRva2VuLm5hbWUoKSA9PSBsaXN0aW5nVGFnCisgICAgICAgIHx8IHRva2VuLm5h
bWUoKSA9PSBtYWluVGFnCisgICAgICAgIHx8IHRva2VuLm5hbWUoKSA9PSBtZW51VGFnCisgICAg
ICAgIHx8IHRva2VuLm5hbWUoKSA9PSBuYXZUYWcKKyAgICAgICAgfHwgdG9rZW4ubmFtZSgpID09
IG9sVGFnCisgICAgICAgIHx8IHRva2VuLm5hbWUoKSA9PSBwcmVUYWcKKyAgICAgICAgfHwgdG9r
ZW4ubmFtZSgpID09IHNlY3Rpb25UYWcKKyAgICAgICAgfHwgdG9rZW4ubmFtZSgpID09IHN1bW1h
cnlUYWcKKyAgICAgICAgfHwgdG9rZW4ubmFtZSgpID09IHVsVGFnKSB7CisgICAgICAgIGlmICgh
bV90cmVlLm9wZW5FbGVtZW50cygpLT5pblNjb3BlKHRva2VuLm5hbWUoKSkpIHsKICAgICAgICAg
ICAgIHBhcnNlRXJyb3IodG9rZW4pOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAg
ICAgICAgIG1fdHJlZS5nZW5lcmF0ZUltcGxpZWRFbmRUYWdzKCk7Ci0gICAgICAgIGlmICghbV90
cmVlLmN1cnJlbnRTdGFja0l0ZW0oKS0+bWF0Y2hlc0hUTUxUYWcodG9rZW4tPm5hbWUoKSkpCisg
ICAgICAgIGlmICghbV90cmVlLmN1cnJlbnRTdGFja0l0ZW0oKS0+bWF0Y2hlc0hUTUxUYWcodG9r
ZW4ubmFtZSgpKSkKICAgICAgICAgICAgIHBhcnNlRXJyb3IodG9rZW4pOwotICAgICAgICBtX3Ry
ZWUub3BlbkVsZW1lbnRzKCktPnBvcFVudGlsUG9wcGVkKHRva2VuLT5uYW1lKCkpOworICAgICAg
ICBtX3RyZWUub3BlbkVsZW1lbnRzKCktPnBvcFVudGlsUG9wcGVkKHRva2VuLm5hbWUoKSk7CiAg
ICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgaWYgKHRva2VuLT5uYW1lKCkgPT0gZm9ybVRhZykg
eworICAgIGlmICh0b2tlbi5uYW1lKCkgPT0gZm9ybVRhZykgewogICAgICAgICBpZiAoIWlzUGFy
c2luZ1RlbXBsYXRlQ29udGVudHMoKSkgewogICAgICAgICAgICAgUmVmUHRyPEVsZW1lbnQ+IG5v
ZGUgPSBtX3RyZWUudGFrZUZvcm0oKTsKICAgICAgICAgICAgIGlmICghbm9kZSB8fCAhbV90cmVl
Lm9wZW5FbGVtZW50cygpLT5pblNjb3BlKG5vZGUuZ2V0KCkpKSB7CkBAIC0xODQ4LDg5ICsxODQy
LDg2IEBAIHZvaWQgSFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNzRW5kVGFnRm9ySW5Cb2R5KEF0b21p
Y0hUTUxUb2tlbiogdG9rZW4pCiAgICAgICAgICAgICAgICAgcGFyc2VFcnJvcih0b2tlbik7CiAg
ICAgICAgICAgICBtX3RyZWUub3BlbkVsZW1lbnRzKCktPnJlbW92ZShub2RlLmdldCgpKTsKICAg
ICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGlmICghbV90cmVlLm9wZW5FbGVtZW50cygpLT5p
blNjb3BlKHRva2VuLT5uYW1lKCkpKSB7CisgICAgICAgICAgICBpZiAoIW1fdHJlZS5vcGVuRWxl
bWVudHMoKS0+aW5TY29wZSh0b2tlbi5uYW1lKCkpKSB7CiAgICAgICAgICAgICAgICAgcGFyc2VF
cnJvcih0b2tlbik7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQogICAg
ICAgICAgICAgbV90cmVlLmdlbmVyYXRlSW1wbGllZEVuZFRhZ3MoKTsKICAgICAgICAgICAgIGlm
ICghbV90cmVlLmN1cnJlbnROb2RlKCktPmhhc1RhZ05hbWUoZm9ybVRhZykpCiAgICAgICAgICAg
ICAgICAgcGFyc2VFcnJvcih0b2tlbik7Ci0gICAgICAgICAgICBtX3RyZWUub3BlbkVsZW1lbnRz
KCktPnBvcFVudGlsUG9wcGVkKHRva2VuLT5uYW1lKCkpOworICAgICAgICAgICAgbV90cmVlLm9w
ZW5FbGVtZW50cygpLT5wb3BVbnRpbFBvcHBlZCh0b2tlbi5uYW1lKCkpOwogICAgICAgICB9CiAg
ICAgfQotICAgIGlmICh0b2tlbi0+bmFtZSgpID09IHBUYWcpIHsKLSAgICAgICAgaWYgKCFtX3Ry
ZWUub3BlbkVsZW1lbnRzKCktPmluQnV0dG9uU2NvcGUodG9rZW4tPm5hbWUoKSkpIHsKKyAgICBp
ZiAodG9rZW4ubmFtZSgpID09IHBUYWcpIHsKKyAgICAgICAgaWYgKCFtX3RyZWUub3BlbkVsZW1l
bnRzKCktPmluQnV0dG9uU2NvcGUodG9rZW4ubmFtZSgpKSkgewogICAgICAgICAgICAgcGFyc2VF
cnJvcih0b2tlbik7CiAgICAgICAgICAgICBwcm9jZXNzRmFrZVN0YXJ0VGFnKHBUYWcpOwotICAg
ICAgICAgICAgQVNTRVJUKG1fdHJlZS5vcGVuRWxlbWVudHMoKS0+aW5TY29wZSh0b2tlbi0+bmFt
ZSgpKSk7CisgICAgICAgICAgICBBU1NFUlQobV90cmVlLm9wZW5FbGVtZW50cygpLT5pblNjb3Bl
KHRva2VuLm5hbWUoKSkpOwogICAgICAgICAgICAgcHJvY2Vzc0VuZFRhZyh0b2tlbik7CiAgICAg
ICAgICAgICByZXR1cm47CiAgICAgICAgIH0KLSAgICAgICAgbV90cmVlLmdlbmVyYXRlSW1wbGll
ZEVuZFRhZ3NXaXRoRXhjbHVzaW9uKHRva2VuLT5uYW1lKCkpOwotICAgICAgICBpZiAoIW1fdHJl
ZS5jdXJyZW50U3RhY2tJdGVtKCktPm1hdGNoZXNIVE1MVGFnKHRva2VuLT5uYW1lKCkpKQorICAg
ICAgICBtX3RyZWUuZ2VuZXJhdGVJbXBsaWVkRW5kVGFnc1dpdGhFeGNsdXNpb24odG9rZW4ubmFt
ZSgpKTsKKyAgICAgICAgaWYgKCFtX3RyZWUuY3VycmVudFN0YWNrSXRlbSgpLT5tYXRjaGVzSFRN
TFRhZyh0b2tlbi5uYW1lKCkpKQogICAgICAgICAgICAgcGFyc2VFcnJvcih0b2tlbik7Ci0gICAg
ICAgIG1fdHJlZS5vcGVuRWxlbWVudHMoKS0+cG9wVW50aWxQb3BwZWQodG9rZW4tPm5hbWUoKSk7
CisgICAgICAgIG1fdHJlZS5vcGVuRWxlbWVudHMoKS0+cG9wVW50aWxQb3BwZWQodG9rZW4ubmFt
ZSgpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBpZiAodG9rZW4tPm5hbWUoKSA9PSBs
aVRhZykgewotICAgICAgICBpZiAoIW1fdHJlZS5vcGVuRWxlbWVudHMoKS0+aW5MaXN0SXRlbVNj
b3BlKHRva2VuLT5uYW1lKCkpKSB7CisgICAgaWYgKHRva2VuLm5hbWUoKSA9PSBsaVRhZykgewor
ICAgICAgICBpZiAoIW1fdHJlZS5vcGVuRWxlbWVudHMoKS0+aW5MaXN0SXRlbVNjb3BlKHRva2Vu
Lm5hbWUoKSkpIHsKICAgICAgICAgICAgIHBhcnNlRXJyb3IodG9rZW4pOwogICAgICAgICAgICAg
cmV0dXJuOwogICAgICAgICB9Ci0gICAgICAgIG1fdHJlZS5nZW5lcmF0ZUltcGxpZWRFbmRUYWdz
V2l0aEV4Y2x1c2lvbih0b2tlbi0+bmFtZSgpKTsKLSAgICAgICAgaWYgKCFtX3RyZWUuY3VycmVu
dFN0YWNrSXRlbSgpLT5tYXRjaGVzSFRNTFRhZyh0b2tlbi0+bmFtZSgpKSkKKyAgICAgICAgbV90
cmVlLmdlbmVyYXRlSW1wbGllZEVuZFRhZ3NXaXRoRXhjbHVzaW9uKHRva2VuLm5hbWUoKSk7Cisg
ICAgICAgIGlmICghbV90cmVlLmN1cnJlbnRTdGFja0l0ZW0oKS0+bWF0Y2hlc0hUTUxUYWcodG9r
ZW4ubmFtZSgpKSkKICAgICAgICAgICAgIHBhcnNlRXJyb3IodG9rZW4pOwotICAgICAgICBtX3Ry
ZWUub3BlbkVsZW1lbnRzKCktPnBvcFVudGlsUG9wcGVkKHRva2VuLT5uYW1lKCkpOworICAgICAg
ICBtX3RyZWUub3BlbkVsZW1lbnRzKCktPnBvcFVudGlsUG9wcGVkKHRva2VuLm5hbWUoKSk7CiAg
ICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgaWYgKHRva2VuLT5uYW1lKCkgPT0gZGRUYWcKLSAg
ICAgICAgfHwgdG9rZW4tPm5hbWUoKSA9PSBkdFRhZykgewotICAgICAgICBpZiAoIW1fdHJlZS5v
cGVuRWxlbWVudHMoKS0+aW5TY29wZSh0b2tlbi0+bmFtZSgpKSkgeworICAgIGlmICh0b2tlbi5u
YW1lKCkgPT0gZGRUYWcgfHwgdG9rZW4ubmFtZSgpID09IGR0VGFnKSB7CisgICAgICAgIGlmICgh
bV90cmVlLm9wZW5FbGVtZW50cygpLT5pblNjb3BlKHRva2VuLm5hbWUoKSkpIHsKICAgICAgICAg
ICAgIHBhcnNlRXJyb3IodG9rZW4pOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9Ci0g
ICAgICAgIG1fdHJlZS5nZW5lcmF0ZUltcGxpZWRFbmRUYWdzV2l0aEV4Y2x1c2lvbih0b2tlbi0+
bmFtZSgpKTsKLSAgICAgICAgaWYgKCFtX3RyZWUuY3VycmVudFN0YWNrSXRlbSgpLT5tYXRjaGVz
SFRNTFRhZyh0b2tlbi0+bmFtZSgpKSkKKyAgICAgICAgbV90cmVlLmdlbmVyYXRlSW1wbGllZEVu
ZFRhZ3NXaXRoRXhjbHVzaW9uKHRva2VuLm5hbWUoKSk7CisgICAgICAgIGlmICghbV90cmVlLmN1
cnJlbnRTdGFja0l0ZW0oKS0+bWF0Y2hlc0hUTUxUYWcodG9rZW4ubmFtZSgpKSkKICAgICAgICAg
ICAgIHBhcnNlRXJyb3IodG9rZW4pOwotICAgICAgICBtX3RyZWUub3BlbkVsZW1lbnRzKCktPnBv
cFVudGlsUG9wcGVkKHRva2VuLT5uYW1lKCkpOworICAgICAgICBtX3RyZWUub3BlbkVsZW1lbnRz
KCktPnBvcFVudGlsUG9wcGVkKHRva2VuLm5hbWUoKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9
Ci0gICAgaWYgKGlzTnVtYmVyZWRIZWFkZXJUYWcodG9rZW4tPm5hbWUoKSkpIHsKKyAgICBpZiAo
aXNOdW1iZXJlZEhlYWRlclRhZyh0b2tlbi5uYW1lKCkpKSB7CiAgICAgICAgIGlmICghbV90cmVl
Lm9wZW5FbGVtZW50cygpLT5oYXNOdW1iZXJlZEhlYWRlckVsZW1lbnRJblNjb3BlKCkpIHsKICAg
ICAgICAgICAgIHBhcnNlRXJyb3IodG9rZW4pOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAg
ICB9CiAgICAgICAgIG1fdHJlZS5nZW5lcmF0ZUltcGxpZWRFbmRUYWdzKCk7Ci0gICAgICAgIGlm
ICghbV90cmVlLmN1cnJlbnRTdGFja0l0ZW0oKS0+bWF0Y2hlc0hUTUxUYWcodG9rZW4tPm5hbWUo
KSkpCisgICAgICAgIGlmICghbV90cmVlLmN1cnJlbnRTdGFja0l0ZW0oKS0+bWF0Y2hlc0hUTUxU
YWcodG9rZW4ubmFtZSgpKSkKICAgICAgICAgICAgIHBhcnNlRXJyb3IodG9rZW4pOwogICAgICAg
ICBtX3RyZWUub3BlbkVsZW1lbnRzKCktPnBvcFVudGlsTnVtYmVyZWRIZWFkZXJFbGVtZW50UG9w
cGVkKCk7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgaWYgKGlzRm9ybWF0dGluZ1RhZyh0
b2tlbi0+bmFtZSgpKSkgeworICAgIGlmIChpc0Zvcm1hdHRpbmdUYWcodG9rZW4ubmFtZSgpKSkg
ewogICAgICAgICBjYWxsVGhlQWRvcHRpb25BZ2VuY3kodG9rZW4pOwogICAgICAgICByZXR1cm47
CiAgICAgfQotICAgIGlmICh0b2tlbi0+bmFtZSgpID09IGFwcGxldFRhZwotICAgICAgICB8fCB0
b2tlbi0+bmFtZSgpID09IG1hcnF1ZWVUYWcKLSAgICAgICAgfHwgdG9rZW4tPm5hbWUoKSA9PSBv
YmplY3RUYWcpIHsKLSAgICAgICAgaWYgKCFtX3RyZWUub3BlbkVsZW1lbnRzKCktPmluU2NvcGUo
dG9rZW4tPm5hbWUoKSkpIHsKKyAgICBpZiAodG9rZW4ubmFtZSgpID09IGFwcGxldFRhZyB8fCB0
b2tlbi5uYW1lKCkgPT0gbWFycXVlZVRhZyB8fCB0b2tlbi5uYW1lKCkgPT0gb2JqZWN0VGFnKSB7
CisgICAgICAgIGlmICghbV90cmVlLm9wZW5FbGVtZW50cygpLT5pblNjb3BlKHRva2VuLm5hbWUo
KSkpIHsKICAgICAgICAgICAgIHBhcnNlRXJyb3IodG9rZW4pOwogICAgICAgICAgICAgcmV0dXJu
OwogICAgICAgICB9CiAgICAgICAgIG1fdHJlZS5nZW5lcmF0ZUltcGxpZWRFbmRUYWdzKCk7Ci0g
ICAgICAgIGlmICghbV90cmVlLmN1cnJlbnRTdGFja0l0ZW0oKS0+bWF0Y2hlc0hUTUxUYWcodG9r
ZW4tPm5hbWUoKSkpCisgICAgICAgIGlmICghbV90cmVlLmN1cnJlbnRTdGFja0l0ZW0oKS0+bWF0
Y2hlc0hUTUxUYWcodG9rZW4ubmFtZSgpKSkKICAgICAgICAgICAgIHBhcnNlRXJyb3IodG9rZW4p
OwotICAgICAgICBtX3RyZWUub3BlbkVsZW1lbnRzKCktPnBvcFVudGlsUG9wcGVkKHRva2VuLT5u
YW1lKCkpOworICAgICAgICBtX3RyZWUub3BlbkVsZW1lbnRzKCktPnBvcFVudGlsUG9wcGVkKHRv
a2VuLm5hbWUoKSk7CiAgICAgICAgIG1fdHJlZS5hY3RpdmVGb3JtYXR0aW5nRWxlbWVudHMoKS0+
Y2xlYXJUb0xhc3RNYXJrZXIoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBpZiAodG9r
ZW4tPm5hbWUoKSA9PSBiclRhZykgeworICAgIGlmICh0b2tlbi5uYW1lKCkgPT0gYnJUYWcpIHsK
ICAgICAgICAgcGFyc2VFcnJvcih0b2tlbik7CiAgICAgICAgIHByb2Nlc3NGYWtlU3RhcnRUYWco
YnJUYWcpOwogICAgICAgICByZXR1cm47CiAgICAgfQogI2lmIEVOQUJMRShURU1QTEFURV9FTEVN
RU5UKQotICAgIGlmICh0b2tlbi0+bmFtZSgpID09IHRlbXBsYXRlVGFnKSB7CisgICAgaWYgKHRv
a2VuLm5hbWUoKSA9PSB0ZW1wbGF0ZVRhZykgewogICAgICAgICBwcm9jZXNzVGVtcGxhdGVFbmRU
YWcodG9rZW4pOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtMTk0OSw3ICsxOTQwLDcgQEAg
Ym9vbCBIVE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NDYXB0aW9uRW5kVGFnRm9ySW5DYXB0aW9uKCkK
ICAgICAvLyBGSVhNRTogcGFyc2UgZXJyb3IgaWYgKCFtX3RyZWUuY3VycmVudFN0YWNrSXRlbSgp
LT5oYXNUYWdOYW1lKGNhcHRpb25UYWcpKQogICAgIG1fdHJlZS5vcGVuRWxlbWVudHMoKS0+cG9w
VW50aWxQb3BwZWQoY2FwdGlvblRhZy5sb2NhbE5hbWUoKSk7CiAgICAgbV90cmVlLmFjdGl2ZUZv
cm1hdHRpbmdFbGVtZW50cygpLT5jbGVhclRvTGFzdE1hcmtlcigpOwotICAgIHNldEluc2VydGlv
bk1vZGUoSW5zZXJ0aW9uTW9kZTo6SW5UYWJsZSk7CisgICAgbV9pbnNlcnRpb25Nb2RlID0gSW5z
ZXJ0aW9uTW9kZTo6SW5UYWJsZTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApAQCAtMTk2Myw3ICsx
OTU0LDcgQEAgYm9vbCBIVE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NUckVuZFRhZ0ZvckluUm93KCkK
ICAgICBtX3RyZWUub3BlbkVsZW1lbnRzKCktPnBvcFVudGlsVGFibGVSb3dTY29wZU1hcmtlcigp
OwogICAgIEFTU0VSVChtX3RyZWUuY3VycmVudFN0YWNrSXRlbSgpLT5oYXNUYWdOYW1lKHRyVGFn
KSk7CiAgICAgbV90cmVlLm9wZW5FbGVtZW50cygpLT5wb3AoKTsKLSAgICBzZXRJbnNlcnRpb25N
b2RlKEluc2VydGlvbk1vZGU6OkluVGFibGVCb2R5KTsKKyAgICBtX2luc2VydGlvbk1vZGUgPSBJ
bnNlcnRpb25Nb2RlOjpJblRhYmxlQm9keTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApAQCAtMTk3
OSwxOSArMTk3MCwxOSBAQCBib29sIEhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc1RhYmxlRW5kVGFn
Rm9ySW5UYWJsZSgpCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgSFRNTFRyZWVCdWlsZGVy
Ojpwcm9jZXNzRW5kVGFnRm9ySW5UYWJsZShBdG9taWNIVE1MVG9rZW4qIHRva2VuKQordm9pZCBI
VE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NFbmRUYWdGb3JJblRhYmxlKEF0b21pY0hUTUxUb2tlbiYg
dG9rZW4pCiB7Ci0gICAgQVNTRVJUKHRva2VuLT50eXBlKCkgPT0gSFRNTFRva2VuOjpFbmRUYWcp
OwotICAgIGlmICh0b2tlbi0+bmFtZSgpID09IHRhYmxlVGFnKSB7CisgICAgQVNTRVJUKHRva2Vu
LnR5cGUoKSA9PSBIVE1MVG9rZW46OkVuZFRhZyk7CisgICAgaWYgKHRva2VuLm5hbWUoKSA9PSB0
YWJsZVRhZykgewogICAgICAgICBwcm9jZXNzVGFibGVFbmRUYWdGb3JJblRhYmxlKCk7CiAgICAg
ICAgIHJldHVybjsKICAgICB9Ci0gICAgaWYgKHRva2VuLT5uYW1lKCkgPT0gYm9keVRhZwotICAg
ICAgICB8fCBpc0NhcHRpb25Db2xPckNvbGdyb3VwVGFnKHRva2VuLT5uYW1lKCkpCi0gICAgICAg
IHx8IHRva2VuLT5uYW1lKCkgPT0gaHRtbFRhZwotICAgICAgICB8fCBpc1RhYmxlQm9keUNvbnRl
eHRUYWcodG9rZW4tPm5hbWUoKSkKLSAgICAgICAgfHwgaXNUYWJsZUNlbGxDb250ZXh0VGFnKHRv
a2VuLT5uYW1lKCkpCi0gICAgICAgIHx8IHRva2VuLT5uYW1lKCkgPT0gdHJUYWcpIHsKKyAgICBp
ZiAodG9rZW4ubmFtZSgpID09IGJvZHlUYWcKKyAgICAgICAgfHwgaXNDYXB0aW9uQ29sT3JDb2xn
cm91cFRhZyh0b2tlbi5uYW1lKCkpCisgICAgICAgIHx8IHRva2VuLm5hbWUoKSA9PSBodG1sVGFn
CisgICAgICAgIHx8IGlzVGFibGVCb2R5Q29udGV4dFRhZyh0b2tlbi5uYW1lKCkpCisgICAgICAg
IHx8IGlzVGFibGVDZWxsQ29udGV4dFRhZyh0b2tlbi5uYW1lKCkpCisgICAgICAgIHx8IHRva2Vu
Lm5hbWUoKSA9PSB0clRhZykgewogICAgICAgICBwYXJzZUVycm9yKHRva2VuKTsKICAgICAgICAg
cmV0dXJuOwogICAgIH0KQEAgLTIwMDEsNzUgKzE5OTIsNzUgQEAgdm9pZCBIVE1MVHJlZUJ1aWxk
ZXI6OnByb2Nlc3NFbmRUYWdGb3JJblRhYmxlKEF0b21pY0hUTUxUb2tlbiogdG9rZW4pCiAgICAg
cHJvY2Vzc0VuZFRhZ0ZvckluQm9keSh0b2tlbik7CiB9CiAKLXZvaWQgSFRNTFRyZWVCdWlsZGVy
Ojpwcm9jZXNzRW5kVGFnKEF0b21pY0hUTUxUb2tlbiogdG9rZW4pCit2b2lkIEhUTUxUcmVlQnVp
bGRlcjo6cHJvY2Vzc0VuZFRhZyhBdG9taWNIVE1MVG9rZW4mIHRva2VuKQogewotICAgIEFTU0VS
VCh0b2tlbi0+dHlwZSgpID09IEhUTUxUb2tlbjo6RW5kVGFnKTsKLSAgICBzd2l0Y2ggKGluc2Vy
dGlvbk1vZGUoKSkgeworICAgIEFTU0VSVCh0b2tlbi50eXBlKCkgPT0gSFRNTFRva2VuOjpFbmRU
YWcpOworICAgIHN3aXRjaCAobV9pbnNlcnRpb25Nb2RlKSB7CiAgICAgY2FzZSBJbnNlcnRpb25N
b2RlOjpJbml0aWFsOgotICAgICAgICBBU1NFUlQoaW5zZXJ0aW9uTW9kZSgpID09IEluc2VydGlv
bk1vZGU6OkluaXRpYWwpOworICAgICAgICBBU1NFUlQobV9pbnNlcnRpb25Nb2RlID09IEluc2Vy
dGlvbk1vZGU6OkluaXRpYWwpOwogICAgICAgICBkZWZhdWx0Rm9ySW5pdGlhbCgpOwogICAgICAg
ICBGQUxMVEhST1VHSDsKICAgICBjYXNlIEluc2VydGlvbk1vZGU6OkJlZm9yZUhUTUw6Ci0gICAg
ICAgIEFTU0VSVChpbnNlcnRpb25Nb2RlKCkgPT0gSW5zZXJ0aW9uTW9kZTo6QmVmb3JlSFRNTCk7
Ci0gICAgICAgIGlmICh0b2tlbi0+bmFtZSgpICE9IGhlYWRUYWcgJiYgdG9rZW4tPm5hbWUoKSAh
PSBib2R5VGFnICYmIHRva2VuLT5uYW1lKCkgIT0gaHRtbFRhZyAmJiB0b2tlbi0+bmFtZSgpICE9
IGJyVGFnKSB7CisgICAgICAgIEFTU0VSVChtX2luc2VydGlvbk1vZGUgPT0gSW5zZXJ0aW9uTW9k
ZTo6QmVmb3JlSFRNTCk7CisgICAgICAgIGlmICh0b2tlbi5uYW1lKCkgIT0gaGVhZFRhZyAmJiB0
b2tlbi5uYW1lKCkgIT0gYm9keVRhZyAmJiB0b2tlbi5uYW1lKCkgIT0gaHRtbFRhZyAmJiB0b2tl
bi5uYW1lKCkgIT0gYnJUYWcpIHsKICAgICAgICAgICAgIHBhcnNlRXJyb3IodG9rZW4pOwogICAg
ICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgICAgIGRlZmF1bHRGb3JCZWZvcmVIVE1M
KCk7CiAgICAgICAgIEZBTExUSFJPVUdIOwogICAgIGNhc2UgSW5zZXJ0aW9uTW9kZTo6QmVmb3Jl
SGVhZDoKLSAgICAgICAgQVNTRVJUKGluc2VydGlvbk1vZGUoKSA9PSBJbnNlcnRpb25Nb2RlOjpC
ZWZvcmVIZWFkKTsKLSAgICAgICAgaWYgKHRva2VuLT5uYW1lKCkgIT0gaGVhZFRhZyAmJiB0b2tl
bi0+bmFtZSgpICE9IGJvZHlUYWcgJiYgdG9rZW4tPm5hbWUoKSAhPSBodG1sVGFnICYmIHRva2Vu
LT5uYW1lKCkgIT0gYnJUYWcpIHsKKyAgICAgICAgQVNTRVJUKG1faW5zZXJ0aW9uTW9kZSA9PSBJ
bnNlcnRpb25Nb2RlOjpCZWZvcmVIZWFkKTsKKyAgICAgICAgaWYgKHRva2VuLm5hbWUoKSAhPSBo
ZWFkVGFnICYmIHRva2VuLm5hbWUoKSAhPSBib2R5VGFnICYmIHRva2VuLm5hbWUoKSAhPSBodG1s
VGFnICYmIHRva2VuLm5hbWUoKSAhPSBiclRhZykgewogICAgICAgICAgICAgcGFyc2VFcnJvcih0
b2tlbik7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgZGVmYXVsdEZv
ckJlZm9yZUhlYWQoKTsKICAgICAgICAgRkFMTFRIUk9VR0g7CiAgICAgY2FzZSBJbnNlcnRpb25N
b2RlOjpJbkhlYWQ6Ci0gICAgICAgIEFTU0VSVChpbnNlcnRpb25Nb2RlKCkgPT0gSW5zZXJ0aW9u
TW9kZTo6SW5IZWFkKTsKKyAgICAgICAgQVNTRVJUKG1faW5zZXJ0aW9uTW9kZSA9PSBJbnNlcnRp
b25Nb2RlOjpJbkhlYWQpOwogICAgICAgICAvLyBGSVhNRTogVGhpcyBjYXNlIHNob3VsZCBiZSBi
cm9rZW4gb3V0IGludG8gcHJvY2Vzc0VuZFRhZ0ZvckluSGVhZCwKICAgICAgICAgLy8gYmVjYXVz
ZSBvdGhlciBlbmQgdGFnIGNhc2VzIG5vdyByZWZlciB0byBpdCAoInByb2Nlc3MgdGhlIHRva2Vu
IGZvciB1c2luZyB0aGUgcnVsZXMgb2YgdGhlICJpbiBoZWFkIiBpbnNlcnRpb24gbW9kZSIpLgog
ICAgICAgICAvLyBidXQgYmVjYXVzZSB0aGUgbG9naWMgZmFsbHMgdGhyb3VnaCB0byBJbnNlcnRp
b25Nb2RlOjpBZnRlckhlYWQsIHRoYXQgZ2V0cyBhIGxpdHRsZSBtZXNzeS4KICNpZiBFTkFCTEUo
VEVNUExBVEVfRUxFTUVOVCkKLSAgICAgICAgaWYgKHRva2VuLT5uYW1lKCkgPT0gdGVtcGxhdGVU
YWcpIHsKKyAgICAgICAgaWYgKHRva2VuLm5hbWUoKSA9PSB0ZW1wbGF0ZVRhZykgewogICAgICAg
ICAgICAgcHJvY2Vzc1RlbXBsYXRlRW5kVGFnKHRva2VuKTsKICAgICAgICAgICAgIHJldHVybjsK
ICAgICAgICAgfQogI2VuZGlmCi0gICAgICAgIGlmICh0b2tlbi0+bmFtZSgpID09IGhlYWRUYWcp
IHsKKyAgICAgICAgaWYgKHRva2VuLm5hbWUoKSA9PSBoZWFkVGFnKSB7CiAgICAgICAgICAgICBt
X3RyZWUub3BlbkVsZW1lbnRzKCktPnBvcEhUTUxIZWFkRWxlbWVudCgpOwotICAgICAgICAgICAg
c2V0SW5zZXJ0aW9uTW9kZShJbnNlcnRpb25Nb2RlOjpBZnRlckhlYWQpOworICAgICAgICAgICAg
bV9pbnNlcnRpb25Nb2RlID0gSW5zZXJ0aW9uTW9kZTo6QWZ0ZXJIZWFkOwogICAgICAgICAgICAg
cmV0dXJuOwogICAgICAgICB9Ci0gICAgICAgIGlmICh0b2tlbi0+bmFtZSgpICE9IGJvZHlUYWcg
JiYgdG9rZW4tPm5hbWUoKSAhPSBodG1sVGFnICYmIHRva2VuLT5uYW1lKCkgIT0gYnJUYWcpIHsK
KyAgICAgICAgaWYgKHRva2VuLm5hbWUoKSAhPSBib2R5VGFnICYmIHRva2VuLm5hbWUoKSAhPSBo
dG1sVGFnICYmIHRva2VuLm5hbWUoKSAhPSBiclRhZykgewogICAgICAgICAgICAgcGFyc2VFcnJv
cih0b2tlbik7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgZGVmYXVs
dEZvckluSGVhZCgpOwogICAgICAgICBGQUxMVEhST1VHSDsKICAgICBjYXNlIEluc2VydGlvbk1v
ZGU6OkFmdGVySGVhZDoKLSAgICAgICAgQVNTRVJUKGluc2VydGlvbk1vZGUoKSA9PSBJbnNlcnRp
b25Nb2RlOjpBZnRlckhlYWQpOwotICAgICAgICBpZiAodG9rZW4tPm5hbWUoKSAhPSBib2R5VGFn
ICYmIHRva2VuLT5uYW1lKCkgIT0gaHRtbFRhZyAmJiB0b2tlbi0+bmFtZSgpICE9IGJyVGFnKSB7
CisgICAgICAgIEFTU0VSVChtX2luc2VydGlvbk1vZGUgPT0gSW5zZXJ0aW9uTW9kZTo6QWZ0ZXJI
ZWFkKTsKKyAgICAgICAgaWYgKHRva2VuLm5hbWUoKSAhPSBib2R5VGFnICYmIHRva2VuLm5hbWUo
KSAhPSBodG1sVGFnICYmIHRva2VuLm5hbWUoKSAhPSBiclRhZykgewogICAgICAgICAgICAgcGFy
c2VFcnJvcih0b2tlbik7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAg
ZGVmYXVsdEZvckFmdGVySGVhZCgpOwogICAgICAgICBGQUxMVEhST1VHSDsKICAgICBjYXNlIElu
c2VydGlvbk1vZGU6OkluQm9keToKLSAgICAgICAgQVNTRVJUKGluc2VydGlvbk1vZGUoKSA9PSBJ
bnNlcnRpb25Nb2RlOjpJbkJvZHkpOworICAgICAgICBBU1NFUlQobV9pbnNlcnRpb25Nb2RlID09
IEluc2VydGlvbk1vZGU6OkluQm9keSk7CiAgICAgICAgIHByb2Nlc3NFbmRUYWdGb3JJbkJvZHko
dG9rZW4pOwogICAgICAgICBicmVhazsKICAgICBjYXNlIEluc2VydGlvbk1vZGU6OkluVGFibGU6
Ci0gICAgICAgIEFTU0VSVChpbnNlcnRpb25Nb2RlKCkgPT0gSW5zZXJ0aW9uTW9kZTo6SW5UYWJs
ZSk7CisgICAgICAgIEFTU0VSVChtX2luc2VydGlvbk1vZGUgPT0gSW5zZXJ0aW9uTW9kZTo6SW5U
YWJsZSk7CiAgICAgICAgIHByb2Nlc3NFbmRUYWdGb3JJblRhYmxlKHRva2VuKTsKICAgICAgICAg
YnJlYWs7CiAgICAgY2FzZSBJbnNlcnRpb25Nb2RlOjpJbkNhcHRpb246Ci0gICAgICAgIEFTU0VS
VChpbnNlcnRpb25Nb2RlKCkgPT0gSW5zZXJ0aW9uTW9kZTo6SW5DYXB0aW9uKTsKLSAgICAgICAg
aWYgKHRva2VuLT5uYW1lKCkgPT0gY2FwdGlvblRhZykgeworICAgICAgICBBU1NFUlQobV9pbnNl
cnRpb25Nb2RlID09IEluc2VydGlvbk1vZGU6OkluQ2FwdGlvbik7CisgICAgICAgIGlmICh0b2tl
bi5uYW1lKCkgPT0gY2FwdGlvblRhZykgewogICAgICAgICAgICAgcHJvY2Vzc0NhcHRpb25FbmRU
YWdGb3JJbkNhcHRpb24oKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQotICAgICAg
ICBpZiAodG9rZW4tPm5hbWUoKSA9PSB0YWJsZVRhZykgeworICAgICAgICBpZiAodG9rZW4ubmFt
ZSgpID09IHRhYmxlVGFnKSB7CiAgICAgICAgICAgICBwYXJzZUVycm9yKHRva2VuKTsKICAgICAg
ICAgICAgIGlmICghcHJvY2Vzc0NhcHRpb25FbmRUYWdGb3JJbkNhcHRpb24oKSkgewogICAgICAg
ICAgICAgICAgIEFTU0VSVChpc1BhcnNpbmdGcmFnbWVudCgpKTsKQEAgLTIwNzgsMzAgKzIwNjks
MzAgQEAgdm9pZCBIVE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NFbmRUYWcoQXRvbWljSFRNTFRva2Vu
KiB0b2tlbikKICAgICAgICAgICAgIHByb2Nlc3NFbmRUYWcodG9rZW4pOwogICAgICAgICAgICAg
cmV0dXJuOwogICAgICAgICB9Ci0gICAgICAgIGlmICh0b2tlbi0+bmFtZSgpID09IGJvZHlUYWcK
LSAgICAgICAgICAgIHx8IHRva2VuLT5uYW1lKCkgPT0gY29sVGFnCi0gICAgICAgICAgICB8fCB0
b2tlbi0+bmFtZSgpID09IGNvbGdyb3VwVGFnCi0gICAgICAgICAgICB8fCB0b2tlbi0+bmFtZSgp
ID09IGh0bWxUYWcKLSAgICAgICAgICAgIHx8IGlzVGFibGVCb2R5Q29udGV4dFRhZyh0b2tlbi0+
bmFtZSgpKQotICAgICAgICAgICAgfHwgaXNUYWJsZUNlbGxDb250ZXh0VGFnKHRva2VuLT5uYW1l
KCkpCi0gICAgICAgICAgICB8fCB0b2tlbi0+bmFtZSgpID09IHRyVGFnKSB7CisgICAgICAgIGlm
ICh0b2tlbi5uYW1lKCkgPT0gYm9keVRhZworICAgICAgICAgICAgfHwgdG9rZW4ubmFtZSgpID09
IGNvbFRhZworICAgICAgICAgICAgfHwgdG9rZW4ubmFtZSgpID09IGNvbGdyb3VwVGFnCisgICAg
ICAgICAgICB8fCB0b2tlbi5uYW1lKCkgPT0gaHRtbFRhZworICAgICAgICAgICAgfHwgaXNUYWJs
ZUJvZHlDb250ZXh0VGFnKHRva2VuLm5hbWUoKSkKKyAgICAgICAgICAgIHx8IGlzVGFibGVDZWxs
Q29udGV4dFRhZyh0b2tlbi5uYW1lKCkpCisgICAgICAgICAgICB8fCB0b2tlbi5uYW1lKCkgPT0g
dHJUYWcpIHsKICAgICAgICAgICAgIHBhcnNlRXJyb3IodG9rZW4pOwogICAgICAgICAgICAgcmV0
dXJuOwogICAgICAgICB9CiAgICAgICAgIHByb2Nlc3NFbmRUYWdGb3JJbkJvZHkodG9rZW4pOwog
ICAgICAgICBicmVhazsKICAgICBjYXNlIEluc2VydGlvbk1vZGU6OkluQ29sdW1uR3JvdXA6Ci0g
ICAgICAgIEFTU0VSVChpbnNlcnRpb25Nb2RlKCkgPT0gSW5zZXJ0aW9uTW9kZTo6SW5Db2x1bW5H
cm91cCk7Ci0gICAgICAgIGlmICh0b2tlbi0+bmFtZSgpID09IGNvbGdyb3VwVGFnKSB7CisgICAg
ICAgIEFTU0VSVChtX2luc2VydGlvbk1vZGUgPT0gSW5zZXJ0aW9uTW9kZTo6SW5Db2x1bW5Hcm91
cCk7CisgICAgICAgIGlmICh0b2tlbi5uYW1lKCkgPT0gY29sZ3JvdXBUYWcpIHsKICAgICAgICAg
ICAgIHByb2Nlc3NDb2xncm91cEVuZFRhZ0ZvckluQ29sdW1uR3JvdXAoKTsKICAgICAgICAgICAg
IHJldHVybjsKICAgICAgICAgfQotICAgICAgICBpZiAodG9rZW4tPm5hbWUoKSA9PSBjb2xUYWcp
IHsKKyAgICAgICAgaWYgKHRva2VuLm5hbWUoKSA9PSBjb2xUYWcpIHsKICAgICAgICAgICAgIHBh
cnNlRXJyb3IodG9rZW4pOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAjaWYgRU5B
QkxFKFRFTVBMQVRFX0VMRU1FTlQpCi0gICAgICAgIGlmICh0b2tlbi0+bmFtZSgpID09IHRlbXBs
YXRlVGFnKSB7CisgICAgICAgIGlmICh0b2tlbi5uYW1lKCkgPT0gdGVtcGxhdGVUYWcpIHsKICAg
ICAgICAgICAgIHByb2Nlc3NUZW1wbGF0ZUVuZFRhZyh0b2tlbik7CiAgICAgICAgICAgICByZXR1
cm47CiAgICAgICAgIH0KQEAgLTIxMTMsNDQgKzIxMDQsNDQgQEAgdm9pZCBIVE1MVHJlZUJ1aWxk
ZXI6OnByb2Nlc3NFbmRUYWcoQXRvbWljSFRNTFRva2VuKiB0b2tlbikKICAgICAgICAgcHJvY2Vz
c0VuZFRhZyh0b2tlbik7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgSW5zZXJ0aW9uTW9kZTo6
SW5Sb3c6Ci0gICAgICAgIEFTU0VSVChpbnNlcnRpb25Nb2RlKCkgPT0gSW5zZXJ0aW9uTW9kZTo6
SW5Sb3cpOworICAgICAgICBBU1NFUlQobV9pbnNlcnRpb25Nb2RlID09IEluc2VydGlvbk1vZGU6
OkluUm93KTsKICAgICAgICAgcHJvY2Vzc0VuZFRhZ0ZvckluUm93KHRva2VuKTsKICAgICAgICAg
YnJlYWs7CiAgICAgY2FzZSBJbnNlcnRpb25Nb2RlOjpJbkNlbGw6Ci0gICAgICAgIEFTU0VSVChp
bnNlcnRpb25Nb2RlKCkgPT0gSW5zZXJ0aW9uTW9kZTo6SW5DZWxsKTsKKyAgICAgICAgQVNTRVJU
KG1faW5zZXJ0aW9uTW9kZSA9PSBJbnNlcnRpb25Nb2RlOjpJbkNlbGwpOwogICAgICAgICBwcm9j
ZXNzRW5kVGFnRm9ySW5DZWxsKHRva2VuKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBJbnNl
cnRpb25Nb2RlOjpJblRhYmxlQm9keToKLSAgICAgICAgQVNTRVJUKGluc2VydGlvbk1vZGUoKSA9
PSBJbnNlcnRpb25Nb2RlOjpJblRhYmxlQm9keSk7CisgICAgICAgIEFTU0VSVChtX2luc2VydGlv
bk1vZGUgPT0gSW5zZXJ0aW9uTW9kZTo6SW5UYWJsZUJvZHkpOwogICAgICAgICBwcm9jZXNzRW5k
VGFnRm9ySW5UYWJsZUJvZHkodG9rZW4pOwogICAgICAgICBicmVhazsKICAgICBjYXNlIEluc2Vy
dGlvbk1vZGU6OkFmdGVyQm9keToKLSAgICAgICAgQVNTRVJUKGluc2VydGlvbk1vZGUoKSA9PSBJ
bnNlcnRpb25Nb2RlOjpBZnRlckJvZHkpOwotICAgICAgICBpZiAodG9rZW4tPm5hbWUoKSA9PSBo
dG1sVGFnKSB7CisgICAgICAgIEFTU0VSVChtX2luc2VydGlvbk1vZGUgPT0gSW5zZXJ0aW9uTW9k
ZTo6QWZ0ZXJCb2R5KTsKKyAgICAgICAgaWYgKHRva2VuLm5hbWUoKSA9PSBodG1sVGFnKSB7CiAg
ICAgICAgICAgICBpZiAoaXNQYXJzaW5nRnJhZ21lbnQoKSkgewogICAgICAgICAgICAgICAgIHBh
cnNlRXJyb3IodG9rZW4pOwogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIHNldEluc2VydGlvbk1vZGUoSW5zZXJ0aW9uTW9kZTo6QWZ0ZXJBZnRlckJv
ZHkpOworICAgICAgICAgICAgbV9pbnNlcnRpb25Nb2RlID0gSW5zZXJ0aW9uTW9kZTo6QWZ0ZXJB
ZnRlckJvZHk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgRkFMTFRI
Uk9VR0g7CiAgICAgY2FzZSBJbnNlcnRpb25Nb2RlOjpBZnRlckFmdGVyQm9keToKLSAgICAgICAg
QVNTRVJUKGluc2VydGlvbk1vZGUoKSA9PSBJbnNlcnRpb25Nb2RlOjpBZnRlckJvZHkgfHwgaW5z
ZXJ0aW9uTW9kZSgpID09IEluc2VydGlvbk1vZGU6OkFmdGVyQWZ0ZXJCb2R5KTsKKyAgICAgICAg
QVNTRVJUKG1faW5zZXJ0aW9uTW9kZSA9PSBJbnNlcnRpb25Nb2RlOjpBZnRlckJvZHkgfHwgbV9p
bnNlcnRpb25Nb2RlID09IEluc2VydGlvbk1vZGU6OkFmdGVyQWZ0ZXJCb2R5KTsKICAgICAgICAg
cGFyc2VFcnJvcih0b2tlbik7Ci0gICAgICAgIHNldEluc2VydGlvbk1vZGUoSW5zZXJ0aW9uTW9k
ZTo6SW5Cb2R5KTsKKyAgICAgICAgbV9pbnNlcnRpb25Nb2RlID0gSW5zZXJ0aW9uTW9kZTo6SW5C
b2R5OwogICAgICAgICBwcm9jZXNzRW5kVGFnKHRva2VuKTsKICAgICAgICAgYnJlYWs7CiAgICAg
Y2FzZSBJbnNlcnRpb25Nb2RlOjpJbkhlYWROb3NjcmlwdDoKLSAgICAgICAgQVNTRVJUKGluc2Vy
dGlvbk1vZGUoKSA9PSBJbnNlcnRpb25Nb2RlOjpJbkhlYWROb3NjcmlwdCk7Ci0gICAgICAgIGlm
ICh0b2tlbi0+bmFtZSgpID09IG5vc2NyaXB0VGFnKSB7CisgICAgICAgIEFTU0VSVChtX2luc2Vy
dGlvbk1vZGUgPT0gSW5zZXJ0aW9uTW9kZTo6SW5IZWFkTm9zY3JpcHQpOworICAgICAgICBpZiAo
dG9rZW4ubmFtZSgpID09IG5vc2NyaXB0VGFnKSB7CiAgICAgICAgICAgICBBU1NFUlQobV90cmVl
LmN1cnJlbnRTdGFja0l0ZW0oKS0+aGFzVGFnTmFtZShub3NjcmlwdFRhZykpOwogICAgICAgICAg
ICAgbV90cmVlLm9wZW5FbGVtZW50cygpLT5wb3AoKTsKICAgICAgICAgICAgIEFTU0VSVChtX3Ry
ZWUuY3VycmVudFN0YWNrSXRlbSgpLT5oYXNUYWdOYW1lKGhlYWRUYWcpKTsKLSAgICAgICAgICAg
IHNldEluc2VydGlvbk1vZGUoSW5zZXJ0aW9uTW9kZTo6SW5IZWFkKTsKKyAgICAgICAgICAgIG1f
aW5zZXJ0aW9uTW9kZSA9IEluc2VydGlvbk1vZGU6OkluSGVhZDsKICAgICAgICAgICAgIHJldHVy
bjsKICAgICAgICAgfQotICAgICAgICBpZiAodG9rZW4tPm5hbWUoKSAhPSBiclRhZykgeworICAg
ICAgICBpZiAodG9rZW4ubmFtZSgpICE9IGJyVGFnKSB7CiAgICAgICAgICAgICBwYXJzZUVycm9y
KHRva2VuKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQpAQCAtMjE1OCwxMyArMjE0
OSwxMyBAQCB2b2lkIEhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc0VuZFRhZyhBdG9taWNIVE1MVG9r
ZW4qIHRva2VuKQogICAgICAgICBwcm9jZXNzVG9rZW4odG9rZW4pOwogICAgICAgICBicmVhazsK
ICAgICBjYXNlIEluc2VydGlvbk1vZGU6OlRleHQ6Ci0gICAgICAgIGlmICh0b2tlbi0+bmFtZSgp
ID09IHNjcmlwdFRhZykgeworICAgICAgICBpZiAodG9rZW4ubmFtZSgpID09IHNjcmlwdFRhZykg
ewogICAgICAgICAgICAgLy8gUGF1c2Ugb3Vyc2VsdmVzIHNvIHRoYXQgcGFyc2luZyBzdG9wcyB1
bnRpbCB0aGUgc2NyaXB0IGNhbiBiZSBwcm9jZXNzZWQgYnkgdGhlIGNhbGxlci4KICAgICAgICAg
ICAgIEFTU0VSVChtX3RyZWUuY3VycmVudFN0YWNrSXRlbSgpLT5oYXNUYWdOYW1lKHNjcmlwdFRh
ZykpOwogICAgICAgICAgICAgaWYgKHNjcmlwdGluZ0NvbnRlbnRJc0FsbG93ZWQobV90cmVlLnBh
cnNlckNvbnRlbnRQb2xpY3koKSkpCiAgICAgICAgICAgICAgICAgbV9zY3JpcHRUb1Byb2Nlc3Mg
PSBtX3RyZWUuY3VycmVudEVsZW1lbnQoKTsKICAgICAgICAgICAgIG1fdHJlZS5vcGVuRWxlbWVu
dHMoKS0+cG9wKCk7Ci0gICAgICAgICAgICBzZXRJbnNlcnRpb25Nb2RlKG1fb3JpZ2luYWxJbnNl
cnRpb25Nb2RlKTsKKyAgICAgICAgICAgIG1faW5zZXJ0aW9uTW9kZSA9IG1fb3JpZ2luYWxJbnNl
cnRpb25Nb2RlOwogCiAgICAgICAgICAgICBpZiAobV9wYXJzZXIudG9rZW5pemVyKCkpIHsKICAg
ICAgICAgICAgICAgICAvLyBUaGlzIHRva2VuIHdpbGwgbm90IGhhdmUgYmVlbiBjcmVhdGVkIGJ5
IHRoZSB0b2tlbml6ZXIgaWYgYQpAQCAtMjE3NywxMSArMjE2OCwxMSBAQCB2b2lkIEhUTUxUcmVl
QnVpbGRlcjo6cHJvY2Vzc0VuZFRhZyhBdG9taWNIVE1MVG9rZW4qIHRva2VuKQogICAgICAgICAg
ICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgICAgIG1fdHJlZS5vcGVuRWxlbWVudHMoKS0+cG9w
KCk7Ci0gICAgICAgIHNldEluc2VydGlvbk1vZGUobV9vcmlnaW5hbEluc2VydGlvbk1vZGUpOwor
ICAgICAgICBtX2luc2VydGlvbk1vZGUgPSBtX29yaWdpbmFsSW5zZXJ0aW9uTW9kZTsKICAgICAg
ICAgYnJlYWs7CiAgICAgY2FzZSBJbnNlcnRpb25Nb2RlOjpJbkZyYW1lc2V0OgotICAgICAgICBB
U1NFUlQoaW5zZXJ0aW9uTW9kZSgpID09IEluc2VydGlvbk1vZGU6OkluRnJhbWVzZXQpOwotICAg
ICAgICBpZiAodG9rZW4tPm5hbWUoKSA9PSBmcmFtZXNldFRhZykgeworICAgICAgICBBU1NFUlQo
bV9pbnNlcnRpb25Nb2RlID09IEluc2VydGlvbk1vZGU6OkluRnJhbWVzZXQpOworICAgICAgICBp
ZiAodG9rZW4ubmFtZSgpID09IGZyYW1lc2V0VGFnKSB7CiAgICAgICAgICAgICBib29sIGlnbm9y
ZUZyYW1lc2V0Rm9yRnJhZ21lbnRQYXJzaW5nICA9IG1fdHJlZS5jdXJyZW50SXNSb290Tm9kZSgp
OwogI2lmIEVOQUJMRShURU1QTEFURV9FTEVNRU5UKQogICAgICAgICAgICAgaWdub3JlRnJhbWVz
ZXRGb3JGcmFnbWVudFBhcnNpbmcgPSBpZ25vcmVGcmFtZXNldEZvckZyYWdtZW50UGFyc2luZyB8
fCBtX3RyZWUub3BlbkVsZW1lbnRzKCktPmhhc1RlbXBsYXRlSW5IVE1MU2NvcGUoKTsKQEAgLTIx
OTMsNDYgKzIxODQsNDYgQEAgdm9pZCBIVE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NFbmRUYWcoQXRv
bWljSFRNTFRva2VuKiB0b2tlbikKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIG1fdHJlZS5v
cGVuRWxlbWVudHMoKS0+cG9wKCk7CiAgICAgICAgICAgICBpZiAoIWlzUGFyc2luZ0ZyYWdtZW50
KCkgJiYgIW1fdHJlZS5jdXJyZW50U3RhY2tJdGVtKCktPmhhc1RhZ05hbWUoZnJhbWVzZXRUYWcp
KQotICAgICAgICAgICAgICAgIHNldEluc2VydGlvbk1vZGUoSW5zZXJ0aW9uTW9kZTo6QWZ0ZXJG
cmFtZXNldCk7CisgICAgICAgICAgICAgICAgbV9pbnNlcnRpb25Nb2RlID0gSW5zZXJ0aW9uTW9k
ZTo6QWZ0ZXJGcmFtZXNldDsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogI2lmIEVO
QUJMRShURU1QTEFURV9FTEVNRU5UKQotICAgICAgICBpZiAodG9rZW4tPm5hbWUoKSA9PSB0ZW1w
bGF0ZVRhZykgeworICAgICAgICBpZiAodG9rZW4ubmFtZSgpID09IHRlbXBsYXRlVGFnKSB7CiAg
ICAgICAgICAgICBwcm9jZXNzVGVtcGxhdGVFbmRUYWcodG9rZW4pOwogICAgICAgICAgICAgcmV0
dXJuOwogICAgICAgICB9CiAjZW5kaWYKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBJbnNlcnRp
b25Nb2RlOjpBZnRlckZyYW1lc2V0OgotICAgICAgICBBU1NFUlQoaW5zZXJ0aW9uTW9kZSgpID09
IEluc2VydGlvbk1vZGU6OkFmdGVyRnJhbWVzZXQpOwotICAgICAgICBpZiAodG9rZW4tPm5hbWUo
KSA9PSBodG1sVGFnKSB7Ci0gICAgICAgICAgICBzZXRJbnNlcnRpb25Nb2RlKEluc2VydGlvbk1v
ZGU6OkFmdGVyQWZ0ZXJGcmFtZXNldCk7CisgICAgICAgIEFTU0VSVChtX2luc2VydGlvbk1vZGUg
PT0gSW5zZXJ0aW9uTW9kZTo6QWZ0ZXJGcmFtZXNldCk7CisgICAgICAgIGlmICh0b2tlbi5uYW1l
KCkgPT0gaHRtbFRhZykgeworICAgICAgICAgICAgbV9pbnNlcnRpb25Nb2RlID0gSW5zZXJ0aW9u
TW9kZTo6QWZ0ZXJBZnRlckZyYW1lc2V0OwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9
CiAgICAgICAgIEZBTExUSFJPVUdIOwogICAgIGNhc2UgSW5zZXJ0aW9uTW9kZTo6QWZ0ZXJBZnRl
ckZyYW1lc2V0OgotICAgICAgICBBU1NFUlQoaW5zZXJ0aW9uTW9kZSgpID09IEluc2VydGlvbk1v
ZGU6OkFmdGVyRnJhbWVzZXQgfHwgaW5zZXJ0aW9uTW9kZSgpID09IEluc2VydGlvbk1vZGU6OkFm
dGVyQWZ0ZXJGcmFtZXNldCk7CisgICAgICAgIEFTU0VSVChtX2luc2VydGlvbk1vZGUgPT0gSW5z
ZXJ0aW9uTW9kZTo6QWZ0ZXJGcmFtZXNldCB8fCBtX2luc2VydGlvbk1vZGUgPT0gSW5zZXJ0aW9u
TW9kZTo6QWZ0ZXJBZnRlckZyYW1lc2V0KTsKICAgICAgICAgcGFyc2VFcnJvcih0b2tlbik7CiAg
ICAgICAgIGJyZWFrOwogICAgIGNhc2UgSW5zZXJ0aW9uTW9kZTo6SW5TZWxlY3RJblRhYmxlOgot
ICAgICAgICBBU1NFUlQoaW5zZXJ0aW9uTW9kZSgpID09IEluc2VydGlvbk1vZGU6OkluU2VsZWN0
SW5UYWJsZSk7Ci0gICAgICAgIGlmICh0b2tlbi0+bmFtZSgpID09IGNhcHRpb25UYWcKLSAgICAg
ICAgICAgIHx8IHRva2VuLT5uYW1lKCkgPT0gdGFibGVUYWcKLSAgICAgICAgICAgIHx8IGlzVGFi
bGVCb2R5Q29udGV4dFRhZyh0b2tlbi0+bmFtZSgpKQotICAgICAgICAgICAgfHwgdG9rZW4tPm5h
bWUoKSA9PSB0clRhZwotICAgICAgICAgICAgfHwgaXNUYWJsZUNlbGxDb250ZXh0VGFnKHRva2Vu
LT5uYW1lKCkpKSB7CisgICAgICAgIEFTU0VSVChtX2luc2VydGlvbk1vZGUgPT0gSW5zZXJ0aW9u
TW9kZTo6SW5TZWxlY3RJblRhYmxlKTsKKyAgICAgICAgaWYgKHRva2VuLm5hbWUoKSA9PSBjYXB0
aW9uVGFnCisgICAgICAgICAgICB8fCB0b2tlbi5uYW1lKCkgPT0gdGFibGVUYWcKKyAgICAgICAg
ICAgIHx8IGlzVGFibGVCb2R5Q29udGV4dFRhZyh0b2tlbi5uYW1lKCkpCisgICAgICAgICAgICB8
fCB0b2tlbi5uYW1lKCkgPT0gdHJUYWcKKyAgICAgICAgICAgIHx8IGlzVGFibGVDZWxsQ29udGV4
dFRhZyh0b2tlbi5uYW1lKCkpKSB7CiAgICAgICAgICAgICBwYXJzZUVycm9yKHRva2VuKTsKLSAg
ICAgICAgICAgIGlmIChtX3RyZWUub3BlbkVsZW1lbnRzKCktPmluVGFibGVTY29wZSh0b2tlbi0+
bmFtZSgpKSkgeworICAgICAgICAgICAgaWYgKG1fdHJlZS5vcGVuRWxlbWVudHMoKS0+aW5UYWJs
ZVNjb3BlKHRva2VuLm5hbWUoKSkpIHsKICAgICAgICAgICAgICAgICBBdG9taWNIVE1MVG9rZW4g
ZW5kU2VsZWN0KEhUTUxUb2tlbjo6RW5kVGFnLCBzZWxlY3RUYWcubG9jYWxOYW1lKCkpOwotICAg
ICAgICAgICAgICAgIHByb2Nlc3NFbmRUYWcoJmVuZFNlbGVjdCk7CisgICAgICAgICAgICAgICAg
cHJvY2Vzc0VuZFRhZyhlbmRTZWxlY3QpOwogICAgICAgICAgICAgICAgIHByb2Nlc3NFbmRUYWco
dG9rZW4pOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAg
ICAgICAgIEZBTExUSFJPVUdIOwogICAgIGNhc2UgSW5zZXJ0aW9uTW9kZTo6SW5TZWxlY3Q6Ci0g
ICAgICAgIEFTU0VSVChpbnNlcnRpb25Nb2RlKCkgPT0gSW5zZXJ0aW9uTW9kZTo6SW5TZWxlY3Qg
fHwgaW5zZXJ0aW9uTW9kZSgpID09IEluc2VydGlvbk1vZGU6OkluU2VsZWN0SW5UYWJsZSk7Ci0g
ICAgICAgIGlmICh0b2tlbi0+bmFtZSgpID09IG9wdGdyb3VwVGFnKSB7CisgICAgICAgIEFTU0VS
VChtX2luc2VydGlvbk1vZGUgPT0gSW5zZXJ0aW9uTW9kZTo6SW5TZWxlY3QgfHwgbV9pbnNlcnRp
b25Nb2RlID09IEluc2VydGlvbk1vZGU6OkluU2VsZWN0SW5UYWJsZSk7CisgICAgICAgIGlmICh0
b2tlbi5uYW1lKCkgPT0gb3B0Z3JvdXBUYWcpIHsKICAgICAgICAgICAgIGlmIChpczxIVE1MT3B0
aW9uRWxlbWVudD4oKm1fdHJlZS5jdXJyZW50U3RhY2tJdGVtKCktPm5vZGUoKSkgJiYgbV90cmVl
Lm9uZUJlbG93VG9wKCkgJiYgaXM8SFRNTE9wdEdyb3VwRWxlbWVudD4oKm1fdHJlZS5vbmVCZWxv
d1RvcCgpLT5ub2RlKCkpKQogICAgICAgICAgICAgICAgIHByb2Nlc3NGYWtlRW5kVGFnKG9wdGlv
blRhZyk7CiAgICAgICAgICAgICBpZiAoaXM8SFRNTE9wdEdyb3VwRWxlbWVudD4oKm1fdHJlZS5j
dXJyZW50U3RhY2tJdGVtKCktPm5vZGUoKSkpIHsKQEAgLTIyNDIsNyArMjIzMyw3IEBAIHZvaWQg
SFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNzRW5kVGFnKEF0b21pY0hUTUxUb2tlbiogdG9rZW4pCiAg
ICAgICAgICAgICBwYXJzZUVycm9yKHRva2VuKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAg
ICAgfQotICAgICAgICBpZiAodG9rZW4tPm5hbWUoKSA9PSBvcHRpb25UYWcpIHsKKyAgICAgICAg
aWYgKHRva2VuLm5hbWUoKSA9PSBvcHRpb25UYWcpIHsKICAgICAgICAgICAgIGlmIChpczxIVE1M
T3B0aW9uRWxlbWVudD4oKm1fdHJlZS5jdXJyZW50U3RhY2tJdGVtKCktPm5vZGUoKSkpIHsKICAg
ICAgICAgICAgICAgICBtX3RyZWUub3BlbkVsZW1lbnRzKCktPnBvcCgpOwogICAgICAgICAgICAg
ICAgIHJldHVybjsKQEAgLTIyNTAsOCArMjI0MSw4IEBAIHZvaWQgSFRNTFRyZWVCdWlsZGVyOjpw
cm9jZXNzRW5kVGFnKEF0b21pY0hUTUxUb2tlbiogdG9rZW4pCiAgICAgICAgICAgICBwYXJzZUVy
cm9yKHRva2VuKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQotICAgICAgICBpZiAo
dG9rZW4tPm5hbWUoKSA9PSBzZWxlY3RUYWcpIHsKLSAgICAgICAgICAgIGlmICghbV90cmVlLm9w
ZW5FbGVtZW50cygpLT5pblNlbGVjdFNjb3BlKHRva2VuLT5uYW1lKCkpKSB7CisgICAgICAgIGlm
ICh0b2tlbi5uYW1lKCkgPT0gc2VsZWN0VGFnKSB7CisgICAgICAgICAgICBpZiAoIW1fdHJlZS5v
cGVuRWxlbWVudHMoKS0+aW5TZWxlY3RTY29wZSh0b2tlbi5uYW1lKCkpKSB7CiAgICAgICAgICAg
ICAgICAgQVNTRVJUKGlzUGFyc2luZ0ZyYWdtZW50KCkpOwogICAgICAgICAgICAgICAgIHBhcnNl
RXJyb3IodG9rZW4pOwogICAgICAgICAgICAgICAgIHJldHVybjsKQEAgLTIyNjEsNyArMjI1Miw3
IEBAIHZvaWQgSFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNzRW5kVGFnKEF0b21pY0hUTUxUb2tlbiog
dG9rZW4pCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICNpZiBFTkFCTEUoVEVNUExB
VEVfRUxFTUVOVCkKLSAgICAgICAgaWYgKHRva2VuLT5uYW1lKCkgPT0gdGVtcGxhdGVUYWcpIHsK
KyAgICAgICAgaWYgKHRva2VuLm5hbWUoKSA9PSB0ZW1wbGF0ZVRhZykgewogICAgICAgICAgICAg
cHJvY2Vzc1RlbXBsYXRlRW5kVGFnKHRva2VuKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAg
ICAgfQpAQCAtMjI3MSwzMSArMjI2MiwyOSBAQCB2b2lkIEhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vz
c0VuZFRhZyhBdG9taWNIVE1MVG9rZW4qIHRva2VuKQogICAgICAgICBkZWZhdWx0Rm9ySW5UYWJs
ZVRleHQoKTsKICAgICAgICAgcHJvY2Vzc0VuZFRhZyh0b2tlbik7CiAgICAgICAgIGJyZWFrOwot
ICAgIGNhc2UgSW5zZXJ0aW9uTW9kZTo6VGVtcGxhdGVDb250ZW50czoKICNpZiBFTkFCTEUoVEVN
UExBVEVfRUxFTUVOVCkKLSAgICAgICAgaWYgKHRva2VuLT5uYW1lKCkgPT0gdGVtcGxhdGVUYWcp
IHsKKyAgICBjYXNlIEluc2VydGlvbk1vZGU6OlRlbXBsYXRlQ29udGVudHM6CisgICAgICAgIGlm
ICh0b2tlbi5uYW1lKCkgPT0gdGVtcGxhdGVUYWcpIHsKICAgICAgICAgICAgIHByb2Nlc3NUZW1w
bGF0ZUVuZFRhZyh0b2tlbik7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KLSNlbHNl
Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotI2VuZGlmCiAgICAgICAgIGJyZWFrOwor
I2VuZGlmCiAgICAgfQogfQogCi12b2lkIEhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc0NvbW1lbnQo
QXRvbWljSFRNTFRva2VuKiB0b2tlbikKK3ZvaWQgSFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNzQ29t
bWVudChBdG9taWNIVE1MVG9rZW4mIHRva2VuKQogewotICAgIEFTU0VSVCh0b2tlbi0+dHlwZSgp
ID09IEhUTUxUb2tlbjo6Q29tbWVudCk7CisgICAgQVNTRVJUKHRva2VuLnR5cGUoKSA9PSBIVE1M
VG9rZW46OkNvbW1lbnQpOwogICAgIGlmIChtX2luc2VydGlvbk1vZGUgPT0gSW5zZXJ0aW9uTW9k
ZTo6SW5pdGlhbAogICAgICAgICB8fCBtX2luc2VydGlvbk1vZGUgPT0gSW5zZXJ0aW9uTW9kZTo6
QmVmb3JlSFRNTAogICAgICAgICB8fCBtX2luc2VydGlvbk1vZGUgPT0gSW5zZXJ0aW9uTW9kZTo6
QWZ0ZXJBZnRlckJvZHkKICAgICAgICAgfHwgbV9pbnNlcnRpb25Nb2RlID09IEluc2VydGlvbk1v
ZGU6OkFmdGVyQWZ0ZXJGcmFtZXNldCkgewotICAgICAgICBtX3RyZWUuaW5zZXJ0Q29tbWVudE9u
RG9jdW1lbnQodG9rZW4pOworICAgICAgICBtX3RyZWUuaW5zZXJ0Q29tbWVudE9uRG9jdW1lbnQo
JnRva2VuKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBpZiAobV9pbnNlcnRpb25Nb2Rl
ID09IEluc2VydGlvbk1vZGU6OkFmdGVyQm9keSkgewotICAgICAgICBtX3RyZWUuaW5zZXJ0Q29t
bWVudE9uSFRNTEh0bWxFbGVtZW50KHRva2VuKTsKKyAgICAgICAgbV90cmVlLmluc2VydENvbW1l
bnRPbkhUTUxIdG1sRWxlbWVudCgmdG9rZW4pOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAg
IGlmIChtX2luc2VydGlvbk1vZGUgPT0gSW5zZXJ0aW9uTW9kZTo6SW5UYWJsZVRleHQpIHsKQEAg
LTIzMDMsMTggKzIyOTIsMTkgQEAgdm9pZCBIVE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NDb21tZW50
KEF0b21pY0hUTUxUb2tlbiogdG9rZW4pCiAgICAgICAgIHByb2Nlc3NDb21tZW50KHRva2VuKTsK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBtX3RyZWUuaW5zZXJ0Q29tbWVudCh0b2tlbik7
CisgICAgbV90cmVlLmluc2VydENvbW1lbnQoJnRva2VuKTsKIH0KIAotdm9pZCBIVE1MVHJlZUJ1
aWxkZXI6OnByb2Nlc3NDaGFyYWN0ZXIoQXRvbWljSFRNTFRva2VuKiB0b2tlbikKK3ZvaWQgSFRN
TFRyZWVCdWlsZGVyOjpwcm9jZXNzQ2hhcmFjdGVyKEF0b21pY0hUTUxUb2tlbiYgdG9rZW4pCiB7
Ci0gICAgQVNTRVJUKHRva2VuLT50eXBlKCkgPT0gSFRNTFRva2VuOjpDaGFyYWN0ZXIpOworICAg
IEFTU0VSVCh0b2tlbi50eXBlKCkgPT0gSFRNTFRva2VuOjpDaGFyYWN0ZXIpOwogICAgIEV4dGVy
bmFsQ2hhcmFjdGVyVG9rZW5CdWZmZXIgYnVmZmVyKHRva2VuKTsKICAgICBwcm9jZXNzQ2hhcmFj
dGVyQnVmZmVyKGJ1ZmZlcik7CiB9CiAKLS8vIEZJWE1FOiBFeHRyYWN0IHRoZSBmb2xsb3dpbmcg
aU9TLXNwZWNpZmljIGNvZGUgaW50byBhIHNlcGFyYXRlIGZpbGUuCiAjaWYgRU5BQkxFKFRFTEVQ
SE9ORV9OVU1CRVJfREVURUNUSU9OKSAmJiBQTEFURk9STShJT1MpCisKKy8vIEZJWE1FOiBFeHRy
YWN0IHRoZSBmb2xsb3dpbmcgaU9TLXNwZWNpZmljIGNvZGUgaW50byBhIHNlcGFyYXRlIGZpbGUu
CiAvLyBGcm9tIHRoZSBzdHJpbmcgNDA4OTk2MTAxMCwgY3JlYXRlcyBhIGxpbmsgb2YgdGhlIGZv
cm0gPGEgaHJlZj0idGVsOjQwODk5NjEwMTAiPjQwODk5NjEwMTA8L2E+IGFuZCBpbnNlcnRzIGl0
Lgogdm9pZCBIVE1MVHJlZUJ1aWxkZXI6Omluc2VydFBob25lTnVtYmVyTGluayhjb25zdCBTdHJp
bmcmIHN0cmluZykKIHsKQEAgLTIzMjUsMTAgKzIzMTUsMTAgQEAgdm9pZCBIVE1MVHJlZUJ1aWxk
ZXI6Omluc2VydFBob25lTnVtYmVyTGluayhjb25zdCBTdHJpbmcmIHN0cmluZykKICAgICBBdG9t
aWNIVE1MVG9rZW4gYVN0YXJ0VG9rZW4oSFRNTFRva2VuOjpTdGFydFRhZywgYVRhZ0xvY2FsTmFt
ZSwgYXR0cmlidXRlcyk7CiAgICAgQXRvbWljSFRNTFRva2VuIGFFbmRUb2tlbihIVE1MVG9rZW46
OkVuZFRhZywgYVRhZ0xvY2FsTmFtZSk7CiAKLSAgICBwcm9jZXNzU3RhcnRUYWcoJmFTdGFydFRv
a2VuKTsKKyAgICBwcm9jZXNzU3RhcnRUYWcoYVN0YXJ0VG9rZW4pOwogICAgIG1fdHJlZS5leGVj
dXRlUXVldWVkVGFza3MoKTsKICAgICBtX3RyZWUuaW5zZXJ0VGV4dE5vZGUoc3RyaW5nKTsKLSAg
ICBwcm9jZXNzRW5kVGFnKCZhRW5kVG9rZW4pOworICAgIHByb2Nlc3NFbmRUYWcoYUVuZFRva2Vu
KTsKIH0KIAogLy8gTG9jYXRlcyB0aGUgcGhvbmUgbnVtYmVycyBpbiB0aGUgc3RyaW5nIGFuZCBk
ZWFscyB3aXRoIGl0CkBAIC0yMzk4LDYgKzIzODgsNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgc2hv
dWxkUGFyc2VUZWxlcGhvbmVOdW1iZXJzSW5Ob2RlKGNvbnN0IENvbnRhaW5lck5vZGUmIG5vZGUp
CiAgICAgfSB3aGlsZSAoY3VycmVudE5vZGUpOwogICAgIHJldHVybiB0cnVlOwogfQorCiAjZW5k
aWYgLy8gRU5BQkxFKFRFTEVQSE9ORV9OVU1CRVJfREVURUNUSU9OKSAmJiBQTEFURk9STShJT1Mp
CiAKIHZvaWQgSFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNzQ2hhcmFjdGVyQnVmZmVyKEV4dGVybmFs
Q2hhcmFjdGVyVG9rZW5CdWZmZXImIGJ1ZmZlcikKQEAgLTI0MjEsNzcgKzI0MTIsNjggQEAgUmVw
cm9jZXNzQnVmZmVyOgogICAgICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIHN3aXRjaCAo
aW5zZXJ0aW9uTW9kZSgpKSB7Ci0gICAgY2FzZSBJbnNlcnRpb25Nb2RlOjpJbml0aWFsOiB7Ci0g
ICAgICAgIEFTU0VSVChpbnNlcnRpb25Nb2RlKCkgPT0gSW5zZXJ0aW9uTW9kZTo6SW5pdGlhbCk7
CisgICAgc3dpdGNoIChtX2luc2VydGlvbk1vZGUpIHsKKyAgICBjYXNlIEluc2VydGlvbk1vZGU6
OkluaXRpYWw6CiAgICAgICAgIGJ1ZmZlci5za2lwTGVhZGluZ1doaXRlc3BhY2UoKTsKICAgICAg
ICAgaWYgKGJ1ZmZlci5pc0VtcHR5KCkpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIGRl
ZmF1bHRGb3JJbml0aWFsKCk7CisgICAgICAgIEFTU0VSVChtX2luc2VydGlvbk1vZGUgPT0gSW5z
ZXJ0aW9uTW9kZTo6QmVmb3JlSFRNTCk7CiAgICAgICAgIEZBTExUSFJPVUdIOwotICAgIH0KLSAg
ICBjYXNlIEluc2VydGlvbk1vZGU6OkJlZm9yZUhUTUw6IHsKLSAgICAgICAgQVNTRVJUKGluc2Vy
dGlvbk1vZGUoKSA9PSBJbnNlcnRpb25Nb2RlOjpCZWZvcmVIVE1MKTsKKyAgICBjYXNlIEluc2Vy
dGlvbk1vZGU6OkJlZm9yZUhUTUw6CiAgICAgICAgIGJ1ZmZlci5za2lwTGVhZGluZ1doaXRlc3Bh
Y2UoKTsKICAgICAgICAgaWYgKGJ1ZmZlci5pc0VtcHR5KCkpCiAgICAgICAgICAgICByZXR1cm47
CiAgICAgICAgIGRlZmF1bHRGb3JCZWZvcmVIVE1MKCk7CisgICAgICAgIEFTU0VSVChtX2luc2Vy
dGlvbk1vZGUgPT0gSW5zZXJ0aW9uTW9kZTo6QmVmb3JlSGVhZCk7CiAgICAgICAgIEZBTExUSFJP
VUdIOwotICAgIH0KLSAgICBjYXNlIEluc2VydGlvbk1vZGU6OkJlZm9yZUhlYWQ6IHsKLSAgICAg
ICAgQVNTRVJUKGluc2VydGlvbk1vZGUoKSA9PSBJbnNlcnRpb25Nb2RlOjpCZWZvcmVIZWFkKTsK
KyAgICBjYXNlIEluc2VydGlvbk1vZGU6OkJlZm9yZUhlYWQ6CiAgICAgICAgIGJ1ZmZlci5za2lw
TGVhZGluZ1doaXRlc3BhY2UoKTsKICAgICAgICAgaWYgKGJ1ZmZlci5pc0VtcHR5KCkpCiAgICAg
ICAgICAgICByZXR1cm47CiAgICAgICAgIGRlZmF1bHRGb3JCZWZvcmVIZWFkKCk7CisgICAgICAg
IEFTU0VSVChtX2luc2VydGlvbk1vZGUgPT0gSW5zZXJ0aW9uTW9kZTo6SW5IZWFkKTsKICAgICAg
ICAgRkFMTFRIUk9VR0g7Ci0gICAgfQogICAgIGNhc2UgSW5zZXJ0aW9uTW9kZTo6SW5IZWFkOiB7
Ci0gICAgICAgIEFTU0VSVChpbnNlcnRpb25Nb2RlKCkgPT0gSW5zZXJ0aW9uTW9kZTo6SW5IZWFk
KTsKICAgICAgICAgU3RyaW5nIGxlYWRpbmdXaGl0ZXNwYWNlID0gYnVmZmVyLnRha2VMZWFkaW5n
V2hpdGVzcGFjZSgpOwogICAgICAgICBpZiAoIWxlYWRpbmdXaGl0ZXNwYWNlLmlzRW1wdHkoKSkK
ICAgICAgICAgICAgIG1fdHJlZS5pbnNlcnRUZXh0Tm9kZShsZWFkaW5nV2hpdGVzcGFjZSwgQWxs
V2hpdGVzcGFjZSk7CiAgICAgICAgIGlmIChidWZmZXIuaXNFbXB0eSgpKQogICAgICAgICAgICAg
cmV0dXJuOwogICAgICAgICBkZWZhdWx0Rm9ySW5IZWFkKCk7CisgICAgICAgIEFTU0VSVChtX2lu
c2VydGlvbk1vZGUgPT0gSW5zZXJ0aW9uTW9kZTo6QWZ0ZXJIZWFkKTsKICAgICAgICAgRkFMTFRI
Uk9VR0g7CiAgICAgfQogICAgIGNhc2UgSW5zZXJ0aW9uTW9kZTo6QWZ0ZXJIZWFkOiB7Ci0gICAg
ICAgIEFTU0VSVChpbnNlcnRpb25Nb2RlKCkgPT0gSW5zZXJ0aW9uTW9kZTo6QWZ0ZXJIZWFkKTsK
ICAgICAgICAgU3RyaW5nIGxlYWRpbmdXaGl0ZXNwYWNlID0gYnVmZmVyLnRha2VMZWFkaW5nV2hp
dGVzcGFjZSgpOwogICAgICAgICBpZiAoIWxlYWRpbmdXaGl0ZXNwYWNlLmlzRW1wdHkoKSkKICAg
ICAgICAgICAgIG1fdHJlZS5pbnNlcnRUZXh0Tm9kZShsZWFkaW5nV2hpdGVzcGFjZSwgQWxsV2hp
dGVzcGFjZSk7CiAgICAgICAgIGlmIChidWZmZXIuaXNFbXB0eSgpKQogICAgICAgICAgICAgcmV0
dXJuOwogICAgICAgICBkZWZhdWx0Rm9yQWZ0ZXJIZWFkKCk7CisgICAgICAgIEFTU0VSVChtX2lu
c2VydGlvbk1vZGUgPT0gSW5zZXJ0aW9uTW9kZTo6SW5Cb2R5KTsKICAgICAgICAgRkFMTFRIUk9V
R0g7CiAgICAgfQogICAgIGNhc2UgSW5zZXJ0aW9uTW9kZTo6SW5Cb2R5OgogICAgIGNhc2UgSW5z
ZXJ0aW9uTW9kZTo6SW5DYXB0aW9uOgotICAgIGNhc2UgSW5zZXJ0aW9uTW9kZTo6VGVtcGxhdGVD
b250ZW50czoKLSAgICBjYXNlIEluc2VydGlvbk1vZGU6OkluQ2VsbDogeworICAgIGNhc2UgSW5z
ZXJ0aW9uTW9kZTo6SW5DZWxsOgogI2lmIEVOQUJMRShURU1QTEFURV9FTEVNRU5UKQotICAgICAg
ICBBU1NFUlQoaW5zZXJ0aW9uTW9kZSgpID09IEluc2VydGlvbk1vZGU6OkluQm9keSB8fCBpbnNl
cnRpb25Nb2RlKCkgPT0gSW5zZXJ0aW9uTW9kZTo6SW5DYXB0aW9uIHx8IGluc2VydGlvbk1vZGUo
KSA9PSBJbnNlcnRpb25Nb2RlOjpJbkNlbGwgfHwgaW5zZXJ0aW9uTW9kZSgpID09IEluc2VydGlv
bk1vZGU6OlRlbXBsYXRlQ29udGVudHMpOwotI2Vsc2UKLSAgICAgICAgQVNTRVJUKGluc2VydGlv
bk1vZGUoKSAhPSBJbnNlcnRpb25Nb2RlOjpUZW1wbGF0ZUNvbnRlbnRzKTsKLSAgICAgICAgQVNT
RVJUKGluc2VydGlvbk1vZGUoKSA9PSBJbnNlcnRpb25Nb2RlOjpJbkJvZHkgfHwgaW5zZXJ0aW9u
TW9kZSgpID09IEluc2VydGlvbk1vZGU6OkluQ2FwdGlvbiB8fCBpbnNlcnRpb25Nb2RlKCkgPT0g
SW5zZXJ0aW9uTW9kZTo6SW5DZWxsKTsKKyAgICBjYXNlIEluc2VydGlvbk1vZGU6OlRlbXBsYXRl
Q29udGVudHM6CiAjZW5kaWYKICAgICAgICAgcHJvY2Vzc0NoYXJhY3RlckJ1ZmZlckZvckluQm9k
eShidWZmZXIpOwogICAgICAgICBicmVhazsKLSAgICB9CiAgICAgY2FzZSBJbnNlcnRpb25Nb2Rl
OjpJblRhYmxlOgogICAgIGNhc2UgSW5zZXJ0aW9uTW9kZTo6SW5UYWJsZUJvZHk6Ci0gICAgY2Fz
ZSBJbnNlcnRpb25Nb2RlOjpJblJvdzogewotICAgICAgICBBU1NFUlQoaW5zZXJ0aW9uTW9kZSgp
ID09IEluc2VydGlvbk1vZGU6OkluVGFibGUgfHwgaW5zZXJ0aW9uTW9kZSgpID09IEluc2VydGlv
bk1vZGU6OkluVGFibGVCb2R5IHx8IGluc2VydGlvbk1vZGUoKSA9PSBJbnNlcnRpb25Nb2RlOjpJ
blJvdyk7CisgICAgY2FzZSBJbnNlcnRpb25Nb2RlOjpJblJvdzoKICAgICAgICAgQVNTRVJUKG1f
cGVuZGluZ1RhYmxlQ2hhcmFjdGVycy5pc0VtcHR5KCkpOwogICAgICAgICBpZiAobV90cmVlLmN1
cnJlbnRTdGFja0l0ZW0oKS0+aXNFbGVtZW50Tm9kZSgpCi0gICAgICAgICAgICAmJiAoaXM8SFRN
TFRhYmxlRWxlbWVudD4oKm1fdHJlZS5jdXJyZW50U3RhY2tJdGVtKCktPm5vZGUoKSkKKyAgICAg
ICAgICAgICYmIChpczxIVE1MVGFibGVFbGVtZW50PigqbV90cmVlLmN1cnJlbnRTdGFja0l0ZW0o
KS0+ZWxlbWVudCgpKQogICAgICAgICAgICAgICAgIHx8IG1fdHJlZS5jdXJyZW50U3RhY2tJdGVt
KCktPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjp0Ym9keVRhZykKICAgICAgICAgICAgICAgICB8fCBt
X3RyZWUuY3VycmVudFN0YWNrSXRlbSgpLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6dGZvb3RUYWcp
CiAgICAgICAgICAgICAgICAgfHwgbV90cmVlLmN1cnJlbnRTdGFja0l0ZW0oKS0+aGFzVGFnTmFt
ZShIVE1MTmFtZXM6OnRoZWFkVGFnKQogICAgICAgICAgICAgICAgIHx8IG1fdHJlZS5jdXJyZW50
U3RhY2tJdGVtKCktPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjp0clRhZykpKSB7CiAgICAgICAgICAg
ICBtX29yaWdpbmFsSW5zZXJ0aW9uTW9kZSA9IG1faW5zZXJ0aW9uTW9kZTsKLSAgICAgICAgICAg
IHNldEluc2VydGlvbk1vZGUoSW5zZXJ0aW9uTW9kZTo6SW5UYWJsZVRleHQpOworICAgICAgICAg
ICAgbV9pbnNlcnRpb25Nb2RlID0gSW5zZXJ0aW9uTW9kZTo6SW5UYWJsZVRleHQ7CiAgICAgICAg
ICAgICAvLyBOb3RlIHRoYXQgd2UgZmFsbCB0aHJvdWdoIHRvIHRoZSBJbnNlcnRpb25Nb2RlOjpJ
blRhYmxlVGV4dCBjYXNlIGJlbG93LgogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgSFRN
TENvbnN0cnVjdGlvblNpdGU6OlJlZGlyZWN0VG9Gb3N0ZXJQYXJlbnRHdWFyZCByZWRpcmVjdGVy
KG1fdHJlZSk7CkBAIC0yNDk5LDEzICsyNDgxLDEwIEBAIFJlcHJvY2Vzc0J1ZmZlcjoKICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIEZBTExUSFJPVUdIOwotICAgIH0KLSAg
ICBjYXNlIEluc2VydGlvbk1vZGU6OkluVGFibGVUZXh0OiB7CisgICAgY2FzZSBJbnNlcnRpb25N
b2RlOjpJblRhYmxlVGV4dDoKICAgICAgICAgYnVmZmVyLmdpdmVSZW1haW5pbmdUbyhtX3BlbmRp
bmdUYWJsZUNoYXJhY3RlcnMpOwogICAgICAgICBicmVhazsKLSAgICB9CiAgICAgY2FzZSBJbnNl
cnRpb25Nb2RlOjpJbkNvbHVtbkdyb3VwOiB7Ci0gICAgICAgIEFTU0VSVChpbnNlcnRpb25Nb2Rl
KCkgPT0gSW5zZXJ0aW9uTW9kZTo6SW5Db2x1bW5Hcm91cCk7CiAgICAgICAgIFN0cmluZyBsZWFk
aW5nV2hpdGVzcGFjZSA9IGJ1ZmZlci50YWtlTGVhZGluZ1doaXRlc3BhY2UoKTsKICAgICAgICAg
aWYgKCFsZWFkaW5nV2hpdGVzcGFjZS5pc0VtcHR5KCkpCiAgICAgICAgICAgICBtX3RyZWUuaW5z
ZXJ0VGV4dE5vZGUobGVhZGluZ1doaXRlc3BhY2UsIEFsbFdoaXRlc3BhY2UpOwpAQCAtMjUyMSwx
OSArMjUwMCwxNCBAQCBSZXByb2Nlc3NCdWZmZXI6CiAgICAgICAgIGdvdG8gUmVwcm9jZXNzQnVm
ZmVyOwogICAgIH0KICAgICBjYXNlIEluc2VydGlvbk1vZGU6OkFmdGVyQm9keToKLSAgICBjYXNl
IEluc2VydGlvbk1vZGU6OkFmdGVyQWZ0ZXJCb2R5OiB7Ci0gICAgICAgIEFTU0VSVChpbnNlcnRp
b25Nb2RlKCkgPT0gSW5zZXJ0aW9uTW9kZTo6QWZ0ZXJCb2R5IHx8IGluc2VydGlvbk1vZGUoKSA9
PSBJbnNlcnRpb25Nb2RlOjpBZnRlckFmdGVyQm9keSk7CisgICAgY2FzZSBJbnNlcnRpb25Nb2Rl
OjpBZnRlckFmdGVyQm9keToKICAgICAgICAgLy8gRklYTUU6IHBhcnNlIGVycm9yCi0gICAgICAg
IHNldEluc2VydGlvbk1vZGUoSW5zZXJ0aW9uTW9kZTo6SW5Cb2R5KTsKKyAgICAgICAgbV9pbnNl
cnRpb25Nb2RlID0gSW5zZXJ0aW9uTW9kZTo6SW5Cb2R5OwogICAgICAgICBnb3RvIFJlcHJvY2Vz
c0J1ZmZlcjsKLSAgICB9Ci0gICAgY2FzZSBJbnNlcnRpb25Nb2RlOjpUZXh0OiB7Ci0gICAgICAg
IEFTU0VSVChpbnNlcnRpb25Nb2RlKCkgPT0gSW5zZXJ0aW9uTW9kZTo6VGV4dCk7CisgICAgY2Fz
ZSBJbnNlcnRpb25Nb2RlOjpUZXh0OgogICAgICAgICBtX3RyZWUuaW5zZXJ0VGV4dE5vZGUoYnVm
ZmVyLnRha2VSZW1haW5pbmcoKSk7CiAgICAgICAgIGJyZWFrOwotICAgIH0KICAgICBjYXNlIElu
c2VydGlvbk1vZGU6OkluSGVhZE5vc2NyaXB0OiB7Ci0gICAgICAgIEFTU0VSVChpbnNlcnRpb25N
b2RlKCkgPT0gSW5zZXJ0aW9uTW9kZTo6SW5IZWFkTm9zY3JpcHQpOwogICAgICAgICBTdHJpbmcg
bGVhZGluZ1doaXRlc3BhY2UgPSBidWZmZXIudGFrZUxlYWRpbmdXaGl0ZXNwYWNlKCk7CiAgICAg
ICAgIGlmICghbGVhZGluZ1doaXRlc3BhY2UuaXNFbXB0eSgpKQogICAgICAgICAgICAgbV90cmVl
Lmluc2VydFRleHROb2RlKGxlYWRpbmdXaGl0ZXNwYWNlLCBBbGxXaGl0ZXNwYWNlKTsKQEAgLTI1
NDQsNyArMjUxOCw2IEBAIFJlcHJvY2Vzc0J1ZmZlcjoKICAgICB9CiAgICAgY2FzZSBJbnNlcnRp
b25Nb2RlOjpJbkZyYW1lc2V0OgogICAgIGNhc2UgSW5zZXJ0aW9uTW9kZTo6QWZ0ZXJGcmFtZXNl
dDogewotICAgICAgICBBU1NFUlQoaW5zZXJ0aW9uTW9kZSgpID09IEluc2VydGlvbk1vZGU6Oklu
RnJhbWVzZXQgfHwgaW5zZXJ0aW9uTW9kZSgpID09IEluc2VydGlvbk1vZGU6OkFmdGVyRnJhbWVz
ZXQgfHwgaW5zZXJ0aW9uTW9kZSgpID09IEluc2VydGlvbk1vZGU6OkFmdGVyQWZ0ZXJGcmFtZXNl
dCk7CiAgICAgICAgIFN0cmluZyBsZWFkaW5nV2hpdGVzcGFjZSA9IGJ1ZmZlci50YWtlUmVtYWlu
aW5nV2hpdGVzcGFjZSgpOwogICAgICAgICBpZiAoIWxlYWRpbmdXaGl0ZXNwYWNlLmlzRW1wdHko
KSkKICAgICAgICAgICAgIG1fdHJlZS5pbnNlcnRUZXh0Tm9kZShsZWFkaW5nV2hpdGVzcGFjZSwg
QWxsV2hpdGVzcGFjZSk7CkBAIC0yNTUzLDExICsyNTI2LDkgQEAgUmVwcm9jZXNzQnVmZmVyOgog
ICAgICAgICBicmVhazsKICAgICB9CiAgICAgY2FzZSBJbnNlcnRpb25Nb2RlOjpJblNlbGVjdElu
VGFibGU6Ci0gICAgY2FzZSBJbnNlcnRpb25Nb2RlOjpJblNlbGVjdDogewotICAgICAgICBBU1NF
UlQoaW5zZXJ0aW9uTW9kZSgpID09IEluc2VydGlvbk1vZGU6OkluU2VsZWN0IHx8IGluc2VydGlv
bk1vZGUoKSA9PSBJbnNlcnRpb25Nb2RlOjpJblNlbGVjdEluVGFibGUpOworICAgIGNhc2UgSW5z
ZXJ0aW9uTW9kZTo6SW5TZWxlY3Q6CiAgICAgICAgIG1fdHJlZS5pbnNlcnRUZXh0Tm9kZShidWZm
ZXIudGFrZVJlbWFpbmluZygpKTsKICAgICAgICAgYnJlYWs7Ci0gICAgfQogICAgIGNhc2UgSW5z
ZXJ0aW9uTW9kZTo6QWZ0ZXJBZnRlckZyYW1lc2V0OiB7CiAgICAgICAgIFN0cmluZyBsZWFkaW5n
V2hpdGVzcGFjZSA9IGJ1ZmZlci50YWtlUmVtYWluaW5nV2hpdGVzcGFjZSgpOwogICAgICAgICBp
ZiAoIWxlYWRpbmdXaGl0ZXNwYWNlLmlzRW1wdHkoKSkgewpAQCAtMjU4Myw2NCArMjU1NCw1NSBA
QCB2b2lkIEhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc0NoYXJhY3RlckJ1ZmZlckZvckluQm9keShF
eHRlcm5hbENoYXJhY3RlclRva2VuQnVmZgogI2Vsc2UKICAgICBtX3RyZWUuaW5zZXJ0VGV4dE5v
ZGUoY2hhcmFjdGVycyk7CiAjZW5kaWYKLQogICAgIGlmIChtX2ZyYW1lc2V0T2sgJiYgIWlzQWxs
V2hpdGVzcGFjZU9yUmVwbGFjZW1lbnRDaGFyYWN0ZXJzKGNoYXJhY3RlcnMpKQogICAgICAgICBt
X2ZyYW1lc2V0T2sgPSBmYWxzZTsKIH0KIAotdm9pZCBIVE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NF
bmRPZkZpbGUoQXRvbWljSFRNTFRva2VuKiB0b2tlbikKK3ZvaWQgSFRNTFRyZWVCdWlsZGVyOjpw
cm9jZXNzRW5kT2ZGaWxlKEF0b21pY0hUTUxUb2tlbiYgdG9rZW4pCiB7Ci0gICAgQVNTRVJUKHRv
a2VuLT50eXBlKCkgPT0gSFRNTFRva2VuOjpFbmRPZkZpbGUpOwotICAgIHN3aXRjaCAoaW5zZXJ0
aW9uTW9kZSgpKSB7CisgICAgQVNTRVJUKHRva2VuLnR5cGUoKSA9PSBIVE1MVG9rZW46OkVuZE9m
RmlsZSk7CisgICAgc3dpdGNoIChtX2luc2VydGlvbk1vZGUpIHsKICAgICBjYXNlIEluc2VydGlv
bk1vZGU6OkluaXRpYWw6Ci0gICAgICAgIEFTU0VSVChpbnNlcnRpb25Nb2RlKCkgPT0gSW5zZXJ0
aW9uTW9kZTo6SW5pdGlhbCk7CiAgICAgICAgIGRlZmF1bHRGb3JJbml0aWFsKCk7CisgICAgICAg
IEFTU0VSVChtX2luc2VydGlvbk1vZGUgPT0gSW5zZXJ0aW9uTW9kZTo6QmVmb3JlSFRNTCk7CiAg
ICAgICAgIEZBTExUSFJPVUdIOwogICAgIGNhc2UgSW5zZXJ0aW9uTW9kZTo6QmVmb3JlSFRNTDoK
LSAgICAgICAgQVNTRVJUKGluc2VydGlvbk1vZGUoKSA9PSBJbnNlcnRpb25Nb2RlOjpCZWZvcmVI
VE1MKTsKICAgICAgICAgZGVmYXVsdEZvckJlZm9yZUhUTUwoKTsKKyAgICAgICAgQVNTRVJUKG1f
aW5zZXJ0aW9uTW9kZSA9PSBJbnNlcnRpb25Nb2RlOjpCZWZvcmVIZWFkKTsKICAgICAgICAgRkFM
TFRIUk9VR0g7CiAgICAgY2FzZSBJbnNlcnRpb25Nb2RlOjpCZWZvcmVIZWFkOgotICAgICAgICBB
U1NFUlQoaW5zZXJ0aW9uTW9kZSgpID09IEluc2VydGlvbk1vZGU6OkJlZm9yZUhlYWQpOwogICAg
ICAgICBkZWZhdWx0Rm9yQmVmb3JlSGVhZCgpOworICAgICAgICBBU1NFUlQobV9pbnNlcnRpb25N
b2RlID09IEluc2VydGlvbk1vZGU6OkluSGVhZCk7CiAgICAgICAgIEZBTExUSFJPVUdIOwogICAg
IGNhc2UgSW5zZXJ0aW9uTW9kZTo6SW5IZWFkOgotICAgICAgICBBU1NFUlQoaW5zZXJ0aW9uTW9k
ZSgpID09IEluc2VydGlvbk1vZGU6OkluSGVhZCk7CiAgICAgICAgIGRlZmF1bHRGb3JJbkhlYWQo
KTsKKyAgICAgICAgQVNTRVJUKG1faW5zZXJ0aW9uTW9kZSA9PSBJbnNlcnRpb25Nb2RlOjpBZnRl
ckhlYWQpOwogICAgICAgICBGQUxMVEhST1VHSDsKICAgICBjYXNlIEluc2VydGlvbk1vZGU6OkFm
dGVySGVhZDoKLSAgICAgICAgQVNTRVJUKGluc2VydGlvbk1vZGUoKSA9PSBJbnNlcnRpb25Nb2Rl
OjpBZnRlckhlYWQpOwogICAgICAgICBkZWZhdWx0Rm9yQWZ0ZXJIZWFkKCk7CisgICAgICAgIEFT
U0VSVChtX2luc2VydGlvbk1vZGUgPT0gSW5zZXJ0aW9uTW9kZTo6SW5Cb2R5KTsKICAgICAgICAg
RkFMTFRIUk9VR0g7CiAgICAgY2FzZSBJbnNlcnRpb25Nb2RlOjpJbkJvZHk6CiAgICAgY2FzZSBJ
bnNlcnRpb25Nb2RlOjpJbkNlbGw6CiAgICAgY2FzZSBJbnNlcnRpb25Nb2RlOjpJbkNhcHRpb246
CiAgICAgY2FzZSBJbnNlcnRpb25Nb2RlOjpJblJvdzoKLSNpZiBFTkFCTEUoVEVNUExBVEVfRUxF
TUVOVCkKLSAgICAgICAgQVNTRVJUKGluc2VydGlvbk1vZGUoKSA9PSBJbnNlcnRpb25Nb2RlOjpJ
bkJvZHkgfHwgaW5zZXJ0aW9uTW9kZSgpID09IEluc2VydGlvbk1vZGU6OkluQ2VsbCB8fCBpbnNl
cnRpb25Nb2RlKCkgPT0gSW5zZXJ0aW9uTW9kZTo6SW5DYXB0aW9uIHx8IGluc2VydGlvbk1vZGUo
KSA9PSBJbnNlcnRpb25Nb2RlOjpJblJvdyB8fCBpbnNlcnRpb25Nb2RlKCkgPT0gSW5zZXJ0aW9u
TW9kZTo6VGVtcGxhdGVDb250ZW50cyk7Ci0jZWxzZQotICAgICAgICBBU1NFUlQoaW5zZXJ0aW9u
TW9kZSgpICE9IEluc2VydGlvbk1vZGU6OlRlbXBsYXRlQ29udGVudHMpOwotICAgICAgICBBU1NF
UlQoaW5zZXJ0aW9uTW9kZSgpID09IEluc2VydGlvbk1vZGU6OkluQm9keSB8fCBpbnNlcnRpb25N
b2RlKCkgPT0gSW5zZXJ0aW9uTW9kZTo6SW5DZWxsIHx8IGluc2VydGlvbk1vZGUoKSA9PSBJbnNl
cnRpb25Nb2RlOjpJbkNhcHRpb24gfHwgaW5zZXJ0aW9uTW9kZSgpID09IEluc2VydGlvbk1vZGU6
OkluUm93KTsKLSNlbmRpZgogICAgICAgICBub3RJbXBsZW1lbnRlZCgpOyAvLyBFbWl0IHBhcnNl
IGVycm9yIGJhc2VkIG9uIHdoYXQgZWxlbWVudHMgYXJlIHN0aWxsIG9wZW4uCiAjaWYgRU5BQkxF
KFRFTVBMQVRFX0VMRU1FTlQpCi0gICAgICAgIGlmICghbV90ZW1wbGF0ZUluc2VydGlvbk1vZGVz
LmlzRW1wdHkoKSkKKyAgICAgICAgaWYgKCFtX3RlbXBsYXRlSW5zZXJ0aW9uTW9kZXMuaXNFbXB0
eSgpKSB7CiAgICAgICAgICAgICBpZiAocHJvY2Vzc0VuZE9mRmlsZUZvckluVGVtcGxhdGVDb250
ZW50cyh0b2tlbikpCiAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CiAjZW5kaWYK
ICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBJbnNlcnRpb25Nb2RlOjpBZnRlckJvZHk6CiAgICAg
Y2FzZSBJbnNlcnRpb25Nb2RlOjpBZnRlckFmdGVyQm9keToKLSAgICAgICAgQVNTRVJUKGluc2Vy
dGlvbk1vZGUoKSA9PSBJbnNlcnRpb25Nb2RlOjpBZnRlckJvZHkgfHwgaW5zZXJ0aW9uTW9kZSgp
ID09IEluc2VydGlvbk1vZGU6OkFmdGVyQWZ0ZXJCb2R5KTsKICAgICAgICAgYnJlYWs7CiAgICAg
Y2FzZSBJbnNlcnRpb25Nb2RlOjpJbkhlYWROb3NjcmlwdDoKLSAgICAgICAgQVNTRVJUKGluc2Vy
dGlvbk1vZGUoKSA9PSBJbnNlcnRpb25Nb2RlOjpJbkhlYWROb3NjcmlwdCk7CiAgICAgICAgIGRl
ZmF1bHRGb3JJbkhlYWROb3NjcmlwdCgpOwogICAgICAgICBwcm9jZXNzRW5kT2ZGaWxlKHRva2Vu
KTsKICAgICAgICAgcmV0dXJuOwogICAgIGNhc2UgSW5zZXJ0aW9uTW9kZTo6QWZ0ZXJGcmFtZXNl
dDoKICAgICBjYXNlIEluc2VydGlvbk1vZGU6OkFmdGVyQWZ0ZXJGcmFtZXNldDoKLSAgICAgICAg
QVNTRVJUKGluc2VydGlvbk1vZGUoKSA9PSBJbnNlcnRpb25Nb2RlOjpBZnRlckZyYW1lc2V0IHx8
IGluc2VydGlvbk1vZGUoKSA9PSBJbnNlcnRpb25Nb2RlOjpBZnRlckFmdGVyRnJhbWVzZXQpOwog
ICAgICAgICBicmVhazsKICAgICBjYXNlIEluc2VydGlvbk1vZGU6OkluQ29sdW1uR3JvdXA6CiAg
ICAgICAgIGlmIChtX3RyZWUuY3VycmVudElzUm9vdE5vZGUoKSkgewpAQCAtMjY1OSwxNCArMjYy
MSwxNCBAQCB2b2lkIEhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc0VuZE9mRmlsZShBdG9taWNIVE1M
VG9rZW4qIHRva2VuKQogICAgIGNhc2UgSW5zZXJ0aW9uTW9kZTo6SW5UYWJsZUJvZHk6CiAgICAg
Y2FzZSBJbnNlcnRpb25Nb2RlOjpJblNlbGVjdEluVGFibGU6CiAgICAgY2FzZSBJbnNlcnRpb25N
b2RlOjpJblNlbGVjdDoKLSAgICAgICAgQVNTRVJUKGluc2VydGlvbk1vZGUoKSA9PSBJbnNlcnRp
b25Nb2RlOjpJblNlbGVjdCB8fCBpbnNlcnRpb25Nb2RlKCkgPT0gSW5zZXJ0aW9uTW9kZTo6SW5T
ZWxlY3RJblRhYmxlIHx8IGluc2VydGlvbk1vZGUoKSA9PSBJbnNlcnRpb25Nb2RlOjpJblRhYmxl
IHx8IGluc2VydGlvbk1vZGUoKSA9PSBJbnNlcnRpb25Nb2RlOjpJbkZyYW1lc2V0IHx8IGluc2Vy
dGlvbk1vZGUoKSA9PSBJbnNlcnRpb25Nb2RlOjpJblRhYmxlQm9keSB8fCBpbnNlcnRpb25Nb2Rl
KCkgPT0gSW5zZXJ0aW9uTW9kZTo6SW5Db2x1bW5Hcm91cCk7CisgICAgICAgIEFTU0VSVChtX2lu
c2VydGlvbk1vZGUgPT0gSW5zZXJ0aW9uTW9kZTo6SW5TZWxlY3QgfHwgbV9pbnNlcnRpb25Nb2Rl
ID09IEluc2VydGlvbk1vZGU6OkluU2VsZWN0SW5UYWJsZSB8fCBtX2luc2VydGlvbk1vZGUgPT0g
SW5zZXJ0aW9uTW9kZTo6SW5UYWJsZSB8fCBtX2luc2VydGlvbk1vZGUgPT0gSW5zZXJ0aW9uTW9k
ZTo6SW5GcmFtZXNldCB8fCBtX2luc2VydGlvbk1vZGUgPT0gSW5zZXJ0aW9uTW9kZTo6SW5UYWJs
ZUJvZHkgfHwgbV9pbnNlcnRpb25Nb2RlID09IEluc2VydGlvbk1vZGU6OkluQ29sdW1uR3JvdXAp
OwogICAgICAgICBpZiAobV90cmVlLmN1cnJlbnROb2RlKCkgIT0gbV90cmVlLm9wZW5FbGVtZW50
cygpLT5yb290Tm9kZSgpKQogICAgICAgICAgICAgcGFyc2VFcnJvcih0b2tlbik7Ci0KICNpZiBF
TkFCTEUoVEVNUExBVEVfRUxFTUVOVCkKLSAgICAgICAgaWYgKCFtX3RlbXBsYXRlSW5zZXJ0aW9u
TW9kZXMuaXNFbXB0eSgpKQorICAgICAgICBpZiAoIW1fdGVtcGxhdGVJbnNlcnRpb25Nb2Rlcy5p
c0VtcHR5KCkpIHsKICAgICAgICAgICAgIGlmIChwcm9jZXNzRW5kT2ZGaWxlRm9ySW5UZW1wbGF0
ZUNvbnRlbnRzKHRva2VuKSkKICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KICNl
bmRpZgogICAgICAgICBicmVhazsKICAgICBjYXNlIEluc2VydGlvbk1vZGU6OkluVGFibGVUZXh0
OgpAQCAtMjY3OSwxNiArMjY0MSwxNCBAQCB2b2lkIEhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc0Vu
ZE9mRmlsZShBdG9taWNIVE1MVG9rZW4qIHRva2VuKQogICAgICAgICAgICAgbm90SW1wbGVtZW50
ZWQoKTsgLy8gbWFyayB0aGUgc2NyaXB0IGVsZW1lbnQgYXMgImFscmVhZHkgc3RhcnRlZCIuCiAg
ICAgICAgIG1fdHJlZS5vcGVuRWxlbWVudHMoKS0+cG9wKCk7CiAgICAgICAgIEFTU0VSVChtX29y
aWdpbmFsSW5zZXJ0aW9uTW9kZSAhPSBJbnNlcnRpb25Nb2RlOjpUZXh0KTsKLSAgICAgICAgc2V0
SW5zZXJ0aW9uTW9kZShtX29yaWdpbmFsSW5zZXJ0aW9uTW9kZSk7CisgICAgICAgIG1faW5zZXJ0
aW9uTW9kZSA9IG1fb3JpZ2luYWxJbnNlcnRpb25Nb2RlOwogICAgICAgICBwcm9jZXNzRW5kT2ZG
aWxlKHRva2VuKTsKICAgICAgICAgcmV0dXJuOwotICAgIGNhc2UgSW5zZXJ0aW9uTW9kZTo6VGVt
cGxhdGVDb250ZW50czoKICNpZiBFTkFCTEUoVEVNUExBVEVfRUxFTUVOVCkKKyAgICBjYXNlIElu
c2VydGlvbk1vZGU6OlRlbXBsYXRlQ29udGVudHM6CiAgICAgICAgIGlmIChwcm9jZXNzRW5kT2ZG
aWxlRm9ySW5UZW1wbGF0ZUNvbnRlbnRzKHRva2VuKSkKICAgICAgICAgICAgIHJldHVybjsKICAg
ICAgICAgYnJlYWs7Ci0jZWxzZQotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICNlbmRp
ZgogICAgIH0KICAgICBBU1NFUlQobV90cmVlLmN1cnJlbnROb2RlKCkpOwpAQCAtMjcwMCwzOCAr
MjY2MCwzOCBAQCB2b2lkIEhUTUxUcmVlQnVpbGRlcjo6ZGVmYXVsdEZvckluaXRpYWwoKQogICAg
IG5vdEltcGxlbWVudGVkKCk7CiAgICAgbV90cmVlLnNldERlZmF1bHRDb21wYXRpYmlsaXR5TW9k
ZSgpOwogICAgIC8vIEZJWE1FOiBwYXJzZSBlcnJvcgotICAgIHNldEluc2VydGlvbk1vZGUoSW5z
ZXJ0aW9uTW9kZTo6QmVmb3JlSFRNTCk7CisgICAgbV9pbnNlcnRpb25Nb2RlID0gSW5zZXJ0aW9u
TW9kZTo6QmVmb3JlSFRNTDsKIH0KIAogdm9pZCBIVE1MVHJlZUJ1aWxkZXI6OmRlZmF1bHRGb3JC
ZWZvcmVIVE1MKCkKIHsKICAgICBBdG9taWNIVE1MVG9rZW4gc3RhcnRIVE1MKEhUTUxUb2tlbjo6
U3RhcnRUYWcsIGh0bWxUYWcubG9jYWxOYW1lKCkpOwogICAgIG1fdHJlZS5pbnNlcnRIVE1MSHRt
bFN0YXJ0VGFnQmVmb3JlSFRNTCgmc3RhcnRIVE1MKTsKLSAgICBzZXRJbnNlcnRpb25Nb2RlKElu
c2VydGlvbk1vZGU6OkJlZm9yZUhlYWQpOworICAgIG1faW5zZXJ0aW9uTW9kZSA9IEluc2VydGlv
bk1vZGU6OkJlZm9yZUhlYWQ7CiB9CiAKIHZvaWQgSFRNTFRyZWVCdWlsZGVyOjpkZWZhdWx0Rm9y
QmVmb3JlSGVhZCgpCiB7CiAgICAgQXRvbWljSFRNTFRva2VuIHN0YXJ0SGVhZChIVE1MVG9rZW46
OlN0YXJ0VGFnLCBoZWFkVGFnLmxvY2FsTmFtZSgpKTsKLSAgICBwcm9jZXNzU3RhcnRUYWcoJnN0
YXJ0SGVhZCk7CisgICAgcHJvY2Vzc1N0YXJ0VGFnKHN0YXJ0SGVhZCk7CiB9CiAKIHZvaWQgSFRN
TFRyZWVCdWlsZGVyOjpkZWZhdWx0Rm9ySW5IZWFkKCkKIHsKICAgICBBdG9taWNIVE1MVG9rZW4g
ZW5kSGVhZChIVE1MVG9rZW46OkVuZFRhZywgaGVhZFRhZy5sb2NhbE5hbWUoKSk7Ci0gICAgcHJv
Y2Vzc0VuZFRhZygmZW5kSGVhZCk7CisgICAgcHJvY2Vzc0VuZFRhZyhlbmRIZWFkKTsKIH0KIAog
dm9pZCBIVE1MVHJlZUJ1aWxkZXI6OmRlZmF1bHRGb3JJbkhlYWROb3NjcmlwdCgpCiB7CiAgICAg
QXRvbWljSFRNTFRva2VuIGVuZE5vc2NyaXB0KEhUTUxUb2tlbjo6RW5kVGFnLCBub3NjcmlwdFRh
Zy5sb2NhbE5hbWUoKSk7Ci0gICAgcHJvY2Vzc0VuZFRhZygmZW5kTm9zY3JpcHQpOworICAgIHBy
b2Nlc3NFbmRUYWcoZW5kTm9zY3JpcHQpOwogfQogCiB2b2lkIEhUTUxUcmVlQnVpbGRlcjo6ZGVm
YXVsdEZvckFmdGVySGVhZCgpCiB7CiAgICAgQXRvbWljSFRNTFRva2VuIHN0YXJ0Qm9keShIVE1M
VG9rZW46OlN0YXJ0VGFnLCBib2R5VGFnLmxvY2FsTmFtZSgpKTsKLSAgICBwcm9jZXNzU3RhcnRU
YWcoJnN0YXJ0Qm9keSk7CisgICAgcHJvY2Vzc1N0YXJ0VGFnKHN0YXJ0Qm9keSk7CiAgICAgbV9m
cmFtZXNldE9rID0gdHJ1ZTsKIH0KIApAQCAtMjc0NSw5MCArMjcwNSw5MCBAQCB2b2lkIEhUTUxU
cmVlQnVpbGRlcjo6ZGVmYXVsdEZvckluVGFibGVUZXh0KCkKICAgICAgICAgbV90cmVlLnJlY29u
c3RydWN0VGhlQWN0aXZlRm9ybWF0dGluZ0VsZW1lbnRzKCk7CiAgICAgICAgIG1fdHJlZS5pbnNl
cnRUZXh0Tm9kZShjaGFyYWN0ZXJzLCBOb3RBbGxXaGl0ZXNwYWNlKTsKICAgICAgICAgbV9mcmFt
ZXNldE9rID0gZmFsc2U7Ci0gICAgICAgIHNldEluc2VydGlvbk1vZGUobV9vcmlnaW5hbEluc2Vy
dGlvbk1vZGUpOworICAgICAgICBtX2luc2VydGlvbk1vZGUgPSBtX29yaWdpbmFsSW5zZXJ0aW9u
TW9kZTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBtX3RyZWUuaW5zZXJ0VGV4dE5vZGUo
Y2hhcmFjdGVycyk7Ci0gICAgc2V0SW5zZXJ0aW9uTW9kZShtX29yaWdpbmFsSW5zZXJ0aW9uTW9k
ZSk7CisgICAgbV9pbnNlcnRpb25Nb2RlID0gbV9vcmlnaW5hbEluc2VydGlvbk1vZGU7CiB9CiAK
LWJvb2wgSFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNzU3RhcnRUYWdGb3JJbkhlYWQoQXRvbWljSFRN
TFRva2VuKiB0b2tlbikKK2Jvb2wgSFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNzU3RhcnRUYWdGb3JJ
bkhlYWQoQXRvbWljSFRNTFRva2VuJiB0b2tlbikKIHsKLSAgICBBU1NFUlQodG9rZW4tPnR5cGUo
KSA9PSBIVE1MVG9rZW46OlN0YXJ0VGFnKTsKLSAgICBpZiAodG9rZW4tPm5hbWUoKSA9PSBodG1s
VGFnKSB7CisgICAgQVNTRVJUKHRva2VuLnR5cGUoKSA9PSBIVE1MVG9rZW46OlN0YXJ0VGFnKTsK
KyAgICBpZiAodG9rZW4ubmFtZSgpID09IGh0bWxUYWcpIHsKICAgICAgICAgcHJvY2Vzc0h0bWxT
dGFydFRhZ0ZvckluQm9keSh0b2tlbik7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KLSAg
ICBpZiAodG9rZW4tPm5hbWUoKSA9PSBiYXNlVGFnCi0gICAgICAgIHx8IHRva2VuLT5uYW1lKCkg
PT0gYmFzZWZvbnRUYWcKLSAgICAgICAgfHwgdG9rZW4tPm5hbWUoKSA9PSBiZ3NvdW5kVGFnCi0g
ICAgICAgIHx8IHRva2VuLT5uYW1lKCkgPT0gY29tbWFuZFRhZwotICAgICAgICB8fCB0b2tlbi0+
bmFtZSgpID09IGxpbmtUYWcKLSAgICAgICAgfHwgdG9rZW4tPm5hbWUoKSA9PSBtZXRhVGFnKSB7
Ci0gICAgICAgIG1fdHJlZS5pbnNlcnRTZWxmQ2xvc2luZ0hUTUxFbGVtZW50KHRva2VuKTsKKyAg
ICBpZiAodG9rZW4ubmFtZSgpID09IGJhc2VUYWcKKyAgICAgICAgfHwgdG9rZW4ubmFtZSgpID09
IGJhc2Vmb250VGFnCisgICAgICAgIHx8IHRva2VuLm5hbWUoKSA9PSBiZ3NvdW5kVGFnCisgICAg
ICAgIHx8IHRva2VuLm5hbWUoKSA9PSBjb21tYW5kVGFnCisgICAgICAgIHx8IHRva2VuLm5hbWUo
KSA9PSBsaW5rVGFnCisgICAgICAgIHx8IHRva2VuLm5hbWUoKSA9PSBtZXRhVGFnKSB7CisgICAg
ICAgIG1fdHJlZS5pbnNlcnRTZWxmQ2xvc2luZ0hUTUxFbGVtZW50KCZ0b2tlbik7CiAgICAgICAg
IC8vIE5vdGU6IFRoZSBjdXN0b20gcHJvY2Vzc2luZyBmb3IgdGhlIDxtZXRhPiB0YWcgaXMgZG9u
ZSBpbiBIVE1MTWV0YUVsZW1lbnQ6OnByb2Nlc3MoKS4KICAgICAgICAgcmV0dXJuIHRydWU7CiAg
ICAgfQotICAgIGlmICh0b2tlbi0+bmFtZSgpID09IHRpdGxlVGFnKSB7CisgICAgaWYgKHRva2Vu
Lm5hbWUoKSA9PSB0aXRsZVRhZykgewogICAgICAgICBwcm9jZXNzR2VuZXJpY1JDREFUQVN0YXJ0
VGFnKHRva2VuKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQotICAgIGlmICh0b2tlbi0+
bmFtZSgpID09IG5vc2NyaXB0VGFnKSB7CisgICAgaWYgKHRva2VuLm5hbWUoKSA9PSBub3Njcmlw
dFRhZykgewogICAgICAgICBpZiAobV9vcHRpb25zLnNjcmlwdEVuYWJsZWQpIHsKICAgICAgICAg
ICAgIHByb2Nlc3NHZW5lcmljUmF3VGV4dFN0YXJ0VGFnKHRva2VuKTsKICAgICAgICAgICAgIHJl
dHVybiB0cnVlOwogICAgICAgICB9Ci0gICAgICAgIG1fdHJlZS5pbnNlcnRIVE1MRWxlbWVudCh0
b2tlbik7Ci0gICAgICAgIHNldEluc2VydGlvbk1vZGUoSW5zZXJ0aW9uTW9kZTo6SW5IZWFkTm9z
Y3JpcHQpOworICAgICAgICBtX3RyZWUuaW5zZXJ0SFRNTEVsZW1lbnQoJnRva2VuKTsKKyAgICAg
ICAgbV9pbnNlcnRpb25Nb2RlID0gSW5zZXJ0aW9uTW9kZTo6SW5IZWFkTm9zY3JpcHQ7CiAgICAg
ICAgIHJldHVybiB0cnVlOwogICAgIH0KLSAgICBpZiAodG9rZW4tPm5hbWUoKSA9PSBub2ZyYW1l
c1RhZyB8fCB0b2tlbi0+bmFtZSgpID09IHN0eWxlVGFnKSB7CisgICAgaWYgKHRva2VuLm5hbWUo
KSA9PSBub2ZyYW1lc1RhZyB8fCB0b2tlbi5uYW1lKCkgPT0gc3R5bGVUYWcpIHsKICAgICAgICAg
cHJvY2Vzc0dlbmVyaWNSYXdUZXh0U3RhcnRUYWcodG9rZW4pOwogICAgICAgICByZXR1cm4gdHJ1
ZTsKICAgICB9Ci0gICAgaWYgKHRva2VuLT5uYW1lKCkgPT0gc2NyaXB0VGFnKSB7CisgICAgaWYg
KHRva2VuLm5hbWUoKSA9PSBzY3JpcHRUYWcpIHsKICAgICAgICAgcHJvY2Vzc1NjcmlwdFN0YXJ0
VGFnKHRva2VuKTsKLSAgICAgICAgaWYgKG1fb3B0aW9ucy51c2VQcmVIVE1MNVBhcnNlclF1aXJr
cyAmJiB0b2tlbi0+c2VsZkNsb3NpbmcoKSkKKyAgICAgICAgaWYgKG1fb3B0aW9ucy51c2VQcmVI
VE1MNVBhcnNlclF1aXJrcyAmJiB0b2tlbi5zZWxmQ2xvc2luZygpKQogICAgICAgICAgICAgcHJv
Y2Vzc0Zha2VFbmRUYWcoc2NyaXB0VGFnKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQog
I2lmIEVOQUJMRShURU1QTEFURV9FTEVNRU5UKQotICAgIGlmICh0b2tlbi0+bmFtZSgpID09IHRl
bXBsYXRlVGFnKSB7CisgICAgaWYgKHRva2VuLm5hbWUoKSA9PSB0ZW1wbGF0ZVRhZykgewogICAg
ICAgICBwcm9jZXNzVGVtcGxhdGVTdGFydFRhZyh0b2tlbik7CiAgICAgICAgIHJldHVybiB0cnVl
OwogICAgIH0KICNlbmRpZgotICAgIGlmICh0b2tlbi0+bmFtZSgpID09IGhlYWRUYWcpIHsKKyAg
ICBpZiAodG9rZW4ubmFtZSgpID09IGhlYWRUYWcpIHsKICAgICAgICAgcGFyc2VFcnJvcih0b2tl
bik7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICAgICByZXR1cm4gZmFsc2U7CiB9CiAK
LXZvaWQgSFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNzR2VuZXJpY1JDREFUQVN0YXJ0VGFnKEF0b21p
Y0hUTUxUb2tlbiogdG9rZW4pCit2b2lkIEhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc0dlbmVyaWNS
Q0RBVEFTdGFydFRhZyhBdG9taWNIVE1MVG9rZW4mIHRva2VuKQogewotICAgIEFTU0VSVCh0b2tl
bi0+dHlwZSgpID09IEhUTUxUb2tlbjo6U3RhcnRUYWcpOwotICAgIG1fdHJlZS5pbnNlcnRIVE1M
RWxlbWVudCh0b2tlbik7CisgICAgQVNTRVJUKHRva2VuLnR5cGUoKSA9PSBIVE1MVG9rZW46OlN0
YXJ0VGFnKTsKKyAgICBtX3RyZWUuaW5zZXJ0SFRNTEVsZW1lbnQoJnRva2VuKTsKICAgICBpZiAo
bV9wYXJzZXIudG9rZW5pemVyKCkpCiAgICAgICAgIG1fcGFyc2VyLnRva2VuaXplcigpLT5zZXRT
dGF0ZShIVE1MVG9rZW5pemVyOjpSQ0RBVEFTdGF0ZSk7CiAgICAgbV9vcmlnaW5hbEluc2VydGlv
bk1vZGUgPSBtX2luc2VydGlvbk1vZGU7Ci0gICAgc2V0SW5zZXJ0aW9uTW9kZShJbnNlcnRpb25N
b2RlOjpUZXh0KTsKKyAgICBtX2luc2VydGlvbk1vZGUgPSBJbnNlcnRpb25Nb2RlOjpUZXh0Owog
fQogCi12b2lkIEhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc0dlbmVyaWNSYXdUZXh0U3RhcnRUYWco
QXRvbWljSFRNTFRva2VuKiB0b2tlbikKK3ZvaWQgSFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNzR2Vu
ZXJpY1Jhd1RleHRTdGFydFRhZyhBdG9taWNIVE1MVG9rZW4mIHRva2VuKQogewotICAgIEFTU0VS
VCh0b2tlbi0+dHlwZSgpID09IEhUTUxUb2tlbjo6U3RhcnRUYWcpOwotICAgIG1fdHJlZS5pbnNl
cnRIVE1MRWxlbWVudCh0b2tlbik7CisgICAgQVNTRVJUKHRva2VuLnR5cGUoKSA9PSBIVE1MVG9r
ZW46OlN0YXJ0VGFnKTsKKyAgICBtX3RyZWUuaW5zZXJ0SFRNTEVsZW1lbnQoJnRva2VuKTsKICAg
ICBpZiAobV9wYXJzZXIudG9rZW5pemVyKCkpCiAgICAgICAgIG1fcGFyc2VyLnRva2VuaXplcigp
LT5zZXRTdGF0ZShIVE1MVG9rZW5pemVyOjpSQVdURVhUU3RhdGUpOwogICAgIG1fb3JpZ2luYWxJ
bnNlcnRpb25Nb2RlID0gbV9pbnNlcnRpb25Nb2RlOwotICAgIHNldEluc2VydGlvbk1vZGUoSW5z
ZXJ0aW9uTW9kZTo6VGV4dCk7CisgICAgbV9pbnNlcnRpb25Nb2RlID0gSW5zZXJ0aW9uTW9kZTo6
VGV4dDsKIH0KIAotdm9pZCBIVE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NTY3JpcHRTdGFydFRhZyhB
dG9taWNIVE1MVG9rZW4qIHRva2VuKQordm9pZCBIVE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NTY3Jp
cHRTdGFydFRhZyhBdG9taWNIVE1MVG9rZW4mIHRva2VuKQogewotICAgIEFTU0VSVCh0b2tlbi0+
dHlwZSgpID09IEhUTUxUb2tlbjo6U3RhcnRUYWcpOwotICAgIG1fdHJlZS5pbnNlcnRTY3JpcHRF
bGVtZW50KHRva2VuKTsKKyAgICBBU1NFUlQodG9rZW4udHlwZSgpID09IEhUTUxUb2tlbjo6U3Rh
cnRUYWcpOworICAgIG1fdHJlZS5pbnNlcnRTY3JpcHRFbGVtZW50KCZ0b2tlbik7CiAgICAgaWYg
KG1fcGFyc2VyLnRva2VuaXplcigpKQogICAgICAgICBtX3BhcnNlci50b2tlbml6ZXIoKS0+c2V0
U3RhdGUoSFRNTFRva2VuaXplcjo6U2NyaXB0RGF0YVN0YXRlKTsKICAgICBtX29yaWdpbmFsSW5z
ZXJ0aW9uTW9kZSA9IG1faW5zZXJ0aW9uTW9kZTsKQEAgLTI4MzcsNTUgKzI3OTcsNTUgQEAgdm9p
ZCBIVE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NTY3JpcHRTdGFydFRhZyhBdG9taWNIVE1MVG9rZW4q
IHRva2VuKQogCiAgICAgbV9zY3JpcHRUb1Byb2Nlc3NTdGFydFBvc2l0aW9uID0gcG9zaXRpb247
CiAKLSAgICBzZXRJbnNlcnRpb25Nb2RlKEluc2VydGlvbk1vZGU6OlRleHQpOworICAgIG1faW5z
ZXJ0aW9uTW9kZSA9IEluc2VydGlvbk1vZGU6OlRleHQ7CiB9CiAKIC8vIGh0dHA6Ly93d3cud2hh
dHdnLm9yZy9zcGVjcy93ZWItYXBwcy9jdXJyZW50LXdvcmsvI2FkanVzdGVkLWN1cnJlbnQtbm9k
ZQotSFRNTFN0YWNrSXRlbSogSFRNTFRyZWVCdWlsZGVyOjphZGp1c3RlZEN1cnJlbnRTdGFja0l0
ZW0oKSBjb25zdAorSFRNTFN0YWNrSXRlbSYgSFRNTFRyZWVCdWlsZGVyOjphZGp1c3RlZEN1cnJl
bnRTdGFja0l0ZW0oKSBjb25zdAogewogICAgIEFTU0VSVCghbV90cmVlLmlzRW1wdHkoKSk7CiAg
ICAgaWYgKGlzUGFyc2luZ0ZyYWdtZW50KCkgJiYgbV90cmVlLm9wZW5FbGVtZW50cygpLT5oYXNP
bmx5T25lRWxlbWVudCgpKQogICAgICAgICByZXR1cm4gbV9mcmFnbWVudENvbnRleHQuY29udGV4
dEVsZW1lbnRTdGFja0l0ZW0oKTsKIAotICAgIHJldHVybiBtX3RyZWUuY3VycmVudFN0YWNrSXRl
bSgpOworICAgIHJldHVybiAqbV90cmVlLmN1cnJlbnRTdGFja0l0ZW0oKTsKIH0KIAogLy8gaHR0
cDovL3d3dy53aGF0d2cub3JnL3NwZWNzL3dlYi1hcHBzL2N1cnJlbnQtd29yay9tdWx0aXBhZ2Uv
dHJlZS1jb25zdHJ1Y3Rpb24uaHRtbCN0cmVlLWNvbnN0cnVjdGlvbgotYm9vbCBIVE1MVHJlZUJ1
aWxkZXI6OnNob3VsZFByb2Nlc3NUb2tlbkluRm9yZWlnbkNvbnRlbnQoQXRvbWljSFRNTFRva2Vu
KiB0b2tlbikKK2Jvb2wgSFRNTFRyZWVCdWlsZGVyOjpzaG91bGRQcm9jZXNzVG9rZW5JbkZvcmVp
Z25Db250ZW50KEF0b21pY0hUTUxUb2tlbiYgdG9rZW4pCiB7CiAgICAgaWYgKG1fdHJlZS5pc0Vt
cHR5KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBIVE1MU3RhY2tJdGVtKiBhZGp1c3Rl
ZEN1cnJlbnROb2RlID0gYWRqdXN0ZWRDdXJyZW50U3RhY2tJdGVtKCk7Ci0gICAgaWYgKGFkanVz
dGVkQ3VycmVudE5vZGUtPmlzSW5IVE1MTmFtZXNwYWNlKCkpCisgICAgSFRNTFN0YWNrSXRlbSYg
YWRqdXN0ZWRDdXJyZW50Tm9kZSA9IGFkanVzdGVkQ3VycmVudFN0YWNrSXRlbSgpOworICAgIGlm
IChhZGp1c3RlZEN1cnJlbnROb2RlLmlzSW5IVE1MTmFtZXNwYWNlKCkpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICBpZiAoSFRNTEVsZW1lbnRTdGFjazo6aXNNYXRoTUxUZXh0SW50ZWdyYXRp
b25Qb2ludChhZGp1c3RlZEN1cnJlbnROb2RlKSkgewotICAgICAgICBpZiAodG9rZW4tPnR5cGUo
KSA9PSBIVE1MVG9rZW46OlN0YXJ0VGFnCi0gICAgICAgICAgICAmJiB0b2tlbi0+bmFtZSgpICE9
IE1hdGhNTE5hbWVzOjptZ2x5cGhUYWcKLSAgICAgICAgICAgICYmIHRva2VuLT5uYW1lKCkgIT0g
TWF0aE1MTmFtZXM6Om1hbGlnbm1hcmtUYWcpCisgICAgaWYgKEhUTUxFbGVtZW50U3RhY2s6Omlz
TWF0aE1MVGV4dEludGVncmF0aW9uUG9pbnQoJmFkanVzdGVkQ3VycmVudE5vZGUpKSB7CisgICAg
ICAgIGlmICh0b2tlbi50eXBlKCkgPT0gSFRNTFRva2VuOjpTdGFydFRhZworICAgICAgICAgICAg
JiYgdG9rZW4ubmFtZSgpICE9IE1hdGhNTE5hbWVzOjptZ2x5cGhUYWcKKyAgICAgICAgICAgICYm
IHRva2VuLm5hbWUoKSAhPSBNYXRoTUxOYW1lczo6bWFsaWdubWFya1RhZykKICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICAgICAgaWYgKHRva2VuLT50eXBlKCkgPT0gSFRNTFRva2VuOjpD
aGFyYWN0ZXIpCisgICAgICAgIGlmICh0b2tlbi50eXBlKCkgPT0gSFRNTFRva2VuOjpDaGFyYWN0
ZXIpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQotICAgIGlmIChhZGp1c3RlZEN1
cnJlbnROb2RlLT5oYXNUYWdOYW1lKE1hdGhNTE5hbWVzOjphbm5vdGF0aW9uX3htbFRhZykKLSAg
ICAgICAgJiYgdG9rZW4tPnR5cGUoKSA9PSBIVE1MVG9rZW46OlN0YXJ0VGFnCi0gICAgICAgICYm
IHRva2VuLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OnN2Z1RhZykKKyAgICBpZiAoYWRqdXN0ZWRDdXJy
ZW50Tm9kZS5oYXNUYWdOYW1lKE1hdGhNTE5hbWVzOjphbm5vdGF0aW9uX3htbFRhZykKKyAgICAg
ICAgJiYgdG9rZW4udHlwZSgpID09IEhUTUxUb2tlbjo6U3RhcnRUYWcKKyAgICAgICAgJiYgdG9r
ZW4ubmFtZSgpID09IFNWR05hbWVzOjpzdmdUYWcpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICBpZiAoSFRNTEVsZW1lbnRTdGFjazo6aXNIVE1MSW50ZWdyYXRpb25Qb2ludChhZGp1c3RlZEN1
cnJlbnROb2RlKSkgewotICAgICAgICBpZiAodG9rZW4tPnR5cGUoKSA9PSBIVE1MVG9rZW46OlN0
YXJ0VGFnKQorICAgIGlmIChIVE1MRWxlbWVudFN0YWNrOjppc0hUTUxJbnRlZ3JhdGlvblBvaW50
KCZhZGp1c3RlZEN1cnJlbnROb2RlKSkgeworICAgICAgICBpZiAodG9rZW4udHlwZSgpID09IEhU
TUxUb2tlbjo6U3RhcnRUYWcpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGlm
ICh0b2tlbi0+dHlwZSgpID09IEhUTUxUb2tlbjo6Q2hhcmFjdGVyKQorICAgICAgICBpZiAodG9r
ZW4udHlwZSgpID09IEhUTUxUb2tlbjo6Q2hhcmFjdGVyKQogICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgIH0KLSAgICBpZiAodG9rZW4tPnR5cGUoKSA9PSBIVE1MVG9rZW46OkVuZE9mRmls
ZSkKKyAgICBpZiAodG9rZW4udHlwZSgpID09IEhUTUxUb2tlbjo6RW5kT2ZGaWxlKQogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgSFRNTFRyZWVCdWls
ZGVyOjpwcm9jZXNzVG9rZW5JbkZvcmVpZ25Db250ZW50KEF0b21pY0hUTUxUb2tlbiogdG9rZW4p
Cit2b2lkIEhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc1Rva2VuSW5Gb3JlaWduQ29udGVudChBdG9t
aWNIVE1MVG9rZW4mIHRva2VuKQogewotICAgIEhUTUxTdGFja0l0ZW0qIGFkanVzdGVkQ3VycmVu
dE5vZGUgPSBhZGp1c3RlZEN1cnJlbnRTdGFja0l0ZW0oKTsKKyAgICBIVE1MU3RhY2tJdGVtJiBh
ZGp1c3RlZEN1cnJlbnROb2RlID0gYWRqdXN0ZWRDdXJyZW50U3RhY2tJdGVtKCk7CiAgICAgCi0g
ICAgc3dpdGNoICh0b2tlbi0+dHlwZSgpKSB7CisgICAgc3dpdGNoICh0b2tlbi50eXBlKCkpIHsK
ICAgICBjYXNlIEhUTUxUb2tlbjo6VW5pbml0aWFsaXplZDoKICAgICAgICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7CiAgICAgICAgIGJyZWFrOwpAQCAtMjg5Myw2NyArMjg1Myw2NyBAQCB2b2lkIEhU
TUxUcmVlQnVpbGRlcjo6cHJvY2Vzc1Rva2VuSW5Gb3JlaWduQ29udGVudChBdG9taWNIVE1MVG9r
ZW4qIHRva2VuKQogICAgICAgICBwYXJzZUVycm9yKHRva2VuKTsKICAgICAgICAgYnJlYWs7CiAg
ICAgY2FzZSBIVE1MVG9rZW46OlN0YXJ0VGFnOiB7Ci0gICAgICAgIGlmICh0b2tlbi0+bmFtZSgp
ID09IGJUYWcKLSAgICAgICAgICAgIHx8IHRva2VuLT5uYW1lKCkgPT0gYmlnVGFnCi0gICAgICAg
ICAgICB8fCB0b2tlbi0+bmFtZSgpID09IGJsb2NrcXVvdGVUYWcKLSAgICAgICAgICAgIHx8IHRv
a2VuLT5uYW1lKCkgPT0gYm9keVRhZwotICAgICAgICAgICAgfHwgdG9rZW4tPm5hbWUoKSA9PSBi
clRhZwotICAgICAgICAgICAgfHwgdG9rZW4tPm5hbWUoKSA9PSBjZW50ZXJUYWcKLSAgICAgICAg
ICAgIHx8IHRva2VuLT5uYW1lKCkgPT0gY29kZVRhZwotICAgICAgICAgICAgfHwgdG9rZW4tPm5h
bWUoKSA9PSBkZFRhZwotICAgICAgICAgICAgfHwgdG9rZW4tPm5hbWUoKSA9PSBkaXZUYWcKLSAg
ICAgICAgICAgIHx8IHRva2VuLT5uYW1lKCkgPT0gZGxUYWcKLSAgICAgICAgICAgIHx8IHRva2Vu
LT5uYW1lKCkgPT0gZHRUYWcKLSAgICAgICAgICAgIHx8IHRva2VuLT5uYW1lKCkgPT0gZW1UYWcK
LSAgICAgICAgICAgIHx8IHRva2VuLT5uYW1lKCkgPT0gZW1iZWRUYWcKLSAgICAgICAgICAgIHx8
IGlzTnVtYmVyZWRIZWFkZXJUYWcodG9rZW4tPm5hbWUoKSkKLSAgICAgICAgICAgIHx8IHRva2Vu
LT5uYW1lKCkgPT0gaGVhZFRhZwotICAgICAgICAgICAgfHwgdG9rZW4tPm5hbWUoKSA9PSBoclRh
ZwotICAgICAgICAgICAgfHwgdG9rZW4tPm5hbWUoKSA9PSBpVGFnCi0gICAgICAgICAgICB8fCB0
b2tlbi0+bmFtZSgpID09IGltZ1RhZwotICAgICAgICAgICAgfHwgdG9rZW4tPm5hbWUoKSA9PSBs
aVRhZwotICAgICAgICAgICAgfHwgdG9rZW4tPm5hbWUoKSA9PSBsaXN0aW5nVGFnCi0gICAgICAg
ICAgICB8fCB0b2tlbi0+bmFtZSgpID09IG1lbnVUYWcKLSAgICAgICAgICAgIHx8IHRva2VuLT5u
YW1lKCkgPT0gbWV0YVRhZwotICAgICAgICAgICAgfHwgdG9rZW4tPm5hbWUoKSA9PSBub2JyVGFn
Ci0gICAgICAgICAgICB8fCB0b2tlbi0+bmFtZSgpID09IG9sVGFnCi0gICAgICAgICAgICB8fCB0
b2tlbi0+bmFtZSgpID09IHBUYWcKLSAgICAgICAgICAgIHx8IHRva2VuLT5uYW1lKCkgPT0gcHJl
VGFnCi0gICAgICAgICAgICB8fCB0b2tlbi0+bmFtZSgpID09IHJ1YnlUYWcKLSAgICAgICAgICAg
IHx8IHRva2VuLT5uYW1lKCkgPT0gc1RhZwotICAgICAgICAgICAgfHwgdG9rZW4tPm5hbWUoKSA9
PSBzbWFsbFRhZwotICAgICAgICAgICAgfHwgdG9rZW4tPm5hbWUoKSA9PSBzcGFuVGFnCi0gICAg
ICAgICAgICB8fCB0b2tlbi0+bmFtZSgpID09IHN0cm9uZ1RhZwotICAgICAgICAgICAgfHwgdG9r
ZW4tPm5hbWUoKSA9PSBzdHJpa2VUYWcKLSAgICAgICAgICAgIHx8IHRva2VuLT5uYW1lKCkgPT0g
c3ViVGFnCi0gICAgICAgICAgICB8fCB0b2tlbi0+bmFtZSgpID09IHN1cFRhZwotICAgICAgICAg
ICAgfHwgdG9rZW4tPm5hbWUoKSA9PSB0YWJsZVRhZwotICAgICAgICAgICAgfHwgdG9rZW4tPm5h
bWUoKSA9PSB0dFRhZwotICAgICAgICAgICAgfHwgdG9rZW4tPm5hbWUoKSA9PSB1VGFnCi0gICAg
ICAgICAgICB8fCB0b2tlbi0+bmFtZSgpID09IHVsVGFnCi0gICAgICAgICAgICB8fCB0b2tlbi0+
bmFtZSgpID09IHZhclRhZwotICAgICAgICAgICAgfHwgKHRva2VuLT5uYW1lKCkgPT0gZm9udFRh
ZyAmJiAodG9rZW4tPmdldEF0dHJpYnV0ZUl0ZW0oY29sb3JBdHRyKSB8fCB0b2tlbi0+Z2V0QXR0
cmlidXRlSXRlbShmYWNlQXR0cikgfHwgdG9rZW4tPmdldEF0dHJpYnV0ZUl0ZW0oc2l6ZUF0dHIp
KSkpIHsKKyAgICAgICAgaWYgKHRva2VuLm5hbWUoKSA9PSBiVGFnCisgICAgICAgICAgICB8fCB0
b2tlbi5uYW1lKCkgPT0gYmlnVGFnCisgICAgICAgICAgICB8fCB0b2tlbi5uYW1lKCkgPT0gYmxv
Y2txdW90ZVRhZworICAgICAgICAgICAgfHwgdG9rZW4ubmFtZSgpID09IGJvZHlUYWcKKyAgICAg
ICAgICAgIHx8IHRva2VuLm5hbWUoKSA9PSBiclRhZworICAgICAgICAgICAgfHwgdG9rZW4ubmFt
ZSgpID09IGNlbnRlclRhZworICAgICAgICAgICAgfHwgdG9rZW4ubmFtZSgpID09IGNvZGVUYWcK
KyAgICAgICAgICAgIHx8IHRva2VuLm5hbWUoKSA9PSBkZFRhZworICAgICAgICAgICAgfHwgdG9r
ZW4ubmFtZSgpID09IGRpdlRhZworICAgICAgICAgICAgfHwgdG9rZW4ubmFtZSgpID09IGRsVGFn
CisgICAgICAgICAgICB8fCB0b2tlbi5uYW1lKCkgPT0gZHRUYWcKKyAgICAgICAgICAgIHx8IHRv
a2VuLm5hbWUoKSA9PSBlbVRhZworICAgICAgICAgICAgfHwgdG9rZW4ubmFtZSgpID09IGVtYmVk
VGFnCisgICAgICAgICAgICB8fCBpc051bWJlcmVkSGVhZGVyVGFnKHRva2VuLm5hbWUoKSkKKyAg
ICAgICAgICAgIHx8IHRva2VuLm5hbWUoKSA9PSBoZWFkVGFnCisgICAgICAgICAgICB8fCB0b2tl
bi5uYW1lKCkgPT0gaHJUYWcKKyAgICAgICAgICAgIHx8IHRva2VuLm5hbWUoKSA9PSBpVGFnCisg
ICAgICAgICAgICB8fCB0b2tlbi5uYW1lKCkgPT0gaW1nVGFnCisgICAgICAgICAgICB8fCB0b2tl
bi5uYW1lKCkgPT0gbGlUYWcKKyAgICAgICAgICAgIHx8IHRva2VuLm5hbWUoKSA9PSBsaXN0aW5n
VGFnCisgICAgICAgICAgICB8fCB0b2tlbi5uYW1lKCkgPT0gbWVudVRhZworICAgICAgICAgICAg
fHwgdG9rZW4ubmFtZSgpID09IG1ldGFUYWcKKyAgICAgICAgICAgIHx8IHRva2VuLm5hbWUoKSA9
PSBub2JyVGFnCisgICAgICAgICAgICB8fCB0b2tlbi5uYW1lKCkgPT0gb2xUYWcKKyAgICAgICAg
ICAgIHx8IHRva2VuLm5hbWUoKSA9PSBwVGFnCisgICAgICAgICAgICB8fCB0b2tlbi5uYW1lKCkg
PT0gcHJlVGFnCisgICAgICAgICAgICB8fCB0b2tlbi5uYW1lKCkgPT0gcnVieVRhZworICAgICAg
ICAgICAgfHwgdG9rZW4ubmFtZSgpID09IHNUYWcKKyAgICAgICAgICAgIHx8IHRva2VuLm5hbWUo
KSA9PSBzbWFsbFRhZworICAgICAgICAgICAgfHwgdG9rZW4ubmFtZSgpID09IHNwYW5UYWcKKyAg
ICAgICAgICAgIHx8IHRva2VuLm5hbWUoKSA9PSBzdHJvbmdUYWcKKyAgICAgICAgICAgIHx8IHRv
a2VuLm5hbWUoKSA9PSBzdHJpa2VUYWcKKyAgICAgICAgICAgIHx8IHRva2VuLm5hbWUoKSA9PSBz
dWJUYWcKKyAgICAgICAgICAgIHx8IHRva2VuLm5hbWUoKSA9PSBzdXBUYWcKKyAgICAgICAgICAg
IHx8IHRva2VuLm5hbWUoKSA9PSB0YWJsZVRhZworICAgICAgICAgICAgfHwgdG9rZW4ubmFtZSgp
ID09IHR0VGFnCisgICAgICAgICAgICB8fCB0b2tlbi5uYW1lKCkgPT0gdVRhZworICAgICAgICAg
ICAgfHwgdG9rZW4ubmFtZSgpID09IHVsVGFnCisgICAgICAgICAgICB8fCB0b2tlbi5uYW1lKCkg
PT0gdmFyVGFnCisgICAgICAgICAgICB8fCAodG9rZW4ubmFtZSgpID09IGZvbnRUYWcgJiYgKHRv
a2VuLmdldEF0dHJpYnV0ZUl0ZW0oY29sb3JBdHRyKSB8fCB0b2tlbi5nZXRBdHRyaWJ1dGVJdGVt
KGZhY2VBdHRyKSB8fCB0b2tlbi5nZXRBdHRyaWJ1dGVJdGVtKHNpemVBdHRyKSkpKSB7CiAgICAg
ICAgICAgICBwYXJzZUVycm9yKHRva2VuKTsKICAgICAgICAgICAgIG1fdHJlZS5vcGVuRWxlbWVu
dHMoKS0+cG9wVW50aWxGb3JlaWduQ29udGVudFNjb3BlTWFya2VyKCk7CiAgICAgICAgICAgICBw
cm9jZXNzU3RhcnRUYWcodG9rZW4pOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9Ci0g
ICAgICAgIGNvbnN0IEF0b21pY1N0cmluZyYgY3VycmVudE5hbWVzcGFjZSA9IGFkanVzdGVkQ3Vy
cmVudE5vZGUtPm5hbWVzcGFjZVVSSSgpOworICAgICAgICBjb25zdCBBdG9taWNTdHJpbmcmIGN1
cnJlbnROYW1lc3BhY2UgPSBhZGp1c3RlZEN1cnJlbnROb2RlLm5hbWVzcGFjZVVSSSgpOwogICAg
ICAgICBpZiAoY3VycmVudE5hbWVzcGFjZSA9PSBNYXRoTUxOYW1lczo6bWF0aG1sTmFtZXNwYWNl
VVJJKQotICAgICAgICAgICAgYWRqdXN0TWF0aE1MQXR0cmlidXRlcygqdG9rZW4pOworICAgICAg
ICAgICAgYWRqdXN0TWF0aE1MQXR0cmlidXRlcyh0b2tlbik7CiAgICAgICAgIGlmIChjdXJyZW50
TmFtZXNwYWNlID09IFNWR05hbWVzOjpzdmdOYW1lc3BhY2VVUkkpIHsKLSAgICAgICAgICAgIGFk
anVzdFNWR1RhZ05hbWVDYXNlKCp0b2tlbik7Ci0gICAgICAgICAgICBhZGp1c3RTVkdBdHRyaWJ1
dGVzKCp0b2tlbik7CisgICAgICAgICAgICBhZGp1c3RTVkdUYWdOYW1lQ2FzZSh0b2tlbik7Cisg
ICAgICAgICAgICBhZGp1c3RTVkdBdHRyaWJ1dGVzKHRva2VuKTsKICAgICAgICAgfQotICAgICAg
ICBhZGp1c3RGb3JlaWduQXR0cmlidXRlcygqdG9rZW4pOwotICAgICAgICBtX3RyZWUuaW5zZXJ0
Rm9yZWlnbkVsZW1lbnQodG9rZW4sIGN1cnJlbnROYW1lc3BhY2UpOworICAgICAgICBhZGp1c3RG
b3JlaWduQXR0cmlidXRlcyh0b2tlbik7CisgICAgICAgIG1fdHJlZS5pbnNlcnRGb3JlaWduRWxl
bWVudCgmdG9rZW4sIGN1cnJlbnROYW1lc3BhY2UpOwogICAgICAgICBicmVhazsKICAgICB9CiAg
ICAgY2FzZSBIVE1MVG9rZW46OkVuZFRhZzogewotICAgICAgICBpZiAoYWRqdXN0ZWRDdXJyZW50
Tm9kZS0+bmFtZXNwYWNlVVJJKCkgPT0gU1ZHTmFtZXM6OnN2Z05hbWVzcGFjZVVSSSkKLSAgICAg
ICAgICAgIGFkanVzdFNWR1RhZ05hbWVDYXNlKCp0b2tlbik7CisgICAgICAgIGlmIChhZGp1c3Rl
ZEN1cnJlbnROb2RlLm5hbWVzcGFjZVVSSSgpID09IFNWR05hbWVzOjpzdmdOYW1lc3BhY2VVUkkp
CisgICAgICAgICAgICBhZGp1c3RTVkdUYWdOYW1lQ2FzZSh0b2tlbik7CiAKLSAgICAgICAgaWYg
KHRva2VuLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OnNjcmlwdFRhZyAmJiBtX3RyZWUuY3VycmVudFN0
YWNrSXRlbSgpLT5oYXNUYWdOYW1lKFNWR05hbWVzOjpzY3JpcHRUYWcpKSB7CisgICAgICAgIGlm
ICh0b2tlbi5uYW1lKCkgPT0gU1ZHTmFtZXM6OnNjcmlwdFRhZyAmJiBtX3RyZWUuY3VycmVudFN0
YWNrSXRlbSgpLT5oYXNUYWdOYW1lKFNWR05hbWVzOjpzY3JpcHRUYWcpKSB7CiAgICAgICAgICAg
ICBpZiAoc2NyaXB0aW5nQ29udGVudElzQWxsb3dlZChtX3RyZWUucGFyc2VyQ29udGVudFBvbGlj
eSgpKSkKICAgICAgICAgICAgICAgICBtX3NjcmlwdFRvUHJvY2VzcyA9IG1fdHJlZS5jdXJyZW50
RWxlbWVudCgpOwogICAgICAgICAgICAgbV90cmVlLm9wZW5FbGVtZW50cygpLT5wb3AoKTsKQEAg
LTI5NjEsMTEgKzI5MjEsMTEgQEAgdm9pZCBIVE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NUb2tlbklu
Rm9yZWlnbkNvbnRlbnQoQXRvbWljSFRNTFRva2VuKiB0b2tlbikKICAgICAgICAgfQogICAgICAg
ICBpZiAoIW1fdHJlZS5jdXJyZW50U3RhY2tJdGVtKCktPmlzSW5IVE1MTmFtZXNwYWNlKCkpIHsK
ICAgICAgICAgICAgIC8vIEZJWE1FOiBUaGlzIGNvZGUganVzdCB3YW50cyBhbiBFbGVtZW50KiBp
dGVyYXRvciwgaW5zdGVhZCBvZiBhbiBFbGVtZW50UmVjb3JkKgotICAgICAgICAgICAgSFRNTEVs
ZW1lbnRTdGFjazo6RWxlbWVudFJlY29yZCogbm9kZVJlY29yZCA9IG1fdHJlZS5vcGVuRWxlbWVu
dHMoKS0+dG9wUmVjb3JkKCk7Ci0gICAgICAgICAgICBpZiAoIW5vZGVSZWNvcmQtPnN0YWNrSXRl
bSgpLT5oYXNMb2NhbE5hbWUodG9rZW4tPm5hbWUoKSkpCisgICAgICAgICAgICBhdXRvKiBub2Rl
UmVjb3JkID0gbV90cmVlLm9wZW5FbGVtZW50cygpLT50b3BSZWNvcmQoKTsKKyAgICAgICAgICAg
IGlmICghbm9kZVJlY29yZC0+c3RhY2tJdGVtKCktPmhhc0xvY2FsTmFtZSh0b2tlbi5uYW1lKCkp
KQogICAgICAgICAgICAgICAgIHBhcnNlRXJyb3IodG9rZW4pOwogICAgICAgICAgICAgd2hpbGUg
KDEpIHsKLSAgICAgICAgICAgICAgICBpZiAobm9kZVJlY29yZC0+c3RhY2tJdGVtKCktPmhhc0xv
Y2FsTmFtZSh0b2tlbi0+bmFtZSgpKSkgeworICAgICAgICAgICAgICAgIGlmIChub2RlUmVjb3Jk
LT5zdGFja0l0ZW0oKS0+aGFzTG9jYWxOYW1lKHRva2VuLm5hbWUoKSkpIHsKICAgICAgICAgICAg
ICAgICAgICAgbV90cmVlLm9wZW5FbGVtZW50cygpLT5wb3BVbnRpbFBvcHBlZChub2RlUmVjb3Jk
LT5lbGVtZW50KCkpOwogICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAg
ICAgfQpAQCAtMjk4MCwxMCArMjk0MCwxMCBAQCB2b2lkIEhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vz
c1Rva2VuSW5Gb3JlaWduQ29udGVudChBdG9taWNIVE1MVG9rZW4qIHRva2VuKQogICAgICAgICBi
cmVhazsKICAgICB9CiAgICAgY2FzZSBIVE1MVG9rZW46OkNvbW1lbnQ6Ci0gICAgICAgIG1fdHJl
ZS5pbnNlcnRDb21tZW50KHRva2VuKTsKKyAgICAgICAgbV90cmVlLmluc2VydENvbW1lbnQoJnRv
a2VuKTsKICAgICAgICAgcmV0dXJuOwogICAgIGNhc2UgSFRNTFRva2VuOjpDaGFyYWN0ZXI6IHsK
LSAgICAgICAgU3RyaW5nIGNoYXJhY3RlcnMgPSBTdHJpbmcodG9rZW4tPmNoYXJhY3RlcnMoKSwg
dG9rZW4tPmNoYXJhY3RlcnNMZW5ndGgoKSk7CisgICAgICAgIFN0cmluZyBjaGFyYWN0ZXJzID0g
U3RyaW5nKHRva2VuLmNoYXJhY3RlcnMoKSwgdG9rZW4uY2hhcmFjdGVyc0xlbmd0aCgpKTsKICAg
ICAgICAgbV90cmVlLmluc2VydFRleHROb2RlKGNoYXJhY3RlcnMpOwogICAgICAgICBpZiAobV9m
cmFtZXNldE9rICYmICFpc0FsbFdoaXRlc3BhY2VPclJlcGxhY2VtZW50Q2hhcmFjdGVycyhjaGFy
YWN0ZXJzKSkKICAgICAgICAgICAgIG1fZnJhbWVzZXRPayA9IGZhbHNlOwpAQCAtMjk5Nyw2ICsy
OTU3LDggQEAgdm9pZCBIVE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NUb2tlbkluRm9yZWlnbkNvbnRl
bnQoQXRvbWljSFRNTFRva2VuKiB0b2tlbikKIAogdm9pZCBIVE1MVHJlZUJ1aWxkZXI6OmZpbmlz
aGVkKCkKIHsKKyAgICBBU1NFUlQoIW1fZGVzdHJveWVkKTsKKwogICAgIGlmIChpc1BhcnNpbmdG
cmFnbWVudCgpKQogICAgICAgICByZXR1cm47CiAKQEAgLTMwMDQsMTIgKzI5NjYsMTEgQEAgdm9p
ZCBIVE1MVHJlZUJ1aWxkZXI6OmZpbmlzaGVkKCkKICAgICBBU1NFUlQobV90ZW1wbGF0ZUluc2Vy
dGlvbk1vZGVzLmlzRW1wdHkoKSk7CiAjZW5kaWYKIAotICAgIEFTU0VSVChtX2lzQXR0YWNoZWQp
OwotICAgIC8vIFdhcm5pbmcsIHRoaXMgbWF5IGRldGFjaCB0aGUgcGFyc2VyLiBEbyBub3QgZG8g
YW55dGhpbmcgZWxzZSBhZnRlciB0aGlzLgogICAgIG1fdHJlZS5maW5pc2hlZFBhcnNpbmcoKTsK
KyAgICAvLyBUaGUgdHJlZSBidWlsZGVyIG1pZ2h0IGhhdmUgYmVlbiBkZXN0cm95ZWQgYXMgYW4g
aW5kaXJlY3QgcmVzdWx0IG9mIGZpbmlzaGluZyB0aGUgcGFyc2luZy4KIH0KIAotdm9pZCBIVE1M
VHJlZUJ1aWxkZXI6OnBhcnNlRXJyb3IoQXRvbWljSFRNTFRva2VuKikKK2lubGluZSB2b2lkIEhU
TUxUcmVlQnVpbGRlcjo6cGFyc2VFcnJvcihBdG9taWNIVE1MVG9rZW4mKQogewogfQogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MVHJlZUJ1aWxkZXIuaCBiL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxUcmVlQnVpbGRlci5oCmluZGV4IGFkOWZhODk3
MDY5MWYwYjljZWRmODQxNzdiMWI5NGFhMGIxNGE3YzIuLjY4MDNmOGI5MDQyODVkOTVlYjA5NmE2
Y2M4MTYyMzlhMzY1NDViZjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2Vy
L0hUTUxUcmVlQnVpbGRlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxU
cmVlQnVpbGRlci5oCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAxMCBH
b29nbGUsIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEsIDIw
MTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCkBAIC0yNyw2NCArMjcsMzcgQEAKICNpZm5kZWYgSFRNTFRyZWVCdWlsZGVyX2gK
ICNkZWZpbmUgSFRNTFRyZWVCdWlsZGVyX2gKIAotI2luY2x1ZGUgIkZyYWdtZW50U2NyaXB0aW5n
UGVybWlzc2lvbi5oIgogI2luY2x1ZGUgIkhUTUxDb25zdHJ1Y3Rpb25TaXRlLmgiCi0jaW5jbHVk
ZSAiSFRNTEVsZW1lbnRTdGFjay5oIgotI2luY2x1ZGUgIkhUTUxGb3JtYXR0aW5nRWxlbWVudExp
c3QuaCIKICNpbmNsdWRlICJIVE1MUGFyc2VyT3B0aW9ucy5oIgotI2luY2x1ZGUgIkhUTUxTdGFj
a0l0ZW0uaCIKLSNpbmNsdWRlICJIVE1MVG9rZW5pemVyLmgiCi0jaW5jbHVkZSA8d3RmL05vbmNv
cHlhYmxlLmg+Ci0jaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KLSNpbmNsdWRlIDx3dGYvUmVm
UHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmlu
Z0J1aWxkZXIuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0UG9zaXRpb24uaD4KIAogbmFtZXNw
YWNlIFdlYkNvcmUgewogCi1jbGFzcyBBdG9taWNIVE1MVG9rZW47Ci1jbGFzcyBEb2N1bWVudDsK
LWNsYXNzIERvY3VtZW50RnJhZ21lbnQ7Ci1jbGFzcyBFbGVtZW50OwotY2xhc3MgRnJhbWU7Ci1j
bGFzcyBIVE1MVG9rZW47Ci1jbGFzcyBIVE1MRG9jdW1lbnQ7Ci1jbGFzcyBOb2RlOwogY2xhc3Mg
SFRNTERvY3VtZW50UGFyc2VyOwogCiBjbGFzcyBIVE1MVHJlZUJ1aWxkZXIgewotICAgIFdURl9N
QUtFX05PTkNPUFlBQkxFKEhUTUxUcmVlQnVpbGRlcik7IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVE
OworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgotICAgIEhUTUxUcmVlQnVp
bGRlcihIVE1MRG9jdW1lbnRQYXJzZXImLCBIVE1MRG9jdW1lbnQmLCBQYXJzZXJDb250ZW50UG9s
aWN5LCBjb25zdCBIVE1MUGFyc2VyT3B0aW9ucyYpOwotICAgIEhUTUxUcmVlQnVpbGRlcihIVE1M
RG9jdW1lbnRQYXJzZXImLCBEb2N1bWVudEZyYWdtZW50JiwgRWxlbWVudCogY29udGV4dEVsZW1l
bnQsIFBhcnNlckNvbnRlbnRQb2xpY3ksIGNvbnN0IEhUTUxQYXJzZXJPcHRpb25zJik7Ci0gICAg
fkhUTUxUcmVlQnVpbGRlcigpOworICAgIEhUTUxUcmVlQnVpbGRlcihjb25zdCBIVE1MRG9jdW1l
bnRQYXJzZXImLCBIVE1MRG9jdW1lbnQmLCBQYXJzZXJDb250ZW50UG9saWN5LCBjb25zdCBIVE1M
UGFyc2VyT3B0aW9ucyYpOworICAgIEhUTUxUcmVlQnVpbGRlcihjb25zdCBIVE1MRG9jdW1lbnRQ
YXJzZXImLCBEb2N1bWVudEZyYWdtZW50JiwgRWxlbWVudCYgY29udGV4dEVsZW1lbnQsIFBhcnNl
ckNvbnRlbnRQb2xpY3ksIGNvbnN0IEhUTUxQYXJzZXJPcHRpb25zJik7CisgICAgdm9pZCBzZXRT
aG91bGRTa2lwTGVhZGluZ05ld2xpbmUoYm9vbCk7CiAKLSAgICBjb25zdCBIVE1MRWxlbWVudFN0
YWNrKiBvcGVuRWxlbWVudHMoKSBjb25zdCB7IHJldHVybiBtX3RyZWUub3BlbkVsZW1lbnRzKCk7
IH0KKyAgICB+SFRNTFRyZWVCdWlsZGVyKCk7CiAKLSAgICBib29sIGlzUGFyc2luZ0ZyYWdtZW50
KCkgY29uc3QgeyByZXR1cm4gISFtX2ZyYWdtZW50Q29udGV4dC5mcmFnbWVudCgpOyB9Ci0jaWYg
RU5BQkxFKFRFTVBMQVRFX0VMRU1FTlQpCi0gICAgYm9vbCBpc1BhcnNpbmdUZW1wbGF0ZUNvbnRl
bnRzKCkgY29uc3QgeyByZXR1cm4gbV90cmVlLm9wZW5FbGVtZW50cygpLT5oYXNUZW1wbGF0ZUlu
SFRNTFNjb3BlKCk7IH0KLSNlbHNlCi0gICAgYm9vbCBpc1BhcnNpbmdUZW1wbGF0ZUNvbnRlbnRz
KCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KLSNlbmRpZgotICAgIGJvb2wgaXNQYXJzaW5nRnJh
Z21lbnRPclRlbXBsYXRlQ29udGVudHMoKSBjb25zdCB7IHJldHVybiBpc1BhcnNpbmdGcmFnbWVu
dCgpIHx8IGlzUGFyc2luZ1RlbXBsYXRlQ29udGVudHMoKTsgfQorICAgIGJvb2wgaXNQYXJzaW5n
RnJhZ21lbnQoKSBjb25zdDsKIAotICAgIHZvaWQgZGV0YWNoKCk7CisgICAgdm9pZCBjb25zdHJ1
Y3RUcmVlKEF0b21pY0hUTUxUb2tlbiYpOwogCi0gICAgdm9pZCBjb25zdHJ1Y3RUcmVlKEF0b21p
Y0hUTUxUb2tlbiopOworICAgIGJvb2wgaGFzUGFyc2VyQmxvY2tpbmdTY3JpcHQoKSBjb25zdDsK
IAotICAgIGJvb2wgaGFzUGFyc2VyQmxvY2tpbmdTY3JpcHQoKSBjb25zdCB7IHJldHVybiAhIW1f
c2NyaXB0VG9Qcm9jZXNzOyB9CiAgICAgLy8gTXVzdCBiZSBjYWxsZWQgdG8gdGFrZSB0aGUgcGFy
c2VyLWJsb2NraW5nIHNjcmlwdCBiZWZvcmUgY2FsbGluZyB0aGUgcGFyc2VyIGFnYWluLgotICAg
IFBhc3NSZWZQdHI8RWxlbWVudD4gdGFrZVNjcmlwdFRvUHJvY2VzcyhUZXh0UG9zaXRpb24mIHNj
cmlwdFN0YXJ0UG9zaXRpb24pOworICAgIFJlZlB0cjxFbGVtZW50PiB0YWtlU2NyaXB0VG9Qcm9j
ZXNzKFRleHRQb3NpdGlvbiYgc2NyaXB0U3RhcnRQb3NpdGlvbik7CiAKICAgICAvLyBEb25lLCBj
bG9zZSBhbnkgb3BlbiB0YWdzLCBldGMuCiAgICAgdm9pZCBmaW5pc2hlZCgpOwogCi0gICAgdm9p
ZCBzZXRTaG91bGRTa2lwTGVhZGluZ05ld2xpbmUoYm9vbCBzaG91bGRTa2lwKSB7IG1fc2hvdWxk
U2tpcExlYWRpbmdOZXdsaW5lID0gc2hvdWxkU2tpcDsgfQotCiBwcml2YXRlOgogICAgIGNsYXNz
IEV4dGVybmFsQ2hhcmFjdGVyVG9rZW5CdWZmZXI7CisKICAgICAvLyBSZXByZXNlbnRzIEhUTUw1
ICJpbnNlcnRpb24gbW9kZSIKICAgICAvLyBodHRwOi8vd3d3LndoYXR3Zy5vcmcvc3BlY3Mvd2Vi
LWFwcHMvY3VycmVudC13b3JrL211bHRpcGFnZS9wYXJzaW5nLmh0bWwjaW5zZXJ0aW9uLW1vZGUK
ICAgICBlbnVtIGNsYXNzIEluc2VydGlvbk1vZGUgewpAQCAtOTQsNyArNjcsOSBAQCBwcml2YXRl
OgogICAgICAgICBJbkhlYWQsCiAgICAgICAgIEluSGVhZE5vc2NyaXB0LAogICAgICAgICBBZnRl
ckhlYWQsCisjaWYgRU5BQkxFKFRFTVBMQVRFX0VMRU1FTlQpCiAgICAgICAgIFRlbXBsYXRlQ29u
dGVudHMsCisjZW5kaWYKICAgICAgICAgSW5Cb2R5LAogICAgICAgICBUZXh0LAogICAgICAgICBJ
blRhYmxlLApAQCAtMTEzLDUyICs4OCw1NCBAQCBwcml2YXRlOgogICAgICAgICBBZnRlckFmdGVy
RnJhbWVzZXQsCiAgICAgfTsKIAotI2lmIEVOQUJMRShURUxFUEhPTkVfTlVNQkVSX0RFVEVDVElP
TikKKyAgICBib29sIGlzUGFyc2luZ1RlbXBsYXRlQ29udGVudHMoKSBjb25zdDsKKyAgICBib29s
IGlzUGFyc2luZ0ZyYWdtZW50T3JUZW1wbGF0ZUNvbnRlbnRzKCkgY29uc3Q7CisKKyNpZiBFTkFC
TEUoVEVMRVBIT05FX05VTUJFUl9ERVRFQ1RJT04pICYmIFBMQVRGT1JNKElPUykKICAgICB2b2lk
IGluc2VydFBob25lTnVtYmVyTGluayhjb25zdCBTdHJpbmcmKTsKICAgICB2b2lkIGxpbmtpZnlQ
aG9uZU51bWJlcnMoY29uc3QgU3RyaW5nJik7CiAjZW5kaWYKIAotICAgIHZvaWQgcHJvY2Vzc1Rv
a2VuKEF0b21pY0hUTUxUb2tlbiopOwotCi0gICAgdm9pZCBwcm9jZXNzRG9jdHlwZVRva2VuKEF0
b21pY0hUTUxUb2tlbiopOwotICAgIHZvaWQgcHJvY2Vzc1N0YXJ0VGFnKEF0b21pY0hUTUxUb2tl
biopOwotICAgIHZvaWQgcHJvY2Vzc0VuZFRhZyhBdG9taWNIVE1MVG9rZW4qKTsKLSAgICB2b2lk
IHByb2Nlc3NDb21tZW50KEF0b21pY0hUTUxUb2tlbiopOwotICAgIHZvaWQgcHJvY2Vzc0NoYXJh
Y3RlcihBdG9taWNIVE1MVG9rZW4qKTsKLSAgICB2b2lkIHByb2Nlc3NFbmRPZkZpbGUoQXRvbWlj
SFRNTFRva2VuKik7Ci0KLSAgICBib29sIHByb2Nlc3NTdGFydFRhZ0ZvckluSGVhZChBdG9taWNI
VE1MVG9rZW4qKTsKLSAgICB2b2lkIHByb2Nlc3NTdGFydFRhZ0ZvckluQm9keShBdG9taWNIVE1M
VG9rZW4qKTsKLSAgICB2b2lkIHByb2Nlc3NTdGFydFRhZ0ZvckluVGFibGUoQXRvbWljSFRNTFRv
a2VuKik7Ci0gICAgdm9pZCBwcm9jZXNzRW5kVGFnRm9ySW5Cb2R5KEF0b21pY0hUTUxUb2tlbiop
OwotICAgIHZvaWQgcHJvY2Vzc0VuZFRhZ0ZvckluVGFibGUoQXRvbWljSFRNTFRva2VuKik7Ci0g
ICAgdm9pZCBwcm9jZXNzRW5kVGFnRm9ySW5UYWJsZUJvZHkoQXRvbWljSFRNTFRva2VuKik7Ci0g
ICAgdm9pZCBwcm9jZXNzRW5kVGFnRm9ySW5Sb3coQXRvbWljSFRNTFRva2VuKik7Ci0gICAgdm9p
ZCBwcm9jZXNzRW5kVGFnRm9ySW5DZWxsKEF0b21pY0hUTUxUb2tlbiopOwotCi0gICAgdm9pZCBw
cm9jZXNzSXNpbmRleFN0YXJ0VGFnRm9ySW5Cb2R5KEF0b21pY0hUTUxUb2tlbiopOwotICAgIHZv
aWQgcHJvY2Vzc0h0bWxTdGFydFRhZ0ZvckluQm9keShBdG9taWNIVE1MVG9rZW4qKTsKLSAgICBi
b29sIHByb2Nlc3NCb2R5RW5kVGFnRm9ySW5Cb2R5KEF0b21pY0hUTUxUb2tlbiopOworICAgIHZv
aWQgcHJvY2Vzc1Rva2VuKEF0b21pY0hUTUxUb2tlbiYpOworCisgICAgdm9pZCBwcm9jZXNzRG9j
dHlwZVRva2VuKEF0b21pY0hUTUxUb2tlbiYpOworICAgIHZvaWQgcHJvY2Vzc1N0YXJ0VGFnKEF0
b21pY0hUTUxUb2tlbiYpOworICAgIHZvaWQgcHJvY2Vzc0VuZFRhZyhBdG9taWNIVE1MVG9rZW4m
KTsKKyAgICB2b2lkIHByb2Nlc3NDb21tZW50KEF0b21pY0hUTUxUb2tlbiYpOworICAgIHZvaWQg
cHJvY2Vzc0NoYXJhY3RlcihBdG9taWNIVE1MVG9rZW4mKTsKKyAgICB2b2lkIHByb2Nlc3NFbmRP
ZkZpbGUoQXRvbWljSFRNTFRva2VuJik7CisKKyAgICBib29sIHByb2Nlc3NTdGFydFRhZ0Zvcklu
SGVhZChBdG9taWNIVE1MVG9rZW4mKTsKKyAgICB2b2lkIHByb2Nlc3NTdGFydFRhZ0ZvckluQm9k
eShBdG9taWNIVE1MVG9rZW4mKTsKKyAgICB2b2lkIHByb2Nlc3NTdGFydFRhZ0ZvckluVGFibGUo
QXRvbWljSFRNTFRva2VuJik7CisgICAgdm9pZCBwcm9jZXNzRW5kVGFnRm9ySW5Cb2R5KEF0b21p
Y0hUTUxUb2tlbiYpOworICAgIHZvaWQgcHJvY2Vzc0VuZFRhZ0ZvckluVGFibGUoQXRvbWljSFRN
TFRva2VuJik7CisgICAgdm9pZCBwcm9jZXNzRW5kVGFnRm9ySW5UYWJsZUJvZHkoQXRvbWljSFRN
TFRva2VuJik7CisgICAgdm9pZCBwcm9jZXNzRW5kVGFnRm9ySW5Sb3coQXRvbWljSFRNTFRva2Vu
Jik7CisgICAgdm9pZCBwcm9jZXNzRW5kVGFnRm9ySW5DZWxsKEF0b21pY0hUTUxUb2tlbiYpOwor
CisgICAgdm9pZCBwcm9jZXNzSXNpbmRleFN0YXJ0VGFnRm9ySW5Cb2R5KEF0b21pY0hUTUxUb2tl
biYpOworICAgIHZvaWQgcHJvY2Vzc0h0bWxTdGFydFRhZ0ZvckluQm9keShBdG9taWNIVE1MVG9r
ZW4mKTsKKyAgICBib29sIHByb2Nlc3NCb2R5RW5kVGFnRm9ySW5Cb2R5KEF0b21pY0hUTUxUb2tl
biYpOwogICAgIGJvb2wgcHJvY2Vzc1RhYmxlRW5kVGFnRm9ySW5UYWJsZSgpOwogICAgIGJvb2wg
cHJvY2Vzc0NhcHRpb25FbmRUYWdGb3JJbkNhcHRpb24oKTsKICAgICBib29sIHByb2Nlc3NDb2xn
cm91cEVuZFRhZ0ZvckluQ29sdW1uR3JvdXAoKTsKICAgICBib29sIHByb2Nlc3NUckVuZFRhZ0Zv
ckluUm93KCk7Ci0gICAgLy8gRklYTUU6IFRoaXMgZnVuY3Rpb24gc2hvdWxkIGJlIGlubGluZWQg
aW50byBpdHMgb25lIGNhbGwgc2l0ZSBvciBpdAotICAgIC8vIG5lZWRzIHRvIGFzc2VydCB3aGlj
aCB0b2tlbnMgaXQgY2FuIGJlIGNhbGxlZCB3aXRoLgotICAgIHZvaWQgcHJvY2Vzc0FueU90aGVy
RW5kVGFnRm9ySW5Cb2R5KEF0b21pY0hUTUxUb2tlbiopOworCisgICAgdm9pZCBwcm9jZXNzQW55
T3RoZXJFbmRUYWdGb3JJbkJvZHkoQXRvbWljSFRNTFRva2VuJik7CiAKICAgICB2b2lkIHByb2Nl
c3NDaGFyYWN0ZXJCdWZmZXIoRXh0ZXJuYWxDaGFyYWN0ZXJUb2tlbkJ1ZmZlciYpOwogICAgIGlu
bGluZSB2b2lkIHByb2Nlc3NDaGFyYWN0ZXJCdWZmZXJGb3JJbkJvZHkoRXh0ZXJuYWxDaGFyYWN0
ZXJUb2tlbkJ1ZmZlciYpOwogCi0gICAgdm9pZCBwcm9jZXNzRmFrZVN0YXJ0VGFnKGNvbnN0IFF1
YWxpZmllZE5hbWUmLCBjb25zdCBWZWN0b3I8QXR0cmlidXRlPiYgYXR0cmlidXRlcyA9IFZlY3Rv
cjxBdHRyaWJ1dGU+KCkpOworICAgIHZvaWQgcHJvY2Vzc0Zha2VTdGFydFRhZyhjb25zdCBRdWFs
aWZpZWROYW1lJiwgVmVjdG9yPEF0dHJpYnV0ZT4mJiBhdHRyaWJ1dGVzID0gVmVjdG9yPEF0dHJp
YnV0ZT4oKSk7CiAgICAgdm9pZCBwcm9jZXNzRmFrZUVuZFRhZyhjb25zdCBRdWFsaWZpZWROYW1l
Jik7CiAgICAgdm9pZCBwcm9jZXNzRmFrZUVuZFRhZyhjb25zdCBBdG9taWNTdHJpbmcmKTsKICAg
ICB2b2lkIHByb2Nlc3NGYWtlQ2hhcmFjdGVycyhjb25zdCBTdHJpbmcmKTsKICAgICB2b2lkIHBy
b2Nlc3NGYWtlUEVuZFRhZ0lmUEluQnV0dG9uU2NvcGUoKTsKIAotICAgIHZvaWQgcHJvY2Vzc0dl
bmVyaWNSQ0RBVEFTdGFydFRhZyhBdG9taWNIVE1MVG9rZW4qKTsKLSAgICB2b2lkIHByb2Nlc3NH
ZW5lcmljUmF3VGV4dFN0YXJ0VGFnKEF0b21pY0hUTUxUb2tlbiopOwotICAgIHZvaWQgcHJvY2Vz
c1NjcmlwdFN0YXJ0VGFnKEF0b21pY0hUTUxUb2tlbiopOworICAgIHZvaWQgcHJvY2Vzc0dlbmVy
aWNSQ0RBVEFTdGFydFRhZyhBdG9taWNIVE1MVG9rZW4mKTsKKyAgICB2b2lkIHByb2Nlc3NHZW5l
cmljUmF3VGV4dFN0YXJ0VGFnKEF0b21pY0hUTUxUb2tlbiYpOworICAgIHZvaWQgcHJvY2Vzc1Nj
cmlwdFN0YXJ0VGFnKEF0b21pY0hUTUxUb2tlbiYpOwogCiAgICAgLy8gRGVmYXVsdCBwcm9jZXNz
aW5nIGZvciB0aGUgZGlmZmVyZW50IGluc2VydGlvbiBtb2Rlcy4KICAgICB2b2lkIGRlZmF1bHRG
b3JJbml0aWFsKCk7CkBAIC0xNjksODEgKzE0Niw5OSBAQCBwcml2YXRlOgogICAgIHZvaWQgZGVm
YXVsdEZvckFmdGVySGVhZCgpOwogICAgIHZvaWQgZGVmYXVsdEZvckluVGFibGVUZXh0KCk7CiAK
LSAgICBpbmxpbmUgYm9vbCBzaG91bGRQcm9jZXNzVG9rZW5JbkZvcmVpZ25Db250ZW50KEF0b21p
Y0hUTUxUb2tlbiopOwotICAgIHZvaWQgcHJvY2Vzc1Rva2VuSW5Gb3JlaWduQ29udGVudChBdG9t
aWNIVE1MVG9rZW4qKTsKKyAgICBib29sIHNob3VsZFByb2Nlc3NUb2tlbkluRm9yZWlnbkNvbnRl
bnQoQXRvbWljSFRNTFRva2VuJik7CisgICAgdm9pZCBwcm9jZXNzVG9rZW5JbkZvcmVpZ25Db250
ZW50KEF0b21pY0hUTUxUb2tlbiYpOwogICAgIAotICAgIGlubGluZSBIVE1MU3RhY2tJdGVtKiBh
ZGp1c3RlZEN1cnJlbnRTdGFja0l0ZW0oKSBjb25zdDsKKyAgICBIVE1MU3RhY2tJdGVtJiBhZGp1
c3RlZEN1cnJlbnRTdGFja0l0ZW0oKSBjb25zdDsKIAotICAgIFZlY3RvcjxBdHRyaWJ1dGU+IGF0
dHJpYnV0ZXNGb3JJc2luZGV4SW5wdXQoQXRvbWljSFRNTFRva2VuKik7CisgICAgVmVjdG9yPEF0
dHJpYnV0ZT4gYXR0cmlidXRlc0ZvcklzaW5kZXhJbnB1dChBdG9taWNIVE1MVG9rZW4mKTsKIAot
ICAgIHZvaWQgY2FsbFRoZUFkb3B0aW9uQWdlbmN5KEF0b21pY0hUTUxUb2tlbiopOworICAgIHZv
aWQgY2FsbFRoZUFkb3B0aW9uQWdlbmN5KEF0b21pY0hUTUxUb2tlbiYpOwogCiAgICAgdm9pZCBj
bG9zZVRoZUNlbGwoKTsKIAotICAgIHRlbXBsYXRlIDxib29sIHNob3VsZENsb3NlKGNvbnN0IEhU
TUxTdGFja0l0ZW0qKT4KLSAgICB2b2lkIHByb2Nlc3NDbG9zZVdoZW5OZXN0ZWRUYWcoQXRvbWlj
SFRNTFRva2VuKik7CisgICAgdGVtcGxhdGUgPGJvb2wgc2hvdWxkQ2xvc2UoY29uc3QgSFRNTFN0
YWNrSXRlbSYpPiB2b2lkIHByb2Nlc3NDbG9zZVdoZW5OZXN0ZWRUYWcoQXRvbWljSFRNTFRva2Vu
Jik7CiAKLSAgICB2b2lkIHBhcnNlRXJyb3IoQXRvbWljSFRNTFRva2VuKik7Ci0KLSAgICBJbnNl
cnRpb25Nb2RlIGluc2VydGlvbk1vZGUoKSBjb25zdCB7IHJldHVybiBtX2luc2VydGlvbk1vZGU7
IH0KLSAgICB2b2lkIHNldEluc2VydGlvbk1vZGUoSW5zZXJ0aW9uTW9kZSBtb2RlKSB7IG1faW5z
ZXJ0aW9uTW9kZSA9IG1vZGU7IH0KKyAgICB2b2lkIHBhcnNlRXJyb3IoQXRvbWljSFRNTFRva2Vu
Jik7CiAKICAgICB2b2lkIHJlc2V0SW5zZXJ0aW9uTW9kZUFwcHJvcHJpYXRlbHkoKTsKIAogI2lm
IEVOQUJMRShURU1QTEFURV9FTEVNRU5UKQotICAgIHZvaWQgcHJvY2Vzc1RlbXBsYXRlU3RhcnRU
YWcoQXRvbWljSFRNTFRva2VuKik7Ci0gICAgYm9vbCBwcm9jZXNzVGVtcGxhdGVFbmRUYWcoQXRv
bWljSFRNTFRva2VuKik7Ci0gICAgYm9vbCBwcm9jZXNzRW5kT2ZGaWxlRm9ySW5UZW1wbGF0ZUNv
bnRlbnRzKEF0b21pY0hUTUxUb2tlbiopOworICAgIHZvaWQgcHJvY2Vzc1RlbXBsYXRlU3RhcnRU
YWcoQXRvbWljSFRNTFRva2VuJik7CisgICAgYm9vbCBwcm9jZXNzVGVtcGxhdGVFbmRUYWcoQXRv
bWljSFRNTFRva2VuJik7CisgICAgYm9vbCBwcm9jZXNzRW5kT2ZGaWxlRm9ySW5UZW1wbGF0ZUNv
bnRlbnRzKEF0b21pY0hUTUxUb2tlbiYpOwogI2VuZGlmCiAKICAgICBjbGFzcyBGcmFnbWVudFBh
cnNpbmdDb250ZXh0IHsKLSAgICAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoRnJhZ21lbnRQYXJz
aW5nQ29udGV4dCk7CiAgICAgcHVibGljOgogICAgICAgICBGcmFnbWVudFBhcnNpbmdDb250ZXh0
KCk7Ci0gICAgICAgIEZyYWdtZW50UGFyc2luZ0NvbnRleHQoRG9jdW1lbnRGcmFnbWVudCYsIEVs
ZW1lbnQqIGNvbnRleHRFbGVtZW50KTsKLSAgICAgICAgfkZyYWdtZW50UGFyc2luZ0NvbnRleHQo
KTsKKyAgICAgICAgRnJhZ21lbnRQYXJzaW5nQ29udGV4dChEb2N1bWVudEZyYWdtZW50JiwgRWxl
bWVudCYgY29udGV4dEVsZW1lbnQpOwogCi0gICAgICAgIERvY3VtZW50RnJhZ21lbnQqIGZyYWdt
ZW50KCkgY29uc3QgeyByZXR1cm4gbV9mcmFnbWVudDsgfQotICAgICAgICBFbGVtZW50KiBjb250
ZXh0RWxlbWVudCgpIGNvbnN0IHsgQVNTRVJUKG1fZnJhZ21lbnQpOyByZXR1cm4gbV9jb250ZXh0
RWxlbWVudFN0YWNrSXRlbS0+ZWxlbWVudCgpOyB9Ci0gICAgICAgIEhUTUxTdGFja0l0ZW0qIGNv
bnRleHRFbGVtZW50U3RhY2tJdGVtKCkgY29uc3QgeyBBU1NFUlQobV9mcmFnbWVudCk7IHJldHVy
biBtX2NvbnRleHRFbGVtZW50U3RhY2tJdGVtLmdldCgpOyB9CisgICAgICAgIERvY3VtZW50RnJh
Z21lbnQqIGZyYWdtZW50KCkgY29uc3Q7CisgICAgICAgIEVsZW1lbnQmIGNvbnRleHRFbGVtZW50
KCkgY29uc3Q7CisgICAgICAgIEhUTUxTdGFja0l0ZW0mIGNvbnRleHRFbGVtZW50U3RhY2tJdGVt
KCkgY29uc3Q7CiAKICAgICBwcml2YXRlOgotICAgICAgICBEb2N1bWVudEZyYWdtZW50KiBtX2Zy
YWdtZW50OworICAgICAgICBEb2N1bWVudEZyYWdtZW50KiBtX2ZyYWdtZW50IHsgbnVsbHB0ciB9
OwogICAgICAgICBSZWZQdHI8SFRNTFN0YWNrSXRlbT4gbV9jb250ZXh0RWxlbWVudFN0YWNrSXRl
bTsKICAgICB9OwogCi0gICAgYm9vbCBtX2ZyYW1lc2V0T2s7Ci0jaWZuZGVmIE5ERUJVRwotICAg
IGJvb2wgbV9pc0F0dGFjaGVkOwotI2VuZGlmCi0gICAgRnJhZ21lbnRQYXJzaW5nQ29udGV4dCBt
X2ZyYWdtZW50Q29udGV4dDsKLSAgICBIVE1MQ29uc3RydWN0aW9uU2l0ZSBtX3RyZWU7Ci0KLSAg
ICAvLyBodHRwOi8vd3d3LndoYXR3Zy5vcmcvc3BlY3Mvd2ViLWFwcHMvY3VycmVudC13b3JrL211
bHRpcGFnZS9wYXJzaW5nLmh0bWwjaW5zZXJ0aW9uLW1vZGUKLSAgICBJbnNlcnRpb25Nb2RlIG1f
aW5zZXJ0aW9uTW9kZTsKKyAgICBjb25zdCBIVE1MRG9jdW1lbnRQYXJzZXImIG1fcGFyc2VyOwor
ICAgIGNvbnN0IEhUTUxQYXJzZXJPcHRpb25zIG1fb3B0aW9uczsKKyAgICBjb25zdCBGcmFnbWVu
dFBhcnNpbmdDb250ZXh0IG1fZnJhZ21lbnRDb250ZXh0OwogCi0gICAgLy8gaHR0cDovL3d3dy53
aGF0d2cub3JnL3NwZWNzL3dlYi1hcHBzL2N1cnJlbnQtd29yay9tdWx0aXBhZ2UvcGFyc2luZy5o
dG1sI29yaWdpbmFsLWluc2VydGlvbi1tb2RlCi0gICAgSW5zZXJ0aW9uTW9kZSBtX29yaWdpbmFs
SW5zZXJ0aW9uTW9kZTsKKyAgICBIVE1MQ29uc3RydWN0aW9uU2l0ZSBtX3RyZWU7CiAKKyAgICAv
LyBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9zeW50YXguaHRtbCN0aGUt
aW5zZXJ0aW9uLW1vZGUKKyAgICBJbnNlcnRpb25Nb2RlIG1faW5zZXJ0aW9uTW9kZSB7IEluc2Vy
dGlvbk1vZGU6OkluaXRpYWwgfTsKKyAgICBJbnNlcnRpb25Nb2RlIG1fb3JpZ2luYWxJbnNlcnRp
b25Nb2RlIHsgSW5zZXJ0aW9uTW9kZTo6SW5pdGlhbCB9OwogI2lmIEVOQUJMRShURU1QTEFURV9F
TEVNRU5UKQotICAgIFZlY3RvcjxJbnNlcnRpb25Nb2RlPiBtX3RlbXBsYXRlSW5zZXJ0aW9uTW9k
ZXM7CisgICAgVmVjdG9yPEluc2VydGlvbk1vZGUsIDE+IG1fdGVtcGxhdGVJbnNlcnRpb25Nb2Rl
czsKICNlbmRpZgogCi0gICAgLy8gaHR0cDovL3d3dy53aGF0d2cub3JnL3NwZWNzL3dlYi1hcHBz
L2N1cnJlbnQtd29yay9tdWx0aXBhZ2UvdG9rZW5pemF0aW9uLmh0bWwjcGVuZGluZy10YWJsZS1j
aGFyYWN0ZXItdG9rZW5zCisgICAgLy8gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0
aXBhZ2Uvc3ludGF4Lmh0bWwjY29uY2VwdC1wZW5kaW5nLXRhYmxlLWNoYXItdG9rZW5zCiAgICAg
U3RyaW5nQnVpbGRlciBtX3BlbmRpbmdUYWJsZUNoYXJhY3RlcnM7CiAKLSAgICBib29sIG1fc2hv
dWxkU2tpcExlYWRpbmdOZXdsaW5lOwotCi0gICAgLy8gV2UgYWNjZXNzIHBhcnNlciBiZWNhdXNl
IEhUTUw1IHNwZWMgcmVxdWlyZXMgdGhhdCB3ZSBiZSBhYmxlIHRvIGNoYW5nZSB0aGUgc3RhdGUg
b2YgdGhlIHRva2VuaXplcgotICAgIC8vIGZyb20gd2l0aGluIHBhcnNlciBhY3Rpb25zLiBXZSBh
bHNvIG5lZWQgaXQgdG8gdHJhY2sgdGhlIGN1cnJlbnQgcG9zaXRpb24uCi0gICAgSFRNTERvY3Vt
ZW50UGFyc2VyJiBtX3BhcnNlcjsKLQogICAgIFJlZlB0cjxFbGVtZW50PiBtX3NjcmlwdFRvUHJv
Y2VzczsgLy8gPHNjcmlwdD4gdGFnIHdoaWNoIG5lZWRzIHByb2Nlc3NpbmcgYmVmb3JlIHJlc3Vt
aW5nIHRoZSBwYXJzZXIuCiAgICAgVGV4dFBvc2l0aW9uIG1fc2NyaXB0VG9Qcm9jZXNzU3RhcnRQ
b3NpdGlvbjsgLy8gU3RhcnRpbmcgbGluZSBudW1iZXIgb2YgdGhlIHNjcmlwdCB0YWcgbmVlZGlu
ZyBwcm9jZXNzaW5nLgogCi0gICAgSFRNTFBhcnNlck9wdGlvbnMgbV9vcHRpb25zOworICAgIGJv
b2wgbV9zaG91bGRTa2lwTGVhZGluZ05ld2xpbmUgeyBmYWxzZSB9OworCisgICAgYm9vbCBtX2Zy
YW1lc2V0T2sgeyB0cnVlIH07CisKKyNpZiAhQVNTRVJUX0RJU0FCTEVECisgICAgYm9vbCBtX2Rl
c3Ryb3llZCB7IGZhbHNlIH07CisgICAgYm9vbCBtX2Rlc3RydWN0aW9uUHJvaGliaXRlZCB7IHRy
dWUgfTsKKyNlbmRpZgogfTsKIAoraW5saW5lIEhUTUxUcmVlQnVpbGRlcjo6fkhUTUxUcmVlQnVp
bGRlcigpCit7CisjaWYgIUFTU0VSVF9ESVNBQkxFRAorICAgIEFTU0VSVCghbV9kZXN0cm95ZWQp
OworICAgIEFTU0VSVCghbV9kZXN0cnVjdGlvblByb2hpYml0ZWQpOworICAgIG1fZGVzdHJveWVk
ID0gdHJ1ZTsKKyNlbmRpZgorfQorCitpbmxpbmUgdm9pZCBIVE1MVHJlZUJ1aWxkZXI6OnNldFNo
b3VsZFNraXBMZWFkaW5nTmV3bGluZShib29sIHNob3VsZFNraXApCit7CisgICAgQVNTRVJUKCFt
X2Rlc3Ryb3llZCk7CisgICAgbV9zaG91bGRTa2lwTGVhZGluZ05ld2xpbmUgPSBzaG91bGRTa2lw
OworfQorCitpbmxpbmUgYm9vbCBIVE1MVHJlZUJ1aWxkZXI6OmlzUGFyc2luZ0ZyYWdtZW50KCkg
Y29uc3QKK3sKKyAgICBBU1NFUlQoIW1fZGVzdHJveWVkKTsKKyAgICByZXR1cm4gISFtX2ZyYWdt
ZW50Q29udGV4dC5mcmFnbWVudCgpOworfQorCitpbmxpbmUgYm9vbCBIVE1MVHJlZUJ1aWxkZXI6
Omhhc1BhcnNlckJsb2NraW5nU2NyaXB0KCkgY29uc3QKK3sKKyAgICBBU1NFUlQoIW1fZGVzdHJv
eWVkKTsKKyAgICByZXR1cm4gISFtX3NjcmlwdFRvUHJvY2VzczsKK30KKwogfQogCiAjZW5kaWYK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL1RleHREb2N1bWVudFBhcnNl
ci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9UZXh0RG9jdW1lbnRQYXJzZXIuY3Bw
CmluZGV4IGIyNzM2ZjMyN2U4MTRkNjUxOWYzNDIxOGIzYTQwOWIwYTE4NDBkNWUuLmY2YTU2NzYw
YzM4MzM4OTI1YmUxZjM3M2E1Y2E2ZDMzNTQ3MDY2NjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2h0bWwvcGFyc2VyL1RleHREb2N1bWVudFBhcnNlci5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvaHRtbC9wYXJzZXIvVGV4dERvY3VtZW50UGFyc2VyLmNwcApAQCAtNTksNyArNTksNyBAQCB2
b2lkIFRleHREb2N1bWVudFBhcnNlcjo6aW5zZXJ0RmFrZVByZUVsZW1lbnQoKQogICAgIFZlY3Rv
cjxBdHRyaWJ1dGU+IGF0dHJpYnV0ZXM7CiAgICAgYXR0cmlidXRlcy5hcHBlbmQoQXR0cmlidXRl
KHN0eWxlQXR0ciwgIndvcmQtd3JhcDogYnJlYWstd29yZDsgd2hpdGUtc3BhY2U6IHByZS13cmFw
OyIpKTsKICAgICBBdG9taWNIVE1MVG9rZW4gZmFrZVByZShIVE1MVG9rZW46OlN0YXJ0VGFnLCBw
cmVUYWcubG9jYWxOYW1lKCksIGF0dHJpYnV0ZXMpOwotICAgIHRyZWVCdWlsZGVyKCktPmNvbnN0
cnVjdFRyZWUoJmZha2VQcmUpOworICAgIHRyZWVCdWlsZGVyKCktPmNvbnN0cnVjdFRyZWUoZmFr
ZVByZSk7CiAKICAgICAvLyBOb3JtYWxseSB3ZSB3b3VsZCBza2lwIHRoZSBmaXJzdCBcbiBhZnRl
ciBhIDxwcmU+IGVsZW1lbnQsIGJ1dCB3ZSBkb24ndAogICAgIC8vIHdhbnQgdG8gc2tpcCB0aGUg
Zmlyc3QgXG4gZm9yIHRleHQgZG9jdW1lbnRzIQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>243877</attachid>
            <date>2015-01-01 17:01:04 -0800</date>
            <delta_ts>2015-01-02 00:35:53 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-140032-20150101170106.patch</filename>
            <type>text/plain</type>
            <size>161532</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTc3ODUzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOWY1YmNmM2NjNzEwNDVl
YmFhZThjYjMzYjFmM2QyMDRmMTIyMDhjYS4uNmIzZWFlYjY4MDA1NzFjOTRiMWMxZTFiNjI3NDJj
MjM5MGM2NDE4ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDEzOSBAQAogMjAxNS0wMS0wMSAgRGFy
aW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CiAKKyAgICAgICAgTW9kZXJuaXplIGNvZGluZyBz
dHlsZSBvZiBIVE1MVHJlZUJ1aWxkZXIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTE0MDAzMgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIENoYW5nZXMgaW5jbHVkZToKKyAgICAgICAgLSBVc2UgcmVmZXJlbmNl
cyByYXRoZXIgdGhhbiBwb2ludGVycy4KKyAgICAgICAgLSBNYXJrIGRhdGEgbWVtYmVycyBjb25z
dCB0aGF0IGFyZSBmdWxseSBzZXQgdXAgaW4gdGhlIGNvbnN0cnVjdG9yLgorICAgICAgICAtIFJl
bW92ZSBtYW55IHVubmVlZGVkIGluY2x1ZGVzIGFuZCBmb3J3YXJkIGRlY2xhcmF0aW9ucy4KKyAg
ICAgICAgLSBGaXggY29uZGl0aW9uYWxzIHRvIGJlIGNvbnNpc3RlbnQgYW5kIGNvcnJlY3QuCisg
ICAgICAgIC0gTWVyZ2Ugc29tZSBtdWx0aS1saW5lIGNvbnN0cnVjdHMgaW50byBhIHNpbmdsZSBs
aW5lLgorICAgICAgICAtIFVwZGF0ZSB3aGF0d2cub3JnIFVSTHM7IG5vdCBzdXJlIHdlIHNob3Vs
ZCBrZWVwIHRoZXNlLCB0aG91Z2guCisgICAgICAgIC0gQ3V0IGRvd24gb24gdXNlIG9mIFdURl9N
QUtFX05PTkNPUFlBQkxFIHNpbmNlIGZvciBtYW55IGNsYXNzZXMgaXQncworICAgICAgICAgIGlt
cG9zc2libGUgdG8gY29weSBhbnl3YXkgZHVlIHRvIHJlZmVyZW5jZXMsIG9yIGhhcm1sZXNzIHRv
IGNvcHkuCisgICAgICAgIC0gTWFkZSBtb3JlIHRoaW5ncyBwcml2YXRlLgorICAgICAgICAtIElu
aXRpYWxpemUgc2NhbGFycyBpbiB0aGUgY2xhc3MgZGVmaW5pdGlvbiByYXRoZXIgdGhhbiBlYWNo
IGNvbnN0cnVjdG9yLgorICAgICAgICAtIFVzZSBSZWYvUmVmUHRyIGluc3RlYWQgb2YgUGFzc1Jl
ZlB0ci4KKworICAgICAgICAqIGh0bWwvcGFyc2VyL0hUTUxEb2N1bWVudFBhcnNlci5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpIVE1MRG9jdW1lbnRQYXJzZXI6OkhUTUxEb2N1bWVudFBhcnNlcik6
IFBhc3MgcmVmZXJlbmNlIHJhdGhlciB0aGFuIHBvaW50ZXIgdG8KKyAgICAgICAgdGhlIGNvbnRl
eHQgZWxlbWVudC4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxEb2N1bWVudFBhcnNlcjo6ZGV0YWNo
KTogUmVtb3ZlZCBjYWxsIHRvIEhUTUxUcmVlQnVpbGRlcjo6ZGV0YWNoLiBUaGlzIHdvcmsKKyAg
ICAgICAgaXMgaW5zdGVhZCBkb25lIHdoZW4gdGhlIHRyZWUgYnVpbGRlciBpcyBkZXN0cm95ZWQu
CisgICAgICAgIChXZWJDb3JlOjpIVE1MRG9jdW1lbnRQYXJzZXI6OmNvbnN0cnVjdFRyZWVGcm9t
SFRNTFRva2VuKTogUGFzcyByZWZlcmVuY2UgcmF0aGVyIHRoYW4gcG9pbnRlci4KKworICAgICAg
ICAqIGh0bWwvcGFyc2VyL0hUTUxUcmVlQnVpbGRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjp1
bmluaXRpYWxpemVkUG9zaXRpb25WYWx1ZTEpOiBNYXJrZWQgdGhpcyBpbmxpbmUgYmVjYXVzZSBp
dCdzIHRyaXZpYWwuIEl0IHdhcworICAgICAgICBwcm9iYWJseSBnZXR0aW5nIGlubGluZWQgYWxy
ZWFkeS4KKyAgICAgICAgKFdlYkNvcmU6OmlzQ2FwdGlvbkNvbE9yQ29sZ3JvdXBUYWcpOiBGb3Jt
YXQgb24gYSBzaW5nbGUgbGluZS4KKyAgICAgICAgKFdlYkNvcmU6OmlzVGFibGVCb2R5Q29udGV4
dFRhZyk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6aXNOb25BbmNob3JGb3JtYXR0aW5nVGFn
KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpIVE1MVHJlZUJ1aWxkZXI6OkV4dGVybmFsQ2hh
cmFjdGVyVG9rZW5CdWZmZXI6OkV4dGVybmFsQ2hhcmFjdGVyVG9rZW5CdWZmZXIpOgorICAgICAg
ICBUYWtlIHJlZmVyZW5jZSBpbnN0ZWFkIG9mIHBvaW50ZXIuCisgICAgICAgIChXZWJDb3JlOjpI
VE1MVHJlZUJ1aWxkZXI6OkV4dGVybmFsQ2hhcmFjdGVyVG9rZW5CdWZmZXI6OnRha2VSZW1haW5p
bmcpOiBVc2UgbWFrZVN0cmluZyBoZWxwZXIuCisgICAgICAgIChXZWJDb3JlOjpIVE1MVHJlZUJ1
aWxkZXI6OkV4dGVybmFsQ2hhcmFjdGVyVG9rZW5CdWZmZXI6OnNraXBMZWFkaW5nKTogVHdlYWsg
Zm9ybWF0dGluZy4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxUcmVlQnVpbGRlcjo6RXh0ZXJuYWxD
aGFyYWN0ZXJUb2tlbkJ1ZmZlcjo6dGFrZUxlYWRpbmcpOiBCb3RoIG9mIHRoZSBhYm92ZS4KKyAg
ICAgICAgKFdlYkNvcmU6OkhUTUxUcmVlQnVpbGRlcjo6RXh0ZXJuYWxDaGFyYWN0ZXJUb2tlbkJ1
ZmZlcjo6bWFrZVN0cmluZyk6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6SFRNTFRyZWVCdWls
ZGVyOjppc1BhcnNpbmdUZW1wbGF0ZUNvbnRlbnRzKTogTW92ZWQgdGhlIGJvZHkgb2YgdGhpcyBm
dW5jdGlvbiBoZXJlLAorICAgICAgICBzaW5jZSBpdCdzIG9ubHkgdXNlZCBpbnNpZGUgdGhlIGNs
YXNzLgorICAgICAgICAoV2ViQ29yZTo6SFRNTFRyZWVCdWlsZGVyOjppc1BhcnNpbmdGcmFnbWVu
dE9yVGVtcGxhdGVDb250ZW50cyk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6SFRNTFRyZWVC
dWlsZGVyOjpIVE1MVHJlZUJ1aWxkZXIpOiBHZXQgcmlkIG9mIGRlYWQgY29kZSB0aGF0IGhhbmRs
ZXMgYSBudWxsIGNvbnRleHQKKyAgICAgICAgZWxlbWVudC4gVGhlIEZJWE1FIG1lbnRpb25zIGEg
YnVnIHRoYXQgaXMgb2Jzb2xldGUuIEFsc28gcmVvcmRlciB0aGUgZGF0YSBtZW1iZXJzIHRvIGJl
IGEgYml0CisgICAgICAgIG1vcmUgbG9naWNhbCBhbmQgc2V0IHRoZSBuZXcgbV9kZXN0cnVjdGlv
blByb2hpYml0ZWQgdG8gZmFsc2UgYXQgdGhlIGVuZCBvZiB0aGUgY29uc3RydWN0b3IsCisgICAg
ICAgIHRvIGNoZWNrIGlmIHdlIGFjY2lkZW50YWxseSBkZXN0cm95IHRoZSB0cmVlIGJ1aWxkZXIg
d2hpbGUgY29uc3RydWN0aW5nIGl0LgorICAgICAgICAoV2ViQ29yZTo6SFRNTFRyZWVCdWlsZGVy
OjpGcmFnbWVudFBhcnNpbmdDb250ZXh0OjpGcmFnbWVudFBhcnNpbmdDb250ZXh0KTogVXBkYXRl
ZCB0byB0YWtlCisgICAgICAgIGEgcmVmZXJlbmNlIGFuZCB0byBsZXQgbV9mcmFnbWVudCBnZXQg
aW5pdGlhbGl6ZWQgaW4gdGhlIGNsYXNzIGRlZmluaXRpb24uCisgICAgICAgIChXZWJDb3JlOjpI
VE1MVHJlZUJ1aWxkZXI6OkZyYWdtZW50UGFyc2luZ0NvbnRleHQ6OmZyYWdtZW50KTogTW92ZWQg
dGhpcyBoZXJlIHNpbmNlIGl0J3Mgb25seQorICAgICAgICB1c2VkIGluc2lkZSB0aGUgY2xhc3Mu
CisgICAgICAgIChXZWJDb3JlOjpIVE1MVHJlZUJ1aWxkZXI6OkZyYWdtZW50UGFyc2luZ0NvbnRl
eHQ6OmNvbnRleHRFbGVtZW50KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpIVE1MVHJlZUJ1
aWxkZXI6OkZyYWdtZW50UGFyc2luZ0NvbnRleHQ6OmNvbnRleHRFbGVtZW50U3RhY2tJdGVtKTog
RGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpIVE1MVHJlZUJ1aWxkZXI6OnRha2VTY3JpcHRUb1By
b2Nlc3MpOiBDaGFuZ2VkIHJldHVybiB0eXBlIHRvIFJlZlB0ciBpbnN0ZWFkIG9mCisgICAgICAg
IFBhc3NSZWZQdHIuIEFkZGVkIGNvZGUgdG8gaGFuZGxlIG1fc2NyaXB0VG9Qcm9jZXNzIG9mIG51
bGwsIHNpbmNlIHJlYWRpbmcgdGhlIGNvZGUgYXQgdGhlCisgICAgICAgIHNpbmdsZSBjYWxsIHNp
dGUgbWFrZXMgaXQgY2xlYXIgdGhhdCBpdCdzIG5vdCBndWFyYW50ZWVkIHRvIGJlIG5vbi1udWxs
ISBBZGRlZCBkZXN0cnVjdGlvbi0KKyAgICAgICAgcmVsYXRlZCBhc3NlcnRpb25zIHNpbmNlIHRo
aXMgaXMgYSBwdWJsaWMgZnVuY3Rpb24uCisgICAgICAgIChXZWJDb3JlOjpIVE1MVHJlZUJ1aWxk
ZXI6OmNvbnN0cnVjdFRyZWUpOiBVcGRhdGVkIGZvciByZWZlcmVuY2UgcmF0aGVyIHRoYW4gcG9p
bnRlci4gQWxzbworICAgICAgICBhZGRlZCBkZXN0cnVjdGlvbi1yZWxhdGVkIGFzc2VydGlvbnMg
c2luY2UgdGhpcyBpcyBhIHB1YmxpYyBmdW5jdGlvbi4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxU
cmVlQnVpbGRlcjo6cHJvY2Vzc1Rva2VuKTogVXBkYXRlZCB0byB0YWtlIGEgcmVmZXJlbmNlLgor
ICAgICAgICAoV2ViQ29yZTo6SFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNzRG9jdHlwZVRva2VuKTog
RGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpIVE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NGYWtlU3Rh
cnRUYWcpOiBEaXR0by4gQWxzbyB0YWtlIGFuIHJ2YWx1ZSByZWZlcmVuY2UgZm9yCisgICAgICAg
IHRoZSB2ZWN0b3Igb2YgYXR0cmlidXRlcyB0aGF0IHdlIHdpbGwgcHV0IGludG8gdGhlIHRva2Vu
LgorICAgICAgICAoV2ViQ29yZTo6SFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNzRmFrZUVuZFRhZyk6
IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6SFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNzRmFrZVBF
bmRUYWdJZlBJbkJ1dHRvblNjb3BlKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpIVE1MVHJl
ZUJ1aWxkZXI6OmF0dHJpYnV0ZXNGb3JJc2luZGV4SW5wdXQpOiBEaXR0by4KKyAgICAgICAgKFdl
YkNvcmU6OkhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc0lzaW5kZXhTdGFydFRhZ0ZvckluQm9keSk6
IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6aXNMaSk6IERpdHRvLgorICAgICAgICAoV2ViQ29y
ZTo6aXNEZE9yRHQpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxUcmVlQnVpbGRlcjo6
cHJvY2Vzc0Nsb3NlV2hlbk5lc3RlZFRhZyk6IENoYW5nZWQgbG9vcCB0byB1c2UgcmVmZXJlbmNl
CisgICAgICAgIHJhdGhlciB0aGFuIHBvaW50ZXIgZm9yIG5ldmVyLW51bGwgc3RhY2tJdGVtLiBB
bHNvIHVzZSBhdXRvIGFuZCBhIGZvciBsb29wIHRvIG1ha2UgdGhlCisgICAgICAgIGxvb3AgZWFz
aWVyIHRvIHJlYWQuCisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVDYXNlTWFwKTogVHdlYWtlZCBm
b3JtYXR0aW5nLgorICAgICAgICAoV2ViQ29yZTo6YWRqdXN0QXR0cmlidXRlcyk6IERpdHRvLgor
ICAgICAgICAoV2ViQ29yZTo6SFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNzU3RhcnRUYWdGb3JJbkJv
ZHkpOiBVc2UgcmVmZXJlbmNlIGluc3RlYWQgb2YgcG9pbnRlci4KKyAgICAgICAgU2V0IGluc2Vy
dGlvbiBtb2RlIGRpcmVjdGx5IGluc3RlYWQgb2YgdXNpbmcgYSBzZXRJbnNlcnRpb25Nb2RlIGZ1
bmN0aW9uLgorICAgICAgICAoV2ViQ29yZTo6SFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNzVGVtcGxh
dGVTdGFydFRhZyk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6SFRNTFRyZWVCdWlsZGVyOjpw
cm9jZXNzVGVtcGxhdGVFbmRUYWcpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxUcmVl
QnVpbGRlcjo6cHJvY2Vzc0VuZE9mRmlsZUZvckluVGVtcGxhdGVDb250ZW50cyk6IERpdHRvLgor
ICAgICAgICAoV2ViQ29yZTo6SFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNzQ29sZ3JvdXBFbmRUYWdG
b3JJbkNvbHVtbkdyb3VwKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpIVE1MVHJlZUJ1aWxk
ZXI6OmNsb3NlVGhlQ2VsbCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6SFRNTFRyZWVCdWls
ZGVyOjpwcm9jZXNzU3RhcnRUYWdGb3JJblRhYmxlKTogRGl0dG8uCisgICAgICAgIChXZWJDb3Jl
OjpIVE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NTdGFydFRhZyk6IERpdHRvLiBUd2Vha2VkIGFzc2Vy
dGlvbnMsIHNvIHRoYXQgd2UKKyAgICAgICAgYXNzZXJ0IHdoYXQgc3RhdGUgd2UgYXJlIGluIGJl
Zm9yZSB3ZSBmYWxsIHRocm91Z2ggdG8gZWFjaCBjYXNlLCByYXRoZXIgdGhhbiBhc3NlcnRpbmcK
KyAgICAgICAgaW5zaWRlIGVhY2ggY2FzZS4gVGhlIHBlci1jYXNlIGFzc2VydGlvbnMgd2VyZSBz
b3J0IG9mIGV4Y2Vzc2l2ZSBhbmQgcmVwZXRpdGl2ZSBhbmQKKyAgICAgICAgZXZlbiBhIGJpdCBo
YXJkIHRvIHVuZGVyc3RhbmQuCisgICAgICAgIChXZWJDb3JlOjpIVE1MVHJlZUJ1aWxkZXI6OnBy
b2Nlc3NIdG1sU3RhcnRUYWdGb3JJbkJvZHkpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkhU
TUxUcmVlQnVpbGRlcjo6cHJvY2Vzc0JvZHlFbmRUYWdGb3JJbkJvZHkpOiBEaXR0by4KKyAgICAg
ICAgKFdlYkNvcmU6OkhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc0FueU90aGVyRW5kVGFnRm9ySW5C
b2R5KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpIVE1MVHJlZUJ1aWxkZXI6OmNhbGxUaGVB
ZG9wdGlvbkFnZW5jeSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6SFRNTFRyZWVCdWlsZGVy
OjpyZXNldEluc2VydGlvbk1vZGVBcHByb3ByaWF0ZWx5KTogRGl0dG8uCisgICAgICAgIChXZWJD
b3JlOjpIVE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NFbmRUYWdGb3JJblRhYmxlQm9keSk6IERpdHRv
LgorICAgICAgICAoV2ViQ29yZTo6SFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNzRW5kVGFnRm9ySW5S
b3cpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc0Vu
ZFRhZ0ZvckluQ2VsbCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6SFRNTFRyZWVCdWlsZGVy
Ojpwcm9jZXNzRW5kVGFnRm9ySW5Cb2R5KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpIVE1M
VHJlZUJ1aWxkZXI6OnByb2Nlc3NDYXB0aW9uRW5kVGFnRm9ySW5DYXB0aW9uKTogRGl0dG8uCisg
ICAgICAgIChXZWJDb3JlOjpIVE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NUckVuZFRhZ0ZvckluUm93
KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpIVE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NUYWJs
ZUVuZFRhZ0ZvckluVGFibGUpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxUcmVlQnVp
bGRlcjo6cHJvY2Vzc0VuZFRhZ0ZvckluVGFibGUpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6
OkhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc0VuZFRhZyk6IERpdHRvLgorICAgICAgICAoV2ViQ29y
ZTo6SFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNzQ29tbWVudCk6IERpdHRvLgorICAgICAgICAoV2Vi
Q29yZTo6SFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNzQ2hhcmFjdGVyKTogRGl0dG8uCisgICAgICAg
IChXZWJDb3JlOjpIVE1MVHJlZUJ1aWxkZXI6Omluc2VydFBob25lTnVtYmVyTGluayk6IERpdHRv
LgorICAgICAgICAoV2ViQ29yZTo6SFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNzQ2hhcmFjdGVyQnVm
ZmVyKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpIVE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3ND
aGFyYWN0ZXJCdWZmZXJGb3JJbkJvZHkpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxU
cmVlQnVpbGRlcjo6cHJvY2Vzc0VuZE9mRmlsZSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6
SFRNTFRyZWVCdWlsZGVyOjpkZWZhdWx0Rm9ySW5pdGlhbCk6IERpdHRvLgorICAgICAgICAoV2Vi
Q29yZTo6SFRNTFRyZWVCdWlsZGVyOjpkZWZhdWx0Rm9yQmVmb3JlSFRNTCk6IERpdHRvLgorICAg
ICAgICAoV2ViQ29yZTo6SFRNTFRyZWVCdWlsZGVyOjpkZWZhdWx0Rm9yQmVmb3JlSGVhZCk6IERp
dHRvLgorICAgICAgICAoV2ViQ29yZTo6SFRNTFRyZWVCdWlsZGVyOjpkZWZhdWx0Rm9ySW5IZWFk
KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpIVE1MVHJlZUJ1aWxkZXI6OmRlZmF1bHRGb3JJ
bkhlYWROb3NjcmlwdCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6SFRNTFRyZWVCdWlsZGVy
OjpkZWZhdWx0Rm9yQWZ0ZXJIZWFkKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpIVE1MVHJl
ZUJ1aWxkZXI6OmRlZmF1bHRGb3JJblRhYmxlVGV4dCk6IERpdHRvLgorICAgICAgICAoV2ViQ29y
ZTo6SFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNzU3RhcnRUYWdGb3JJbkhlYWQpOiBEaXR0by4KKyAg
ICAgICAgKFdlYkNvcmU6OkhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc0dlbmVyaWNSQ0RBVEFTdGFy
dFRhZyk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6SFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNz
R2VuZXJpY1Jhd1RleHRTdGFydFRhZyk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6SFRNTFRy
ZWVCdWlsZGVyOjpwcm9jZXNzU2NyaXB0U3RhcnRUYWcpOiBEaXR0by4KKyAgICAgICAgKFdlYkNv
cmU6OkhUTUxUcmVlQnVpbGRlcjo6YWRqdXN0ZWRDdXJyZW50U3RhY2tJdGVtKTogTWFkZSB0aGlz
IHJldHVybiBhIHJlZmVyZW5jZS4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxUcmVlQnVpbGRlcjo6
c2hvdWxkUHJvY2Vzc1Rva2VuSW5Gb3JlaWduQ29udGVudCk6IE1vcmUgb2YgdGhlIHNhbWUuCisg
ICAgICAgIChXZWJDb3JlOjpIVE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NUb2tlbkluRm9yZWlnbkNv
bnRlbnQpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxUcmVlQnVpbGRlcjo6ZmluaXNo
ZWQpOiBDaGFuZ2VkIG1faXNBdHRhY2hlZCBhc3NlcnRpb24gdG8gIW1fZGVzdHJveWVkLgorICAg
ICAgICBBbHNvIHVwZGF0ZWQgdGhlIGNvbW1lbnQuCisgICAgICAgIChXZWJDb3JlOjpIVE1MVHJl
ZUJ1aWxkZXI6OnBhcnNlRXJyb3IpOiBNYXJrZWQgdGhpcyBlbXB0eSBmdW5jdGlvbiBpbmxpbmUu
CisKKyAgICAgICAgKiBodG1sL3BhcnNlci9IVE1MVHJlZUJ1aWxkZXIuaDogUmVtb3ZlZCBtb3N0
IGluY2x1ZGVzIGFuZCBmb3J3YXJkIGRlY2xhcmF0aW9ucy4KKyAgICAgICAgQ2hhbmdlZCB0aGUg
cGhvbmUgbnVtYmVyIGZ1bmN0aW9ucyBjb25kaXRpb25hbCB0byBiZSBjb3JyZWN0LiBSZW1vdmVk
IGEgbm9uLWhlbHBmdWwKKyAgICAgICAgRklYTUUgYWJvdXQgYXNzZXJ0aW9ucyB3ZSByZWFsbHkg
ZG9uJ3QgbmVlZC4gUmVtb3ZlZCB1bm5lZWRlZCB1c2Ugb2YgdGhlIGlubGluZSBrZXl3b3JkLAor
ICAgICAgICBjaGFuZ2VkIHR5cGVzIHRvIHJlZmVyZW5jZXMgcmF0aGVyIHRoYW4gcG9pbnRlci4g
UmVtb3ZlZCB1bm5lZWRlZCBwdWJsaWMgaW5zZXJ0aW9uTW9kZQorICAgICAgICBhbmQgc2V0SW5z
ZXJ0aW9uTW9kZSBmdW5jdGlvbnMuIEJvdGggYXJlIHRoaW5ncyB0aGF0IGFyZSBvbmx5IGRvbmUg
aW5zaWRlIHRoaXMgY2xhc3MgYW5kCisgICAgICAgIG1faW5zZXJ0aW9uTW9kZSBjYW4gYmUgYWNj
ZXNzZWQgZGlyZWN0bHkgaW5zdGVhZC4gQWRkZWQgYSBkZXN0cnVjdG9yIHRoYXQgaW1wbGVtZW50
cworICAgICAgICB0aGUgZGVzdHJ1Y3Rpb24gYXNzZXJ0aW9ucy4gQXNzZXJ0ZWQgIW1fZGVzdHJv
eWVkIGF0IHRoZSBzdGFydCBvZiBhbGwgdGhlIHB1YmxpYyBmdW5jdGlvbnMuCisKKyAgICAgICAg
KiBodG1sL3BhcnNlci9UZXh0RG9jdW1lbnRQYXJzZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
VGV4dERvY3VtZW50UGFyc2VyOjppbnNlcnRGYWtlUHJlRWxlbWVudCk6IFVzZSByZWZlcmVuY2Ug
cmF0aGVyIHRoYW4gcG9pbnRlci4KKworMjAxNS0wMS0wMSAgRGFyaW4gQWRsZXIgIDxkYXJpbkBh
cHBsZS5jb20+CisKICAgICAgICAgRml4IGl0ZWFyYXRvciB0eXBvCiAgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDAwMjcKIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTERvY3VtZW50UGFyc2VyLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxEb2N1bWVudFBhcnNlci5jcHAKaW5kZXggZTBmYjVmY2Fi
NTc4OTMwNDRlYmNhM2MyNmQ0NGNmMzI2YmZmZTdjYy4uMjBjZmY1YzBmZDdlYTg5MTE1YTA2Y2Y0
OTQ4NTZiODQ1NTU3ZWZkZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIv
SFRNTERvY3VtZW50UGFyc2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9I
VE1MRG9jdW1lbnRQYXJzZXIuY3BwCkBAIC05Miw3ICs5Miw3IEBAIEhUTUxEb2N1bWVudFBhcnNl
cjo6SFRNTERvY3VtZW50UGFyc2VyKERvY3VtZW50RnJhZ21lbnQmIGZyYWdtZW50LCBFbGVtZW50
KiBjb250CiAgICAgLCBtX29wdGlvbnMoZnJhZ21lbnQuZG9jdW1lbnQoKSkKICAgICAsIG1fdG9r
ZW4oc3RkOjptYWtlX3VuaXF1ZTxIVE1MVG9rZW4+KCkpCiAgICAgLCBtX3Rva2VuaXplcihzdGQ6
Om1ha2VfdW5pcXVlPEhUTUxUb2tlbml6ZXI+KG1fb3B0aW9ucykpCi0gICAgLCBtX3RyZWVCdWls
ZGVyKHN0ZDo6bWFrZV91bmlxdWU8SFRNTFRyZWVCdWlsZGVyPigqdGhpcywgZnJhZ21lbnQsIGNv
bnRleHRFbGVtZW50LCB0aGlzLT5wYXJzZXJDb250ZW50UG9saWN5KCksIG1fb3B0aW9ucykpCisg
ICAgLCBtX3RyZWVCdWlsZGVyKHN0ZDo6bWFrZV91bmlxdWU8SFRNTFRyZWVCdWlsZGVyPigqdGhp
cywgZnJhZ21lbnQsICpjb250ZXh0RWxlbWVudCwgdGhpcy0+cGFyc2VyQ29udGVudFBvbGljeSgp
LCBtX29wdGlvbnMpKQogICAgICwgbV94c3NBdWRpdG9yRGVsZWdhdGUoZnJhZ21lbnQuZG9jdW1l
bnQoKSkKICAgICAsIG1fZW5kV2FzRGVsYXllZChmYWxzZSkKICAgICAsIG1faGF2ZUJhY2tncm91
bmRQYXJzZXIoZmFsc2UpCkBAIC0xMTgsNyArMTE4LDYgQEAgdm9pZCBIVE1MRG9jdW1lbnRQYXJz
ZXI6OmRldGFjaCgpCiAKICAgICBpZiAobV9zY3JpcHRSdW5uZXIpCiAgICAgICAgIG1fc2NyaXB0
UnVubmVyLT5kZXRhY2goKTsKLSAgICBtX3RyZWVCdWlsZGVyLT5kZXRhY2goKTsKICAgICAvLyBG
SVhNRTogSXQgc2VlbXMgd3JvbmcgdGhhdCB3ZSB3b3VsZCBoYXZlIGEgcHJlbG9hZCBzY2FubmVy
IGhlcmUuCiAgICAgLy8gWWV0IGR1cmluZyBmYXN0L2RvbS9IVE1MU2NyaXB0RWxlbWVudC9zY3Jp
cHQtbG9hZC1ldmVudHMuaHRtbCB3ZSBkby4KICAgICBtX3ByZWxvYWRTY2FubmVyID0gbnVsbHB0
cjsKQEAgLTM0OSw3ICszNDgsNyBAQCB2b2lkIEhUTUxEb2N1bWVudFBhcnNlcjo6Y29uc3RydWN0
VHJlZUZyb21IVE1MVG9rZW4oSFRNTFRva2VuJiByYXdUb2tlbikKICAgICBpZiAocmF3VG9rZW4u
dHlwZSgpICE9IEhUTUxUb2tlbjo6Q2hhcmFjdGVyKQogICAgICAgICByYXdUb2tlbi5jbGVhcigp
OwogCi0gICAgbV90cmVlQnVpbGRlci0+Y29uc3RydWN0VHJlZSgmdG9rZW4pOworICAgIG1fdHJl
ZUJ1aWxkZXItPmNvbnN0cnVjdFRyZWUodG9rZW4pOwogCiAgICAgaWYgKCFyYXdUb2tlbi5pc1Vu
aW5pdGlhbGl6ZWQoKSkgewogICAgICAgICBBU1NFUlQocmF3VG9rZW4udHlwZSgpID09IEhUTUxU
b2tlbjo6Q2hhcmFjdGVyKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2Vy
L0hUTUxUcmVlQnVpbGRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MVHJl
ZUJ1aWxkZXIuY3BwCmluZGV4IDE5NTg4YWU3Y2IxMGQ1MjU5ZWE3ZTcxOWQ5YzI3ZjA1ZWYzMGE1
ZDUuLmVlZDY0NjFlYjgxNDMzMjc5MDg2OGFkZTUxOGQ0ZmVmMzE0MmQ5N2IgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxUcmVlQnVpbGRlci5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFRyZWVCdWlsZGVyLmNwcApAQCAtMSw2ICsxLDYg
QEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlLCBJbmMuIEFsbCBSaWdodHMgUmVz
ZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDExLCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzAsMjMgKzMwLDE4
IEBACiAjaW5jbHVkZSAiRG9jdW1lbnRGcmFnbWVudC5oIgogI2luY2x1ZGUgIkhUTUxEb2N1bWVu
dC5oIgogI2luY2x1ZGUgIkhUTUxEb2N1bWVudFBhcnNlci5oIgotI2luY2x1ZGUgIkhUTUxGb3Jt
Q29udHJvbEVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MRm9ybUVsZW1lbnQuaCIKICNpbmNsdWRl
ICJIVE1MT3B0R3JvdXBFbGVtZW50LmgiCi0jaW5jbHVkZSAiSFRNTE9wdGlvbkVsZW1lbnQuaCIK
ICNpbmNsdWRlICJIVE1MUGFyc2VySWRpb21zLmgiCi0jaW5jbHVkZSAiSFRNTFRhYmxlRWxlbWVu
dC5oIgotI2luY2x1ZGUgIkhUTUxUZW1wbGF0ZUVsZW1lbnQuaCIKICNpbmNsdWRlICJMb2NhbGl6
ZWRTdHJpbmdzLmgiCiAjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKICNpbmNsdWRlICJYTGlu
a05hbWVzLmgiCiAjaW5jbHVkZSAiWE1MTlNOYW1lcy5oIgogI2luY2x1ZGUgIlhNTE5hbWVzLmgi
Ci0jaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KICNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95
ZWQuaD4KICNpbmNsdWRlIDx3dGYvdW5pY29kZS9DaGFyYWN0ZXJOYW1lcy5oPgogCi0jaWYgRU5B
QkxFKFRFTEVQSE9ORV9OVU1CRVJfREVURUNUSU9OKQorI2lmIEVOQUJMRShURUxFUEhPTkVfTlVN
QkVSX0RFVEVDVElPTikgJiYgUExBVEZPUk0oSU9TKQogI2luY2x1ZGUgIlRlbGVwaG9uZU51bWJl
ckRldGVjdG9yLmgiCiAjZW5kaWYKIApAQCAtNjMsNyArNTgsNyBAQCBpbmxpbmUgYm9vbCBpc0hU
TUxTcGFjZU9yUmVwbGFjZW1lbnRDaGFyYWN0ZXIoVUNoYXIgY2hhcmFjdGVyKQogCiB9CiAKLXN0
YXRpYyBUZXh0UG9zaXRpb24gdW5pbml0aWFsaXplZFBvc2l0aW9uVmFsdWUxKCkKK3N0YXRpYyBp
bmxpbmUgVGV4dFBvc2l0aW9uIHVuaW5pdGlhbGl6ZWRQb3NpdGlvblZhbHVlMSgpCiB7CiAgICAg
cmV0dXJuIFRleHRQb3NpdGlvbihPcmRpbmFsTnVtYmVyOjpmcm9tT25lQmFzZWRJbnQoLTEpLCBP
cmRpbmFsTnVtYmVyOjpmaXJzdCgpKTsKIH0KQEAgLTkwLDkgKzg1LDcgQEAgc3RhdGljIGJvb2wg
aXNOdW1iZXJlZEhlYWRlclRhZyhjb25zdCBBdG9taWNTdHJpbmcmIHRhZ05hbWUpCiAKIHN0YXRp
YyBib29sIGlzQ2FwdGlvbkNvbE9yQ29sZ3JvdXBUYWcoY29uc3QgQXRvbWljU3RyaW5nJiB0YWdO
YW1lKQogewotICAgIHJldHVybiB0YWdOYW1lID09IGNhcHRpb25UYWcKLSAgICAgICAgfHwgdGFn
TmFtZSA9PSBjb2xUYWcKLSAgICAgICAgfHwgdGFnTmFtZSA9PSBjb2xncm91cFRhZzsKKyAgICBy
ZXR1cm4gdGFnTmFtZSA9PSBjYXB0aW9uVGFnIHx8IHRhZ05hbWUgPT0gY29sVGFnIHx8IHRhZ05h
bWUgPT0gY29sZ3JvdXBUYWc7CiB9CiAKIHN0YXRpYyBib29sIGlzVGFibGVDZWxsQ29udGV4dFRh
Zyhjb25zdCBBdG9taWNTdHJpbmcmIHRhZ05hbWUpCkBAIC0xMDIsOSArOTUsNyBAQCBzdGF0aWMg
Ym9vbCBpc1RhYmxlQ2VsbENvbnRleHRUYWcoY29uc3QgQXRvbWljU3RyaW5nJiB0YWdOYW1lKQog
CiBzdGF0aWMgYm9vbCBpc1RhYmxlQm9keUNvbnRleHRUYWcoY29uc3QgQXRvbWljU3RyaW5nJiB0
YWdOYW1lKQogewotICAgIHJldHVybiB0YWdOYW1lID09IHRib2R5VGFnCi0gICAgICAgIHx8IHRh
Z05hbWUgPT0gdGZvb3RUYWcKLSAgICAgICAgfHwgdGFnTmFtZSA9PSB0aGVhZFRhZzsKKyAgICBy
ZXR1cm4gdGFnTmFtZSA9PSB0Ym9keVRhZyB8fCB0YWdOYW1lID09IHRmb290VGFnIHx8IHRhZ05h
bWUgPT0gdGhlYWRUYWc7CiB9CiAKIHN0YXRpYyBib29sIGlzTm9uQW5jaG9yTm9uTm9ickZvcm1h
dHRpbmdUYWcoY29uc3QgQXRvbWljU3RyaW5nJiB0YWdOYW1lKQpAQCAtMTI1LDI5ICsxMTYsMjcg
QEAgc3RhdGljIGJvb2wgaXNOb25BbmNob3JOb25Ob2JyRm9ybWF0dGluZ1RhZyhjb25zdCBBdG9t
aWNTdHJpbmcmIHRhZ05hbWUpCiAKIHN0YXRpYyBib29sIGlzTm9uQW5jaG9yRm9ybWF0dGluZ1Rh
Zyhjb25zdCBBdG9taWNTdHJpbmcmIHRhZ05hbWUpCiB7Ci0gICAgcmV0dXJuIHRhZ05hbWUgPT0g
bm9iclRhZwotICAgICAgICB8fCBpc05vbkFuY2hvck5vbk5vYnJGb3JtYXR0aW5nVGFnKHRhZ05h
bWUpOworICAgIHJldHVybiB0YWdOYW1lID09IG5vYnJUYWcgfHwgaXNOb25BbmNob3JOb25Ob2Jy
Rm9ybWF0dGluZ1RhZyh0YWdOYW1lKTsKIH0KIAotLy8gaHR0cDovL3d3dy53aGF0d2cub3JnL3Nw
ZWNzL3dlYi1hcHBzL2N1cnJlbnQtd29yay9tdWx0aXBhZ2UvcGFyc2luZy5odG1sI2Zvcm1hdHRp
bmcKKy8vIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL3N5bnRheC5odG1s
I2Zvcm1hdHRpbmcKIHN0YXRpYyBib29sIGlzRm9ybWF0dGluZ1RhZyhjb25zdCBBdG9taWNTdHJp
bmcmIHRhZ05hbWUpCiB7CiAgICAgcmV0dXJuIHRhZ05hbWUgPT0gYVRhZyB8fCBpc05vbkFuY2hv
ckZvcm1hdHRpbmdUYWcodGFnTmFtZSk7CiB9CiAKIGNsYXNzIEhUTUxUcmVlQnVpbGRlcjo6RXh0
ZXJuYWxDaGFyYWN0ZXJUb2tlbkJ1ZmZlciB7Ci0gICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoRXh0
ZXJuYWxDaGFyYWN0ZXJUb2tlbkJ1ZmZlcik7CiBwdWJsaWM6Ci0gICAgZXhwbGljaXQgRXh0ZXJu
YWxDaGFyYWN0ZXJUb2tlbkJ1ZmZlcihBdG9taWNIVE1MVG9rZW4qIHRva2VuKQotICAgICAgICA6
IG1fdGV4dCh0b2tlbi0+Y2hhcmFjdGVycygpLCB0b2tlbi0+Y2hhcmFjdGVyc0xlbmd0aCgpKQot
ICAgICAgICAsIG1faXNBbGw4Qml0RGF0YSh0b2tlbi0+aXNBbGw4Qml0RGF0YSgpKQorICAgIGV4
cGxpY2l0IEV4dGVybmFsQ2hhcmFjdGVyVG9rZW5CdWZmZXIoQXRvbWljSFRNTFRva2VuJiB0b2tl
bikKKyAgICAgICAgOiBtX3RleHQodG9rZW4uY2hhcmFjdGVycygpLCB0b2tlbi5jaGFyYWN0ZXJz
TGVuZ3RoKCkpCisgICAgICAgICwgbV9pc0FsbDhCaXREYXRhKHRva2VuLmlzQWxsOEJpdERhdGEo
KSkKICAgICB7CiAgICAgICAgIEFTU0VSVCghaXNFbXB0eSgpKTsKICAgICB9CiAKICAgICBleHBs
aWNpdCBFeHRlcm5hbENoYXJhY3RlclRva2VuQnVmZmVyKGNvbnN0IFN0cmluZyYgc3RyaW5nKQog
ICAgICAgICA6IG1fdGV4dChzdHJpbmcpCi0gICAgICAgICwgbV9pc0FsbDhCaXREYXRhKG1fdGV4
dC5sZW5ndGgoKSAmJiBtX3RleHQuaXM4Qml0KCkpCisgICAgICAgICwgbV9pc0FsbDhCaXREYXRh
KG1fdGV4dC5pczhCaXQoKSkKICAgICB7CiAgICAgICAgIEFTU0VSVCghaXNFbXB0eSgpKTsKICAg
ICB9CkBAIC0xODUsMTEgKzE3NCw3IEBAIHB1YmxpYzoKIAogICAgIFN0cmluZyB0YWtlUmVtYWlu
aW5nKCkKICAgICB7Ci0gICAgICAgIFN0cmluZyByZXN1bHQ7Ci0gICAgICAgIGlmIChtX3RleHQu
aXM4Qml0KCkgfHwgIWlzQWxsOEJpdERhdGEoKSkKLSAgICAgICAgICAgIHJlc3VsdCA9IG1fdGV4
dC50b1N0cmluZygpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICByZXN1bHQgPSBTdHJpbmc6
Om1ha2U4Qml0RnJvbTE2Qml0U291cmNlKG1fdGV4dC5jaGFyYWN0ZXJzMTYoKSwgbV90ZXh0Lmxl
bmd0aCgpKTsKKyAgICAgICAgU3RyaW5nIHJlc3VsdCA9IG1ha2VTdHJpbmcobV90ZXh0KTsKICAg
ICAgICAgbV90ZXh0ID0gU3RyaW5nVmlldygpOwogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAg
IH0KQEAgLTIyMSw4ICsyMDYsNyBAQCBwdWJsaWM6CiAgICAgfQogCiBwcml2YXRlOgotICAgIHRl
bXBsYXRlPGJvb2wgY2hhcmFjdGVyUHJlZGljYXRlKFVDaGFyKT4KLSAgICB2b2lkIHNraXBMZWFk
aW5nKCkKKyAgICB0ZW1wbGF0ZTxib29sIGNoYXJhY3RlclByZWRpY2F0ZShVQ2hhcik+IHZvaWQg
c2tpcExlYWRpbmcoKQogICAgIHsKICAgICAgICAgQVNTRVJUKCFpc0VtcHR5KCkpOwogICAgICAg
ICB3aGlsZSAoY2hhcmFjdGVyUHJlZGljYXRlKG1fdGV4dFswXSkpIHsKQEAgLTIzMiwxMjIgKzIx
NiwxMjQgQEAgcHJpdmF0ZToKICAgICAgICAgfQogICAgIH0KIAotICAgIHRlbXBsYXRlPGJvb2wg
Y2hhcmFjdGVyUHJlZGljYXRlKFVDaGFyKT4KLSAgICBTdHJpbmcgdGFrZUxlYWRpbmcoKQorICAg
IHRlbXBsYXRlPGJvb2wgY2hhcmFjdGVyUHJlZGljYXRlKFVDaGFyKT4gU3RyaW5nIHRha2VMZWFk
aW5nKCkKICAgICB7CiAgICAgICAgIEFTU0VSVCghaXNFbXB0eSgpKTsKICAgICAgICAgU3RyaW5n
VmlldyBzdGFydCA9IG1fdGV4dDsKICAgICAgICAgc2tpcExlYWRpbmc8Y2hhcmFjdGVyUHJlZGlj
YXRlPigpOwogICAgICAgICBpZiAoc3RhcnQubGVuZ3RoKCkgPT0gbV90ZXh0Lmxlbmd0aCgpKQog
ICAgICAgICAgICAgcmV0dXJuIFN0cmluZygpOwotICAgICAgICBTdHJpbmdWaWV3IGxlYWRpbmcg
PSBzdGFydC5zdWJzdHJpbmcoMCwgc3RhcnQubGVuZ3RoKCkgLSBtX3RleHQubGVuZ3RoKCkpOwot
ICAgICAgICBpZiAobGVhZGluZy5pczhCaXQoKSB8fCAhaXNBbGw4Qml0RGF0YSgpKQotICAgICAg
ICAgICAgcmV0dXJuIGxlYWRpbmcudG9TdHJpbmcoKTsKLSAgICAgICAgcmV0dXJuIFN0cmluZzo6
bWFrZThCaXRGcm9tMTZCaXRTb3VyY2UobGVhZGluZy5jaGFyYWN0ZXJzMTYoKSwgbGVhZGluZy5s
ZW5ndGgoKSk7CisgICAgICAgIHJldHVybiBtYWtlU3RyaW5nKHN0YXJ0LnN1YnN0cmluZygwLCBz
dGFydC5sZW5ndGgoKSAtIG1fdGV4dC5sZW5ndGgoKSkpOworICAgIH0KKworICAgIFN0cmluZyBt
YWtlU3RyaW5nKFN0cmluZ1ZpZXcgc3RyaW5nVmlldykgY29uc3QKKyAgICB7CisgICAgICAgIGlm
IChzdHJpbmdWaWV3LmlzOEJpdCgpIHx8ICFpc0FsbDhCaXREYXRhKCkpCisgICAgICAgICAgICBy
ZXR1cm4gc3RyaW5nVmlldy50b1N0cmluZygpOworICAgICAgICByZXR1cm4gU3RyaW5nOjptYWtl
OEJpdEZyb20xNkJpdFNvdXJjZShzdHJpbmdWaWV3LmNoYXJhY3RlcnMxNigpLCBzdHJpbmdWaWV3
Lmxlbmd0aCgpKTsKICAgICB9CiAKICAgICBTdHJpbmdWaWV3IG1fdGV4dDsKICAgICBib29sIG1f
aXNBbGw4Qml0RGF0YTsKIH07CiAKLQotSFRNTFRyZWVCdWlsZGVyOjpIVE1MVHJlZUJ1aWxkZXIo
SFRNTERvY3VtZW50UGFyc2VyJiBwYXJzZXIsIEhUTUxEb2N1bWVudCYgZG9jdW1lbnQsIFBhcnNl
ckNvbnRlbnRQb2xpY3kgcGFyc2VyQ29udGVudFBvbGljeSwgY29uc3QgSFRNTFBhcnNlck9wdGlv
bnMmIG9wdGlvbnMpCi0gICAgOiBtX2ZyYW1lc2V0T2sodHJ1ZSkKLSNpZm5kZWYgTkRFQlVHCi0g
ICAgLCBtX2lzQXR0YWNoZWQodHJ1ZSkKK2lubGluZSBib29sIEhUTUxUcmVlQnVpbGRlcjo6aXNQ
YXJzaW5nVGVtcGxhdGVDb250ZW50cygpIGNvbnN0Cit7CisjaWYgRU5BQkxFKFRFTVBMQVRFX0VM
RU1FTlQpCisgICAgcmV0dXJuIG1fdHJlZS5vcGVuRWxlbWVudHMoKS0+aGFzVGVtcGxhdGVJbkhU
TUxTY29wZSgpOworI2Vsc2UKKyAgICByZXR1cm4gZmFsc2U7CiAjZW5kaWYKK30KKworaW5saW5l
IGJvb2wgSFRNTFRyZWVCdWlsZGVyOjppc1BhcnNpbmdGcmFnbWVudE9yVGVtcGxhdGVDb250ZW50
cygpIGNvbnN0Cit7CisgICAgcmV0dXJuIGlzUGFyc2luZ0ZyYWdtZW50KCkgfHwgaXNQYXJzaW5n
VGVtcGxhdGVDb250ZW50cygpOworfQorCitIVE1MVHJlZUJ1aWxkZXI6OkhUTUxUcmVlQnVpbGRl
cihjb25zdCBIVE1MRG9jdW1lbnRQYXJzZXImIHBhcnNlciwgSFRNTERvY3VtZW50JiBkb2N1bWVu
dCwgUGFyc2VyQ29udGVudFBvbGljeSBwYXJzZXJDb250ZW50UG9saWN5LCBjb25zdCBIVE1MUGFy
c2VyT3B0aW9ucyYgb3B0aW9ucykKKyAgICA6IG1fcGFyc2VyKHBhcnNlcikKKyAgICAsIG1fb3B0
aW9ucyhvcHRpb25zKQogICAgICwgbV90cmVlKGRvY3VtZW50LCBwYXJzZXJDb250ZW50UG9saWN5
LCBvcHRpb25zLm1heGltdW1ET01UcmVlRGVwdGgpCi0gICAgLCBtX2luc2VydGlvbk1vZGUoSW5z
ZXJ0aW9uTW9kZTo6SW5pdGlhbCkKLSAgICAsIG1fb3JpZ2luYWxJbnNlcnRpb25Nb2RlKEluc2Vy
dGlvbk1vZGU6OkluaXRpYWwpCi0gICAgLCBtX3Nob3VsZFNraXBMZWFkaW5nTmV3bGluZShmYWxz
ZSkKLSAgICAsIG1fcGFyc2VyKHBhcnNlcikKICAgICAsIG1fc2NyaXB0VG9Qcm9jZXNzU3RhcnRQ
b3NpdGlvbih1bmluaXRpYWxpemVkUG9zaXRpb25WYWx1ZTEoKSkKLSAgICAsIG1fb3B0aW9ucyhv
cHRpb25zKQogeworI2lmICFBU1NFUlRfRElTQUJMRUQKKyAgICBtX2Rlc3RydWN0aW9uUHJvaGli
aXRlZCA9IGZhbHNlOworI2VuZGlmCiB9CiAKLS8vIEZJWE1FOiBNZW1iZXIgdmFyaWFibGVzIHNo
b3VsZCBiZSBncm91cGVkIGludG8gc2VsZi1pbml0aWFsaXppbmcgc3RydWN0cyB0bwotLy8gbWlu
aW1pemUgY29kZSBkdXBsaWNhdGlvbiBiZXR3ZWVuIHRoZXNlIGNvbnN0cnVjdG9ycy4KLUhUTUxU
cmVlQnVpbGRlcjo6SFRNTFRyZWVCdWlsZGVyKEhUTUxEb2N1bWVudFBhcnNlciYgcGFyc2VyLCBE
b2N1bWVudEZyYWdtZW50JiBmcmFnbWVudCwgRWxlbWVudCogY29udGV4dEVsZW1lbnQsIFBhcnNl
ckNvbnRlbnRQb2xpY3kgcGFyc2VyQ29udGVudFBvbGljeSwgY29uc3QgSFRNTFBhcnNlck9wdGlv
bnMmIG9wdGlvbnMpCi0gICAgOiBtX2ZyYW1lc2V0T2sodHJ1ZSkKLSNpZm5kZWYgTkRFQlVHCi0g
ICAgLCBtX2lzQXR0YWNoZWQodHJ1ZSkKLSNlbmRpZgorSFRNTFRyZWVCdWlsZGVyOjpIVE1MVHJl
ZUJ1aWxkZXIoY29uc3QgSFRNTERvY3VtZW50UGFyc2VyJiBwYXJzZXIsIERvY3VtZW50RnJhZ21l
bnQmIGZyYWdtZW50LCBFbGVtZW50JiBjb250ZXh0RWxlbWVudCwgUGFyc2VyQ29udGVudFBvbGlj
eSBwYXJzZXJDb250ZW50UG9saWN5LCBjb25zdCBIVE1MUGFyc2VyT3B0aW9ucyYgb3B0aW9ucykK
KyAgICA6IG1fcGFyc2VyKHBhcnNlcikKKyAgICAsIG1fb3B0aW9ucyhvcHRpb25zKQogICAgICwg
bV9mcmFnbWVudENvbnRleHQoZnJhZ21lbnQsIGNvbnRleHRFbGVtZW50KQogICAgICwgbV90cmVl
KGZyYWdtZW50LCBwYXJzZXJDb250ZW50UG9saWN5LCBvcHRpb25zLm1heGltdW1ET01UcmVlRGVw
dGgpCi0gICAgLCBtX2luc2VydGlvbk1vZGUoSW5zZXJ0aW9uTW9kZTo6SW5pdGlhbCkKLSAgICAs
IG1fb3JpZ2luYWxJbnNlcnRpb25Nb2RlKEluc2VydGlvbk1vZGU6OkluaXRpYWwpCi0gICAgLCBt
X3Nob3VsZFNraXBMZWFkaW5nTmV3bGluZShmYWxzZSkKLSAgICAsIG1fcGFyc2VyKHBhcnNlcikK
ICAgICAsIG1fc2NyaXB0VG9Qcm9jZXNzU3RhcnRQb3NpdGlvbih1bmluaXRpYWxpemVkUG9zaXRp
b25WYWx1ZTEoKSkKLSAgICAsIG1fb3B0aW9ucyhvcHRpb25zKQogewogICAgIEFTU0VSVChpc01h
aW5UaHJlYWQoKSk7Ci0gICAgLy8gRklYTUU6IFRoaXMgYXNzZXJ0aW9uIHdpbGwgYmVjb21lIGlu
dmFsaWQgaWYgPGh0dHA6Ly93ZWJraXQub3JnL2IvNjAzMTY+IGlzIGZpeGVkLgotICAgIEFTU0VS
VChjb250ZXh0RWxlbWVudCk7Ci0gICAgaWYgKGNvbnRleHRFbGVtZW50KSB7Ci0gICAgICAgIC8v
IFN0ZXBzIDQuMi00LjYgb2YgdGhlIEhUTUw1IEZyYWdtZW50IENhc2UgcGFyc2luZyBhbGdvcml0
aG06Ci0gICAgICAgIC8vIGh0dHA6Ly93d3cud2hhdHdnLm9yZy9zcGVjcy93ZWItYXBwcy9jdXJy
ZW50LXdvcmsvbXVsdGlwYWdlL3RoZS1lbmQuaHRtbCNmcmFnbWVudC1jYXNlCi0gICAgICAgIC8v
IEZvciBlZmZpY2llbmN5LCB3ZSBza2lwIHN0ZXAgNC4yICgiTGV0IHJvb3QgYmUgYSBuZXcgaHRt
bCBlbGVtZW50IHdpdGggbm8gYXR0cmlidXRlcyIpCi0gICAgICAgIC8vIGFuZCBpbnN0ZWFkIHVz
ZSB0aGUgRG9jdW1lbnRGcmFnbWVudCBhcyBhIHJvb3Qgbm9kZS4KLSAgICAgICAgbV90cmVlLm9w
ZW5FbGVtZW50cygpLT5wdXNoUm9vdE5vZGUoSFRNTFN0YWNrSXRlbTo6Y3JlYXRlKCZmcmFnbWVu
dCwgSFRNTFN0YWNrSXRlbTo6SXRlbUZvckRvY3VtZW50RnJhZ21lbnROb2RlKSk7CisKKyAgICAv
LyBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9zeW50YXguaHRtbCNwYXJz
aW5nLWh0bWwtZnJhZ21lbnRzCisgICAgLy8gRm9yIGVmZmljaWVuY3ksIHdlIHNraXAgc3RlcCA1
ICgiTGV0IHJvb3QgYmUgYSBuZXcgaHRtbCBlbGVtZW50IHdpdGggbm8gYXR0cmlidXRlcyIpIGFu
ZCBpbnN0ZWFkIHVzZSB0aGUgRG9jdW1lbnRGcmFnbWVudCBhcyBhIHJvb3Qgbm9kZS4KKyAgICBt
X3RyZWUub3BlbkVsZW1lbnRzKCktPnB1c2hSb290Tm9kZShIVE1MU3RhY2tJdGVtOjpjcmVhdGUo
JmZyYWdtZW50LCBIVE1MU3RhY2tJdGVtOjpJdGVtRm9yRG9jdW1lbnRGcmFnbWVudE5vZGUpKTsK
IAogI2lmIEVOQUJMRShURU1QTEFURV9FTEVNRU5UKQotICAgICAgICBpZiAoY29udGV4dEVsZW1l
bnQtPmhhc1RhZ05hbWUodGVtcGxhdGVUYWcpKQotICAgICAgICAgICAgbV90ZW1wbGF0ZUluc2Vy
dGlvbk1vZGVzLmFwcGVuZChJbnNlcnRpb25Nb2RlOjpUZW1wbGF0ZUNvbnRlbnRzKTsKKyAgICBp
ZiAoY29udGV4dEVsZW1lbnQuaGFzVGFnTmFtZSh0ZW1wbGF0ZVRhZykpCisgICAgICAgIG1fdGVt
cGxhdGVJbnNlcnRpb25Nb2Rlcy5hcHBlbmQoSW5zZXJ0aW9uTW9kZTo6VGVtcGxhdGVDb250ZW50
cyk7CiAjZW5kaWYKIAotICAgICAgICByZXNldEluc2VydGlvbk1vZGVBcHByb3ByaWF0ZWx5KCk7
Ci0gICAgICAgIG1fdHJlZS5zZXRGb3JtKCFjb250ZXh0RWxlbWVudCB8fCBpczxIVE1MRm9ybUVs
ZW1lbnQ+KCpjb250ZXh0RWxlbWVudCkgPyBkb3duY2FzdDxIVE1MRm9ybUVsZW1lbnQ+KGNvbnRl
eHRFbGVtZW50KSA6IEhUTUxGb3JtRWxlbWVudDo6ZmluZENsb3Nlc3RGb3JtQW5jZXN0b3IoKmNv
bnRleHRFbGVtZW50KSk7Ci0gICAgfQotfQorICAgIHJlc2V0SW5zZXJ0aW9uTW9kZUFwcHJvcHJp
YXRlbHkoKTsKIAotSFRNTFRyZWVCdWlsZGVyOjp+SFRNTFRyZWVCdWlsZGVyKCkKLXsKLX0KKyAg
ICBtX3RyZWUuc2V0Rm9ybShpczxIVE1MRm9ybUVsZW1lbnQ+KGNvbnRleHRFbGVtZW50KSA/ICZk
b3duY2FzdDxIVE1MRm9ybUVsZW1lbnQ+KGNvbnRleHRFbGVtZW50KSA6IEhUTUxGb3JtRWxlbWVu
dDo6ZmluZENsb3Nlc3RGb3JtQW5jZXN0b3IoY29udGV4dEVsZW1lbnQpKTsKIAotdm9pZCBIVE1M
VHJlZUJ1aWxkZXI6OmRldGFjaCgpCi17Ci0jaWZuZGVmIE5ERUJVRwotICAgIC8vIFRoaXMgY2Fs
bCBtYWtlcyBsaXR0bGUgc2Vuc2UgaW4gZnJhZ21lbnQgbW9kZSwgYnV0IGZvciBjb25zaXN0ZW5j
eQotICAgIC8vIERvY3VtZW50UGFyc2VyIGV4cGVjdHMgZGV0YWNoKCkgdG8gYWx3YXlzIGJlIGNh
bGxlZCBiZWZvcmUgaXQncyBkZXN0cm95ZWQuCi0gICAgbV9pc0F0dGFjaGVkID0gZmFsc2U7Cisj
aWYgIUFTU0VSVF9ESVNBQkxFRAorICAgIG1fZGVzdHJ1Y3Rpb25Qcm9oaWJpdGVkID0gZmFsc2U7
CiAjZW5kaWYKLSAgICAvLyBIVE1MQ29uc3RydWN0aW9uU2l0ZSBtaWdodCBiZSBvbiB0aGUgY2Fs
bHN0YWNrIHdoZW4gZGV0YWNoKCkgaXMgY2FsbGVkCi0gICAgLy8gb3RoZXJ3aXNlIHdlJ2QganVz
dCBjYWxsIG1fdHJlZS5jbGVhcigpIGhlcmUgaW5zdGVhZC4KLSAgICBtX3RyZWUuZGV0YWNoKCk7
CiB9CiAKIEhUTUxUcmVlQnVpbGRlcjo6RnJhZ21lbnRQYXJzaW5nQ29udGV4dDo6RnJhZ21lbnRQ
YXJzaW5nQ29udGV4dCgpCi0gICAgOiBtX2ZyYWdtZW50KDApCiB7CiB9CiAKLUhUTUxUcmVlQnVp
bGRlcjo6RnJhZ21lbnRQYXJzaW5nQ29udGV4dDo6RnJhZ21lbnRQYXJzaW5nQ29udGV4dChEb2N1
bWVudEZyYWdtZW50JiBmcmFnbWVudCwgRWxlbWVudCogY29udGV4dEVsZW1lbnQpCitIVE1MVHJl
ZUJ1aWxkZXI6OkZyYWdtZW50UGFyc2luZ0NvbnRleHQ6OkZyYWdtZW50UGFyc2luZ0NvbnRleHQo
RG9jdW1lbnRGcmFnbWVudCYgZnJhZ21lbnQsIEVsZW1lbnQmIGNvbnRleHRFbGVtZW50KQogICAg
IDogbV9mcmFnbWVudCgmZnJhZ21lbnQpCiB7CiAgICAgQVNTRVJUKCFmcmFnbWVudC5oYXNDaGls
ZE5vZGVzKCkpOwotICAgIG1fY29udGV4dEVsZW1lbnRTdGFja0l0ZW0gPSBIVE1MU3RhY2tJdGVt
OjpjcmVhdGUoY29udGV4dEVsZW1lbnQsIEhUTUxTdGFja0l0ZW06Okl0ZW1Gb3JDb250ZXh0RWxl
bWVudCk7CisgICAgbV9jb250ZXh0RWxlbWVudFN0YWNrSXRlbSA9IEhUTUxTdGFja0l0ZW06OmNy
ZWF0ZSgmY29udGV4dEVsZW1lbnQsIEhUTUxTdGFja0l0ZW06Okl0ZW1Gb3JDb250ZXh0RWxlbWVu
dCk7CiB9CiAKLUhUTUxUcmVlQnVpbGRlcjo6RnJhZ21lbnRQYXJzaW5nQ29udGV4dDo6fkZyYWdt
ZW50UGFyc2luZ0NvbnRleHQoKQoraW5saW5lIEVsZW1lbnQmIEhUTUxUcmVlQnVpbGRlcjo6RnJh
Z21lbnRQYXJzaW5nQ29udGV4dDo6Y29udGV4dEVsZW1lbnQoKSBjb25zdAogeworICAgIHJldHVy
biAqY29udGV4dEVsZW1lbnRTdGFja0l0ZW0oKS5lbGVtZW50KCk7CiB9CiAKLVBhc3NSZWZQdHI8
RWxlbWVudD4gSFRNTFRyZWVCdWlsZGVyOjp0YWtlU2NyaXB0VG9Qcm9jZXNzKFRleHRQb3NpdGlv
biYgc2NyaXB0U3RhcnRQb3NpdGlvbikKK2lubGluZSBIVE1MU3RhY2tJdGVtJiBIVE1MVHJlZUJ1
aWxkZXI6OkZyYWdtZW50UGFyc2luZ0NvbnRleHQ6OmNvbnRleHRFbGVtZW50U3RhY2tJdGVtKCkg
Y29uc3QKIHsKLSAgICBBU1NFUlQobV9zY3JpcHRUb1Byb2Nlc3MpOworICAgIEFTU0VSVChtX2Zy
YWdtZW50KTsKKyAgICByZXR1cm4gKm1fY29udGV4dEVsZW1lbnRTdGFja0l0ZW07Cit9CisKK1Jl
ZlB0cjxFbGVtZW50PiBIVE1MVHJlZUJ1aWxkZXI6OnRha2VTY3JpcHRUb1Byb2Nlc3MoVGV4dFBv
c2l0aW9uJiBzY3JpcHRTdGFydFBvc2l0aW9uKQoreworICAgIEFTU0VSVCghbV9kZXN0cm95ZWQp
OworCisgICAgaWYgKCFtX3NjcmlwdFRvUHJvY2VzcykKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7
CisKICAgICAvLyBVbnBhdXNlIG91cnNlbHZlcywgY2FsbGVycyBtYXkgcGF1c2UgdXMgYWdhaW4g
d2hlbiBwcm9jZXNzaW5nIHRoZSBzY3JpcHQuCi0gICAgLy8gVGhlIEhUTUw1IHNwZWMgaXMgd3Jp
dHRlbiBhcyB0aG91Z2ggc2NyaXB0cyBhcmUgZXhlY3V0ZWQgaW5zaWRlIHRoZSB0cmVlCi0gICAg
Ly8gYnVpbGRlci4gIFdlIHBhdXNlIHRoZSBwYXJzZXIgdG8gZXhpdCB0aGUgdHJlZSBidWlsZGVy
LCBhbmQgdGhlbiByZXN1bWUKLSAgICAvLyBiZWZvcmUgcnVubmluZyBzY3JpcHRzLgorICAgIC8v
IFRoZSBIVE1MNSBzcGVjIGlzIHdyaXR0ZW4gYXMgdGhvdWdoIHNjcmlwdHMgYXJlIGV4ZWN1dGVk
IGluc2lkZSB0aGUgdHJlZSBidWlsZGVyLgorICAgIC8vIFdlIHBhdXNlIHRoZSBwYXJzZXIgdG8g
ZXhpdCB0aGUgdHJlZSBidWlsZGVyLCBhbmQgdGhlbiByZXN1bWUgYmVmb3JlIHJ1bm5pbmcgc2Ny
aXB0cy4KICAgICBzY3JpcHRTdGFydFBvc2l0aW9uID0gbV9zY3JpcHRUb1Byb2Nlc3NTdGFydFBv
c2l0aW9uOwogICAgIG1fc2NyaXB0VG9Qcm9jZXNzU3RhcnRQb3NpdGlvbiA9IHVuaW5pdGlhbGl6
ZWRQb3NpdGlvblZhbHVlMSgpOwotICAgIHJldHVybiBtX3NjcmlwdFRvUHJvY2Vzcy5yZWxlYXNl
KCk7CisgICAgcmV0dXJuIFdURjo6bW92ZShtX3NjcmlwdFRvUHJvY2Vzcyk7CiB9CiAKLXZvaWQg
SFRNTFRyZWVCdWlsZGVyOjpjb25zdHJ1Y3RUcmVlKEF0b21pY0hUTUxUb2tlbiogdG9rZW4pCit2
b2lkIEhUTUxUcmVlQnVpbGRlcjo6Y29uc3RydWN0VHJlZShBdG9taWNIVE1MVG9rZW4mIHRva2Vu
KQogeworI2lmICFBU1NFUlRfRElTQUJMRUQKKyAgICBBU1NFUlQoIW1fZGVzdHJveWVkKTsKKyAg
ICBBU1NFUlQoIW1fZGVzdHJ1Y3Rpb25Qcm9oaWJpdGVkKTsKKyAgICBtX2Rlc3RydWN0aW9uUHJv
aGliaXRlZCA9IHRydWU7CisjZW5kaWYKKwogICAgIGlmIChzaG91bGRQcm9jZXNzVG9rZW5JbkZv
cmVpZ25Db250ZW50KHRva2VuKSkKICAgICAgICAgcHJvY2Vzc1Rva2VuSW5Gb3JlaWduQ29udGVu
dCh0b2tlbik7CiAgICAgZWxzZQpAQCAtMzU1LDcgKzM0MSw3IEBAIHZvaWQgSFRNTFRyZWVCdWls
ZGVyOjpjb25zdHJ1Y3RUcmVlKEF0b21pY0hUTUxUb2tlbiogdG9rZW4pCiAKICAgICBpZiAobV9w
YXJzZXIudG9rZW5pemVyKCkpIHsKICAgICAgICAgYm9vbCBpbkZvcmVpZ25Db250ZW50ID0gIW1f
dHJlZS5pc0VtcHR5KCkKLSAgICAgICAgICAgICYmICFhZGp1c3RlZEN1cnJlbnRTdGFja0l0ZW0o
KS0+aXNJbkhUTUxOYW1lc3BhY2UoKQorICAgICAgICAgICAgJiYgIWFkanVzdGVkQ3VycmVudFN0
YWNrSXRlbSgpLmlzSW5IVE1MTmFtZXNwYWNlKCkKICAgICAgICAgICAgICYmICFIVE1MRWxlbWVu
dFN0YWNrOjppc0hUTUxJbnRlZ3JhdGlvblBvaW50KG1fdHJlZS5jdXJyZW50U3RhY2tJdGVtKCkp
CiAgICAgICAgICAgICAmJiAhSFRNTEVsZW1lbnRTdGFjazo6aXNNYXRoTUxUZXh0SW50ZWdyYXRp
b25Qb2ludChtX3RyZWUuY3VycmVudFN0YWNrSXRlbSgpKTsKIApAQCAtMzYzLDEzICszNDksMTcg
QEAgdm9pZCBIVE1MVHJlZUJ1aWxkZXI6OmNvbnN0cnVjdFRyZWUoQXRvbWljSFRNTFRva2VuKiB0
b2tlbikKICAgICAgICAgbV9wYXJzZXIudG9rZW5pemVyKCktPnNldFNob3VsZEFsbG93Q0RBVEEo
aW5Gb3JlaWduQ29udGVudCk7CiAgICAgfQogCisjaWYgIUFTU0VSVF9ESVNBQkxFRAorICAgIG1f
ZGVzdHJ1Y3Rpb25Qcm9oaWJpdGVkID0gZmFsc2U7CisjZW5kaWYKKwogICAgIG1fdHJlZS5leGVj
dXRlUXVldWVkVGFza3MoKTsKLSAgICAvLyBXZSBtaWdodCBiZSBkZXRhY2hlZCBub3cuCisgICAg
Ly8gVGhlIHRyZWUgYnVpbGRlciBtaWdodCBoYXZlIGJlZW4gZGVzdHJveWVkIGFzIGFuIGluZGly
ZWN0IHJlc3VsdCBvZiBleGVjdXRpbmcgdGhlIHF1ZXVlZCB0YXNrcy4KIH0KIAotdm9pZCBIVE1M
VHJlZUJ1aWxkZXI6OnByb2Nlc3NUb2tlbihBdG9taWNIVE1MVG9rZW4qIHRva2VuKQordm9pZCBI
VE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NUb2tlbihBdG9taWNIVE1MVG9rZW4mIHRva2VuKQogewot
ICAgIHN3aXRjaCAodG9rZW4tPnR5cGUoKSkgeworICAgIHN3aXRjaCAodG9rZW4udHlwZSgpKSB7
CiAgICAgY2FzZSBIVE1MVG9rZW46OlVuaW5pdGlhbGl6ZWQ6CiAgICAgICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwogICAgICAgICBicmVhazsKQEAgLTM5OSwxMiArMzg5LDEyIEBAIHZvaWQgSFRN
TFRyZWVCdWlsZGVyOjpwcm9jZXNzVG9rZW4oQXRvbWljSFRNTFRva2VuKiB0b2tlbikKICAgICB9
CiB9CiAKLXZvaWQgSFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNzRG9jdHlwZVRva2VuKEF0b21pY0hU
TUxUb2tlbiogdG9rZW4pCit2b2lkIEhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc0RvY3R5cGVUb2tl
bihBdG9taWNIVE1MVG9rZW4mIHRva2VuKQogewotICAgIEFTU0VSVCh0b2tlbi0+dHlwZSgpID09
IEhUTUxUb2tlbjo6RE9DVFlQRSk7CisgICAgQVNTRVJUKHRva2VuLnR5cGUoKSA9PSBIVE1MVG9r
ZW46OkRPQ1RZUEUpOwogICAgIGlmIChtX2luc2VydGlvbk1vZGUgPT0gSW5zZXJ0aW9uTW9kZTo6
SW5pdGlhbCkgewotICAgICAgICBtX3RyZWUuaW5zZXJ0RG9jdHlwZSh0b2tlbik7Ci0gICAgICAg
IHNldEluc2VydGlvbk1vZGUoSW5zZXJ0aW9uTW9kZTo6QmVmb3JlSFRNTCk7CisgICAgICAgIG1f
dHJlZS5pbnNlcnREb2N0eXBlKCZ0b2tlbik7CisgICAgICAgIG1faW5zZXJ0aW9uTW9kZSA9IElu
c2VydGlvbk1vZGU6OkJlZm9yZUhUTUw7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgaWYg
KG1faW5zZXJ0aW9uTW9kZSA9PSBJbnNlcnRpb25Nb2RlOjpJblRhYmxlVGV4dCkgewpAQCAtNDE1
LDE3ICs0MDUsMTcgQEAgdm9pZCBIVE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NEb2N0eXBlVG9rZW4o
QXRvbWljSFRNTFRva2VuKiB0b2tlbikKICAgICBwYXJzZUVycm9yKHRva2VuKTsKIH0KIAotdm9p
ZCBIVE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NGYWtlU3RhcnRUYWcoY29uc3QgUXVhbGlmaWVkTmFt
ZSYgdGFnTmFtZSwgY29uc3QgVmVjdG9yPEF0dHJpYnV0ZT4mIGF0dHJpYnV0ZXMpCit2b2lkIEhU
TUxUcmVlQnVpbGRlcjo6cHJvY2Vzc0Zha2VTdGFydFRhZyhjb25zdCBRdWFsaWZpZWROYW1lJiB0
YWdOYW1lLCBWZWN0b3I8QXR0cmlidXRlPiYmIGF0dHJpYnV0ZXMpCiB7CiAgICAgLy8gRklYTUU6
IFdlJ2xsIG5lZWQgYSBmYW5jaWVyIGNvbnZlcnNpb24gdGhhbiBqdXN0ICJsb2NhbE5hbWUiIGZv
ciBTVkcvTWF0aE1MIHRhZ3MuCi0gICAgQXRvbWljSFRNTFRva2VuIGZha2VUb2tlbihIVE1MVG9r
ZW46OlN0YXJ0VGFnLCB0YWdOYW1lLmxvY2FsTmFtZSgpLCBhdHRyaWJ1dGVzKTsKLSAgICBwcm9j
ZXNzU3RhcnRUYWcoJmZha2VUb2tlbik7CisgICAgQXRvbWljSFRNTFRva2VuIGZha2VUb2tlbihI
VE1MVG9rZW46OlN0YXJ0VGFnLCB0YWdOYW1lLmxvY2FsTmFtZSgpLCBXVEY6Om1vdmUoYXR0cmli
dXRlcykpOworICAgIHByb2Nlc3NTdGFydFRhZyhmYWtlVG9rZW4pOwogfQogCiB2b2lkIEhUTUxU
cmVlQnVpbGRlcjo6cHJvY2Vzc0Zha2VFbmRUYWcoY29uc3QgQXRvbWljU3RyaW5nJiB0YWdOYW1l
KQogewogICAgIEF0b21pY0hUTUxUb2tlbiBmYWtlVG9rZW4oSFRNTFRva2VuOjpFbmRUYWcsIHRh
Z05hbWUpOwotICAgIHByb2Nlc3NFbmRUYWcoJmZha2VUb2tlbik7CisgICAgcHJvY2Vzc0VuZFRh
ZyhmYWtlVG9rZW4pOwogfQogCiB2b2lkIEhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc0Zha2VFbmRU
YWcoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSkKQEAgLTQ0NiwxMiArNDM2LDEyIEBAIHZv
aWQgSFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNzRmFrZVBFbmRUYWdJZlBJbkJ1dHRvblNjb3BlKCkK
ICAgICBpZiAoIW1fdHJlZS5vcGVuRWxlbWVudHMoKS0+aW5CdXR0b25TY29wZShwVGFnLmxvY2Fs
TmFtZSgpKSkKICAgICAgICAgcmV0dXJuOwogICAgIEF0b21pY0hUTUxUb2tlbiBlbmRQKEhUTUxU
b2tlbjo6RW5kVGFnLCBwVGFnLmxvY2FsTmFtZSgpKTsKLSAgICBwcm9jZXNzRW5kVGFnKCZlbmRQ
KTsKKyAgICBwcm9jZXNzRW5kVGFnKGVuZFApOwogfQogCi1WZWN0b3I8QXR0cmlidXRlPiBIVE1M
VHJlZUJ1aWxkZXI6OmF0dHJpYnV0ZXNGb3JJc2luZGV4SW5wdXQoQXRvbWljSFRNTFRva2VuKiB0
b2tlbikKK1ZlY3RvcjxBdHRyaWJ1dGU+IEhUTUxUcmVlQnVpbGRlcjo6YXR0cmlidXRlc0Zvcklz
aW5kZXhJbnB1dChBdG9taWNIVE1MVG9rZW4mIHRva2VuKQogewotICAgIFZlY3RvcjxBdHRyaWJ1
dGU+IGF0dHJpYnV0ZXMgPSB0b2tlbi0+YXR0cmlidXRlcygpOworICAgIFZlY3RvcjxBdHRyaWJ1
dGU+IGF0dHJpYnV0ZXMgPSB0b2tlbi5hdHRyaWJ1dGVzKCk7CiAgICAgZm9yIChpbnQgaSA9IGF0
dHJpYnV0ZXMuc2l6ZSgpIC0gMTsgaSA+PSAwOyAtLWkpIHsKICAgICAgICAgY29uc3QgUXVhbGlm
aWVkTmFtZSYgbmFtZSA9IGF0dHJpYnV0ZXMuYXQoaSkubmFtZSgpOwogICAgICAgICBpZiAobmFt
ZS5tYXRjaGVzKG5hbWVBdHRyKSB8fCBuYW1lLm1hdGNoZXMoYWN0aW9uQXR0cikgfHwgbmFtZS5t
YXRjaGVzKHByb21wdEF0dHIpKQpAQCAtNDYyLDIxICs0NTIsMjEgQEAgVmVjdG9yPEF0dHJpYnV0
ZT4gSFRNTFRyZWVCdWlsZGVyOjphdHRyaWJ1dGVzRm9ySXNpbmRleElucHV0KEF0b21pY0hUTUxU
b2tlbiogdG8KICAgICByZXR1cm4gYXR0cmlidXRlczsKIH0KIAotdm9pZCBIVE1MVHJlZUJ1aWxk
ZXI6OnByb2Nlc3NJc2luZGV4U3RhcnRUYWdGb3JJbkJvZHkoQXRvbWljSFRNTFRva2VuKiB0b2tl
bikKK3ZvaWQgSFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNzSXNpbmRleFN0YXJ0VGFnRm9ySW5Cb2R5
KEF0b21pY0hUTUxUb2tlbiYgdG9rZW4pCiB7Ci0gICAgQVNTRVJUKHRva2VuLT50eXBlKCkgPT0g
SFRNTFRva2VuOjpTdGFydFRhZyk7Ci0gICAgQVNTRVJUKHRva2VuLT5uYW1lKCkgPT0gaXNpbmRl
eFRhZyk7CisgICAgQVNTRVJUKHRva2VuLnR5cGUoKSA9PSBIVE1MVG9rZW46OlN0YXJ0VGFnKTsK
KyAgICBBU1NFUlQodG9rZW4ubmFtZSgpID09IGlzaW5kZXhUYWcpOwogICAgIHBhcnNlRXJyb3Io
dG9rZW4pOwogICAgIGlmIChtX3RyZWUuZm9ybSgpICYmICFpc1BhcnNpbmdUZW1wbGF0ZUNvbnRl
bnRzKCkpCiAgICAgICAgIHJldHVybjsKICAgICBub3RJbXBsZW1lbnRlZCgpOyAvLyBBY2tub3ds
ZWRnZSBzZWxmLWNsb3NpbmcgZmxhZwogICAgIHByb2Nlc3NGYWtlU3RhcnRUYWcoZm9ybVRhZyk7
Ci0gICAgQXR0cmlidXRlKiBhY3Rpb25BdHRyaWJ1dGUgPSB0b2tlbi0+Z2V0QXR0cmlidXRlSXRl
bShhY3Rpb25BdHRyKTsKKyAgICBBdHRyaWJ1dGUqIGFjdGlvbkF0dHJpYnV0ZSA9IHRva2VuLmdl
dEF0dHJpYnV0ZUl0ZW0oYWN0aW9uQXR0cik7CiAgICAgaWYgKGFjdGlvbkF0dHJpYnV0ZSkKICAg
ICAgICAgbV90cmVlLmZvcm0oKS0+c2V0QXR0cmlidXRlKGFjdGlvbkF0dHIsIGFjdGlvbkF0dHJp
YnV0ZS0+dmFsdWUoKSk7CiAgICAgcHJvY2Vzc0Zha2VTdGFydFRhZyhoclRhZyk7CiAgICAgcHJv
Y2Vzc0Zha2VTdGFydFRhZyhsYWJlbFRhZyk7Ci0gICAgQXR0cmlidXRlKiBwcm9tcHRBdHRyaWJ1
dGUgPSB0b2tlbi0+Z2V0QXR0cmlidXRlSXRlbShwcm9tcHRBdHRyKTsKKyAgICBBdHRyaWJ1dGUq
IHByb21wdEF0dHJpYnV0ZSA9IHRva2VuLmdldEF0dHJpYnV0ZUl0ZW0ocHJvbXB0QXR0cik7CiAg
ICAgaWYgKHByb21wdEF0dHJpYnV0ZSkKICAgICAgICAgcHJvY2Vzc0Zha2VDaGFyYWN0ZXJzKHBy
b21wdEF0dHJpYnV0ZS0+dmFsdWUoKSk7CiAgICAgZWxzZQpAQCAtNDkwLDQxICs0ODAsMzYgQEAg
dm9pZCBIVE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NJc2luZGV4U3RhcnRUYWdGb3JJbkJvZHkoQXRv
bWljSFRNTFRva2VuKiB0b2tlbikKIAogbmFtZXNwYWNlIHsKIAotYm9vbCBpc0xpKGNvbnN0IEhU
TUxTdGFja0l0ZW0qIGl0ZW0pCitib29sIGlzTGkoY29uc3QgSFRNTFN0YWNrSXRlbSYgaXRlbSkK
IHsKLSAgICByZXR1cm4gaXRlbS0+aGFzVGFnTmFtZShsaVRhZyk7CisgICAgcmV0dXJuIGl0ZW0u
aGFzVGFnTmFtZShsaVRhZyk7CiB9CiAKLWJvb2wgaXNEZE9yRHQoY29uc3QgSFRNTFN0YWNrSXRl
bSogaXRlbSkKK2Jvb2wgaXNEZE9yRHQoY29uc3QgSFRNTFN0YWNrSXRlbSYgaXRlbSkKIHsKLSAg
ICByZXR1cm4gaXRlbS0+aGFzVGFnTmFtZShkZFRhZykKLSAgICAgICAgfHwgaXRlbS0+aGFzVGFn
TmFtZShkdFRhZyk7CisgICAgcmV0dXJuIGl0ZW0uaGFzVGFnTmFtZShkZFRhZykgfHwgaXRlbS5o
YXNUYWdOYW1lKGR0VGFnKTsKIH0KIAogfQogCi10ZW1wbGF0ZSA8Ym9vbCBzaG91bGRDbG9zZShj
b25zdCBIVE1MU3RhY2tJdGVtKik+Ci12b2lkIEhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc0Nsb3Nl
V2hlbk5lc3RlZFRhZyhBdG9taWNIVE1MVG9rZW4qIHRva2VuKQordGVtcGxhdGUgPGJvb2wgc2hv
dWxkQ2xvc2UoY29uc3QgSFRNTFN0YWNrSXRlbSYpPiB2b2lkIEhUTUxUcmVlQnVpbGRlcjo6cHJv
Y2Vzc0Nsb3NlV2hlbk5lc3RlZFRhZyhBdG9taWNIVE1MVG9rZW4mIHRva2VuKQogewogICAgIG1f
ZnJhbWVzZXRPayA9IGZhbHNlOwotICAgIEhUTUxFbGVtZW50U3RhY2s6OkVsZW1lbnRSZWNvcmQq
IG5vZGVSZWNvcmQgPSBtX3RyZWUub3BlbkVsZW1lbnRzKCktPnRvcFJlY29yZCgpOwotICAgIHdo
aWxlICgxKSB7Ci0gICAgICAgIFJlZlB0cjxIVE1MU3RhY2tJdGVtPiBpdGVtID0gbm9kZVJlY29y
ZC0+c3RhY2tJdGVtKCk7Ci0gICAgICAgIGlmIChzaG91bGRDbG9zZShpdGVtLmdldCgpKSkgewot
ICAgICAgICAgICAgQVNTRVJUKGl0ZW0tPmlzRWxlbWVudE5vZGUoKSk7Ci0gICAgICAgICAgICBw
cm9jZXNzRmFrZUVuZFRhZyhpdGVtLT5sb2NhbE5hbWUoKSk7CisgICAgZm9yIChhdXRvKiBub2Rl
UmVjb3JkID0gbV90cmVlLm9wZW5FbGVtZW50cygpLT50b3BSZWNvcmQoKTsgOyBub2RlUmVjb3Jk
ID0gbm9kZVJlY29yZC0+bmV4dCgpKSB7CisgICAgICAgIEhUTUxTdGFja0l0ZW0mIGl0ZW0gPSAq
bm9kZVJlY29yZC0+c3RhY2tJdGVtKCk7CisgICAgICAgIGlmIChzaG91bGRDbG9zZShpdGVtKSkg
eworICAgICAgICAgICAgQVNTRVJUKGl0ZW0uaXNFbGVtZW50Tm9kZSgpKTsKKyAgICAgICAgICAg
IHByb2Nlc3NGYWtlRW5kVGFnKGl0ZW0ubG9jYWxOYW1lKCkpOwogICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIH0KLSAgICAgICAgaWYgKGl0ZW0tPmlzU3BlY2lhbE5vZGUoKSAmJiAhaXRlbS0+
aGFzVGFnTmFtZShhZGRyZXNzVGFnKSAmJiAhaXRlbS0+aGFzVGFnTmFtZShkaXZUYWcpICYmICFp
dGVtLT5oYXNUYWdOYW1lKHBUYWcpKQorICAgICAgICBpZiAoaXRlbS5pc1NwZWNpYWxOb2RlKCkg
JiYgIWl0ZW0uaGFzVGFnTmFtZShhZGRyZXNzVGFnKSAmJiAhaXRlbS5oYXNUYWdOYW1lKGRpdlRh
ZykgJiYgIWl0ZW0uaGFzVGFnTmFtZShwVGFnKSkKICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICBub2RlUmVjb3JkID0gbm9kZVJlY29yZC0+bmV4dCgpOwogICAgIH0KICAgICBwcm9jZXNzRmFr
ZVBFbmRUYWdJZlBJbkJ1dHRvblNjb3BlKCk7Ci0gICAgbV90cmVlLmluc2VydEhUTUxFbGVtZW50
KHRva2VuKTsKKyAgICBtX3RyZWUuaW5zZXJ0SFRNTEVsZW1lbnQoJnRva2VuKTsKIH0KIAotdGVt
cGxhdGUgPHR5cGVuYW1lIFRhYmxlUXVhbGlmaWVkTmFtZT4KLXN0YXRpYyBIYXNoTWFwPEF0b21p
Y1N0cmluZywgUXVhbGlmaWVkTmFtZT4gY3JlYXRlQ2FzZU1hcChjb25zdCBUYWJsZVF1YWxpZmll
ZE5hbWUqIGNvbnN0IG5hbWVzW10sIHVuc2lnbmVkIGxlbmd0aCkKK3RlbXBsYXRlIDx0eXBlbmFt
ZSBUYWJsZVF1YWxpZmllZE5hbWU+IHN0YXRpYyBIYXNoTWFwPEF0b21pY1N0cmluZywgUXVhbGlm
aWVkTmFtZT4gY3JlYXRlQ2FzZU1hcChjb25zdCBUYWJsZVF1YWxpZmllZE5hbWUqIGNvbnN0IG5h
bWVzW10sIHVuc2lnbmVkIGxlbmd0aCkKIHsKICAgICBIYXNoTWFwPEF0b21pY1N0cmluZywgUXVh
bGlmaWVkTmFtZT4gbWFwOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7ICsr
aSkgewpAQCAtNTU1LDggKzU0MCw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBhZGp1c3RBdHRyaWJ1
dGVzKEhhc2hNYXA8QXRvbWljU3RyaW5nLCBRdWFsaWZpZWROYW1lPiYgbWFwLCBBCiAgICAgfQog
fQogCi10ZW1wbGF0ZTxjb25zdCBRdWFsaWZpZWROYW1lKiBjb25zdCogYXR0cmlidXRlc1RhYmxl
KCksIHVuc2lnbmVkIGF0dHJpYnV0ZXNUYWJsZUxlbmd0aD4KLXN0YXRpYyB2b2lkIGFkanVzdEF0
dHJpYnV0ZXMoQXRvbWljSFRNTFRva2VuJiB0b2tlbikKK3RlbXBsYXRlPGNvbnN0IFF1YWxpZmll
ZE5hbWUqIGNvbnN0KiBhdHRyaWJ1dGVzVGFibGUoKSwgdW5zaWduZWQgYXR0cmlidXRlc1RhYmxl
TGVuZ3RoPiBzdGF0aWMgdm9pZCBhZGp1c3RBdHRyaWJ1dGVzKEF0b21pY0hUTUxUb2tlbiYgdG9r
ZW4pCiB7CiAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEhhc2hNYXA8QXRvbWljU3RyaW5nLCBR
dWFsaWZpZWROYW1lPj4gbWFwID0gY3JlYXRlQ2FzZU1hcChhdHRyaWJ1dGVzVGFibGUoKSwgYXR0
cmlidXRlc1RhYmxlTGVuZ3RoKTsKICAgICBhZGp1c3RBdHRyaWJ1dGVzKG1hcCwgdG9rZW4pOwpA
QCAtNjAwLDI4ICs1ODQsMjggQEAgc3RhdGljIHZvaWQgYWRqdXN0Rm9yZWlnbkF0dHJpYnV0ZXMo
QXRvbWljSFRNTFRva2VuJiB0b2tlbikKICAgICBhZGp1c3RBdHRyaWJ1dGVzKG1hcCwgdG9rZW4p
OwogfQogCi12b2lkIEhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc1N0YXJ0VGFnRm9ySW5Cb2R5KEF0
b21pY0hUTUxUb2tlbiogdG9rZW4pCit2b2lkIEhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc1N0YXJ0
VGFnRm9ySW5Cb2R5KEF0b21pY0hUTUxUb2tlbiYgdG9rZW4pCiB7Ci0gICAgQVNTRVJUKHRva2Vu
LT50eXBlKCkgPT0gSFRNTFRva2VuOjpTdGFydFRhZyk7Ci0gICAgaWYgKHRva2VuLT5uYW1lKCkg
PT0gaHRtbFRhZykgeworICAgIEFTU0VSVCh0b2tlbi50eXBlKCkgPT0gSFRNTFRva2VuOjpTdGFy
dFRhZyk7CisgICAgaWYgKHRva2VuLm5hbWUoKSA9PSBodG1sVGFnKSB7CiAgICAgICAgIHByb2Nl
c3NIdG1sU3RhcnRUYWdGb3JJbkJvZHkodG9rZW4pOwogICAgICAgICByZXR1cm47CiAgICAgfQot
ICAgIGlmICh0b2tlbi0+bmFtZSgpID09IGJhc2VUYWcKLSAgICAgICAgfHwgdG9rZW4tPm5hbWUo
KSA9PSBiYXNlZm9udFRhZwotICAgICAgICB8fCB0b2tlbi0+bmFtZSgpID09IGJnc291bmRUYWcK
LSAgICAgICAgfHwgdG9rZW4tPm5hbWUoKSA9PSBjb21tYW5kVGFnCi0gICAgICAgIHx8IHRva2Vu
LT5uYW1lKCkgPT0gbGlua1RhZwotICAgICAgICB8fCB0b2tlbi0+bmFtZSgpID09IG1ldGFUYWcK
LSAgICAgICAgfHwgdG9rZW4tPm5hbWUoKSA9PSBub2ZyYW1lc1RhZwotICAgICAgICB8fCB0b2tl
bi0+bmFtZSgpID09IHNjcmlwdFRhZwotICAgICAgICB8fCB0b2tlbi0+bmFtZSgpID09IHN0eWxl
VGFnCi0gICAgICAgIHx8IHRva2VuLT5uYW1lKCkgPT0gdGl0bGVUYWcpIHsKKyAgICBpZiAodG9r
ZW4ubmFtZSgpID09IGJhc2VUYWcKKyAgICAgICAgfHwgdG9rZW4ubmFtZSgpID09IGJhc2Vmb250
VGFnCisgICAgICAgIHx8IHRva2VuLm5hbWUoKSA9PSBiZ3NvdW5kVGFnCisgICAgICAgIHx8IHRv
a2VuLm5hbWUoKSA9PSBjb21tYW5kVGFnCisgICAgICAgIHx8IHRva2VuLm5hbWUoKSA9PSBsaW5r
VGFnCisgICAgICAgIHx8IHRva2VuLm5hbWUoKSA9PSBtZXRhVGFnCisgICAgICAgIHx8IHRva2Vu
Lm5hbWUoKSA9PSBub2ZyYW1lc1RhZworICAgICAgICB8fCB0b2tlbi5uYW1lKCkgPT0gc2NyaXB0
VGFnCisgICAgICAgIHx8IHRva2VuLm5hbWUoKSA9PSBzdHlsZVRhZworICAgICAgICB8fCB0b2tl
bi5uYW1lKCkgPT0gdGl0bGVUYWcpIHsKICAgICAgICAgYm9vbCBkaWRQcm9jZXNzID0gcHJvY2Vz
c1N0YXJ0VGFnRm9ySW5IZWFkKHRva2VuKTsKICAgICAgICAgQVNTRVJUX1VOVVNFRChkaWRQcm9j
ZXNzLCBkaWRQcm9jZXNzKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBpZiAodG9rZW4t
Pm5hbWUoKSA9PSBib2R5VGFnKSB7CisgICAgaWYgKHRva2VuLm5hbWUoKSA9PSBib2R5VGFnKSB7
CiAgICAgICAgIHBhcnNlRXJyb3IodG9rZW4pOwogICAgICAgICBib29sIGZyYWdtZW50T3JUZW1w
bGF0ZUNhc2UgPSAhbV90cmVlLm9wZW5FbGVtZW50cygpLT5zZWNvbmRFbGVtZW50SXNIVE1MQm9k
eUVsZW1lbnQoKSB8fCBtX3RyZWUub3BlbkVsZW1lbnRzKCktPmhhc09ubHlPbmVFbGVtZW50KCk7
CiAjaWYgRU5BQkxFKFRFTVBMQVRFX0VMRU1FTlQpCkBAIC02MzIsMTAgKzYxNiwxMCBAQCB2b2lk
IEhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc1N0YXJ0VGFnRm9ySW5Cb2R5KEF0b21pY0hUTUxUb2tl
biogdG9rZW4pCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgbV9mcmFt
ZXNldE9rID0gZmFsc2U7Ci0gICAgICAgIG1fdHJlZS5pbnNlcnRIVE1MQm9keVN0YXJ0VGFnSW5C
b2R5KHRva2VuKTsKKyAgICAgICAgbV90cmVlLmluc2VydEhUTUxCb2R5U3RhcnRUYWdJbkJvZHko
JnRva2VuKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBpZiAodG9rZW4tPm5hbWUoKSA9
PSBmcmFtZXNldFRhZykgeworICAgIGlmICh0b2tlbi5uYW1lKCkgPT0gZnJhbWVzZXRUYWcpIHsK
ICAgICAgICAgcGFyc2VFcnJvcih0b2tlbik7CiAgICAgICAgIGlmICghbV90cmVlLm9wZW5FbGVt
ZW50cygpLT5zZWNvbmRFbGVtZW50SXNIVE1MQm9keUVsZW1lbnQoKSB8fCBtX3RyZWUub3BlbkVs
ZW1lbnRzKCktPmhhc09ubHlPbmVFbGVtZW50KCkpIHsKICAgICAgICAgICAgIEFTU0VSVChpc1Bh
cnNpbmdGcmFnbWVudE9yVGVtcGxhdGVDb250ZW50cygpKTsKQEAgLTY0Nyw3OCArNjMxLDc4IEBA
IHZvaWQgSFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNzU3RhcnRUYWdGb3JJbkJvZHkoQXRvbWljSFRN
TFRva2VuKiB0b2tlbikKICAgICAgICAgbV90cmVlLm9wZW5FbGVtZW50cygpLT5wb3BVbnRpbCht
X3RyZWUub3BlbkVsZW1lbnRzKCktPmJvZHlFbGVtZW50KCkpOwogICAgICAgICBtX3RyZWUub3Bl
bkVsZW1lbnRzKCktPnBvcEhUTUxCb2R5RWxlbWVudCgpOwogICAgICAgICBBU1NFUlQobV90cmVl
Lm9wZW5FbGVtZW50cygpLT50b3AoKSA9PSBtX3RyZWUub3BlbkVsZW1lbnRzKCktPmh0bWxFbGVt
ZW50KCkpOwotICAgICAgICBtX3RyZWUuaW5zZXJ0SFRNTEVsZW1lbnQodG9rZW4pOwotICAgICAg
ICBzZXRJbnNlcnRpb25Nb2RlKEluc2VydGlvbk1vZGU6OkluRnJhbWVzZXQpOwotICAgICAgICBy
ZXR1cm47Ci0gICAgfQotICAgIGlmICh0b2tlbi0+bmFtZSgpID09IGFkZHJlc3NUYWcKLSAgICAg
ICAgfHwgdG9rZW4tPm5hbWUoKSA9PSBhcnRpY2xlVGFnCi0gICAgICAgIHx8IHRva2VuLT5uYW1l
KCkgPT0gYXNpZGVUYWcKLSAgICAgICAgfHwgdG9rZW4tPm5hbWUoKSA9PSBibG9ja3F1b3RlVGFn
Ci0gICAgICAgIHx8IHRva2VuLT5uYW1lKCkgPT0gY2VudGVyVGFnCi0gICAgICAgIHx8IHRva2Vu
LT5uYW1lKCkgPT0gZGV0YWlsc1RhZwotICAgICAgICB8fCB0b2tlbi0+bmFtZSgpID09IGRpclRh
ZwotICAgICAgICB8fCB0b2tlbi0+bmFtZSgpID09IGRpdlRhZwotICAgICAgICB8fCB0b2tlbi0+
bmFtZSgpID09IGRsVGFnCi0gICAgICAgIHx8IHRva2VuLT5uYW1lKCkgPT0gZmllbGRzZXRUYWcK
LSAgICAgICAgfHwgdG9rZW4tPm5hbWUoKSA9PSBmaWdjYXB0aW9uVGFnCi0gICAgICAgIHx8IHRv
a2VuLT5uYW1lKCkgPT0gZmlndXJlVGFnCi0gICAgICAgIHx8IHRva2VuLT5uYW1lKCkgPT0gZm9v
dGVyVGFnCi0gICAgICAgIHx8IHRva2VuLT5uYW1lKCkgPT0gaGVhZGVyVGFnCi0gICAgICAgIHx8
IHRva2VuLT5uYW1lKCkgPT0gaGdyb3VwVGFnCi0gICAgICAgIHx8IHRva2VuLT5uYW1lKCkgPT0g
bWFpblRhZwotICAgICAgICB8fCB0b2tlbi0+bmFtZSgpID09IG1lbnVUYWcKLSAgICAgICAgfHwg
dG9rZW4tPm5hbWUoKSA9PSBuYXZUYWcKLSAgICAgICAgfHwgdG9rZW4tPm5hbWUoKSA9PSBvbFRh
ZwotICAgICAgICB8fCB0b2tlbi0+bmFtZSgpID09IHBUYWcKLSAgICAgICAgfHwgdG9rZW4tPm5h
bWUoKSA9PSBzZWN0aW9uVGFnCi0gICAgICAgIHx8IHRva2VuLT5uYW1lKCkgPT0gc3VtbWFyeVRh
ZwotICAgICAgICB8fCB0b2tlbi0+bmFtZSgpID09IHVsVGFnKSB7CisgICAgICAgIG1fdHJlZS5p
bnNlcnRIVE1MRWxlbWVudCgmdG9rZW4pOworICAgICAgICBtX2luc2VydGlvbk1vZGUgPSBJbnNl
cnRpb25Nb2RlOjpJbkZyYW1lc2V0OworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGlmICh0
b2tlbi5uYW1lKCkgPT0gYWRkcmVzc1RhZworICAgICAgICB8fCB0b2tlbi5uYW1lKCkgPT0gYXJ0
aWNsZVRhZworICAgICAgICB8fCB0b2tlbi5uYW1lKCkgPT0gYXNpZGVUYWcKKyAgICAgICAgfHwg
dG9rZW4ubmFtZSgpID09IGJsb2NrcXVvdGVUYWcKKyAgICAgICAgfHwgdG9rZW4ubmFtZSgpID09
IGNlbnRlclRhZworICAgICAgICB8fCB0b2tlbi5uYW1lKCkgPT0gZGV0YWlsc1RhZworICAgICAg
ICB8fCB0b2tlbi5uYW1lKCkgPT0gZGlyVGFnCisgICAgICAgIHx8IHRva2VuLm5hbWUoKSA9PSBk
aXZUYWcKKyAgICAgICAgfHwgdG9rZW4ubmFtZSgpID09IGRsVGFnCisgICAgICAgIHx8IHRva2Vu
Lm5hbWUoKSA9PSBmaWVsZHNldFRhZworICAgICAgICB8fCB0b2tlbi5uYW1lKCkgPT0gZmlnY2Fw
dGlvblRhZworICAgICAgICB8fCB0b2tlbi5uYW1lKCkgPT0gZmlndXJlVGFnCisgICAgICAgIHx8
IHRva2VuLm5hbWUoKSA9PSBmb290ZXJUYWcKKyAgICAgICAgfHwgdG9rZW4ubmFtZSgpID09IGhl
YWRlclRhZworICAgICAgICB8fCB0b2tlbi5uYW1lKCkgPT0gaGdyb3VwVGFnCisgICAgICAgIHx8
IHRva2VuLm5hbWUoKSA9PSBtYWluVGFnCisgICAgICAgIHx8IHRva2VuLm5hbWUoKSA9PSBtZW51
VGFnCisgICAgICAgIHx8IHRva2VuLm5hbWUoKSA9PSBuYXZUYWcKKyAgICAgICAgfHwgdG9rZW4u
bmFtZSgpID09IG9sVGFnCisgICAgICAgIHx8IHRva2VuLm5hbWUoKSA9PSBwVGFnCisgICAgICAg
IHx8IHRva2VuLm5hbWUoKSA9PSBzZWN0aW9uVGFnCisgICAgICAgIHx8IHRva2VuLm5hbWUoKSA9
PSBzdW1tYXJ5VGFnCisgICAgICAgIHx8IHRva2VuLm5hbWUoKSA9PSB1bFRhZykgewogICAgICAg
ICBwcm9jZXNzRmFrZVBFbmRUYWdJZlBJbkJ1dHRvblNjb3BlKCk7Ci0gICAgICAgIG1fdHJlZS5p
bnNlcnRIVE1MRWxlbWVudCh0b2tlbik7CisgICAgICAgIG1fdHJlZS5pbnNlcnRIVE1MRWxlbWVu
dCgmdG9rZW4pOwogICAgICAgICByZXR1cm47CiAgICAgfQotICAgIGlmIChpc051bWJlcmVkSGVh
ZGVyVGFnKHRva2VuLT5uYW1lKCkpKSB7CisgICAgaWYgKGlzTnVtYmVyZWRIZWFkZXJUYWcodG9r
ZW4ubmFtZSgpKSkgewogICAgICAgICBwcm9jZXNzRmFrZVBFbmRUYWdJZlBJbkJ1dHRvblNjb3Bl
KCk7CiAgICAgICAgIGlmIChtX3RyZWUuY3VycmVudFN0YWNrSXRlbSgpLT5pc051bWJlcmVkSGVh
ZGVyRWxlbWVudCgpKSB7CiAgICAgICAgICAgICBwYXJzZUVycm9yKHRva2VuKTsKICAgICAgICAg
ICAgIG1fdHJlZS5vcGVuRWxlbWVudHMoKS0+cG9wKCk7CiAgICAgICAgIH0KLSAgICAgICAgbV90
cmVlLmluc2VydEhUTUxFbGVtZW50KHRva2VuKTsKKyAgICAgICAgbV90cmVlLmluc2VydEhUTUxF
bGVtZW50KCZ0b2tlbik7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgaWYgKHRva2VuLT5u
YW1lKCkgPT0gcHJlVGFnIHx8IHRva2VuLT5uYW1lKCkgPT0gbGlzdGluZ1RhZykgeworICAgIGlm
ICh0b2tlbi5uYW1lKCkgPT0gcHJlVGFnIHx8IHRva2VuLm5hbWUoKSA9PSBsaXN0aW5nVGFnKSB7
CiAgICAgICAgIHByb2Nlc3NGYWtlUEVuZFRhZ0lmUEluQnV0dG9uU2NvcGUoKTsKLSAgICAgICAg
bV90cmVlLmluc2VydEhUTUxFbGVtZW50KHRva2VuKTsKKyAgICAgICAgbV90cmVlLmluc2VydEhU
TUxFbGVtZW50KCZ0b2tlbik7CiAgICAgICAgIG1fc2hvdWxkU2tpcExlYWRpbmdOZXdsaW5lID0g
dHJ1ZTsKICAgICAgICAgbV9mcmFtZXNldE9rID0gZmFsc2U7CiAgICAgICAgIHJldHVybjsKICAg
ICB9Ci0gICAgaWYgKHRva2VuLT5uYW1lKCkgPT0gZm9ybVRhZykgeworICAgIGlmICh0b2tlbi5u
YW1lKCkgPT0gZm9ybVRhZykgewogICAgICAgICBpZiAobV90cmVlLmZvcm0oKSAmJiAhaXNQYXJz
aW5nVGVtcGxhdGVDb250ZW50cygpKSB7CiAgICAgICAgICAgICBwYXJzZUVycm9yKHRva2VuKTsK
ICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgICAgICBwcm9jZXNzRmFrZVBFbmRU
YWdJZlBJbkJ1dHRvblNjb3BlKCk7Ci0gICAgICAgIG1fdHJlZS5pbnNlcnRIVE1MRm9ybUVsZW1l
bnQodG9rZW4pOworICAgICAgICBtX3RyZWUuaW5zZXJ0SFRNTEZvcm1FbGVtZW50KCZ0b2tlbik7
CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgaWYgKHRva2VuLT5uYW1lKCkgPT0gbGlUYWcp
IHsKKyAgICBpZiAodG9rZW4ubmFtZSgpID09IGxpVGFnKSB7CiAgICAgICAgIHByb2Nlc3NDbG9z
ZVdoZW5OZXN0ZWRUYWc8aXNMaT4odG9rZW4pOwogICAgICAgICByZXR1cm47CiAgICAgfQotICAg
IGlmICh0b2tlbi0+bmFtZSgpID09IGRkVGFnIHx8IHRva2VuLT5uYW1lKCkgPT0gZHRUYWcpIHsK
KyAgICBpZiAodG9rZW4ubmFtZSgpID09IGRkVGFnIHx8IHRva2VuLm5hbWUoKSA9PSBkdFRhZykg
ewogICAgICAgICBwcm9jZXNzQ2xvc2VXaGVuTmVzdGVkVGFnPGlzRGRPckR0Pih0b2tlbik7CiAg
ICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgaWYgKHRva2VuLT5uYW1lKCkgPT0gcGxhaW50ZXh0
VGFnKSB7CisgICAgaWYgKHRva2VuLm5hbWUoKSA9PSBwbGFpbnRleHRUYWcpIHsKICAgICAgICAg
cHJvY2Vzc0Zha2VQRW5kVGFnSWZQSW5CdXR0b25TY29wZSgpOwotICAgICAgICBtX3RyZWUuaW5z
ZXJ0SFRNTEVsZW1lbnQodG9rZW4pOworICAgICAgICBtX3RyZWUuaW5zZXJ0SFRNTEVsZW1lbnQo
JnRva2VuKTsKICAgICAgICAgaWYgKG1fcGFyc2VyLnRva2VuaXplcigpKQogICAgICAgICAgICAg
bV9wYXJzZXIudG9rZW5pemVyKCktPnNldFN0YXRlKEhUTUxUb2tlbml6ZXI6OlBMQUlOVEVYVFN0
YXRlKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBpZiAodG9rZW4tPm5hbWUoKSA9PSBi
dXR0b25UYWcpIHsKKyAgICBpZiAodG9rZW4ubmFtZSgpID09IGJ1dHRvblRhZykgewogICAgICAg
ICBpZiAobV90cmVlLm9wZW5FbGVtZW50cygpLT5pblNjb3BlKGJ1dHRvblRhZykpIHsKICAgICAg
ICAgICAgIHBhcnNlRXJyb3IodG9rZW4pOwogICAgICAgICAgICAgcHJvY2Vzc0Zha2VFbmRUYWco
YnV0dG9uVGFnKTsKQEAgLTcyNiwxMSArNzEwLDExIEBAIHZvaWQgSFRNTFRyZWVCdWlsZGVyOjpw
cm9jZXNzU3RhcnRUYWdGb3JJbkJvZHkoQXRvbWljSFRNTFRva2VuKiB0b2tlbikKICAgICAgICAg
ICAgIHJldHVybjsKICAgICAgICAgfQogICAgICAgICBtX3RyZWUucmVjb25zdHJ1Y3RUaGVBY3Rp
dmVGb3JtYXR0aW5nRWxlbWVudHMoKTsKLSAgICAgICAgbV90cmVlLmluc2VydEhUTUxFbGVtZW50
KHRva2VuKTsKKyAgICAgICAgbV90cmVlLmluc2VydEhUTUxFbGVtZW50KCZ0b2tlbik7CiAgICAg
ICAgIG1fZnJhbWVzZXRPayA9IGZhbHNlOwogICAgICAgICByZXR1cm47CiAgICAgfQotICAgIGlm
ICh0b2tlbi0+bmFtZSgpID09IGFUYWcpIHsKKyAgICBpZiAodG9rZW4ubmFtZSgpID09IGFUYWcp
IHsKICAgICAgICAgRWxlbWVudCogYWN0aXZlQVRhZyA9IG1fdHJlZS5hY3RpdmVGb3JtYXR0aW5n
RWxlbWVudHMoKS0+Y2xvc2VzdEVsZW1lbnRJblNjb3BlV2l0aE5hbWUoYVRhZy5sb2NhbE5hbWUo
KSk7CiAgICAgICAgIGlmIChhY3RpdmVBVGFnKSB7CiAgICAgICAgICAgICBwYXJzZUVycm9yKHRv
a2VuKTsKQEAgLTc0MCwxMjEgKzcyNCwxMTcgQEAgdm9pZCBIVE1MVHJlZUJ1aWxkZXI6OnByb2Nl
c3NTdGFydFRhZ0ZvckluQm9keShBdG9taWNIVE1MVG9rZW4qIHRva2VuKQogICAgICAgICAgICAg
ICAgIG1fdHJlZS5vcGVuRWxlbWVudHMoKS0+cmVtb3ZlKGFjdGl2ZUFUYWcpOwogICAgICAgICB9
CiAgICAgICAgIG1fdHJlZS5yZWNvbnN0cnVjdFRoZUFjdGl2ZUZvcm1hdHRpbmdFbGVtZW50cygp
OwotICAgICAgICBtX3RyZWUuaW5zZXJ0Rm9ybWF0dGluZ0VsZW1lbnQodG9rZW4pOworICAgICAg
ICBtX3RyZWUuaW5zZXJ0Rm9ybWF0dGluZ0VsZW1lbnQoJnRva2VuKTsKICAgICAgICAgcmV0dXJu
OwogICAgIH0KLSAgICBpZiAoaXNOb25BbmNob3JOb25Ob2JyRm9ybWF0dGluZ1RhZyh0b2tlbi0+
bmFtZSgpKSkgeworICAgIGlmIChpc05vbkFuY2hvck5vbk5vYnJGb3JtYXR0aW5nVGFnKHRva2Vu
Lm5hbWUoKSkpIHsKICAgICAgICAgbV90cmVlLnJlY29uc3RydWN0VGhlQWN0aXZlRm9ybWF0dGlu
Z0VsZW1lbnRzKCk7Ci0gICAgICAgIG1fdHJlZS5pbnNlcnRGb3JtYXR0aW5nRWxlbWVudCh0b2tl
bik7CisgICAgICAgIG1fdHJlZS5pbnNlcnRGb3JtYXR0aW5nRWxlbWVudCgmdG9rZW4pOwogICAg
ICAgICByZXR1cm47CiAgICAgfQotICAgIGlmICh0b2tlbi0+bmFtZSgpID09IG5vYnJUYWcpIHsK
KyAgICBpZiAodG9rZW4ubmFtZSgpID09IG5vYnJUYWcpIHsKICAgICAgICAgbV90cmVlLnJlY29u
c3RydWN0VGhlQWN0aXZlRm9ybWF0dGluZ0VsZW1lbnRzKCk7CiAgICAgICAgIGlmIChtX3RyZWUu
b3BlbkVsZW1lbnRzKCktPmluU2NvcGUobm9iclRhZykpIHsKICAgICAgICAgICAgIHBhcnNlRXJy
b3IodG9rZW4pOwogICAgICAgICAgICAgcHJvY2Vzc0Zha2VFbmRUYWcobm9iclRhZyk7CiAgICAg
ICAgICAgICBtX3RyZWUucmVjb25zdHJ1Y3RUaGVBY3RpdmVGb3JtYXR0aW5nRWxlbWVudHMoKTsK
ICAgICAgICAgfQotICAgICAgICBtX3RyZWUuaW5zZXJ0Rm9ybWF0dGluZ0VsZW1lbnQodG9rZW4p
OworICAgICAgICBtX3RyZWUuaW5zZXJ0Rm9ybWF0dGluZ0VsZW1lbnQoJnRva2VuKTsKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KLSAgICBpZiAodG9rZW4tPm5hbWUoKSA9PSBhcHBsZXRUYWcKLSAg
ICAgICAgfHwgdG9rZW4tPm5hbWUoKSA9PSBlbWJlZFRhZwotICAgICAgICB8fCB0b2tlbi0+bmFt
ZSgpID09IG9iamVjdFRhZykgeworICAgIGlmICh0b2tlbi5uYW1lKCkgPT0gYXBwbGV0VGFnIHx8
IHRva2VuLm5hbWUoKSA9PSBlbWJlZFRhZyB8fCB0b2tlbi5uYW1lKCkgPT0gb2JqZWN0VGFnKSB7
CiAgICAgICAgIGlmICghcGx1Z2luQ29udGVudElzQWxsb3dlZChtX3RyZWUucGFyc2VyQ29udGVu
dFBvbGljeSgpKSkKICAgICAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgaWYgKHRva2VuLT5u
YW1lKCkgPT0gYXBwbGV0VGFnCi0gICAgICAgIHx8IHRva2VuLT5uYW1lKCkgPT0gbWFycXVlZVRh
ZwotICAgICAgICB8fCB0b2tlbi0+bmFtZSgpID09IG9iamVjdFRhZykgeworICAgIGlmICh0b2tl
bi5uYW1lKCkgPT0gYXBwbGV0VGFnIHx8IHRva2VuLm5hbWUoKSA9PSBtYXJxdWVlVGFnIHx8IHRv
a2VuLm5hbWUoKSA9PSBvYmplY3RUYWcpIHsKICAgICAgICAgbV90cmVlLnJlY29uc3RydWN0VGhl
QWN0aXZlRm9ybWF0dGluZ0VsZW1lbnRzKCk7Ci0gICAgICAgIG1fdHJlZS5pbnNlcnRIVE1MRWxl
bWVudCh0b2tlbik7CisgICAgICAgIG1fdHJlZS5pbnNlcnRIVE1MRWxlbWVudCgmdG9rZW4pOwog
ICAgICAgICBtX3RyZWUuYWN0aXZlRm9ybWF0dGluZ0VsZW1lbnRzKCktPmFwcGVuZE1hcmtlcigp
OwogICAgICAgICBtX2ZyYW1lc2V0T2sgPSBmYWxzZTsKICAgICAgICAgcmV0dXJuOwogICAgIH0K
LSAgICBpZiAodG9rZW4tPm5hbWUoKSA9PSB0YWJsZVRhZykgeworICAgIGlmICh0b2tlbi5uYW1l
KCkgPT0gdGFibGVUYWcpIHsKICAgICAgICAgaWYgKCFtX3RyZWUuaW5RdWlya3NNb2RlKCkgJiYg
bV90cmVlLm9wZW5FbGVtZW50cygpLT5pbkJ1dHRvblNjb3BlKHBUYWcpKQogICAgICAgICAgICAg
cHJvY2Vzc0Zha2VFbmRUYWcocFRhZyk7Ci0gICAgICAgIG1fdHJlZS5pbnNlcnRIVE1MRWxlbWVu
dCh0b2tlbik7CisgICAgICAgIG1fdHJlZS5pbnNlcnRIVE1MRWxlbWVudCgmdG9rZW4pOwogICAg
ICAgICBtX2ZyYW1lc2V0T2sgPSBmYWxzZTsKLSAgICAgICAgc2V0SW5zZXJ0aW9uTW9kZShJbnNl
cnRpb25Nb2RlOjpJblRhYmxlKTsKKyAgICAgICAgbV9pbnNlcnRpb25Nb2RlID0gSW5zZXJ0aW9u
TW9kZTo6SW5UYWJsZTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBpZiAodG9rZW4tPm5h
bWUoKSA9PSBpbWFnZVRhZykgeworICAgIGlmICh0b2tlbi5uYW1lKCkgPT0gaW1hZ2VUYWcpIHsK
ICAgICAgICAgcGFyc2VFcnJvcih0b2tlbik7CiAgICAgICAgIC8vIEFwcGFyZW50bHkgd2UncmUg
bm90IHN1cHBvc2VkIHRvIGFzay4KLSAgICAgICAgdG9rZW4tPnNldE5hbWUoaW1nVGFnLmxvY2Fs
TmFtZSgpKTsKKyAgICAgICAgdG9rZW4uc2V0TmFtZShpbWdUYWcubG9jYWxOYW1lKCkpOwogICAg
ICAgICAvLyBOb3RlIHRoZSBmYWxsIHRocm91Z2ggdG8gdGhlIGltZ1RhZyBoYW5kbGluZyBiZWxv
dyEKICAgICB9Ci0gICAgaWYgKHRva2VuLT5uYW1lKCkgPT0gYXJlYVRhZwotICAgICAgICB8fCB0
b2tlbi0+bmFtZSgpID09IGJyVGFnCi0gICAgICAgIHx8IHRva2VuLT5uYW1lKCkgPT0gZW1iZWRU
YWcKLSAgICAgICAgfHwgdG9rZW4tPm5hbWUoKSA9PSBpbWdUYWcKLSAgICAgICAgfHwgdG9rZW4t
Pm5hbWUoKSA9PSBrZXlnZW5UYWcKLSAgICAgICAgfHwgdG9rZW4tPm5hbWUoKSA9PSB3YnJUYWcp
IHsKKyAgICBpZiAodG9rZW4ubmFtZSgpID09IGFyZWFUYWcKKyAgICAgICAgfHwgdG9rZW4ubmFt
ZSgpID09IGJyVGFnCisgICAgICAgIHx8IHRva2VuLm5hbWUoKSA9PSBlbWJlZFRhZworICAgICAg
ICB8fCB0b2tlbi5uYW1lKCkgPT0gaW1nVGFnCisgICAgICAgIHx8IHRva2VuLm5hbWUoKSA9PSBr
ZXlnZW5UYWcKKyAgICAgICAgfHwgdG9rZW4ubmFtZSgpID09IHdiclRhZykgewogICAgICAgICBt
X3RyZWUucmVjb25zdHJ1Y3RUaGVBY3RpdmVGb3JtYXR0aW5nRWxlbWVudHMoKTsKLSAgICAgICAg
bV90cmVlLmluc2VydFNlbGZDbG9zaW5nSFRNTEVsZW1lbnQodG9rZW4pOworICAgICAgICBtX3Ry
ZWUuaW5zZXJ0U2VsZkNsb3NpbmdIVE1MRWxlbWVudCgmdG9rZW4pOwogICAgICAgICBtX2ZyYW1l
c2V0T2sgPSBmYWxzZTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBpZiAodG9rZW4tPm5h
bWUoKSA9PSBpbnB1dFRhZykgewotICAgICAgICBBdHRyaWJ1dGUqIHR5cGVBdHRyaWJ1dGUgPSB0
b2tlbi0+Z2V0QXR0cmlidXRlSXRlbSh0eXBlQXR0cik7CisgICAgaWYgKHRva2VuLm5hbWUoKSA9
PSBpbnB1dFRhZykgeworICAgICAgICBBdHRyaWJ1dGUqIHR5cGVBdHRyaWJ1dGUgPSB0b2tlbi5n
ZXRBdHRyaWJ1dGVJdGVtKHR5cGVBdHRyKTsKICAgICAgICAgbV90cmVlLnJlY29uc3RydWN0VGhl
QWN0aXZlRm9ybWF0dGluZ0VsZW1lbnRzKCk7Ci0gICAgICAgIG1fdHJlZS5pbnNlcnRTZWxmQ2xv
c2luZ0hUTUxFbGVtZW50KHRva2VuKTsKKyAgICAgICAgbV90cmVlLmluc2VydFNlbGZDbG9zaW5n
SFRNTEVsZW1lbnQoJnRva2VuKTsKICAgICAgICAgaWYgKCF0eXBlQXR0cmlidXRlIHx8ICFlcXVh
bElnbm9yaW5nQ2FzZSh0eXBlQXR0cmlidXRlLT52YWx1ZSgpLCAiaGlkZGVuIikpCiAgICAgICAg
ICAgICBtX2ZyYW1lc2V0T2sgPSBmYWxzZTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBp
ZiAodG9rZW4tPm5hbWUoKSA9PSBwYXJhbVRhZwotICAgICAgICB8fCB0b2tlbi0+bmFtZSgpID09
IHNvdXJjZVRhZwotICAgICAgICB8fCB0b2tlbi0+bmFtZSgpID09IHRyYWNrVGFnKSB7Ci0gICAg
ICAgIG1fdHJlZS5pbnNlcnRTZWxmQ2xvc2luZ0hUTUxFbGVtZW50KHRva2VuKTsKKyAgICBpZiAo
dG9rZW4ubmFtZSgpID09IHBhcmFtVGFnCisgICAgICAgIHx8IHRva2VuLm5hbWUoKSA9PSBzb3Vy
Y2VUYWcKKyAgICAgICAgfHwgdG9rZW4ubmFtZSgpID09IHRyYWNrVGFnKSB7CisgICAgICAgIG1f
dHJlZS5pbnNlcnRTZWxmQ2xvc2luZ0hUTUxFbGVtZW50KCZ0b2tlbik7CiAgICAgICAgIHJldHVy
bjsKICAgICB9Ci0gICAgaWYgKHRva2VuLT5uYW1lKCkgPT0gaHJUYWcpIHsKKyAgICBpZiAodG9r
ZW4ubmFtZSgpID09IGhyVGFnKSB7CiAgICAgICAgIHByb2Nlc3NGYWtlUEVuZFRhZ0lmUEluQnV0
dG9uU2NvcGUoKTsKLSAgICAgICAgbV90cmVlLmluc2VydFNlbGZDbG9zaW5nSFRNTEVsZW1lbnQo
dG9rZW4pOworICAgICAgICBtX3RyZWUuaW5zZXJ0U2VsZkNsb3NpbmdIVE1MRWxlbWVudCgmdG9r
ZW4pOwogICAgICAgICBtX2ZyYW1lc2V0T2sgPSBmYWxzZTsKICAgICAgICAgcmV0dXJuOwogICAg
IH0KLSAgICBpZiAodG9rZW4tPm5hbWUoKSA9PSBpc2luZGV4VGFnKSB7CisgICAgaWYgKHRva2Vu
Lm5hbWUoKSA9PSBpc2luZGV4VGFnKSB7CiAgICAgICAgIHByb2Nlc3NJc2luZGV4U3RhcnRUYWdG
b3JJbkJvZHkodG9rZW4pOwogICAgICAgICByZXR1cm47CiAgICAgfQotICAgIGlmICh0b2tlbi0+
bmFtZSgpID09IHRleHRhcmVhVGFnKSB7Ci0gICAgICAgIG1fdHJlZS5pbnNlcnRIVE1MRWxlbWVu
dCh0b2tlbik7CisgICAgaWYgKHRva2VuLm5hbWUoKSA9PSB0ZXh0YXJlYVRhZykgeworICAgICAg
ICBtX3RyZWUuaW5zZXJ0SFRNTEVsZW1lbnQoJnRva2VuKTsKICAgICAgICAgbV9zaG91bGRTa2lw
TGVhZGluZ05ld2xpbmUgPSB0cnVlOwogICAgICAgICBpZiAobV9wYXJzZXIudG9rZW5pemVyKCkp
CiAgICAgICAgICAgICBtX3BhcnNlci50b2tlbml6ZXIoKS0+c2V0U3RhdGUoSFRNTFRva2VuaXpl
cjo6UkNEQVRBU3RhdGUpOwogICAgICAgICBtX29yaWdpbmFsSW5zZXJ0aW9uTW9kZSA9IG1faW5z
ZXJ0aW9uTW9kZTsKICAgICAgICAgbV9mcmFtZXNldE9rID0gZmFsc2U7Ci0gICAgICAgIHNldElu
c2VydGlvbk1vZGUoSW5zZXJ0aW9uTW9kZTo6VGV4dCk7CisgICAgICAgIG1faW5zZXJ0aW9uTW9k
ZSA9IEluc2VydGlvbk1vZGU6OlRleHQ7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgaWYg
KHRva2VuLT5uYW1lKCkgPT0geG1wVGFnKSB7CisgICAgaWYgKHRva2VuLm5hbWUoKSA9PSB4bXBU
YWcpIHsKICAgICAgICAgcHJvY2Vzc0Zha2VQRW5kVGFnSWZQSW5CdXR0b25TY29wZSgpOwogICAg
ICAgICBtX3RyZWUucmVjb25zdHJ1Y3RUaGVBY3RpdmVGb3JtYXR0aW5nRWxlbWVudHMoKTsKICAg
ICAgICAgbV9mcmFtZXNldE9rID0gZmFsc2U7CiAgICAgICAgIHByb2Nlc3NHZW5lcmljUmF3VGV4
dFN0YXJ0VGFnKHRva2VuKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBpZiAodG9rZW4t
Pm5hbWUoKSA9PSBpZnJhbWVUYWcpIHsKKyAgICBpZiAodG9rZW4ubmFtZSgpID09IGlmcmFtZVRh
ZykgewogICAgICAgICBtX2ZyYW1lc2V0T2sgPSBmYWxzZTsKICAgICAgICAgcHJvY2Vzc0dlbmVy
aWNSYXdUZXh0U3RhcnRUYWcodG9rZW4pOwogICAgICAgICByZXR1cm47CiAgICAgfQotICAgIGlm
ICh0b2tlbi0+bmFtZSgpID09IG5vZW1iZWRUYWcgJiYgbV9vcHRpb25zLnBsdWdpbnNFbmFibGVk
KSB7CisgICAgaWYgKHRva2VuLm5hbWUoKSA9PSBub2VtYmVkVGFnICYmIG1fb3B0aW9ucy5wbHVn
aW5zRW5hYmxlZCkgewogICAgICAgICBwcm9jZXNzR2VuZXJpY1Jhd1RleHRTdGFydFRhZyh0b2tl
bik7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgaWYgKHRva2VuLT5uYW1lKCkgPT0gbm9z
Y3JpcHRUYWcgJiYgbV9vcHRpb25zLnNjcmlwdEVuYWJsZWQpIHsKKyAgICBpZiAodG9rZW4ubmFt
ZSgpID09IG5vc2NyaXB0VGFnICYmIG1fb3B0aW9ucy5zY3JpcHRFbmFibGVkKSB7CiAgICAgICAg
IHByb2Nlc3NHZW5lcmljUmF3VGV4dFN0YXJ0VGFnKHRva2VuKTsKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KLSAgICBpZiAodG9rZW4tPm5hbWUoKSA9PSBzZWxlY3RUYWcpIHsKKyAgICBpZiAodG9r
ZW4ubmFtZSgpID09IHNlbGVjdFRhZykgewogICAgICAgICBtX3RyZWUucmVjb25zdHJ1Y3RUaGVB
Y3RpdmVGb3JtYXR0aW5nRWxlbWVudHMoKTsKLSAgICAgICAgbV90cmVlLmluc2VydEhUTUxFbGVt
ZW50KHRva2VuKTsKKyAgICAgICAgbV90cmVlLmluc2VydEhUTUxFbGVtZW50KCZ0b2tlbik7CiAg
ICAgICAgIG1fZnJhbWVzZXRPayA9IGZhbHNlOwogICAgICAgICBpZiAobV9pbnNlcnRpb25Nb2Rl
ID09IEluc2VydGlvbk1vZGU6OkluVGFibGUKICAgICAgICAgICAgIHx8IG1faW5zZXJ0aW9uTW9k
ZSA9PSBJbnNlcnRpb25Nb2RlOjpJbkNhcHRpb24KQEAgLTg2Miw4NSArODQyLDg2IEBAIHZvaWQg
SFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNzU3RhcnRUYWdGb3JJbkJvZHkoQXRvbWljSFRNTFRva2Vu
KiB0b2tlbikKICAgICAgICAgICAgIHx8IG1faW5zZXJ0aW9uTW9kZSA9PSBJbnNlcnRpb25Nb2Rl
OjpJblRhYmxlQm9keQogICAgICAgICAgICAgfHwgbV9pbnNlcnRpb25Nb2RlID09IEluc2VydGlv
bk1vZGU6OkluUm93CiAgICAgICAgICAgICB8fCBtX2luc2VydGlvbk1vZGUgPT0gSW5zZXJ0aW9u
TW9kZTo6SW5DZWxsKQotICAgICAgICAgICAgc2V0SW5zZXJ0aW9uTW9kZShJbnNlcnRpb25Nb2Rl
OjpJblNlbGVjdEluVGFibGUpOworICAgICAgICAgICAgbV9pbnNlcnRpb25Nb2RlID0gSW5zZXJ0
aW9uTW9kZTo6SW5TZWxlY3RJblRhYmxlOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBzZXRJ
bnNlcnRpb25Nb2RlKEluc2VydGlvbk1vZGU6OkluU2VsZWN0KTsKKyAgICAgICAgICAgIG1faW5z
ZXJ0aW9uTW9kZSA9IEluc2VydGlvbk1vZGU6OkluU2VsZWN0OwogICAgICAgICByZXR1cm47CiAg
ICAgfQotICAgIGlmICh0b2tlbi0+bmFtZSgpID09IG9wdGdyb3VwVGFnIHx8IHRva2VuLT5uYW1l
KCkgPT0gb3B0aW9uVGFnKSB7CisgICAgaWYgKHRva2VuLm5hbWUoKSA9PSBvcHRncm91cFRhZyB8
fCB0b2tlbi5uYW1lKCkgPT0gb3B0aW9uVGFnKSB7CiAgICAgICAgIGlmIChpczxIVE1MT3B0aW9u
RWxlbWVudD4oKm1fdHJlZS5jdXJyZW50U3RhY2tJdGVtKCktPm5vZGUoKSkpIHsKICAgICAgICAg
ICAgIEF0b21pY0hUTUxUb2tlbiBlbmRPcHRpb24oSFRNTFRva2VuOjpFbmRUYWcsIG9wdGlvblRh
Zy5sb2NhbE5hbWUoKSk7Ci0gICAgICAgICAgICBwcm9jZXNzRW5kVGFnKCZlbmRPcHRpb24pOwor
ICAgICAgICAgICAgcHJvY2Vzc0VuZFRhZyhlbmRPcHRpb24pOwogICAgICAgICB9CiAgICAgICAg
IG1fdHJlZS5yZWNvbnN0cnVjdFRoZUFjdGl2ZUZvcm1hdHRpbmdFbGVtZW50cygpOwotICAgICAg
ICBtX3RyZWUuaW5zZXJ0SFRNTEVsZW1lbnQodG9rZW4pOworICAgICAgICBtX3RyZWUuaW5zZXJ0
SFRNTEVsZW1lbnQoJnRva2VuKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBpZiAodG9r
ZW4tPm5hbWUoKSA9PSByYlRhZyB8fCB0b2tlbi0+bmFtZSgpID09IHJ0Y1RhZykgeworICAgIGlm
ICh0b2tlbi5uYW1lKCkgPT0gcmJUYWcgfHwgdG9rZW4ubmFtZSgpID09IHJ0Y1RhZykgewogICAg
ICAgICBpZiAobV90cmVlLm9wZW5FbGVtZW50cygpLT5pblNjb3BlKHJ1YnlUYWcubG9jYWxOYW1l
KCkpKSB7CiAgICAgICAgICAgICBtX3RyZWUuZ2VuZXJhdGVJbXBsaWVkRW5kVGFncygpOwogICAg
ICAgICAgICAgaWYgKCFtX3RyZWUuY3VycmVudFN0YWNrSXRlbSgpLT5oYXNUYWdOYW1lKHJ1YnlU
YWcpKQogICAgICAgICAgICAgICAgIHBhcnNlRXJyb3IodG9rZW4pOwogICAgICAgICB9Ci0gICAg
ICAgIG1fdHJlZS5pbnNlcnRIVE1MRWxlbWVudCh0b2tlbik7CisgICAgICAgIG1fdHJlZS5pbnNl
cnRIVE1MRWxlbWVudCgmdG9rZW4pOwogICAgICAgICByZXR1cm47CiAgICAgfQotICAgIGlmICh0
b2tlbi0+bmFtZSgpID09IHJ0VGFnIHx8IHRva2VuLT5uYW1lKCkgPT0gcnBUYWcpIHsKKyAgICBp
ZiAodG9rZW4ubmFtZSgpID09IHJ0VGFnIHx8IHRva2VuLm5hbWUoKSA9PSBycFRhZykgewogICAg
ICAgICBpZiAobV90cmVlLm9wZW5FbGVtZW50cygpLT5pblNjb3BlKHJ1YnlUYWcubG9jYWxOYW1l
KCkpKSB7CiAgICAgICAgICAgICBtX3RyZWUuZ2VuZXJhdGVJbXBsaWVkRW5kVGFnc1dpdGhFeGNs
dXNpb24ocnRjVGFnLmxvY2FsTmFtZSgpKTsKICAgICAgICAgICAgIGlmICghbV90cmVlLmN1cnJl
bnRTdGFja0l0ZW0oKS0+aGFzVGFnTmFtZShydWJ5VGFnKSAmJiAhbV90cmVlLmN1cnJlbnRTdGFj
a0l0ZW0oKS0+aGFzVGFnTmFtZShydGNUYWcpKQogICAgICAgICAgICAgICAgIHBhcnNlRXJyb3Io
dG9rZW4pOwogICAgICAgICB9Ci0gICAgICAgIG1fdHJlZS5pbnNlcnRIVE1MRWxlbWVudCh0b2tl
bik7CisgICAgICAgIG1fdHJlZS5pbnNlcnRIVE1MRWxlbWVudCgmdG9rZW4pOwogICAgICAgICBy
ZXR1cm47CiAgICAgfQotICAgIGlmICh0b2tlbi0+bmFtZSgpID09IE1hdGhNTE5hbWVzOjptYXRo
VGFnLmxvY2FsTmFtZSgpKSB7CisgICAgaWYgKHRva2VuLm5hbWUoKSA9PSBNYXRoTUxOYW1lczo6
bWF0aFRhZy5sb2NhbE5hbWUoKSkgewogICAgICAgICBtX3RyZWUucmVjb25zdHJ1Y3RUaGVBY3Rp
dmVGb3JtYXR0aW5nRWxlbWVudHMoKTsKLSAgICAgICAgYWRqdXN0TWF0aE1MQXR0cmlidXRlcygq
dG9rZW4pOwotICAgICAgICBhZGp1c3RGb3JlaWduQXR0cmlidXRlcygqdG9rZW4pOwotICAgICAg
ICBtX3RyZWUuaW5zZXJ0Rm9yZWlnbkVsZW1lbnQodG9rZW4sIE1hdGhNTE5hbWVzOjptYXRobWxO
YW1lc3BhY2VVUkkpOworICAgICAgICBhZGp1c3RNYXRoTUxBdHRyaWJ1dGVzKHRva2VuKTsKKyAg
ICAgICAgYWRqdXN0Rm9yZWlnbkF0dHJpYnV0ZXModG9rZW4pOworICAgICAgICBtX3RyZWUuaW5z
ZXJ0Rm9yZWlnbkVsZW1lbnQoJnRva2VuLCBNYXRoTUxOYW1lczo6bWF0aG1sTmFtZXNwYWNlVVJJ
KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBpZiAodG9rZW4tPm5hbWUoKSA9PSBTVkdO
YW1lczo6c3ZnVGFnLmxvY2FsTmFtZSgpKSB7CisgICAgaWYgKHRva2VuLm5hbWUoKSA9PSBTVkdO
YW1lczo6c3ZnVGFnLmxvY2FsTmFtZSgpKSB7CiAgICAgICAgIG1fdHJlZS5yZWNvbnN0cnVjdFRo
ZUFjdGl2ZUZvcm1hdHRpbmdFbGVtZW50cygpOwotICAgICAgICBhZGp1c3RTVkdBdHRyaWJ1dGVz
KCp0b2tlbik7Ci0gICAgICAgIGFkanVzdEZvcmVpZ25BdHRyaWJ1dGVzKCp0b2tlbik7Ci0gICAg
ICAgIG1fdHJlZS5pbnNlcnRGb3JlaWduRWxlbWVudCh0b2tlbiwgU1ZHTmFtZXM6OnN2Z05hbWVz
cGFjZVVSSSk7CisgICAgICAgIGFkanVzdFNWR0F0dHJpYnV0ZXModG9rZW4pOworICAgICAgICBh
ZGp1c3RGb3JlaWduQXR0cmlidXRlcyh0b2tlbik7CisgICAgICAgIG1fdHJlZS5pbnNlcnRGb3Jl
aWduRWxlbWVudCgmdG9rZW4sIFNWR05hbWVzOjpzdmdOYW1lc3BhY2VVUkkpOwogICAgICAgICBy
ZXR1cm47CiAgICAgfQotICAgIGlmIChpc0NhcHRpb25Db2xPckNvbGdyb3VwVGFnKHRva2VuLT5u
YW1lKCkpCi0gICAgICAgIHx8IHRva2VuLT5uYW1lKCkgPT0gZnJhbWVUYWcKLSAgICAgICAgfHwg
dG9rZW4tPm5hbWUoKSA9PSBoZWFkVGFnCi0gICAgICAgIHx8IGlzVGFibGVCb2R5Q29udGV4dFRh
Zyh0b2tlbi0+bmFtZSgpKQotICAgICAgICB8fCBpc1RhYmxlQ2VsbENvbnRleHRUYWcodG9rZW4t
Pm5hbWUoKSkKLSAgICAgICAgfHwgdG9rZW4tPm5hbWUoKSA9PSB0clRhZykgeworICAgIGlmIChp
c0NhcHRpb25Db2xPckNvbGdyb3VwVGFnKHRva2VuLm5hbWUoKSkKKyAgICAgICAgfHwgdG9rZW4u
bmFtZSgpID09IGZyYW1lVGFnCisgICAgICAgIHx8IHRva2VuLm5hbWUoKSA9PSBoZWFkVGFnCisg
ICAgICAgIHx8IGlzVGFibGVCb2R5Q29udGV4dFRhZyh0b2tlbi5uYW1lKCkpCisgICAgICAgIHx8
IGlzVGFibGVDZWxsQ29udGV4dFRhZyh0b2tlbi5uYW1lKCkpCisgICAgICAgIHx8IHRva2VuLm5h
bWUoKSA9PSB0clRhZykgewogICAgICAgICBwYXJzZUVycm9yKHRva2VuKTsKICAgICAgICAgcmV0
dXJuOwogICAgIH0KICNpZiBFTkFCTEUoVEVNUExBVEVfRUxFTUVOVCkKLSAgICBpZiAodG9rZW4t
Pm5hbWUoKSA9PSB0ZW1wbGF0ZVRhZykgeworICAgIGlmICh0b2tlbi5uYW1lKCkgPT0gdGVtcGxh
dGVUYWcpIHsKICAgICAgICAgcHJvY2Vzc1RlbXBsYXRlU3RhcnRUYWcodG9rZW4pOwogICAgICAg
ICByZXR1cm47CiAgICAgfQogI2VuZGlmCiAgICAgbV90cmVlLnJlY29uc3RydWN0VGhlQWN0aXZl
Rm9ybWF0dGluZ0VsZW1lbnRzKCk7Ci0gICAgbV90cmVlLmluc2VydEhUTUxFbGVtZW50KHRva2Vu
KTsKKyAgICBtX3RyZWUuaW5zZXJ0SFRNTEVsZW1lbnQoJnRva2VuKTsKIH0KIAogI2lmIEVOQUJM
RShURU1QTEFURV9FTEVNRU5UKQotdm9pZCBIVE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NUZW1wbGF0
ZVN0YXJ0VGFnKEF0b21pY0hUTUxUb2tlbiogdG9rZW4pCisKK3ZvaWQgSFRNTFRyZWVCdWlsZGVy
Ojpwcm9jZXNzVGVtcGxhdGVTdGFydFRhZyhBdG9taWNIVE1MVG9rZW4mIHRva2VuKQogewogICAg
IG1fdHJlZS5hY3RpdmVGb3JtYXR0aW5nRWxlbWVudHMoKS0+YXBwZW5kTWFya2VyKCk7Ci0gICAg
bV90cmVlLmluc2VydEhUTUxFbGVtZW50KHRva2VuKTsKKyAgICBtX3RyZWUuaW5zZXJ0SFRNTEVs
ZW1lbnQoJnRva2VuKTsKICAgICBtX3RlbXBsYXRlSW5zZXJ0aW9uTW9kZXMuYXBwZW5kKEluc2Vy
dGlvbk1vZGU6OlRlbXBsYXRlQ29udGVudHMpOwotICAgIHNldEluc2VydGlvbk1vZGUoSW5zZXJ0
aW9uTW9kZTo6VGVtcGxhdGVDb250ZW50cyk7CisgICAgbV9pbnNlcnRpb25Nb2RlID0gSW5zZXJ0
aW9uTW9kZTo6VGVtcGxhdGVDb250ZW50czsKIH0KIAotYm9vbCBIVE1MVHJlZUJ1aWxkZXI6OnBy
b2Nlc3NUZW1wbGF0ZUVuZFRhZyhBdG9taWNIVE1MVG9rZW4qIHRva2VuKQorYm9vbCBIVE1MVHJl
ZUJ1aWxkZXI6OnByb2Nlc3NUZW1wbGF0ZUVuZFRhZyhBdG9taWNIVE1MVG9rZW4mIHRva2VuKQog
ewotICAgIEFTU0VSVCh0b2tlbi0+bmFtZSgpID09IHRlbXBsYXRlVGFnLmxvY2FsTmFtZSgpKTsK
KyAgICBBU1NFUlQodG9rZW4ubmFtZSgpID09IHRlbXBsYXRlVGFnLmxvY2FsTmFtZSgpKTsKICAg
ICBpZiAoIW1fdHJlZS5vcGVuRWxlbWVudHMoKS0+aGFzVGVtcGxhdGVJbkhUTUxTY29wZSgpKSB7
Ci0gICAgICAgIEFTU0VSVChtX3RlbXBsYXRlSW5zZXJ0aW9uTW9kZXMuaXNFbXB0eSgpIHx8ICht
X3RlbXBsYXRlSW5zZXJ0aW9uTW9kZXMuc2l6ZSgpID09IDEgJiYgbV9mcmFnbWVudENvbnRleHQu
Y29udGV4dEVsZW1lbnQoKS0+aGFzVGFnTmFtZSh0ZW1wbGF0ZVRhZykpKTsKKyAgICAgICAgQVNT
RVJUKG1fdGVtcGxhdGVJbnNlcnRpb25Nb2Rlcy5pc0VtcHR5KCkgfHwgKG1fdGVtcGxhdGVJbnNl
cnRpb25Nb2Rlcy5zaXplKCkgPT0gMSAmJiBtX2ZyYWdtZW50Q29udGV4dC5jb250ZXh0RWxlbWVu
dCgpLmhhc1RhZ05hbWUodGVtcGxhdGVUYWcpKSk7CiAgICAgICAgIHBhcnNlRXJyb3IodG9rZW4p
OwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQpAQCAtOTU0LDE1ICs5MzUsMTYgQEAgYm9v
bCBIVE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NUZW1wbGF0ZUVuZFRhZyhBdG9taWNIVE1MVG9rZW4q
IHRva2VuKQogICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIEhUTUxUcmVlQnVpbGRlcjo6cHJv
Y2Vzc0VuZE9mRmlsZUZvckluVGVtcGxhdGVDb250ZW50cyhBdG9taWNIVE1MVG9rZW4qIHRva2Vu
KQorYm9vbCBIVE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NFbmRPZkZpbGVGb3JJblRlbXBsYXRlQ29u
dGVudHMoQXRvbWljSFRNTFRva2VuJiB0b2tlbikKIHsKICAgICBBdG9taWNIVE1MVG9rZW4gZW5k
VGVtcGxhdGUoSFRNTFRva2VuOjpFbmRUYWcsIHRlbXBsYXRlVGFnLmxvY2FsTmFtZSgpKTsKLSAg
ICBpZiAoIXByb2Nlc3NUZW1wbGF0ZUVuZFRhZygmZW5kVGVtcGxhdGUpKQorICAgIGlmICghcHJv
Y2Vzc1RlbXBsYXRlRW5kVGFnKGVuZFRlbXBsYXRlKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
CiAgICAgcHJvY2Vzc0VuZE9mRmlsZSh0b2tlbik7CiAgICAgcmV0dXJuIHRydWU7CiB9CisKICNl
bmRpZgogCiBib29sIEhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc0NvbGdyb3VwRW5kVGFnRm9ySW5D
b2x1bW5Hcm91cCgpCkBAIC05NzgsMTQgKzk2MCwxNCBAQCBib29sIEhUTUxUcmVlQnVpbGRlcjo6
cHJvY2Vzc0NvbGdyb3VwRW5kVGFnRm9ySW5Db2x1bW5Hcm91cCgpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKICAgICB9CiAgICAgbV90cmVlLm9wZW5FbGVtZW50cygpLT5wb3AoKTsKLSAgICBzZXRJ
bnNlcnRpb25Nb2RlKEluc2VydGlvbk1vZGU6OkluVGFibGUpOworICAgIG1faW5zZXJ0aW9uTW9k
ZSA9IEluc2VydGlvbk1vZGU6OkluVGFibGU7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKIC8vIGh0
dHA6Ly93d3cud2hhdHdnLm9yZy9zcGVjcy93ZWItYXBwcy9jdXJyZW50LXdvcmsvbXVsdGlwYWdl
L3Rva2VuaXphdGlvbi5odG1sI2Nsb3NlLXRoZS1jZWxsCiB2b2lkIEhUTUxUcmVlQnVpbGRlcjo6
Y2xvc2VUaGVDZWxsKCkKIHsKLSAgICBBU1NFUlQoaW5zZXJ0aW9uTW9kZSgpID09IEluc2VydGlv
bk1vZGU6OkluQ2VsbCk7CisgICAgQVNTRVJUKG1faW5zZXJ0aW9uTW9kZSA9PSBJbnNlcnRpb25N
b2RlOjpJbkNlbGwpOwogICAgIGlmIChtX3RyZWUub3BlbkVsZW1lbnRzKCktPmluVGFibGVTY29w
ZSh0ZFRhZykpIHsKICAgICAgICAgQVNTRVJUKCFtX3RyZWUub3BlbkVsZW1lbnRzKCktPmluVGFi
bGVTY29wZSh0aFRhZykpOwogICAgICAgICBwcm9jZXNzRmFrZUVuZFRhZyh0ZFRhZyk7CkBAIC05
OTMsNDUgKzk3NSw0NSBAQCB2b2lkIEhUTUxUcmVlQnVpbGRlcjo6Y2xvc2VUaGVDZWxsKCkKICAg
ICB9CiAgICAgQVNTRVJUKG1fdHJlZS5vcGVuRWxlbWVudHMoKS0+aW5UYWJsZVNjb3BlKHRoVGFn
KSk7CiAgICAgcHJvY2Vzc0Zha2VFbmRUYWcodGhUYWcpOwotICAgIEFTU0VSVChpbnNlcnRpb25N
b2RlKCkgPT0gSW5zZXJ0aW9uTW9kZTo6SW5Sb3cpOworICAgIEFTU0VSVChtX2luc2VydGlvbk1v
ZGUgPT0gSW5zZXJ0aW9uTW9kZTo6SW5Sb3cpOwogfQogCi12b2lkIEhUTUxUcmVlQnVpbGRlcjo6
cHJvY2Vzc1N0YXJ0VGFnRm9ySW5UYWJsZShBdG9taWNIVE1MVG9rZW4qIHRva2VuKQordm9pZCBI
VE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NTdGFydFRhZ0ZvckluVGFibGUoQXRvbWljSFRNTFRva2Vu
JiB0b2tlbikKIHsKLSAgICBBU1NFUlQodG9rZW4tPnR5cGUoKSA9PSBIVE1MVG9rZW46OlN0YXJ0
VGFnKTsKLSAgICBpZiAodG9rZW4tPm5hbWUoKSA9PSBjYXB0aW9uVGFnKSB7CisgICAgQVNTRVJU
KHRva2VuLnR5cGUoKSA9PSBIVE1MVG9rZW46OlN0YXJ0VGFnKTsKKyAgICBpZiAodG9rZW4ubmFt
ZSgpID09IGNhcHRpb25UYWcpIHsKICAgICAgICAgbV90cmVlLm9wZW5FbGVtZW50cygpLT5wb3BV
bnRpbFRhYmxlU2NvcGVNYXJrZXIoKTsKICAgICAgICAgbV90cmVlLmFjdGl2ZUZvcm1hdHRpbmdF
bGVtZW50cygpLT5hcHBlbmRNYXJrZXIoKTsKLSAgICAgICAgbV90cmVlLmluc2VydEhUTUxFbGVt
ZW50KHRva2VuKTsKLSAgICAgICAgc2V0SW5zZXJ0aW9uTW9kZShJbnNlcnRpb25Nb2RlOjpJbkNh
cHRpb24pOworICAgICAgICBtX3RyZWUuaW5zZXJ0SFRNTEVsZW1lbnQoJnRva2VuKTsKKyAgICAg
ICAgbV9pbnNlcnRpb25Nb2RlID0gSW5zZXJ0aW9uTW9kZTo6SW5DYXB0aW9uOwogICAgICAgICBy
ZXR1cm47CiAgICAgfQotICAgIGlmICh0b2tlbi0+bmFtZSgpID09IGNvbGdyb3VwVGFnKSB7Cisg
ICAgaWYgKHRva2VuLm5hbWUoKSA9PSBjb2xncm91cFRhZykgewogICAgICAgICBtX3RyZWUub3Bl
bkVsZW1lbnRzKCktPnBvcFVudGlsVGFibGVTY29wZU1hcmtlcigpOwotICAgICAgICBtX3RyZWUu
aW5zZXJ0SFRNTEVsZW1lbnQodG9rZW4pOwotICAgICAgICBzZXRJbnNlcnRpb25Nb2RlKEluc2Vy
dGlvbk1vZGU6OkluQ29sdW1uR3JvdXApOworICAgICAgICBtX3RyZWUuaW5zZXJ0SFRNTEVsZW1l
bnQoJnRva2VuKTsKKyAgICAgICAgbV9pbnNlcnRpb25Nb2RlID0gSW5zZXJ0aW9uTW9kZTo6SW5D
b2x1bW5Hcm91cDsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBpZiAodG9rZW4tPm5hbWUo
KSA9PSBjb2xUYWcpIHsKKyAgICBpZiAodG9rZW4ubmFtZSgpID09IGNvbFRhZykgewogICAgICAg
ICBwcm9jZXNzRmFrZVN0YXJ0VGFnKGNvbGdyb3VwVGFnKTsKLSAgICAgICAgQVNTRVJUKGluc2Vy
dGlvbk1vZGUoKSA9PSBJbnNlcnRpb25Nb2RlOjpJbkNvbHVtbkdyb3VwKTsKKyAgICAgICAgQVNT
RVJUKG1faW5zZXJ0aW9uTW9kZSA9PSBJbnNlcnRpb25Nb2RlOjpJbkNvbHVtbkdyb3VwKTsKICAg
ICAgICAgcHJvY2Vzc1N0YXJ0VGFnKHRva2VuKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAg
ICBpZiAoaXNUYWJsZUJvZHlDb250ZXh0VGFnKHRva2VuLT5uYW1lKCkpKSB7CisgICAgaWYgKGlz
VGFibGVCb2R5Q29udGV4dFRhZyh0b2tlbi5uYW1lKCkpKSB7CiAgICAgICAgIG1fdHJlZS5vcGVu
RWxlbWVudHMoKS0+cG9wVW50aWxUYWJsZVNjb3BlTWFya2VyKCk7Ci0gICAgICAgIG1fdHJlZS5p
bnNlcnRIVE1MRWxlbWVudCh0b2tlbik7Ci0gICAgICAgIHNldEluc2VydGlvbk1vZGUoSW5zZXJ0
aW9uTW9kZTo6SW5UYWJsZUJvZHkpOworICAgICAgICBtX3RyZWUuaW5zZXJ0SFRNTEVsZW1lbnQo
JnRva2VuKTsKKyAgICAgICAgbV9pbnNlcnRpb25Nb2RlID0gSW5zZXJ0aW9uTW9kZTo6SW5UYWJs
ZUJvZHk7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgaWYgKGlzVGFibGVDZWxsQ29udGV4
dFRhZyh0b2tlbi0+bmFtZSgpKQotICAgICAgICB8fCB0b2tlbi0+bmFtZSgpID09IHRyVGFnKSB7
CisgICAgaWYgKGlzVGFibGVDZWxsQ29udGV4dFRhZyh0b2tlbi5uYW1lKCkpCisgICAgICAgIHx8
IHRva2VuLm5hbWUoKSA9PSB0clRhZykgewogICAgICAgICBwcm9jZXNzRmFrZVN0YXJ0VGFnKHRi
b2R5VGFnKTsKLSAgICAgICAgQVNTRVJUKGluc2VydGlvbk1vZGUoKSA9PSBJbnNlcnRpb25Nb2Rl
OjpJblRhYmxlQm9keSk7CisgICAgICAgIEFTU0VSVChtX2luc2VydGlvbk1vZGUgPT0gSW5zZXJ0
aW9uTW9kZTo6SW5UYWJsZUJvZHkpOwogICAgICAgICBwcm9jZXNzU3RhcnRUYWcodG9rZW4pOwog
ICAgICAgICByZXR1cm47CiAgICAgfQotICAgIGlmICh0b2tlbi0+bmFtZSgpID09IHRhYmxlVGFn
KSB7CisgICAgaWYgKHRva2VuLm5hbWUoKSA9PSB0YWJsZVRhZykgewogICAgICAgICBwYXJzZUVy
cm9yKHRva2VuKTsKICAgICAgICAgaWYgKCFwcm9jZXNzVGFibGVFbmRUYWdGb3JJblRhYmxlKCkp
IHsKICAgICAgICAgICAgIEFTU0VSVChpc1BhcnNpbmdGcmFnbWVudE9yVGVtcGxhdGVDb250ZW50
cygpKTsKQEAgLTEwNDAsMjkgKzEwMjIsMjkgQEAgdm9pZCBIVE1MVHJlZUJ1aWxkZXI6OnByb2Nl
c3NTdGFydFRhZ0ZvckluVGFibGUoQXRvbWljSFRNTFRva2VuKiB0b2tlbikKICAgICAgICAgcHJv
Y2Vzc1N0YXJ0VGFnKHRva2VuKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBpZiAodG9r
ZW4tPm5hbWUoKSA9PSBzdHlsZVRhZyB8fCB0b2tlbi0+bmFtZSgpID09IHNjcmlwdFRhZykgewor
ICAgIGlmICh0b2tlbi5uYW1lKCkgPT0gc3R5bGVUYWcgfHwgdG9rZW4ubmFtZSgpID09IHNjcmlw
dFRhZykgewogICAgICAgICBwcm9jZXNzU3RhcnRUYWdGb3JJbkhlYWQodG9rZW4pOwogICAgICAg
ICByZXR1cm47CiAgICAgfQotICAgIGlmICh0b2tlbi0+bmFtZSgpID09IGlucHV0VGFnKSB7Ci0g
ICAgICAgIEF0dHJpYnV0ZSogdHlwZUF0dHJpYnV0ZSA9IHRva2VuLT5nZXRBdHRyaWJ1dGVJdGVt
KHR5cGVBdHRyKTsKKyAgICBpZiAodG9rZW4ubmFtZSgpID09IGlucHV0VGFnKSB7CisgICAgICAg
IEF0dHJpYnV0ZSogdHlwZUF0dHJpYnV0ZSA9IHRva2VuLmdldEF0dHJpYnV0ZUl0ZW0odHlwZUF0
dHIpOwogICAgICAgICBpZiAodHlwZUF0dHJpYnV0ZSAmJiBlcXVhbElnbm9yaW5nQ2FzZSh0eXBl
QXR0cmlidXRlLT52YWx1ZSgpLCAiaGlkZGVuIikpIHsKICAgICAgICAgICAgIHBhcnNlRXJyb3Io
dG9rZW4pOwotICAgICAgICAgICAgbV90cmVlLmluc2VydFNlbGZDbG9zaW5nSFRNTEVsZW1lbnQo
dG9rZW4pOworICAgICAgICAgICAgbV90cmVlLmluc2VydFNlbGZDbG9zaW5nSFRNTEVsZW1lbnQo
JnRva2VuKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgICAgICAvLyBGYWxs
IHRocm91Z2ggdG8gImFueXRoaW5nIGVsc2UiIGNhc2UuCiAgICAgfQotICAgIGlmICh0b2tlbi0+
bmFtZSgpID09IGZvcm1UYWcpIHsKKyAgICBpZiAodG9rZW4ubmFtZSgpID09IGZvcm1UYWcpIHsK
ICAgICAgICAgcGFyc2VFcnJvcih0b2tlbik7CiAgICAgICAgIGlmIChtX3RyZWUuZm9ybSgpICYm
ICFpc1BhcnNpbmdUZW1wbGF0ZUNvbnRlbnRzKCkpCiAgICAgICAgICAgICByZXR1cm47Ci0gICAg
ICAgIG1fdHJlZS5pbnNlcnRIVE1MRm9ybUVsZW1lbnQodG9rZW4sIHRydWUpOworICAgICAgICBt
X3RyZWUuaW5zZXJ0SFRNTEZvcm1FbGVtZW50KCZ0b2tlbiwgdHJ1ZSk7CiAgICAgICAgIG1fdHJl
ZS5vcGVuRWxlbWVudHMoKS0+cG9wKCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAjaWYgRU5B
QkxFKFRFTVBMQVRFX0VMRU1FTlQpCi0gICAgaWYgKHRva2VuLT5uYW1lKCkgPT0gdGVtcGxhdGVU
YWcpIHsKKyAgICBpZiAodG9rZW4ubmFtZSgpID09IHRlbXBsYXRlVGFnKSB7CiAgICAgICAgIHBy
b2Nlc3NUZW1wbGF0ZVN0YXJ0VGFnKHRva2VuKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAg
LTEwNzIsNzEgKzEwNTQsNzAgQEAgdm9pZCBIVE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NTdGFydFRh
Z0ZvckluVGFibGUoQXRvbWljSFRNTFRva2VuKiB0b2tlbikKICAgICBwcm9jZXNzU3RhcnRUYWdG
b3JJbkJvZHkodG9rZW4pOwogfQogCi12b2lkIEhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc1N0YXJ0
VGFnKEF0b21pY0hUTUxUb2tlbiogdG9rZW4pCit2b2lkIEhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vz
c1N0YXJ0VGFnKEF0b21pY0hUTUxUb2tlbiYgdG9rZW4pCiB7Ci0gICAgQVNTRVJUKHRva2VuLT50
eXBlKCkgPT0gSFRNTFRva2VuOjpTdGFydFRhZyk7Ci0gICAgc3dpdGNoIChpbnNlcnRpb25Nb2Rl
KCkpIHsKKyAgICBBU1NFUlQodG9rZW4udHlwZSgpID09IEhUTUxUb2tlbjo6U3RhcnRUYWcpOwor
ICAgIHN3aXRjaCAobV9pbnNlcnRpb25Nb2RlKSB7CiAgICAgY2FzZSBJbnNlcnRpb25Nb2RlOjpJ
bml0aWFsOgotICAgICAgICBBU1NFUlQoaW5zZXJ0aW9uTW9kZSgpID09IEluc2VydGlvbk1vZGU6
OkluaXRpYWwpOwogICAgICAgICBkZWZhdWx0Rm9ySW5pdGlhbCgpOworICAgICAgICBBU1NFUlQo
bV9pbnNlcnRpb25Nb2RlID09IEluc2VydGlvbk1vZGU6OkJlZm9yZUhUTUwpOwogICAgICAgICBG
QUxMVEhST1VHSDsKICAgICBjYXNlIEluc2VydGlvbk1vZGU6OkJlZm9yZUhUTUw6Ci0gICAgICAg
IEFTU0VSVChpbnNlcnRpb25Nb2RlKCkgPT0gSW5zZXJ0aW9uTW9kZTo6QmVmb3JlSFRNTCk7Ci0g
ICAgICAgIGlmICh0b2tlbi0+bmFtZSgpID09IGh0bWxUYWcpIHsKLSAgICAgICAgICAgIG1fdHJl
ZS5pbnNlcnRIVE1MSHRtbFN0YXJ0VGFnQmVmb3JlSFRNTCh0b2tlbik7Ci0gICAgICAgICAgICBz
ZXRJbnNlcnRpb25Nb2RlKEluc2VydGlvbk1vZGU6OkJlZm9yZUhlYWQpOworICAgICAgICBpZiAo
dG9rZW4ubmFtZSgpID09IGh0bWxUYWcpIHsKKyAgICAgICAgICAgIG1fdHJlZS5pbnNlcnRIVE1M
SHRtbFN0YXJ0VGFnQmVmb3JlSFRNTCgmdG9rZW4pOworICAgICAgICAgICAgbV9pbnNlcnRpb25N
b2RlID0gSW5zZXJ0aW9uTW9kZTo6QmVmb3JlSGVhZDsKICAgICAgICAgICAgIHJldHVybjsKICAg
ICAgICAgfQogICAgICAgICBkZWZhdWx0Rm9yQmVmb3JlSFRNTCgpOworICAgICAgICBBU1NFUlQo
bV9pbnNlcnRpb25Nb2RlID09IEluc2VydGlvbk1vZGU6OkJlZm9yZUhlYWQpOwogICAgICAgICBG
QUxMVEhST1VHSDsKICAgICBjYXNlIEluc2VydGlvbk1vZGU6OkJlZm9yZUhlYWQ6Ci0gICAgICAg
IEFTU0VSVChpbnNlcnRpb25Nb2RlKCkgPT0gSW5zZXJ0aW9uTW9kZTo6QmVmb3JlSGVhZCk7Ci0g
ICAgICAgIGlmICh0b2tlbi0+bmFtZSgpID09IGh0bWxUYWcpIHsKKyAgICAgICAgaWYgKHRva2Vu
Lm5hbWUoKSA9PSBodG1sVGFnKSB7CiAgICAgICAgICAgICBwcm9jZXNzSHRtbFN0YXJ0VGFnRm9y
SW5Cb2R5KHRva2VuKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQotICAgICAgICBp
ZiAodG9rZW4tPm5hbWUoKSA9PSBoZWFkVGFnKSB7Ci0gICAgICAgICAgICBtX3RyZWUuaW5zZXJ0
SFRNTEhlYWRFbGVtZW50KHRva2VuKTsKLSAgICAgICAgICAgIHNldEluc2VydGlvbk1vZGUoSW5z
ZXJ0aW9uTW9kZTo6SW5IZWFkKTsKKyAgICAgICAgaWYgKHRva2VuLm5hbWUoKSA9PSBoZWFkVGFn
KSB7CisgICAgICAgICAgICBtX3RyZWUuaW5zZXJ0SFRNTEhlYWRFbGVtZW50KCZ0b2tlbik7Cisg
ICAgICAgICAgICBtX2luc2VydGlvbk1vZGUgPSBJbnNlcnRpb25Nb2RlOjpJbkhlYWQ7CiAgICAg
ICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgZGVmYXVsdEZvckJlZm9yZUhlYWQo
KTsKKyAgICAgICAgQVNTRVJUKG1faW5zZXJ0aW9uTW9kZSA9PSBJbnNlcnRpb25Nb2RlOjpJbkhl
YWQpOwogICAgICAgICBGQUxMVEhST1VHSDsKICAgICBjYXNlIEluc2VydGlvbk1vZGU6OkluSGVh
ZDoKLSAgICAgICAgQVNTRVJUKGluc2VydGlvbk1vZGUoKSA9PSBJbnNlcnRpb25Nb2RlOjpJbkhl
YWQpOwogICAgICAgICBpZiAocHJvY2Vzc1N0YXJ0VGFnRm9ySW5IZWFkKHRva2VuKSkKICAgICAg
ICAgICAgIHJldHVybjsKICAgICAgICAgZGVmYXVsdEZvckluSGVhZCgpOworICAgICAgICBBU1NF
UlQobV9pbnNlcnRpb25Nb2RlID09IEluc2VydGlvbk1vZGU6OkFmdGVySGVhZCk7CiAgICAgICAg
IEZBTExUSFJPVUdIOwogICAgIGNhc2UgSW5zZXJ0aW9uTW9kZTo6QWZ0ZXJIZWFkOgotICAgICAg
ICBBU1NFUlQoaW5zZXJ0aW9uTW9kZSgpID09IEluc2VydGlvbk1vZGU6OkFmdGVySGVhZCk7Ci0g
ICAgICAgIGlmICh0b2tlbi0+bmFtZSgpID09IGh0bWxUYWcpIHsKKyAgICAgICAgaWYgKHRva2Vu
Lm5hbWUoKSA9PSBodG1sVGFnKSB7CiAgICAgICAgICAgICBwcm9jZXNzSHRtbFN0YXJ0VGFnRm9y
SW5Cb2R5KHRva2VuKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQotICAgICAgICBp
ZiAodG9rZW4tPm5hbWUoKSA9PSBib2R5VGFnKSB7CisgICAgICAgIGlmICh0b2tlbi5uYW1lKCkg
PT0gYm9keVRhZykgewogICAgICAgICAgICAgbV9mcmFtZXNldE9rID0gZmFsc2U7Ci0gICAgICAg
ICAgICBtX3RyZWUuaW5zZXJ0SFRNTEJvZHlFbGVtZW50KHRva2VuKTsKLSAgICAgICAgICAgIHNl
dEluc2VydGlvbk1vZGUoSW5zZXJ0aW9uTW9kZTo6SW5Cb2R5KTsKKyAgICAgICAgICAgIG1fdHJl
ZS5pbnNlcnRIVE1MQm9keUVsZW1lbnQoJnRva2VuKTsKKyAgICAgICAgICAgIG1faW5zZXJ0aW9u
TW9kZSA9IEluc2VydGlvbk1vZGU6OkluQm9keTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAg
ICAgfQotICAgICAgICBpZiAodG9rZW4tPm5hbWUoKSA9PSBmcmFtZXNldFRhZykgewotICAgICAg
ICAgICAgbV90cmVlLmluc2VydEhUTUxFbGVtZW50KHRva2VuKTsKLSAgICAgICAgICAgIHNldElu
c2VydGlvbk1vZGUoSW5zZXJ0aW9uTW9kZTo6SW5GcmFtZXNldCk7CisgICAgICAgIGlmICh0b2tl
bi5uYW1lKCkgPT0gZnJhbWVzZXRUYWcpIHsKKyAgICAgICAgICAgIG1fdHJlZS5pbnNlcnRIVE1M
RWxlbWVudCgmdG9rZW4pOworICAgICAgICAgICAgbV9pbnNlcnRpb25Nb2RlID0gSW5zZXJ0aW9u
TW9kZTo6SW5GcmFtZXNldDsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQotICAgICAg
ICBpZiAodG9rZW4tPm5hbWUoKSA9PSBiYXNlVGFnCi0gICAgICAgICAgICB8fCB0b2tlbi0+bmFt
ZSgpID09IGJhc2Vmb250VGFnCi0gICAgICAgICAgICB8fCB0b2tlbi0+bmFtZSgpID09IGJnc291
bmRUYWcKLSAgICAgICAgICAgIHx8IHRva2VuLT5uYW1lKCkgPT0gbGlua1RhZwotICAgICAgICAg
ICAgfHwgdG9rZW4tPm5hbWUoKSA9PSBtZXRhVGFnCi0gICAgICAgICAgICB8fCB0b2tlbi0+bmFt
ZSgpID09IG5vZnJhbWVzVGFnCi0gICAgICAgICAgICB8fCB0b2tlbi0+bmFtZSgpID09IHNjcmlw
dFRhZwotICAgICAgICAgICAgfHwgdG9rZW4tPm5hbWUoKSA9PSBzdHlsZVRhZworICAgICAgICBp
ZiAodG9rZW4ubmFtZSgpID09IGJhc2VUYWcKKyAgICAgICAgICAgIHx8IHRva2VuLm5hbWUoKSA9
PSBiYXNlZm9udFRhZworICAgICAgICAgICAgfHwgdG9rZW4ubmFtZSgpID09IGJnc291bmRUYWcK
KyAgICAgICAgICAgIHx8IHRva2VuLm5hbWUoKSA9PSBsaW5rVGFnCisgICAgICAgICAgICB8fCB0
b2tlbi5uYW1lKCkgPT0gbWV0YVRhZworICAgICAgICAgICAgfHwgdG9rZW4ubmFtZSgpID09IG5v
ZnJhbWVzVGFnCisgICAgICAgICAgICB8fCB0b2tlbi5uYW1lKCkgPT0gc2NyaXB0VGFnCisgICAg
ICAgICAgICB8fCB0b2tlbi5uYW1lKCkgPT0gc3R5bGVUYWcKICNpZiBFTkFCTEUoVEVNUExBVEVf
RUxFTUVOVCkKLSAgICAgICAgICAgIHx8IHRva2VuLT5uYW1lKCkgPT0gdGVtcGxhdGVUYWcKKyAg
ICAgICAgICAgIHx8IHRva2VuLm5hbWUoKSA9PSB0ZW1wbGF0ZVRhZwogI2VuZGlmCi0gICAgICAg
ICAgICB8fCB0b2tlbi0+bmFtZSgpID09IHRpdGxlVGFnKSB7CisgICAgICAgICAgICB8fCB0b2tl
bi5uYW1lKCkgPT0gdGl0bGVUYWcpIHsKICAgICAgICAgICAgIHBhcnNlRXJyb3IodG9rZW4pOwog
ICAgICAgICAgICAgQVNTRVJUKG1fdHJlZS5oZWFkKCkpOwogICAgICAgICAgICAgbV90cmVlLm9w
ZW5FbGVtZW50cygpLT5wdXNoSFRNTEhlYWRFbGVtZW50KG1fdHJlZS5oZWFkU3RhY2tJdGVtKCkp
OwpAQCAtMTE0NCwyNiArMTEyNSwyNSBAQCB2b2lkIEhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc1N0
YXJ0VGFnKEF0b21pY0hUTUxUb2tlbiogdG9rZW4pCiAgICAgICAgICAgICBtX3RyZWUub3BlbkVs
ZW1lbnRzKCktPnJlbW92ZUhUTUxIZWFkRWxlbWVudChtX3RyZWUuaGVhZCgpKTsKICAgICAgICAg
ICAgIHJldHVybjsKICAgICAgICAgfQotICAgICAgICBpZiAodG9rZW4tPm5hbWUoKSA9PSBoZWFk
VGFnKSB7CisgICAgICAgIGlmICh0b2tlbi5uYW1lKCkgPT0gaGVhZFRhZykgewogICAgICAgICAg
ICAgcGFyc2VFcnJvcih0b2tlbik7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAg
ICAgICAgZGVmYXVsdEZvckFmdGVySGVhZCgpOworICAgICAgICBBU1NFUlQobV9pbnNlcnRpb25N
b2RlID09IEluc2VydGlvbk1vZGU6OkluQm9keSk7CiAgICAgICAgIEZBTExUSFJPVUdIOwogICAg
IGNhc2UgSW5zZXJ0aW9uTW9kZTo6SW5Cb2R5OgotICAgICAgICBBU1NFUlQoaW5zZXJ0aW9uTW9k
ZSgpID09IEluc2VydGlvbk1vZGU6OkluQm9keSk7CiAgICAgICAgIHByb2Nlc3NTdGFydFRhZ0Zv
ckluQm9keSh0b2tlbik7CisgICAgICAgIEFTU0VSVChtX2luc2VydGlvbk1vZGUgPT0gSW5zZXJ0
aW9uTW9kZTo6SW5UYWJsZSk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgSW5zZXJ0aW9uTW9k
ZTo6SW5UYWJsZToKLSAgICAgICAgQVNTRVJUKGluc2VydGlvbk1vZGUoKSA9PSBJbnNlcnRpb25N
b2RlOjpJblRhYmxlKTsKICAgICAgICAgcHJvY2Vzc1N0YXJ0VGFnRm9ySW5UYWJsZSh0b2tlbik7
CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgSW5zZXJ0aW9uTW9kZTo6SW5DYXB0aW9uOgotICAg
ICAgICBBU1NFUlQoaW5zZXJ0aW9uTW9kZSgpID09IEluc2VydGlvbk1vZGU6OkluQ2FwdGlvbik7
Ci0gICAgICAgIGlmIChpc0NhcHRpb25Db2xPckNvbGdyb3VwVGFnKHRva2VuLT5uYW1lKCkpCi0g
ICAgICAgICAgICB8fCBpc1RhYmxlQm9keUNvbnRleHRUYWcodG9rZW4tPm5hbWUoKSkKLSAgICAg
ICAgICAgIHx8IGlzVGFibGVDZWxsQ29udGV4dFRhZyh0b2tlbi0+bmFtZSgpKQotICAgICAgICAg
ICAgfHwgdG9rZW4tPm5hbWUoKSA9PSB0clRhZykgeworICAgICAgICBpZiAoaXNDYXB0aW9uQ29s
T3JDb2xncm91cFRhZyh0b2tlbi5uYW1lKCkpCisgICAgICAgICAgICB8fCBpc1RhYmxlQm9keUNv
bnRleHRUYWcodG9rZW4ubmFtZSgpKQorICAgICAgICAgICAgfHwgaXNUYWJsZUNlbGxDb250ZXh0
VGFnKHRva2VuLm5hbWUoKSkKKyAgICAgICAgICAgIHx8IHRva2VuLm5hbWUoKSA9PSB0clRhZykg
ewogICAgICAgICAgICAgcGFyc2VFcnJvcih0b2tlbik7CiAgICAgICAgICAgICBpZiAoIXByb2Nl
c3NDYXB0aW9uRW5kVGFnRm9ySW5DYXB0aW9uKCkpIHsKICAgICAgICAgICAgICAgICBBU1NFUlQo
aXNQYXJzaW5nRnJhZ21lbnQoKSk7CkBAIC0xMTc1LDE3ICsxMTU1LDE2IEBAIHZvaWQgSFRNTFRy
ZWVCdWlsZGVyOjpwcm9jZXNzU3RhcnRUYWcoQXRvbWljSFRNTFRva2VuKiB0b2tlbikKICAgICAg
ICAgcHJvY2Vzc1N0YXJ0VGFnRm9ySW5Cb2R5KHRva2VuKTsKICAgICAgICAgYnJlYWs7CiAgICAg
Y2FzZSBJbnNlcnRpb25Nb2RlOjpJbkNvbHVtbkdyb3VwOgotICAgICAgICBBU1NFUlQoaW5zZXJ0
aW9uTW9kZSgpID09IEluc2VydGlvbk1vZGU6OkluQ29sdW1uR3JvdXApOwotICAgICAgICBpZiAo
dG9rZW4tPm5hbWUoKSA9PSBodG1sVGFnKSB7CisgICAgICAgIGlmICh0b2tlbi5uYW1lKCkgPT0g
aHRtbFRhZykgewogICAgICAgICAgICAgcHJvY2Vzc0h0bWxTdGFydFRhZ0ZvckluQm9keSh0b2tl
bik7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KLSAgICAgICAgaWYgKHRva2VuLT5u
YW1lKCkgPT0gY29sVGFnKSB7Ci0gICAgICAgICAgICBtX3RyZWUuaW5zZXJ0U2VsZkNsb3NpbmdI
VE1MRWxlbWVudCh0b2tlbik7CisgICAgICAgIGlmICh0b2tlbi5uYW1lKCkgPT0gY29sVGFnKSB7
CisgICAgICAgICAgICBtX3RyZWUuaW5zZXJ0U2VsZkNsb3NpbmdIVE1MRWxlbWVudCgmdG9rZW4p
OwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAjaWYgRU5BQkxFKFRFTVBMQVRFX0VM
RU1FTlQpCi0gICAgICAgIGlmICh0b2tlbi0+bmFtZSgpID09IHRlbXBsYXRlVGFnKSB7CisgICAg
ICAgIGlmICh0b2tlbi5uYW1lKCkgPT0gdGVtcGxhdGVUYWcpIHsKICAgICAgICAgICAgIHByb2Nl
c3NUZW1wbGF0ZVN0YXJ0VGFnKHRva2VuKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAg
fQpAQCAtMTE5NywyMSArMTE3NiwyMCBAQCB2b2lkIEhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc1N0
YXJ0VGFnKEF0b21pY0hUTUxUb2tlbiogdG9rZW4pCiAgICAgICAgIHByb2Nlc3NTdGFydFRhZyh0
b2tlbik7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgSW5zZXJ0aW9uTW9kZTo6SW5UYWJsZUJv
ZHk6Ci0gICAgICAgIEFTU0VSVChpbnNlcnRpb25Nb2RlKCkgPT0gSW5zZXJ0aW9uTW9kZTo6SW5U
YWJsZUJvZHkpOwotICAgICAgICBpZiAodG9rZW4tPm5hbWUoKSA9PSB0clRhZykgeworICAgICAg
ICBpZiAodG9rZW4ubmFtZSgpID09IHRyVGFnKSB7CiAgICAgICAgICAgICBtX3RyZWUub3BlbkVs
ZW1lbnRzKCktPnBvcFVudGlsVGFibGVCb2R5U2NvcGVNYXJrZXIoKTsgLy8gSG93IGlzIHRoZXJl
IGV2ZXIgYW55dGhpbmcgdG8gcG9wPwotICAgICAgICAgICAgbV90cmVlLmluc2VydEhUTUxFbGVt
ZW50KHRva2VuKTsKLSAgICAgICAgICAgIHNldEluc2VydGlvbk1vZGUoSW5zZXJ0aW9uTW9kZTo6
SW5Sb3cpOworICAgICAgICAgICAgbV90cmVlLmluc2VydEhUTUxFbGVtZW50KCZ0b2tlbik7Cisg
ICAgICAgICAgICBtX2luc2VydGlvbk1vZGUgPSBJbnNlcnRpb25Nb2RlOjpJblJvdzsKICAgICAg
ICAgICAgIHJldHVybjsKICAgICAgICAgfQotICAgICAgICBpZiAoaXNUYWJsZUNlbGxDb250ZXh0
VGFnKHRva2VuLT5uYW1lKCkpKSB7CisgICAgICAgIGlmIChpc1RhYmxlQ2VsbENvbnRleHRUYWco
dG9rZW4ubmFtZSgpKSkgewogICAgICAgICAgICAgcGFyc2VFcnJvcih0b2tlbik7CiAgICAgICAg
ICAgICBwcm9jZXNzRmFrZVN0YXJ0VGFnKHRyVGFnKTsKLSAgICAgICAgICAgIEFTU0VSVChpbnNl
cnRpb25Nb2RlKCkgPT0gSW5zZXJ0aW9uTW9kZTo6SW5Sb3cpOworICAgICAgICAgICAgQVNTRVJU
KG1faW5zZXJ0aW9uTW9kZSA9PSBJbnNlcnRpb25Nb2RlOjpJblJvdyk7CiAgICAgICAgICAgICBw
cm9jZXNzU3RhcnRUYWcodG9rZW4pOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9Ci0g
ICAgICAgIGlmIChpc0NhcHRpb25Db2xPckNvbGdyb3VwVGFnKHRva2VuLT5uYW1lKCkpIHx8IGlz
VGFibGVCb2R5Q29udGV4dFRhZyh0b2tlbi0+bmFtZSgpKSkgeworICAgICAgICBpZiAoaXNDYXB0
aW9uQ29sT3JDb2xncm91cFRhZyh0b2tlbi5uYW1lKCkpIHx8IGlzVGFibGVCb2R5Q29udGV4dFRh
Zyh0b2tlbi5uYW1lKCkpKSB7CiAgICAgICAgICAgICAvLyBGSVhNRTogVGhpcyBpcyBzbG93Lgog
ICAgICAgICAgICAgaWYgKCFtX3RyZWUub3BlbkVsZW1lbnRzKCktPmluVGFibGVTY29wZSh0Ym9k
eVRhZykgJiYgIW1fdHJlZS5vcGVuRWxlbWVudHMoKS0+aW5UYWJsZVNjb3BlKHRoZWFkVGFnKSAm
JiAhbV90cmVlLm9wZW5FbGVtZW50cygpLT5pblRhYmxlU2NvcGUodGZvb3RUYWcpKSB7CiAgICAg
ICAgICAgICAgICAgQVNTRVJUKGlzUGFyc2luZ0ZyYWdtZW50T3JUZW1wbGF0ZUNvbnRlbnRzKCkp
OwpAQCAtMTIyNywzMyArMTIwNSwzMSBAQCB2b2lkIEhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc1N0
YXJ0VGFnKEF0b21pY0hUTUxUb2tlbiogdG9rZW4pCiAgICAgICAgIHByb2Nlc3NTdGFydFRhZ0Zv
ckluVGFibGUodG9rZW4pOwogICAgICAgICBicmVhazsKICAgICBjYXNlIEluc2VydGlvbk1vZGU6
OkluUm93OgotICAgICAgICBBU1NFUlQoaW5zZXJ0aW9uTW9kZSgpID09IEluc2VydGlvbk1vZGU6
OkluUm93KTsKLSAgICAgICAgaWYgKGlzVGFibGVDZWxsQ29udGV4dFRhZyh0b2tlbi0+bmFtZSgp
KSkgeworICAgICAgICBpZiAoaXNUYWJsZUNlbGxDb250ZXh0VGFnKHRva2VuLm5hbWUoKSkpIHsK
ICAgICAgICAgICAgIG1fdHJlZS5vcGVuRWxlbWVudHMoKS0+cG9wVW50aWxUYWJsZVJvd1Njb3Bl
TWFya2VyKCk7Ci0gICAgICAgICAgICBtX3RyZWUuaW5zZXJ0SFRNTEVsZW1lbnQodG9rZW4pOwot
ICAgICAgICAgICAgc2V0SW5zZXJ0aW9uTW9kZShJbnNlcnRpb25Nb2RlOjpJbkNlbGwpOworICAg
ICAgICAgICAgbV90cmVlLmluc2VydEhUTUxFbGVtZW50KCZ0b2tlbik7CisgICAgICAgICAgICBt
X2luc2VydGlvbk1vZGUgPSBJbnNlcnRpb25Nb2RlOjpJbkNlbGw7CiAgICAgICAgICAgICBtX3Ry
ZWUuYWN0aXZlRm9ybWF0dGluZ0VsZW1lbnRzKCktPmFwcGVuZE1hcmtlcigpOwogICAgICAgICAg
ICAgcmV0dXJuOwogICAgICAgICB9Ci0gICAgICAgIGlmICh0b2tlbi0+bmFtZSgpID09IHRyVGFn
Ci0gICAgICAgICAgICB8fCBpc0NhcHRpb25Db2xPckNvbGdyb3VwVGFnKHRva2VuLT5uYW1lKCkp
Ci0gICAgICAgICAgICB8fCBpc1RhYmxlQm9keUNvbnRleHRUYWcodG9rZW4tPm5hbWUoKSkpIHsK
KyAgICAgICAgaWYgKHRva2VuLm5hbWUoKSA9PSB0clRhZworICAgICAgICAgICAgfHwgaXNDYXB0
aW9uQ29sT3JDb2xncm91cFRhZyh0b2tlbi5uYW1lKCkpCisgICAgICAgICAgICB8fCBpc1RhYmxl
Qm9keUNvbnRleHRUYWcodG9rZW4ubmFtZSgpKSkgewogICAgICAgICAgICAgaWYgKCFwcm9jZXNz
VHJFbmRUYWdGb3JJblJvdygpKSB7CiAgICAgICAgICAgICAgICAgQVNTRVJUKGlzUGFyc2luZ0Zy
YWdtZW50T3JUZW1wbGF0ZUNvbnRlbnRzKCkpOwogICAgICAgICAgICAgICAgIHJldHVybjsKICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIEFTU0VSVChpbnNlcnRpb25Nb2RlKCkgPT0gSW5zZXJ0
aW9uTW9kZTo6SW5UYWJsZUJvZHkpOworICAgICAgICAgICAgQVNTRVJUKG1faW5zZXJ0aW9uTW9k
ZSA9PSBJbnNlcnRpb25Nb2RlOjpJblRhYmxlQm9keSk7CiAgICAgICAgICAgICBwcm9jZXNzU3Rh
cnRUYWcodG9rZW4pOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgICAgIHBy
b2Nlc3NTdGFydFRhZ0ZvckluVGFibGUodG9rZW4pOwogICAgICAgICBicmVhazsKICAgICBjYXNl
IEluc2VydGlvbk1vZGU6OkluQ2VsbDoKLSAgICAgICAgQVNTRVJUKGluc2VydGlvbk1vZGUoKSA9
PSBJbnNlcnRpb25Nb2RlOjpJbkNlbGwpOwotICAgICAgICBpZiAoaXNDYXB0aW9uQ29sT3JDb2xn
cm91cFRhZyh0b2tlbi0+bmFtZSgpKQotICAgICAgICAgICAgfHwgaXNUYWJsZUNlbGxDb250ZXh0
VGFnKHRva2VuLT5uYW1lKCkpCi0gICAgICAgICAgICB8fCB0b2tlbi0+bmFtZSgpID09IHRyVGFn
Ci0gICAgICAgICAgICB8fCBpc1RhYmxlQm9keUNvbnRleHRUYWcodG9rZW4tPm5hbWUoKSkpIHsK
KyAgICAgICAgaWYgKGlzQ2FwdGlvbkNvbE9yQ29sZ3JvdXBUYWcodG9rZW4ubmFtZSgpKQorICAg
ICAgICAgICAgfHwgaXNUYWJsZUNlbGxDb250ZXh0VGFnKHRva2VuLm5hbWUoKSkKKyAgICAgICAg
ICAgIHx8IHRva2VuLm5hbWUoKSA9PSB0clRhZworICAgICAgICAgICAgfHwgaXNUYWJsZUJvZHlD
b250ZXh0VGFnKHRva2VuLm5hbWUoKSkpIHsKICAgICAgICAgICAgIC8vIEZJWE1FOiBUaGlzIGNv
dWxkIGJlIG1vcmUgZWZmaWNpZW50LgogICAgICAgICAgICAgaWYgKCFtX3RyZWUub3BlbkVsZW1l
bnRzKCktPmluVGFibGVTY29wZSh0ZFRhZykgJiYgIW1fdHJlZS5vcGVuRWxlbWVudHMoKS0+aW5U
YWJsZVNjb3BlKHRoVGFnKSkgewogICAgICAgICAgICAgICAgIEFTU0VSVChpc1BhcnNpbmdGcmFn
bWVudCgpKTsKQEAgLTEyNjgsMzEgKzEyNDQsMjkgQEAgdm9pZCBIVE1MVHJlZUJ1aWxkZXI6OnBy
b2Nlc3NTdGFydFRhZyhBdG9taWNIVE1MVG9rZW4qIHRva2VuKQogICAgICAgICBicmVhazsKICAg
ICBjYXNlIEluc2VydGlvbk1vZGU6OkFmdGVyQm9keToKICAgICBjYXNlIEluc2VydGlvbk1vZGU6
OkFmdGVyQWZ0ZXJCb2R5OgotICAgICAgICBBU1NFUlQoaW5zZXJ0aW9uTW9kZSgpID09IEluc2Vy
dGlvbk1vZGU6OkFmdGVyQm9keSB8fCBpbnNlcnRpb25Nb2RlKCkgPT0gSW5zZXJ0aW9uTW9kZTo6
QWZ0ZXJBZnRlckJvZHkpOwotICAgICAgICBpZiAodG9rZW4tPm5hbWUoKSA9PSBodG1sVGFnKSB7
CisgICAgICAgIGlmICh0b2tlbi5uYW1lKCkgPT0gaHRtbFRhZykgewogICAgICAgICAgICAgcHJv
Y2Vzc0h0bWxTdGFydFRhZ0ZvckluQm9keSh0b2tlbik7CiAgICAgICAgICAgICByZXR1cm47CiAg
ICAgICAgIH0KLSAgICAgICAgc2V0SW5zZXJ0aW9uTW9kZShJbnNlcnRpb25Nb2RlOjpJbkJvZHkp
OworICAgICAgICBtX2luc2VydGlvbk1vZGUgPSBJbnNlcnRpb25Nb2RlOjpJbkJvZHk7CiAgICAg
ICAgIHByb2Nlc3NTdGFydFRhZyh0b2tlbik7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgSW5z
ZXJ0aW9uTW9kZTo6SW5IZWFkTm9zY3JpcHQ6Ci0gICAgICAgIEFTU0VSVChpbnNlcnRpb25Nb2Rl
KCkgPT0gSW5zZXJ0aW9uTW9kZTo6SW5IZWFkTm9zY3JpcHQpOwotICAgICAgICBpZiAodG9rZW4t
Pm5hbWUoKSA9PSBodG1sVGFnKSB7CisgICAgICAgIGlmICh0b2tlbi5uYW1lKCkgPT0gaHRtbFRh
ZykgewogICAgICAgICAgICAgcHJvY2Vzc0h0bWxTdGFydFRhZ0ZvckluQm9keSh0b2tlbik7CiAg
ICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KLSAgICAgICAgaWYgKHRva2VuLT5uYW1lKCkg
PT0gYmFzZWZvbnRUYWcKLSAgICAgICAgICAgIHx8IHRva2VuLT5uYW1lKCkgPT0gYmdzb3VuZFRh
ZwotICAgICAgICAgICAgfHwgdG9rZW4tPm5hbWUoKSA9PSBsaW5rVGFnCi0gICAgICAgICAgICB8
fCB0b2tlbi0+bmFtZSgpID09IG1ldGFUYWcKLSAgICAgICAgICAgIHx8IHRva2VuLT5uYW1lKCkg
PT0gbm9mcmFtZXNUYWcKLSAgICAgICAgICAgIHx8IHRva2VuLT5uYW1lKCkgPT0gc3R5bGVUYWcp
IHsKKyAgICAgICAgaWYgKHRva2VuLm5hbWUoKSA9PSBiYXNlZm9udFRhZworICAgICAgICAgICAg
fHwgdG9rZW4ubmFtZSgpID09IGJnc291bmRUYWcKKyAgICAgICAgICAgIHx8IHRva2VuLm5hbWUo
KSA9PSBsaW5rVGFnCisgICAgICAgICAgICB8fCB0b2tlbi5uYW1lKCkgPT0gbWV0YVRhZworICAg
ICAgICAgICAgfHwgdG9rZW4ubmFtZSgpID09IG5vZnJhbWVzVGFnCisgICAgICAgICAgICB8fCB0
b2tlbi5uYW1lKCkgPT0gc3R5bGVUYWcpIHsKICAgICAgICAgICAgIGJvb2wgZGlkUHJvY2VzcyA9
IHByb2Nlc3NTdGFydFRhZ0ZvckluSGVhZCh0b2tlbik7CiAgICAgICAgICAgICBBU1NFUlRfVU5V
U0VEKGRpZFByb2Nlc3MsIGRpZFByb2Nlc3MpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAg
ICB9Ci0gICAgICAgIGlmICh0b2tlbi0+bmFtZSgpID09IGh0bWxUYWcgfHwgdG9rZW4tPm5hbWUo
KSA9PSBub3NjcmlwdFRhZykgeworICAgICAgICBpZiAodG9rZW4ubmFtZSgpID09IGh0bWxUYWcg
fHwgdG9rZW4ubmFtZSgpID09IG5vc2NyaXB0VGFnKSB7CiAgICAgICAgICAgICBwYXJzZUVycm9y
KHRva2VuKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQpAQCAtMTMwMCwyNSArMTI3
NCwyNCBAQCB2b2lkIEhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc1N0YXJ0VGFnKEF0b21pY0hUTUxU
b2tlbiogdG9rZW4pCiAgICAgICAgIHByb2Nlc3NUb2tlbih0b2tlbik7CiAgICAgICAgIGJyZWFr
OwogICAgIGNhc2UgSW5zZXJ0aW9uTW9kZTo6SW5GcmFtZXNldDoKLSAgICAgICAgQVNTRVJUKGlu
c2VydGlvbk1vZGUoKSA9PSBJbnNlcnRpb25Nb2RlOjpJbkZyYW1lc2V0KTsKLSAgICAgICAgaWYg
KHRva2VuLT5uYW1lKCkgPT0gaHRtbFRhZykgeworICAgICAgICBpZiAodG9rZW4ubmFtZSgpID09
IGh0bWxUYWcpIHsKICAgICAgICAgICAgIHByb2Nlc3NIdG1sU3RhcnRUYWdGb3JJbkJvZHkodG9r
ZW4pOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9Ci0gICAgICAgIGlmICh0b2tlbi0+
bmFtZSgpID09IGZyYW1lc2V0VGFnKSB7Ci0gICAgICAgICAgICBtX3RyZWUuaW5zZXJ0SFRNTEVs
ZW1lbnQodG9rZW4pOworICAgICAgICBpZiAodG9rZW4ubmFtZSgpID09IGZyYW1lc2V0VGFnKSB7
CisgICAgICAgICAgICBtX3RyZWUuaW5zZXJ0SFRNTEVsZW1lbnQoJnRva2VuKTsKICAgICAgICAg
ICAgIHJldHVybjsKICAgICAgICAgfQotICAgICAgICBpZiAodG9rZW4tPm5hbWUoKSA9PSBmcmFt
ZVRhZykgewotICAgICAgICAgICAgbV90cmVlLmluc2VydFNlbGZDbG9zaW5nSFRNTEVsZW1lbnQo
dG9rZW4pOworICAgICAgICBpZiAodG9rZW4ubmFtZSgpID09IGZyYW1lVGFnKSB7CisgICAgICAg
ICAgICBtX3RyZWUuaW5zZXJ0U2VsZkNsb3NpbmdIVE1MRWxlbWVudCgmdG9rZW4pOwogICAgICAg
ICAgICAgcmV0dXJuOwogICAgICAgICB9Ci0gICAgICAgIGlmICh0b2tlbi0+bmFtZSgpID09IG5v
ZnJhbWVzVGFnKSB7CisgICAgICAgIGlmICh0b2tlbi5uYW1lKCkgPT0gbm9mcmFtZXNUYWcpIHsK
ICAgICAgICAgICAgIHByb2Nlc3NTdGFydFRhZ0ZvckluSGVhZCh0b2tlbik7CiAgICAgICAgICAg
ICByZXR1cm47CiAgICAgICAgIH0KICNpZiBFTkFCTEUoVEVNUExBVEVfRUxFTUVOVCkKLSAgICAg
ICAgaWYgKHRva2VuLT5uYW1lKCkgPT0gdGVtcGxhdGVUYWcpIHsKKyAgICAgICAgaWYgKHRva2Vu
Lm5hbWUoKSA9PSB0ZW1wbGF0ZVRhZykgewogICAgICAgICAgICAgcHJvY2Vzc1RlbXBsYXRlU3Rh
cnRUYWcodG9rZW4pOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CkBAIC0xMzI3LDgz
ICsxMzAwLDc4IEBAIHZvaWQgSFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNzU3RhcnRUYWcoQXRvbWlj
SFRNTFRva2VuKiB0b2tlbikKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBJbnNlcnRpb25Nb2Rl
OjpBZnRlckZyYW1lc2V0OgogICAgIGNhc2UgSW5zZXJ0aW9uTW9kZTo6QWZ0ZXJBZnRlckZyYW1l
c2V0OgotICAgICAgICBBU1NFUlQoaW5zZXJ0aW9uTW9kZSgpID09IEluc2VydGlvbk1vZGU6OkFm
dGVyRnJhbWVzZXQgfHwgaW5zZXJ0aW9uTW9kZSgpID09IEluc2VydGlvbk1vZGU6OkFmdGVyQWZ0
ZXJGcmFtZXNldCk7Ci0gICAgICAgIGlmICh0b2tlbi0+bmFtZSgpID09IGh0bWxUYWcpIHsKKyAg
ICAgICAgaWYgKHRva2VuLm5hbWUoKSA9PSBodG1sVGFnKSB7CiAgICAgICAgICAgICBwcm9jZXNz
SHRtbFN0YXJ0VGFnRm9ySW5Cb2R5KHRva2VuKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAg
ICAgfQotICAgICAgICBpZiAodG9rZW4tPm5hbWUoKSA9PSBub2ZyYW1lc1RhZykgeworICAgICAg
ICBpZiAodG9rZW4ubmFtZSgpID09IG5vZnJhbWVzVGFnKSB7CiAgICAgICAgICAgICBwcm9jZXNz
U3RhcnRUYWdGb3JJbkhlYWQodG9rZW4pOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9
CiAgICAgICAgIHBhcnNlRXJyb3IodG9rZW4pOwogICAgICAgICBicmVhazsKICAgICBjYXNlIElu
c2VydGlvbk1vZGU6OkluU2VsZWN0SW5UYWJsZToKLSAgICAgICAgQVNTRVJUKGluc2VydGlvbk1v
ZGUoKSA9PSBJbnNlcnRpb25Nb2RlOjpJblNlbGVjdEluVGFibGUpOwotICAgICAgICBpZiAodG9r
ZW4tPm5hbWUoKSA9PSBjYXB0aW9uVGFnCi0gICAgICAgICAgICB8fCB0b2tlbi0+bmFtZSgpID09
IHRhYmxlVGFnCi0gICAgICAgICAgICB8fCBpc1RhYmxlQm9keUNvbnRleHRUYWcodG9rZW4tPm5h
bWUoKSkKLSAgICAgICAgICAgIHx8IHRva2VuLT5uYW1lKCkgPT0gdHJUYWcKLSAgICAgICAgICAg
IHx8IGlzVGFibGVDZWxsQ29udGV4dFRhZyh0b2tlbi0+bmFtZSgpKSkgeworICAgICAgICBpZiAo
dG9rZW4ubmFtZSgpID09IGNhcHRpb25UYWcKKyAgICAgICAgICAgIHx8IHRva2VuLm5hbWUoKSA9
PSB0YWJsZVRhZworICAgICAgICAgICAgfHwgaXNUYWJsZUJvZHlDb250ZXh0VGFnKHRva2VuLm5h
bWUoKSkKKyAgICAgICAgICAgIHx8IHRva2VuLm5hbWUoKSA9PSB0clRhZworICAgICAgICAgICAg
fHwgaXNUYWJsZUNlbGxDb250ZXh0VGFnKHRva2VuLm5hbWUoKSkpIHsKICAgICAgICAgICAgIHBh
cnNlRXJyb3IodG9rZW4pOwogICAgICAgICAgICAgQXRvbWljSFRNTFRva2VuIGVuZFNlbGVjdChI
VE1MVG9rZW46OkVuZFRhZywgc2VsZWN0VGFnLmxvY2FsTmFtZSgpKTsKLSAgICAgICAgICAgIHBy
b2Nlc3NFbmRUYWcoJmVuZFNlbGVjdCk7CisgICAgICAgICAgICBwcm9jZXNzRW5kVGFnKGVuZFNl
bGVjdCk7CiAgICAgICAgICAgICBwcm9jZXNzU3RhcnRUYWcodG9rZW4pOwogICAgICAgICAgICAg
cmV0dXJuOwogICAgICAgICB9CiAgICAgICAgIEZBTExUSFJPVUdIOwogICAgIGNhc2UgSW5zZXJ0
aW9uTW9kZTo6SW5TZWxlY3Q6Ci0gICAgICAgIEFTU0VSVChpbnNlcnRpb25Nb2RlKCkgPT0gSW5z
ZXJ0aW9uTW9kZTo6SW5TZWxlY3QgfHwgaW5zZXJ0aW9uTW9kZSgpID09IEluc2VydGlvbk1vZGU6
OkluU2VsZWN0SW5UYWJsZSk7Ci0gICAgICAgIGlmICh0b2tlbi0+bmFtZSgpID09IGh0bWxUYWcp
IHsKKyAgICAgICAgaWYgKHRva2VuLm5hbWUoKSA9PSBodG1sVGFnKSB7CiAgICAgICAgICAgICBw
cm9jZXNzSHRtbFN0YXJ0VGFnRm9ySW5Cb2R5KHRva2VuKTsKICAgICAgICAgICAgIHJldHVybjsK
ICAgICAgICAgfQotICAgICAgICBpZiAodG9rZW4tPm5hbWUoKSA9PSBvcHRpb25UYWcpIHsKKyAg
ICAgICAgaWYgKHRva2VuLm5hbWUoKSA9PSBvcHRpb25UYWcpIHsKICAgICAgICAgICAgIGlmIChp
czxIVE1MT3B0aW9uRWxlbWVudD4oKm1fdHJlZS5jdXJyZW50U3RhY2tJdGVtKCktPm5vZGUoKSkp
IHsKICAgICAgICAgICAgICAgICBBdG9taWNIVE1MVG9rZW4gZW5kT3B0aW9uKEhUTUxUb2tlbjo6
RW5kVGFnLCBvcHRpb25UYWcubG9jYWxOYW1lKCkpOwotICAgICAgICAgICAgICAgIHByb2Nlc3NF
bmRUYWcoJmVuZE9wdGlvbik7CisgICAgICAgICAgICAgICAgcHJvY2Vzc0VuZFRhZyhlbmRPcHRp
b24pOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgbV90cmVlLmluc2VydEhUTUxFbGVtZW50
KHRva2VuKTsKKyAgICAgICAgICAgIG1fdHJlZS5pbnNlcnRIVE1MRWxlbWVudCgmdG9rZW4pOwog
ICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9Ci0gICAgICAgIGlmICh0b2tlbi0+bmFtZSgp
ID09IG9wdGdyb3VwVGFnKSB7CisgICAgICAgIGlmICh0b2tlbi5uYW1lKCkgPT0gb3B0Z3JvdXBU
YWcpIHsKICAgICAgICAgICAgIGlmIChpczxIVE1MT3B0aW9uRWxlbWVudD4oKm1fdHJlZS5jdXJy
ZW50U3RhY2tJdGVtKCktPm5vZGUoKSkpIHsKICAgICAgICAgICAgICAgICBBdG9taWNIVE1MVG9r
ZW4gZW5kT3B0aW9uKEhUTUxUb2tlbjo6RW5kVGFnLCBvcHRpb25UYWcubG9jYWxOYW1lKCkpOwot
ICAgICAgICAgICAgICAgIHByb2Nlc3NFbmRUYWcoJmVuZE9wdGlvbik7CisgICAgICAgICAgICAg
ICAgcHJvY2Vzc0VuZFRhZyhlbmRPcHRpb24pOwogICAgICAgICAgICAgfQogICAgICAgICAgICAg
aWYgKGlzPEhUTUxPcHRHcm91cEVsZW1lbnQ+KCptX3RyZWUuY3VycmVudFN0YWNrSXRlbSgpLT5u
b2RlKCkpKSB7CiAgICAgICAgICAgICAgICAgQXRvbWljSFRNTFRva2VuIGVuZE9wdGdyb3VwKEhU
TUxUb2tlbjo6RW5kVGFnLCBvcHRncm91cFRhZy5sb2NhbE5hbWUoKSk7Ci0gICAgICAgICAgICAg
ICAgcHJvY2Vzc0VuZFRhZygmZW5kT3B0Z3JvdXApOworICAgICAgICAgICAgICAgIHByb2Nlc3NF
bmRUYWcoZW5kT3B0Z3JvdXApOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgbV90cmVlLmlu
c2VydEhUTUxFbGVtZW50KHRva2VuKTsKKyAgICAgICAgICAgIG1fdHJlZS5pbnNlcnRIVE1MRWxl
bWVudCgmdG9rZW4pOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9Ci0gICAgICAgIGlm
ICh0b2tlbi0+bmFtZSgpID09IHNlbGVjdFRhZykgeworICAgICAgICBpZiAodG9rZW4ubmFtZSgp
ID09IHNlbGVjdFRhZykgewogICAgICAgICAgICAgcGFyc2VFcnJvcih0b2tlbik7CiAgICAgICAg
ICAgICBBdG9taWNIVE1MVG9rZW4gZW5kU2VsZWN0KEhUTUxUb2tlbjo6RW5kVGFnLCBzZWxlY3RU
YWcubG9jYWxOYW1lKCkpOwotICAgICAgICAgICAgcHJvY2Vzc0VuZFRhZygmZW5kU2VsZWN0KTsK
KyAgICAgICAgICAgIHByb2Nlc3NFbmRUYWcoZW5kU2VsZWN0KTsKICAgICAgICAgICAgIHJldHVy
bjsKICAgICAgICAgfQotICAgICAgICBpZiAodG9rZW4tPm5hbWUoKSA9PSBpbnB1dFRhZwotICAg
ICAgICAgICAgfHwgdG9rZW4tPm5hbWUoKSA9PSBrZXlnZW5UYWcKLSAgICAgICAgICAgIHx8IHRv
a2VuLT5uYW1lKCkgPT0gdGV4dGFyZWFUYWcpIHsKKyAgICAgICAgaWYgKHRva2VuLm5hbWUoKSA9
PSBpbnB1dFRhZyB8fCB0b2tlbi5uYW1lKCkgPT0ga2V5Z2VuVGFnIHx8IHRva2VuLm5hbWUoKSA9
PSB0ZXh0YXJlYVRhZykgewogICAgICAgICAgICAgcGFyc2VFcnJvcih0b2tlbik7CiAgICAgICAg
ICAgICBpZiAoIW1fdHJlZS5vcGVuRWxlbWVudHMoKS0+aW5TZWxlY3RTY29wZShzZWxlY3RUYWcp
KSB7CiAgICAgICAgICAgICAgICAgQVNTRVJUKGlzUGFyc2luZ0ZyYWdtZW50KCkpOwogICAgICAg
ICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIEF0b21pY0hUTUxU
b2tlbiBlbmRTZWxlY3QoSFRNTFRva2VuOjpFbmRUYWcsIHNlbGVjdFRhZy5sb2NhbE5hbWUoKSk7
Ci0gICAgICAgICAgICBwcm9jZXNzRW5kVGFnKCZlbmRTZWxlY3QpOworICAgICAgICAgICAgcHJv
Y2Vzc0VuZFRhZyhlbmRTZWxlY3QpOwogICAgICAgICAgICAgcHJvY2Vzc1N0YXJ0VGFnKHRva2Vu
KTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQotICAgICAgICBpZiAodG9rZW4tPm5h
bWUoKSA9PSBzY3JpcHRUYWcpIHsKKyAgICAgICAgaWYgKHRva2VuLm5hbWUoKSA9PSBzY3JpcHRU
YWcpIHsKICAgICAgICAgICAgIGJvb2wgZGlkUHJvY2VzcyA9IHByb2Nlc3NTdGFydFRhZ0Zvcklu
SGVhZCh0b2tlbik7CiAgICAgICAgICAgICBBU1NFUlRfVU5VU0VEKGRpZFByb2Nlc3MsIGRpZFBy
b2Nlc3MpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAjaWYgRU5BQkxFKFRFTVBM
QVRFX0VMRU1FTlQpCi0gICAgICAgIGlmICh0b2tlbi0+bmFtZSgpID09IHRlbXBsYXRlVGFnKSB7
CisgICAgICAgIGlmICh0b2tlbi5uYW1lKCkgPT0gdGVtcGxhdGVUYWcpIHsKICAgICAgICAgICAg
IHByb2Nlc3NUZW1wbGF0ZVN0YXJ0VGFnKHRva2VuKTsKICAgICAgICAgICAgIHJldHVybjsKICAg
ICAgICAgfQpAQCAtMTQxNiwzMSArMTM4NCwzMSBAQCB2b2lkIEhUTUxUcmVlQnVpbGRlcjo6cHJv
Y2Vzc1N0YXJ0VGFnKEF0b21pY0hUTUxUb2tlbiogdG9rZW4pCiAgICAgY2FzZSBJbnNlcnRpb25N
b2RlOjpUZXh0OgogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgYnJlYWs7
Ci0gICAgY2FzZSBJbnNlcnRpb25Nb2RlOjpUZW1wbGF0ZUNvbnRlbnRzOgogI2lmIEVOQUJMRShU
RU1QTEFURV9FTEVNRU5UKQotICAgICAgICBpZiAodG9rZW4tPm5hbWUoKSA9PSB0ZW1wbGF0ZVRh
ZykgeworICAgIGNhc2UgSW5zZXJ0aW9uTW9kZTo6VGVtcGxhdGVDb250ZW50czoKKyAgICAgICAg
aWYgKHRva2VuLm5hbWUoKSA9PSB0ZW1wbGF0ZVRhZykgewogICAgICAgICAgICAgcHJvY2Vzc1Rl
bXBsYXRlU3RhcnRUYWcodG9rZW4pOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAK
LSAgICAgICAgaWYgKHRva2VuLT5uYW1lKCkgPT0gbGlua1RhZwotICAgICAgICAgICAgfHwgdG9r
ZW4tPm5hbWUoKSA9PSBzY3JpcHRUYWcKLSAgICAgICAgICAgIHx8IHRva2VuLT5uYW1lKCkgPT0g
c3R5bGVUYWcKLSAgICAgICAgICAgIHx8IHRva2VuLT5uYW1lKCkgPT0gbWV0YVRhZykgeworICAg
ICAgICBpZiAodG9rZW4ubmFtZSgpID09IGxpbmtUYWcKKyAgICAgICAgICAgIHx8IHRva2VuLm5h
bWUoKSA9PSBzY3JpcHRUYWcKKyAgICAgICAgICAgIHx8IHRva2VuLm5hbWUoKSA9PSBzdHlsZVRh
ZworICAgICAgICAgICAgfHwgdG9rZW4ubmFtZSgpID09IG1ldGFUYWcpIHsKICAgICAgICAgICAg
IHByb2Nlc3NTdGFydFRhZ0ZvckluSGVhZCh0b2tlbik7CiAgICAgICAgICAgICByZXR1cm47CiAg
ICAgICAgIH0KIAogICAgICAgICBJbnNlcnRpb25Nb2RlIGluc2VydGlvbk1vZGUgPSBJbnNlcnRp
b25Nb2RlOjpUZW1wbGF0ZUNvbnRlbnRzOwotICAgICAgICBpZiAodG9rZW4tPm5hbWUoKSA9PSBm
cmFtZVRhZykKKyAgICAgICAgaWYgKHRva2VuLm5hbWUoKSA9PSBmcmFtZVRhZykKICAgICAgICAg
ICAgIGluc2VydGlvbk1vZGUgPSBJbnNlcnRpb25Nb2RlOjpJbkZyYW1lc2V0OwotICAgICAgICBl
bHNlIGlmICh0b2tlbi0+bmFtZSgpID09IGNvbFRhZykKKyAgICAgICAgZWxzZSBpZiAodG9rZW4u
bmFtZSgpID09IGNvbFRhZykKICAgICAgICAgICAgIGluc2VydGlvbk1vZGUgPSBJbnNlcnRpb25N
b2RlOjpJbkNvbHVtbkdyb3VwOwotICAgICAgICBlbHNlIGlmIChpc0NhcHRpb25Db2xPckNvbGdy
b3VwVGFnKHRva2VuLT5uYW1lKCkpIHx8IGlzVGFibGVCb2R5Q29udGV4dFRhZyh0b2tlbi0+bmFt
ZSgpKSkKKyAgICAgICAgZWxzZSBpZiAoaXNDYXB0aW9uQ29sT3JDb2xncm91cFRhZyh0b2tlbi5u
YW1lKCkpIHx8IGlzVGFibGVCb2R5Q29udGV4dFRhZyh0b2tlbi5uYW1lKCkpKQogICAgICAgICAg
ICAgaW5zZXJ0aW9uTW9kZSA9IEluc2VydGlvbk1vZGU6OkluVGFibGU7Ci0gICAgICAgIGVsc2Ug
aWYgKHRva2VuLT5uYW1lKCkgPT0gdHJUYWcpCisgICAgICAgIGVsc2UgaWYgKHRva2VuLm5hbWUo
KSA9PSB0clRhZykKICAgICAgICAgICAgIGluc2VydGlvbk1vZGUgPSBJbnNlcnRpb25Nb2RlOjpJ
blRhYmxlQm9keTsKLSAgICAgICAgZWxzZSBpZiAoaXNUYWJsZUNlbGxDb250ZXh0VGFnKHRva2Vu
LT5uYW1lKCkpKQorICAgICAgICBlbHNlIGlmIChpc1RhYmxlQ2VsbENvbnRleHRUYWcodG9rZW4u
bmFtZSgpKSkKICAgICAgICAgICAgIGluc2VydGlvbk1vZGUgPSBJbnNlcnRpb25Nb2RlOjpJblJv
dzsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgaW5zZXJ0aW9uTW9kZSA9IEluc2VydGlvbk1v
ZGU6OkluQm9keTsKQEAgLTE0NDgsMTcgKzE0MTYsMTUgQEAgdm9pZCBIVE1MVHJlZUJ1aWxkZXI6
OnByb2Nlc3NTdGFydFRhZyhBdG9taWNIVE1MVG9rZW4qIHRva2VuKQogICAgICAgICBBU1NFUlQo
aW5zZXJ0aW9uTW9kZSAhPSBJbnNlcnRpb25Nb2RlOjpUZW1wbGF0ZUNvbnRlbnRzKTsKICAgICAg
ICAgQVNTRVJUKG1fdGVtcGxhdGVJbnNlcnRpb25Nb2Rlcy5sYXN0KCkgPT0gSW5zZXJ0aW9uTW9k
ZTo6VGVtcGxhdGVDb250ZW50cyk7CiAgICAgICAgIG1fdGVtcGxhdGVJbnNlcnRpb25Nb2Rlcy5s
YXN0KCkgPSBpbnNlcnRpb25Nb2RlOwotICAgICAgICBzZXRJbnNlcnRpb25Nb2RlKGluc2VydGlv
bk1vZGUpOworICAgICAgICBtX2luc2VydGlvbk1vZGUgPSBpbnNlcnRpb25Nb2RlOwogCiAgICAg
ICAgIHByb2Nlc3NTdGFydFRhZyh0b2tlbik7Ci0jZWxzZQotICAgICAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKLSNlbmRpZgogICAgICAgICBicmVhazsKKyNlbmRpZgogICAgIH0KIH0KIAotdm9p
ZCBIVE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NIdG1sU3RhcnRUYWdGb3JJbkJvZHkoQXRvbWljSFRN
TFRva2VuKiB0b2tlbikKK3ZvaWQgSFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNzSHRtbFN0YXJ0VGFn
Rm9ySW5Cb2R5KEF0b21pY0hUTUxUb2tlbiYgdG9rZW4pCiB7CiAgICAgcGFyc2VFcnJvcih0b2tl
bik7CiAjaWYgRU5BQkxFKFRFTVBMQVRFX0VMRU1FTlQpCkBAIC0xNDY3LDQ1ICsxNDMzLDQzIEBA
IHZvaWQgSFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNzSHRtbFN0YXJ0VGFnRm9ySW5Cb2R5KEF0b21p
Y0hUTUxUb2tlbiogdG9rZW4pCiAgICAgICAgIHJldHVybjsKICAgICB9CiAjZW5kaWYKLSAgICBt
X3RyZWUuaW5zZXJ0SFRNTEh0bWxTdGFydFRhZ0luQm9keSh0b2tlbik7CisgICAgbV90cmVlLmlu
c2VydEhUTUxIdG1sU3RhcnRUYWdJbkJvZHkoJnRva2VuKTsKIH0KIAotYm9vbCBIVE1MVHJlZUJ1
aWxkZXI6OnByb2Nlc3NCb2R5RW5kVGFnRm9ySW5Cb2R5KEF0b21pY0hUTUxUb2tlbiogdG9rZW4p
Citib29sIEhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc0JvZHlFbmRUYWdGb3JJbkJvZHkoQXRvbWlj
SFRNTFRva2VuJiB0b2tlbikKIHsKLSAgICBBU1NFUlQodG9rZW4tPnR5cGUoKSA9PSBIVE1MVG9r
ZW46OkVuZFRhZyk7Ci0gICAgQVNTRVJUKHRva2VuLT5uYW1lKCkgPT0gYm9keVRhZyk7CisgICAg
QVNTRVJUKHRva2VuLnR5cGUoKSA9PSBIVE1MVG9rZW46OkVuZFRhZyk7CisgICAgQVNTRVJUKHRv
a2VuLm5hbWUoKSA9PSBib2R5VGFnKTsKICAgICBpZiAoIW1fdHJlZS5vcGVuRWxlbWVudHMoKS0+
aW5TY29wZShib2R5VGFnLmxvY2FsTmFtZSgpKSkgewogICAgICAgICBwYXJzZUVycm9yKHRva2Vu
KTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KICAgICBub3RJbXBsZW1lbnRlZCgpOyAv
LyBFbWl0IGEgbW9yZSBzcGVjaWZpYyBwYXJzZSBlcnJvciBiYXNlZCBvbiBzdGFjayBjb250ZW50
cy4KLSAgICBzZXRJbnNlcnRpb25Nb2RlKEluc2VydGlvbk1vZGU6OkFmdGVyQm9keSk7CisgICAg
bV9pbnNlcnRpb25Nb2RlID0gSW5zZXJ0aW9uTW9kZTo6QWZ0ZXJCb2R5OwogICAgIHJldHVybiB0
cnVlOwogfQogCi12b2lkIEhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc0FueU90aGVyRW5kVGFnRm9y
SW5Cb2R5KEF0b21pY0hUTUxUb2tlbiogdG9rZW4pCit2b2lkIEhUTUxUcmVlQnVpbGRlcjo6cHJv
Y2Vzc0FueU90aGVyRW5kVGFnRm9ySW5Cb2R5KEF0b21pY0hUTUxUb2tlbiYgdG9rZW4pCiB7Ci0g
ICAgQVNTRVJUKHRva2VuLT50eXBlKCkgPT0gSFRNTFRva2VuOjpFbmRUYWcpOwotICAgIEhUTUxF
bGVtZW50U3RhY2s6OkVsZW1lbnRSZWNvcmQqIHJlY29yZCA9IG1fdHJlZS5vcGVuRWxlbWVudHMo
KS0+dG9wUmVjb3JkKCk7Ci0gICAgd2hpbGUgKDEpIHsKLSAgICAgICAgUmVmUHRyPEhUTUxTdGFj
a0l0ZW0+IGl0ZW0gPSByZWNvcmQtPnN0YWNrSXRlbSgpOwotICAgICAgICBpZiAoaXRlbS0+bWF0
Y2hlc0hUTUxUYWcodG9rZW4tPm5hbWUoKSkpIHsKLSAgICAgICAgICAgIG1fdHJlZS5nZW5lcmF0
ZUltcGxpZWRFbmRUYWdzV2l0aEV4Y2x1c2lvbih0b2tlbi0+bmFtZSgpKTsKLSAgICAgICAgICAg
IGlmICghbV90cmVlLmN1cnJlbnRTdGFja0l0ZW0oKS0+bWF0Y2hlc0hUTUxUYWcodG9rZW4tPm5h
bWUoKSkpCisgICAgQVNTRVJUKHRva2VuLnR5cGUoKSA9PSBIVE1MVG9rZW46OkVuZFRhZyk7Cisg
ICAgZm9yIChhdXRvKiByZWNvcmQgPSBtX3RyZWUub3BlbkVsZW1lbnRzKCktPnRvcFJlY29yZCgp
OyA7IHJlY29yZCA9IHJlY29yZC0+bmV4dCgpKSB7CisgICAgICAgIEhUTUxTdGFja0l0ZW0mIGl0
ZW0gPSAqcmVjb3JkLT5zdGFja0l0ZW0oKTsKKyAgICAgICAgaWYgKGl0ZW0ubWF0Y2hlc0hUTUxU
YWcodG9rZW4ubmFtZSgpKSkgeworICAgICAgICAgICAgbV90cmVlLmdlbmVyYXRlSW1wbGllZEVu
ZFRhZ3NXaXRoRXhjbHVzaW9uKHRva2VuLm5hbWUoKSk7CisgICAgICAgICAgICBpZiAoIW1fdHJl
ZS5jdXJyZW50U3RhY2tJdGVtKCktPm1hdGNoZXNIVE1MVGFnKHRva2VuLm5hbWUoKSkpCiAgICAg
ICAgICAgICAgICAgcGFyc2VFcnJvcih0b2tlbik7Ci0gICAgICAgICAgICBtX3RyZWUub3BlbkVs
ZW1lbnRzKCktPnBvcFVudGlsUG9wcGVkKGl0ZW0tPmVsZW1lbnQoKSk7CisgICAgICAgICAgICBt
X3RyZWUub3BlbkVsZW1lbnRzKCktPnBvcFVudGlsUG9wcGVkKGl0ZW0uZWxlbWVudCgpKTsKICAg
ICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQotICAgICAgICBpZiAoaXRlbS0+aXNTcGVjaWFs
Tm9kZSgpKSB7CisgICAgICAgIGlmIChpdGVtLmlzU3BlY2lhbE5vZGUoKSkgewogICAgICAgICAg
ICAgcGFyc2VFcnJvcih0b2tlbik7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KLSAg
ICAgICAgcmVjb3JkID0gcmVjb3JkLT5uZXh0KCk7CiAgICAgfQogfQogCiAvLyBodHRwOi8vd3d3
LndoYXR3Zy5vcmcvc3BlY3Mvd2ViLWFwcHMvY3VycmVudC13b3JrL211bHRpcGFnZS90b2tlbml6
YXRpb24uaHRtbCNwYXJzaW5nLW1haW4taW5ib2R5Ci12b2lkIEhUTUxUcmVlQnVpbGRlcjo6Y2Fs
bFRoZUFkb3B0aW9uQWdlbmN5KEF0b21pY0hUTUxUb2tlbiogdG9rZW4pCit2b2lkIEhUTUxUcmVl
QnVpbGRlcjo6Y2FsbFRoZUFkb3B0aW9uQWdlbmN5KEF0b21pY0hUTUxUb2tlbiYgdG9rZW4pCiB7
CiAgICAgLy8gVGhlIGFkb3B0aW9uIGFnZW5jeSBhbGdvcml0aG0gaXMgTl4yLiBXZSBsaW1pdCB0
aGUgbnVtYmVyIG9mIGl0ZXJhdGlvbnMKICAgICAvLyB0byBzdG9wIGZyb20gaGFuZ2luZyB0aGUg
d2hvbGUgYnJvd3Nlci4gVGhpcyBsaW1pdCBpcyBzcGVjaWZpZWQgaW4gdGhlCkBAIC0xNTE3LDcg
KzE0ODEsNyBAQCB2b2lkIEhUTUxUcmVlQnVpbGRlcjo6Y2FsbFRoZUFkb3B0aW9uQWdlbmN5KEF0
b21pY0hUTUxUb2tlbiogdG9rZW4pCiAgICAgLy8gMSwgMiwgMyBhbmQgMTYgYXJlIGNvdmVyZWQg
YnkgdGhlIGZvcigpIGxvb3AuCiAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBvdXRlckl0ZXJhdGlv
bkxpbWl0OyArK2kpIHsKICAgICAgICAgLy8gNC4KLSAgICAgICAgRWxlbWVudCogZm9ybWF0dGlu
Z0VsZW1lbnQgPSBtX3RyZWUuYWN0aXZlRm9ybWF0dGluZ0VsZW1lbnRzKCktPmNsb3Nlc3RFbGVt
ZW50SW5TY29wZVdpdGhOYW1lKHRva2VuLT5uYW1lKCkpOworICAgICAgICBFbGVtZW50KiBmb3Jt
YXR0aW5nRWxlbWVudCA9IG1fdHJlZS5hY3RpdmVGb3JtYXR0aW5nRWxlbWVudHMoKS0+Y2xvc2Vz
dEVsZW1lbnRJblNjb3BlV2l0aE5hbWUodG9rZW4ubmFtZSgpKTsKICAgICAgICAgLy8gNC5hCiAg
ICAgICAgIGlmICghZm9ybWF0dGluZ0VsZW1lbnQpCiAgICAgICAgICAgICByZXR1cm4gcHJvY2Vz
c0FueU90aGVyRW5kVGFnRm9ySW5Cb2R5KHRva2VuKTsKQEAgLTE1MjgsNyArMTQ5Miw3IEBAIHZv
aWQgSFRNTFRyZWVCdWlsZGVyOjpjYWxsVGhlQWRvcHRpb25BZ2VuY3koQXRvbWljSFRNTFRva2Vu
KiB0b2tlbikKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgICAgICAvLyA0LmIK
LSAgICAgICAgSFRNTEVsZW1lbnRTdGFjazo6RWxlbWVudFJlY29yZCogZm9ybWF0dGluZ0VsZW1l
bnRSZWNvcmQgPSBtX3RyZWUub3BlbkVsZW1lbnRzKCktPmZpbmQoZm9ybWF0dGluZ0VsZW1lbnQp
OworICAgICAgICBhdXRvKiBmb3JtYXR0aW5nRWxlbWVudFJlY29yZCA9IG1fdHJlZS5vcGVuRWxl
bWVudHMoKS0+ZmluZChmb3JtYXR0aW5nRWxlbWVudCk7CiAgICAgICAgIGlmICghZm9ybWF0dGlu
Z0VsZW1lbnRSZWNvcmQpIHsKICAgICAgICAgICAgIHBhcnNlRXJyb3IodG9rZW4pOwogICAgICAg
ICAgICAgbV90cmVlLmFjdGl2ZUZvcm1hdHRpbmdFbGVtZW50cygpLT5yZW1vdmUoZm9ybWF0dGlu
Z0VsZW1lbnQpOwpAQCAtMTUzOCw3ICsxNTAyLDcgQEAgdm9pZCBIVE1MVHJlZUJ1aWxkZXI6OmNh
bGxUaGVBZG9wdGlvbkFnZW5jeShBdG9taWNIVE1MVG9rZW4qIHRva2VuKQogICAgICAgICBpZiAo
Zm9ybWF0dGluZ0VsZW1lbnQgIT0gbV90cmVlLmN1cnJlbnRFbGVtZW50KCkpCiAgICAgICAgICAg
ICBwYXJzZUVycm9yKHRva2VuKTsKICAgICAgICAgLy8gNS4KLSAgICAgICAgSFRNTEVsZW1lbnRT
dGFjazo6RWxlbWVudFJlY29yZCogZnVydGhlc3RCbG9jayA9IG1fdHJlZS5vcGVuRWxlbWVudHMo
KS0+ZnVydGhlc3RCbG9ja0ZvckZvcm1hdHRpbmdFbGVtZW50KGZvcm1hdHRpbmdFbGVtZW50KTsK
KyAgICAgICAgYXV0byogZnVydGhlc3RCbG9jayA9IG1fdHJlZS5vcGVuRWxlbWVudHMoKS0+ZnVy
dGhlc3RCbG9ja0ZvckZvcm1hdHRpbmdFbGVtZW50KGZvcm1hdHRpbmdFbGVtZW50KTsKICAgICAg
ICAgLy8gNi4KICAgICAgICAgaWYgKCFmdXJ0aGVzdEJsb2NrKSB7CiAgICAgICAgICAgICBtX3Ry
ZWUub3BlbkVsZW1lbnRzKCktPnBvcFVudGlsUG9wcGVkKGZvcm1hdHRpbmdFbGVtZW50KTsKQEAg
LTE1NTEsOSArMTUxNSw5IEBAIHZvaWQgSFRNTFRyZWVCdWlsZGVyOjpjYWxsVGhlQWRvcHRpb25B
Z2VuY3koQXRvbWljSFRNTFRva2VuKiB0b2tlbikKICAgICAgICAgLy8gOC4KICAgICAgICAgSFRN
TEZvcm1hdHRpbmdFbGVtZW50TGlzdDo6Qm9va21hcmsgYm9va21hcmsgPSBtX3RyZWUuYWN0aXZl
Rm9ybWF0dGluZ0VsZW1lbnRzKCktPmJvb2ttYXJrRm9yKGZvcm1hdHRpbmdFbGVtZW50KTsKICAg
ICAgICAgLy8gOS4KLSAgICAgICAgSFRNTEVsZW1lbnRTdGFjazo6RWxlbWVudFJlY29yZCogbm9k
ZSA9IGZ1cnRoZXN0QmxvY2s7Ci0gICAgICAgIEhUTUxFbGVtZW50U3RhY2s6OkVsZW1lbnRSZWNv
cmQqIG5leHROb2RlID0gbm9kZS0+bmV4dCgpOwotICAgICAgICBIVE1MRWxlbWVudFN0YWNrOjpF
bGVtZW50UmVjb3JkKiBsYXN0Tm9kZSA9IGZ1cnRoZXN0QmxvY2s7CisgICAgICAgIGF1dG8qIG5v
ZGUgPSBmdXJ0aGVzdEJsb2NrOworICAgICAgICBhdXRvKiBuZXh0Tm9kZSA9IG5vZGUtPm5leHQo
KTsKKyAgICAgICAgYXV0byogbGFzdE5vZGUgPSBmdXJ0aGVzdEJsb2NrOwogICAgICAgICAvLyA5
LjEsIDkuMiwgOS4zIGFuZCA5LjExIGFyZSBjb3ZlcmVkIGJ5IHRoZSBmb3IoKSBsb29wLgogICAg
ICAgICBmb3IgKGludCBpID0gMDsgaSA8IGlubmVySXRlcmF0aW9uTGltaXQ7ICsraSkgewogICAg
ICAgICAgICAgLy8gOS40CkBAIC0xNjA0LDkgKzE1NjgsOCBAQCB2b2lkIEhUTUxUcmVlQnVpbGRl
cjo6cmVzZXRJbnNlcnRpb25Nb2RlQXBwcm9wcmlhdGVseSgpCiB7CiAgICAgLy8gaHR0cDovL3d3
dy53aGF0d2cub3JnL3NwZWNzL3dlYi1hcHBzL2N1cnJlbnQtd29yay9tdWx0aXBhZ2UvcGFyc2lu
Zy5odG1sI3Jlc2V0LXRoZS1pbnNlcnRpb24tbW9kZS1hcHByb3ByaWF0ZWx5CiAgICAgYm9vbCBs
YXN0ID0gZmFsc2U7Ci0gICAgSFRNTEVsZW1lbnRTdGFjazo6RWxlbWVudFJlY29yZCogbm9kZVJl
Y29yZCA9IG1fdHJlZS5vcGVuRWxlbWVudHMoKS0+dG9wUmVjb3JkKCk7Ci0gICAgd2hpbGUgKDEp
IHsKLSAgICAgICAgUmVmUHRyPEhUTUxTdGFja0l0ZW0+IGl0ZW0gPSBub2RlUmVjb3JkLT5zdGFj
a0l0ZW0oKTsKKyAgICBmb3IgKGF1dG8qIHJlY29yZCA9IG1fdHJlZS5vcGVuRWxlbWVudHMoKS0+
dG9wUmVjb3JkKCk7IDsgcmVjb3JkID0gcmVjb3JkLT5uZXh0KCkpIHsKKyAgICAgICAgSFRNTFN0
YWNrSXRlbSogaXRlbSA9IHJlY29yZC0+c3RhY2tJdGVtKCkuZ2V0KCk7CiAgICAgICAgIGlmIChp
dGVtLT5ub2RlKCkgPT0gbV90cmVlLm9wZW5FbGVtZW50cygpLT5yb290Tm9kZSgpKSB7CiAgICAg
ICAgICAgICBsYXN0ID0gdHJ1ZTsKICNpZiBFTkFCTEUoVEVNUExBVEVfRUxFTUVOVCkKQEAgLTE2
MTYsNzggKzE1NzksMTA0IEBAIHZvaWQgSFRNTFRyZWVCdWlsZGVyOjpyZXNldEluc2VydGlvbk1v
ZGVBcHByb3ByaWF0ZWx5KCkKICAgICAgICAgICAgIGJvb2wgc2hvdWxkQ3JlYXRlSXRlbSA9IHRy
dWU7CiAjZW5kaWYKICAgICAgICAgICAgIGlmIChzaG91bGRDcmVhdGVJdGVtKQotICAgICAgICAg
ICAgICAgIGl0ZW0gPSBtX2ZyYWdtZW50Q29udGV4dC5jb250ZXh0RWxlbWVudFN0YWNrSXRlbSgp
OworICAgICAgICAgICAgICAgIGl0ZW0gPSAmbV9mcmFnbWVudENvbnRleHQuY29udGV4dEVsZW1l
bnRTdGFja0l0ZW0oKTsKICAgICAgICAgfQorCiAjaWYgRU5BQkxFKFRFTVBMQVRFX0VMRU1FTlQp
Ci0gICAgICAgIGlmIChpdGVtLT5oYXNUYWdOYW1lKHRlbXBsYXRlVGFnKSkKLSAgICAgICAgICAg
IHJldHVybiBzZXRJbnNlcnRpb25Nb2RlKG1fdGVtcGxhdGVJbnNlcnRpb25Nb2Rlcy5sYXN0KCkp
OworICAgICAgICBpZiAoaXRlbS0+aGFzVGFnTmFtZSh0ZW1wbGF0ZVRhZykpIHsKKyAgICAgICAg
ICAgIG1faW5zZXJ0aW9uTW9kZSA9IG1fdGVtcGxhdGVJbnNlcnRpb25Nb2Rlcy5sYXN0KCk7Cisg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KICNlbmRpZgogICAgICAgICBpZiAoaXRlbS0+
aGFzVGFnTmFtZShzZWxlY3RUYWcpKSB7CiAjaWYgRU5BQkxFKFRFTVBMQVRFX0VMRU1FTlQpCiAg
ICAgICAgICAgICBpZiAoIWxhc3QpIHsKICAgICAgICAgICAgICAgICB3aGlsZSAoaXRlbS0+bm9k
ZSgpICE9IG1fdHJlZS5vcGVuRWxlbWVudHMoKS0+cm9vdE5vZGUoKSAmJiAhaXRlbS0+aGFzVGFn
TmFtZSh0ZW1wbGF0ZVRhZykpIHsKLSAgICAgICAgICAgICAgICAgICAgbm9kZVJlY29yZCA9IG5v
ZGVSZWNvcmQtPm5leHQoKTsKLSAgICAgICAgICAgICAgICAgICAgaXRlbSA9IG5vZGVSZWNvcmQt
PnN0YWNrSXRlbSgpOwotICAgICAgICAgICAgICAgICAgICBpZiAoaXM8SFRNTFRhYmxlRWxlbWVu
dD4oKml0ZW0tPm5vZGUoKSkpCi0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2V0SW5z
ZXJ0aW9uTW9kZShJbnNlcnRpb25Nb2RlOjpJblNlbGVjdEluVGFibGUpOworICAgICAgICAgICAg
ICAgICAgICByZWNvcmQgPSByZWNvcmQtPm5leHQoKTsKKyAgICAgICAgICAgICAgICAgICAgaXRl
bSA9IHJlY29yZC0+c3RhY2tJdGVtKCkuZ2V0KCk7CisgICAgICAgICAgICAgICAgICAgIGlmIChp
czxIVE1MVGFibGVFbGVtZW50PigqaXRlbS0+bm9kZSgpKSkgeworICAgICAgICAgICAgICAgICAg
ICAgICAgbV9pbnNlcnRpb25Nb2RlID0gSW5zZXJ0aW9uTW9kZTo6SW5TZWxlY3RJblRhYmxlOwor
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogI2VuZGlmCi0gICAgICAgICAgICByZXR1
cm4gc2V0SW5zZXJ0aW9uTW9kZShJbnNlcnRpb25Nb2RlOjpJblNlbGVjdCk7Ci0gICAgICAgIH0K
LSAgICAgICAgaWYgKGl0ZW0tPmhhc1RhZ05hbWUodGRUYWcpIHx8IGl0ZW0tPmhhc1RhZ05hbWUo
dGhUYWcpKQotICAgICAgICAgICAgcmV0dXJuIHNldEluc2VydGlvbk1vZGUoSW5zZXJ0aW9uTW9k
ZTo6SW5DZWxsKTsKLSAgICAgICAgaWYgKGl0ZW0tPmhhc1RhZ05hbWUodHJUYWcpKQotICAgICAg
ICAgICAgcmV0dXJuIHNldEluc2VydGlvbk1vZGUoSW5zZXJ0aW9uTW9kZTo6SW5Sb3cpOwotICAg
ICAgICBpZiAoaXRlbS0+aGFzVGFnTmFtZSh0Ym9keVRhZykgfHwgaXRlbS0+aGFzVGFnTmFtZSh0
aGVhZFRhZykgfHwgaXRlbS0+aGFzVGFnTmFtZSh0Zm9vdFRhZykpCi0gICAgICAgICAgICByZXR1
cm4gc2V0SW5zZXJ0aW9uTW9kZShJbnNlcnRpb25Nb2RlOjpJblRhYmxlQm9keSk7Ci0gICAgICAg
IGlmIChpdGVtLT5oYXNUYWdOYW1lKGNhcHRpb25UYWcpKQotICAgICAgICAgICAgcmV0dXJuIHNl
dEluc2VydGlvbk1vZGUoSW5zZXJ0aW9uTW9kZTo6SW5DYXB0aW9uKTsKKyAgICAgICAgICAgIG1f
aW5zZXJ0aW9uTW9kZSA9IEluc2VydGlvbk1vZGU6OkluU2VsZWN0OworICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICB9CisgICAgICAgIGlmIChpdGVtLT5oYXNUYWdOYW1lKHRkVGFnKSB8fCBp
dGVtLT5oYXNUYWdOYW1lKHRoVGFnKSkgeworICAgICAgICAgICAgbV9pbnNlcnRpb25Nb2RlID0g
SW5zZXJ0aW9uTW9kZTo6SW5DZWxsOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9Cisg
ICAgICAgIGlmIChpdGVtLT5oYXNUYWdOYW1lKHRyVGFnKSkgeworICAgICAgICAgICAgbV9pbnNl
cnRpb25Nb2RlID0gSW5zZXJ0aW9uTW9kZTo6SW5Sb3c7CisgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgIH0KKyAgICAgICAgaWYgKGl0ZW0tPmhhc1RhZ05hbWUodGJvZHlUYWcpIHx8IGl0ZW0t
Pmhhc1RhZ05hbWUodGhlYWRUYWcpIHx8IGl0ZW0tPmhhc1RhZ05hbWUodGZvb3RUYWcpKSB7Cisg
ICAgICAgICAgICBtX2luc2VydGlvbk1vZGUgPSBJbnNlcnRpb25Nb2RlOjpJblRhYmxlQm9keTsK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBpZiAoaXRlbS0+aGFzVGFn
TmFtZShjYXB0aW9uVGFnKSkgeworICAgICAgICAgICAgbV9pbnNlcnRpb25Nb2RlID0gSW5zZXJ0
aW9uTW9kZTo6SW5DYXB0aW9uOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CiAgICAg
ICAgIGlmIChpdGVtLT5oYXNUYWdOYW1lKGNvbGdyb3VwVGFnKSkgewotICAgICAgICAgICAgcmV0
dXJuIHNldEluc2VydGlvbk1vZGUoSW5zZXJ0aW9uTW9kZTo6SW5Db2x1bW5Hcm91cCk7CisgICAg
ICAgICAgICBtX2luc2VydGlvbk1vZGUgPSBJbnNlcnRpb25Nb2RlOjpJbkNvbHVtbkdyb3VwOwor
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIGlmIChpczxIVE1MVGFibGVF
bGVtZW50PigqaXRlbS0+bm9kZSgpKSkgeworICAgICAgICAgICAgbV9pbnNlcnRpb25Nb2RlID0g
SW5zZXJ0aW9uTW9kZTo6SW5UYWJsZTsKKyAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQot
ICAgICAgICBpZiAoaXM8SFRNTFRhYmxlRWxlbWVudD4oKml0ZW0tPm5vZGUoKSkpCi0gICAgICAg
ICAgICByZXR1cm4gc2V0SW5zZXJ0aW9uTW9kZShJbnNlcnRpb25Nb2RlOjpJblRhYmxlKTsKICAg
ICAgICAgaWYgKGl0ZW0tPmhhc1RhZ05hbWUoaGVhZFRhZykpIHsKICNpZiBFTkFCTEUoVEVNUExB
VEVfRUxFTUVOVCkKLSAgICAgICAgICAgIGlmICghbV9mcmFnbWVudENvbnRleHQuZnJhZ21lbnQo
KSB8fCBtX2ZyYWdtZW50Q29udGV4dC5jb250ZXh0RWxlbWVudCgpICE9IGl0ZW0tPm5vZGUoKSkK
LSAgICAgICAgICAgICAgICByZXR1cm4gc2V0SW5zZXJ0aW9uTW9kZShJbnNlcnRpb25Nb2RlOjpJ
bkhlYWQpOworICAgICAgICAgICAgaWYgKCFtX2ZyYWdtZW50Q29udGV4dC5mcmFnbWVudCgpIHx8
ICZtX2ZyYWdtZW50Q29udGV4dC5jb250ZXh0RWxlbWVudCgpICE9IGl0ZW0tPm5vZGUoKSkgewor
ICAgICAgICAgICAgICAgIG1faW5zZXJ0aW9uTW9kZSA9IEluc2VydGlvbk1vZGU6OkluSGVhZDsK
KyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CiAjZW5kaWYKLSAgICAgICAg
ICAgIHJldHVybiBzZXRJbnNlcnRpb25Nb2RlKEluc2VydGlvbk1vZGU6OkluQm9keSk7CisgICAg
ICAgICAgICBtX2luc2VydGlvbk1vZGUgPSBJbnNlcnRpb25Nb2RlOjpJbkJvZHk7CisgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgaWYgKGl0ZW0tPmhhc1RhZ05hbWUoYm9k
eVRhZykpIHsKKyAgICAgICAgICAgIG1faW5zZXJ0aW9uTW9kZSA9IEluc2VydGlvbk1vZGU6Oklu
Qm9keTsKKyAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQotICAgICAgICBpZiAoaXRlbS0+
aGFzVGFnTmFtZShib2R5VGFnKSkKLSAgICAgICAgICAgIHJldHVybiBzZXRJbnNlcnRpb25Nb2Rl
KEluc2VydGlvbk1vZGU6OkluQm9keSk7CiAgICAgICAgIGlmIChpdGVtLT5oYXNUYWdOYW1lKGZy
YW1lc2V0VGFnKSkgewotICAgICAgICAgICAgcmV0dXJuIHNldEluc2VydGlvbk1vZGUoSW5zZXJ0
aW9uTW9kZTo6SW5GcmFtZXNldCk7CisgICAgICAgICAgICBtX2luc2VydGlvbk1vZGUgPSBJbnNl
cnRpb25Nb2RlOjpJbkZyYW1lc2V0OworICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAg
ICAgICAgIGlmIChpdGVtLT5oYXNUYWdOYW1lKGh0bWxUYWcpKSB7Ci0gICAgICAgICAgICBpZiAo
bV90cmVlLmhlYWRTdGFja0l0ZW0oKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gc2V0SW5zZXJ0
aW9uTW9kZShJbnNlcnRpb25Nb2RlOjpBZnRlckhlYWQpOworICAgICAgICAgICAgaWYgKG1fdHJl
ZS5oZWFkU3RhY2tJdGVtKCkpIHsKKyAgICAgICAgICAgICAgICBtX2luc2VydGlvbk1vZGUgPSBJ
bnNlcnRpb25Nb2RlOjpBZnRlckhlYWQ7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICAgICAgfQogICAgICAgICAgICAgQVNTRVJUKGlzUGFyc2luZ0ZyYWdtZW50KCkpOwotICAgICAg
ICAgICAgcmV0dXJuIHNldEluc2VydGlvbk1vZGUoSW5zZXJ0aW9uTW9kZTo6QmVmb3JlSGVhZCk7
CisgICAgICAgICAgICBtX2luc2VydGlvbk1vZGUgPSBJbnNlcnRpb25Nb2RlOjpCZWZvcmVIZWFk
OworICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgICAgIGlmIChsYXN0KSB7CiAg
ICAgICAgICAgICBBU1NFUlQoaXNQYXJzaW5nRnJhZ21lbnQoKSk7Ci0gICAgICAgICAgICByZXR1
cm4gc2V0SW5zZXJ0aW9uTW9kZShJbnNlcnRpb25Nb2RlOjpJbkJvZHkpOworICAgICAgICAgICAg
bV9pbnNlcnRpb25Nb2RlID0gSW5zZXJ0aW9uTW9kZTo6SW5Cb2R5OworICAgICAgICAgICAgcmV0
dXJuOwogICAgICAgICB9Ci0gICAgICAgIG5vZGVSZWNvcmQgPSBub2RlUmVjb3JkLT5uZXh0KCk7
CiAgICAgfQogfQogCi12b2lkIEhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc0VuZFRhZ0ZvckluVGFi
bGVCb2R5KEF0b21pY0hUTUxUb2tlbiogdG9rZW4pCit2b2lkIEhUTUxUcmVlQnVpbGRlcjo6cHJv
Y2Vzc0VuZFRhZ0ZvckluVGFibGVCb2R5KEF0b21pY0hUTUxUb2tlbiYgdG9rZW4pCiB7Ci0gICAg
QVNTRVJUKHRva2VuLT50eXBlKCkgPT0gSFRNTFRva2VuOjpFbmRUYWcpOwotICAgIGlmIChpc1Rh
YmxlQm9keUNvbnRleHRUYWcodG9rZW4tPm5hbWUoKSkpIHsKLSAgICAgICAgaWYgKCFtX3RyZWUu
b3BlbkVsZW1lbnRzKCktPmluVGFibGVTY29wZSh0b2tlbi0+bmFtZSgpKSkgeworICAgIEFTU0VS
VCh0b2tlbi50eXBlKCkgPT0gSFRNTFRva2VuOjpFbmRUYWcpOworICAgIGlmIChpc1RhYmxlQm9k
eUNvbnRleHRUYWcodG9rZW4ubmFtZSgpKSkgeworICAgICAgICBpZiAoIW1fdHJlZS5vcGVuRWxl
bWVudHMoKS0+aW5UYWJsZVNjb3BlKHRva2VuLm5hbWUoKSkpIHsKICAgICAgICAgICAgIHBhcnNl
RXJyb3IodG9rZW4pOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgICAgIG1f
dHJlZS5vcGVuRWxlbWVudHMoKS0+cG9wVW50aWxUYWJsZUJvZHlTY29wZU1hcmtlcigpOwogICAg
ICAgICBtX3RyZWUub3BlbkVsZW1lbnRzKCktPnBvcCgpOwotICAgICAgICBzZXRJbnNlcnRpb25N
b2RlKEluc2VydGlvbk1vZGU6OkluVGFibGUpOworICAgICAgICBtX2luc2VydGlvbk1vZGUgPSBJ
bnNlcnRpb25Nb2RlOjpJblRhYmxlOwogICAgICAgICByZXR1cm47CiAgICAgfQotICAgIGlmICh0
b2tlbi0+bmFtZSgpID09IHRhYmxlVGFnKSB7CisgICAgaWYgKHRva2VuLm5hbWUoKSA9PSB0YWJs
ZVRhZykgewogICAgICAgICAvLyBGSVhNRTogVGhpcyBpcyBzbG93LgogICAgICAgICBpZiAoIW1f
dHJlZS5vcGVuRWxlbWVudHMoKS0+aW5UYWJsZVNjb3BlKHRib2R5VGFnKSAmJiAhbV90cmVlLm9w
ZW5FbGVtZW50cygpLT5pblRhYmxlU2NvcGUodGhlYWRUYWcpICYmICFtX3RyZWUub3BlbkVsZW1l
bnRzKCktPmluVGFibGVTY29wZSh0Zm9vdFRhZykpIHsKICAgICAgICAgICAgIEFTU0VSVChpc1Bh
cnNpbmdGcmFnbWVudE9yVGVtcGxhdGVDb250ZW50cygpKTsKQEAgLTE3MDAsODMgKzE2ODksODMg
QEAgdm9pZCBIVE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NFbmRUYWdGb3JJblRhYmxlQm9keShBdG9t
aWNIVE1MVG9rZW4qIHRva2VuKQogICAgICAgICBwcm9jZXNzRW5kVGFnKHRva2VuKTsKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KLSAgICBpZiAodG9rZW4tPm5hbWUoKSA9PSBib2R5VGFnCi0gICAg
ICAgIHx8IGlzQ2FwdGlvbkNvbE9yQ29sZ3JvdXBUYWcodG9rZW4tPm5hbWUoKSkKLSAgICAgICAg
fHwgdG9rZW4tPm5hbWUoKSA9PSBodG1sVGFnCi0gICAgICAgIHx8IGlzVGFibGVDZWxsQ29udGV4
dFRhZyh0b2tlbi0+bmFtZSgpKQotICAgICAgICB8fCB0b2tlbi0+bmFtZSgpID09IHRyVGFnKSB7
CisgICAgaWYgKHRva2VuLm5hbWUoKSA9PSBib2R5VGFnCisgICAgICAgIHx8IGlzQ2FwdGlvbkNv
bE9yQ29sZ3JvdXBUYWcodG9rZW4ubmFtZSgpKQorICAgICAgICB8fCB0b2tlbi5uYW1lKCkgPT0g
aHRtbFRhZworICAgICAgICB8fCBpc1RhYmxlQ2VsbENvbnRleHRUYWcodG9rZW4ubmFtZSgpKQor
ICAgICAgICB8fCB0b2tlbi5uYW1lKCkgPT0gdHJUYWcpIHsKICAgICAgICAgcGFyc2VFcnJvcih0
b2tlbik7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgcHJvY2Vzc0VuZFRhZ0ZvckluVGFi
bGUodG9rZW4pOwogfQogCi12b2lkIEhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc0VuZFRhZ0Zvcklu
Um93KEF0b21pY0hUTUxUb2tlbiogdG9rZW4pCit2b2lkIEhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vz
c0VuZFRhZ0ZvckluUm93KEF0b21pY0hUTUxUb2tlbiYgdG9rZW4pCiB7Ci0gICAgQVNTRVJUKHRv
a2VuLT50eXBlKCkgPT0gSFRNTFRva2VuOjpFbmRUYWcpOwotICAgIGlmICh0b2tlbi0+bmFtZSgp
ID09IHRyVGFnKSB7CisgICAgQVNTRVJUKHRva2VuLnR5cGUoKSA9PSBIVE1MVG9rZW46OkVuZFRh
Zyk7CisgICAgaWYgKHRva2VuLm5hbWUoKSA9PSB0clRhZykgewogICAgICAgICBwcm9jZXNzVHJF
bmRUYWdGb3JJblJvdygpOwogICAgICAgICByZXR1cm47CiAgICAgfQotICAgIGlmICh0b2tlbi0+
bmFtZSgpID09IHRhYmxlVGFnKSB7CisgICAgaWYgKHRva2VuLm5hbWUoKSA9PSB0YWJsZVRhZykg
ewogICAgICAgICBpZiAoIXByb2Nlc3NUckVuZFRhZ0ZvckluUm93KCkpIHsKICAgICAgICAgICAg
IEFTU0VSVChpc1BhcnNpbmdGcmFnbWVudE9yVGVtcGxhdGVDb250ZW50cygpKTsKICAgICAgICAg
ICAgIHJldHVybjsKICAgICAgICAgfQotICAgICAgICBBU1NFUlQoaW5zZXJ0aW9uTW9kZSgpID09
IEluc2VydGlvbk1vZGU6OkluVGFibGVCb2R5KTsKKyAgICAgICAgQVNTRVJUKG1faW5zZXJ0aW9u
TW9kZSA9PSBJbnNlcnRpb25Nb2RlOjpJblRhYmxlQm9keSk7CiAgICAgICAgIHByb2Nlc3NFbmRU
YWcodG9rZW4pOwogICAgICAgICByZXR1cm47CiAgICAgfQotICAgIGlmIChpc1RhYmxlQm9keUNv
bnRleHRUYWcodG9rZW4tPm5hbWUoKSkpIHsKLSAgICAgICAgaWYgKCFtX3RyZWUub3BlbkVsZW1l
bnRzKCktPmluVGFibGVTY29wZSh0b2tlbi0+bmFtZSgpKSkgeworICAgIGlmIChpc1RhYmxlQm9k
eUNvbnRleHRUYWcodG9rZW4ubmFtZSgpKSkgeworICAgICAgICBpZiAoIW1fdHJlZS5vcGVuRWxl
bWVudHMoKS0+aW5UYWJsZVNjb3BlKHRva2VuLm5hbWUoKSkpIHsKICAgICAgICAgICAgIHBhcnNl
RXJyb3IodG9rZW4pOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgICAgIHBy
b2Nlc3NGYWtlRW5kVGFnKHRyVGFnKTsKLSAgICAgICAgQVNTRVJUKGluc2VydGlvbk1vZGUoKSA9
PSBJbnNlcnRpb25Nb2RlOjpJblRhYmxlQm9keSk7CisgICAgICAgIEFTU0VSVChtX2luc2VydGlv
bk1vZGUgPT0gSW5zZXJ0aW9uTW9kZTo6SW5UYWJsZUJvZHkpOwogICAgICAgICBwcm9jZXNzRW5k
VGFnKHRva2VuKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBpZiAodG9rZW4tPm5hbWUo
KSA9PSBib2R5VGFnCi0gICAgICAgIHx8IGlzQ2FwdGlvbkNvbE9yQ29sZ3JvdXBUYWcodG9rZW4t
Pm5hbWUoKSkKLSAgICAgICAgfHwgdG9rZW4tPm5hbWUoKSA9PSBodG1sVGFnCi0gICAgICAgIHx8
IGlzVGFibGVDZWxsQ29udGV4dFRhZyh0b2tlbi0+bmFtZSgpKSkgeworICAgIGlmICh0b2tlbi5u
YW1lKCkgPT0gYm9keVRhZworICAgICAgICB8fCBpc0NhcHRpb25Db2xPckNvbGdyb3VwVGFnKHRv
a2VuLm5hbWUoKSkKKyAgICAgICAgfHwgdG9rZW4ubmFtZSgpID09IGh0bWxUYWcKKyAgICAgICAg
fHwgaXNUYWJsZUNlbGxDb250ZXh0VGFnKHRva2VuLm5hbWUoKSkpIHsKICAgICAgICAgcGFyc2VF
cnJvcih0b2tlbik7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgcHJvY2Vzc0VuZFRhZ0Zv
ckluVGFibGUodG9rZW4pOwogfQogCi12b2lkIEhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc0VuZFRh
Z0ZvckluQ2VsbChBdG9taWNIVE1MVG9rZW4qIHRva2VuKQordm9pZCBIVE1MVHJlZUJ1aWxkZXI6
OnByb2Nlc3NFbmRUYWdGb3JJbkNlbGwoQXRvbWljSFRNTFRva2VuJiB0b2tlbikKIHsKLSAgICBB
U1NFUlQodG9rZW4tPnR5cGUoKSA9PSBIVE1MVG9rZW46OkVuZFRhZyk7Ci0gICAgaWYgKGlzVGFi
bGVDZWxsQ29udGV4dFRhZyh0b2tlbi0+bmFtZSgpKSkgewotICAgICAgICBpZiAoIW1fdHJlZS5v
cGVuRWxlbWVudHMoKS0+aW5UYWJsZVNjb3BlKHRva2VuLT5uYW1lKCkpKSB7CisgICAgQVNTRVJU
KHRva2VuLnR5cGUoKSA9PSBIVE1MVG9rZW46OkVuZFRhZyk7CisgICAgaWYgKGlzVGFibGVDZWxs
Q29udGV4dFRhZyh0b2tlbi5uYW1lKCkpKSB7CisgICAgICAgIGlmICghbV90cmVlLm9wZW5FbGVt
ZW50cygpLT5pblRhYmxlU2NvcGUodG9rZW4ubmFtZSgpKSkgewogICAgICAgICAgICAgcGFyc2VF
cnJvcih0b2tlbik7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgbV90
cmVlLmdlbmVyYXRlSW1wbGllZEVuZFRhZ3MoKTsKLSAgICAgICAgaWYgKCFtX3RyZWUuY3VycmVu
dFN0YWNrSXRlbSgpLT5tYXRjaGVzSFRNTFRhZyh0b2tlbi0+bmFtZSgpKSkKKyAgICAgICAgaWYg
KCFtX3RyZWUuY3VycmVudFN0YWNrSXRlbSgpLT5tYXRjaGVzSFRNTFRhZyh0b2tlbi5uYW1lKCkp
KQogICAgICAgICAgICAgcGFyc2VFcnJvcih0b2tlbik7Ci0gICAgICAgIG1fdHJlZS5vcGVuRWxl
bWVudHMoKS0+cG9wVW50aWxQb3BwZWQodG9rZW4tPm5hbWUoKSk7CisgICAgICAgIG1fdHJlZS5v
cGVuRWxlbWVudHMoKS0+cG9wVW50aWxQb3BwZWQodG9rZW4ubmFtZSgpKTsKICAgICAgICAgbV90
cmVlLmFjdGl2ZUZvcm1hdHRpbmdFbGVtZW50cygpLT5jbGVhclRvTGFzdE1hcmtlcigpOwotICAg
ICAgICBzZXRJbnNlcnRpb25Nb2RlKEluc2VydGlvbk1vZGU6OkluUm93KTsKKyAgICAgICAgbV9p
bnNlcnRpb25Nb2RlID0gSW5zZXJ0aW9uTW9kZTo6SW5Sb3c7CiAgICAgICAgIHJldHVybjsKICAg
ICB9Ci0gICAgaWYgKHRva2VuLT5uYW1lKCkgPT0gYm9keVRhZwotICAgICAgICB8fCBpc0NhcHRp
b25Db2xPckNvbGdyb3VwVGFnKHRva2VuLT5uYW1lKCkpCi0gICAgICAgIHx8IHRva2VuLT5uYW1l
KCkgPT0gaHRtbFRhZykgeworICAgIGlmICh0b2tlbi5uYW1lKCkgPT0gYm9keVRhZworICAgICAg
ICB8fCBpc0NhcHRpb25Db2xPckNvbGdyb3VwVGFnKHRva2VuLm5hbWUoKSkKKyAgICAgICAgfHwg
dG9rZW4ubmFtZSgpID09IGh0bWxUYWcpIHsKICAgICAgICAgcGFyc2VFcnJvcih0b2tlbik7CiAg
ICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgaWYgKHRva2VuLT5uYW1lKCkgPT0gdGFibGVUYWcK
LSAgICAgICAgfHwgdG9rZW4tPm5hbWUoKSA9PSB0clRhZwotICAgICAgICB8fCBpc1RhYmxlQm9k
eUNvbnRleHRUYWcodG9rZW4tPm5hbWUoKSkpIHsKLSAgICAgICAgaWYgKCFtX3RyZWUub3BlbkVs
ZW1lbnRzKCktPmluVGFibGVTY29wZSh0b2tlbi0+bmFtZSgpKSkgeworICAgIGlmICh0b2tlbi5u
YW1lKCkgPT0gdGFibGVUYWcKKyAgICAgICAgfHwgdG9rZW4ubmFtZSgpID09IHRyVGFnCisgICAg
ICAgIHx8IGlzVGFibGVCb2R5Q29udGV4dFRhZyh0b2tlbi5uYW1lKCkpKSB7CisgICAgICAgIGlm
ICghbV90cmVlLm9wZW5FbGVtZW50cygpLT5pblRhYmxlU2NvcGUodG9rZW4ubmFtZSgpKSkgewog
I2lmIEVOQUJMRShURU1QTEFURV9FTEVNRU5UKQotICAgICAgICAgICAgQVNTRVJUKGlzVGFibGVC
b2R5Q29udGV4dFRhZyh0b2tlbi0+bmFtZSgpKSB8fCBtX3RyZWUub3BlbkVsZW1lbnRzKCktPmlu
VGFibGVTY29wZSh0ZW1wbGF0ZVRhZykgfHwgaXNQYXJzaW5nRnJhZ21lbnQoKSk7CisgICAgICAg
ICAgICBBU1NFUlQoaXNUYWJsZUJvZHlDb250ZXh0VGFnKHRva2VuLm5hbWUoKSkgfHwgbV90cmVl
Lm9wZW5FbGVtZW50cygpLT5pblRhYmxlU2NvcGUodGVtcGxhdGVUYWcpIHx8IGlzUGFyc2luZ0Zy
YWdtZW50KCkpOwogI2Vsc2UKLSAgICAgICAgICAgIEFTU0VSVChpc1RhYmxlQm9keUNvbnRleHRU
YWcodG9rZW4tPm5hbWUoKSkgfHwgaXNQYXJzaW5nRnJhZ21lbnQoKSk7CisgICAgICAgICAgICBB
U1NFUlQoaXNUYWJsZUJvZHlDb250ZXh0VGFnKHRva2VuLm5hbWUoKSkgfHwgaXNQYXJzaW5nRnJh
Z21lbnQoKSk7CiAjZW5kaWYKICAgICAgICAgICAgIHBhcnNlRXJyb3IodG9rZW4pOwogICAgICAg
ICAgICAgcmV0dXJuOwpAQCAtMTc4OCw1NSArMTc3Nyw1NSBAQCB2b2lkIEhUTUxUcmVlQnVpbGRl
cjo6cHJvY2Vzc0VuZFRhZ0ZvckluQ2VsbChBdG9taWNIVE1MVG9rZW4qIHRva2VuKQogICAgIHBy
b2Nlc3NFbmRUYWdGb3JJbkJvZHkodG9rZW4pOwogfQogCi12b2lkIEhUTUxUcmVlQnVpbGRlcjo6
cHJvY2Vzc0VuZFRhZ0ZvckluQm9keShBdG9taWNIVE1MVG9rZW4qIHRva2VuKQordm9pZCBIVE1M
VHJlZUJ1aWxkZXI6OnByb2Nlc3NFbmRUYWdGb3JJbkJvZHkoQXRvbWljSFRNTFRva2VuJiB0b2tl
bikKIHsKLSAgICBBU1NFUlQodG9rZW4tPnR5cGUoKSA9PSBIVE1MVG9rZW46OkVuZFRhZyk7Ci0g
ICAgaWYgKHRva2VuLT5uYW1lKCkgPT0gYm9keVRhZykgeworICAgIEFTU0VSVCh0b2tlbi50eXBl
KCkgPT0gSFRNTFRva2VuOjpFbmRUYWcpOworICAgIGlmICh0b2tlbi5uYW1lKCkgPT0gYm9keVRh
ZykgewogICAgICAgICBwcm9jZXNzQm9keUVuZFRhZ0ZvckluQm9keSh0b2tlbik7CiAgICAgICAg
IHJldHVybjsKICAgICB9Ci0gICAgaWYgKHRva2VuLT5uYW1lKCkgPT0gaHRtbFRhZykgeworICAg
IGlmICh0b2tlbi5uYW1lKCkgPT0gaHRtbFRhZykgewogICAgICAgICBBdG9taWNIVE1MVG9rZW4g
ZW5kQm9keShIVE1MVG9rZW46OkVuZFRhZywgYm9keVRhZy5sb2NhbE5hbWUoKSk7Ci0gICAgICAg
IGlmIChwcm9jZXNzQm9keUVuZFRhZ0ZvckluQm9keSgmZW5kQm9keSkpCisgICAgICAgIGlmIChw
cm9jZXNzQm9keUVuZFRhZ0ZvckluQm9keShlbmRCb2R5KSkKICAgICAgICAgICAgIHByb2Nlc3NF
bmRUYWcodG9rZW4pOwogICAgICAgICByZXR1cm47CiAgICAgfQotICAgIGlmICh0b2tlbi0+bmFt
ZSgpID09IGFkZHJlc3NUYWcKLSAgICAgICAgfHwgdG9rZW4tPm5hbWUoKSA9PSBhcnRpY2xlVGFn
Ci0gICAgICAgIHx8IHRva2VuLT5uYW1lKCkgPT0gYXNpZGVUYWcKLSAgICAgICAgfHwgdG9rZW4t
Pm5hbWUoKSA9PSBibG9ja3F1b3RlVGFnCi0gICAgICAgIHx8IHRva2VuLT5uYW1lKCkgPT0gYnV0
dG9uVGFnCi0gICAgICAgIHx8IHRva2VuLT5uYW1lKCkgPT0gY2VudGVyVGFnCi0gICAgICAgIHx8
IHRva2VuLT5uYW1lKCkgPT0gZGV0YWlsc1RhZwotICAgICAgICB8fCB0b2tlbi0+bmFtZSgpID09
IGRpclRhZwotICAgICAgICB8fCB0b2tlbi0+bmFtZSgpID09IGRpdlRhZwotICAgICAgICB8fCB0
b2tlbi0+bmFtZSgpID09IGRsVGFnCi0gICAgICAgIHx8IHRva2VuLT5uYW1lKCkgPT0gZmllbGRz
ZXRUYWcKLSAgICAgICAgfHwgdG9rZW4tPm5hbWUoKSA9PSBmaWdjYXB0aW9uVGFnCi0gICAgICAg
IHx8IHRva2VuLT5uYW1lKCkgPT0gZmlndXJlVGFnCi0gICAgICAgIHx8IHRva2VuLT5uYW1lKCkg
PT0gZm9vdGVyVGFnCi0gICAgICAgIHx8IHRva2VuLT5uYW1lKCkgPT0gaGVhZGVyVGFnCi0gICAg
ICAgIHx8IHRva2VuLT5uYW1lKCkgPT0gaGdyb3VwVGFnCi0gICAgICAgIHx8IHRva2VuLT5uYW1l
KCkgPT0gbGlzdGluZ1RhZwotICAgICAgICB8fCB0b2tlbi0+bmFtZSgpID09IG1haW5UYWcKLSAg
ICAgICAgfHwgdG9rZW4tPm5hbWUoKSA9PSBtZW51VGFnCi0gICAgICAgIHx8IHRva2VuLT5uYW1l
KCkgPT0gbmF2VGFnCi0gICAgICAgIHx8IHRva2VuLT5uYW1lKCkgPT0gb2xUYWcKLSAgICAgICAg
fHwgdG9rZW4tPm5hbWUoKSA9PSBwcmVUYWcKLSAgICAgICAgfHwgdG9rZW4tPm5hbWUoKSA9PSBz
ZWN0aW9uVGFnCi0gICAgICAgIHx8IHRva2VuLT5uYW1lKCkgPT0gc3VtbWFyeVRhZwotICAgICAg
ICB8fCB0b2tlbi0+bmFtZSgpID09IHVsVGFnKSB7Ci0gICAgICAgIGlmICghbV90cmVlLm9wZW5F
bGVtZW50cygpLT5pblNjb3BlKHRva2VuLT5uYW1lKCkpKSB7CisgICAgaWYgKHRva2VuLm5hbWUo
KSA9PSBhZGRyZXNzVGFnCisgICAgICAgIHx8IHRva2VuLm5hbWUoKSA9PSBhcnRpY2xlVGFnCisg
ICAgICAgIHx8IHRva2VuLm5hbWUoKSA9PSBhc2lkZVRhZworICAgICAgICB8fCB0b2tlbi5uYW1l
KCkgPT0gYmxvY2txdW90ZVRhZworICAgICAgICB8fCB0b2tlbi5uYW1lKCkgPT0gYnV0dG9uVGFn
CisgICAgICAgIHx8IHRva2VuLm5hbWUoKSA9PSBjZW50ZXJUYWcKKyAgICAgICAgfHwgdG9rZW4u
bmFtZSgpID09IGRldGFpbHNUYWcKKyAgICAgICAgfHwgdG9rZW4ubmFtZSgpID09IGRpclRhZwor
ICAgICAgICB8fCB0b2tlbi5uYW1lKCkgPT0gZGl2VGFnCisgICAgICAgIHx8IHRva2VuLm5hbWUo
KSA9PSBkbFRhZworICAgICAgICB8fCB0b2tlbi5uYW1lKCkgPT0gZmllbGRzZXRUYWcKKyAgICAg
ICAgfHwgdG9rZW4ubmFtZSgpID09IGZpZ2NhcHRpb25UYWcKKyAgICAgICAgfHwgdG9rZW4ubmFt
ZSgpID09IGZpZ3VyZVRhZworICAgICAgICB8fCB0b2tlbi5uYW1lKCkgPT0gZm9vdGVyVGFnCisg
ICAgICAgIHx8IHRva2VuLm5hbWUoKSA9PSBoZWFkZXJUYWcKKyAgICAgICAgfHwgdG9rZW4ubmFt
ZSgpID09IGhncm91cFRhZworICAgICAgICB8fCB0b2tlbi5uYW1lKCkgPT0gbGlzdGluZ1RhZwor
ICAgICAgICB8fCB0b2tlbi5uYW1lKCkgPT0gbWFpblRhZworICAgICAgICB8fCB0b2tlbi5uYW1l
KCkgPT0gbWVudVRhZworICAgICAgICB8fCB0b2tlbi5uYW1lKCkgPT0gbmF2VGFnCisgICAgICAg
IHx8IHRva2VuLm5hbWUoKSA9PSBvbFRhZworICAgICAgICB8fCB0b2tlbi5uYW1lKCkgPT0gcHJl
VGFnCisgICAgICAgIHx8IHRva2VuLm5hbWUoKSA9PSBzZWN0aW9uVGFnCisgICAgICAgIHx8IHRv
a2VuLm5hbWUoKSA9PSBzdW1tYXJ5VGFnCisgICAgICAgIHx8IHRva2VuLm5hbWUoKSA9PSB1bFRh
ZykgeworICAgICAgICBpZiAoIW1fdHJlZS5vcGVuRWxlbWVudHMoKS0+aW5TY29wZSh0b2tlbi5u
YW1lKCkpKSB7CiAgICAgICAgICAgICBwYXJzZUVycm9yKHRva2VuKTsKICAgICAgICAgICAgIHJl
dHVybjsKICAgICAgICAgfQogICAgICAgICBtX3RyZWUuZ2VuZXJhdGVJbXBsaWVkRW5kVGFncygp
OwotICAgICAgICBpZiAoIW1fdHJlZS5jdXJyZW50U3RhY2tJdGVtKCktPm1hdGNoZXNIVE1MVGFn
KHRva2VuLT5uYW1lKCkpKQorICAgICAgICBpZiAoIW1fdHJlZS5jdXJyZW50U3RhY2tJdGVtKCkt
Pm1hdGNoZXNIVE1MVGFnKHRva2VuLm5hbWUoKSkpCiAgICAgICAgICAgICBwYXJzZUVycm9yKHRv
a2VuKTsKLSAgICAgICAgbV90cmVlLm9wZW5FbGVtZW50cygpLT5wb3BVbnRpbFBvcHBlZCh0b2tl
bi0+bmFtZSgpKTsKKyAgICAgICAgbV90cmVlLm9wZW5FbGVtZW50cygpLT5wb3BVbnRpbFBvcHBl
ZCh0b2tlbi5uYW1lKCkpOwogICAgICAgICByZXR1cm47CiAgICAgfQotICAgIGlmICh0b2tlbi0+
bmFtZSgpID09IGZvcm1UYWcpIHsKKyAgICBpZiAodG9rZW4ubmFtZSgpID09IGZvcm1UYWcpIHsK
ICAgICAgICAgaWYgKCFpc1BhcnNpbmdUZW1wbGF0ZUNvbnRlbnRzKCkpIHsKICAgICAgICAgICAg
IFJlZlB0cjxFbGVtZW50PiBub2RlID0gbV90cmVlLnRha2VGb3JtKCk7CiAgICAgICAgICAgICBp
ZiAoIW5vZGUgfHwgIW1fdHJlZS5vcGVuRWxlbWVudHMoKS0+aW5TY29wZShub2RlLmdldCgpKSkg
ewpAQCAtMTg0OCw4OSArMTgzNyw4NiBAQCB2b2lkIEhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc0Vu
ZFRhZ0ZvckluQm9keShBdG9taWNIVE1MVG9rZW4qIHRva2VuKQogICAgICAgICAgICAgICAgIHBh
cnNlRXJyb3IodG9rZW4pOwogICAgICAgICAgICAgbV90cmVlLm9wZW5FbGVtZW50cygpLT5yZW1v
dmUobm9kZS5nZXQoKSk7CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBpZiAoIW1fdHJl
ZS5vcGVuRWxlbWVudHMoKS0+aW5TY29wZSh0b2tlbi0+bmFtZSgpKSkgeworICAgICAgICAgICAg
aWYgKCFtX3RyZWUub3BlbkVsZW1lbnRzKCktPmluU2NvcGUodG9rZW4ubmFtZSgpKSkgewogICAg
ICAgICAgICAgICAgIHBhcnNlRXJyb3IodG9rZW4pOwogICAgICAgICAgICAgICAgIHJldHVybjsK
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgIG1fdHJlZS5nZW5lcmF0ZUltcGxpZWRFbmRUYWdz
KCk7CiAgICAgICAgICAgICBpZiAoIW1fdHJlZS5jdXJyZW50Tm9kZSgpLT5oYXNUYWdOYW1lKGZv
cm1UYWcpKQogICAgICAgICAgICAgICAgIHBhcnNlRXJyb3IodG9rZW4pOwotICAgICAgICAgICAg
bV90cmVlLm9wZW5FbGVtZW50cygpLT5wb3BVbnRpbFBvcHBlZCh0b2tlbi0+bmFtZSgpKTsKKyAg
ICAgICAgICAgIG1fdHJlZS5vcGVuRWxlbWVudHMoKS0+cG9wVW50aWxQb3BwZWQodG9rZW4ubmFt
ZSgpKTsKICAgICAgICAgfQogICAgIH0KLSAgICBpZiAodG9rZW4tPm5hbWUoKSA9PSBwVGFnKSB7
Ci0gICAgICAgIGlmICghbV90cmVlLm9wZW5FbGVtZW50cygpLT5pbkJ1dHRvblNjb3BlKHRva2Vu
LT5uYW1lKCkpKSB7CisgICAgaWYgKHRva2VuLm5hbWUoKSA9PSBwVGFnKSB7CisgICAgICAgIGlm
ICghbV90cmVlLm9wZW5FbGVtZW50cygpLT5pbkJ1dHRvblNjb3BlKHRva2VuLm5hbWUoKSkpIHsK
ICAgICAgICAgICAgIHBhcnNlRXJyb3IodG9rZW4pOwogICAgICAgICAgICAgcHJvY2Vzc0Zha2VT
dGFydFRhZyhwVGFnKTsKLSAgICAgICAgICAgIEFTU0VSVChtX3RyZWUub3BlbkVsZW1lbnRzKCkt
PmluU2NvcGUodG9rZW4tPm5hbWUoKSkpOworICAgICAgICAgICAgQVNTRVJUKG1fdHJlZS5vcGVu
RWxlbWVudHMoKS0+aW5TY29wZSh0b2tlbi5uYW1lKCkpKTsKICAgICAgICAgICAgIHByb2Nlc3NF
bmRUYWcodG9rZW4pOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9Ci0gICAgICAgIG1f
dHJlZS5nZW5lcmF0ZUltcGxpZWRFbmRUYWdzV2l0aEV4Y2x1c2lvbih0b2tlbi0+bmFtZSgpKTsK
LSAgICAgICAgaWYgKCFtX3RyZWUuY3VycmVudFN0YWNrSXRlbSgpLT5tYXRjaGVzSFRNTFRhZyh0
b2tlbi0+bmFtZSgpKSkKKyAgICAgICAgbV90cmVlLmdlbmVyYXRlSW1wbGllZEVuZFRhZ3NXaXRo
RXhjbHVzaW9uKHRva2VuLm5hbWUoKSk7CisgICAgICAgIGlmICghbV90cmVlLmN1cnJlbnRTdGFj
a0l0ZW0oKS0+bWF0Y2hlc0hUTUxUYWcodG9rZW4ubmFtZSgpKSkKICAgICAgICAgICAgIHBhcnNl
RXJyb3IodG9rZW4pOwotICAgICAgICBtX3RyZWUub3BlbkVsZW1lbnRzKCktPnBvcFVudGlsUG9w
cGVkKHRva2VuLT5uYW1lKCkpOworICAgICAgICBtX3RyZWUub3BlbkVsZW1lbnRzKCktPnBvcFVu
dGlsUG9wcGVkKHRva2VuLm5hbWUoKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgaWYg
KHRva2VuLT5uYW1lKCkgPT0gbGlUYWcpIHsKLSAgICAgICAgaWYgKCFtX3RyZWUub3BlbkVsZW1l
bnRzKCktPmluTGlzdEl0ZW1TY29wZSh0b2tlbi0+bmFtZSgpKSkgeworICAgIGlmICh0b2tlbi5u
YW1lKCkgPT0gbGlUYWcpIHsKKyAgICAgICAgaWYgKCFtX3RyZWUub3BlbkVsZW1lbnRzKCktPmlu
TGlzdEl0ZW1TY29wZSh0b2tlbi5uYW1lKCkpKSB7CiAgICAgICAgICAgICBwYXJzZUVycm9yKHRv
a2VuKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQotICAgICAgICBtX3RyZWUuZ2Vu
ZXJhdGVJbXBsaWVkRW5kVGFnc1dpdGhFeGNsdXNpb24odG9rZW4tPm5hbWUoKSk7Ci0gICAgICAg
IGlmICghbV90cmVlLmN1cnJlbnRTdGFja0l0ZW0oKS0+bWF0Y2hlc0hUTUxUYWcodG9rZW4tPm5h
bWUoKSkpCisgICAgICAgIG1fdHJlZS5nZW5lcmF0ZUltcGxpZWRFbmRUYWdzV2l0aEV4Y2x1c2lv
bih0b2tlbi5uYW1lKCkpOworICAgICAgICBpZiAoIW1fdHJlZS5jdXJyZW50U3RhY2tJdGVtKCkt
Pm1hdGNoZXNIVE1MVGFnKHRva2VuLm5hbWUoKSkpCiAgICAgICAgICAgICBwYXJzZUVycm9yKHRv
a2VuKTsKLSAgICAgICAgbV90cmVlLm9wZW5FbGVtZW50cygpLT5wb3BVbnRpbFBvcHBlZCh0b2tl
bi0+bmFtZSgpKTsKKyAgICAgICAgbV90cmVlLm9wZW5FbGVtZW50cygpLT5wb3BVbnRpbFBvcHBl
ZCh0b2tlbi5uYW1lKCkpOwogICAgICAgICByZXR1cm47CiAgICAgfQotICAgIGlmICh0b2tlbi0+
bmFtZSgpID09IGRkVGFnCi0gICAgICAgIHx8IHRva2VuLT5uYW1lKCkgPT0gZHRUYWcpIHsKLSAg
ICAgICAgaWYgKCFtX3RyZWUub3BlbkVsZW1lbnRzKCktPmluU2NvcGUodG9rZW4tPm5hbWUoKSkp
IHsKKyAgICBpZiAodG9rZW4ubmFtZSgpID09IGRkVGFnIHx8IHRva2VuLm5hbWUoKSA9PSBkdFRh
ZykgeworICAgICAgICBpZiAoIW1fdHJlZS5vcGVuRWxlbWVudHMoKS0+aW5TY29wZSh0b2tlbi5u
YW1lKCkpKSB7CiAgICAgICAgICAgICBwYXJzZUVycm9yKHRva2VuKTsKICAgICAgICAgICAgIHJl
dHVybjsKICAgICAgICAgfQotICAgICAgICBtX3RyZWUuZ2VuZXJhdGVJbXBsaWVkRW5kVGFnc1dp
dGhFeGNsdXNpb24odG9rZW4tPm5hbWUoKSk7Ci0gICAgICAgIGlmICghbV90cmVlLmN1cnJlbnRT
dGFja0l0ZW0oKS0+bWF0Y2hlc0hUTUxUYWcodG9rZW4tPm5hbWUoKSkpCisgICAgICAgIG1fdHJl
ZS5nZW5lcmF0ZUltcGxpZWRFbmRUYWdzV2l0aEV4Y2x1c2lvbih0b2tlbi5uYW1lKCkpOworICAg
ICAgICBpZiAoIW1fdHJlZS5jdXJyZW50U3RhY2tJdGVtKCktPm1hdGNoZXNIVE1MVGFnKHRva2Vu
Lm5hbWUoKSkpCiAgICAgICAgICAgICBwYXJzZUVycm9yKHRva2VuKTsKLSAgICAgICAgbV90cmVl
Lm9wZW5FbGVtZW50cygpLT5wb3BVbnRpbFBvcHBlZCh0b2tlbi0+bmFtZSgpKTsKKyAgICAgICAg
bV90cmVlLm9wZW5FbGVtZW50cygpLT5wb3BVbnRpbFBvcHBlZCh0b2tlbi5uYW1lKCkpOwogICAg
ICAgICByZXR1cm47CiAgICAgfQotICAgIGlmIChpc051bWJlcmVkSGVhZGVyVGFnKHRva2VuLT5u
YW1lKCkpKSB7CisgICAgaWYgKGlzTnVtYmVyZWRIZWFkZXJUYWcodG9rZW4ubmFtZSgpKSkgewog
ICAgICAgICBpZiAoIW1fdHJlZS5vcGVuRWxlbWVudHMoKS0+aGFzTnVtYmVyZWRIZWFkZXJFbGVt
ZW50SW5TY29wZSgpKSB7CiAgICAgICAgICAgICBwYXJzZUVycm9yKHRva2VuKTsKICAgICAgICAg
ICAgIHJldHVybjsKICAgICAgICAgfQogICAgICAgICBtX3RyZWUuZ2VuZXJhdGVJbXBsaWVkRW5k
VGFncygpOwotICAgICAgICBpZiAoIW1fdHJlZS5jdXJyZW50U3RhY2tJdGVtKCktPm1hdGNoZXNI
VE1MVGFnKHRva2VuLT5uYW1lKCkpKQorICAgICAgICBpZiAoIW1fdHJlZS5jdXJyZW50U3RhY2tJ
dGVtKCktPm1hdGNoZXNIVE1MVGFnKHRva2VuLm5hbWUoKSkpCiAgICAgICAgICAgICBwYXJzZUVy
cm9yKHRva2VuKTsKICAgICAgICAgbV90cmVlLm9wZW5FbGVtZW50cygpLT5wb3BVbnRpbE51bWJl
cmVkSGVhZGVyRWxlbWVudFBvcHBlZCgpOwogICAgICAgICByZXR1cm47CiAgICAgfQotICAgIGlm
IChpc0Zvcm1hdHRpbmdUYWcodG9rZW4tPm5hbWUoKSkpIHsKKyAgICBpZiAoaXNGb3JtYXR0aW5n
VGFnKHRva2VuLm5hbWUoKSkpIHsKICAgICAgICAgY2FsbFRoZUFkb3B0aW9uQWdlbmN5KHRva2Vu
KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBpZiAodG9rZW4tPm5hbWUoKSA9PSBhcHBs
ZXRUYWcKLSAgICAgICAgfHwgdG9rZW4tPm5hbWUoKSA9PSBtYXJxdWVlVGFnCi0gICAgICAgIHx8
IHRva2VuLT5uYW1lKCkgPT0gb2JqZWN0VGFnKSB7Ci0gICAgICAgIGlmICghbV90cmVlLm9wZW5F
bGVtZW50cygpLT5pblNjb3BlKHRva2VuLT5uYW1lKCkpKSB7CisgICAgaWYgKHRva2VuLm5hbWUo
KSA9PSBhcHBsZXRUYWcgfHwgdG9rZW4ubmFtZSgpID09IG1hcnF1ZWVUYWcgfHwgdG9rZW4ubmFt
ZSgpID09IG9iamVjdFRhZykgeworICAgICAgICBpZiAoIW1fdHJlZS5vcGVuRWxlbWVudHMoKS0+
aW5TY29wZSh0b2tlbi5uYW1lKCkpKSB7CiAgICAgICAgICAgICBwYXJzZUVycm9yKHRva2VuKTsK
ICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgICAgICBtX3RyZWUuZ2VuZXJhdGVJ
bXBsaWVkRW5kVGFncygpOwotICAgICAgICBpZiAoIW1fdHJlZS5jdXJyZW50U3RhY2tJdGVtKCkt
Pm1hdGNoZXNIVE1MVGFnKHRva2VuLT5uYW1lKCkpKQorICAgICAgICBpZiAoIW1fdHJlZS5jdXJy
ZW50U3RhY2tJdGVtKCktPm1hdGNoZXNIVE1MVGFnKHRva2VuLm5hbWUoKSkpCiAgICAgICAgICAg
ICBwYXJzZUVycm9yKHRva2VuKTsKLSAgICAgICAgbV90cmVlLm9wZW5FbGVtZW50cygpLT5wb3BV
bnRpbFBvcHBlZCh0b2tlbi0+bmFtZSgpKTsKKyAgICAgICAgbV90cmVlLm9wZW5FbGVtZW50cygp
LT5wb3BVbnRpbFBvcHBlZCh0b2tlbi5uYW1lKCkpOwogICAgICAgICBtX3RyZWUuYWN0aXZlRm9y
bWF0dGluZ0VsZW1lbnRzKCktPmNsZWFyVG9MYXN0TWFya2VyKCk7CiAgICAgICAgIHJldHVybjsK
ICAgICB9Ci0gICAgaWYgKHRva2VuLT5uYW1lKCkgPT0gYnJUYWcpIHsKKyAgICBpZiAodG9rZW4u
bmFtZSgpID09IGJyVGFnKSB7CiAgICAgICAgIHBhcnNlRXJyb3IodG9rZW4pOwogICAgICAgICBw
cm9jZXNzRmFrZVN0YXJ0VGFnKGJyVGFnKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICNpZiBF
TkFCTEUoVEVNUExBVEVfRUxFTUVOVCkKLSAgICBpZiAodG9rZW4tPm5hbWUoKSA9PSB0ZW1wbGF0
ZVRhZykgeworICAgIGlmICh0b2tlbi5uYW1lKCkgPT0gdGVtcGxhdGVUYWcpIHsKICAgICAgICAg
cHJvY2Vzc1RlbXBsYXRlRW5kVGFnKHRva2VuKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAg
LTE5NDksNyArMTkzNSw3IEBAIGJvb2wgSFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNzQ2FwdGlvbkVu
ZFRhZ0ZvckluQ2FwdGlvbigpCiAgICAgLy8gRklYTUU6IHBhcnNlIGVycm9yIGlmICghbV90cmVl
LmN1cnJlbnRTdGFja0l0ZW0oKS0+aGFzVGFnTmFtZShjYXB0aW9uVGFnKSkKICAgICBtX3RyZWUu
b3BlbkVsZW1lbnRzKCktPnBvcFVudGlsUG9wcGVkKGNhcHRpb25UYWcubG9jYWxOYW1lKCkpOwog
ICAgIG1fdHJlZS5hY3RpdmVGb3JtYXR0aW5nRWxlbWVudHMoKS0+Y2xlYXJUb0xhc3RNYXJrZXIo
KTsKLSAgICBzZXRJbnNlcnRpb25Nb2RlKEluc2VydGlvbk1vZGU6OkluVGFibGUpOworICAgIG1f
aW5zZXJ0aW9uTW9kZSA9IEluc2VydGlvbk1vZGU6OkluVGFibGU7CiAgICAgcmV0dXJuIHRydWU7
CiB9CiAKQEAgLTE5NjMsNyArMTk0OSw3IEBAIGJvb2wgSFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNz
VHJFbmRUYWdGb3JJblJvdygpCiAgICAgbV90cmVlLm9wZW5FbGVtZW50cygpLT5wb3BVbnRpbFRh
YmxlUm93U2NvcGVNYXJrZXIoKTsKICAgICBBU1NFUlQobV90cmVlLmN1cnJlbnRTdGFja0l0ZW0o
KS0+aGFzVGFnTmFtZSh0clRhZykpOwogICAgIG1fdHJlZS5vcGVuRWxlbWVudHMoKS0+cG9wKCk7
Ci0gICAgc2V0SW5zZXJ0aW9uTW9kZShJbnNlcnRpb25Nb2RlOjpJblRhYmxlQm9keSk7CisgICAg
bV9pbnNlcnRpb25Nb2RlID0gSW5zZXJ0aW9uTW9kZTo6SW5UYWJsZUJvZHk7CiAgICAgcmV0dXJu
IHRydWU7CiB9CiAKQEAgLTE5NzksMTkgKzE5NjUsMTkgQEAgYm9vbCBIVE1MVHJlZUJ1aWxkZXI6
OnByb2Nlc3NUYWJsZUVuZFRhZ0ZvckluVGFibGUoKQogICAgIHJldHVybiB0cnVlOwogfQogCi12
b2lkIEhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc0VuZFRhZ0ZvckluVGFibGUoQXRvbWljSFRNTFRv
a2VuKiB0b2tlbikKK3ZvaWQgSFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNzRW5kVGFnRm9ySW5UYWJs
ZShBdG9taWNIVE1MVG9rZW4mIHRva2VuKQogewotICAgIEFTU0VSVCh0b2tlbi0+dHlwZSgpID09
IEhUTUxUb2tlbjo6RW5kVGFnKTsKLSAgICBpZiAodG9rZW4tPm5hbWUoKSA9PSB0YWJsZVRhZykg
eworICAgIEFTU0VSVCh0b2tlbi50eXBlKCkgPT0gSFRNTFRva2VuOjpFbmRUYWcpOworICAgIGlm
ICh0b2tlbi5uYW1lKCkgPT0gdGFibGVUYWcpIHsKICAgICAgICAgcHJvY2Vzc1RhYmxlRW5kVGFn
Rm9ySW5UYWJsZSgpOwogICAgICAgICByZXR1cm47CiAgICAgfQotICAgIGlmICh0b2tlbi0+bmFt
ZSgpID09IGJvZHlUYWcKLSAgICAgICAgfHwgaXNDYXB0aW9uQ29sT3JDb2xncm91cFRhZyh0b2tl
bi0+bmFtZSgpKQotICAgICAgICB8fCB0b2tlbi0+bmFtZSgpID09IGh0bWxUYWcKLSAgICAgICAg
fHwgaXNUYWJsZUJvZHlDb250ZXh0VGFnKHRva2VuLT5uYW1lKCkpCi0gICAgICAgIHx8IGlzVGFi
bGVDZWxsQ29udGV4dFRhZyh0b2tlbi0+bmFtZSgpKQotICAgICAgICB8fCB0b2tlbi0+bmFtZSgp
ID09IHRyVGFnKSB7CisgICAgaWYgKHRva2VuLm5hbWUoKSA9PSBib2R5VGFnCisgICAgICAgIHx8
IGlzQ2FwdGlvbkNvbE9yQ29sZ3JvdXBUYWcodG9rZW4ubmFtZSgpKQorICAgICAgICB8fCB0b2tl
bi5uYW1lKCkgPT0gaHRtbFRhZworICAgICAgICB8fCBpc1RhYmxlQm9keUNvbnRleHRUYWcodG9r
ZW4ubmFtZSgpKQorICAgICAgICB8fCBpc1RhYmxlQ2VsbENvbnRleHRUYWcodG9rZW4ubmFtZSgp
KQorICAgICAgICB8fCB0b2tlbi5uYW1lKCkgPT0gdHJUYWcpIHsKICAgICAgICAgcGFyc2VFcnJv
cih0b2tlbik7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC0yMDAxLDc1ICsxOTg3LDc1IEBA
IHZvaWQgSFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNzRW5kVGFnRm9ySW5UYWJsZShBdG9taWNIVE1M
VG9rZW4qIHRva2VuKQogICAgIHByb2Nlc3NFbmRUYWdGb3JJbkJvZHkodG9rZW4pOwogfQogCi12
b2lkIEhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc0VuZFRhZyhBdG9taWNIVE1MVG9rZW4qIHRva2Vu
KQordm9pZCBIVE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NFbmRUYWcoQXRvbWljSFRNTFRva2VuJiB0
b2tlbikKIHsKLSAgICBBU1NFUlQodG9rZW4tPnR5cGUoKSA9PSBIVE1MVG9rZW46OkVuZFRhZyk7
Ci0gICAgc3dpdGNoIChpbnNlcnRpb25Nb2RlKCkpIHsKKyAgICBBU1NFUlQodG9rZW4udHlwZSgp
ID09IEhUTUxUb2tlbjo6RW5kVGFnKTsKKyAgICBzd2l0Y2ggKG1faW5zZXJ0aW9uTW9kZSkgewog
ICAgIGNhc2UgSW5zZXJ0aW9uTW9kZTo6SW5pdGlhbDoKLSAgICAgICAgQVNTRVJUKGluc2VydGlv
bk1vZGUoKSA9PSBJbnNlcnRpb25Nb2RlOjpJbml0aWFsKTsKKyAgICAgICAgQVNTRVJUKG1faW5z
ZXJ0aW9uTW9kZSA9PSBJbnNlcnRpb25Nb2RlOjpJbml0aWFsKTsKICAgICAgICAgZGVmYXVsdEZv
ckluaXRpYWwoKTsKICAgICAgICAgRkFMTFRIUk9VR0g7CiAgICAgY2FzZSBJbnNlcnRpb25Nb2Rl
OjpCZWZvcmVIVE1MOgotICAgICAgICBBU1NFUlQoaW5zZXJ0aW9uTW9kZSgpID09IEluc2VydGlv
bk1vZGU6OkJlZm9yZUhUTUwpOwotICAgICAgICBpZiAodG9rZW4tPm5hbWUoKSAhPSBoZWFkVGFn
ICYmIHRva2VuLT5uYW1lKCkgIT0gYm9keVRhZyAmJiB0b2tlbi0+bmFtZSgpICE9IGh0bWxUYWcg
JiYgdG9rZW4tPm5hbWUoKSAhPSBiclRhZykgeworICAgICAgICBBU1NFUlQobV9pbnNlcnRpb25N
b2RlID09IEluc2VydGlvbk1vZGU6OkJlZm9yZUhUTUwpOworICAgICAgICBpZiAodG9rZW4ubmFt
ZSgpICE9IGhlYWRUYWcgJiYgdG9rZW4ubmFtZSgpICE9IGJvZHlUYWcgJiYgdG9rZW4ubmFtZSgp
ICE9IGh0bWxUYWcgJiYgdG9rZW4ubmFtZSgpICE9IGJyVGFnKSB7CiAgICAgICAgICAgICBwYXJz
ZUVycm9yKHRva2VuKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgICAgICBk
ZWZhdWx0Rm9yQmVmb3JlSFRNTCgpOwogICAgICAgICBGQUxMVEhST1VHSDsKICAgICBjYXNlIElu
c2VydGlvbk1vZGU6OkJlZm9yZUhlYWQ6Ci0gICAgICAgIEFTU0VSVChpbnNlcnRpb25Nb2RlKCkg
PT0gSW5zZXJ0aW9uTW9kZTo6QmVmb3JlSGVhZCk7Ci0gICAgICAgIGlmICh0b2tlbi0+bmFtZSgp
ICE9IGhlYWRUYWcgJiYgdG9rZW4tPm5hbWUoKSAhPSBib2R5VGFnICYmIHRva2VuLT5uYW1lKCkg
IT0gaHRtbFRhZyAmJiB0b2tlbi0+bmFtZSgpICE9IGJyVGFnKSB7CisgICAgICAgIEFTU0VSVCht
X2luc2VydGlvbk1vZGUgPT0gSW5zZXJ0aW9uTW9kZTo6QmVmb3JlSGVhZCk7CisgICAgICAgIGlm
ICh0b2tlbi5uYW1lKCkgIT0gaGVhZFRhZyAmJiB0b2tlbi5uYW1lKCkgIT0gYm9keVRhZyAmJiB0
b2tlbi5uYW1lKCkgIT0gaHRtbFRhZyAmJiB0b2tlbi5uYW1lKCkgIT0gYnJUYWcpIHsKICAgICAg
ICAgICAgIHBhcnNlRXJyb3IodG9rZW4pOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9
CiAgICAgICAgIGRlZmF1bHRGb3JCZWZvcmVIZWFkKCk7CiAgICAgICAgIEZBTExUSFJPVUdIOwog
ICAgIGNhc2UgSW5zZXJ0aW9uTW9kZTo6SW5IZWFkOgotICAgICAgICBBU1NFUlQoaW5zZXJ0aW9u
TW9kZSgpID09IEluc2VydGlvbk1vZGU6OkluSGVhZCk7CisgICAgICAgIEFTU0VSVChtX2luc2Vy
dGlvbk1vZGUgPT0gSW5zZXJ0aW9uTW9kZTo6SW5IZWFkKTsKICAgICAgICAgLy8gRklYTUU6IFRo
aXMgY2FzZSBzaG91bGQgYmUgYnJva2VuIG91dCBpbnRvIHByb2Nlc3NFbmRUYWdGb3JJbkhlYWQs
CiAgICAgICAgIC8vIGJlY2F1c2Ugb3RoZXIgZW5kIHRhZyBjYXNlcyBub3cgcmVmZXIgdG8gaXQg
KCJwcm9jZXNzIHRoZSB0b2tlbiBmb3IgdXNpbmcgdGhlIHJ1bGVzIG9mIHRoZSAiaW4gaGVhZCIg
aW5zZXJ0aW9uIG1vZGUiKS4KICAgICAgICAgLy8gYnV0IGJlY2F1c2UgdGhlIGxvZ2ljIGZhbGxz
IHRocm91Z2ggdG8gSW5zZXJ0aW9uTW9kZTo6QWZ0ZXJIZWFkLCB0aGF0IGdldHMgYSBsaXR0bGUg
bWVzc3kuCiAjaWYgRU5BQkxFKFRFTVBMQVRFX0VMRU1FTlQpCi0gICAgICAgIGlmICh0b2tlbi0+
bmFtZSgpID09IHRlbXBsYXRlVGFnKSB7CisgICAgICAgIGlmICh0b2tlbi5uYW1lKCkgPT0gdGVt
cGxhdGVUYWcpIHsKICAgICAgICAgICAgIHByb2Nlc3NUZW1wbGF0ZUVuZFRhZyh0b2tlbik7CiAg
ICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICNlbmRpZgotICAgICAgICBpZiAodG9rZW4t
Pm5hbWUoKSA9PSBoZWFkVGFnKSB7CisgICAgICAgIGlmICh0b2tlbi5uYW1lKCkgPT0gaGVhZFRh
ZykgewogICAgICAgICAgICAgbV90cmVlLm9wZW5FbGVtZW50cygpLT5wb3BIVE1MSGVhZEVsZW1l
bnQoKTsKLSAgICAgICAgICAgIHNldEluc2VydGlvbk1vZGUoSW5zZXJ0aW9uTW9kZTo6QWZ0ZXJI
ZWFkKTsKKyAgICAgICAgICAgIG1faW5zZXJ0aW9uTW9kZSA9IEluc2VydGlvbk1vZGU6OkFmdGVy
SGVhZDsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQotICAgICAgICBpZiAodG9rZW4t
Pm5hbWUoKSAhPSBib2R5VGFnICYmIHRva2VuLT5uYW1lKCkgIT0gaHRtbFRhZyAmJiB0b2tlbi0+
bmFtZSgpICE9IGJyVGFnKSB7CisgICAgICAgIGlmICh0b2tlbi5uYW1lKCkgIT0gYm9keVRhZyAm
JiB0b2tlbi5uYW1lKCkgIT0gaHRtbFRhZyAmJiB0b2tlbi5uYW1lKCkgIT0gYnJUYWcpIHsKICAg
ICAgICAgICAgIHBhcnNlRXJyb3IodG9rZW4pOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAg
ICB9CiAgICAgICAgIGRlZmF1bHRGb3JJbkhlYWQoKTsKICAgICAgICAgRkFMTFRIUk9VR0g7CiAg
ICAgY2FzZSBJbnNlcnRpb25Nb2RlOjpBZnRlckhlYWQ6Ci0gICAgICAgIEFTU0VSVChpbnNlcnRp
b25Nb2RlKCkgPT0gSW5zZXJ0aW9uTW9kZTo6QWZ0ZXJIZWFkKTsKLSAgICAgICAgaWYgKHRva2Vu
LT5uYW1lKCkgIT0gYm9keVRhZyAmJiB0b2tlbi0+bmFtZSgpICE9IGh0bWxUYWcgJiYgdG9rZW4t
Pm5hbWUoKSAhPSBiclRhZykgeworICAgICAgICBBU1NFUlQobV9pbnNlcnRpb25Nb2RlID09IElu
c2VydGlvbk1vZGU6OkFmdGVySGVhZCk7CisgICAgICAgIGlmICh0b2tlbi5uYW1lKCkgIT0gYm9k
eVRhZyAmJiB0b2tlbi5uYW1lKCkgIT0gaHRtbFRhZyAmJiB0b2tlbi5uYW1lKCkgIT0gYnJUYWcp
IHsKICAgICAgICAgICAgIHBhcnNlRXJyb3IodG9rZW4pOwogICAgICAgICAgICAgcmV0dXJuOwog
ICAgICAgICB9CiAgICAgICAgIGRlZmF1bHRGb3JBZnRlckhlYWQoKTsKICAgICAgICAgRkFMTFRI
Uk9VR0g7CiAgICAgY2FzZSBJbnNlcnRpb25Nb2RlOjpJbkJvZHk6Ci0gICAgICAgIEFTU0VSVChp
bnNlcnRpb25Nb2RlKCkgPT0gSW5zZXJ0aW9uTW9kZTo6SW5Cb2R5KTsKKyAgICAgICAgQVNTRVJU
KG1faW5zZXJ0aW9uTW9kZSA9PSBJbnNlcnRpb25Nb2RlOjpJbkJvZHkpOwogICAgICAgICBwcm9j
ZXNzRW5kVGFnRm9ySW5Cb2R5KHRva2VuKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBJbnNl
cnRpb25Nb2RlOjpJblRhYmxlOgotICAgICAgICBBU1NFUlQoaW5zZXJ0aW9uTW9kZSgpID09IElu
c2VydGlvbk1vZGU6OkluVGFibGUpOworICAgICAgICBBU1NFUlQobV9pbnNlcnRpb25Nb2RlID09
IEluc2VydGlvbk1vZGU6OkluVGFibGUpOwogICAgICAgICBwcm9jZXNzRW5kVGFnRm9ySW5UYWJs
ZSh0b2tlbik7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgSW5zZXJ0aW9uTW9kZTo6SW5DYXB0
aW9uOgotICAgICAgICBBU1NFUlQoaW5zZXJ0aW9uTW9kZSgpID09IEluc2VydGlvbk1vZGU6Oklu
Q2FwdGlvbik7Ci0gICAgICAgIGlmICh0b2tlbi0+bmFtZSgpID09IGNhcHRpb25UYWcpIHsKKyAg
ICAgICAgQVNTRVJUKG1faW5zZXJ0aW9uTW9kZSA9PSBJbnNlcnRpb25Nb2RlOjpJbkNhcHRpb24p
OworICAgICAgICBpZiAodG9rZW4ubmFtZSgpID09IGNhcHRpb25UYWcpIHsKICAgICAgICAgICAg
IHByb2Nlc3NDYXB0aW9uRW5kVGFnRm9ySW5DYXB0aW9uKCk7CiAgICAgICAgICAgICByZXR1cm47
CiAgICAgICAgIH0KLSAgICAgICAgaWYgKHRva2VuLT5uYW1lKCkgPT0gdGFibGVUYWcpIHsKKyAg
ICAgICAgaWYgKHRva2VuLm5hbWUoKSA9PSB0YWJsZVRhZykgewogICAgICAgICAgICAgcGFyc2VF
cnJvcih0b2tlbik7CiAgICAgICAgICAgICBpZiAoIXByb2Nlc3NDYXB0aW9uRW5kVGFnRm9ySW5D
YXB0aW9uKCkpIHsKICAgICAgICAgICAgICAgICBBU1NFUlQoaXNQYXJzaW5nRnJhZ21lbnQoKSk7
CkBAIC0yMDc4LDMwICsyMDY0LDMwIEBAIHZvaWQgSFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNzRW5k
VGFnKEF0b21pY0hUTUxUb2tlbiogdG9rZW4pCiAgICAgICAgICAgICBwcm9jZXNzRW5kVGFnKHRv
a2VuKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQotICAgICAgICBpZiAodG9rZW4t
Pm5hbWUoKSA9PSBib2R5VGFnCi0gICAgICAgICAgICB8fCB0b2tlbi0+bmFtZSgpID09IGNvbFRh
ZwotICAgICAgICAgICAgfHwgdG9rZW4tPm5hbWUoKSA9PSBjb2xncm91cFRhZwotICAgICAgICAg
ICAgfHwgdG9rZW4tPm5hbWUoKSA9PSBodG1sVGFnCi0gICAgICAgICAgICB8fCBpc1RhYmxlQm9k
eUNvbnRleHRUYWcodG9rZW4tPm5hbWUoKSkKLSAgICAgICAgICAgIHx8IGlzVGFibGVDZWxsQ29u
dGV4dFRhZyh0b2tlbi0+bmFtZSgpKQotICAgICAgICAgICAgfHwgdG9rZW4tPm5hbWUoKSA9PSB0
clRhZykgeworICAgICAgICBpZiAodG9rZW4ubmFtZSgpID09IGJvZHlUYWcKKyAgICAgICAgICAg
IHx8IHRva2VuLm5hbWUoKSA9PSBjb2xUYWcKKyAgICAgICAgICAgIHx8IHRva2VuLm5hbWUoKSA9
PSBjb2xncm91cFRhZworICAgICAgICAgICAgfHwgdG9rZW4ubmFtZSgpID09IGh0bWxUYWcKKyAg
ICAgICAgICAgIHx8IGlzVGFibGVCb2R5Q29udGV4dFRhZyh0b2tlbi5uYW1lKCkpCisgICAgICAg
ICAgICB8fCBpc1RhYmxlQ2VsbENvbnRleHRUYWcodG9rZW4ubmFtZSgpKQorICAgICAgICAgICAg
fHwgdG9rZW4ubmFtZSgpID09IHRyVGFnKSB7CiAgICAgICAgICAgICBwYXJzZUVycm9yKHRva2Vu
KTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgICAgICBwcm9jZXNzRW5kVGFn
Rm9ySW5Cb2R5KHRva2VuKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBJbnNlcnRpb25Nb2Rl
OjpJbkNvbHVtbkdyb3VwOgotICAgICAgICBBU1NFUlQoaW5zZXJ0aW9uTW9kZSgpID09IEluc2Vy
dGlvbk1vZGU6OkluQ29sdW1uR3JvdXApOwotICAgICAgICBpZiAodG9rZW4tPm5hbWUoKSA9PSBj
b2xncm91cFRhZykgeworICAgICAgICBBU1NFUlQobV9pbnNlcnRpb25Nb2RlID09IEluc2VydGlv
bk1vZGU6OkluQ29sdW1uR3JvdXApOworICAgICAgICBpZiAodG9rZW4ubmFtZSgpID09IGNvbGdy
b3VwVGFnKSB7CiAgICAgICAgICAgICBwcm9jZXNzQ29sZ3JvdXBFbmRUYWdGb3JJbkNvbHVtbkdy
b3VwKCk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KLSAgICAgICAgaWYgKHRva2Vu
LT5uYW1lKCkgPT0gY29sVGFnKSB7CisgICAgICAgIGlmICh0b2tlbi5uYW1lKCkgPT0gY29sVGFn
KSB7CiAgICAgICAgICAgICBwYXJzZUVycm9yKHRva2VuKTsKICAgICAgICAgICAgIHJldHVybjsK
ICAgICAgICAgfQogI2lmIEVOQUJMRShURU1QTEFURV9FTEVNRU5UKQotICAgICAgICBpZiAodG9r
ZW4tPm5hbWUoKSA9PSB0ZW1wbGF0ZVRhZykgeworICAgICAgICBpZiAodG9rZW4ubmFtZSgpID09
IHRlbXBsYXRlVGFnKSB7CiAgICAgICAgICAgICBwcm9jZXNzVGVtcGxhdGVFbmRUYWcodG9rZW4p
OwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CkBAIC0yMTEzLDQ0ICsyMDk5LDQ0IEBA
IHZvaWQgSFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNzRW5kVGFnKEF0b21pY0hUTUxUb2tlbiogdG9r
ZW4pCiAgICAgICAgIHByb2Nlc3NFbmRUYWcodG9rZW4pOwogICAgICAgICBicmVhazsKICAgICBj
YXNlIEluc2VydGlvbk1vZGU6OkluUm93OgotICAgICAgICBBU1NFUlQoaW5zZXJ0aW9uTW9kZSgp
ID09IEluc2VydGlvbk1vZGU6OkluUm93KTsKKyAgICAgICAgQVNTRVJUKG1faW5zZXJ0aW9uTW9k
ZSA9PSBJbnNlcnRpb25Nb2RlOjpJblJvdyk7CiAgICAgICAgIHByb2Nlc3NFbmRUYWdGb3JJblJv
dyh0b2tlbik7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgSW5zZXJ0aW9uTW9kZTo6SW5DZWxs
OgotICAgICAgICBBU1NFUlQoaW5zZXJ0aW9uTW9kZSgpID09IEluc2VydGlvbk1vZGU6OkluQ2Vs
bCk7CisgICAgICAgIEFTU0VSVChtX2luc2VydGlvbk1vZGUgPT0gSW5zZXJ0aW9uTW9kZTo6SW5D
ZWxsKTsKICAgICAgICAgcHJvY2Vzc0VuZFRhZ0ZvckluQ2VsbCh0b2tlbik7CiAgICAgICAgIGJy
ZWFrOwogICAgIGNhc2UgSW5zZXJ0aW9uTW9kZTo6SW5UYWJsZUJvZHk6Ci0gICAgICAgIEFTU0VS
VChpbnNlcnRpb25Nb2RlKCkgPT0gSW5zZXJ0aW9uTW9kZTo6SW5UYWJsZUJvZHkpOworICAgICAg
ICBBU1NFUlQobV9pbnNlcnRpb25Nb2RlID09IEluc2VydGlvbk1vZGU6OkluVGFibGVCb2R5KTsK
ICAgICAgICAgcHJvY2Vzc0VuZFRhZ0ZvckluVGFibGVCb2R5KHRva2VuKTsKICAgICAgICAgYnJl
YWs7CiAgICAgY2FzZSBJbnNlcnRpb25Nb2RlOjpBZnRlckJvZHk6Ci0gICAgICAgIEFTU0VSVChp
bnNlcnRpb25Nb2RlKCkgPT0gSW5zZXJ0aW9uTW9kZTo6QWZ0ZXJCb2R5KTsKLSAgICAgICAgaWYg
KHRva2VuLT5uYW1lKCkgPT0gaHRtbFRhZykgeworICAgICAgICBBU1NFUlQobV9pbnNlcnRpb25N
b2RlID09IEluc2VydGlvbk1vZGU6OkFmdGVyQm9keSk7CisgICAgICAgIGlmICh0b2tlbi5uYW1l
KCkgPT0gaHRtbFRhZykgewogICAgICAgICAgICAgaWYgKGlzUGFyc2luZ0ZyYWdtZW50KCkpIHsK
ICAgICAgICAgICAgICAgICBwYXJzZUVycm9yKHRva2VuKTsKICAgICAgICAgICAgICAgICByZXR1
cm47CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBzZXRJbnNlcnRpb25Nb2RlKEluc2VydGlv
bk1vZGU6OkFmdGVyQWZ0ZXJCb2R5KTsKKyAgICAgICAgICAgIG1faW5zZXJ0aW9uTW9kZSA9IElu
c2VydGlvbk1vZGU6OkFmdGVyQWZ0ZXJCb2R5OwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAg
ICB9CiAgICAgICAgIEZBTExUSFJPVUdIOwogICAgIGNhc2UgSW5zZXJ0aW9uTW9kZTo6QWZ0ZXJB
ZnRlckJvZHk6Ci0gICAgICAgIEFTU0VSVChpbnNlcnRpb25Nb2RlKCkgPT0gSW5zZXJ0aW9uTW9k
ZTo6QWZ0ZXJCb2R5IHx8IGluc2VydGlvbk1vZGUoKSA9PSBJbnNlcnRpb25Nb2RlOjpBZnRlckFm
dGVyQm9keSk7CisgICAgICAgIEFTU0VSVChtX2luc2VydGlvbk1vZGUgPT0gSW5zZXJ0aW9uTW9k
ZTo6QWZ0ZXJCb2R5IHx8IG1faW5zZXJ0aW9uTW9kZSA9PSBJbnNlcnRpb25Nb2RlOjpBZnRlckFm
dGVyQm9keSk7CiAgICAgICAgIHBhcnNlRXJyb3IodG9rZW4pOwotICAgICAgICBzZXRJbnNlcnRp
b25Nb2RlKEluc2VydGlvbk1vZGU6OkluQm9keSk7CisgICAgICAgIG1faW5zZXJ0aW9uTW9kZSA9
IEluc2VydGlvbk1vZGU6OkluQm9keTsKICAgICAgICAgcHJvY2Vzc0VuZFRhZyh0b2tlbik7CiAg
ICAgICAgIGJyZWFrOwogICAgIGNhc2UgSW5zZXJ0aW9uTW9kZTo6SW5IZWFkTm9zY3JpcHQ6Ci0g
ICAgICAgIEFTU0VSVChpbnNlcnRpb25Nb2RlKCkgPT0gSW5zZXJ0aW9uTW9kZTo6SW5IZWFkTm9z
Y3JpcHQpOwotICAgICAgICBpZiAodG9rZW4tPm5hbWUoKSA9PSBub3NjcmlwdFRhZykgeworICAg
ICAgICBBU1NFUlQobV9pbnNlcnRpb25Nb2RlID09IEluc2VydGlvbk1vZGU6OkluSGVhZE5vc2Ny
aXB0KTsKKyAgICAgICAgaWYgKHRva2VuLm5hbWUoKSA9PSBub3NjcmlwdFRhZykgewogICAgICAg
ICAgICAgQVNTRVJUKG1fdHJlZS5jdXJyZW50U3RhY2tJdGVtKCktPmhhc1RhZ05hbWUobm9zY3Jp
cHRUYWcpKTsKICAgICAgICAgICAgIG1fdHJlZS5vcGVuRWxlbWVudHMoKS0+cG9wKCk7CiAgICAg
ICAgICAgICBBU1NFUlQobV90cmVlLmN1cnJlbnRTdGFja0l0ZW0oKS0+aGFzVGFnTmFtZShoZWFk
VGFnKSk7Ci0gICAgICAgICAgICBzZXRJbnNlcnRpb25Nb2RlKEluc2VydGlvbk1vZGU6OkluSGVh
ZCk7CisgICAgICAgICAgICBtX2luc2VydGlvbk1vZGUgPSBJbnNlcnRpb25Nb2RlOjpJbkhlYWQ7
CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KLSAgICAgICAgaWYgKHRva2VuLT5uYW1l
KCkgIT0gYnJUYWcpIHsKKyAgICAgICAgaWYgKHRva2VuLm5hbWUoKSAhPSBiclRhZykgewogICAg
ICAgICAgICAgcGFyc2VFcnJvcih0b2tlbik7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAg
IH0KQEAgLTIxNTgsMTMgKzIxNDQsMTMgQEAgdm9pZCBIVE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NF
bmRUYWcoQXRvbWljSFRNTFRva2VuKiB0b2tlbikKICAgICAgICAgcHJvY2Vzc1Rva2VuKHRva2Vu
KTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBJbnNlcnRpb25Nb2RlOjpUZXh0OgotICAgICAg
ICBpZiAodG9rZW4tPm5hbWUoKSA9PSBzY3JpcHRUYWcpIHsKKyAgICAgICAgaWYgKHRva2VuLm5h
bWUoKSA9PSBzY3JpcHRUYWcpIHsKICAgICAgICAgICAgIC8vIFBhdXNlIG91cnNlbHZlcyBzbyB0
aGF0IHBhcnNpbmcgc3RvcHMgdW50aWwgdGhlIHNjcmlwdCBjYW4gYmUgcHJvY2Vzc2VkIGJ5IHRo
ZSBjYWxsZXIuCiAgICAgICAgICAgICBBU1NFUlQobV90cmVlLmN1cnJlbnRTdGFja0l0ZW0oKS0+
aGFzVGFnTmFtZShzY3JpcHRUYWcpKTsKICAgICAgICAgICAgIGlmIChzY3JpcHRpbmdDb250ZW50
SXNBbGxvd2VkKG1fdHJlZS5wYXJzZXJDb250ZW50UG9saWN5KCkpKQogICAgICAgICAgICAgICAg
IG1fc2NyaXB0VG9Qcm9jZXNzID0gbV90cmVlLmN1cnJlbnRFbGVtZW50KCk7CiAgICAgICAgICAg
ICBtX3RyZWUub3BlbkVsZW1lbnRzKCktPnBvcCgpOwotICAgICAgICAgICAgc2V0SW5zZXJ0aW9u
TW9kZShtX29yaWdpbmFsSW5zZXJ0aW9uTW9kZSk7CisgICAgICAgICAgICBtX2luc2VydGlvbk1v
ZGUgPSBtX29yaWdpbmFsSW5zZXJ0aW9uTW9kZTsKIAogICAgICAgICAgICAgaWYgKG1fcGFyc2Vy
LnRva2VuaXplcigpKSB7CiAgICAgICAgICAgICAgICAgLy8gVGhpcyB0b2tlbiB3aWxsIG5vdCBo
YXZlIGJlZW4gY3JlYXRlZCBieSB0aGUgdG9rZW5pemVyIGlmIGEKQEAgLTIxNzcsMTEgKzIxNjMs
MTEgQEAgdm9pZCBIVE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NFbmRUYWcoQXRvbWljSFRNTFRva2Vu
KiB0b2tlbikKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgICAgICBtX3RyZWUu
b3BlbkVsZW1lbnRzKCktPnBvcCgpOwotICAgICAgICBzZXRJbnNlcnRpb25Nb2RlKG1fb3JpZ2lu
YWxJbnNlcnRpb25Nb2RlKTsKKyAgICAgICAgbV9pbnNlcnRpb25Nb2RlID0gbV9vcmlnaW5hbElu
c2VydGlvbk1vZGU7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgSW5zZXJ0aW9uTW9kZTo6SW5G
cmFtZXNldDoKLSAgICAgICAgQVNTRVJUKGluc2VydGlvbk1vZGUoKSA9PSBJbnNlcnRpb25Nb2Rl
OjpJbkZyYW1lc2V0KTsKLSAgICAgICAgaWYgKHRva2VuLT5uYW1lKCkgPT0gZnJhbWVzZXRUYWcp
IHsKKyAgICAgICAgQVNTRVJUKG1faW5zZXJ0aW9uTW9kZSA9PSBJbnNlcnRpb25Nb2RlOjpJbkZy
YW1lc2V0KTsKKyAgICAgICAgaWYgKHRva2VuLm5hbWUoKSA9PSBmcmFtZXNldFRhZykgewogICAg
ICAgICAgICAgYm9vbCBpZ25vcmVGcmFtZXNldEZvckZyYWdtZW50UGFyc2luZyAgPSBtX3RyZWUu
Y3VycmVudElzUm9vdE5vZGUoKTsKICNpZiBFTkFCTEUoVEVNUExBVEVfRUxFTUVOVCkKICAgICAg
ICAgICAgIGlnbm9yZUZyYW1lc2V0Rm9yRnJhZ21lbnRQYXJzaW5nID0gaWdub3JlRnJhbWVzZXRG
b3JGcmFnbWVudFBhcnNpbmcgfHwgbV90cmVlLm9wZW5FbGVtZW50cygpLT5oYXNUZW1wbGF0ZUlu
SFRNTFNjb3BlKCk7CkBAIC0yMTkzLDQ2ICsyMTc5LDQ2IEBAIHZvaWQgSFRNTFRyZWVCdWlsZGVy
Ojpwcm9jZXNzRW5kVGFnKEF0b21pY0hUTUxUb2tlbiogdG9rZW4pCiAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICBtX3RyZWUub3BlbkVsZW1lbnRzKCktPnBvcCgpOwogICAgICAgICAgICAgaWYg
KCFpc1BhcnNpbmdGcmFnbWVudCgpICYmICFtX3RyZWUuY3VycmVudFN0YWNrSXRlbSgpLT5oYXNU
YWdOYW1lKGZyYW1lc2V0VGFnKSkKLSAgICAgICAgICAgICAgICBzZXRJbnNlcnRpb25Nb2RlKElu
c2VydGlvbk1vZGU6OkFmdGVyRnJhbWVzZXQpOworICAgICAgICAgICAgICAgIG1faW5zZXJ0aW9u
TW9kZSA9IEluc2VydGlvbk1vZGU6OkFmdGVyRnJhbWVzZXQ7CiAgICAgICAgICAgICByZXR1cm47
CiAgICAgICAgIH0KICNpZiBFTkFCTEUoVEVNUExBVEVfRUxFTUVOVCkKLSAgICAgICAgaWYgKHRv
a2VuLT5uYW1lKCkgPT0gdGVtcGxhdGVUYWcpIHsKKyAgICAgICAgaWYgKHRva2VuLm5hbWUoKSA9
PSB0ZW1wbGF0ZVRhZykgewogICAgICAgICAgICAgcHJvY2Vzc1RlbXBsYXRlRW5kVGFnKHRva2Vu
KTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogI2VuZGlmCiAgICAgICAgIGJyZWFr
OwogICAgIGNhc2UgSW5zZXJ0aW9uTW9kZTo6QWZ0ZXJGcmFtZXNldDoKLSAgICAgICAgQVNTRVJU
KGluc2VydGlvbk1vZGUoKSA9PSBJbnNlcnRpb25Nb2RlOjpBZnRlckZyYW1lc2V0KTsKLSAgICAg
ICAgaWYgKHRva2VuLT5uYW1lKCkgPT0gaHRtbFRhZykgewotICAgICAgICAgICAgc2V0SW5zZXJ0
aW9uTW9kZShJbnNlcnRpb25Nb2RlOjpBZnRlckFmdGVyRnJhbWVzZXQpOworICAgICAgICBBU1NF
UlQobV9pbnNlcnRpb25Nb2RlID09IEluc2VydGlvbk1vZGU6OkFmdGVyRnJhbWVzZXQpOworICAg
ICAgICBpZiAodG9rZW4ubmFtZSgpID09IGh0bWxUYWcpIHsKKyAgICAgICAgICAgIG1faW5zZXJ0
aW9uTW9kZSA9IEluc2VydGlvbk1vZGU6OkFmdGVyQWZ0ZXJGcmFtZXNldDsKICAgICAgICAgICAg
IHJldHVybjsKICAgICAgICAgfQogICAgICAgICBGQUxMVEhST1VHSDsKICAgICBjYXNlIEluc2Vy
dGlvbk1vZGU6OkFmdGVyQWZ0ZXJGcmFtZXNldDoKLSAgICAgICAgQVNTRVJUKGluc2VydGlvbk1v
ZGUoKSA9PSBJbnNlcnRpb25Nb2RlOjpBZnRlckZyYW1lc2V0IHx8IGluc2VydGlvbk1vZGUoKSA9
PSBJbnNlcnRpb25Nb2RlOjpBZnRlckFmdGVyRnJhbWVzZXQpOworICAgICAgICBBU1NFUlQobV9p
bnNlcnRpb25Nb2RlID09IEluc2VydGlvbk1vZGU6OkFmdGVyRnJhbWVzZXQgfHwgbV9pbnNlcnRp
b25Nb2RlID09IEluc2VydGlvbk1vZGU6OkFmdGVyQWZ0ZXJGcmFtZXNldCk7CiAgICAgICAgIHBh
cnNlRXJyb3IodG9rZW4pOwogICAgICAgICBicmVhazsKICAgICBjYXNlIEluc2VydGlvbk1vZGU6
OkluU2VsZWN0SW5UYWJsZToKLSAgICAgICAgQVNTRVJUKGluc2VydGlvbk1vZGUoKSA9PSBJbnNl
cnRpb25Nb2RlOjpJblNlbGVjdEluVGFibGUpOwotICAgICAgICBpZiAodG9rZW4tPm5hbWUoKSA9
PSBjYXB0aW9uVGFnCi0gICAgICAgICAgICB8fCB0b2tlbi0+bmFtZSgpID09IHRhYmxlVGFnCi0g
ICAgICAgICAgICB8fCBpc1RhYmxlQm9keUNvbnRleHRUYWcodG9rZW4tPm5hbWUoKSkKLSAgICAg
ICAgICAgIHx8IHRva2VuLT5uYW1lKCkgPT0gdHJUYWcKLSAgICAgICAgICAgIHx8IGlzVGFibGVD
ZWxsQ29udGV4dFRhZyh0b2tlbi0+bmFtZSgpKSkgeworICAgICAgICBBU1NFUlQobV9pbnNlcnRp
b25Nb2RlID09IEluc2VydGlvbk1vZGU6OkluU2VsZWN0SW5UYWJsZSk7CisgICAgICAgIGlmICh0
b2tlbi5uYW1lKCkgPT0gY2FwdGlvblRhZworICAgICAgICAgICAgfHwgdG9rZW4ubmFtZSgpID09
IHRhYmxlVGFnCisgICAgICAgICAgICB8fCBpc1RhYmxlQm9keUNvbnRleHRUYWcodG9rZW4ubmFt
ZSgpKQorICAgICAgICAgICAgfHwgdG9rZW4ubmFtZSgpID09IHRyVGFnCisgICAgICAgICAgICB8
fCBpc1RhYmxlQ2VsbENvbnRleHRUYWcodG9rZW4ubmFtZSgpKSkgewogICAgICAgICAgICAgcGFy
c2VFcnJvcih0b2tlbik7Ci0gICAgICAgICAgICBpZiAobV90cmVlLm9wZW5FbGVtZW50cygpLT5p
blRhYmxlU2NvcGUodG9rZW4tPm5hbWUoKSkpIHsKKyAgICAgICAgICAgIGlmIChtX3RyZWUub3Bl
bkVsZW1lbnRzKCktPmluVGFibGVTY29wZSh0b2tlbi5uYW1lKCkpKSB7CiAgICAgICAgICAgICAg
ICAgQXRvbWljSFRNTFRva2VuIGVuZFNlbGVjdChIVE1MVG9rZW46OkVuZFRhZywgc2VsZWN0VGFn
LmxvY2FsTmFtZSgpKTsKLSAgICAgICAgICAgICAgICBwcm9jZXNzRW5kVGFnKCZlbmRTZWxlY3Qp
OworICAgICAgICAgICAgICAgIHByb2Nlc3NFbmRUYWcoZW5kU2VsZWN0KTsKICAgICAgICAgICAg
ICAgICBwcm9jZXNzRW5kVGFnKHRva2VuKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHJl
dHVybjsKICAgICAgICAgfQogICAgICAgICBGQUxMVEhST1VHSDsKICAgICBjYXNlIEluc2VydGlv
bk1vZGU6OkluU2VsZWN0OgotICAgICAgICBBU1NFUlQoaW5zZXJ0aW9uTW9kZSgpID09IEluc2Vy
dGlvbk1vZGU6OkluU2VsZWN0IHx8IGluc2VydGlvbk1vZGUoKSA9PSBJbnNlcnRpb25Nb2RlOjpJ
blNlbGVjdEluVGFibGUpOwotICAgICAgICBpZiAodG9rZW4tPm5hbWUoKSA9PSBvcHRncm91cFRh
ZykgeworICAgICAgICBBU1NFUlQobV9pbnNlcnRpb25Nb2RlID09IEluc2VydGlvbk1vZGU6Oklu
U2VsZWN0IHx8IG1faW5zZXJ0aW9uTW9kZSA9PSBJbnNlcnRpb25Nb2RlOjpJblNlbGVjdEluVGFi
bGUpOworICAgICAgICBpZiAodG9rZW4ubmFtZSgpID09IG9wdGdyb3VwVGFnKSB7CiAgICAgICAg
ICAgICBpZiAoaXM8SFRNTE9wdGlvbkVsZW1lbnQ+KCptX3RyZWUuY3VycmVudFN0YWNrSXRlbSgp
LT5ub2RlKCkpICYmIG1fdHJlZS5vbmVCZWxvd1RvcCgpICYmIGlzPEhUTUxPcHRHcm91cEVsZW1l
bnQ+KCptX3RyZWUub25lQmVsb3dUb3AoKS0+bm9kZSgpKSkKICAgICAgICAgICAgICAgICBwcm9j
ZXNzRmFrZUVuZFRhZyhvcHRpb25UYWcpOwogICAgICAgICAgICAgaWYgKGlzPEhUTUxPcHRHcm91
cEVsZW1lbnQ+KCptX3RyZWUuY3VycmVudFN0YWNrSXRlbSgpLT5ub2RlKCkpKSB7CkBAIC0yMjQy
LDcgKzIyMjgsNyBAQCB2b2lkIEhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc0VuZFRhZyhBdG9taWNI
VE1MVG9rZW4qIHRva2VuKQogICAgICAgICAgICAgcGFyc2VFcnJvcih0b2tlbik7CiAgICAgICAg
ICAgICByZXR1cm47CiAgICAgICAgIH0KLSAgICAgICAgaWYgKHRva2VuLT5uYW1lKCkgPT0gb3B0
aW9uVGFnKSB7CisgICAgICAgIGlmICh0b2tlbi5uYW1lKCkgPT0gb3B0aW9uVGFnKSB7CiAgICAg
ICAgICAgICBpZiAoaXM8SFRNTE9wdGlvbkVsZW1lbnQ+KCptX3RyZWUuY3VycmVudFN0YWNrSXRl
bSgpLT5ub2RlKCkpKSB7CiAgICAgICAgICAgICAgICAgbV90cmVlLm9wZW5FbGVtZW50cygpLT5w
b3AoKTsKICAgICAgICAgICAgICAgICByZXR1cm47CkBAIC0yMjUwLDggKzIyMzYsOCBAQCB2b2lk
IEhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc0VuZFRhZyhBdG9taWNIVE1MVG9rZW4qIHRva2VuKQog
ICAgICAgICAgICAgcGFyc2VFcnJvcih0b2tlbik7CiAgICAgICAgICAgICByZXR1cm47CiAgICAg
ICAgIH0KLSAgICAgICAgaWYgKHRva2VuLT5uYW1lKCkgPT0gc2VsZWN0VGFnKSB7Ci0gICAgICAg
ICAgICBpZiAoIW1fdHJlZS5vcGVuRWxlbWVudHMoKS0+aW5TZWxlY3RTY29wZSh0b2tlbi0+bmFt
ZSgpKSkgeworICAgICAgICBpZiAodG9rZW4ubmFtZSgpID09IHNlbGVjdFRhZykgeworICAgICAg
ICAgICAgaWYgKCFtX3RyZWUub3BlbkVsZW1lbnRzKCktPmluU2VsZWN0U2NvcGUodG9rZW4ubmFt
ZSgpKSkgewogICAgICAgICAgICAgICAgIEFTU0VSVChpc1BhcnNpbmdGcmFnbWVudCgpKTsKICAg
ICAgICAgICAgICAgICBwYXJzZUVycm9yKHRva2VuKTsKICAgICAgICAgICAgICAgICByZXR1cm47
CkBAIC0yMjYxLDcgKzIyNDcsNyBAQCB2b2lkIEhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc0VuZFRh
ZyhBdG9taWNIVE1MVG9rZW4qIHRva2VuKQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9
CiAjaWYgRU5BQkxFKFRFTVBMQVRFX0VMRU1FTlQpCi0gICAgICAgIGlmICh0b2tlbi0+bmFtZSgp
ID09IHRlbXBsYXRlVGFnKSB7CisgICAgICAgIGlmICh0b2tlbi5uYW1lKCkgPT0gdGVtcGxhdGVU
YWcpIHsKICAgICAgICAgICAgIHByb2Nlc3NUZW1wbGF0ZUVuZFRhZyh0b2tlbik7CiAgICAgICAg
ICAgICByZXR1cm47CiAgICAgICAgIH0KQEAgLTIyNzEsMzEgKzIyNTcsMjkgQEAgdm9pZCBIVE1M
VHJlZUJ1aWxkZXI6OnByb2Nlc3NFbmRUYWcoQXRvbWljSFRNTFRva2VuKiB0b2tlbikKICAgICAg
ICAgZGVmYXVsdEZvckluVGFibGVUZXh0KCk7CiAgICAgICAgIHByb2Nlc3NFbmRUYWcodG9rZW4p
OwogICAgICAgICBicmVhazsKLSAgICBjYXNlIEluc2VydGlvbk1vZGU6OlRlbXBsYXRlQ29udGVu
dHM6CiAjaWYgRU5BQkxFKFRFTVBMQVRFX0VMRU1FTlQpCi0gICAgICAgIGlmICh0b2tlbi0+bmFt
ZSgpID09IHRlbXBsYXRlVGFnKSB7CisgICAgY2FzZSBJbnNlcnRpb25Nb2RlOjpUZW1wbGF0ZUNv
bnRlbnRzOgorICAgICAgICBpZiAodG9rZW4ubmFtZSgpID09IHRlbXBsYXRlVGFnKSB7CiAgICAg
ICAgICAgICBwcm9jZXNzVGVtcGxhdGVFbmRUYWcodG9rZW4pOwogICAgICAgICAgICAgcmV0dXJu
OwogICAgICAgICB9Ci0jZWxzZQotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSNlbmRp
ZgogICAgICAgICBicmVhazsKKyNlbmRpZgogICAgIH0KIH0KIAotdm9pZCBIVE1MVHJlZUJ1aWxk
ZXI6OnByb2Nlc3NDb21tZW50KEF0b21pY0hUTUxUb2tlbiogdG9rZW4pCit2b2lkIEhUTUxUcmVl
QnVpbGRlcjo6cHJvY2Vzc0NvbW1lbnQoQXRvbWljSFRNTFRva2VuJiB0b2tlbikKIHsKLSAgICBB
U1NFUlQodG9rZW4tPnR5cGUoKSA9PSBIVE1MVG9rZW46OkNvbW1lbnQpOworICAgIEFTU0VSVCh0
b2tlbi50eXBlKCkgPT0gSFRNTFRva2VuOjpDb21tZW50KTsKICAgICBpZiAobV9pbnNlcnRpb25N
b2RlID09IEluc2VydGlvbk1vZGU6OkluaXRpYWwKICAgICAgICAgfHwgbV9pbnNlcnRpb25Nb2Rl
ID09IEluc2VydGlvbk1vZGU6OkJlZm9yZUhUTUwKICAgICAgICAgfHwgbV9pbnNlcnRpb25Nb2Rl
ID09IEluc2VydGlvbk1vZGU6OkFmdGVyQWZ0ZXJCb2R5CiAgICAgICAgIHx8IG1faW5zZXJ0aW9u
TW9kZSA9PSBJbnNlcnRpb25Nb2RlOjpBZnRlckFmdGVyRnJhbWVzZXQpIHsKLSAgICAgICAgbV90
cmVlLmluc2VydENvbW1lbnRPbkRvY3VtZW50KHRva2VuKTsKKyAgICAgICAgbV90cmVlLmluc2Vy
dENvbW1lbnRPbkRvY3VtZW50KCZ0b2tlbik7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAg
aWYgKG1faW5zZXJ0aW9uTW9kZSA9PSBJbnNlcnRpb25Nb2RlOjpBZnRlckJvZHkpIHsKLSAgICAg
ICAgbV90cmVlLmluc2VydENvbW1lbnRPbkhUTUxIdG1sRWxlbWVudCh0b2tlbik7CisgICAgICAg
IG1fdHJlZS5pbnNlcnRDb21tZW50T25IVE1MSHRtbEVsZW1lbnQoJnRva2VuKTsKICAgICAgICAg
cmV0dXJuOwogICAgIH0KICAgICBpZiAobV9pbnNlcnRpb25Nb2RlID09IEluc2VydGlvbk1vZGU6
OkluVGFibGVUZXh0KSB7CkBAIC0yMzAzLDE4ICsyMjg3LDE5IEBAIHZvaWQgSFRNTFRyZWVCdWls
ZGVyOjpwcm9jZXNzQ29tbWVudChBdG9taWNIVE1MVG9rZW4qIHRva2VuKQogICAgICAgICBwcm9j
ZXNzQ29tbWVudCh0b2tlbik7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgbV90cmVlLmlu
c2VydENvbW1lbnQodG9rZW4pOworICAgIG1fdHJlZS5pbnNlcnRDb21tZW50KCZ0b2tlbik7CiB9
CiAKLXZvaWQgSFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNzQ2hhcmFjdGVyKEF0b21pY0hUTUxUb2tl
biogdG9rZW4pCit2b2lkIEhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc0NoYXJhY3RlcihBdG9taWNI
VE1MVG9rZW4mIHRva2VuKQogewotICAgIEFTU0VSVCh0b2tlbi0+dHlwZSgpID09IEhUTUxUb2tl
bjo6Q2hhcmFjdGVyKTsKKyAgICBBU1NFUlQodG9rZW4udHlwZSgpID09IEhUTUxUb2tlbjo6Q2hh
cmFjdGVyKTsKICAgICBFeHRlcm5hbENoYXJhY3RlclRva2VuQnVmZmVyIGJ1ZmZlcih0b2tlbik7
CiAgICAgcHJvY2Vzc0NoYXJhY3RlckJ1ZmZlcihidWZmZXIpOwogfQogCi0vLyBGSVhNRTogRXh0
cmFjdCB0aGUgZm9sbG93aW5nIGlPUy1zcGVjaWZpYyBjb2RlIGludG8gYSBzZXBhcmF0ZSBmaWxl
LgogI2lmIEVOQUJMRShURUxFUEhPTkVfTlVNQkVSX0RFVEVDVElPTikgJiYgUExBVEZPUk0oSU9T
KQorCisvLyBGSVhNRTogRXh0cmFjdCB0aGUgZm9sbG93aW5nIGlPUy1zcGVjaWZpYyBjb2RlIGlu
dG8gYSBzZXBhcmF0ZSBmaWxlLgogLy8gRnJvbSB0aGUgc3RyaW5nIDQwODk5NjEwMTAsIGNyZWF0
ZXMgYSBsaW5rIG9mIHRoZSBmb3JtIDxhIGhyZWY9InRlbDo0MDg5OTYxMDEwIj40MDg5OTYxMDEw
PC9hPiBhbmQgaW5zZXJ0cyBpdC4KIHZvaWQgSFRNTFRyZWVCdWlsZGVyOjppbnNlcnRQaG9uZU51
bWJlckxpbmsoY29uc3QgU3RyaW5nJiBzdHJpbmcpCiB7CkBAIC0yMzI1LDEwICsyMzEwLDEwIEBA
IHZvaWQgSFRNTFRyZWVCdWlsZGVyOjppbnNlcnRQaG9uZU51bWJlckxpbmsoY29uc3QgU3RyaW5n
JiBzdHJpbmcpCiAgICAgQXRvbWljSFRNTFRva2VuIGFTdGFydFRva2VuKEhUTUxUb2tlbjo6U3Rh
cnRUYWcsIGFUYWdMb2NhbE5hbWUsIGF0dHJpYnV0ZXMpOwogICAgIEF0b21pY0hUTUxUb2tlbiBh
RW5kVG9rZW4oSFRNTFRva2VuOjpFbmRUYWcsIGFUYWdMb2NhbE5hbWUpOwogCi0gICAgcHJvY2Vz
c1N0YXJ0VGFnKCZhU3RhcnRUb2tlbik7CisgICAgcHJvY2Vzc1N0YXJ0VGFnKGFTdGFydFRva2Vu
KTsKICAgICBtX3RyZWUuZXhlY3V0ZVF1ZXVlZFRhc2tzKCk7CiAgICAgbV90cmVlLmluc2VydFRl
eHROb2RlKHN0cmluZyk7Ci0gICAgcHJvY2Vzc0VuZFRhZygmYUVuZFRva2VuKTsKKyAgICBwcm9j
ZXNzRW5kVGFnKGFFbmRUb2tlbik7CiB9CiAKIC8vIExvY2F0ZXMgdGhlIHBob25lIG51bWJlcnMg
aW4gdGhlIHN0cmluZyBhbmQgZGVhbHMgd2l0aCBpdApAQCAtMjM5OCw2ICsyMzgzLDcgQEAgc3Rh
dGljIGlubGluZSBib29sIHNob3VsZFBhcnNlVGVsZXBob25lTnVtYmVyc0luTm9kZShjb25zdCBD
b250YWluZXJOb2RlJiBub2RlKQogICAgIH0gd2hpbGUgKGN1cnJlbnROb2RlKTsKICAgICByZXR1
cm4gdHJ1ZTsKIH0KKwogI2VuZGlmIC8vIEVOQUJMRShURUxFUEhPTkVfTlVNQkVSX0RFVEVDVElP
TikgJiYgUExBVEZPUk0oSU9TKQogCiB2b2lkIEhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc0NoYXJh
Y3RlckJ1ZmZlcihFeHRlcm5hbENoYXJhY3RlclRva2VuQnVmZmVyJiBidWZmZXIpCkBAIC0yNDIx
LDc3ICsyNDA3LDY4IEBAIFJlcHJvY2Vzc0J1ZmZlcjoKICAgICAgICAgICAgIHJldHVybjsKICAg
ICB9CiAKLSAgICBzd2l0Y2ggKGluc2VydGlvbk1vZGUoKSkgewotICAgIGNhc2UgSW5zZXJ0aW9u
TW9kZTo6SW5pdGlhbDogewotICAgICAgICBBU1NFUlQoaW5zZXJ0aW9uTW9kZSgpID09IEluc2Vy
dGlvbk1vZGU6OkluaXRpYWwpOworICAgIHN3aXRjaCAobV9pbnNlcnRpb25Nb2RlKSB7CisgICAg
Y2FzZSBJbnNlcnRpb25Nb2RlOjpJbml0aWFsOgogICAgICAgICBidWZmZXIuc2tpcExlYWRpbmdX
aGl0ZXNwYWNlKCk7CiAgICAgICAgIGlmIChidWZmZXIuaXNFbXB0eSgpKQogICAgICAgICAgICAg
cmV0dXJuOwogICAgICAgICBkZWZhdWx0Rm9ySW5pdGlhbCgpOworICAgICAgICBBU1NFUlQobV9p
bnNlcnRpb25Nb2RlID09IEluc2VydGlvbk1vZGU6OkJlZm9yZUhUTUwpOwogICAgICAgICBGQUxM
VEhST1VHSDsKLSAgICB9Ci0gICAgY2FzZSBJbnNlcnRpb25Nb2RlOjpCZWZvcmVIVE1MOiB7Ci0g
ICAgICAgIEFTU0VSVChpbnNlcnRpb25Nb2RlKCkgPT0gSW5zZXJ0aW9uTW9kZTo6QmVmb3JlSFRN
TCk7CisgICAgY2FzZSBJbnNlcnRpb25Nb2RlOjpCZWZvcmVIVE1MOgogICAgICAgICBidWZmZXIu
c2tpcExlYWRpbmdXaGl0ZXNwYWNlKCk7CiAgICAgICAgIGlmIChidWZmZXIuaXNFbXB0eSgpKQog
ICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICBkZWZhdWx0Rm9yQmVmb3JlSFRNTCgpOworICAg
ICAgICBBU1NFUlQobV9pbnNlcnRpb25Nb2RlID09IEluc2VydGlvbk1vZGU6OkJlZm9yZUhlYWQp
OwogICAgICAgICBGQUxMVEhST1VHSDsKLSAgICB9Ci0gICAgY2FzZSBJbnNlcnRpb25Nb2RlOjpC
ZWZvcmVIZWFkOiB7Ci0gICAgICAgIEFTU0VSVChpbnNlcnRpb25Nb2RlKCkgPT0gSW5zZXJ0aW9u
TW9kZTo6QmVmb3JlSGVhZCk7CisgICAgY2FzZSBJbnNlcnRpb25Nb2RlOjpCZWZvcmVIZWFkOgog
ICAgICAgICBidWZmZXIuc2tpcExlYWRpbmdXaGl0ZXNwYWNlKCk7CiAgICAgICAgIGlmIChidWZm
ZXIuaXNFbXB0eSgpKQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICBkZWZhdWx0Rm9yQmVm
b3JlSGVhZCgpOworICAgICAgICBBU1NFUlQobV9pbnNlcnRpb25Nb2RlID09IEluc2VydGlvbk1v
ZGU6OkluSGVhZCk7CiAgICAgICAgIEZBTExUSFJPVUdIOwotICAgIH0KICAgICBjYXNlIEluc2Vy
dGlvbk1vZGU6OkluSGVhZDogewotICAgICAgICBBU1NFUlQoaW5zZXJ0aW9uTW9kZSgpID09IElu
c2VydGlvbk1vZGU6OkluSGVhZCk7CiAgICAgICAgIFN0cmluZyBsZWFkaW5nV2hpdGVzcGFjZSA9
IGJ1ZmZlci50YWtlTGVhZGluZ1doaXRlc3BhY2UoKTsKICAgICAgICAgaWYgKCFsZWFkaW5nV2hp
dGVzcGFjZS5pc0VtcHR5KCkpCiAgICAgICAgICAgICBtX3RyZWUuaW5zZXJ0VGV4dE5vZGUobGVh
ZGluZ1doaXRlc3BhY2UsIEFsbFdoaXRlc3BhY2UpOwogICAgICAgICBpZiAoYnVmZmVyLmlzRW1w
dHkoKSkKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgZGVmYXVsdEZvckluSGVhZCgpOwor
ICAgICAgICBBU1NFUlQobV9pbnNlcnRpb25Nb2RlID09IEluc2VydGlvbk1vZGU6OkFmdGVySGVh
ZCk7CiAgICAgICAgIEZBTExUSFJPVUdIOwogICAgIH0KICAgICBjYXNlIEluc2VydGlvbk1vZGU6
OkFmdGVySGVhZDogewotICAgICAgICBBU1NFUlQoaW5zZXJ0aW9uTW9kZSgpID09IEluc2VydGlv
bk1vZGU6OkFmdGVySGVhZCk7CiAgICAgICAgIFN0cmluZyBsZWFkaW5nV2hpdGVzcGFjZSA9IGJ1
ZmZlci50YWtlTGVhZGluZ1doaXRlc3BhY2UoKTsKICAgICAgICAgaWYgKCFsZWFkaW5nV2hpdGVz
cGFjZS5pc0VtcHR5KCkpCiAgICAgICAgICAgICBtX3RyZWUuaW5zZXJ0VGV4dE5vZGUobGVhZGlu
Z1doaXRlc3BhY2UsIEFsbFdoaXRlc3BhY2UpOwogICAgICAgICBpZiAoYnVmZmVyLmlzRW1wdHko
KSkKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgZGVmYXVsdEZvckFmdGVySGVhZCgpOwor
ICAgICAgICBBU1NFUlQobV9pbnNlcnRpb25Nb2RlID09IEluc2VydGlvbk1vZGU6OkluQm9keSk7
CiAgICAgICAgIEZBTExUSFJPVUdIOwogICAgIH0KICAgICBjYXNlIEluc2VydGlvbk1vZGU6Oklu
Qm9keToKICAgICBjYXNlIEluc2VydGlvbk1vZGU6OkluQ2FwdGlvbjoKLSAgICBjYXNlIEluc2Vy
dGlvbk1vZGU6OlRlbXBsYXRlQ29udGVudHM6Ci0gICAgY2FzZSBJbnNlcnRpb25Nb2RlOjpJbkNl
bGw6IHsKKyAgICBjYXNlIEluc2VydGlvbk1vZGU6OkluQ2VsbDoKICNpZiBFTkFCTEUoVEVNUExB
VEVfRUxFTUVOVCkKLSAgICAgICAgQVNTRVJUKGluc2VydGlvbk1vZGUoKSA9PSBJbnNlcnRpb25N
b2RlOjpJbkJvZHkgfHwgaW5zZXJ0aW9uTW9kZSgpID09IEluc2VydGlvbk1vZGU6OkluQ2FwdGlv
biB8fCBpbnNlcnRpb25Nb2RlKCkgPT0gSW5zZXJ0aW9uTW9kZTo6SW5DZWxsIHx8IGluc2VydGlv
bk1vZGUoKSA9PSBJbnNlcnRpb25Nb2RlOjpUZW1wbGF0ZUNvbnRlbnRzKTsKLSNlbHNlCi0gICAg
ICAgIEFTU0VSVChpbnNlcnRpb25Nb2RlKCkgIT0gSW5zZXJ0aW9uTW9kZTo6VGVtcGxhdGVDb250
ZW50cyk7Ci0gICAgICAgIEFTU0VSVChpbnNlcnRpb25Nb2RlKCkgPT0gSW5zZXJ0aW9uTW9kZTo6
SW5Cb2R5IHx8IGluc2VydGlvbk1vZGUoKSA9PSBJbnNlcnRpb25Nb2RlOjpJbkNhcHRpb24gfHwg
aW5zZXJ0aW9uTW9kZSgpID09IEluc2VydGlvbk1vZGU6OkluQ2VsbCk7CisgICAgY2FzZSBJbnNl
cnRpb25Nb2RlOjpUZW1wbGF0ZUNvbnRlbnRzOgogI2VuZGlmCiAgICAgICAgIHByb2Nlc3NDaGFy
YWN0ZXJCdWZmZXJGb3JJbkJvZHkoYnVmZmVyKTsKICAgICAgICAgYnJlYWs7Ci0gICAgfQogICAg
IGNhc2UgSW5zZXJ0aW9uTW9kZTo6SW5UYWJsZToKICAgICBjYXNlIEluc2VydGlvbk1vZGU6Oklu
VGFibGVCb2R5OgotICAgIGNhc2UgSW5zZXJ0aW9uTW9kZTo6SW5Sb3c6IHsKLSAgICAgICAgQVNT
RVJUKGluc2VydGlvbk1vZGUoKSA9PSBJbnNlcnRpb25Nb2RlOjpJblRhYmxlIHx8IGluc2VydGlv
bk1vZGUoKSA9PSBJbnNlcnRpb25Nb2RlOjpJblRhYmxlQm9keSB8fCBpbnNlcnRpb25Nb2RlKCkg
PT0gSW5zZXJ0aW9uTW9kZTo6SW5Sb3cpOworICAgIGNhc2UgSW5zZXJ0aW9uTW9kZTo6SW5Sb3c6
CiAgICAgICAgIEFTU0VSVChtX3BlbmRpbmdUYWJsZUNoYXJhY3RlcnMuaXNFbXB0eSgpKTsKICAg
ICAgICAgaWYgKG1fdHJlZS5jdXJyZW50U3RhY2tJdGVtKCktPmlzRWxlbWVudE5vZGUoKQotICAg
ICAgICAgICAgJiYgKGlzPEhUTUxUYWJsZUVsZW1lbnQ+KCptX3RyZWUuY3VycmVudFN0YWNrSXRl
bSgpLT5ub2RlKCkpCisgICAgICAgICAgICAmJiAoaXM8SFRNTFRhYmxlRWxlbWVudD4oKm1fdHJl
ZS5jdXJyZW50U3RhY2tJdGVtKCktPmVsZW1lbnQoKSkKICAgICAgICAgICAgICAgICB8fCBtX3Ry
ZWUuY3VycmVudFN0YWNrSXRlbSgpLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6dGJvZHlUYWcpCiAg
ICAgICAgICAgICAgICAgfHwgbV90cmVlLmN1cnJlbnRTdGFja0l0ZW0oKS0+aGFzVGFnTmFtZShI
VE1MTmFtZXM6OnRmb290VGFnKQogICAgICAgICAgICAgICAgIHx8IG1fdHJlZS5jdXJyZW50U3Rh
Y2tJdGVtKCktPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjp0aGVhZFRhZykKICAgICAgICAgICAgICAg
ICB8fCBtX3RyZWUuY3VycmVudFN0YWNrSXRlbSgpLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6dHJU
YWcpKSkgewogICAgICAgICAgICAgbV9vcmlnaW5hbEluc2VydGlvbk1vZGUgPSBtX2luc2VydGlv
bk1vZGU7Ci0gICAgICAgICAgICBzZXRJbnNlcnRpb25Nb2RlKEluc2VydGlvbk1vZGU6OkluVGFi
bGVUZXh0KTsKKyAgICAgICAgICAgIG1faW5zZXJ0aW9uTW9kZSA9IEluc2VydGlvbk1vZGU6Oklu
VGFibGVUZXh0OwogICAgICAgICAgICAgLy8gTm90ZSB0aGF0IHdlIGZhbGwgdGhyb3VnaCB0byB0
aGUgSW5zZXJ0aW9uTW9kZTo6SW5UYWJsZVRleHQgY2FzZSBiZWxvdy4KICAgICAgICAgfSBlbHNl
IHsKICAgICAgICAgICAgIEhUTUxDb25zdHJ1Y3Rpb25TaXRlOjpSZWRpcmVjdFRvRm9zdGVyUGFy
ZW50R3VhcmQgcmVkaXJlY3RlcihtX3RyZWUpOwpAQCAtMjQ5OSwxMyArMjQ3NiwxMCBAQCBSZXBy
b2Nlc3NCdWZmZXI6CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBGQUxM
VEhST1VHSDsKLSAgICB9Ci0gICAgY2FzZSBJbnNlcnRpb25Nb2RlOjpJblRhYmxlVGV4dDogewor
ICAgIGNhc2UgSW5zZXJ0aW9uTW9kZTo6SW5UYWJsZVRleHQ6CiAgICAgICAgIGJ1ZmZlci5naXZl
UmVtYWluaW5nVG8obV9wZW5kaW5nVGFibGVDaGFyYWN0ZXJzKTsKICAgICAgICAgYnJlYWs7Ci0g
ICAgfQogICAgIGNhc2UgSW5zZXJ0aW9uTW9kZTo6SW5Db2x1bW5Hcm91cDogewotICAgICAgICBB
U1NFUlQoaW5zZXJ0aW9uTW9kZSgpID09IEluc2VydGlvbk1vZGU6OkluQ29sdW1uR3JvdXApOwog
ICAgICAgICBTdHJpbmcgbGVhZGluZ1doaXRlc3BhY2UgPSBidWZmZXIudGFrZUxlYWRpbmdXaGl0
ZXNwYWNlKCk7CiAgICAgICAgIGlmICghbGVhZGluZ1doaXRlc3BhY2UuaXNFbXB0eSgpKQogICAg
ICAgICAgICAgbV90cmVlLmluc2VydFRleHROb2RlKGxlYWRpbmdXaGl0ZXNwYWNlLCBBbGxXaGl0
ZXNwYWNlKTsKQEAgLTI1MjEsMTkgKzI0OTUsMTQgQEAgUmVwcm9jZXNzQnVmZmVyOgogICAgICAg
ICBnb3RvIFJlcHJvY2Vzc0J1ZmZlcjsKICAgICB9CiAgICAgY2FzZSBJbnNlcnRpb25Nb2RlOjpB
ZnRlckJvZHk6Ci0gICAgY2FzZSBJbnNlcnRpb25Nb2RlOjpBZnRlckFmdGVyQm9keTogewotICAg
ICAgICBBU1NFUlQoaW5zZXJ0aW9uTW9kZSgpID09IEluc2VydGlvbk1vZGU6OkFmdGVyQm9keSB8
fCBpbnNlcnRpb25Nb2RlKCkgPT0gSW5zZXJ0aW9uTW9kZTo6QWZ0ZXJBZnRlckJvZHkpOworICAg
IGNhc2UgSW5zZXJ0aW9uTW9kZTo6QWZ0ZXJBZnRlckJvZHk6CiAgICAgICAgIC8vIEZJWE1FOiBw
YXJzZSBlcnJvcgotICAgICAgICBzZXRJbnNlcnRpb25Nb2RlKEluc2VydGlvbk1vZGU6OkluQm9k
eSk7CisgICAgICAgIG1faW5zZXJ0aW9uTW9kZSA9IEluc2VydGlvbk1vZGU6OkluQm9keTsKICAg
ICAgICAgZ290byBSZXByb2Nlc3NCdWZmZXI7Ci0gICAgfQotICAgIGNhc2UgSW5zZXJ0aW9uTW9k
ZTo6VGV4dDogewotICAgICAgICBBU1NFUlQoaW5zZXJ0aW9uTW9kZSgpID09IEluc2VydGlvbk1v
ZGU6OlRleHQpOworICAgIGNhc2UgSW5zZXJ0aW9uTW9kZTo6VGV4dDoKICAgICAgICAgbV90cmVl
Lmluc2VydFRleHROb2RlKGJ1ZmZlci50YWtlUmVtYWluaW5nKCkpOwogICAgICAgICBicmVhazsK
LSAgICB9CiAgICAgY2FzZSBJbnNlcnRpb25Nb2RlOjpJbkhlYWROb3NjcmlwdDogewotICAgICAg
ICBBU1NFUlQoaW5zZXJ0aW9uTW9kZSgpID09IEluc2VydGlvbk1vZGU6OkluSGVhZE5vc2NyaXB0
KTsKICAgICAgICAgU3RyaW5nIGxlYWRpbmdXaGl0ZXNwYWNlID0gYnVmZmVyLnRha2VMZWFkaW5n
V2hpdGVzcGFjZSgpOwogICAgICAgICBpZiAoIWxlYWRpbmdXaGl0ZXNwYWNlLmlzRW1wdHkoKSkK
ICAgICAgICAgICAgIG1fdHJlZS5pbnNlcnRUZXh0Tm9kZShsZWFkaW5nV2hpdGVzcGFjZSwgQWxs
V2hpdGVzcGFjZSk7CkBAIC0yNTQ0LDcgKzI1MTMsNiBAQCBSZXByb2Nlc3NCdWZmZXI6CiAgICAg
fQogICAgIGNhc2UgSW5zZXJ0aW9uTW9kZTo6SW5GcmFtZXNldDoKICAgICBjYXNlIEluc2VydGlv
bk1vZGU6OkFmdGVyRnJhbWVzZXQ6IHsKLSAgICAgICAgQVNTRVJUKGluc2VydGlvbk1vZGUoKSA9
PSBJbnNlcnRpb25Nb2RlOjpJbkZyYW1lc2V0IHx8IGluc2VydGlvbk1vZGUoKSA9PSBJbnNlcnRp
b25Nb2RlOjpBZnRlckZyYW1lc2V0IHx8IGluc2VydGlvbk1vZGUoKSA9PSBJbnNlcnRpb25Nb2Rl
OjpBZnRlckFmdGVyRnJhbWVzZXQpOwogICAgICAgICBTdHJpbmcgbGVhZGluZ1doaXRlc3BhY2Ug
PSBidWZmZXIudGFrZVJlbWFpbmluZ1doaXRlc3BhY2UoKTsKICAgICAgICAgaWYgKCFsZWFkaW5n
V2hpdGVzcGFjZS5pc0VtcHR5KCkpCiAgICAgICAgICAgICBtX3RyZWUuaW5zZXJ0VGV4dE5vZGUo
bGVhZGluZ1doaXRlc3BhY2UsIEFsbFdoaXRlc3BhY2UpOwpAQCAtMjU1MywxMSArMjUyMSw5IEBA
IFJlcHJvY2Vzc0J1ZmZlcjoKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIGNhc2UgSW5zZXJ0
aW9uTW9kZTo6SW5TZWxlY3RJblRhYmxlOgotICAgIGNhc2UgSW5zZXJ0aW9uTW9kZTo6SW5TZWxl
Y3Q6IHsKLSAgICAgICAgQVNTRVJUKGluc2VydGlvbk1vZGUoKSA9PSBJbnNlcnRpb25Nb2RlOjpJ
blNlbGVjdCB8fCBpbnNlcnRpb25Nb2RlKCkgPT0gSW5zZXJ0aW9uTW9kZTo6SW5TZWxlY3RJblRh
YmxlKTsKKyAgICBjYXNlIEluc2VydGlvbk1vZGU6OkluU2VsZWN0OgogICAgICAgICBtX3RyZWUu
aW5zZXJ0VGV4dE5vZGUoYnVmZmVyLnRha2VSZW1haW5pbmcoKSk7CiAgICAgICAgIGJyZWFrOwot
ICAgIH0KICAgICBjYXNlIEluc2VydGlvbk1vZGU6OkFmdGVyQWZ0ZXJGcmFtZXNldDogewogICAg
ICAgICBTdHJpbmcgbGVhZGluZ1doaXRlc3BhY2UgPSBidWZmZXIudGFrZVJlbWFpbmluZ1doaXRl
c3BhY2UoKTsKICAgICAgICAgaWYgKCFsZWFkaW5nV2hpdGVzcGFjZS5pc0VtcHR5KCkpIHsKQEAg
LTI1ODMsNjQgKzI1NDksNTUgQEAgdm9pZCBIVE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NDaGFyYWN0
ZXJCdWZmZXJGb3JJbkJvZHkoRXh0ZXJuYWxDaGFyYWN0ZXJUb2tlbkJ1ZmYKICNlbHNlCiAgICAg
bV90cmVlLmluc2VydFRleHROb2RlKGNoYXJhY3RlcnMpOwogI2VuZGlmCi0KICAgICBpZiAobV9m
cmFtZXNldE9rICYmICFpc0FsbFdoaXRlc3BhY2VPclJlcGxhY2VtZW50Q2hhcmFjdGVycyhjaGFy
YWN0ZXJzKSkKICAgICAgICAgbV9mcmFtZXNldE9rID0gZmFsc2U7CiB9CiAKLXZvaWQgSFRNTFRy
ZWVCdWlsZGVyOjpwcm9jZXNzRW5kT2ZGaWxlKEF0b21pY0hUTUxUb2tlbiogdG9rZW4pCit2b2lk
IEhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc0VuZE9mRmlsZShBdG9taWNIVE1MVG9rZW4mIHRva2Vu
KQogewotICAgIEFTU0VSVCh0b2tlbi0+dHlwZSgpID09IEhUTUxUb2tlbjo6RW5kT2ZGaWxlKTsK
LSAgICBzd2l0Y2ggKGluc2VydGlvbk1vZGUoKSkgeworICAgIEFTU0VSVCh0b2tlbi50eXBlKCkg
PT0gSFRNTFRva2VuOjpFbmRPZkZpbGUpOworICAgIHN3aXRjaCAobV9pbnNlcnRpb25Nb2RlKSB7
CiAgICAgY2FzZSBJbnNlcnRpb25Nb2RlOjpJbml0aWFsOgotICAgICAgICBBU1NFUlQoaW5zZXJ0
aW9uTW9kZSgpID09IEluc2VydGlvbk1vZGU6OkluaXRpYWwpOwogICAgICAgICBkZWZhdWx0Rm9y
SW5pdGlhbCgpOworICAgICAgICBBU1NFUlQobV9pbnNlcnRpb25Nb2RlID09IEluc2VydGlvbk1v
ZGU6OkJlZm9yZUhUTUwpOwogICAgICAgICBGQUxMVEhST1VHSDsKICAgICBjYXNlIEluc2VydGlv
bk1vZGU6OkJlZm9yZUhUTUw6Ci0gICAgICAgIEFTU0VSVChpbnNlcnRpb25Nb2RlKCkgPT0gSW5z
ZXJ0aW9uTW9kZTo6QmVmb3JlSFRNTCk7CiAgICAgICAgIGRlZmF1bHRGb3JCZWZvcmVIVE1MKCk7
CisgICAgICAgIEFTU0VSVChtX2luc2VydGlvbk1vZGUgPT0gSW5zZXJ0aW9uTW9kZTo6QmVmb3Jl
SGVhZCk7CiAgICAgICAgIEZBTExUSFJPVUdIOwogICAgIGNhc2UgSW5zZXJ0aW9uTW9kZTo6QmVm
b3JlSGVhZDoKLSAgICAgICAgQVNTRVJUKGluc2VydGlvbk1vZGUoKSA9PSBJbnNlcnRpb25Nb2Rl
OjpCZWZvcmVIZWFkKTsKICAgICAgICAgZGVmYXVsdEZvckJlZm9yZUhlYWQoKTsKKyAgICAgICAg
QVNTRVJUKG1faW5zZXJ0aW9uTW9kZSA9PSBJbnNlcnRpb25Nb2RlOjpJbkhlYWQpOwogICAgICAg
ICBGQUxMVEhST1VHSDsKICAgICBjYXNlIEluc2VydGlvbk1vZGU6OkluSGVhZDoKLSAgICAgICAg
QVNTRVJUKGluc2VydGlvbk1vZGUoKSA9PSBJbnNlcnRpb25Nb2RlOjpJbkhlYWQpOwogICAgICAg
ICBkZWZhdWx0Rm9ySW5IZWFkKCk7CisgICAgICAgIEFTU0VSVChtX2luc2VydGlvbk1vZGUgPT0g
SW5zZXJ0aW9uTW9kZTo6QWZ0ZXJIZWFkKTsKICAgICAgICAgRkFMTFRIUk9VR0g7CiAgICAgY2Fz
ZSBJbnNlcnRpb25Nb2RlOjpBZnRlckhlYWQ6Ci0gICAgICAgIEFTU0VSVChpbnNlcnRpb25Nb2Rl
KCkgPT0gSW5zZXJ0aW9uTW9kZTo6QWZ0ZXJIZWFkKTsKICAgICAgICAgZGVmYXVsdEZvckFmdGVy
SGVhZCgpOworICAgICAgICBBU1NFUlQobV9pbnNlcnRpb25Nb2RlID09IEluc2VydGlvbk1vZGU6
OkluQm9keSk7CiAgICAgICAgIEZBTExUSFJPVUdIOwogICAgIGNhc2UgSW5zZXJ0aW9uTW9kZTo6
SW5Cb2R5OgogICAgIGNhc2UgSW5zZXJ0aW9uTW9kZTo6SW5DZWxsOgogICAgIGNhc2UgSW5zZXJ0
aW9uTW9kZTo6SW5DYXB0aW9uOgogICAgIGNhc2UgSW5zZXJ0aW9uTW9kZTo6SW5Sb3c6Ci0jaWYg
RU5BQkxFKFRFTVBMQVRFX0VMRU1FTlQpCi0gICAgICAgIEFTU0VSVChpbnNlcnRpb25Nb2RlKCkg
PT0gSW5zZXJ0aW9uTW9kZTo6SW5Cb2R5IHx8IGluc2VydGlvbk1vZGUoKSA9PSBJbnNlcnRpb25N
b2RlOjpJbkNlbGwgfHwgaW5zZXJ0aW9uTW9kZSgpID09IEluc2VydGlvbk1vZGU6OkluQ2FwdGlv
biB8fCBpbnNlcnRpb25Nb2RlKCkgPT0gSW5zZXJ0aW9uTW9kZTo6SW5Sb3cgfHwgaW5zZXJ0aW9u
TW9kZSgpID09IEluc2VydGlvbk1vZGU6OlRlbXBsYXRlQ29udGVudHMpOwotI2Vsc2UKLSAgICAg
ICAgQVNTRVJUKGluc2VydGlvbk1vZGUoKSAhPSBJbnNlcnRpb25Nb2RlOjpUZW1wbGF0ZUNvbnRl
bnRzKTsKLSAgICAgICAgQVNTRVJUKGluc2VydGlvbk1vZGUoKSA9PSBJbnNlcnRpb25Nb2RlOjpJ
bkJvZHkgfHwgaW5zZXJ0aW9uTW9kZSgpID09IEluc2VydGlvbk1vZGU6OkluQ2VsbCB8fCBpbnNl
cnRpb25Nb2RlKCkgPT0gSW5zZXJ0aW9uTW9kZTo6SW5DYXB0aW9uIHx8IGluc2VydGlvbk1vZGUo
KSA9PSBJbnNlcnRpb25Nb2RlOjpJblJvdyk7Ci0jZW5kaWYKICAgICAgICAgbm90SW1wbGVtZW50
ZWQoKTsgLy8gRW1pdCBwYXJzZSBlcnJvciBiYXNlZCBvbiB3aGF0IGVsZW1lbnRzIGFyZSBzdGls
bCBvcGVuLgogI2lmIEVOQUJMRShURU1QTEFURV9FTEVNRU5UKQotICAgICAgICBpZiAoIW1fdGVt
cGxhdGVJbnNlcnRpb25Nb2Rlcy5pc0VtcHR5KCkpCisgICAgICAgIGlmICghbV90ZW1wbGF0ZUlu
c2VydGlvbk1vZGVzLmlzRW1wdHkoKSkgewogICAgICAgICAgICAgaWYgKHByb2Nlc3NFbmRPZkZp
bGVGb3JJblRlbXBsYXRlQ29udGVudHModG9rZW4pKQogICAgICAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgfQogI2VuZGlmCiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgSW5zZXJ0aW9uTW9k
ZTo6QWZ0ZXJCb2R5OgogICAgIGNhc2UgSW5zZXJ0aW9uTW9kZTo6QWZ0ZXJBZnRlckJvZHk6Ci0g
ICAgICAgIEFTU0VSVChpbnNlcnRpb25Nb2RlKCkgPT0gSW5zZXJ0aW9uTW9kZTo6QWZ0ZXJCb2R5
IHx8IGluc2VydGlvbk1vZGUoKSA9PSBJbnNlcnRpb25Nb2RlOjpBZnRlckFmdGVyQm9keSk7CiAg
ICAgICAgIGJyZWFrOwogICAgIGNhc2UgSW5zZXJ0aW9uTW9kZTo6SW5IZWFkTm9zY3JpcHQ6Ci0g
ICAgICAgIEFTU0VSVChpbnNlcnRpb25Nb2RlKCkgPT0gSW5zZXJ0aW9uTW9kZTo6SW5IZWFkTm9z
Y3JpcHQpOwogICAgICAgICBkZWZhdWx0Rm9ySW5IZWFkTm9zY3JpcHQoKTsKICAgICAgICAgcHJv
Y2Vzc0VuZE9mRmlsZSh0b2tlbik7CiAgICAgICAgIHJldHVybjsKICAgICBjYXNlIEluc2VydGlv
bk1vZGU6OkFmdGVyRnJhbWVzZXQ6CiAgICAgY2FzZSBJbnNlcnRpb25Nb2RlOjpBZnRlckFmdGVy
RnJhbWVzZXQ6Ci0gICAgICAgIEFTU0VSVChpbnNlcnRpb25Nb2RlKCkgPT0gSW5zZXJ0aW9uTW9k
ZTo6QWZ0ZXJGcmFtZXNldCB8fCBpbnNlcnRpb25Nb2RlKCkgPT0gSW5zZXJ0aW9uTW9kZTo6QWZ0
ZXJBZnRlckZyYW1lc2V0KTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBJbnNlcnRpb25Nb2Rl
OjpJbkNvbHVtbkdyb3VwOgogICAgICAgICBpZiAobV90cmVlLmN1cnJlbnRJc1Jvb3ROb2RlKCkp
IHsKQEAgLTI2NTksMTQgKzI2MTYsMTQgQEAgdm9pZCBIVE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NF
bmRPZkZpbGUoQXRvbWljSFRNTFRva2VuKiB0b2tlbikKICAgICBjYXNlIEluc2VydGlvbk1vZGU6
OkluVGFibGVCb2R5OgogICAgIGNhc2UgSW5zZXJ0aW9uTW9kZTo6SW5TZWxlY3RJblRhYmxlOgog
ICAgIGNhc2UgSW5zZXJ0aW9uTW9kZTo6SW5TZWxlY3Q6Ci0gICAgICAgIEFTU0VSVChpbnNlcnRp
b25Nb2RlKCkgPT0gSW5zZXJ0aW9uTW9kZTo6SW5TZWxlY3QgfHwgaW5zZXJ0aW9uTW9kZSgpID09
IEluc2VydGlvbk1vZGU6OkluU2VsZWN0SW5UYWJsZSB8fCBpbnNlcnRpb25Nb2RlKCkgPT0gSW5z
ZXJ0aW9uTW9kZTo6SW5UYWJsZSB8fCBpbnNlcnRpb25Nb2RlKCkgPT0gSW5zZXJ0aW9uTW9kZTo6
SW5GcmFtZXNldCB8fCBpbnNlcnRpb25Nb2RlKCkgPT0gSW5zZXJ0aW9uTW9kZTo6SW5UYWJsZUJv
ZHkgfHwgaW5zZXJ0aW9uTW9kZSgpID09IEluc2VydGlvbk1vZGU6OkluQ29sdW1uR3JvdXApOwor
ICAgICAgICBBU1NFUlQobV9pbnNlcnRpb25Nb2RlID09IEluc2VydGlvbk1vZGU6OkluU2VsZWN0
IHx8IG1faW5zZXJ0aW9uTW9kZSA9PSBJbnNlcnRpb25Nb2RlOjpJblNlbGVjdEluVGFibGUgfHwg
bV9pbnNlcnRpb25Nb2RlID09IEluc2VydGlvbk1vZGU6OkluVGFibGUgfHwgbV9pbnNlcnRpb25N
b2RlID09IEluc2VydGlvbk1vZGU6OkluRnJhbWVzZXQgfHwgbV9pbnNlcnRpb25Nb2RlID09IElu
c2VydGlvbk1vZGU6OkluVGFibGVCb2R5IHx8IG1faW5zZXJ0aW9uTW9kZSA9PSBJbnNlcnRpb25N
b2RlOjpJbkNvbHVtbkdyb3VwKTsKICAgICAgICAgaWYgKG1fdHJlZS5jdXJyZW50Tm9kZSgpICE9
IG1fdHJlZS5vcGVuRWxlbWVudHMoKS0+cm9vdE5vZGUoKSkKICAgICAgICAgICAgIHBhcnNlRXJy
b3IodG9rZW4pOwotCiAjaWYgRU5BQkxFKFRFTVBMQVRFX0VMRU1FTlQpCi0gICAgICAgIGlmICgh
bV90ZW1wbGF0ZUluc2VydGlvbk1vZGVzLmlzRW1wdHkoKSkKKyAgICAgICAgaWYgKCFtX3RlbXBs
YXRlSW5zZXJ0aW9uTW9kZXMuaXNFbXB0eSgpKSB7CiAgICAgICAgICAgICBpZiAocHJvY2Vzc0Vu
ZE9mRmlsZUZvckluVGVtcGxhdGVDb250ZW50cyh0b2tlbikpCiAgICAgICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICB9CiAjZW5kaWYKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBJbnNlcnRp
b25Nb2RlOjpJblRhYmxlVGV4dDoKQEAgLTI2NzksMTYgKzI2MzYsMTQgQEAgdm9pZCBIVE1MVHJl
ZUJ1aWxkZXI6OnByb2Nlc3NFbmRPZkZpbGUoQXRvbWljSFRNTFRva2VuKiB0b2tlbikKICAgICAg
ICAgICAgIG5vdEltcGxlbWVudGVkKCk7IC8vIG1hcmsgdGhlIHNjcmlwdCBlbGVtZW50IGFzICJh
bHJlYWR5IHN0YXJ0ZWQiLgogICAgICAgICBtX3RyZWUub3BlbkVsZW1lbnRzKCktPnBvcCgpOwog
ICAgICAgICBBU1NFUlQobV9vcmlnaW5hbEluc2VydGlvbk1vZGUgIT0gSW5zZXJ0aW9uTW9kZTo6
VGV4dCk7Ci0gICAgICAgIHNldEluc2VydGlvbk1vZGUobV9vcmlnaW5hbEluc2VydGlvbk1vZGUp
OworICAgICAgICBtX2luc2VydGlvbk1vZGUgPSBtX29yaWdpbmFsSW5zZXJ0aW9uTW9kZTsKICAg
ICAgICAgcHJvY2Vzc0VuZE9mRmlsZSh0b2tlbik7CiAgICAgICAgIHJldHVybjsKLSAgICBjYXNl
IEluc2VydGlvbk1vZGU6OlRlbXBsYXRlQ29udGVudHM6CiAjaWYgRU5BQkxFKFRFTVBMQVRFX0VM
RU1FTlQpCisgICAgY2FzZSBJbnNlcnRpb25Nb2RlOjpUZW1wbGF0ZUNvbnRlbnRzOgogICAgICAg
ICBpZiAocHJvY2Vzc0VuZE9mRmlsZUZvckluVGVtcGxhdGVDb250ZW50cyh0b2tlbikpCiAgICAg
ICAgICAgICByZXR1cm47CiAgICAgICAgIGJyZWFrOwotI2Vsc2UKLSAgICAgICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7CiAjZW5kaWYKICAgICB9CiAgICAgQVNTRVJUKG1fdHJlZS5jdXJyZW50Tm9k
ZSgpKTsKQEAgLTI3MDAsMzggKzI2NTUsMzggQEAgdm9pZCBIVE1MVHJlZUJ1aWxkZXI6OmRlZmF1
bHRGb3JJbml0aWFsKCkKICAgICBub3RJbXBsZW1lbnRlZCgpOwogICAgIG1fdHJlZS5zZXREZWZh
dWx0Q29tcGF0aWJpbGl0eU1vZGUoKTsKICAgICAvLyBGSVhNRTogcGFyc2UgZXJyb3IKLSAgICBz
ZXRJbnNlcnRpb25Nb2RlKEluc2VydGlvbk1vZGU6OkJlZm9yZUhUTUwpOworICAgIG1faW5zZXJ0
aW9uTW9kZSA9IEluc2VydGlvbk1vZGU6OkJlZm9yZUhUTUw7CiB9CiAKIHZvaWQgSFRNTFRyZWVC
dWlsZGVyOjpkZWZhdWx0Rm9yQmVmb3JlSFRNTCgpCiB7CiAgICAgQXRvbWljSFRNTFRva2VuIHN0
YXJ0SFRNTChIVE1MVG9rZW46OlN0YXJ0VGFnLCBodG1sVGFnLmxvY2FsTmFtZSgpKTsKICAgICBt
X3RyZWUuaW5zZXJ0SFRNTEh0bWxTdGFydFRhZ0JlZm9yZUhUTUwoJnN0YXJ0SFRNTCk7Ci0gICAg
c2V0SW5zZXJ0aW9uTW9kZShJbnNlcnRpb25Nb2RlOjpCZWZvcmVIZWFkKTsKKyAgICBtX2luc2Vy
dGlvbk1vZGUgPSBJbnNlcnRpb25Nb2RlOjpCZWZvcmVIZWFkOwogfQogCiB2b2lkIEhUTUxUcmVl
QnVpbGRlcjo6ZGVmYXVsdEZvckJlZm9yZUhlYWQoKQogewogICAgIEF0b21pY0hUTUxUb2tlbiBz
dGFydEhlYWQoSFRNTFRva2VuOjpTdGFydFRhZywgaGVhZFRhZy5sb2NhbE5hbWUoKSk7Ci0gICAg
cHJvY2Vzc1N0YXJ0VGFnKCZzdGFydEhlYWQpOworICAgIHByb2Nlc3NTdGFydFRhZyhzdGFydEhl
YWQpOwogfQogCiB2b2lkIEhUTUxUcmVlQnVpbGRlcjo6ZGVmYXVsdEZvckluSGVhZCgpCiB7CiAg
ICAgQXRvbWljSFRNTFRva2VuIGVuZEhlYWQoSFRNTFRva2VuOjpFbmRUYWcsIGhlYWRUYWcubG9j
YWxOYW1lKCkpOwotICAgIHByb2Nlc3NFbmRUYWcoJmVuZEhlYWQpOworICAgIHByb2Nlc3NFbmRU
YWcoZW5kSGVhZCk7CiB9CiAKIHZvaWQgSFRNTFRyZWVCdWlsZGVyOjpkZWZhdWx0Rm9ySW5IZWFk
Tm9zY3JpcHQoKQogewogICAgIEF0b21pY0hUTUxUb2tlbiBlbmROb3NjcmlwdChIVE1MVG9rZW46
OkVuZFRhZywgbm9zY3JpcHRUYWcubG9jYWxOYW1lKCkpOwotICAgIHByb2Nlc3NFbmRUYWcoJmVu
ZE5vc2NyaXB0KTsKKyAgICBwcm9jZXNzRW5kVGFnKGVuZE5vc2NyaXB0KTsKIH0KIAogdm9pZCBI
VE1MVHJlZUJ1aWxkZXI6OmRlZmF1bHRGb3JBZnRlckhlYWQoKQogewogICAgIEF0b21pY0hUTUxU
b2tlbiBzdGFydEJvZHkoSFRNTFRva2VuOjpTdGFydFRhZywgYm9keVRhZy5sb2NhbE5hbWUoKSk7
Ci0gICAgcHJvY2Vzc1N0YXJ0VGFnKCZzdGFydEJvZHkpOworICAgIHByb2Nlc3NTdGFydFRhZyhz
dGFydEJvZHkpOwogICAgIG1fZnJhbWVzZXRPayA9IHRydWU7CiB9CiAKQEAgLTI3NDUsOTAgKzI3
MDAsOTAgQEAgdm9pZCBIVE1MVHJlZUJ1aWxkZXI6OmRlZmF1bHRGb3JJblRhYmxlVGV4dCgpCiAg
ICAgICAgIG1fdHJlZS5yZWNvbnN0cnVjdFRoZUFjdGl2ZUZvcm1hdHRpbmdFbGVtZW50cygpOwog
ICAgICAgICBtX3RyZWUuaW5zZXJ0VGV4dE5vZGUoY2hhcmFjdGVycywgTm90QWxsV2hpdGVzcGFj
ZSk7CiAgICAgICAgIG1fZnJhbWVzZXRPayA9IGZhbHNlOwotICAgICAgICBzZXRJbnNlcnRpb25N
b2RlKG1fb3JpZ2luYWxJbnNlcnRpb25Nb2RlKTsKKyAgICAgICAgbV9pbnNlcnRpb25Nb2RlID0g
bV9vcmlnaW5hbEluc2VydGlvbk1vZGU7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgbV90
cmVlLmluc2VydFRleHROb2RlKGNoYXJhY3RlcnMpOwotICAgIHNldEluc2VydGlvbk1vZGUobV9v
cmlnaW5hbEluc2VydGlvbk1vZGUpOworICAgIG1faW5zZXJ0aW9uTW9kZSA9IG1fb3JpZ2luYWxJ
bnNlcnRpb25Nb2RlOwogfQogCi1ib29sIEhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc1N0YXJ0VGFn
Rm9ySW5IZWFkKEF0b21pY0hUTUxUb2tlbiogdG9rZW4pCitib29sIEhUTUxUcmVlQnVpbGRlcjo6
cHJvY2Vzc1N0YXJ0VGFnRm9ySW5IZWFkKEF0b21pY0hUTUxUb2tlbiYgdG9rZW4pCiB7Ci0gICAg
QVNTRVJUKHRva2VuLT50eXBlKCkgPT0gSFRNTFRva2VuOjpTdGFydFRhZyk7Ci0gICAgaWYgKHRv
a2VuLT5uYW1lKCkgPT0gaHRtbFRhZykgeworICAgIEFTU0VSVCh0b2tlbi50eXBlKCkgPT0gSFRN
TFRva2VuOjpTdGFydFRhZyk7CisgICAgaWYgKHRva2VuLm5hbWUoKSA9PSBodG1sVGFnKSB7CiAg
ICAgICAgIHByb2Nlc3NIdG1sU3RhcnRUYWdGb3JJbkJvZHkodG9rZW4pOwogICAgICAgICByZXR1
cm4gdHJ1ZTsKICAgICB9Ci0gICAgaWYgKHRva2VuLT5uYW1lKCkgPT0gYmFzZVRhZwotICAgICAg
ICB8fCB0b2tlbi0+bmFtZSgpID09IGJhc2Vmb250VGFnCi0gICAgICAgIHx8IHRva2VuLT5uYW1l
KCkgPT0gYmdzb3VuZFRhZwotICAgICAgICB8fCB0b2tlbi0+bmFtZSgpID09IGNvbW1hbmRUYWcK
LSAgICAgICAgfHwgdG9rZW4tPm5hbWUoKSA9PSBsaW5rVGFnCi0gICAgICAgIHx8IHRva2VuLT5u
YW1lKCkgPT0gbWV0YVRhZykgewotICAgICAgICBtX3RyZWUuaW5zZXJ0U2VsZkNsb3NpbmdIVE1M
RWxlbWVudCh0b2tlbik7CisgICAgaWYgKHRva2VuLm5hbWUoKSA9PSBiYXNlVGFnCisgICAgICAg
IHx8IHRva2VuLm5hbWUoKSA9PSBiYXNlZm9udFRhZworICAgICAgICB8fCB0b2tlbi5uYW1lKCkg
PT0gYmdzb3VuZFRhZworICAgICAgICB8fCB0b2tlbi5uYW1lKCkgPT0gY29tbWFuZFRhZworICAg
ICAgICB8fCB0b2tlbi5uYW1lKCkgPT0gbGlua1RhZworICAgICAgICB8fCB0b2tlbi5uYW1lKCkg
PT0gbWV0YVRhZykgeworICAgICAgICBtX3RyZWUuaW5zZXJ0U2VsZkNsb3NpbmdIVE1MRWxlbWVu
dCgmdG9rZW4pOwogICAgICAgICAvLyBOb3RlOiBUaGUgY3VzdG9tIHByb2Nlc3NpbmcgZm9yIHRo
ZSA8bWV0YT4gdGFnIGlzIGRvbmUgaW4gSFRNTE1ldGFFbGVtZW50Ojpwcm9jZXNzKCkuCiAgICAg
ICAgIHJldHVybiB0cnVlOwogICAgIH0KLSAgICBpZiAodG9rZW4tPm5hbWUoKSA9PSB0aXRsZVRh
ZykgeworICAgIGlmICh0b2tlbi5uYW1lKCkgPT0gdGl0bGVUYWcpIHsKICAgICAgICAgcHJvY2Vz
c0dlbmVyaWNSQ0RBVEFTdGFydFRhZyh0b2tlbik7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAg
IH0KLSAgICBpZiAodG9rZW4tPm5hbWUoKSA9PSBub3NjcmlwdFRhZykgeworICAgIGlmICh0b2tl
bi5uYW1lKCkgPT0gbm9zY3JpcHRUYWcpIHsKICAgICAgICAgaWYgKG1fb3B0aW9ucy5zY3JpcHRF
bmFibGVkKSB7CiAgICAgICAgICAgICBwcm9jZXNzR2VuZXJpY1Jhd1RleHRTdGFydFRhZyh0b2tl
bik7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQotICAgICAgICBtX3RyZWUu
aW5zZXJ0SFRNTEVsZW1lbnQodG9rZW4pOwotICAgICAgICBzZXRJbnNlcnRpb25Nb2RlKEluc2Vy
dGlvbk1vZGU6OkluSGVhZE5vc2NyaXB0KTsKKyAgICAgICAgbV90cmVlLmluc2VydEhUTUxFbGVt
ZW50KCZ0b2tlbik7CisgICAgICAgIG1faW5zZXJ0aW9uTW9kZSA9IEluc2VydGlvbk1vZGU6Oklu
SGVhZE5vc2NyaXB0OwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9Ci0gICAgaWYgKHRva2Vu
LT5uYW1lKCkgPT0gbm9mcmFtZXNUYWcgfHwgdG9rZW4tPm5hbWUoKSA9PSBzdHlsZVRhZykgewor
ICAgIGlmICh0b2tlbi5uYW1lKCkgPT0gbm9mcmFtZXNUYWcgfHwgdG9rZW4ubmFtZSgpID09IHN0
eWxlVGFnKSB7CiAgICAgICAgIHByb2Nlc3NHZW5lcmljUmF3VGV4dFN0YXJ0VGFnKHRva2VuKTsK
ICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQotICAgIGlmICh0b2tlbi0+bmFtZSgpID09IHNj
cmlwdFRhZykgeworICAgIGlmICh0b2tlbi5uYW1lKCkgPT0gc2NyaXB0VGFnKSB7CiAgICAgICAg
IHByb2Nlc3NTY3JpcHRTdGFydFRhZyh0b2tlbik7Ci0gICAgICAgIGlmIChtX29wdGlvbnMudXNl
UHJlSFRNTDVQYXJzZXJRdWlya3MgJiYgdG9rZW4tPnNlbGZDbG9zaW5nKCkpCisgICAgICAgIGlm
IChtX29wdGlvbnMudXNlUHJlSFRNTDVQYXJzZXJRdWlya3MgJiYgdG9rZW4uc2VsZkNsb3Npbmco
KSkKICAgICAgICAgICAgIHByb2Nlc3NGYWtlRW5kVGFnKHNjcmlwdFRhZyk7CiAgICAgICAgIHJl
dHVybiB0cnVlOwogICAgIH0KICNpZiBFTkFCTEUoVEVNUExBVEVfRUxFTUVOVCkKLSAgICBpZiAo
dG9rZW4tPm5hbWUoKSA9PSB0ZW1wbGF0ZVRhZykgeworICAgIGlmICh0b2tlbi5uYW1lKCkgPT0g
dGVtcGxhdGVUYWcpIHsKICAgICAgICAgcHJvY2Vzc1RlbXBsYXRlU3RhcnRUYWcodG9rZW4pOwog
ICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAjZW5kaWYKLSAgICBpZiAodG9rZW4tPm5hbWUo
KSA9PSBoZWFkVGFnKSB7CisgICAgaWYgKHRva2VuLm5hbWUoKSA9PSBoZWFkVGFnKSB7CiAgICAg
ICAgIHBhcnNlRXJyb3IodG9rZW4pOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAg
cmV0dXJuIGZhbHNlOwogfQogCi12b2lkIEhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc0dlbmVyaWNS
Q0RBVEFTdGFydFRhZyhBdG9taWNIVE1MVG9rZW4qIHRva2VuKQordm9pZCBIVE1MVHJlZUJ1aWxk
ZXI6OnByb2Nlc3NHZW5lcmljUkNEQVRBU3RhcnRUYWcoQXRvbWljSFRNTFRva2VuJiB0b2tlbikK
IHsKLSAgICBBU1NFUlQodG9rZW4tPnR5cGUoKSA9PSBIVE1MVG9rZW46OlN0YXJ0VGFnKTsKLSAg
ICBtX3RyZWUuaW5zZXJ0SFRNTEVsZW1lbnQodG9rZW4pOworICAgIEFTU0VSVCh0b2tlbi50eXBl
KCkgPT0gSFRNTFRva2VuOjpTdGFydFRhZyk7CisgICAgbV90cmVlLmluc2VydEhUTUxFbGVtZW50
KCZ0b2tlbik7CiAgICAgaWYgKG1fcGFyc2VyLnRva2VuaXplcigpKQogICAgICAgICBtX3BhcnNl
ci50b2tlbml6ZXIoKS0+c2V0U3RhdGUoSFRNTFRva2VuaXplcjo6UkNEQVRBU3RhdGUpOwogICAg
IG1fb3JpZ2luYWxJbnNlcnRpb25Nb2RlID0gbV9pbnNlcnRpb25Nb2RlOwotICAgIHNldEluc2Vy
dGlvbk1vZGUoSW5zZXJ0aW9uTW9kZTo6VGV4dCk7CisgICAgbV9pbnNlcnRpb25Nb2RlID0gSW5z
ZXJ0aW9uTW9kZTo6VGV4dDsKIH0KIAotdm9pZCBIVE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NHZW5l
cmljUmF3VGV4dFN0YXJ0VGFnKEF0b21pY0hUTUxUb2tlbiogdG9rZW4pCit2b2lkIEhUTUxUcmVl
QnVpbGRlcjo6cHJvY2Vzc0dlbmVyaWNSYXdUZXh0U3RhcnRUYWcoQXRvbWljSFRNTFRva2VuJiB0
b2tlbikKIHsKLSAgICBBU1NFUlQodG9rZW4tPnR5cGUoKSA9PSBIVE1MVG9rZW46OlN0YXJ0VGFn
KTsKLSAgICBtX3RyZWUuaW5zZXJ0SFRNTEVsZW1lbnQodG9rZW4pOworICAgIEFTU0VSVCh0b2tl
bi50eXBlKCkgPT0gSFRNTFRva2VuOjpTdGFydFRhZyk7CisgICAgbV90cmVlLmluc2VydEhUTUxF
bGVtZW50KCZ0b2tlbik7CiAgICAgaWYgKG1fcGFyc2VyLnRva2VuaXplcigpKQogICAgICAgICBt
X3BhcnNlci50b2tlbml6ZXIoKS0+c2V0U3RhdGUoSFRNTFRva2VuaXplcjo6UkFXVEVYVFN0YXRl
KTsKICAgICBtX29yaWdpbmFsSW5zZXJ0aW9uTW9kZSA9IG1faW5zZXJ0aW9uTW9kZTsKLSAgICBz
ZXRJbnNlcnRpb25Nb2RlKEluc2VydGlvbk1vZGU6OlRleHQpOworICAgIG1faW5zZXJ0aW9uTW9k
ZSA9IEluc2VydGlvbk1vZGU6OlRleHQ7CiB9CiAKLXZvaWQgSFRNTFRyZWVCdWlsZGVyOjpwcm9j
ZXNzU2NyaXB0U3RhcnRUYWcoQXRvbWljSFRNTFRva2VuKiB0b2tlbikKK3ZvaWQgSFRNTFRyZWVC
dWlsZGVyOjpwcm9jZXNzU2NyaXB0U3RhcnRUYWcoQXRvbWljSFRNTFRva2VuJiB0b2tlbikKIHsK
LSAgICBBU1NFUlQodG9rZW4tPnR5cGUoKSA9PSBIVE1MVG9rZW46OlN0YXJ0VGFnKTsKLSAgICBt
X3RyZWUuaW5zZXJ0U2NyaXB0RWxlbWVudCh0b2tlbik7CisgICAgQVNTRVJUKHRva2VuLnR5cGUo
KSA9PSBIVE1MVG9rZW46OlN0YXJ0VGFnKTsKKyAgICBtX3RyZWUuaW5zZXJ0U2NyaXB0RWxlbWVu
dCgmdG9rZW4pOwogICAgIGlmIChtX3BhcnNlci50b2tlbml6ZXIoKSkKICAgICAgICAgbV9wYXJz
ZXIudG9rZW5pemVyKCktPnNldFN0YXRlKEhUTUxUb2tlbml6ZXI6OlNjcmlwdERhdGFTdGF0ZSk7
CiAgICAgbV9vcmlnaW5hbEluc2VydGlvbk1vZGUgPSBtX2luc2VydGlvbk1vZGU7CkBAIC0yODM3
LDU1ICsyNzkyLDU1IEBAIHZvaWQgSFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNzU2NyaXB0U3RhcnRU
YWcoQXRvbWljSFRNTFRva2VuKiB0b2tlbikKIAogICAgIG1fc2NyaXB0VG9Qcm9jZXNzU3RhcnRQ
b3NpdGlvbiA9IHBvc2l0aW9uOwogCi0gICAgc2V0SW5zZXJ0aW9uTW9kZShJbnNlcnRpb25Nb2Rl
OjpUZXh0KTsKKyAgICBtX2luc2VydGlvbk1vZGUgPSBJbnNlcnRpb25Nb2RlOjpUZXh0OwogfQog
CiAvLyBodHRwOi8vd3d3LndoYXR3Zy5vcmcvc3BlY3Mvd2ViLWFwcHMvY3VycmVudC13b3JrLyNh
ZGp1c3RlZC1jdXJyZW50LW5vZGUKLUhUTUxTdGFja0l0ZW0qIEhUTUxUcmVlQnVpbGRlcjo6YWRq
dXN0ZWRDdXJyZW50U3RhY2tJdGVtKCkgY29uc3QKK0hUTUxTdGFja0l0ZW0mIEhUTUxUcmVlQnVp
bGRlcjo6YWRqdXN0ZWRDdXJyZW50U3RhY2tJdGVtKCkgY29uc3QKIHsKICAgICBBU1NFUlQoIW1f
dHJlZS5pc0VtcHR5KCkpOwogICAgIGlmIChpc1BhcnNpbmdGcmFnbWVudCgpICYmIG1fdHJlZS5v
cGVuRWxlbWVudHMoKS0+aGFzT25seU9uZUVsZW1lbnQoKSkKICAgICAgICAgcmV0dXJuIG1fZnJh
Z21lbnRDb250ZXh0LmNvbnRleHRFbGVtZW50U3RhY2tJdGVtKCk7CiAKLSAgICByZXR1cm4gbV90
cmVlLmN1cnJlbnRTdGFja0l0ZW0oKTsKKyAgICByZXR1cm4gKm1fdHJlZS5jdXJyZW50U3RhY2tJ
dGVtKCk7CiB9CiAKIC8vIGh0dHA6Ly93d3cud2hhdHdnLm9yZy9zcGVjcy93ZWItYXBwcy9jdXJy
ZW50LXdvcmsvbXVsdGlwYWdlL3RyZWUtY29uc3RydWN0aW9uLmh0bWwjdHJlZS1jb25zdHJ1Y3Rp
b24KLWJvb2wgSFRNTFRyZWVCdWlsZGVyOjpzaG91bGRQcm9jZXNzVG9rZW5JbkZvcmVpZ25Db250
ZW50KEF0b21pY0hUTUxUb2tlbiogdG9rZW4pCitib29sIEhUTUxUcmVlQnVpbGRlcjo6c2hvdWxk
UHJvY2Vzc1Rva2VuSW5Gb3JlaWduQ29udGVudChBdG9taWNIVE1MVG9rZW4mIHRva2VuKQogewog
ICAgIGlmIChtX3RyZWUuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgSFRN
TFN0YWNrSXRlbSogYWRqdXN0ZWRDdXJyZW50Tm9kZSA9IGFkanVzdGVkQ3VycmVudFN0YWNrSXRl
bSgpOwotICAgIGlmIChhZGp1c3RlZEN1cnJlbnROb2RlLT5pc0luSFRNTE5hbWVzcGFjZSgpKQor
ICAgIEhUTUxTdGFja0l0ZW0mIGFkanVzdGVkQ3VycmVudE5vZGUgPSBhZGp1c3RlZEN1cnJlbnRT
dGFja0l0ZW0oKTsKKyAgICBpZiAoYWRqdXN0ZWRDdXJyZW50Tm9kZS5pc0luSFRNTE5hbWVzcGFj
ZSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKEhUTUxFbGVtZW50U3RhY2s6Omlz
TWF0aE1MVGV4dEludGVncmF0aW9uUG9pbnQoYWRqdXN0ZWRDdXJyZW50Tm9kZSkpIHsKLSAgICAg
ICAgaWYgKHRva2VuLT50eXBlKCkgPT0gSFRNTFRva2VuOjpTdGFydFRhZwotICAgICAgICAgICAg
JiYgdG9rZW4tPm5hbWUoKSAhPSBNYXRoTUxOYW1lczo6bWdseXBoVGFnCi0gICAgICAgICAgICAm
JiB0b2tlbi0+bmFtZSgpICE9IE1hdGhNTE5hbWVzOjptYWxpZ25tYXJrVGFnKQorICAgIGlmIChI
VE1MRWxlbWVudFN0YWNrOjppc01hdGhNTFRleHRJbnRlZ3JhdGlvblBvaW50KCZhZGp1c3RlZEN1
cnJlbnROb2RlKSkgeworICAgICAgICBpZiAodG9rZW4udHlwZSgpID09IEhUTUxUb2tlbjo6U3Rh
cnRUYWcKKyAgICAgICAgICAgICYmIHRva2VuLm5hbWUoKSAhPSBNYXRoTUxOYW1lczo6bWdseXBo
VGFnCisgICAgICAgICAgICAmJiB0b2tlbi5uYW1lKCkgIT0gTWF0aE1MTmFtZXM6Om1hbGlnbm1h
cmtUYWcpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGlmICh0b2tlbi0+dHlw
ZSgpID09IEhUTUxUb2tlbjo6Q2hhcmFjdGVyKQorICAgICAgICBpZiAodG9rZW4udHlwZSgpID09
IEhUTUxUb2tlbjo6Q2hhcmFjdGVyKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0K
LSAgICBpZiAoYWRqdXN0ZWRDdXJyZW50Tm9kZS0+aGFzVGFnTmFtZShNYXRoTUxOYW1lczo6YW5u
b3RhdGlvbl94bWxUYWcpCi0gICAgICAgICYmIHRva2VuLT50eXBlKCkgPT0gSFRNTFRva2VuOjpT
dGFydFRhZwotICAgICAgICAmJiB0b2tlbi0+bmFtZSgpID09IFNWR05hbWVzOjpzdmdUYWcpCisg
ICAgaWYgKGFkanVzdGVkQ3VycmVudE5vZGUuaGFzVGFnTmFtZShNYXRoTUxOYW1lczo6YW5ub3Rh
dGlvbl94bWxUYWcpCisgICAgICAgICYmIHRva2VuLnR5cGUoKSA9PSBIVE1MVG9rZW46OlN0YXJ0
VGFnCisgICAgICAgICYmIHRva2VuLm5hbWUoKSA9PSBTVkdOYW1lczo6c3ZnVGFnKQogICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKEhUTUxFbGVtZW50U3RhY2s6OmlzSFRNTEludGVncmF0
aW9uUG9pbnQoYWRqdXN0ZWRDdXJyZW50Tm9kZSkpIHsKLSAgICAgICAgaWYgKHRva2VuLT50eXBl
KCkgPT0gSFRNTFRva2VuOjpTdGFydFRhZykKKyAgICBpZiAoSFRNTEVsZW1lbnRTdGFjazo6aXNI
VE1MSW50ZWdyYXRpb25Qb2ludCgmYWRqdXN0ZWRDdXJyZW50Tm9kZSkpIHsKKyAgICAgICAgaWYg
KHRva2VuLnR5cGUoKSA9PSBIVE1MVG9rZW46OlN0YXJ0VGFnKQogICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgICAgICBpZiAodG9rZW4tPnR5cGUoKSA9PSBIVE1MVG9rZW46OkNoYXJhY3Rl
cikKKyAgICAgICAgaWYgKHRva2VuLnR5cGUoKSA9PSBIVE1MVG9rZW46OkNoYXJhY3RlcikKICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9Ci0gICAgaWYgKHRva2VuLT50eXBlKCkgPT0g
SFRNTFRva2VuOjpFbmRPZkZpbGUpCisgICAgaWYgKHRva2VuLnR5cGUoKSA9PSBIVE1MVG9rZW46
OkVuZE9mRmlsZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIHJldHVybiB0cnVlOwogfQog
Ci12b2lkIEhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc1Rva2VuSW5Gb3JlaWduQ29udGVudChBdG9t
aWNIVE1MVG9rZW4qIHRva2VuKQordm9pZCBIVE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NUb2tlbklu
Rm9yZWlnbkNvbnRlbnQoQXRvbWljSFRNTFRva2VuJiB0b2tlbikKIHsKLSAgICBIVE1MU3RhY2tJ
dGVtKiBhZGp1c3RlZEN1cnJlbnROb2RlID0gYWRqdXN0ZWRDdXJyZW50U3RhY2tJdGVtKCk7Cisg
ICAgSFRNTFN0YWNrSXRlbSYgYWRqdXN0ZWRDdXJyZW50Tm9kZSA9IGFkanVzdGVkQ3VycmVudFN0
YWNrSXRlbSgpOwogICAgIAotICAgIHN3aXRjaCAodG9rZW4tPnR5cGUoKSkgeworICAgIHN3aXRj
aCAodG9rZW4udHlwZSgpKSB7CiAgICAgY2FzZSBIVE1MVG9rZW46OlVuaW5pdGlhbGl6ZWQ6CiAg
ICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICBicmVhazsKQEAgLTI4OTMsNjcg
KzI4NDgsNjcgQEAgdm9pZCBIVE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NUb2tlbkluRm9yZWlnbkNv
bnRlbnQoQXRvbWljSFRNTFRva2VuKiB0b2tlbikKICAgICAgICAgcGFyc2VFcnJvcih0b2tlbik7
CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgSFRNTFRva2VuOjpTdGFydFRhZzogewotICAgICAg
ICBpZiAodG9rZW4tPm5hbWUoKSA9PSBiVGFnCi0gICAgICAgICAgICB8fCB0b2tlbi0+bmFtZSgp
ID09IGJpZ1RhZwotICAgICAgICAgICAgfHwgdG9rZW4tPm5hbWUoKSA9PSBibG9ja3F1b3RlVGFn
Ci0gICAgICAgICAgICB8fCB0b2tlbi0+bmFtZSgpID09IGJvZHlUYWcKLSAgICAgICAgICAgIHx8
IHRva2VuLT5uYW1lKCkgPT0gYnJUYWcKLSAgICAgICAgICAgIHx8IHRva2VuLT5uYW1lKCkgPT0g
Y2VudGVyVGFnCi0gICAgICAgICAgICB8fCB0b2tlbi0+bmFtZSgpID09IGNvZGVUYWcKLSAgICAg
ICAgICAgIHx8IHRva2VuLT5uYW1lKCkgPT0gZGRUYWcKLSAgICAgICAgICAgIHx8IHRva2VuLT5u
YW1lKCkgPT0gZGl2VGFnCi0gICAgICAgICAgICB8fCB0b2tlbi0+bmFtZSgpID09IGRsVGFnCi0g
ICAgICAgICAgICB8fCB0b2tlbi0+bmFtZSgpID09IGR0VGFnCi0gICAgICAgICAgICB8fCB0b2tl
bi0+bmFtZSgpID09IGVtVGFnCi0gICAgICAgICAgICB8fCB0b2tlbi0+bmFtZSgpID09IGVtYmVk
VGFnCi0gICAgICAgICAgICB8fCBpc051bWJlcmVkSGVhZGVyVGFnKHRva2VuLT5uYW1lKCkpCi0g
ICAgICAgICAgICB8fCB0b2tlbi0+bmFtZSgpID09IGhlYWRUYWcKLSAgICAgICAgICAgIHx8IHRv
a2VuLT5uYW1lKCkgPT0gaHJUYWcKLSAgICAgICAgICAgIHx8IHRva2VuLT5uYW1lKCkgPT0gaVRh
ZwotICAgICAgICAgICAgfHwgdG9rZW4tPm5hbWUoKSA9PSBpbWdUYWcKLSAgICAgICAgICAgIHx8
IHRva2VuLT5uYW1lKCkgPT0gbGlUYWcKLSAgICAgICAgICAgIHx8IHRva2VuLT5uYW1lKCkgPT0g
bGlzdGluZ1RhZwotICAgICAgICAgICAgfHwgdG9rZW4tPm5hbWUoKSA9PSBtZW51VGFnCi0gICAg
ICAgICAgICB8fCB0b2tlbi0+bmFtZSgpID09IG1ldGFUYWcKLSAgICAgICAgICAgIHx8IHRva2Vu
LT5uYW1lKCkgPT0gbm9iclRhZwotICAgICAgICAgICAgfHwgdG9rZW4tPm5hbWUoKSA9PSBvbFRh
ZwotICAgICAgICAgICAgfHwgdG9rZW4tPm5hbWUoKSA9PSBwVGFnCi0gICAgICAgICAgICB8fCB0
b2tlbi0+bmFtZSgpID09IHByZVRhZwotICAgICAgICAgICAgfHwgdG9rZW4tPm5hbWUoKSA9PSBy
dWJ5VGFnCi0gICAgICAgICAgICB8fCB0b2tlbi0+bmFtZSgpID09IHNUYWcKLSAgICAgICAgICAg
IHx8IHRva2VuLT5uYW1lKCkgPT0gc21hbGxUYWcKLSAgICAgICAgICAgIHx8IHRva2VuLT5uYW1l
KCkgPT0gc3BhblRhZwotICAgICAgICAgICAgfHwgdG9rZW4tPm5hbWUoKSA9PSBzdHJvbmdUYWcK
LSAgICAgICAgICAgIHx8IHRva2VuLT5uYW1lKCkgPT0gc3RyaWtlVGFnCi0gICAgICAgICAgICB8
fCB0b2tlbi0+bmFtZSgpID09IHN1YlRhZwotICAgICAgICAgICAgfHwgdG9rZW4tPm5hbWUoKSA9
PSBzdXBUYWcKLSAgICAgICAgICAgIHx8IHRva2VuLT5uYW1lKCkgPT0gdGFibGVUYWcKLSAgICAg
ICAgICAgIHx8IHRva2VuLT5uYW1lKCkgPT0gdHRUYWcKLSAgICAgICAgICAgIHx8IHRva2VuLT5u
YW1lKCkgPT0gdVRhZwotICAgICAgICAgICAgfHwgdG9rZW4tPm5hbWUoKSA9PSB1bFRhZwotICAg
ICAgICAgICAgfHwgdG9rZW4tPm5hbWUoKSA9PSB2YXJUYWcKLSAgICAgICAgICAgIHx8ICh0b2tl
bi0+bmFtZSgpID09IGZvbnRUYWcgJiYgKHRva2VuLT5nZXRBdHRyaWJ1dGVJdGVtKGNvbG9yQXR0
cikgfHwgdG9rZW4tPmdldEF0dHJpYnV0ZUl0ZW0oZmFjZUF0dHIpIHx8IHRva2VuLT5nZXRBdHRy
aWJ1dGVJdGVtKHNpemVBdHRyKSkpKSB7CisgICAgICAgIGlmICh0b2tlbi5uYW1lKCkgPT0gYlRh
ZworICAgICAgICAgICAgfHwgdG9rZW4ubmFtZSgpID09IGJpZ1RhZworICAgICAgICAgICAgfHwg
dG9rZW4ubmFtZSgpID09IGJsb2NrcXVvdGVUYWcKKyAgICAgICAgICAgIHx8IHRva2VuLm5hbWUo
KSA9PSBib2R5VGFnCisgICAgICAgICAgICB8fCB0b2tlbi5uYW1lKCkgPT0gYnJUYWcKKyAgICAg
ICAgICAgIHx8IHRva2VuLm5hbWUoKSA9PSBjZW50ZXJUYWcKKyAgICAgICAgICAgIHx8IHRva2Vu
Lm5hbWUoKSA9PSBjb2RlVGFnCisgICAgICAgICAgICB8fCB0b2tlbi5uYW1lKCkgPT0gZGRUYWcK
KyAgICAgICAgICAgIHx8IHRva2VuLm5hbWUoKSA9PSBkaXZUYWcKKyAgICAgICAgICAgIHx8IHRv
a2VuLm5hbWUoKSA9PSBkbFRhZworICAgICAgICAgICAgfHwgdG9rZW4ubmFtZSgpID09IGR0VGFn
CisgICAgICAgICAgICB8fCB0b2tlbi5uYW1lKCkgPT0gZW1UYWcKKyAgICAgICAgICAgIHx8IHRv
a2VuLm5hbWUoKSA9PSBlbWJlZFRhZworICAgICAgICAgICAgfHwgaXNOdW1iZXJlZEhlYWRlclRh
Zyh0b2tlbi5uYW1lKCkpCisgICAgICAgICAgICB8fCB0b2tlbi5uYW1lKCkgPT0gaGVhZFRhZwor
ICAgICAgICAgICAgfHwgdG9rZW4ubmFtZSgpID09IGhyVGFnCisgICAgICAgICAgICB8fCB0b2tl
bi5uYW1lKCkgPT0gaVRhZworICAgICAgICAgICAgfHwgdG9rZW4ubmFtZSgpID09IGltZ1RhZwor
ICAgICAgICAgICAgfHwgdG9rZW4ubmFtZSgpID09IGxpVGFnCisgICAgICAgICAgICB8fCB0b2tl
bi5uYW1lKCkgPT0gbGlzdGluZ1RhZworICAgICAgICAgICAgfHwgdG9rZW4ubmFtZSgpID09IG1l
bnVUYWcKKyAgICAgICAgICAgIHx8IHRva2VuLm5hbWUoKSA9PSBtZXRhVGFnCisgICAgICAgICAg
ICB8fCB0b2tlbi5uYW1lKCkgPT0gbm9iclRhZworICAgICAgICAgICAgfHwgdG9rZW4ubmFtZSgp
ID09IG9sVGFnCisgICAgICAgICAgICB8fCB0b2tlbi5uYW1lKCkgPT0gcFRhZworICAgICAgICAg
ICAgfHwgdG9rZW4ubmFtZSgpID09IHByZVRhZworICAgICAgICAgICAgfHwgdG9rZW4ubmFtZSgp
ID09IHJ1YnlUYWcKKyAgICAgICAgICAgIHx8IHRva2VuLm5hbWUoKSA9PSBzVGFnCisgICAgICAg
ICAgICB8fCB0b2tlbi5uYW1lKCkgPT0gc21hbGxUYWcKKyAgICAgICAgICAgIHx8IHRva2VuLm5h
bWUoKSA9PSBzcGFuVGFnCisgICAgICAgICAgICB8fCB0b2tlbi5uYW1lKCkgPT0gc3Ryb25nVGFn
CisgICAgICAgICAgICB8fCB0b2tlbi5uYW1lKCkgPT0gc3RyaWtlVGFnCisgICAgICAgICAgICB8
fCB0b2tlbi5uYW1lKCkgPT0gc3ViVGFnCisgICAgICAgICAgICB8fCB0b2tlbi5uYW1lKCkgPT0g
c3VwVGFnCisgICAgICAgICAgICB8fCB0b2tlbi5uYW1lKCkgPT0gdGFibGVUYWcKKyAgICAgICAg
ICAgIHx8IHRva2VuLm5hbWUoKSA9PSB0dFRhZworICAgICAgICAgICAgfHwgdG9rZW4ubmFtZSgp
ID09IHVUYWcKKyAgICAgICAgICAgIHx8IHRva2VuLm5hbWUoKSA9PSB1bFRhZworICAgICAgICAg
ICAgfHwgdG9rZW4ubmFtZSgpID09IHZhclRhZworICAgICAgICAgICAgfHwgKHRva2VuLm5hbWUo
KSA9PSBmb250VGFnICYmICh0b2tlbi5nZXRBdHRyaWJ1dGVJdGVtKGNvbG9yQXR0cikgfHwgdG9r
ZW4uZ2V0QXR0cmlidXRlSXRlbShmYWNlQXR0cikgfHwgdG9rZW4uZ2V0QXR0cmlidXRlSXRlbShz
aXplQXR0cikpKSkgewogICAgICAgICAgICAgcGFyc2VFcnJvcih0b2tlbik7CiAgICAgICAgICAg
ICBtX3RyZWUub3BlbkVsZW1lbnRzKCktPnBvcFVudGlsRm9yZWlnbkNvbnRlbnRTY29wZU1hcmtl
cigpOwogICAgICAgICAgICAgcHJvY2Vzc1N0YXJ0VGFnKHRva2VuKTsKICAgICAgICAgICAgIHJl
dHVybjsKICAgICAgICAgfQotICAgICAgICBjb25zdCBBdG9taWNTdHJpbmcmIGN1cnJlbnROYW1l
c3BhY2UgPSBhZGp1c3RlZEN1cnJlbnROb2RlLT5uYW1lc3BhY2VVUkkoKTsKKyAgICAgICAgY29u
c3QgQXRvbWljU3RyaW5nJiBjdXJyZW50TmFtZXNwYWNlID0gYWRqdXN0ZWRDdXJyZW50Tm9kZS5u
YW1lc3BhY2VVUkkoKTsKICAgICAgICAgaWYgKGN1cnJlbnROYW1lc3BhY2UgPT0gTWF0aE1MTmFt
ZXM6Om1hdGhtbE5hbWVzcGFjZVVSSSkKLSAgICAgICAgICAgIGFkanVzdE1hdGhNTEF0dHJpYnV0
ZXMoKnRva2VuKTsKKyAgICAgICAgICAgIGFkanVzdE1hdGhNTEF0dHJpYnV0ZXModG9rZW4pOwog
ICAgICAgICBpZiAoY3VycmVudE5hbWVzcGFjZSA9PSBTVkdOYW1lczo6c3ZnTmFtZXNwYWNlVVJJ
KSB7Ci0gICAgICAgICAgICBhZGp1c3RTVkdUYWdOYW1lQ2FzZSgqdG9rZW4pOwotICAgICAgICAg
ICAgYWRqdXN0U1ZHQXR0cmlidXRlcygqdG9rZW4pOworICAgICAgICAgICAgYWRqdXN0U1ZHVGFn
TmFtZUNhc2UodG9rZW4pOworICAgICAgICAgICAgYWRqdXN0U1ZHQXR0cmlidXRlcyh0b2tlbik7
CiAgICAgICAgIH0KLSAgICAgICAgYWRqdXN0Rm9yZWlnbkF0dHJpYnV0ZXMoKnRva2VuKTsKLSAg
ICAgICAgbV90cmVlLmluc2VydEZvcmVpZ25FbGVtZW50KHRva2VuLCBjdXJyZW50TmFtZXNwYWNl
KTsKKyAgICAgICAgYWRqdXN0Rm9yZWlnbkF0dHJpYnV0ZXModG9rZW4pOworICAgICAgICBtX3Ry
ZWUuaW5zZXJ0Rm9yZWlnbkVsZW1lbnQoJnRva2VuLCBjdXJyZW50TmFtZXNwYWNlKTsKICAgICAg
ICAgYnJlYWs7CiAgICAgfQogICAgIGNhc2UgSFRNTFRva2VuOjpFbmRUYWc6IHsKLSAgICAgICAg
aWYgKGFkanVzdGVkQ3VycmVudE5vZGUtPm5hbWVzcGFjZVVSSSgpID09IFNWR05hbWVzOjpzdmdO
YW1lc3BhY2VVUkkpCi0gICAgICAgICAgICBhZGp1c3RTVkdUYWdOYW1lQ2FzZSgqdG9rZW4pOwor
ICAgICAgICBpZiAoYWRqdXN0ZWRDdXJyZW50Tm9kZS5uYW1lc3BhY2VVUkkoKSA9PSBTVkdOYW1l
czo6c3ZnTmFtZXNwYWNlVVJJKQorICAgICAgICAgICAgYWRqdXN0U1ZHVGFnTmFtZUNhc2UodG9r
ZW4pOwogCi0gICAgICAgIGlmICh0b2tlbi0+bmFtZSgpID09IFNWR05hbWVzOjpzY3JpcHRUYWcg
JiYgbV90cmVlLmN1cnJlbnRTdGFja0l0ZW0oKS0+aGFzVGFnTmFtZShTVkdOYW1lczo6c2NyaXB0
VGFnKSkgeworICAgICAgICBpZiAodG9rZW4ubmFtZSgpID09IFNWR05hbWVzOjpzY3JpcHRUYWcg
JiYgbV90cmVlLmN1cnJlbnRTdGFja0l0ZW0oKS0+aGFzVGFnTmFtZShTVkdOYW1lczo6c2NyaXB0
VGFnKSkgewogICAgICAgICAgICAgaWYgKHNjcmlwdGluZ0NvbnRlbnRJc0FsbG93ZWQobV90cmVl
LnBhcnNlckNvbnRlbnRQb2xpY3koKSkpCiAgICAgICAgICAgICAgICAgbV9zY3JpcHRUb1Byb2Nl
c3MgPSBtX3RyZWUuY3VycmVudEVsZW1lbnQoKTsKICAgICAgICAgICAgIG1fdHJlZS5vcGVuRWxl
bWVudHMoKS0+cG9wKCk7CkBAIC0yOTYxLDExICsyOTE2LDExIEBAIHZvaWQgSFRNTFRyZWVCdWls
ZGVyOjpwcm9jZXNzVG9rZW5JbkZvcmVpZ25Db250ZW50KEF0b21pY0hUTUxUb2tlbiogdG9rZW4p
CiAgICAgICAgIH0KICAgICAgICAgaWYgKCFtX3RyZWUuY3VycmVudFN0YWNrSXRlbSgpLT5pc0lu
SFRNTE5hbWVzcGFjZSgpKSB7CiAgICAgICAgICAgICAvLyBGSVhNRTogVGhpcyBjb2RlIGp1c3Qg
d2FudHMgYW4gRWxlbWVudCogaXRlcmF0b3IsIGluc3RlYWQgb2YgYW4gRWxlbWVudFJlY29yZCoK
LSAgICAgICAgICAgIEhUTUxFbGVtZW50U3RhY2s6OkVsZW1lbnRSZWNvcmQqIG5vZGVSZWNvcmQg
PSBtX3RyZWUub3BlbkVsZW1lbnRzKCktPnRvcFJlY29yZCgpOwotICAgICAgICAgICAgaWYgKCFu
b2RlUmVjb3JkLT5zdGFja0l0ZW0oKS0+aGFzTG9jYWxOYW1lKHRva2VuLT5uYW1lKCkpKQorICAg
ICAgICAgICAgYXV0byogbm9kZVJlY29yZCA9IG1fdHJlZS5vcGVuRWxlbWVudHMoKS0+dG9wUmVj
b3JkKCk7CisgICAgICAgICAgICBpZiAoIW5vZGVSZWNvcmQtPnN0YWNrSXRlbSgpLT5oYXNMb2Nh
bE5hbWUodG9rZW4ubmFtZSgpKSkKICAgICAgICAgICAgICAgICBwYXJzZUVycm9yKHRva2VuKTsK
ICAgICAgICAgICAgIHdoaWxlICgxKSB7Ci0gICAgICAgICAgICAgICAgaWYgKG5vZGVSZWNvcmQt
PnN0YWNrSXRlbSgpLT5oYXNMb2NhbE5hbWUodG9rZW4tPm5hbWUoKSkpIHsKKyAgICAgICAgICAg
ICAgICBpZiAobm9kZVJlY29yZC0+c3RhY2tJdGVtKCktPmhhc0xvY2FsTmFtZSh0b2tlbi5uYW1l
KCkpKSB7CiAgICAgICAgICAgICAgICAgICAgIG1fdHJlZS5vcGVuRWxlbWVudHMoKS0+cG9wVW50
aWxQb3BwZWQobm9kZVJlY29yZC0+ZWxlbWVudCgpKTsKICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuOwogICAgICAgICAgICAgICAgIH0KQEAgLTI5ODAsMTAgKzI5MzUsMTAgQEAgdm9pZCBIVE1M
VHJlZUJ1aWxkZXI6OnByb2Nlc3NUb2tlbkluRm9yZWlnbkNvbnRlbnQoQXRvbWljSFRNTFRva2Vu
KiB0b2tlbikKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIGNhc2UgSFRNTFRva2VuOjpDb21t
ZW50OgotICAgICAgICBtX3RyZWUuaW5zZXJ0Q29tbWVudCh0b2tlbik7CisgICAgICAgIG1fdHJl
ZS5pbnNlcnRDb21tZW50KCZ0b2tlbik7CiAgICAgICAgIHJldHVybjsKICAgICBjYXNlIEhUTUxU
b2tlbjo6Q2hhcmFjdGVyOiB7Ci0gICAgICAgIFN0cmluZyBjaGFyYWN0ZXJzID0gU3RyaW5nKHRv
a2VuLT5jaGFyYWN0ZXJzKCksIHRva2VuLT5jaGFyYWN0ZXJzTGVuZ3RoKCkpOworICAgICAgICBT
dHJpbmcgY2hhcmFjdGVycyA9IFN0cmluZyh0b2tlbi5jaGFyYWN0ZXJzKCksIHRva2VuLmNoYXJh
Y3RlcnNMZW5ndGgoKSk7CiAgICAgICAgIG1fdHJlZS5pbnNlcnRUZXh0Tm9kZShjaGFyYWN0ZXJz
KTsKICAgICAgICAgaWYgKG1fZnJhbWVzZXRPayAmJiAhaXNBbGxXaGl0ZXNwYWNlT3JSZXBsYWNl
bWVudENoYXJhY3RlcnMoY2hhcmFjdGVycykpCiAgICAgICAgICAgICBtX2ZyYW1lc2V0T2sgPSBm
YWxzZTsKQEAgLTI5OTcsNiArMjk1Miw4IEBAIHZvaWQgSFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNz
VG9rZW5JbkZvcmVpZ25Db250ZW50KEF0b21pY0hUTUxUb2tlbiogdG9rZW4pCiAKIHZvaWQgSFRN
TFRyZWVCdWlsZGVyOjpmaW5pc2hlZCgpCiB7CisgICAgQVNTRVJUKCFtX2Rlc3Ryb3llZCk7CisK
ICAgICBpZiAoaXNQYXJzaW5nRnJhZ21lbnQoKSkKICAgICAgICAgcmV0dXJuOwogCkBAIC0zMDA0
LDEyICsyOTYxLDExIEBAIHZvaWQgSFRNTFRyZWVCdWlsZGVyOjpmaW5pc2hlZCgpCiAgICAgQVNT
RVJUKG1fdGVtcGxhdGVJbnNlcnRpb25Nb2Rlcy5pc0VtcHR5KCkpOwogI2VuZGlmCiAKLSAgICBB
U1NFUlQobV9pc0F0dGFjaGVkKTsKLSAgICAvLyBXYXJuaW5nLCB0aGlzIG1heSBkZXRhY2ggdGhl
IHBhcnNlci4gRG8gbm90IGRvIGFueXRoaW5nIGVsc2UgYWZ0ZXIgdGhpcy4KICAgICBtX3RyZWUu
ZmluaXNoZWRQYXJzaW5nKCk7CisgICAgLy8gVGhlIHRyZWUgYnVpbGRlciBtaWdodCBoYXZlIGJl
ZW4gZGVzdHJveWVkIGFzIGFuIGluZGlyZWN0IHJlc3VsdCBvZiBmaW5pc2hpbmcgdGhlIHBhcnNp
bmcuCiB9CiAKLXZvaWQgSFRNTFRyZWVCdWlsZGVyOjpwYXJzZUVycm9yKEF0b21pY0hUTUxUb2tl
biopCitpbmxpbmUgdm9pZCBIVE1MVHJlZUJ1aWxkZXI6OnBhcnNlRXJyb3IoQXRvbWljSFRNTFRv
a2VuJikKIHsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRN
TFRyZWVCdWlsZGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MVHJlZUJ1aWxk
ZXIuaAppbmRleCBhZDlmYTg5NzA2OTFmMGI5Y2VkZjg0MTc3YjFiOTRhYTBiMTRhN2MyLi42MjRk
ZmE5MzYyZmE2ZDFjMzQyN2U0MzI2NDBkYWUwYzBkMzE1YWQzIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9odG1sL3BhcnNlci9IVE1MVHJlZUJ1aWxkZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9odG1sL3BhcnNlci9IVE1MVHJlZUJ1aWxkZXIuaApAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiBD
b3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlLCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDExLCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjcsNjQgKzI3LDM3IEBACiAjaWZuZGVm
IEhUTUxUcmVlQnVpbGRlcl9oCiAjZGVmaW5lIEhUTUxUcmVlQnVpbGRlcl9oCiAKLSNpbmNsdWRl
ICJGcmFnbWVudFNjcmlwdGluZ1Blcm1pc3Npb24uaCIKICNpbmNsdWRlICJIVE1MQ29uc3RydWN0
aW9uU2l0ZS5oIgotI2luY2x1ZGUgIkhUTUxFbGVtZW50U3RhY2suaCIKLSNpbmNsdWRlICJIVE1M
Rm9ybWF0dGluZ0VsZW1lbnRMaXN0LmgiCiAjaW5jbHVkZSAiSFRNTFBhcnNlck9wdGlvbnMuaCIK
LSNpbmNsdWRlICJIVE1MU3RhY2tJdGVtLmgiCi0jaW5jbHVkZSAiSFRNTFRva2VuaXplci5oIgot
I2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgotI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+
Ci0jaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KLSNpbmNs
dWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvVGV4dFBv
c2l0aW9uLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgQXRvbWljSFRNTFRva2Vu
OwotY2xhc3MgRG9jdW1lbnQ7Ci1jbGFzcyBEb2N1bWVudEZyYWdtZW50OwotY2xhc3MgRWxlbWVu
dDsKLWNsYXNzIEZyYW1lOwotY2xhc3MgSFRNTFRva2VuOwotY2xhc3MgSFRNTERvY3VtZW50Owot
Y2xhc3MgTm9kZTsKIGNsYXNzIEhUTUxEb2N1bWVudFBhcnNlcjsKIAogY2xhc3MgSFRNTFRyZWVC
dWlsZGVyIHsKLSAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShIVE1MVHJlZUJ1aWxkZXIpOyBXVEZf
TUFLRV9GQVNUX0FMTE9DQVRFRDsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1Ymxp
YzoKLSAgICBIVE1MVHJlZUJ1aWxkZXIoSFRNTERvY3VtZW50UGFyc2VyJiwgSFRNTERvY3VtZW50
JiwgUGFyc2VyQ29udGVudFBvbGljeSwgY29uc3QgSFRNTFBhcnNlck9wdGlvbnMmKTsKLSAgICBI
VE1MVHJlZUJ1aWxkZXIoSFRNTERvY3VtZW50UGFyc2VyJiwgRG9jdW1lbnRGcmFnbWVudCYsIEVs
ZW1lbnQqIGNvbnRleHRFbGVtZW50LCBQYXJzZXJDb250ZW50UG9saWN5LCBjb25zdCBIVE1MUGFy
c2VyT3B0aW9ucyYpOwotICAgIH5IVE1MVHJlZUJ1aWxkZXIoKTsKKyAgICBIVE1MVHJlZUJ1aWxk
ZXIoY29uc3QgSFRNTERvY3VtZW50UGFyc2VyJiwgSFRNTERvY3VtZW50JiwgUGFyc2VyQ29udGVu
dFBvbGljeSwgY29uc3QgSFRNTFBhcnNlck9wdGlvbnMmKTsKKyAgICBIVE1MVHJlZUJ1aWxkZXIo
Y29uc3QgSFRNTERvY3VtZW50UGFyc2VyJiwgRG9jdW1lbnRGcmFnbWVudCYsIEVsZW1lbnQmIGNv
bnRleHRFbGVtZW50LCBQYXJzZXJDb250ZW50UG9saWN5LCBjb25zdCBIVE1MUGFyc2VyT3B0aW9u
cyYpOworICAgIHZvaWQgc2V0U2hvdWxkU2tpcExlYWRpbmdOZXdsaW5lKGJvb2wpOwogCi0gICAg
Y29uc3QgSFRNTEVsZW1lbnRTdGFjayogb3BlbkVsZW1lbnRzKCkgY29uc3QgeyByZXR1cm4gbV90
cmVlLm9wZW5FbGVtZW50cygpOyB9CisgICAgfkhUTUxUcmVlQnVpbGRlcigpOwogCi0gICAgYm9v
bCBpc1BhcnNpbmdGcmFnbWVudCgpIGNvbnN0IHsgcmV0dXJuICEhbV9mcmFnbWVudENvbnRleHQu
ZnJhZ21lbnQoKTsgfQotI2lmIEVOQUJMRShURU1QTEFURV9FTEVNRU5UKQotICAgIGJvb2wgaXNQ
YXJzaW5nVGVtcGxhdGVDb250ZW50cygpIGNvbnN0IHsgcmV0dXJuIG1fdHJlZS5vcGVuRWxlbWVu
dHMoKS0+aGFzVGVtcGxhdGVJbkhUTUxTY29wZSgpOyB9Ci0jZWxzZQotICAgIGJvb2wgaXNQYXJz
aW5nVGVtcGxhdGVDb250ZW50cygpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9Ci0jZW5kaWYKLSAg
ICBib29sIGlzUGFyc2luZ0ZyYWdtZW50T3JUZW1wbGF0ZUNvbnRlbnRzKCkgY29uc3QgeyByZXR1
cm4gaXNQYXJzaW5nRnJhZ21lbnQoKSB8fCBpc1BhcnNpbmdUZW1wbGF0ZUNvbnRlbnRzKCk7IH0K
KyAgICBib29sIGlzUGFyc2luZ0ZyYWdtZW50KCkgY29uc3Q7CiAKLSAgICB2b2lkIGRldGFjaCgp
OworICAgIHZvaWQgY29uc3RydWN0VHJlZShBdG9taWNIVE1MVG9rZW4mKTsKIAotICAgIHZvaWQg
Y29uc3RydWN0VHJlZShBdG9taWNIVE1MVG9rZW4qKTsKKyAgICBib29sIGhhc1BhcnNlckJsb2Nr
aW5nU2NyaXB0KCkgY29uc3Q7CiAKLSAgICBib29sIGhhc1BhcnNlckJsb2NraW5nU2NyaXB0KCkg
Y29uc3QgeyByZXR1cm4gISFtX3NjcmlwdFRvUHJvY2VzczsgfQogICAgIC8vIE11c3QgYmUgY2Fs
bGVkIHRvIHRha2UgdGhlIHBhcnNlci1ibG9ja2luZyBzY3JpcHQgYmVmb3JlIGNhbGxpbmcgdGhl
IHBhcnNlciBhZ2Fpbi4KLSAgICBQYXNzUmVmUHRyPEVsZW1lbnQ+IHRha2VTY3JpcHRUb1Byb2Nl
c3MoVGV4dFBvc2l0aW9uJiBzY3JpcHRTdGFydFBvc2l0aW9uKTsKKyAgICBSZWZQdHI8RWxlbWVu
dD4gdGFrZVNjcmlwdFRvUHJvY2VzcyhUZXh0UG9zaXRpb24mIHNjcmlwdFN0YXJ0UG9zaXRpb24p
OwogCiAgICAgLy8gRG9uZSwgY2xvc2UgYW55IG9wZW4gdGFncywgZXRjLgogICAgIHZvaWQgZmlu
aXNoZWQoKTsKIAotICAgIHZvaWQgc2V0U2hvdWxkU2tpcExlYWRpbmdOZXdsaW5lKGJvb2wgc2hv
dWxkU2tpcCkgeyBtX3Nob3VsZFNraXBMZWFkaW5nTmV3bGluZSA9IHNob3VsZFNraXA7IH0KLQog
cHJpdmF0ZToKICAgICBjbGFzcyBFeHRlcm5hbENoYXJhY3RlclRva2VuQnVmZmVyOworCiAgICAg
Ly8gUmVwcmVzZW50cyBIVE1MNSAiaW5zZXJ0aW9uIG1vZGUiCiAgICAgLy8gaHR0cDovL3d3dy53
aGF0d2cub3JnL3NwZWNzL3dlYi1hcHBzL2N1cnJlbnQtd29yay9tdWx0aXBhZ2UvcGFyc2luZy5o
dG1sI2luc2VydGlvbi1tb2RlCiAgICAgZW51bSBjbGFzcyBJbnNlcnRpb25Nb2RlIHsKQEAgLTk0
LDcgKzY3LDkgQEAgcHJpdmF0ZToKICAgICAgICAgSW5IZWFkLAogICAgICAgICBJbkhlYWROb3Nj
cmlwdCwKICAgICAgICAgQWZ0ZXJIZWFkLAorI2lmIEVOQUJMRShURU1QTEFURV9FTEVNRU5UKQog
ICAgICAgICBUZW1wbGF0ZUNvbnRlbnRzLAorI2VuZGlmCiAgICAgICAgIEluQm9keSwKICAgICAg
ICAgVGV4dCwKICAgICAgICAgSW5UYWJsZSwKQEAgLTExMyw1MiArODgsNTQgQEAgcHJpdmF0ZToK
ICAgICAgICAgQWZ0ZXJBZnRlckZyYW1lc2V0LAogICAgIH07CiAKLSNpZiBFTkFCTEUoVEVMRVBI
T05FX05VTUJFUl9ERVRFQ1RJT04pCisgICAgYm9vbCBpc1BhcnNpbmdUZW1wbGF0ZUNvbnRlbnRz
KCkgY29uc3Q7CisgICAgYm9vbCBpc1BhcnNpbmdGcmFnbWVudE9yVGVtcGxhdGVDb250ZW50cygp
IGNvbnN0OworCisjaWYgRU5BQkxFKFRFTEVQSE9ORV9OVU1CRVJfREVURUNUSU9OKSAmJiBQTEFU
Rk9STShJT1MpCiAgICAgdm9pZCBpbnNlcnRQaG9uZU51bWJlckxpbmsoY29uc3QgU3RyaW5nJik7
CiAgICAgdm9pZCBsaW5raWZ5UGhvbmVOdW1iZXJzKGNvbnN0IFN0cmluZyYpOwogI2VuZGlmCiAK
LSAgICB2b2lkIHByb2Nlc3NUb2tlbihBdG9taWNIVE1MVG9rZW4qKTsKLQotICAgIHZvaWQgcHJv
Y2Vzc0RvY3R5cGVUb2tlbihBdG9taWNIVE1MVG9rZW4qKTsKLSAgICB2b2lkIHByb2Nlc3NTdGFy
dFRhZyhBdG9taWNIVE1MVG9rZW4qKTsKLSAgICB2b2lkIHByb2Nlc3NFbmRUYWcoQXRvbWljSFRN
TFRva2VuKik7Ci0gICAgdm9pZCBwcm9jZXNzQ29tbWVudChBdG9taWNIVE1MVG9rZW4qKTsKLSAg
ICB2b2lkIHByb2Nlc3NDaGFyYWN0ZXIoQXRvbWljSFRNTFRva2VuKik7Ci0gICAgdm9pZCBwcm9j
ZXNzRW5kT2ZGaWxlKEF0b21pY0hUTUxUb2tlbiopOwotCi0gICAgYm9vbCBwcm9jZXNzU3RhcnRU
YWdGb3JJbkhlYWQoQXRvbWljSFRNTFRva2VuKik7Ci0gICAgdm9pZCBwcm9jZXNzU3RhcnRUYWdG
b3JJbkJvZHkoQXRvbWljSFRNTFRva2VuKik7Ci0gICAgdm9pZCBwcm9jZXNzU3RhcnRUYWdGb3JJ
blRhYmxlKEF0b21pY0hUTUxUb2tlbiopOwotICAgIHZvaWQgcHJvY2Vzc0VuZFRhZ0ZvckluQm9k
eShBdG9taWNIVE1MVG9rZW4qKTsKLSAgICB2b2lkIHByb2Nlc3NFbmRUYWdGb3JJblRhYmxlKEF0
b21pY0hUTUxUb2tlbiopOwotICAgIHZvaWQgcHJvY2Vzc0VuZFRhZ0ZvckluVGFibGVCb2R5KEF0
b21pY0hUTUxUb2tlbiopOwotICAgIHZvaWQgcHJvY2Vzc0VuZFRhZ0ZvckluUm93KEF0b21pY0hU
TUxUb2tlbiopOwotICAgIHZvaWQgcHJvY2Vzc0VuZFRhZ0ZvckluQ2VsbChBdG9taWNIVE1MVG9r
ZW4qKTsKLQotICAgIHZvaWQgcHJvY2Vzc0lzaW5kZXhTdGFydFRhZ0ZvckluQm9keShBdG9taWNI
VE1MVG9rZW4qKTsKLSAgICB2b2lkIHByb2Nlc3NIdG1sU3RhcnRUYWdGb3JJbkJvZHkoQXRvbWlj
SFRNTFRva2VuKik7Ci0gICAgYm9vbCBwcm9jZXNzQm9keUVuZFRhZ0ZvckluQm9keShBdG9taWNI
VE1MVG9rZW4qKTsKKyAgICB2b2lkIHByb2Nlc3NUb2tlbihBdG9taWNIVE1MVG9rZW4mKTsKKwor
ICAgIHZvaWQgcHJvY2Vzc0RvY3R5cGVUb2tlbihBdG9taWNIVE1MVG9rZW4mKTsKKyAgICB2b2lk
IHByb2Nlc3NTdGFydFRhZyhBdG9taWNIVE1MVG9rZW4mKTsKKyAgICB2b2lkIHByb2Nlc3NFbmRU
YWcoQXRvbWljSFRNTFRva2VuJik7CisgICAgdm9pZCBwcm9jZXNzQ29tbWVudChBdG9taWNIVE1M
VG9rZW4mKTsKKyAgICB2b2lkIHByb2Nlc3NDaGFyYWN0ZXIoQXRvbWljSFRNTFRva2VuJik7Cisg
ICAgdm9pZCBwcm9jZXNzRW5kT2ZGaWxlKEF0b21pY0hUTUxUb2tlbiYpOworCisgICAgYm9vbCBw
cm9jZXNzU3RhcnRUYWdGb3JJbkhlYWQoQXRvbWljSFRNTFRva2VuJik7CisgICAgdm9pZCBwcm9j
ZXNzU3RhcnRUYWdGb3JJbkJvZHkoQXRvbWljSFRNTFRva2VuJik7CisgICAgdm9pZCBwcm9jZXNz
U3RhcnRUYWdGb3JJblRhYmxlKEF0b21pY0hUTUxUb2tlbiYpOworICAgIHZvaWQgcHJvY2Vzc0Vu
ZFRhZ0ZvckluQm9keShBdG9taWNIVE1MVG9rZW4mKTsKKyAgICB2b2lkIHByb2Nlc3NFbmRUYWdG
b3JJblRhYmxlKEF0b21pY0hUTUxUb2tlbiYpOworICAgIHZvaWQgcHJvY2Vzc0VuZFRhZ0Zvcklu
VGFibGVCb2R5KEF0b21pY0hUTUxUb2tlbiYpOworICAgIHZvaWQgcHJvY2Vzc0VuZFRhZ0Zvcklu
Um93KEF0b21pY0hUTUxUb2tlbiYpOworICAgIHZvaWQgcHJvY2Vzc0VuZFRhZ0ZvckluQ2VsbChB
dG9taWNIVE1MVG9rZW4mKTsKKworICAgIHZvaWQgcHJvY2Vzc0lzaW5kZXhTdGFydFRhZ0Zvcklu
Qm9keShBdG9taWNIVE1MVG9rZW4mKTsKKyAgICB2b2lkIHByb2Nlc3NIdG1sU3RhcnRUYWdGb3JJ
bkJvZHkoQXRvbWljSFRNTFRva2VuJik7CisgICAgYm9vbCBwcm9jZXNzQm9keUVuZFRhZ0Zvcklu
Qm9keShBdG9taWNIVE1MVG9rZW4mKTsKICAgICBib29sIHByb2Nlc3NUYWJsZUVuZFRhZ0Zvcklu
VGFibGUoKTsKICAgICBib29sIHByb2Nlc3NDYXB0aW9uRW5kVGFnRm9ySW5DYXB0aW9uKCk7CiAg
ICAgYm9vbCBwcm9jZXNzQ29sZ3JvdXBFbmRUYWdGb3JJbkNvbHVtbkdyb3VwKCk7CiAgICAgYm9v
bCBwcm9jZXNzVHJFbmRUYWdGb3JJblJvdygpOwotICAgIC8vIEZJWE1FOiBUaGlzIGZ1bmN0aW9u
IHNob3VsZCBiZSBpbmxpbmVkIGludG8gaXRzIG9uZSBjYWxsIHNpdGUgb3IgaXQKLSAgICAvLyBu
ZWVkcyB0byBhc3NlcnQgd2hpY2ggdG9rZW5zIGl0IGNhbiBiZSBjYWxsZWQgd2l0aC4KLSAgICB2
b2lkIHByb2Nlc3NBbnlPdGhlckVuZFRhZ0ZvckluQm9keShBdG9taWNIVE1MVG9rZW4qKTsKKwor
ICAgIHZvaWQgcHJvY2Vzc0FueU90aGVyRW5kVGFnRm9ySW5Cb2R5KEF0b21pY0hUTUxUb2tlbiYp
OwogCiAgICAgdm9pZCBwcm9jZXNzQ2hhcmFjdGVyQnVmZmVyKEV4dGVybmFsQ2hhcmFjdGVyVG9r
ZW5CdWZmZXImKTsKICAgICBpbmxpbmUgdm9pZCBwcm9jZXNzQ2hhcmFjdGVyQnVmZmVyRm9ySW5C
b2R5KEV4dGVybmFsQ2hhcmFjdGVyVG9rZW5CdWZmZXImKTsKIAotICAgIHZvaWQgcHJvY2Vzc0Zh
a2VTdGFydFRhZyhjb25zdCBRdWFsaWZpZWROYW1lJiwgY29uc3QgVmVjdG9yPEF0dHJpYnV0ZT4m
IGF0dHJpYnV0ZXMgPSBWZWN0b3I8QXR0cmlidXRlPigpKTsKKyAgICB2b2lkIHByb2Nlc3NGYWtl
U3RhcnRUYWcoY29uc3QgUXVhbGlmaWVkTmFtZSYsIFZlY3RvcjxBdHRyaWJ1dGU+JiYgYXR0cmli
dXRlcyA9IFZlY3RvcjxBdHRyaWJ1dGU+KCkpOwogICAgIHZvaWQgcHJvY2Vzc0Zha2VFbmRUYWco
Y29uc3QgUXVhbGlmaWVkTmFtZSYpOwogICAgIHZvaWQgcHJvY2Vzc0Zha2VFbmRUYWcoY29uc3Qg
QXRvbWljU3RyaW5nJik7CiAgICAgdm9pZCBwcm9jZXNzRmFrZUNoYXJhY3RlcnMoY29uc3QgU3Ry
aW5nJik7CiAgICAgdm9pZCBwcm9jZXNzRmFrZVBFbmRUYWdJZlBJbkJ1dHRvblNjb3BlKCk7CiAK
LSAgICB2b2lkIHByb2Nlc3NHZW5lcmljUkNEQVRBU3RhcnRUYWcoQXRvbWljSFRNTFRva2VuKik7
Ci0gICAgdm9pZCBwcm9jZXNzR2VuZXJpY1Jhd1RleHRTdGFydFRhZyhBdG9taWNIVE1MVG9rZW4q
KTsKLSAgICB2b2lkIHByb2Nlc3NTY3JpcHRTdGFydFRhZyhBdG9taWNIVE1MVG9rZW4qKTsKKyAg
ICB2b2lkIHByb2Nlc3NHZW5lcmljUkNEQVRBU3RhcnRUYWcoQXRvbWljSFRNTFRva2VuJik7Cisg
ICAgdm9pZCBwcm9jZXNzR2VuZXJpY1Jhd1RleHRTdGFydFRhZyhBdG9taWNIVE1MVG9rZW4mKTsK
KyAgICB2b2lkIHByb2Nlc3NTY3JpcHRTdGFydFRhZyhBdG9taWNIVE1MVG9rZW4mKTsKIAogICAg
IC8vIERlZmF1bHQgcHJvY2Vzc2luZyBmb3IgdGhlIGRpZmZlcmVudCBpbnNlcnRpb24gbW9kZXMu
CiAgICAgdm9pZCBkZWZhdWx0Rm9ySW5pdGlhbCgpOwpAQCAtMTY5LDgxICsxNDYsMTA0IEBAIHBy
aXZhdGU6CiAgICAgdm9pZCBkZWZhdWx0Rm9yQWZ0ZXJIZWFkKCk7CiAgICAgdm9pZCBkZWZhdWx0
Rm9ySW5UYWJsZVRleHQoKTsKIAotICAgIGlubGluZSBib29sIHNob3VsZFByb2Nlc3NUb2tlbklu
Rm9yZWlnbkNvbnRlbnQoQXRvbWljSFRNTFRva2VuKik7Ci0gICAgdm9pZCBwcm9jZXNzVG9rZW5J
bkZvcmVpZ25Db250ZW50KEF0b21pY0hUTUxUb2tlbiopOworICAgIGJvb2wgc2hvdWxkUHJvY2Vz
c1Rva2VuSW5Gb3JlaWduQ29udGVudChBdG9taWNIVE1MVG9rZW4mKTsKKyAgICB2b2lkIHByb2Nl
c3NUb2tlbkluRm9yZWlnbkNvbnRlbnQoQXRvbWljSFRNTFRva2VuJik7CiAgICAgCi0gICAgaW5s
aW5lIEhUTUxTdGFja0l0ZW0qIGFkanVzdGVkQ3VycmVudFN0YWNrSXRlbSgpIGNvbnN0OworICAg
IEhUTUxTdGFja0l0ZW0mIGFkanVzdGVkQ3VycmVudFN0YWNrSXRlbSgpIGNvbnN0OwogCi0gICAg
VmVjdG9yPEF0dHJpYnV0ZT4gYXR0cmlidXRlc0ZvcklzaW5kZXhJbnB1dChBdG9taWNIVE1MVG9r
ZW4qKTsKKyAgICBWZWN0b3I8QXR0cmlidXRlPiBhdHRyaWJ1dGVzRm9ySXNpbmRleElucHV0KEF0
b21pY0hUTUxUb2tlbiYpOwogCi0gICAgdm9pZCBjYWxsVGhlQWRvcHRpb25BZ2VuY3koQXRvbWlj
SFRNTFRva2VuKik7CisgICAgdm9pZCBjYWxsVGhlQWRvcHRpb25BZ2VuY3koQXRvbWljSFRNTFRv
a2VuJik7CiAKICAgICB2b2lkIGNsb3NlVGhlQ2VsbCgpOwogCi0gICAgdGVtcGxhdGUgPGJvb2wg
c2hvdWxkQ2xvc2UoY29uc3QgSFRNTFN0YWNrSXRlbSopPgotICAgIHZvaWQgcHJvY2Vzc0Nsb3Nl
V2hlbk5lc3RlZFRhZyhBdG9taWNIVE1MVG9rZW4qKTsKKyAgICB0ZW1wbGF0ZSA8Ym9vbCBzaG91
bGRDbG9zZShjb25zdCBIVE1MU3RhY2tJdGVtJik+IHZvaWQgcHJvY2Vzc0Nsb3NlV2hlbk5lc3Rl
ZFRhZyhBdG9taWNIVE1MVG9rZW4mKTsKIAotICAgIHZvaWQgcGFyc2VFcnJvcihBdG9taWNIVE1M
VG9rZW4qKTsKLQotICAgIEluc2VydGlvbk1vZGUgaW5zZXJ0aW9uTW9kZSgpIGNvbnN0IHsgcmV0
dXJuIG1faW5zZXJ0aW9uTW9kZTsgfQotICAgIHZvaWQgc2V0SW5zZXJ0aW9uTW9kZShJbnNlcnRp
b25Nb2RlIG1vZGUpIHsgbV9pbnNlcnRpb25Nb2RlID0gbW9kZTsgfQorICAgIHZvaWQgcGFyc2VF
cnJvcihBdG9taWNIVE1MVG9rZW4mKTsKIAogICAgIHZvaWQgcmVzZXRJbnNlcnRpb25Nb2RlQXBw
cm9wcmlhdGVseSgpOwogCiAjaWYgRU5BQkxFKFRFTVBMQVRFX0VMRU1FTlQpCi0gICAgdm9pZCBw
cm9jZXNzVGVtcGxhdGVTdGFydFRhZyhBdG9taWNIVE1MVG9rZW4qKTsKLSAgICBib29sIHByb2Nl
c3NUZW1wbGF0ZUVuZFRhZyhBdG9taWNIVE1MVG9rZW4qKTsKLSAgICBib29sIHByb2Nlc3NFbmRP
ZkZpbGVGb3JJblRlbXBsYXRlQ29udGVudHMoQXRvbWljSFRNTFRva2VuKik7CisgICAgdm9pZCBw
cm9jZXNzVGVtcGxhdGVTdGFydFRhZyhBdG9taWNIVE1MVG9rZW4mKTsKKyAgICBib29sIHByb2Nl
c3NUZW1wbGF0ZUVuZFRhZyhBdG9taWNIVE1MVG9rZW4mKTsKKyAgICBib29sIHByb2Nlc3NFbmRP
ZkZpbGVGb3JJblRlbXBsYXRlQ29udGVudHMoQXRvbWljSFRNTFRva2VuJik7CiAjZW5kaWYKIAog
ICAgIGNsYXNzIEZyYWdtZW50UGFyc2luZ0NvbnRleHQgewotICAgICAgICBXVEZfTUFLRV9OT05D
T1BZQUJMRShGcmFnbWVudFBhcnNpbmdDb250ZXh0KTsKICAgICBwdWJsaWM6CiAgICAgICAgIEZy
YWdtZW50UGFyc2luZ0NvbnRleHQoKTsKLSAgICAgICAgRnJhZ21lbnRQYXJzaW5nQ29udGV4dChE
b2N1bWVudEZyYWdtZW50JiwgRWxlbWVudCogY29udGV4dEVsZW1lbnQpOwotICAgICAgICB+RnJh
Z21lbnRQYXJzaW5nQ29udGV4dCgpOworICAgICAgICBGcmFnbWVudFBhcnNpbmdDb250ZXh0KERv
Y3VtZW50RnJhZ21lbnQmLCBFbGVtZW50JiBjb250ZXh0RWxlbWVudCk7CiAKLSAgICAgICAgRG9j
dW1lbnRGcmFnbWVudCogZnJhZ21lbnQoKSBjb25zdCB7IHJldHVybiBtX2ZyYWdtZW50OyB9Ci0g
ICAgICAgIEVsZW1lbnQqIGNvbnRleHRFbGVtZW50KCkgY29uc3QgeyBBU1NFUlQobV9mcmFnbWVu
dCk7IHJldHVybiBtX2NvbnRleHRFbGVtZW50U3RhY2tJdGVtLT5lbGVtZW50KCk7IH0KLSAgICAg
ICAgSFRNTFN0YWNrSXRlbSogY29udGV4dEVsZW1lbnRTdGFja0l0ZW0oKSBjb25zdCB7IEFTU0VS
VChtX2ZyYWdtZW50KTsgcmV0dXJuIG1fY29udGV4dEVsZW1lbnRTdGFja0l0ZW0uZ2V0KCk7IH0K
KyAgICAgICAgRG9jdW1lbnRGcmFnbWVudCogZnJhZ21lbnQoKSBjb25zdDsKKyAgICAgICAgRWxl
bWVudCYgY29udGV4dEVsZW1lbnQoKSBjb25zdDsKKyAgICAgICAgSFRNTFN0YWNrSXRlbSYgY29u
dGV4dEVsZW1lbnRTdGFja0l0ZW0oKSBjb25zdDsKIAogICAgIHByaXZhdGU6Ci0gICAgICAgIERv
Y3VtZW50RnJhZ21lbnQqIG1fZnJhZ21lbnQ7CisgICAgICAgIERvY3VtZW50RnJhZ21lbnQqIG1f
ZnJhZ21lbnQgeyBudWxscHRyIH07CiAgICAgICAgIFJlZlB0cjxIVE1MU3RhY2tJdGVtPiBtX2Nv
bnRleHRFbGVtZW50U3RhY2tJdGVtOwogICAgIH07CiAKLSAgICBib29sIG1fZnJhbWVzZXRPazsK
LSNpZm5kZWYgTkRFQlVHCi0gICAgYm9vbCBtX2lzQXR0YWNoZWQ7Ci0jZW5kaWYKLSAgICBGcmFn
bWVudFBhcnNpbmdDb250ZXh0IG1fZnJhZ21lbnRDb250ZXh0OwotICAgIEhUTUxDb25zdHJ1Y3Rp
b25TaXRlIG1fdHJlZTsKLQotICAgIC8vIGh0dHA6Ly93d3cud2hhdHdnLm9yZy9zcGVjcy93ZWIt
YXBwcy9jdXJyZW50LXdvcmsvbXVsdGlwYWdlL3BhcnNpbmcuaHRtbCNpbnNlcnRpb24tbW9kZQot
ICAgIEluc2VydGlvbk1vZGUgbV9pbnNlcnRpb25Nb2RlOworICAgIGNvbnN0IEhUTUxEb2N1bWVu
dFBhcnNlciYgbV9wYXJzZXI7CisgICAgY29uc3QgSFRNTFBhcnNlck9wdGlvbnMgbV9vcHRpb25z
OworICAgIGNvbnN0IEZyYWdtZW50UGFyc2luZ0NvbnRleHQgbV9mcmFnbWVudENvbnRleHQ7CiAK
LSAgICAvLyBodHRwOi8vd3d3LndoYXR3Zy5vcmcvc3BlY3Mvd2ViLWFwcHMvY3VycmVudC13b3Jr
L211bHRpcGFnZS9wYXJzaW5nLmh0bWwjb3JpZ2luYWwtaW5zZXJ0aW9uLW1vZGUKLSAgICBJbnNl
cnRpb25Nb2RlIG1fb3JpZ2luYWxJbnNlcnRpb25Nb2RlOworICAgIEhUTUxDb25zdHJ1Y3Rpb25T
aXRlIG1fdHJlZTsKIAorICAgIC8vIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlw
YWdlL3N5bnRheC5odG1sI3RoZS1pbnNlcnRpb24tbW9kZQorICAgIEluc2VydGlvbk1vZGUgbV9p
bnNlcnRpb25Nb2RlIHsgSW5zZXJ0aW9uTW9kZTo6SW5pdGlhbCB9OworICAgIEluc2VydGlvbk1v
ZGUgbV9vcmlnaW5hbEluc2VydGlvbk1vZGUgeyBJbnNlcnRpb25Nb2RlOjpJbml0aWFsIH07CiAj
aWYgRU5BQkxFKFRFTVBMQVRFX0VMRU1FTlQpCi0gICAgVmVjdG9yPEluc2VydGlvbk1vZGU+IG1f
dGVtcGxhdGVJbnNlcnRpb25Nb2RlczsKKyAgICBWZWN0b3I8SW5zZXJ0aW9uTW9kZSwgMT4gbV90
ZW1wbGF0ZUluc2VydGlvbk1vZGVzOwogI2VuZGlmCiAKLSAgICAvLyBodHRwOi8vd3d3LndoYXR3
Zy5vcmcvc3BlY3Mvd2ViLWFwcHMvY3VycmVudC13b3JrL211bHRpcGFnZS90b2tlbml6YXRpb24u
aHRtbCNwZW5kaW5nLXRhYmxlLWNoYXJhY3Rlci10b2tlbnMKKyAgICAvLyBodHRwczovL2h0bWwu
c3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9zeW50YXguaHRtbCNjb25jZXB0LXBlbmRpbmctdGFi
bGUtY2hhci10b2tlbnMKICAgICBTdHJpbmdCdWlsZGVyIG1fcGVuZGluZ1RhYmxlQ2hhcmFjdGVy
czsKIAotICAgIGJvb2wgbV9zaG91bGRTa2lwTGVhZGluZ05ld2xpbmU7Ci0KLSAgICAvLyBXZSBh
Y2Nlc3MgcGFyc2VyIGJlY2F1c2UgSFRNTDUgc3BlYyByZXF1aXJlcyB0aGF0IHdlIGJlIGFibGUg
dG8gY2hhbmdlIHRoZSBzdGF0ZSBvZiB0aGUgdG9rZW5pemVyCi0gICAgLy8gZnJvbSB3aXRoaW4g
cGFyc2VyIGFjdGlvbnMuIFdlIGFsc28gbmVlZCBpdCB0byB0cmFjayB0aGUgY3VycmVudCBwb3Np
dGlvbi4KLSAgICBIVE1MRG9jdW1lbnRQYXJzZXImIG1fcGFyc2VyOwotCiAgICAgUmVmUHRyPEVs
ZW1lbnQ+IG1fc2NyaXB0VG9Qcm9jZXNzOyAvLyA8c2NyaXB0PiB0YWcgd2hpY2ggbmVlZHMgcHJv
Y2Vzc2luZyBiZWZvcmUgcmVzdW1pbmcgdGhlIHBhcnNlci4KICAgICBUZXh0UG9zaXRpb24gbV9z
Y3JpcHRUb1Byb2Nlc3NTdGFydFBvc2l0aW9uOyAvLyBTdGFydGluZyBsaW5lIG51bWJlciBvZiB0
aGUgc2NyaXB0IHRhZyBuZWVkaW5nIHByb2Nlc3NpbmcuCiAKLSAgICBIVE1MUGFyc2VyT3B0aW9u
cyBtX29wdGlvbnM7CisgICAgYm9vbCBtX3Nob3VsZFNraXBMZWFkaW5nTmV3bGluZSB7IGZhbHNl
IH07CisKKyAgICBib29sIG1fZnJhbWVzZXRPayB7IHRydWUgfTsKKworI2lmICFBU1NFUlRfRElT
QUJMRUQKKyAgICBib29sIG1fZGVzdHJveWVkIHsgZmFsc2UgfTsKKyAgICBib29sIG1fZGVzdHJ1
Y3Rpb25Qcm9oaWJpdGVkIHsgdHJ1ZSB9OworI2VuZGlmCiB9OwogCitpbmxpbmUgSFRNTFRyZWVC
dWlsZGVyOjp+SFRNTFRyZWVCdWlsZGVyKCkKK3sKKyNpZiAhQVNTRVJUX0RJU0FCTEVECisgICAg
QVNTRVJUKCFtX2Rlc3Ryb3llZCk7CisgICAgQVNTRVJUKCFtX2Rlc3RydWN0aW9uUHJvaGliaXRl
ZCk7CisgICAgbV9kZXN0cm95ZWQgPSB0cnVlOworI2VuZGlmCit9CisKK2lubGluZSB2b2lkIEhU
TUxUcmVlQnVpbGRlcjo6c2V0U2hvdWxkU2tpcExlYWRpbmdOZXdsaW5lKGJvb2wgc2hvdWxkU2tp
cCkKK3sKKyAgICBBU1NFUlQoIW1fZGVzdHJveWVkKTsKKyAgICBtX3Nob3VsZFNraXBMZWFkaW5n
TmV3bGluZSA9IHNob3VsZFNraXA7Cit9CisKK2lubGluZSBib29sIEhUTUxUcmVlQnVpbGRlcjo6
aXNQYXJzaW5nRnJhZ21lbnQoKSBjb25zdAoreworICAgIEFTU0VSVCghbV9kZXN0cm95ZWQpOwor
ICAgIHJldHVybiAhIW1fZnJhZ21lbnRDb250ZXh0LmZyYWdtZW50KCk7Cit9CisKK2lubGluZSBi
b29sIEhUTUxUcmVlQnVpbGRlcjo6aGFzUGFyc2VyQmxvY2tpbmdTY3JpcHQoKSBjb25zdAorewor
ICAgIEFTU0VSVCghbV9kZXN0cm95ZWQpOworICAgIHJldHVybiAhIW1fc2NyaXB0VG9Qcm9jZXNz
OworfQorCitpbmxpbmUgRG9jdW1lbnRGcmFnbWVudCogSFRNTFRyZWVCdWlsZGVyOjpGcmFnbWVu
dFBhcnNpbmdDb250ZXh0OjpmcmFnbWVudCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fZnJhZ21l
bnQ7Cit9CisKIH0KIAogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3Bh
cnNlci9UZXh0RG9jdW1lbnRQYXJzZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIv
VGV4dERvY3VtZW50UGFyc2VyLmNwcAppbmRleCBiMjczNmYzMjdlODE0ZDY1MTlmMzQyMThiM2E0
MDliMGExODQwZDVlLi5mNmE1Njc2MGMzODMzODkyNWJlMWYzNzNhNWNhNmQzMzU0NzA2NjYyIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9UZXh0RG9jdW1lbnRQYXJzZXIu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL1RleHREb2N1bWVudFBhcnNlci5j
cHAKQEAgLTU5LDcgKzU5LDcgQEAgdm9pZCBUZXh0RG9jdW1lbnRQYXJzZXI6Omluc2VydEZha2VQ
cmVFbGVtZW50KCkKICAgICBWZWN0b3I8QXR0cmlidXRlPiBhdHRyaWJ1dGVzOwogICAgIGF0dHJp
YnV0ZXMuYXBwZW5kKEF0dHJpYnV0ZShzdHlsZUF0dHIsICJ3b3JkLXdyYXA6IGJyZWFrLXdvcmQ7
IHdoaXRlLXNwYWNlOiBwcmUtd3JhcDsiKSk7CiAgICAgQXRvbWljSFRNTFRva2VuIGZha2VQcmUo
SFRNTFRva2VuOjpTdGFydFRhZywgcHJlVGFnLmxvY2FsTmFtZSgpLCBhdHRyaWJ1dGVzKTsKLSAg
ICB0cmVlQnVpbGRlcigpLT5jb25zdHJ1Y3RUcmVlKCZmYWtlUHJlKTsKKyAgICB0cmVlQnVpbGRl
cigpLT5jb25zdHJ1Y3RUcmVlKGZha2VQcmUpOwogCiAgICAgLy8gTm9ybWFsbHkgd2Ugd291bGQg
c2tpcCB0aGUgZmlyc3QgXG4gYWZ0ZXIgYSA8cHJlPiBlbGVtZW50LCBidXQgd2UgZG9uJ3QKICAg
ICAvLyB3YW50IHRvIHNraXAgdGhlIGZpcnN0IFxuIGZvciB0ZXh0IGRvY3VtZW50cyEK
</data>
<flag name="review"
          id="268804"
          type_id="1"
          status="+"
          setter="kling"
    />
          </attachment>
      

    </bug>

</bugzilla>