<?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>160053</bug_id>
          
          <creation_ts>2016-07-21 14:47:56 -0700</creation_ts>
          <short_desc>Teach MarkedSpace how to allocate auxiliary storage</short_desc>
          <delta_ts>2016-07-22 16:31:58 -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>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>159658</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Filip Pizlo">fpizlo</reporter>
          <assigned_to name="Filip Pizlo">fpizlo</assigned_to>
          <cc>commit-queue</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1213343</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-07-21 14:47:56 -0700</bug_when>
    <thetext>Patch forthcoming.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1213351</commentid>
    <comment_count>1</comment_count>
      <attachid>284266</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-07-21 15:18:53 -0700</bug_when>
    <thetext>Created attachment 284266
it begins</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1213393</commentid>
    <comment_count>2</comment_count>
      <attachid>284280</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-07-21 16:33:53 -0700</bug_when>
    <thetext>Created attachment 284280
maybe done</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1213426</commentid>
    <comment_count>3</comment_count>
      <attachid>284288</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-07-21 17:21:07 -0700</bug_when>
    <thetext>Created attachment 284288
it seems to work!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1213427</commentid>
    <comment_count>4</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-07-21 17:23:32 -0700</bug_when>
    <thetext>Attachment 284288 did not pass style-queue:


ERROR: Source/JavaScriptCore/heap/MarkedSpace.cpp:206:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
Total errors found: 1 in 14 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1213745</commentid>
    <comment_count>5</comment_count>
      <attachid>284288</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2016-07-22 14:36:44 -0700</bug_when>
    <thetext>Comment on attachment 284288
it seems to work!

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

&gt; Source/JavaScriptCore/ChangeLog:20
&gt; +        To make this somewhat nice, this change also fixes how we describe subspaces. Intead of a

Intead -&gt; Instead.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1213766</commentid>
    <comment_count>6</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-07-22 15:16:12 -0700</bug_when>
    <thetext>Landed in https://trac.webkit.org/changeset/203621</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1213782</commentid>
    <comment_count>7</comment_count>
      <attachid>284288</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-07-22 16:14:22 -0700</bug_when>
    <thetext>Comment on attachment 284288
it seems to work!

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

&gt; Source/JavaScriptCore/ChangeLog:26
&gt; +        with DestructionMode::Needed and DestructionMode::NotNeeded, but I felt like that involves

FWIW, I think this is nicer style.

&gt; Source/JavaScriptCore/heap/MarkedSpace.cpp:132
&gt; +            if (functor(subspace.largeAllocator, 0, attributes) == IterationStatus::Done)

It&apos;s sort of confusing to use 0 to indicate to the functor that the allocator is the large allocator.
Could we indicate this in another way? Maybe Optional&lt;size_t&gt; or something else?
Or has this been the paradigm for a while?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1213789</commentid>
    <comment_count>8</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-07-22 16:31:58 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; Comment on attachment 284288 [details]
&gt; it seems to work!
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=284288&amp;action=review
&gt; 
&gt; &gt; Source/JavaScriptCore/ChangeLog:26
&gt; &gt; +        with DestructionMode::Needed and DestructionMode::NotNeeded, but I felt like that involves
&gt; 
&gt; FWIW, I think this is nicer style.
&gt; 
&gt; &gt; Source/JavaScriptCore/heap/MarkedSpace.cpp:132
&gt; &gt; +            if (functor(subspace.largeAllocator, 0, attributes) == IterationStatus::Done)
&gt; 
&gt; It&apos;s sort of confusing to use 0 to indicate to the functor that the
&gt; allocator is the large allocator.
&gt; Could we indicate this in another way? Maybe Optional&lt;size_t&gt; or something
&gt; else?
&gt; Or has this been the paradigm for a while?

This particular code has always initialized cellSize to 0 for large allocators.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>284266</attachid>
            <date>2016-07-21 15:18:53 -0700</date>
            <delta_ts>2016-07-21 16:33:53 -0700</delta_ts>
            <desc>it begins</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>32112</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0FsbG9jYXRvckF0dHJpYnV0ZXMuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0FsbG9jYXRvckF0dHJp
YnV0ZXMuY3BwCShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0Fs
bG9jYXRvckF0dHJpYnV0ZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzcgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIkFsbG9jYXRvckF0dHJpYnV0ZXMuaCIKKworbmFtZXNwYWNlIEpT
QyB7CisKK3ZvaWQgQWxsb2NhdG9yQXR0cmlidXRlczo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBj
b25zdAoreworICAgIG91dC5wcmludCgieyIsIGRlc3RydWN0aW9uLCAiLCAiLCBjZWxsS2luZCwg
In0iKTsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL0FsbG9jYXRvckF0dHJpYnV0ZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9BbGxvY2F0b3JBdHRyaWJ1dGVzLmgJKG5vbmV4aXN0ZW50KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQWxsb2NhdG9yQXR0cmlidXRlcy5oCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsNDMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJEZXN0cnVjdGlvbk1vZGUu
aCIKKyNpbmNsdWRlICJIZWFwQ2VsbC5oIgorCituYW1lc3BhY2UgSlNDIHsKKworc3RydWN0IEFs
bG9jYXRvckF0dHJpYnV0ZXMgeworICAgIEFsbG9jYXRvckF0dHJpYnV0ZXMoKSB7IH0KKyAgICAK
KyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3Q7CisgICAgCisgICAgRGVzdHJ1
Y3Rpb25Nb2RlIGRlc3RydWN0aW9uIHsgRG9lc05vdE5lZWREZXN0cnVjdGlvbiB9OworICAgIEhl
YXBDZWxsOjpLaW5kIGNlbGxLaW5kIHsgSGVhcENlbGw6OkpTQ2VsbCB9OworfTsKKworfSAvLyBu
YW1lc3BhY2UgSlNDCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0Rlc3RydWN0
aW9uTW9kZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvRGVz
dHJ1Y3Rpb25Nb2RlLmNwcAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9EZXN0cnVjdGlvbk1vZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTAgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIkRlc3RydWN0aW9uTW9kZS5oIgorCisjaW5jbHVkZSA8d3Rm
L1ByaW50U3RyZWFtLmg+CisKK25hbWVzcGFjZSBXVEYgeworCit1c2luZyBuYW1lc3BhY2UgSlND
OworCit2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mIG91dCwgRGVzdHJ1Y3Rpb25Nb2Rl
IG1vZGUpCit7CisgICAgc3dpdGNoIChtb2RlKSB7CisgICAgY2FzZSBOZWVkc0Rlc3RydWN0aW9u
OgorICAgICAgICBvdXQucHJpbnQoIk5lZWRzRGVzdHJ1Y3Rpb24iKTsKKyAgICAgICAgcmV0dXJu
OworICAgIGNhc2UgRG9lc05vdE5lZWREZXN0cnVjdGlvbjoKKyAgICAgICAgb3V0LnByaW50KCJE
b2VzTm90TmVlZERlc3RydWN0aW9uIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisg
ICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV1RG
CisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0Rlc3RydWN0aW9uTW9kZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0Rlc3RydWN0aW9uTW9kZS5o
CShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0Rlc3RydWN0aW9u
TW9kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDMgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI3ByYWdtYSBvbmNlCisKK25hbWVzcGFjZSBK
U0MgeworCitlbnVtIERlc3RydWN0aW9uTW9kZSA6IGludDhfdCB7CisgICAgRG9lc05vdE5lZWRE
ZXN0cnVjdGlvbiwKKyAgICBOZWVkc0Rlc3RydWN0aW9uCit9OworCit9IC8vIG5hbWVzcGFjZSBK
U0MKKworbmFtZXNwYWNlIFdURiB7CisKK2NsYXNzIFByaW50U3RyZWFtOwordm9pZCBwcmludElu
dGVybmFsKFByaW50U3RyZWFtJiwgSlNDOjpEZXN0cnVjdGlvbk1vZGUpOworCit9IC8vIG5hbWVz
cGFjZSBXVEYKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQWxsb2Nh
dG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRB
bGxvY2F0b3IuY3BwCShyZXZpc2lvbiAyMDM1MjUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9NYXJrZWRBbGxvY2F0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xODYsMTAgKzE4Niw3
IEBAIE1hcmtlZEJsb2NrKiBNYXJrZWRBbGxvY2F0b3I6OmFsbG9jYXRlQmwKIAogICAgIHNpemVf
dCBjZWxsU2l6ZSA9IG1fY2VsbFNpemUgPyBtX2NlbGxTaXplIDogV1RGOjpyb3VuZFVwVG9NdWx0
aXBsZU9mPE1hcmtlZEJsb2NrOjphdG9tU2l6ZT4oYnl0ZXMpOwogCi0gICAgLy8gRklYTUU6IFN1
cHBvcnQgYWxsb2NhdGluZyBzdG9yYWdlIGluIG1hcmtlZCBibG9ja3MuIFRoaXMgd291bGQgbWVh
biB0aGF0IGFsbG9jYXRlQmxvY2soKQotICAgIC8vIHRha2VzIGEgSGVhcENlbGw6OktpbmQsIG9y
IHNvbWV0aGluZyBsaWtlIHRoYXQuCi0gICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTE1OTY1OAotICAgIHJldHVybiBNYXJrZWRCbG9jazo6Y3JlYXRlKCptX2hl
YXAsIHRoaXMsIGJsb2NrU2l6ZSwgY2VsbFNpemUsIG1fbmVlZHNEZXN0cnVjdGlvbiwgSGVhcENl
bGw6OkpTQ2VsbCk7CisgICAgcmV0dXJuIE1hcmtlZEJsb2NrOjpjcmVhdGUoKm1faGVhcCwgdGhp
cywgYmxvY2tTaXplLCBjZWxsU2l6ZSwgbV9hdHRyaWJ1dGVzKTsKIH0KIAogdm9pZCBNYXJrZWRB
bGxvY2F0b3I6OmFkZEJsb2NrKE1hcmtlZEJsb2NrKiBibG9jaykKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL01hcmtlZEFsbG9jYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEFsbG9jYXRvci5oCShyZXZpc2lvbiAyMDM1MjUpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRBbGxvY2F0b3IuaAkod29ya2luZyBj
b3B5KQpAQCAtMjYsNiArMjYsNyBAQAogI2lmbmRlZiBNYXJrZWRBbGxvY2F0b3JfaAogI2RlZmlu
ZSBNYXJrZWRBbGxvY2F0b3JfaAogCisjaW5jbHVkZSAiQWxsb2NhdG9yQXR0cmlidXRlcy5oIgog
I2luY2x1ZGUgIk1hcmtlZEJsb2NrLmgiCiAjaW5jbHVkZSA8d3RmL0RvdWJseUxpbmtlZExpc3Qu
aD4KIApAQCAtNDYsOCArNDcsMTEgQEAgcHVibGljOgogICAgIHZvaWQgcmVzZXQoKTsKICAgICB2
b2lkIHN0b3BBbGxvY2F0aW5nKCk7CiAgICAgdm9pZCByZXN1bWVBbGxvY2F0aW5nKCk7Ci0gICAg
c2l6ZV90IGNlbGxTaXplKCkgeyByZXR1cm4gbV9jZWxsU2l6ZTsgfQotICAgIGJvb2wgbmVlZHNE
ZXN0cnVjdGlvbigpIHsgcmV0dXJuIG1fbmVlZHNEZXN0cnVjdGlvbjsgfQorICAgIHNpemVfdCBj
ZWxsU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fY2VsbFNpemU7IH0KKyAgICBjb25zdCBBbGxvY2F0
b3JBdHRyaWJ1dGVzJiBhdHRyaWJ1dGVzKCkgY29uc3QgeyByZXR1cm4gbV9hdHRyaWJ1dGVzOyB9
CisgICAgYm9vbCBuZWVkc0Rlc3RydWN0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9hdHRyaWJ1dGVz
LmRlc3RydWN0aW9uID09IE5lZWRzRGVzdHJ1Y3Rpb247IH0KKyAgICBEZXN0cnVjdGlvbk1vZGUg
ZGVzdHJ1Y3Rpb24oKSBjb25zdCB7IHJldHVybiBtX2F0dHJpYnV0ZXMuZGVzdHJ1Y3Rpb247IH0K
KyAgICBIZWFwQ2VsbDo6S2luZCBjZWxsS2luZCgpIGNvbnN0IHsgcmV0dXJuIG1fYXR0cmlidXRl
cy5jZWxsS2luZDsgfQogICAgIHZvaWQqIGFsbG9jYXRlKHNpemVfdCk7CiAgICAgSGVhcCogaGVh
cCgpIHsgcmV0dXJuIG1faGVhcDsgfQogICAgIE1hcmtlZEJsb2NrKiB0YWtlTGFzdEFjdGl2ZUJs
b2NrKCkKQEAgLTYxLDcgKzY1LDcgQEAgcHVibGljOgogICAgIAogICAgIHZvaWQgYWRkQmxvY2so
TWFya2VkQmxvY2sqKTsKICAgICB2b2lkIHJlbW92ZUJsb2NrKE1hcmtlZEJsb2NrKik7Ci0gICAg
dm9pZCBpbml0KEhlYXAqLCBNYXJrZWRTcGFjZSosIHNpemVfdCBjZWxsU2l6ZSwgYm9vbCBuZWVk
c0Rlc3RydWN0aW9uKTsKKyAgICB2b2lkIGluaXQoSGVhcCosIE1hcmtlZFNwYWNlKiwgc2l6ZV90
IGNlbGxTaXplLCBjb25zdCBBbGxvY2F0b3JBdHRyaWJ1dGVzJik7CiAKICAgICBib29sIGlzUGFn
ZWRPdXQoZG91YmxlIGRlYWRsaW5lKTsKICAgIApAQCAtODEsNyArODUsNyBAQCBwcml2YXRlOgog
ICAgIERvdWJseUxpbmtlZExpc3Q8TWFya2VkQmxvY2s+IG1fYmxvY2tMaXN0OwogICAgIERvdWJs
eUxpbmtlZExpc3Q8TWFya2VkQmxvY2s+IG1fcmV0aXJlZEJsb2NrczsKICAgICBzaXplX3QgbV9j
ZWxsU2l6ZTsKLSAgICBib29sIG1fbmVlZHNEZXN0cnVjdGlvbiB7IGZhbHNlIH07CisgICAgQWxs
b2NhdG9yQXR0cmlidXRlcyBtX2F0dHJpYnV0ZXM7CiAgICAgSGVhcCogbV9oZWFwOwogICAgIE1h
cmtlZFNwYWNlKiBtX21hcmtlZFNwYWNlOwogfTsKQEAgLTEwMSwxMiArMTA1LDEyIEBAIGlubGlu
ZSBNYXJrZWRBbGxvY2F0b3I6Ok1hcmtlZEFsbG9jYXRvcigKIHsKIH0KIAotaW5saW5lIHZvaWQg
TWFya2VkQWxsb2NhdG9yOjppbml0KEhlYXAqIGhlYXAsIE1hcmtlZFNwYWNlKiBtYXJrZWRTcGFj
ZSwgc2l6ZV90IGNlbGxTaXplLCBib29sIG5lZWRzRGVzdHJ1Y3Rpb24pCitpbmxpbmUgdm9pZCBN
YXJrZWRBbGxvY2F0b3I6OmluaXQoSGVhcCogaGVhcCwgTWFya2VkU3BhY2UqIG1hcmtlZFNwYWNl
LCBzaXplX3QgY2VsbFNpemUsIGNvbnN0IEFsbG9jYXRvckF0dHJpYnV0ZXMmIGF0dHJpYnV0ZXMp
CiB7CiAgICAgbV9oZWFwID0gaGVhcDsKICAgICBtX21hcmtlZFNwYWNlID0gbWFya2VkU3BhY2U7
CiAgICAgbV9jZWxsU2l6ZSA9IGNlbGxTaXplOwotICAgIG1fbmVlZHNEZXN0cnVjdGlvbiA9IG5l
ZWRzRGVzdHJ1Y3Rpb247CisgICAgbV9hdHRyaWJ1dGVzID0gYXR0cmlidXRlczsKIH0KIAogaW5s
aW5lIHZvaWQqIE1hcmtlZEFsbG9jYXRvcjo6YWxsb2NhdGUoc2l6ZV90IGJ5dGVzKQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQmxvY2suY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEJsb2NrLmNwcAkocmV2aXNpb24gMjAz
NTI1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQmxvY2suY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zNSwxNCArMzUsMTQgQEAgbmFtZXNwYWNlIEpTQyB7CiBzdGF0aWMgY29u
c3QgYm9vbCBjb21wdXRlQmFsYW5jZSA9IGZhbHNlOwogc3RhdGljIHNpemVfdCBiYWxhbmNlOwog
Ci1NYXJrZWRCbG9jayogTWFya2VkQmxvY2s6OmNyZWF0ZShIZWFwJiBoZWFwLCBNYXJrZWRBbGxv
Y2F0b3IqIGFsbG9jYXRvciwgc2l6ZV90IGNhcGFjaXR5LCBzaXplX3QgY2VsbFNpemUsIGJvb2wg
bmVlZHNEZXN0cnVjdGlvbiwgSGVhcENlbGw6OktpbmQgY2VsbEtpbmQpCitNYXJrZWRCbG9jayog
TWFya2VkQmxvY2s6OmNyZWF0ZShIZWFwJiBoZWFwLCBNYXJrZWRBbGxvY2F0b3IqIGFsbG9jYXRv
ciwgc2l6ZV90IGNhcGFjaXR5LCBzaXplX3QgY2VsbFNpemUsIGNvbnN0IEFsbG9jYXRvckF0dHJp
YnV0ZXMmIGF0dHJpYnV0ZXMpCiB7CiAgICAgaWYgKGNvbXB1dGVCYWxhbmNlKSB7CiAgICAgICAg
IGJhbGFuY2UrKzsKICAgICAgICAgaWYgKCEoYmFsYW5jZSAlIDEwKSkKICAgICAgICAgICAgIGRh
dGFMb2coIk1hcmtlZEJsb2NrIEJhbGFuY2U6ICIsIGJhbGFuY2UsICJcbiIpOwogICAgIH0KLSAg
ICBNYXJrZWRCbG9jayogYmxvY2sgPSBuZXcgKE5vdE51bGwsIGZhc3RBbGlnbmVkTWFsbG9jKGJs
b2NrU2l6ZSwgY2FwYWNpdHkpKSBNYXJrZWRCbG9jayhhbGxvY2F0b3IsIGNhcGFjaXR5LCBjZWxs
U2l6ZSwgbmVlZHNEZXN0cnVjdGlvbiwgY2VsbEtpbmQpOworICAgIE1hcmtlZEJsb2NrKiBibG9j
ayA9IG5ldyAoTm90TnVsbCwgZmFzdEFsaWduZWRNYWxsb2MoYmxvY2tTaXplLCBjYXBhY2l0eSkp
IE1hcmtlZEJsb2NrKGFsbG9jYXRvciwgY2FwYWNpdHksIGNlbGxTaXplLCBhdHRyaWJ1dGVzKTsK
ICAgICBoZWFwLmRpZEFsbG9jYXRlQmxvY2soY2FwYWNpdHkpOwogICAgIHJldHVybiBibG9jazsK
IH0KQEAgLTYwLDE5ICs2MCwyMCBAQCB2b2lkIE1hcmtlZEJsb2NrOjpkZXN0cm95KEhlYXAmIGhl
YXAsIE1hCiAgICAgaGVhcC5kaWRGcmVlQmxvY2soY2FwYWNpdHkpOwogfQogCi1NYXJrZWRCbG9j
azo6TWFya2VkQmxvY2soTWFya2VkQWxsb2NhdG9yKiBhbGxvY2F0b3IsIHNpemVfdCBjYXBhY2l0
eSwgc2l6ZV90IGNlbGxTaXplLCBib29sIG5lZWRzRGVzdHJ1Y3Rpb24sIEhlYXBDZWxsOjpLaW5k
IGNlbGxLaW5kKQorTWFya2VkQmxvY2s6Ok1hcmtlZEJsb2NrKE1hcmtlZEFsbG9jYXRvciogYWxs
b2NhdG9yLCBzaXplX3QgY2FwYWNpdHksIHNpemVfdCBjZWxsU2l6ZSwgY29uc3QgQWxsb2NhdG9y
QXR0cmlidXRlcyYgYXR0cmlidXRlcykKICAgICA6IERvdWJseUxpbmtlZExpc3ROb2RlPE1hcmtl
ZEJsb2NrPigpCiAgICAgLCBtX2F0b21zUGVyQ2VsbCgoY2VsbFNpemUgKyBhdG9tU2l6ZSAtIDEp
IC8gYXRvbVNpemUpCiAgICAgLCBtX2VuZEF0b20oKGFsbG9jYXRvci0+Y2VsbFNpemUoKSA/IGF0
b21zUGVyQmxvY2sgLSBtX2F0b21zUGVyQ2VsbCA6IGZpcnN0QXRvbSgpKSArIDEpCiAgICAgLCBt
X2NhcGFjaXR5KGNhcGFjaXR5KQotICAgICwgbV9uZWVkc0Rlc3RydWN0aW9uKG5lZWRzRGVzdHJ1
Y3Rpb24pCi0gICAgLCBtX2NlbGxLaW5kKGNlbGxLaW5kKQorICAgICwgbV9hdHRyaWJ1dGVzKGF0
dHJpYnV0ZXMpCiAgICAgLCBtX2FsbG9jYXRvcihhbGxvY2F0b3IpCiAgICAgLCBtX3N0YXRlKE5l
dykgLy8gQWxsIGNlbGxzIHN0YXJ0IG91dCB1bm1hcmtlZC4KICAgICAsIG1fd2Vha1NldChhbGxv
Y2F0b3ItPmhlYXAoKS0+dm0oKSwgKnRoaXMpCiB7CiAgICAgQVNTRVJUKGFsbG9jYXRvcik7CiAg
ICAgSEVBUF9MT0dfQkxPQ0tfU1RBVEVfVFJBTlNJVElPTih0aGlzKTsKKyAgICBpZiAobV9hdHRy
aWJ1dGVzLmNlbGxLaW5kICE9IEhlYXBDZWxsOjpKU0NlbGwpCisgICAgICAgIFJFTEVBU0VfQVNT
RVJUKG1fYXR0cmlidXRlcy5kZXN0cnVjdGlvbiA9PSBEb2VzTm90TmVlZERlc3RydWN0aW9uKTsK
IH0KIAogaW5saW5lIHZvaWQgTWFya2VkQmxvY2s6OmNhbGxEZXN0cnVjdG9yKEhlYXBDZWxsKiBj
ZWxsKQpAQCAtMTM0LDEwICsxMzUsMTAgQEAgTWFya2VkQmxvY2s6OkZyZWVMaXN0IE1hcmtlZEJs
b2NrOjpzd2VlcAogCiAgICAgbV93ZWFrU2V0LnN3ZWVwKCk7CiAKLSAgICBpZiAoc3dlZXBNb2Rl
ID09IFN3ZWVwT25seSAmJiAhbV9uZWVkc0Rlc3RydWN0aW9uKQorICAgIGlmIChzd2VlcE1vZGUg
PT0gU3dlZXBPbmx5ICYmIG1fYXR0cmlidXRlcy5kZXN0cnVjdGlvbiA9PSBEb2VzTm90TmVlZERl
c3RydWN0aW9uKQogICAgICAgICByZXR1cm4gRnJlZUxpc3QoKTsKIAotICAgIGlmIChtX25lZWRz
RGVzdHJ1Y3Rpb24pCisgICAgaWYgKG1fYXR0cmlidXRlcy5kZXN0cnVjdGlvbiA9PSBOZWVkc0Rl
c3RydWN0aW9uKQogICAgICAgICByZXR1cm4gc3dlZXBIZWxwZXI8dHJ1ZT4oc3dlZXBNb2RlKTsK
ICAgICByZXR1cm4gc3dlZXBIZWxwZXI8ZmFsc2U+KHN3ZWVwTW9kZSk7CiB9CkBAIC0yMTYsNyAr
MjE3LDcgQEAgdm9pZCBNYXJrZWRCbG9jazo6c3RvcEFsbG9jYXRpbmcoY29uc3QgRgogICAgIEZy
ZWVDZWxsKiBuZXh0OwogICAgIGZvciAoRnJlZUNlbGwqIGN1cnJlbnQgPSBoZWFkOyBjdXJyZW50
OyBjdXJyZW50ID0gbmV4dCkgewogICAgICAgICBuZXh0ID0gY3VycmVudC0+bmV4dDsKLSAgICAg
ICAgaWYgKG1fbmVlZHNEZXN0cnVjdGlvbikKKyAgICAgICAgaWYgKG1fYXR0cmlidXRlcy5kZXN0
cnVjdGlvbiA9PSBOZWVkc0Rlc3RydWN0aW9uKQogICAgICAgICAgICAgcmVpbnRlcnByZXRfY2Fz
dDxIZWFwQ2VsbCo+KGN1cnJlbnQpLT56YXAoKTsKICAgICAgICAgY2xlYXJOZXdseUFsbG9jYXRl
ZChjdXJyZW50KTsKICAgICB9CkBAIC0yOTQsNyArMjk1LDcgQEAgdm9pZCBNYXJrZWRCbG9jazo6
ZGlkUmV0aXJlQmxvY2soY29uc3QgRgogICAgIEZyZWVDZWxsKiBuZXh0OwogICAgIGZvciAoRnJl
ZUNlbGwqIGN1cnJlbnQgPSBoZWFkOyBjdXJyZW50OyBjdXJyZW50ID0gbmV4dCkgewogICAgICAg
ICBuZXh0ID0gY3VycmVudC0+bmV4dDsKLSAgICAgICAgaWYgKG1fbmVlZHNEZXN0cnVjdGlvbikK
KyAgICAgICAgaWYgKG1fYXR0cmlidXRlcy5kZXN0cnVjdGlvbiA9PSBOZWVkc0Rlc3RydWN0aW9u
KQogICAgICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDxIZWFwQ2VsbCo+KGN1cnJlbnQpLT56YXAo
KTsKICAgICB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEJsb2Nr
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQmxvY2su
aAkocmV2aXNpb24gMjAzNTI1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2Vk
QmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtMSw3ICsxLDcgQEAKIC8qCiAgKiAgQ29weXJpZ2h0
IChDKSAxOTk5LTIwMDAgSGFycmkgUG9ydGVuIChwb3J0ZW5Aa2RlLm9yZykKICAqICBDb3B5cmln
aHQgKEMpIDIwMDEgUGV0ZXIgS2VsbHkgKHBta0Bwb3N0LmNvbSkKLSAqICBDb3B5cmlnaHQgKEMp
IDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTEgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAwMywgMjAwNCwgMjAw
NSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMSwgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug
Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCkBAIC0yMiw2ICsyMiw3IEBACiAjaWZu
ZGVmIE1hcmtlZEJsb2NrX2gKICNkZWZpbmUgTWFya2VkQmxvY2tfaAogCisjaW5jbHVkZSAiRGVz
dHJ1Y3Rpb25Nb2RlLmgiCiAjaW5jbHVkZSAiSGVhcENlbGwuaCIKICNpbmNsdWRlICJIZWFwT3Bl
cmF0aW9uLmgiCiAjaW5jbHVkZSAiSXRlcmF0aW9uU3RhdHVzLmgiCkBAIC0xMDcsNyArMTA4LDcg
QEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICBtdXRhYmxlIFJldHVyblR5cGUgbV9jb3Vu
dDsKICAgICAgICAgfTsKIAotICAgICAgICBzdGF0aWMgTWFya2VkQmxvY2sqIGNyZWF0ZShIZWFw
JiwgTWFya2VkQWxsb2NhdG9yKiwgc2l6ZV90IGNhcGFjaXR5LCBzaXplX3QgY2VsbFNpemUsIGJv
b2wgbmVlZHNEZXN0cnVjdGlvbiwgSGVhcENlbGw6OktpbmQpOworICAgICAgICBzdGF0aWMgTWFy
a2VkQmxvY2sqIGNyZWF0ZShIZWFwJiwgTWFya2VkQWxsb2NhdG9yKiwgc2l6ZV90IGNhcGFjaXR5
LCBzaXplX3QgY2VsbFNpemUsIGNvbnN0IEFsbG9jYXRvckF0dHJpYnV0ZXMmKTsKICAgICAgICAg
c3RhdGljIHZvaWQgZGVzdHJveShIZWFwJiwgTWFya2VkQmxvY2sqKTsKIAogICAgICAgICBzdGF0
aWMgYm9vbCBpc0F0b21BbGlnbmVkKGNvbnN0IHZvaWQqKTsKQEAgLTE0Nyw2ICsxNDgsOCBAQCBu
YW1lc3BhY2UgSlNDIHsKICAgICAgICAgYm9vbCBpc0VtcHR5KCk7CiAKICAgICAgICAgc2l6ZV90
IGNlbGxTaXplKCk7CisgICAgICAgIGNvbnN0IEFsbG9jYXRvckF0dHJpYnV0ZXMmIGF0dHJpYnV0
ZXMoKSBjb25zdDsKKyAgICAgICAgRGVzdHJ1Y3Rpb25Nb2RlIGRlc3RydWN0aW9uKCkgY29uc3Q7
CiAgICAgICAgIGJvb2wgbmVlZHNEZXN0cnVjdGlvbigpIGNvbnN0OwogICAgICAgICBIZWFwQ2Vs
bDo6S2luZCBjZWxsS2luZCgpIGNvbnN0OwogCkBAIC0xODQsNyArMTg3LDcgQEAgbmFtZXNwYWNl
IEpTQyB7CiAKICAgICAgICAgdHlwZWRlZiBjaGFyIEF0b21bYXRvbVNpemVdOwogCi0gICAgICAg
IE1hcmtlZEJsb2NrKE1hcmtlZEFsbG9jYXRvciosIHNpemVfdCBjYXBhY2l0eSwgc2l6ZV90IGNl
bGxTaXplLCBib29sIG5lZWRzRGVzdHJ1Y3Rpb24sIEhlYXBDZWxsOjpLaW5kKTsKKyAgICAgICAg
TWFya2VkQmxvY2soTWFya2VkQWxsb2NhdG9yKiwgc2l6ZV90IGNhcGFjaXR5LCBzaXplX3QgY2Vs
bFNpemUsIGNvbnN0IEFsbG9jYXRvckF0dHJpYnV0ZXMmKTsKICAgICAgICAgQXRvbSogYXRvbXMo
KTsKICAgICAgICAgc2l6ZV90IGF0b21OdW1iZXIoY29uc3Qgdm9pZCopOwogICAgICAgICB2b2lk
IGNhbGxEZXN0cnVjdG9yKEhlYXBDZWxsKik7CkBAIC0xOTksOCArMjAyLDcgQEAgbmFtZXNwYWNl
IEpTQyB7CiAgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxXVEY6OkJpdG1hcDxhdG9tc1BlckJsb2Nr
Pj4gbV9uZXdseUFsbG9jYXRlZDsKIAogICAgICAgICBzaXplX3QgbV9jYXBhY2l0eTsKLSAgICAg
ICAgYm9vbCBtX25lZWRzRGVzdHJ1Y3Rpb247Ci0gICAgICAgIEhlYXBDZWxsOjpLaW5kIG1fY2Vs
bEtpbmQ7CisgICAgICAgIEFsbG9jYXRvckF0dHJpYnV0ZXMgbV9hdHRyaWJ1dGVzOwogICAgICAg
ICBNYXJrZWRBbGxvY2F0b3IqIG1fYWxsb2NhdG9yOwogICAgICAgICBCbG9ja1N0YXRlIG1fc3Rh
dGU7CiAgICAgICAgIFdlYWtTZXQgbV93ZWFrU2V0OwpAQCAtMzAxLDE0ICszMDMsMjQgQEAgbmFt
ZXNwYWNlIEpTQyB7CiAgICAgICAgIHJldHVybiBtX2F0b21zUGVyQ2VsbCAqIGF0b21TaXplOwog
ICAgIH0KIAorICAgIGlubGluZSBjb25zdCBBbGxvY2F0b3JBdHRyaWJ1dGVzJiBNYXJrZWRCbG9j
azo6YXR0cmlidXRlcygpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9hdHRyaWJ1dGVz
OworICAgIH0KKwogICAgIGlubGluZSBib29sIE1hcmtlZEJsb2NrOjpuZWVkc0Rlc3RydWN0aW9u
KCkgY29uc3QKICAgICB7Ci0gICAgICAgIHJldHVybiBtX25lZWRzRGVzdHJ1Y3Rpb247CisgICAg
ICAgIHJldHVybiBtX2F0dHJpYnV0ZXMuZGVzdHJ1Y3Rpb24gPT0gTmVlZHNEZXN0cnVjdGlvbjsK
KyAgICB9CisKKyAgICBpbmxpbmUgRGVzdHJ1Y3Rpb25Nb2RlIE1hcmtlZEJsb2NrOjpkZXN0cnVj
dGlvbigpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9hdHRyaWJ1dGVzLmRlc3RydWN0
aW9uOwogICAgIH0KIAogICAgIGlubGluZSBIZWFwQ2VsbDo6S2luZCBNYXJrZWRCbG9jazo6Y2Vs
bEtpbmQoKSBjb25zdAogICAgIHsKLSAgICAgICAgcmV0dXJuIG1fY2VsbEtpbmQ7CisgICAgICAg
IHJldHVybiBtX2F0dHJpYnV0ZXMuY2VsbEtpbmQ7CiAgICAgfQogCiAgICAgaW5saW5lIHNpemVf
dCBNYXJrZWRCbG9jazo6c2l6ZSgpCkBAIC00MjAsNyArNDMyLDcgQEAgbmFtZXNwYWNlIEpTQyB7
CiAKICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgRnVuY3Rvcj4gaW5saW5lIEl0ZXJhdGlvblN0YXR1
cyBNYXJrZWRCbG9jazo6Zm9yRWFjaENlbGwoY29uc3QgRnVuY3RvciYgZnVuY3RvcikKICAgICB7
Ci0gICAgICAgIEhlYXBDZWxsOjpLaW5kIGtpbmQgPSBtX2NlbGxLaW5kOworICAgICAgICBIZWFw
Q2VsbDo6S2luZCBraW5kID0gbV9hdHRyaWJ1dGVzLmNlbGxLaW5kOwogICAgICAgICBmb3IgKHNp
emVfdCBpID0gZmlyc3RBdG9tKCk7IGkgPCBtX2VuZEF0b207IGkgKz0gbV9hdG9tc1BlckNlbGwp
IHsKICAgICAgICAgICAgIEhlYXBDZWxsKiBjZWxsID0gcmVpbnRlcnByZXRfY2FzdF9wdHI8SGVh
cENlbGwqPigmYXRvbXMoKVtpXSk7CiAgICAgICAgICAgICBpZiAoZnVuY3RvcihjZWxsLCBraW5k
KSA9PSBJdGVyYXRpb25TdGF0dXM6OkRvbmUpCkBAIC00MzEsNyArNDQzLDcgQEAgbmFtZXNwYWNl
IEpTQyB7CiAKICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgRnVuY3Rvcj4gaW5saW5lIEl0ZXJhdGlv
blN0YXR1cyBNYXJrZWRCbG9jazo6Zm9yRWFjaExpdmVDZWxsKGNvbnN0IEZ1bmN0b3ImIGZ1bmN0
b3IpCiAgICAgewotICAgICAgICBIZWFwQ2VsbDo6S2luZCBraW5kID0gbV9jZWxsS2luZDsKKyAg
ICAgICAgSGVhcENlbGw6OktpbmQga2luZCA9IG1fYXR0cmlidXRlcy5jZWxsS2luZDsKICAgICAg
ICAgZm9yIChzaXplX3QgaSA9IGZpcnN0QXRvbSgpOyBpIDwgbV9lbmRBdG9tOyBpICs9IG1fYXRv
bXNQZXJDZWxsKSB7CiAgICAgICAgICAgICBIZWFwQ2VsbCogY2VsbCA9IHJlaW50ZXJwcmV0X2Nh
c3RfcHRyPEhlYXBDZWxsKj4oJmF0b21zKClbaV0pOwogICAgICAgICAgICAgaWYgKCFpc0xpdmUo
Y2VsbCkpCkBAIC00NDUsNyArNDU3LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICB0ZW1wbGF0
ZSA8dHlwZW5hbWUgRnVuY3Rvcj4gaW5saW5lIEl0ZXJhdGlvblN0YXR1cyBNYXJrZWRCbG9jazo6
Zm9yRWFjaERlYWRDZWxsKGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpCiAgICAgewotICAgICAgICBI
ZWFwQ2VsbDo6S2luZCBraW5kID0gbV9jZWxsS2luZDsKKyAgICAgICAgSGVhcENlbGw6OktpbmQg
a2luZCA9IG1fYXR0cmlidXRlcy5jZWxsS2luZDsKICAgICAgICAgZm9yIChzaXplX3QgaSA9IGZp
cnN0QXRvbSgpOyBpIDwgbV9lbmRBdG9tOyBpICs9IG1fYXRvbXNQZXJDZWxsKSB7CiAgICAgICAg
ICAgICBIZWFwQ2VsbCogY2VsbCA9IHJlaW50ZXJwcmV0X2Nhc3RfcHRyPEhlYXBDZWxsKj4oJmF0
b21zKClbaV0pOwogICAgICAgICAgICAgaWYgKGlzTGl2ZShjZWxsKSkKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZFNwYWNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRTcGFjZS5jcHAJKHJldmlzaW9uIDIwMzUyNSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZFNwYWNlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMzIsMTggKzMyLDExIEBAIE1hcmtlZFNwYWNlOjpNYXJrZWRTcGFjZShIZWFwKiBoZWFw
KQogICAgICwgbV9jYXBhY2l0eSgwKQogICAgICwgbV9pc0l0ZXJhdGluZyhmYWxzZSkKIHsKLSAg
ICBmb3IgKHNpemVfdCBjZWxsU2l6ZSA9IHByZWNpc2VTdGVwOyBjZWxsU2l6ZSA8PSBwcmVjaXNl
Q3V0b2ZmOyBjZWxsU2l6ZSArPSBwcmVjaXNlU3RlcCkgewotICAgICAgICBhbGxvY2F0b3JGb3Io
Y2VsbFNpemUpLmluaXQoaGVhcCwgdGhpcywgY2VsbFNpemUsIGZhbHNlKTsKLSAgICAgICAgZGVz
dHJ1Y3RvckFsbG9jYXRvckZvcihjZWxsU2l6ZSkuaW5pdChoZWFwLCB0aGlzLCBjZWxsU2l6ZSwg
dHJ1ZSk7Ci0gICAgfQotCi0gICAgZm9yIChzaXplX3QgY2VsbFNpemUgPSBpbXByZWNpc2VTdGFy
dDsgY2VsbFNpemUgPD0gaW1wcmVjaXNlQ3V0b2ZmOyBjZWxsU2l6ZSArPSBpbXByZWNpc2VTdGVw
KSB7Ci0gICAgICAgIGFsbG9jYXRvckZvcihjZWxsU2l6ZSkuaW5pdChoZWFwLCB0aGlzLCBjZWxs
U2l6ZSwgZmFsc2UpOwotICAgICAgICBkZXN0cnVjdG9yQWxsb2NhdG9yRm9yKGNlbGxTaXplKS5p
bml0KGhlYXAsIHRoaXMsIGNlbGxTaXplLCB0cnVlKTsKLSAgICB9Ci0KLSAgICBtX25vcm1hbFNw
YWNlLmxhcmdlQWxsb2NhdG9yLmluaXQoaGVhcCwgdGhpcywgMCwgZmFsc2UpOwotICAgIG1fZGVz
dHJ1Y3RvclNwYWNlLmxhcmdlQWxsb2NhdG9yLmluaXQoaGVhcCwgdGhpcywgMCwgdHJ1ZSk7Cisg
ICAgZm9yRWFjaEFsbG9jYXRvcigKKyAgICAgICAgWyZdIChNYXJrZWRBbGxvY2F0b3ImIGFsbG9j
YXRvciwgc2l6ZV90IGNlbGxTaXplLCBBbGxvY2F0b3JBdHRyaWJ1dGVzIGF0dHJpYnV0ZXMpIC0+
IEl0ZXJhdGlvblN0YXR1cyB7CisgICAgICAgICAgICBhbGxvY2F0b3IuaW5pdChoZWFwLCB0aGlz
LCBjZWxsU2l6ZSwgYXR0cmlidXRlcyk7CisgICAgICAgICAgICByZXR1cm4gSXRlcmF0aW9uU3Rh
dHVzOjpDb250aW51ZTsKKyAgICAgICAgfSk7CiB9CiAKIE1hcmtlZFNwYWNlOjp+TWFya2VkU3Bh
Y2UoKQpAQCAtNTksOCArNTIsOSBAQCB2b2lkIE1hcmtlZFNwYWNlOjpsYXN0Q2hhbmNlVG9GaW5h
bGl6ZSgpCiB7CiAgICAgc3RvcEFsbG9jYXRpbmcoKTsKICAgICBmb3JFYWNoQWxsb2NhdG9yKAot
ICAgICAgICBbJl0gKE1hcmtlZEFsbG9jYXRvciYgYWxsb2NhdG9yKSB7CisgICAgICAgIFsmXSAo
TWFya2VkQWxsb2NhdG9yJiBhbGxvY2F0b3IsIHNpemVfdCwgQWxsb2NhdG9yQXR0cmlidXRlcykg
LT4gSXRlcmF0aW9uU3RhdHVzIHsKICAgICAgICAgICAgIGFsbG9jYXRvci5sYXN0Q2hhbmNlVG9G
aW5hbGl6ZSgpOworICAgICAgICAgICAgcmV0dXJuIEl0ZXJhdGlvblN0YXR1czo6Q29udGludWU7
CiAgICAgICAgIH0pOwogfQogCkBAIC04NywxOCArODEsMTEgQEAgdm9pZCBNYXJrZWRTcGFjZTo6
em9tYmlmeVN3ZWVwKCkKIAogdm9pZCBNYXJrZWRTcGFjZTo6cmVzZXRBbGxvY2F0b3JzKCkKIHsK
LSAgICBmb3IgKHNpemVfdCBjZWxsU2l6ZSA9IHByZWNpc2VTdGVwOyBjZWxsU2l6ZSA8PSBwcmVj
aXNlQ3V0b2ZmOyBjZWxsU2l6ZSArPSBwcmVjaXNlU3RlcCkgewotICAgICAgICBhbGxvY2F0b3JG
b3IoY2VsbFNpemUpLnJlc2V0KCk7Ci0gICAgICAgIGRlc3RydWN0b3JBbGxvY2F0b3JGb3IoY2Vs
bFNpemUpLnJlc2V0KCk7Ci0gICAgfQotCi0gICAgZm9yIChzaXplX3QgY2VsbFNpemUgPSBpbXBy
ZWNpc2VTdGFydDsgY2VsbFNpemUgPD0gaW1wcmVjaXNlQ3V0b2ZmOyBjZWxsU2l6ZSArPSBpbXBy
ZWNpc2VTdGVwKSB7Ci0gICAgICAgIGFsbG9jYXRvckZvcihjZWxsU2l6ZSkucmVzZXQoKTsKLSAg
ICAgICAgZGVzdHJ1Y3RvckFsbG9jYXRvckZvcihjZWxsU2l6ZSkucmVzZXQoKTsKLSAgICB9Ci0K
LSAgICBtX25vcm1hbFNwYWNlLmxhcmdlQWxsb2NhdG9yLnJlc2V0KCk7Ci0gICAgbV9kZXN0cnVj
dG9yU3BhY2UubGFyZ2VBbGxvY2F0b3IucmVzZXQoKTsKKyAgICBmb3JFYWNoQWxsb2NhdG9yKAor
ICAgICAgICBbJl0gKE1hcmtlZEFsbG9jYXRvciYgYWxsb2NhdG9yLCBzaXplX3QsIEFsbG9jYXRv
ckF0dHJpYnV0ZXMpIC0+IEl0ZXJhdGlvblN0YXR1cyB7CisgICAgICAgICAgICBhbGxvY2F0b3Iu
cmVzZXQoKTsKKyAgICAgICAgICAgIHJldHVybiBJdGVyYXRpb25TdGF0dXM6OkNvbnRpbnVlOwor
ICAgICAgICB9KTsKIAogICAgIG1fYmxvY2tzV2l0aE5ld09iamVjdHMuY2xlYXIoKTsKIH0KQEAg
LTEzMiwyNiArMTE5LDI4IEBAIHZvaWQgTWFya2VkU3BhY2U6OnJlYXBXZWFrU2V0cygpCiB0ZW1w
bGF0ZSA8dHlwZW5hbWUgRnVuY3Rvcj4KIHZvaWQgTWFya2VkU3BhY2U6OmZvckVhY2hBbGxvY2F0
b3IoY29uc3QgRnVuY3RvciYgZnVuY3RvcikKIHsKLSAgICBmb3IgKHNpemVfdCBjZWxsU2l6ZSA9
IHByZWNpc2VTdGVwOyBjZWxsU2l6ZSA8PSBwcmVjaXNlQ3V0b2ZmOyBjZWxsU2l6ZSArPSBwcmVj
aXNlU3RlcCkgewotICAgICAgICBmdW5jdG9yKGFsbG9jYXRvckZvcihjZWxsU2l6ZSkpOwotICAg
ICAgICBmdW5jdG9yKGRlc3RydWN0b3JBbGxvY2F0b3JGb3IoY2VsbFNpemUpKTsKLSAgICB9Ci0K
LSAgICBmb3IgKHNpemVfdCBjZWxsU2l6ZSA9IGltcHJlY2lzZVN0YXJ0OyBjZWxsU2l6ZSA8PSBp
bXByZWNpc2VDdXRvZmY7IGNlbGxTaXplICs9IGltcHJlY2lzZVN0ZXApIHsKLSAgICAgICAgZnVu
Y3RvcihhbGxvY2F0b3JGb3IoY2VsbFNpemUpKTsKLSAgICAgICAgZnVuY3RvcihkZXN0cnVjdG9y
QWxsb2NhdG9yRm9yKGNlbGxTaXplKSk7Ci0gICAgfQotCi0gICAgZnVuY3RvcihtX25vcm1hbFNw
YWNlLmxhcmdlQWxsb2NhdG9yKTsKLSAgICBmdW5jdG9yKG1fZGVzdHJ1Y3RvclNwYWNlLmxhcmdl
QWxsb2NhdG9yKTsKKyAgICBmb3JFYWNoU3Vic3BhY2UoCisgICAgICAgIFsmXSAoU3Vic3BhY2Um
IHN1YnNwYWNlLCBBbGxvY2F0b3JBdHRyaWJ1dGVzIGF0dHJpYnV0ZXMpIC0+IEl0ZXJhdGlvblN0
YXR1cyB7CisgICAgICAgICAgICBmb3IgKHNpemVfdCBjZWxsU2l6ZSA9IHByZWNpc2VTdGVwOyBj
ZWxsU2l6ZSA8PSBwcmVjaXNlQ3V0b2ZmOyBjZWxsU2l6ZSArPSBwcmVjaXNlU3RlcCkgeworICAg
ICAgICAgICAgICAgIGlmIChmdW5jdG9yKGFsbG9jYXRvckZvcihzdWJzcGFjZSwgY2VsbHNpemUp
LCBjZWxsU2l6ZSwgYXR0cmlidXRlcykgPT0gSXRlcmF0aW9uU3RhdHVzOjpEb25lKQorICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gSXRlcmF0aW9uU3RhdHVzOjpEb25lOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgZm9yIChzaXplX3QgY2VsbFNpemUgPSBpbXByZWNpc2VTdGFydDsgY2Vs
bFNpemUgPD0gaW1wcmVjaXNlQ3V0b2ZmOyBjZWxsU2l6ZSArPSBpbXByZWNpc2VTdGVwKSB7Cisg
ICAgICAgICAgICAgICAgaWYgKGZ1bmN0b3IoYWxsb2NhdG9yRm9yKHN1YnNwYWNlLCBjZWxsc2l6
ZSksIGNlbGxTaXplLCBhdHRyaWJ1dGVzKSA9PSBJdGVyYXRpb25TdGF0dXM6OkRvbmUpCisgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBJdGVyYXRpb25TdGF0dXM6OkRvbmU7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICBpZiAoZnVuY3RvcihzdWJzcGFjZS5sYXJnZUFsbG9jYXRvciwgMCwg
YXR0cmlidXRlcykgPT0gSXRlcmF0aW9uU3RhdHVzOjpEb25lKQorICAgICAgICAgICAgICAgIHJl
dHVybiBJdGVyYXRpb25TdGF0dXM6OkRvbmU7CisgICAgICAgIH0pOwogfQogCiB2b2lkIE1hcmtl
ZFNwYWNlOjpzdG9wQWxsb2NhdGluZygpCiB7CiAgICAgQVNTRVJUKCFpc0l0ZXJhdGluZygpKTsK
ICAgICBmb3JFYWNoQWxsb2NhdG9yKAotICAgICAgICBbJl0gKE1hcmtlZEFsbG9jYXRvciYgYWxs
b2NhdG9yKSB7CisgICAgICAgIFsmXSAoTWFya2VkQWxsb2NhdG9yJiBhbGxvY2F0b3IsIHNpemVf
dCwgQWxsb2NhdG9yQXR0cmlidXRlcykgLT4gSXRlcmF0aW9uU3RhdHVzIHsKICAgICAgICAgICAg
IGFsbG9jYXRvci5zdG9wQWxsb2NhdGluZygpOworICAgICAgICAgICAgcmV0dXJuIEl0ZXJhdGlv
blN0YXR1czo6Q29udGludWU7CiAgICAgICAgIH0pOwogfQogCkBAIC0xNTksMzAgKzE0OCwyNCBA
QCB2b2lkIE1hcmtlZFNwYWNlOjpyZXN1bWVBbGxvY2F0aW5nKCkKIHsKICAgICBBU1NFUlQoaXNJ
dGVyYXRpbmcoKSk7CiAgICAgZm9yRWFjaEFsbG9jYXRvcigKLSAgICAgICAgWyZdIChNYXJrZWRB
bGxvY2F0b3ImIGFsbG9jYXRvcikgeworICAgICAgICBbJl0gKE1hcmtlZEFsbG9jYXRvciYgYWxs
b2NhdG9yLCBzaXplX3QsIEFsbG9jYXRvckF0dHJpYnV0ZXMpIC0+IEl0ZXJhdGlvblN0YXR1cyB7
CiAgICAgICAgICAgICBhbGxvY2F0b3IucmVzdW1lQWxsb2NhdGluZygpOworICAgICAgICAgICAg
cmV0dXJuIEl0ZXJhdGlvblN0YXR1czo6Q29udGludWU7CiAgICAgICAgIH0pOwogfQogCiBib29s
IE1hcmtlZFNwYWNlOjppc1BhZ2VkT3V0KGRvdWJsZSBkZWFkbGluZSkKIHsKLSAgICBmb3IgKHNp
emVfdCBjZWxsU2l6ZSA9IHByZWNpc2VTdGVwOyBjZWxsU2l6ZSA8PSBwcmVjaXNlQ3V0b2ZmOyBj
ZWxsU2l6ZSArPSBwcmVjaXNlU3RlcCkgewotICAgICAgICBpZiAoYWxsb2NhdG9yRm9yKGNlbGxT
aXplKS5pc1BhZ2VkT3V0KGRlYWRsaW5lKSAKLSAgICAgICAgICAgIHx8IGRlc3RydWN0b3JBbGxv
Y2F0b3JGb3IoY2VsbFNpemUpLmlzUGFnZWRPdXQoZGVhZGxpbmUpKQotICAgICAgICAgICAgcmV0
dXJuIHRydWU7Ci0gICAgfQotCi0gICAgZm9yIChzaXplX3QgY2VsbFNpemUgPSBpbXByZWNpc2VT
dGFydDsgY2VsbFNpemUgPD0gaW1wcmVjaXNlQ3V0b2ZmOyBjZWxsU2l6ZSArPSBpbXByZWNpc2VT
dGVwKSB7Ci0gICAgICAgIGlmIChhbGxvY2F0b3JGb3IoY2VsbFNpemUpLmlzUGFnZWRPdXQoZGVh
ZGxpbmUpIAotICAgICAgICAgICAgfHwgZGVzdHJ1Y3RvckFsbG9jYXRvckZvcihjZWxsU2l6ZSku
aXNQYWdlZE91dChkZWFkbGluZSkpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0K
LSAgICBpZiAobV9ub3JtYWxTcGFjZS5sYXJnZUFsbG9jYXRvci5pc1BhZ2VkT3V0KGRlYWRsaW5l
KQotICAgICAgICB8fCBtX2Rlc3RydWN0b3JTcGFjZS5sYXJnZUFsbG9jYXRvci5pc1BhZ2VkT3V0
KGRlYWRsaW5lKSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICByZXR1cm4gZmFsc2U7Cisg
ICAgYm9vbCByZXN1bHQgPSBmYWxzZTsKKyAgICBmb3JFYWNoQWxsb2NhdG9yKAorICAgICAgICBb
Jl0gKE1hcmtlZEFsbG9jYXRvciYgYWxsb2NhdG9yLCBzaXplX3QsIEFsbG9jYXRvckF0dHJpYnV0
ZXMpIC0+IEl0ZXJhdGlvblN0YXR1cyB7CisgICAgICAgICAgICBpZiAoYWxsb2NhdG9yLmlzUGFn
ZWRPdXQoZGVhZGxpbmUpKSB7CisgICAgICAgICAgICAgICAgcmVzdWx0ID0gdHJ1ZTsKKyAgICAg
ICAgICAgICAgICByZXR1cm4gSXRlcmF0aW9uU3RhdHVzOjpEb25lOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgcmV0dXJuIEl0ZXJhdGlvblN0YXR1czo6Q29udGludWU7CisgICAgICAgIH0p
OworICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIHZvaWQgTWFya2VkU3BhY2U6OmZyZWVCbG9jayhN
YXJrZWRCbG9jayogYmxvY2spCkBAIC0yMTEsMzMgKzE5NCwyMSBAQCB2b2lkIE1hcmtlZFNwYWNl
OjpzaHJpbmsoKQogICAgICAgICB9KTsKIH0KIAotc3RhdGljIHZvaWQgY2xlYXJOZXdseUFsbG9j
YXRlZEluQmxvY2soTWFya2VkQmxvY2sqIGJsb2NrKQotewotICAgIGlmICghYmxvY2spCi0gICAg
ICAgIHJldHVybjsKLSAgICBibG9jay0+Y2xlYXJOZXdseUFsbG9jYXRlZCgpOwotfQotCiB2b2lk
IE1hcmtlZFNwYWNlOjpjbGVhck5ld2x5QWxsb2NhdGVkKCkKIHsKLSAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IHByZWNpc2VDb3VudDsgKytpKSB7Ci0gICAgICAgIGNsZWFyTmV3bHlBbGxvY2F0
ZWRJbkJsb2NrKG1fbm9ybWFsU3BhY2UucHJlY2lzZUFsbG9jYXRvcnNbaV0udGFrZUxhc3RBY3Rp
dmVCbG9jaygpKTsKLSAgICAgICAgY2xlYXJOZXdseUFsbG9jYXRlZEluQmxvY2sobV9kZXN0cnVj
dG9yU3BhY2UucHJlY2lzZUFsbG9jYXRvcnNbaV0udGFrZUxhc3RBY3RpdmVCbG9jaygpKTsKLSAg
ICB9Ci0KLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGltcHJlY2lzZUNvdW50OyArK2kpIHsK
LSAgICAgICAgY2xlYXJOZXdseUFsbG9jYXRlZEluQmxvY2sobV9ub3JtYWxTcGFjZS5pbXByZWNp
c2VBbGxvY2F0b3JzW2ldLnRha2VMYXN0QWN0aXZlQmxvY2soKSk7Ci0gICAgICAgIGNsZWFyTmV3
bHlBbGxvY2F0ZWRJbkJsb2NrKG1fZGVzdHJ1Y3RvclNwYWNlLmltcHJlY2lzZUFsbG9jYXRvcnNb
aV0udGFrZUxhc3RBY3RpdmVCbG9jaygpKTsKLSAgICB9Ci0KLSAgICAvLyBXZSBoYXZlIHRvIGl0
ZXJhdGUgYWxsIG9mIHRoZSBibG9ja3MgaW4gdGhlIGxhcmdlIGFsbG9jYXRvcnMgYmVjYXVzZSB0
aGV5IGFyZQotICAgIC8vIGNhbm9uaWNhbGl6ZWQgYXMgdGhleSBhcmUgdXNlZCB1cCAoc2VlIE1h
cmtlZEFsbG9jYXRvcjo6dHJ5QWxsb2NhdGVIZWxwZXIpCi0gICAgLy8gd2hpY2ggY3JlYXRlcyB0
aGUgbV9uZXdseUFsbG9jYXRlZCBiaXRtYXAuCi0gICAgYXV0byBjbGVhck5ld2x5QWxsb2NhdGVk
ID0gWyZdIChNYXJrZWRCbG9jayogYmxvY2spIHsKLSAgICAgICAgYmxvY2stPmNsZWFyTmV3bHlB
bGxvY2F0ZWQoKTsKLSAgICB9OwotICAgIG1fbm9ybWFsU3BhY2UubGFyZ2VBbGxvY2F0b3IuZm9y
RWFjaEJsb2NrKGNsZWFyTmV3bHlBbGxvY2F0ZWQpOwotICAgIG1fZGVzdHJ1Y3RvclNwYWNlLmxh
cmdlQWxsb2NhdG9yLmZvckVhY2hCbG9jayhjbGVhck5ld2x5QWxsb2NhdGVkKTsKKyAgICBmb3JF
YWNoQWxsb2NhdG9yKAorICAgICAgICBbJl0gKE1hcmtlZEFsbG9jYXRvciYgYWxsb2NhdG9yLCBz
aXplX3Qgc2l6ZSwgQWxsb2NhdG9yQXR0cmlidXRlcykgeworICAgICAgICAgICAgaWYgKCFzaXpl
KSB7CisgICAgICAgICAgICAgICAgYWxsb2NhdG9yLmZvckVhY2hCbG9jaygKKyAgICAgICAgICAg
ICAgICAgICAgWyZdIChNYXJrZWRCbG9jayogYmxvY2spIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGJsb2NrLT5jbGVhck5ld2x5QWxsb2NhdGVkKCk7CisgICAgICAgICAgICAgICAgICAgIH0p
OworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAor
ICAgICAgICAgICAgaWYgKE1hcmtlZEJsb2NrKiBibG9jayA9IGFsbG9jYXRvci50YWtlTGFzdEFj
dGl2ZUJsb2NrKCkpCisgICAgICAgICAgICAgICAgYmxvY2stPmNsZWFyTmV3bHlBbGxvY2F0ZWQo
KTsKKyAgICAgICAgfSk7CiAKICNpZiAhQVNTRVJUX0RJU0FCTEVECiAgICAgZm9yRWFjaEJsb2Nr
KApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkU3BhY2UuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRTcGFjZS5oCShyZXZpc2lv
biAyMDM1MjUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRTcGFjZS5oCSh3
b3JraW5nIGNvcHkpCkBAIC0yMiw2ICsyMiw3IEBACiAjaWZuZGVmIE1hcmtlZFNwYWNlX2gKICNk
ZWZpbmUgTWFya2VkU3BhY2VfaAogCisjaW5jbHVkZSAiSXRlcmF0aW9uU3RhdHVzLmgiCiAjaW5j
bHVkZSAiTWFya2VkQWxsb2NhdG9yLmgiCiAjaW5jbHVkZSAiTWFya2VkQmxvY2suaCIKICNpbmNs
dWRlICJNYXJrZWRCbG9ja1NldC5oIgpAQCAtNjMsMTEgKzY0LDE0IEBAIHB1YmxpYzoKIAogICAg
IE1hcmtlZEFsbG9jYXRvciYgYWxsb2NhdG9yRm9yKHNpemVfdCk7CiAgICAgTWFya2VkQWxsb2Nh
dG9yJiBkZXN0cnVjdG9yQWxsb2NhdG9yRm9yKHNpemVfdCk7CisgICAgTWFya2VkQWxsb2NhdG9y
JiBhdXhpbGlhcnlBbGxvY2F0b3JGb3Ioc2l6ZV90KTsKICAgICB2b2lkKiBhbGxvY2F0ZVdpdGhE
ZXN0cnVjdG9yKHNpemVfdCk7CiAgICAgdm9pZCogYWxsb2NhdGVXaXRob3V0RGVzdHJ1Y3Rvcihz
aXplX3QpOworICAgIHZvaWQqIGFsbG9jYXRlQXV4aWxpYXJ5KHNpemVfdCk7CiAKICAgICBTdWJz
cGFjZSYgc3Vic3BhY2VGb3JPYmplY3RzV2l0aERlc3RydWN0b3IoKSB7IHJldHVybiBtX2Rlc3Ry
dWN0b3JTcGFjZTsgfQogICAgIFN1YnNwYWNlJiBzdWJzcGFjZUZvck9iamVjdHNXaXRob3V0RGVz
dHJ1Y3RvcigpIHsgcmV0dXJuIG1fbm9ybWFsU3BhY2U7IH0KKyAgICBTdWJzcGFjZSYgc3Vic3Bh
Y2VGb3JBdXhpbGlhcnlEYXRhKCkgeyByZXR1cm4gbV9hdXhpbGlhcnlTcGFjZTsgfQogCiAgICAg
dm9pZCByZXNldEFsbG9jYXRvcnMoKTsKIApAQCAtMTE0LDkgKzExOCwxMiBAQCBwcml2YXRlOgog
ICAgIGZyaWVuZCBjbGFzcyBKSVQ7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPiB2
b2lkIGZvckVhY2hBbGxvY2F0b3IoY29uc3QgRnVuY3RvciYpOworICAgIHRlbXBsYXRlPHR5cGVu
YW1lIEZ1bmN0b3I+IHZvaWQgZm9yRWFjaFN1YnNwYWNlKGNvbnN0IEZ1bmN0b3ImKTsKKyAgICBN
YXJrZWRBbGxvY2F0b3ImIGFsbG9jYXRvckZvcihTdWJzcGFjZSYsIHNpemVfdCk7CiAKICAgICBT
dWJzcGFjZSBtX2Rlc3RydWN0b3JTcGFjZTsKICAgICBTdWJzcGFjZSBtX25vcm1hbFNwYWNlOwor
ICAgIFN1YnNwYWNlIG1fYXV4aWxpYXJ5U3BhY2U7CiAKICAgICBIZWFwKiBtX2hlYXA7CiAgICAg
c2l6ZV90IG1fY2FwYWNpdHk7CkBAIC0xNDcsMjIgKzE1NCwxNyBAQCB0ZW1wbGF0ZTx0eXBlbmFt
ZSBGdW5jdG9yPiBpbmxpbmUgdm9pZCBNCiAKIGlubGluZSBNYXJrZWRBbGxvY2F0b3ImIE1hcmtl
ZFNwYWNlOjphbGxvY2F0b3JGb3Ioc2l6ZV90IGJ5dGVzKQogewotICAgIEFTU0VSVChieXRlcyk7
Ci0gICAgaWYgKGJ5dGVzIDw9IHByZWNpc2VDdXRvZmYpCi0gICAgICAgIHJldHVybiBtX25vcm1h
bFNwYWNlLnByZWNpc2VBbGxvY2F0b3JzWyhieXRlcyAtIDEpIC8gcHJlY2lzZVN0ZXBdOwotICAg
IGlmIChieXRlcyA8PSBpbXByZWNpc2VDdXRvZmYpCi0gICAgICAgIHJldHVybiBtX25vcm1hbFNw
YWNlLmltcHJlY2lzZUFsbG9jYXRvcnNbKGJ5dGVzIC0gMSkgLyBpbXByZWNpc2VTdGVwXTsKLSAg
ICByZXR1cm4gbV9ub3JtYWxTcGFjZS5sYXJnZUFsbG9jYXRvcjsKKyAgICByZXR1cm4gYWxsb2Nh
dG9yRm9yKG1fbm9ybWFsU3BhY2UsIGJ5dGVzKTsKIH0KIAogaW5saW5lIE1hcmtlZEFsbG9jYXRv
ciYgTWFya2VkU3BhY2U6OmRlc3RydWN0b3JBbGxvY2F0b3JGb3Ioc2l6ZV90IGJ5dGVzKQogewot
ICAgIEFTU0VSVChieXRlcyk7Ci0gICAgaWYgKGJ5dGVzIDw9IHByZWNpc2VDdXRvZmYpCi0gICAg
ICAgIHJldHVybiBtX2Rlc3RydWN0b3JTcGFjZS5wcmVjaXNlQWxsb2NhdG9yc1soYnl0ZXMgLSAx
KSAvIHByZWNpc2VTdGVwXTsKLSAgICBpZiAoYnl0ZXMgPD0gaW1wcmVjaXNlQ3V0b2ZmKQotICAg
ICAgICByZXR1cm4gbV9kZXN0cnVjdG9yU3BhY2UuaW1wcmVjaXNlQWxsb2NhdG9yc1soYnl0ZXMg
LSAxKSAvIGltcHJlY2lzZVN0ZXBdOwotICAgIHJldHVybiBtX2Rlc3RydWN0b3JTcGFjZS5sYXJn
ZUFsbG9jYXRvcjsKKyAgICByZXR1cm4gYWxsb2NhdG9yRm9yKG1fZGVzdHJ1Y3RvclNwYWNlLCBi
eXRlcyk7Cit9CisKK2lubGluZSBNYXJrZWRBbGxvY2F0b3ImIE1hcmtlZFNwYWNlOjphdXhpbGlh
cnlBbGxvY2F0b3JGb3Ioc2l6ZV90IGJ5dGVzKQoreworICAgIHJldHVybiBhbGxvY2F0b3JGb3Io
bV9hdXhpbGlhcnlTcGFjZSwgYnl0ZXMpOwogfQogCiBpbmxpbmUgdm9pZCogTWFya2VkU3BhY2U6
OmFsbG9jYXRlV2l0aG91dERlc3RydWN0b3Ioc2l6ZV90IGJ5dGVzKQpAQCAtMTc1LDE5ICsxNzcs
MjIgQEAgaW5saW5lIHZvaWQqIE1hcmtlZFNwYWNlOjphbGxvY2F0ZVdpdGhEZQogICAgIHJldHVy
biBkZXN0cnVjdG9yQWxsb2NhdG9yRm9yKGJ5dGVzKS5hbGxvY2F0ZShieXRlcyk7CiB9CiAKK2lu
bGluZSB2b2lkKiBNYXJrZWRTcGFjZTo6YWxsb2NhdGVBdXhpbGlhcnkoc2l6ZV90IGJ5dGVzKQor
eworICAgIHJldHVybiBhdXhpbGlhcnlBbGxvY2F0b3JGb3IoYnl0ZXMpLmFsbG9jYXRlKGJ5dGVz
KTsKK30KKwogdGVtcGxhdGUgPHR5cGVuYW1lIEZ1bmN0b3I+IGlubGluZSB2b2lkIE1hcmtlZFNw
YWNlOjpmb3JFYWNoQmxvY2soY29uc3QgRnVuY3RvciYgZnVuY3RvcikKIHsKLSAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IHByZWNpc2VDb3VudDsgKytpKQotICAgICAgICBtX25vcm1hbFNwYWNl
LnByZWNpc2VBbGxvY2F0b3JzW2ldLmZvckVhY2hCbG9jayhmdW5jdG9yKTsKLSAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IGltcHJlY2lzZUNvdW50OyArK2kpCi0gICAgICAgIG1fbm9ybWFsU3Bh
Y2UuaW1wcmVjaXNlQWxsb2NhdG9yc1tpXS5mb3JFYWNoQmxvY2soZnVuY3Rvcik7Ci0gICAgbV9u
b3JtYWxTcGFjZS5sYXJnZUFsbG9jYXRvci5mb3JFYWNoQmxvY2soZnVuY3Rvcik7Ci0KLSAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IHByZWNpc2VDb3VudDsgKytpKQotICAgICAgICBtX2Rlc3Ry
dWN0b3JTcGFjZS5wcmVjaXNlQWxsb2NhdG9yc1tpXS5mb3JFYWNoQmxvY2soZnVuY3Rvcik7Ci0g
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBpbXByZWNpc2VDb3VudDsgKytpKQotICAgICAgICBt
X2Rlc3RydWN0b3JTcGFjZS5pbXByZWNpc2VBbGxvY2F0b3JzW2ldLmZvckVhY2hCbG9jayhmdW5j
dG9yKTsKLSAgICBtX2Rlc3RydWN0b3JTcGFjZS5sYXJnZUFsbG9jYXRvci5mb3JFYWNoQmxvY2so
ZnVuY3Rvcik7CisgICAgZm9yRWFjaFN1YnNwYWNlKAorICAgICAgICBbJl0gKFN1YnNwYWNlJiBz
dWJzcGFjZSwgQWxsb2NhdG9yQXR0cmlidXRlcykgLT4gSXRlcmF0aW9uU3RhdHVzIHsKKyAgICAg
ICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcHJlY2lzZUNvdW50OyArK2kpCisgICAgICAg
ICAgICAgICAgc3Vic3BhY2UucHJlY2lzZUFsbG9jYXRvcnNbaV0uZm9yRWFjaEJsb2NrKGZ1bmN0
b3IpOworICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBpbXByZWNpc2VDb3VudDsg
KytpKQorICAgICAgICAgICAgICAgIHN1YnNwYWNlLmltcHJlY2lzZUFsbG9jYXRvcnNbaV0uZm9y
RWFjaEJsb2NrKGZ1bmN0b3IpOworICAgICAgICAgICAgc3Vic3BhY2UubGFyZ2VBbGxvY2F0b3Iu
Zm9yRWFjaEJsb2NrKGZ1bmN0b3IpOworICAgICAgICAgICAgcmV0dXJuIEl0ZXJhdGlvblN0YXR1
czo6Q29udGludWU7CisgICAgICAgIH0pOwogfQogCiBpbmxpbmUgdm9pZCBNYXJrZWRTcGFjZTo6
ZGlkQWRkQmxvY2soTWFya2VkQmxvY2sqIGJsb2NrKQpAQCAtMjI2LDYgKzIzMSwzNSBAQCBpbmxp
bmUgc2l6ZV90IE1hcmtlZFNwYWNlOjpjYXBhY2l0eSgpCiAgICAgcmV0dXJuIG1fY2FwYWNpdHk7
CiB9CiAKK2lubGluZSB2b2lkIE1hcmtlZFNwYWNlOjpmb3JFYWNoU3Vic3BhY2UoY29uc3QgRnVu
Y3RvciYgZnVuYykKK3sKKyAgICBBbGxvY2F0b3JBdHRyaWJ1dGVzIGF0dHJpYnV0ZXM7CisgICAg
CisgICAgYXR0cmlidXRlcy5kZXN0cnVjdGlvbiA9IE5lZWRzRGVzdHJ1Y3Rpb247CisgICAgYXR0
cmlidXRlcy5jZWxsS2luZCA9IEhlYXBDZWxsOjpKU0NlbGw7CisgICAgaWYgKGZ1bmMobV9kZXN0
cnVjdG9yU3BhY2UsIGF0dHJpYnV0ZXMpID09IEl0ZXJhdGlvblN0YXR1czo6RG9uZSkKKyAgICAg
ICAgcmV0dXJuOworICAgIAorICAgIGF0dHJpYnV0ZXMuZGVzdHJ1Y3Rpb24gPSBEb2VzTm90TmVl
ZERlc3RydWN0aW9uOworICAgIGF0dHJpYnV0ZXMuY2VsbEtpbmQgPSBIZWFwQ2VsbDo6SlNDZWxs
OworICAgIGlmIChmdW5jKG1fbm9ybWFsU3BhY2UsIGF0dHJpYnV0ZXMpID09IEl0ZXJhdGlvblN0
YXR1czo6RG9uZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgYXR0cmlidXRlcy5kZXN0cnVjdGlv
biA9IERvZXNOb3ROZWVkRGVzdHJ1Y3Rpb247CisgICAgYXR0cmlidXRlcy5jZWxsS2luZCA9IEhl
YXBDZWxsOjpBdXhpbGlhcnk7CisgICAgZnVuYyhtX2F1eGlsaWFyeVNwYWNlLCBhdHRyaWJ1dGVz
KTsKK30KKworaW5saW5lIE1hcmtlZEFsbG9jYXRvciYgTWFya2VkU3BhY2U6OmFsbG9jYXRvckZv
cihTdWJzcGFjZSYgc3BhY2UsIHNpemVfdCBieXRlcykKK3sKKyAgICBBU1NFUlQoYnl0ZXMpOwor
ICAgIGlmIChieXRlcyA8PSBwcmVjaXNlQ3V0b2ZmKQorICAgICAgICByZXR1cm4gc3BhY2UucHJl
Y2lzZUFsbG9jYXRvcnNbKGJ5dGVzIC0gMSkgLyBwcmVjaXNlU3RlcF07CisgICAgaWYgKGJ5dGVz
IDw9IGltcHJlY2lzZUN1dG9mZikKKyAgICAgICAgcmV0dXJuIHNwYWNlLmltcHJlY2lzZUFsbG9j
YXRvcnNbKGJ5dGVzIC0gMSkgLyBpbXByZWNpc2VTdGVwXTsKKyAgICByZXR1cm4gc3BhY2UubGFy
Z2VBbGxvY2F0b3I7Cit9CisKIH0gLy8gbmFtZXNwYWNlIEpTQwogCiAjZW5kaWYgLy8gTWFya2Vk
U3BhY2VfaApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQnV0dGVyZmx5LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQnV0dGVyZmx5LmgJ
KHJldmlzaW9uIDIwMzUyNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0J1dHRl
cmZseS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNTAsNyArMTUwLDcgQEAgcHVibGljOgogICAgIHN0
YXRpYyBCdXR0ZXJmbHkqIGNyZWF0ZU9yR3Jvd0FycmF5UmlnaHQoCiAgICAgICAgIEJ1dHRlcmZs
eSosIFZNJiwgSlNDZWxsKiBpbnRlbmRlZE93bmVyLCBTdHJ1Y3R1cmUqIG9sZFN0cnVjdHVyZSwK
ICAgICAgICAgc2l6ZV90IHByb3BlcnR5Q2FwYWNpdHksIGJvb2wgaGFkSW5kZXhpbmdIZWFkZXIs
Ci0gICAgICAgIHNpemVfdCBvbGRJbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcywgc2l6ZV90IG5l
d0luZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKTsgCisgICAgICAgIHNpemVfdCBvbGRJbmRleGlu
Z1BheWxvYWRTaXplSW5CeXRlcywgc2l6ZV90IG5ld0luZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVz
KTsKIAogICAgIC8vIFRoZSBidXR0ZXJmbHkgcmVhbGxvY2F0aW9uIG1ldGhvZHMgcGVyZm9ybSB0
aGUgcmVhbGxvY2F0aW9uIGl0c2VsZiBidXQgZG8gbm90IGNoYW5nZSBhbnkKICAgICAvLyBvZiB0
aGUgbWV0YS1kYXRhIHRvIHJlZmxlY3QgdGhhdCB0aGUgcmVhbGxvY2F0aW9uIG9jY3VycmVkLiBO
b3RlIHRoYXQgdGhpcyBzZXQgb2YK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>284280</attachid>
            <date>2016-07-21 16:33:53 -0700</date>
            <delta_ts>2016-07-21 17:21:07 -0700</delta_ts>
            <desc>maybe done</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>44888</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjAzNTM1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEwMyBA
QAoreWUyMDE2LTA3LTIxICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAg
ICAgVGVhY2ggTWFya2VkU3BhY2UgaG93IHRvIGFsbG9jYXRlIGF1eGlsaWFyeSBzdG9yYWdlCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjAwNTMKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKyAgICAgICAgCisgICAgICAgIFBy
ZXZpb3VzbHksIHdlIGhhZCB0d28ga2luZHMgb2Ygc3Vic3BhY2VzIGluIE1hcmtlZFNwYWNlOiBk
ZXN0cnVjdG9yIGFuZCBub24tZGVzdHJ1Y3Rvci4gVGhpcworICAgICAgICB3YXMgZGVzY3JpYmVk
IHVzaW5nICJib29sIG5lZWRzRGVzdHJ1Y3Rpb24iIHRoYXQgd291bGQgZ2V0IHBhc3NlZCBhcm91
bmQuIFdlJ2QgaXRlcmF0ZSBvdmVyCisgICAgICAgIHRoZXNlIHNwYWNlcyB1c2luZyBkdXBsaWNh
dGVkIGNvZGUgLSBvbmUgbG9vcCBmb3IgZGVzdHJ1Y3RvcnMgYW5kIG9uZSBmb3Igbm9uLWRlc3Ry
dWN0b3JzLCBvcgorICAgICAgICBhIHNpbmdsZSBsb29wIHRoYXQgZG9lcyBvbmUgdGhpbmcgZm9y
IGRlc3RydWN0b3JzIGFuZCBvbmUgZm9yIG5vbi1kZXN0cnVjdG9ycy4KKyAgICAgICAgCisgICAg
ICAgIEJ1dCBub3cgd2Ugd2FudCBhIHRoaXJkIHN1YnNwYWNlOiBub24tZGVzdHJ1Y3RvciBub24t
SlNDZWxsLCBha2EgQXV4aWxpYXJ5LgorICAgICAgICAKKyAgICAgICAgU28sIHRoaXMgY2hhbmdl
cyBhbGwgb2YgdGhlIHJlZmxlY3Rpb24gYW5kIGl0ZXJhdGlvbiBvdmVyIHN1YnNwYWNlcyB0byB1
c2UgZnVuY3RvcnMsIHNvIHRoYXQKKyAgICAgICAgdGhlIGxvb3BpbmcgaXMgd3JpdHRlbiBvbmNl
IGFuZCByZXVzZWQuIE1vc3QgcGxhY2VzIGRvbid0IGV2ZW4gaGF2ZSB0byBrbm93IHRoYXQgdGhl
cmUgaXMgYQorICAgICAgICB0aGlyZCBzdWJzcGFjZTsgdGhleSBqdXN0IGtub3cgdGhhdCB0aGV5
IG11c3QgZG8gdGhpbmdzIGZvciBlYWNoIHN1YnNwYWNlLCBmb3IgZWFjaAorICAgICAgICBhbGxv
Y2F0b3IsIG9yIGZvciBlYWNoIGJsb2NrIC0gYW5kIHRoZSBmdW5jdG9yIG1hZ2ljIGhhbmRsZXMg
aXQgZm9yIHlvdS4KKyAgICAgICAgCisgICAgICAgIFRvIG1ha2UgdGhpcyBzb21ld2hhdCBuaWNl
LCB0aGlzIGNoYW5nZSBhbHNvIGZpeGVzIGhvdyB3ZSBkZXNjcmliZSBzdWJzcGFjZXMuIEludGVh
ZCBvZiBhCisgICAgICAgIGJvb2wsIHdlIG5vdyBoYXZlIEFsbG9jYXRvckF0dHJpYnV0ZXMsIHdo
aWNoIGlzIGEgc3RydWN0LiBJZiB3ZSBldmVyIGFkZCBtb3JlIHN1YnNwYWNlcywgd2UKKyAgICAg
ICAgY2FuIGFkZCBmaWVsZHMgdG8gQWxsb2NhdG9yQXR0cmlidXRlcyB0byBkZXNjcmliZSBob3cg
dGhvc2Ugc3Vic3BhY2VzIGRpZmZlci4gRm9yIG5vdyBpdCBqdXN0CisgICAgICAgIGNvbnRhaW5z
IHR3byBwcm9wZXJ0aWVzOiBhIERlc3RydWN0aW9uTW9kZSBhbmQgYSBIZWFwQ2VsbDo6S2luZC4g
VGhlIERlc2N0cnVjdGlvbk1vZGUKKyAgICAgICAgcmVwbGFjZXMgYm9vbCBuZWVkc0Rlc3RydWN0
aW9uLiBJIGRlbGliZXJhdGVseSB1c2VkIGEgbm9uLWNsYXNzIGVudW0gdG8gYXZvaWQgdGF1dG9s
b2dpZXMuCisgICAgICAgIERlc3RydWN0aW9uTW9kZSBoYXMgdHdvIG1lbWJlcnM6IE5lZWRzRGVz
dHJ1Y3Rpb24gYW5kIERvZXNOb3ROZWVkRGVzdHJ1Y3Rpb24uIEkgYWxtb3N0IHdlbnQKKyAgICAg
ICAgd2l0aCBEZXN0cnVjdGlvbk1vZGU6Ok5lZWRlZCBhbmQgRGVzdHJ1Y3Rpb25Nb2RlOjpOb3RO
ZWVkZWQsIGJ1dCBJIGZlbHQgbGlrZSB0aGF0IGludm9sdmVzCisgICAgICAgIG1vcmUgdHlwaW5n
IGFuZCBkb2Vzbid0IGFjdHVhbGx5IGF2b2lkIGFueSBraW5kIG9mIG5hbWVzcGFjZSBpc3N1ZXMu
CisgICAgICAgIAorICAgICAgICBUaGlzIGlzIGludGVuZGVkIHRvIGhhdmUgbm8gYmVoYXZpb3Ig
Y2hhbmdlIG90aGVyIHRoYW4gdGhlIGFkZGl0aW9uIG9mIGEgdG90YWxseSB1bnVzZWQKKyAgICAg
ICAgc3BhY2UsIHdoaWNoIHNob3VsZCBhbHdheXMgYmUgZW1wdHkuIFNvIGhvcGVmdWxseSBpdCBk
b2Vzbid0IGNvc3QgYW55dGhpbmcuCisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAg
ICAgKiBKYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAq
IGhlYXAvQWxsb2NhdG9yQXR0cmlidXRlcy5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpBbGxv
Y2F0b3JBdHRyaWJ1dGVzOjpkdW1wKToKKyAgICAgICAgKiBoZWFwL0FsbG9jYXRvckF0dHJpYnV0
ZXMuaDogQWRkZWQuCisgICAgICAgIChKU0M6OkFsbG9jYXRvckF0dHJpYnV0ZXM6OkFsbG9jYXRv
ckF0dHJpYnV0ZXMpOgorICAgICAgICAqIGhlYXAvRGVzdHJ1Y3Rpb25Nb2RlLmNwcDogQWRkZWQu
CisgICAgICAgIChXVEY6OnByaW50SW50ZXJuYWwpOgorICAgICAgICAqIGhlYXAvRGVzdHJ1Y3Rp
b25Nb2RlLmg6IEFkZGVkLgorICAgICAgICAqIGhlYXAvTWFya2VkQWxsb2NhdG9yLmNwcDoKKyAg
ICAgICAgKEpTQzo6TWFya2VkQWxsb2NhdG9yOjphbGxvY2F0ZUJsb2NrKToKKyAgICAgICAgKEpT
Qzo6TWFya2VkQWxsb2NhdG9yOjphZGRCbG9jayk6CisgICAgICAgICogaGVhcC9NYXJrZWRBbGxv
Y2F0b3IuaDoKKyAgICAgICAgKEpTQzo6TWFya2VkQWxsb2NhdG9yOjpjZWxsU2l6ZSk6CisgICAg
ICAgIChKU0M6Ok1hcmtlZEFsbG9jYXRvcjo6YXR0cmlidXRlcyk6CisgICAgICAgIChKU0M6Ok1h
cmtlZEFsbG9jYXRvcjo6bmVlZHNEZXN0cnVjdGlvbik6CisgICAgICAgIChKU0M6Ok1hcmtlZEFs
bG9jYXRvcjo6ZGVzdHJ1Y3Rpb24pOgorICAgICAgICAoSlNDOjpNYXJrZWRBbGxvY2F0b3I6OmNl
bGxLaW5kKToKKyAgICAgICAgKEpTQzo6TWFya2VkQWxsb2NhdG9yOjpoZWFwKToKKyAgICAgICAg
KEpTQzo6TWFya2VkQWxsb2NhdG9yOjp0YWtlTGFzdEFjdGl2ZUJsb2NrKToKKyAgICAgICAgKEpT
Qzo6TWFya2VkQWxsb2NhdG9yOjpNYXJrZWRBbGxvY2F0b3IpOgorICAgICAgICAoSlNDOjpNYXJr
ZWRBbGxvY2F0b3I6OmluaXQpOgorICAgICAgICAoSlNDOjpNYXJrZWRBbGxvY2F0b3I6OmFsbG9j
YXRlKToKKyAgICAgICAgKiBoZWFwL01hcmtlZEJsb2NrLmNwcDoKKyAgICAgICAgKEpTQzo6TWFy
a2VkQmxvY2s6OmNyZWF0ZSk6CisgICAgICAgIChKU0M6Ok1hcmtlZEJsb2NrOjpkZXN0cm95KToK
KyAgICAgICAgKEpTQzo6TWFya2VkQmxvY2s6Ok1hcmtlZEJsb2NrKToKKyAgICAgICAgKEpTQzo6
TWFya2VkQmxvY2s6OmNhbGxEZXN0cnVjdG9yKToKKyAgICAgICAgKEpTQzo6TWFya2VkQmxvY2s6
OnN3ZWVwKToKKyAgICAgICAgKEpTQzo6TWFya2VkQmxvY2s6OnN0b3BBbGxvY2F0aW5nKToKKyAg
ICAgICAgKEpTQzo6TWFya2VkQmxvY2s6OmRpZFJldGlyZUJsb2NrKToKKyAgICAgICAgKiBoZWFw
L01hcmtlZEJsb2NrLmg6CisgICAgICAgIChKU0M6Ok1hcmtlZEJsb2NrOjpjZWxsU2l6ZSk6Cisg
ICAgICAgIChKU0M6Ok1hcmtlZEJsb2NrOjphdHRyaWJ1dGVzKToKKyAgICAgICAgKEpTQzo6TWFy
a2VkQmxvY2s6Om5lZWRzRGVzdHJ1Y3Rpb24pOgorICAgICAgICAoSlNDOjpNYXJrZWRCbG9jazo6
ZGVzdHJ1Y3Rpb24pOgorICAgICAgICAoSlNDOjpNYXJrZWRCbG9jazo6Y2VsbEtpbmQpOgorICAg
ICAgICAoSlNDOjpNYXJrZWRCbG9jazo6c2l6ZSk6CisgICAgICAgIChKU0M6Ok1hcmtlZEJsb2Nr
Ojpmb3JFYWNoQ2VsbCk6CisgICAgICAgIChKU0M6Ok1hcmtlZEJsb2NrOjpmb3JFYWNoTGl2ZUNl
bGwpOgorICAgICAgICAoSlNDOjpNYXJrZWRCbG9jazo6Zm9yRWFjaERlYWRDZWxsKToKKyAgICAg
ICAgKiBoZWFwL01hcmtlZFNwYWNlLmNwcDoKKyAgICAgICAgKEpTQzo6TWFya2VkU3BhY2U6Ok1h
cmtlZFNwYWNlKToKKyAgICAgICAgKEpTQzo6TWFya2VkU3BhY2U6On5NYXJrZWRTcGFjZSk6Cisg
ICAgICAgIChKU0M6Ok1hcmtlZFNwYWNlOjpsYXN0Q2hhbmNlVG9GaW5hbGl6ZSk6CisgICAgICAg
IChKU0M6Ok1hcmtlZFNwYWNlOjpyZXNldEFsbG9jYXRvcnMpOgorICAgICAgICAoSlNDOjpNYXJr
ZWRTcGFjZTo6Zm9yRWFjaEFsbG9jYXRvcik6CisgICAgICAgIChKU0M6Ok1hcmtlZFNwYWNlOjpz
dG9wQWxsb2NhdGluZyk6CisgICAgICAgIChKU0M6Ok1hcmtlZFNwYWNlOjpyZXN1bWVBbGxvY2F0
aW5nKToKKyAgICAgICAgKEpTQzo6TWFya2VkU3BhY2U6OmlzUGFnZWRPdXQpOgorICAgICAgICAo
SlNDOjpNYXJrZWRTcGFjZTo6ZnJlZUJsb2NrKToKKyAgICAgICAgKEpTQzo6TWFya2VkU3BhY2U6
OnNocmluayk6CisgICAgICAgIChKU0M6Ok1hcmtlZFNwYWNlOjpjbGVhck5ld2x5QWxsb2NhdGVk
KToKKyAgICAgICAgKEpTQzo6Y2xlYXJOZXdseUFsbG9jYXRlZEluQmxvY2spOiBEZWxldGVkLgor
ICAgICAgICAqIGhlYXAvTWFya2VkU3BhY2UuaDoKKyAgICAgICAgKEpTQzo6TWFya2VkU3BhY2U6
OnN1YnNwYWNlRm9yT2JqZWN0c1dpdGhEZXN0cnVjdG9yKToKKyAgICAgICAgKEpTQzo6TWFya2Vk
U3BhY2U6OnN1YnNwYWNlRm9yT2JqZWN0c1dpdGhvdXREZXN0cnVjdG9yKToKKyAgICAgICAgKEpT
Qzo6TWFya2VkU3BhY2U6OnN1YnNwYWNlRm9yQXV4aWxpYXJ5RGF0YSk6CisgICAgICAgIChKU0M6
Ok1hcmtlZFNwYWNlOjphbGxvY2F0b3JGb3IpOgorICAgICAgICAoSlNDOjpNYXJrZWRTcGFjZTo6
ZGVzdHJ1Y3RvckFsbG9jYXRvckZvcik6CisgICAgICAgIChKU0M6Ok1hcmtlZFNwYWNlOjphdXhp
bGlhcnlBbGxvY2F0b3JGb3IpOgorICAgICAgICAoSlNDOjpNYXJrZWRTcGFjZTo6YWxsb2NhdGVX
aXRob3V0RGVzdHJ1Y3Rvcik6CisgICAgICAgIChKU0M6Ok1hcmtlZFNwYWNlOjphbGxvY2F0ZVdp
dGhEZXN0cnVjdG9yKToKKyAgICAgICAgKEpTQzo6TWFya2VkU3BhY2U6OmFsbG9jYXRlQXV4aWxp
YXJ5KToKKyAgICAgICAgKEpTQzo6TWFya2VkU3BhY2U6OmZvckVhY2hCbG9jayk6CisgICAgICAg
IChKU0M6Ok1hcmtlZFNwYWNlOjpkaWRBZGRCbG9jayk6CisgICAgICAgIChKU0M6Ok1hcmtlZFNw
YWNlOjpjYXBhY2l0eSk6CisgICAgICAgIChKU0M6Ok1hcmtlZFNwYWNlOjpmb3JFYWNoU3Vic3Bh
Y2UpOgorCiAyMDE2LTA3LTIxICBDc2FiYSBPc3p0cm9nb27DoWMgIDxvc3N5QHdlYmtpdC5vcmc+
CiAKICAgICAgICAgQ2xhcmlmeSB0ZXN0aW5nIG1vZGUgbmFtZXMgaW4gcnVuLWpzYy1zdHJlc3Mt
dGVzdHMKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDIw
MzUyNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBj
b3B5KQpAQCAtNDMzLDEyICs0MzMsMTQgQEAgc2V0KEphdmFTY3JpcHRDb3JlX1NPVVJDRVMKICAg
ICBmdGwvRlRMVGh1bmtzLmNwcAogICAgIGZ0bC9GVExWYWx1ZVJhbmdlLmNwcAogCisgICAgaGVh
cC9BbGxvY2F0b3JBdHRyaWJ1dGVzLmNwcAogICAgIGhlYXAvQ29kZUJsb2NrU2V0LmNwcAogICAg
IGhlYXAvQ29uc2VydmF0aXZlUm9vdHMuY3BwCiAgICAgaGVhcC9Db3BpZWRCbG9jay5jcHAKICAg
ICBoZWFwL0NvcGllZFNwYWNlLmNwcAogICAgIGhlYXAvQ29weVZpc2l0b3IuY3BwCiAgICAgaGVh
cC9EZWZlckdDLmNwcAorICAgIGhlYXAvRGVzdHJ1Y3Rpb25Nb2RlLmNwcAogICAgIGhlYXAvRWRl
bkdDQWN0aXZpdHlDYWxsYmFjay5jcHAKICAgICBoZWFwL0Z1bGxHQ0FjdGl2aXR5Q2FsbGJhY2su
Y3BwCiAgICAgaGVhcC9HQ0FjdGl2aXR5Q2FsbGJhY2suY3BwCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvagkocmV2aXNpb24gMjAzNTI1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkK
QEAgLTUzNyw2ICs1MzcsMTAgQEAKIAkJMEY5NDk1ODgxQzU3RjQ3NTAwNDEzQTQ4IC8qIEIzU3Rh
Y2tTbG90LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
Rjk0OTU4NjFDNTdGNDc1MDA0MTNBNDggLyogQjNTdGFja1Nsb3QuaCAqLzsgfTsKIAkJMEY5NTJB
QkMxQjQ4N0E3NzAwQzM2N0M1IC8qIFRyYWNrZWRSZWZlcmVuY2VzLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGOTUyQUJBMUI0ODdBNzcwMEMzNjdD
NSAvKiBUcmFja2VkUmVmZXJlbmNlcy5jcHAgKi87IH07CiAJCTBGOTUyQUJEMUI0ODdBNzcwMEMz
NjdDNSAvKiBUcmFja2VkUmVmZXJlbmNlcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEY5NTJBQkIxQjQ4N0E3NzAwQzM2N0M1IC8qIFRyYWNrZWRSZWZl
cmVuY2VzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
KwkJMEY5NjMwMzkxRDQxOTJDNjAwNTYwOUQ5IC8qIEFsbG9jYXRvckF0dHJpYnV0ZXMuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY5NjMwMzUxRDQx
OTJDMzAwNTYwOUQ5IC8qIEFsbG9jYXRvckF0dHJpYnV0ZXMuY3BwICovOyB9OworCQkwRjk2MzAz
QTFENDE5MkM4MDA1NjA5RDkgLyogQWxsb2NhdG9yQXR0cmlidXRlcy5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY5NjMwMzYxRDQxOTJDMzAwNTYwOUQ5
IC8qIEFsbG9jYXRvckF0dHJpYnV0ZXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OworCQkwRjk2MzAzQjFENDE5MkNCMDA1NjA5RDkgLyogRGVzdHJ1Y3Rp
b25Nb2RlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGOTYzMDM3MUQ0MTkyQzMwMDU2MDlEOSAvKiBEZXN0cnVjdGlvbk1vZGUuY3BwICovOyB9Owor
CQkwRjk2MzAzQzFENDE5MkNEMDA1NjA5RDkgLyogRGVzdHJ1Y3Rpb25Nb2RlLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjk2MzAzODFENDE5MkMzMDA1
NjA5RDkgLyogRGVzdHJ1Y3Rpb25Nb2RlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY5NjNCMzgxM0ZDNkZFOTAwMDJEOUIyIC8qIFZhbHVlUHJv
ZmlsZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY5
NjNCMzYxM0ZDNkZERTAwMDJEOUIyIC8qIFZhbHVlUHJvZmlsZS5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGOTZFQkIzMTY2NzZFRjYwMDhCQURF
MyAvKiBDb2RlQmxvY2tXaXRoSklUVHlwZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEY5NkVCQjExNjY3NkVGNDAwOEJBREUzIC8qIENvZGVCbG9ja1dp
dGhKSVRUeXBlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKIAkJMEY5NzQ5NzExNjg3QURFNDAwQTRGRjZBIC8qIEpTQ2VsbElubGluZXMuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGOTc0OTZGMTY4N0FERTIw
MEE0RkY2QSAvKiBKU0NlbGxJbmxpbmVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTI3MjMsNiArMjcyNywxMCBAQAogCQkwRjk0OTU4NjFDNTdG
NDc1MDA0MTNBNDggLyogQjNTdGFja1Nsb3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBu
YW1lID0gQjNTdGFja1Nsb3QuaDsgcGF0aCA9IGIzL0IzU3RhY2tTbG90Lmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTBGOTUyQUJBMUI0ODdBNzcwMEMzNjdDNSAvKiBUcmFja2VkUmVm
ZXJlbmNlcy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBUcmFja2Vk
UmVmZXJlbmNlcy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGOTUyQUJCMUI0
ODdBNzcwMEMzNjdDNSAvKiBUcmFja2VkUmVmZXJlbmNlcy5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBUcmFja2VkUmVmZXJlbmNlcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQkwRjk2MzAzNTFENDE5MkMzMDA1NjA5RDkgLyogQWxsb2NhdG9yQXR0cmlidXRlcy5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBBbGxvY2F0b3JBdHRyaWJ1
dGVzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY5NjMwMzYxRDQxOTJDMzAw
NTYwOUQ5IC8qIEFsbG9jYXRvckF0dHJpYnV0ZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gQWxsb2NhdG9yQXR0cmlidXRlcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQkwRjk2MzAzNzFENDE5MkMzMDA1NjA5RDkgLyogRGVzdHJ1Y3Rpb25Nb2RlLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERlc3RydWN0aW9uTW9kZS5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGOTYzMDM4MUQ0MTkyQzMwMDU2MDlEOSAvKiBE
ZXN0cnVjdGlvbk1vZGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRGVzdHJ1
Y3Rpb25Nb2RlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGOTYzQjM2MTNGQzZG
REUwMDAyRDlCMiAvKiBWYWx1ZVByb2ZpbGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gVmFsdWVQcm9maWxlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGOTZF
QkIxMTY2NzZFRjQwMDhCQURFMyAvKiBDb2RlQmxvY2tXaXRoSklUVHlwZS5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBDb2RlQmxvY2tXaXRoSklUVHlwZS5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkwRjk3NDk2RjE2ODdBREUyMDBBNEZGNkEgLyogSlNDZWxsSW5s
aW5lcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0NlbGxJbmxpbmVzLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC01MTU5LDYgKzUxNjcsOCBAQAogCQkxNDJF
MzEyQTEzNEZGMEE2MDBBRkFEQjUgLyogaGVhcCAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwog
CQkJY2hpbGRyZW4gPSAoCisJCQkJMEY5NjMwMzUxRDQxOTJDMzAwNTYwOUQ5IC8qIEFsbG9jYXRv
ckF0dHJpYnV0ZXMuY3BwICovLAorCQkJCTBGOTYzMDM2MUQ0MTkyQzMwMDU2MDlEOSAvKiBBbGxv
Y2F0b3JBdHRyaWJ1dGVzLmggKi8sCiAJCQkJMEYxQzNERDkxQkJDRTA5RTAwRTUyM0U0IC8qIENl
bGxTdGF0ZS5oICovLAogCQkJCTBGRDhBMzExMTdENDMyNkMwMENBMkM0MCAvKiBDb2RlQmxvY2tT
ZXQuY3BwICovLAogCQkJCTBGRDhBMzEyMTdENDMyNkMwMENBMkM0MCAvKiBDb2RlQmxvY2tTZXQu
aCAqLywKQEAgLTUxNzksNiArNTE4OSw4IEBACiAJCQkJQzIxOEQxM0YxNjU1Q0ZENTAwNjJCQjgx
IC8qIENvcHlXb3JrTGlzdC5oICovLAogCQkJCTJBN0E1OEVFMTgwOEE0QzQwMDIwQkRGNyAvKiBE
ZWZlckdDLmNwcCAqLywKIAkJCQkwRjEzNkQ0QjE3NEFENjlCMDA3NUIzNTQgLyogRGVmZXJHQy5o
ICovLAorCQkJCTBGOTYzMDM3MUQ0MTkyQzMwMDU2MDlEOSAvKiBEZXN0cnVjdGlvbk1vZGUuY3Bw
ICovLAorCQkJCTBGOTYzMDM4MUQ0MTkyQzMwMDU2MDlEOSAvKiBEZXN0cnVjdGlvbk1vZGUuaCAq
LywKIAkJCQkyQTgzNjM4MzE4RDdEMEVFMDAwMEVCQ0MgLyogRWRlbkdDQWN0aXZpdHlDYWxsYmFj
ay5jcHAgKi8sCiAJCQkJMkE4MzYzODQxOEQ3RDBFRTAwMDBFQkNDIC8qIEVkZW5HQ0FjdGl2aXR5
Q2FsbGJhY2suaCAqLywKIAkJCQkyQTgzNjM4NzE4RDdEMEZFMDAwMEVCQ0MgLyogRnVsbEdDQWN0
aXZpdHlDYWxsYmFjay5jcHAgKi8sCkBAIC03MTAzLDYgKzcxMTUsNyBAQAogCQkJCTBGRUM4NTFB
MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0dlbmVyaWNGcmVxdWVudGVkQmxvY2suaCBpbiBIZWFkZXJz
ICovLAogCQkJCTBGRUM4NUMzMUJFMTY3QTAwMDgwRkY3NCAvKiBCM0hlYXBSYW5nZS5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMjY3MThCQTUxQkU5OUY3ODAwNTIwMTdCIC8qIEFpckl0ZXJhdGVkUmVn
aXN0ZXJDb2FsZXNjaW5nLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjk2MzAzQzFENDE5MkNEMDA1
NjA5RDkgLyogRGVzdHJ1Y3Rpb25Nb2RlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkVDODUxQjFC
REFDREFDMDA4MEZGNzQgLyogQjNJbmRleE1hcC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFQzg1
MUMxQkRBQ0RBQzAwODBGRjc0IC8qIEIzSW5kZXhTZXQuaCBpbiBIZWFkZXJzICovLAogCQkJCTBG
RUM4NUJBMUJFMTQ2MkYwMDgwRkY3NCAvKiBCM0luc2VydGlvblNldC5oIGluIEhlYWRlcnMgKi8s
CkBAIC03NTQwLDYgKzc1NTMsNyBAQAogCQkJCTBGMDMzMkM4MThCNTQ2RUMwMDVGOTc5QSAvKiBG
VExXZWlnaHRlZFRhcmdldC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY2NjZFQzExODM1NjZGOTAw
RDAxN0YxIC8qIEZ1bGxCeXRlY29kZUxpdmVuZXNzLmggaW4gSGVhZGVycyAqLywKIAkJCQkyQTgz
NjM4QTE4RDdEMEZFMDAwMEVCQ0MgLyogRnVsbEdDQWN0aXZpdHlDYWxsYmFjay5oIGluIEhlYWRl
cnMgKi8sCisJCQkJMEY5NjMwM0ExRDQxOTJDODAwNTYwOUQ5IC8qIEFsbG9jYXRvckF0dHJpYnV0
ZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDA0MEUxNkY1Q0QwMEIzNDQ2MCAvKiBGdW5j
dGlvbkNvbnN0cnVjdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkYwRjFBMDE2QjcyQTFBMDA1
REY5NUIgLyogRnVuY3Rpb25FeGVjdXRhYmxlRHVtcC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTJC
MzEwRkIxOTc0QUU2MTAwODA4NTdDIC8qIEZ1bmN0aW9uSGFzRXhlY3V0ZWRDYWNoZS5oIGluIEhl
YWRlcnMgKi8sCkBAIC05MjQ3LDYgKzkyNjEsNyBAQAogCQkJCTBGOTE5RDBDMTU3RUUwOUYwMDRB
NEU3RCAvKiBKU1N5bWJvbFRhYmxlT2JqZWN0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTcwRUNB
NjA1MUFGREJFQTIwMDQ0OTczOSAvKiBKU1RlbXBsYXRlUmVnaXN0cnlLZXkuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJMEYyQjY2RkExN0I2QjVBQjAwQTdBRTNGIC8qIEpTVHlwZWRBcnJheUNvbnN0
cnVjdG9ycy5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRjk2MzAzOTFENDE5MkM2MDA1NjA5RDkg
LyogQWxsb2NhdG9yQXR0cmlidXRlcy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjJCNjZGQzE3
QjZCNUFCMDBBN0FFM0YgLyogSlNUeXBlZEFycmF5UHJvdG90eXBlcy5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQkwRjJCNjZGRTE3QjZCNUFCMDBBN0FFM0YgLyogSlNUeXBlZEFycmF5cy5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQk1MzRDNDU3RTFCQzcyNTQ5MDA3NDc2QTcgLyogSlNUeXBlZEFycmF5
Vmlld0NvbnN0cnVjdG9yLmNwcCBpbiBTb3VyY2VzICovLApAQCAtOTMyNiw2ICs5MzQxLDcgQEAK
IAkJCQk5NjlBMDc5QTBFRDFEM0FFMDBGMUY2ODEgLyogT3Bjb2RlLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTE0MjgwODUwMTA3RUMwRDcwMDEzRTdCMiAvKiBPcGVyYXRpb25zLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTBGRTIyOEVFMTQzNkFCMkMwMDE5NkM0OCAvKiBPcHRpb25zLmNwcCBpbiBT
b3VyY2VzICovLAorCQkJCTBGOTYzMDNCMUQ0MTkyQ0IwMDU2MDlEOSAvKiBEZXN0cnVjdGlvbk1v
ZGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ4RjIxQkMxMDdFQzU0RDAwNDJFQzJDIC8qIFBh
cnNlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5MzA1MkMzNDBGQjc5MjE5MDA0OEZEQzMgLyog
UGFyc2VyQXJlbmEuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZGOUNFNzMxQjlDRDZEMDAwNEVE
Q0E2IC8qIFBvbHltb3JwaGljQWNjZXNzLmNwcCBpbiBTb3VyY2VzICovLApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvQWxsb2NhdG9yQXR0cmlidXRlcy5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQWxsb2NhdG9yQXR0cmlidXRlcy5jcHAJKG5v
bmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQWxsb2NhdG9yQXR0cmli
dXRlcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzNyBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5j
bHVkZSAiQWxsb2NhdG9yQXR0cmlidXRlcy5oIgorCituYW1lc3BhY2UgSlNDIHsKKwordm9pZCBB
bGxvY2F0b3JBdHRyaWJ1dGVzOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAg
b3V0LnByaW50KCJ7IiwgZGVzdHJ1Y3Rpb24sICIsICIsIGNlbGxLaW5kLCAifSIpOworfQorCit9
IC8vIG5hbWVzcGFjZSBKU0MKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQWxs
b2NhdG9yQXR0cmlidXRlcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL0FsbG9jYXRvckF0dHJpYnV0ZXMuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9BbGxvY2F0b3JBdHRyaWJ1dGVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSw0MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLwor
CisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkRlc3RydWN0aW9uTW9kZS5oIgorI2luY2x1ZGUg
IkhlYXBDZWxsLmgiCisKK25hbWVzcGFjZSBKU0MgeworCitzdHJ1Y3QgQWxsb2NhdG9yQXR0cmli
dXRlcyB7CisgICAgQWxsb2NhdG9yQXR0cmlidXRlcygpIHsgfQorICAgIAorICAgIHZvaWQgZHVt
cChQcmludFN0cmVhbSYgb3V0KSBjb25zdDsKKyAgICAKKyAgICBEZXN0cnVjdGlvbk1vZGUgZGVz
dHJ1Y3Rpb24geyBEb2VzTm90TmVlZERlc3RydWN0aW9uIH07CisgICAgSGVhcENlbGw6OktpbmQg
Y2VsbEtpbmQgeyBIZWFwQ2VsbDo6SlNDZWxsIH07Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MK
KwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvRGVzdHJ1Y3Rpb25Nb2RlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9EZXN0cnVjdGlvbk1vZGUu
Y3BwCShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0Rlc3RydWN0
aW9uTW9kZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1MCBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiRGVzdHJ1Y3Rpb25Nb2RlLmgiCisKKyNpbmNsdWRlIDx3dGYvUHJpbnRTdHJlYW0u
aD4KKworbmFtZXNwYWNlIFdURiB7CisKK3VzaW5nIG5hbWVzcGFjZSBKU0M7CisKK3ZvaWQgcHJp
bnRJbnRlcm5hbChQcmludFN0cmVhbSYgb3V0LCBEZXN0cnVjdGlvbk1vZGUgbW9kZSkKK3sKKyAg
ICBzd2l0Y2ggKG1vZGUpIHsKKyAgICBjYXNlIE5lZWRzRGVzdHJ1Y3Rpb246CisgICAgICAgIG91
dC5wcmludCgiTmVlZHNEZXN0cnVjdGlvbiIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBE
b2VzTm90TmVlZERlc3RydWN0aW9uOgorICAgICAgICBvdXQucHJpbnQoIkRvZXNOb3ROZWVkRGVz
dHJ1Y3Rpb24iKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBSRUxFQVNFX0FT
U0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCit9IC8vIG5hbWVzcGFjZSBXVEYKKwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvRGVzdHJ1Y3Rpb25Nb2RlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvRGVzdHJ1Y3Rpb25Nb2RlLmgJKG5vbmV4aXN0ZW50
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvRGVzdHJ1Y3Rpb25Nb2RlLmgJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSw0MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKKyAqLworCisjcHJhZ21hIG9uY2UKKworbmFtZXNwYWNlIEpTQyB7CisKK2VudW0g
RGVzdHJ1Y3Rpb25Nb2RlIDogaW50OF90IHsKKyAgICBEb2VzTm90TmVlZERlc3RydWN0aW9uLAor
ICAgIE5lZWRzRGVzdHJ1Y3Rpb24KK307CisKK30gLy8gbmFtZXNwYWNlIEpTQworCituYW1lc3Bh
Y2UgV1RGIHsKKworY2xhc3MgUHJpbnRTdHJlYW07Cit2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRT
dHJlYW0mLCBKU0M6OkRlc3RydWN0aW9uTW9kZSk7CisKK30gLy8gbmFtZXNwYWNlIFdURgorCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRBbGxvY2F0b3IuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEFsbG9jYXRvci5jcHAJ
KHJldmlzaW9uIDIwMzUyNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEFs
bG9jYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE4NiwxMCArMTg2LDcgQEAgTWFya2VkQmxv
Y2sqIE1hcmtlZEFsbG9jYXRvcjo6YWxsb2NhdGVCbAogCiAgICAgc2l6ZV90IGNlbGxTaXplID0g
bV9jZWxsU2l6ZSA/IG1fY2VsbFNpemUgOiBXVEY6OnJvdW5kVXBUb011bHRpcGxlT2Y8TWFya2Vk
QmxvY2s6OmF0b21TaXplPihieXRlcyk7CiAKLSAgICAvLyBGSVhNRTogU3VwcG9ydCBhbGxvY2F0
aW5nIHN0b3JhZ2UgaW4gbWFya2VkIGJsb2Nrcy4gVGhpcyB3b3VsZCBtZWFuIHRoYXQgYWxsb2Nh
dGVCbG9jaygpCi0gICAgLy8gdGFrZXMgYSBIZWFwQ2VsbDo6S2luZCwgb3Igc29tZXRoaW5nIGxp
a2UgdGhhdC4KLSAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTU5NjU4Ci0gICAgcmV0dXJuIE1hcmtlZEJsb2NrOjpjcmVhdGUoKm1faGVhcCwgdGhpcywgYmxv
Y2tTaXplLCBjZWxsU2l6ZSwgbV9uZWVkc0Rlc3RydWN0aW9uLCBIZWFwQ2VsbDo6SlNDZWxsKTsK
KyAgICByZXR1cm4gTWFya2VkQmxvY2s6OmNyZWF0ZSgqbV9oZWFwLCB0aGlzLCBibG9ja1NpemUs
IGNlbGxTaXplLCBtX2F0dHJpYnV0ZXMpOwogfQogCiB2b2lkIE1hcmtlZEFsbG9jYXRvcjo6YWRk
QmxvY2soTWFya2VkQmxvY2sqIGJsb2NrKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvTWFya2VkQWxsb2NhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvTWFya2VkQWxsb2NhdG9yLmgJKHJldmlzaW9uIDIwMzUyNSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL01hcmtlZEFsbG9jYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUg
KzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiwgMjAxMyBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIsIDIwMTMsIDIwMTYgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CkBAIC0yNiw2ICsyNiw3IEBACiAjaWZuZGVmIE1hcmtlZEFsbG9jYXRvcl9oCiAjZGVmaW5lIE1h
cmtlZEFsbG9jYXRvcl9oCiAKKyNpbmNsdWRlICJBbGxvY2F0b3JBdHRyaWJ1dGVzLmgiCiAjaW5j
bHVkZSAiTWFya2VkQmxvY2suaCIKICNpbmNsdWRlIDx3dGYvRG91Ymx5TGlua2VkTGlzdC5oPgog
CkBAIC00Niw4ICs0NywxMSBAQCBwdWJsaWM6CiAgICAgdm9pZCByZXNldCgpOwogICAgIHZvaWQg
c3RvcEFsbG9jYXRpbmcoKTsKICAgICB2b2lkIHJlc3VtZUFsbG9jYXRpbmcoKTsKLSAgICBzaXpl
X3QgY2VsbFNpemUoKSB7IHJldHVybiBtX2NlbGxTaXplOyB9Ci0gICAgYm9vbCBuZWVkc0Rlc3Ry
dWN0aW9uKCkgeyByZXR1cm4gbV9uZWVkc0Rlc3RydWN0aW9uOyB9CisgICAgc2l6ZV90IGNlbGxT
aXplKCkgY29uc3QgeyByZXR1cm4gbV9jZWxsU2l6ZTsgfQorICAgIGNvbnN0IEFsbG9jYXRvckF0
dHJpYnV0ZXMmIGF0dHJpYnV0ZXMoKSBjb25zdCB7IHJldHVybiBtX2F0dHJpYnV0ZXM7IH0KKyAg
ICBib29sIG5lZWRzRGVzdHJ1Y3Rpb24oKSBjb25zdCB7IHJldHVybiBtX2F0dHJpYnV0ZXMuZGVz
dHJ1Y3Rpb24gPT0gTmVlZHNEZXN0cnVjdGlvbjsgfQorICAgIERlc3RydWN0aW9uTW9kZSBkZXN0
cnVjdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fYXR0cmlidXRlcy5kZXN0cnVjdGlvbjsgfQorICAg
IEhlYXBDZWxsOjpLaW5kIGNlbGxLaW5kKCkgY29uc3QgeyByZXR1cm4gbV9hdHRyaWJ1dGVzLmNl
bGxLaW5kOyB9CiAgICAgdm9pZCogYWxsb2NhdGUoc2l6ZV90KTsKICAgICBIZWFwKiBoZWFwKCkg
eyByZXR1cm4gbV9oZWFwOyB9CiAgICAgTWFya2VkQmxvY2sqIHRha2VMYXN0QWN0aXZlQmxvY2so
KQpAQCAtNjEsNyArNjUsNyBAQCBwdWJsaWM6CiAgICAgCiAgICAgdm9pZCBhZGRCbG9jayhNYXJr
ZWRCbG9jayopOwogICAgIHZvaWQgcmVtb3ZlQmxvY2soTWFya2VkQmxvY2sqKTsKLSAgICB2b2lk
IGluaXQoSGVhcCosIE1hcmtlZFNwYWNlKiwgc2l6ZV90IGNlbGxTaXplLCBib29sIG5lZWRzRGVz
dHJ1Y3Rpb24pOworICAgIHZvaWQgaW5pdChIZWFwKiwgTWFya2VkU3BhY2UqLCBzaXplX3QgY2Vs
bFNpemUsIGNvbnN0IEFsbG9jYXRvckF0dHJpYnV0ZXMmKTsKIAogICAgIGJvb2wgaXNQYWdlZE91
dChkb3VibGUgZGVhZGxpbmUpOwogICAgCkBAIC04MSw3ICs4NSw3IEBAIHByaXZhdGU6CiAgICAg
RG91Ymx5TGlua2VkTGlzdDxNYXJrZWRCbG9jaz4gbV9ibG9ja0xpc3Q7CiAgICAgRG91Ymx5TGlu
a2VkTGlzdDxNYXJrZWRCbG9jaz4gbV9yZXRpcmVkQmxvY2tzOwogICAgIHNpemVfdCBtX2NlbGxT
aXplOwotICAgIGJvb2wgbV9uZWVkc0Rlc3RydWN0aW9uIHsgZmFsc2UgfTsKKyAgICBBbGxvY2F0
b3JBdHRyaWJ1dGVzIG1fYXR0cmlidXRlczsKICAgICBIZWFwKiBtX2hlYXA7CiAgICAgTWFya2Vk
U3BhY2UqIG1fbWFya2VkU3BhY2U7CiB9OwpAQCAtMTAxLDEyICsxMDUsMTIgQEAgaW5saW5lIE1h
cmtlZEFsbG9jYXRvcjo6TWFya2VkQWxsb2NhdG9yKAogewogfQogCi1pbmxpbmUgdm9pZCBNYXJr
ZWRBbGxvY2F0b3I6OmluaXQoSGVhcCogaGVhcCwgTWFya2VkU3BhY2UqIG1hcmtlZFNwYWNlLCBz
aXplX3QgY2VsbFNpemUsIGJvb2wgbmVlZHNEZXN0cnVjdGlvbikKK2lubGluZSB2b2lkIE1hcmtl
ZEFsbG9jYXRvcjo6aW5pdChIZWFwKiBoZWFwLCBNYXJrZWRTcGFjZSogbWFya2VkU3BhY2UsIHNp
emVfdCBjZWxsU2l6ZSwgY29uc3QgQWxsb2NhdG9yQXR0cmlidXRlcyYgYXR0cmlidXRlcykKIHsK
ICAgICBtX2hlYXAgPSBoZWFwOwogICAgIG1fbWFya2VkU3BhY2UgPSBtYXJrZWRTcGFjZTsKICAg
ICBtX2NlbGxTaXplID0gY2VsbFNpemU7Ci0gICAgbV9uZWVkc0Rlc3RydWN0aW9uID0gbmVlZHNE
ZXN0cnVjdGlvbjsKKyAgICBtX2F0dHJpYnV0ZXMgPSBhdHRyaWJ1dGVzOwogfQogCiBpbmxpbmUg
dm9pZCogTWFya2VkQWxsb2NhdG9yOjphbGxvY2F0ZShzaXplX3QgYnl0ZXMpCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQmxvY2suY3BwCShyZXZpc2lvbiAyMDM1MjUp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRCbG9jay5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMSwgMjAxNiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKQEAgLTM1LDE0ICszNSwxNCBAQCBuYW1lc3BhY2UgSlNDIHsKIHN0YXRpYyBjb25zdCBib29s
IGNvbXB1dGVCYWxhbmNlID0gZmFsc2U7CiBzdGF0aWMgc2l6ZV90IGJhbGFuY2U7CiAKLU1hcmtl
ZEJsb2NrKiBNYXJrZWRCbG9jazo6Y3JlYXRlKEhlYXAmIGhlYXAsIE1hcmtlZEFsbG9jYXRvciog
YWxsb2NhdG9yLCBzaXplX3QgY2FwYWNpdHksIHNpemVfdCBjZWxsU2l6ZSwgYm9vbCBuZWVkc0Rl
c3RydWN0aW9uLCBIZWFwQ2VsbDo6S2luZCBjZWxsS2luZCkKK01hcmtlZEJsb2NrKiBNYXJrZWRC
bG9jazo6Y3JlYXRlKEhlYXAmIGhlYXAsIE1hcmtlZEFsbG9jYXRvciogYWxsb2NhdG9yLCBzaXpl
X3QgY2FwYWNpdHksIHNpemVfdCBjZWxsU2l6ZSwgY29uc3QgQWxsb2NhdG9yQXR0cmlidXRlcyYg
YXR0cmlidXRlcykKIHsKICAgICBpZiAoY29tcHV0ZUJhbGFuY2UpIHsKICAgICAgICAgYmFsYW5j
ZSsrOwogICAgICAgICBpZiAoIShiYWxhbmNlICUgMTApKQogICAgICAgICAgICAgZGF0YUxvZygi
TWFya2VkQmxvY2sgQmFsYW5jZTogIiwgYmFsYW5jZSwgIlxuIik7CiAgICAgfQotICAgIE1hcmtl
ZEJsb2NrKiBibG9jayA9IG5ldyAoTm90TnVsbCwgZmFzdEFsaWduZWRNYWxsb2MoYmxvY2tTaXpl
LCBjYXBhY2l0eSkpIE1hcmtlZEJsb2NrKGFsbG9jYXRvciwgY2FwYWNpdHksIGNlbGxTaXplLCBu
ZWVkc0Rlc3RydWN0aW9uLCBjZWxsS2luZCk7CisgICAgTWFya2VkQmxvY2sqIGJsb2NrID0gbmV3
IChOb3ROdWxsLCBmYXN0QWxpZ25lZE1hbGxvYyhibG9ja1NpemUsIGNhcGFjaXR5KSkgTWFya2Vk
QmxvY2soYWxsb2NhdG9yLCBjYXBhY2l0eSwgY2VsbFNpemUsIGF0dHJpYnV0ZXMpOwogICAgIGhl
YXAuZGlkQWxsb2NhdGVCbG9jayhjYXBhY2l0eSk7CiAgICAgcmV0dXJuIGJsb2NrOwogfQpAQCAt
NjAsMTkgKzYwLDIwIEBAIHZvaWQgTWFya2VkQmxvY2s6OmRlc3Ryb3koSGVhcCYgaGVhcCwgTWEK
ICAgICBoZWFwLmRpZEZyZWVCbG9jayhjYXBhY2l0eSk7CiB9CiAKLU1hcmtlZEJsb2NrOjpNYXJr
ZWRCbG9jayhNYXJrZWRBbGxvY2F0b3IqIGFsbG9jYXRvciwgc2l6ZV90IGNhcGFjaXR5LCBzaXpl
X3QgY2VsbFNpemUsIGJvb2wgbmVlZHNEZXN0cnVjdGlvbiwgSGVhcENlbGw6OktpbmQgY2VsbEtp
bmQpCitNYXJrZWRCbG9jazo6TWFya2VkQmxvY2soTWFya2VkQWxsb2NhdG9yKiBhbGxvY2F0b3Is
IHNpemVfdCBjYXBhY2l0eSwgc2l6ZV90IGNlbGxTaXplLCBjb25zdCBBbGxvY2F0b3JBdHRyaWJ1
dGVzJiBhdHRyaWJ1dGVzKQogICAgIDogRG91Ymx5TGlua2VkTGlzdE5vZGU8TWFya2VkQmxvY2s+
KCkKICAgICAsIG1fYXRvbXNQZXJDZWxsKChjZWxsU2l6ZSArIGF0b21TaXplIC0gMSkgLyBhdG9t
U2l6ZSkKICAgICAsIG1fZW5kQXRvbSgoYWxsb2NhdG9yLT5jZWxsU2l6ZSgpID8gYXRvbXNQZXJC
bG9jayAtIG1fYXRvbXNQZXJDZWxsIDogZmlyc3RBdG9tKCkpICsgMSkKICAgICAsIG1fY2FwYWNp
dHkoY2FwYWNpdHkpCi0gICAgLCBtX25lZWRzRGVzdHJ1Y3Rpb24obmVlZHNEZXN0cnVjdGlvbikK
LSAgICAsIG1fY2VsbEtpbmQoY2VsbEtpbmQpCisgICAgLCBtX2F0dHJpYnV0ZXMoYXR0cmlidXRl
cykKICAgICAsIG1fYWxsb2NhdG9yKGFsbG9jYXRvcikKICAgICAsIG1fc3RhdGUoTmV3KSAvLyBB
bGwgY2VsbHMgc3RhcnQgb3V0IHVubWFya2VkLgogICAgICwgbV93ZWFrU2V0KGFsbG9jYXRvci0+
aGVhcCgpLT52bSgpLCAqdGhpcykKIHsKICAgICBBU1NFUlQoYWxsb2NhdG9yKTsKICAgICBIRUFQ
X0xPR19CTE9DS19TVEFURV9UUkFOU0lUSU9OKHRoaXMpOworICAgIGlmIChtX2F0dHJpYnV0ZXMu
Y2VsbEtpbmQgIT0gSGVhcENlbGw6OkpTQ2VsbCkKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQobV9h
dHRyaWJ1dGVzLmRlc3RydWN0aW9uID09IERvZXNOb3ROZWVkRGVzdHJ1Y3Rpb24pOwogfQogCiBp
bmxpbmUgdm9pZCBNYXJrZWRCbG9jazo6Y2FsbERlc3RydWN0b3IoSGVhcENlbGwqIGNlbGwpCkBA
IC0xMzQsMTAgKzEzNSwxMCBAQCBNYXJrZWRCbG9jazo6RnJlZUxpc3QgTWFya2VkQmxvY2s6OnN3
ZWVwCiAKICAgICBtX3dlYWtTZXQuc3dlZXAoKTsKIAotICAgIGlmIChzd2VlcE1vZGUgPT0gU3dl
ZXBPbmx5ICYmICFtX25lZWRzRGVzdHJ1Y3Rpb24pCisgICAgaWYgKHN3ZWVwTW9kZSA9PSBTd2Vl
cE9ubHkgJiYgbV9hdHRyaWJ1dGVzLmRlc3RydWN0aW9uID09IERvZXNOb3ROZWVkRGVzdHJ1Y3Rp
b24pCiAgICAgICAgIHJldHVybiBGcmVlTGlzdCgpOwogCi0gICAgaWYgKG1fbmVlZHNEZXN0cnVj
dGlvbikKKyAgICBpZiAobV9hdHRyaWJ1dGVzLmRlc3RydWN0aW9uID09IE5lZWRzRGVzdHJ1Y3Rp
b24pCiAgICAgICAgIHJldHVybiBzd2VlcEhlbHBlcjx0cnVlPihzd2VlcE1vZGUpOwogICAgIHJl
dHVybiBzd2VlcEhlbHBlcjxmYWxzZT4oc3dlZXBNb2RlKTsKIH0KQEAgLTIxNiw3ICsyMTcsNyBA
QCB2b2lkIE1hcmtlZEJsb2NrOjpzdG9wQWxsb2NhdGluZyhjb25zdCBGCiAgICAgRnJlZUNlbGwq
IG5leHQ7CiAgICAgZm9yIChGcmVlQ2VsbCogY3VycmVudCA9IGhlYWQ7IGN1cnJlbnQ7IGN1cnJl
bnQgPSBuZXh0KSB7CiAgICAgICAgIG5leHQgPSBjdXJyZW50LT5uZXh0OwotICAgICAgICBpZiAo
bV9uZWVkc0Rlc3RydWN0aW9uKQorICAgICAgICBpZiAobV9hdHRyaWJ1dGVzLmRlc3RydWN0aW9u
ID09IE5lZWRzRGVzdHJ1Y3Rpb24pCiAgICAgICAgICAgICByZWludGVycHJldF9jYXN0PEhlYXBD
ZWxsKj4oY3VycmVudCktPnphcCgpOwogICAgICAgICBjbGVhck5ld2x5QWxsb2NhdGVkKGN1cnJl
bnQpOwogICAgIH0KQEAgLTI5NCw3ICsyOTUsNyBAQCB2b2lkIE1hcmtlZEJsb2NrOjpkaWRSZXRp
cmVCbG9jayhjb25zdCBGCiAgICAgRnJlZUNlbGwqIG5leHQ7CiAgICAgZm9yIChGcmVlQ2VsbCog
Y3VycmVudCA9IGhlYWQ7IGN1cnJlbnQ7IGN1cnJlbnQgPSBuZXh0KSB7CiAgICAgICAgIG5leHQg
PSBjdXJyZW50LT5uZXh0OwotICAgICAgICBpZiAobV9uZWVkc0Rlc3RydWN0aW9uKQorICAgICAg
ICBpZiAobV9hdHRyaWJ1dGVzLmRlc3RydWN0aW9uID09IE5lZWRzRGVzdHJ1Y3Rpb24pCiAgICAg
ICAgICAgICByZWludGVycHJldF9jYXN0PEhlYXBDZWxsKj4oY3VycmVudCktPnphcCgpOwogICAg
IH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQmxvY2suaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRCbG9jay5oCShyZXZp
c2lvbiAyMDM1MjUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRCbG9jay5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDcgKzEsNyBAQAogLyoKICAqICBDb3B5cmlnaHQgKEMpIDE5
OTktMjAwMCBIYXJyaSBQb3J0ZW4gKHBvcnRlbkBrZGUub3JnKQogICogIENvcHlyaWdodCAoQykg
MjAwMSBQZXRlciBLZWxseSAocG1rQHBvc3QuY29tKQotICogIENvcHlyaWdodCAoQykgMjAwMywg
MjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2
LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDExLCAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk
aXN0cmlidXRlIGl0IGFuZC9vcgogICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKQEAgLTIyLDYgKzIyLDcgQEAKICNpZm5kZWYgTWFy
a2VkQmxvY2tfaAogI2RlZmluZSBNYXJrZWRCbG9ja19oCiAKKyNpbmNsdWRlICJEZXN0cnVjdGlv
bk1vZGUuaCIKICNpbmNsdWRlICJIZWFwQ2VsbC5oIgogI2luY2x1ZGUgIkhlYXBPcGVyYXRpb24u
aCIKICNpbmNsdWRlICJJdGVyYXRpb25TdGF0dXMuaCIKQEAgLTEwNyw3ICsxMDgsNyBAQCBuYW1l
c3BhY2UgSlNDIHsKICAgICAgICAgICAgIG11dGFibGUgUmV0dXJuVHlwZSBtX2NvdW50OwogICAg
ICAgICB9OwogCi0gICAgICAgIHN0YXRpYyBNYXJrZWRCbG9jayogY3JlYXRlKEhlYXAmLCBNYXJr
ZWRBbGxvY2F0b3IqLCBzaXplX3QgY2FwYWNpdHksIHNpemVfdCBjZWxsU2l6ZSwgYm9vbCBuZWVk
c0Rlc3RydWN0aW9uLCBIZWFwQ2VsbDo6S2luZCk7CisgICAgICAgIHN0YXRpYyBNYXJrZWRCbG9j
ayogY3JlYXRlKEhlYXAmLCBNYXJrZWRBbGxvY2F0b3IqLCBzaXplX3QgY2FwYWNpdHksIHNpemVf
dCBjZWxsU2l6ZSwgY29uc3QgQWxsb2NhdG9yQXR0cmlidXRlcyYpOwogICAgICAgICBzdGF0aWMg
dm9pZCBkZXN0cm95KEhlYXAmLCBNYXJrZWRCbG9jayopOwogCiAgICAgICAgIHN0YXRpYyBib29s
IGlzQXRvbUFsaWduZWQoY29uc3Qgdm9pZCopOwpAQCAtMTQ3LDYgKzE0OCw4IEBAIG5hbWVzcGFj
ZSBKU0MgewogICAgICAgICBib29sIGlzRW1wdHkoKTsKIAogICAgICAgICBzaXplX3QgY2VsbFNp
emUoKTsKKyAgICAgICAgY29uc3QgQWxsb2NhdG9yQXR0cmlidXRlcyYgYXR0cmlidXRlcygpIGNv
bnN0OworICAgICAgICBEZXN0cnVjdGlvbk1vZGUgZGVzdHJ1Y3Rpb24oKSBjb25zdDsKICAgICAg
ICAgYm9vbCBuZWVkc0Rlc3RydWN0aW9uKCkgY29uc3Q7CiAgICAgICAgIEhlYXBDZWxsOjpLaW5k
IGNlbGxLaW5kKCkgY29uc3Q7CiAKQEAgLTE4NCw3ICsxODcsNyBAQCBuYW1lc3BhY2UgSlNDIHsK
IAogICAgICAgICB0eXBlZGVmIGNoYXIgQXRvbVthdG9tU2l6ZV07CiAKLSAgICAgICAgTWFya2Vk
QmxvY2soTWFya2VkQWxsb2NhdG9yKiwgc2l6ZV90IGNhcGFjaXR5LCBzaXplX3QgY2VsbFNpemUs
IGJvb2wgbmVlZHNEZXN0cnVjdGlvbiwgSGVhcENlbGw6OktpbmQpOworICAgICAgICBNYXJrZWRC
bG9jayhNYXJrZWRBbGxvY2F0b3IqLCBzaXplX3QgY2FwYWNpdHksIHNpemVfdCBjZWxsU2l6ZSwg
Y29uc3QgQWxsb2NhdG9yQXR0cmlidXRlcyYpOwogICAgICAgICBBdG9tKiBhdG9tcygpOwogICAg
ICAgICBzaXplX3QgYXRvbU51bWJlcihjb25zdCB2b2lkKik7CiAgICAgICAgIHZvaWQgY2FsbERl
c3RydWN0b3IoSGVhcENlbGwqKTsKQEAgLTE5OSw4ICsyMDIsNyBAQCBuYW1lc3BhY2UgSlNDIHsK
ICAgICAgICAgc3RkOjp1bmlxdWVfcHRyPFdURjo6Qml0bWFwPGF0b21zUGVyQmxvY2s+PiBtX25l
d2x5QWxsb2NhdGVkOwogCiAgICAgICAgIHNpemVfdCBtX2NhcGFjaXR5OwotICAgICAgICBib29s
IG1fbmVlZHNEZXN0cnVjdGlvbjsKLSAgICAgICAgSGVhcENlbGw6OktpbmQgbV9jZWxsS2luZDsK
KyAgICAgICAgQWxsb2NhdG9yQXR0cmlidXRlcyBtX2F0dHJpYnV0ZXM7CiAgICAgICAgIE1hcmtl
ZEFsbG9jYXRvciogbV9hbGxvY2F0b3I7CiAgICAgICAgIEJsb2NrU3RhdGUgbV9zdGF0ZTsKICAg
ICAgICAgV2Vha1NldCBtX3dlYWtTZXQ7CkBAIC0zMDEsMTQgKzMwMywyNCBAQCBuYW1lc3BhY2Ug
SlNDIHsKICAgICAgICAgcmV0dXJuIG1fYXRvbXNQZXJDZWxsICogYXRvbVNpemU7CiAgICAgfQog
CisgICAgaW5saW5lIGNvbnN0IEFsbG9jYXRvckF0dHJpYnV0ZXMmIE1hcmtlZEJsb2NrOjphdHRy
aWJ1dGVzKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX2F0dHJpYnV0ZXM7CisgICAg
fQorCiAgICAgaW5saW5lIGJvb2wgTWFya2VkQmxvY2s6Om5lZWRzRGVzdHJ1Y3Rpb24oKSBjb25z
dAogICAgIHsKLSAgICAgICAgcmV0dXJuIG1fbmVlZHNEZXN0cnVjdGlvbjsKKyAgICAgICAgcmV0
dXJuIG1fYXR0cmlidXRlcy5kZXN0cnVjdGlvbiA9PSBOZWVkc0Rlc3RydWN0aW9uOworICAgIH0K
KworICAgIGlubGluZSBEZXN0cnVjdGlvbk1vZGUgTWFya2VkQmxvY2s6OmRlc3RydWN0aW9uKCkg
Y29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX2F0dHJpYnV0ZXMuZGVzdHJ1Y3Rpb247CiAg
ICAgfQogCiAgICAgaW5saW5lIEhlYXBDZWxsOjpLaW5kIE1hcmtlZEJsb2NrOjpjZWxsS2luZCgp
IGNvbnN0CiAgICAgewotICAgICAgICByZXR1cm4gbV9jZWxsS2luZDsKKyAgICAgICAgcmV0dXJu
IG1fYXR0cmlidXRlcy5jZWxsS2luZDsKICAgICB9CiAKICAgICBpbmxpbmUgc2l6ZV90IE1hcmtl
ZEJsb2NrOjpzaXplKCkKQEAgLTQyMCw3ICs0MzIsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAg
IHRlbXBsYXRlIDx0eXBlbmFtZSBGdW5jdG9yPiBpbmxpbmUgSXRlcmF0aW9uU3RhdHVzIE1hcmtl
ZEJsb2NrOjpmb3JFYWNoQ2VsbChjb25zdCBGdW5jdG9yJiBmdW5jdG9yKQogICAgIHsKLSAgICAg
ICAgSGVhcENlbGw6OktpbmQga2luZCA9IG1fY2VsbEtpbmQ7CisgICAgICAgIEhlYXBDZWxsOjpL
aW5kIGtpbmQgPSBtX2F0dHJpYnV0ZXMuY2VsbEtpbmQ7CiAgICAgICAgIGZvciAoc2l6ZV90IGkg
PSBmaXJzdEF0b20oKTsgaSA8IG1fZW5kQXRvbTsgaSArPSBtX2F0b21zUGVyQ2VsbCkgewogICAg
ICAgICAgICAgSGVhcENlbGwqIGNlbGwgPSByZWludGVycHJldF9jYXN0X3B0cjxIZWFwQ2VsbCo+
KCZhdG9tcygpW2ldKTsKICAgICAgICAgICAgIGlmIChmdW5jdG9yKGNlbGwsIGtpbmQpID09IEl0
ZXJhdGlvblN0YXR1czo6RG9uZSkKQEAgLTQzMSw3ICs0NDMsNyBAQCBuYW1lc3BhY2UgSlNDIHsK
IAogICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBGdW5jdG9yPiBpbmxpbmUgSXRlcmF0aW9uU3RhdHVz
IE1hcmtlZEJsb2NrOjpmb3JFYWNoTGl2ZUNlbGwoY29uc3QgRnVuY3RvciYgZnVuY3RvcikKICAg
ICB7Ci0gICAgICAgIEhlYXBDZWxsOjpLaW5kIGtpbmQgPSBtX2NlbGxLaW5kOworICAgICAgICBI
ZWFwQ2VsbDo6S2luZCBraW5kID0gbV9hdHRyaWJ1dGVzLmNlbGxLaW5kOwogICAgICAgICBmb3Ig
KHNpemVfdCBpID0gZmlyc3RBdG9tKCk7IGkgPCBtX2VuZEF0b207IGkgKz0gbV9hdG9tc1BlckNl
bGwpIHsKICAgICAgICAgICAgIEhlYXBDZWxsKiBjZWxsID0gcmVpbnRlcnByZXRfY2FzdF9wdHI8
SGVhcENlbGwqPigmYXRvbXMoKVtpXSk7CiAgICAgICAgICAgICBpZiAoIWlzTGl2ZShjZWxsKSkK
QEAgLTQ0NSw3ICs0NTcsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgIHRlbXBsYXRlIDx0eXBl
bmFtZSBGdW5jdG9yPiBpbmxpbmUgSXRlcmF0aW9uU3RhdHVzIE1hcmtlZEJsb2NrOjpmb3JFYWNo
RGVhZENlbGwoY29uc3QgRnVuY3RvciYgZnVuY3RvcikKICAgICB7Ci0gICAgICAgIEhlYXBDZWxs
OjpLaW5kIGtpbmQgPSBtX2NlbGxLaW5kOworICAgICAgICBIZWFwQ2VsbDo6S2luZCBraW5kID0g
bV9hdHRyaWJ1dGVzLmNlbGxLaW5kOwogICAgICAgICBmb3IgKHNpemVfdCBpID0gZmlyc3RBdG9t
KCk7IGkgPCBtX2VuZEF0b207IGkgKz0gbV9hdG9tc1BlckNlbGwpIHsKICAgICAgICAgICAgIEhl
YXBDZWxsKiBjZWxsID0gcmVpbnRlcnByZXRfY2FzdF9wdHI8SGVhcENlbGwqPigmYXRvbXMoKVtp
XSk7CiAgICAgICAgICAgICBpZiAoaXNMaXZlKGNlbGwpKQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvTWFya2VkU3BhY2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL01hcmtlZFNwYWNlLmNwcAkocmV2aXNpb24gMjAzNTI1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkU3BhY2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
MiwxOCArMzIsMTEgQEAgTWFya2VkU3BhY2U6Ok1hcmtlZFNwYWNlKEhlYXAqIGhlYXApCiAgICAg
LCBtX2NhcGFjaXR5KDApCiAgICAgLCBtX2lzSXRlcmF0aW5nKGZhbHNlKQogewotICAgIGZvciAo
c2l6ZV90IGNlbGxTaXplID0gcHJlY2lzZVN0ZXA7IGNlbGxTaXplIDw9IHByZWNpc2VDdXRvZmY7
IGNlbGxTaXplICs9IHByZWNpc2VTdGVwKSB7Ci0gICAgICAgIGFsbG9jYXRvckZvcihjZWxsU2l6
ZSkuaW5pdChoZWFwLCB0aGlzLCBjZWxsU2l6ZSwgZmFsc2UpOwotICAgICAgICBkZXN0cnVjdG9y
QWxsb2NhdG9yRm9yKGNlbGxTaXplKS5pbml0KGhlYXAsIHRoaXMsIGNlbGxTaXplLCB0cnVlKTsK
LSAgICB9Ci0KLSAgICBmb3IgKHNpemVfdCBjZWxsU2l6ZSA9IGltcHJlY2lzZVN0YXJ0OyBjZWxs
U2l6ZSA8PSBpbXByZWNpc2VDdXRvZmY7IGNlbGxTaXplICs9IGltcHJlY2lzZVN0ZXApIHsKLSAg
ICAgICAgYWxsb2NhdG9yRm9yKGNlbGxTaXplKS5pbml0KGhlYXAsIHRoaXMsIGNlbGxTaXplLCBm
YWxzZSk7Ci0gICAgICAgIGRlc3RydWN0b3JBbGxvY2F0b3JGb3IoY2VsbFNpemUpLmluaXQoaGVh
cCwgdGhpcywgY2VsbFNpemUsIHRydWUpOwotICAgIH0KLQotICAgIG1fbm9ybWFsU3BhY2UubGFy
Z2VBbGxvY2F0b3IuaW5pdChoZWFwLCB0aGlzLCAwLCBmYWxzZSk7Ci0gICAgbV9kZXN0cnVjdG9y
U3BhY2UubGFyZ2VBbGxvY2F0b3IuaW5pdChoZWFwLCB0aGlzLCAwLCB0cnVlKTsKKyAgICBmb3JF
YWNoQWxsb2NhdG9yKAorICAgICAgICBbJl0gKE1hcmtlZEFsbG9jYXRvciYgYWxsb2NhdG9yLCBz
aXplX3QgY2VsbFNpemUsIEFsbG9jYXRvckF0dHJpYnV0ZXMgYXR0cmlidXRlcykgLT4gSXRlcmF0
aW9uU3RhdHVzIHsKKyAgICAgICAgICAgIGFsbG9jYXRvci5pbml0KGhlYXAsIHRoaXMsIGNlbGxT
aXplLCBhdHRyaWJ1dGVzKTsKKyAgICAgICAgICAgIHJldHVybiBJdGVyYXRpb25TdGF0dXM6OkNv
bnRpbnVlOworICAgICAgICB9KTsKIH0KIAogTWFya2VkU3BhY2U6On5NYXJrZWRTcGFjZSgpCkBA
IC01OSw4ICs1Miw5IEBAIHZvaWQgTWFya2VkU3BhY2U6Omxhc3RDaGFuY2VUb0ZpbmFsaXplKCkK
IHsKICAgICBzdG9wQWxsb2NhdGluZygpOwogICAgIGZvckVhY2hBbGxvY2F0b3IoCi0gICAgICAg
IFsmXSAoTWFya2VkQWxsb2NhdG9yJiBhbGxvY2F0b3IpIHsKKyAgICAgICAgWyZdIChNYXJrZWRB
bGxvY2F0b3ImIGFsbG9jYXRvciwgc2l6ZV90LCBBbGxvY2F0b3JBdHRyaWJ1dGVzKSAtPiBJdGVy
YXRpb25TdGF0dXMgewogICAgICAgICAgICAgYWxsb2NhdG9yLmxhc3RDaGFuY2VUb0ZpbmFsaXpl
KCk7CisgICAgICAgICAgICByZXR1cm4gSXRlcmF0aW9uU3RhdHVzOjpDb250aW51ZTsKICAgICAg
ICAgfSk7CiB9CiAKQEAgLTg3LDE4ICs4MSwxMSBAQCB2b2lkIE1hcmtlZFNwYWNlOjp6b21iaWZ5
U3dlZXAoKQogCiB2b2lkIE1hcmtlZFNwYWNlOjpyZXNldEFsbG9jYXRvcnMoKQogewotICAgIGZv
ciAoc2l6ZV90IGNlbGxTaXplID0gcHJlY2lzZVN0ZXA7IGNlbGxTaXplIDw9IHByZWNpc2VDdXRv
ZmY7IGNlbGxTaXplICs9IHByZWNpc2VTdGVwKSB7Ci0gICAgICAgIGFsbG9jYXRvckZvcihjZWxs
U2l6ZSkucmVzZXQoKTsKLSAgICAgICAgZGVzdHJ1Y3RvckFsbG9jYXRvckZvcihjZWxsU2l6ZSku
cmVzZXQoKTsKLSAgICB9Ci0KLSAgICBmb3IgKHNpemVfdCBjZWxsU2l6ZSA9IGltcHJlY2lzZVN0
YXJ0OyBjZWxsU2l6ZSA8PSBpbXByZWNpc2VDdXRvZmY7IGNlbGxTaXplICs9IGltcHJlY2lzZVN0
ZXApIHsKLSAgICAgICAgYWxsb2NhdG9yRm9yKGNlbGxTaXplKS5yZXNldCgpOwotICAgICAgICBk
ZXN0cnVjdG9yQWxsb2NhdG9yRm9yKGNlbGxTaXplKS5yZXNldCgpOwotICAgIH0KLQotICAgIG1f
bm9ybWFsU3BhY2UubGFyZ2VBbGxvY2F0b3IucmVzZXQoKTsKLSAgICBtX2Rlc3RydWN0b3JTcGFj
ZS5sYXJnZUFsbG9jYXRvci5yZXNldCgpOworICAgIGZvckVhY2hBbGxvY2F0b3IoCisgICAgICAg
IFsmXSAoTWFya2VkQWxsb2NhdG9yJiBhbGxvY2F0b3IsIHNpemVfdCwgQWxsb2NhdG9yQXR0cmli
dXRlcykgLT4gSXRlcmF0aW9uU3RhdHVzIHsKKyAgICAgICAgICAgIGFsbG9jYXRvci5yZXNldCgp
OworICAgICAgICAgICAgcmV0dXJuIEl0ZXJhdGlvblN0YXR1czo6Q29udGludWU7CisgICAgICAg
IH0pOwogCiAgICAgbV9ibG9ja3NXaXRoTmV3T2JqZWN0cy5jbGVhcigpOwogfQpAQCAtMTMyLDI2
ICsxMTksMjggQEAgdm9pZCBNYXJrZWRTcGFjZTo6cmVhcFdlYWtTZXRzKCkKIHRlbXBsYXRlIDx0
eXBlbmFtZSBGdW5jdG9yPgogdm9pZCBNYXJrZWRTcGFjZTo6Zm9yRWFjaEFsbG9jYXRvcihjb25z
dCBGdW5jdG9yJiBmdW5jdG9yKQogewotICAgIGZvciAoc2l6ZV90IGNlbGxTaXplID0gcHJlY2lz
ZVN0ZXA7IGNlbGxTaXplIDw9IHByZWNpc2VDdXRvZmY7IGNlbGxTaXplICs9IHByZWNpc2VTdGVw
KSB7Ci0gICAgICAgIGZ1bmN0b3IoYWxsb2NhdG9yRm9yKGNlbGxTaXplKSk7Ci0gICAgICAgIGZ1
bmN0b3IoZGVzdHJ1Y3RvckFsbG9jYXRvckZvcihjZWxsU2l6ZSkpOwotICAgIH0KLQotICAgIGZv
ciAoc2l6ZV90IGNlbGxTaXplID0gaW1wcmVjaXNlU3RhcnQ7IGNlbGxTaXplIDw9IGltcHJlY2lz
ZUN1dG9mZjsgY2VsbFNpemUgKz0gaW1wcmVjaXNlU3RlcCkgewotICAgICAgICBmdW5jdG9yKGFs
bG9jYXRvckZvcihjZWxsU2l6ZSkpOwotICAgICAgICBmdW5jdG9yKGRlc3RydWN0b3JBbGxvY2F0
b3JGb3IoY2VsbFNpemUpKTsKLSAgICB9Ci0KLSAgICBmdW5jdG9yKG1fbm9ybWFsU3BhY2UubGFy
Z2VBbGxvY2F0b3IpOwotICAgIGZ1bmN0b3IobV9kZXN0cnVjdG9yU3BhY2UubGFyZ2VBbGxvY2F0
b3IpOworICAgIGZvckVhY2hTdWJzcGFjZSgKKyAgICAgICAgWyZdIChTdWJzcGFjZSYgc3Vic3Bh
Y2UsIEFsbG9jYXRvckF0dHJpYnV0ZXMgYXR0cmlidXRlcykgLT4gSXRlcmF0aW9uU3RhdHVzIHsK
KyAgICAgICAgICAgIGZvciAoc2l6ZV90IGNlbGxTaXplID0gcHJlY2lzZVN0ZXA7IGNlbGxTaXpl
IDw9IHByZWNpc2VDdXRvZmY7IGNlbGxTaXplICs9IHByZWNpc2VTdGVwKSB7CisgICAgICAgICAg
ICAgICAgaWYgKGZ1bmN0b3IoYWxsb2NhdG9yRm9yKHN1YnNwYWNlLCBjZWxsc2l6ZSksIGNlbGxT
aXplLCBhdHRyaWJ1dGVzKSA9PSBJdGVyYXRpb25TdGF0dXM6OkRvbmUpCisgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBJdGVyYXRpb25TdGF0dXM6OkRvbmU7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICBmb3IgKHNpemVfdCBjZWxsU2l6ZSA9IGltcHJlY2lzZVN0YXJ0OyBjZWxsU2l6ZSA8
PSBpbXByZWNpc2VDdXRvZmY7IGNlbGxTaXplICs9IGltcHJlY2lzZVN0ZXApIHsKKyAgICAgICAg
ICAgICAgICBpZiAoZnVuY3RvcihhbGxvY2F0b3JGb3Ioc3Vic3BhY2UsIGNlbGxzaXplKSwgY2Vs
bFNpemUsIGF0dHJpYnV0ZXMpID09IEl0ZXJhdGlvblN0YXR1czo6RG9uZSkKKyAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIEl0ZXJhdGlvblN0YXR1czo6RG9uZTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIGlmIChmdW5jdG9yKHN1YnNwYWNlLmxhcmdlQWxsb2NhdG9yLCAwLCBhdHRyaWJ1
dGVzKSA9PSBJdGVyYXRpb25TdGF0dXM6OkRvbmUpCisgICAgICAgICAgICAgICAgcmV0dXJuIEl0
ZXJhdGlvblN0YXR1czo6RG9uZTsKKyAgICAgICAgfSk7CiB9CiAKIHZvaWQgTWFya2VkU3BhY2U6
OnN0b3BBbGxvY2F0aW5nKCkKIHsKICAgICBBU1NFUlQoIWlzSXRlcmF0aW5nKCkpOwogICAgIGZv
ckVhY2hBbGxvY2F0b3IoCi0gICAgICAgIFsmXSAoTWFya2VkQWxsb2NhdG9yJiBhbGxvY2F0b3Ip
IHsKKyAgICAgICAgWyZdIChNYXJrZWRBbGxvY2F0b3ImIGFsbG9jYXRvciwgc2l6ZV90LCBBbGxv
Y2F0b3JBdHRyaWJ1dGVzKSAtPiBJdGVyYXRpb25TdGF0dXMgewogICAgICAgICAgICAgYWxsb2Nh
dG9yLnN0b3BBbGxvY2F0aW5nKCk7CisgICAgICAgICAgICByZXR1cm4gSXRlcmF0aW9uU3RhdHVz
OjpDb250aW51ZTsKICAgICAgICAgfSk7CiB9CiAKQEAgLTE1OSwzMCArMTQ4LDI0IEBAIHZvaWQg
TWFya2VkU3BhY2U6OnJlc3VtZUFsbG9jYXRpbmcoKQogewogICAgIEFTU0VSVChpc0l0ZXJhdGlu
ZygpKTsKICAgICBmb3JFYWNoQWxsb2NhdG9yKAotICAgICAgICBbJl0gKE1hcmtlZEFsbG9jYXRv
ciYgYWxsb2NhdG9yKSB7CisgICAgICAgIFsmXSAoTWFya2VkQWxsb2NhdG9yJiBhbGxvY2F0b3Is
IHNpemVfdCwgQWxsb2NhdG9yQXR0cmlidXRlcykgLT4gSXRlcmF0aW9uU3RhdHVzIHsKICAgICAg
ICAgICAgIGFsbG9jYXRvci5yZXN1bWVBbGxvY2F0aW5nKCk7CisgICAgICAgICAgICByZXR1cm4g
SXRlcmF0aW9uU3RhdHVzOjpDb250aW51ZTsKICAgICAgICAgfSk7CiB9CiAKIGJvb2wgTWFya2Vk
U3BhY2U6OmlzUGFnZWRPdXQoZG91YmxlIGRlYWRsaW5lKQogewotICAgIGZvciAoc2l6ZV90IGNl
bGxTaXplID0gcHJlY2lzZVN0ZXA7IGNlbGxTaXplIDw9IHByZWNpc2VDdXRvZmY7IGNlbGxTaXpl
ICs9IHByZWNpc2VTdGVwKSB7Ci0gICAgICAgIGlmIChhbGxvY2F0b3JGb3IoY2VsbFNpemUpLmlz
UGFnZWRPdXQoZGVhZGxpbmUpIAotICAgICAgICAgICAgfHwgZGVzdHJ1Y3RvckFsbG9jYXRvckZv
cihjZWxsU2l6ZSkuaXNQYWdlZE91dChkZWFkbGluZSkpCi0gICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKLSAgICB9Ci0KLSAgICBmb3IgKHNpemVfdCBjZWxsU2l6ZSA9IGltcHJlY2lzZVN0YXJ0OyBj
ZWxsU2l6ZSA8PSBpbXByZWNpc2VDdXRvZmY7IGNlbGxTaXplICs9IGltcHJlY2lzZVN0ZXApIHsK
LSAgICAgICAgaWYgKGFsbG9jYXRvckZvcihjZWxsU2l6ZSkuaXNQYWdlZE91dChkZWFkbGluZSkg
Ci0gICAgICAgICAgICB8fCBkZXN0cnVjdG9yQWxsb2NhdG9yRm9yKGNlbGxTaXplKS5pc1BhZ2Vk
T3V0KGRlYWRsaW5lKSkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIGlm
IChtX25vcm1hbFNwYWNlLmxhcmdlQWxsb2NhdG9yLmlzUGFnZWRPdXQoZGVhZGxpbmUpCi0gICAg
ICAgIHx8IG1fZGVzdHJ1Y3RvclNwYWNlLmxhcmdlQWxsb2NhdG9yLmlzUGFnZWRPdXQoZGVhZGxp
bmUpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIHJldHVybiBmYWxzZTsKKyAgICBib29s
IHJlc3VsdCA9IGZhbHNlOworICAgIGZvckVhY2hBbGxvY2F0b3IoCisgICAgICAgIFsmXSAoTWFy
a2VkQWxsb2NhdG9yJiBhbGxvY2F0b3IsIHNpemVfdCwgQWxsb2NhdG9yQXR0cmlidXRlcykgLT4g
SXRlcmF0aW9uU3RhdHVzIHsKKyAgICAgICAgICAgIGlmIChhbGxvY2F0b3IuaXNQYWdlZE91dChk
ZWFkbGluZSkpIHsKKyAgICAgICAgICAgICAgICByZXN1bHQgPSB0cnVlOworICAgICAgICAgICAg
ICAgIHJldHVybiBJdGVyYXRpb25TdGF0dXM6OkRvbmU7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICByZXR1cm4gSXRlcmF0aW9uU3RhdHVzOjpDb250aW51ZTsKKyAgICAgICAgfSk7CisgICAg
cmV0dXJuIHJlc3VsdDsKIH0KIAogdm9pZCBNYXJrZWRTcGFjZTo6ZnJlZUJsb2NrKE1hcmtlZEJs
b2NrKiBibG9jaykKQEAgLTIxMSwzMyArMTk0LDIxIEBAIHZvaWQgTWFya2VkU3BhY2U6OnNocmlu
aygpCiAgICAgICAgIH0pOwogfQogCi1zdGF0aWMgdm9pZCBjbGVhck5ld2x5QWxsb2NhdGVkSW5C
bG9jayhNYXJrZWRCbG9jayogYmxvY2spCi17Ci0gICAgaWYgKCFibG9jaykKLSAgICAgICAgcmV0
dXJuOwotICAgIGJsb2NrLT5jbGVhck5ld2x5QWxsb2NhdGVkKCk7Ci19Ci0KIHZvaWQgTWFya2Vk
U3BhY2U6OmNsZWFyTmV3bHlBbGxvY2F0ZWQoKQogewotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgcHJlY2lzZUNvdW50OyArK2kpIHsKLSAgICAgICAgY2xlYXJOZXdseUFsbG9jYXRlZEluQmxv
Y2sobV9ub3JtYWxTcGFjZS5wcmVjaXNlQWxsb2NhdG9yc1tpXS50YWtlTGFzdEFjdGl2ZUJsb2Nr
KCkpOwotICAgICAgICBjbGVhck5ld2x5QWxsb2NhdGVkSW5CbG9jayhtX2Rlc3RydWN0b3JTcGFj
ZS5wcmVjaXNlQWxsb2NhdG9yc1tpXS50YWtlTGFzdEFjdGl2ZUJsb2NrKCkpOwotICAgIH0KLQot
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgaW1wcmVjaXNlQ291bnQ7ICsraSkgewotICAgICAg
ICBjbGVhck5ld2x5QWxsb2NhdGVkSW5CbG9jayhtX25vcm1hbFNwYWNlLmltcHJlY2lzZUFsbG9j
YXRvcnNbaV0udGFrZUxhc3RBY3RpdmVCbG9jaygpKTsKLSAgICAgICAgY2xlYXJOZXdseUFsbG9j
YXRlZEluQmxvY2sobV9kZXN0cnVjdG9yU3BhY2UuaW1wcmVjaXNlQWxsb2NhdG9yc1tpXS50YWtl
TGFzdEFjdGl2ZUJsb2NrKCkpOwotICAgIH0KLQotICAgIC8vIFdlIGhhdmUgdG8gaXRlcmF0ZSBh
bGwgb2YgdGhlIGJsb2NrcyBpbiB0aGUgbGFyZ2UgYWxsb2NhdG9ycyBiZWNhdXNlIHRoZXkgYXJl
Ci0gICAgLy8gY2Fub25pY2FsaXplZCBhcyB0aGV5IGFyZSB1c2VkIHVwIChzZWUgTWFya2VkQWxs
b2NhdG9yOjp0cnlBbGxvY2F0ZUhlbHBlcikKLSAgICAvLyB3aGljaCBjcmVhdGVzIHRoZSBtX25l
d2x5QWxsb2NhdGVkIGJpdG1hcC4KLSAgICBhdXRvIGNsZWFyTmV3bHlBbGxvY2F0ZWQgPSBbJl0g
KE1hcmtlZEJsb2NrKiBibG9jaykgewotICAgICAgICBibG9jay0+Y2xlYXJOZXdseUFsbG9jYXRl
ZCgpOwotICAgIH07Ci0gICAgbV9ub3JtYWxTcGFjZS5sYXJnZUFsbG9jYXRvci5mb3JFYWNoQmxv
Y2soY2xlYXJOZXdseUFsbG9jYXRlZCk7Ci0gICAgbV9kZXN0cnVjdG9yU3BhY2UubGFyZ2VBbGxv
Y2F0b3IuZm9yRWFjaEJsb2NrKGNsZWFyTmV3bHlBbGxvY2F0ZWQpOworICAgIGZvckVhY2hBbGxv
Y2F0b3IoCisgICAgICAgIFsmXSAoTWFya2VkQWxsb2NhdG9yJiBhbGxvY2F0b3IsIHNpemVfdCBz
aXplLCBBbGxvY2F0b3JBdHRyaWJ1dGVzKSB7CisgICAgICAgICAgICBpZiAoIXNpemUpIHsKKyAg
ICAgICAgICAgICAgICBhbGxvY2F0b3IuZm9yRWFjaEJsb2NrKAorICAgICAgICAgICAgICAgICAg
ICBbJl0gKE1hcmtlZEJsb2NrKiBibG9jaykgeworICAgICAgICAgICAgICAgICAgICAgICAgYmxv
Y2stPmNsZWFyTmV3bHlBbGxvY2F0ZWQoKTsKKyAgICAgICAgICAgICAgICAgICAgfSk7CisgICAg
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAg
ICAgICBpZiAoTWFya2VkQmxvY2sqIGJsb2NrID0gYWxsb2NhdG9yLnRha2VMYXN0QWN0aXZlQmxv
Y2soKSkKKyAgICAgICAgICAgICAgICBibG9jay0+Y2xlYXJOZXdseUFsbG9jYXRlZCgpOworICAg
ICAgICB9KTsKIAogI2lmICFBU1NFUlRfRElTQUJMRUQKICAgICBmb3JFYWNoQmxvY2soCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRTcGFjZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZFNwYWNlLmgJKHJldmlzaW9uIDIwMzUy
NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZFNwYWNlLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTIyLDYgKzIyLDcgQEAKICNpZm5kZWYgTWFya2VkU3BhY2VfaAogI2RlZmluZSBN
YXJrZWRTcGFjZV9oCiAKKyNpbmNsdWRlICJJdGVyYXRpb25TdGF0dXMuaCIKICNpbmNsdWRlICJN
YXJrZWRBbGxvY2F0b3IuaCIKICNpbmNsdWRlICJNYXJrZWRCbG9jay5oIgogI2luY2x1ZGUgIk1h
cmtlZEJsb2NrU2V0LmgiCkBAIC02MywxMSArNjQsMTQgQEAgcHVibGljOgogCiAgICAgTWFya2Vk
QWxsb2NhdG9yJiBhbGxvY2F0b3JGb3Ioc2l6ZV90KTsKICAgICBNYXJrZWRBbGxvY2F0b3ImIGRl
c3RydWN0b3JBbGxvY2F0b3JGb3Ioc2l6ZV90KTsKKyAgICBNYXJrZWRBbGxvY2F0b3ImIGF1eGls
aWFyeUFsbG9jYXRvckZvcihzaXplX3QpOwogICAgIHZvaWQqIGFsbG9jYXRlV2l0aERlc3RydWN0
b3Ioc2l6ZV90KTsKICAgICB2b2lkKiBhbGxvY2F0ZVdpdGhvdXREZXN0cnVjdG9yKHNpemVfdCk7
CisgICAgdm9pZCogYWxsb2NhdGVBdXhpbGlhcnkoc2l6ZV90KTsKIAogICAgIFN1YnNwYWNlJiBz
dWJzcGFjZUZvck9iamVjdHNXaXRoRGVzdHJ1Y3RvcigpIHsgcmV0dXJuIG1fZGVzdHJ1Y3RvclNw
YWNlOyB9CiAgICAgU3Vic3BhY2UmIHN1YnNwYWNlRm9yT2JqZWN0c1dpdGhvdXREZXN0cnVjdG9y
KCkgeyByZXR1cm4gbV9ub3JtYWxTcGFjZTsgfQorICAgIFN1YnNwYWNlJiBzdWJzcGFjZUZvckF1
eGlsaWFyeURhdGEoKSB7IHJldHVybiBtX2F1eGlsaWFyeVNwYWNlOyB9CiAKICAgICB2b2lkIHJl
c2V0QWxsb2NhdG9ycygpOwogCkBAIC0xMTQsOSArMTE4LDEyIEBAIHByaXZhdGU6CiAgICAgZnJp
ZW5kIGNsYXNzIEpJVDsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+IHZvaWQgZm9y
RWFjaEFsbG9jYXRvcihjb25zdCBGdW5jdG9yJik7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVu
Y3Rvcj4gdm9pZCBmb3JFYWNoU3Vic3BhY2UoY29uc3QgRnVuY3RvciYpOworICAgIE1hcmtlZEFs
bG9jYXRvciYgYWxsb2NhdG9yRm9yKFN1YnNwYWNlJiwgc2l6ZV90KTsKIAogICAgIFN1YnNwYWNl
IG1fZGVzdHJ1Y3RvclNwYWNlOwogICAgIFN1YnNwYWNlIG1fbm9ybWFsU3BhY2U7CisgICAgU3Vi
c3BhY2UgbV9hdXhpbGlhcnlTcGFjZTsKIAogICAgIEhlYXAqIG1faGVhcDsKICAgICBzaXplX3Qg
bV9jYXBhY2l0eTsKQEAgLTE0NywyMiArMTU0LDE3IEBAIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0
b3I+IGlubGluZSB2b2lkIE0KIAogaW5saW5lIE1hcmtlZEFsbG9jYXRvciYgTWFya2VkU3BhY2U6
OmFsbG9jYXRvckZvcihzaXplX3QgYnl0ZXMpCiB7Ci0gICAgQVNTRVJUKGJ5dGVzKTsKLSAgICBp
ZiAoYnl0ZXMgPD0gcHJlY2lzZUN1dG9mZikKLSAgICAgICAgcmV0dXJuIG1fbm9ybWFsU3BhY2Uu
cHJlY2lzZUFsbG9jYXRvcnNbKGJ5dGVzIC0gMSkgLyBwcmVjaXNlU3RlcF07Ci0gICAgaWYgKGJ5
dGVzIDw9IGltcHJlY2lzZUN1dG9mZikKLSAgICAgICAgcmV0dXJuIG1fbm9ybWFsU3BhY2UuaW1w
cmVjaXNlQWxsb2NhdG9yc1soYnl0ZXMgLSAxKSAvIGltcHJlY2lzZVN0ZXBdOwotICAgIHJldHVy
biBtX25vcm1hbFNwYWNlLmxhcmdlQWxsb2NhdG9yOworICAgIHJldHVybiBhbGxvY2F0b3JGb3Io
bV9ub3JtYWxTcGFjZSwgYnl0ZXMpOwogfQogCiBpbmxpbmUgTWFya2VkQWxsb2NhdG9yJiBNYXJr
ZWRTcGFjZTo6ZGVzdHJ1Y3RvckFsbG9jYXRvckZvcihzaXplX3QgYnl0ZXMpCiB7Ci0gICAgQVNT
RVJUKGJ5dGVzKTsKLSAgICBpZiAoYnl0ZXMgPD0gcHJlY2lzZUN1dG9mZikKLSAgICAgICAgcmV0
dXJuIG1fZGVzdHJ1Y3RvclNwYWNlLnByZWNpc2VBbGxvY2F0b3JzWyhieXRlcyAtIDEpIC8gcHJl
Y2lzZVN0ZXBdOwotICAgIGlmIChieXRlcyA8PSBpbXByZWNpc2VDdXRvZmYpCi0gICAgICAgIHJl
dHVybiBtX2Rlc3RydWN0b3JTcGFjZS5pbXByZWNpc2VBbGxvY2F0b3JzWyhieXRlcyAtIDEpIC8g
aW1wcmVjaXNlU3RlcF07Ci0gICAgcmV0dXJuIG1fZGVzdHJ1Y3RvclNwYWNlLmxhcmdlQWxsb2Nh
dG9yOworICAgIHJldHVybiBhbGxvY2F0b3JGb3IobV9kZXN0cnVjdG9yU3BhY2UsIGJ5dGVzKTsK
K30KKworaW5saW5lIE1hcmtlZEFsbG9jYXRvciYgTWFya2VkU3BhY2U6OmF1eGlsaWFyeUFsbG9j
YXRvckZvcihzaXplX3QgYnl0ZXMpCit7CisgICAgcmV0dXJuIGFsbG9jYXRvckZvcihtX2F1eGls
aWFyeVNwYWNlLCBieXRlcyk7CiB9CiAKIGlubGluZSB2b2lkKiBNYXJrZWRTcGFjZTo6YWxsb2Nh
dGVXaXRob3V0RGVzdHJ1Y3RvcihzaXplX3QgYnl0ZXMpCkBAIC0xNzUsMTkgKzE3NywyMiBAQCBp
bmxpbmUgdm9pZCogTWFya2VkU3BhY2U6OmFsbG9jYXRlV2l0aERlCiAgICAgcmV0dXJuIGRlc3Ry
dWN0b3JBbGxvY2F0b3JGb3IoYnl0ZXMpLmFsbG9jYXRlKGJ5dGVzKTsKIH0KIAoraW5saW5lIHZv
aWQqIE1hcmtlZFNwYWNlOjphbGxvY2F0ZUF1eGlsaWFyeShzaXplX3QgYnl0ZXMpCit7CisgICAg
cmV0dXJuIGF1eGlsaWFyeUFsbG9jYXRvckZvcihieXRlcykuYWxsb2NhdGUoYnl0ZXMpOworfQor
CiB0ZW1wbGF0ZSA8dHlwZW5hbWUgRnVuY3Rvcj4gaW5saW5lIHZvaWQgTWFya2VkU3BhY2U6OmZv
ckVhY2hCbG9jayhjb25zdCBGdW5jdG9yJiBmdW5jdG9yKQogewotICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgcHJlY2lzZUNvdW50OyArK2kpCi0gICAgICAgIG1fbm9ybWFsU3BhY2UucHJlY2lz
ZUFsbG9jYXRvcnNbaV0uZm9yRWFjaEJsb2NrKGZ1bmN0b3IpOwotICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgaW1wcmVjaXNlQ291bnQ7ICsraSkKLSAgICAgICAgbV9ub3JtYWxTcGFjZS5pbXBy
ZWNpc2VBbGxvY2F0b3JzW2ldLmZvckVhY2hCbG9jayhmdW5jdG9yKTsKLSAgICBtX25vcm1hbFNw
YWNlLmxhcmdlQWxsb2NhdG9yLmZvckVhY2hCbG9jayhmdW5jdG9yKTsKLQotICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgcHJlY2lzZUNvdW50OyArK2kpCi0gICAgICAgIG1fZGVzdHJ1Y3RvclNw
YWNlLnByZWNpc2VBbGxvY2F0b3JzW2ldLmZvckVhY2hCbG9jayhmdW5jdG9yKTsKLSAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IGltcHJlY2lzZUNvdW50OyArK2kpCi0gICAgICAgIG1fZGVzdHJ1
Y3RvclNwYWNlLmltcHJlY2lzZUFsbG9jYXRvcnNbaV0uZm9yRWFjaEJsb2NrKGZ1bmN0b3IpOwot
ICAgIG1fZGVzdHJ1Y3RvclNwYWNlLmxhcmdlQWxsb2NhdG9yLmZvckVhY2hCbG9jayhmdW5jdG9y
KTsKKyAgICBmb3JFYWNoU3Vic3BhY2UoCisgICAgICAgIFsmXSAoU3Vic3BhY2UmIHN1YnNwYWNl
LCBBbGxvY2F0b3JBdHRyaWJ1dGVzKSAtPiBJdGVyYXRpb25TdGF0dXMgeworICAgICAgICAgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBwcmVjaXNlQ291bnQ7ICsraSkKKyAgICAgICAgICAgICAg
ICBzdWJzcGFjZS5wcmVjaXNlQWxsb2NhdG9yc1tpXS5mb3JFYWNoQmxvY2soZnVuY3Rvcik7Cisg
ICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGltcHJlY2lzZUNvdW50OyArK2kpCisg
ICAgICAgICAgICAgICAgc3Vic3BhY2UuaW1wcmVjaXNlQWxsb2NhdG9yc1tpXS5mb3JFYWNoQmxv
Y2soZnVuY3Rvcik7CisgICAgICAgICAgICBzdWJzcGFjZS5sYXJnZUFsbG9jYXRvci5mb3JFYWNo
QmxvY2soZnVuY3Rvcik7CisgICAgICAgICAgICByZXR1cm4gSXRlcmF0aW9uU3RhdHVzOjpDb250
aW51ZTsKKyAgICAgICAgfSk7CiB9CiAKIGlubGluZSB2b2lkIE1hcmtlZFNwYWNlOjpkaWRBZGRC
bG9jayhNYXJrZWRCbG9jayogYmxvY2spCkBAIC0yMjYsNiArMjMxLDM2IEBAIGlubGluZSBzaXpl
X3QgTWFya2VkU3BhY2U6OmNhcGFjaXR5KCkKICAgICByZXR1cm4gbV9jYXBhY2l0eTsKIH0KIAor
dGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KK2lubGluZSB2b2lkIE1hcmtlZFNwYWNlOjpmb3JF
YWNoU3Vic3BhY2UoY29uc3QgRnVuY3RvciYgZnVuYykKK3sKKyAgICBBbGxvY2F0b3JBdHRyaWJ1
dGVzIGF0dHJpYnV0ZXM7CisgICAgCisgICAgYXR0cmlidXRlcy5kZXN0cnVjdGlvbiA9IE5lZWRz
RGVzdHJ1Y3Rpb247CisgICAgYXR0cmlidXRlcy5jZWxsS2luZCA9IEhlYXBDZWxsOjpKU0NlbGw7
CisgICAgaWYgKGZ1bmMobV9kZXN0cnVjdG9yU3BhY2UsIGF0dHJpYnV0ZXMpID09IEl0ZXJhdGlv
blN0YXR1czo6RG9uZSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIGF0dHJpYnV0ZXMuZGVz
dHJ1Y3Rpb24gPSBEb2VzTm90TmVlZERlc3RydWN0aW9uOworICAgIGF0dHJpYnV0ZXMuY2VsbEtp
bmQgPSBIZWFwQ2VsbDo6SlNDZWxsOworICAgIGlmIChmdW5jKG1fbm9ybWFsU3BhY2UsIGF0dHJp
YnV0ZXMpID09IEl0ZXJhdGlvblN0YXR1czo6RG9uZSkKKyAgICAgICAgcmV0dXJuOworCisgICAg
YXR0cmlidXRlcy5kZXN0cnVjdGlvbiA9IERvZXNOb3ROZWVkRGVzdHJ1Y3Rpb247CisgICAgYXR0
cmlidXRlcy5jZWxsS2luZCA9IEhlYXBDZWxsOjpBdXhpbGlhcnk7CisgICAgZnVuYyhtX2F1eGls
aWFyeVNwYWNlLCBhdHRyaWJ1dGVzKTsKK30KKworaW5saW5lIE1hcmtlZEFsbG9jYXRvciYgTWFy
a2VkU3BhY2U6OmFsbG9jYXRvckZvcihTdWJzcGFjZSYgc3BhY2UsIHNpemVfdCBieXRlcykKK3sK
KyAgICBBU1NFUlQoYnl0ZXMpOworICAgIGlmIChieXRlcyA8PSBwcmVjaXNlQ3V0b2ZmKQorICAg
ICAgICByZXR1cm4gc3BhY2UucHJlY2lzZUFsbG9jYXRvcnNbKGJ5dGVzIC0gMSkgLyBwcmVjaXNl
U3RlcF07CisgICAgaWYgKGJ5dGVzIDw9IGltcHJlY2lzZUN1dG9mZikKKyAgICAgICAgcmV0dXJu
IHNwYWNlLmltcHJlY2lzZUFsbG9jYXRvcnNbKGJ5dGVzIC0gMSkgLyBpbXByZWNpc2VTdGVwXTsK
KyAgICByZXR1cm4gc3BhY2UubGFyZ2VBbGxvY2F0b3I7Cit9CisKIH0gLy8gbmFtZXNwYWNlIEpT
QwogCiAjZW5kaWYgLy8gTWFya2VkU3BhY2VfaAo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>284288</attachid>
            <date>2016-07-21 17:21:07 -0700</date>
            <delta_ts>2016-07-22 14:36:44 -0700</delta_ts>
            <desc>it seems to work!</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>46164</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjAzNTM1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEwNCBA
QAoreWUyMDE2LTA3LTIxICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAg
ICAgVGVhY2ggTWFya2VkU3BhY2UgaG93IHRvIGFsbG9jYXRlIGF1eGlsaWFyeSBzdG9yYWdlCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjAwNTMKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKyAgICAgICAgCisgICAgICAgIFBy
ZXZpb3VzbHksIHdlIGhhZCB0d28ga2luZHMgb2Ygc3Vic3BhY2VzIGluIE1hcmtlZFNwYWNlOiBk
ZXN0cnVjdG9yIGFuZCBub24tZGVzdHJ1Y3Rvci4gVGhpcworICAgICAgICB3YXMgZGVzY3JpYmVk
IHVzaW5nICJib29sIG5lZWRzRGVzdHJ1Y3Rpb24iIHRoYXQgd291bGQgZ2V0IHBhc3NlZCBhcm91
bmQuIFdlJ2QgaXRlcmF0ZSBvdmVyCisgICAgICAgIHRoZXNlIHNwYWNlcyB1c2luZyBkdXBsaWNh
dGVkIGNvZGUgLSBvbmUgbG9vcCBmb3IgZGVzdHJ1Y3RvcnMgYW5kIG9uZSBmb3Igbm9uLWRlc3Ry
dWN0b3JzLCBvcgorICAgICAgICBhIHNpbmdsZSBsb29wIHRoYXQgZG9lcyBvbmUgdGhpbmcgZm9y
IGRlc3RydWN0b3JzIGFuZCBvbmUgZm9yIG5vbi1kZXN0cnVjdG9ycy4KKyAgICAgICAgCisgICAg
ICAgIEJ1dCBub3cgd2Ugd2FudCBhIHRoaXJkIHN1YnNwYWNlOiBub24tZGVzdHJ1Y3RvciBub24t
SlNDZWxsLCBha2EgQXV4aWxpYXJ5LgorICAgICAgICAKKyAgICAgICAgU28sIHRoaXMgY2hhbmdl
cyBhbGwgb2YgdGhlIHJlZmxlY3Rpb24gYW5kIGl0ZXJhdGlvbiBvdmVyIHN1YnNwYWNlcyB0byB1
c2UgZnVuY3RvcnMsIHNvIHRoYXQKKyAgICAgICAgdGhlIGxvb3BpbmcgaXMgd3JpdHRlbiBvbmNl
IGFuZCByZXVzZWQuIE1vc3QgcGxhY2VzIGRvbid0IGV2ZW4gaGF2ZSB0byBrbm93IHRoYXQgdGhl
cmUgaXMgYQorICAgICAgICB0aGlyZCBzdWJzcGFjZTsgdGhleSBqdXN0IGtub3cgdGhhdCB0aGV5
IG11c3QgZG8gdGhpbmdzIGZvciBlYWNoIHN1YnNwYWNlLCBmb3IgZWFjaAorICAgICAgICBhbGxv
Y2F0b3IsIG9yIGZvciBlYWNoIGJsb2NrIC0gYW5kIHRoZSBmdW5jdG9yIG1hZ2ljIGhhbmRsZXMg
aXQgZm9yIHlvdS4KKyAgICAgICAgCisgICAgICAgIFRvIG1ha2UgdGhpcyBzb21ld2hhdCBuaWNl
LCB0aGlzIGNoYW5nZSBhbHNvIGZpeGVzIGhvdyB3ZSBkZXNjcmliZSBzdWJzcGFjZXMuIEludGVh
ZCBvZiBhCisgICAgICAgIGJvb2wsIHdlIG5vdyBoYXZlIEFsbG9jYXRvckF0dHJpYnV0ZXMsIHdo
aWNoIGlzIGEgc3RydWN0LiBJZiB3ZSBldmVyIGFkZCBtb3JlIHN1YnNwYWNlcywgd2UKKyAgICAg
ICAgY2FuIGFkZCBmaWVsZHMgdG8gQWxsb2NhdG9yQXR0cmlidXRlcyB0byBkZXNjcmliZSBob3cg
dGhvc2Ugc3Vic3BhY2VzIGRpZmZlci4gRm9yIG5vdyBpdCBqdXN0CisgICAgICAgIGNvbnRhaW5z
IHR3byBwcm9wZXJ0aWVzOiBhIERlc3RydWN0aW9uTW9kZSBhbmQgYSBIZWFwQ2VsbDo6S2luZC4g
VGhlIERlc2N0cnVjdGlvbk1vZGUKKyAgICAgICAgcmVwbGFjZXMgYm9vbCBuZWVkc0Rlc3RydWN0
aW9uLiBJIGRlbGliZXJhdGVseSB1c2VkIGEgbm9uLWNsYXNzIGVudW0gdG8gYXZvaWQgdGF1dG9s
b2dpZXMuCisgICAgICAgIERlc3RydWN0aW9uTW9kZSBoYXMgdHdvIG1lbWJlcnM6IE5lZWRzRGVz
dHJ1Y3Rpb24gYW5kIERvZXNOb3ROZWVkRGVzdHJ1Y3Rpb24uIEkgYWxtb3N0IHdlbnQKKyAgICAg
ICAgd2l0aCBEZXN0cnVjdGlvbk1vZGU6Ok5lZWRlZCBhbmQgRGVzdHJ1Y3Rpb25Nb2RlOjpOb3RO
ZWVkZWQsIGJ1dCBJIGZlbHQgbGlrZSB0aGF0IGludm9sdmVzCisgICAgICAgIG1vcmUgdHlwaW5n
IGFuZCBkb2Vzbid0IGFjdHVhbGx5IGF2b2lkIGFueSBraW5kIG9mIG5hbWVzcGFjZSBpc3N1ZXMu
CisgICAgICAgIAorICAgICAgICBUaGlzIGlzIGludGVuZGVkIHRvIGhhdmUgbm8gYmVoYXZpb3Ig
Y2hhbmdlIG90aGVyIHRoYW4gdGhlIGFkZGl0aW9uIG9mIGEgdG90YWxseSB1bnVzZWQKKyAgICAg
ICAgc3BhY2UsIHdoaWNoIHNob3VsZCBhbHdheXMgYmUgZW1wdHkuIFNvIGhvcGVmdWxseSBpdCBk
b2Vzbid0IGNvc3QgYW55dGhpbmcuCisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAg
ICAgKiBKYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAq
IGhlYXAvQWxsb2NhdG9yQXR0cmlidXRlcy5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpBbGxv
Y2F0b3JBdHRyaWJ1dGVzOjpkdW1wKToKKyAgICAgICAgKiBoZWFwL0FsbG9jYXRvckF0dHJpYnV0
ZXMuaDogQWRkZWQuCisgICAgICAgIChKU0M6OkFsbG9jYXRvckF0dHJpYnV0ZXM6OkFsbG9jYXRv
ckF0dHJpYnV0ZXMpOgorICAgICAgICAqIGhlYXAvRGVzdHJ1Y3Rpb25Nb2RlLmNwcDogQWRkZWQu
CisgICAgICAgIChXVEY6OnByaW50SW50ZXJuYWwpOgorICAgICAgICAqIGhlYXAvRGVzdHJ1Y3Rp
b25Nb2RlLmg6IEFkZGVkLgorICAgICAgICAqIGhlYXAvSGVhcC5oOgorICAgICAgICAqIGhlYXAv
TWFya2VkQWxsb2NhdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6TWFya2VkQWxsb2NhdG9yOjphbGxv
Y2F0ZUJsb2NrKToKKyAgICAgICAgKEpTQzo6TWFya2VkQWxsb2NhdG9yOjphZGRCbG9jayk6Cisg
ICAgICAgICogaGVhcC9NYXJrZWRBbGxvY2F0b3IuaDoKKyAgICAgICAgKEpTQzo6TWFya2VkQWxs
b2NhdG9yOjpjZWxsU2l6ZSk6CisgICAgICAgIChKU0M6Ok1hcmtlZEFsbG9jYXRvcjo6YXR0cmli
dXRlcyk6CisgICAgICAgIChKU0M6Ok1hcmtlZEFsbG9jYXRvcjo6bmVlZHNEZXN0cnVjdGlvbik6
CisgICAgICAgIChKU0M6Ok1hcmtlZEFsbG9jYXRvcjo6ZGVzdHJ1Y3Rpb24pOgorICAgICAgICAo
SlNDOjpNYXJrZWRBbGxvY2F0b3I6OmNlbGxLaW5kKToKKyAgICAgICAgKEpTQzo6TWFya2VkQWxs
b2NhdG9yOjpoZWFwKToKKyAgICAgICAgKEpTQzo6TWFya2VkQWxsb2NhdG9yOjp0YWtlTGFzdEFj
dGl2ZUJsb2NrKToKKyAgICAgICAgKEpTQzo6TWFya2VkQWxsb2NhdG9yOjpNYXJrZWRBbGxvY2F0
b3IpOgorICAgICAgICAoSlNDOjpNYXJrZWRBbGxvY2F0b3I6OmluaXQpOgorICAgICAgICAoSlND
OjpNYXJrZWRBbGxvY2F0b3I6OmFsbG9jYXRlKToKKyAgICAgICAgKiBoZWFwL01hcmtlZEJsb2Nr
LmNwcDoKKyAgICAgICAgKEpTQzo6TWFya2VkQmxvY2s6OmNyZWF0ZSk6CisgICAgICAgIChKU0M6
Ok1hcmtlZEJsb2NrOjpkZXN0cm95KToKKyAgICAgICAgKEpTQzo6TWFya2VkQmxvY2s6Ok1hcmtl
ZEJsb2NrKToKKyAgICAgICAgKEpTQzo6TWFya2VkQmxvY2s6OmNhbGxEZXN0cnVjdG9yKToKKyAg
ICAgICAgKEpTQzo6TWFya2VkQmxvY2s6OnN3ZWVwKToKKyAgICAgICAgKEpTQzo6TWFya2VkQmxv
Y2s6OnN0b3BBbGxvY2F0aW5nKToKKyAgICAgICAgKEpTQzo6TWFya2VkQmxvY2s6OmRpZFJldGly
ZUJsb2NrKToKKyAgICAgICAgKiBoZWFwL01hcmtlZEJsb2NrLmg6CisgICAgICAgIChKU0M6Ok1h
cmtlZEJsb2NrOjpjZWxsU2l6ZSk6CisgICAgICAgIChKU0M6Ok1hcmtlZEJsb2NrOjphdHRyaWJ1
dGVzKToKKyAgICAgICAgKEpTQzo6TWFya2VkQmxvY2s6Om5lZWRzRGVzdHJ1Y3Rpb24pOgorICAg
ICAgICAoSlNDOjpNYXJrZWRCbG9jazo6ZGVzdHJ1Y3Rpb24pOgorICAgICAgICAoSlNDOjpNYXJr
ZWRCbG9jazo6Y2VsbEtpbmQpOgorICAgICAgICAoSlNDOjpNYXJrZWRCbG9jazo6c2l6ZSk6Cisg
ICAgICAgIChKU0M6Ok1hcmtlZEJsb2NrOjpmb3JFYWNoQ2VsbCk6CisgICAgICAgIChKU0M6Ok1h
cmtlZEJsb2NrOjpmb3JFYWNoTGl2ZUNlbGwpOgorICAgICAgICAoSlNDOjpNYXJrZWRCbG9jazo6
Zm9yRWFjaERlYWRDZWxsKToKKyAgICAgICAgKiBoZWFwL01hcmtlZFNwYWNlLmNwcDoKKyAgICAg
ICAgKEpTQzo6TWFya2VkU3BhY2U6Ok1hcmtlZFNwYWNlKToKKyAgICAgICAgKEpTQzo6TWFya2Vk
U3BhY2U6On5NYXJrZWRTcGFjZSk6CisgICAgICAgIChKU0M6Ok1hcmtlZFNwYWNlOjpsYXN0Q2hh
bmNlVG9GaW5hbGl6ZSk6CisgICAgICAgIChKU0M6Ok1hcmtlZFNwYWNlOjpyZXNldEFsbG9jYXRv
cnMpOgorICAgICAgICAoSlNDOjpNYXJrZWRTcGFjZTo6Zm9yRWFjaEFsbG9jYXRvcik6CisgICAg
ICAgIChKU0M6Ok1hcmtlZFNwYWNlOjpzdG9wQWxsb2NhdGluZyk6CisgICAgICAgIChKU0M6Ok1h
cmtlZFNwYWNlOjpyZXN1bWVBbGxvY2F0aW5nKToKKyAgICAgICAgKEpTQzo6TWFya2VkU3BhY2U6
OmlzUGFnZWRPdXQpOgorICAgICAgICAoSlNDOjpNYXJrZWRTcGFjZTo6ZnJlZUJsb2NrKToKKyAg
ICAgICAgKEpTQzo6TWFya2VkU3BhY2U6OnNocmluayk6CisgICAgICAgIChKU0M6Ok1hcmtlZFNw
YWNlOjpjbGVhck5ld2x5QWxsb2NhdGVkKToKKyAgICAgICAgKEpTQzo6Y2xlYXJOZXdseUFsbG9j
YXRlZEluQmxvY2spOiBEZWxldGVkLgorICAgICAgICAqIGhlYXAvTWFya2VkU3BhY2UuaDoKKyAg
ICAgICAgKEpTQzo6TWFya2VkU3BhY2U6OnN1YnNwYWNlRm9yT2JqZWN0c1dpdGhEZXN0cnVjdG9y
KToKKyAgICAgICAgKEpTQzo6TWFya2VkU3BhY2U6OnN1YnNwYWNlRm9yT2JqZWN0c1dpdGhvdXRE
ZXN0cnVjdG9yKToKKyAgICAgICAgKEpTQzo6TWFya2VkU3BhY2U6OnN1YnNwYWNlRm9yQXV4aWxp
YXJ5RGF0YSk6CisgICAgICAgIChKU0M6Ok1hcmtlZFNwYWNlOjphbGxvY2F0b3JGb3IpOgorICAg
ICAgICAoSlNDOjpNYXJrZWRTcGFjZTo6ZGVzdHJ1Y3RvckFsbG9jYXRvckZvcik6CisgICAgICAg
IChKU0M6Ok1hcmtlZFNwYWNlOjphdXhpbGlhcnlBbGxvY2F0b3JGb3IpOgorICAgICAgICAoSlND
OjpNYXJrZWRTcGFjZTo6YWxsb2NhdGVXaXRob3V0RGVzdHJ1Y3Rvcik6CisgICAgICAgIChKU0M6
Ok1hcmtlZFNwYWNlOjphbGxvY2F0ZVdpdGhEZXN0cnVjdG9yKToKKyAgICAgICAgKEpTQzo6TWFy
a2VkU3BhY2U6OmFsbG9jYXRlQXV4aWxpYXJ5KToKKyAgICAgICAgKEpTQzo6TWFya2VkU3BhY2U6
OmZvckVhY2hCbG9jayk6CisgICAgICAgIChKU0M6Ok1hcmtlZFNwYWNlOjpkaWRBZGRCbG9jayk6
CisgICAgICAgIChKU0M6Ok1hcmtlZFNwYWNlOjpjYXBhY2l0eSk6CisgICAgICAgIChKU0M6Ok1h
cmtlZFNwYWNlOjpmb3JFYWNoU3Vic3BhY2UpOgorCiAyMDE2LTA3LTIxICBDc2FiYSBPc3p0cm9n
b27DoWMgIDxvc3N5QHdlYmtpdC5vcmc+CiAKICAgICAgICAgQ2xhcmlmeSB0ZXN0aW5nIG1vZGUg
bmFtZXMgaW4gcnVuLWpzYy1zdHJlc3MtdGVzdHMKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01h
a2VMaXN0cy50eHQJKHJldmlzaW9uIDIwMzUyNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9D
TWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpAQCAtNDMzLDEyICs0MzMsMTQgQEAgc2V0KEph
dmFTY3JpcHRDb3JlX1NPVVJDRVMKICAgICBmdGwvRlRMVGh1bmtzLmNwcAogICAgIGZ0bC9GVExW
YWx1ZVJhbmdlLmNwcAogCisgICAgaGVhcC9BbGxvY2F0b3JBdHRyaWJ1dGVzLmNwcAogICAgIGhl
YXAvQ29kZUJsb2NrU2V0LmNwcAogICAgIGhlYXAvQ29uc2VydmF0aXZlUm9vdHMuY3BwCiAgICAg
aGVhcC9Db3BpZWRCbG9jay5jcHAKICAgICBoZWFwL0NvcGllZFNwYWNlLmNwcAogICAgIGhlYXAv
Q29weVZpc2l0b3IuY3BwCiAgICAgaGVhcC9EZWZlckdDLmNwcAorICAgIGhlYXAvRGVzdHJ1Y3Rp
b25Nb2RlLmNwcAogICAgIGhlYXAvRWRlbkdDQWN0aXZpdHlDYWxsYmFjay5jcHAKICAgICBoZWFw
L0Z1bGxHQ0FjdGl2aXR5Q2FsbGJhY2suY3BwCiAgICAgaGVhcC9HQ0FjdGl2aXR5Q2FsbGJhY2su
Y3BwCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2
YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMjAzNTI1KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTUzNyw2ICs1MzcsMTAgQEAKIAkJMEY5NDk1ODgx
QzU3RjQ3NTAwNDEzQTQ4IC8qIEIzU3RhY2tTbG90LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjk0OTU4NjFDNTdGNDc1MDA0MTNBNDggLyogQjNTdGFj
a1Nsb3QuaCAqLzsgfTsKIAkJMEY5NTJBQkMxQjQ4N0E3NzAwQzM2N0M1IC8qIFRyYWNrZWRSZWZl
cmVuY2VzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGOTUyQUJBMUI0ODdBNzcwMEMzNjdDNSAvKiBUcmFja2VkUmVmZXJlbmNlcy5jcHAgKi87IH07
CiAJCTBGOTUyQUJEMUI0ODdBNzcwMEMzNjdDNSAvKiBUcmFja2VkUmVmZXJlbmNlcy5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY5NTJBQkIxQjQ4N0E3
NzAwQzM2N0M1IC8qIFRyYWNrZWRSZWZlcmVuY2VzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEY5NjMwMzkxRDQxOTJDNjAwNTYwOUQ5IC8qIEFs
bG9jYXRvckF0dHJpYnV0ZXMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEY5NjMwMzUxRDQxOTJDMzAwNTYwOUQ5IC8qIEFsbG9jYXRvckF0dHJpYnV0
ZXMuY3BwICovOyB9OworCQkwRjk2MzAzQTFENDE5MkM4MDA1NjA5RDkgLyogQWxsb2NhdG9yQXR0
cmlidXRlcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEY5NjMwMzYxRDQxOTJDMzAwNTYwOUQ5IC8qIEFsbG9jYXRvckF0dHJpYnV0ZXMuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRjk2MzAzQjFENDE5
MkNCMDA1NjA5RDkgLyogRGVzdHJ1Y3Rpb25Nb2RlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGOTYzMDM3MUQ0MTkyQzMwMDU2MDlEOSAvKiBEZXN0
cnVjdGlvbk1vZGUuY3BwICovOyB9OworCQkwRjk2MzAzQzFENDE5MkNEMDA1NjA5RDkgLyogRGVz
dHJ1Y3Rpb25Nb2RlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRjk2MzAzODFENDE5MkMzMDA1NjA5RDkgLyogRGVzdHJ1Y3Rpb25Nb2RlLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY5NjNCMzgxM0ZD
NkZFOTAwMDJEOUIyIC8qIFZhbHVlUHJvZmlsZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEY5NjNCMzYxM0ZDNkZERTAwMDJEOUIyIC8qIFZhbHVlUHJv
ZmlsZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJ
CTBGOTZFQkIzMTY2NzZFRjYwMDhCQURFMyAvKiBDb2RlQmxvY2tXaXRoSklUVHlwZS5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY5NkVCQjExNjY3NkVG
NDAwOEJBREUzIC8qIENvZGVCbG9ja1dpdGhKSVRUeXBlLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY5NzQ5NzExNjg3QURFNDAwQTRGRjZBIC8q
IEpTQ2VsbElubGluZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDBGOTc0OTZGMTY4N0FERTIwMEE0RkY2QSAvKiBKU0NlbGxJbmxpbmVzLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTI3MjMsNiArMjcy
NywxMCBAQAogCQkwRjk0OTU4NjFDNTdGNDc1MDA0MTNBNDggLyogQjNTdGFja1Nsb3QuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQjNTdGFja1Nsb3QuaDsgcGF0aCA9IGIzL0Iz
U3RhY2tTbG90Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGOTUyQUJBMUI0ODdB
NzcwMEMzNjdDNSAvKiBUcmFja2VkUmVmZXJlbmNlcy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBUcmFja2VkUmVmZXJlbmNlcy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTBGOTUyQUJCMUI0ODdBNzcwMEMzNjdDNSAvKiBUcmFja2VkUmVmZXJlbmNl
cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBUcmFja2VkUmVmZXJlbmNlcy5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjk2MzAzNTFENDE5MkMzMDA1NjA5RDkg
LyogQWxsb2NhdG9yQXR0cmlidXRlcy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBBbGxvY2F0b3JBdHRyaWJ1dGVzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJMEY5NjMwMzYxRDQxOTJDMzAwNTYwOUQ5IC8qIEFsbG9jYXRvckF0dHJpYnV0ZXMuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQWxsb2NhdG9yQXR0cmlidXRlcy5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjk2MzAzNzFENDE5MkMzMDA1NjA5RDkgLyog
RGVzdHJ1Y3Rpb25Nb2RlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IERlc3RydWN0aW9uTW9kZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGOTYz
MDM4MUQ0MTkyQzMwMDU2MDlEOSAvKiBEZXN0cnVjdGlvbk1vZGUuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gRGVzdHJ1Y3Rpb25Nb2RlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTBGOTYzQjM2MTNGQzZGREUwMDAyRDlCMiAvKiBWYWx1ZVByb2ZpbGUuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVmFsdWVQcm9maWxlLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTBGOTZFQkIxMTY2NzZFRjQwMDhCQURFMyAvKiBDb2RlQmxvY2tX
aXRoSklUVHlwZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDb2RlQmxvY2tX
aXRoSklUVHlwZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjk3NDk2RjE2ODdB
REUyMDBBNEZGNkEgLyogSlNDZWxsSW5saW5lcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBKU0NlbGxJbmxpbmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC01
MTU5LDYgKzUxNjcsOCBAQAogCQkxNDJFMzEyQTEzNEZGMEE2MDBBRkFEQjUgLyogaGVhcCAqLyA9
IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCisJCQkJMEY5NjMwMzUxRDQx
OTJDMzAwNTYwOUQ5IC8qIEFsbG9jYXRvckF0dHJpYnV0ZXMuY3BwICovLAorCQkJCTBGOTYzMDM2
MUQ0MTkyQzMwMDU2MDlEOSAvKiBBbGxvY2F0b3JBdHRyaWJ1dGVzLmggKi8sCiAJCQkJMEYxQzNE
RDkxQkJDRTA5RTAwRTUyM0U0IC8qIENlbGxTdGF0ZS5oICovLAogCQkJCTBGRDhBMzExMTdENDMy
NkMwMENBMkM0MCAvKiBDb2RlQmxvY2tTZXQuY3BwICovLAogCQkJCTBGRDhBMzEyMTdENDMyNkMw
MENBMkM0MCAvKiBDb2RlQmxvY2tTZXQuaCAqLywKQEAgLTUxNzksNiArNTE4OSw4IEBACiAJCQkJ
QzIxOEQxM0YxNjU1Q0ZENTAwNjJCQjgxIC8qIENvcHlXb3JrTGlzdC5oICovLAogCQkJCTJBN0E1
OEVFMTgwOEE0QzQwMDIwQkRGNyAvKiBEZWZlckdDLmNwcCAqLywKIAkJCQkwRjEzNkQ0QjE3NEFE
NjlCMDA3NUIzNTQgLyogRGVmZXJHQy5oICovLAorCQkJCTBGOTYzMDM3MUQ0MTkyQzMwMDU2MDlE
OSAvKiBEZXN0cnVjdGlvbk1vZGUuY3BwICovLAorCQkJCTBGOTYzMDM4MUQ0MTkyQzMwMDU2MDlE
OSAvKiBEZXN0cnVjdGlvbk1vZGUuaCAqLywKIAkJCQkyQTgzNjM4MzE4RDdEMEVFMDAwMEVCQ0Mg
LyogRWRlbkdDQWN0aXZpdHlDYWxsYmFjay5jcHAgKi8sCiAJCQkJMkE4MzYzODQxOEQ3RDBFRTAw
MDBFQkNDIC8qIEVkZW5HQ0FjdGl2aXR5Q2FsbGJhY2suaCAqLywKIAkJCQkyQTgzNjM4NzE4RDdE
MEZFMDAwMEVCQ0MgLyogRnVsbEdDQWN0aXZpdHlDYWxsYmFjay5jcHAgKi8sCkBAIC03MTAzLDYg
KzcxMTUsNyBAQAogCQkJCTBGRUM4NTFBMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0dlbmVyaWNGcmVx
dWVudGVkQmxvY2suaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRUM4NUMzMUJFMTY3QTAwMDgwRkY3
NCAvKiBCM0hlYXBSYW5nZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMjY3MThCQTUxQkU5OUY3ODAw
NTIwMTdCIC8qIEFpckl0ZXJhdGVkUmVnaXN0ZXJDb2FsZXNjaW5nLmggaW4gSGVhZGVycyAqLywK
KwkJCQkwRjk2MzAzQzFENDE5MkNEMDA1NjA5RDkgLyogRGVzdHJ1Y3Rpb25Nb2RlLmggaW4gSGVh
ZGVycyAqLywKIAkJCQkwRkVDODUxQjFCREFDREFDMDA4MEZGNzQgLyogQjNJbmRleE1hcC5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMEZFQzg1MUMxQkRBQ0RBQzAwODBGRjc0IC8qIEIzSW5kZXhTZXQu
aCBpbiBIZWFkZXJzICovLAogCQkJCTBGRUM4NUJBMUJFMTQ2MkYwMDgwRkY3NCAvKiBCM0luc2Vy
dGlvblNldC5oIGluIEhlYWRlcnMgKi8sCkBAIC03NTQwLDYgKzc1NTMsNyBAQAogCQkJCTBGMDMz
MkM4MThCNTQ2RUMwMDVGOTc5QSAvKiBGVExXZWlnaHRlZFRhcmdldC5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMEY2NjZFQzExODM1NjZGOTAwRDAxN0YxIC8qIEZ1bGxCeXRlY29kZUxpdmVuZXNzLmgg
aW4gSGVhZGVycyAqLywKIAkJCQkyQTgzNjM4QTE4RDdEMEZFMDAwMEVCQ0MgLyogRnVsbEdDQWN0
aXZpdHlDYWxsYmFjay5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEY5NjMwM0ExRDQxOTJDODAwNTYw
OUQ5IC8qIEFsbG9jYXRvckF0dHJpYnV0ZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDA0
MEUxNkY1Q0QwMEIzNDQ2MCAvKiBGdW5jdGlvbkNvbnN0cnVjdG9yLmggaW4gSGVhZGVycyAqLywK
IAkJCQkwRkYwRjFBMDE2QjcyQTFBMDA1REY5NUIgLyogRnVuY3Rpb25FeGVjdXRhYmxlRHVtcC5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJNTJCMzEwRkIxOTc0QUU2MTAwODA4NTdDIC8qIEZ1bmN0aW9u
SGFzRXhlY3V0ZWRDYWNoZS5oIGluIEhlYWRlcnMgKi8sCkBAIC05MjQ3LDYgKzkyNjEsNyBAQAog
CQkJCTBGOTE5RDBDMTU3RUUwOUYwMDRBNEU3RCAvKiBKU1N5bWJvbFRhYmxlT2JqZWN0LmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTcwRUNBNjA1MUFGREJFQTIwMDQ0OTczOSAvKiBKU1RlbXBsYXRl
UmVnaXN0cnlLZXkuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEYyQjY2RkExN0I2QjVBQjAwQTdB
RTNGIC8qIEpTVHlwZWRBcnJheUNvbnN0cnVjdG9ycy5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkw
Rjk2MzAzOTFENDE5MkM2MDA1NjA5RDkgLyogQWxsb2NhdG9yQXR0cmlidXRlcy5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQkwRjJCNjZGQzE3QjZCNUFCMDBBN0FFM0YgLyogSlNUeXBlZEFycmF5UHJv
dG90eXBlcy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjJCNjZGRTE3QjZCNUFCMDBBN0FFM0Yg
LyogSlNUeXBlZEFycmF5cy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1MzRDNDU3RTFCQzcyNTQ5
MDA3NDc2QTcgLyogSlNUeXBlZEFycmF5Vmlld0NvbnN0cnVjdG9yLmNwcCBpbiBTb3VyY2VzICov
LApAQCAtOTMyNiw2ICs5MzQxLDcgQEAKIAkJCQk5NjlBMDc5QTBFRDFEM0FFMDBGMUY2ODEgLyog
T3Bjb2RlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0MjgwODUwMTA3RUMwRDcwMDEzRTdCMiAv
KiBPcGVyYXRpb25zLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRTIyOEVFMTQzNkFCMkMwMDE5
NkM0OCAvKiBPcHRpb25zLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGOTYzMDNCMUQ0MTkyQ0Iw
MDU2MDlEOSAvKiBEZXN0cnVjdGlvbk1vZGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ4RjIx
QkMxMDdFQzU0RDAwNDJFQzJDIC8qIFBhcnNlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5MzA1
MkMzNDBGQjc5MjE5MDA0OEZEQzMgLyogUGFyc2VyQXJlbmEuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJMEZGOUNFNzMxQjlDRDZEMDAwNEVEQ0E2IC8qIFBvbHltb3JwaGljQWNjZXNzLmNwcCBpbiBT
b3VyY2VzICovLApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQWxsb2NhdG9yQXR0
cmlidXRlcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQWxs
b2NhdG9yQXR0cmlidXRlcy5jcHAJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvQWxsb2NhdG9yQXR0cmlidXRlcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSwzOSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQWxsb2NhdG9yQXR0cmlidXRlcy5oIgorCisj
aW5jbHVkZSA8d3RmL1ByaW50U3RyZWFtLmg+CisKK25hbWVzcGFjZSBKU0MgeworCit2b2lkIEFs
bG9jYXRvckF0dHJpYnV0ZXM6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBv
dXQucHJpbnQoInsiLCBkZXN0cnVjdGlvbiwgIiwgIiwgY2VsbEtpbmQsICJ9Iik7Cit9CisKK30g
Ly8gbmFtZXNwYWNlIEpTQworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9BbGxv
Y2F0b3JBdHRyaWJ1dGVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvQWxsb2NhdG9yQXR0cmlidXRlcy5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL0FsbG9jYXRvckF0dHJpYnV0ZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDQ0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisK
KyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiRGVzdHJ1Y3Rpb25Nb2RlLmgiCisjaW5jbHVkZSAi
SGVhcENlbGwuaCIKKyNpbmNsdWRlIDx3dGYvUHJpbnRTdHJlYW0uaD4KKworbmFtZXNwYWNlIEpT
QyB7CisKK3N0cnVjdCBBbGxvY2F0b3JBdHRyaWJ1dGVzIHsKKyAgICBBbGxvY2F0b3JBdHRyaWJ1
dGVzKCkgeyB9CisgICAgCisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Owor
ICAgIAorICAgIERlc3RydWN0aW9uTW9kZSBkZXN0cnVjdGlvbiB7IERvZXNOb3ROZWVkRGVzdHJ1
Y3Rpb24gfTsKKyAgICBIZWFwQ2VsbDo6S2luZCBjZWxsS2luZCB7IEhlYXBDZWxsOjpKU0NlbGwg
fTsKK307CisKK30gLy8gbmFtZXNwYWNlIEpTQworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9EZXN0cnVjdGlvbk1vZGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL0Rlc3RydWN0aW9uTW9kZS5jcHAJKG5vbmV4aXN0ZW50KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvRGVzdHJ1Y3Rpb25Nb2RlLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDUwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJEZXN0cnVjdGlvbk1vZGUuaCIK
KworI2luY2x1ZGUgPHd0Zi9QcmludFN0cmVhbS5oPgorCituYW1lc3BhY2UgV1RGIHsKKwordXNp
bmcgbmFtZXNwYWNlIEpTQzsKKwordm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiBvdXQs
IERlc3RydWN0aW9uTW9kZSBtb2RlKQoreworICAgIHN3aXRjaCAobW9kZSkgeworICAgIGNhc2Ug
TmVlZHNEZXN0cnVjdGlvbjoKKyAgICAgICAgb3V0LnByaW50KCJOZWVkc0Rlc3RydWN0aW9uIik7
CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIERvZXNOb3ROZWVkRGVzdHJ1Y3Rpb246CisgICAg
ICAgIG91dC5wcmludCgiRG9lc05vdE5lZWREZXN0cnVjdGlvbiIpOworICAgICAgICByZXR1cm47
CisgICAgfQorICAgIAorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK30g
Ly8gbmFtZXNwYWNlIFdURgorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9EZXN0
cnVjdGlvbk1vZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9E
ZXN0cnVjdGlvbk1vZGUuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9EZXN0cnVjdGlvbk1vZGUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQzIEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNwcmFnbWEgb25j
ZQorCituYW1lc3BhY2UgSlNDIHsKKworZW51bSBEZXN0cnVjdGlvbk1vZGUgOiBpbnQ4X3Qgewor
ICAgIERvZXNOb3ROZWVkRGVzdHJ1Y3Rpb24sCisgICAgTmVlZHNEZXN0cnVjdGlvbgorfTsKKwor
fSAvLyBuYW1lc3BhY2UgSlNDCisKK25hbWVzcGFjZSBXVEYgeworCitjbGFzcyBQcmludFN0cmVh
bTsKK3ZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYsIEpTQzo6RGVzdHJ1Y3Rpb25Nb2Rl
KTsKKworfSAvLyBuYW1lc3BhY2UgV1RGCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL0hlYXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFw
LmgJKHJldmlzaW9uIDIwMzUyNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAu
aAkod29ya2luZyBjb3B5KQpAQCAtMTQ1LDYgKzE0NSw3IEBAIHB1YmxpYzoKICAgICBib29sIGlz
QnVzeSgpOwogICAgIE1hcmtlZFNwYWNlOjpTdWJzcGFjZSYgc3Vic3BhY2VGb3JPYmplY3RXaXRo
b3V0RGVzdHJ1Y3RvcigpIHsgcmV0dXJuIG1fb2JqZWN0U3BhY2Uuc3Vic3BhY2VGb3JPYmplY3Rz
V2l0aG91dERlc3RydWN0b3IoKTsgfQogICAgIE1hcmtlZFNwYWNlOjpTdWJzcGFjZSYgc3Vic3Bh
Y2VGb3JPYmplY3REZXN0cnVjdG9yKCkgeyByZXR1cm4gbV9vYmplY3RTcGFjZS5zdWJzcGFjZUZv
ck9iamVjdHNXaXRoRGVzdHJ1Y3RvcigpOyB9CisgICAgTWFya2VkU3BhY2U6OlN1YnNwYWNlJiBz
dWJzcGFjZUZvckF1eGlsaWFyeURhdGEoKSB7IHJldHVybiBtX29iamVjdFNwYWNlLnN1YnNwYWNl
Rm9yQXV4aWxpYXJ5RGF0YSgpOyB9CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2xhc3NUeXBlPiBN
YXJrZWRTcGFjZTo6U3Vic3BhY2UmIHN1YnNwYWNlRm9yT2JqZWN0T2ZUeXBlKCk7CiAgICAgTWFy
a2VkQWxsb2NhdG9yJiBhbGxvY2F0b3JGb3JPYmplY3RXaXRob3V0RGVzdHJ1Y3RvcihzaXplX3Qg
Ynl0ZXMpIHsgcmV0dXJuIG1fb2JqZWN0U3BhY2UuYWxsb2NhdG9yRm9yKGJ5dGVzKTsgfQogICAg
IE1hcmtlZEFsbG9jYXRvciYgYWxsb2NhdG9yRm9yT2JqZWN0V2l0aERlc3RydWN0b3Ioc2l6ZV90
IGJ5dGVzKSB7IHJldHVybiBtX29iamVjdFNwYWNlLmRlc3RydWN0b3JBbGxvY2F0b3JGb3IoYnl0
ZXMpOyB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRBbGxvY2F0b3Iu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEFsbG9j
YXRvci5jcHAJKHJldmlzaW9uIDIwMzUyNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L01hcmtlZEFsbG9jYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE4NiwxMCArMTg2LDcgQEAg
TWFya2VkQmxvY2sqIE1hcmtlZEFsbG9jYXRvcjo6YWxsb2NhdGVCbAogCiAgICAgc2l6ZV90IGNl
bGxTaXplID0gbV9jZWxsU2l6ZSA/IG1fY2VsbFNpemUgOiBXVEY6OnJvdW5kVXBUb011bHRpcGxl
T2Y8TWFya2VkQmxvY2s6OmF0b21TaXplPihieXRlcyk7CiAKLSAgICAvLyBGSVhNRTogU3VwcG9y
dCBhbGxvY2F0aW5nIHN0b3JhZ2UgaW4gbWFya2VkIGJsb2Nrcy4gVGhpcyB3b3VsZCBtZWFuIHRo
YXQgYWxsb2NhdGVCbG9jaygpCi0gICAgLy8gdGFrZXMgYSBIZWFwQ2VsbDo6S2luZCwgb3Igc29t
ZXRoaW5nIGxpa2UgdGhhdC4KLSAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTU5NjU4Ci0gICAgcmV0dXJuIE1hcmtlZEJsb2NrOjpjcmVhdGUoKm1faGVhcCwg
dGhpcywgYmxvY2tTaXplLCBjZWxsU2l6ZSwgbV9uZWVkc0Rlc3RydWN0aW9uLCBIZWFwQ2VsbDo6
SlNDZWxsKTsKKyAgICByZXR1cm4gTWFya2VkQmxvY2s6OmNyZWF0ZSgqbV9oZWFwLCB0aGlzLCBi
bG9ja1NpemUsIGNlbGxTaXplLCBtX2F0dHJpYnV0ZXMpOwogfQogCiB2b2lkIE1hcmtlZEFsbG9j
YXRvcjo6YWRkQmxvY2soTWFya2VkQmxvY2sqIGJsb2NrKQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvTWFya2VkQWxsb2NhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvTWFya2VkQWxsb2NhdG9yLmgJKHJldmlzaW9uIDIwMzUyNSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEFsbG9jYXRvci5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiwgMjAxMyBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIsIDIwMTMsIDIw
MTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCkBAIC0yNiw2ICsyNiw3IEBACiAjaWZuZGVmIE1hcmtlZEFsbG9jYXRvcl9oCiAj
ZGVmaW5lIE1hcmtlZEFsbG9jYXRvcl9oCiAKKyNpbmNsdWRlICJBbGxvY2F0b3JBdHRyaWJ1dGVz
LmgiCiAjaW5jbHVkZSAiTWFya2VkQmxvY2suaCIKICNpbmNsdWRlIDx3dGYvRG91Ymx5TGlua2Vk
TGlzdC5oPgogCkBAIC00Niw4ICs0NywxMSBAQCBwdWJsaWM6CiAgICAgdm9pZCByZXNldCgpOwog
ICAgIHZvaWQgc3RvcEFsbG9jYXRpbmcoKTsKICAgICB2b2lkIHJlc3VtZUFsbG9jYXRpbmcoKTsK
LSAgICBzaXplX3QgY2VsbFNpemUoKSB7IHJldHVybiBtX2NlbGxTaXplOyB9Ci0gICAgYm9vbCBu
ZWVkc0Rlc3RydWN0aW9uKCkgeyByZXR1cm4gbV9uZWVkc0Rlc3RydWN0aW9uOyB9CisgICAgc2l6
ZV90IGNlbGxTaXplKCkgY29uc3QgeyByZXR1cm4gbV9jZWxsU2l6ZTsgfQorICAgIGNvbnN0IEFs
bG9jYXRvckF0dHJpYnV0ZXMmIGF0dHJpYnV0ZXMoKSBjb25zdCB7IHJldHVybiBtX2F0dHJpYnV0
ZXM7IH0KKyAgICBib29sIG5lZWRzRGVzdHJ1Y3Rpb24oKSBjb25zdCB7IHJldHVybiBtX2F0dHJp
YnV0ZXMuZGVzdHJ1Y3Rpb24gPT0gTmVlZHNEZXN0cnVjdGlvbjsgfQorICAgIERlc3RydWN0aW9u
TW9kZSBkZXN0cnVjdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fYXR0cmlidXRlcy5kZXN0cnVjdGlv
bjsgfQorICAgIEhlYXBDZWxsOjpLaW5kIGNlbGxLaW5kKCkgY29uc3QgeyByZXR1cm4gbV9hdHRy
aWJ1dGVzLmNlbGxLaW5kOyB9CiAgICAgdm9pZCogYWxsb2NhdGUoc2l6ZV90KTsKICAgICBIZWFw
KiBoZWFwKCkgeyByZXR1cm4gbV9oZWFwOyB9CiAgICAgTWFya2VkQmxvY2sqIHRha2VMYXN0QWN0
aXZlQmxvY2soKQpAQCAtNjEsNyArNjUsNyBAQCBwdWJsaWM6CiAgICAgCiAgICAgdm9pZCBhZGRC
bG9jayhNYXJrZWRCbG9jayopOwogICAgIHZvaWQgcmVtb3ZlQmxvY2soTWFya2VkQmxvY2sqKTsK
LSAgICB2b2lkIGluaXQoSGVhcCosIE1hcmtlZFNwYWNlKiwgc2l6ZV90IGNlbGxTaXplLCBib29s
IG5lZWRzRGVzdHJ1Y3Rpb24pOworICAgIHZvaWQgaW5pdChIZWFwKiwgTWFya2VkU3BhY2UqLCBz
aXplX3QgY2VsbFNpemUsIGNvbnN0IEFsbG9jYXRvckF0dHJpYnV0ZXMmKTsKIAogICAgIGJvb2wg
aXNQYWdlZE91dChkb3VibGUgZGVhZGxpbmUpOwogICAgCkBAIC04MSw3ICs4NSw3IEBAIHByaXZh
dGU6CiAgICAgRG91Ymx5TGlua2VkTGlzdDxNYXJrZWRCbG9jaz4gbV9ibG9ja0xpc3Q7CiAgICAg
RG91Ymx5TGlua2VkTGlzdDxNYXJrZWRCbG9jaz4gbV9yZXRpcmVkQmxvY2tzOwogICAgIHNpemVf
dCBtX2NlbGxTaXplOwotICAgIGJvb2wgbV9uZWVkc0Rlc3RydWN0aW9uIHsgZmFsc2UgfTsKKyAg
ICBBbGxvY2F0b3JBdHRyaWJ1dGVzIG1fYXR0cmlidXRlczsKICAgICBIZWFwKiBtX2hlYXA7CiAg
ICAgTWFya2VkU3BhY2UqIG1fbWFya2VkU3BhY2U7CiB9OwpAQCAtMTAxLDEyICsxMDUsMTIgQEAg
aW5saW5lIE1hcmtlZEFsbG9jYXRvcjo6TWFya2VkQWxsb2NhdG9yKAogewogfQogCi1pbmxpbmUg
dm9pZCBNYXJrZWRBbGxvY2F0b3I6OmluaXQoSGVhcCogaGVhcCwgTWFya2VkU3BhY2UqIG1hcmtl
ZFNwYWNlLCBzaXplX3QgY2VsbFNpemUsIGJvb2wgbmVlZHNEZXN0cnVjdGlvbikKK2lubGluZSB2
b2lkIE1hcmtlZEFsbG9jYXRvcjo6aW5pdChIZWFwKiBoZWFwLCBNYXJrZWRTcGFjZSogbWFya2Vk
U3BhY2UsIHNpemVfdCBjZWxsU2l6ZSwgY29uc3QgQWxsb2NhdG9yQXR0cmlidXRlcyYgYXR0cmli
dXRlcykKIHsKICAgICBtX2hlYXAgPSBoZWFwOwogICAgIG1fbWFya2VkU3BhY2UgPSBtYXJrZWRT
cGFjZTsKICAgICBtX2NlbGxTaXplID0gY2VsbFNpemU7Ci0gICAgbV9uZWVkc0Rlc3RydWN0aW9u
ID0gbmVlZHNEZXN0cnVjdGlvbjsKKyAgICBtX2F0dHJpYnV0ZXMgPSBhdHRyaWJ1dGVzOwogfQog
CiBpbmxpbmUgdm9pZCogTWFya2VkQWxsb2NhdG9yOjphbGxvY2F0ZShzaXplX3QgYnl0ZXMpCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRCbG9jay5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQmxvY2suY3BwCShyZXZpc2lv
biAyMDM1MjUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRCbG9jay5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEx
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMSwg
MjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKQEAgLTM1LDE0ICszNSwxNCBAQCBuYW1lc3BhY2UgSlNDIHsKIHN0YXRpYyBj
b25zdCBib29sIGNvbXB1dGVCYWxhbmNlID0gZmFsc2U7CiBzdGF0aWMgc2l6ZV90IGJhbGFuY2U7
CiAKLU1hcmtlZEJsb2NrKiBNYXJrZWRCbG9jazo6Y3JlYXRlKEhlYXAmIGhlYXAsIE1hcmtlZEFs
bG9jYXRvciogYWxsb2NhdG9yLCBzaXplX3QgY2FwYWNpdHksIHNpemVfdCBjZWxsU2l6ZSwgYm9v
bCBuZWVkc0Rlc3RydWN0aW9uLCBIZWFwQ2VsbDo6S2luZCBjZWxsS2luZCkKK01hcmtlZEJsb2Nr
KiBNYXJrZWRCbG9jazo6Y3JlYXRlKEhlYXAmIGhlYXAsIE1hcmtlZEFsbG9jYXRvciogYWxsb2Nh
dG9yLCBzaXplX3QgY2FwYWNpdHksIHNpemVfdCBjZWxsU2l6ZSwgY29uc3QgQWxsb2NhdG9yQXR0
cmlidXRlcyYgYXR0cmlidXRlcykKIHsKICAgICBpZiAoY29tcHV0ZUJhbGFuY2UpIHsKICAgICAg
ICAgYmFsYW5jZSsrOwogICAgICAgICBpZiAoIShiYWxhbmNlICUgMTApKQogICAgICAgICAgICAg
ZGF0YUxvZygiTWFya2VkQmxvY2sgQmFsYW5jZTogIiwgYmFsYW5jZSwgIlxuIik7CiAgICAgfQot
ICAgIE1hcmtlZEJsb2NrKiBibG9jayA9IG5ldyAoTm90TnVsbCwgZmFzdEFsaWduZWRNYWxsb2Mo
YmxvY2tTaXplLCBjYXBhY2l0eSkpIE1hcmtlZEJsb2NrKGFsbG9jYXRvciwgY2FwYWNpdHksIGNl
bGxTaXplLCBuZWVkc0Rlc3RydWN0aW9uLCBjZWxsS2luZCk7CisgICAgTWFya2VkQmxvY2sqIGJs
b2NrID0gbmV3IChOb3ROdWxsLCBmYXN0QWxpZ25lZE1hbGxvYyhibG9ja1NpemUsIGNhcGFjaXR5
KSkgTWFya2VkQmxvY2soYWxsb2NhdG9yLCBjYXBhY2l0eSwgY2VsbFNpemUsIGF0dHJpYnV0ZXMp
OwogICAgIGhlYXAuZGlkQWxsb2NhdGVCbG9jayhjYXBhY2l0eSk7CiAgICAgcmV0dXJuIGJsb2Nr
OwogfQpAQCAtNjAsMTkgKzYwLDIwIEBAIHZvaWQgTWFya2VkQmxvY2s6OmRlc3Ryb3koSGVhcCYg
aGVhcCwgTWEKICAgICBoZWFwLmRpZEZyZWVCbG9jayhjYXBhY2l0eSk7CiB9CiAKLU1hcmtlZEJs
b2NrOjpNYXJrZWRCbG9jayhNYXJrZWRBbGxvY2F0b3IqIGFsbG9jYXRvciwgc2l6ZV90IGNhcGFj
aXR5LCBzaXplX3QgY2VsbFNpemUsIGJvb2wgbmVlZHNEZXN0cnVjdGlvbiwgSGVhcENlbGw6Oktp
bmQgY2VsbEtpbmQpCitNYXJrZWRCbG9jazo6TWFya2VkQmxvY2soTWFya2VkQWxsb2NhdG9yKiBh
bGxvY2F0b3IsIHNpemVfdCBjYXBhY2l0eSwgc2l6ZV90IGNlbGxTaXplLCBjb25zdCBBbGxvY2F0
b3JBdHRyaWJ1dGVzJiBhdHRyaWJ1dGVzKQogICAgIDogRG91Ymx5TGlua2VkTGlzdE5vZGU8TWFy
a2VkQmxvY2s+KCkKICAgICAsIG1fYXRvbXNQZXJDZWxsKChjZWxsU2l6ZSArIGF0b21TaXplIC0g
MSkgLyBhdG9tU2l6ZSkKICAgICAsIG1fZW5kQXRvbSgoYWxsb2NhdG9yLT5jZWxsU2l6ZSgpID8g
YXRvbXNQZXJCbG9jayAtIG1fYXRvbXNQZXJDZWxsIDogZmlyc3RBdG9tKCkpICsgMSkKICAgICAs
IG1fY2FwYWNpdHkoY2FwYWNpdHkpCi0gICAgLCBtX25lZWRzRGVzdHJ1Y3Rpb24obmVlZHNEZXN0
cnVjdGlvbikKLSAgICAsIG1fY2VsbEtpbmQoY2VsbEtpbmQpCisgICAgLCBtX2F0dHJpYnV0ZXMo
YXR0cmlidXRlcykKICAgICAsIG1fYWxsb2NhdG9yKGFsbG9jYXRvcikKICAgICAsIG1fc3RhdGUo
TmV3KSAvLyBBbGwgY2VsbHMgc3RhcnQgb3V0IHVubWFya2VkLgogICAgICwgbV93ZWFrU2V0KGFs
bG9jYXRvci0+aGVhcCgpLT52bSgpLCAqdGhpcykKIHsKICAgICBBU1NFUlQoYWxsb2NhdG9yKTsK
ICAgICBIRUFQX0xPR19CTE9DS19TVEFURV9UUkFOU0lUSU9OKHRoaXMpOworICAgIGlmIChtX2F0
dHJpYnV0ZXMuY2VsbEtpbmQgIT0gSGVhcENlbGw6OkpTQ2VsbCkKKyAgICAgICAgUkVMRUFTRV9B
U1NFUlQobV9hdHRyaWJ1dGVzLmRlc3RydWN0aW9uID09IERvZXNOb3ROZWVkRGVzdHJ1Y3Rpb24p
OwogfQogCiBpbmxpbmUgdm9pZCBNYXJrZWRCbG9jazo6Y2FsbERlc3RydWN0b3IoSGVhcENlbGwq
IGNlbGwpCkBAIC0xMzQsMTAgKzEzNSwxMCBAQCBNYXJrZWRCbG9jazo6RnJlZUxpc3QgTWFya2Vk
QmxvY2s6OnN3ZWVwCiAKICAgICBtX3dlYWtTZXQuc3dlZXAoKTsKIAotICAgIGlmIChzd2VlcE1v
ZGUgPT0gU3dlZXBPbmx5ICYmICFtX25lZWRzRGVzdHJ1Y3Rpb24pCisgICAgaWYgKHN3ZWVwTW9k
ZSA9PSBTd2VlcE9ubHkgJiYgbV9hdHRyaWJ1dGVzLmRlc3RydWN0aW9uID09IERvZXNOb3ROZWVk
RGVzdHJ1Y3Rpb24pCiAgICAgICAgIHJldHVybiBGcmVlTGlzdCgpOwogCi0gICAgaWYgKG1fbmVl
ZHNEZXN0cnVjdGlvbikKKyAgICBpZiAobV9hdHRyaWJ1dGVzLmRlc3RydWN0aW9uID09IE5lZWRz
RGVzdHJ1Y3Rpb24pCiAgICAgICAgIHJldHVybiBzd2VlcEhlbHBlcjx0cnVlPihzd2VlcE1vZGUp
OwogICAgIHJldHVybiBzd2VlcEhlbHBlcjxmYWxzZT4oc3dlZXBNb2RlKTsKIH0KQEAgLTIxNiw3
ICsyMTcsNyBAQCB2b2lkIE1hcmtlZEJsb2NrOjpzdG9wQWxsb2NhdGluZyhjb25zdCBGCiAgICAg
RnJlZUNlbGwqIG5leHQ7CiAgICAgZm9yIChGcmVlQ2VsbCogY3VycmVudCA9IGhlYWQ7IGN1cnJl
bnQ7IGN1cnJlbnQgPSBuZXh0KSB7CiAgICAgICAgIG5leHQgPSBjdXJyZW50LT5uZXh0OwotICAg
ICAgICBpZiAobV9uZWVkc0Rlc3RydWN0aW9uKQorICAgICAgICBpZiAobV9hdHRyaWJ1dGVzLmRl
c3RydWN0aW9uID09IE5lZWRzRGVzdHJ1Y3Rpb24pCiAgICAgICAgICAgICByZWludGVycHJldF9j
YXN0PEhlYXBDZWxsKj4oY3VycmVudCktPnphcCgpOwogICAgICAgICBjbGVhck5ld2x5QWxsb2Nh
dGVkKGN1cnJlbnQpOwogICAgIH0KQEAgLTI5NCw3ICsyOTUsNyBAQCB2b2lkIE1hcmtlZEJsb2Nr
OjpkaWRSZXRpcmVCbG9jayhjb25zdCBGCiAgICAgRnJlZUNlbGwqIG5leHQ7CiAgICAgZm9yIChG
cmVlQ2VsbCogY3VycmVudCA9IGhlYWQ7IGN1cnJlbnQ7IGN1cnJlbnQgPSBuZXh0KSB7CiAgICAg
ICAgIG5leHQgPSBjdXJyZW50LT5uZXh0OwotICAgICAgICBpZiAobV9uZWVkc0Rlc3RydWN0aW9u
KQorICAgICAgICBpZiAobV9hdHRyaWJ1dGVzLmRlc3RydWN0aW9uID09IE5lZWRzRGVzdHJ1Y3Rp
b24pCiAgICAgICAgICAgICByZWludGVycHJldF9jYXN0PEhlYXBDZWxsKj4oY3VycmVudCktPnph
cCgpOwogICAgIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQmxv
Y2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRCbG9j
ay5oCShyZXZpc2lvbiAyMDM1MjUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJr
ZWRCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDcgKzEsNyBAQAogLyoKICAqICBDb3B5cmln
aHQgKEMpIDE5OTktMjAwMCBIYXJyaSBQb3J0ZW4gKHBvcnRlbkBrZGUub3JnKQogICogIENvcHly
aWdodCAoQykgMjAwMSBQZXRlciBLZWxseSAocG1rQHBvc3QuY29tKQotICogIENvcHlyaWdodCAo
QykgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA0LCAy
MDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDExLCAyMDE2IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlv
dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKQEAgLTIyLDYgKzIyLDggQEAKICNp
Zm5kZWYgTWFya2VkQmxvY2tfaAogI2RlZmluZSBNYXJrZWRCbG9ja19oCiAKKyNpbmNsdWRlICJB
bGxvY2F0b3JBdHRyaWJ1dGVzLmgiCisjaW5jbHVkZSAiRGVzdHJ1Y3Rpb25Nb2RlLmgiCiAjaW5j
bHVkZSAiSGVhcENlbGwuaCIKICNpbmNsdWRlICJIZWFwT3BlcmF0aW9uLmgiCiAjaW5jbHVkZSAi
SXRlcmF0aW9uU3RhdHVzLmgiCkBAIC0xMDcsNyArMTA5LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAg
ICAgICAgICAgICBtdXRhYmxlIFJldHVyblR5cGUgbV9jb3VudDsKICAgICAgICAgfTsKIAotICAg
ICAgICBzdGF0aWMgTWFya2VkQmxvY2sqIGNyZWF0ZShIZWFwJiwgTWFya2VkQWxsb2NhdG9yKiwg
c2l6ZV90IGNhcGFjaXR5LCBzaXplX3QgY2VsbFNpemUsIGJvb2wgbmVlZHNEZXN0cnVjdGlvbiwg
SGVhcENlbGw6OktpbmQpOworICAgICAgICBzdGF0aWMgTWFya2VkQmxvY2sqIGNyZWF0ZShIZWFw
JiwgTWFya2VkQWxsb2NhdG9yKiwgc2l6ZV90IGNhcGFjaXR5LCBzaXplX3QgY2VsbFNpemUsIGNv
bnN0IEFsbG9jYXRvckF0dHJpYnV0ZXMmKTsKICAgICAgICAgc3RhdGljIHZvaWQgZGVzdHJveShI
ZWFwJiwgTWFya2VkQmxvY2sqKTsKIAogICAgICAgICBzdGF0aWMgYm9vbCBpc0F0b21BbGlnbmVk
KGNvbnN0IHZvaWQqKTsKQEAgLTE0Nyw2ICsxNDksOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAg
ICAgYm9vbCBpc0VtcHR5KCk7CiAKICAgICAgICAgc2l6ZV90IGNlbGxTaXplKCk7CisgICAgICAg
IGNvbnN0IEFsbG9jYXRvckF0dHJpYnV0ZXMmIGF0dHJpYnV0ZXMoKSBjb25zdDsKKyAgICAgICAg
RGVzdHJ1Y3Rpb25Nb2RlIGRlc3RydWN0aW9uKCkgY29uc3Q7CiAgICAgICAgIGJvb2wgbmVlZHNE
ZXN0cnVjdGlvbigpIGNvbnN0OwogICAgICAgICBIZWFwQ2VsbDo6S2luZCBjZWxsS2luZCgpIGNv
bnN0OwogCkBAIC0xODQsNyArMTg4LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAgdHlw
ZWRlZiBjaGFyIEF0b21bYXRvbVNpemVdOwogCi0gICAgICAgIE1hcmtlZEJsb2NrKE1hcmtlZEFs
bG9jYXRvciosIHNpemVfdCBjYXBhY2l0eSwgc2l6ZV90IGNlbGxTaXplLCBib29sIG5lZWRzRGVz
dHJ1Y3Rpb24sIEhlYXBDZWxsOjpLaW5kKTsKKyAgICAgICAgTWFya2VkQmxvY2soTWFya2VkQWxs
b2NhdG9yKiwgc2l6ZV90IGNhcGFjaXR5LCBzaXplX3QgY2VsbFNpemUsIGNvbnN0IEFsbG9jYXRv
ckF0dHJpYnV0ZXMmKTsKICAgICAgICAgQXRvbSogYXRvbXMoKTsKICAgICAgICAgc2l6ZV90IGF0
b21OdW1iZXIoY29uc3Qgdm9pZCopOwogICAgICAgICB2b2lkIGNhbGxEZXN0cnVjdG9yKEhlYXBD
ZWxsKik7CkBAIC0xOTksOCArMjAzLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHN0ZDo6
dW5pcXVlX3B0cjxXVEY6OkJpdG1hcDxhdG9tc1BlckJsb2NrPj4gbV9uZXdseUFsbG9jYXRlZDsK
IAogICAgICAgICBzaXplX3QgbV9jYXBhY2l0eTsKLSAgICAgICAgYm9vbCBtX25lZWRzRGVzdHJ1
Y3Rpb247Ci0gICAgICAgIEhlYXBDZWxsOjpLaW5kIG1fY2VsbEtpbmQ7CisgICAgICAgIEFsbG9j
YXRvckF0dHJpYnV0ZXMgbV9hdHRyaWJ1dGVzOwogICAgICAgICBNYXJrZWRBbGxvY2F0b3IqIG1f
YWxsb2NhdG9yOwogICAgICAgICBCbG9ja1N0YXRlIG1fc3RhdGU7CiAgICAgICAgIFdlYWtTZXQg
bV93ZWFrU2V0OwpAQCAtMzAxLDE0ICszMDQsMjQgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAg
IHJldHVybiBtX2F0b21zUGVyQ2VsbCAqIGF0b21TaXplOwogICAgIH0KIAorICAgIGlubGluZSBj
b25zdCBBbGxvY2F0b3JBdHRyaWJ1dGVzJiBNYXJrZWRCbG9jazo6YXR0cmlidXRlcygpIGNvbnN0
CisgICAgeworICAgICAgICByZXR1cm4gbV9hdHRyaWJ1dGVzOworICAgIH0KKwogICAgIGlubGlu
ZSBib29sIE1hcmtlZEJsb2NrOjpuZWVkc0Rlc3RydWN0aW9uKCkgY29uc3QKICAgICB7Ci0gICAg
ICAgIHJldHVybiBtX25lZWRzRGVzdHJ1Y3Rpb247CisgICAgICAgIHJldHVybiBtX2F0dHJpYnV0
ZXMuZGVzdHJ1Y3Rpb24gPT0gTmVlZHNEZXN0cnVjdGlvbjsKKyAgICB9CisKKyAgICBpbmxpbmUg
RGVzdHJ1Y3Rpb25Nb2RlIE1hcmtlZEJsb2NrOjpkZXN0cnVjdGlvbigpIGNvbnN0CisgICAgewor
ICAgICAgICByZXR1cm4gbV9hdHRyaWJ1dGVzLmRlc3RydWN0aW9uOwogICAgIH0KIAogICAgIGlu
bGluZSBIZWFwQ2VsbDo6S2luZCBNYXJrZWRCbG9jazo6Y2VsbEtpbmQoKSBjb25zdAogICAgIHsK
LSAgICAgICAgcmV0dXJuIG1fY2VsbEtpbmQ7CisgICAgICAgIHJldHVybiBtX2F0dHJpYnV0ZXMu
Y2VsbEtpbmQ7CiAgICAgfQogCiAgICAgaW5saW5lIHNpemVfdCBNYXJrZWRCbG9jazo6c2l6ZSgp
CkBAIC00MjAsNyArNDMzLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICB0ZW1wbGF0ZSA8dHlw
ZW5hbWUgRnVuY3Rvcj4gaW5saW5lIEl0ZXJhdGlvblN0YXR1cyBNYXJrZWRCbG9jazo6Zm9yRWFj
aENlbGwoY29uc3QgRnVuY3RvciYgZnVuY3RvcikKICAgICB7Ci0gICAgICAgIEhlYXBDZWxsOjpL
aW5kIGtpbmQgPSBtX2NlbGxLaW5kOworICAgICAgICBIZWFwQ2VsbDo6S2luZCBraW5kID0gbV9h
dHRyaWJ1dGVzLmNlbGxLaW5kOwogICAgICAgICBmb3IgKHNpemVfdCBpID0gZmlyc3RBdG9tKCk7
IGkgPCBtX2VuZEF0b207IGkgKz0gbV9hdG9tc1BlckNlbGwpIHsKICAgICAgICAgICAgIEhlYXBD
ZWxsKiBjZWxsID0gcmVpbnRlcnByZXRfY2FzdF9wdHI8SGVhcENlbGwqPigmYXRvbXMoKVtpXSk7
CiAgICAgICAgICAgICBpZiAoZnVuY3RvcihjZWxsLCBraW5kKSA9PSBJdGVyYXRpb25TdGF0dXM6
OkRvbmUpCkBAIC00MzEsNyArNDQ0LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICB0ZW1wbGF0
ZSA8dHlwZW5hbWUgRnVuY3Rvcj4gaW5saW5lIEl0ZXJhdGlvblN0YXR1cyBNYXJrZWRCbG9jazo6
Zm9yRWFjaExpdmVDZWxsKGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpCiAgICAgewotICAgICAgICBI
ZWFwQ2VsbDo6S2luZCBraW5kID0gbV9jZWxsS2luZDsKKyAgICAgICAgSGVhcENlbGw6OktpbmQg
a2luZCA9IG1fYXR0cmlidXRlcy5jZWxsS2luZDsKICAgICAgICAgZm9yIChzaXplX3QgaSA9IGZp
cnN0QXRvbSgpOyBpIDwgbV9lbmRBdG9tOyBpICs9IG1fYXRvbXNQZXJDZWxsKSB7CiAgICAgICAg
ICAgICBIZWFwQ2VsbCogY2VsbCA9IHJlaW50ZXJwcmV0X2Nhc3RfcHRyPEhlYXBDZWxsKj4oJmF0
b21zKClbaV0pOwogICAgICAgICAgICAgaWYgKCFpc0xpdmUoY2VsbCkpCkBAIC00NDUsNyArNDU4
LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgRnVuY3Rvcj4g
aW5saW5lIEl0ZXJhdGlvblN0YXR1cyBNYXJrZWRCbG9jazo6Zm9yRWFjaERlYWRDZWxsKGNvbnN0
IEZ1bmN0b3ImIGZ1bmN0b3IpCiAgICAgewotICAgICAgICBIZWFwQ2VsbDo6S2luZCBraW5kID0g
bV9jZWxsS2luZDsKKyAgICAgICAgSGVhcENlbGw6OktpbmQga2luZCA9IG1fYXR0cmlidXRlcy5j
ZWxsS2luZDsKICAgICAgICAgZm9yIChzaXplX3QgaSA9IGZpcnN0QXRvbSgpOyBpIDwgbV9lbmRB
dG9tOyBpICs9IG1fYXRvbXNQZXJDZWxsKSB7CiAgICAgICAgICAgICBIZWFwQ2VsbCogY2VsbCA9
IHJlaW50ZXJwcmV0X2Nhc3RfcHRyPEhlYXBDZWxsKj4oJmF0b21zKClbaV0pOwogICAgICAgICAg
ICAgaWYgKGlzTGl2ZShjZWxsKSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01h
cmtlZFNwYWNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9N
YXJrZWRTcGFjZS5jcHAJKHJldmlzaW9uIDIwMzUyNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL01hcmtlZFNwYWNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIsMTggKzMyLDExIEBA
IE1hcmtlZFNwYWNlOjpNYXJrZWRTcGFjZShIZWFwKiBoZWFwKQogICAgICwgbV9jYXBhY2l0eSgw
KQogICAgICwgbV9pc0l0ZXJhdGluZyhmYWxzZSkKIHsKLSAgICBmb3IgKHNpemVfdCBjZWxsU2l6
ZSA9IHByZWNpc2VTdGVwOyBjZWxsU2l6ZSA8PSBwcmVjaXNlQ3V0b2ZmOyBjZWxsU2l6ZSArPSBw
cmVjaXNlU3RlcCkgewotICAgICAgICBhbGxvY2F0b3JGb3IoY2VsbFNpemUpLmluaXQoaGVhcCwg
dGhpcywgY2VsbFNpemUsIGZhbHNlKTsKLSAgICAgICAgZGVzdHJ1Y3RvckFsbG9jYXRvckZvcihj
ZWxsU2l6ZSkuaW5pdChoZWFwLCB0aGlzLCBjZWxsU2l6ZSwgdHJ1ZSk7Ci0gICAgfQotCi0gICAg
Zm9yIChzaXplX3QgY2VsbFNpemUgPSBpbXByZWNpc2VTdGFydDsgY2VsbFNpemUgPD0gaW1wcmVj
aXNlQ3V0b2ZmOyBjZWxsU2l6ZSArPSBpbXByZWNpc2VTdGVwKSB7Ci0gICAgICAgIGFsbG9jYXRv
ckZvcihjZWxsU2l6ZSkuaW5pdChoZWFwLCB0aGlzLCBjZWxsU2l6ZSwgZmFsc2UpOwotICAgICAg
ICBkZXN0cnVjdG9yQWxsb2NhdG9yRm9yKGNlbGxTaXplKS5pbml0KGhlYXAsIHRoaXMsIGNlbGxT
aXplLCB0cnVlKTsKLSAgICB9Ci0KLSAgICBtX25vcm1hbFNwYWNlLmxhcmdlQWxsb2NhdG9yLmlu
aXQoaGVhcCwgdGhpcywgMCwgZmFsc2UpOwotICAgIG1fZGVzdHJ1Y3RvclNwYWNlLmxhcmdlQWxs
b2NhdG9yLmluaXQoaGVhcCwgdGhpcywgMCwgdHJ1ZSk7CisgICAgZm9yRWFjaEFsbG9jYXRvcigK
KyAgICAgICAgWyZdIChNYXJrZWRBbGxvY2F0b3ImIGFsbG9jYXRvciwgc2l6ZV90IGNlbGxTaXpl
LCBBbGxvY2F0b3JBdHRyaWJ1dGVzIGF0dHJpYnV0ZXMpIC0+IEl0ZXJhdGlvblN0YXR1cyB7Cisg
ICAgICAgICAgICBhbGxvY2F0b3IuaW5pdChoZWFwLCB0aGlzLCBjZWxsU2l6ZSwgYXR0cmlidXRl
cyk7CisgICAgICAgICAgICByZXR1cm4gSXRlcmF0aW9uU3RhdHVzOjpDb250aW51ZTsKKyAgICAg
ICAgfSk7CiB9CiAKIE1hcmtlZFNwYWNlOjp+TWFya2VkU3BhY2UoKQpAQCAtNTksOCArNTIsOSBA
QCB2b2lkIE1hcmtlZFNwYWNlOjpsYXN0Q2hhbmNlVG9GaW5hbGl6ZSgpCiB7CiAgICAgc3RvcEFs
bG9jYXRpbmcoKTsKICAgICBmb3JFYWNoQWxsb2NhdG9yKAotICAgICAgICBbJl0gKE1hcmtlZEFs
bG9jYXRvciYgYWxsb2NhdG9yKSB7CisgICAgICAgIFsmXSAoTWFya2VkQWxsb2NhdG9yJiBhbGxv
Y2F0b3IsIHNpemVfdCwgQWxsb2NhdG9yQXR0cmlidXRlcykgLT4gSXRlcmF0aW9uU3RhdHVzIHsK
ICAgICAgICAgICAgIGFsbG9jYXRvci5sYXN0Q2hhbmNlVG9GaW5hbGl6ZSgpOworICAgICAgICAg
ICAgcmV0dXJuIEl0ZXJhdGlvblN0YXR1czo6Q29udGludWU7CiAgICAgICAgIH0pOwogfQogCkBA
IC04NywxOCArODEsMTEgQEAgdm9pZCBNYXJrZWRTcGFjZTo6em9tYmlmeVN3ZWVwKCkKIAogdm9p
ZCBNYXJrZWRTcGFjZTo6cmVzZXRBbGxvY2F0b3JzKCkKIHsKLSAgICBmb3IgKHNpemVfdCBjZWxs
U2l6ZSA9IHByZWNpc2VTdGVwOyBjZWxsU2l6ZSA8PSBwcmVjaXNlQ3V0b2ZmOyBjZWxsU2l6ZSAr
PSBwcmVjaXNlU3RlcCkgewotICAgICAgICBhbGxvY2F0b3JGb3IoY2VsbFNpemUpLnJlc2V0KCk7
Ci0gICAgICAgIGRlc3RydWN0b3JBbGxvY2F0b3JGb3IoY2VsbFNpemUpLnJlc2V0KCk7Ci0gICAg
fQotCi0gICAgZm9yIChzaXplX3QgY2VsbFNpemUgPSBpbXByZWNpc2VTdGFydDsgY2VsbFNpemUg
PD0gaW1wcmVjaXNlQ3V0b2ZmOyBjZWxsU2l6ZSArPSBpbXByZWNpc2VTdGVwKSB7Ci0gICAgICAg
IGFsbG9jYXRvckZvcihjZWxsU2l6ZSkucmVzZXQoKTsKLSAgICAgICAgZGVzdHJ1Y3RvckFsbG9j
YXRvckZvcihjZWxsU2l6ZSkucmVzZXQoKTsKLSAgICB9Ci0KLSAgICBtX25vcm1hbFNwYWNlLmxh
cmdlQWxsb2NhdG9yLnJlc2V0KCk7Ci0gICAgbV9kZXN0cnVjdG9yU3BhY2UubGFyZ2VBbGxvY2F0
b3IucmVzZXQoKTsKKyAgICBmb3JFYWNoQWxsb2NhdG9yKAorICAgICAgICBbJl0gKE1hcmtlZEFs
bG9jYXRvciYgYWxsb2NhdG9yLCBzaXplX3QsIEFsbG9jYXRvckF0dHJpYnV0ZXMpIC0+IEl0ZXJh
dGlvblN0YXR1cyB7CisgICAgICAgICAgICBhbGxvY2F0b3IucmVzZXQoKTsKKyAgICAgICAgICAg
IHJldHVybiBJdGVyYXRpb25TdGF0dXM6OkNvbnRpbnVlOworICAgICAgICB9KTsKIAogICAgIG1f
YmxvY2tzV2l0aE5ld09iamVjdHMuY2xlYXIoKTsKIH0KQEAgLTEzMiwyNiArMTE5LDMwIEBAIHZv
aWQgTWFya2VkU3BhY2U6OnJlYXBXZWFrU2V0cygpCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgRnVuY3Rv
cj4KIHZvaWQgTWFya2VkU3BhY2U6OmZvckVhY2hBbGxvY2F0b3IoY29uc3QgRnVuY3RvciYgZnVu
Y3RvcikKIHsKLSAgICBmb3IgKHNpemVfdCBjZWxsU2l6ZSA9IHByZWNpc2VTdGVwOyBjZWxsU2l6
ZSA8PSBwcmVjaXNlQ3V0b2ZmOyBjZWxsU2l6ZSArPSBwcmVjaXNlU3RlcCkgewotICAgICAgICBm
dW5jdG9yKGFsbG9jYXRvckZvcihjZWxsU2l6ZSkpOwotICAgICAgICBmdW5jdG9yKGRlc3RydWN0
b3JBbGxvY2F0b3JGb3IoY2VsbFNpemUpKTsKLSAgICB9Ci0KLSAgICBmb3IgKHNpemVfdCBjZWxs
U2l6ZSA9IGltcHJlY2lzZVN0YXJ0OyBjZWxsU2l6ZSA8PSBpbXByZWNpc2VDdXRvZmY7IGNlbGxT
aXplICs9IGltcHJlY2lzZVN0ZXApIHsKLSAgICAgICAgZnVuY3RvcihhbGxvY2F0b3JGb3IoY2Vs
bFNpemUpKTsKLSAgICAgICAgZnVuY3RvcihkZXN0cnVjdG9yQWxsb2NhdG9yRm9yKGNlbGxTaXpl
KSk7Ci0gICAgfQotCi0gICAgZnVuY3RvcihtX25vcm1hbFNwYWNlLmxhcmdlQWxsb2NhdG9yKTsK
LSAgICBmdW5jdG9yKG1fZGVzdHJ1Y3RvclNwYWNlLmxhcmdlQWxsb2NhdG9yKTsKKyAgICBmb3JF
YWNoU3Vic3BhY2UoCisgICAgICAgIFsmXSAoU3Vic3BhY2UmIHN1YnNwYWNlLCBBbGxvY2F0b3JB
dHRyaWJ1dGVzIGF0dHJpYnV0ZXMpIC0+IEl0ZXJhdGlvblN0YXR1cyB7CisgICAgICAgICAgICBm
b3IgKHNpemVfdCBjZWxsU2l6ZSA9IHByZWNpc2VTdGVwOyBjZWxsU2l6ZSA8PSBwcmVjaXNlQ3V0
b2ZmOyBjZWxsU2l6ZSArPSBwcmVjaXNlU3RlcCkgeworICAgICAgICAgICAgICAgIGlmIChmdW5j
dG9yKGFsbG9jYXRvckZvcihzdWJzcGFjZSwgY2VsbFNpemUpLCBjZWxsU2l6ZSwgYXR0cmlidXRl
cykgPT0gSXRlcmF0aW9uU3RhdHVzOjpEb25lKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4g
SXRlcmF0aW9uU3RhdHVzOjpEb25lOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZm9yIChz
aXplX3QgY2VsbFNpemUgPSBpbXByZWNpc2VTdGFydDsgY2VsbFNpemUgPD0gaW1wcmVjaXNlQ3V0
b2ZmOyBjZWxsU2l6ZSArPSBpbXByZWNpc2VTdGVwKSB7CisgICAgICAgICAgICAgICAgaWYgKGZ1
bmN0b3IoYWxsb2NhdG9yRm9yKHN1YnNwYWNlLCBjZWxsU2l6ZSksIGNlbGxTaXplLCBhdHRyaWJ1
dGVzKSA9PSBJdGVyYXRpb25TdGF0dXM6OkRvbmUpCisgICAgICAgICAgICAgICAgICAgIHJldHVy
biBJdGVyYXRpb25TdGF0dXM6OkRvbmU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAo
ZnVuY3RvcihzdWJzcGFjZS5sYXJnZUFsbG9jYXRvciwgMCwgYXR0cmlidXRlcykgPT0gSXRlcmF0
aW9uU3RhdHVzOjpEb25lKQorICAgICAgICAgICAgICAgIHJldHVybiBJdGVyYXRpb25TdGF0dXM6
OkRvbmU7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHJldHVybiBJdGVyYXRpb25TdGF0dXM6
OkNvbnRpbnVlOworICAgICAgICB9KTsKIH0KIAogdm9pZCBNYXJrZWRTcGFjZTo6c3RvcEFsbG9j
YXRpbmcoKQogewogICAgIEFTU0VSVCghaXNJdGVyYXRpbmcoKSk7CiAgICAgZm9yRWFjaEFsbG9j
YXRvcigKLSAgICAgICAgWyZdIChNYXJrZWRBbGxvY2F0b3ImIGFsbG9jYXRvcikgeworICAgICAg
ICBbJl0gKE1hcmtlZEFsbG9jYXRvciYgYWxsb2NhdG9yLCBzaXplX3QsIEFsbG9jYXRvckF0dHJp
YnV0ZXMpIC0+IEl0ZXJhdGlvblN0YXR1cyB7CiAgICAgICAgICAgICBhbGxvY2F0b3Iuc3RvcEFs
bG9jYXRpbmcoKTsKKyAgICAgICAgICAgIHJldHVybiBJdGVyYXRpb25TdGF0dXM6OkNvbnRpbnVl
OwogICAgICAgICB9KTsKIH0KIApAQCAtMTU5LDMwICsxNTAsMjQgQEAgdm9pZCBNYXJrZWRTcGFj
ZTo6cmVzdW1lQWxsb2NhdGluZygpCiB7CiAgICAgQVNTRVJUKGlzSXRlcmF0aW5nKCkpOwogICAg
IGZvckVhY2hBbGxvY2F0b3IoCi0gICAgICAgIFsmXSAoTWFya2VkQWxsb2NhdG9yJiBhbGxvY2F0
b3IpIHsKKyAgICAgICAgWyZdIChNYXJrZWRBbGxvY2F0b3ImIGFsbG9jYXRvciwgc2l6ZV90LCBB
bGxvY2F0b3JBdHRyaWJ1dGVzKSAtPiBJdGVyYXRpb25TdGF0dXMgewogICAgICAgICAgICAgYWxs
b2NhdG9yLnJlc3VtZUFsbG9jYXRpbmcoKTsKKyAgICAgICAgICAgIHJldHVybiBJdGVyYXRpb25T
dGF0dXM6OkNvbnRpbnVlOwogICAgICAgICB9KTsKIH0KIAogYm9vbCBNYXJrZWRTcGFjZTo6aXNQ
YWdlZE91dChkb3VibGUgZGVhZGxpbmUpCiB7Ci0gICAgZm9yIChzaXplX3QgY2VsbFNpemUgPSBw
cmVjaXNlU3RlcDsgY2VsbFNpemUgPD0gcHJlY2lzZUN1dG9mZjsgY2VsbFNpemUgKz0gcHJlY2lz
ZVN0ZXApIHsKLSAgICAgICAgaWYgKGFsbG9jYXRvckZvcihjZWxsU2l6ZSkuaXNQYWdlZE91dChk
ZWFkbGluZSkgCi0gICAgICAgICAgICB8fCBkZXN0cnVjdG9yQWxsb2NhdG9yRm9yKGNlbGxTaXpl
KS5pc1BhZ2VkT3V0KGRlYWRsaW5lKSkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgIH0K
LQotICAgIGZvciAoc2l6ZV90IGNlbGxTaXplID0gaW1wcmVjaXNlU3RhcnQ7IGNlbGxTaXplIDw9
IGltcHJlY2lzZUN1dG9mZjsgY2VsbFNpemUgKz0gaW1wcmVjaXNlU3RlcCkgewotICAgICAgICBp
ZiAoYWxsb2NhdG9yRm9yKGNlbGxTaXplKS5pc1BhZ2VkT3V0KGRlYWRsaW5lKSAKLSAgICAgICAg
ICAgIHx8IGRlc3RydWN0b3JBbGxvY2F0b3JGb3IoY2VsbFNpemUpLmlzUGFnZWRPdXQoZGVhZGxp
bmUpKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgaWYgKG1fbm9ybWFs
U3BhY2UubGFyZ2VBbGxvY2F0b3IuaXNQYWdlZE91dChkZWFkbGluZSkKLSAgICAgICAgfHwgbV9k
ZXN0cnVjdG9yU3BhY2UubGFyZ2VBbGxvY2F0b3IuaXNQYWdlZE91dChkZWFkbGluZSkpCi0gICAg
ICAgIHJldHVybiB0cnVlOwotCi0gICAgcmV0dXJuIGZhbHNlOworICAgIGJvb2wgcmVzdWx0ID0g
ZmFsc2U7CisgICAgZm9yRWFjaEFsbG9jYXRvcigKKyAgICAgICAgWyZdIChNYXJrZWRBbGxvY2F0
b3ImIGFsbG9jYXRvciwgc2l6ZV90LCBBbGxvY2F0b3JBdHRyaWJ1dGVzKSAtPiBJdGVyYXRpb25T
dGF0dXMgeworICAgICAgICAgICAgaWYgKGFsbG9jYXRvci5pc1BhZ2VkT3V0KGRlYWRsaW5lKSkg
eworICAgICAgICAgICAgICAgIHJlc3VsdCA9IHRydWU7CisgICAgICAgICAgICAgICAgcmV0dXJu
IEl0ZXJhdGlvblN0YXR1czo6RG9uZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVy
biBJdGVyYXRpb25TdGF0dXM6OkNvbnRpbnVlOworICAgICAgICB9KTsKKyAgICByZXR1cm4gcmVz
dWx0OwogfQogCiB2b2lkIE1hcmtlZFNwYWNlOjpmcmVlQmxvY2soTWFya2VkQmxvY2sqIGJsb2Nr
KQpAQCAtMjExLDMzICsxOTYsMjMgQEAgdm9pZCBNYXJrZWRTcGFjZTo6c2hyaW5rKCkKICAgICAg
ICAgfSk7CiB9CiAKLXN0YXRpYyB2b2lkIGNsZWFyTmV3bHlBbGxvY2F0ZWRJbkJsb2NrKE1hcmtl
ZEJsb2NrKiBibG9jaykKLXsKLSAgICBpZiAoIWJsb2NrKQotICAgICAgICByZXR1cm47Ci0gICAg
YmxvY2stPmNsZWFyTmV3bHlBbGxvY2F0ZWQoKTsKLX0KLQogdm9pZCBNYXJrZWRTcGFjZTo6Y2xl
YXJOZXdseUFsbG9jYXRlZCgpCiB7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBwcmVjaXNl
Q291bnQ7ICsraSkgewotICAgICAgICBjbGVhck5ld2x5QWxsb2NhdGVkSW5CbG9jayhtX25vcm1h
bFNwYWNlLnByZWNpc2VBbGxvY2F0b3JzW2ldLnRha2VMYXN0QWN0aXZlQmxvY2soKSk7Ci0gICAg
ICAgIGNsZWFyTmV3bHlBbGxvY2F0ZWRJbkJsb2NrKG1fZGVzdHJ1Y3RvclNwYWNlLnByZWNpc2VB
bGxvY2F0b3JzW2ldLnRha2VMYXN0QWN0aXZlQmxvY2soKSk7Ci0gICAgfQotCi0gICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBpbXByZWNpc2VDb3VudDsgKytpKSB7Ci0gICAgICAgIGNsZWFyTmV3
bHlBbGxvY2F0ZWRJbkJsb2NrKG1fbm9ybWFsU3BhY2UuaW1wcmVjaXNlQWxsb2NhdG9yc1tpXS50
YWtlTGFzdEFjdGl2ZUJsb2NrKCkpOwotICAgICAgICBjbGVhck5ld2x5QWxsb2NhdGVkSW5CbG9j
ayhtX2Rlc3RydWN0b3JTcGFjZS5pbXByZWNpc2VBbGxvY2F0b3JzW2ldLnRha2VMYXN0QWN0aXZl
QmxvY2soKSk7Ci0gICAgfQotCi0gICAgLy8gV2UgaGF2ZSB0byBpdGVyYXRlIGFsbCBvZiB0aGUg
YmxvY2tzIGluIHRoZSBsYXJnZSBhbGxvY2F0b3JzIGJlY2F1c2UgdGhleSBhcmUKLSAgICAvLyBj
YW5vbmljYWxpemVkIGFzIHRoZXkgYXJlIHVzZWQgdXAgKHNlZSBNYXJrZWRBbGxvY2F0b3I6OnRy
eUFsbG9jYXRlSGVscGVyKQotICAgIC8vIHdoaWNoIGNyZWF0ZXMgdGhlIG1fbmV3bHlBbGxvY2F0
ZWQgYml0bWFwLgotICAgIGF1dG8gY2xlYXJOZXdseUFsbG9jYXRlZCA9IFsmXSAoTWFya2VkQmxv
Y2sqIGJsb2NrKSB7Ci0gICAgICAgIGJsb2NrLT5jbGVhck5ld2x5QWxsb2NhdGVkKCk7Ci0gICAg
fTsKLSAgICBtX25vcm1hbFNwYWNlLmxhcmdlQWxsb2NhdG9yLmZvckVhY2hCbG9jayhjbGVhck5l
d2x5QWxsb2NhdGVkKTsKLSAgICBtX2Rlc3RydWN0b3JTcGFjZS5sYXJnZUFsbG9jYXRvci5mb3JF
YWNoQmxvY2soY2xlYXJOZXdseUFsbG9jYXRlZCk7CisgICAgZm9yRWFjaEFsbG9jYXRvcigKKyAg
ICAgICAgWyZdIChNYXJrZWRBbGxvY2F0b3ImIGFsbG9jYXRvciwgc2l6ZV90IHNpemUsIEFsbG9j
YXRvckF0dHJpYnV0ZXMpIC0+IEl0ZXJhdGlvblN0YXR1cyB7CisgICAgICAgICAgICBpZiAoIXNp
emUpIHsKKyAgICAgICAgICAgICAgICAvLyBUaGlzIG1lYW5zIGl0J3MgYSBsYXJnZUFsbG9jYXRv
ci4KKyAgICAgICAgICAgICAgICBhbGxvY2F0b3IuZm9yRWFjaEJsb2NrKAorICAgICAgICAgICAg
ICAgICAgICBbJl0gKE1hcmtlZEJsb2NrKiBibG9jaykgeworICAgICAgICAgICAgICAgICAgICAg
ICAgYmxvY2stPmNsZWFyTmV3bHlBbGxvY2F0ZWQoKTsKKyAgICAgICAgICAgICAgICAgICAgfSk7
CisgICAgICAgICAgICAgICAgcmV0dXJuIEl0ZXJhdGlvblN0YXR1czo6Q29udGludWU7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmIChNYXJrZWRCbG9jayogYmxv
Y2sgPSBhbGxvY2F0b3IudGFrZUxhc3RBY3RpdmVCbG9jaygpKQorICAgICAgICAgICAgICAgIGJs
b2NrLT5jbGVhck5ld2x5QWxsb2NhdGVkKCk7CisgICAgICAgICAgICByZXR1cm4gSXRlcmF0aW9u
U3RhdHVzOjpDb250aW51ZTsKKyAgICAgICAgfSk7CiAKICNpZiAhQVNTRVJUX0RJU0FCTEVECiAg
ICAgZm9yRWFjaEJsb2NrKApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2Vk
U3BhY2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRT
cGFjZS5oCShyZXZpc2lvbiAyMDM1MjUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9N
YXJrZWRTcGFjZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMiw2ICsyMiw3IEBACiAjaWZuZGVmIE1h
cmtlZFNwYWNlX2gKICNkZWZpbmUgTWFya2VkU3BhY2VfaAogCisjaW5jbHVkZSAiSXRlcmF0aW9u
U3RhdHVzLmgiCiAjaW5jbHVkZSAiTWFya2VkQWxsb2NhdG9yLmgiCiAjaW5jbHVkZSAiTWFya2Vk
QmxvY2suaCIKICNpbmNsdWRlICJNYXJrZWRCbG9ja1NldC5oIgpAQCAtNjMsMTEgKzY0LDE0IEBA
IHB1YmxpYzoKIAogICAgIE1hcmtlZEFsbG9jYXRvciYgYWxsb2NhdG9yRm9yKHNpemVfdCk7CiAg
ICAgTWFya2VkQWxsb2NhdG9yJiBkZXN0cnVjdG9yQWxsb2NhdG9yRm9yKHNpemVfdCk7CisgICAg
TWFya2VkQWxsb2NhdG9yJiBhdXhpbGlhcnlBbGxvY2F0b3JGb3Ioc2l6ZV90KTsKICAgICB2b2lk
KiBhbGxvY2F0ZVdpdGhEZXN0cnVjdG9yKHNpemVfdCk7CiAgICAgdm9pZCogYWxsb2NhdGVXaXRo
b3V0RGVzdHJ1Y3RvcihzaXplX3QpOworICAgIHZvaWQqIGFsbG9jYXRlQXV4aWxpYXJ5KHNpemVf
dCk7CiAKICAgICBTdWJzcGFjZSYgc3Vic3BhY2VGb3JPYmplY3RzV2l0aERlc3RydWN0b3IoKSB7
IHJldHVybiBtX2Rlc3RydWN0b3JTcGFjZTsgfQogICAgIFN1YnNwYWNlJiBzdWJzcGFjZUZvck9i
amVjdHNXaXRob3V0RGVzdHJ1Y3RvcigpIHsgcmV0dXJuIG1fbm9ybWFsU3BhY2U7IH0KKyAgICBT
dWJzcGFjZSYgc3Vic3BhY2VGb3JBdXhpbGlhcnlEYXRhKCkgeyByZXR1cm4gbV9hdXhpbGlhcnlT
cGFjZTsgfQogCiAgICAgdm9pZCByZXNldEFsbG9jYXRvcnMoKTsKIApAQCAtMTE0LDkgKzExOCwx
MiBAQCBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBKSVQ7CiAKICAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBGdW5jdG9yPiB2b2lkIGZvckVhY2hBbGxvY2F0b3IoY29uc3QgRnVuY3RvciYpOworICAg
IHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+IHZvaWQgZm9yRWFjaFN1YnNwYWNlKGNvbnN0IEZ1
bmN0b3ImKTsKKyAgICBNYXJrZWRBbGxvY2F0b3ImIGFsbG9jYXRvckZvcihTdWJzcGFjZSYsIHNp
emVfdCk7CiAKICAgICBTdWJzcGFjZSBtX2Rlc3RydWN0b3JTcGFjZTsKICAgICBTdWJzcGFjZSBt
X25vcm1hbFNwYWNlOworICAgIFN1YnNwYWNlIG1fYXV4aWxpYXJ5U3BhY2U7CiAKICAgICBIZWFw
KiBtX2hlYXA7CiAgICAgc2l6ZV90IG1fY2FwYWNpdHk7CkBAIC0xNDcsMjIgKzE1NCwxNyBAQCB0
ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPiBpbmxpbmUgdm9pZCBNCiAKIGlubGluZSBNYXJrZWRB
bGxvY2F0b3ImIE1hcmtlZFNwYWNlOjphbGxvY2F0b3JGb3Ioc2l6ZV90IGJ5dGVzKQogewotICAg
IEFTU0VSVChieXRlcyk7Ci0gICAgaWYgKGJ5dGVzIDw9IHByZWNpc2VDdXRvZmYpCi0gICAgICAg
IHJldHVybiBtX25vcm1hbFNwYWNlLnByZWNpc2VBbGxvY2F0b3JzWyhieXRlcyAtIDEpIC8gcHJl
Y2lzZVN0ZXBdOwotICAgIGlmIChieXRlcyA8PSBpbXByZWNpc2VDdXRvZmYpCi0gICAgICAgIHJl
dHVybiBtX25vcm1hbFNwYWNlLmltcHJlY2lzZUFsbG9jYXRvcnNbKGJ5dGVzIC0gMSkgLyBpbXBy
ZWNpc2VTdGVwXTsKLSAgICByZXR1cm4gbV9ub3JtYWxTcGFjZS5sYXJnZUFsbG9jYXRvcjsKKyAg
ICByZXR1cm4gYWxsb2NhdG9yRm9yKG1fbm9ybWFsU3BhY2UsIGJ5dGVzKTsKIH0KIAogaW5saW5l
IE1hcmtlZEFsbG9jYXRvciYgTWFya2VkU3BhY2U6OmRlc3RydWN0b3JBbGxvY2F0b3JGb3Ioc2l6
ZV90IGJ5dGVzKQogewotICAgIEFTU0VSVChieXRlcyk7Ci0gICAgaWYgKGJ5dGVzIDw9IHByZWNp
c2VDdXRvZmYpCi0gICAgICAgIHJldHVybiBtX2Rlc3RydWN0b3JTcGFjZS5wcmVjaXNlQWxsb2Nh
dG9yc1soYnl0ZXMgLSAxKSAvIHByZWNpc2VTdGVwXTsKLSAgICBpZiAoYnl0ZXMgPD0gaW1wcmVj
aXNlQ3V0b2ZmKQotICAgICAgICByZXR1cm4gbV9kZXN0cnVjdG9yU3BhY2UuaW1wcmVjaXNlQWxs
b2NhdG9yc1soYnl0ZXMgLSAxKSAvIGltcHJlY2lzZVN0ZXBdOwotICAgIHJldHVybiBtX2Rlc3Ry
dWN0b3JTcGFjZS5sYXJnZUFsbG9jYXRvcjsKKyAgICByZXR1cm4gYWxsb2NhdG9yRm9yKG1fZGVz
dHJ1Y3RvclNwYWNlLCBieXRlcyk7Cit9CisKK2lubGluZSBNYXJrZWRBbGxvY2F0b3ImIE1hcmtl
ZFNwYWNlOjphdXhpbGlhcnlBbGxvY2F0b3JGb3Ioc2l6ZV90IGJ5dGVzKQoreworICAgIHJldHVy
biBhbGxvY2F0b3JGb3IobV9hdXhpbGlhcnlTcGFjZSwgYnl0ZXMpOwogfQogCiBpbmxpbmUgdm9p
ZCogTWFya2VkU3BhY2U6OmFsbG9jYXRlV2l0aG91dERlc3RydWN0b3Ioc2l6ZV90IGJ5dGVzKQpA
QCAtMTc1LDE5ICsxNzcsMjIgQEAgaW5saW5lIHZvaWQqIE1hcmtlZFNwYWNlOjphbGxvY2F0ZVdp
dGhEZQogICAgIHJldHVybiBkZXN0cnVjdG9yQWxsb2NhdG9yRm9yKGJ5dGVzKS5hbGxvY2F0ZShi
eXRlcyk7CiB9CiAKK2lubGluZSB2b2lkKiBNYXJrZWRTcGFjZTo6YWxsb2NhdGVBdXhpbGlhcnko
c2l6ZV90IGJ5dGVzKQoreworICAgIHJldHVybiBhdXhpbGlhcnlBbGxvY2F0b3JGb3IoYnl0ZXMp
LmFsbG9jYXRlKGJ5dGVzKTsKK30KKwogdGVtcGxhdGUgPHR5cGVuYW1lIEZ1bmN0b3I+IGlubGlu
ZSB2b2lkIE1hcmtlZFNwYWNlOjpmb3JFYWNoQmxvY2soY29uc3QgRnVuY3RvciYgZnVuY3RvcikK
IHsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHByZWNpc2VDb3VudDsgKytpKQotICAgICAg
ICBtX25vcm1hbFNwYWNlLnByZWNpc2VBbGxvY2F0b3JzW2ldLmZvckVhY2hCbG9jayhmdW5jdG9y
KTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGltcHJlY2lzZUNvdW50OyArK2kpCi0gICAg
ICAgIG1fbm9ybWFsU3BhY2UuaW1wcmVjaXNlQWxsb2NhdG9yc1tpXS5mb3JFYWNoQmxvY2soZnVu
Y3Rvcik7Ci0gICAgbV9ub3JtYWxTcGFjZS5sYXJnZUFsbG9jYXRvci5mb3JFYWNoQmxvY2soZnVu
Y3Rvcik7Ci0KLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHByZWNpc2VDb3VudDsgKytpKQot
ICAgICAgICBtX2Rlc3RydWN0b3JTcGFjZS5wcmVjaXNlQWxsb2NhdG9yc1tpXS5mb3JFYWNoQmxv
Y2soZnVuY3Rvcik7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBpbXByZWNpc2VDb3VudDsg
KytpKQotICAgICAgICBtX2Rlc3RydWN0b3JTcGFjZS5pbXByZWNpc2VBbGxvY2F0b3JzW2ldLmZv
ckVhY2hCbG9jayhmdW5jdG9yKTsKLSAgICBtX2Rlc3RydWN0b3JTcGFjZS5sYXJnZUFsbG9jYXRv
ci5mb3JFYWNoQmxvY2soZnVuY3Rvcik7CisgICAgZm9yRWFjaFN1YnNwYWNlKAorICAgICAgICBb
Jl0gKFN1YnNwYWNlJiBzdWJzcGFjZSwgQWxsb2NhdG9yQXR0cmlidXRlcykgLT4gSXRlcmF0aW9u
U3RhdHVzIHsKKyAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcHJlY2lzZUNvdW50
OyArK2kpCisgICAgICAgICAgICAgICAgc3Vic3BhY2UucHJlY2lzZUFsbG9jYXRvcnNbaV0uZm9y
RWFjaEJsb2NrKGZ1bmN0b3IpOworICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBp
bXByZWNpc2VDb3VudDsgKytpKQorICAgICAgICAgICAgICAgIHN1YnNwYWNlLmltcHJlY2lzZUFs
bG9jYXRvcnNbaV0uZm9yRWFjaEJsb2NrKGZ1bmN0b3IpOworICAgICAgICAgICAgc3Vic3BhY2Uu
bGFyZ2VBbGxvY2F0b3IuZm9yRWFjaEJsb2NrKGZ1bmN0b3IpOworICAgICAgICAgICAgcmV0dXJu
IEl0ZXJhdGlvblN0YXR1czo6Q29udGludWU7CisgICAgICAgIH0pOwogfQogCiBpbmxpbmUgdm9p
ZCBNYXJrZWRTcGFjZTo6ZGlkQWRkQmxvY2soTWFya2VkQmxvY2sqIGJsb2NrKQpAQCAtMjI2LDYg
KzIzMSwzNiBAQCBpbmxpbmUgc2l6ZV90IE1hcmtlZFNwYWNlOjpjYXBhY2l0eSgpCiAgICAgcmV0
dXJuIG1fY2FwYWNpdHk7CiB9CiAKK3RlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+CitpbmxpbmUg
dm9pZCBNYXJrZWRTcGFjZTo6Zm9yRWFjaFN1YnNwYWNlKGNvbnN0IEZ1bmN0b3ImIGZ1bmMpCit7
CisgICAgQWxsb2NhdG9yQXR0cmlidXRlcyBhdHRyaWJ1dGVzOworICAgIAorICAgIGF0dHJpYnV0
ZXMuZGVzdHJ1Y3Rpb24gPSBOZWVkc0Rlc3RydWN0aW9uOworICAgIGF0dHJpYnV0ZXMuY2VsbEtp
bmQgPSBIZWFwQ2VsbDo6SlNDZWxsOworICAgIGlmIChmdW5jKG1fZGVzdHJ1Y3RvclNwYWNlLCBh
dHRyaWJ1dGVzKSA9PSBJdGVyYXRpb25TdGF0dXM6OkRvbmUpCisgICAgICAgIHJldHVybjsKKyAg
ICAKKyAgICBhdHRyaWJ1dGVzLmRlc3RydWN0aW9uID0gRG9lc05vdE5lZWREZXN0cnVjdGlvbjsK
KyAgICBhdHRyaWJ1dGVzLmNlbGxLaW5kID0gSGVhcENlbGw6OkpTQ2VsbDsKKyAgICBpZiAoZnVu
YyhtX25vcm1hbFNwYWNlLCBhdHRyaWJ1dGVzKSA9PSBJdGVyYXRpb25TdGF0dXM6OkRvbmUpCisg
ICAgICAgIHJldHVybjsKKworICAgIGF0dHJpYnV0ZXMuZGVzdHJ1Y3Rpb24gPSBEb2VzTm90TmVl
ZERlc3RydWN0aW9uOworICAgIGF0dHJpYnV0ZXMuY2VsbEtpbmQgPSBIZWFwQ2VsbDo6QXV4aWxp
YXJ5OworICAgIGZ1bmMobV9hdXhpbGlhcnlTcGFjZSwgYXR0cmlidXRlcyk7Cit9CisKK2lubGlu
ZSBNYXJrZWRBbGxvY2F0b3ImIE1hcmtlZFNwYWNlOjphbGxvY2F0b3JGb3IoU3Vic3BhY2UmIHNw
YWNlLCBzaXplX3QgYnl0ZXMpCit7CisgICAgQVNTRVJUKGJ5dGVzKTsKKyAgICBpZiAoYnl0ZXMg
PD0gcHJlY2lzZUN1dG9mZikKKyAgICAgICAgcmV0dXJuIHNwYWNlLnByZWNpc2VBbGxvY2F0b3Jz
WyhieXRlcyAtIDEpIC8gcHJlY2lzZVN0ZXBdOworICAgIGlmIChieXRlcyA8PSBpbXByZWNpc2VD
dXRvZmYpCisgICAgICAgIHJldHVybiBzcGFjZS5pbXByZWNpc2VBbGxvY2F0b3JzWyhieXRlcyAt
IDEpIC8gaW1wcmVjaXNlU3RlcF07CisgICAgcmV0dXJuIHNwYWNlLmxhcmdlQWxsb2NhdG9yOwor
fQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKIAogI2VuZGlmIC8vIE1hcmtlZFNwYWNlX2gK
</data>
<flag name="review"
          id="307939"
          type_id="1"
          status="+"
          setter="sam"
    />
          </attachment>
      

    </bug>

</bugzilla>