<?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>185110</bug_id>
          
          <creation_ts>2018-04-27 23:10:40 -0700</creation_ts>
          <short_desc>Apply PtrTags to the MetaAllocator and friends.</short_desc>
          <delta_ts>2018-04-30 15:30:03 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>WebKit 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>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Mark Lam">mark.lam</reporter>
          <assigned_to name="Mark Lam">mark.lam</assigned_to>
          <cc>fpizlo</cc>
    
    <cc>jfbastien</cc>
    
    <cc>keith_miller</cc>
    
    <cc>msaboff</cc>
    
    <cc>rmorisset</cc>
    
    <cc>saam</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1418772</commentid>
    <comment_count>0</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2018-04-27 23:10:40 -0700</bug_when>
    <thetext>&lt;rdar://problem/39533895&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1418775</commentid>
    <comment_count>1</comment_count>
      <attachid>339061</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2018-04-28 00:00:55 -0700</bug_when>
    <thetext>Created attachment 339061
proposed patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1419055</commentid>
    <comment_count>2</comment_count>
      <attachid>339061</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2018-04-30 11:23:55 -0700</bug_when>
    <thetext>Comment on attachment 339061
proposed patch.

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

r=me

&gt; Source/JavaScriptCore/jit/ExecutableAllocator.cpp:306
&gt; +#else // !(CPU(ARM64) &amp;&amp; USE(EXECUTE_ONLY_JIT_WRITE_FUNCTION))

Why this change? I thought we typically annotate w/ the identical condition, not its opposite?

&gt; Source/JavaScriptCore/jit/ExecutableAllocator.cpp:445
&gt; +    RELEASE_ASSERT(start &lt; resultEnd &amp;&amp; resultEnd &lt;= end);

I guess it&apos;s ok to we assume we always generate &gt; 0 bytes of code?

&gt; Source/WTF/wtf/MetaAllocator.cpp:342
&gt; +            ASSERT(leftNode-&gt;m_start + (leftNode-&gt;sizeInBytes() + sizeInBytes + rightSize) == rightEnd);

Why parenthesis here?

&gt; Source/WTF/wtf/MetaAllocator.cpp:350
&gt; +            leftNode-&gt;m_end += (sizeInBytes + rightSize);

ditto

&gt; Source/WTF/wtf/MetaAllocator.cpp:368
&gt; +            ASSERT(start + (sizeInBytes + rightNode-&gt;sizeInBytes()) == rightNode-&gt;m_end);

ditto

&gt; Source/WTF/wtf/MetaAllocator.cpp:383
&gt; +            node-&gt;m_end = start + sizeInBytes;

And you don&apos;t use them here. I&apos;d just remove it everywhere since addition is commutative.

&gt; Source/WTF/wtf/MetaAllocator.h:141
&gt; +            return m_end.untaggedPtr&lt;size_t&gt;() - m_start.untaggedPtr&lt;size_t&gt;();

This should be untaggedPtr&lt;uintptr_t&gt; or untaggedPtr&lt;intptr_t&gt; IMO

&gt; Source/WTF/wtf/MetaAllocatorPtr.h:35
&gt; +class MetaAllocatorPtr {

This is almost identical to MacroAssemblerCodePtr. They should probably inherit from some common subclass. At least file a bug w/ a FIXME for this work.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1419141</commentid>
    <comment_count>3</comment_count>
      <attachid>339061</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2018-04-30 15:20:30 -0700</bug_when>
    <thetext>Comment on attachment 339061
proposed patch.

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

&gt;&gt; Source/JavaScriptCore/jit/ExecutableAllocator.cpp:306
&gt;&gt; +#else // !(CPU(ARM64) &amp;&amp; USE(EXECUTE_ONLY_JIT_WRITE_FUNCTION))
&gt; 
&gt; Why this change? I thought we typically annotate w/ the identical condition, not its opposite?

I&apos;ll revert this.  I still think our typical convention is confusing to annotate a block of code with the opposite of what it contains.

&gt;&gt; Source/JavaScriptCore/jit/ExecutableAllocator.cpp:445
&gt;&gt; +    RELEASE_ASSERT(start &lt; resultEnd &amp;&amp; resultEnd &lt;= end);
&gt; 
&gt; I guess it&apos;s ok to we assume we always generate &gt; 0 bytes of code?

I think it doesn&apos;t make sense to ask the allocator for 0 bytes.

&gt;&gt; Source/WTF/wtf/MetaAllocator.cpp:342
&gt;&gt; +            ASSERT(leftNode-&gt;m_start + (leftNode-&gt;sizeInBytes() + sizeInBytes + rightSize) == rightEnd);
&gt; 
&gt; Why parenthesis here?

I already talked to Saam about this offline: the reason for the parens is so explicitly communicate to the compiler that we want the scalar operations to be executed first, and then only invoke MetaAllocatorPtr::operator+ once.

&gt;&gt; Source/WTF/wtf/MetaAllocator.cpp:383
&gt;&gt; +            node-&gt;m_end = start + sizeInBytes;
&gt; 
&gt; And you don&apos;t use them here. I&apos;d just remove it everywhere since addition is commutative.

There&apos;s no order ambiguity here as to when to execute the MetaAllocatorPtr operator+.  So, parens are not needed.

&gt;&gt; Source/WTF/wtf/MetaAllocator.h:141
&gt;&gt; +            return m_end.untaggedPtr&lt;size_t&gt;() - m_start.untaggedPtr&lt;size_t&gt;();
&gt; 
&gt; This should be untaggedPtr&lt;uintptr_t&gt; or untaggedPtr&lt;intptr_t&gt; IMO

The return type of sizeInBytes() is size_t.  So, I think we should be operating on size_t, not uintptr_t or intptr_t.

&gt;&gt; Source/WTF/wtf/MetaAllocatorPtr.h:35
&gt;&gt; +class MetaAllocatorPtr {
&gt; 
&gt; This is almost identical to MacroAssemblerCodePtr. They should probably inherit from some common subclass. At least file a bug w/ a FIXME for this work.

Will add a FIXME and reference to https://bugs.webkit.org/show_bug.cgi?id=185145.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1419147</commentid>
    <comment_count>4</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2018-04-30 15:30:03 -0700</bug_when>
    <thetext>Thanks for the review.  Landed in r231175: &lt;http://trac.webkit.org/r231175&gt;.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>339061</attachid>
            <date>2018-04-28 00:00:55 -0700</date>
            <delta_ts>2018-04-30 11:23:55 -0700</delta_ts>
            <desc>proposed patch.</desc>
            <filename>bug-185110.patch</filename>
            <type>text/plain</type>
            <size>69654</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjMxMTMxKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDUxIEBA
CisyMDE4LTA0LTI3ICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KKworICAgICAgICBB
cHBseSBQdHJUYWdzIHRvIHRoZSBNZXRhQWxsb2NhdG9yIGFuZCBmcmllbmRzLgorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTg1MTEwCisgICAgICAgIDxy
ZGFyOi8vcHJvYmxlbS8zOTUzMzg5NT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICAxLiBMaW5rQnVmZmVyIG5vdyB0YWtlcyBhIE1hY3JvQXNzZW1ibGVy
Q29kZVB0ciBpbnN0ZWFkIG9mIGEgdm9pZCogcG9pbnRlci4KKyAgICAgICAgMi4gQXBwbHkgcG9p
bnRlciB0YWdnaW5nIHRvIHRoZSBib3VuZGFyeSBwb2ludGVycyBvZiB0aGUgRml4ZWRFeGVjdXRh
YmxlTWVtb3J5UG9vbCwKKyAgICAgICAgICAgYW5kIGFkZCBhIHNhbml0eSBjaGVjayB0byB2ZXJp
ZnkgdGhhdCBhbGxvY2F0ZWQgY29kZSBidWZmZXJzIGFyZSB3aXRoaW4gdGhvc2UKKyAgICAgICAg
ICAgYm91bmRzLgorCisgICAgICAgICogYXNzZW1ibGVyL0xpbmtCdWZmZXIuY3BwOgorICAgICAg
ICAoSlNDOjpMaW5rQnVmZmVyOjpmaW5hbGl6ZUNvZGVXaXRob3V0RGlzYXNzZW1ibHlJbXBsKToK
KyAgICAgICAgKEpTQzo6TGlua0J1ZmZlcjo6Y29weUNvbXBhY3RBbmRMaW5rQ29kZSk6CisgICAg
ICAgIChKU0M6OkxpbmtCdWZmZXI6OmxpbmtDb2RlKToKKyAgICAgICAgKEpTQzo6TGlua0J1ZmZl
cjo6YWxsb2NhdGUpOgorICAgICAgICAqIGFzc2VtYmxlci9MaW5rQnVmZmVyLmg6CisgICAgICAg
IChKU0M6OkxpbmtCdWZmZXI6OkxpbmtCdWZmZXIpOgorICAgICAgICAoSlNDOjpMaW5rQnVmZmVy
OjpkZWJ1Z0FkZHJlc3MpOgorICAgICAgICAoSlNDOjpMaW5rQnVmZmVyOjpjb2RlKToKKyAgICAg
ICAgKiBhc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJDb2RlUmVmLmg6CisgICAgICAgIChKU0M6Ok1h
Y3JvQXNzZW1ibGVyQ29kZVJlZjo6TWFjcm9Bc3NlbWJsZXJDb2RlUmVmKToKKyAgICAgICAgKiBi
eXRlY29kZS9JbmxpbmVBY2Nlc3MuY3BwOgorICAgICAgICAoSlNDOjpsaW5rQ29kZUlubGluZSk6
CisgICAgICAgIChKU0M6OklubGluZUFjY2Vzczo6cmV3aXJlU3R1YkFzSnVtcCk6CisgICAgICAg
ICogZGZnL0RGR0pJVENvZGUuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkpJVENvZGU6OmZpbmRQ
Qyk6CisgICAgICAgICogZnRsL0ZUTEpJVENvZGUuY3BwOgorICAgICAgICAoSlNDOjpGVEw6OkpJ
VENvZGU6OmZpbmRQQyk6CisgICAgICAgICogaml0L0V4ZWN1dGFibGVBbGxvY2F0b3IuY3BwOgor
ICAgICAgICAoSlNDOjpGaXhlZFZNUG9vbEV4ZWN1dGFibGVBbGxvY2F0b3I6OkZpeGVkVk1Qb29s
RXhlY3V0YWJsZUFsbG9jYXRvcik6CisgICAgICAgIChKU0M6OkZpeGVkVk1Qb29sRXhlY3V0YWJs
ZUFsbG9jYXRvcjo6aml0V3JpdGVUaHVua0dlbmVyYXRvcik6CisgICAgICAgIChKU0M6OkV4ZWN1
dGFibGVBbGxvY2F0b3I6OmFsbG9jYXRlKToKKyAgICAgICAgKiBqaXQvRXhlY3V0YWJsZUFsbG9j
YXRvci5oOgorICAgICAgICAoSlNDOjppc0pJVFBDKToKKyAgICAgICAgKEpTQzo6cGVyZm9ybUpJ
VE1lbWNweSk6CisgICAgICAgICogaml0L0pJVC5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6bGlu
ayk6CisgICAgICAgICogaml0L0pJVE1hdGhJQy5oOgorICAgICAgICAoSlNDOjppc1Byb2ZpbGVF
bXB0eSk6CisgICAgICAgICogcnVudGltZS9KU0NQdHJUYWcuaDoKKyAgICAgICAgKiB3YXNtL1dh
c21DYWxsZWUuY3BwOgorICAgICAgICAoSlNDOjpXYXNtOjpDYWxsZWU6OkNhbGxlZSk6CisgICAg
ICAgICogd2FzbS9XYXNtRmF1bHRTaWduYWxIYW5kbGVyLmNwcDoKKyAgICAgICAgKEpTQzo6V2Fz
bTo6dHJhcEhhbmRsZXIpOgorCiAyMDE4LTA0LTI3ICBDYWlvIExpbWEgIDx0aWNhaW9saW1hQGdt
YWlsLmNvbT4KIAogICAgICAgICBbRVNOZXh0XVtCaWdJbnRdIEltcGxlbWVudCBzdXBwb3J0IGZv
ciAiKiIgb3BlcmF0aW9uCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0xp
bmtCdWZmZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJs
ZXIvTGlua0J1ZmZlci5jcHAJKHJldmlzaW9uIDIzMTEzMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9hc3NlbWJsZXIvTGlua0J1ZmZlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUyLDcgKzUy
LDcgQEAgTGlua0J1ZmZlcjo6Q29kZVJlZjxMaW5rQnVmZmVyUHRyVGFnPiBMaQogICAgIGlmICht
X2V4ZWN1dGFibGVNZW1vcnkpCiAgICAgICAgIHJldHVybiBDb2RlUmVmPExpbmtCdWZmZXJQdHJU
YWc+KCptX2V4ZWN1dGFibGVNZW1vcnkpOwogICAgIAotICAgIHJldHVybiBDb2RlUmVmPExpbmtC
dWZmZXJQdHJUYWc+OjpjcmVhdGVTZWxmTWFuYWdlZENvZGVSZWYoTWFjcm9Bc3NlbWJsZXJDb2Rl
UHRyPExpbmtCdWZmZXJQdHJUYWc+KHRhZ0NvZGVQdHI8TGlua0J1ZmZlclB0clRhZz4obV9jb2Rl
KSkpOworICAgIHJldHVybiBDb2RlUmVmPExpbmtCdWZmZXJQdHJUYWc+OjpjcmVhdGVTZWxmTWFu
YWdlZENvZGVSZWYobV9jb2RlKTsKIH0KIAogTGlua0J1ZmZlcjo6Q29kZVJlZjxMaW5rQnVmZmVy
UHRyVGFnPiBMaW5rQnVmZmVyOjpmaW5hbGl6ZUNvZGVXaXRoRGlzYXNzZW1ibHlJbXBsKGNvbnN0
IGNoYXIqIGZvcm1hdCwgLi4uKQpAQCAtMTEyLDcgKzExMiw3IEBAIHZvaWQgTGlua0J1ZmZlcjo6
Y29weUNvbXBhY3RBbmRMaW5rQ29kZSgKICAgICBBc3NlbWJsZXJEYXRhIG91dEJ1ZmZlcihtX3Np
emUpOwogCiAgICAgdWludDhfdCogb3V0RGF0YSA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+
KG91dEJ1ZmZlci5idWZmZXIoKSk7Ci0gICAgdWludDhfdCogY29kZU91dERhdGEgPSByZWludGVy
cHJldF9jYXN0PHVpbnQ4X3QqPihtX2NvZGUpOworICAgIHVpbnQ4X3QqIGNvZGVPdXREYXRhID0g
bV9jb2RlLmRhdGFMb2NhdGlvbjx1aW50OF90Kj4oKTsKIAogICAgIGludCByZWFkUHRyID0gMDsK
ICAgICBpbnQgd3JpdGVQdHIgPSAwOwpAQCAtMTg0LDEzICsxODQsMTMgQEAgdm9pZCBMaW5rQnVm
ZmVyOjpjb3B5Q29tcGFjdEFuZExpbmtDb2RlKAogICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QXNz
ZW1ibGVyVHlwZV9UOjpmaWxsTm9wcyhvdXREYXRhICsgY29tcGFjdFNpemUsIG5vcFNpemVJbkJ5
dGVzLCBpc0NvcHlpbmdUb0V4ZWN1dGFibGVNZW1vcnkpOwogICAgIH0KIAotICAgIHBlcmZvcm1K
SVRNZW1jcHkobV9jb2RlLCBvdXREYXRhLCBtX3NpemUpOworICAgIHBlcmZvcm1KSVRNZW1jcHko
Y29kZU91dERhdGEsIG91dERhdGEsIG1fc2l6ZSk7CiAKICNpZiBEVU1QX0xJTktfU1RBVElTVElD
UwotICAgIGR1bXBMaW5rU3RhdGlzdGljcyhtX2NvZGUsIGluaXRpYWxTaXplLCBtX3NpemUpOwor
ICAgIGR1bXBMaW5rU3RhdGlzdGljcyhjb2RlT3V0RGF0YSwgaW5pdGlhbFNpemUsIG1fc2l6ZSk7
CiAjZW5kaWYKICNpZiBEVU1QX0NPREUKLSAgICBkdW1wQ29kZShtX2NvZGUsIG1fc2l6ZSk7Cisg
ICAgZHVtcENvZGUoY29kZU91dERhdGEsIG1fc2l6ZSk7CiAjZW5kaWYKIH0KICNlbmRpZgpAQCAt
MjEwLDEyICsyMTAsMTMgQEAgdm9pZCBMaW5rQnVmZmVyOjpsaW5rQ29kZShNYWNyb0Fzc2VtYmxl
cgogICAgICAgICByZXR1cm47CiAgICAgQVNTRVJUKG1fY29kZSk7CiAgICAgQXNzZW1ibGVyQnVm
ZmVyJiBidWZmZXIgPSBtYWNyb0Fzc2VtYmxlci5tX2Fzc2VtYmxlci5idWZmZXIoKTsKKyAgICB2
b2lkKiBjb2RlID0gbV9jb2RlLmRhdGFMb2NhdGlvbigpOwogI2lmIENQVShBUk1fVFJBRElUSU9O
QUwpCi0gICAgbWFjcm9Bc3NlbWJsZXIubV9hc3NlbWJsZXIucHJlcGFyZUV4ZWN1dGFibGVDb3B5
KG1fY29kZSk7CisgICAgbWFjcm9Bc3NlbWJsZXIubV9hc3NlbWJsZXIucHJlcGFyZUV4ZWN1dGFi
bGVDb3B5KGNvZGUpOwogI2VuZGlmCi0gICAgcGVyZm9ybUpJVE1lbWNweShtX2NvZGUsIGJ1ZmZl
ci5kYXRhKCksIGJ1ZmZlci5jb2RlU2l6ZSgpKTsKKyAgICBwZXJmb3JtSklUTWVtY3B5KGNvZGUs
IGJ1ZmZlci5kYXRhKCksIGJ1ZmZlci5jb2RlU2l6ZSgpKTsKICNpZiBDUFUoTUlQUykKLSAgICBt
YWNyb0Fzc2VtYmxlci5tX2Fzc2VtYmxlci5yZWxvY2F0ZUp1bXBzKGJ1ZmZlci5kYXRhKCksIG1f
Y29kZSk7CisgICAgbWFjcm9Bc3NlbWJsZXIubV9hc3NlbWJsZXIucmVsb2NhdGVKdW1wcyhidWZm
ZXIuZGF0YSgpLCBjb2RlKTsKICNlbmRpZgogI2VsaWYgQ1BVKEFSTV9USFVNQjIpCiAgICAgY29w
eUNvbXBhY3RBbmRMaW5rQ29kZTx1aW50MTZfdD4obWFjcm9Bc3NlbWJsZXIsIG93bmVyVUlELCBl
ZmZvcnQpOwpAQCAtMjQzLDExICsyNDQsMTEgQEAgdm9pZCBMaW5rQnVmZmVyOjphbGxvY2F0ZShN
YWNyb0Fzc2VtYmxlcgogICAgICAgICBtYWNyb0Fzc2VtYmxlci5icmVha3BvaW50KCk7CiAgICAg
ICAgIGluaXRpYWxTaXplID0gbWFjcm9Bc3NlbWJsZXIubV9hc3NlbWJsZXIuY29kZVNpemUoKTsK
ICAgICB9Ci0gICAgCisKICAgICBtX2V4ZWN1dGFibGVNZW1vcnkgPSBFeGVjdXRhYmxlQWxsb2Nh
dG9yOjpzaW5nbGV0b24oKS5hbGxvY2F0ZShpbml0aWFsU2l6ZSwgb3duZXJVSUQsIGVmZm9ydCk7
CiAgICAgaWYgKCFtX2V4ZWN1dGFibGVNZW1vcnkpCiAgICAgICAgIHJldHVybjsKLSAgICBtX2Nv
ZGUgPSBtX2V4ZWN1dGFibGVNZW1vcnktPnN0YXJ0KCk7CisgICAgbV9jb2RlID0gTWFjcm9Bc3Nl
bWJsZXJDb2RlUHRyPExpbmtCdWZmZXJQdHJUYWc+KG1fZXhlY3V0YWJsZU1lbW9yeS0+c3RhcnQo
KS5yZXRhZ2dlZFB0cjxMaW5rQnVmZmVyUHRyVGFnPigpKTsKICAgICBtX3NpemUgPSBpbml0aWFs
U2l6ZTsKICAgICBtX2RpZEFsbG9jYXRlID0gdHJ1ZTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9hc3NlbWJsZXIvTGlua0J1ZmZlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9hc3NlbWJsZXIvTGlua0J1ZmZlci5oCShyZXZpc2lvbiAyMzExMzEpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0xpbmtCdWZmZXIuaAkod29ya2luZyBjb3B5
KQpAQCAtMzYsNiArMzYsNyBAQAogCiAjaW5jbHVkZSAiSklUQ29tcGlsYXRpb25FZmZvcnQuaCIK
ICNpbmNsdWRlICJNYWNyb0Fzc2VtYmxlci5oIgorI2luY2x1ZGUgIk1hY3JvQXNzZW1ibGVyQ29k
ZVJlZi5oIgogI2luY2x1ZGUgPHd0Zi9EYXRhTG9nLmg+CiAjaW5jbHVkZSA8d3RmL0Zhc3RNYWxs
b2MuaD4KICNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KQEAgLTgxLDcgKzgyLDYgQEAgcHVi
bGljOgogICAgIExpbmtCdWZmZXIoTWFjcm9Bc3NlbWJsZXImIG1hY3JvQXNzZW1ibGVyLCB2b2lk
KiBvd25lclVJRCwgSklUQ29tcGlsYXRpb25FZmZvcnQgZWZmb3J0ID0gSklUQ29tcGlsYXRpb25N
dXN0U3VjY2VlZCkKICAgICAgICAgOiBtX3NpemUoMCkKICAgICAgICAgLCBtX2RpZEFsbG9jYXRl
KGZhbHNlKQotICAgICAgICAsIG1fY29kZSgwKQogI2lmbmRlZiBOREVCVUcKICAgICAgICAgLCBt
X2NvbXBsZXRlZChmYWxzZSkKICNlbmRpZgpAQCAtODksMTAgKzg5LDExIEBAIHB1YmxpYzoKICAg
ICAgICAgbGlua0NvZGUobWFjcm9Bc3NlbWJsZXIsIG93bmVyVUlELCBlZmZvcnQpOwogICAgIH0K
IAotICAgIExpbmtCdWZmZXIoTWFjcm9Bc3NlbWJsZXImIG1hY3JvQXNzZW1ibGVyLCB2b2lkKiBj
b2RlLCBzaXplX3Qgc2l6ZSwgSklUQ29tcGlsYXRpb25FZmZvcnQgZWZmb3J0ID0gSklUQ29tcGls
YXRpb25NdXN0U3VjY2VlZCwgYm9vbCBzaG91bGRQZXJmb3JtQnJhbmNoQ29tcGFjdGlvbiA9IHRy
dWUpCisgICAgdGVtcGxhdGU8UHRyVGFnIHRhZz4KKyAgICBMaW5rQnVmZmVyKE1hY3JvQXNzZW1i
bGVyJiBtYWNyb0Fzc2VtYmxlciwgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPHRhZz4gY29kZSwgc2l6
ZV90IHNpemUsIEpJVENvbXBpbGF0aW9uRWZmb3J0IGVmZm9ydCA9IEpJVENvbXBpbGF0aW9uTXVz
dFN1Y2NlZWQsIGJvb2wgc2hvdWxkUGVyZm9ybUJyYW5jaENvbXBhY3Rpb24gPSB0cnVlKQogICAg
ICAgICA6IG1fc2l6ZShzaXplKQogICAgICAgICAsIG1fZGlkQWxsb2NhdGUoZmFsc2UpCi0gICAg
ICAgICwgbV9jb2RlKGNvZGUpCisgICAgICAgICwgbV9jb2RlKGNvZGUudGVtcGxhdGUgcmV0YWdn
ZWQ8TGlua0J1ZmZlclB0clRhZz4oKSkKICNpZm5kZWYgTkRFQlVHCiAgICAgICAgICwgbV9jb21w
bGV0ZWQoZmFsc2UpCiAjZW5kaWYKQEAgLTI4MSw3ICsyODIsNyBAQCBwdWJsaWM6CiAKICAgICB2
b2lkKiBkZWJ1Z0FkZHJlc3MoKQogICAgIHsKLSAgICAgICAgcmV0dXJuIG1fY29kZTsKKyAgICAg
ICAgcmV0dXJuIG1fY29kZS5kYXRhTG9jYXRpb24oKTsKICAgICB9CiAKICAgICBzaXplX3Qgc2l6
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2l6ZTsgfQpAQCAtMzEzLDcgKzMxNCw3IEBAIHByaXZhdGU6
CiAgICAgLy8gS2VlcCB0aGlzIHByaXZhdGUhIC0gdGhlIHVuZGVybHlpbmcgY29kZSBzaG91bGQg
b25seSBiZSBvYnRhaW5lZCBleHRlcm5hbGx5IHZpYSBmaW5hbGl6ZUNvZGUoKS4KICAgICB2b2lk
KiBjb2RlKCkKICAgICB7Ci0gICAgICAgIHJldHVybiBtX2NvZGU7CisgICAgICAgIHJldHVybiBt
X2NvZGUuZGF0YUxvY2F0aW9uKCk7CiAgICAgfQogICAgIAogICAgIHZvaWQgYWxsb2NhdGUoTWFj
cm9Bc3NlbWJsZXImLCB2b2lkKiBvd25lclVJRCwgSklUQ29tcGlsYXRpb25FZmZvcnQpOwpAQCAt
MzQxLDcgKzM0Miw3IEBAIHByaXZhdGU6CiAgICAgYm9vbCBtX3Nob3VsZFBlcmZvcm1CcmFuY2hD
b21wYWN0aW9uIHsgdHJ1ZSB9OwogI2VuZGlmCiAgICAgYm9vbCBtX2RpZEFsbG9jYXRlOwotICAg
IHZvaWQqIG1fY29kZTsKKyAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8TGlua0J1ZmZlclB0clRh
Zz4gbV9jb2RlOwogI2lmbmRlZiBOREVCVUcKICAgICBib29sIG1fY29tcGxldGVkOwogI2VuZGlm
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQ29k
ZVJlZi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFj
cm9Bc3NlbWJsZXJDb2RlUmVmLmgJKHJldmlzaW9uIDIzMTEzMSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJDb2RlUmVmLmgJKHdvcmtpbmcgY29weSkK
QEAgLTQwMiw3ICs0MDIsNyBAQCBwdWJsaWM6CiAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmKCkg
PSBkZWZhdWx0OwogCiAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmKFJlZjxFeGVjdXRhYmxlTWVt
b3J5SGFuZGxlPiYmIGV4ZWN1dGFibGVNZW1vcnkpCi0gICAgICAgIDogbV9jb2RlUHRyKHRhZ0Nv
ZGVQdHI8dGFnPihleGVjdXRhYmxlTWVtb3J5LT5zdGFydCgpKSkKKyAgICAgICAgOiBtX2NvZGVQ
dHIoZXhlY3V0YWJsZU1lbW9yeS0+c3RhcnQoKS5yZXRhZ2dlZFB0cjx0YWc+KCkpCiAgICAgICAg
ICwgbV9leGVjdXRhYmxlTWVtb3J5KFdURk1vdmUoZXhlY3V0YWJsZU1lbW9yeSkpCiAgICAgewog
ICAgICAgICBBU1NFUlQobV9leGVjdXRhYmxlTWVtb3J5LT5pc01hbmFnZWQoKSk7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5saW5lQWNjZXNzLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5saW5lQWNjZXNzLmNwcAkocmV2
aXNpb24gMjMxMTMxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0lubGluZUFj
Y2Vzcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzMiw3ICsxMzIsNyBAQCBBTFdBWVNfSU5MSU5F
IHN0YXRpYyBib29sIGxpbmtDb2RlSW5saW5lCiB7CiAgICAgaWYgKGppdC5tX2Fzc2VtYmxlci5i
dWZmZXIoKS5jb2RlU2l6ZSgpIDw9IHN0dWJJbmZvLnBhdGNoLmlubGluZVNpemUpIHsKICAgICAg
ICAgYm9vbCBuZWVkc0JyYW5jaENvbXBhY3Rpb24gPSBmYWxzZTsKLSAgICAgICAgTGlua0J1ZmZl
ciBsaW5rQnVmZmVyKGppdCwgc3R1YkluZm8ucGF0Y2guc3RhcnQuZGF0YUxvY2F0aW9uKCksIHN0
dWJJbmZvLnBhdGNoLmlubGluZVNpemUsIEpJVENvbXBpbGF0aW9uTXVzdFN1Y2NlZWQsIG5lZWRz
QnJhbmNoQ29tcGFjdGlvbik7CisgICAgICAgIExpbmtCdWZmZXIgbGlua0J1ZmZlcihqaXQsIHN0
dWJJbmZvLnBhdGNoLnN0YXJ0LCBzdHViSW5mby5wYXRjaC5pbmxpbmVTaXplLCBKSVRDb21waWxh
dGlvbk11c3RTdWNjZWVkLCBuZWVkc0JyYW5jaENvbXBhY3Rpb24pOwogICAgICAgICBBU1NFUlQo
bGlua0J1ZmZlci5pc1ZhbGlkKCkpOwogICAgICAgICBmdW5jdGlvbihsaW5rQnVmZmVyKTsKICAg
ICAgICAgRklOQUxJWkVfQ09ERShsaW5rQnVmZmVyLCBOb1B0clRhZywgIklubGluZUFjY2Vzc1R5
cGU6ICclcyciLCBuYW1lKTsKQEAgLTI4Niw3ICsyODYsNyBAQCB2b2lkIElubGluZUFjY2Vzczo6
cmV3aXJlU3R1YkFzSnVtcChTdHJ1CiAKICAgICAvLyBXZSBkb24ndCBuZWVkIGEgbm9wIHNsZWQg
aGVyZSBiZWNhdXNlIG5vYm9keSBzaG91bGQgYmUganVtcGluZyBpbnRvIHRoZSBtaWRkbGUgb2Yg
YW4gSUMuCiAgICAgYm9vbCBuZWVkc0JyYW5jaENvbXBhY3Rpb24gPSBmYWxzZTsKLSAgICBMaW5r
QnVmZmVyIGxpbmtCdWZmZXIoaml0LCBzdHViSW5mby5wYXRjaC5zdGFydC5kYXRhTG9jYXRpb24o
KSwgaml0Lm1fYXNzZW1ibGVyLmJ1ZmZlcigpLmNvZGVTaXplKCksIEpJVENvbXBpbGF0aW9uTXVz
dFN1Y2NlZWQsIG5lZWRzQnJhbmNoQ29tcGFjdGlvbik7CisgICAgTGlua0J1ZmZlciBsaW5rQnVm
ZmVyKGppdCwgc3R1YkluZm8ucGF0Y2guc3RhcnQsIGppdC5tX2Fzc2VtYmxlci5idWZmZXIoKS5j
b2RlU2l6ZSgpLCBKSVRDb21waWxhdGlvbk11c3RTdWNjZWVkLCBuZWVkc0JyYW5jaENvbXBhY3Rp
b24pOwogICAgIFJFTEVBU0VfQVNTRVJUKGxpbmtCdWZmZXIuaXNWYWxpZCgpKTsKICAgICBsaW5r
QnVmZmVyLmxpbmsoanVtcCwgdGFyZ2V0KTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdKSVRDb2RlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0pJVENvZGUuY3BwCShyZXZpc2lvbiAyMzExMzEpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0pJVENvZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAog
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjI5LDcgKzIyOSw3
IEBAIHN0ZDo6b3B0aW9uYWw8Q29kZU9yaWdpbj4gSklUQ29kZTo6ZmluZFAKIHsKICAgICBmb3Ig
KE9TUkV4aXQmIGV4aXQgOiBvc3JFeGl0KSB7CiAgICAgICAgIGlmIChFeGVjdXRhYmxlTWVtb3J5
SGFuZGxlKiBoYW5kbGUgPSBleGl0Lm1fY29kZS5leGVjdXRhYmxlTWVtb3J5KCkpIHsKLSAgICAg
ICAgICAgIGlmIChoYW5kbGUtPnN0YXJ0KCkgPD0gcGMgJiYgcGMgPCBoYW5kbGUtPmVuZCgpKQor
ICAgICAgICAgICAgaWYgKGhhbmRsZS0+c3RhcnQoKS51bnRhZ2dlZFB0cigpIDw9IHBjICYmIHBj
IDwgaGFuZGxlLT5lbmQoKS51bnRhZ2dlZFB0cigpKQogICAgICAgICAgICAgICAgIHJldHVybiBz
dGQ6Om9wdGlvbmFsPENvZGVPcmlnaW4+KGV4aXQubV9jb2RlT3JpZ2luRm9yRXhpdFByb2ZpbGUp
OwogICAgICAgICB9CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExK
SVRDb2RlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEpJ
VENvZGUuY3BwCShyZXZpc2lvbiAyMzExMzEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRs
L0ZUTEpJVENvZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTUsMTQgKzE1NSwxNCBAQCBzdGQ6
Om9wdGlvbmFsPENvZGVPcmlnaW4+IEpJVENvZGU6OmZpbmRQCiB7CiAgICAgZm9yIChPU1JFeGl0
JiBleGl0IDogb3NyRXhpdCkgewogICAgICAgICBpZiAoRXhlY3V0YWJsZU1lbW9yeUhhbmRsZSog
aGFuZGxlID0gZXhpdC5tX2NvZGUuZXhlY3V0YWJsZU1lbW9yeSgpKSB7Ci0gICAgICAgICAgICBp
ZiAoaGFuZGxlLT5zdGFydCgpIDw9IHBjICYmIHBjIDwgaGFuZGxlLT5lbmQoKSkKKyAgICAgICAg
ICAgIGlmIChoYW5kbGUtPnN0YXJ0KCkudW50YWdnZWRQdHIoKSA8PSBwYyAmJiBwYyA8IGhhbmRs
ZS0+ZW5kKCkudW50YWdnZWRQdHIoKSkKICAgICAgICAgICAgICAgICByZXR1cm4gc3RkOjpvcHRp
b25hbDxDb2RlT3JpZ2luPihleGl0Lm1fY29kZU9yaWdpbkZvckV4aXRQcm9maWxlKTsKICAgICAg
ICAgfQogICAgIH0KIAogICAgIGZvciAoc3RkOjp1bmlxdWVfcHRyPExhenlTbG93UGF0aD4mIGxh
enlTbG93UGF0aCA6IGxhenlTbG93UGF0aHMpIHsKICAgICAgICAgaWYgKEV4ZWN1dGFibGVNZW1v
cnlIYW5kbGUqIGhhbmRsZSA9IGxhenlTbG93UGF0aC0+c3R1YigpLmV4ZWN1dGFibGVNZW1vcnko
KSkgewotICAgICAgICAgICAgaWYgKGhhbmRsZS0+c3RhcnQoKSA8PSBwYyAmJiBwYyA8IGhhbmRs
ZS0+ZW5kKCkpCisgICAgICAgICAgICBpZiAoaGFuZGxlLT5zdGFydCgpLnVudGFnZ2VkUHRyKCkg
PD0gcGMgJiYgcGMgPCBoYW5kbGUtPmVuZCgpLnVudGFnZ2VkUHRyKCkpCiAgICAgICAgICAgICAg
ICAgcmV0dXJuIHN0ZDo6b3B0aW9uYWw8Q29kZU9yaWdpbj4oY29kZUJsb2NrLT5jb2RlT3JpZ2lu
KGxhenlTbG93UGF0aC0+Y2FsbFNpdGVJbmRleCgpKSk7CiAgICAgICAgIH0KICAgICB9CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0V4ZWN1dGFibGVBbGxvY2F0b3IuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvRXhlY3V0YWJsZUFsbG9jYXRvci5j
cHAJKHJldmlzaW9uIDIzMTEzMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvRXhlY3V0
YWJsZUFsbG9jYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwMCw4ICsxMDAsOCBAQCBzdGF0
aWMgY29uc3QgZG91YmxlIGV4ZWN1dGFibGVQb29sUmVzZXJ2CiBzdGF0aWMgY29uc3QgZG91Ymxl
IGV4ZWN1dGFibGVQb29sUmVzZXJ2YXRpb25GcmFjdGlvbiA9IDAuMjU7CiAjZW5kaWYKIAotSlNf
RVhQT1JUX1BSSVZBVEUgdWludHB0cl90IHN0YXJ0T2ZGaXhlZEV4ZWN1dGFibGVNZW1vcnlQb29s
OwotSlNfRVhQT1JUX1BSSVZBVEUgdWludHB0cl90IGVuZE9mRml4ZWRFeGVjdXRhYmxlTWVtb3J5
UG9vbDsKK0pTX0VYUE9SVF9QUklWQVRFIHZvaWQqIHRhZ2dlZFN0YXJ0T2ZGaXhlZEV4ZWN1dGFi
bGVNZW1vcnlQb29sOworSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCogdGFnZ2VkRW5kT2ZGaXhlZEV4
ZWN1dGFibGVNZW1vcnlQb29sOwogSlNfRVhQT1JUX1BSSVZBVEUgYm9vbCB1c2VGYXN0UGVybWlz
aW9uc0pJVENvcHkgeyBmYWxzZSB9OwogCiBKU19FWFBPUlRfUFJJVkFURSBKSVRXcml0ZVNlcGFy
YXRlSGVhcHNGdW5jdGlvbiBqaXRXcml0ZVNlcGFyYXRlSGVhcHNGdW5jdGlvbjsKQEAgLTE0Mywx
OCArMTQzLDE5IEBAIHB1YmxpYzoKIAogICAgICAgICAgICAgYWRkRnJlc2hGcmVlU3BhY2UocmVz
ZXJ2YXRpb25CYXNlLCByZXNlcnZhdGlvblNpemUpOwogCi0gICAgICAgICAgICBzdGFydE9mRml4
ZWRFeGVjdXRhYmxlTWVtb3J5UG9vbCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90PihyZXNl
cnZhdGlvbkJhc2UpOwotICAgICAgICAgICAgZW5kT2ZGaXhlZEV4ZWN1dGFibGVNZW1vcnlQb29s
ID0gc3RhcnRPZkZpeGVkRXhlY3V0YWJsZU1lbW9yeVBvb2wgKyByZXNlcnZhdGlvblNpemU7Cisg
ICAgICAgICAgICB2b2lkKiByZXNlcnZhdGlvbkVuZCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhf
dCo+KHJlc2VydmF0aW9uQmFzZSkgKyByZXNlcnZhdGlvblNpemU7CisgICAgICAgICAgICB0YWdn
ZWRTdGFydE9mRml4ZWRFeGVjdXRhYmxlTWVtb3J5UG9vbCA9IHRhZ0NvZGVQdHI8RXhlY3V0YWJs
ZU1lbW9yeVB0clRhZz4ocmVzZXJ2YXRpb25CYXNlKTsKKyAgICAgICAgICAgIHRhZ2dlZEVuZE9m
Rml4ZWRFeGVjdXRhYmxlTWVtb3J5UG9vbCA9IHRhZ0NvZGVQdHI8RXhlY3V0YWJsZU1lbW9yeVB0
clRhZz4ocmVzZXJ2YXRpb25FbmQpOwogICAgICAgICB9CiAgICAgfQogCiAgICAgdmlydHVhbCB+
Rml4ZWRWTVBvb2xFeGVjdXRhYmxlQWxsb2NhdG9yKCk7CiAKIHByb3RlY3RlZDoKLSAgICB2b2lk
KiBhbGxvY2F0ZU5ld1NwYWNlKHNpemVfdCYpIG92ZXJyaWRlCisgICAgRnJlZVNwYWNlUHRyIGFs
bG9jYXRlTmV3U3BhY2Uoc2l6ZV90Jikgb3ZlcnJpZGUKICAgICB7CiAgICAgICAgIC8vIFdlJ3Jl
IG9wZXJhdGluZyBpbiBhIGZpeGVkIHBvb2wsIHNvIG5ldyBhbGxvY2F0aW9uIGlzIGFsd2F5cyBw
cm9oaWJpdGVkLgotICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAg
ICAgfQogCiAgICAgdm9pZCBub3RpZnlOZWVkUGFnZSh2b2lkKiBwYWdlKSBvdmVycmlkZQpAQCAt
MjkzLDcgKzI5NCw4IEBAIHByaXZhdGU6CiAgICAgICAgIGxvY2FsMi5saW5rKCZqaXQpOwogICAg
ICAgICBqaXQucmV0KCk7CiAKLSAgICAgICAgTGlua0J1ZmZlciBsaW5rQnVmZmVyKGppdCwgc3R1
YkJhc2UsIHN0dWJTaXplKTsKKyAgICAgICAgYXV0byBzdHViQmFzZUNvZGVQdHIgPSBNYWNyb0Fz
c2VtYmxlckNvZGVQdHI8TGlua0J1ZmZlclB0clRhZz4odGFnQ29kZVB0cjxMaW5rQnVmZmVyUHRy
VGFnPihzdHViQmFzZSkpOworICAgICAgICBMaW5rQnVmZmVyIGxpbmtCdWZmZXIoaml0LCBzdHVi
QmFzZUNvZGVQdHIsIHN0dWJTaXplKTsKICAgICAgICAgLy8gV2UgZG9uJ3QgdXNlIEZJTkFMSVpF
X0NPREUoKSBmb3IgdHdvIHJlYXNvbnMuCiAgICAgICAgIC8vIFRoZSBmaXJzdCBpcyB0aGF0IHdl
IGRvbid0IHdhbnQgdGhlIHdyaXRlYWJsZSBhZGRyZXNzLCBhcyBkaXNhc3NlbWJsZWQgaW5zdHJ1
Y3Rpb25zLAogICAgICAgICAvLyB0byBhcHBlYXIgaW4gdGhlIGNvbnNvbGUgb3IgYW55d2hlcmUg
aW4gbWVtb3J5LCB2aWEgdGhlIFByaW50U3RyZWFtIGJ1ZmZlci4KQEAgLTMwMSw3ICszMDMsNyBA
QCBwcml2YXRlOgogICAgICAgICAvLyBhc3luY0Rpc2Fzc2VtYmx5IG9wdGlvbiBhcyBvdXIgY2Fs
bGVyIHdpbGwgc2V0IG91ciBwYWdlcyBleGVjdXRlIG9ubHkuCiAgICAgICAgIHJldHVybiBsaW5r
QnVmZmVyLmZpbmFsaXplQ29kZVdpdGhvdXREaXNhc3NlbWJseTxKSVRUaHVua1B0clRhZz4oKTsK
ICAgICB9Ci0jZWxzZSAvLyBDUFUoQVJNNjQpICYmIFVTRShFWEVDVVRFX09OTFlfSklUX1dSSVRF
X0ZVTkNUSU9OKQorI2Vsc2UgLy8gIShDUFUoQVJNNjQpICYmIFVTRShFWEVDVVRFX09OTFlfSklU
X1dSSVRFX0ZVTkNUSU9OKSkKICAgICBzdGF0aWMgdm9pZCBnZW5lcmljV3JpdGVUb0pJVFJlZ2lv
bihvZmZfdCBvZmZzZXQsIGNvbnN0IHZvaWQqIGRhdGEsIHNpemVfdCBkYXRhU2l6ZSkKICAgICB7
CiAgICAgICAgIG1lbWNweSgodm9pZCopKHN0YXJ0T2ZGaXhlZFdyaXRhYmxlTWVtb3J5UG9vbCAr
IG9mZnNldCksIGRhdGEsIGRhdGFTaXplKTsKQEAgLTQzMSw2ICs0MzMsMTcgQEAgUmVmUHRyPEV4
ZWN1dGFibGVNZW1vcnlIYW5kbGU+IEV4ZWN1dGFibAogICAgICAgICB9CiAgICAgICAgIHJldHVy
biBudWxscHRyOwogICAgIH0KKworI2lmIFVTRShQT0lOVEVSX1BST0ZJTElORykKKyAgICB2b2lk
KiBzdGFydCA9IHN0YXJ0T2ZGaXhlZEV4ZWN1dGFibGVNZW1vcnlQb29sKCk7CisgICAgdm9pZCog
ZW5kID0gZW5kT2ZGaXhlZEV4ZWN1dGFibGVNZW1vcnlQb29sKCk7CisgICAgdm9pZCogcmVzdWx0
U3RhcnQgPSByZXN1bHQtPnN0YXJ0KCkudW50YWdnZWRQdHIoKTsKKyAgICB2b2lkKiByZXN1bHRF
bmQgPSByZXN1bHQtPmVuZCgpLnVudGFnZ2VkUHRyKCk7CisgICAgUkVMRUFTRV9BU1NFUlQoc3Rh
cnQgPT0gcmVtb3ZlQ29kZVB0clRhZyh0YWdnZWRTdGFydE9mRml4ZWRFeGVjdXRhYmxlTWVtb3J5
UG9vbCkpOworICAgIFJFTEVBU0VfQVNTRVJUKGVuZCA9PSByZW1vdmVDb2RlUHRyVGFnKHRhZ2dl
ZEVuZE9mRml4ZWRFeGVjdXRhYmxlTWVtb3J5UG9vbCkpOworICAgIFJFTEVBU0VfQVNTRVJUKHN0
YXJ0IDw9IHJlc3VsdFN0YXJ0ICYmIHJlc3VsdFN0YXJ0IDwgZW5kKTsKKyAgICBSRUxFQVNFX0FT
U0VSVChzdGFydCA8IHJlc3VsdEVuZCAmJiByZXN1bHRFbmQgPD0gZW5kKTsKKyNlbmRpZgogICAg
IHJldHVybiByZXN1bHQ7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvRXhl
Y3V0YWJsZUFsbG9jYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvRXhlY3V0YWJsZUFsbG9jYXRvci5oCShyZXZpc2lvbiAyMzExMzEpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0V4ZWN1dGFibGVBbGxvY2F0b3IuaAkod29ya2luZyBjb3B5KQpAQCAt
NjEsMTMgKzYxLDI0IEBAIHR5cGVkZWYgV1RGOjpNZXRhQWxsb2NhdG9ySGFuZGxlIEV4ZWN1dGEK
IAogI2lmIEVOQUJMRShBU1NFTUJMRVIpCiAKLWV4dGVybiBKU19FWFBPUlRfUFJJVkFURSB1aW50
cHRyX3Qgc3RhcnRPZkZpeGVkRXhlY3V0YWJsZU1lbW9yeVBvb2w7Ci1leHRlcm4gSlNfRVhQT1JU
X1BSSVZBVEUgdWludHB0cl90IGVuZE9mRml4ZWRFeGVjdXRhYmxlTWVtb3J5UG9vbDsKK2V4dGVy
biBKU19FWFBPUlRfUFJJVkFURSB2b2lkKiB0YWdnZWRTdGFydE9mRml4ZWRFeGVjdXRhYmxlTWVt
b3J5UG9vbDsKK2V4dGVybiBKU19FWFBPUlRfUFJJVkFURSB2b2lkKiB0YWdnZWRFbmRPZkZpeGVk
RXhlY3V0YWJsZU1lbW9yeVBvb2w7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQgPSB2b2lkKj4KK1Qg
c3RhcnRPZkZpeGVkRXhlY3V0YWJsZU1lbW9yeVBvb2woKQoreworICAgIHJldHVybiB1bnRhZ0Nv
ZGVQdHI8VCwgRXhlY3V0YWJsZU1lbW9yeVB0clRhZz4odGFnZ2VkU3RhcnRPZkZpeGVkRXhlY3V0
YWJsZU1lbW9yeVBvb2wpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUID0gdm9pZCo+CitUIGVu
ZE9mRml4ZWRFeGVjdXRhYmxlTWVtb3J5UG9vbCgpCit7CisgICAgcmV0dXJuIHVudGFnQ29kZVB0
cjxULCBFeGVjdXRhYmxlTWVtb3J5UHRyVGFnPih0YWdnZWRFbmRPZkZpeGVkRXhlY3V0YWJsZU1l
bW9yeVBvb2wpOworfQogCiBpbmxpbmUgYm9vbCBpc0pJVFBDKHZvaWQqIHBjKQogewotICAgIHJl
dHVybiByZWludGVycHJldF9jYXN0PHZvaWQqPihzdGFydE9mRml4ZWRFeGVjdXRhYmxlTWVtb3J5
UG9vbCkgPD0gcGMKLSAgICAgICAgJiYgcGMgPCByZWludGVycHJldF9jYXN0PHZvaWQqPihlbmRP
ZkZpeGVkRXhlY3V0YWJsZU1lbW9yeVBvb2wpOworICAgIHJldHVybiBzdGFydE9mRml4ZWRFeGVj
dXRhYmxlTWVtb3J5UG9vbCgpIDw9IHBjICYmIHBjIDwgZW5kT2ZGaXhlZEV4ZWN1dGFibGVNZW1v
cnlQb29sKCk7CiB9CiAKIHR5cGVkZWYgdm9pZCAoKkpJVFdyaXRlU2VwYXJhdGVIZWFwc0Z1bmN0
aW9uKShvZmZfdCwgY29uc3Qgdm9pZCosIHNpemVfdCk7CkBAIC03Nyw3ICs4OCw3IEBAIGV4dGVy
biBKU19FWFBPUlRfUFJJVkFURSBib29sIHVzZUZhc3RQZXIKIAogc3RhdGljIGlubGluZSB2b2lk
KiBwZXJmb3JtSklUTWVtY3B5KHZvaWQgKmRzdCwgY29uc3Qgdm9pZCAqc3JjLCBzaXplX3QgbikK
IHsKLSAgICBpZiAocmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KGRzdCkgPj0gc3RhcnRPZkZp
eGVkRXhlY3V0YWJsZU1lbW9yeVBvb2wgJiYgcmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KGRz
dCkgPCBlbmRPZkZpeGVkRXhlY3V0YWJsZU1lbW9yeVBvb2wpIHsKKyAgICBpZiAoZHN0ID49IHN0
YXJ0T2ZGaXhlZEV4ZWN1dGFibGVNZW1vcnlQb29sKCkgJiYgZHN0IDwgZW5kT2ZGaXhlZEV4ZWN1
dGFibGVNZW1vcnlQb29sKCkpIHsKICNpZiBFTkFCTEUoRkFTVF9KSVRfUEVSTUlTU0lPTlMpCiAg
ICAgICAgIGlmICh1c2VGYXN0UGVybWlzaW9uc0pJVENvcHkpIHsKICAgICAgICAgICAgIG9zX3Ro
cmVhZF9zZWxmX3Jlc3RyaWN0X3J3eF90b19ydygpOwpAQCAtOTAsNyArMTAxLDcgQEAgc3RhdGlj
IGlubGluZSB2b2lkKiBwZXJmb3JtSklUTWVtY3B5KHZvaQogICAgICAgICBpZiAoaml0V3JpdGVT
ZXBhcmF0ZUhlYXBzRnVuY3Rpb24pIHsKICAgICAgICAgICAgIC8vIFVzZSBleGVjdXRlLW9ubHkg
d3JpdGUgdGh1bmsgZm9yIHdyaXRlcyBpbnNpZGUgdGhlIEpJVCByZWdpb24uIFRoaXMgaXMgYSB2
YXJpYW50IG9mCiAgICAgICAgICAgICAvLyBtZW1jcHkgdGhhdCB0YWtlcyBhbiBvZmZzZXQgaW50
byB0aGUgSklUIHJlZ2lvbiBhcyBpdHMgZGVzdGluYXRpb24gKGZpcnN0KSBwYXJhbWV0ZXIuCi0g
ICAgICAgICAgICBvZmZfdCBvZmZzZXQgPSAob2ZmX3QpKCh1aW50cHRyX3QpZHN0IC0gc3RhcnRP
ZkZpeGVkRXhlY3V0YWJsZU1lbW9yeVBvb2wpOworICAgICAgICAgICAgb2ZmX3Qgb2Zmc2V0ID0g
KG9mZl90KSgodWludHB0cl90KWRzdCAtIHN0YXJ0T2ZGaXhlZEV4ZWN1dGFibGVNZW1vcnlQb29s
PHVpbnRwdHJfdD4oKSk7CiAgICAgICAgICAgICByZXRhZ0NvZGVQdHI8SklUVGh1bmtQdHJUYWcs
IENGdW5jdGlvblB0clRhZz4oaml0V3JpdGVTZXBhcmF0ZUhlYXBzRnVuY3Rpb24pKG9mZnNldCwg
c3JjLCBuKTsKICAgICAgICAgICAgIHJldHVybiBkc3Q7CiAgICAgICAgIH0KSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVC5jcHAJKHJldmlzaW9uIDIzMTEzMSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklULmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTAxLDcgKzkwMSw3IEBAIENv
bXBpbGF0aW9uUmVzdWx0IEpJVDo6bGluaygpCiAgICAgICAgIGFkb3B0UmVmKCpuZXcgRGlyZWN0
SklUQ29kZShyZXN1bHQsIHdpdGhBcml0eUNoZWNrLCBKSVRDb2RlOjpCYXNlbGluZUpJVCkpKTsK
IAogICAgIGlmIChKSVRJbnRlcm5hbDo6dmVyYm9zZSkKLSAgICAgICAgZGF0YUxvZ0YoIkpJVCBn
ZW5lcmF0ZWQgY29kZSBmb3IgJXAgYXQgWyVwLCAlcCkuXG4iLCBtX2NvZGVCbG9jaywgcmVzdWx0
LmV4ZWN1dGFibGVNZW1vcnkoKS0+c3RhcnQoKSwgcmVzdWx0LmV4ZWN1dGFibGVNZW1vcnkoKS0+
ZW5kKCkpOworICAgICAgICBkYXRhTG9nRigiSklUIGdlbmVyYXRlZCBjb2RlIGZvciAlcCBhdCBb
JXAsICVwKS5cbiIsIG1fY29kZUJsb2NrLCByZXN1bHQuZXhlY3V0YWJsZU1lbW9yeSgpLT5zdGFy
dCgpLnVudGFnZ2VkUHRyKCksIHJlc3VsdC5leGVjdXRhYmxlTWVtb3J5KCktPmVuZCgpLnVudGFn
Z2VkUHRyKCkpOwogCiAgICAgcmV0dXJuIENvbXBpbGF0aW9uU3VjY2Vzc2Z1bDsKIH0KSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUTWF0aElDLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRNYXRoSUMuaAkocmV2aXNpb24gMjMxMTMxKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRNYXRoSUMuaAkod29ya2luZyBjb3B5KQpAQCAt
MTM3LDcgKzEzNyw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgIC8vIFdlIGRvbid0IG5lZWQgYSBu
b3Agc2xlZCBoZXJlIGJlY2F1c2Ugbm9ib2R5IHNob3VsZCBiZSBqdW1waW5nIGludG8gdGhlIG1p
ZGRsZSBvZiBhbiBJQy4KICAgICAgICAgICAgIGJvb2wgbmVlZHNCcmFuY2hDb21wYWN0aW9uID0g
ZmFsc2U7CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChqaXQubV9hc3NlbWJsZXIuYnVmZmVy
KCkuY29kZVNpemUoKSA8PSBzdGF0aWNfY2FzdDxzaXplX3Q+KG1faW5saW5lU2l6ZSkpOwotICAg
ICAgICAgICAgTGlua0J1ZmZlciBsaW5rQnVmZmVyKGppdCwgbV9pbmxpbmVTdGFydC5kYXRhTG9j
YXRpb24oKSwgaml0Lm1fYXNzZW1ibGVyLmJ1ZmZlcigpLmNvZGVTaXplKCksIEpJVENvbXBpbGF0
aW9uTXVzdFN1Y2NlZWQsIG5lZWRzQnJhbmNoQ29tcGFjdGlvbik7CisgICAgICAgICAgICBMaW5r
QnVmZmVyIGxpbmtCdWZmZXIoaml0LCBtX2lubGluZVN0YXJ0LCBqaXQubV9hc3NlbWJsZXIuYnVm
ZmVyKCkuY29kZVNpemUoKSwgSklUQ29tcGlsYXRpb25NdXN0U3VjY2VlZCwgbmVlZHNCcmFuY2hD
b21wYWN0aW9uKTsKICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGxpbmtCdWZmZXIuaXNWYWxp
ZCgpKTsKICAgICAgICAgICAgIGxpbmtCdWZmZXIubGluayhqdW1wLCBDb2RlTG9jYXRpb25MYWJl
bDxKSVRTdHViUm91dGluZVB0clRhZz4obV9jb2RlLmNvZGUoKSkpOwogICAgICAgICAgICAgRklO
QUxJWkVfQ09ERShsaW5rQnVmZmVyLCBOb1B0clRhZywgIkpJVE1hdGhJQzogbGlua2luZyBjb25z
dGFudCBqdW1wIHRvIG91dCBvZiBsaW5lIHN0dWIiKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTQ1B0clRhZy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTQ1B0clRhZy5oCShyZXZpc2lvbiAyMzExMzEpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU0NQdHJUYWcuaAkod29ya2luZyBjb3B5KQpAQCAtMzcsNiAr
MzcsNyBAQCB1c2luZyBQdHJUYWcgPSBXVEY6OlB0clRhZzsKICAgICB2KEJ5dGVjb2RlUHRyVGFn
KSBcCiAgICAgdihEaXNhc3NlbWJseVB0clRhZykgXAogICAgIHYoRXhjZXB0aW9uSGFuZGxlclB0
clRhZykgXAorICAgIHYoRXhlY3V0YWJsZU1lbW9yeVB0clRhZykgXAogICAgIHYoSklUVGh1bmtQ
dHJUYWcpIFwKICAgICB2KEpJVFN0dWJSb3V0aW5lUHRyVGFnKSBcCiAgICAgdihKU0VudHJ5UHRy
VGFnKSBcCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQ2FsbGVlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQ2FsbGVlLmNwcAko
cmV2aXNpb24gMjMxMTMxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUNhbGxl
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1LDE0ICszNSwxNCBAQCBuYW1lc3BhY2UgSlNDIHsg
bmFtZXNwYWNlIFdhc20gewogQ2FsbGVlOjpDYWxsZWUoRW50cnlwb2ludCYmIGVudHJ5cG9pbnQp
CiAgICAgOiBtX2VudHJ5cG9pbnQoV1RGTW92ZShlbnRyeXBvaW50KSkKIHsKLSAgICByZWdpc3Rl
ckNvZGUobV9lbnRyeXBvaW50LmNvbXBpbGF0aW9uLT5jb2RlUmVmKCkuZXhlY3V0YWJsZU1lbW9y
eSgpLT5zdGFydCgpLCBtX2VudHJ5cG9pbnQuY29tcGlsYXRpb24tPmNvZGVSZWYoKS5leGVjdXRh
YmxlTWVtb3J5KCktPmVuZCgpKTsKKyAgICByZWdpc3RlckNvZGUobV9lbnRyeXBvaW50LmNvbXBp
bGF0aW9uLT5jb2RlUmVmKCkuZXhlY3V0YWJsZU1lbW9yeSgpLT5zdGFydCgpLnVudGFnZ2VkUHRy
KCksIG1fZW50cnlwb2ludC5jb21waWxhdGlvbi0+Y29kZVJlZigpLmV4ZWN1dGFibGVNZW1vcnko
KS0+ZW5kKCkudW50YWdnZWRQdHIoKSk7CiB9CiAKIENhbGxlZTo6Q2FsbGVlKEVudHJ5cG9pbnQm
JiBlbnRyeXBvaW50LCBzaXplX3QgaW5kZXgsIHN0ZDo6cGFpcjxjb25zdCBOYW1lKiwgUmVmUHRy
PE5hbWVTZWN0aW9uPj4mJiBuYW1lKQogICAgIDogbV9lbnRyeXBvaW50KFdURk1vdmUoZW50cnlw
b2ludCkpCiAgICAgLCBtX2luZGV4T3JOYW1lKGluZGV4LCBXVEZNb3ZlKG5hbWUpKQogewotICAg
IHJlZ2lzdGVyQ29kZShtX2VudHJ5cG9pbnQuY29tcGlsYXRpb24tPmNvZGVSZWYoKS5leGVjdXRh
YmxlTWVtb3J5KCktPnN0YXJ0KCksIG1fZW50cnlwb2ludC5jb21waWxhdGlvbi0+Y29kZVJlZigp
LmV4ZWN1dGFibGVNZW1vcnkoKS0+ZW5kKCkpOworICAgIHJlZ2lzdGVyQ29kZShtX2VudHJ5cG9p
bnQuY29tcGlsYXRpb24tPmNvZGVSZWYoKS5leGVjdXRhYmxlTWVtb3J5KCktPnN0YXJ0KCkudW50
YWdnZWRQdHIoKSwgbV9lbnRyeXBvaW50LmNvbXBpbGF0aW9uLT5jb2RlUmVmKCkuZXhlY3V0YWJs
ZU1lbW9yeSgpLT5lbmQoKS51bnRhZ2dlZFB0cigpKTsKIH0KIAogfSB9IC8vIG5hbWVzcGFjZSBK
U0M6Oldhc20KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21GYXVsdFNpZ25h
bEhhbmRsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dh
c21GYXVsdFNpZ25hbEhhbmRsZXIuY3BwCShyZXZpc2lvbiAyMzExMzEpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9XYXNtRmF1bHRTaWduYWxIYW5kbGVyLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNTksNyArNTksNyBAQCBzdGF0aWMgU2lnbmFsQWN0aW9uIHRyYXBIYW5kbGVyKFNpZ25h
bCwgCiAgICAgdm9pZCogZmF1bHRpbmdJbnN0cnVjdGlvbiA9IE1hY2hpbmVDb250ZXh0OjppbnN0
cnVjdGlvblBvaW50ZXIoY29udGV4dCkudW50YWdnZWRFeGVjdXRhYmxlQWRkcmVzcygpOwogICAg
IGRhdGFMb2dMbklmKFdhc21GYXVsdFNpZ25hbEhhbmRsZXJJbnRlcm5hbDo6dmVyYm9zZSwgInN0
YXJ0aW5nIGhhbmRsZXIgZm9yIGZhdWx0IGF0OiAiLCBSYXdQb2ludGVyKGZhdWx0aW5nSW5zdHJ1
Y3Rpb24pKTsKIAotICAgIGRhdGFMb2dMbklmKFdhc21GYXVsdFNpZ25hbEhhbmRsZXJJbnRlcm5h
bDo6dmVyYm9zZSwgIkpJVCBtZW1vcnkgc3RhcnQ6ICIsIFJhd1BvaW50ZXIocmVpbnRlcnByZXRf
Y2FzdDx2b2lkKj4oc3RhcnRPZkZpeGVkRXhlY3V0YWJsZU1lbW9yeVBvb2wpKSwgIiBlbmQ6ICIs
IFJhd1BvaW50ZXIocmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oZW5kT2ZGaXhlZEV4ZWN1dGFibGVN
ZW1vcnlQb29sKSkpOworICAgIGRhdGFMb2dMbklmKFdhc21GYXVsdFNpZ25hbEhhbmRsZXJJbnRl
cm5hbDo6dmVyYm9zZSwgIkpJVCBtZW1vcnkgc3RhcnQ6ICIsIFJhd1BvaW50ZXIoc3RhcnRPZkZp
eGVkRXhlY3V0YWJsZU1lbW9yeVBvb2woKSksICIgZW5kOiAiLCBSYXdQb2ludGVyKGVuZE9mRml4
ZWRFeGVjdXRhYmxlTWVtb3J5UG9vbCgpKSk7CiAgICAgLy8gRmlyc3Qgd2UgbmVlZCB0byBtYWtl
IHN1cmUgd2UgYXJlIGluIEpJVCBjb2RlIGJlZm9yZSB3ZSBjYW4gYXF1aXJlIGFueSBsb2Nrcy4g
T3RoZXJ3aXNlLAogICAgIC8vIHdlIG1pZ2h0IGhhdmUgY3Jhc2hlZCBpbiBjb2RlIHRoYXQgaXMg
YWxyZWFkeSBob2xkaW5nIG9uZSBvZiB0aGUgbG9ja3Mgd2Ugd2FudCB0byBhcXVpcmUuCiAgICAg
YXNzZXJ0SXNOb3RUYWdnZWQoZmF1bHRpbmdJbnN0cnVjdGlvbik7CkluZGV4OiBTb3VyY2UvV1RG
L0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL0NoYW5nZUxvZwkocmV2aXNpb24g
MjMxMTMxKQorKysgU291cmNlL1dURi9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyAr
MSw2MSBAQAorMjAxOC0wNC0yNyAgTWFyayBMYW0gIDxtYXJrLmxhbUBhcHBsZS5jb20+CisKKyAg
ICAgICAgQXBwbHkgUHRyVGFncyB0byB0aGUgTWV0YUFsbG9jYXRvciBhbmQgZnJpZW5kcy4KKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE4NTExMAorICAg
ICAgICA8cmRhcjovL3Byb2JsZW0vMzk1MzM4OTU+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgMS4gSW50cm9kdWNlIGEgTWV0YUFsbG9jYXRvclB0ciBz
bWFydCBwb2ludGVyIHRvIGRvIHBvaW50ZXIgdGFnZ2luZy4KKyAgICAgICAgMi4gVXNlIE1ldGFB
bGxvY2F0b3JQdHIgaW4gTWV0YUFsbG9jYXRvciBhbmQgTWV0YUFsbG9jYXRvckhhbmRsZS4KKwor
ICAgICAgICAqIFdURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIHd0Zi9D
TWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiB3dGYvTWV0YUFsbG9jYXRvci5jcHA6CisgICAgICAg
IChXVEY6Ok1ldGFBbGxvY2F0b3I6OnJlbGVhc2UpOgorICAgICAgICAoV1RGOjpNZXRhQWxsb2Nh
dG9ySGFuZGxlOjpNZXRhQWxsb2NhdG9ySGFuZGxlKToKKyAgICAgICAgKFdURjo6TWV0YUFsbG9j
YXRvckhhbmRsZTo6c2hyaW5rKToKKyAgICAgICAgKFdURjo6TWV0YUFsbG9jYXRvckhhbmRsZTo6
ZHVtcCBjb25zdCk6CisgICAgICAgIChXVEY6Ok1ldGFBbGxvY2F0b3I6OmFsbG9jYXRlKToKKyAg
ICAgICAgKFdURjo6TWV0YUFsbG9jYXRvcjo6ZmluZEFuZFJlbW92ZUZyZWVTcGFjZSk6CisgICAg
ICAgIChXVEY6Ok1ldGFBbGxvY2F0b3I6OmFkZEZyZWVTcGFjZUZyb21SZWxlYXNlZEhhbmRsZSk6
CisgICAgICAgIChXVEY6Ok1ldGFBbGxvY2F0b3I6OmFkZEZyZXNoRnJlZVNwYWNlKToKKyAgICAg
ICAgKFdURjo6TWV0YUFsbG9jYXRvcjo6ZGVidWdGcmVlU3BhY2VTaXplKToKKyAgICAgICAgKFdU
Rjo6TWV0YUFsbG9jYXRvcjo6YWRkRnJlZVNwYWNlKToKKyAgICAgICAgKFdURjo6TWV0YUFsbG9j
YXRvcjo6YWxsb2NGcmVlU3BhY2VOb2RlKToKKyAgICAgICAgKiB3dGYvTWV0YUFsbG9jYXRvci5o
OgorICAgICAgICAoV1RGOjpNZXRhQWxsb2NhdG9yVHJhY2tlcjo6ZmluZCk6CisgICAgICAgIChX
VEY6Ok1ldGFBbGxvY2F0b3I6OkZyZWVTcGFjZU5vZGU6OkZyZWVTcGFjZU5vZGUpOgorICAgICAg
ICAoV1RGOjpNZXRhQWxsb2NhdG9yOjpGcmVlU3BhY2VOb2RlOjpzaXplSW5CeXRlcyk6CisgICAg
ICAgIChXVEY6Ok1ldGFBbGxvY2F0b3I6OkZyZWVTcGFjZU5vZGU6OmtleSk6CisgICAgICAgICog
d3RmL01ldGFBbGxvY2F0b3JIYW5kbGUuaDoKKyAgICAgICAgKFdURjo6TWV0YUFsbG9jYXRvckhh
bmRsZTo6c3RhcnQgY29uc3QpOgorICAgICAgICAoV1RGOjpNZXRhQWxsb2NhdG9ySGFuZGxlOjpl
bmQgY29uc3QpOgorICAgICAgICAoV1RGOjpNZXRhQWxsb2NhdG9ySGFuZGxlOjpzdGFydEFzSW50
ZWdlciBjb25zdCk6CisgICAgICAgIChXVEY6Ok1ldGFBbGxvY2F0b3JIYW5kbGU6OmVuZEFzSW50
ZWdlciBjb25zdCk6CisgICAgICAgIChXVEY6Ok1ldGFBbGxvY2F0b3JIYW5kbGU6OnNpemVJbkJ5
dGVzIGNvbnN0KToKKyAgICAgICAgKFdURjo6TWV0YUFsbG9jYXRvckhhbmRsZTo6Y29udGFpbnNJ
bnRlZ2VyQWRkcmVzcyBjb25zdCk6CisgICAgICAgIChXVEY6Ok1ldGFBbGxvY2F0b3JIYW5kbGU6
OmtleSk6CisgICAgICAgICogd3RmL01ldGFBbGxvY2F0b3JQdHIuaDogQWRkZWQuCisgICAgICAg
IChXVEY6Ok1ldGFBbGxvY2F0b3JQdHI6Ok1ldGFBbGxvY2F0b3JQdHIpOgorICAgICAgICAoV1RG
OjpNZXRhQWxsb2NhdG9yUHRyOjogY29uc3QpOgorICAgICAgICAoV1RGOjpNZXRhQWxsb2NhdG9y
UHRyOjpvcGVyYXRvciBib29sIGNvbnN0KToKKyAgICAgICAgKFdURjo6TWV0YUFsbG9jYXRvclB0
cjo6b3BlcmF0b3IhIGNvbnN0KToKKyAgICAgICAgKFdURjo6TWV0YUFsbG9jYXRvclB0cjo6b3Bl
cmF0b3I9PSBjb25zdCk6CisgICAgICAgIChXVEY6Ok1ldGFBbGxvY2F0b3JQdHI6Om9wZXJhdG9y
IT0gY29uc3QpOgorICAgICAgICAoV1RGOjpNZXRhQWxsb2NhdG9yUHRyOjpvcGVyYXRvcisgY29u
c3QpOgorICAgICAgICAoV1RGOjpNZXRhQWxsb2NhdG9yUHRyOjpvcGVyYXRvci0gY29uc3QpOgor
ICAgICAgICAoV1RGOjpNZXRhQWxsb2NhdG9yUHRyOjpvcGVyYXRvcis9KToKKyAgICAgICAgKFdU
Rjo6TWV0YUFsbG9jYXRvclB0cjo6b3BlcmF0b3ItPSk6CisgICAgICAgIChXVEY6Ok1ldGFBbGxv
Y2F0b3JQdHI6OmlzRW1wdHlWYWx1ZSBjb25zdCk6CisgICAgICAgIChXVEY6Ok1ldGFBbGxvY2F0
b3JQdHI6OmlzRGVsZXRlZFZhbHVlIGNvbnN0KToKKyAgICAgICAgKFdURjo6TWV0YUFsbG9jYXRv
clB0cjo6aGFzaCBjb25zdCk6CisgICAgICAgIChXVEY6Ok1ldGFBbGxvY2F0b3JQdHI6OmVtcHR5
VmFsdWUpOgorICAgICAgICAoV1RGOjpNZXRhQWxsb2NhdG9yUHRyOjpkZWxldGVkVmFsdWUpOgor
ICAgICAgICAoV1RGOjpNZXRhQWxsb2NhdG9yUHRySGFzaDo6aGFzaCk6CisgICAgICAgIChXVEY6
Ok1ldGFBbGxvY2F0b3JQdHJIYXNoOjplcXVhbCk6CisgICAgICAgICogd3RmL1B0clRhZy5oOgor
CiAyMDE4LTA0LTI3ICBEYXZpZCBLaWx6ZXIgIDxkZGtpbHplckBhcHBsZS5jb20+CiAKICAgICAg
ICAgQWRkIGxvZ2dpbmcgd2hlbiBTcHJpbmdCb2FyZCBlbmFibGVzIFdlYlRocmVhZApJbmRleDog
U291cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAyMzExMzEp
CisrKyBTb3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNv
cHkpCkBAIC02MzQsNiArNjM0LDcgQEAKIAkJRkUwNUZBRkUxRkU1MDA3NTAwMDkzMjMwIC8qIFdU
RkFzc2VydGlvbnMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV1RG
QXNzZXJ0aW9ucy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZFMDVGQjA0MUZF
ODQ1MzIwMDA5MzIzMCAvKiBQb2lzb25lZFVuaXF1ZVB0ci5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBQb2lzb25lZFVuaXF1ZVB0ci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQlGRTc0OTdFNDIwOEZGQ0FBMDAwMzU2NUIgLyogUHRyVGFnLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFB0clRhZy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQlGRTc0OTdFRDIwOTE2MzA2MDAwMzU2NUIgLyogTWV0YUFsbG9jYXRvclB0ci5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBNZXRhQWxsb2NhdG9yUHRyLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZFODIyNTMwMUIyQTFFNUIwMEJBNjhGRCAvKiBOYWtlZFB0
ci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBOYWtlZFB0ci5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQlGRTg1NDE2QzFGQkUyODVCMDA4REE1REEgLyogUG9pc29u
ZWQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUG9pc29uZWQuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGRTg1NDE2RDFGQkUyODVDMDA4REE1REEg
LyogUG9pc29uZWQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUG9pc29uZWQu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTk2NSw2ICs5NjYsNyBAQAogCQkJCUE4
QTQ3MkNEMTUxQTgyNUIwMDQxMjNGRiAvKiBNZXRhQWxsb2NhdG9yLmNwcCAqLywKIAkJCQlBOEE0
NzJDRTE1MUE4MjVCMDA0MTIzRkYgLyogTWV0YUFsbG9jYXRvci5oICovLAogCQkJCUE4QTQ3MkNG
MTUxQTgyNUIwMDQxMjNGRiAvKiBNZXRhQWxsb2NhdG9ySGFuZGxlLmggKi8sCisJCQkJRkU3NDk3
RUQyMDkxNjMwNjAwMDM1NjVCIC8qIE1ldGFBbGxvY2F0b3JQdHIuaCAqLywKIAkJCQkwRjY2QjI4
MjFEQzk3QkFCMDA0QTFEM0YgLyogTW9ub3RvbmljVGltZS5jcHAgKi8sCiAJCQkJMEY2NkIyODMx
REM5N0JBQjAwNEExRDNGIC8qIE1vbm90b25pY1RpbWUuaCAqLywKIAkJCQlGRTgyMjUzMDFCMkEx
RTVCMDBCQTY4RkQgLyogTmFrZWRQdHIuaCAqLywKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL0NNYWtl
TGlzdHMudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL0NNYWtlTGlzdHMudHh0CShy
ZXZpc2lvbiAyMzExMzEpCisrKyBTb3VyY2UvV1RGL3d0Zi9DTWFrZUxpc3RzLnR4dAkod29ya2lu
ZyBjb3B5KQpAQCAtMTI5LDYgKzEyOSw3IEBAIHNldChXVEZfUFVCTElDX0hFQURFUlMKICAgICBN
ZXNzYWdlUXVldWUuaAogICAgIE1ldGFBbGxvY2F0b3IuaAogICAgIE1ldGFBbGxvY2F0b3JIYW5k
bGUuaAorICAgIE1ldGFBbGxvY2F0b3JQdHIuaAogICAgIE1vbm90b25pY1RpbWUuaAogICAgIE5h
a2VkUHRyLmgKICAgICBOYXR1cmFsTG9vcHMuaApJbmRleDogU291cmNlL1dURi93dGYvTWV0YUFs
bG9jYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvTWV0YUFsbG9jYXRvci5j
cHAJKHJldmlzaW9uIDIzMTEzMSkKKysrIFNvdXJjZS9XVEYvd3RmL01ldGFBbGxvY2F0b3IuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
MSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEt
MjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKQEAgLTYyLDggKzYyLDEwIEBAIEFMV0FZU19JTkxJTkUgdm9pZCBNZXRhQWxs
b2NhdG9yOjpyZWxlYXMKIHsKICAgICBMb2NrSG9sZGVyIGxvY2tlcigmbV9sb2NrKTsKICAgICBp
ZiAoaGFuZGxlLT5zaXplSW5CeXRlcygpKSB7Ci0gICAgICAgIGRlY3JlbWVudFBhZ2VPY2N1cGFu
Y3koaGFuZGxlLT5zdGFydCgpLCBoYW5kbGUtPnNpemVJbkJ5dGVzKCkpOwotICAgICAgICBhZGRG
cmVlU3BhY2VGcm9tUmVsZWFzZWRIYW5kbGUoaGFuZGxlLT5zdGFydCgpLCBoYW5kbGUtPnNpemVJ
bkJ5dGVzKCkpOworICAgICAgICB2b2lkKiBzdGFydCA9IGhhbmRsZS0+c3RhcnQoKS51bnRhZ2dl
ZFB0cigpOworICAgICAgICBzaXplX3Qgc2l6ZUluQnl0ZXMgPSBoYW5kbGUtPnNpemVJbkJ5dGVz
KCk7CisgICAgICAgIGRlY3JlbWVudFBhZ2VPY2N1cGFuY3koc3RhcnQsIHNpemVJbkJ5dGVzKTsK
KyAgICAgICAgYWRkRnJlZVNwYWNlRnJvbVJlbGVhc2VkSGFuZGxlKEZyZWVTcGFjZVB0cihzdGFy
dCksIHNpemVJbkJ5dGVzKTsKICAgICB9CiAKICAgICBpZiAoVU5MSUtFTFkoISFtX3RyYWNrZXIp
KQpAQCAtNzMsNyArNzUsNyBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgTWV0YUFsbG9jYXRvcjo6cmVs
ZWFzCiBNZXRhQWxsb2NhdG9ySGFuZGxlOjpNZXRhQWxsb2NhdG9ySGFuZGxlKE1ldGFBbGxvY2F0
b3IqIGFsbG9jYXRvciwgdm9pZCogc3RhcnQsIHNpemVfdCBzaXplSW5CeXRlcywgdm9pZCogb3du
ZXJVSUQpCiAgICAgOiBtX2FsbG9jYXRvcihhbGxvY2F0b3IpCiAgICAgLCBtX3N0YXJ0KHN0YXJ0
KQotICAgICwgbV9zaXplSW5CeXRlcyhzaXplSW5CeXRlcykKKyAgICAsIG1fZW5kKHJlaW50ZXJw
cmV0X2Nhc3Q8Y2hhcio+KHN0YXJ0KSArIHNpemVJbkJ5dGVzKQogICAgICwgbV9vd25lclVJRChv
d25lclVJRCkKIHsKICAgICBBU1NFUlQoYWxsb2NhdG9yKTsKQEAgLTg5LDMzICs5MSwzNCBAQCBN
ZXRhQWxsb2NhdG9ySGFuZGxlOjp+TWV0YUFsbG9jYXRvckhhbmRsCiAKIHZvaWQgTWV0YUFsbG9j
YXRvckhhbmRsZTo6c2hyaW5rKHNpemVfdCBuZXdTaXplSW5CeXRlcykKIHsKLSAgICBBU1NFUlQo
bmV3U2l6ZUluQnl0ZXMgPD0gbV9zaXplSW5CeXRlcyk7Ci0gICAgCisgICAgc2l6ZV90IHNpemVJ
bkJ5dGVzID0gdGhpcy0+c2l6ZUluQnl0ZXMoKTsKKyAgICBBU1NFUlQobmV3U2l6ZUluQnl0ZXMg
PD0gc2l6ZUluQnl0ZXMpOworCiAgICAgTG9ja0hvbGRlciBsb2NrZXIoJm1fYWxsb2NhdG9yLT5t
X2xvY2spOwogCiAgICAgbmV3U2l6ZUluQnl0ZXMgPSBtX2FsbG9jYXRvci0+cm91bmRVcChuZXdT
aXplSW5CeXRlcyk7CiAgICAgCi0gICAgQVNTRVJUKG5ld1NpemVJbkJ5dGVzIDw9IG1fc2l6ZUlu
Qnl0ZXMpOwotICAgIAotICAgIGlmIChuZXdTaXplSW5CeXRlcyA9PSBtX3NpemVJbkJ5dGVzKQor
ICAgIEFTU0VSVChuZXdTaXplSW5CeXRlcyA8PSBzaXplSW5CeXRlcyk7CisKKyAgICBpZiAobmV3
U2l6ZUluQnl0ZXMgPT0gc2l6ZUluQnl0ZXMpCiAgICAgICAgIHJldHVybjsKLSAgICAKLSAgICB1
aW50cHRyX3QgZnJlZVN0YXJ0ID0gcmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KG1fc3RhcnQp
ICsgbmV3U2l6ZUluQnl0ZXM7Ci0gICAgc2l6ZV90IGZyZWVTaXplID0gbV9zaXplSW5CeXRlcyAt
IG5ld1NpemVJbkJ5dGVzOworCisgICAgdWludHB0cl90IGZyZWVTdGFydCA9IG1fc3RhcnQudW50
YWdnZWRQdHI8dWludHB0cl90PigpICsgbmV3U2l6ZUluQnl0ZXM7CisgICAgc2l6ZV90IGZyZWVT
aXplID0gc2l6ZUluQnl0ZXMgLSBuZXdTaXplSW5CeXRlczsKICAgICB1aW50cHRyX3QgZnJlZUVu
ZCA9IGZyZWVTdGFydCArIGZyZWVTaXplOwogICAgIAogICAgIHVpbnRwdHJfdCBmaXJzdENvbXBs
ZXRlbHlGcmVlUGFnZSA9IChmcmVlU3RhcnQgKyBtX2FsbG9jYXRvci0+bV9wYWdlU2l6ZSAtIDEp
ICYgfihtX2FsbG9jYXRvci0+bV9wYWdlU2l6ZSAtIDEpOwogICAgIGlmIChmaXJzdENvbXBsZXRl
bHlGcmVlUGFnZSA8IGZyZWVFbmQpCiAgICAgICAgIG1fYWxsb2NhdG9yLT5kZWNyZW1lbnRQYWdl
T2NjdXBhbmN5KHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGZpcnN0Q29tcGxldGVseUZyZWVQYWdl
KSwgZnJlZVNpemUgLSAoZmlyc3RDb21wbGV0ZWx5RnJlZVBhZ2UgLSBmcmVlU3RhcnQpKTsKLSAg
ICAKLSAgICBtX2FsbG9jYXRvci0+YWRkRnJlZVNwYWNlRnJvbVJlbGVhc2VkSGFuZGxlKHJlaW50
ZXJwcmV0X2Nhc3Q8dm9pZCo+KGZyZWVTdGFydCksIGZyZWVTaXplKTsKLSAgICAKLSAgICBtX3Np
emVJbkJ5dGVzID0gbmV3U2l6ZUluQnl0ZXM7CisKKyAgICBtX2FsbG9jYXRvci0+YWRkRnJlZVNw
YWNlRnJvbVJlbGVhc2VkSGFuZGxlKE1ldGFBbGxvY2F0b3I6OkZyZWVTcGFjZVB0cihmcmVlU3Rh
cnQpLCBmcmVlU2l6ZSk7CisKKyAgICBtX2VuZCA9IG1fc3RhcnQgKyBuZXdTaXplSW5CeXRlczsK
IH0KIAogdm9pZCBNZXRhQWxsb2NhdG9ySGFuZGxlOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNv
bnN0CiB7Ci0gICAgb3V0LnByaW50KFJhd1BvaW50ZXIoc3RhcnQoKSksICIuLi4iLCBSYXdQb2lu
dGVyKGVuZCgpKSk7CisgICAgb3V0LnByaW50KFJhd1BvaW50ZXIoc3RhcnQoKS51bnRhZ2dlZFB0
cigpKSwgIi4uLiIsIFJhd1BvaW50ZXIoZW5kKCkudW50YWdnZWRQdHIoKSkpOwogfQogCiBNZXRh
QWxsb2NhdG9yOjpNZXRhQWxsb2NhdG9yKHNpemVfdCBhbGxvY2F0aW9uR3JhbnVsZSwgc2l6ZV90
IHBhZ2VTaXplKQpAQCAtMTU2LDggKzE1OSw4IEBAIFJlZlB0cjxNZXRhQWxsb2NhdG9ySGFuZGxl
PiBNZXRhQWxsb2NhdG8KICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgCiAgICAgc2l6ZUlu
Qnl0ZXMgPSByb3VuZFVwKHNpemVJbkJ5dGVzKTsKLSAgICAKLSAgICB2b2lkKiBzdGFydCA9IGZp
bmRBbmRSZW1vdmVGcmVlU3BhY2Uoc2l6ZUluQnl0ZXMpOworCisgICAgRnJlZVNwYWNlUHRyIHN0
YXJ0ID0gZmluZEFuZFJlbW92ZUZyZWVTcGFjZShzaXplSW5CeXRlcyk7CiAgICAgaWYgKCFzdGFy
dCkgewogICAgICAgICBzaXplX3QgcmVxdWVzdGVkTnVtYmVyT2ZQYWdlcyA9IChzaXplSW5CeXRl
cyArIG1fcGFnZVNpemUgLSAxKSA+PiBtX2xvZ1BhZ2VTaXplOwogICAgICAgICBzaXplX3QgbnVt
YmVyT2ZQYWdlcyA9IHJlcXVlc3RlZE51bWJlck9mUGFnZXM7CkBAIC0xNzUsMTggKzE3OCwxOCBA
QCBSZWZQdHI8TWV0YUFsbG9jYXRvckhhbmRsZT4gTWV0YUFsbG9jYXRvCiAgICAgICAgIG1fYnl0
ZXNSZXNlcnZlZCArPSByb3VuZGVkVXBTaXplOwogICAgICAgICAKICAgICAgICAgaWYgKHJvdW5k
ZWRVcFNpemUgPiBzaXplSW5CeXRlcykgewotICAgICAgICAgICAgdm9pZCogZnJlZVNwYWNlU3Rh
cnQgPSByZWludGVycHJldF9jYXN0PHZvaWQqPihyZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4o
c3RhcnQpICsgc2l6ZUluQnl0ZXMpOworICAgICAgICAgICAgRnJlZVNwYWNlUHRyIGZyZWVTcGFj
ZVN0YXJ0ID0gc3RhcnQgKyBzaXplSW5CeXRlczsKICAgICAgICAgICAgIHNpemVfdCBmcmVlU3Bh
Y2VTaXplID0gcm91bmRlZFVwU2l6ZSAtIHNpemVJbkJ5dGVzOwogICAgICAgICAgICAgYWRkRnJl
ZVNwYWNlKGZyZWVTcGFjZVN0YXJ0LCBmcmVlU3BhY2VTaXplKTsKICAgICAgICAgfQogICAgIH0K
LSAgICBpbmNyZW1lbnRQYWdlT2NjdXBhbmN5KHN0YXJ0LCBzaXplSW5CeXRlcyk7CisgICAgaW5j
cmVtZW50UGFnZU9jY3VwYW5jeShzdGFydC51bnRhZ2dlZFB0cigpLCBzaXplSW5CeXRlcyk7CiAg
ICAgbV9ieXRlc0FsbG9jYXRlZCArPSBzaXplSW5CeXRlczsKICNpZiBFTkFCTEUoTUVUQV9BTExP
Q0FUT1JfUFJPRklMRSkKICAgICBtX251bUFsbG9jYXRpb25zKys7CiAjZW5kaWYKIAotICAgIGF1
dG8gaGFuZGxlID0gYWRvcHRSZWYoKm5ldyBNZXRhQWxsb2NhdG9ySGFuZGxlKHRoaXMsIHN0YXJ0
LCBzaXplSW5CeXRlcywgb3duZXJVSUQpKTsKKyAgICBhdXRvIGhhbmRsZSA9IGFkb3B0UmVmKCpu
ZXcgTWV0YUFsbG9jYXRvckhhbmRsZSh0aGlzLCBzdGFydC51bnRhZ2dlZFB0cigpLCBzaXplSW5C
eXRlcywgb3duZXJVSUQpKTsKIAogICAgIGlmIChVTkxJS0VMWSghIW1fdHJhY2tlcikpCiAgICAg
ICAgIG1fdHJhY2tlci0+bm90aWZ5KGhhbmRsZS5wdHIoKSk7CkBAIC0yMDQsMjUgKzIwNywyNiBA
QCBNZXRhQWxsb2NhdG9yOjpTdGF0aXN0aWNzIE1ldGFBbGxvY2F0b3I6CiAgICAgcmV0dXJuIHJl
c3VsdDsKIH0KIAotdm9pZCogTWV0YUFsbG9jYXRvcjo6ZmluZEFuZFJlbW92ZUZyZWVTcGFjZShz
aXplX3Qgc2l6ZUluQnl0ZXMpCitNZXRhQWxsb2NhdG9yOjpGcmVlU3BhY2VQdHIgTWV0YUFsbG9j
YXRvcjo6ZmluZEFuZFJlbW92ZUZyZWVTcGFjZShzaXplX3Qgc2l6ZUluQnl0ZXMpCiB7CiAgICAg
RnJlZVNwYWNlTm9kZSogbm9kZSA9IG1fZnJlZVNwYWNlU2l6ZU1hcC5maW5kTGVhc3RHcmVhdGVy
VGhhbk9yRXF1YWwoc2l6ZUluQnl0ZXMpOwogICAgIAogICAgIGlmICghbm9kZSkKICAgICAgICAg
cmV0dXJuIDA7CiAgICAgCi0gICAgQVNTRVJUKG5vZGUtPm1fc2l6ZUluQnl0ZXMgPj0gc2l6ZUlu
Qnl0ZXMpOwotICAgIAorICAgIHNpemVfdCBub2RlU2l6ZUluQnl0ZXMgPSBub2RlLT5zaXplSW5C
eXRlcygpOworICAgIEFTU0VSVChub2RlU2l6ZUluQnl0ZXMgPj0gc2l6ZUluQnl0ZXMpOworCiAg
ICAgbV9mcmVlU3BhY2VTaXplTWFwLnJlbW92ZShub2RlKTsKLSAgICAKLSAgICB2b2lkKiByZXN1
bHQ7Ci0gICAgCi0gICAgaWYgKG5vZGUtPm1fc2l6ZUluQnl0ZXMgPT0gc2l6ZUluQnl0ZXMpIHsK
KworICAgIEZyZWVTcGFjZVB0ciByZXN1bHQ7CisKKyAgICBpZiAobm9kZVNpemVJbkJ5dGVzID09
IHNpemVJbkJ5dGVzKSB7CiAgICAgICAgIC8vIEVhc3kgY2FzZTogcGVyZmVjdCBmaXQsIHNvIGp1
c3QgcmVtb3ZlIHRoZSBub2RlIGVudGlyZWx5LgogICAgICAgICByZXN1bHQgPSBub2RlLT5tX3N0
YXJ0OwogICAgICAgICAKICAgICAgICAgbV9mcmVlU3BhY2VTdGFydEFkZHJlc3NNYXAucmVtb3Zl
KG5vZGUtPm1fc3RhcnQpOwotICAgICAgICBtX2ZyZWVTcGFjZUVuZEFkZHJlc3NNYXAucmVtb3Zl
KHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90Pihub2Rl
LT5tX3N0YXJ0KSArIG5vZGUtPm1fc2l6ZUluQnl0ZXMpKTsKKyAgICAgICAgbV9mcmVlU3BhY2VF
bmRBZGRyZXNzTWFwLnJlbW92ZShub2RlLT5tX2VuZCk7CiAgICAgICAgIGZyZWVGcmVlU3BhY2VO
b2RlKG5vZGUpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIC8vIFRyeSB0byBiZSBhIGdvb2QgY2l0
aXplbiBhbmQgZW5zdXJlIHRoYXQgdGhlIHJldHVybmVkIGNodW5rIG9mIG1lbW9yeQpAQCAtMjMy
LDMyICsyMzYsMzIgQEAgdm9pZCogTWV0YUFsbG9jYXRvcjo6ZmluZEFuZFJlbW92ZUZyZWVTcAog
ICAgICAgICAvLyBvZiBjb21taXR0ZWQgcGFnZXMsIHNpbmNlIGluIHRoZSBsb25nIHJ1biwgc21h
bGxlciBmcmFnbWVudGF0aW9uIG1lYW5zCiAgICAgICAgIC8vIGZld2VyIGNvbW1pdHRlZCBwYWdl
cyBhbmQgZmV3ZXIgZmFpbHVyZXMgaW4gZ2VuZXJhbC4KICAgICAgICAgCi0gICAgICAgIHVpbnRw
dHJfdCBmaXJzdFBhZ2UgPSByZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4obm9kZS0+bV9zdGFy
dCkgPj4gbV9sb2dQYWdlU2l6ZTsKLSAgICAgICAgdWludHB0cl90IGxhc3RQYWdlID0gKHJlaW50
ZXJwcmV0X2Nhc3Q8dWludHB0cl90Pihub2RlLT5tX3N0YXJ0KSArIG5vZGUtPm1fc2l6ZUluQnl0
ZXMgLSAxKSA+PiBtX2xvZ1BhZ2VTaXplOwotICAgIAotICAgICAgICB1aW50cHRyX3QgbGFzdFBh
Z2VGb3JMZWZ0QWxsb2NhdGlvbiA9IChyZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4obm9kZS0+
bV9zdGFydCkgKyBzaXplSW5CeXRlcyAtIDEpID4+IG1fbG9nUGFnZVNpemU7Ci0gICAgICAgIHVp
bnRwdHJfdCBmaXJzdFBhZ2VGb3JSaWdodEFsbG9jYXRpb24gPSAocmVpbnRlcnByZXRfY2FzdDx1
aW50cHRyX3Q+KG5vZGUtPm1fc3RhcnQpICsgbm9kZS0+bV9zaXplSW5CeXRlcyAtIHNpemVJbkJ5
dGVzKSA+PiBtX2xvZ1BhZ2VTaXplOworICAgICAgICB1aW50cHRyX3Qgbm9kZVN0YXJ0QXNJbnQg
PSBub2RlLT5tX3N0YXJ0LnVudGFnZ2VkUHRyPHVpbnRwdHJfdD4oKTsKKyAgICAgICAgdWludHB0
cl90IGZpcnN0UGFnZSA9IG5vZGVTdGFydEFzSW50ID4+IG1fbG9nUGFnZVNpemU7CisgICAgICAg
IHVpbnRwdHJfdCBsYXN0UGFnZSA9IChub2RlU3RhcnRBc0ludCArIG5vZGVTaXplSW5CeXRlcyAt
IDEpID4+IG1fbG9nUGFnZVNpemU7CisKKyAgICAgICAgdWludHB0cl90IGxhc3RQYWdlRm9yTGVm
dEFsbG9jYXRpb24gPSAobm9kZVN0YXJ0QXNJbnQgKyBzaXplSW5CeXRlcyAtIDEpID4+IG1fbG9n
UGFnZVNpemU7CisgICAgICAgIHVpbnRwdHJfdCBmaXJzdFBhZ2VGb3JSaWdodEFsbG9jYXRpb24g
PSAobm9kZVN0YXJ0QXNJbnQgKyBub2RlU2l6ZUluQnl0ZXMgLSBzaXplSW5CeXRlcykgPj4gbV9s
b2dQYWdlU2l6ZTsKICAgICAgICAgCiAgICAgICAgIGlmIChsYXN0UGFnZUZvckxlZnRBbGxvY2F0
aW9uIC0gZmlyc3RQYWdlICsgMSA8PSBsYXN0UGFnZSAtIGZpcnN0UGFnZUZvclJpZ2h0QWxsb2Nh
dGlvbiArIDEpIHsKICAgICAgICAgICAgIC8vIEFsbG9jYXRlIGluIHRoZSBsZWZ0IHNpZGUgb2Yg
dGhlIHJldHVybmVkIGNodW5rLCBhbmQgc2xpZGUgdGhlIG5vZGUgdG8gdGhlIHJpZ2h0LgogICAg
ICAgICAgICAgcmVzdWx0ID0gbm9kZS0+bV9zdGFydDsKICAgICAgICAgICAgIAogICAgICAgICAg
ICAgbV9mcmVlU3BhY2VTdGFydEFkZHJlc3NNYXAucmVtb3ZlKG5vZGUtPm1fc3RhcnQpOwotICAg
ICAgICAgICAgCi0gICAgICAgICAgICBub2RlLT5tX3NpemVJbkJ5dGVzIC09IHNpemVJbkJ5dGVz
OwotICAgICAgICAgICAgbm9kZS0+bV9zdGFydCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHJl
aW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90Pihub2RlLT5tX3N0YXJ0KSArIHNpemVJbkJ5dGVzKTsK
LSAgICAgICAgICAgIAorCisgICAgICAgICAgICBub2RlLT5tX3N0YXJ0ICs9IHNpemVJbkJ5dGVz
OworCiAgICAgICAgICAgICBtX2ZyZWVTcGFjZVNpemVNYXAuaW5zZXJ0KG5vZGUpOwogICAgICAg
ICAgICAgbV9mcmVlU3BhY2VTdGFydEFkZHJlc3NNYXAuYWRkKG5vZGUtPm1fc3RhcnQsIG5vZGUp
OwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgLy8gQWxsb2NhdGUgaW4gdGhlIHJpZ2h0
IHNpemUgb2YgdGhlIHJldHVybmVkIGNodW5rLCBhbmQgc2xpZGUgdGhlIG5vZGUgdG8gdGhlIGxl
ZnQ7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIHJlc3VsdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8
dm9pZCo+KHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90Pihub2RlLT5tX3N0YXJ0KSArIG5vZGUt
Pm1fc2l6ZUluQnl0ZXMgLSBzaXplSW5CeXRlcyk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAg
IG1fZnJlZVNwYWNlRW5kQWRkcmVzc01hcC5yZW1vdmUocmVpbnRlcnByZXRfY2FzdDx2b2lkKj4o
cmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KG5vZGUtPm1fc3RhcnQpICsgbm9kZS0+bV9zaXpl
SW5CeXRlcykpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBub2RlLT5tX3NpemVJbkJ5dGVz
IC09IHNpemVJbkJ5dGVzOwotICAgICAgICAgICAgCisKKyAgICAgICAgICAgIHJlc3VsdCA9IG5v
ZGUtPm1fZW5kIC0gc2l6ZUluQnl0ZXM7CisKKyAgICAgICAgICAgIG1fZnJlZVNwYWNlRW5kQWRk
cmVzc01hcC5yZW1vdmUobm9kZS0+bV9lbmQpOworCisgICAgICAgICAgICBub2RlLT5tX2VuZCA9
IHJlc3VsdDsKKwogICAgICAgICAgICAgbV9mcmVlU3BhY2VTaXplTWFwLmluc2VydChub2RlKTsK
ICAgICAgICAgICAgIG1fZnJlZVNwYWNlRW5kQWRkcmVzc01hcC5hZGQocmVzdWx0LCBub2RlKTsK
ICAgICAgICAgfQpAQCAtMjcwLDcgKzI3NCw3IEBAIHZvaWQqIE1ldGFBbGxvY2F0b3I6OmZpbmRB
bmRSZW1vdmVGcmVlU3AKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi12b2lkIE1ldGFBbGxvY2F0
b3I6OmFkZEZyZWVTcGFjZUZyb21SZWxlYXNlZEhhbmRsZSh2b2lkKiBzdGFydCwgc2l6ZV90IHNp
emVJbkJ5dGVzKQordm9pZCBNZXRhQWxsb2NhdG9yOjphZGRGcmVlU3BhY2VGcm9tUmVsZWFzZWRI
YW5kbGUoRnJlZVNwYWNlUHRyIHN0YXJ0LCBzaXplX3Qgc2l6ZUluQnl0ZXMpCiB7CiAjaWYgRU5B
QkxFKE1FVEFfQUxMT0NBVE9SX1BST0ZJTEUpCiAgICAgbV9udW1GcmVlcysrOwpAQCAtMjgzLDcg
KzI4Nyw3IEBAIHZvaWQgTWV0YUFsbG9jYXRvcjo6YWRkRnJlc2hGcmVlU3BhY2Uodm8KIHsKICAg
ICBMb2NrSG9sZGVyIGxvY2tlcigmbV9sb2NrKTsKICAgICBtX2J5dGVzUmVzZXJ2ZWQgKz0gc2l6
ZUluQnl0ZXM7Ci0gICAgYWRkRnJlZVNwYWNlKHN0YXJ0LCBzaXplSW5CeXRlcyk7CisgICAgYWRk
RnJlZVNwYWNlKEZyZWVTcGFjZVB0cihzdGFydCksIHNpemVJbkJ5dGVzKTsKIH0KIAogc2l6ZV90
IE1ldGFBbGxvY2F0b3I6OmRlYnVnRnJlZVNwYWNlU2l6ZSgpCkBAIC0yOTIsNyArMjk2LDcgQEAg
c2l6ZV90IE1ldGFBbGxvY2F0b3I6OmRlYnVnRnJlZVNwYWNlU2l6ZQogICAgIExvY2tIb2xkZXIg
bG9ja2VyKCZtX2xvY2spOwogICAgIHNpemVfdCByZXN1bHQgPSAwOwogICAgIGZvciAoRnJlZVNw
YWNlTm9kZSogbm9kZSA9IG1fZnJlZVNwYWNlU2l6ZU1hcC5maXJzdCgpOyBub2RlOyBub2RlID0g
bm9kZS0+c3VjY2Vzc29yKCkpCi0gICAgICAgIHJlc3VsdCArPSBub2RlLT5tX3NpemVJbkJ5dGVz
OworICAgICAgICByZXN1bHQgKz0gbm9kZS0+c2l6ZUluQnl0ZXMoKTsKICAgICByZXR1cm4gcmVz
dWx0OwogI2Vsc2UKICAgICBDUkFTSCgpOwpAQCAtMzAwLDI1ICszMDQsMjMgQEAgc2l6ZV90IE1l
dGFBbGxvY2F0b3I6OmRlYnVnRnJlZVNwYWNlU2l6ZQogI2VuZGlmCiB9CiAKLXZvaWQgTWV0YUFs
bG9jYXRvcjo6YWRkRnJlZVNwYWNlKHZvaWQqIHN0YXJ0LCBzaXplX3Qgc2l6ZUluQnl0ZXMpCit2
b2lkIE1ldGFBbGxvY2F0b3I6OmFkZEZyZWVTcGFjZShGcmVlU3BhY2VQdHIgc3RhcnQsIHNpemVf
dCBzaXplSW5CeXRlcykKIHsKLSAgICB2b2lkKiBlbmQgPSByZWludGVycHJldF9jYXN0PHZvaWQq
PihyZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4oc3RhcnQpICsgc2l6ZUluQnl0ZXMpOwotICAg
IAotICAgIEhhc2hNYXA8dm9pZCosIEZyZWVTcGFjZU5vZGUqPjo6aXRlcmF0b3IgbGVmdE5laWdo
Ym9yID0gbV9mcmVlU3BhY2VFbmRBZGRyZXNzTWFwLmZpbmQoc3RhcnQpOwotICAgIEhhc2hNYXA8
dm9pZCosIEZyZWVTcGFjZU5vZGUqPjo6aXRlcmF0b3IgcmlnaHROZWlnaGJvciA9IG1fZnJlZVNw
YWNlU3RhcnRBZGRyZXNzTWFwLmZpbmQoZW5kKTsKLSAgICAKKyAgICBGcmVlU3BhY2VQdHIgZW5k
ID0gc3RhcnQgKyBzaXplSW5CeXRlczsKKworICAgIEhhc2hNYXA8RnJlZVNwYWNlUHRyLCBGcmVl
U3BhY2VOb2RlKj46Oml0ZXJhdG9yIGxlZnROZWlnaGJvciA9IG1fZnJlZVNwYWNlRW5kQWRkcmVz
c01hcC5maW5kKHN0YXJ0KTsKKyAgICBIYXNoTWFwPEZyZWVTcGFjZVB0ciwgRnJlZVNwYWNlTm9k
ZSo+OjppdGVyYXRvciByaWdodE5laWdoYm9yID0gbV9mcmVlU3BhY2VTdGFydEFkZHJlc3NNYXAu
ZmluZChlbmQpOworCiAgICAgaWYgKGxlZnROZWlnaGJvciAhPSBtX2ZyZWVTcGFjZUVuZEFkZHJl
c3NNYXAuZW5kKCkpIHsKICAgICAgICAgLy8gV2UgaGF2ZSBzb21ldGhpbmcgd2UgY2FuIGNvYWxl
c2NlIHdpdGggb24gdGhlIGxlZnQuIFJlbW92ZSBpdCBmcm9tIHRoZSB0cmVlLCBhbmQKICAgICAg
ICAgLy8gcmVtb3ZlIGl0cyBlbmQgZnJvbSB0aGUgZW5kIGFkZHJlc3MgbWFwLgogICAgICAgICAK
LSAgICAgICAgQVNTRVJUKHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHJlaW50ZXJwcmV0X2Nhc3Q8
dWludHB0cl90PihsZWZ0TmVpZ2hib3ItPnZhbHVlLT5tX3N0YXJ0KSArIGxlZnROZWlnaGJvci0+
dmFsdWUtPm1fc2l6ZUluQnl0ZXMpID09IGxlZnROZWlnaGJvci0+a2V5KTsKLSAgICAgICAgCisg
ICAgICAgIEFTU0VSVChsZWZ0TmVpZ2hib3ItPnZhbHVlLT5tX2VuZCA9PSBsZWZ0TmVpZ2hib3It
PmtleSk7CisKICAgICAgICAgRnJlZVNwYWNlTm9kZSogbGVmdE5vZGUgPSBsZWZ0TmVpZ2hib3It
PnZhbHVlOwotICAgICAgICAKLSAgICAgICAgdm9pZCogbGVmdFN0YXJ0ID0gbGVmdE5vZGUtPm1f
c3RhcnQ7Ci0gICAgICAgIHNpemVfdCBsZWZ0U2l6ZSA9IGxlZnROb2RlLT5tX3NpemVJbkJ5dGVz
OwotICAgICAgICB2b2lkKiBsZWZ0RW5kID0gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4ocmVpbnRl
cnByZXRfY2FzdDx1aW50cHRyX3Q+KGxlZnRTdGFydCkgKyBsZWZ0U2l6ZSk7Ci0gICAgICAgIAor
CisgICAgICAgIEZyZWVTcGFjZVB0ciBsZWZ0RW5kID0gbGVmdE5vZGUtPm1fZW5kOworCiAgICAg
ICAgIEFTU0VSVChsZWZ0RW5kID09IHN0YXJ0KTsKICAgICAgICAgCiAgICAgICAgIG1fZnJlZVNw
YWNlU2l6ZU1hcC5yZW1vdmUobGVmdE5vZGUpOwpAQCAtMzMyLDI2ICszMzQsMjYgQEAgdm9pZCBN
ZXRhQWxsb2NhdG9yOjphZGRGcmVlU3BhY2Uodm9pZCogcwogICAgICAgICAgICAgQVNTRVJUKHJp
Z2h0TmVpZ2hib3ItPnZhbHVlLT5tX3N0YXJ0ID09IHJpZ2h0TmVpZ2hib3ItPmtleSk7CiAgICAg
ICAgICAgICAKICAgICAgICAgICAgIEZyZWVTcGFjZU5vZGUqIHJpZ2h0Tm9kZSA9IHJpZ2h0TmVp
Z2hib3ItPnZhbHVlOwotICAgICAgICAgICAgdm9pZCogcmlnaHRTdGFydCA9IHJpZ2h0TmVpZ2hi
b3ItPmtleTsKLSAgICAgICAgICAgIHNpemVfdCByaWdodFNpemUgPSByaWdodE5vZGUtPm1fc2l6
ZUluQnl0ZXM7Ci0gICAgICAgICAgICB2b2lkKiByaWdodEVuZCA9IHJlaW50ZXJwcmV0X2Nhc3Q8
dm9pZCo+KHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90PihyaWdodFN0YXJ0KSArIHJpZ2h0U2l6
ZSk7Ci0gICAgICAgICAgICAKKyAgICAgICAgICAgIEZyZWVTcGFjZVB0ciByaWdodFN0YXJ0ID0g
cmlnaHROZWlnaGJvci0+a2V5OworICAgICAgICAgICAgc2l6ZV90IHJpZ2h0U2l6ZSA9IHJpZ2h0
Tm9kZS0+c2l6ZUluQnl0ZXMoKTsKKyAgICAgICAgICAgIEZyZWVTcGFjZVB0ciByaWdodEVuZCA9
IHJpZ2h0Tm9kZS0+bV9lbmQ7CisKICAgICAgICAgICAgIEFTU0VSVChyaWdodFN0YXJ0ID09IGVu
ZCk7Ci0gICAgICAgICAgICBBU1NFUlQocmVpbnRlcnByZXRfY2FzdDx2b2lkKj4ocmVpbnRlcnBy
ZXRfY2FzdDx1aW50cHRyX3Q+KGxlZnRTdGFydCkgKyBsZWZ0U2l6ZSArIHNpemVJbkJ5dGVzICsg
cmlnaHRTaXplKSA9PSByaWdodEVuZCk7Ci0gICAgICAgICAgICAKKyAgICAgICAgICAgIEFTU0VS
VChsZWZ0Tm9kZS0+bV9zdGFydCArIChsZWZ0Tm9kZS0+c2l6ZUluQnl0ZXMoKSArIHNpemVJbkJ5
dGVzICsgcmlnaHRTaXplKSA9PSByaWdodEVuZCk7CisKICAgICAgICAgICAgIG1fZnJlZVNwYWNl
U2l6ZU1hcC5yZW1vdmUocmlnaHROb2RlKTsKICAgICAgICAgICAgIG1fZnJlZVNwYWNlU3RhcnRB
ZGRyZXNzTWFwLnJlbW92ZShyaWdodFN0YXJ0KTsKICAgICAgICAgICAgIG1fZnJlZVNwYWNlRW5k
QWRkcmVzc01hcC5yZW1vdmUocmlnaHRFbmQpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBm
cmVlRnJlZVNwYWNlTm9kZShyaWdodE5vZGUpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBs
ZWZ0Tm9kZS0+bV9zaXplSW5CeXRlcyArPSBzaXplSW5CeXRlcyArIHJpZ2h0U2l6ZTsKLSAgICAg
ICAgICAgIAorCisgICAgICAgICAgICBsZWZ0Tm9kZS0+bV9lbmQgKz0gKHNpemVJbkJ5dGVzICsg
cmlnaHRTaXplKTsKKwogICAgICAgICAgICAgbV9mcmVlU3BhY2VTaXplTWFwLmluc2VydChsZWZ0
Tm9kZSk7CiAgICAgICAgICAgICBtX2ZyZWVTcGFjZUVuZEFkZHJlc3NNYXAuYWRkKHJpZ2h0RW5k
LCBsZWZ0Tm9kZSk7CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBsZWZ0Tm9kZS0+bV9z
aXplSW5CeXRlcyArPSBzaXplSW5CeXRlczsKLSAgICAgICAgICAgIAorICAgICAgICAgICAgbGVm
dE5vZGUtPm1fZW5kICs9IHNpemVJbkJ5dGVzOworCiAgICAgICAgICAgICBtX2ZyZWVTcGFjZVNp
emVNYXAuaW5zZXJ0KGxlZnROb2RlKTsKICAgICAgICAgICAgIG1fZnJlZVNwYWNlRW5kQWRkcmVz
c01hcC5hZGQoZW5kLCBsZWZ0Tm9kZSk7CiAgICAgICAgIH0KQEAgLTM2MCwyOSArMzYyLDI2IEBA
IHZvaWQgTWV0YUFsbG9jYXRvcjo6YWRkRnJlZVNwYWNlKHZvaWQqIHMKICAgICAgICAgCiAgICAg
ICAgIGlmIChyaWdodE5laWdoYm9yICE9IG1fZnJlZVNwYWNlU3RhcnRBZGRyZXNzTWFwLmVuZCgp
KSB7CiAgICAgICAgICAgICBGcmVlU3BhY2VOb2RlKiByaWdodE5vZGUgPSByaWdodE5laWdoYm9y
LT52YWx1ZTsKLSAgICAgICAgICAgIHZvaWQqIHJpZ2h0U3RhcnQgPSByaWdodE5laWdoYm9yLT5r
ZXk7Ci0gICAgICAgICAgICBzaXplX3QgcmlnaHRTaXplID0gcmlnaHROb2RlLT5tX3NpemVJbkJ5
dGVzOwotICAgICAgICAgICAgdm9pZCogcmlnaHRFbmQgPSByZWludGVycHJldF9jYXN0PHZvaWQq
PihyZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4ocmlnaHRTdGFydCkgKyByaWdodFNpemUpOwot
ICAgICAgICAgICAgCisgICAgICAgICAgICBGcmVlU3BhY2VQdHIgcmlnaHRTdGFydCA9IHJpZ2h0
TmVpZ2hib3ItPmtleTsKKwogICAgICAgICAgICAgQVNTRVJUKHJpZ2h0U3RhcnQgPT0gZW5kKTsK
LSAgICAgICAgICAgIEFTU0VSVF9VTlVTRUQocmlnaHRFbmQsIHJlaW50ZXJwcmV0X2Nhc3Q8dm9p
ZCo+KHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90PihzdGFydCkgKyBzaXplSW5CeXRlcyArIHJp
Z2h0U2l6ZSkgPT0gcmlnaHRFbmQpOwotICAgICAgICAgICAgCisgICAgICAgICAgICBBU1NFUlQo
c3RhcnQgKyAoc2l6ZUluQnl0ZXMgKyByaWdodE5vZGUtPnNpemVJbkJ5dGVzKCkpID09IHJpZ2h0
Tm9kZS0+bV9lbmQpOworCiAgICAgICAgICAgICBtX2ZyZWVTcGFjZVNpemVNYXAucmVtb3ZlKHJp
Z2h0Tm9kZSk7CiAgICAgICAgICAgICBtX2ZyZWVTcGFjZVN0YXJ0QWRkcmVzc01hcC5yZW1vdmUo
cmlnaHRTdGFydCk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIHJpZ2h0Tm9kZS0+bV9zaXpl
SW5CeXRlcyArPSBzaXplSW5CeXRlczsKKwogICAgICAgICAgICAgcmlnaHROb2RlLT5tX3N0YXJ0
ID0gc3RhcnQ7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgbV9mcmVlU3BhY2VTaXplTWFw
Lmluc2VydChyaWdodE5vZGUpOwogICAgICAgICAgICAgbV9mcmVlU3BhY2VTdGFydEFkZHJlc3NN
YXAuYWRkKHN0YXJ0LCByaWdodE5vZGUpOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAg
Ly8gTm90aGluZyB0byBjb2FsZXNjZSB3aXRoLCBzbyBjcmVhdGUgYSBuZXcgZnJlZSBzcGFjZSBu
b2RlIGFuZCBhZGQgaXQuCiAgICAgICAgICAgICAKICAgICAgICAgICAgIEZyZWVTcGFjZU5vZGUq
IG5vZGUgPSBhbGxvY0ZyZWVTcGFjZU5vZGUoKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAg
bm9kZS0+bV9zaXplSW5CeXRlcyA9IHNpemVJbkJ5dGVzOworCiAgICAgICAgICAgICBub2RlLT5t
X3N0YXJ0ID0gc3RhcnQ7Ci0gICAgICAgICAgICAKKyAgICAgICAgICAgIG5vZGUtPm1fZW5kID0g
c3RhcnQgKyBzaXplSW5CeXRlczsKKwogICAgICAgICAgICAgbV9mcmVlU3BhY2VTaXplTWFwLmlu
c2VydChub2RlKTsKICAgICAgICAgICAgIG1fZnJlZVNwYWNlU3RhcnRBZGRyZXNzTWFwLmFkZChz
dGFydCwgbm9kZSk7CiAgICAgICAgICAgICBtX2ZyZWVTcGFjZUVuZEFkZHJlc3NNYXAuYWRkKGVu
ZCwgbm9kZSk7CkBAIC00NDUsNyArNDQ0LDcgQEAgTWV0YUFsbG9jYXRvcjo6RnJlZVNwYWNlTm9k
ZSogTWV0YUFsbG9jYQogI2lmbmRlZiBOREVCVUcKICAgICBtX21hbGxvY0JhbGFuY2UrKzsKICNl
bmRpZgotICAgIHJldHVybiBuZXcgKE5vdE51bGwsIGZhc3RNYWxsb2Moc2l6ZW9mKEZyZWVTcGFj
ZU5vZGUpKSkgRnJlZVNwYWNlTm9kZSgwLCAwKTsKKyAgICByZXR1cm4gbmV3IChOb3ROdWxsLCBm
YXN0TWFsbG9jKHNpemVvZihGcmVlU3BhY2VOb2RlKSkpIEZyZWVTcGFjZU5vZGUoKTsKIH0KIAog
dm9pZCBNZXRhQWxsb2NhdG9yOjpmcmVlRnJlZVNwYWNlTm9kZShGcmVlU3BhY2VOb2RlKiBub2Rl
KQpJbmRleDogU291cmNlL1dURi93dGYvTWV0YUFsbG9jYXRvci5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XVEYvd3RmL01ldGFBbGxvY2F0b3IuaAkocmV2aXNpb24gMjMxMTMxKQorKysgU291cmNl
L1dURi93dGYvTWV0YUFsbG9jYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAog
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTUxLDcgKzUxLDcgQEAgcHVi
bGljOgogICAgIE1ldGFBbGxvY2F0b3JIYW5kbGUqIGZpbmQodm9pZCogYWRkcmVzcykKICAgICB7
CiAgICAgICAgIE1ldGFBbGxvY2F0b3JIYW5kbGUqIGhhbmRsZSA9IG1fYWxsb2NhdGlvbnMuZmlu
ZEdyZWF0ZXN0TGVzc1RoYW5PckVxdWFsKGFkZHJlc3MpOwotICAgICAgICBpZiAoaGFuZGxlICYm
IGFkZHJlc3MgPCBoYW5kbGUtPmVuZCgpKQorICAgICAgICBpZiAoaGFuZGxlICYmIGFkZHJlc3Mg
PCBoYW5kbGUtPmVuZCgpLnVudGFnZ2VkUHRyKCkpCiAgICAgICAgICAgICByZXR1cm4gaGFuZGxl
OwogICAgICAgICByZXR1cm4gMDsKICAgICB9CkBAIC02Myw2ICs2Myw4IEBAIGNsYXNzIE1ldGFB
bGxvY2F0b3IgewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKE1ldGFBbGxvY2F0b3IpOwogCiBw
dWJsaWM6CisgICAgdXNpbmcgRnJlZVNwYWNlUHRyID0gTWV0YUFsbG9jYXRvclB0cjxGcmVlU3Bh
Y2VQdHJUYWc+OworCiAgICAgV1RGX0VYUE9SVF9QUklWQVRFIE1ldGFBbGxvY2F0b3Ioc2l6ZV90
IGFsbG9jYXRpb25HcmFudWxlLCBzaXplX3QgcGFnZVNpemUgPSBXVEY6OnBhZ2VTaXplKCkpOwog
ICAgIAogICAgIFdURl9FWFBPUlRfUFJJVkFURSB2aXJ0dWFsIH5NZXRhQWxsb2NhdG9yKCk7CkBA
IC0xMDksOCArMTExLDggQEAgcHJvdGVjdGVkOgogICAgIAogICAgIC8vIEFsbG9jYXRlIG5ldyB2
aXJ0dWFsIHNwYWNlLCBidXQgZG9uJ3QgY29tbWl0LiBUaGlzIG1heSByZXR1cm4gbW9yZQogICAg
IC8vIHBhZ2VzIHRoYW4gd2UgYXNrZWQsIGluIHdoaWNoIGNhc2UgbnVtUGFnZXMgaXMgY2hhbmdl
ZC4KLSAgICB2aXJ0dWFsIHZvaWQqIGFsbG9jYXRlTmV3U3BhY2Uoc2l6ZV90JiBudW1QYWdlcykg
PSAwOwotICAgIAorICAgIHZpcnR1YWwgRnJlZVNwYWNlUHRyIGFsbG9jYXRlTmV3U3BhY2Uoc2l6
ZV90JiBudW1QYWdlcykgPSAwOworCiAgICAgLy8gQ29tbWl0IGEgcGFnZS4KICAgICB2aXJ0dWFs
IHZvaWQgbm90aWZ5TmVlZFBhZ2Uodm9pZCogcGFnZSkgPSAwOwogICAgIApAQCAtMTI3LDE5ICsx
MjksMjUgQEAgcHJpdmF0ZToKICAgICAKICAgICBjbGFzcyBGcmVlU3BhY2VOb2RlIDogcHVibGlj
IFJlZEJsYWNrVHJlZTxGcmVlU3BhY2VOb2RlLCBzaXplX3Q+OjpOb2RlIHsKICAgICBwdWJsaWM6
CisgICAgICAgIEZyZWVTcGFjZU5vZGUoKSA9IGRlZmF1bHQ7CisKICAgICAgICAgRnJlZVNwYWNl
Tm9kZSh2b2lkKiBzdGFydCwgc2l6ZV90IHNpemVJbkJ5dGVzKQogICAgICAgICAgICAgOiBtX3N0
YXJ0KHN0YXJ0KQotICAgICAgICAgICAgLCBtX3NpemVJbkJ5dGVzKHNpemVJbkJ5dGVzKQorICAg
ICAgICAgICAgLCBtX2VuZChyZWludGVycHJldF9jYXN0PHVpbnQ4X3QqPihzdGFydCkgKyBzaXpl
SW5CeXRlcykKKyAgICAgICAgeyB9CisKKyAgICAgICAgc2l6ZV90IHNpemVJbkJ5dGVzKCkKICAg
ICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG1fZW5kLnVudGFnZ2VkUHRyPHNpemVfdD4oKSAt
IG1fc3RhcnQudW50YWdnZWRQdHI8c2l6ZV90PigpOwogICAgICAgICB9CiAKICAgICAgICAgc2l6
ZV90IGtleSgpCiAgICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBtX3NpemVJbkJ5dGVzOwor
ICAgICAgICAgICAgcmV0dXJuIHNpemVJbkJ5dGVzKCk7CiAgICAgICAgIH0KIAotICAgICAgICB2
b2lkKiBtX3N0YXJ0OwotICAgICAgICBzaXplX3QgbV9zaXplSW5CeXRlczsKKyAgICAgICAgRnJl
ZVNwYWNlUHRyIG1fc3RhcnQ7CisgICAgICAgIEZyZWVTcGFjZVB0ciBtX2VuZDsKICAgICB9Owog
ICAgIHR5cGVkZWYgUmVkQmxhY2tUcmVlPEZyZWVTcGFjZU5vZGUsIHNpemVfdD4gVHJlZTsKIApA
QCAtMTQ5LDE2ICsxNTcsMTYgQEAgcHJpdmF0ZToKICAgICAvLyBSZW1vdmUgZnJlZSBzcGFjZSBm
cm9tIHRoZSBhbGxvY2F0b3IuIFRoaXMgaXMgZWZmZWN0aXZlbHkKICAgICAvLyB0aGUgYWxsb2Nh
dGUoKSBmdW5jdGlvbiwgZXhjZXB0IHRoYXQgaXQgZG9lcyBub3QgbWFyayB0aGUKICAgICAvLyBy
ZXR1cm5lZCBzcGFjZSBhcyBiZWluZyBpbi11c2UuCi0gICAgdm9pZCogZmluZEFuZFJlbW92ZUZy
ZWVTcGFjZShzaXplX3Qgc2l6ZUluQnl0ZXMpOworICAgIEZyZWVTcGFjZVB0ciBmaW5kQW5kUmVt
b3ZlRnJlZVNwYWNlKHNpemVfdCBzaXplSW5CeXRlcyk7CiAKICAgICAvLyBUaGlzIGlzIGNhbGxl
ZCB3aGVuIG1lbW9yeSBmcm9tIGFuIGFsbG9jYXRpb24gaXMgZnJlZWQuCi0gICAgdm9pZCBhZGRG
cmVlU3BhY2VGcm9tUmVsZWFzZWRIYW5kbGUodm9pZCogc3RhcnQsIHNpemVfdCBzaXplSW5CeXRl
cyk7Ci0gICAgCisgICAgdm9pZCBhZGRGcmVlU3BhY2VGcm9tUmVsZWFzZWRIYW5kbGUoRnJlZVNw
YWNlUHRyIHN0YXJ0LCBzaXplX3Qgc2l6ZUluQnl0ZXMpOworCiAgICAgLy8gVGhpcyBpcyB0aGUg
bG93LWxldmVsIGltcGxlbWVudGF0aW9uIG9mIGFkZGluZyBmcmVlIHNwYWNlOyBpdAogICAgIC8v
IGlzIGNhbGxlZCBmcm9tIGJvdGggYWRkRnJlZVNwYWNlRnJvbVJlbGVhc2VkSGFuZGxlIGFuZCBm
cm9tCiAgICAgLy8gYWRkRnJlc2hGcmVlU3BhY2UuCi0gICAgdm9pZCBhZGRGcmVlU3BhY2Uodm9p
ZCogc3RhcnQsIHNpemVfdCBzaXplSW5CeXRlcyk7Ci0gICAgCisgICAgdm9pZCBhZGRGcmVlU3Bh
Y2UoRnJlZVNwYWNlUHRyIHN0YXJ0LCBzaXplX3Qgc2l6ZUluQnl0ZXMpOworCiAgICAgLy8gTWFu
YWdlbWVudCBvZiB1c2VkIHNwYWNlLgogICAgIAogICAgIHZvaWQgaW5jcmVtZW50UGFnZU9jY3Vw
YW5jeSh2b2lkKiBhZGRyZXNzLCBzaXplX3Qgc2l6ZUluQnl0ZXMpOwpAQCAtMTc3LDggKzE4NSw4
IEBAIHByaXZhdGU6CiAgICAgdW5zaWduZWQgbV9sb2dQYWdlU2l6ZTsKICAgICAKICAgICBUcmVl
IG1fZnJlZVNwYWNlU2l6ZU1hcDsKLSAgICBIYXNoTWFwPHZvaWQqLCBGcmVlU3BhY2VOb2RlKj4g
bV9mcmVlU3BhY2VTdGFydEFkZHJlc3NNYXA7Ci0gICAgSGFzaE1hcDx2b2lkKiwgRnJlZVNwYWNl
Tm9kZSo+IG1fZnJlZVNwYWNlRW5kQWRkcmVzc01hcDsKKyAgICBIYXNoTWFwPEZyZWVTcGFjZVB0
ciwgRnJlZVNwYWNlTm9kZSo+IG1fZnJlZVNwYWNlU3RhcnRBZGRyZXNzTWFwOworICAgIEhhc2hN
YXA8RnJlZVNwYWNlUHRyLCBGcmVlU3BhY2VOb2RlKj4gbV9mcmVlU3BhY2VFbmRBZGRyZXNzTWFw
OwogICAgIEhhc2hNYXA8dWludHB0cl90LCBzaXplX3Q+IG1fcGFnZU9jY3VwYW5jeU1hcDsKICAg
ICAKICAgICBzaXplX3QgbV9ieXRlc0FsbG9jYXRlZDsKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL01l
dGFBbGxvY2F0b3JIYW5kbGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9NZXRhQWxs
b2NhdG9ySGFuZGxlLmgJKHJldmlzaW9uIDIzMTEzMSkKKysrIFNvdXJjZS9XVEYvd3RmL01ldGFB
bGxvY2F0b3JIYW5kbGUuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTEsIDIwMTMsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDExLTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMCw2ICszMCw3IEBA
CiAjZGVmaW5lIFdURl9NZXRhQWxsb2NhdG9ySGFuZGxlX2gKIAogI2luY2x1ZGUgPHd0Zi9Bc3Nl
cnRpb25zLmg+CisjaW5jbHVkZSA8d3RmL01ldGFBbGxvY2F0b3JQdHIuaD4KICNpbmNsdWRlIDx3
dGYvUmVkQmxhY2tUcmVlLmg+CiAjaW5jbHVkZSA8d3RmL1RocmVhZFNhZmVSZWZDb3VudGVkLmg+
CiAKQEAgLTQxLDM4ICs0Miw0MCBAQCBjbGFzcyBQcmludFN0cmVhbTsKIGNsYXNzIE1ldGFBbGxv
Y2F0b3JIYW5kbGUgOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8TWV0YUFsbG9jYXRvckhh
bmRsZT4sIHB1YmxpYyBSZWRCbGFja1RyZWU8TWV0YUFsbG9jYXRvckhhbmRsZSwgdm9pZCo+OjpO
b2RlIHsKIHByaXZhdGU6CiAgICAgTWV0YUFsbG9jYXRvckhhbmRsZShNZXRhQWxsb2NhdG9yKiwg
dm9pZCogc3RhcnQsIHNpemVfdCBzaXplSW5CeXRlcywgdm9pZCogb3duZXJVSUQpOwotICAgIAor
CiBwdWJsaWM6CisgICAgdXNpbmcgTWVtb3J5UHRyID0gTWV0YUFsbG9jYXRvclB0cjxIYW5kbGVN
ZW1vcnlQdHJUYWc+OworCiAgICAgV1RGX0VYUE9SVF9QUklWQVRFIH5NZXRhQWxsb2NhdG9ySGFu
ZGxlKCk7Ci0gICAgCi0gICAgdm9pZCogc3RhcnQoKSBjb25zdAorCisgICAgTWVtb3J5UHRyIHN0
YXJ0KCkgY29uc3QKICAgICB7CiAgICAgICAgIHJldHVybiBtX3N0YXJ0OwogICAgIH0KLSAgICAK
LSAgICB2b2lkKiBlbmQoKSBjb25zdAorCisgICAgTWVtb3J5UHRyIGVuZCgpIGNvbnN0CiAgICAg
ewotICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oZW5kQXNJbnRlZ2VyKCkp
OworICAgICAgICByZXR1cm4gbV9lbmQ7CiAgICAgfQotICAgIAorCiAgICAgdWludHB0cl90IHN0
YXJ0QXNJbnRlZ2VyKCkgY29uc3QKICAgICB7Ci0gICAgICAgIHJldHVybiByZWludGVycHJldF9j
YXN0PHVpbnRwdHJfdD4obV9zdGFydCk7CisgICAgICAgIHJldHVybiBtX3N0YXJ0LnVudGFnZ2Vk
UHRyPHVpbnRwdHJfdD4oKTsKICAgICB9Ci0gICAgCisKICAgICB1aW50cHRyX3QgZW5kQXNJbnRl
Z2VyKCkgY29uc3QKICAgICB7Ci0gICAgICAgIHJldHVybiBzdGFydEFzSW50ZWdlcigpICsgbV9z
aXplSW5CeXRlczsKKyAgICAgICAgcmV0dXJuIG1fZW5kLnVudGFnZ2VkUHRyPHVpbnRwdHJfdD4o
KTsKICAgICB9Ci0gICAgICAgIAorCiAgICAgc2l6ZV90IHNpemVJbkJ5dGVzKCkgY29uc3QKICAg
ICB7Ci0gICAgICAgIHJldHVybiBtX3NpemVJbkJ5dGVzOworICAgICAgICByZXR1cm4gbV9lbmQu
dW50YWdnZWRQdHI8c2l6ZV90PigpIC0gbV9zdGFydC51bnRhZ2dlZFB0cjxzaXplX3Q+KCk7CiAg
ICAgfQogICAgIAogICAgIGJvb2wgY29udGFpbnNJbnRlZ2VyQWRkcmVzcyh1aW50cHRyX3QgYWRk
cmVzcykgY29uc3QKICAgICB7Ci0gICAgICAgIHJldHVybiBhZGRyZXNzIC0gc3RhcnRBc0ludGVn
ZXIoKSA8IHNpemVJbkJ5dGVzKCk7CisgICAgICAgIHJldHVybiBhZGRyZXNzID49IHN0YXJ0QXNJ
bnRlZ2VyKCkgJiYgYWRkcmVzcyA8IGVuZEFzSW50ZWdlcigpOwogICAgIH0KICAgICAKICAgICBi
b29sIGNvbnRhaW5zKHZvaWQqIGFkZHJlc3MpIGNvbnN0CkBAIC0xMDAsNyArMTAzLDcgQEAgcHVi
bGljOgogCiAgICAgdm9pZCoga2V5KCkKICAgICB7Ci0gICAgICAgIHJldHVybiBtX3N0YXJ0Owor
ICAgICAgICByZXR1cm4gbV9zdGFydC51bnRhZ2dlZFB0cigpOwogICAgIH0KIAogICAgIFdURl9F
WFBPUlRfUFJJVkFURSB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3Q7CkBAIC0xMDks
OCArMTEyLDggQEAgcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgTWV0YUFsbG9jYXRvcjsKICAg
ICAKICAgICBNZXRhQWxsb2NhdG9yKiBtX2FsbG9jYXRvcjsKLSAgICB2b2lkKiBtX3N0YXJ0Owot
ICAgIHNpemVfdCBtX3NpemVJbkJ5dGVzOworICAgIE1lbW9yeVB0ciBtX3N0YXJ0OworICAgIE1l
bW9yeVB0ciBtX2VuZDsKICAgICB2b2lkKiBtX293bmVyVUlEOwogfTsKIApJbmRleDogU291cmNl
L1dURi93dGYvTWV0YUFsbG9jYXRvclB0ci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3Rm
L01ldGFBbGxvY2F0b3JQdHIuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvV1RGL3d0Zi9NZXRh
QWxsb2NhdG9yUHRyLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMjIgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lu
Y2x1ZGUgPHd0Zi9IYXNoVHJhaXRzLmg+CisjaW5jbHVkZSA8d3RmL1B0clRhZy5oPgorI2luY2x1
ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KKworbmFtZXNwYWNlIFdURiB7CisKK3RlbXBsYXRlPFB0
clRhZyB0YWc+CitjbGFzcyBNZXRhQWxsb2NhdG9yUHRyIHsKK3B1YmxpYzoKKyAgICBNZXRhQWxs
b2NhdG9yUHRyKCkgPSBkZWZhdWx0OworICAgIE1ldGFBbGxvY2F0b3JQdHIoc3RkOjpudWxscHRy
X3QpIHsgfQorCisgICAgZXhwbGljaXQgTWV0YUFsbG9jYXRvclB0cih2b2lkKiBwdHIpCisgICAg
ICAgIDogbV9wdHIodGFnQ29kZVB0cjx0YWc+KHB0cikpCisgICAgeworICAgICAgICBhc3NlcnRJ
c05vdFRhZ2dlZChwdHIpOworICAgIH0KKworICAgIGV4cGxpY2l0IE1ldGFBbGxvY2F0b3JQdHIo
dWludHB0cl90IHB0ckFzSW50KQorICAgICAgICA6IE1ldGFBbGxvY2F0b3JQdHIocmVpbnRlcnBy
ZXRfY2FzdDx2b2lkKj4ocHRyQXNJbnQpKQorICAgIHsgfQorCisgICAgdGVtcGxhdGU8dHlwZW5h
bWUgVCA9IHZvaWQqPgorICAgIFQgdW50YWdnZWRQdHIoKSBjb25zdCB7IHJldHVybiBiaXR3aXNl
X2Nhc3Q8VD4odW50YWdDb2RlUHRyPHRhZz4obV9wdHIpKTsgfQorCisgICAgdGVtcGxhdGU8UHRy
VGFnIG5ld1RhZywgdHlwZW5hbWUgVCA9IHZvaWQqPgorICAgIFQgcmV0YWdnZWRQdHIoKSBjb25z
dCB7IHJldHVybiBiaXR3aXNlX2Nhc3Q8VD4ocmV0YWdDb2RlUHRyPHRhZywgbmV3VGFnPihtX3B0
cikpOyB9CisKKyAgICAvLyBEaXNhbGxvdyBhbnkgY2FzdGluZyBvcGVyYXRpb25zIChleGNlcHQg
Zm9yIGJvb2xlYW5zKS4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSA9IHN0ZDo6
ZW5hYmxlX2lmX3Q8IXN0ZDo6aXNfc2FtZTxULCBib29sPjo6dmFsdWU+PgorICAgIG9wZXJhdG9y
IFQoKSA9IGRlbGV0ZTsKKworICAgIGV4cGxpY2l0IG9wZXJhdG9yIGJvb2woKSBjb25zdCB7IHJl
dHVybiAhIW1fcHRyOyB9CisgICAgYm9vbCBvcGVyYXRvciEoKSBjb25zdCB7IHJldHVybiAhbV9w
dHI7IH0KKworICAgIGJvb2wgb3BlcmF0b3I9PShNZXRhQWxsb2NhdG9yUHRyIG90aGVyKSBjb25z
dCB7IHJldHVybiBtX3B0ciA9PSBvdGhlci5tX3B0cjsgfQorICAgIGJvb2wgb3BlcmF0b3IhPShN
ZXRhQWxsb2NhdG9yUHRyIG90aGVyKSBjb25zdCB7IHJldHVybiBtX3B0ciAhPSBvdGhlci5tX3B0
cjsgfQorCisgICAgTWV0YUFsbG9jYXRvclB0ciBvcGVyYXRvcisoc2l6ZV90IHNpemVJbkJ5dGVz
KSBjb25zdCB7IHJldHVybiBNZXRhQWxsb2NhdG9yUHRyKHVudGFnZ2VkUHRyPHVpbnQ4X3QqPigp
ICsgc2l6ZUluQnl0ZXMpOyB9CisgICAgTWV0YUFsbG9jYXRvclB0ciBvcGVyYXRvci0oc2l6ZV90
IHNpemVJbkJ5dGVzKSBjb25zdCB7IHJldHVybiBNZXRhQWxsb2NhdG9yUHRyKHVudGFnZ2VkUHRy
PHVpbnQ4X3QqPigpIC0gc2l6ZUluQnl0ZXMpOyB9CisKKyAgICBNZXRhQWxsb2NhdG9yUHRyJiBv
cGVyYXRvcis9KHNpemVfdCBzaXplSW5CeXRlcykKKyAgICB7CisgICAgICAgIHJldHVybiAqdGhp
cyA9ICp0aGlzICsgc2l6ZUluQnl0ZXM7CisgICAgfQorCisgICAgTWV0YUFsbG9jYXRvclB0ciYg
b3BlcmF0b3ItPShzaXplX3Qgc2l6ZUluQnl0ZXMpCisgICAgeworICAgICAgICByZXR1cm4gKnRo
aXMgPSAqdGhpcyAtIHNpemVJbkJ5dGVzOworICAgIH0KKworICAgIGVudW0gRW1wdHlWYWx1ZVRh
ZyB7IEVtcHR5VmFsdWUgfTsKKyAgICBlbnVtIERlbGV0ZWRWYWx1ZVRhZyB7IERlbGV0ZWRWYWx1
ZSB9OworCisgICAgTWV0YUFsbG9jYXRvclB0cihFbXB0eVZhbHVlVGFnKQorICAgICAgICA6IG1f
cHRyKGVtcHR5VmFsdWUoKSkKKyAgICB7IH0KKworICAgIE1ldGFBbGxvY2F0b3JQdHIoRGVsZXRl
ZFZhbHVlVGFnKQorICAgICAgICA6IG1fcHRyKGRlbGV0ZWRWYWx1ZSgpKQorICAgIHsgfQorCisg
ICAgYm9vbCBpc0VtcHR5VmFsdWUoKSBjb25zdCB7IHJldHVybiBtX3B0ciA9PSBlbXB0eVZhbHVl
KCk7IH0KKyAgICBib29sIGlzRGVsZXRlZFZhbHVlKCkgY29uc3QgeyByZXR1cm4gbV9wdHIgPT0g
ZGVsZXRlZFZhbHVlKCk7IH0KKworICAgIHVuc2lnbmVkIGhhc2goKSBjb25zdCB7IHJldHVybiBQ
dHJIYXNoPHZvaWQqPjo6aGFzaChtX3B0cik7IH0KKworcHJpdmF0ZToKKyAgICBzdGF0aWMgdm9p
ZCogZW1wdHlWYWx1ZSgpIHsgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KDEpOyB9Cisg
ICAgc3RhdGljIHZvaWQqIGRlbGV0ZWRWYWx1ZSgpIHsgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8
dm9pZCo+KDIpOyB9CisKKyAgICB2b2lkKiBtX3B0ciB7IG51bGxwdHIgfTsKK307CisKK3RlbXBs
YXRlPFB0clRhZyB0YWc+CitzdHJ1Y3QgTWV0YUFsbG9jYXRvclB0ckhhc2ggeworICAgIHN0YXRp
YyB1bnNpZ25lZCBoYXNoKGNvbnN0IE1ldGFBbGxvY2F0b3JQdHI8dGFnPiYgcHRyKSB7IHJldHVy
biBwdHIuaGFzaCgpOyB9CisgICAgc3RhdGljIGJvb2wgZXF1YWwoY29uc3QgTWV0YUFsbG9jYXRv
clB0cjx0YWc+JiBhLCBjb25zdCBNZXRhQWxsb2NhdG9yUHRyPHRhZz4mIGIpCisgICAgeworICAg
ICAgICByZXR1cm4gYSA9PSBiOworICAgIH0KKyAgICBzdGF0aWMgY29uc3QgYm9vbCBzYWZlVG9D
b21wYXJlVG9FbXB0eU9yRGVsZXRlZCA9IHRydWU7Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBU
PiBzdHJ1Y3QgRGVmYXVsdEhhc2g7Cit0ZW1wbGF0ZTxQdHJUYWcgdGFnPiBzdHJ1Y3QgRGVmYXVs
dEhhc2g8TWV0YUFsbG9jYXRvclB0cjx0YWc+PiB7CisgICAgdHlwZWRlZiBNZXRhQWxsb2NhdG9y
UHRySGFzaDx0YWc+IEhhc2g7Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgSGFz
aFRyYWl0czsKK3RlbXBsYXRlPFB0clRhZyB0YWc+IHN0cnVjdCBIYXNoVHJhaXRzPE1ldGFBbGxv
Y2F0b3JQdHI8dGFnPj4gOiBwdWJsaWMgQ3VzdG9tSGFzaFRyYWl0czxNZXRhQWxsb2NhdG9yUHRy
PHRhZz4+IHsgfTsKKworfSAvLyBuYW1lc3BhY2UgV1RGCisKK3VzaW5nIFdURjo6TWV0YUFsbG9j
YXRvclB0cjsKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL1B0clRhZy5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XVEYvd3RmL1B0clRhZy5oCShyZXZpc2lvbiAyMzExMzEpCisrKyBTb3VyY2UvV1RGL3d0
Zi9QdHJUYWcuaAkod29ya2luZyBjb3B5KQpAQCAtMzQsNiArMzQsOCBAQCBuYW1lc3BhY2UgV1RG
IHsKICAgICB2KENGdW5jdGlvblB0clRhZykgXAogCiAjZGVmaW5lIEZPUl9FQUNIX0FERElUSU9O
QUxfV1RGX1BUUlRBRyh2KSBcCisgICAgdihGcmVlU3BhY2VQdHJUYWcpIFwKKyAgICB2KEhhbmRs
ZU1lbW9yeVB0clRhZykgXAogCiAjZGVmaW5lIEZPUl9FQUNIX1dURl9QVFJUQUcodikgXAogICAg
IEZPUl9FQUNIX0JBU0VfV1RGX1BUUlRBRyh2KSBcCkluZGV4OiBUb29scy9DaGFuZ2VMb2cKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gVG9vbHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAyMzExMzEpCisrKyBUb29scy9D
aGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxOCBAQAorMjAxOC0wNC0yNyAgTWFy
ayBMYW0gIDxtYXJrLmxhbUBhcHBsZS5jb20+CisKKyAgICAgICAgQXBwbHkgUHRyVGFncyB0byB0
aGUgTWV0YUFsbG9jYXRvciBhbmQgZnJpZW5kcy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTE4NTExMAorICAgICAgICA8cmRhcjovL3Byb2JsZW0vMzk1
MzM4OTU+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
VXBkYXRlIHRoZSB0ZXN0IHRvIG1hdGNoIE1ldGFBbGxvY2F0b3IgY2hhbmdlcyBpbiBXVEYuCisK
KyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9NZXRhQWxsb2NhdG9yLmNwcDoKKyAg
ICAgICAgKFRlc3RXZWJLaXRBUEk6OlRFU1RfRik6CisgICAgICAgIChXVEY6OnRhZ0ZvclB0cik6
CisgICAgICAgIChXVEY6OnB0clRhZ05hbWUpOgorCiAyMDE4LTA0LTI3ICBTdGVwaGFuIFN6YWJv
ICA8c3RlcGhhbi5zemFib0Bzb255LmNvbT4KIAogICAgICAgICBbV2luQ2Fpcm9dIFN1cHBvcnQg
LS1uby1jb3B5IGZvciBqc2MgdGVzdHMgaW4gd2luY2Fpcm8gdGVzdHMsIGFkZCBjb3B5aW5nIG9m
IGRsbHMgZm9yIGNvcHkgY2FzZQpJbmRleDogVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYv
TWV0YUFsbG9jYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0
cy9XVEYvTWV0YUFsbG9jYXRvci5jcHAJKHJldmlzaW9uIDIzMTEzMSkKKysrIFRvb2xzL1Rlc3RX
ZWJLaXRBUEkvVGVzdHMvV1RGL01ldGFBbGxvY2F0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAxOCBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTY0LDEx
ICs2NCwxMSBAQCBwdWJsaWM6CiAgICAgICAgICAgICBtX3BhcmVudC0+YWxsb2NhdG9yRGVzdHJv
eWVkID0gdHJ1ZTsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgdmlydHVhbCB2b2lkKiBh
bGxvY2F0ZU5ld1NwYWNlKHNpemVfdCYgbnVtUGFnZXMpCisgICAgICAgIHZpcnR1YWwgRnJlZVNw
YWNlUHRyIGFsbG9jYXRlTmV3U3BhY2Uoc2l6ZV90JiBudW1QYWdlcykKICAgICAgICAgewogICAg
ICAgICAgICAgc3dpdGNoIChtX3BhcmVudC0+Y3VycmVudEhlYXBHcm93dGhNb2RlKSB7CiAgICAg
ICAgICAgICBjYXNlIERvbnRHcm93SGVhcDoKLSAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAg
ICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAgICAgICAgICAgICAKICAgICAgICAg
ICAgIGNhc2UgRm9yVGVzdERlbWFuZEFsbG9jQ29hbGVzY2U6CiAgICAgICAgICAgICBjYXNlIEZv
clRlc3REZW1hbmRBbGxvY0RvbnRDb2FsZXNjZTogewpAQCAtOTYsMTIgKzk2LDEyIEBAIHB1Ymxp
YzoKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBtX3BhcmVudC0+YWRkaXRpb25h
bFBhZ2VzSW5IZWFwICs9IG51bVBhZ2VzOwogICAgICAgICAKLSAgICAgICAgICAgICAgICByZXR1
cm4gcmVzdWx0OworICAgICAgICAgICAgICAgIHJldHVybiBGcmVlU3BhY2VQdHIocmVzdWx0KTsK
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgIGRlZmF1bHQ6CiAg
ICAgICAgICAgICAgICAgQ1JBU0goKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAg
ICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAg
ICAgICAKQEAgLTE5MCw4ICsxOTAsOCBAQCBwdWJsaWM6CiAgICAgICAgIEVYUEVDVF9UUlVFKGhh
bmRsZSk7CiAgICAgICAgIEVYUEVDVF9FUShoYW5kbGUtPnNpemVJbkJ5dGVzKCksIHNpemVJbkJ5
dGVzKTsKICAgICAgICAgCi0gICAgICAgIHVpbnRwdHJfdCBzdGFydEJ5dGUgPSByZWludGVycHJl
dF9jYXN0PHVpbnRwdHJfdD4oaGFuZGxlLT5zdGFydCgpKTsKLSAgICAgICAgdWludHB0cl90IGVu
ZEJ5dGUgPSBzdGFydEJ5dGUgKyBzaXplSW5CeXRlczsKKyAgICAgICAgdWludHB0cl90IHN0YXJ0
Qnl0ZSA9IGhhbmRsZS0+c3RhcnQoKS51bnRhZ2dlZFB0cjx1aW50cHRyX3Q+KCk7CisgICAgICAg
IHVpbnRwdHJfdCBlbmRCeXRlID0gaGFuZGxlLT5lbmQoKS51bnRhZ2dlZFB0cjx1aW50cHRyX3Q+
KCk7CiAgICAgICAgIGZvciAodWludHB0cl90IGN1cnJlbnRCeXRlID0gc3RhcnRCeXRlOyBjdXJy
ZW50Qnl0ZSA8IGVuZEJ5dGU7ICsrY3VycmVudEJ5dGUpIHsKICAgICAgICAgICAgIEVYUEVDVF9U
UlVFKCFieXRlU3RhdGUoY3VycmVudEJ5dGUpKTsKICAgICAgICAgICAgIGJ5dGVTdGF0ZShjdXJy
ZW50Qnl0ZSkgPSB0cnVlOwpAQCAtMjA4LDcgKzIwOCw3IEBAIHB1YmxpYzoKICAgICB7CiAgICAg
ICAgIEVYUEVDVF9UUlVFKGhhbmRsZSk7CiAgICAgICAgIAotICAgICAgICBub3RpZnlGcmVlKGhh
bmRsZS0+c3RhcnQoKSwgaGFuZGxlLT5zaXplSW5CeXRlcygpKTsKKyAgICAgICAgbm90aWZ5RnJl
ZShoYW5kbGUtPnN0YXJ0KCkudW50YWdnZWRQdHIoKSwgaGFuZGxlLT5zaXplSW5CeXRlcygpKTsK
ICAgICAgICAgaGFuZGxlLT5kZXJlZigpOwogICAgICAgICAKICAgICAgICAgaWYgKHNhbml0eUNo
ZWNrTW9kZSA9PSBSdW5TYW5pdHlDaGVjaykKQEAgLTIzNywxMyArMjM3LDEzIEBAIHB1YmxpYzoK
ICAgICAKICAgICB2b2lkIGNvbmZpcm0oTWV0YUFsbG9jYXRvckhhbmRsZSogaGFuZGxlKQogICAg
IHsKLSAgICAgICAgdWludHB0cl90IHN0YXJ0Qnl0ZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0
cl90PihoYW5kbGUtPnN0YXJ0KCkpOworICAgICAgICB1aW50cHRyX3Qgc3RhcnRCeXRlID0gaGFu
ZGxlLT5zdGFydCgpLnVudGFnZ2VkUHRyPHVpbnRwdHJfdD4oKTsKICAgICAgICAgY29uZmlybShz
dGFydEJ5dGUsIHN0YXJ0Qnl0ZSArIGhhbmRsZS0+c2l6ZUluQnl0ZXMoKSwgdHJ1ZSk7CiAgICAg
fQogICAgIAogICAgIHZvaWQgY29uZmlybUhpZ2hXYXRlcm1hcmsoTWV0YUFsbG9jYXRvckhhbmRs
ZSogaGFuZGxlKQogICAgIHsKLSAgICAgICAgY29uZmlybShyZWludGVycHJldF9jYXN0PHVpbnRw
dHJfdD4oaGFuZGxlLT5lbmQoKSksIChiYXNlUGFnZSArIGRlZmF1bHRQYWdlc0luSGVhcCkgKiBw
YWdlU2l6ZSgpLCBmYWxzZSk7CisgICAgICAgIGNvbmZpcm0oaGFuZGxlLT5lbmQoKS51bnRhZ2dl
ZFB0cjx1aW50cHRyX3Q+KCksIChiYXNlUGFnZSArIGRlZmF1bHRQYWdlc0luSGVhcCkgKiBwYWdl
U2l6ZSgpLCBmYWxzZSk7CiAgICAgfQogICAgICAgICAgICAgICAgIAogICAgIHZvaWQgY29uZmly
bSh1aW50cHRyX3Qgc3RhcnRCeXRlLCB1aW50cHRyX3QgZW5kQnl0ZSwgYm9vbCB2YWx1ZSkKQEAg
LTMwNiw3ICszMDYsNyBAQCBwdWJsaWM6CiAgICAgICAgIC8vIHZlcmlmaWVzIHRoYXQgdGhlIHN0
YXRlIG9mIHBhZ2VzIGlzIGNvcnJlY3QuCiAgICAgICAgIAogICAgICAgICBNZXRhQWxsb2NhdG9y
SGFuZGxlKiBoYW5kbGUgPSBhbGxvY2F0ZShzaXplKTsKLSAgICAgICAgRVhQRUNUX0VRKGhhbmRs
ZS0+c3RhcnQoKSwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oYmFzZVBhZ2UgKiBwYWdlU2l6ZSgp
KSk7CisgICAgICAgIEVYUEVDVF9FUShoYW5kbGUtPnN0YXJ0KCkudW50YWdnZWRQdHIoKSwgcmVp
bnRlcnByZXRfY2FzdDx2b2lkKj4oYmFzZVBhZ2UgKiBwYWdlU2l6ZSgpKSk7CiAgICAgICAgIEVY
UEVDVF9FUShoYW5kbGUtPnNpemVJbkJ5dGVzKCksIHNpemUpOwogICAgICAgICBFWFBFQ1RfVFJV
RShwYWdlU3RhdGUoYmFzZVBhZ2UpKTsKICAgICAgICAgCkBAIC0zMjUsNyArMzI1LDcgQEAgcHVi
bGljOgogICAgICAgICAvLyBhbGxvY2F0aW9ucyBzaG91bGQgYmVoYXZlIHRoZSBzYW1lIGFzIHRo
ZSBmaXJzdCBvbmUuCiAgICAgICAgIAogICAgICAgICBNZXRhQWxsb2NhdG9ySGFuZGxlKiBoYW5k
bGUgPSBhbGxvY2F0ZShmaXJzdFNpemUpOwotICAgICAgICBFWFBFQ1RfRVEoaGFuZGxlLT5zdGFy
dCgpLCByZWludGVycHJldF9jYXN0PHZvaWQqPihiYXNlUGFnZSAqIHBhZ2VTaXplKCkpKTsKKyAg
ICAgICAgRVhQRUNUX0VRKGhhbmRsZS0+c3RhcnQoKS51bnRhZ2dlZFB0cigpLCByZWludGVycHJl
dF9jYXN0PHZvaWQqPihiYXNlUGFnZSAqIHBhZ2VTaXplKCkpKTsKICAgICAgICAgRVhQRUNUX0VR
KGhhbmRsZS0+c2l6ZUluQnl0ZXMoKSwgZmlyc3RTaXplKTsKICAgICAgICAgCiAgICAgICAgIGNv
bmZpcm0oaGFuZGxlKTsKQEAgLTMzNyw3ICszMzcsNyBAQCBwdWJsaWM6CiAgICAgICAgIHZhX3N0
YXJ0KGFyZ0xpc3QsIGZpcnN0U2l6ZSk7CiAgICAgICAgIHdoaWxlIChzaXplX3Qgc2l6ZUluQnl0
ZXMgPSB2YV9hcmcoYXJnTGlzdCwgaW50KSkgewogICAgICAgICAgICAgaGFuZGxlID0gYWxsb2Nh
dGUoc2l6ZUluQnl0ZXMpOwotICAgICAgICAgICAgRVhQRUNUX0VRKGhhbmRsZS0+c3RhcnQoKSwg
cmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oYmFzZVBhZ2UgKiBwYWdlU2l6ZSgpKSk7CisgICAgICAg
ICAgICBFWFBFQ1RfRVEoaGFuZGxlLT5zdGFydCgpLnVudGFnZ2VkUHRyKCksIHJlaW50ZXJwcmV0
X2Nhc3Q8dm9pZCo+KGJhc2VQYWdlICogcGFnZVNpemUoKSkpOwogICAgICAgICAgICAgRVhQRUNU
X0VRKGhhbmRsZS0+c2l6ZUluQnl0ZXMoKSwgc2l6ZUluQnl0ZXMpOwogICAgICAgICAgICAgCiAg
ICAgICAgICAgICBjb25maXJtKGhhbmRsZSk7CkBAIC0zNTksMTQgKzM1OSwxNCBAQCBwdWJsaWM6
CiAgICAgICAgIC8vIHBpY2tlZCBpbiBzdWNoIGEgd2F5IHRoYXQgaXQgbmV2ZXIgc3RyYWRkbGVz
IGEgcGFnZS4KICAgICAgICAgCiAgICAgICAgIE1ldGFBbGxvY2F0b3JIYW5kbGUqIGZpcnN0SGFu
ZGxlID0gYWxsb2NhdGUoZmlyc3RTaXplKTsKLSAgICAgICAgRVhQRUNUX0VRKGZpcnN0SGFuZGxl
LT5zdGFydCgpLCByZWludGVycHJldF9jYXN0PHZvaWQqPihiYXNlUGFnZSAqIHBhZ2VTaXplKCkp
KTsKKyAgICAgICAgRVhQRUNUX0VRKGZpcnN0SGFuZGxlLT5zdGFydCgpLnVudGFnZ2VkUHRyKCks
IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGJhc2VQYWdlICogcGFnZVNpemUoKSkpOwogICAgICAg
ICBFWFBFQ1RfRVEoZmlyc3RIYW5kbGUtPnNpemVJbkJ5dGVzKCksIGZpcnN0U2l6ZSk7CiAgICAg
ICAgIAogICAgICAgICBjb25maXJtKGZpcnN0SGFuZGxlKTsKICAgICAgICAgY29uZmlybUhpZ2hX
YXRlcm1hcmsoZmlyc3RIYW5kbGUpOwogCiAgICAgICAgIE1ldGFBbGxvY2F0b3JIYW5kbGUqIHNl
Y29uZEhhbmRsZSA9IGFsbG9jYXRlKHNlY29uZFNpemUpOwotICAgICAgICBFWFBFQ1RfRVEoc2Vj
b25kSGFuZGxlLT5zdGFydCgpLCByZWludGVycHJldF9jYXN0PHZvaWQqPihiYXNlUGFnZSAqIHBh
Z2VTaXplKCkgKyBmaXJzdFNpemUpKTsKKyAgICAgICAgRVhQRUNUX0VRKHNlY29uZEhhbmRsZS0+
c3RhcnQoKS51bnRhZ2dlZFB0cigpLCByZWludGVycHJldF9jYXN0PHZvaWQqPihiYXNlUGFnZSAq
IHBhZ2VTaXplKCkgKyBmaXJzdFNpemUpKTsKICAgICAgICAgRVhQRUNUX0VRKHNlY29uZEhhbmRs
ZS0+c2l6ZUluQnl0ZXMoKSwgc2Vjb25kU2l6ZSk7CiAgICAgICAgIAogICAgICAgICBjb25maXJt
KGZpcnN0SGFuZGxlKTsKQEAgLTM4Myw3ICszODMsNyBAQCBwdWJsaWM6CiAgICAgICAgIGNvbmZp
cm0oYmFzZVBhZ2UgKiBwYWdlU2l6ZSgpLCAoYmFzZVBhZ2UgKyBkZWZhdWx0UGFnZXNJbkhlYXAp
ICogcGFnZVNpemUoKSwgZmFsc2UpOwogICAgICAgICAKICAgICAgICAgTWV0YUFsbG9jYXRvckhh
bmRsZSogdGhpcmRIYW5kbGUgPSBhbGxvY2F0ZSh0aGlyZFNpemUpOwotICAgICAgICBFWFBFQ1Rf
RVEodGhpcmRIYW5kbGUtPnN0YXJ0KCksIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGJhc2VQYWdl
ICogcGFnZVNpemUoKSkpOworICAgICAgICBFWFBFQ1RfRVEodGhpcmRIYW5kbGUtPnN0YXJ0KCku
dW50YWdnZWRQdHIoKSwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oYmFzZVBhZ2UgKiBwYWdlU2l6
ZSgpKSk7CiAgICAgICAgIEVYUEVDVF9FUSh0aGlyZEhhbmRsZS0+c2l6ZUluQnl0ZXMoKSwgdGhp
cmRTaXplKTsKICAgICAgICAgCiAgICAgICAgIGNvbmZpcm0odGhpcmRIYW5kbGUpOwpAQCAtNDA4
LDcgKzQwOCw3IEBAIHB1YmxpYzoKICAgICAgICAgdmFfc3RhcnQoYXJnTGlzdCwgbW9kZSk7CiAg
ICAgICAgIHdoaWxlIChzaXplX3Qgc2l6ZUluQnl0ZXMgPSB2YV9hcmcoYXJnTGlzdCwgaW50KSkg
ewogICAgICAgICAgICAgTWV0YUFsbG9jYXRvckhhbmRsZSogaGFuZGxlID0gYWxsb2NhdGUoc2l6
ZUluQnl0ZXMpOwotICAgICAgICAgICAgRVhQRUNUX0VRKGhhbmRsZS0+c3RhcnQoKSwgcmVpbnRl
cnByZXRfY2FzdDx2b2lkKj4oYmFzZVBhZ2UgKiBwYWdlU2l6ZSgpICsgdG90YWxTaXplKSk7Cisg
ICAgICAgICAgICBFWFBFQ1RfRVEoaGFuZGxlLT5zdGFydCgpLnVudGFnZ2VkUHRyKCksIHJlaW50
ZXJwcmV0X2Nhc3Q8dm9pZCo+KGJhc2VQYWdlICogcGFnZVNpemUoKSArIHRvdGFsU2l6ZSkpOwog
ICAgICAgICAgICAgRVhQRUNUX0VRKGhhbmRsZS0+c2l6ZUluQnl0ZXMoKSwgc2l6ZUluQnl0ZXMp
OwogICAgICAgICAgICAgCiAgICAgICAgICAgICBjb25maXJtKGhhbmRsZSk7CkBAIC00MjgsNyAr
NDI4LDcgQEAgcHVibGljOgogICAgICAgICAgICAgZnJlZShoYW5kbGVzLmF0KGluZGV4KSk7CiAg
ICAgICAgICAgICBpZiAobW9kZSA9PSBUZXN0RklGT0FsbG9jTW9kZTo6RWFnZXJGaWxsKSB7CiAg
ICAgICAgICAgICAgICAgTWV0YUFsbG9jYXRvckhhbmRsZSogaGFuZGxlID0gYWxsb2NhdGUoc2l6
ZVNvRmFyKTsKLSAgICAgICAgICAgICAgICBFWFBFQ1RfRVEoaGFuZGxlLT5zdGFydCgpLCByZWlu
dGVycHJldF9jYXN0PHZvaWQqPihiYXNlUGFnZSAqIHBhZ2VTaXplKCkpKTsKKyAgICAgICAgICAg
ICAgICBFWFBFQ1RfRVEoaGFuZGxlLT5zdGFydCgpLnVudGFnZ2VkUHRyKCksIHJlaW50ZXJwcmV0
X2Nhc3Q8dm9pZCo+KGJhc2VQYWdlICogcGFnZVNpemUoKSkpOwogICAgICAgICAgICAgICAgIEVY
UEVDVF9FUShoYW5kbGUtPnNpemVJbkJ5dGVzKCksIHNpemVTb0Zhcik7CiAgICAgICAgICAgICAg
ICAgCiAgICAgICAgICAgICAgICAgY29uZmlybShiYXNlUGFnZSAqIHBhZ2VTaXplKCksIGJhc2VQ
YWdlICogcGFnZVNpemUoKSArIHRvdGFsU2l6ZSwgdHJ1ZSk7CkBAIC00NDksNyArNDQ5LDcgQEAg
cHVibGljOgogICAgICAgICAKICAgICAgICAgaWYgKG1vZGUgPT0gVGVzdEZJRk9BbGxvY01vZGU6
OkZpbGxBdEVuZCkgewogICAgICAgICAgICAgTWV0YUFsbG9jYXRvckhhbmRsZSogZmluYWxIYW5k
bGUgPSBhbGxvY2F0ZSh0b3RhbFNpemUpOwotICAgICAgICAgICAgRVhQRUNUX0VRKGZpbmFsSGFu
ZGxlLT5zdGFydCgpLCByZWludGVycHJldF9jYXN0PHZvaWQqPihiYXNlUGFnZSAqIHBhZ2VTaXpl
KCkpKTsKKyAgICAgICAgICAgIEVYUEVDVF9FUShmaW5hbEhhbmRsZS0+c3RhcnQoKS51bnRhZ2dl
ZFB0cigpLCByZWludGVycHJldF9jYXN0PHZvaWQqPihiYXNlUGFnZSAqIHBhZ2VTaXplKCkpKTsK
ICAgICAgICAgICAgIEVYUEVDVF9FUShmaW5hbEhhbmRsZS0+c2l6ZUluQnl0ZXMoKSwgdG90YWxT
aXplKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgY29uZmlybShmaW5hbEhhbmRsZSk7CkBA
IC00NzksMTYgKzQ3OSwxNiBAQCBwdWJsaWM6CiAgICAgdm9pZCB0ZXN0UmlnaHRBbGxvY2F0aW9u
KHNpemVfdCBmaXJzdExlZnRTaXplLCBzaXplX3QgZmlyc3RSaWdodFNpemUsIHNpemVfdCBzZWNv
bmRMZWZ0U2l6ZSwgc2l6ZV90IHNlY29uZFJpZ2h0U2l6ZSkKICAgICB7CiAgICAgICAgIE1ldGFB
bGxvY2F0b3JIYW5kbGUqIGZpcnN0TGVmdCA9IGFsbG9jYXRlKGZpcnN0TGVmdFNpemUpOwotICAg
ICAgICBFWFBFQ1RfRVEoZmlyc3RMZWZ0LT5zdGFydCgpLCByZWludGVycHJldF9jYXN0PHZvaWQq
PihiYXNlUGFnZSAqIHBhZ2VTaXplKCkpKTsKKyAgICAgICAgRVhQRUNUX0VRKGZpcnN0TGVmdC0+
c3RhcnQoKS51bnRhZ2dlZFB0cigpLCByZWludGVycHJldF9jYXN0PHZvaWQqPihiYXNlUGFnZSAq
IHBhZ2VTaXplKCkpKTsKICAgICAgICAgCiAgICAgICAgIE1ldGFBbGxvY2F0b3JIYW5kbGUqIGZp
cnN0UmlnaHQgPSBhbGxvY2F0ZShmaXJzdFJpZ2h0U2l6ZSk7Ci0gICAgICAgIEVYUEVDVF9FUShm
aXJzdFJpZ2h0LT5lbmQoKSwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oKGJhc2VQYWdlICsgZGVm
YXVsdFBhZ2VzSW5IZWFwKSAqIHBhZ2VTaXplKCkpKTsKKyAgICAgICAgRVhQRUNUX0VRKGZpcnN0
UmlnaHQtPmVuZCgpLnVudGFnZ2VkUHRyKCksIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KChiYXNl
UGFnZSArIGRlZmF1bHRQYWdlc0luSGVhcCkgKiBwYWdlU2l6ZSgpKSk7CiAgICAgICAgIAogICAg
ICAgICBNZXRhQWxsb2NhdG9ySGFuZGxlKiBzZWNvbmRMZWZ0ID0gYWxsb2NhdGUoc2Vjb25kTGVm
dFNpemUpOwotICAgICAgICBFWFBFQ1RfRVEoc2Vjb25kTGVmdC0+c3RhcnQoKSwgcmVpbnRlcnBy
ZXRfY2FzdDx2b2lkKj4oYmFzZVBhZ2UgKiBwYWdlU2l6ZSgpICsgZmlyc3RMZWZ0LT5zaXplSW5C
eXRlcygpKSk7CisgICAgICAgIEVYUEVDVF9FUShzZWNvbmRMZWZ0LT5zdGFydCgpLnVudGFnZ2Vk
UHRyKCksIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGJhc2VQYWdlICogcGFnZVNpemUoKSArIGZp
cnN0TGVmdC0+c2l6ZUluQnl0ZXMoKSkpOwogICAgICAgICAKICAgICAgICAgTWV0YUFsbG9jYXRv
ckhhbmRsZSogc2Vjb25kUmlnaHQgPSBhbGxvY2F0ZShzZWNvbmRSaWdodFNpemUpOwotICAgICAg
ICBFWFBFQ1RfRVEoc2Vjb25kUmlnaHQtPmVuZCgpLCByZWludGVycHJldF9jYXN0PHZvaWQqPigo
YmFzZVBhZ2UgKyBkZWZhdWx0UGFnZXNJbkhlYXApICogcGFnZVNpemUoKSAtIGZpcnN0UmlnaHQt
PnNpemVJbkJ5dGVzKCkpKTsKKyAgICAgICAgRVhQRUNUX0VRKHNlY29uZFJpZ2h0LT5lbmQoKS51
bnRhZ2dlZFB0cigpLCByZWludGVycHJldF9jYXN0PHZvaWQqPigoYmFzZVBhZ2UgKyBkZWZhdWx0
UGFnZXNJbkhlYXApICogcGFnZVNpemUoKSAtIGZpcnN0UmlnaHQtPnNpemVJbkJ5dGVzKCkpKTsK
ICAgICAgICAgCiAgICAgICAgIGZyZWUoZmlyc3RMZWZ0KTsKICAgICAgICAgZnJlZShmaXJzdFJp
Z2h0KTsKQEAgLTQ5Niw3ICs0OTYsNyBAQCBwdWJsaWM6CiAgICAgICAgIGZyZWUoc2Vjb25kUmln
aHQpOwogICAgICAgICAKICAgICAgICAgTWV0YUFsbG9jYXRvckhhbmRsZSogZmluYWwgPSBhbGxv
Y2F0ZShkZWZhdWx0UGFnZXNJbkhlYXAgKiBwYWdlU2l6ZSgpKTsKLSAgICAgICAgRVhQRUNUX0VR
KGZpbmFsLT5zdGFydCgpLCByZWludGVycHJldF9jYXN0PHZvaWQqPihiYXNlUGFnZSAqIHBhZ2VT
aXplKCkpKTsKKyAgICAgICAgRVhQRUNUX0VRKGZpbmFsLT5zdGFydCgpLnVudGFnZ2VkUHRyKCks
IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGJhc2VQYWdlICogcGFnZVNpemUoKSkpOwogICAgICAg
ICAKICAgICAgICAgZnJlZShmaW5hbCk7CiAgICAgfQpAQCAtNTExLDE2ICs1MTEsMTYgQEAgcHVi
bGljOgogICAgICAgICBmb3IgKHVuc2lnbmVkIGluZGV4ID0gMDsgaW5kZXggPCBudW1TbG90czsg
KytpbmRleCkgewogICAgICAgICAgICAgTWV0YUFsbG9jYXRvckhhbmRsZSogdG9GcmVlID0gYWxs
b2NhdGUoc2l6ZSwgc2FuaXR5Q2hlY2tNb2RlKTsKICAgICAgICAgICAgIGlmICghaGFuZGxlcy5p
c0VtcHR5KCkpIHsKLSAgICAgICAgICAgICAgICB3aGlsZSAodG9GcmVlLT5zdGFydCgpICE9IGhh
bmRsZXMubGFzdCgpLT5lbmQoKSkgeworICAgICAgICAgICAgICAgIHdoaWxlICh0b0ZyZWUtPnN0
YXJ0KCkudW50YWdnZWRQdHIoKSAhPSBoYW5kbGVzLmxhc3QoKS0+ZW5kKCkudW50YWdnZWRQdHIo
KSkgewogICAgICAgICAgICAgICAgICAgICBoYW5kbGVzVG9GcmVlLmFwcGVuZCh0b0ZyZWUpOwog
ICAgICAgICAgICAgICAgICAgICB0b0ZyZWUgPSBhbGxvY2F0ZShzaXplLCBzYW5pdHlDaGVja01v
ZGUpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgTWV0
YUFsbG9jYXRvckhhbmRsZSogZnJhZ2dlciA9IGFsbG9jYXRlKDMyLCBzYW5pdHlDaGVja01vZGUp
OwotICAgICAgICAgICAgRVhQRUNUX0VRKGZyYWdnZXItPnN0YXJ0KCksIHRvRnJlZS0+ZW5kKCkp
OworICAgICAgICAgICAgRVhQRUNUX0VRKGZyYWdnZXItPnN0YXJ0KCkudW50YWdnZWRQdHIoKSwg
dG9GcmVlLT5lbmQoKS51bnRhZ2dlZFB0cigpKTsKICAgICAgICAgICAgIAotICAgICAgICAgICAg
bG9jYXRpb25zLmFwcGVuZCh0b0ZyZWUtPnN0YXJ0KCkpOworICAgICAgICAgICAgbG9jYXRpb25z
LmFwcGVuZCh0b0ZyZWUtPnN0YXJ0KCkudW50YWdnZWRQdHIoKSk7CiAKICAgICAgICAgICAgIGhh
bmRsZXNUb0ZyZWUuYXBwZW5kKHRvRnJlZSk7CiAgICAgICAgICAgICBoYW5kbGVzLmFwcGVuZChm
cmFnZ2VyKTsKQEAgLTUzNywxNCArNTM3LDE0IEBAIHB1YmxpYzoKICAgICAgICAgZm9yICh1bnNp
Z25lZCBpbmRleCA9IDA7IGluZGV4IDwgbnVtU2xvdHM7ICsraW5kZXgpIHsKICAgICAgICAgICAg
IE1ldGFBbGxvY2F0b3JIYW5kbGUqIGJlc3RGaXQgPSBhbGxvY2F0ZShzaXplIC0gMzIsIHNhbml0
eUNoZWNrTW9kZSk7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIEVYUEVDVF9UUlVFKGJlc3RG
aXQtPnN0YXJ0KCkgPT0gbG9jYXRpb25zLmF0KGluZGV4KQotICAgICAgICAgICAgICAgICAgICAg
ICAgfHwgYmVzdEZpdC0+ZW5kKCkgPT0gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4ocmVpbnRlcnBy
ZXRfY2FzdDx1aW50cHRyX3Q+KGxvY2F0aW9ucy5hdChpbmRleCkpICsgc2l6ZSkpOworICAgICAg
ICAgICAgRVhQRUNUX1RSVUUoYmVzdEZpdC0+c3RhcnQoKS51bnRhZ2dlZFB0cigpID09IGxvY2F0
aW9ucy5hdChpbmRleCkKKyAgICAgICAgICAgICAgICB8fCBiZXN0Rml0LT5lbmQoKS51bnRhZ2dl
ZFB0cigpID09IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0
cl90Pihsb2NhdGlvbnMuYXQoaW5kZXgpKSArIHNpemUpKTsKICAgICAgICAgICAgIAogICAgICAg
ICAgICAgTWV0YUFsbG9jYXRvckhhbmRsZSogc21hbGwgPSBhbGxvY2F0ZSgzMiwgc2FuaXR5Q2hl
Y2tNb2RlKTsKLSAgICAgICAgICAgIGlmIChiZXN0Rml0LT5zdGFydCgpID09IGxvY2F0aW9ucy5h
dChpbmRleCkpCi0gICAgICAgICAgICAgICAgRVhQRUNUX0VRKHNtYWxsLT5zdGFydCgpLCBiZXN0
Rml0LT5lbmQoKSk7CisgICAgICAgICAgICBpZiAoYmVzdEZpdC0+c3RhcnQoKS51bnRhZ2dlZFB0
cigpID09IGxvY2F0aW9ucy5hdChpbmRleCkpCisgICAgICAgICAgICAgICAgRVhQRUNUX0VRKHNt
YWxsLT5zdGFydCgpLnVudGFnZ2VkUHRyKCksIGJlc3RGaXQtPmVuZCgpLnVudGFnZ2VkUHRyKCkp
OwogICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIEVYUEVDVF9FUShzbWFsbC0+ZW5k
KCksIGJlc3RGaXQtPnN0YXJ0KCkpOworICAgICAgICAgICAgICAgIEVYUEVDVF9FUShzbWFsbC0+
ZW5kKCkudW50YWdnZWRQdHIoKSwgYmVzdEZpdC0+c3RhcnQoKS51bnRhZ2dlZFB0cigpKTsKICAg
ICAgICAgICAgIAogICAgICAgICAgICAgZnJlZShiZXN0Rml0LCBzYW5pdHlDaGVja01vZGUpOwog
ICAgICAgICAgICAgZnJlZShzbWFsbCwgc2FuaXR5Q2hlY2tNb2RlKTsKQEAgLTU1Niw3ICs1NTYs
NyBAQCBwdWJsaWM6CiAgICAgICAgICAgICBmcmVlKGhhbmRsZXMuYXQoaW5kZXgpLCBzYW5pdHlD
aGVja01vZGUpOwogICAgICAgICAKICAgICAgICAgTWV0YUFsbG9jYXRvckhhbmRsZSogZmluYWwg
PSBhbGxvY2F0ZShkZWZhdWx0UGFnZXNJbkhlYXAgKiBwYWdlU2l6ZSgpLCBzYW5pdHlDaGVja01v
ZGUpOwotICAgICAgICBFWFBFQ1RfRVEoZmluYWwtPnN0YXJ0KCksIHJlaW50ZXJwcmV0X2Nhc3Q8
dm9pZCo+KGJhc2VQYWdlICogcGFnZVNpemUoKSkpOworICAgICAgICBFWFBFQ1RfRVEoZmluYWwt
PnN0YXJ0KCkudW50YWdnZWRQdHIoKSwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oYmFzZVBhZ2Ug
KiBwYWdlU2l6ZSgpKSk7CiAgICAgICAgIAogICAgICAgICBmcmVlKGZpbmFsLCBzYW5pdHlDaGVj
a01vZGUpOwogICAgIH0KQEAgLTU2Nyw3ICs1NjcsNyBAQCBwdWJsaWM6CiAgICAgICAgIE1ldGFB
bGxvY2F0b3JIYW5kbGUqIGhhbmRsZSA9IGFsbG9jYXRlKGZpcnN0U2l6ZSk7CiAgICAgICAgIAog
ICAgICAgICAvLyBTaHJpbmsgaXQsIGFuZCBtYWtlIHN1cmUgdGhhdCBvdXIgc3RhdGUgcmVmbGVj
dHMgdGhlIHNocmlua2FnZS4KLSAgICAgICAgbm90aWZ5RnJlZShyZWludGVycHJldF9jYXN0PHZv
aWQqPihyZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4oaGFuZGxlLT5zdGFydCgpKSArIHNlY29u
ZFNpemUpLCBmaXJzdFNpemUgLSBzZWNvbmRTaXplKTsKKyAgICAgICAgbm90aWZ5RnJlZShyZWlu
dGVycHJldF9jYXN0PHZvaWQqPihoYW5kbGUtPnN0YXJ0KCkudW50YWdnZWRQdHI8dWludHB0cl90
PigpICsgc2Vjb25kU2l6ZSksIGZpcnN0U2l6ZSAtIHNlY29uZFNpemUpOwogICAgICAgICAKICAg
ICAgICAgaGFuZGxlLT5zaHJpbmsoc2Vjb25kU2l6ZSk7CiAgICAgICAgIEVYUEVDVF9FUShoYW5k
bGUtPnNpemVJbkJ5dGVzKCksIHNlY29uZFNpemUpOwpAQCAtNTc5LDE0ICs1NzksMTQgQEAgcHVi
bGljOgogICAgICAgICAKICAgICAgICAgLy8gQWxsb2NhdGUgdGhlIHJlbWFpbmRlciBvZiB0aGUg
aGVhcC4KICAgICAgICAgTWV0YUFsbG9jYXRvckhhbmRsZSogcmVtYWluZGVyID0gYWxsb2NhdGUo
ZGVmYXVsdFBhZ2VzSW5IZWFwICogcGFnZVNpemUoKSAtIHNlY29uZFNpemUpOwotICAgICAgICBF
WFBFQ1RfRVEocmVtYWluZGVyLT5zdGFydCgpLCBoYW5kbGUtPmVuZCgpKTsKKyAgICAgICAgRVhQ
RUNUX0VRKHJlbWFpbmRlci0+c3RhcnQoKS51bnRhZ2dlZFB0cigpLCBoYW5kbGUtPmVuZCgpLnVu
dGFnZ2VkUHRyKCkpOwogICAgICAgICAKICAgICAgICAgZnJlZShyZW1haW5kZXIpOwogICAgICAg
ICBmcmVlKGhhbmRsZSk7CiAgICAgICAgIAogICAgICAgICAvLyBBc3NlcnQgdGhhdCB0aGUgaGVh
cCBpcyBlbXB0eSBhbmQgZmluaXNoIHVwLgogICAgICAgICBNZXRhQWxsb2NhdG9ySGFuZGxlKiBm
aW5hbCA9IGFsbG9jYXRlKGRlZmF1bHRQYWdlc0luSGVhcCAqIHBhZ2VTaXplKCkpOwotICAgICAg
ICBFWFBFQ1RfRVEoZmluYWwtPnN0YXJ0KCksIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGJhc2VQ
YWdlICogcGFnZVNpemUoKSkpOworICAgICAgICBFWFBFQ1RfRVEoZmluYWwtPnN0YXJ0KCkudW50
YWdnZWRQdHIoKSwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oYmFzZVBhZ2UgKiBwYWdlU2l6ZSgp
KSk7CiAgICAgICAgIAogICAgICAgICBmcmVlKGZpbmFsKTsKICAgICB9CkBAIC02MDgsNyArNjA4
LDcgQEAgcHVibGljOgogICAgICAgICBFWFBFQ1RfVFJVRShjdXJyZW50SGVhcEdyb3d0aE1vZGUg
PT0gRG9udEdyb3dIZWFwKTsKICAgICAgICAgRVhQRUNUX0VRKGFsbG93QWxsb2NhdGVQYWdlcywg
c3RhdGljX2Nhc3Q8c2l6ZV90PigwKSk7CiAgICAgICAgIEVYUEVDVF9FUShyZXF1ZXN0ZWROdW1Q
YWdlcywgKHNlY29uZFNpemUgKyBwYWdlU2l6ZSgpIC0gMSkgLyBwYWdlU2l6ZSgpKTsKLSAgICAg
ICAgRVhQRUNUX0VRKHNlY29uZEhhbmRsZS0+c3RhcnQoKSwgcmVpbnRlcnByZXRfY2FzdDx2b2lk
Kj4oKGJhc2VQYWdlICsgZGVmYXVsdFBhZ2VzSW5IZWFwKSAqIHBhZ2VTaXplKCkpKTsKKyAgICAg
ICAgRVhQRUNUX0VRKHNlY29uZEhhbmRsZS0+c3RhcnQoKS51bnRhZ2dlZFB0cigpLCByZWludGVy
cHJldF9jYXN0PHZvaWQqPigoYmFzZVBhZ2UgKyBkZWZhdWx0UGFnZXNJbkhlYXApICogcGFnZVNp
emUoKSkpOwogICAgICAgICAKICAgICAgICAgcmVxdWVzdGVkTnVtUGFnZXMgPSAwOwogICAgICAg
ICAKQEAgLTYzNyw3ICs2MzcsNyBAQCBwdWJsaWM6CiAgICAgICAgIEVYUEVDVF9UUlVFKGN1cnJl
bnRIZWFwR3Jvd3RoTW9kZSA9PSBEb250R3Jvd0hlYXApOwogICAgICAgICBFWFBFQ1RfRVEoYWxs
b3dBbGxvY2F0ZVBhZ2VzLCBzdGF0aWNfY2FzdDxzaXplX3Q+KDApKTsKICAgICAgICAgRVhQRUNU
X0VRKHJlcXVlc3RlZE51bVBhZ2VzLCAoc2Vjb25kU2l6ZSArIHBhZ2VTaXplKCkgLSAxKSAvIHBh
Z2VTaXplKCkpOwotICAgICAgICBFWFBFQ1RfRVEoc2Vjb25kSGFuZGxlLT5zdGFydCgpLCByZWlu
dGVycHJldF9jYXN0PHZvaWQqPigoYmFzZVBhZ2UgKyBkZWZhdWx0UGFnZXNJbkhlYXAgKyAxKSAq
IHBhZ2VTaXplKCkpKTsKKyAgICAgICAgRVhQRUNUX0VRKHNlY29uZEhhbmRsZS0+c3RhcnQoKS51
bnRhZ2dlZFB0cigpLCByZWludGVycHJldF9jYXN0PHZvaWQqPigoYmFzZVBhZ2UgKyBkZWZhdWx0
UGFnZXNJbkhlYXAgKyAxKSAqIHBhZ2VTaXplKCkpKTsKICAgICAgICAgCiAgICAgICAgIHJlcXVl
c3RlZE51bVBhZ2VzID0gMDsKICAgICAgICAgCkBAIC02NTAsOCArNjUwLDggQEAgcHVibGljOgog
ICAgICAgICAKICAgICAgICAgZmlyc3RIYW5kbGUgPSBhbGxvY2F0ZShmaXJzdFNpemUpOwogICAg
ICAgICBzZWNvbmRIYW5kbGUgPSBhbGxvY2F0ZShzZWNvbmRTaXplKTsKLSAgICAgICAgRVhQRUNU
X0VRKGZpcnN0SGFuZGxlLT5zdGFydCgpLCByZWludGVycHJldF9jYXN0PHZvaWQqPihiYXNlUGFn
ZSAqIHBhZ2VTaXplKCkpKTsKLSAgICAgICAgRVhQRUNUX0VRKHNlY29uZEhhbmRsZS0+c3RhcnQo
KSwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oKGJhc2VQYWdlICsgZGVmYXVsdFBhZ2VzSW5IZWFw
ICsgMSkgKiBwYWdlU2l6ZSgpKSk7CisgICAgICAgIEVYUEVDVF9FUShmaXJzdEhhbmRsZS0+c3Rh
cnQoKS51bnRhZ2dlZFB0cigpLCByZWludGVycHJldF9jYXN0PHZvaWQqPihiYXNlUGFnZSAqIHBh
Z2VTaXplKCkpKTsKKyAgICAgICAgRVhQRUNUX0VRKHNlY29uZEhhbmRsZS0+c3RhcnQoKS51bnRh
Z2dlZFB0cigpLCByZWludGVycHJldF9jYXN0PHZvaWQqPigoYmFzZVBhZ2UgKyBkZWZhdWx0UGFn
ZXNJbkhlYXAgKyAxKSAqIHBhZ2VTaXplKCkpKTsKICAgICAgICAgZnJlZShmaXJzdEhhbmRsZSk7
CiAgICAgICAgIGZyZWUoc2Vjb25kSGFuZGxlKTsKICAgICB9CkBAIC02NzAsNyArNjcwLDcgQEAg
VEVTVF9GKE1ldGFBbGxvY2F0b3JUZXN0LCBBbGxvY1plcm8pICAgIAogICAgIEFTU0VSVCghYWxs
b2NhdG9yLT5hbGxvY2F0ZSgwLCAwKSk7CiAgICAgCiAgICAgTWV0YUFsbG9jYXRvckhhbmRsZSog
ZmluYWwgPSBhbGxvY2F0ZShkZWZhdWx0UGFnZXNJbkhlYXAgKiBwYWdlU2l6ZSgpKTsKLSAgICBF
WFBFQ1RfRVEoZmluYWwtPnN0YXJ0KCksIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGJhc2VQYWdl
ICogcGFnZVNpemUoKSkpOworICAgIEVYUEVDVF9FUShmaW5hbC0+c3RhcnQoKS51bnRhZ2dlZFB0
cigpLCByZWludGVycHJldF9jYXN0PHZvaWQqPihiYXNlUGFnZSAqIHBhZ2VTaXplKCkpKTsKICAg
ICBmcmVlKGZpbmFsKTsKIH0KIApAQCAtOTU1LDMgKzk1NSwxNCBAQCBURVNUX0YoTWV0YUFsbG9j
YXRvclRlc3QsIERlbWFuZEFsbG9jRG9uCiB9CiAKIH0gLy8gbmFtZXNwYWNlIFRlc3RXZWJLaXRB
UEkKKworI2lmIFVTRShQT0lOVEVSX1BST0ZJTElORykKKworbmFtZXNwYWNlIFdURiB7CisKK2Nv
bnN0IGNoYXIqIHRhZ0ZvclB0cihjb25zdCB2b2lkKikgeyByZXR1cm4gIjx1bmtub3duPiI7IH0K
K2NvbnN0IGNoYXIqIHB0clRhZ05hbWUoUHRyVGFnKSB7IHJldHVybiAiPHVua25vd24+IjsgfQor
Cit9IC8vIG5hbWVzcGFjZSBXVEYKKworI2VuZGlmIC8vIFVTRShQT0lOVEVSX1BST0ZJTElORykK
</data>
<flag name="review"
          id="357302"
          type_id="1"
          status="+"
          setter="saam"
    />
          </attachment>
      

    </bug>

</bugzilla>