<?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>44389</bug_id>
          
          <creation_ts>2010-08-21 18:55:38 -0700</creation_ts>
          <short_desc>Switch the Blob implementation to using the blob data registration model</short_desc>
          <delta_ts>2010-12-20 17:20:58 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebCore JavaScript</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>51366</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Jian Li">jianli</reporter>
          <assigned_to name="Jian Li">jianli</assigned_to>
          <cc>abarth</cc>
    
    <cc>dimich</cc>
    
    <cc>eric</cc>
    
    <cc>fishd</cc>
    
    <cc>kinuko</cc>
    
    <cc>levin</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>267628</commentid>
    <comment_count>0</comment_count>
    <who name="Jian Li">jianli</who>
    <bug_when>2010-08-21 18:55:38 -0700</bug_when>
    <thetext>We need to update the Blob implementation in order to switch to the blob data registration model.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>267630</commentid>
    <comment_count>1</comment_count>
      <attachid>65043</attachid>
    <who name="Jian Li">jianli</who>
    <bug_when>2010-08-21 19:29:34 -0700</bug_when>
    <thetext>Created attachment 65043
Proposed Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>267637</commentid>
    <comment_count>2</comment_count>
      <attachid>65043</attachid>
    <who name="Darin Fisher (:fishd, Google)">fishd</who>
    <bug_when>2010-08-21 21:17:22 -0700</bug_when>
    <thetext>Comment on attachment 65043
Proposed Patch

WebCore/html/Blob.cpp:93
 +          static_cast&lt;const File*&gt;(this)-&gt;captureSnapshot(size, modificationTime);
nit: add a FIXME about eliminating this synchronous file operation perhaps?

WebCore/html/Blob.h:66
 +      virtual unsigned long long size() const { return static_cast&lt;long long&gt;(m_size); }
nit: looks like this static_cast shouldn&apos;t be necessary since m_size is type &quot;long long&quot;

WebCore/html/BlobBuilder.cpp:88
 +          file-&gt;captureSnapshot(snapshotSize, snapshotModificationTime);
same comment about snapshotting asynchronously one day.

WebCore/html/File.cpp:74
 +      // come up with an exception to throw if file size is not represetable.
represetable -&gt; representable

WebCore/html/File.cpp:86
 +      if (!getFileSize(m_path, snapshotSize) || !getFileModificationTime(m_path, modificationTime)) {
it would be nice to combine these into a single file system call.  that way in
chromium, it will be only a single synchronous IPC.  this can be deferred to
another patch of course.

WebCore/html/File.h:69
 +      void captureSnapshot(long long&amp; snapshotSize, double&amp; snapshotModificationTime) const;
please put a warning comment about the fact that this does a synchronous file operation.
we want people to think twice before calling this function.

WebCore/html/FormDataList.h:56
 +      class Item {
nit: nicer to put inner class definitions at the top of the public section?

WebCore/platform/network/FormData.cpp:143
 +               break;
indentation

WebCore/platform/network/FormData.cpp:222
 +                      name = name.replace(&quot;-&quot;, &quot;&quot;); // For safty, remove &apos;-&apos; from the filename snce some servers may not like it.
snce -&gt; since

those are just nits, so R=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>267649</commentid>
    <comment_count>3</comment_count>
    <who name="David Levin">levin</who>
    <bug_when>2010-08-21 23:39:35 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; (From update of attachment 65043 [details])
&gt; WebCore/platform/network/FormData.cpp:222
&gt;  +                      name = name.replace(&quot;-&quot;, &quot;&quot;); // For safty, remove &apos;-&apos; from the filename snce some servers may not like it.
&gt; snce -&gt; since
safty -&gt; safety
as well.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>271927</commentid>
    <comment_count>4</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-08-30 21:53:50 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/66452 might have broken Qt Linux Release minimal, Qt Linux ARMv5 Release, and Qt Linux ARMv7 Release</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>271950</commentid>
    <comment_count>5</comment_count>
    <who name="Jian Li">jianli</who>
    <bug_when>2010-08-30 23:30:52 -0700</bug_when>
    <thetext>Committed as http://trac.webkit.org/changeset/66452.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>65043</attachid>
            <date>2010-08-21 19:29:34 -0700</date>
            <delta_ts>2010-08-21 21:17:22 -0700</delta_ts>
            <desc>Proposed Patch</desc>
            <filename>44389</filename>
            <type>text/plain</type>
            <size>119964</size>
            <attacher name="Jian Li">jianli</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCAyZjAwYmIzLi5mZmUxZjE1IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzAgQEAKKzIwMTAtMDgt
MjEgIEppYW4gTGkgIDxqaWFubGlAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFN3aXRjaCB0aGUgQmxvYiBpbXBsZW1lbnRhdGlv
biB0byB1c2luZyB0aGUgYmxvYiBkYXRhIHJlZ2lzdHJhdGlvbiBtb2RlbAorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDQzODkKKworICAgICAgICBBZGQg
YSBuZXcgdGVzdCBhbmQgY2hhbmdlIGFuIGV4aXN0aW5nIHRlc3QuIEJvdGggdGVzdHMgYXJlIHdy
aXR0ZW4gaW4KKyAgICAgICAgYmV0dGVyIG9yZ2FuaXplZCB1dGlsaXR5IGZpbGVzIGFuZCBtb2R1
bGVzLgorCisgICAgICAgICogZmFzdC9maWxlcy9maWxlLXJlYWRlci1leHBlY3RlZC50eHQ6IFJl
bW92ZWQuCisgICAgICAgICogZmFzdC9maWxlcy9maWxlLXJlYWRlci5odG1sOiBSZW1vdmVkLgor
ICAgICAgICAqIGZhc3QvZmlsZXMvcmVhZC1ibG9iLWFzeW5jLWV4cGVjdGVkLnR4dDogQWRkZWQu
CisgICAgICAgICogZmFzdC9maWxlcy9yZWFkLWJsb2ItYXN5bmMuaHRtbDogQWRkZWQuCisgICAg
ICAgICogZmFzdC9maWxlcy9yZWFkLWZpbGUtYXN5bmMtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAg
ICAgICAgKiBmYXN0L2ZpbGVzL3JlYWQtZmlsZS1hc3luYy5odG1sOiBBZGRlZC4KKyAgICAgICAg
KiBmYXN0L2ZpbGVzL3Jlc291cmNlcy9VVEY4LTIudHh0OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0
L2ZpbGVzL3Jlc291cmNlcy9VVEY4LTMudHh0OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2ZpbGVz
L3Jlc291cmNlcy9yZWFkLWJsb2ItdGVzdC1jYXNlcy5qczogQWRkZWQuCisgICAgICAgICogZmFz
dC9maWxlcy9yZXNvdXJjZXMvcmVhZC1jb21tb24uanM6IEFkZGVkLgorICAgICAgICAqIGZhc3Qv
ZmlsZXMvcmVzb3VyY2VzL3JlYWQtZmlsZS10ZXN0LWNhc2VzLmpzOiBBZGRlZC4KKyAgICAgICAg
KiBmYXN0L2ZpbGVzL3Jlc291cmNlcy9zZXR1cC1mb3ItcmVhZC1jb21tb24uanM6IEFkZGVkLgor
ICAgICAgICAqIHBsYXRmb3JtL2d0ay9Ta2lwcGVkOiBBY2NvdW50IHRvIHRoZSB0ZXN0IGNoYW5n
ZXMgZm9yIGd0ay4KKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMtd2syL1NraXBwZWQ6IEFjY291bnQg
dG8gdGhlIHRlc3QgY2hhbmdlcyBmb3IgbWFjLXdrMi4KKyAgICAgICAgKiBwbGF0Zm9ybS9xdC9T
a2lwcGVkOiBBY2NvdW50IHRvIHRoZSB0ZXN0IGNoYW5nZXMgZm9yIHF0LgorICAgICAgICAqIHBs
YXRmb3JtL3dpbi9Ta2lwcGVkOiBBY2NvdW50IHRvIHRoZSB0ZXN0IGNoYW5nZXMgZm9yIHdpbi4K
KwogMjAxMC0wOC0yMCAgQWJoaXNoZWsgQXJ5YSAgPGluZmVybm9AY2hyb21pdW0ub3JnPgogCiAg
ICAgICAgIFJldmlld2VkIGJ5IERhcmluIEZpc2hlci4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3Rz
L2Zhc3QvZmlsZXMvZmlsZS1yZWFkZXItZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvZmFzdC9m
aWxlcy9maWxlLXJlYWRlci1leHBlY3RlZC50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IGRhZTkwYjUuLjAwMDAwMDAKLS0tIGEvTGF5b3V0VGVzdHMvZmFzdC9maWxlcy9maWxlLXJl
YWRlci1leHBlY3RlZC50eHQKKysrIC9kZXYvbnVsbApAQCAtMSwxMzUgKzAsMCBAQAotCi1UZXN0
IHJlYWRpbmcgYSBub24tZXhpc3RlbnQgZmlsZQotcmVhZHlTdGF0ZTogMAotUmVjZWl2ZWQgZXJy
b3IgZXZlbnQKLXJlYWR5U3RhdGU6IDIKLWVycm9yIGNvZGU6IDgKLVJlY2VpdmVkIGxvYWRlbmQg
ZXZlbnQKLVRlc3QgcmVhZGluZyBhbiBlbXB0eSBmaWxlIGFzIGJpbmFyeSBzdHJpbmcKLXJlYWR5
U3RhdGU6IDAKLVJlY2VpdmVkIGxvYWRzdGFydCBldmVudAotcmVhZHlTdGF0ZTogMQotUmVjZWl2
ZWQgbG9hZCBldmVudAotcmVhZHlTdGF0ZTogMgotcmVzdWx0IHNpemU6IDAKLXJlc3VsdDogCi1S
ZWNlaXZlZCBsb2FkZW5kIGV2ZW50Ci1UZXN0IHJlYWRpbmcgYW4gZW1wdHkgZmlsZSBhcyB0ZXh0
Ci1yZWFkeVN0YXRlOiAwCi1SZWNlaXZlZCBsb2Fkc3RhcnQgZXZlbnQKLXJlYWR5U3RhdGU6IDEK
LVJlY2VpdmVkIGxvYWQgZXZlbnQKLXJlYWR5U3RhdGU6IDIKLXJlc3VsdCBzaXplOiAwCi1yZXN1
bHQ6IAotUmVjZWl2ZWQgbG9hZGVuZCBldmVudAotVGVzdCByZWFkaW5nIGFuIGVtcHR5IGZpbGUg
YXMgZGF0YSBVUkwKLXJlYWR5U3RhdGU6IDAKLVJlY2VpdmVkIGxvYWRzdGFydCBldmVudAotcmVh
ZHlTdGF0ZTogMQotUmVjZWl2ZWQgbG9hZCBldmVudAotcmVhZHlTdGF0ZTogMgotcmVzdWx0IHNp
emU6IDUKLXJlc3VsdDogZGF0YToKLVJlY2VpdmVkIGxvYWRlbmQgZXZlbnQKLVRlc3QgcmVhZGlu
ZyBhIFVURi04IGZpbGUgYXMgYmluYXJ5IHN0cmluZwotcmVhZHlTdGF0ZTogMAotUmVjZWl2ZWQg
bG9hZHN0YXJ0IGV2ZW50Ci1yZWFkeVN0YXRlOiAxCi1SZWNlaXZlZCBsb2FkIGV2ZW50Ci1yZWFk
eVN0YXRlOiAyCi1yZXN1bHQgc2l6ZTogNQotcmVzdWx0OiBIZWxsbwotUmVjZWl2ZWQgbG9hZGVu
ZCBldmVudAotVGVzdCByZWFkaW5nIGEgYmluYXJ5IGZpbGUgYXMgYmluYXJ5IHN0cmluZwotcmVh
ZHlTdGF0ZTogMAotUmVjZWl2ZWQgbG9hZHN0YXJ0IGV2ZW50Ci1yZWFkeVN0YXRlOiAxCi1SZWNl
aXZlZCBsb2FkIGV2ZW50Ci1yZWFkeVN0YXRlOiAyCi1yZXN1bHQgc2l6ZTogOQotcmVzdWx0OiAw
eDAgMHgxIDB4MiAweDgwIDB4ODEgMHg4MiAweGZkIDB4ZmUgMHhmZgotUmVjZWl2ZWQgbG9hZGVu
ZCBldmVudAotVGVzdCByZWFkaW5nIGEgVVRGLTggZmlsZSBhcyB0ZXh0Ci1yZWFkeVN0YXRlOiAw
Ci1SZWNlaXZlZCBsb2Fkc3RhcnQgZXZlbnQKLXJlYWR5U3RhdGU6IDEKLVJlY2VpdmVkIGxvYWQg
ZXZlbnQKLXJlYWR5U3RhdGU6IDIKLXJlc3VsdCBzaXplOiA1Ci1yZXN1bHQ6IEhlbGxvCi1SZWNl
aXZlZCBsb2FkZW5kIGV2ZW50Ci1UZXN0IHJlYWRpbmcgYSBVVEYtMTZCRSBCT00gZmlsZSBhcyB0
ZXh0Ci1yZWFkeVN0YXRlOiAwCi1SZWNlaXZlZCBsb2Fkc3RhcnQgZXZlbnQKLXJlYWR5U3RhdGU6
IDEKLVJlY2VpdmVkIGxvYWQgZXZlbnQKLXJlYWR5U3RhdGU6IDIKLXJlc3VsdCBzaXplOiA1Ci1y
ZXN1bHQ6IEhlbGxvCi1SZWNlaXZlZCBsb2FkZW5kIGV2ZW50Ci1UZXN0IHJlYWRpbmcgYSBVVEYt
MTZMRSBCT00gZmlsZSBhcyB0ZXh0Ci1yZWFkeVN0YXRlOiAwCi1SZWNlaXZlZCBsb2Fkc3RhcnQg
ZXZlbnQKLXJlYWR5U3RhdGU6IDEKLVJlY2VpdmVkIGxvYWQgZXZlbnQKLXJlYWR5U3RhdGU6IDIK
LXJlc3VsdCBzaXplOiA1Ci1yZXN1bHQ6IEhlbGxvCi1SZWNlaXZlZCBsb2FkZW5kIGV2ZW50Ci1U
ZXN0IHJlYWRpbmcgYSBVVEYtOCBCT00gZmlsZSBhcyB0ZXh0Ci1yZWFkeVN0YXRlOiAwCi1SZWNl
aXZlZCBsb2Fkc3RhcnQgZXZlbnQKLXJlYWR5U3RhdGU6IDEKLVJlY2VpdmVkIGxvYWQgZXZlbnQK
LXJlYWR5U3RhdGU6IDIKLXJlc3VsdCBzaXplOiA1Ci1yZXN1bHQ6IEhlbGxvCi1SZWNlaXZlZCBs
b2FkZW5kIGV2ZW50Ci1UZXN0IHJlYWRpbmcgYSBVVEYtMTZCRSBmaWxlIGFzIHRleHQgd2l0aCBV
VEYtMTZCRSBlbmNvZGluZwotcmVhZHlTdGF0ZTogMAotUmVjZWl2ZWQgbG9hZHN0YXJ0IGV2ZW50
Ci1yZWFkeVN0YXRlOiAxCi1SZWNlaXZlZCBsb2FkIGV2ZW50Ci1yZWFkeVN0YXRlOiAyCi1yZXN1
bHQgc2l6ZTogNQotcmVzdWx0OiBIZWxsbwotUmVjZWl2ZWQgbG9hZGVuZCBldmVudAotVGVzdCBy
ZWFkaW5nIGEgVVRGLTE2QkUgQk9NIGZpbGUgYXMgdGV4dCB3aXRoIFVURjggZW5jb2RpbmcKLXJl
YWR5U3RhdGU6IDAKLVJlY2VpdmVkIGxvYWRzdGFydCBldmVudAotcmVhZHlTdGF0ZTogMQotUmVj
ZWl2ZWQgbG9hZCBldmVudAotcmVhZHlTdGF0ZTogMgotcmVzdWx0IHNpemU6IDUKLXJlc3VsdDog
SGVsbG8KLVJlY2VpdmVkIGxvYWRlbmQgZXZlbnQKLVRlc3QgcmVhZGluZyBhIFVURi0xNkJFIEJP
TSBmaWxlIGFzIHRleHQgd2l0aCBpbnZhbGlkIGVuY29kaW5nCi1yZWFkeVN0YXRlOiAwCi1SZWNl
aXZlZCBsb2Fkc3RhcnQgZXZlbnQKLXJlYWR5U3RhdGU6IDEKLVJlY2VpdmVkIGxvYWQgZXZlbnQK
LXJlYWR5U3RhdGU6IDIKLXJlc3VsdCBzaXplOiA1Ci1yZXN1bHQ6IEhlbGxvCi1SZWNlaXZlZCBs
b2FkZW5kIGV2ZW50Ci1UZXN0IHJlYWRpbmcgYSBVVEYtOCBmaWxlIGFzIGRhdGEgVVJMCi1yZWFk
eVN0YXRlOiAwCi1SZWNlaXZlZCBsb2Fkc3RhcnQgZXZlbnQKLXJlYWR5U3RhdGU6IDEKLVJlY2Vp
dmVkIGxvYWQgZXZlbnQKLXJlYWR5U3RhdGU6IDIKLXJlc3VsdCBzaXplOiAzMQotcmVzdWx0OiBk
YXRhOnRleHQvcGxhaW47YmFzZTY0LFNHVnNiRzg9Ci1SZWNlaXZlZCBsb2FkZW5kIGV2ZW50Ci1U
ZXN0IGNhbGxpbmcgbXVsdGlwbGUgcmVhZCBtZXRob2RzIGFuZCBvbmx5IGxhc3Qgb25lIGlzIHBy
b2Nlc3NlZAotcmVhZHlTdGF0ZTogMAotUmVjZWl2ZWQgbG9hZHN0YXJ0IGV2ZW50Ci1yZWFkeVN0
YXRlOiAxCi1SZWNlaXZlZCBsb2FkIGV2ZW50Ci1yZWFkeVN0YXRlOiAyCi1yZXN1bHQgc2l6ZTog
MzEKLXJlc3VsdDogZGF0YTp0ZXh0L3BsYWluO2Jhc2U2NCxTR1ZzYkc4PQotUmVjZWl2ZWQgbG9h
ZGVuZCBldmVudAotRE9ORQotCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2ZpbGVzL2Zp
bGUtcmVhZGVyLmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0L2ZpbGVzL2ZpbGUtcmVhZGVyLmh0bWwK
ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdiYWJiYjEuLjAwMDAwMDAKLS0tIGEvTGF5
b3V0VGVzdHMvZmFzdC9maWxlcy9maWxlLXJlYWRlci5odG1sCisrKyAvZGV2L251bGwKQEAgLTEs
MjU3ICswLDAgQEAKLTwhRE9DVFlQRSBodG1sPgotPGh0bWw+Ci08Ym9keT4KLTxpbnB1dCB0eXBl
PSJmaWxlIiBuYW1lPSJmaWxlIiBpZD0iZmlsZSIgb25jaGFuZ2U9Im9uSW5wdXRGaWxlQ2hhbmdl
KCkiIG11bHRpcGxlPgotPHByZSBpZD0nY29uc29sZSc+PC9wcmU+Ci0KLTxzY3JpcHQ+Ci12YXIg
dGVzdENhc2VzID0gWwotICAgICJ0ZXN0UmVhZGluZ05vbkV4aXN0ZW50RmlsZSIsCi0gICAgInRl
c3RSZWFkaW5nRW1wdHlGaWxlQXNCaW5hcnlTdHJpbmciLAotICAgICJ0ZXN0UmVhZGluZ0VtcHR5
RmlsZUFzVGV4dCIsCi0gICAgInRlc3RSZWFkaW5nRW1wdHlGaWxlQXNEYXRhVVJMIiwKLSAgICAi
dGVzdFJlYWRpbmdVVEY4RW5jb2RlZEZpbGVBc0JpbmFyeVN0cmluZyIsCi0gICAgInRlc3RSZWFk
aW5nQmluYXJ5RmlsZUFzQmluYXJ5U3RyaW5nIiwKLSAgICAidGVzdFJlYWRpbmdVVEY4RW5jb2Rl
ZEZpbGVBc1RleHQiLAotICAgICJ0ZXN0UmVhZGluZ1VURjE2QkVCT01FbmNvZGVkRmlsZUFzVGV4
dCIsCi0gICAgInRlc3RSZWFkaW5nVVRGMTZMRUJPTUVuY29kZWRGaWxlQXNUZXh0IiwKLSAgICAi
dGVzdFJlYWRpbmdVVEY4Qk9NRW5jb2RlZEZpbGVBc1RleHQiLAotICAgICJ0ZXN0UmVhZGluZ1VU
RjE2QkVFbmNvZGVkRmlsZUFzVGV4dFdpdGhVVEYxNkVuY29kaW5nIiwKLSAgICAidGVzdFJlYWRp
bmdVVEYxNkJFQk9NRW5jb2RlZEZpbGVBc1RleHRXaXRoVVRGOEVuY29kaW5nIiwKLSAgICAidGVz
dFJlYWRpbmdVVEYxNkJFQk9NRW5jb2RlZEZpbGVBc1RleHRXaXRoSW52YWxpZEVuY29kaW5nIiwK
LSAgICAidGVzdFJlYWRpbmdVVEY4RW5jb2RlZEZpbGVBc0RhdGFVUkwiLAotICAgICJ0ZXN0TXVs
dGlwbGVSZWFkcyIsCi1dOwotdmFyIHRlc3RJbmRleCA9IDA7Ci0KLXZhciB0ZXN0RmlsZUluZm9M
aXN0ID0gWwotICAgIHsgJ25hbWUnOiAnbm9uLWV4aXN0ZW50JywgJ3BhdGgnOiAncmVzb3VyY2Vz
L25vbi1leGlzdGVudCcgfSwKLSAgICB7ICduYW1lJzogJ2VtcHR5LWZpbGUnLCAncGF0aCc6ICdy
ZXNvdXJjZXMvZW1wdHktZmlsZScgfSwKLSAgICB7ICduYW1lJzogJ1VURjgtZmlsZScsICdwYXRo
JzogJ3Jlc291cmNlcy9VVEY4LnR4dCcgfSwKLSAgICB7ICduYW1lJzogJ1VURjE2QkUtQk9NLWZp
bGUnLCAncGF0aCc6ICdyZXNvdXJjZXMvVVRGMTZCRS1CT00udHh0JyB9LAotICAgIHsgJ25hbWUn
OiAnVVRGMTZMRS1CT00tZmlsZScsICdwYXRoJzogJ3Jlc291cmNlcy9VVEYxNkxFLUJPTS50eHQn
IH0sCi0gICAgeyAnbmFtZSc6ICdVVEY4LUJPTS1maWxlJywgJ3BhdGgnOiAncmVzb3VyY2VzL1VU
RjgtQk9NLnR4dCcgfSwKLSAgICB7ICduYW1lJzogJ1VURjE2QkUtZmlsZScsICdwYXRoJzogJ3Jl
c291cmNlcy9VVEYxNkJFLnR4dCcgfSwKLSAgICB7ICduYW1lJzogJ2JpbmFyeS1maWxlJywgJ3Bh
dGgnOiAncmVzb3VyY2VzL2JpbmFyeS1maWxlJyB9LAotXTsKLXZhciB0ZXN0RmlsZXMgPSB7IH07
Ci0KLWZ1bmN0aW9uIGxvZyhtZXNzYWdlKQotewotICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlk
KCdjb25zb2xlJykuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUobWVzc2FnZSAr
ICJcbiIpKTsKLX0KLQotZnVuY3Rpb24gaXNBU0NJSVN0cmluZyhzdHIpCi17Ci0gICAgZm9yICh2
YXIgaSA9IDA7IGkgPCBzdHIubGVuZ3RoOyArK2kpIHsKLSAgICAgICAgaWYgKHN0ci5jaGFyQ29k
ZUF0KGkpID49IDEyOCkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgcmV0
dXJuIHRydWU7Ci19Ci0KLWZ1bmN0aW9uIHRvSGV4YWRlY2ltYWwoc3RyKQotewotICAgIHZhciBy
ZXN1bHQgPSAiIjsKLSAgICBmb3IgKHZhciBpID0gMDsgaSA8IHN0ci5sZW5ndGg7ICsraSkgewot
ICAgICAgICB2YXIgaGV4ID0gIjB4IiArIChzdHIuY2hhckNvZGVBdChpKSAmIDB4RkYpLnRvU3Ry
aW5nKDE2KTsKLSAgICAgICAgaWYgKGkgPiAwKQotICAgICAgICAgICAgcmVzdWx0ICs9ICIgIjsK
LSAgICAgICAgcmVzdWx0ICs9IGhleDsKLSAgICB9Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQot
ZnVuY3Rpb24gY3JlYXRlRmlsZVJlYWRlcigpCi17Ci0gICAgdmFyIHJlYWRlciA9IG5ldyBGaWxl
UmVhZGVyKCk7Ci0KLSAgICByZWFkZXIub25sb2Fkc3RhcnQgPSBsb2FkU3RhcnRlZDsKLSAgICBy
ZWFkZXIub25sb2FkID0gbG9hZGVkOwotICAgIHJlYWRlci5vbmFib3J0ID0gbG9nRXZlbnQ7Ci0g
ICAgcmVhZGVyLm9ubG9hZGVuZCA9IGxvYWRFbmRlZDsKLSAgICByZWFkZXIub25lcnJvciA9IGxv
YWRGYWlsZWQ7Ci0KLSAgICBsb2coInJlYWR5U3RhdGU6ICIgKyByZWFkZXIucmVhZHlTdGF0ZSk7
Ci0gICAgcmV0dXJuIHJlYWRlcjsKLX0KLQotZnVuY3Rpb24gbG9nRXZlbnQoZXZlbnQpCi17Ci0g
ICAgbG9nKCJSZWNlaXZlZCAiICsgZXZlbnQudHlwZSArICIgZXZlbnQiKTsKLX0KLQotZnVuY3Rp
b24gbG9hZFN0YXJ0ZWQoZXZlbnQpCi17Ci0gICAgbG9nRXZlbnQoZXZlbnQpOwotICAgIGxvZygi
cmVhZHlTdGF0ZTogIiArIGV2ZW50LnRhcmdldC5yZWFkeVN0YXRlKTsKLX0KLQotZnVuY3Rpb24g
bG9hZGVkKGV2ZW50KQotewotICAgIGxvZ0V2ZW50KGV2ZW50KTsKLSAgICBsb2coInJlYWR5U3Rh
dGU6ICIgKyBldmVudC50YXJnZXQucmVhZHlTdGF0ZSk7Ci0gICAgbG9nKCJyZXN1bHQgc2l6ZTog
IiArIGV2ZW50LnRhcmdldC5yZXN1bHQubGVuZ3RoKTsKLQotICAgIHZhciByZXN1bHQgPSBldmVu
dC50YXJnZXQucmVzdWx0OwotICAgIHZhciByZXN1bHRPdXRwdXQgPSBpc0FTQ0lJU3RyaW5nKHJl
c3VsdCkgPyByZXN1bHQgOiB0b0hleGFkZWNpbWFsKHJlc3VsdCk7Ci0gICAgbG9nKCJyZXN1bHQ6
ICIgKyByZXN1bHRPdXRwdXQpOwotfQotCi1mdW5jdGlvbiBsb2FkRmFpbGVkKGV2ZW50KQotewot
ICAgIGxvZ0V2ZW50KGV2ZW50KTsKLSAgICBsb2coInJlYWR5U3RhdGU6ICIgKyBldmVudC50YXJn
ZXQucmVhZHlTdGF0ZSk7Ci0gICAgbG9nKCJlcnJvciBjb2RlOiAiICsgZXZlbnQudGFyZ2V0LmVy
cm9yLmNvZGUpOwotfQotCi1mdW5jdGlvbiBsb2FkRW5kZWQoZXZlbnQpCi17Ci0gICAgbG9nRXZl
bnQoZXZlbnQpOwotICAgIHJ1bk5leHRUZXN0KCk7Ci19Ci0KLWZ1bmN0aW9uIG9uSW5wdXRGaWxl
Q2hhbmdlKCkKLXsKLSAgICB2YXIgZmlsZXMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZmls
ZSIpLmZpbGVzOwotICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZmlsZXMubGVuZ3RoOyBpKyspCi0g
ICAgICAgIHRlc3RGaWxlc1t0ZXN0RmlsZUluZm9MaXN0W2ldWyduYW1lJ11dID0gZmlsZXNbaV07
Ci0KLSAgICBydW5OZXh0VGVzdCgpOwotfQotCi1mdW5jdGlvbiBydW5OZXh0VGVzdCgpCi17Ci0g
ICAgaWYgKHRlc3RJbmRleCA8IHRlc3RDYXNlcy5sZW5ndGgpIHsKLSAgICAgICAgdGVzdEluZGV4
Kys7Ci0gICAgICAgIHdpbmRvd1t0ZXN0Q2FzZXNbdGVzdEluZGV4IC0gMV1dKCk7Ci0gICAgfSBl
bHNlIHsKLSAgICAgICAgbG9nKCJET05FIik7Ci0gICAgICAgIGlmICh3aW5kb3cubGF5b3V0VGVz
dENvbnRyb2xsZXIpCi0gICAgICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5ub3RpZnlEb25l
KCk7Ci0gICAgfQotfQotCi1mdW5jdGlvbiB0ZXN0UmVhZGluZ05vbkV4aXN0ZW50RmlsZSgpCi17
Ci0gICAgbG9nKCJUZXN0IHJlYWRpbmcgYSBub24tZXhpc3RlbnQgZmlsZSIpOwotICAgIHZhciBy
ZWFkZXIgPSBjcmVhdGVGaWxlUmVhZGVyKCk7Ci0gICAgcmVhZGVyLnJlYWRBc0JpbmFyeVN0cmlu
Zyh0ZXN0RmlsZXNbJ25vbi1leGlzdGVudCddKTsKLX0KLQotZnVuY3Rpb24gdGVzdFJlYWRpbmdF
bXB0eUZpbGVBc0JpbmFyeVN0cmluZygpCi17Ci0gICAgbG9nKCJUZXN0IHJlYWRpbmcgYW4gZW1w
dHkgZmlsZSBhcyBiaW5hcnkgc3RyaW5nIik7Ci0gICAgdmFyIHJlYWRlciA9IGNyZWF0ZUZpbGVS
ZWFkZXIoKTsKLSAgICByZWFkZXIucmVhZEFzQmluYXJ5U3RyaW5nKHRlc3RGaWxlc1snZW1wdHkt
ZmlsZSddKTsKLX0KLQotZnVuY3Rpb24gdGVzdFJlYWRpbmdFbXB0eUZpbGVBc1RleHQoKQotewot
ICAgIGxvZygiVGVzdCByZWFkaW5nIGFuIGVtcHR5IGZpbGUgYXMgdGV4dCIpOwotICAgIHZhciBy
ZWFkZXIgPSBjcmVhdGVGaWxlUmVhZGVyKCk7Ci0gICAgcmVhZGVyLnJlYWRBc1RleHQodGVzdEZp
bGVzWydlbXB0eS1maWxlJ10pOwotfQotCi1mdW5jdGlvbiB0ZXN0UmVhZGluZ0VtcHR5RmlsZUFz
RGF0YVVSTCgpCi17Ci0gICAgbG9nKCJUZXN0IHJlYWRpbmcgYW4gZW1wdHkgZmlsZSBhcyBkYXRh
IFVSTCIpOwotICAgIHZhciByZWFkZXIgPSBjcmVhdGVGaWxlUmVhZGVyKCk7Ci0gICAgcmVhZGVy
LnJlYWRBc0RhdGFVUkwodGVzdEZpbGVzWydlbXB0eS1maWxlJ10pOwotfQotCi1mdW5jdGlvbiB0
ZXN0UmVhZGluZ1VURjhFbmNvZGVkRmlsZUFzQmluYXJ5U3RyaW5nKCkKLXsKLSAgICBsb2coIlRl
c3QgcmVhZGluZyBhIFVURi04IGZpbGUgYXMgYmluYXJ5IHN0cmluZyIpOwotICAgIHZhciByZWFk
ZXIgPSBjcmVhdGVGaWxlUmVhZGVyKCk7Ci0gICAgcmVhZGVyLnJlYWRBc0JpbmFyeVN0cmluZyh0
ZXN0RmlsZXNbJ1VURjgtZmlsZSddKTsKLX0KLQotZnVuY3Rpb24gdGVzdFJlYWRpbmdCaW5hcnlG
aWxlQXNCaW5hcnlTdHJpbmcoKQotewotICAgIGxvZygiVGVzdCByZWFkaW5nIGEgYmluYXJ5IGZp
bGUgYXMgYmluYXJ5IHN0cmluZyIpOwotICAgIHZhciByZWFkZXIgPSBjcmVhdGVGaWxlUmVhZGVy
KCk7Ci0gICAgcmVhZGVyLnJlYWRBc0JpbmFyeVN0cmluZyh0ZXN0RmlsZXNbJ2JpbmFyeS1maWxl
J10pOwotfQotCi1mdW5jdGlvbiB0ZXN0UmVhZGluZ1VURjhFbmNvZGVkRmlsZUFzVGV4dCgpCi17
Ci0gICAgbG9nKCJUZXN0IHJlYWRpbmcgYSBVVEYtOCBmaWxlIGFzIHRleHQiKTsKLSAgICB2YXIg
cmVhZGVyID0gY3JlYXRlRmlsZVJlYWRlcigpOwotICAgIHJlYWRlci5yZWFkQXNUZXh0KHRlc3RG
aWxlc1snVVRGOC1maWxlJ10pOwotfQotCi1mdW5jdGlvbiB0ZXN0UmVhZGluZ1VURjE2QkVCT01F
bmNvZGVkRmlsZUFzVGV4dCgpCi17Ci0gICAgbG9nKCJUZXN0IHJlYWRpbmcgYSBVVEYtMTZCRSBC
T00gZmlsZSBhcyB0ZXh0Iik7Ci0gICAgdmFyIHJlYWRlciA9IGNyZWF0ZUZpbGVSZWFkZXIoKTsK
LSAgICByZWFkZXIucmVhZEFzVGV4dCh0ZXN0RmlsZXNbJ1VURjE2QkUtQk9NLWZpbGUnXSk7Ci19
Ci0KLWZ1bmN0aW9uIHRlc3RSZWFkaW5nVVRGMTZMRUJPTUVuY29kZWRGaWxlQXNUZXh0KCkKLXsK
LSAgICBsb2coIlRlc3QgcmVhZGluZyBhIFVURi0xNkxFIEJPTSBmaWxlIGFzIHRleHQiKTsKLSAg
ICB2YXIgcmVhZGVyID0gY3JlYXRlRmlsZVJlYWRlcigpOwotICAgIHJlYWRlci5yZWFkQXNUZXh0
KHRlc3RGaWxlc1snVVRGMTZMRS1CT00tZmlsZSddKTsKLX0KLQotZnVuY3Rpb24gdGVzdFJlYWRp
bmdVVEY4Qk9NRW5jb2RlZEZpbGVBc1RleHQoKQotewotICAgIGxvZygiVGVzdCByZWFkaW5nIGEg
VVRGLTggQk9NIGZpbGUgYXMgdGV4dCIpOwotICAgIHZhciByZWFkZXIgPSBjcmVhdGVGaWxlUmVh
ZGVyKCk7Ci0gICAgcmVhZGVyLnJlYWRBc1RleHQodGVzdEZpbGVzWydVVEY4LUJPTS1maWxlJ10p
OwotfQotCi1mdW5jdGlvbiB0ZXN0UmVhZGluZ1VURjE2QkVFbmNvZGVkRmlsZUFzVGV4dFdpdGhV
VEYxNkVuY29kaW5nKCkKLXsKLSAgICBsb2coIlRlc3QgcmVhZGluZyBhIFVURi0xNkJFIGZpbGUg
YXMgdGV4dCB3aXRoIFVURi0xNkJFIGVuY29kaW5nIik7Ci0gICAgdmFyIHJlYWRlciA9IGNyZWF0
ZUZpbGVSZWFkZXIoKTsKLSAgICByZWFkZXIucmVhZEFzVGV4dCh0ZXN0RmlsZXNbJ1VURjE2QkUt
ZmlsZSddLCAiVVRGLTE2QkUiKTsKLX0KLQotZnVuY3Rpb24gdGVzdFJlYWRpbmdVVEYxNkJFQk9N
RW5jb2RlZEZpbGVBc1RleHRXaXRoVVRGOEVuY29kaW5nKCkKLXsKLSAgICBsb2coIlRlc3QgcmVh
ZGluZyBhIFVURi0xNkJFIEJPTSBmaWxlIGFzIHRleHQgd2l0aCBVVEY4IGVuY29kaW5nIik7Ci0g
ICAgdmFyIHJlYWRlciA9IGNyZWF0ZUZpbGVSZWFkZXIoKTsKLSAgICByZWFkZXIucmVhZEFzVGV4
dCh0ZXN0RmlsZXNbJ1VURjE2QkUtQk9NLWZpbGUnXSwgIlVURi04Iik7Ci19Ci0KLWZ1bmN0aW9u
IHRlc3RSZWFkaW5nVVRGMTZCRUJPTUVuY29kZWRGaWxlQXNUZXh0V2l0aEludmFsaWRFbmNvZGlu
ZygpCi17Ci0gICAgbG9nKCJUZXN0IHJlYWRpbmcgYSBVVEYtMTZCRSBCT00gZmlsZSBhcyB0ZXh0
IHdpdGggaW52YWxpZCBlbmNvZGluZyIpOwotICAgIHZhciByZWFkZXIgPSBjcmVhdGVGaWxlUmVh
ZGVyKCk7Ci0gICAgcmVhZGVyLnJlYWRBc1RleHQodGVzdEZpbGVzWydVVEYxNkJFLUJPTS1maWxl
J10sICJBbnlJbnZhbGlkRW5jb2RpbmciKTsKLX0KLQotZnVuY3Rpb24gdGVzdFJlYWRpbmdVVEY4
RW5jb2RlZEZpbGVBc0RhdGFVUkwoKQotewotICAgIGxvZygiVGVzdCByZWFkaW5nIGEgVVRGLTgg
ZmlsZSBhcyBkYXRhIFVSTCIpOwotICAgIHZhciByZWFkZXIgPSBjcmVhdGVGaWxlUmVhZGVyKCk7
Ci0gICAgcmVhZGVyLnJlYWRBc0RhdGFVUkwodGVzdEZpbGVzWydVVEY4LWZpbGUnXSk7Ci19Ci0K
LWZ1bmN0aW9uIHRlc3RNdWx0aXBsZVJlYWRzKCkKLXsKLSAgICBsb2coIlRlc3QgY2FsbGluZyBt
dWx0aXBsZSByZWFkIG1ldGhvZHMgYW5kIG9ubHkgbGFzdCBvbmUgaXMgcHJvY2Vzc2VkIik7Ci0g
ICAgdmFyIHJlYWRlciA9IGNyZWF0ZUZpbGVSZWFkZXIoKTsKLSAgICByZWFkZXIucmVhZEFzQmlu
YXJ5U3RyaW5nKHRlc3RGaWxlc1snVVRGOC1maWxlJ10pOwotICAgIHJlYWRlci5yZWFkQXNUZXh0
KHRlc3RGaWxlc1snVVRGOC1maWxlJ10pOwotICAgIHJlYWRlci5yZWFkQXNEYXRhVVJMKHRlc3RG
aWxlc1snVVRGOC1maWxlJ10pOwotfQotCi1mdW5jdGlvbiBydW5UZXN0cygpCi17Ci0gICAgdmFy
IHBhdGhzT25seSA9IHRlc3RGaWxlSW5mb0xpc3QubWFwKGZ1bmN0aW9uKGZpbGVTcGVjKSB7IHJl
dHVybiBmaWxlU3BlY1sncGF0aCddOyB9KTsKLSAgICBldmVudFNlbmRlci5iZWdpbkRyYWdXaXRo
RmlsZXMocGF0aHNPbmx5KTsKLSAgICBldmVudFNlbmRlci5tb3VzZU1vdmVUbygxMCwgMTApOwot
ICAgIGV2ZW50U2VuZGVyLm1vdXNlVXAoKTsKLX0KLQotaWYgKHdpbmRvdy5ldmVudFNlbmRlcikg
ewotICAgIGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQoKTsKLSAgICBsYXlvdXRUZXN0
Q29udHJvbGxlci53YWl0VW50aWxEb25lKCk7Ci0gICAgd2luZG93Lm9ubG9hZCA9IHJ1blRlc3Rz
OwotfQotPC9zY3JpcHQ+Ci08L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0
cy9mYXN0L2ZpbGVzL3JlYWQtYmxvYi1hc3luYy1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9m
YXN0L2ZpbGVzL3JlYWQtYmxvYi1hc3luYy1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMC4uMGMxMGQ1ZAotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3Rz
L2Zhc3QvZmlsZXMvcmVhZC1ibG9iLWFzeW5jLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDEyMyBA
QAorCitUZXN0IHJlYWRpbmcgYSBibG9iIGNvbnRhaW5pbmcgbm9uLWV4aXN0ZW50IGZpbGUKK3Jl
YWR5U3RhdGU6IDAKK1JlY2VpdmVkIGVycm9yIGV2ZW50CityZWFkeVN0YXRlOiAyCitlcnJvciBj
b2RlOiA4CitSZWNlaXZlZCBsb2FkZW5kIGV2ZW50CitUZXN0IHJlYWRpbmcgYSBibG9iIGNvbnRh
aW5pbmcgZXhpc3RlbnQgYW5kIG5vbi1leGlzdGVudCBmaWxlCityZWFkeVN0YXRlOiAwCitSZWNl
aXZlZCBlcnJvciBldmVudAorcmVhZHlTdGF0ZTogMgorZXJyb3IgY29kZTogOAorUmVjZWl2ZWQg
bG9hZGVuZCBldmVudAorVGVzdCByZWFkaW5nIGEgYmxvYiBjb250YWluaW5nIGVtcHR5IGZpbGUK
K3JlYWR5U3RhdGU6IDAKK1JlY2VpdmVkIGxvYWRzdGFydCBldmVudAorcmVhZHlTdGF0ZTogMQor
UmVjZWl2ZWQgbG9hZCBldmVudAorcmVhZHlTdGF0ZTogMgorcmVzdWx0IHNpemU6IDAKK3Jlc3Vs
dDogCitSZWNlaXZlZCBsb2FkZW5kIGV2ZW50CitUZXN0IHJlYWRpbmcgYSBibG9iIGNvbnRhaW5p
bmcgZW1wdHkgdGV4dAorcmVhZHlTdGF0ZTogMAorUmVjZWl2ZWQgbG9hZHN0YXJ0IGV2ZW50City
ZWFkeVN0YXRlOiAxCitSZWNlaXZlZCBsb2FkIGV2ZW50CityZWFkeVN0YXRlOiAyCityZXN1bHQg
c2l6ZTogMAorcmVzdWx0OiAKK1JlY2VpdmVkIGxvYWRlbmQgZXZlbnQKK1Rlc3QgcmVhZGluZyBh
IGJsb2IgY29udGFpbmluZyBlbXB0eSBmaWxlcyBhbmQgZW1wdHkgdGV4dHMKK3JlYWR5U3RhdGU6
IDAKK1JlY2VpdmVkIGxvYWRzdGFydCBldmVudAorcmVhZHlTdGF0ZTogMQorUmVjZWl2ZWQgbG9h
ZCBldmVudAorcmVhZHlTdGF0ZTogMgorcmVzdWx0IHNpemU6IDAKK3Jlc3VsdDogCitSZWNlaXZl
ZCBsb2FkZW5kIGV2ZW50CitUZXN0IHJlYWRpbmcgYSBibG9iIGNvbnRhaW5pbmcgc2luZ2xlIGZp
bGUKK3JlYWR5U3RhdGU6IDAKK1JlY2VpdmVkIGxvYWRzdGFydCBldmVudAorcmVhZHlTdGF0ZTog
MQorUmVjZWl2ZWQgbG9hZCBldmVudAorcmVhZHlTdGF0ZTogMgorcmVzdWx0IHNpemU6IDUKK3Jl
c3VsdDogSGVsbG8KK1JlY2VpdmVkIGxvYWRlbmQgZXZlbnQKK1Rlc3QgcmVhZGluZyBhIGJsb2Ig
Y29udGFpbmluZyBzaW5nbGUgdGV4dAorcmVhZHlTdGF0ZTogMAorUmVjZWl2ZWQgbG9hZHN0YXJ0
IGV2ZW50CityZWFkeVN0YXRlOiAxCitSZWNlaXZlZCBsb2FkIGV2ZW50CityZWFkeVN0YXRlOiAy
CityZXN1bHQgc2l6ZTogNQorcmVzdWx0OiBGaXJzdAorUmVjZWl2ZWQgbG9hZGVuZCBldmVudAor
VGVzdCByZWFkaW5nIGEgYmxvYiBjb250YWluaW5nIHNsaWNlZCBmaWxlCityZWFkeVN0YXRlOiAw
CitSZWNlaXZlZCBsb2Fkc3RhcnQgZXZlbnQKK3JlYWR5U3RhdGU6IDEKK1JlY2VpdmVkIGxvYWQg
ZXZlbnQKK3JlYWR5U3RhdGU6IDIKK3Jlc3VsdCBzaXplOiA1CityZXN1bHQ6IG9uZGVyCitSZWNl
aXZlZCBsb2FkZW5kIGV2ZW50CitUZXN0IHJlYWRpbmcgYSBibG9iIGNvbnRhaW5pbmcgc2xpY2Vk
IHRleHQKK3JlYWR5U3RhdGU6IDAKK1JlY2VpdmVkIGxvYWRzdGFydCBldmVudAorcmVhZHlTdGF0
ZTogMQorUmVjZWl2ZWQgbG9hZCBldmVudAorcmVhZHlTdGF0ZTogMgorcmVzdWx0IHNpemU6IDQK
K3Jlc3VsdDogaXJzdAorUmVjZWl2ZWQgbG9hZGVuZCBldmVudAorVGVzdCByZWFkaW5nIGEgYmxv
YiBjb250YWluaW5nIG11bHRpcGxlIGZpbGVzCityZWFkeVN0YXRlOiAwCitSZWNlaXZlZCBsb2Fk
c3RhcnQgZXZlbnQKK3JlYWR5U3RhdGU6IDEKK1JlY2VpdmVkIGxvYWQgZXZlbnQKK3JlYWR5U3Rh
dGU6IDIKK3Jlc3VsdCBzaXplOiAxOQorcmVzdWx0OiBIZWxsb1dvbmRlcmZ1bFdvcmxkCitSZWNl
aXZlZCBsb2FkZW5kIGV2ZW50CitUZXN0IHJlYWRpbmcgYSBibG9iIGNvbnRhaW5pbmcgbXVsdGlw
bGUgdGV4dHMKK3JlYWR5U3RhdGU6IDAKK1JlY2VpdmVkIGxvYWRzdGFydCBldmVudAorcmVhZHlT
dGF0ZTogMQorUmVjZWl2ZWQgbG9hZCBldmVudAorcmVhZHlTdGF0ZTogMgorcmVzdWx0IHNpemU6
IDE2CityZXN1bHQ6IEZpcnN0U2Vjb25kVGhpcmQKK1JlY2VpdmVkIGxvYWRlbmQgZXZlbnQKK1Rl
c3QgcmVhZGluZyBhIGh5YnJpZCBibG9iCityZWFkeVN0YXRlOiAwCitSZWNlaXZlZCBsb2Fkc3Rh
cnQgZXZlbnQKK3JlYWR5U3RhdGU6IDEKK1JlY2VpdmVkIGxvYWQgZXZlbnQKK3JlYWR5U3RhdGU6
IDIKK3Jlc3VsdCBzaXplOiAzNQorcmVzdWx0OiBGaXJzdEhlbGxvU2Vjb25kV29uZGVyZnVsV29y
bGRUaGlyZAorUmVjZWl2ZWQgbG9hZGVuZCBldmVudAorVGVzdCByZWFkaW5nIGEgc2xpY2VkIGh5
YnJpZCBibG9iCityZWFkeVN0YXRlOiAwCitSZWNlaXZlZCBsb2Fkc3RhcnQgZXZlbnQKK3JlYWR5
U3RhdGU6IDEKK1JlY2VpdmVkIGxvYWQgZXZlbnQKK3JlYWR5U3RhdGU6IDIKK3Jlc3VsdCBzaXpl
OiAxMgorcmVzdWx0OiBsbG9TZWNvbmRXb24KK1JlY2VpdmVkIGxvYWRlbmQgZXZlbnQKK1Rlc3Qg
cmVhZGluZyBhIHRyaXBsZS1zbGljZWQgaHlicmlkIGJsb2IKK3JlYWR5U3RhdGU6IDAKK1JlY2Vp
dmVkIGxvYWRzdGFydCBldmVudAorcmVhZHlTdGF0ZTogMQorUmVjZWl2ZWQgbG9hZCBldmVudAor
cmVhZHlTdGF0ZTogMgorcmVzdWx0IHNpemU6IDMwCityZXN1bHQ6IG9uZFdvbmRlcmZ1bFdvcmxk
VGhpcmRGb29sb1NlYworUmVjZWl2ZWQgbG9hZGVuZCBldmVudAorRE9ORQorCmRpZmYgLS1naXQg
YS9MYXlvdXRUZXN0cy9mYXN0L2ZpbGVzL3JlYWQtYmxvYi1hc3luYy5odG1sIGIvTGF5b3V0VGVz
dHMvZmFzdC9maWxlcy9yZWFkLWJsb2ItYXN5bmMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwLi44MDcwMTIzCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFz
dC9maWxlcy9yZWFkLWJsb2ItYXN5bmMuaHRtbApAQCAtMCwwICsxLDMxIEBACis8IURPQ1RZUEUg
aHRtbD4KKzxodG1sPgorPGJvZHk+Cis8aW5wdXQgdHlwZT0iZmlsZSIgbmFtZT0iZmlsZSIgaWQ9
ImZpbGUiIG9uY2hhbmdlPSJvbklucHV0RmlsZUNoYW5nZSh0ZXN0RmlsZUluZm9MaXN0KSIgbXVs
dGlwbGU+Cis8cHJlIGlkPSdjb25zb2xlJz48L3ByZT4KKworPHNjcmlwdCBzcmM9InJlc291cmNl
cy9zZXR1cC1mb3ItcmVhZC1jb21tb24uanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9InJlc291
cmNlcy9yZWFkLWNvbW1vbi5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0icmVzb3VyY2VzL3Jl
YWQtYmxvYi10ZXN0LWNhc2VzLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQ+Cit2YXIgdGVzdEZpbGVJ
bmZvTGlzdCA9IFsKKyAgICB7ICduYW1lJzogJ25vbi1leGlzdGVudCcsICdwYXRoJzogJ3Jlc291
cmNlcy9ub24tZXhpc3RlbnQnIH0sCisgICAgeyAnbmFtZSc6ICdlbXB0eS1maWxlJywgJ3BhdGgn
OiAncmVzb3VyY2VzL2VtcHR5LWZpbGUnIH0sCisgICAgeyAnbmFtZSc6ICdmaWxlMScsICdwYXRo
JzogJ3Jlc291cmNlcy9VVEY4LnR4dCcgfSwKKyAgICB7ICduYW1lJzogJ2ZpbGUyJywgJ3BhdGgn
OiAncmVzb3VyY2VzL1VURjgtMi50eHQnIH0sCisgICAgeyAnbmFtZSc6ICdmaWxlMycsICdwYXRo
JzogJ3Jlc291cmNlcy9VVEY4LTMudHh0JyB9LAorXTsKKworZnVuY3Rpb24gc3RhcnRUZXN0KHRl
c3RGaWxlcykKK3sKKyAgICBydW5OZXh0VGVzdCh0ZXN0RmlsZXMpOworfQorCitpZiAod2luZG93
LmV2ZW50U2VuZGVyKSB7CisgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4dCgpOwor
ICAgIGxheW91dFRlc3RDb250cm9sbGVyLndhaXRVbnRpbERvbmUoKTsKKyAgICB3aW5kb3cub25s
b2FkID0gZnVuY3Rpb24oKSB7IHJ1blRlc3RzKHRlc3RGaWxlSW5mb0xpc3QpOyB9Cit9Cis8L3Nj
cmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvZmls
ZXMvcmVhZC1maWxlLWFzeW5jLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2Zhc3QvZmlsZXMv
cmVhZC1maWxlLWFzeW5jLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwLi43NmZkNTVmCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9maWxl
cy9yZWFkLWZpbGUtYXN5bmMtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsMTQ3IEBACisKK1Rlc3Qg
cmVhZGluZyBhIG5vbi1leGlzdGVudCBmaWxlIGFzIGJpbmFyeSBzdHJpbmcKK3JlYWR5U3RhdGU6
IDAKK1JlY2VpdmVkIGVycm9yIGV2ZW50CityZWFkeVN0YXRlOiAyCitlcnJvciBjb2RlOiA4CitS
ZWNlaXZlZCBsb2FkZW5kIGV2ZW50CitUZXN0IHJlYWRpbmcgYSBub24tZXhpc3RlbnQgZmlsZSBh
cyB0ZXh0CityZWFkeVN0YXRlOiAwCitSZWNlaXZlZCBlcnJvciBldmVudAorcmVhZHlTdGF0ZTog
MgorZXJyb3IgY29kZTogOAorUmVjZWl2ZWQgbG9hZGVuZCBldmVudAorVGVzdCByZWFkaW5nIGEg
bm9uLWV4aXN0ZW50IGZpbGUgYXMgZGF0YSBVUkwKK3JlYWR5U3RhdGU6IDAKK1JlY2VpdmVkIGVy
cm9yIGV2ZW50CityZWFkeVN0YXRlOiAyCitlcnJvciBjb2RlOiA4CitSZWNlaXZlZCBsb2FkZW5k
IGV2ZW50CitUZXN0IHJlYWRpbmcgYW4gZW1wdHkgZmlsZSBhcyBiaW5hcnkgc3RyaW5nCityZWFk
eVN0YXRlOiAwCitSZWNlaXZlZCBsb2Fkc3RhcnQgZXZlbnQKK3JlYWR5U3RhdGU6IDEKK1JlY2Vp
dmVkIGxvYWQgZXZlbnQKK3JlYWR5U3RhdGU6IDIKK3Jlc3VsdCBzaXplOiAwCityZXN1bHQ6IAor
UmVjZWl2ZWQgbG9hZGVuZCBldmVudAorVGVzdCByZWFkaW5nIGFuIGVtcHR5IGZpbGUgYXMgdGV4
dAorcmVhZHlTdGF0ZTogMAorUmVjZWl2ZWQgbG9hZHN0YXJ0IGV2ZW50CityZWFkeVN0YXRlOiAx
CitSZWNlaXZlZCBsb2FkIGV2ZW50CityZWFkeVN0YXRlOiAyCityZXN1bHQgc2l6ZTogMAorcmVz
dWx0OiAKK1JlY2VpdmVkIGxvYWRlbmQgZXZlbnQKK1Rlc3QgcmVhZGluZyBhbiBlbXB0eSBmaWxl
IGFzIGRhdGEgVVJMCityZWFkeVN0YXRlOiAwCitSZWNlaXZlZCBsb2Fkc3RhcnQgZXZlbnQKK3Jl
YWR5U3RhdGU6IDEKK1JlY2VpdmVkIGxvYWQgZXZlbnQKK3JlYWR5U3RhdGU6IDIKK3Jlc3VsdCBz
aXplOiA1CityZXN1bHQ6IGRhdGE6CitSZWNlaXZlZCBsb2FkZW5kIGV2ZW50CitUZXN0IHJlYWRp
bmcgYSBVVEYtOCBmaWxlIGFzIGJpbmFyeSBzdHJpbmcKK3JlYWR5U3RhdGU6IDAKK1JlY2VpdmVk
IGxvYWRzdGFydCBldmVudAorcmVhZHlTdGF0ZTogMQorUmVjZWl2ZWQgbG9hZCBldmVudAorcmVh
ZHlTdGF0ZTogMgorcmVzdWx0IHNpemU6IDUKK3Jlc3VsdDogSGVsbG8KK1JlY2VpdmVkIGxvYWRl
bmQgZXZlbnQKK1Rlc3QgcmVhZGluZyBhIGJpbmFyeSBmaWxlIGFzIGJpbmFyeSBzdHJpbmcKK3Jl
YWR5U3RhdGU6IDAKK1JlY2VpdmVkIGxvYWRzdGFydCBldmVudAorcmVhZHlTdGF0ZTogMQorUmVj
ZWl2ZWQgbG9hZCBldmVudAorcmVhZHlTdGF0ZTogMgorcmVzdWx0IHNpemU6IDkKK3Jlc3VsdDog
MHgwIDB4MSAweDIgMHg4MCAweDgxIDB4ODIgMHhmZCAweGZlIDB4ZmYKK1JlY2VpdmVkIGxvYWRl
bmQgZXZlbnQKK1Rlc3QgcmVhZGluZyBhIFVURi04IGZpbGUgYXMgdGV4dAorcmVhZHlTdGF0ZTog
MAorUmVjZWl2ZWQgbG9hZHN0YXJ0IGV2ZW50CityZWFkeVN0YXRlOiAxCitSZWNlaXZlZCBsb2Fk
IGV2ZW50CityZWFkeVN0YXRlOiAyCityZXN1bHQgc2l6ZTogNQorcmVzdWx0OiBIZWxsbworUmVj
ZWl2ZWQgbG9hZGVuZCBldmVudAorVGVzdCByZWFkaW5nIGEgVVRGLTE2QkUgQk9NIGZpbGUgYXMg
dGV4dAorcmVhZHlTdGF0ZTogMAorUmVjZWl2ZWQgbG9hZHN0YXJ0IGV2ZW50CityZWFkeVN0YXRl
OiAxCitSZWNlaXZlZCBsb2FkIGV2ZW50CityZWFkeVN0YXRlOiAyCityZXN1bHQgc2l6ZTogNQor
cmVzdWx0OiBIZWxsbworUmVjZWl2ZWQgbG9hZGVuZCBldmVudAorVGVzdCByZWFkaW5nIGEgVVRG
LTE2TEUgQk9NIGZpbGUgYXMgdGV4dAorcmVhZHlTdGF0ZTogMAorUmVjZWl2ZWQgbG9hZHN0YXJ0
IGV2ZW50CityZWFkeVN0YXRlOiAxCitSZWNlaXZlZCBsb2FkIGV2ZW50CityZWFkeVN0YXRlOiAy
CityZXN1bHQgc2l6ZTogNQorcmVzdWx0OiBIZWxsbworUmVjZWl2ZWQgbG9hZGVuZCBldmVudAor
VGVzdCByZWFkaW5nIGEgVVRGLTggQk9NIGZpbGUgYXMgdGV4dAorcmVhZHlTdGF0ZTogMAorUmVj
ZWl2ZWQgbG9hZHN0YXJ0IGV2ZW50CityZWFkeVN0YXRlOiAxCitSZWNlaXZlZCBsb2FkIGV2ZW50
CityZWFkeVN0YXRlOiAyCityZXN1bHQgc2l6ZTogNQorcmVzdWx0OiBIZWxsbworUmVjZWl2ZWQg
bG9hZGVuZCBldmVudAorVGVzdCByZWFkaW5nIGEgVVRGLTE2QkUgZmlsZSBhcyB0ZXh0IHdpdGgg
VVRGLTE2QkUgZW5jb2RpbmcKK3JlYWR5U3RhdGU6IDAKK1JlY2VpdmVkIGxvYWRzdGFydCBldmVu
dAorcmVhZHlTdGF0ZTogMQorUmVjZWl2ZWQgbG9hZCBldmVudAorcmVhZHlTdGF0ZTogMgorcmVz
dWx0IHNpemU6IDUKK3Jlc3VsdDogSGVsbG8KK1JlY2VpdmVkIGxvYWRlbmQgZXZlbnQKK1Rlc3Qg
cmVhZGluZyBhIFVURi0xNkJFIEJPTSBmaWxlIGFzIHRleHQgd2l0aCBVVEY4IGVuY29kaW5nCity
ZWFkeVN0YXRlOiAwCitSZWNlaXZlZCBsb2Fkc3RhcnQgZXZlbnQKK3JlYWR5U3RhdGU6IDEKK1Jl
Y2VpdmVkIGxvYWQgZXZlbnQKK3JlYWR5U3RhdGU6IDIKK3Jlc3VsdCBzaXplOiA1CityZXN1bHQ6
IEhlbGxvCitSZWNlaXZlZCBsb2FkZW5kIGV2ZW50CitUZXN0IHJlYWRpbmcgYSBVVEYtMTZCRSBC
T00gZmlsZSBhcyB0ZXh0IHdpdGggaW52YWxpZCBlbmNvZGluZworcmVhZHlTdGF0ZTogMAorUmVj
ZWl2ZWQgbG9hZHN0YXJ0IGV2ZW50CityZWFkeVN0YXRlOiAxCitSZWNlaXZlZCBsb2FkIGV2ZW50
CityZWFkeVN0YXRlOiAyCityZXN1bHQgc2l6ZTogNQorcmVzdWx0OiBIZWxsbworUmVjZWl2ZWQg
bG9hZGVuZCBldmVudAorVGVzdCByZWFkaW5nIGEgVVRGLTggZmlsZSBhcyBkYXRhIFVSTAorcmVh
ZHlTdGF0ZTogMAorUmVjZWl2ZWQgbG9hZHN0YXJ0IGV2ZW50CityZWFkeVN0YXRlOiAxCitSZWNl
aXZlZCBsb2FkIGV2ZW50CityZWFkeVN0YXRlOiAyCityZXN1bHQgc2l6ZTogMzEKK3Jlc3VsdDog
ZGF0YTp0ZXh0L3BsYWluO2Jhc2U2NCxTR1ZzYkc4PQorUmVjZWl2ZWQgbG9hZGVuZCBldmVudAor
VGVzdCBjYWxsaW5nIG11bHRpcGxlIHJlYWQgbWV0aG9kcyBhbmQgb25seSBsYXN0IG9uZSBpcyBw
cm9jZXNzZWQKK3JlYWR5U3RhdGU6IDAKK1JlY2VpdmVkIGxvYWRzdGFydCBldmVudAorcmVhZHlT
dGF0ZTogMQorUmVjZWl2ZWQgbG9hZCBldmVudAorcmVhZHlTdGF0ZTogMgorcmVzdWx0IHNpemU6
IDMxCityZXN1bHQ6IGRhdGE6dGV4dC9wbGFpbjtiYXNlNjQsU0dWc2JHOD0KK1JlY2VpdmVkIGxv
YWRlbmQgZXZlbnQKK0RPTkUKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9maWxlcy9y
ZWFkLWZpbGUtYXN5bmMuaHRtbCBiL0xheW91dFRlc3RzL2Zhc3QvZmlsZXMvcmVhZC1maWxlLWFz
eW5jLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzYxNGRmZAotLS0g
L2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvZmlsZXMvcmVhZC1maWxlLWFzeW5jLmh0
bWwKQEAgLTAsMCArMSwzNCBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxib2R5PgorPGlu
cHV0IHR5cGU9ImZpbGUiIG5hbWU9ImZpbGUiIGlkPSJmaWxlIiBvbmNoYW5nZT0ib25JbnB1dEZp
bGVDaGFuZ2UodGVzdEZpbGVJbmZvTGlzdCkiIG11bHRpcGxlPgorPHByZSBpZD0nY29uc29sZSc+
PC9wcmU+CisKKzxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvc2V0dXAtZm9yLXJlYWQtY29tbW9uLmpz
Ij48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvcmVhZC1jb21tb24uanMiPjwvc2Ny
aXB0PgorPHNjcmlwdCBzcmM9InJlc291cmNlcy9yZWFkLWZpbGUtdGVzdC1jYXNlcy5qcyI+PC9z
Y3JpcHQ+Cis8c2NyaXB0PgordmFyIHRlc3RGaWxlSW5mb0xpc3QgPSBbCisgICAgeyAnbmFtZSc6
ICdub24tZXhpc3RlbnQnLCAncGF0aCc6ICdyZXNvdXJjZXMvbm9uLWV4aXN0ZW50JyB9LAorICAg
IHsgJ25hbWUnOiAnZW1wdHktZmlsZScsICdwYXRoJzogJ3Jlc291cmNlcy9lbXB0eS1maWxlJyB9
LAorICAgIHsgJ25hbWUnOiAnVVRGOC1maWxlJywgJ3BhdGgnOiAncmVzb3VyY2VzL1VURjgudHh0
JyB9LAorICAgIHsgJ25hbWUnOiAnVVRGMTZCRS1CT00tZmlsZScsICdwYXRoJzogJ3Jlc291cmNl
cy9VVEYxNkJFLUJPTS50eHQnIH0sCisgICAgeyAnbmFtZSc6ICdVVEYxNkxFLUJPTS1maWxlJywg
J3BhdGgnOiAncmVzb3VyY2VzL1VURjE2TEUtQk9NLnR4dCcgfSwKKyAgICB7ICduYW1lJzogJ1VU
RjgtQk9NLWZpbGUnLCAncGF0aCc6ICdyZXNvdXJjZXMvVVRGOC1CT00udHh0JyB9LAorICAgIHsg
J25hbWUnOiAnVVRGMTZCRS1maWxlJywgJ3BhdGgnOiAncmVzb3VyY2VzL1VURjE2QkUudHh0JyB9
LAorICAgIHsgJ25hbWUnOiAnYmluYXJ5LWZpbGUnLCAncGF0aCc6ICdyZXNvdXJjZXMvYmluYXJ5
LWZpbGUnIH0sCitdOworCitmdW5jdGlvbiBzdGFydFRlc3QodGVzdEZpbGVzKQoreworICAgIHJ1
bk5leHRUZXN0KHRlc3RGaWxlcyk7Cit9CisKK2lmICh3aW5kb3cuZXZlbnRTZW5kZXIpIHsKKyAg
ICBsYXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7CisgICAgbGF5b3V0VGVzdENvbnRy
b2xsZXIud2FpdFVudGlsRG9uZSgpOworICAgIHdpbmRvdy5vbmxvYWQgPSBmdW5jdGlvbigpIHsg
cnVuVGVzdHModGVzdEZpbGVJbmZvTGlzdCk7IH0KK30KKzwvc2NyaXB0PgorPC9ib2R5PgorPC9o
dG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9maWxlcy9yZXNvdXJjZXMvVVRGOC0y
LnR4dCBiL0xheW91dFRlc3RzL2Zhc3QvZmlsZXMvcmVzb3VyY2VzL1VURjgtMi50eHQKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTYwMWU5ZgotLS0gL2Rldi9udWxsCisrKyBi
L0xheW91dFRlc3RzL2Zhc3QvZmlsZXMvcmVzb3VyY2VzL1VURjgtMi50eHQKQEAgLTAsMCArMSBA
QAorV29uZGVyZnVsClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvTGF5
b3V0VGVzdHMvZmFzdC9maWxlcy9yZXNvdXJjZXMvVVRGOC0zLnR4dCBiL0xheW91dFRlc3RzL2Zh
c3QvZmlsZXMvcmVzb3VyY2VzL1VURjgtMy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMC4uYmVlZjkwNgotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvZmls
ZXMvcmVzb3VyY2VzL1VURjgtMy50eHQKQEAgLTAsMCArMSBAQAorV29ybGQKXCBObyBuZXdsaW5l
IGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2ZpbGVzL3Jlc291
cmNlcy9yZWFkLWJsb2ItdGVzdC1jYXNlcy5qcyBiL0xheW91dFRlc3RzL2Zhc3QvZmlsZXMvcmVz
b3VyY2VzL3JlYWQtYmxvYi10ZXN0LWNhc2VzLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAuLmMxNGZhNGUKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2Zp
bGVzL3Jlc291cmNlcy9yZWFkLWJsb2ItdGVzdC1jYXNlcy5qcwpAQCAtMCwwICsxLDEzNCBAQAor
dmFyIHRlc3RDYXNlcyA9IFsKKyAgICAidGVzdFJlYWRpbmdOb25FeGlzdGVudEZpbGVCbG9iIiwK
KyAgICAidGVzdFJlYWRpbmdOb25FeGlzdGVudEZpbGVCbG9iMiIsCisgICAgInRlc3RSZWFkaW5n
RW1wdHlGaWxlQmxvYiIsCisgICAgInRlc3RSZWFkaW5nRW1wdHlUZXh0QmxvYiIsCisgICAgInRl
c3RSZWFkaW5nRW1wdHlGaWxlQW5kVGV4dEJsb2IiLAorICAgICJ0ZXN0UmVhZGluZ1NpbmdsZUZp
bGVCbG9iIiwKKyAgICAidGVzdFJlYWRpbmdTaW5nbGVUZXh0QmxvYiIsCisgICAgInRlc3RSZWFk
aW5nU2xpY2VkRmlsZUJsb2IiLAorICAgICJ0ZXN0UmVhZGluZ1NsaWNlZFRleHRCbG9iIiwKKyAg
ICAidGVzdFJlYWRpbmdNdWx0aXBsZUZpbGVCbG9iIiwKKyAgICAidGVzdFJlYWRpbmdNdWx0aXBs
ZVRleHRCbG9iIiwKKyAgICAidGVzdFJlYWRpbmdIeWJyaWRCbG9iIiwKKyAgICAidGVzdFJlYWRp
bmdTbGljZWRIeWJyaWRCbG9iIiwKKyAgICAidGVzdFJlYWRpbmdUcmlwbGVTbGljZWRIeWJyaWRC
bG9iIiwKK107Cit2YXIgdGVzdEluZGV4ID0gMDsKKworZnVuY3Rpb24gcnVuTmV4dFRlc3QodGVz
dEZpbGVzKQoreworICAgIGlmICh0ZXN0SW5kZXggPCB0ZXN0Q2FzZXMubGVuZ3RoKSB7CisgICAg
ICAgIHRlc3RJbmRleCsrOworICAgICAgICBzZWxmW3Rlc3RDYXNlc1t0ZXN0SW5kZXggLSAxXV0o
dGVzdEZpbGVzKTsKKyAgICB9IGVsc2UgeworICAgICAgICBsb2coIkRPTkUiKTsKKyAgICAgICAg
aWYgKHdpbmRvdyAmJiB3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCisgICAgICAgICAgICBs
YXlvdXRUZXN0Q29udHJvbGxlci5ub3RpZnlEb25lKCk7CisgICAgfQorfQorCitmdW5jdGlvbiB0
ZXN0UmVhZGluZ05vbkV4aXN0ZW50RmlsZUJsb2IodGVzdEZpbGVzKQoreworICAgIGxvZygiVGVz
dCByZWFkaW5nIGEgYmxvYiBjb250YWluaW5nIG5vbi1leGlzdGVudCBmaWxlIik7CisgICAgdmFy
IGJsb2IgPSBidWlsZEJsb2IoW3Rlc3RGaWxlc1snbm9uLWV4aXN0ZW50J11dKTsKKyAgICByZWFk
QmxvYkFzQmluYXJ5U3RyaW5nKHRlc3RGaWxlcywgYmxvYik7Cit9CisKK2Z1bmN0aW9uIHRlc3RS
ZWFkaW5nTm9uRXhpc3RlbnRGaWxlQmxvYjIodGVzdEZpbGVzKQoreworICAgIGxvZygiVGVzdCBy
ZWFkaW5nIGEgYmxvYiBjb250YWluaW5nIGV4aXN0ZW50IGFuZCBub24tZXhpc3RlbnQgZmlsZSIp
OworICAgIHZhciBibG9iID0gYnVpbGRCbG9iKFt0ZXN0RmlsZXNbJ2ZpbGUxJ10sIHRlc3RGaWxl
c1snbm9uLWV4aXN0ZW50J10sIHRlc3RGaWxlc1snZW1wdHktZmlsZSddXSk7CisgICAgcmVhZEJs
b2JBc0JpbmFyeVN0cmluZyh0ZXN0RmlsZXMsIGJsb2IpOworfQorCitmdW5jdGlvbiB0ZXN0UmVh
ZGluZ0VtcHR5RmlsZUJsb2IodGVzdEZpbGVzKQoreworICAgIGxvZygiVGVzdCByZWFkaW5nIGEg
YmxvYiBjb250YWluaW5nIGVtcHR5IGZpbGUiKTsKKyAgICB2YXIgYmxvYiA9IGJ1aWxkQmxvYihb
dGVzdEZpbGVzWydlbXB0eS1maWxlJ11dKTsKKyAgICByZWFkQmxvYkFzQmluYXJ5U3RyaW5nKHRl
c3RGaWxlcywgYmxvYik7Cit9CisKK2Z1bmN0aW9uIHRlc3RSZWFkaW5nRW1wdHlUZXh0QmxvYih0
ZXN0RmlsZXMpCit7CisgICAgbG9nKCJUZXN0IHJlYWRpbmcgYSBibG9iIGNvbnRhaW5pbmcgZW1w
dHkgdGV4dCIpOworICAgIHZhciBibG9iID0gYnVpbGRCbG9iKFsnJ10pOworICAgIHJlYWRCbG9i
QXNCaW5hcnlTdHJpbmcodGVzdEZpbGVzLCBibG9iKTsKK30KKworZnVuY3Rpb24gdGVzdFJlYWRp
bmdFbXB0eUZpbGVBbmRUZXh0QmxvYih0ZXN0RmlsZXMpCit7CisgICAgbG9nKCJUZXN0IHJlYWRp
bmcgYSBibG9iIGNvbnRhaW5pbmcgZW1wdHkgZmlsZXMgYW5kIGVtcHR5IHRleHRzIik7CisgICAg
dmFyIGJsb2IgPSBidWlsZEJsb2IoWycnLCB0ZXN0RmlsZXNbJ2VtcHR5LWZpbGUnXSwgJycsIHRl
c3RGaWxlc1snZW1wdHktZmlsZSddXSk7CisgICAgcmVhZEJsb2JBc0JpbmFyeVN0cmluZyh0ZXN0
RmlsZXMsIGJsb2IpOworfQorCitmdW5jdGlvbiB0ZXN0UmVhZGluZ1NpbmdsZUZpbGVCbG9iKHRl
c3RGaWxlcykKK3sKKyAgICBsb2coIlRlc3QgcmVhZGluZyBhIGJsb2IgY29udGFpbmluZyBzaW5n
bGUgZmlsZSIpOworICAgIHZhciBibG9iID0gYnVpbGRCbG9iKFt0ZXN0RmlsZXNbJ2ZpbGUxJ11d
KTsKKyAgICByZWFkQmxvYkFzQmluYXJ5U3RyaW5nKHRlc3RGaWxlcywgYmxvYik7Cit9CisKK2Z1
bmN0aW9uIHRlc3RSZWFkaW5nU2luZ2xlVGV4dEJsb2IodGVzdEZpbGVzKQoreworICAgIGxvZygi
VGVzdCByZWFkaW5nIGEgYmxvYiBjb250YWluaW5nIHNpbmdsZSB0ZXh0Iik7CisgICAgdmFyIGJs
b2IgPSBidWlsZEJsb2IoWydGaXJzdCddKTsKKyAgICByZWFkQmxvYkFzQmluYXJ5U3RyaW5nKHRl
c3RGaWxlcywgYmxvYik7Cit9CisKK2Z1bmN0aW9uIHRlc3RSZWFkaW5nU2xpY2VkRmlsZUJsb2Io
dGVzdEZpbGVzKQoreworICAgIGxvZygiVGVzdCByZWFkaW5nIGEgYmxvYiBjb250YWluaW5nIHNs
aWNlZCBmaWxlIik7CisgICAgdmFyIGJsb2IgPSBidWlsZEJsb2IoW3Rlc3RGaWxlc1snZmlsZTIn
XS5zbGljZSgxLCA1KV0pOworICAgIHJlYWRCbG9iQXNCaW5hcnlTdHJpbmcodGVzdEZpbGVzLCBi
bG9iKTsKK30KKworZnVuY3Rpb24gdGVzdFJlYWRpbmdTbGljZWRUZXh0QmxvYih0ZXN0RmlsZXMp
Cit7CisgICAgbG9nKCJUZXN0IHJlYWRpbmcgYSBibG9iIGNvbnRhaW5pbmcgc2xpY2VkIHRleHQi
KTsKKyAgICB2YXIgYmxvYiA9IGJ1aWxkQmxvYihbJ0ZpcnN0J10pCisgICAgYmxvYiA9IGJsb2Iu
c2xpY2UoMSwgMTApOworICAgIHJlYWRCbG9iQXNCaW5hcnlTdHJpbmcodGVzdEZpbGVzLCBibG9i
KTsKK30KKworZnVuY3Rpb24gdGVzdFJlYWRpbmdNdWx0aXBsZUZpbGVCbG9iKHRlc3RGaWxlcykK
K3sKKyAgICBsb2coIlRlc3QgcmVhZGluZyBhIGJsb2IgY29udGFpbmluZyBtdWx0aXBsZSBmaWxl
cyIpOworICAgIHZhciBibG9iID0gYnVpbGRCbG9iKFt0ZXN0RmlsZXNbJ2ZpbGUxJ10sIHRlc3RG
aWxlc1snZmlsZTInXSwgdGVzdEZpbGVzWydmaWxlMyddXSk7CisgICAgcmVhZEJsb2JBc0JpbmFy
eVN0cmluZyh0ZXN0RmlsZXMsIGJsb2IpOworfQorCitmdW5jdGlvbiB0ZXN0UmVhZGluZ011bHRp
cGxlVGV4dEJsb2IodGVzdEZpbGVzKQoreworICAgIGxvZygiVGVzdCByZWFkaW5nIGEgYmxvYiBj
b250YWluaW5nIG11bHRpcGxlIHRleHRzIik7CisgICAgdmFyIGJsb2IgPSBidWlsZEJsb2IoWydG
aXJzdCcsICdTZWNvbmQnLCAnVGhpcmQnXSk7CisgICAgcmVhZEJsb2JBc0JpbmFyeVN0cmluZyh0
ZXN0RmlsZXMsIGJsb2IpOworfQorCitmdW5jdGlvbiB0ZXN0UmVhZGluZ0h5YnJpZEJsb2IodGVz
dEZpbGVzKQoreworICAgIGxvZygiVGVzdCByZWFkaW5nIGEgaHlicmlkIGJsb2IiKTsKKyAgICB2
YXIgYmxvYiA9IGJ1aWxkQmxvYihbJ0ZpcnN0JywgdGVzdEZpbGVzWydmaWxlMSddLCAnU2Vjb25k
JywgdGVzdEZpbGVzWydmaWxlMiddLCB0ZXN0RmlsZXNbJ2ZpbGUzJ10sICdUaGlyZCddKTsKKyAg
ICByZWFkQmxvYkFzQmluYXJ5U3RyaW5nKHRlc3RGaWxlcywgYmxvYik7Cit9CisKK2Z1bmN0aW9u
IHRlc3RSZWFkaW5nU2xpY2VkSHlicmlkQmxvYih0ZXN0RmlsZXMpCit7CisgICAgbG9nKCJUZXN0
IHJlYWRpbmcgYSBzbGljZWQgaHlicmlkIGJsb2IiKTsKKyAgICB2YXIgYmxvYiA9IGJ1aWxkQmxv
YihbJ0ZpcnN0JywgdGVzdEZpbGVzWydmaWxlMSddLCAnU2Vjb25kJywgdGVzdEZpbGVzWydmaWxl
MiddLCB0ZXN0RmlsZXNbJ2ZpbGUzJ10sICdUaGlyZCddKTsKKyAgICB2YXIgYmxvYiA9IGJsb2Iu
c2xpY2UoNywgMTIpOworICAgIHJlYWRCbG9iQXNCaW5hcnlTdHJpbmcodGVzdEZpbGVzLCBibG9i
KTsKK30KKworZnVuY3Rpb24gdGVzdFJlYWRpbmdUcmlwbGVTbGljZWRIeWJyaWRCbG9iKHRlc3RG
aWxlcykKK3sKKyAgICBsb2coIlRlc3QgcmVhZGluZyBhIHRyaXBsZS1zbGljZWQgaHlicmlkIGJs
b2IiKTsKKyAgICB2YXIgYnVpbGRlciA9IG5ldyBCbG9iQnVpbGRlcigpOworICAgIHZhciBibG9i
ID0gYnVpbGRCbG9iKFsnRmlyc3QnLCB0ZXN0RmlsZXNbJ2ZpbGUxJ10uc2xpY2UoMSwgMTApLCB0
ZXN0RmlsZXNbJ2VtcHR5LWZpbGUnXSwgJ1NlY29uZCcsIHRlc3RGaWxlc1snZmlsZTInXSwgdGVz
dEZpbGVzWydmaWxlMyddLCAnVGhpcmQnXSwgYnVpbGRlcik7CisgICAgdmFyIGJsb2IgPSBibG9i
LnNsaWNlKDcsIDEyKTsKKyAgICB2YXIgYmxvYjIgPSBidWlsZEJsb2IoWydGb28nLCBibG9iLCAn
QmFyJ10sIGJ1aWxkZXIpOworICAgIHZhciBibG9iMiA9IGJsb2IyLnNsaWNlKDEyLCAzMCk7Cisg
ICAgcmVhZEJsb2JBc0JpbmFyeVN0cmluZyh0ZXN0RmlsZXMsIGJsb2IyKTsKK30KKwpkaWZmIC0t
Z2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9maWxlcy9yZXNvdXJjZXMvcmVhZC1jb21tb24uanMgYi9M
YXlvdXRUZXN0cy9mYXN0L2ZpbGVzL3Jlc291cmNlcy9yZWFkLWNvbW1vbi5qcwpuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNWQyN2YzCi0tLSAvZGV2L251bGwKKysrIGIvTGF5
b3V0VGVzdHMvZmFzdC9maWxlcy9yZXNvdXJjZXMvcmVhZC1jb21tb24uanMKQEAgLTAsMCArMSw5
OSBAQAorLy8gQnVpbGRzIGEgYmxvYiBmcm9tIGEgbGlzdCBvZiBpdGVtcy4KKy8vIElmIHRoZSAn
YnVpbGRlcicgYXJndW1lbnQgaXMgbm90IHByb3ZpZGVkLCBjcmVhdGUgYSBuZXcgb25lLgorZnVu
Y3Rpb24gYnVpbGRCbG9iKGl0ZW1zLCBidWlsZGVyKQoreworICAgIGlmIChidWlsZGVyID09PSB1
bmRlZmluZWQpCisgICAgICAgIGJ1aWxkZXIgPSBuZXcgQmxvYkJ1aWxkZXIoKTsKKyAgICBmb3Ig
KHZhciBpID0gMDsgaSA8IGl0ZW1zLmxlbmd0aDsgaSsrKQorICAgICAgICBidWlsZGVyLmFwcGVu
ZChpdGVtc1tpXSk7CisgICAgcmV0dXJuIGJ1aWxkZXIuZ2V0QmxvYigpOworfQorCitmdW5jdGlv
biByZWFkQmxvYkFzQmluYXJ5U3RyaW5nKHRlc3RGaWxlcywgYmxvYikKK3sKKyAgICB2YXIgcmVh
ZGVyID0gY3JlYXRlUmVhZGVyKHRlc3RGaWxlcyk7CisgICAgcmVhZGVyLnJlYWRBc0JpbmFyeVN0
cmluZyhibG9iKQorfQorCitmdW5jdGlvbiByZWFkQmxvYkFzVGV4dCh0ZXN0RmlsZXMsIGJsb2Is
IGVuY29kaW5nKQoreworICAgIHZhciByZWFkZXIgPSBjcmVhdGVSZWFkZXIodGVzdEZpbGVzKTsK
KyAgICByZWFkZXIucmVhZEFzVGV4dChibG9iLCBlbmNvZGluZykKK30KKworZnVuY3Rpb24gcmVh
ZEJsb2JBc0RhdGFVUkwodGVzdEZpbGVzLCBibG9iKQoreworICAgIHZhciByZWFkZXIgPSBjcmVh
dGVSZWFkZXIodGVzdEZpbGVzKTsKKyAgICByZWFkZXIucmVhZEFzRGF0YVVSTChibG9iKQorfQor
CitmdW5jdGlvbiBjcmVhdGVSZWFkZXIodGVzdEZpbGVzKQoreworICAgIHZhciByZWFkZXIgPSBu
ZXcgRmlsZVJlYWRlcigpOworCisgICAgcmVhZGVyLm9ubG9hZHN0YXJ0ID0gbG9hZFN0YXJ0ZWQ7
CisgICAgcmVhZGVyLm9ubG9hZCA9IGxvYWRlZDsKKyAgICByZWFkZXIub25hYm9ydCA9IGxvZ0V2
ZW50OworICAgIHJlYWRlci5vbmxvYWRlbmQgPSBmdW5jdGlvbihldmVudCkgeyBsb2FkRW5kZWQo
dGVzdEZpbGVzLCBldmVudCk7IH0KKyAgICByZWFkZXIub25lcnJvciA9IGxvYWRGYWlsZWQ7CisK
KyAgICBsb2coInJlYWR5U3RhdGU6ICIgKyByZWFkZXIucmVhZHlTdGF0ZSk7CisgICAgcmV0dXJu
IHJlYWRlcjsKK30KKworZnVuY3Rpb24gbG9nRXZlbnQoZXZlbnQpCit7CisgICAgbG9nKCJSZWNl
aXZlZCAiICsgZXZlbnQudHlwZSArICIgZXZlbnQiKTsKK30KKworZnVuY3Rpb24gbG9hZFN0YXJ0
ZWQoZXZlbnQpCit7CisgICAgbG9nRXZlbnQoZXZlbnQpOworICAgIGxvZygicmVhZHlTdGF0ZTog
IiArIGV2ZW50LnRhcmdldC5yZWFkeVN0YXRlKTsKK30KKworZnVuY3Rpb24gbG9hZGVkKGV2ZW50
KQoreworICAgIGxvZ0V2ZW50KGV2ZW50KTsKKyAgICBsb2coInJlYWR5U3RhdGU6ICIgKyBldmVu
dC50YXJnZXQucmVhZHlTdGF0ZSk7CisgICAgbG9nKCJyZXN1bHQgc2l6ZTogIiArIGV2ZW50LnRh
cmdldC5yZXN1bHQubGVuZ3RoKTsKKworICAgIHZhciByZXN1bHQgPSBldmVudC50YXJnZXQucmVz
dWx0OworICAgIHZhciByZXN1bHRPdXRwdXQgPSBfaXNBU0NJSVN0cmluZyhyZXN1bHQpID8gcmVz
dWx0IDogX3RvSGV4YWRlY2ltYWwocmVzdWx0KTsKKyAgICBsb2coInJlc3VsdDogIiArIHJlc3Vs
dE91dHB1dCk7Cit9CisKK2Z1bmN0aW9uIGxvYWRGYWlsZWQoZXZlbnQpCit7CisgICAgbG9nRXZl
bnQoZXZlbnQpOworICAgIGxvZygicmVhZHlTdGF0ZTogIiArIGV2ZW50LnRhcmdldC5yZWFkeVN0
YXRlKTsKKyAgICBsb2coImVycm9yIGNvZGU6ICIgKyBldmVudC50YXJnZXQuZXJyb3IuY29kZSk7
Cit9CisKK2Z1bmN0aW9uIGxvYWRFbmRlZCh0ZXN0RmlsZXMsIGV2ZW50KQoreworICAgIGxvZ0V2
ZW50KGV2ZW50KTsKKyAgICBydW5OZXh0VGVzdCh0ZXN0RmlsZXMpOworfQorCisvLyBIZWxwZXIg
ZnVuY3Rpb25zLgorZnVuY3Rpb24gX2lzQVNDSUlTdHJpbmcoc3RyKQoreworICAgIGZvciAodmFy
IGkgPSAwOyBpIDwgc3RyLmxlbmd0aDsgKytpKSB7CisgICAgICAgIGlmIChzdHIuY2hhckNvZGVB
dChpKSA+PSAxMjgpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIHJldHVy
biB0cnVlOworfQorCitmdW5jdGlvbiBfdG9IZXhhZGVjaW1hbChzdHIpCit7CisgICAgdmFyIHJl
c3VsdCA9ICIiOworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc3RyLmxlbmd0aDsgKytpKSB7Cisg
ICAgICAgIHZhciBoZXggPSAiMHgiICsgKHN0ci5jaGFyQ29kZUF0KGkpICYgMHhGRikudG9TdHJp
bmcoMTYpOworICAgICAgICBpZiAoaSA+IDApCisgICAgICAgICAgICByZXN1bHQgKz0gIiAiOwor
ICAgICAgICByZXN1bHQgKz0gaGV4OworICAgIH0KKyAgICByZXR1cm4gcmVzdWx0OworfQpkaWZm
IC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9maWxlcy9yZXNvdXJjZXMvcmVhZC1maWxlLXRlc3Qt
Y2FzZXMuanMgYi9MYXlvdXRUZXN0cy9mYXN0L2ZpbGVzL3Jlc291cmNlcy9yZWFkLWZpbGUtdGVz
dC1jYXNlcy5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MTlkYjQxCi0t
LSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9maWxlcy9yZXNvdXJjZXMvcmVhZC1m
aWxlLXRlc3QtY2FzZXMuanMKQEAgLTAsMCArMSwxMzcgQEAKK3ZhciB0ZXN0Q2FzZXMgPSBbCisg
ICAgInRlc3RSZWFkaW5nTm9uRXhpc3RlbnRGaWxlQXNCaW5hcnlTdHJpbmciLAorICAgICJ0ZXN0
UmVhZGluZ05vbkV4aXN0ZW50RmlsZUFzVGV4dCIsCisgICAgInRlc3RSZWFkaW5nTm9uRXhpc3Rl
bnRGaWxlQXNEYXRhVVJMIiwKKyAgICAidGVzdFJlYWRpbmdFbXB0eUZpbGVBc0JpbmFyeVN0cmlu
ZyIsCisgICAgInRlc3RSZWFkaW5nRW1wdHlGaWxlQXNUZXh0IiwKKyAgICAidGVzdFJlYWRpbmdF
bXB0eUZpbGVBc0RhdGFVUkwiLAorICAgICJ0ZXN0UmVhZGluZ1VURjhFbmNvZGVkRmlsZUFzQmlu
YXJ5U3RyaW5nIiwKKyAgICAidGVzdFJlYWRpbmdCaW5hcnlGaWxlQXNCaW5hcnlTdHJpbmciLAor
ICAgICJ0ZXN0UmVhZGluZ1VURjhFbmNvZGVkRmlsZUFzVGV4dCIsCisgICAgInRlc3RSZWFkaW5n
VVRGMTZCRUJPTUVuY29kZWRGaWxlQXNUZXh0IiwKKyAgICAidGVzdFJlYWRpbmdVVEYxNkxFQk9N
RW5jb2RlZEZpbGVBc1RleHQiLAorICAgICJ0ZXN0UmVhZGluZ1VURjhCT01FbmNvZGVkRmlsZUFz
VGV4dCIsCisgICAgInRlc3RSZWFkaW5nVVRGMTZCRUVuY29kZWRGaWxlQXNUZXh0V2l0aFVURjE2
RW5jb2RpbmciLAorICAgICJ0ZXN0UmVhZGluZ1VURjE2QkVCT01FbmNvZGVkRmlsZUFzVGV4dFdp
dGhVVEY4RW5jb2RpbmciLAorICAgICJ0ZXN0UmVhZGluZ1VURjE2QkVCT01FbmNvZGVkRmlsZUFz
VGV4dFdpdGhJbnZhbGlkRW5jb2RpbmciLAorICAgICJ0ZXN0UmVhZGluZ1VURjhFbmNvZGVkRmls
ZUFzRGF0YVVSTCIsCisgICAgInRlc3RNdWx0aXBsZVJlYWRzIiwKK107Cit2YXIgdGVzdEluZGV4
ID0gMDsKKworZnVuY3Rpb24gcnVuTmV4dFRlc3QodGVzdEZpbGVzKQoreworICAgIGlmICh0ZXN0
SW5kZXggPCB0ZXN0Q2FzZXMubGVuZ3RoKSB7CisgICAgICAgIHRlc3RJbmRleCsrOworICAgICAg
ICBzZWxmW3Rlc3RDYXNlc1t0ZXN0SW5kZXggLSAxXV0odGVzdEZpbGVzKTsKKyAgICB9IGVsc2Ug
eworICAgICAgICBsb2coIkRPTkUiKTsKKyAgICAgICAgaWYgKHdpbmRvdyAmJiB3aW5kb3cubGF5
b3V0VGVzdENvbnRyb2xsZXIpCisgICAgICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5ub3Rp
ZnlEb25lKCk7CisgICAgfQorfQorCitmdW5jdGlvbiB0ZXN0UmVhZGluZ05vbkV4aXN0ZW50Rmls
ZUFzQmluYXJ5U3RyaW5nKHRlc3RGaWxlcykKK3sKKyAgICBsb2coIlRlc3QgcmVhZGluZyBhIG5v
bi1leGlzdGVudCBmaWxlIGFzIGJpbmFyeSBzdHJpbmciKTsKKyAgICByZWFkQmxvYkFzQmluYXJ5
U3RyaW5nKHRlc3RGaWxlcywgdGVzdEZpbGVzWydub24tZXhpc3RlbnQnXSk7Cit9CisKK2Z1bmN0
aW9uIHRlc3RSZWFkaW5nTm9uRXhpc3RlbnRGaWxlQXNUZXh0KHRlc3RGaWxlcykKK3sKKyAgICBs
b2coIlRlc3QgcmVhZGluZyBhIG5vbi1leGlzdGVudCBmaWxlIGFzIHRleHQiKTsKKyAgICByZWFk
QmxvYkFzVGV4dCh0ZXN0RmlsZXMsIHRlc3RGaWxlc1snbm9uLWV4aXN0ZW50J10pOworfQorCitm
dW5jdGlvbiB0ZXN0UmVhZGluZ05vbkV4aXN0ZW50RmlsZUFzRGF0YVVSTCh0ZXN0RmlsZXMpCit7
CisgICAgbG9nKCJUZXN0IHJlYWRpbmcgYSBub24tZXhpc3RlbnQgZmlsZSBhcyBkYXRhIFVSTCIp
OworICAgIHJlYWRCbG9iQXNEYXRhVVJMKHRlc3RGaWxlcywgdGVzdEZpbGVzWydub24tZXhpc3Rl
bnQnXSk7Cit9CisKK2Z1bmN0aW9uIHRlc3RSZWFkaW5nRW1wdHlGaWxlQXNCaW5hcnlTdHJpbmco
dGVzdEZpbGVzKQoreworICAgIGxvZygiVGVzdCByZWFkaW5nIGFuIGVtcHR5IGZpbGUgYXMgYmlu
YXJ5IHN0cmluZyIpOworICAgIHJlYWRCbG9iQXNCaW5hcnlTdHJpbmcodGVzdEZpbGVzLCB0ZXN0
RmlsZXNbJ2VtcHR5LWZpbGUnXSk7Cit9CisKK2Z1bmN0aW9uIHRlc3RSZWFkaW5nRW1wdHlGaWxl
QXNUZXh0KHRlc3RGaWxlcykKK3sKKyAgICBsb2coIlRlc3QgcmVhZGluZyBhbiBlbXB0eSBmaWxl
IGFzIHRleHQiKTsKKyAgICByZWFkQmxvYkFzVGV4dCh0ZXN0RmlsZXMsIHRlc3RGaWxlc1snZW1w
dHktZmlsZSddKTsKK30KKworZnVuY3Rpb24gdGVzdFJlYWRpbmdFbXB0eUZpbGVBc0RhdGFVUkwo
dGVzdEZpbGVzKQoreworICAgIGxvZygiVGVzdCByZWFkaW5nIGFuIGVtcHR5IGZpbGUgYXMgZGF0
YSBVUkwiKTsKKyAgICByZWFkQmxvYkFzRGF0YVVSTCh0ZXN0RmlsZXMsIHRlc3RGaWxlc1snZW1w
dHktZmlsZSddKTsKK30KKworZnVuY3Rpb24gdGVzdFJlYWRpbmdVVEY4RW5jb2RlZEZpbGVBc0Jp
bmFyeVN0cmluZyh0ZXN0RmlsZXMpCit7CisgICAgbG9nKCJUZXN0IHJlYWRpbmcgYSBVVEYtOCBm
aWxlIGFzIGJpbmFyeSBzdHJpbmciKTsKKyAgICByZWFkQmxvYkFzQmluYXJ5U3RyaW5nKHRlc3RG
aWxlcywgdGVzdEZpbGVzWydVVEY4LWZpbGUnXSk7Cit9CisKK2Z1bmN0aW9uIHRlc3RSZWFkaW5n
QmluYXJ5RmlsZUFzQmluYXJ5U3RyaW5nKHRlc3RGaWxlcykKK3sKKyAgICBsb2coIlRlc3QgcmVh
ZGluZyBhIGJpbmFyeSBmaWxlIGFzIGJpbmFyeSBzdHJpbmciKTsKKyAgICByZWFkQmxvYkFzQmlu
YXJ5U3RyaW5nKHRlc3RGaWxlcywgdGVzdEZpbGVzWydiaW5hcnktZmlsZSddKTsKK30KKworZnVu
Y3Rpb24gdGVzdFJlYWRpbmdVVEY4RW5jb2RlZEZpbGVBc1RleHQodGVzdEZpbGVzKQoreworICAg
IGxvZygiVGVzdCByZWFkaW5nIGEgVVRGLTggZmlsZSBhcyB0ZXh0Iik7CisgICAgcmVhZEJsb2JB
c1RleHQodGVzdEZpbGVzLCB0ZXN0RmlsZXNbJ1VURjgtZmlsZSddKTsKK30KKworZnVuY3Rpb24g
dGVzdFJlYWRpbmdVVEYxNkJFQk9NRW5jb2RlZEZpbGVBc1RleHQodGVzdEZpbGVzKQoreworICAg
IGxvZygiVGVzdCByZWFkaW5nIGEgVVRGLTE2QkUgQk9NIGZpbGUgYXMgdGV4dCIpOworICAgIHJl
YWRCbG9iQXNUZXh0KHRlc3RGaWxlcywgdGVzdEZpbGVzWydVVEYxNkJFLUJPTS1maWxlJ10pOwor
fQorCitmdW5jdGlvbiB0ZXN0UmVhZGluZ1VURjE2TEVCT01FbmNvZGVkRmlsZUFzVGV4dCh0ZXN0
RmlsZXMpCit7CisgICAgbG9nKCJUZXN0IHJlYWRpbmcgYSBVVEYtMTZMRSBCT00gZmlsZSBhcyB0
ZXh0Iik7CisgICAgcmVhZEJsb2JBc1RleHQodGVzdEZpbGVzLCB0ZXN0RmlsZXNbJ1VURjE2TEUt
Qk9NLWZpbGUnXSk7Cit9CisKK2Z1bmN0aW9uIHRlc3RSZWFkaW5nVVRGOEJPTUVuY29kZWRGaWxl
QXNUZXh0KHRlc3RGaWxlcykKK3sKKyAgICBsb2coIlRlc3QgcmVhZGluZyBhIFVURi04IEJPTSBm
aWxlIGFzIHRleHQiKTsKKyAgICByZWFkQmxvYkFzVGV4dCh0ZXN0RmlsZXMsIHRlc3RGaWxlc1sn
VVRGOC1CT00tZmlsZSddKTsKK30KKworZnVuY3Rpb24gdGVzdFJlYWRpbmdVVEYxNkJFRW5jb2Rl
ZEZpbGVBc1RleHRXaXRoVVRGMTZFbmNvZGluZyh0ZXN0RmlsZXMpCit7CisgICAgbG9nKCJUZXN0
IHJlYWRpbmcgYSBVVEYtMTZCRSBmaWxlIGFzIHRleHQgd2l0aCBVVEYtMTZCRSBlbmNvZGluZyIp
OworICAgIHJlYWRCbG9iQXNUZXh0KHRlc3RGaWxlcywgdGVzdEZpbGVzWydVVEYxNkJFLWZpbGUn
XSwgIlVURi0xNkJFIik7Cit9CisKK2Z1bmN0aW9uIHRlc3RSZWFkaW5nVVRGMTZCRUJPTUVuY29k
ZWRGaWxlQXNUZXh0V2l0aFVURjhFbmNvZGluZyh0ZXN0RmlsZXMpCit7CisgICAgbG9nKCJUZXN0
IHJlYWRpbmcgYSBVVEYtMTZCRSBCT00gZmlsZSBhcyB0ZXh0IHdpdGggVVRGOCBlbmNvZGluZyIp
OworICAgIHJlYWRCbG9iQXNUZXh0KHRlc3RGaWxlcywgdGVzdEZpbGVzWydVVEYxNkJFLUJPTS1m
aWxlJ10sICJVVEYtOCIpOworfQorCitmdW5jdGlvbiB0ZXN0UmVhZGluZ1VURjE2QkVCT01FbmNv
ZGVkRmlsZUFzVGV4dFdpdGhJbnZhbGlkRW5jb2RpbmcodGVzdEZpbGVzKQoreworICAgIGxvZygi
VGVzdCByZWFkaW5nIGEgVVRGLTE2QkUgQk9NIGZpbGUgYXMgdGV4dCB3aXRoIGludmFsaWQgZW5j
b2RpbmciKTsKKyAgICByZWFkQmxvYkFzVGV4dCh0ZXN0RmlsZXMsIHRlc3RGaWxlc1snVVRGMTZC
RS1CT00tZmlsZSddLCAiQW55SW52YWxpZEVuY29kaW5nIik7Cit9CisKK2Z1bmN0aW9uIHRlc3RS
ZWFkaW5nVVRGOEVuY29kZWRGaWxlQXNEYXRhVVJMKHRlc3RGaWxlcykKK3sKKyAgICBsb2coIlRl
c3QgcmVhZGluZyBhIFVURi04IGZpbGUgYXMgZGF0YSBVUkwiKTsKKyAgICByZWFkQmxvYkFzRGF0
YVVSTCh0ZXN0RmlsZXMsIHRlc3RGaWxlc1snVVRGOC1maWxlJ10pOworfQorCitmdW5jdGlvbiB0
ZXN0TXVsdGlwbGVSZWFkcyh0ZXN0RmlsZXMpCit7CisgICAgbG9nKCJUZXN0IGNhbGxpbmcgbXVs
dGlwbGUgcmVhZCBtZXRob2RzIGFuZCBvbmx5IGxhc3Qgb25lIGlzIHByb2Nlc3NlZCIpOworICAg
IHZhciByZWFkZXIgPSBjcmVhdGVSZWFkZXIoKTsKKyAgICByZWFkZXIucmVhZEFzQmluYXJ5U3Ry
aW5nKHRlc3RGaWxlc1snVVRGOC1maWxlJ10pOworICAgIHJlYWRlci5yZWFkQXNUZXh0KHRlc3RG
aWxlc1snVVRGOC1maWxlJ10pOworICAgIHJlYWRlci5yZWFkQXNEYXRhVVJMKHRlc3RGaWxlc1sn
VVRGOC1maWxlJ10pOworfQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9maWxlcy9yZXNv
dXJjZXMvc2V0dXAtZm9yLXJlYWQtY29tbW9uLmpzIGIvTGF5b3V0VGVzdHMvZmFzdC9maWxlcy9y
ZXNvdXJjZXMvc2V0dXAtZm9yLXJlYWQtY29tbW9uLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAuLjYzOThhN2MKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0
L2ZpbGVzL3Jlc291cmNlcy9zZXR1cC1mb3ItcmVhZC1jb21tb24uanMKQEAgLTAsMCArMSwyMiBA
QAorZnVuY3Rpb24gbG9nKG1lc3NhZ2UpCit7CisgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQo
J2NvbnNvbGUnKS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShtZXNzYWdlICsg
IlxuIikpOworfQorCitmdW5jdGlvbiBvbklucHV0RmlsZUNoYW5nZSh0ZXN0RmlsZUluZm9MaXN0
KQoreworICAgIHZhciBmaWxlcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJmaWxlIikuZmls
ZXM7CisgICAgdmFyIHRlc3RGaWxlcyA9IHsgfTsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IGZp
bGVzLmxlbmd0aDsgaSsrKQorICAgICAgICB0ZXN0RmlsZXNbdGVzdEZpbGVJbmZvTGlzdFtpXVsn
bmFtZSddXSA9IGZpbGVzW2ldOworCisgICAgc3RhcnRUZXN0KHRlc3RGaWxlcyk7Cit9CisKK2Z1
bmN0aW9uIHJ1blRlc3RzKHRlc3RGaWxlSW5mb0xpc3QpCit7CisgICAgdmFyIHBhdGhzT25seSA9
IHRlc3RGaWxlSW5mb0xpc3QubWFwKGZ1bmN0aW9uKGZpbGVTcGVjKSB7IHJldHVybiBmaWxlU3Bl
Y1sncGF0aCddOyB9KTsKKyAgICBldmVudFNlbmRlci5iZWdpbkRyYWdXaXRoRmlsZXMocGF0aHNP
bmx5KTsKKyAgICBldmVudFNlbmRlci5tb3VzZU1vdmVUbygxMCwgMTApOworICAgIGV2ZW50U2Vu
ZGVyLm1vdXNlVXAoKTsKK30KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3BsYXRmb3JtL2d0ay9T
a2lwcGVkIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vZ3RrL1NraXBwZWQKaW5kZXggY2Y1ZDBmZC4u
NDlkNDE4NCAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vZ3RrL1NraXBwZWQKKysr
IGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vZ3RrL1NraXBwZWQKQEAgLTMxNjAsNyArMzE2MCw4IEBA
IGh0dHAvdGVzdHMvbG9jYWwvYmxvYi9zZW5kLXNsaWNlZC1kYXRhLWJsb2IuaHRtbAogaHR0cC90
ZXN0cy9sb2NhbC9mb3JtZGF0YS9zZW5kLWZvcm0tZGF0YS5odG1sCiBodHRwL3Rlc3RzL2xvY2Fs
L2Zvcm1kYXRhL3NlbmQtZm9ybS1kYXRhLXdpdGgtc2xpY2VkLWZpbGUuaHRtbAogaHR0cC90ZXN0
cy9sb2NhbC9mb3JtZGF0YS91cGxvYWQtZXZlbnRzLmh0bWwKLWZhc3QvZmlsZXMvZmlsZS1yZWFk
ZXIuaHRtbAorZmFzdC9maWxlcy9yZWFkLWJsb2ItYXN5bmMuaHRtbAorZmFzdC9maWxlcy9yZWFk
LWZpbGUtYXN5bmMuaHRtbAogaHR0cC90ZXN0cy9tZWRpYS92aWRlby1wbGF5LXN0YWxsLXNlZWsu
aHRtbAogaHR0cC90ZXN0cy9tZWRpYS92aWRlby1wbGF5LXN0YWxsLmh0bWwKIGh0dHAvdGVzdHMv
bWVkaWEvdmlkZW8tc2Vla2FibGUtc3RhbGwuaHRtbApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMv
cGxhdGZvcm0vbWFjLXdrMi9Ta2lwcGVkIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjLXdrMi9T
a2lwcGVkCmluZGV4IDkyNWVkYTUuLjg3YTJiN2EgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3Bs
YXRmb3JtL21hYy13azIvU2tpcHBlZAorKysgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMtd2sy
L1NraXBwZWQKQEAgLTM2MCw3ICszNjAsOCBAQCBmYXN0L2V2ZW50cy93aW5kb3ctZXZlbnRzLWJ1
YmJsZS5odG1sCiBmYXN0L2V2ZW50cy93aW5kb3ctZXZlbnRzLWJ1YmJsZTIuaHRtbAogZmFzdC9l
dmVudHMvd2luZG93LWV2ZW50cy1jYXB0dXJlLmh0bWwKIGZhc3QvZXZlbnRzL3pvb20tZGJsY2xp
Y2suaHRtbAotZmFzdC9maWxlcy9maWxlLXJlYWRlci5odG1sCitmYXN0L2ZpbGVzL3JlYWQtYmxv
Yi1hc3luYy5odG1sCitmYXN0L2ZpbGVzL3JlYWQtZmlsZS1hc3luYy5odG1sCiBmYXN0L2Zvcm1z
LzI1MTUzLmh0bWwKIGZhc3QvZm9ybXMvYWNjZXNzLWtleS5odG1sCiBmYXN0L2Zvcm1zL2J1dHRv
bi1lbnRlci1jbGljay5odG1sCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9xdC9T
a2lwcGVkIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vcXQvU2tpcHBlZAppbmRleCBmMzAyM2ZjLi4z
NThjMWM0IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9xdC9Ta2lwcGVkCisrKyBi
L0xheW91dFRlc3RzL3BsYXRmb3JtL3F0L1NraXBwZWQKQEAgLTc5OCw3ICs3OTgsOCBAQCBodHRw
L3Rlc3RzL3NlY3VyaXR5L2lzb2xhdGVkV29ybGQvd29ybGQtcmV1c2UuaHRtbAogCiAjIE1pc3Np
bmcgZXZlbnRTZW5kZXIuYmVnaW5EcmFnV2l0aEZpbGVzKCkKIGZhc3QvZG9tL1dpbmRvdy93aW5k
b3ctcG9zdG1lc3NhZ2UtY2xvbmUtZnJhbWVzLmh0bWwKLWZhc3QvZmlsZXMvZmlsZS1yZWFkZXIu
aHRtbAorZmFzdC9maWxlcy9yZWFkLWJsb2ItYXN5bmMuaHRtbAorZmFzdC9maWxlcy9yZWFkLWZp
bGUtYXN5bmMuaHRtbAogCiAjIE1pc3NpbmcgbGF5b3V0VGVzdENvbnRyb2xsZXIuc2V0QWx3YXlz
QWNjZXB0Q29va2llcygpCiBodHRwL3Rlc3RzL3BsdWdpbnMvdGhpcmQtcGFydHktY29va2llLWFj
Y2VwdC1wb2xpY3kuaHRtbApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vd2luL1Nr
aXBwZWQgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS93aW4vU2tpcHBlZAppbmRleCA5YTUzMDczLi5h
YjFmYjRkIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS93aW4vU2tpcHBlZAorKysg
Yi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS93aW4vU2tpcHBlZApAQCAtMTk1LDcgKzE5NSw4IEBAIGZh
c3QvZm9ybXMvaW5wdXQtZmlsZS1yZS1yZW5kZXIuaHRtbAogaHR0cC90ZXN0cy9zZWN1cml0eS9j
bGlwYm9hcmQvY2xpcGJvYXJkLWZpbGUtYWNjZXNzLmh0bWwKIGZhc3QvZXZlbnRzL2RyYWctZmls
ZS1jcmFzaC5odG1sCiBmYXN0L2RvbS9XaW5kb3cvd2luZG93LXBvc3RtZXNzYWdlLWNsb25lLmh0
bWwKLWZhc3QvZmlsZXMvZmlsZS1yZWFkZXIuaHRtbAorZmFzdC9maWxlcy9yZWFkLWJsb2ItYXN5
bmMuaHRtbAorZmFzdC9maWxlcy9yZWFkLWZpbGUtYXN5bmMuaHRtbAogCiAjIE5lZWQgdG8gYWRk
IGZ1bmN0aW9uYWxpdHkgdG8gRHVtcFJlbmRlclRyZWUgdG8gdGVzdCBJRE4gPHJkYXI6Ly9wcm9i
bGVtLzUzMDE5NTQ+CiBmYXN0L2VuY29kaW5nL2lkbi1zZWN1cml0eS5odG1sCmRpZmYgLS1naXQg
YS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0IGIvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAppbmRleCA5
YTg2NGNjLi44ODVlZmI3IDEwMDY0NAotLS0gYS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CisrKyBi
L1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKQEAgLTEyMDksNyArMTIwOSw2IEBAIFNFVChXZWJDb3Jl
X1NPVVJDRVMKICAgICBwYWdlL2FuaW1hdGlvbi9LZXlmcmFtZUFuaW1hdGlvbi5jcHAKIAogICAg
IHBsYXRmb3JtL0FyZW5hLmNwcAotICAgIHBsYXRmb3JtL0Jsb2JJdGVtLmNwcAogICAgIHBsYXRm
b3JtL0NvbnRlbnRUeXBlLmNwcAogICAgIHBsYXRmb3JtL0NvbnRleHRNZW51LmNwcAogICAgIHBs
YXRmb3JtL0Nyb3NzVGhyZWFkQ29waWVyLmNwcApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9DaGFuZ2VM
b2cgYi9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCBlMGY5MjIxLi5hNDNiOGNjIDEwMDY0NAotLS0g
YS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMiw2ICsyLDEw
NCBAQAogCiAgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgogCisgICAgICAgIFN3
aXRjaCB0aGUgQmxvYiBpbXBsZW1lbnRhdGlvbiB0byB1c2luZyB0aGUgYmxvYiBkYXRhIHJlZ2lz
dHJhdGlvbiBtb2RlbAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9NDQzODkKKworICAgICAgICBUZXN0czogZmFzdC9maWxlcy9yZWFkLWJsb2ItYXN5bmMu
aHRtbAorICAgICAgICAgICAgICAgZmFzdC9maWxlcy9yZWFkLWZpbGUtYXN5bmMuaHRtbAorCisg
ICAgICAgIFdpdGggdGhpcyBzd2l0Y2gsIEZpbGUvQmxvYi9CbG9iQnVpbGRlciBhcmUgY2hhbmdl
ZCB0byByZWdpc3RlciB0aGUgYmxvYgorICAgICAgICBkYXRhLiBGaWxlUmVhZGVyIGlzIGNoYW5n
ZWQgdG8gcm91dGUgdGhyb3VnaCBsb2FkaW5nIHRoZSBibG9iIHJlc291cmNlLgorICAgICAgICBG
b3JtRGF0YSBpcyBhbHNvIHVwZGF0ZWQgdG8gdGFrZSBCbG9iRGF0YS4gVGhlIFdlYktpdCBtYWMg
aW1wbGVtZW50YXRpb24KKyAgICAgICAgaXMgdXBkYXRlZCB0byByZXNvbHZlIHRoZSBibG9iIHJl
ZmVyZW5jZXMgaW4gdGhlIEJsb2JEYXRhLgorCisgICAgICAgICogQ01ha2VMaXN0cy50eHQ6IFVw
ZGF0ZSB0aGUgcHJvamVjdCBmaWxlIHRvIHJlbW92ZSBCbG9iSXRlbS4qLgorICAgICAgICAqIEdO
VW1ha2VmaWxlLmFtOiBVcGRhdGUgdGhlIHByb2plY3QgZmlsZSB0byByZW1vdmUgQmxvYkl0ZW0u
Ki4KKyAgICAgICAgKiBXZWJDb3JlLmd5cGk6IFVwZGF0ZSB0aGUgcHJvamVjdCBmaWxlIHRvIHJl
bW92ZSBCbG9iSXRlbS4qLgorICAgICAgICAqIFdlYkNvcmUucHJvOiBVcGRhdGUgdGhlIHByb2pl
Y3QgZmlsZSB0byByZW1vdmUgQmxvYkl0ZW0uKi4KKyAgICAgICAgKiBXZWJDb3JlLnZjcHJvai9X
ZWJDb3JlLnZjcHJvajogVXBkYXRlIHRoZSBwcm9qZWN0IGZpbGUgdG8gcmVtb3ZlIEJsb2JJdGVt
LiouCisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOiBVcGRhdGUg
dGhlIHByb2plY3QgZmlsZSB0byByZW1vdmUgQmxvYkl0ZW0uKi4KKyAgICAgICAgKiBodG1sL0Js
b2IuY3BwOiBTd2l0Y2ggdG8gdXNpbmcgQmxvYkRhdGEuCisgICAgICAgIChXZWJDb3JlOjpCbG9i
OjpCbG9iKToKKyAgICAgICAgKFdlYkNvcmU6OkJsb2I6OnNsaWNlKToKKyAgICAgICAgKiBodG1s
L0Jsb2IuaDogU3dpdGNoIHRvIHVzaW5nIEJsb2JEYXRhLgorICAgICAgICAoV2ViQ29yZTo6Qmxv
Yjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkJsb2I6OnNpemUpOgorICAgICAgICAoV2Vi
Q29yZTo6QmxvYjo6aXNGaWxlKToKKyAgICAgICAgKiBodG1sL0Jsb2JCdWlsZGVyLmNwcDogU3dp
dGNoIHRvIHVzaW5nIEJsb2JEYXRhLgorICAgICAgICAoV2ViQ29yZTo6QmxvYkJ1aWxkZXI6OkJs
b2JCdWlsZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkJsb2JCdWlsZGVyOjphcHBlbmQpOgorICAg
ICAgICAoV2ViQ29yZTo6QmxvYkJ1aWxkZXI6OmdldEJsb2IpOgorICAgICAgICAqIGh0bWwvQmxv
YkJ1aWxkZXIuaDogU3dpdGNoIHRvIHVzaW5nIEJsb2JEYXRhLgorICAgICAgICAqIGh0bWwvQmxv
YlVSTC5jcHA6IEFkZCBhIG5ldyBoZWxwZXIgbWV0aG9kIHVzZWQgaW4gRm9ybURhdGEuCisgICAg
ICAgIChXZWJDb3JlOjpCbG9iVVJMOjpnZXRJZGVudGlmaWVyKToKKyAgICAgICAgKiBodG1sL0Js
b2JVUkwuaDoKKyAgICAgICAgKiBodG1sL0ZpbGUuY3BwOiBTd2l0Y2ggdG8gdXNpbmcgQmxvYkRh
dGEuCisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVCbG9iRGF0YUZvckZpbGUpOgorICAgICAgICAo
V2ViQ29yZTo6RmlsZTo6RmlsZSk6CisgICAgICAgIChXZWJDb3JlOjpGaWxlOjpzaXplKToKKyAg
ICAgICAgKFdlYkNvcmU6OkZpbGU6OmNhcHR1cmVTbmFwc2hvdCk6CisgICAgICAgICogaHRtbC9G
aWxlLmg6IFN3aXRjaCB0byB1c2luZyBCbG9iRGF0YS4KKyAgICAgICAgKFdlYkNvcmU6OkZpbGU6
OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpGaWxlOjpwYXRoKToKKyAgICAgICAgKFdlYkNv
cmU6OkZpbGU6Om5hbWUpOgorICAgICAgICAoV2ViQ29yZTo6RmlsZTo6d2Via2l0UmVsYXRpdmVQ
YXRoKToKKyAgICAgICAgKiBodG1sL0ZpbGVSZWFkZXIuY3BwOiBDaGFuZ2UgdGhlIHJlYWRpbmcg
dG8gcm91dGUgdGhyb3VnaCBibG9iIHJlc291cmNlIGxvYWRpbmcuCisgICAgICAgIChXZWJDb3Jl
OjpGaWxlUmVhZGVyOjpGaWxlUmVhZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkZpbGVSZWFkZXI6
OnJlYWRBc0JpbmFyeVN0cmluZyk6CisgICAgICAgIChXZWJDb3JlOjpGaWxlUmVhZGVyOjpyZWFk
QXNUZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbGVSZWFkZXI6OnJlYWRBc0RhdGFVUkwpOgor
ICAgICAgICAoV2ViQ29yZTo6ZGVsYXllZFN0YXJ0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbGVS
ZWFkZXI6OnJlYWRJbnRlcm5hbCk6CisgICAgICAgIChXZWJDb3JlOjpGaWxlUmVhZGVyOjp0ZXJt
aW5hdGUpOgorICAgICAgICAoV2ViQ29yZTo6RmlsZVJlYWRlcjo6c3RhcnQpOgorICAgICAgICAo
V2ViQ29yZTo6RmlsZVJlYWRlcjo6ZGlkUmVjZWl2ZVJlc3BvbnNlKToKKyAgICAgICAgKFdlYkNv
cmU6OkZpbGVSZWFkZXI6OmRpZFJlY2VpdmVEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkZpbGVS
ZWFkZXI6OmRpZEZpbmlzaExvYWRpbmcpOgorICAgICAgICAoV2ViQ29yZTo6RmlsZVJlYWRlcjo6
ZGlkRmFpbCk6CisgICAgICAgIChXZWJDb3JlOjpGaWxlUmVhZGVyOjpmYWlsZWQpOgorICAgICAg
ICAoV2ViQ29yZTo6RmlsZVJlYWRlcjo6aHR0cFN0YXR1c0NvZGVUb0V4Y2VwdGlvbkNvZGUpOgor
ICAgICAgICAoV2ViQ29yZTo6RmlsZVJlYWRlcjo6cmVzdWx0KToKKyAgICAgICAgKFdlYkNvcmU6
OkZpbGVSZWFkZXI6OmNvbnZlcnRUb0RhdGFVUkwpOgorICAgICAgICAqIGh0bWwvRmlsZVJlYWRl
ci5oOgorICAgICAgICAqIGh0bWwvRm9ybURhdGFMaXN0LmNwcDogQWNjb3VudCB0byBCbG9iRGF0
YSBjaGFuZ2UuCisgICAgICAgIChXZWJDb3JlOjpGb3JtRGF0YUxpc3Q6OmFwcGVuZFN0cmluZyk6
CisgICAgICAgIChXZWJDb3JlOjpGb3JtRGF0YUxpc3Q6OmFwcGVuZEJsb2IpOgorICAgICAgICAq
IGh0bWwvRm9ybURhdGFMaXN0Lmg6IEFjY291bnQgdG8gQmxvYkRhdGEgY2hhbmdlLgorICAgICAg
ICAoV2ViQ29yZTo6Rm9ybURhdGFMaXN0OjphcHBlbmRCbG9iKToKKyAgICAgICAgKFdlYkNvcmU6
OkZvcm1EYXRhTGlzdDo6SXRlbTo6SXRlbSk6CisgICAgICAgIChXZWJDb3JlOjpGb3JtRGF0YUxp
c3Q6Okl0ZW06OmRhdGEpOgorICAgICAgICAoV2ViQ29yZTo6Rm9ybURhdGFMaXN0OjpJdGVtOjpi
bG9iKToKKyAgICAgICAgKFdlYkNvcmU6OkZvcm1EYXRhTGlzdDo6aXRlbXMpOgorICAgICAgICAq
IGxvYWRlci9Gb3JtU3VibWlzc2lvbi5jcHA6IEFjY291bnQgdG8gQmxvYkRhdGEgY2hhbmdlLgor
ICAgICAgICAoV2ViQ29yZTo6Rm9ybVN1Ym1pc3Npb246OmNyZWF0ZSk6CisgICAgICAgICogcGxh
dGZvcm0vQmxvYkl0ZW0uY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL0Jsb2JJdGVt
Lmg6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9CbG9iUmVnaXN0cnlJbXBs
LmNwcDogQWRkIHRoZSBpbXBsZW1lbnRhdGlvbnMgZm9yIHJlc291cmNlIGxvYWRpbmcuCisgICAg
ICAgIChXZWJDb3JlOjpCbG9iUmVnaXN0cnlJbXBsOjpjcmVhdGVSZXNvdXJjZUhhbmRsZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpCbG9iUmVnaXN0cnlJbXBsOjpsb2FkUmVzb3VyY2VTeW5jaHJvbm91
c2x5KToKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL0Jsb2JSZXNvdXJjZUhhbmRsZS5jcHA6
IEZpeCBhIGJ1ZyB0aGF0IHRoZSByZWYgaXMgbm90IGFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6
QmxvYlJlc291cmNlSGFuZGxlOjpCbG9iUmVzb3VyY2VIYW5kbGUpOgorICAgICAgICAqIHBsYXRm
b3JtL25ldHdvcmsvRm9ybURhdGEuY3BwOiBBY2NvdW50IHRvIEJsb2JEYXRhIGNoYW5nZS4KKyAg
ICAgICAgKFdlYkNvcmU6OkZvcm1EYXRhOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6Rm9y
bURhdGE6OmNyZWF0ZU11bHRpUGFydCk6CisgICAgICAgIChXZWJDb3JlOjpGb3JtRGF0YTo6ZGVl
cENvcHkpOgorICAgICAgICAoV2ViQ29yZTo6Rm9ybURhdGE6OmFwcGVuZEZpbGUpOgorICAgICAg
ICAoV2ViQ29yZTo6Rm9ybURhdGE6OmFwcGVuZEtleVZhbHVlUGFpckl0ZW1zKToKKyAgICAgICAg
KiBwbGF0Zm9ybS9uZXR3b3JrL0Zvcm1EYXRhLmg6IEFjY291bnQgdG8gQmxvYkRhdGEgY2hhbmdl
LgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvbWFjL0Zvcm1EYXRhU3RyZWFtTWFjLm1tOiBS
ZXNvbHZlIGJsb2IgcmVmZXJlbmNlcyBpbiB0aGUgZm9ybSBkYXRhLgorICAgICAgICAoV2ViQ29y
ZTo6Y2xvc2VDdXJyZW50U3RyZWFtKToKKyAgICAgICAgKFdlYkNvcmU6OmFkdmFuY2VDdXJyZW50
U3RyZWFtKToKKyAgICAgICAgKFdlYkNvcmU6OmZvcm1DcmVhdGUpOgorICAgICAgICAoV2ViQ29y
ZTo6Zm9ybVJlYWQpOgorICAgICAgICAoV2ViQ29yZTo6c2V0SFRUUEJvZHkpOgorICAgICAgICAq
IHhtbC9YTUxIdHRwUmVxdWVzdC5jcHA6IEFjY291bnQgdG8gQmxvYkRhdGEgY2hhbmdlLgorICAg
ICAgICAoV2ViQ29yZTo6WE1MSHR0cFJlcXVlc3Q6OnNlbmQpOgorCisyMDEwLTA4LTIxICBKaWFu
IExpICA8amlhbmxpQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKwogICAgICAgICBBZGQgdGhlIGJsb2IgVVJMIG1lbWJlciB0byBGb3JtRGF0YS4K
ICAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ0Mzg3CiAK
ZGlmZiAtLWdpdCBhL1dlYkNvcmUvR05VbWFrZWZpbGUuYW0gYi9XZWJDb3JlL0dOVW1ha2VmaWxl
LmFtCmluZGV4IDI2OTdlYjYuLmRhM2FhMDEgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvR05VbWFrZWZp
bGUuYW0KKysrIGIvV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQpAQCAtMTg4MCw4ICsxODgwLDYgQEAg
d2ViY29yZV9zb3VyY2VzICs9IFwKIAlXZWJDb3JlL3BsYXRmb3JtL0FyZW5hLmggXAogCVdlYkNv
cmUvcGxhdGZvcm0vQXN5bmNGaWxlU3RyZWFtLmggXAogCVdlYkNvcmUvcGxhdGZvcm0vQXV0b2Ry
YWluZWRQb29sLmggXAotCVdlYkNvcmUvcGxhdGZvcm0vQmxvYkl0ZW0uY3BwIFwKLQlXZWJDb3Jl
L3BsYXRmb3JtL0Jsb2JJdGVtLmggXAogCVdlYkNvcmUvcGxhdGZvcm0vQ29udGVudFR5cGUuY3Bw
IFwKIAlXZWJDb3JlL3BsYXRmb3JtL0NvbnRlbnRUeXBlLmggXAogCVdlYkNvcmUvcGxhdGZvcm0v
Q29udGV4dE1lbnUuY3BwIFwKZGlmZiAtLWdpdCBhL1dlYkNvcmUvV2ViQ29yZS5neXBpIGIvV2Vi
Q29yZS9XZWJDb3JlLmd5cGkKaW5kZXggNGYwMTg3Ny4uN2Y1NDQwZiAxMDA2NDQKLS0tIGEvV2Vi
Q29yZS9XZWJDb3JlLmd5cGkKKysrIGIvV2ViQ29yZS9XZWJDb3JlLmd5cGkKQEAgLTMwMzksOCAr
MzAzOSw2IEBACiAgICAgICAgICAgICAncGxhdGZvcm0vQXJlbmEuaCcsCiAgICAgICAgICAgICAn
cGxhdGZvcm0vQXN5bmNGaWxlU3RyZWFtLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL0F1dG9k
cmFpbmVkUG9vbC5oJywKLSAgICAgICAgICAgICdwbGF0Zm9ybS9CbG9iSXRlbS5jcHAnLAotICAg
ICAgICAgICAgJ3BsYXRmb3JtL0Jsb2JJdGVtLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL0Nv
bnRlbnRUeXBlLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vQ29udGVudFR5cGUuaCcsCiAg
ICAgICAgICAgICAncGxhdGZvcm0vQ29udGV4dE1lbnUuY3BwJywKZGlmZiAtLWdpdCBhL1dlYkNv
cmUvV2ViQ29yZS5wcm8gYi9XZWJDb3JlL1dlYkNvcmUucHJvCmluZGV4IDM5YjNkNjEuLjVmZDE3
MDggMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvV2ViQ29yZS5wcm8KKysrIGIvV2ViQ29yZS9XZWJDb3Jl
LnBybwpAQCAtODY0LDcgKzg2NCw2IEBAIFNPVVJDRVMgKz0gXAogICAgIHBsYXRmb3JtL2FuaW1h
dGlvbi9BbmltYXRpb24uY3BwIFwKICAgICBwbGF0Zm9ybS9hbmltYXRpb24vQW5pbWF0aW9uTGlz
dC5jcHAgXAogICAgIHBsYXRmb3JtL0FyZW5hLmNwcCBcCi0gICAgcGxhdGZvcm0vQmxvYkl0ZW0u
Y3BwIFwKICAgICBwbGF0Zm9ybS90ZXh0L0Jhc2U2NC5jcHAgXAogICAgIHBsYXRmb3JtL3RleHQv
QmlkaUNvbnRleHQuY3BwIFwKICAgICBwbGF0Zm9ybS90ZXh0L0h5cGhlbmF0aW9uLmNwcCBcCkBA
IC0xNjQ3LDcgKzE2NDYsNiBAQCBIRUFERVJTICs9IFwKICAgICBwbGF0Zm9ybS9hbmltYXRpb24v
QW5pbWF0aW9uTGlzdC5oIFwKICAgICBwbGF0Zm9ybS9BcmVuYS5oIFwKICAgICBwbGF0Zm9ybS9B
c3luY0ZpbGVTdHJlYW0uaCBcCi0gICAgcGxhdGZvcm0vQmxvYkl0ZW0uaCBcCiAgICAgcGxhdGZv
cm0vQ29udGVudFR5cGUuaCBcCiAgICAgcGxhdGZvcm0vQ29udGV4dE1lbnUuaCBcCiAgICAgcGxh
dGZvcm0vQ3Jvc3NUaHJlYWRDb3BpZXIuaCBcCmRpZmYgLS1naXQgYS9XZWJDb3JlL1dlYkNvcmUu
dmNwcm9qL1dlYkNvcmUudmNwcm9qIGIvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZj
cHJvagppbmRleCBhNzYxOTU5Li41NmRkNmRkIDEwMDY0NAotLS0gYS9XZWJDb3JlL1dlYkNvcmUu
dmNwcm9qL1dlYkNvcmUudmNwcm9qCisrKyBiL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29y
ZS52Y3Byb2oKQEAgLTIzOTg1LDE0ICsyMzk4NSw2IEBACiAJCQkJPg0KIAkJCTwvRmlsZT4NCiAJ
CQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHBsYXRmb3JtXEJsb2JJdGVtLmNwcCINCi0J
CQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHBsYXRm
b3JtXEJsb2JJdGVtLmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCiAJCQkJUmVs
YXRpdmVQYXRoPSIuLlxwbGF0Zm9ybVxDb250ZW50VHlwZS5jcHAiDQogCQkJCT4NCiAJCQk8L0Zp
bGU+DQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2ogYi9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCAyZmZi
OWExLi4zOGQ5NzExIDEwMDY0NAotLS0gYS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvagorKysgYi9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
agpAQCAtMjM4Nyw4ICsyMzg3LDYgQEAKIAkJODk1MjUzREMxMTZDNEVGNTAwQ0FCRjAwIC8qIEZp
bGVTdHJlYW1Qcm94eS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA4OTUyNTNEQTExNkM0RUY1MDBDQUJGMDAgLyogRmlsZVN0cmVhbVByb3h5LmNwcCAq
LzsgfTsKIAkJODk1MjUzREQxMTZDNEVGNTAwQ0FCRjAwIC8qIEZpbGVTdHJlYW1Qcm94eS5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODk1MjUzREIxMTZD
NEVGNTAwQ0FCRjAwIC8qIEZpbGVTdHJlYW1Qcm94eS5oICovOyB9OwogCQk4OTUyNTNERjExNkM0
RjA2MDBDQUJGMDAgLyogRmlsZVRocmVhZFRhc2suaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg5NTI1M0RFMTE2QzRGMDYwMENBQkYwMCAvKiBGaWxlVGhy
ZWFkVGFzay5oICovOyB9OwotCQk4OTg4RTEwRTExQTM1MDhCMDBEQjczMkUgLyogQmxvYkl0ZW0u
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODk4OEUx
MEMxMUEzNTA4QjAwREI3MzJFIC8qIEJsb2JJdGVtLmNwcCAqLzsgfTsKLQkJODk4OEUxMEYxMUEz
NTA4QjAwREI3MzJFIC8qIEJsb2JJdGVtLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA4OTg4RTEwRDExQTM1MDhCMDBEQjczMkUgLyogQmxvYkl0ZW0uaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk4OTlBQkMy
NjEyMTVFNEEzMDBGOUYyMTkgLyogRGlyZWN0b3J5RW50cnkuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODk5QUJDMjAxMjE1RTRBMzAwRjlGMjE5IC8q
IERpcmVjdG9yeUVudHJ5LmNwcCAqLzsgfTsKIAkJODk5QUJDMjcxMjE1RTRBMzAwRjlGMjE5IC8q
IERpcmVjdG9yeUVudHJ5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA4OTlBQkMyMTEyMTVFNEEzMDBGOUYyMTkgLyogRGlyZWN0b3J5RW50cnkuaCAqLzsg
fTsKIAkJODk5QUJDMjkxMjE1RTRBMzAwRjlGMjE5IC8qIERpcmVjdG9yeVJlYWRlci5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4OTlBQkMyMzEyMTVF
NEEzMDBGOUYyMTkgLyogRGlyZWN0b3J5UmVhZGVyLmNwcCAqLzsgfTsKQEAgLTgyNzEsOCArODI2
OSw2IEBACiAJCTg5N0EyRDhFMTIwMDAzNUYwMDgyNzQwQyAvKiBKU0RPTUZpbGVTeXN0ZW0uaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNET01GaWxlU3lzdGVtLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTg5N0EyRDkxMTIwMDAzNzYwMDgyNzQwQyAvKiBKU0Zs
YWdzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTRmxhZ3MuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4OTdBMkQ5MjEyMDAwMzc2MDA4Mjc0MEMg
LyogSlNGbGFncy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0ZsYWdzLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTg5ODhFMTBDMTFBMzUwOEIwMERCNzMyRSAv
KiBCbG9iSXRlbS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBCbG9i
SXRlbS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTg5ODhFMTBEMTFBMzUwOEIw
MERCNzMyRSAvKiBCbG9iSXRlbS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBC
bG9iSXRlbS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4OTlBQkMyMDEyMTVFNEEz
MDBGOUYyMTkgLyogRGlyZWN0b3J5RW50cnkuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gRGlyZWN0b3J5RW50cnkuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk4OTlBQkMyMTEyMTVFNEEzMDBGOUYyMTkgLyogRGlyZWN0b3J5RW50cnkuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRGlyZWN0b3J5RW50cnkuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJODk5QUJDMjIxMjE1RTRBMzAwRjlGMjE5IC8qIERpcmVjdG9yeUVu
dHJ5LmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBEaXJlY3RvcnlFbnRyeS5pZGw7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xNjU4NCw4ICsxNjU4MCw2IEBACiAJCQkJQkNGQjJG
NzUwOTdBMkUxQTAwQkE3MDNEIC8qIEFyZW5hLmggKi8sCiAJCQkJMkVGMUJGRjYxMjFDQjBCRDAw
QzI3NjI3IC8qIEFzeW5jRmlsZVN0cmVhbS5oICovLAogCQkJCTUxRTFFQ0IxMEM5MUM1NTYwMERD
MjU1QiAvKiBBdXRvZHJhaW5lZFBvb2wuaCAqLywKLQkJCQk4OTg4RTEwQzExQTM1MDhCMDBEQjcz
MkUgLyogQmxvYkl0ZW0uY3BwICovLAotCQkJCTg5ODhFMTBEMTFBMzUwOEIwMERCNzMyRSAvKiBC
bG9iSXRlbS5oICovLAogCQkJCUJDQzhDRkNBMDk4NkNEMjQwMDE0MEJGMiAvKiBDb2xvckRhdGEu
Z3BlcmYgKi8sCiAJCQkJNDFEMDE1QzkwRjRCNUM3MTAwNEE2NjJGIC8qIENvbnRlbnRUeXBlLmNw
cCAqLywKIAkJCQk0MUQwMTVDODBGNEI1QzcxMDA0QTY2MkYgLyogQ29udGVudFR5cGUuaCAqLywK
QEAgLTE3Njk2LDcgKzE3NjkwLDYgQEAKIAkJCQlBODk5NDMyODBCNDIzMzg4MDBEN0M4MDIgLyog
Qml0bWFwSW1hZ2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTJFQUZBRjBGMTBFMkFGMkQwMDdFRDNE
NiAvKiBCbG9iLmggaW4gSGVhZGVycyAqLywKIAkJCQk4OUJFRDVFQzExQkUxMUNFMDA0NDg0OTIg
LyogQmxvYkJ1aWxkZXIuaCBpbiBIZWFkZXJzICovLAotCQkJCTg5ODhFMTBGMTFBMzUwOEIwMERC
NzMyRSAvKiBCbG9iSXRlbS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMkVFRDU3NTYxMjEwOUVEMDAw
NzY1NkJCIC8qIEJsb2JVUkwuaCBpbiBIZWFkZXJzICovLAogCQkJCTkzRjE5OUJFMDgyNDVFNTkw
MDFFOUFCQyAvKiBCbG9ja0V4Y2VwdGlvbnMuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDNUVCNUUx
MEU4MUJFODcwMEIyNTk2NSAvKiBCb3JkZXJEYXRhLmggaW4gSGVhZGVycyAqLywKQEAgLTIwNzA1
LDcgKzIwNjk4LDYgQEAKIAkJCQlBODk5NDMyOTBCNDIzMzg4MDBEN0M4MDIgLyogQml0bWFwSW1h
Z2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMkVBRkFGMEUxMEUyQUYyRDAwN0VEM0Q2IC8qIEJs
b2IuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJODlCRUQ1RUIxMUJFMTFDRTAwNDQ4NDkyIC8qIEJs
b2JCdWlsZGVyLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTg5ODhFMTBFMTFBMzUwOEIwMERCNzMy
RSAvKiBCbG9iSXRlbS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkyRUVENTc1NTEyMTA5RUQwMDA3
NjU2QkIgLyogQmxvYlVSTC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5M0YxOUFFMTA4MjQ1RTU5
MDAxRTlBQkMgLyogQmxvY2tFeGNlcHRpb25zLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJQkNFQTQ4
NTQwOTdEOTMwMjAwOTRDOUU0IC8qIGJyZWFrX2xpbmVzLmNwcCBpbiBTb3VyY2VzICovLApkaWZm
IC0tZ2l0IGEvV2ViQ29yZS9odG1sL0Jsb2IuY3BwIGIvV2ViQ29yZS9odG1sL0Jsb2IuY3BwCmlu
ZGV4IDNhNjJhYjEuLjQxZDdkNTMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaHRtbC9CbG9iLmNwcAor
KysgYi9XZWJDb3JlL2h0bWwvQmxvYi5jcHAKQEAgLTMxLDUxICszMSwxOSBAQAogI2luY2x1ZGUg
ImNvbmZpZy5oIgogI2luY2x1ZGUgIkJsb2IuaCIKIAotI2luY2x1ZGUgIkJsb2JEYXRhLmgiCi0j
aW5jbHVkZSAiQmxvYkl0ZW0uaCIKICNpbmNsdWRlICJCbG9iVVJMLmgiCi0jaW5jbHVkZSAiRmls
ZVN5c3RlbS5oIgorI2luY2x1ZGUgIkZpbGUuaCIKICNpbmNsdWRlICJTY3JpcHRFeGVjdXRpb25D
b250ZXh0LmgiCiAjaW5jbHVkZSAiVGhyZWFkYWJsZUJsb2JSZWdpc3RyeS5oIgogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKLS8vIEZJWE1FOiBUbyBiZSByZW1vdmVkIHdoZW4gd2Ugc3dpdGNoIHRv
IHVzaW5nIEJsb2JEYXRhLgotQmxvYjo6QmxvYihTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBzY3Jp
cHRFeGVjdXRpb25Db250ZXh0LCBjb25zdCBTdHJpbmcmIHR5cGUsIGNvbnN0IEJsb2JJdGVtTGlz
dCYgaXRlbXMpCi0gICAgOiBtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQoc2NyaXB0RXhlY3V0aW9u
Q29udGV4dCkKLSAgICAsIG1fdHlwZSh0eXBlKQotICAgICwgbV9zaXplKDApCi17Ci0gICAgbV9z
Y3JpcHRFeGVjdXRpb25Db250ZXh0LT5hZGRCbG9iKHRoaXMpOwotICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgaXRlbXMuc2l6ZSgpOyArK2kpCi0gICAgICAgIG1faXRlbXMuYXBwZW5kKGl0ZW1z
W2ldKTsKLX0KLQotLy8gRklYTUU6IFRvIGJlIHJlbW92ZWQgd2hlbiB3ZSBzd2l0Y2ggdG8gdXNp
bmcgQmxvYkRhdGEuCi1CbG9iOjpCbG9iKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQsIGNvbnN0IFBhc3NSZWZQdHI8QmxvYkl0ZW0+JiBpdGVtKQotICAgIDog
bV9zY3JpcHRFeGVjdXRpb25Db250ZXh0KHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQpCi0gICAgLCBt
X3NpemUoMCkKLXsKLSAgICBtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQtPmFkZEJsb2IodGhpcyk7
Ci0gICAgbV9pdGVtcy5hcHBlbmQoaXRlbSk7Ci19Ci0KLS8vIEZJWE1FOiBUbyBiZSByZW1vdmVk
IHdoZW4gd2Ugc3dpdGNoIHRvIHVzaW5nIEJsb2JEYXRhLgotQmxvYjo6QmxvYihTY3JpcHRFeGVj
dXRpb25Db250ZXh0KiBzY3JpcHRFeGVjdXRpb25Db250ZXh0LCBjb25zdCBTdHJpbmcmIHBhdGgp
Ci0gICAgOiBtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQoc2NyaXB0RXhlY3V0aW9uQ29udGV4dCkK
LSAgICAsIG1fc2l6ZSgwKQotewotICAgIG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dC0+YWRkQmxv
Yih0aGlzKTsKLSAgICAvLyBOb3RlOiB0aGlzIGRvZXNuJ3QgaW5pdGlhbGl6ZSB0aGUgdHlwZSB1
bmxpa2UgRmlsZShwYXRoKS4KLSAgICBtX2l0ZW1zLmFwcGVuZChGaWxlQmxvYkl0ZW06OmNyZWF0
ZShwYXRoKSk7Ci19Ci0KIEJsb2I6OkJsb2IoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0
RXhlY3V0aW9uQ29udGV4dCwgUGFzc093blB0cjxCbG9iRGF0YT4gYmxvYkRhdGEsIGxvbmcgbG9u
ZyBzaXplKQogICAgIDogbV9zY3JpcHRFeGVjdXRpb25Db250ZXh0KHNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQpCiAgICAgLCBtX3R5cGUoYmxvYkRhdGEtPmNvbnRlbnRUeXBlKCkpCiAgICAgLCBtX3Np
emUoc2l6ZSkKIHsKLSAgICBBU1NFUlQoYmxvYkRhdGEuZ2V0KCkgJiYgIWJsb2JEYXRhLT5pdGVt
cygpLmlzRW1wdHkoKSk7CisgICAgQVNTRVJUKGJsb2JEYXRhKTsKIAogICAgIG1fc2NyaXB0RXhl
Y3V0aW9uQ29udGV4dC0+YWRkQmxvYih0aGlzKTsKIApAQCAtODksMTEgKzU3LDcgQEAgQmxvYjo6
QmxvYihTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBzY3JpcHRFeGVjdXRpb25Db250ZXh0LCBjb25z
dCBLVVJMJiBzcmNVUkwsIGMKICAgICAsIG1fdHlwZSh0eXBlKQogICAgICwgbV9zaXplKHNpemUp
CiB7Ci0gICAgbV9zY3JpcHRFeGVjdXRpb25Db250ZXh0LT5hZGRCbG9iKHRoaXMpOwotCi0gICAg
Ly8gRklYTUU6IFRvIGJlIHJlbW92ZWQgd2hlbiB3ZSBzd2l0Y2ggdG8gdXNpbmcgQmxvYkRhdGEu
Ci0gICAgaWYgKHNyY1VSTC5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybjsKKyAgIG1fc2NyaXB0
RXhlY3V0aW9uQ29udGV4dC0+YWRkQmxvYih0aGlzKTsKIAogICAgIC8vIENyZWF0ZSBhIG5ldyBp
bnRlcm5hbCBVUkwgYW5kIHJlZ2lzdGVyIGl0IHdpdGggdGhlIHNhbWUgYmxvYiBkYXRhIGFzIHRo
ZSBzb3VyY2UgVVJMLgogICAgIG1fdXJsID0gQmxvYlVSTDo6Y3JlYXRlVVJMKHNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQpOwpAQCAtMTE4LDUwICs4Miw0MSBAQCB2b2lkIEJsb2I6OmNvbnRleHREZXN0
cm95ZWQoKQogICAgIG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dCA9IDA7CiB9CiAKLXVuc2lnbmVk
IGxvbmcgbG9uZyBCbG9iOjpzaXplKCkgY29uc3QKLXsKLSAgICAvLyBGSVhNRTogSmF2YVNjcmlw
dCBjYW5ub3QgcmVwcmVzZW50IHNpemVzIGFzIGxhcmdlIGFzIHVuc2lnbmVkIGxvbmcgbG9uZywg
d2UgbmVlZCB0bwotICAgIC8vIGNvbWUgdXAgd2l0aCBhbiBleGNlcHRpb24gdG8gdGhyb3cgaWYg
ZmlsZSBzaXplIGlzIG5vdCByZXByZXNldGFibGUuCi0gICAgdW5zaWduZWQgbG9uZyBsb25nIHNp
emUgPSAwOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9pdGVtcy5zaXplKCk7ICsraSkK
LSAgICAgICAgc2l6ZSArPSBtX2l0ZW1zW2ldLT5zaXplKCk7Ci0gICAgcmV0dXJuIHNpemU7Ci19
Ci0KLS8vIEZJWE1FOiBUbyBiZSByZW1vdmVkIHdoZW4gd2Ugc3dpdGNoIHRvIHVzaW5nIEJsb2JE
YXRhLgotY29uc3QgU3RyaW5nJiBCbG9iOjpwYXRoKCkgY29uc3QKLXsKLSAgICBBU1NFUlQobV9p
dGVtcy5zaXplKCkgPT0gMSAmJiBtX2l0ZW1zWzBdLT50b0ZpbGVCbG9iSXRlbSgpKTsKLSAgICBy
ZXR1cm4gbV9pdGVtc1swXS0+dG9GaWxlQmxvYkl0ZW0oKS0+cGF0aCgpOwotfQotCiAjaWYgRU5B
QkxFKEJMT0IpCiBQYXNzUmVmUHRyPEJsb2I+IEJsb2I6OnNsaWNlKFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQqIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQsIGxvbmcgbG9uZyBzdGFydCwgbG9uZyBsb25n
IGxlbmd0aCwgY29uc3QgU3RyaW5nJiBjb250ZW50VHlwZSkgY29uc3QKIHsKKyAgICAvLyBXaGVu
IHdlIHNsaWNlIGEgZmlsZSBmb3IgdGhlIGZpcnN0IHRpbWUsIHdlIG9idGFpbiBhIHNuYXBzaG90
IG9mIHRoZSBmaWxlIGJ5IGNhcHR1cmluZyBpdHMgY3VycmVudCBzaXplIGFuZCBtb2RpZmljYXRp
b24gdGltZS4KKyAgICAvLyBUaGUgbW9kaWZpY2F0aW9uIHRpbWUgd2lsbCBiZSB1c2VkIHRvIHZl
cmlmeSBpZiB0aGUgZmlsZSBoYXMgYmVlbiBjaGFuZ2VkIG9yIG5vdCwgd2hlbiB0aGUgdW5kZXJs
eWluZyBkYXRhIGFyZSBhY2Nlc3NlZC4KKyAgICBsb25nIGxvbmcgc2l6ZTsKKyAgICBkb3VibGUg
bW9kaWZpY2F0aW9uVGltZTsKKyAgICBpZiAoaXNGaWxlKCkpCisgICAgICAgIHN0YXRpY19jYXN0
PGNvbnN0IEZpbGUqPih0aGlzKS0+Y2FwdHVyZVNuYXBzaG90KHNpemUsIG1vZGlmaWNhdGlvblRp
bWUpOworICAgIGVsc2UgeworICAgICAgICBBU1NFUlQobV9zaXplICE9IC0xKTsKKyAgICAgICAg
c2l6ZSA9IG1fc2l6ZTsKKyAgICB9CisKKyAgICAvLyBDbGFtcCB0aGUgcmFuZ2UgaWYgaXQgZXhj
ZWVkcyB0aGUgc2l6ZSBsaW1pdC4KICAgICBpZiAoc3RhcnQgPCAwKQogICAgICAgICBzdGFydCA9
IDA7CiAgICAgaWYgKGxlbmd0aCA8IDApCiAgICAgICAgIGxlbmd0aCA9IDA7CiAKLSAgICAvLyBD
bGFtcCB0aGUgcmFuZ2UgaWYgaXQgZXhjZWVkcyB0aGUgc2l6ZSBsaW1pdC4KLSAgICB1bnNpZ25l
ZCBsb25nIGxvbmcgdG90YWxTaXplID0gc2l6ZSgpOwotICAgIGlmIChzdGF0aWNfY2FzdDx1bnNp
Z25lZCBsb25nIGxvbmc+KHN0YXJ0KSA+IHRvdGFsU2l6ZSkgeworICAgIGlmIChzdGFydCA+PSBz
aXplKSB7CiAgICAgICAgIHN0YXJ0ID0gMDsKICAgICAgICAgbGVuZ3RoID0gMDsKLSAgICB9IGVs
c2UgaWYgKHN0YXRpY19jYXN0PHVuc2lnbmVkIGxvbmcgbG9uZz4oc3RhcnQgKyBsZW5ndGgpID4g
dG90YWxTaXplKQotICAgICAgICBsZW5ndGggPSB0b3RhbFNpemUgLSBzdGFydDsKLQotICAgIHNp
emVfdCBpID0gMDsKLSAgICBCbG9iSXRlbUxpc3QgaXRlbXM7Ci0gICAgZm9yICg7IGkgPCBtX2l0
ZW1zLnNpemUoKSAmJiBzdGF0aWNfY2FzdDx1bnNpZ25lZCBsb25nIGxvbmc+KHN0YXJ0KSA+PSBt
X2l0ZW1zW2ldLT5zaXplKCk7ICsraSkKLSAgICAgICAgc3RhcnQgLT0gbV9pdGVtc1tpXS0+c2l6
ZSgpOwotICAgIGZvciAoOyBsZW5ndGggPiAwICYmIGkgPCBtX2l0ZW1zLnNpemUoKTsgKytpKSB7
Ci0gICAgICAgIGl0ZW1zLmFwcGVuZChtX2l0ZW1zW2ldLT5zbGljZShzdGFydCwgbGVuZ3RoKSk7
Ci0gICAgICAgIGxlbmd0aCAtPSBpdGVtcy5sYXN0KCktPnNpemUoKTsKLSAgICAgICAgc3RhcnQg
PSAwOwotICAgIH0KLSAgICByZXR1cm4gQmxvYjo6Y3JlYXRlKHNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQsIGNvbnRlbnRUeXBlLCBpdGVtcyk7CisgICAgfSBlbHNlIGlmIChzdGFydCArIGxlbmd0aCA+
IHNpemUpCisgICAgICAgIGxlbmd0aCA9IHNpemUgLSBzdGFydDsKKworICAgIE93blB0cjxCbG9i
RGF0YT4gYmxvYkRhdGEgPSBCbG9iRGF0YTo6Y3JlYXRlKCk7CisgICAgYmxvYkRhdGEtPnNldENv
bnRlbnRUeXBlKGNvbnRlbnRUeXBlKTsKKyAgICBpZiAoaXNGaWxlKCkpCisgICAgICAgIGJsb2JE
YXRhLT5hcHBlbmRGaWxlKHN0YXRpY19jYXN0PGNvbnN0IEZpbGUqPih0aGlzKS0+cGF0aCgpLCBz
dGFydCwgbGVuZ3RoLCBtb2RpZmljYXRpb25UaW1lKTsKKyAgICBlbHNlCisgICAgICAgIGJsb2JE
YXRhLT5hcHBlbmRCbG9iKG1fdXJsLCBzdGFydCwgbGVuZ3RoKTsKKworICAgIHJldHVybiBCbG9i
OjpjcmVhdGUoc2NyaXB0RXhlY3V0aW9uQ29udGV4dCwgYmxvYkRhdGEucmVsZWFzZSgpLCBsZW5n
dGgpOwogfQotI2VuZGlmIC8vIEVOQUJMRShCTE9CKQorI2VuZGlmCiAKIH0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaHRtbC9CbG9iLmggYi9XZWJDb3JlL2h0bWwv
QmxvYi5oCmluZGV4IDM3NGE0MDEuLmU5ZjI4NTUgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaHRtbC9C
bG9iLmgKKysrIGIvV2ViQ29yZS9odG1sL0Jsb2IuaApAQCAtMzEsNyArMzEsNyBAQAogI2lmbmRl
ZiBCbG9iX2gKICNkZWZpbmUgQmxvYl9oCiAKLSNpbmNsdWRlICJCbG9iSXRlbS5oIgorI2luY2x1
ZGUgIkJsb2JEYXRhLmgiCiAjaW5jbHVkZSAiS1VSTC5oIgogI2luY2x1ZGUgIlBsYXRmb3JtU3Ry
aW5nLmgiCiAjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KQEAgLTQxLDE1ICs0MSwxMyBAQAog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIEJsb2JEYXRhOwogY2xhc3MgU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dDsKIAogY2xhc3MgQmxvYiA6IHB1YmxpYyBSZWZDb3VudGVkPEJsb2I+IHsK
IHB1YmxpYzoKLSAgICAvLyBGSVhNRTogVG8gYmUgcmVtb3ZlZCB3aGVuIHdlIHN3aXRjaCB0byB1
c2luZyBCbG9iRGF0YS4KLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxCbG9iPiBjcmVhdGUoU2NyaXB0
RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0RXhlY3V0aW9uQ29udGV4dCwgY29uc3QgU3RyaW5nJiB0
eXBlLCBjb25zdCBCbG9iSXRlbUxpc3QmIGl0ZW1zKQorICAgIHN0YXRpYyBQYXNzUmVmUHRyPEJs
b2I+IGNyZWF0ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBzY3JpcHRFeGVjdXRpb25Db250ZXh0
LCBQYXNzT3duUHRyPEJsb2JEYXRhPiBibG9iRGF0YSwgbG9uZyBsb25nIHNpemUpCiAgICAgewot
ICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEJsb2Ioc2NyaXB0RXhlY3V0aW9uQ29udGV4dCwg
dHlwZSwgaXRlbXMpKTsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBCbG9iKHNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQsIGJsb2JEYXRhLCBzaXplKSk7CiAgICAgfQogCiAgICAgLy8gRm9yIGRl
c2VyaWFsaXphdGlvbi4KQEAgLTYzLDM4ICs2MSwyNSBAQCBwdWJsaWM6CiAgICAgdm9pZCBjb250
ZXh0RGVzdHJveWVkKCk7CiAKICAgICBjb25zdCBLVVJMJiB1cmwoKSBjb25zdCB7IHJldHVybiBt
X3VybDsgfQotICAgIHVuc2lnbmVkIGxvbmcgbG9uZyBzaXplKCkgY29uc3Q7CiAgICAgY29uc3Qg
U3RyaW5nJiB0eXBlKCkgY29uc3QgeyByZXR1cm4gbV90eXBlOyB9Ci0gICAgdmlydHVhbCBib29s
IGlzRmlsZSgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9Ci0KLSAgICAvLyBGSVhNRTogVG8gYmUg
cmVtb3ZlZCB3aGVuIHdlIHN3aXRjaCB0byB1c2luZyBCbG9iRGF0YS4KLSAgICBjb25zdCBTdHJp
bmcmIHBhdGgoKSBjb25zdDsKIAotICAgIC8vIEZJWE1FOiBUbyBiZSByZW1vdmVkIHdoZW4gd2Ug
c3dpdGNoIHRvIHVzaW5nIEJsb2JEYXRhLgotICAgIGNvbnN0IEJsb2JJdGVtTGlzdCYgaXRlbXMo
KSBjb25zdCB7IHJldHVybiBtX2l0ZW1zOyB9CisgICAgdmlydHVhbCB1bnNpZ25lZCBsb25nIGxv
bmcgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PGxvbmcgbG9uZz4obV9zaXplKTsg
fQorICAgIHZpcnR1YWwgYm9vbCBpc0ZpbGUoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogCiAj
aWYgRU5BQkxFKEJMT0IpCiAgICAgUGFzc1JlZlB0cjxCbG9iPiBzbGljZShTY3JpcHRFeGVjdXRp
b25Db250ZXh0KiwgbG9uZyBsb25nIHN0YXJ0LCBsb25nIGxvbmcgbGVuZ3RoLCBjb25zdCBTdHJp
bmcmIGNvbnRlbnRUeXBlID0gU3RyaW5nKCkpIGNvbnN0OwogI2VuZGlmCiAKIHByb3RlY3RlZDoK
LSAgICAvLyBGSVhNRTogVG8gYmUgcmVtb3ZlZCB3aGVuIHdlIHN3aXRjaCB0byB1c2luZyBCbG9i
RGF0YS4KLSAgICBCbG9iKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBjb25zdCBTdHJpbmcmIHR5
cGUsIGNvbnN0IEJsb2JJdGVtTGlzdCYpOwotICAgIEJsb2IoU2NyaXB0RXhlY3V0aW9uQ29udGV4
dCosIGNvbnN0IFBhc3NSZWZQdHI8QmxvYkl0ZW0+Jik7Ci0gICAgQmxvYihTY3JpcHRFeGVjdXRp
b25Db250ZXh0KiwgY29uc3QgU3RyaW5nJiBwYXRoKTsKLQogICAgIEJsb2IoU2NyaXB0RXhlY3V0
aW9uQ29udGV4dCosIFBhc3NPd25QdHI8QmxvYkRhdGE+LCBsb25nIGxvbmcgc2l6ZSk7CiAKICAg
ICAvLyBGb3IgZGVzZXJpYWxpemF0aW9uLgogICAgIEJsb2IoU2NyaXB0RXhlY3V0aW9uQ29udGV4
dCosIGNvbnN0IEtVUkwmIHNyY1VSTCwgY29uc3QgU3RyaW5nJiB0eXBlLCBsb25nIGxvbmcgc2l6
ZSk7CiAKLSAgICAvLyBGSVhNRTogVG8gYmUgcmVtb3ZlZCB3aGVuIHdlIHN3aXRjaCB0byB1c2lu
ZyBCbG9iRGF0YS4KLSAgICBCbG9iSXRlbUxpc3QgbV9pdGVtczsKLQogICAgIC8vIFRoaXMgaXMg
YW4gaW50ZXJuYWwgVVJMIHJlZmVycmluZyB0byB0aGUgYmxvYiBkYXRhIGFzc29jaWF0ZWQgd2l0
aCB0aGlzIG9iamVjdC4KICAgICAvLyBJdCBpcyBvbmx5IHVzZWQgYnkgRmlsZVJlYWRlciB0byBy
ZWFkIHRoZSBibG9iIGRhdGEgdmlhIGxvYWRpbmcgZnJvbSB0aGUgYmxvYiBVUkwgcmVzb3VyY2Uu
CiAgICAgS1VSTCBtX3VybDsKLQorICAgIAogICAgIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIG1f
c2NyaXB0RXhlY3V0aW9uQ29udGV4dDsKICAgICBTdHJpbmcgbV90eXBlOwogICAgIGxvbmcgbG9u
ZyBtX3NpemU7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2h0bWwvQmxvYkJ1aWxkZXIuY3BwIGIvV2Vi
Q29yZS9odG1sL0Jsb2JCdWlsZGVyLmNwcAppbmRleCAyOWE3NTk1Li4yNTJhNzQyIDEwMDY0NAot
LS0gYS9XZWJDb3JlL2h0bWwvQmxvYkJ1aWxkZXIuY3BwCisrKyBiL1dlYkNvcmUvaHRtbC9CbG9i
QnVpbGRlci5jcHAKQEAgLTM0LDYgKzM0LDcgQEAKIAogI2luY2x1ZGUgIkJsb2IuaCIKICNpbmNs
dWRlICJFeGNlcHRpb25Db2RlLmgiCisjaW5jbHVkZSAiRmlsZS5oIgogI2luY2x1ZGUgIkxpbmVF
bmRpbmcuaCIKICNpbmNsdWRlICJUZXh0RW5jb2RpbmcuaCIKICNpbmNsdWRlIDx3dGYvdGV4dC9B
dG9taWNTdHJpbmcuaD4KQEAgLTU2LDEzICs1NywxOSBAQCBzdGF0aWMgQ1N0cmluZyBjb252ZXJ0
VG9DU3RyaW5nKGNvbnN0IFN0cmluZyYgdGV4dCwgY29uc3QgU3RyaW5nJiBlbmRpbmdUeXBlLCBF
eAogICAgIHJldHVybiBDU3RyaW5nKCk7CiB9CiAKK0Jsb2JCdWlsZGVyOjpCbG9iQnVpbGRlcigp
CisgICAgOiBtX3NpemUoMCkKK3sKK30KKwogYm9vbCBCbG9iQnVpbGRlcjo6YXBwZW5kKGNvbnN0
IFN0cmluZyYgdGV4dCwgY29uc3QgU3RyaW5nJiBlbmRpbmdUeXBlLCBFeGNlcHRpb25Db2RlJiBl
YykKIHsKICAgICBDU3RyaW5nIGNzdHIgPSBjb252ZXJ0VG9DU3RyaW5nKHRleHQsIGVuZGluZ1R5
cGUsIGVjKTsKICAgICBpZiAoZWMpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIG1faXRl
bXMuYXBwZW5kKFN0cmluZ0Jsb2JJdGVtOjpjcmVhdGUoY3N0cikpOworICAgIG1fc2l6ZSArPSBj
c3RyLmxlbmd0aCgpOworICAgIG1faXRlbXMuYXBwZW5kKEJsb2JEYXRhSXRlbShjc3RyKSk7CiAg
ICAgcmV0dXJuIHRydWU7CiB9CiAKQEAgLTczLDE3ICs4MCwzNiBAQCBib29sIEJsb2JCdWlsZGVy
OjphcHBlbmQoY29uc3QgU3RyaW5nJiB0ZXh0LCBFeGNlcHRpb25Db2RlJiBlYykKIAogYm9vbCBC
bG9iQnVpbGRlcjo6YXBwZW5kKFBhc3NSZWZQdHI8QmxvYj4gYmxvYikKIHsKLSAgICBpZiAoYmxv
YikgewotICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGJsb2ItPml0ZW1zKCkuc2l6ZSgp
OyArK2kpCi0gICAgICAgICAgICBtX2l0ZW1zLmFwcGVuZChibG9iLT5pdGVtcygpW2ldKTsKLSAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgaWYgKGJsb2ItPmlzRmlsZSgpKSB7CisgICAgICAgIC8v
IElmIHRoZSBibG9iIGlzIGZpbGUgdGhhdCBpcyBub3Qgc25hcHNob3RlZCwgY2FwdHVyZSB0aGUg
c25hcHNob3Qgbm93LgorICAgICAgICBGaWxlKiBmaWxlID0gc3RhdGljX2Nhc3Q8RmlsZSo+KGJs
b2IuZ2V0KCkpOworICAgICAgICBsb25nIGxvbmcgc25hcHNob3RTaXplOworICAgICAgICBkb3Vi
bGUgc25hcHNob3RNb2RpZmljYXRpb25UaW1lOworICAgICAgICBmaWxlLT5jYXB0dXJlU25hcHNo
b3Qoc25hcHNob3RTaXplLCBzbmFwc2hvdE1vZGlmaWNhdGlvblRpbWUpOworCisgICAgICAgIG1f
c2l6ZSArPSBzbmFwc2hvdFNpemU7CisgICAgICAgIG1faXRlbXMuYXBwZW5kKEJsb2JEYXRhSXRl
bShmaWxlLT5wYXRoKCksIDAsIHNuYXBzaG90U2l6ZSwgc25hcHNob3RNb2RpZmljYXRpb25UaW1l
KSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgbG9uZyBsb25nIGJsb2JTaXplID0gc3RhdGljX2Nh
c3Q8bG9uZyBsb25nPihibG9iLT5zaXplKCkpOworICAgICAgICBtX3NpemUgKz0gYmxvYlNpemU7
CisgICAgICAgIG1faXRlbXMuYXBwZW5kKEJsb2JEYXRhSXRlbShibG9iLT51cmwoKSwgMCwgYmxv
YlNpemUpKTsKICAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiB0cnVlOwogfQog
Ci1QYXNzUmVmUHRyPEJsb2I+IEJsb2JCdWlsZGVyOjpnZXRCbG9iKFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQqIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQsIGNvbnN0IFN0cmluZyYgY29udGVudFR5cGUp
IGNvbnN0CitQYXNzUmVmUHRyPEJsb2I+IEJsb2JCdWlsZGVyOjpnZXRCbG9iKFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQqIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQsIGNvbnN0IFN0cmluZyYgY29udGVu
dFR5cGUpCiB7Ci0gICAgcmV0dXJuIEJsb2I6OmNyZWF0ZShzY3JpcHRFeGVjdXRpb25Db250ZXh0
LCBjb250ZW50VHlwZSwgbV9pdGVtcyk7CisgICAgT3duUHRyPEJsb2JEYXRhPiBibG9iRGF0YSA9
IEJsb2JEYXRhOjpjcmVhdGUoKTsKKyAgICBibG9iRGF0YS0+c2V0Q29udGVudFR5cGUoY29udGVu
dFR5cGUpOworICAgIGJsb2JEYXRhLT5zd2FwSXRlbXMobV9pdGVtcyk7CisKKyAgICBSZWZQdHI8
QmxvYj4gYmxvYiA9IEJsb2I6OmNyZWF0ZShzY3JpcHRFeGVjdXRpb25Db250ZXh0LCBibG9iRGF0
YS5yZWxlYXNlKCksIG1fc2l6ZSk7CisKKyAgICAvLyBBZnRlciBjcmVhdGluZyBhIGJsb2IgZnJv
bSB0aGUgY3VycmVudCBibG9iIGRhdGEsIHdlIGRvIG5vdCBuZWVkIHRvIGtlZXAgdGhlIGRhdGEg
YXJvdW5kIGFueSBtb3JlLiBJbnN0ZWFkLCB3ZSBvbmx5CisgICAgLy8gbmVlZCB0byBrZWVwIGEg
cmVmZXJlbmNlIHRvIHRoZSBVUkwgb2YgdGhlIGJsb2IganVzdCBjcmVhdGVkLgorICAgIG1faXRl
bXMuYXBwZW5kKEJsb2JEYXRhSXRlbShibG9iLT51cmwoKSwgMCwgbV9zaXplKSk7CisKKyAgICBy
ZXR1cm4gYmxvYjsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9odG1sL0Jsb2JCdWlsZGVyLmggYi9XZWJDb3JlL2h0bWwvQmxvYkJ1aWxkZXIuaAppbmRl
eCA1ZDE3MDBmLi4yMGU1MTBhIDEwMDY0NAotLS0gYS9XZWJDb3JlL2h0bWwvQmxvYkJ1aWxkZXIu
aAorKysgYi9XZWJDb3JlL2h0bWwvQmxvYkJ1aWxkZXIuaApAQCAtMzEsMTQgKzMxLDE4IEBACiAj
aWZuZGVmIEJsb2JCdWlsZGVyX2gKICNkZWZpbmUgQmxvYkJ1aWxkZXJfaAogCi0jaW5jbHVkZSAi
QmxvYkl0ZW0uaCIKKyNpbmNsdWRlICJCbG9iRGF0YS5oIgorI2luY2x1ZGUgIlBsYXRmb3JtU3Ry
aW5nLmgiCiAjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KICNpbmNsdWRlIDx3dGYvUmVmQ291
bnRlZC5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3Ry
aW5nLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgQmxvYjsKIGNsYXNzIFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQ7CitjbGFzcyBUZXh0RW5jb2Rpbmc7CiAKIHR5cGVkZWYgaW50IEV4
Y2VwdGlvbkNvZGU7CiAKQEAgLTUwLDEwICs1NCwxMyBAQCBwdWJsaWM6CiAgICAgYm9vbCBhcHBl
bmQoY29uc3QgU3RyaW5nJiB0ZXh0LCBFeGNlcHRpb25Db2RlJik7CiAgICAgYm9vbCBhcHBlbmQo
Y29uc3QgU3RyaW5nJiB0ZXh0LCBjb25zdCBTdHJpbmcmIGVuZGluZywgRXhjZXB0aW9uQ29kZSYp
OwogCi0gICAgUGFzc1JlZlB0cjxCbG9iPiBnZXRCbG9iKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQq
LCBjb25zdCBTdHJpbmcmIGNvbnRlbnRUeXBlID0gU3RyaW5nKCkpIGNvbnN0OworICAgIFBhc3NS
ZWZQdHI8QmxvYj4gZ2V0QmxvYihTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgY29uc3QgU3RyaW5n
JiBjb250ZW50VHlwZSA9IFN0cmluZygpKTsKIAogcHJpdmF0ZToKLSAgICBCbG9iSXRlbUxpc3Qg
bV9pdGVtczsKKyAgICBCbG9iQnVpbGRlcigpOworCisgICAgbG9uZyBsb25nIG1fc2l6ZTsKKyAg
ICBCbG9iRGF0YUl0ZW1MaXN0IG1faXRlbXM7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CmRpZmYgLS1naXQgYS9XZWJDb3JlL2h0bWwvQmxvYlVSTC5jcHAgYi9XZWJDb3JlL2h0bWwvQmxv
YlVSTC5jcHAKaW5kZXggNjEwYWFjNC4uYzU1NzFhNyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9odG1s
L0Jsb2JVUkwuY3BwCisrKyBiL1dlYkNvcmUvaHRtbC9CbG9iVVJMLmNwcApAQCAtNjMsNCArNjMs
MTIgQEAgS1VSTCBCbG9iVVJMOjpnZXRPcmlnaW4oY29uc3QgS1VSTCYgdXJsKQogICAgIHJldHVy
biBLVVJMKFBhcnNlZFVSTFN0cmluZywgZGVjb2RlVVJMRXNjYXBlU2VxdWVuY2VzKG9yaWdpbikp
OwogfQogCitTdHJpbmcgQmxvYlVSTDo6Z2V0SWRlbnRpZmllcihjb25zdCBLVVJMJiB1cmwpCit7
CisgICAgQVNTRVJUKHVybC5wcm90b2NvbElzKCJibG9iIikpOworCisgICAgdW5zaWduZWQgc3Rh
cnRJbmRleCA9IHVybC5wYXRoQWZ0ZXJMYXN0U2xhc2goKTsKKyAgICByZXR1cm4gdXJsLnN0cmlu
ZygpLnN1YnN0cmluZyhzdGFydEluZGV4KTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpk
aWZmIC0tZ2l0IGEvV2ViQ29yZS9odG1sL0Jsb2JVUkwuaCBiL1dlYkNvcmUvaHRtbC9CbG9iVVJM
LmgKaW5kZXggMmNlMmM4NS4uZTczYjc3MSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9odG1sL0Jsb2JV
UkwuaAorKysgYi9XZWJDb3JlL2h0bWwvQmxvYlVSTC5oCkBAIC00MSw2ICs0MSw3IEBAIGNsYXNz
IEJsb2JVUkwgewogcHVibGljOgogICAgIHN0YXRpYyBLVVJMIGNyZWF0ZVVSTChTY3JpcHRFeGVj
dXRpb25Db250ZXh0Kik7CiAgICAgc3RhdGljIEtVUkwgZ2V0T3JpZ2luKGNvbnN0IEtVUkwmKTsK
KyAgICBzdGF0aWMgU3RyaW5nIGdldElkZW50aWZpZXIoY29uc3QgS1VSTCYgdXJsKTsKIH07CiAK
IH0KZGlmZiAtLWdpdCBhL1dlYkNvcmUvaHRtbC9GaWxlLmNwcCBiL1dlYkNvcmUvaHRtbC9GaWxl
LmNwcAppbmRleCAyNTNjYjRkLi40OWI3YjVhIDEwMDY0NAotLS0gYS9XZWJDb3JlL2h0bWwvRmls
ZS5jcHAKKysrIGIvV2ViQ29yZS9odG1sL0ZpbGUuY3BwCkBAIC0yNiw1MiArMjYsNjggQEAKICNp
bmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJGaWxlLmgiCiAKLSNpbmNsdWRlICJCbG9iRGF0
YS5oIgorI2luY2x1ZGUgIkJsb2JSZWdpc3RyeS5oIgogI2luY2x1ZGUgIkZpbGVTeXN0ZW0uaCIK
ICNpbmNsdWRlICJNSU1FVHlwZVJlZ2lzdHJ5LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAor
c3RhdGljIFBhc3NPd25QdHI8QmxvYkRhdGE+IGNyZWF0ZUJsb2JEYXRhRm9yRmlsZShjb25zdCBT
dHJpbmcmIHBhdGgpCit7CisgICAgU3RyaW5nIHR5cGU7CisgICAgaW50IGluZGV4ID0gcGF0aC5y
ZXZlcnNlRmluZCgnLicpOworICAgIGlmIChpbmRleCAhPSAtMSkKKyAgICAgICAgdHlwZSA9IE1J
TUVUeXBlUmVnaXN0cnk6OmdldE1JTUVUeXBlRm9yRXh0ZW5zaW9uKHBhdGguc3Vic3RyaW5nKGlu
ZGV4ICsgMSkpOworCisgICAgT3duUHRyPEJsb2JEYXRhPiBibG9iRGF0YSA9IEJsb2JEYXRhOjpj
cmVhdGUoKTsKKyAgICBibG9iRGF0YS0+c2V0Q29udGVudFR5cGUodHlwZSk7CisgICAgYmxvYkRh
dGEtPmFwcGVuZEZpbGUocGF0aCk7CisgICAgcmV0dXJuIGJsb2JEYXRhLnJlbGVhc2UoKTsKK30K
KwogRmlsZTo6RmlsZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBzY3JpcHRFeGVjdXRpb25Db250
ZXh0LCBjb25zdCBTdHJpbmcmIHBhdGgpCi0gICAgOiBCbG9iKHNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQsIHBhdGgpCisgICAgOiBCbG9iKHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQsIGNyZWF0ZUJsb2JE
YXRhRm9yRmlsZShwYXRoKSwgLTEpCisgICAgLCBtX3BhdGgocGF0aCkKKyAgICAsIG1fbmFtZShw
YXRoR2V0RmlsZU5hbWUocGF0aCkpCiB7Ci0gICAgSW5pdCgpOwogfQogCiBGaWxlOjpGaWxlKFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQsIGNvbnN0IFN0cmlu
ZyYgcGF0aCwgY29uc3QgS1VSTCYgdXJsLCBjb25zdCBTdHJpbmcmIHR5cGUpCi0gICAgOiBCbG9i
KHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQsIHVybCwgdHlwZSwgQmxvYkRhdGFJdGVtOjp0b0VuZE9m
RmlsZSkKKyAgICA6IEJsb2Ioc2NyaXB0RXhlY3V0aW9uQ29udGV4dCwgdXJsLCB0eXBlLCAtMSkK
KyAgICAsIG1fcGF0aChwYXRoKQogewotICAgIC8vIEZJWE1FOiBUbyBiZSByZW1vdmVkIHdoZW4g
d2Ugc3dpdGNoIHRvIHVzaW5nIEJsb2JEYXRhLgotICAgICBtX2l0ZW1zLmFwcGVuZChGaWxlQmxv
Ykl0ZW06OmNyZWF0ZShwYXRoKSk7CisgICAgbV9uYW1lID0gcGF0aEdldEZpbGVOYW1lKHBhdGgp
OwogfQogCiAjaWYgRU5BQkxFKERJUkVDVE9SWV9VUExPQUQpCi1GaWxlOjpGaWxlKFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQqIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQsIGNvbnN0IFN0cmluZyYgcmVs
YXRpdmVQYXRoLCBjb25zdCBTdHJpbmcmIGZpbGVQYXRoKQotICAgIDogQmxvYihzY3JpcHRFeGVj
dXRpb25Db250ZXh0LCBGaWxlQmxvYkl0ZW06OmNyZWF0ZShmaWxlUGF0aCwgcmVsYXRpdmVQYXRo
KSkKK0ZpbGU6OkZpbGUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCwgY29uc3QgU3RyaW5nJiByZWxhdGl2ZVBhdGgsIGNvbnN0IFN0cmluZyYgcGF0aCkKKyAg
ICA6IEJsb2Ioc2NyaXB0RXhlY3V0aW9uQ29udGV4dCwgY3JlYXRlQmxvYkRhdGFGb3JGaWxlKHBh
dGgpLCAtMSkKKyAgICAsIG1fcGF0aChwYXRoKQorICAgICwgbV9yZWxhdGl2ZVBhdGgocmVsYXRp
dmVQYXRoKQogewotICAgIEluaXQoKTsKIH0KICNlbmRpZgogCi12b2lkIEZpbGU6OkluaXQoKQor
dW5zaWduZWQgbG9uZyBsb25nIEZpbGU6OnNpemUoKSBjb25zdAogewotICAgIC8vIFdlIGRvbid0
IHVzZSBNSU1FVHlwZVJlZ2lzdHJ5OjpnZXRNSU1FVHlwZUZvclBhdGgoKSBiZWNhdXNlIGl0IHJl
dHVybnMgImFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbSIgdXBvbiBmYWlsdXJlLgotICAgIGNvbnN0
IFN0cmluZyYgZmlsZU5hbWUgPSBuYW1lKCk7Ci0gICAgc2l6ZV90IGluZGV4ID0gZmlsZU5hbWUu
cmV2ZXJzZUZpbmQoJy4nKTsKLSAgICBpZiAoaW5kZXggIT0gbm90Rm91bmQpCi0gICAgICAgIG1f
dHlwZSA9IE1JTUVUeXBlUmVnaXN0cnk6OmdldE1JTUVUeXBlRm9yRXh0ZW5zaW9uKGZpbGVOYW1l
LnN1YnN0cmluZyhpbmRleCArIDEpKTsKKyAgICAvLyBGSVhNRTogSmF2YVNjcmlwdCBjYW5ub3Qg
cmVwcmVzZW50IHNpemVzIGFzIGxhcmdlIGFzIHVuc2lnbmVkIGxvbmcgbG9uZywgd2UgbmVlZCB0
bworICAgIC8vIGNvbWUgdXAgd2l0aCBhbiBleGNlcHRpb24gdG8gdGhyb3cgaWYgZmlsZSBzaXpl
IGlzIG5vdCByZXByZXNldGFibGUuCisgICAgbG9uZyBsb25nIHNpemU7CisgICAgaWYgKCFnZXRG
aWxlU2l6ZShtX3BhdGgsIHNpemUpKQorICAgICAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gc3Rh
dGljX2Nhc3Q8dW5zaWduZWQgbG9uZyBsb25nPihzaXplKTsKIH0KIAotY29uc3QgU3RyaW5nJiBG
aWxlOjpuYW1lKCkgY29uc3QKK3ZvaWQgRmlsZTo6Y2FwdHVyZVNuYXBzaG90KGxvbmcgbG9uZyYg
c25hcHNob3RTaXplLCBkb3VibGUmIHNuYXBzaG90TW9kaWZpY2F0aW9uVGltZSkgY29uc3QKIHsK
LSAgICByZXR1cm4gaXRlbXMoKS5hdCgwKS0+dG9GaWxlQmxvYkl0ZW0oKS0+bmFtZSgpOworICAg
IC8vIE9idGFpbnMgYSBzbmFwc2hvdCBvZiB0aGUgZmlsZSBieSBjYXB0dXJpbmcgaXRzIGN1cnJl
bnQgc2l6ZSBhbmQgbW9kaWZpY2F0aW9uIHRpbWUuIFRoaXMgaXMgdXNlZCB3aGVuIHdlIHNsaWNl
IGEgZmlsZSBmb3IgdGhlIGZpcnN0IHRpbWUuCisgICAgLy8gSWYgd2UgZmFpbCB0byByZXRyaWV2
ZSB0aGUgc2l6ZSBvciBtb2RpZmljYXRpb24gdGltZSwgcHJvYmFibHkgZHVlIHRvIHRoYXQgdGhl
IGZpbGUgaGFzIGJlZW4gZGVsZXRlZCwgMCBzaXplIGlzIHJldHVybmVkLgorICAgIHRpbWVfdCBt
b2RpZmljYXRpb25UaW1lOworICAgIGlmICghZ2V0RmlsZVNpemUobV9wYXRoLCBzbmFwc2hvdFNp
emUpIHx8ICFnZXRGaWxlTW9kaWZpY2F0aW9uVGltZShtX3BhdGgsIG1vZGlmaWNhdGlvblRpbWUp
KSB7CisgICAgICAgIHNuYXBzaG90U2l6ZSA9IDA7CisgICAgICAgIHNuYXBzaG90TW9kaWZpY2F0
aW9uVGltZSA9IDA7CisgICAgfSBlbHNlCisgICAgICAgIHNuYXBzaG90TW9kaWZpY2F0aW9uVGlt
ZSA9IG1vZGlmaWNhdGlvblRpbWU7CiB9CiAKLSNpZiBFTkFCTEUoRElSRUNUT1JZX1VQTE9BRCkK
LWNvbnN0IFN0cmluZyYgRmlsZTo6d2Via2l0UmVsYXRpdmVQYXRoKCkgY29uc3QKLXsKLSAgICBy
ZXR1cm4gaXRlbXMoKS5hdCgwKS0+dG9GaWxlQmxvYkl0ZW0oKS0+cmVsYXRpdmVQYXRoKCk7Ci19
Ci0jZW5kaWYKLQogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9o
dG1sL0ZpbGUuaCBiL1dlYkNvcmUvaHRtbC9GaWxlLmgKaW5kZXggMDZhNzNjNS4uOTBkZjVjYiAx
MDA2NDQKLS0tIGEvV2ViQ29yZS9odG1sL0ZpbGUuaAorKysgYi9XZWJDb3JlL2h0bWwvRmlsZS5o
CkBAIC0yNywxMSArMjcsMTUgQEAKICNkZWZpbmUgRmlsZV9oCiAKICNpbmNsdWRlICJCbG9iLmgi
CisjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKICNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5o
PgogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAor
Y2xhc3MgS1VSTDsKK2NsYXNzIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ7CisKIGNsYXNzIEZpbGUg
OiBwdWJsaWMgQmxvYiB7CiBwdWJsaWM6CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8RmlsZT4gY3Jl
YXRlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQsIGNvbnN0
IFN0cmluZyYgcGF0aCkKQEAgLTQwLDkgKzQ0LDkgQEAgcHVibGljOgogICAgIH0KIAogICAgIC8v
IEZvciBkZXNlcmlhbGl6YXRpb24uCi0gICAgc3RhdGljIFBhc3NSZWZQdHI8RmlsZT4gY3JlYXRl
KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQsIGNvbnN0IFN0
cmluZyYgcGF0aCwgY29uc3QgS1VSTCYgdXJsLCBjb25zdCBTdHJpbmcmIHR5cGUpCisgICAgc3Rh
dGljIFBhc3NSZWZQdHI8RmlsZT4gY3JlYXRlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQsIGNvbnN0IFN0cmluZyYgcGF0aCwgY29uc3QgS1VSTCYgc3JjVVJM
LCBjb25zdCBTdHJpbmcmIHR5cGUpCiAgICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3
IEZpbGUoc2NyaXB0RXhlY3V0aW9uQ29udGV4dCwgcGF0aCwgdXJsLCB0eXBlKSk7CisgICAgICAg
IHJldHVybiBhZG9wdFJlZihuZXcgRmlsZShzY3JpcHRFeGVjdXRpb25Db250ZXh0LCBwYXRoLCBz
cmNVUkwsIHR5cGUpKTsKICAgICB9CiAKICNpZiBFTkFCTEUoRElSRUNUT1JZX1VQTE9BRCkKQEAg
LTUyLDI5ICs1NiwzNyBAQCBwdWJsaWM6CiAgICAgfQogI2VuZGlmCiAKKyAgICB2aXJ0dWFsIHVu
c2lnbmVkIGxvbmcgbG9uZyBzaXplKCkgY29uc3Q7CiAgICAgdmlydHVhbCBib29sIGlzRmlsZSgp
IGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KIAotICAgIGNvbnN0IFN0cmluZyYgbmFtZSgpIGNvbnN0
OworICAgIGNvbnN0IFN0cmluZyYgcGF0aCgpIGNvbnN0IHsgcmV0dXJuIG1fcGF0aDsgfQorICAg
IGNvbnN0IFN0cmluZyYgbmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fbmFtZTsgfQogI2lmIEVOQUJM
RShESVJFQ1RPUllfVVBMT0FEKQogICAgIC8vIFJldHVybnMgdGhlIHJlbGF0aXZlIHBhdGggb2Yg
dGhpcyBmaWxlIGluIHRoZSBjb250ZXh0IG9mIGEgZGlyZWN0b3J5IHNlbGVjdGlvbi4KLSAgICBj
b25zdCBTdHJpbmcmIHdlYmtpdFJlbGF0aXZlUGF0aCgpIGNvbnN0OworICAgIGNvbnN0IFN0cmlu
ZyYgd2Via2l0UmVsYXRpdmVQYXRoKCkgY29uc3QgeyByZXR1cm4gbV9yZWxhdGl2ZVBhdGg7IH0K
ICNlbmRpZgogCisgICAgdm9pZCBjYXB0dXJlU25hcHNob3QobG9uZyBsb25nJiBzbmFwc2hvdFNp
emUsIGRvdWJsZSYgc25hcHNob3RNb2RpZmljYXRpb25UaW1lKSBjb25zdDsKKwogICAgIC8vIEZJ
WE1FOiBvYnNvbGV0ZSBhdHRyaWJ1dGVzLiBUbyBiZSByZW1vdmVkLgogICAgIGNvbnN0IFN0cmlu
ZyYgZmlsZU5hbWUoKSBjb25zdCB7IHJldHVybiBuYW1lKCk7IH0KICAgICB1bnNpZ25lZCBsb25n
IGxvbmcgZmlsZVNpemUoKSBjb25zdCB7IHJldHVybiBzaXplKCk7IH0KIAogcHJpdmF0ZToKICAg
ICBGaWxlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBjb25zdCBTdHJpbmcmIHBhdGgpOwotCisg
ICAgCiAgICAgLy8gRm9yIGRlc2VyaWFsaXphdGlvbi4KLSAgICBGaWxlKFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQqLCBjb25zdCBTdHJpbmcmIHBhdGgsIGNvbnN0IEtVUkwmLCBjb25zdCBTdHJpbmcm
IHR5cGUpOworICAgIEZpbGUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIGNvbnN0IFN0cmluZyYg
cGF0aCwgY29uc3QgS1VSTCYgc3JjVVJMLCBjb25zdCBTdHJpbmcmIHR5cGUpOwogCiAjaWYgRU5B
QkxFKERJUkVDVE9SWV9VUExPQUQpCiAgICAgRmlsZShTY3JpcHRFeGVjdXRpb25Db250ZXh0Kiwg
Y29uc3QgU3RyaW5nJiByZWxhdGl2ZVBhdGgsIGNvbnN0IFN0cmluZyYgcGF0aCk7CiAjZW5kaWYK
IAotICAgIHZvaWQgSW5pdCgpOworICAgIFN0cmluZyBtX3BhdGg7CisgICAgU3RyaW5nIG1fbmFt
ZTsKKyNpZiBFTkFCTEUoRElSRUNUT1JZX1VQTE9BRCkKKyAgICBTdHJpbmcgbV9yZWxhdGl2ZVBh
dGg7CisjZW5kaWYKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1dl
YkNvcmUvaHRtbC9GaWxlUmVhZGVyLmNwcCBiL1dlYkNvcmUvaHRtbC9GaWxlUmVhZGVyLmNwcApp
bmRleCBkNjAwZDQwLi43NDdiNmZmIDEwMDY0NAotLS0gYS9XZWJDb3JlL2h0bWwvRmlsZVJlYWRl
ci5jcHAKKysrIGIvV2ViQ29yZS9odG1sL0ZpbGVSZWFkZXIuY3BwCkBAIC0zNiwxNyArMzYsMTkg
QEAKIAogI2luY2x1ZGUgIkJhc2U2NC5oIgogI2luY2x1ZGUgIkJsb2IuaCIKKyNpbmNsdWRlICJD
cm9zc1RocmVhZFRhc2suaCIKICNpbmNsdWRlICJGaWxlLmgiCi0jaW5jbHVkZSAiRmlsZVN0cmVh
bVByb3h5LmgiCiAjaW5jbHVkZSAiTG9nZ2luZy5oIgogI2luY2x1ZGUgIlByb2dyZXNzRXZlbnQu
aCIKKyNpbmNsdWRlICJSZXNvdXJjZUVycm9yLmgiCisjaW5jbHVkZSAiUmVzb3VyY2VSZXF1ZXN0
LmgiCiAjaW5jbHVkZSAiU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oIgogI2luY2x1ZGUgIlRleHRS
ZXNvdXJjZURlY29kZXIuaCIKKyNpbmNsdWRlICJUaHJlYWRhYmxlTG9hZGVyLmgiCiAjaW5jbHVk
ZSA8d3RmL0N1cnJlbnRUaW1lLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY29uc3QgdW5z
aWduZWQgYnVmZmVyU2l6ZSA9IDEwMjQ7CiBjb25zdCBkb3VibGUgcHJvZ3Jlc3NOb3RpZmljYXRp
b25JbnRlcnZhbE1TID0gNTA7CiAKIEZpbGVSZWFkZXI6OkZpbGVSZWFkZXIoU2NyaXB0RXhlY3V0
aW9uQ29udGV4dCogY29udGV4dCkKQEAgLTU5LDcgKzYxLDYgQEAgRmlsZVJlYWRlcjo6RmlsZVJl
YWRlcihTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0KQogICAgICwgbV90b3RhbEJ5dGVz
KDApCiAgICAgLCBtX2xhc3RQcm9ncmVzc05vdGlmaWNhdGlvblRpbWVNUygwKQogewotICAgIG1f
YnVmZmVyLnJlc2l6ZShidWZmZXJTaXplKTsKIH0KIAogRmlsZVJlYWRlcjo6fkZpbGVSZWFkZXIo
KQpAQCAtODMsNTUgKzg0LDU2IEBAIHZvaWQgRmlsZVJlYWRlcjo6c3RvcCgpCiAgICAgdGVybWlu
YXRlKCk7CiB9CiAKLXZvaWQgRmlsZVJlYWRlcjo6cmVhZEFzQmluYXJ5U3RyaW5nKEJsb2IqIGZp
bGVCbG9iKQordm9pZCBGaWxlUmVhZGVyOjpyZWFkQXNCaW5hcnlTdHJpbmcoQmxvYiogYmxvYikK
IHsKLSAgICBpZiAoIWZpbGVCbG9iKQorICAgIGlmICghYmxvYikKICAgICAgICAgcmV0dXJuOwog
Ci0gICAgLy8gRklYTUU6IG5lZWRzIHRvIGhhbmRsZSBub24tZmlsZSBibG9icy4KLSAgICBMT0co
RmlsZUFQSSwgIkZpbGVSZWFkZXI6IHJlYWRpbmcgYXMgYmluYXJ5OiAlc1xuIiwgZmlsZUJsb2It
PnBhdGgoKS51dGY4KCkuZGF0YSgpKTsKKyAgICBMT0coRmlsZUFQSSwgIkZpbGVSZWFkZXI6IHJl
YWRpbmcgYXMgYmluYXJ5OiAlcyAlc1xuIiwgYmxvYi0+dXJsKCkuc3RyaW5nKCkudXRmOCgpLmRh
dGEoKSwgYmxvYi0+aXNGaWxlKCkgPyBzdGF0aWNfY2FzdDxGaWxlKj4oYmxvYiktPnBhdGgoKS51
dGY4KCkuZGF0YSgpIDogIiIpOwogCi0gICAgcmVhZEludGVybmFsKGZpbGVCbG9iLCBSZWFkRmls
ZUFzQmluYXJ5U3RyaW5nKTsKKyAgICByZWFkSW50ZXJuYWwoYmxvYiwgUmVhZEZpbGVBc0JpbmFy
eVN0cmluZyk7CiB9CiAKLXZvaWQgRmlsZVJlYWRlcjo6cmVhZEFzVGV4dChCbG9iKiBmaWxlQmxv
YiwgY29uc3QgU3RyaW5nJiBlbmNvZGluZykKK3ZvaWQgRmlsZVJlYWRlcjo6cmVhZEFzVGV4dChC
bG9iKiBibG9iLCBjb25zdCBTdHJpbmcmIGVuY29kaW5nKQogewotICAgIGlmICghZmlsZUJsb2Ip
CisgICAgaWYgKCFibG9iKQogICAgICAgICByZXR1cm47CiAKLSAgICAvLyBGSVhNRTogbmVlZHMg
dG8gaGFuZGxlIG5vbi1maWxlIGJsb2JzLgotICAgIExPRyhGaWxlQVBJLCAiRmlsZVJlYWRlcjog
cmVhZGluZyBhcyB0ZXh0OiAlc1xuIiwgZmlsZUJsb2ItPnBhdGgoKS51dGY4KCkuZGF0YSgpKTsK
KyAgICBMT0coRmlsZUFQSSwgIkZpbGVSZWFkZXI6IHJlYWRpbmcgYXMgdGV4dDogJXMgJXNcbiIs
IGJsb2ItPnVybCgpLnN0cmluZygpLnV0ZjgoKS5kYXRhKCksIGJsb2ItPmlzRmlsZSgpID8gc3Rh
dGljX2Nhc3Q8RmlsZSo+KGJsb2IpLT5wYXRoKCkudXRmOCgpLmRhdGEoKSA6ICIiKTsKIAogICAg
IGlmICghZW5jb2RpbmcuaXNFbXB0eSgpKQogICAgICAgICBtX2VuY29kaW5nID0gVGV4dEVuY29k
aW5nKGVuY29kaW5nKTsKLSAgICByZWFkSW50ZXJuYWwoZmlsZUJsb2IsIFJlYWRGaWxlQXNUZXh0
KTsKKyAgICByZWFkSW50ZXJuYWwoYmxvYiwgUmVhZEZpbGVBc1RleHQpOwogfQogCi12b2lkIEZp
bGVSZWFkZXI6OnJlYWRBc0RhdGFVUkwoRmlsZSogZmlsZSkKK3ZvaWQgRmlsZVJlYWRlcjo6cmVh
ZEFzRGF0YVVSTChCbG9iKiBibG9iKQogewotICAgIGlmICghZmlsZSkKKyAgICBpZiAoIWJsb2Ip
CiAgICAgICAgIHJldHVybjsKIAotICAgIExPRyhGaWxlQVBJLCAiRmlsZVJlYWRlcjogcmVhZGlu
ZyBhcyBkYXRhIFVSTDogJXNcbiIsIGZpbGUtPnBhdGgoKS51dGY4KCkuZGF0YSgpKTsKKyAgICBM
T0coRmlsZUFQSSwgIkZpbGVSZWFkZXI6IHJlYWRpbmcgYXMgZGF0YSBVUkw6ICVzICVzXG4iLCBi
bG9iLT51cmwoKS5zdHJpbmcoKS51dGY4KCkuZGF0YSgpLCBibG9iLT5pc0ZpbGUoKSA/IHN0YXRp
Y19jYXN0PEZpbGUqPihibG9iKS0+cGF0aCgpLnV0ZjgoKS5kYXRhKCkgOiAiIik7CiAKLSAgICBt
X2ZpbGVUeXBlID0gZmlsZS0+dHlwZSgpOwotICAgIHJlYWRJbnRlcm5hbChmaWxlLCBSZWFkRmls
ZUFzRGF0YVVSTCk7CisgICAgbV9maWxlVHlwZSA9IGJsb2ItPnR5cGUoKTsKKyAgICByZWFkSW50
ZXJuYWwoYmxvYiwgUmVhZEZpbGVBc0RhdGFVUkwpOwogfQogCi12b2lkIEZpbGVSZWFkZXI6OnJl
YWRJbnRlcm5hbChCbG9iKiBmaWxlQmxvYiwgUmVhZFR5cGUgdHlwZSkKK3N0YXRpYyB2b2lkIGRl
bGF5ZWRTdGFydChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgRmlsZVJlYWRlciogcmVhZGVyKQor
eworICAgIHJlYWRlci0+c3RhcnQoKTsKK30KKwordm9pZCBGaWxlUmVhZGVyOjpyZWFkSW50ZXJu
YWwoQmxvYiogYmxvYiwgUmVhZFR5cGUgdHlwZSkKIHsKICAgICAvLyByZWFkQXMqKiogbWV0aG9k
cygpIGNhbiBiZSBjYWxsZWQgbXVsdGlwbGUgdGltZXMuIE9ubHkgdGhlIGxhc3QgY2FsbCBiZWZv
cmUgdGhlIGFjdHVhbCByZWFkaW5nIGhhcHBlbnMgaXMgcHJvY2Vzc2VkLgogICAgIGlmIChtX3N0
YXRlICE9IE5vbmUgJiYgbV9zdGF0ZSAhPSBTdGFydGluZykKICAgICAgICAgcmV0dXJuOwogCi0g
ICAgbV9maWxlQmxvYiA9IGZpbGVCbG9iOworICAgIGlmIChtX3N0YXRlID09IE5vbmUpCisgICAg
ICAgIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKS0+cG9zdFRhc2soY3JlYXRlQ2FsbGJhY2tUYXNr
KCZkZWxheWVkU3RhcnQsIHRoaXMpKTsKKworICAgIG1fYmxvYiA9IGJsb2I7CiAgICAgbV9yZWFk
VHlwZSA9IHR5cGU7CiAgICAgbV9zdGF0ZSA9IFN0YXJ0aW5nOwotCi0gICAgLy8gV2hlbiBGaWxl
U3RyZWFtUHJveHkgaXMgY3JlYXRlZCwgRmlsZVJlYWRlcjo6ZGlkU3RhcnQoKSB3aWxsIGdldCBu
b3RpZmllZCBvbiB0aGUgRmlsZSB0aHJlYWQgYW5kIHdlIHdpbGwgc3RhcnQKLSAgICAvLyBvcGVu
aW5nIGFuZCByZWFkaW5nIHRoZSBmaWxlIHNpbmNlIHRoZW4uCi0gICAgaWYgKCFtX3N0cmVhbVBy
b3h5LmdldCgpKQotICAgICAgICBtX3N0cmVhbVByb3h5ID0gRmlsZVN0cmVhbVByb3h5OjpjcmVh
dGUoc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLCB0aGlzKTsKIH0KIAogdm9pZCBGaWxlUmVhZGVy
OjphYm9ydCgpCkBAIC0xNTAsODcgKzE1Miw2NiBAQCB2b2lkIEZpbGVSZWFkZXI6OmFib3J0KCkK
IAogdm9pZCBGaWxlUmVhZGVyOjp0ZXJtaW5hdGUoKQogewotICAgIGlmIChtX3N0cmVhbVByb3h5
KSB7Ci0gICAgICAgIG1fc3RyZWFtUHJveHktPnN0b3AoKTsKLSAgICAgICAgbV9zdHJlYW1Qcm94
eSA9IDA7CisgICAgaWYgKG1fbG9hZGVyKSB7CisgICAgICAgIG1fbG9hZGVyLT5jYW5jZWwoKTsK
KyAgICAgICAgbV9sb2FkZXIgPSAwOwogICAgIH0KICAgICBtX3N0YXRlID0gQ29tcGxldGVkOwog
fQogCi12b2lkIEZpbGVSZWFkZXI6OmRpZFN0YXJ0KCkKK3ZvaWQgRmlsZVJlYWRlcjo6c3RhcnQo
KQogewogICAgIG1fc3RhdGUgPSBPcGVuaW5nOwogCi0gICAgQVNTRVJUKG1fZmlsZUJsb2ItPml0
ZW1zKCkuc2l6ZSgpID09IDEgJiYgbV9maWxlQmxvYi0+aXRlbXMoKS5hdCgwKS0+dG9GaWxlQmxv
Ykl0ZW0oKSk7Ci0gICAgY29uc3QgRmlsZVJhbmdlQmxvYkl0ZW0qIGZpbGVSYW5nZUl0ZW0gPSBt
X2ZpbGVCbG9iLT5pdGVtcygpLmF0KDApLT50b0ZpbGVSYW5nZUJsb2JJdGVtKCk7Ci0gICAgZG91
YmxlIGV4cGVjdGVkTW9kaWZpY2F0aW9uVGltZSA9IGZpbGVSYW5nZUl0ZW0gPyBmaWxlUmFuZ2VJ
dGVtLT5zbmFwc2hvdE1vZGlmaWNhdGlvblRpbWUoKSA6IDA7CisgICAgLy8gVGhlIGJsb2IgaXMg
cmVhZCBieSByb3V0aW5nIHRocm91Z2ggdGhlIHJlcXVlc3QgaGFuZGxpbmcgbGF5ZXIgZ2l2ZW4g
dGhlIGJsb2IgdXJsLgorICAgIFJlc291cmNlUmVxdWVzdCByZXF1ZXN0KG1fYmxvYi0+dXJsKCkp
OworICAgIHJlcXVlc3Quc2V0SFRUUE1ldGhvZCgiR0VUIik7CisKKyAgICBUaHJlYWRhYmxlTG9h
ZGVyT3B0aW9ucyBvcHRpb25zOworICAgIG9wdGlvbnMuc2VuZExvYWRDYWxsYmFja3MgPSB0cnVl
OworICAgIG9wdGlvbnMuc25pZmZDb250ZW50ID0gZmFsc2U7CisgICAgb3B0aW9ucy5mb3JjZVBy
ZWZsaWdodCA9IGZhbHNlOworICAgIG9wdGlvbnMuYWxsb3dDcmVkZW50aWFscyA9IHRydWU7Cisg
ICAgb3B0aW9ucy5jcm9zc09yaWdpblJlcXVlc3RQb2xpY3kgPSBEZW55Q3Jvc3NPcmlnaW5SZXF1
ZXN0czsKIAotICAgIG1fc3RyZWFtUHJveHktPmdldFNpemUobV9maWxlQmxvYi0+cGF0aCgpLCBl
eHBlY3RlZE1vZGlmaWNhdGlvblRpbWUpOworICAgIG1fbG9hZGVyID0gVGhyZWFkYWJsZUxvYWRl
cjo6Y3JlYXRlKHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSwgdGhpcywgcmVxdWVzdCwgb3B0aW9u
cyk7CiB9CiAKLXZvaWQgRmlsZVJlYWRlcjo6ZGlkR2V0U2l6ZShsb25nIGxvbmcgc2l6ZSkKK3Zv
aWQgRmlsZVJlYWRlcjo6ZGlkUmVjZWl2ZVJlc3BvbnNlKGNvbnN0IFJlc291cmNlUmVzcG9uc2Um
IHJlc3BvbnNlKQogewotICAgIC8vIElmIHRoZSBzaXplIGlzIC0xLCBpdCBtZWFucyB0aGUgZmls
ZSBoYXMgYmVlbiBtb3ZlZCBvciBjaGFuZ2VkLiBGYWlsIG5vdy4KLSAgICBpZiAoc2l6ZSA9PSAt
MSkgewotICAgICAgICBkaWRGYWlsKE5PVF9GT1VORF9FUlIpOworICAgIGlmIChyZXNwb25zZS5o
dHRwU3RhdHVzQ29kZSgpICE9IDIwMCkgeworICAgICAgICBmYWlsZWQocmVzcG9uc2UuaHR0cFN0
YXR1c0NvZGUoKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBtX3N0YXRlID0gUmVh
ZGluZzsKICAgICBmaXJlRXZlbnQoZXZlbnROYW1lcygpLmxvYWRzdGFydEV2ZW50KTsKIAotICAg
IEFTU0VSVChtX2ZpbGVCbG9iLT5pdGVtcygpLnNpemUoKSA9PSAxICYmIG1fZmlsZUJsb2ItPml0
ZW1zKCkuYXQoMCktPnRvRmlsZUJsb2JJdGVtKCkpOwotICAgIGNvbnN0IEZpbGVSYW5nZUJsb2JJ
dGVtKiBmaWxlUmFuZ2VJdGVtID0gbV9maWxlQmxvYi0+aXRlbXMoKS5hdCgwKS0+dG9GaWxlUmFu
Z2VCbG9iSXRlbSgpOwotICAgIGxvbmcgbG9uZyBzdGFydCA9IGZpbGVSYW5nZUl0ZW0gPyBmaWxl
UmFuZ2VJdGVtLT5zdGFydCgpIDogMDsKLQotICAgIC8vIFRoZSBzaXplIHBhc3NlZCBiYWNrIGlz
IHRoZSBzaXplIG9mIHRoZSB3aG9sZSBmaWxlLiBJZiB0aGUgdW5kZXJseWluZyBpdGVtIGlzIGEg
c2xpY2VkIGZpbGUsIHdlIG5lZWQgdG8gdXNlIHRoZSBzbGljZSBsZW5ndGguCi0gICAgbV90b3Rh
bEJ5dGVzID0gZmlsZVJhbmdlSXRlbSA/IGZpbGVSYW5nZUl0ZW0tPnNpemUoKSA6IHNpemU7Ci0K
LSAgICBtX3N0cmVhbVByb3h5LT5vcGVuRm9yUmVhZChtX2ZpbGVCbG9iLT5wYXRoKCksIHN0YXJ0
LCBtX3RvdGFsQnl0ZXMpOworICAgIG1fdG90YWxCeXRlcyA9IHJlc3BvbnNlLmV4cGVjdGVkQ29u
dGVudExlbmd0aCgpOwogfQogCi12b2lkIEZpbGVSZWFkZXI6OmRpZE9wZW4oYm9vbCBzdWNjZXNz
KQordm9pZCBGaWxlUmVhZGVyOjpkaWRSZWNlaXZlRGF0YShjb25zdCBjaGFyKiBkYXRhLCBpbnQg
bGVuZ3RoUmVjZWl2ZWQpCiB7Ci0gICAgaWYgKCFzdWNjZXNzKSB7Ci0gICAgICAgIGRpZEZhaWwo
Tk9UX1JFQURBQkxFX0VSUik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgCi0gICAgbV9z
dHJlYW1Qcm94eS0+cmVhZChtX2J1ZmZlci5kYXRhKCksIG1fYnVmZmVyLnNpemUoKSk7Ci19Cisg
ICAgQVNTRVJUKGRhdGEgJiYgbGVuZ3RoUmVjZWl2ZWQpOwogCi12b2lkIEZpbGVSZWFkZXI6OmRp
ZFJlYWQoaW50IGJ5dGVzUmVhZCkKLXsKICAgICAvLyBCYWlsIG91dCBpZiB3ZSBoYXZlIGFib3J0
ZWQgdGhlIHJlYWRpbmcuCiAgICAgaWYgKG1fc3RhdGUgPT0gQ29tcGxldGVkKQogICAgICAgICBy
ZXR1cm47CiAKLSAgICAvLyBJZiBieXRlc1JlYWQgaXMgLTEsIGl0IG1lYW5zIGFuIGVycm9yIGhh
cHBlbnMuCi0gICAgaWYgKGJ5dGVzUmVhZCA9PSAtMSkgewotICAgICAgICBkaWRGYWlsKE5PVF9S
RUFEQUJMRV9FUlIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgLy8gSWYgYnl0ZXNS
ZWFkIGlzIDAsIGl0IG1lYW5zIHRoZSByZWFkaW5nIGlzIGRvbmUuCi0gICAgaWYgKCFieXRlc1Jl
YWQpIHsKLSAgICAgICAgZGlkRmluaXNoKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KICAg
ICBzd2l0Y2ggKG1fcmVhZFR5cGUpIHsKICAgICBjYXNlIFJlYWRGaWxlQXNCaW5hcnlTdHJpbmc6
Ci0gICAgICAgIG1fcmVzdWx0ICs9IFN0cmluZyhtX2J1ZmZlci5kYXRhKCksIHN0YXRpY19jYXN0
PHVuc2lnbmVkPihieXRlc1JlYWQpKTsKKyAgICAgICAgbV9yZXN1bHQgKz0gU3RyaW5nKGRhdGEs
IHN0YXRpY19jYXN0PHVuc2lnbmVkPihsZW5ndGhSZWNlaXZlZCkpOwogICAgICAgICBicmVhazsK
ICAgICBjYXNlIFJlYWRGaWxlQXNUZXh0OgogICAgIGNhc2UgUmVhZEZpbGVBc0RhdGFVUkw6Ci0g
ICAgICAgIG1fcmF3RGF0YS5hcHBlbmQobV9idWZmZXIuZGF0YSgpLCBzdGF0aWNfY2FzdDx1bnNp
Z25lZD4oYnl0ZXNSZWFkKSk7CisgICAgICAgIG1fcmF3RGF0YS5hcHBlbmQoZGF0YSwgc3RhdGlj
X2Nhc3Q8dW5zaWduZWQ+KGxlbmd0aFJlY2VpdmVkKSk7CiAgICAgICAgIG1faXNSYXdEYXRhQ29u
dmVydGVkID0gZmFsc2U7CiAgICAgICAgIGJyZWFrOwogICAgIGRlZmF1bHQ6CiAgICAgICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgIH0KIAotICAgIG1fYnl0ZXNMb2FkZWQgKz0gYnl0ZXNS
ZWFkOworICAgIG1fYnl0ZXNMb2FkZWQgKz0gbGVuZ3RoUmVjZWl2ZWQ7CiAKICAgICAvLyBGaXJl
IHRoZSBwcm9ncmVzcyBldmVudCBhdCBsZWFzdCBldmVyeSA1MG1zLgogICAgIGRvdWJsZSBub3cg
PSBXVEY6OmN1cnJlbnRUaW1lTVMoKTsKQEAgLTI0MCwzMCArMjIxLDQ1IEBAIHZvaWQgRmlsZVJl
YWRlcjo6ZGlkUmVhZChpbnQgYnl0ZXNSZWFkKQogICAgICAgICBmaXJlRXZlbnQoZXZlbnROYW1l
cygpLnByb2dyZXNzRXZlbnQpOwogICAgICAgICBtX2xhc3RQcm9ncmVzc05vdGlmaWNhdGlvblRp
bWVNUyA9IG5vdzsKICAgICB9Ci0KLSAgICAvLyBDb250aW51ZSByZWFkaW5nLgotICAgIG1fc3Ry
ZWFtUHJveHktPnJlYWQobV9idWZmZXIuZGF0YSgpLCBtX2J1ZmZlci5zaXplKCkpOwogfQogCi12
b2lkIEZpbGVSZWFkZXI6OmRpZEZpbmlzaCgpCit2b2lkIEZpbGVSZWFkZXI6OmRpZEZpbmlzaExv
YWRpbmcodW5zaWduZWQgbG9uZykKIHsKICAgICBtX3N0YXRlID0gQ29tcGxldGVkOwogCi0gICAg
bV9zdHJlYW1Qcm94eS0+Y2xvc2UoKTsKLQogICAgIGZpcmVFdmVudChldmVudE5hbWVzKCkubG9h
ZEV2ZW50KTsKICAgICBmaXJlRXZlbnQoZXZlbnROYW1lcygpLmxvYWRlbmRFdmVudCk7CisKKyAg
ICBtX2xvYWRlciA9IDA7CiB9CiAKLXZvaWQgRmlsZVJlYWRlcjo6ZGlkRmFpbChFeGNlcHRpb25D
b2RlIGVjKQordm9pZCBGaWxlUmVhZGVyOjpkaWRGYWlsKGNvbnN0IFJlc291cmNlRXJyb3ImKQog
ewotICAgIG1fc3RhdGUgPSBDb21wbGV0ZWQ7Ci0gICAgbV9lcnJvciA9IEZpbGVFcnJvcjo6Y3Jl
YXRlKGVjKTsKKyAgICAvLyBUcmVhdCBhcyBpbnRlcm5hbCBlcnJvci4KKyAgICBmYWlsZWQoNTAw
KTsKK30KIAotICAgIG1fc3RyZWFtUHJveHktPmNsb3NlKCk7Cit2b2lkIEZpbGVSZWFkZXI6OmZh
aWxlZChpbnQgaHR0cFN0YXR1c0NvZGUpCit7CisgICAgbV9zdGF0ZSA9IENvbXBsZXRlZDsKIAor
ICAgICBtX2Vycm9yID0gRmlsZUVycm9yOjpjcmVhdGUoaHR0cFN0YXR1c0NvZGVUb0V4Y2VwdGlv
bkNvZGUoaHR0cFN0YXR1c0NvZGUpKTsKICAgICBmaXJlRXZlbnQoZXZlbnROYW1lcygpLmVycm9y
RXZlbnQpOwogICAgIGZpcmVFdmVudChldmVudE5hbWVzKCkubG9hZGVuZEV2ZW50KTsKKworICAg
IG1fbG9hZGVyID0gMDsKK30KKworRXhjZXB0aW9uQ29kZSBGaWxlUmVhZGVyOjpodHRwU3RhdHVz
Q29kZVRvRXhjZXB0aW9uQ29kZShpbnQgaHR0cFN0YXR1c0NvZGUpCit7CisgICAgc3dpdGNoICho
dHRwU3RhdHVzQ29kZSkgeworICAgICAgICBjYXNlIDQwMzoKKyAgICAgICAgICAgIHJldHVybiBT
RUNVUklUWV9FUlI7CisgICAgICAgIGNhc2UgNDA0OgorICAgICAgICAgICAgcmV0dXJuIE5PVF9G
T1VORF9FUlI7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gTk9UX1JFQURB
QkxFX0VSUjsKKyAgICB9CiB9CiAKIHZvaWQgRmlsZVJlYWRlcjo6ZmlyZUV2ZW50KGNvbnN0IEF0
b21pY1N0cmluZyYgdHlwZSkKQEAgLTMwMyw3ICsyOTksNyBAQCBjb25zdCBTY3JpcHRTdHJpbmcm
IEZpbGVSZWFkZXI6OnJlc3VsdCgpCiAgICAgICAgIGNvbnZlcnRUb1RleHQoKTsKICAgICAvLyBG
b3IgZGF0YSBVUkwsIHdlIG9ubHkgZG8gdGhlIGNvdmVyc2lvbiB1bnRpbCB3ZSByZWNlaXZlIGFs
bCB0aGUgcmF3IGRhdGEuCiAgICAgZWxzZSBpZiAobV9yZWFkVHlwZSA9PSBSZWFkRmlsZUFzRGF0
YVVSTCAmJiBtX3N0YXRlID09IENvbXBsZXRlZCkKLSAgICAgICAgY29udmVydFRvRGF0YVVSTCgp
OworICAgICAgICBjb252ZXJ0VG9EYXRhVVJMKG1fcmF3RGF0YSwgbV9maWxlVHlwZSwgbV9yZXN1
bHQpOwogCiAgICAgcmV0dXJuIG1fcmVzdWx0OwogfQpAQCAtMzI4LDIyICszMjQsMjIgQEAgdm9p
ZCBGaWxlUmVhZGVyOjpjb252ZXJ0VG9UZXh0KCkKICAgICAgICAgbV9yZXN1bHQgKz0gbV9kZWNv
ZGVyLT5mbHVzaCgpOwogfQogCi12b2lkIEZpbGVSZWFkZXI6OmNvbnZlcnRUb0RhdGFVUkwoKQor
dm9pZCBGaWxlUmVhZGVyOjpjb252ZXJ0VG9EYXRhVVJMKGNvbnN0IFZlY3RvcjxjaGFyPiYgcmF3
RGF0YSwgY29uc3QgU3RyaW5nJiBmaWxlVHlwZSwgU2NyaXB0U3RyaW5nJiByZXN1bHQpCiB7Ci0g
ICAgbV9yZXN1bHQgPSAiZGF0YToiOworICAgIHJlc3VsdCA9ICJkYXRhOiI7CiAKLSAgICBpZiAo
IW1fcmF3RGF0YS5zaXplKCkpCisgICAgaWYgKCFyYXdEYXRhLnNpemUoKSkKICAgICAgICAgcmV0
dXJuOwogCi0gICAgbV9yZXN1bHQgKz0gbV9maWxlVHlwZTsKLSAgICBpZiAoIW1fZmlsZVR5cGUu
aXNFbXB0eSgpKQotICAgICAgICBtX3Jlc3VsdCArPSAiOyI7Ci0gICAgbV9yZXN1bHQgKz0gImJh
c2U2NCwiOworICAgIHJlc3VsdCArPSBmaWxlVHlwZTsKKyAgICBpZiAoIWZpbGVUeXBlLmlzRW1w
dHkoKSkKKyAgICAgICAgcmVzdWx0ICs9ICI7IjsKKyAgICByZXN1bHQgKz0gImJhc2U2NCwiOwog
CiAgICAgVmVjdG9yPGNoYXI+IG91dDsKLSAgICBiYXNlNjRFbmNvZGUobV9yYXdEYXRhLCBvdXQp
OworICAgIGJhc2U2NEVuY29kZShyYXdEYXRhLCBvdXQpOwogICAgIG91dC5hcHBlbmQoJ1wwJyk7
Ci0gICAgbV9yZXN1bHQgKz0gb3V0LmRhdGEoKTsKKyAgICByZXN1bHQgKz0gb3V0LmRhdGEoKTsK
IH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9odG1sL0Zp
bGVSZWFkZXIuaCBiL1dlYkNvcmUvaHRtbC9GaWxlUmVhZGVyLmgKaW5kZXggZWUxNTk2OC4uNDhj
ZTIyOSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9odG1sL0ZpbGVSZWFkZXIuaAorKysgYi9XZWJDb3Jl
L2h0bWwvRmlsZVJlYWRlci5oCkBAIC0zNiwxMCArMzYsMTAgQEAKICNpbmNsdWRlICJBY3RpdmVE
T01PYmplY3QuaCIKICNpbmNsdWRlICJFdmVudFRhcmdldC5oIgogI2luY2x1ZGUgIkZpbGVFcnJv
ci5oIgotI2luY2x1ZGUgIkZpbGVTdHJlYW1DbGllbnQuaCIKICNpbmNsdWRlICJQbGF0Zm9ybVN0
cmluZy5oIgogI2luY2x1ZGUgIlNjcmlwdFN0cmluZy5oIgogI2luY2x1ZGUgIlRleHRFbmNvZGlu
Zy5oIgorI2luY2x1ZGUgIlRocmVhZGFibGVMb2FkZXJDbGllbnQuaCIKICNpbmNsdWRlIDx3dGYv
UGFzc1JlZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAjaW5jbHVkZSA8d3Rm
L1JlZlB0ci5oPgpAQCAtNDgsMTIgKzQ4LDExIEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNs
YXNzIEJsb2I7Ci1jbGFzcyBGaWxlOwotY2xhc3MgRmlsZVN0cmVhbVByb3h5OwogY2xhc3MgU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dDsKIGNsYXNzIFRleHRSZXNvdXJjZURlY29kZXI7CitjbGFzcyBU
aHJlYWRhYmxlTG9hZGVyOwogCi1jbGFzcyBGaWxlUmVhZGVyIDogcHVibGljIFJlZkNvdW50ZWQ8
RmlsZVJlYWRlcj4sIHB1YmxpYyBBY3RpdmVET01PYmplY3QsIHB1YmxpYyBFdmVudFRhcmdldCwg
cHVibGljIEZpbGVTdHJlYW1DbGllbnQgeworY2xhc3MgRmlsZVJlYWRlciA6IHB1YmxpYyBSZWZD
b3VudGVkPEZpbGVSZWFkZXI+LCBwdWJsaWMgQWN0aXZlRE9NT2JqZWN0LCBwdWJsaWMgRXZlbnRU
YXJnZXQsIHB1YmxpYyBUaHJlYWRhYmxlTG9hZGVyQ2xpZW50IHsKIHB1YmxpYzoKICAgICBzdGF0
aWMgUGFzc1JlZlB0cjxGaWxlUmVhZGVyPiBjcmVhdGUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCog
Y29udGV4dCkKICAgICB7CkBAIC03MCwxMyArNjksMTkgQEAgcHVibGljOgogCiAgICAgdm9pZCBy
ZWFkQXNCaW5hcnlTdHJpbmcoQmxvYiopOwogICAgIHZvaWQgcmVhZEFzVGV4dChCbG9iKiwgY29u
c3QgU3RyaW5nJiBlbmNvZGluZyA9ICIiKTsKLSAgICB2b2lkIHJlYWRBc0RhdGFVUkwoRmlsZSop
OworICAgIHZvaWQgcmVhZEFzRGF0YVVSTChCbG9iKik7CiAgICAgdm9pZCBhYm9ydCgpOwogCisg
ICAgdm9pZCBzdGFydCgpOworCiAgICAgUmVhZHlTdGF0ZSByZWFkeVN0YXRlKCkgY29uc3Q7CiAg
ICAgUGFzc1JlZlB0cjxGaWxlRXJyb3I+IGVycm9yKCkgeyByZXR1cm4gbV9lcnJvcjsgfQogICAg
IGNvbnN0IFNjcmlwdFN0cmluZyYgcmVzdWx0KCk7CiAKKyAgICAvLyBIZWxwZXIgbWV0aG9kcywg
YWxzbyB1c2VkIGJ5IEZpbGVSZWFkZXJTeW5jLgorICAgIHN0YXRpYyBFeGNlcHRpb25Db2RlIGh0
dHBTdGF0dXNDb2RlVG9FeGNlcHRpb25Db2RlKGludCBodHRwU3RhdHVzQ29kZSk7CisgICAgc3Rh
dGljIHZvaWQgY29udmVydFRvRGF0YVVSTChjb25zdCBWZWN0b3I8Y2hhcj4mIHJhd0RhdGEsIGNv
bnN0IFN0cmluZyYgZmlsZVR5cGUsIFNjcmlwdFN0cmluZyYgcmVzdWx0KTsKKwogICAgIC8vIEFj
dGl2ZURPTU9iamVjdAogICAgIHZpcnR1YWwgYm9vbCBjYW5TdXNwZW5kKCkgY29uc3Q7CiAgICAg
dmlydHVhbCB2b2lkIHN0b3AoKTsKQEAgLTg2LDExICs5MSwxMSBAQCBwdWJsaWM6CiAgICAgdmly
dHVhbCBGaWxlUmVhZGVyKiB0b0ZpbGVSZWFkZXIoKSB7IHJldHVybiB0aGlzOyB9CiAgICAgdmly
dHVhbCBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkgY29u
c3QgeyByZXR1cm4gQWN0aXZlRE9NT2JqZWN0OjpzY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7IH0K
IAotICAgIC8vIEZpbGVTdHJlYW1DbGllbnQKLSAgICB2aXJ0dWFsIHZvaWQgZGlkU3RhcnQoKTsK
LSAgICB2aXJ0dWFsIHZvaWQgZGlkR2V0U2l6ZShsb25nIGxvbmcpOwotICAgIHZpcnR1YWwgdm9p
ZCBkaWRPcGVuKGJvb2wpOwotICAgIHZpcnR1YWwgdm9pZCBkaWRSZWFkKGludCk7CisgICAgLy8g
VGhyZWFkYWJsZUxvYWRlckNsaWVudAorICAgIHZpcnR1YWwgdm9pZCBkaWRSZWNlaXZlUmVzcG9u
c2UoY29uc3QgUmVzb3VyY2VSZXNwb25zZSYpOworICAgIHZpcnR1YWwgdm9pZCBkaWRSZWNlaXZl
RGF0YShjb25zdCBjaGFyKiwgaW50KTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkRmluaXNoTG9hZGlu
Zyh1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIpOworICAgIHZpcnR1YWwgdm9pZCBkaWRGYWlsKGNv
bnN0IFJlc291cmNlRXJyb3ImKTsKIAogICAgIHVzaW5nIFJlZkNvdW50ZWQ8RmlsZVJlYWRlcj46
OnJlZjsKICAgICB1c2luZyBSZWZDb3VudGVkPEZpbGVSZWFkZXI+OjpkZXJlZjsKQEAgLTEyNiwx
NiArMTMxLDE2IEBAIHByaXZhdGU6CiAKICAgICB2b2lkIHRlcm1pbmF0ZSgpOwogICAgIHZvaWQg
cmVhZEludGVybmFsKEJsb2IqLCBSZWFkVHlwZSk7CisgICAgdm9pZCBmYWlsZWQoaW50IGh0dHBT
dGF0dXNDb2RlKTsKKyAgICB2b2lkIGZpcmVFcnJvckV2ZW50KGludCBodHRwU3RhdHVzQ29kZSk7
CiAgICAgdm9pZCBmaXJlRXZlbnQoY29uc3QgQXRvbWljU3RyaW5nJiB0eXBlKTsKICAgICB2b2lk
IGNvbnZlcnRUb1RleHQoKTsKICAgICB2b2lkIGNvbnZlcnRUb0RhdGFVUkwoKTsKLSAgICB2b2lk
IGRpZEZpbmlzaCgpOwotICAgIHZvaWQgZGlkRmFpbChFeGNlcHRpb25Db2RlKTsKIAogICAgIElu
dGVybmFsU3RhdGUgbV9zdGF0ZTsKICAgICBFdmVudFRhcmdldERhdGEgbV9ldmVudFRhcmdldERh
dGE7CiAKLSAgICBSZWZQdHI8QmxvYj4gbV9maWxlQmxvYjsKKyAgICBSZWZQdHI8QmxvYj4gbV9i
bG9iOwogICAgIFJlYWRUeXBlIG1fcmVhZFR5cGU7CiAgICAgVGV4dEVuY29kaW5nIG1fZW5jb2Rp
bmc7CiAKQEAgLTE1Nyw4ICsxNjIsNyBAQCBwcml2YXRlOgogICAgIC8vIE5lZWRlZCB0byBjcmVh
dGUgZGF0YSBVUkwuCiAgICAgU3RyaW5nIG1fZmlsZVR5cGU7CiAKLSAgICBSZWZQdHI8RmlsZVN0
cmVhbVByb3h5PiBtX3N0cmVhbVByb3h5OwotICAgIFZlY3RvcjxjaGFyPiBtX2J1ZmZlcjsKKyAg
ICBSZWZQdHI8VGhyZWFkYWJsZUxvYWRlcj4gbV9sb2FkZXI7CiAgICAgUmVmUHRyPEZpbGVFcnJv
cj4gbV9lcnJvcjsKICAgICBsb25nIGxvbmcgbV9ieXRlc0xvYWRlZDsKICAgICBsb25nIGxvbmcg
bV90b3RhbEJ5dGVzOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9odG1sL0Zvcm1EYXRhTGlzdC5jcHAg
Yi9XZWJDb3JlL2h0bWwvRm9ybURhdGFMaXN0LmNwcAppbmRleCA5NGQwMDMxLi40NTAzZmQyIDEw
MDY0NAotLS0gYS9XZWJDb3JlL2h0bWwvRm9ybURhdGFMaXN0LmNwcAorKysgYi9XZWJDb3JlL2h0
bWwvRm9ybURhdGFMaXN0LmNwcApAQCAtMzMsMjAgKzMzLDE3IEBAIEZvcm1EYXRhTGlzdDo6Rm9y
bURhdGFMaXN0KGNvbnN0IFRleHRFbmNvZGluZyYgYykKIHZvaWQgRm9ybURhdGFMaXN0OjphcHBl
bmRTdHJpbmcoY29uc3QgU3RyaW5nJiBzKQogewogICAgIENTdHJpbmcgY3N0ciA9IG1fZW5jb2Rp
bmcuZW5jb2RlKHMuY2hhcmFjdGVycygpLCBzLmxlbmd0aCgpLCBFbnRpdGllc0ZvclVuZW5jb2Rh
Ymxlcyk7Ci0gICAgbV9pdGVtcy5hcHBlbmQoU3RyaW5nQmxvYkl0ZW06OmNyZWF0ZShub3JtYWxp
emVMaW5lRW5kaW5nc1RvQ1JMRihjc3RyKSkpOworICAgIG1faXRlbXMuYXBwZW5kKG5vcm1hbGl6
ZUxpbmVFbmRpbmdzVG9DUkxGKGNzdHIpKTsKIH0KIAogdm9pZCBGb3JtRGF0YUxpc3Q6OmFwcGVu
ZFN0cmluZyhjb25zdCBDU3RyaW5nJiBzKQogewotICAgIG1faXRlbXMuYXBwZW5kKFN0cmluZ0Js
b2JJdGVtOjpjcmVhdGUocykpOworICAgIG1faXRlbXMuYXBwZW5kKHMpOwogfQogCi12b2lkIEZv
cm1EYXRhTGlzdDo6YXBwZW5kQmxvYihjb25zdCBTdHJpbmcmIGtleSwgUGFzc1JlZlB0cjxCbG9i
PiBibG9iKQordm9pZCBGb3JtRGF0YUxpc3Q6OmFwcGVuZEJsb2IoUGFzc1JlZlB0cjxCbG9iPiBi
bG9iKQogewotICAgIGFwcGVuZFN0cmluZyhrZXkpOwotICAgIGNvbnN0IEJsb2JJdGVtTGlzdCYg
aXRlbXMgPSBibG9iLT5pdGVtcygpOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgaXRlbXMu
c2l6ZSgpOyArK2kpCi0gICAgICAgIG1faXRlbXMuYXBwZW5kKGl0ZW1zLmF0KGkpKTsKKyAgICBt
X2l0ZW1zLmFwcGVuZChibG9iKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UKZGlmZiAtLWdpdCBhL1dl
YkNvcmUvaHRtbC9Gb3JtRGF0YUxpc3QuaCBiL1dlYkNvcmUvaHRtbC9Gb3JtRGF0YUxpc3QuaApp
bmRleCAzOGIwN2Y5Li5lOTNjOTQyIDEwMDY0NAotLS0gYS9XZWJDb3JlL2h0bWwvRm9ybURhdGFM
aXN0LmgKKysrIGIvV2ViQ29yZS9odG1sL0Zvcm1EYXRhTGlzdC5oCkBAIC00NywxNyArNDcsMzYg
QEAgcHVibGljOgogICAgICAgICBhcHBlbmRTdHJpbmcoa2V5KTsKICAgICAgICAgYXBwZW5kU3Ry
aW5nKFN0cmluZzo6bnVtYmVyKHZhbHVlKSk7CiAgICAgfQotICAgIHZvaWQgYXBwZW5kQmxvYihj
b25zdCBTdHJpbmcmIGtleSwgUGFzc1JlZlB0cjxCbG9iPik7CisgICAgdm9pZCBhcHBlbmRCbG9i
KGNvbnN0IFN0cmluZyYga2V5LCBQYXNzUmVmUHRyPEJsb2I+IGJsb2IpCisgICAgeworICAgICAg
ICBhcHBlbmRTdHJpbmcoa2V5KTsKKyAgICAgICAgYXBwZW5kQmxvYihibG9iKTsKKyAgICB9CisK
KyAgICBjbGFzcyBJdGVtIHsKKyAgICBwdWJsaWM6CisgICAgICAgIEl0ZW0oKSB7IH0KKyAgICAg
ICAgSXRlbShjb25zdCBXVEY6OkNTdHJpbmcmIGRhdGEpIDogbV9kYXRhKGRhdGEpIHsgfQorICAg
ICAgICBJdGVtKFBhc3NSZWZQdHI8QmxvYj4gYmxvYikgOiBtX2Jsb2IoYmxvYikgeyB9CisKKyAg
ICAgICAgY29uc3QgV1RGOjpDU3RyaW5nJiBkYXRhKCkgY29uc3QgeyByZXR1cm4gbV9kYXRhOyB9
CisgICAgICAgIEJsb2IqIGJsb2IoKSBjb25zdCB7IHJldHVybiBtX2Jsb2IuZ2V0KCk7IH0KKwor
ICAgIHByaXZhdGU6CisgICAgICAgIFdURjo6Q1N0cmluZyBtX2RhdGE7CisgICAgICAgIFJlZlB0
cjxCbG9iPiBtX2Jsb2I7CisgICAgfTsKIAotICAgIGNvbnN0IEJsb2JJdGVtTGlzdCYgaXRlbXMo
KSBjb25zdCB7IHJldHVybiBtX2l0ZW1zOyB9CisgICAgY29uc3QgVmVjdG9yPEl0ZW0+JiBpdGVt
cygpIGNvbnN0IHsgcmV0dXJuIG1faXRlbXM7IH0KICAgICBjb25zdCBUZXh0RW5jb2RpbmcmIGVu
Y29kaW5nKCkgY29uc3QgeyByZXR1cm4gbV9lbmNvZGluZzsgfQogCiBwcml2YXRlOgogICAgIHZv
aWQgYXBwZW5kU3RyaW5nKGNvbnN0IENTdHJpbmcmKTsKICAgICB2b2lkIGFwcGVuZFN0cmluZyhj
b25zdCBTdHJpbmcmKTsKKyAgICB2b2lkIGFwcGVuZEJsb2IoUGFzc1JlZlB0cjxCbG9iPik7CiAK
ICAgICBUZXh0RW5jb2RpbmcgbV9lbmNvZGluZzsKLSAgICBCbG9iSXRlbUxpc3QgbV9pdGVtczsK
KyAgICBWZWN0b3I8SXRlbT4gbV9pdGVtczsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
ZGlmZiAtLWdpdCBhL1dlYkNvcmUvbG9hZGVyL0Zvcm1TdWJtaXNzaW9uLmNwcCBiL1dlYkNvcmUv
bG9hZGVyL0Zvcm1TdWJtaXNzaW9uLmNwcAppbmRleCAyMmU4OWQ3Li45OGE1NDVlIDEwMDY0NAot
LS0gYS9XZWJDb3JlL2xvYWRlci9Gb3JtU3VibWlzc2lvbi5jcHAKKysrIGIvV2ViQ29yZS9sb2Fk
ZXIvRm9ybVN1Ym1pc3Npb24uY3BwCkBAIC0xNjIsMTAgKzE2MiwxMCBAQCBQYXNzUmVmUHRyPEZv
cm1TdWJtaXNzaW9uPiBGb3JtU3VibWlzc2lvbjo6Y3JlYXRlKEhUTUxGb3JtRWxlbWVudCogZm9y
bSwgY29uc3QgQQogICAgIFN0cmluZyBib3VuZGFyeTsKIAogICAgIGlmIChpc011bHRpUGFydEZv
cm0pIHsKLSAgICAgICAgZm9ybURhdGEgPSBGb3JtRGF0YTo6Y3JlYXRlTXVsdGlQYXJ0KGRvbUZv
cm1EYXRhLT5pdGVtcygpLCBkb21Gb3JtRGF0YS0+ZW5jb2RpbmcoKSwgZG9jdW1lbnQpOworICAg
ICAgICBmb3JtRGF0YSA9IEZvcm1EYXRhOjpjcmVhdGVNdWx0aVBhcnQoKihzdGF0aWNfY2FzdDxG
b3JtRGF0YUxpc3QqPihkb21Gb3JtRGF0YS5nZXQoKSkpLCBkb21Gb3JtRGF0YS0+ZW5jb2Rpbmco
KSwgZG9jdW1lbnQpOwogICAgICAgICBib3VuZGFyeSA9IGZvcm1EYXRhLT5ib3VuZGFyeSgpLmRh
dGEoKTsKICAgICB9IGVsc2UgewotICAgICAgICBmb3JtRGF0YSA9IEZvcm1EYXRhOjpjcmVhdGUo
ZG9tRm9ybURhdGEtPml0ZW1zKCksIGRvbUZvcm1EYXRhLT5lbmNvZGluZygpKTsKKyAgICAgICAg
Zm9ybURhdGEgPSBGb3JtRGF0YTo6Y3JlYXRlKCooc3RhdGljX2Nhc3Q8Rm9ybURhdGFMaXN0Kj4o
ZG9tRm9ybURhdGEuZ2V0KCkpKSwgZG9tRm9ybURhdGEtPmVuY29kaW5nKCkpOwogICAgICAgICBp
ZiAoYXR0cmlidXRlcy5tZXRob2QoKSA9PSBQb3N0TWV0aG9kICYmIGlzTWFpbHRvRm9ybSkgewog
ICAgICAgICAgICAgLy8gQ29udmVydCB0aGUgZm9ybSBkYXRhIGludG8gYSBzdHJpbmcgdGhhdCB3
ZSBwdXQgaW50byB0aGUgVVJMLgogICAgICAgICAgICAgYXBwZW5kTWFpbHRvUG9zdEZvcm1EYXRh
VG9VUkwoYWN0aW9uVVJMLCAqZm9ybURhdGEsIGVuY29kaW5nVHlwZSk7CmRpZmYgLS1naXQgYS9X
ZWJDb3JlL3BsYXRmb3JtL0Jsb2JJdGVtLmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vQmxvYkl0ZW0u
Y3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1OTE1MTZkLi4wMDAwMDAwCi0tLSBh
L1dlYkNvcmUvcGxhdGZvcm0vQmxvYkl0ZW0uY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMTkyICsw
LDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSAqIG1ldDoKLSAq
Ci0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAotICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICogY29weXJpZ2h0IG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotICog
aW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZQotICogZGlzdHJpYnV0aW9uLgotICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29n
bGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICogY29udHJpYnV0b3JzIG1heSBiZSB1c2Vk
IHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSAqIHRoaXMgc29m
dHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENP
TlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFS
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQK
LSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAq
LwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiQmxvYkl0ZW0uaCIKLQotI2luY2x1
ZGUgIkZpbGVTeXN0ZW0uaCIKLSNpbmNsdWRlICJVVUlELmgiCi0jaW5jbHVkZSA8d3RmL0Fzc2Vy
dGlvbnMuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi0jaWYgRU5BQkxFKEJMT0IpCi1zdGF0
aWMgY29uc3QgZG91YmxlIGludmFsaWRNb2RpZmljYXRpb25UaW1lID0gMDsKLQotc3RhdGljIGRv
dWJsZSBnZXRGaWxlU25hcHNob3RNb2RpZmljYXRpb25UaW1lKGNvbnN0IFN0cmluZyYgcGF0aCkK
LXsKLSAgICAvLyBGSVhNRTogc3luY2hyb25pemVkIGZpbGUgY2FsbAotICAgIHRpbWVfdCBtb2Rp
ZmljYXRpb25UaW1lOwotICAgIGlmIChnZXRGaWxlTW9kaWZpY2F0aW9uVGltZShwYXRoLCBtb2Rp
ZmljYXRpb25UaW1lKSkKLSAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGRvdWJsZT4obW9kaWZp
Y2F0aW9uVGltZSk7Ci0gICAgcmV0dXJuIGludmFsaWRNb2RpZmljYXRpb25UaW1lOwotfQotI2Vu
ZGlmIC8vIEVOQUJMRShCTE9CKQotCi0vLyBEYXRhQmxvYkl0ZW0gLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0jaWYgRU5B
QkxFKEJMT0IpCi1QYXNzUmVmUHRyPEJsb2JJdGVtPiBEYXRhQmxvYkl0ZW06OnNsaWNlKGxvbmcg
bG9uZyBzdGFydCwgbG9uZyBsb25nIGxlbmd0aCkKLXsKLSAgICBBU1NFUlQoc3RhcnQgPj0gMCAm
JiBsZW5ndGggPj0gMCk7Ci0gICAgQVNTRVJUKHN0YXRpY19jYXN0PHVuc2lnbmVkIGxvbmcgbG9u
Zz4oc3RhcnQpIDwgc2l6ZSgpKTsKLSAgICBpZiAoIXN0YXJ0ICYmIHNpemUoKSA8PSBzdGF0aWNf
Y2FzdDx1bnNpZ25lZCBsb25nIGxvbmc+KGxlbmd0aCkpCi0gICAgICAgIHJldHVybiB0aGlzOwot
ICAgIGlmIChzdGF0aWNfY2FzdDx1bnNpZ25lZCBsb25nIGxvbmc+KHN0YXJ0ICsgbGVuZ3RoKSA+
IHNpemUoKSkKLSAgICAgICAgbGVuZ3RoID0gc2l6ZSgpIC0gc3RhcnQ7Ci0gICAgcmV0dXJuIERh
dGFSYW5nZUJsb2JJdGVtOjpjcmVhdGUodGhpcywgc3RhcnQsIGxlbmd0aCk7Ci19Ci0jZW5kaWYK
LQotLy8gRmlsZUJsb2JJdGVtIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotUGFzc1JlZlB0cjxCbG9iSXRlbT4gRmlsZUJs
b2JJdGVtOjpjcmVhdGUoY29uc3QgU3RyaW5nJiBwYXRoKQotewotICAgIHJldHVybiBhZG9wdFJl
ZihzdGF0aWNfY2FzdDxCbG9iSXRlbSo+KG5ldyBGaWxlQmxvYkl0ZW0ocGF0aCkpKTsKLX0KLQot
RmlsZUJsb2JJdGVtOjpGaWxlQmxvYkl0ZW0oY29uc3QgU3RyaW5nJiBwYXRoKQotICAgIDogbV9w
YXRoKHBhdGgpCi0gICAgLCBtX2ZpbGVOYW1lKHBhdGhHZXRGaWxlTmFtZShtX3BhdGgpKQotewot
fQotCi0jaWYgRU5BQkxFKERJUkVDVE9SWV9VUExPQUQpCi1QYXNzUmVmUHRyPEJsb2JJdGVtPiBG
aWxlQmxvYkl0ZW06OmNyZWF0ZShjb25zdCBTdHJpbmcmIHBhdGgsIGNvbnN0IFN0cmluZyYgcmVs
YXRpdmVQYXRoKQotewotICAgIHJldHVybiBhZG9wdFJlZihzdGF0aWNfY2FzdDxCbG9iSXRlbSo+
KG5ldyBGaWxlQmxvYkl0ZW0ocGF0aCwgcmVsYXRpdmVQYXRoKSkpOwotfQotCi1GaWxlQmxvYkl0
ZW06OkZpbGVCbG9iSXRlbShjb25zdCBTdHJpbmcmIHBhdGgsIGNvbnN0IFN0cmluZyYgcmVsYXRp
dmVQYXRoKQotICAgIDogbV9wYXRoKHBhdGgpCi0gICAgLCBtX2ZpbGVOYW1lKHBhdGhHZXRGaWxl
TmFtZShtX3BhdGgpKQotICAgICwgbV9yZWxhdGl2ZVBhdGgocmVsYXRpdmVQYXRoKQotewotfQot
I2VuZGlmCi0KLXVuc2lnbmVkIGxvbmcgbG9uZyBGaWxlQmxvYkl0ZW06OnNpemUoKSBjb25zdAot
ewotICAgIC8vIEZJWE1FOiBzeW5jaHJvbml6ZWQgZmlsZSBjYWxsCi0gICAgbG9uZyBsb25nIHNp
emU7Ci0gICAgaWYgKCFnZXRGaWxlU2l6ZShtX3BhdGgsIHNpemUpKQotICAgICAgICByZXR1cm4g
MDsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZyBsb25nPihzaXplKTsKLX0K
LQotI2lmIEVOQUJMRShCTE9CKQotUGFzc1JlZlB0cjxCbG9iSXRlbT4gRmlsZUJsb2JJdGVtOjpz
bGljZShsb25nIGxvbmcgc3RhcnQsIGxvbmcgbG9uZyBsZW5ndGgpCi17Ci0gICAgQVNTRVJUKHN0
YXJ0ID49IDAgJiYgbGVuZ3RoID49IDApOwotICAgIGxvbmcgbG9uZyBmaWxlU2l6ZSA9IHNpemUo
KTsKLSAgICBBU1NFUlQoc3RhcnQgPCBmaWxlU2l6ZSk7Ci0gICAgaWYgKCFzdGFydCAmJiBmaWxl
U2l6ZSA8PSBsZW5ndGgpCi0gICAgICAgIHJldHVybiB0aGlzOwotICAgIGlmIChzdGFydCArIGxl
bmd0aCA+IGZpbGVTaXplKQotICAgICAgICBsZW5ndGggPSBmaWxlU2l6ZSAtIHN0YXJ0OwotICAg
IGNvbnN0IEZpbGVSYW5nZUJsb2JJdGVtKiBmaWxlUmFuZ2VJdGVtID0gdG9GaWxlUmFuZ2VCbG9i
SXRlbSgpOwotICAgIGRvdWJsZSBtb2RpZmljYXRpb25UaW1lID0gZmlsZVJhbmdlSXRlbSA/IGZp
bGVSYW5nZUl0ZW0tPnNuYXBzaG90TW9kaWZpY2F0aW9uVGltZSgpIDogZ2V0RmlsZVNuYXBzaG90
TW9kaWZpY2F0aW9uVGltZShwYXRoKCkpOwotICAgIHJldHVybiBGaWxlUmFuZ2VCbG9iSXRlbTo6
Y3JlYXRlKHBhdGgoKSwgc3RhcnQsIGxlbmd0aCwgbW9kaWZpY2F0aW9uVGltZSk7Ci19Ci0jZW5k
aWYgLy8gRU5BQkxFKEJMT0IpCi0KLS8vIFN0cmluZ0Jsb2JJdGVtIC0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLVBhc3NSZWZQ
dHI8QmxvYkl0ZW0+IFN0cmluZ0Jsb2JJdGVtOjpjcmVhdGUoY29uc3QgQ1N0cmluZyYgdGV4dCkK
LXsKLSAgICByZXR1cm4gYWRvcHRSZWYoc3RhdGljX2Nhc3Q8QmxvYkl0ZW0qPihuZXcgU3RyaW5n
QmxvYkl0ZW0odGV4dCkpKTsKLX0KLQotU3RyaW5nQmxvYkl0ZW06OlN0cmluZ0Jsb2JJdGVtKGNv
bnN0IENTdHJpbmcmIHRleHQpCi0gICAgOiBtX2RhdGEodGV4dCkKLXsKLX0KLQotLy8gQnl0ZUFy
cmF5QmxvYkl0ZW0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLQotCi1QYXNzUmVmUHRyPEJsb2JJdGVtPiBCeXRlQXJyYXlCbG9iSXRlbTo6
Y3JlYXRlKGNvbnN0IGNoYXIqIGRhdGEsIHNpemVfdCBzaXplKQotewotICAgIHJldHVybiBhZG9w
dFJlZihzdGF0aWNfY2FzdDxCbG9iSXRlbSo+KG5ldyBCeXRlQXJyYXlCbG9iSXRlbShkYXRhLCBz
aXplKSkpOwotfQotCi1CeXRlQXJyYXlCbG9iSXRlbTo6Qnl0ZUFycmF5QmxvYkl0ZW0oY29uc3Qg
Y2hhciogZGF0YSwgc2l6ZV90IHNpemUpCi17Ci0gICAgbV9ieXRlc0FycmF5LmFwcGVuZChkYXRh
LCBzaXplKTsKLX0KLQotI2lmIEVOQUJMRShCTE9CKQotCi0vLyBEYXRhUmFuZ2VCbG9iSXRlbSAt
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LQotCi1QYXNzUmVmUHRyPEJsb2JJdGVtPiBEYXRhUmFuZ2VCbG9iSXRlbTo6Y3JlYXRlKFBhc3NS
ZWZQdHI8RGF0YUJsb2JJdGVtPiBpdGVtLCBsb25nIGxvbmcgc3RhcnQsIGxvbmcgbG9uZyBsZW5n
dGgpCi17Ci0gICAgcmV0dXJuIGFkb3B0UmVmKHN0YXRpY19jYXN0PEJsb2JJdGVtKj4obmV3IERh
dGFSYW5nZUJsb2JJdGVtKGl0ZW0sIHN0YXJ0LCBsZW5ndGgpKSk7Ci19Ci0KLURhdGFSYW5nZUJs
b2JJdGVtOjpEYXRhUmFuZ2VCbG9iSXRlbShQYXNzUmVmUHRyPERhdGFCbG9iSXRlbT4gaXRlbSwg
bG9uZyBsb25nIHN0YXJ0LCBsb25nIGxvbmcgbGVuZ3RoKQotICAgIDogbV9sZW5ndGgobGVuZ3Ro
KQotewotICAgIGNvbnN0IERhdGFSYW5nZUJsb2JJdGVtKiByYW5nZUl0ZW0gPSBpdGVtLT50b0Rh
dGFSYW5nZUJsb2JJdGVtKCk7Ci0gICAgaWYgKHJhbmdlSXRlbSkgewotICAgICAgICBtX2l0ZW0g
PSByYW5nZUl0ZW0tPm1faXRlbTsKLSAgICAgICAgbV9zdGFydCA9IHN0YXJ0ICsgcmFuZ2VJdGVt
LT5tX3N0YXJ0OwotICAgICAgICBBU1NFUlQoIW1faXRlbS0+dG9EYXRhUmFuZ2VCbG9iSXRlbSgp
KTsKLSAgICAgICAgQVNTRVJUKHN0YXRpY19jYXN0PHVuc2lnbmVkIGxvbmcgbG9uZz4obV9zdGFy
dCArIG1fbGVuZ3RoKSA8PSBtX2l0ZW0tPnNpemUoKSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAg
bV9pdGVtID0gaXRlbTsKLSAgICAgICAgbV9zdGFydCA9IHN0YXJ0OwotICAgIH0KLX0KLQotY29u
c3QgY2hhciogRGF0YVJhbmdlQmxvYkl0ZW06OmRhdGEoKSBjb25zdAotewotICAgIHJldHVybiBt
X2l0ZW0tPmRhdGEoKSArIG1fc3RhcnQ7Ci19Ci0KLS8vIEZpbGVSYW5nZUJsb2JJdGVtIC0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0K
LVBhc3NSZWZQdHI8QmxvYkl0ZW0+IEZpbGVSYW5nZUJsb2JJdGVtOjpjcmVhdGUoY29uc3QgU3Ry
aW5nJiBwYXRoLCBsb25nIGxvbmcgc3RhcnQsIGxvbmcgbG9uZyBsZW5ndGgsIGRvdWJsZSBzbmFw
c2hvdE1vZGlmaWNhdGlvblRpbWUpCi17Ci0gICAgcmV0dXJuIGFkb3B0UmVmKHN0YXRpY19jYXN0
PEJsb2JJdGVtKj4obmV3IEZpbGVSYW5nZUJsb2JJdGVtKHBhdGgsIHN0YXJ0LCBsZW5ndGgsIHNu
YXBzaG90TW9kaWZpY2F0aW9uVGltZSkpKTsKLX0KLQotRmlsZVJhbmdlQmxvYkl0ZW06OkZpbGVS
YW5nZUJsb2JJdGVtKGNvbnN0IFN0cmluZyYgcGF0aCwgbG9uZyBsb25nIHN0YXJ0LCBsb25nIGxv
bmcgbGVuZ3RoLCBkb3VibGUgbW9kaWZpY2F0aW9uVGltZSkKLSAgICA6IEZpbGVCbG9iSXRlbShw
YXRoKQotICAgICwgbV9zdGFydChzdGFydCkKLSAgICAsIG1fbGVuZ3RoKGxlbmd0aCkKLSAgICAs
IG1fc25hcHNob3RNb2RpZmljYXRpb25UaW1lKG1vZGlmaWNhdGlvblRpbWUpCi17Ci0gICAgbV91
bmlxdWVOYW1lID0gIkJsb2IiICsgY3JlYXRlQ2Fub25pY2FsVVVJRFN0cmluZygpOwotICAgIG1f
dW5pcXVlTmFtZS5yZXBsYWNlKCItIiwgIiIpOyAvLyBGb3Igc2FmdHksIHJlbW92ZSAnLScgZnJv
bSB0aGUgZmlsZW5hbWUgc25jZSBzb21lIHNlcnZlcnMgbWF5IG5vdCBsaWtlIGl0LgotfQotCi0j
ZW5kaWYgLy8gRU5BQkxFKEJMT0IpCi0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdp
dCBhL1dlYkNvcmUvcGxhdGZvcm0vQmxvYkl0ZW0uaCBiL1dlYkNvcmUvcGxhdGZvcm0vQmxvYkl0
ZW0uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDJlY2U5Mi4uMDAwMDAwMAotLS0g
YS9XZWJDb3JlL3BsYXRmb3JtL0Jsb2JJdGVtLmgKKysrIC9kZXYvbnVsbApAQCAtMSwyMDkgKzAs
MCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSAqIG1ldDoKLSAq
Ci0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAotICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICogY29weXJpZ2h0IG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotICog
aW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZQotICogZGlzdHJpYnV0aW9uLgotICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29n
bGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICogY29udHJpYnV0b3JzIG1heSBiZSB1c2Vk
IHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSAqIHRoaXMgc29m
dHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENP
TlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFS
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQK
LSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAq
LwotCi0jaWZuZGVmIEJsb2JJdGVtX2gKLSNkZWZpbmUgQmxvYkl0ZW1faAotCi0jaW5jbHVkZSAi
UGxhdGZvcm1TdHJpbmcuaCIKLSNpbmNsdWRlIDx3dGYvT3duUHRyLmg+Ci0jaW5jbHVkZSA8d3Rm
L1Bhc3NSZWZQdHIuaD4KLSNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgotI2luY2x1ZGUgPHd0
Zi9WZWN0b3IuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBX
ZWJDb3JlIHsKLQotY2xhc3MgQnl0ZUFycmF5QmxvYkl0ZW07Ci1jbGFzcyBEYXRhQmxvYkl0ZW07
Ci1jbGFzcyBEYXRhUmFuZ2VCbG9iSXRlbTsKLWNsYXNzIEZpbGVCbG9iSXRlbTsKLWNsYXNzIEZp
bGVSYW5nZUJsb2JJdGVtOwotY2xhc3MgU3RyaW5nQmxvYkl0ZW07Ci0KLS8vIEEgYmFzZSBpbnRl
cmZhY2UgZm9yIGFsbCBhcmJpdHJhcnktZGF0YS1vYmplY3QgY29tcG9uZW50IGl0ZW1zLgotLy8g
VGhlIEJsb2JJdGVtIGFuZCBpdHMgc3ViY2xhc3NlcyBhcmUgc3RydWN0dXJlZCBsaWtlIHRoZSBm
b2xsb3dpbmc6Ci0vLyAgICBCbG9iSXRlbQotLy8gICAgICAgfAotLy8gICAgICAgKy0tLS0tLS0+
IERhdGFCbG9iSXRlbQotLy8gICAgICAgfCAgICAgICAgICAgICAgfAotLy8gICAgICAgfCAgICAg
ICAgICAgICAgKy0tLS0tLS0tLT4gU3RyaW5nQmxvYkl0ZW0KLS8vICAgICAgIHwgICAgICAgICAg
ICAgICstLS0tLS0tLS0+IEJ5dGVBcnJheUJsb2JJdGVtCi0vLyAgICAgICB8ICAgICAgICAgICAg
ICArLS0tLS0tLS0tPiBEYXRhUmFuZ2VCbG9iSXRlbQotLy8gICAgICAgfAotLy8gICAgICAgKy0t
LS0tLS0+IEZpbGVCbG9iSXRlbQotLy8gICAgICAgICAgICAgICAgICAgICAgfAotLy8gICAgICAg
ICAgICAgICAgICAgICAgKy0tLS0tLS0tLT4gRmlsZVJhbmdlQmxvYkl0ZW0KLS8vCi1jbGFzcyBC
bG9iSXRlbSA6IHB1YmxpYyBSZWZDb3VudGVkPEJsb2JJdGVtPiB7Ci1wdWJsaWM6Ci0gICAgdmly
dHVhbCB+QmxvYkl0ZW0oKSB7IH0KLSAgICB2aXJ0dWFsIHVuc2lnbmVkIGxvbmcgbG9uZyBzaXpl
KCkgY29uc3QgPSAwOwotCi0gICAgdmlydHVhbCBjb25zdCBEYXRhQmxvYkl0ZW0qIHRvRGF0YUJs
b2JJdGVtKCkgY29uc3QgeyByZXR1cm4gMDsgfQotICAgIHZpcnR1YWwgY29uc3QgU3RyaW5nQmxv
Ykl0ZW0qIHRvU3RyaW5nQmxvYkl0ZW0oKSBjb25zdCB7IHJldHVybiAwOyB9Ci0gICAgdmlydHVh
bCBjb25zdCBCeXRlQXJyYXlCbG9iSXRlbSogdG9CeXRlQXJyYXlCbG9iSXRlbSgpIGNvbnN0IHsg
cmV0dXJuIDA7IH0KLSAgICB2aXJ0dWFsIGNvbnN0IEZpbGVCbG9iSXRlbSogdG9GaWxlQmxvYkl0
ZW0oKSBjb25zdCB7IHJldHVybiAwOyB9Ci0jaWYgRU5BQkxFKEJMT0IpCi0gICAgdmlydHVhbCBj
b25zdCBEYXRhUmFuZ2VCbG9iSXRlbSogdG9EYXRhUmFuZ2VCbG9iSXRlbSgpIGNvbnN0IHsgcmV0
dXJuIDA7IH0KLSAgICB2aXJ0dWFsIGNvbnN0IEZpbGVSYW5nZUJsb2JJdGVtKiB0b0ZpbGVSYW5n
ZUJsb2JJdGVtKCkgY29uc3QgeyByZXR1cm4gMDsgfQotCi0gICAgLy8gTm90ZTogbm8gZXh0ZXJu
YWwgbWV0aG9kcyBleGNlcHQgZm9yIEJsb2I6OnNsaWNlIHNob3VsZCBjYWxsIHRoaXMuCi0gICAg
dmlydHVhbCBQYXNzUmVmUHRyPEJsb2JJdGVtPiBzbGljZShsb25nIGxvbmcgc3RhcnQsIGxvbmcg
bG9uZyBsZW5ndGgpID0gMDsKLSNlbmRpZiAvLyBFTkFCTEUoQkxPQikKLQotcHJvdGVjdGVkOgot
ICAgIEJsb2JJdGVtKCkgeyB9Ci19OwotCi10eXBlZGVmIFZlY3RvcjxSZWZQdHI8QmxvYkl0ZW0+
ID4gQmxvYkl0ZW1MaXN0OwotCi1jbGFzcyBEYXRhQmxvYkl0ZW0gOiBwdWJsaWMgQmxvYkl0ZW0g
ewotcHVibGljOgotICAgIHZpcnR1YWwgY29uc3QgY2hhciogZGF0YSgpIGNvbnN0ID0gMDsKLQot
ICAgIC8vIEJsb2JJdGVtIG1ldGhvZHMuCi0gICAgdmlydHVhbCBjb25zdCBEYXRhQmxvYkl0ZW0q
IHRvRGF0YUJsb2JJdGVtKCkgY29uc3QgeyByZXR1cm4gdGhpczsgfQotI2lmIEVOQUJMRShCTE9C
KQotICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxCbG9iSXRlbT4gc2xpY2UobG9uZyBsb25nIHN0YXJ0
LCBsb25nIGxvbmcgbGVuZ3RoKTsKLSNlbmRpZiAvLyBFTkFCTEUoQkxPQikKLX07Ci0KLWNsYXNz
IEZpbGVCbG9iSXRlbSA6IHB1YmxpYyBCbG9iSXRlbSB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFBh
c3NSZWZQdHI8QmxvYkl0ZW0+IGNyZWF0ZShjb25zdCBTdHJpbmcmIHBhdGgpOwotI2lmIEVOQUJM
RShESVJFQ1RPUllfVVBMT0FEKQotICAgIHN0YXRpYyBQYXNzUmVmUHRyPEJsb2JJdGVtPiBjcmVh
dGUoY29uc3QgU3RyaW5nJiBwYXRoLCBjb25zdCBTdHJpbmcmIHJlbGF0aXZlUGF0aCk7Ci0jZW5k
aWYKLSAgICB2aXJ0dWFsIGNvbnN0IFN0cmluZyYgbmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fZmls
ZU5hbWU7IH0KLSAgICB2aXJ0dWFsIGNvbnN0IFN0cmluZyYgcGF0aCgpIGNvbnN0IHsgcmV0dXJu
IG1fcGF0aDsgfQotI2lmIEVOQUJMRShESVJFQ1RPUllfVVBMT0FEKQotICAgIGNvbnN0IFN0cmlu
ZyYgcmVsYXRpdmVQYXRoKCkgY29uc3QgeyByZXR1cm4gbV9yZWxhdGl2ZVBhdGg7IH0KLSNlbmRp
ZgotCi0gICAgLy8gQmxvYkl0ZW0gbWV0aG9kcy4KLSAgICB2aXJ0dWFsIHVuc2lnbmVkIGxvbmcg
bG9uZyBzaXplKCkgY29uc3Q7Ci0gICAgdmlydHVhbCBjb25zdCBGaWxlQmxvYkl0ZW0qIHRvRmls
ZUJsb2JJdGVtKCkgY29uc3QgeyByZXR1cm4gdGhpczsgfQotI2lmIEVOQUJMRShCTE9CKQotICAg
IHZpcnR1YWwgUGFzc1JlZlB0cjxCbG9iSXRlbT4gc2xpY2UobG9uZyBsb25nIHN0YXJ0LCBsb25n
IGxvbmcgbGVuZ3RoKTsKLSNlbmRpZiAvLyBFTkFCTEUoQkxPQikKLQotcHJvdGVjdGVkOgotICAg
IEZpbGVCbG9iSXRlbShjb25zdCBTdHJpbmcmIHBhdGgpOwotI2lmIEVOQUJMRShESVJFQ1RPUllf
VVBMT0FEKQotICAgIEZpbGVCbG9iSXRlbShjb25zdCBTdHJpbmcmIHBhdGgsIGNvbnN0IFN0cmlu
ZyYgcmVsYXRpdmVQYXRoKTsKLSNlbmRpZgotICAgIFN0cmluZyBtX3BhdGg7Ci0gICAgU3RyaW5n
IG1fZmlsZU5hbWU7Ci0jaWYgRU5BQkxFKERJUkVDVE9SWV9VUExPQUQpCi0gICAgU3RyaW5nIG1f
cmVsYXRpdmVQYXRoOwotI2VuZGlmCi19OwotCi1jbGFzcyBTdHJpbmdCbG9iSXRlbSA6IHB1Ymxp
YyBEYXRhQmxvYkl0ZW0gewotcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPEJsb2JJdGVt
PiBjcmVhdGUoY29uc3QgQ1N0cmluZyYpOwotICAgIGNvbnN0IENTdHJpbmcmIGNzdHIoKSBjb25z
dCB7IHJldHVybiBtX2RhdGE7IH0KLQotICAgIC8vIEJsb2JJdGVtIG1ldGhvZHMuCi0gICAgdmly
dHVhbCB1bnNpZ25lZCBsb25nIGxvbmcgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fZGF0YS5sZW5n
dGgoKTsgfQotICAgIHZpcnR1YWwgY29uc3QgU3RyaW5nQmxvYkl0ZW0qIHRvU3RyaW5nQmxvYkl0
ZW0oKSBjb25zdCB7IHJldHVybiB0aGlzOyB9Ci0KLSAgICAvLyBEYXRhQmxvYkl0ZW0gbWV0aG9k
cy4KLSAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqIGRhdGEoKSBjb25zdCB7IHJldHVybiBtX2RhdGEu
ZGF0YSgpOyB9Ci0KLXByaXZhdGU6Ci0gICAgU3RyaW5nQmxvYkl0ZW0oY29uc3QgQ1N0cmluZyYp
OwotICAgIENTdHJpbmcgbV9kYXRhOwotfTsKLQotY2xhc3MgQnl0ZUFycmF5QmxvYkl0ZW0gOiBw
dWJsaWMgRGF0YUJsb2JJdGVtIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxCbG9i
SXRlbT4gY3JlYXRlKGNvbnN0IGNoYXIqIGRhdGEsIHNpemVfdCBzaXplKTsKLQotICAgIC8vIEJs
b2JJdGVtIG1ldGhvZHMuCi0gICAgdmlydHVhbCB1bnNpZ25lZCBsb25nIGxvbmcgc2l6ZSgpIGNv
bnN0IHsgcmV0dXJuIG1fYnl0ZXNBcnJheS5zaXplKCk7IH0KLSAgICB2aXJ0dWFsIGNvbnN0IEJ5
dGVBcnJheUJsb2JJdGVtKiB0b0J5dGVBcnJheUJsb2JJdGVtKCkgY29uc3QgeyByZXR1cm4gdGhp
czsgfQotCi0gICAgLy8gRGF0YUJsb2JJdGVtIG1ldGhvZHMuCi0gICAgdmlydHVhbCBjb25zdCBj
aGFyKiBkYXRhKCkgY29uc3QgeyByZXR1cm4gbV9ieXRlc0FycmF5LmRhdGEoKTsgfQotCi1wcml2
YXRlOgotICAgIEJ5dGVBcnJheUJsb2JJdGVtKGNvbnN0IGNoYXIqIGRhdGEsIHNpemVfdCBzaXpl
KTsKLSAgICBWZWN0b3I8Y2hhcj4gbV9ieXRlc0FycmF5OwotfTsKLQotI2lmIEVOQUJMRShCTE9C
KQotCi0vLyBCbG9iSXRlbSBjbGFzcyBmb3Igc2xpY2VkIGRhdGEgKHN0cmluZyBvciBieXRlcy1h
cnJheSkuCi1jbGFzcyBEYXRhUmFuZ2VCbG9iSXRlbSA6IHB1YmxpYyBEYXRhQmxvYkl0ZW0gewot
cHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPEJsb2JJdGVtPiBjcmVhdGUoUGFzc1JlZlB0
cjxEYXRhQmxvYkl0ZW0+LCBsb25nIGxvbmcgc3RhcnQsIGxvbmcgbG9uZyBsZW5ndGgpOwotCi0g
ICAgLy8gQmxvYkl0ZW0gbWV0aG9kcy4KLSAgICB2aXJ0dWFsIHVuc2lnbmVkIGxvbmcgbG9uZyBz
aXplKCkgY29uc3QgeyByZXR1cm4gbV9sZW5ndGg7IH0KLSAgICB2aXJ0dWFsIGNvbnN0IERhdGFS
YW5nZUJsb2JJdGVtKiB0b0RhdGFSYW5nZUJsb2JJdGVtKCkgY29uc3QgeyByZXR1cm4gdGhpczsg
fQotCi0gICAgLy8gRGF0YUJsb2JJdGVtIG1ldGhvZHMuCi0gICAgdmlydHVhbCBjb25zdCBjaGFy
KiBkYXRhKCkgY29uc3Q7Ci0KLXByaXZhdGU6Ci0gICAgRGF0YVJhbmdlQmxvYkl0ZW0oUGFzc1Jl
ZlB0cjxEYXRhQmxvYkl0ZW0+LCBsb25nIGxvbmcgc3RhcnQsIGxvbmcgbG9uZyBsZW5ndGgpOwot
ICAgIFJlZlB0cjxEYXRhQmxvYkl0ZW0+IG1faXRlbTsKLSAgICBsb25nIGxvbmcgbV9zdGFydDsK
LSAgICBsb25nIGxvbmcgbV9sZW5ndGg7Ci19OwotCi1jbGFzcyBGaWxlUmFuZ2VCbG9iSXRlbSA6
IHB1YmxpYyBGaWxlQmxvYkl0ZW0gewotcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPEJs
b2JJdGVtPiBjcmVhdGUoY29uc3QgU3RyaW5nJiBwYXRoLCBsb25nIGxvbmcgc3RhcnQsIGxvbmcg
bG9uZyBsZW5ndGgsIGRvdWJsZSBzbmFwc2hvdE1vZGlmaWNhdGlvblRpbWUpOwotICAgIGxvbmcg
bG9uZyBzdGFydCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhcnQ7IH0KLSAgICBkb3VibGUgc25hcHNo
b3RNb2RpZmljYXRpb25UaW1lKCkgY29uc3QgeyByZXR1cm4gbV9zbmFwc2hvdE1vZGlmaWNhdGlv
blRpbWU7IH0KLQotICAgIC8vIEJsb2JJdGVtIG1ldGhvZHMuCi0gICAgdmlydHVhbCB1bnNpZ25l
ZCBsb25nIGxvbmcgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fbGVuZ3RoOyB9Ci0gICAgdmlydHVh
bCBjb25zdCBGaWxlUmFuZ2VCbG9iSXRlbSogdG9GaWxlUmFuZ2VCbG9iSXRlbSgpIGNvbnN0IHsg
cmV0dXJuIHRoaXM7IH0KLQotICAgIC8vIEZpbGVCbG9iSXRlbSBtZXRob2RzLgotICAgIHZpcnR1
YWwgY29uc3QgU3RyaW5nJiBuYW1lKCkgY29uc3QgeyByZXR1cm4gbV91bmlxdWVOYW1lOyB9Ci0K
LXByaXZhdGU6Ci0gICAgRmlsZVJhbmdlQmxvYkl0ZW0oY29uc3QgU3RyaW5nJiBwYXRoLCBsb25n
IGxvbmcgc3RhcnQsIGxvbmcgbG9uZyBsZW5ndGgsIGRvdWJsZSBzbmFwc2hvdE1vZGlmaWNhdGlv
blRpbWUpOwotICAgIGxvbmcgbG9uZyBtX3N0YXJ0OwotICAgIGxvbmcgbG9uZyBtX2xlbmd0aDsK
LSAgICBTdHJpbmcgbV91bmlxdWVOYW1lOwotCi0gICAgZG91YmxlIG1fc25hcHNob3RNb2RpZmlj
YXRpb25UaW1lOwotfTsKLQotI2VuZGlmIC8vIEVOQUJMRShCTE9CKQotCi19IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBCbG9iSXRlbV9oCmRpZmYgLS1naXQgYS9XZWJDb3JlL3Bs
YXRmb3JtL25ldHdvcmsvQmxvYlJlZ2lzdHJ5SW1wbC5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL25l
dHdvcmsvQmxvYlJlZ2lzdHJ5SW1wbC5jcHAKaW5kZXggZWU4NzJlNi4uZmUxYjA5ZiAxMDA2NDQK
LS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0Jsb2JSZWdpc3RyeUltcGwuY3BwCisrKyBi
L1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9CbG9iUmVnaXN0cnlJbXBsLmNwcApAQCAtMzIsNiAr
MzIsNyBAQAogCiAjaW5jbHVkZSAiQmxvYlJlZ2lzdHJ5SW1wbC5oIgogCisjaW5jbHVkZSAiQmxv
YlJlc291cmNlSGFuZGxlLmgiCiAjaW5jbHVkZSAiUmVzb3VyY2VFcnJvci5oIgogI2luY2x1ZGUg
IlJlc291cmNlSGFuZGxlLmgiCiAjaW5jbHVkZSAiUmVzb3VyY2VMb2FkZXIuaCIKQEAgLTYwLDIy
ICs2MSwyMSBAQCBib29sIEJsb2JSZWdpc3RyeUltcGw6OnNob3VsZExvYWRSZXNvdXJjZShjb25z
dCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QpIGNvbnN0CiAgICAgcmV0dXJuIHRydWU7CiB9CiAK
LVBhc3NSZWZQdHI8UmVzb3VyY2VIYW5kbGU+IEJsb2JSZWdpc3RyeUltcGw6OmNyZWF0ZVJlc291
cmNlSGFuZGxlKGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgUmVzb3VyY2VIYW5kbGVD
bGllbnQqKQorUGFzc1JlZlB0cjxSZXNvdXJjZUhhbmRsZT4gQmxvYlJlZ2lzdHJ5SW1wbDo6Y3Jl
YXRlUmVzb3VyY2VIYW5kbGUoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBSZXNvdXJj
ZUhhbmRsZUNsaWVudCogY2xpZW50KQogewogICAgIGlmICghc2hvdWxkTG9hZFJlc291cmNlKHJl
cXVlc3QpKQogICAgICAgICByZXR1cm4gMDsKIAotICAgIC8vIEZJWE1FOiBUbyBiZSBpbXBsZW1l
bnRlZC4KLSAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gQmxvYlJlc291cmNlSGFuZGxlOjpjcmVh
dGUobV9ibG9icy5nZXQocmVxdWVzdC51cmwoKS5zdHJpbmcoKSksIHJlcXVlc3QsIGNsaWVudCk7
CiB9CiAKLWJvb2wgQmxvYlJlZ2lzdHJ5SW1wbDo6bG9hZFJlc291cmNlU3luY2hyb25vdXNseShj
b25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIFJlc291cmNlRXJyb3ImLCBSZXNvdXJjZVJl
c3BvbnNlJiwgVmVjdG9yPGNoYXI+JikKK2Jvb2wgQmxvYlJlZ2lzdHJ5SW1wbDo6bG9hZFJlc291
cmNlU3luY2hyb25vdXNseShjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIFJlc291cmNl
RXJyb3ImIGVycm9yLCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSwgVmVjdG9yPGNoYXI+JiBk
YXRhKQogewogICAgIGlmICghc2hvdWxkTG9hZFJlc291cmNlKHJlcXVlc3QpKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAKLSAgICAvLyBGSVhNRTogVG8gYmUgaW1wbGVtZW50ZWQuCi0gICAgcmV0
dXJuIGZhbHNlOworICAgIEJsb2JSZXNvdXJjZUhhbmRsZTo6bG9hZFJlc291cmNlU3luY2hyb25v
dXNseShtX2Jsb2JzLmdldChyZXF1ZXN0LnVybCgpLnN0cmluZygpKSwgcmVxdWVzdCwgZXJyb3Is
IHJlc3BvbnNlLCBkYXRhKTsKKyAgICByZXR1cm4gdHJ1ZTsKIH0KIAogdm9pZCBCbG9iUmVnaXN0
cnlJbXBsOjphcHBlbmRTdG9yYWdlSXRlbXMoQmxvYlN0b3JhZ2VEYXRhKiBibG9iU3RvcmFnZURh
dGEsIGNvbnN0IEJsb2JEYXRhSXRlbUxpc3QmIGl0ZW1zKQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9w
bGF0Zm9ybS9uZXR3b3JrL0Jsb2JSZXNvdXJjZUhhbmRsZS5jcHAgYi9XZWJDb3JlL3BsYXRmb3Jt
L25ldHdvcmsvQmxvYlJlc291cmNlSGFuZGxlLmNwcAppbmRleCA0MzAxNTcxLi5hYzYzZWYwIDEw
MDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvQmxvYlJlc291cmNlSGFuZGxlLmNw
cAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvQmxvYlJlc291cmNlSGFuZGxlLmNwcApA
QCAtMTU0LDcgKzE1NCw4IEBAIEJsb2JSZXNvdXJjZUhhbmRsZTo6QmxvYlJlc291cmNlSGFuZGxl
KFBhc3NSZWZQdHI8QmxvYlN0b3JhZ2VEYXRhPiBibG9iRGF0YSwgY29uCiAgICAgLCBtX2ZpbGVP
cGVuZWQoZmFsc2UpCiB7ICAgIAogICAgIGlmIChtX2FzeW5jKSB7Ci0gICAgICAgIG1fYXN5bmNT
dHJlYW0gPSBhZG9wdFJlZihjbGllbnQtPmNyZWF0ZUFzeW5jRmlsZVN0cmVhbSh0aGlzKSk7Cisg
ICAgICAgIC8vIFdlIG5lZWQgdG8gdGFrZSBhIHJlZi4KKyAgICAgICAgbV9hc3luY1N0cmVhbSA9
IGNsaWVudC0+Y3JlYXRlQXN5bmNGaWxlU3RyZWFtKHRoaXMpOwogICAgICAgICBjYWxsT25NYWlu
VGhyZWFkKGRlbGF5ZWRTdGFydCwgdGhpcyk7CiAgICAgfSBlbHNlCiAgICAgICAgIG1fc3RyZWFt
ID0gRmlsZVN0cmVhbTo6Y3JlYXRlKCk7CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL25l
dHdvcmsvRm9ybURhdGEuY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0Zvcm1EYXRhLmNw
cAppbmRleCBjNjkxOTFiLi5iMjUyZmUzIDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL25l
dHdvcmsvRm9ybURhdGEuY3BwCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9Gb3JtRGF0
YS5jcHAKQEAgLTIyLDIzICsyMiwyMSBAQAogCiAjaW5jbHVkZSAiRm9ybURhdGEuaCIKIAotI2lu
Y2x1ZGUgIkJsb2JJdGVtLmgiCisjaW5jbHVkZSAiQmxvYkRhdGEuaCIKKyNpbmNsdWRlICJCbG9i
VVJMLmgiCiAjaW5jbHVkZSAiQ2hyb21lLmgiCiAjaW5jbHVkZSAiQ2hyb21lQ2xpZW50LmgiCiAj
aW5jbHVkZSAiRG9jdW1lbnQuaCIKKyNpbmNsdWRlICJGaWxlLmgiCiAjaW5jbHVkZSAiRmlsZVN5
c3RlbS5oIgogI2luY2x1ZGUgIkZvcm1EYXRhQnVpbGRlci5oIgorI2luY2x1ZGUgIkZvcm1EYXRh
TGlzdC5oIgogI2luY2x1ZGUgIk1JTUVUeXBlUmVnaXN0cnkuaCIKICNpbmNsdWRlICJQYWdlLmgi
CiAjaW5jbHVkZSAiVGV4dEVuY29kaW5nLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotI2lm
IEVOQUJMRShCTE9CKQotY29uc3QgbG9uZyBsb25nIEZvcm1EYXRhRWxlbWVudDo6dG9FbmRPZkZp
bGUgPSAtMTsKLWNvbnN0IGRvdWJsZSBGb3JtRGF0YUVsZW1lbnQ6OmRvTm90Q2hlY2tGaWxlQ2hh
bmdlID0gMDsKLSNlbmRpZgotCiBpbmxpbmUgRm9ybURhdGE6OkZvcm1EYXRhKCkKICAgICA6IG1f
aWRlbnRpZmllcigwKQogICAgICwgbV9oYXNHZW5lcmF0ZWRGaWxlcyhmYWxzZSkKQEAgLTk5LDE3
ICs5NywxNyBAQCBQYXNzUmVmUHRyPEZvcm1EYXRhPiBGb3JtRGF0YTo6Y3JlYXRlKGNvbnN0IFZl
Y3RvcjxjaGFyPiYgdmVjdG9yKQogICAgIHJldHVybiByZXN1bHQucmVsZWFzZSgpOwogfQogCi1Q
YXNzUmVmUHRyPEZvcm1EYXRhPiBGb3JtRGF0YTo6Y3JlYXRlKGNvbnN0IEJsb2JJdGVtTGlzdCYg
aXRlbXMsIGNvbnN0IFRleHRFbmNvZGluZyYgZW5jb2RpbmcpCitQYXNzUmVmUHRyPEZvcm1EYXRh
PiBGb3JtRGF0YTo6Y3JlYXRlKGNvbnN0IEZvcm1EYXRhTGlzdCYgbGlzdCwgY29uc3QgVGV4dEVu
Y29kaW5nJiBlbmNvZGluZykKIHsKICAgICBSZWZQdHI8Rm9ybURhdGE+IHJlc3VsdCA9IGNyZWF0
ZSgpOwotICAgIHJlc3VsdC0+YXBwZW5kS2V5VmFsdWVQYWlySXRlbXMoaXRlbXMsIGVuY29kaW5n
LCBmYWxzZSwgMCk7CisgICAgcmVzdWx0LT5hcHBlbmRLZXlWYWx1ZVBhaXJJdGVtcyhsaXN0LCBl
bmNvZGluZywgZmFsc2UsIDApOwogICAgIHJldHVybiByZXN1bHQucmVsZWFzZSgpOwogfQogCi1Q
YXNzUmVmUHRyPEZvcm1EYXRhPiBGb3JtRGF0YTo6Y3JlYXRlTXVsdGlQYXJ0KGNvbnN0IEJsb2JJ
dGVtTGlzdCYgaXRlbXMsIGNvbnN0IFRleHRFbmNvZGluZyYgZW5jb2RpbmcsIERvY3VtZW50KiBk
b2N1bWVudCkKK1Bhc3NSZWZQdHI8Rm9ybURhdGE+IEZvcm1EYXRhOjpjcmVhdGVNdWx0aVBhcnQo
Y29uc3QgRm9ybURhdGFMaXN0JiBsaXN0LCBjb25zdCBUZXh0RW5jb2RpbmcmIGVuY29kaW5nLCBE
b2N1bWVudCogZG9jdW1lbnQpCiB7CiAgICAgUmVmUHRyPEZvcm1EYXRhPiByZXN1bHQgPSBjcmVh
dGUoKTsKLSAgICByZXN1bHQtPmFwcGVuZEtleVZhbHVlUGFpckl0ZW1zKGl0ZW1zLCBlbmNvZGlu
ZywgdHJ1ZSwgZG9jdW1lbnQpOworICAgIHJlc3VsdC0+YXBwZW5kS2V5VmFsdWVQYWlySXRlbXMo
bGlzdCwgZW5jb2RpbmcsIHRydWUsIGRvY3VtZW50KTsKICAgICByZXR1cm4gcmVzdWx0LnJlbGVh
c2UoKTsKIH0KIApAQCAtMTM5LDYgKzEzNywxMSBAQCBQYXNzUmVmUHRyPEZvcm1EYXRhPiBGb3Jt
RGF0YTo6ZGVlcENvcHkoKSBjb25zdAogICAgICAgICAgICAgZm9ybURhdGEtPm1fZWxlbWVudHMu
YXBwZW5kKEZvcm1EYXRhRWxlbWVudChlLm1fZmlsZW5hbWUsIGUubV9zaG91bGRHZW5lcmF0ZUZp
bGUpKTsKICNlbmRpZgogICAgICAgICAgICAgYnJlYWs7CisjaWYgRU5BQkxFKEJMT0IpCisgICAg
ICAgIGNhc2UgRm9ybURhdGFFbGVtZW50OjplbmNvZGVkQmxvYjoKKyAgICAgICAgICAgIGZvcm1E
YXRhLT5tX2VsZW1lbnRzLmFwcGVuZChGb3JtRGF0YUVsZW1lbnQoZS5tX2Jsb2JVUkwpKTsKKyAg
ICAgICAgICAgICBicmVhazsKKyNlbmRpZgogICAgICAgICB9CiAgICAgfQogICAgIHJldHVybiBm
b3JtRGF0YS5yZWxlYXNlKCk7CkBAIC0xNTcsNDQgKzE2MCwxMiBAQCB2b2lkIEZvcm1EYXRhOjph
cHBlbmREYXRhKGNvbnN0IHZvaWQqIGRhdGEsIHNpemVfdCBzaXplKQogdm9pZCBGb3JtRGF0YTo6
YXBwZW5kRmlsZShjb25zdCBTdHJpbmcmIGZpbGVuYW1lLCBib29sIHNob3VsZEdlbmVyYXRlRmls
ZSkKIHsKICNpZiBFTkFCTEUoQkxPQikKLSAgICBtX2VsZW1lbnRzLmFwcGVuZChGb3JtRGF0YUVs
ZW1lbnQoZmlsZW5hbWUsIDAsIEZvcm1EYXRhRWxlbWVudDo6dG9FbmRPZkZpbGUsIEZvcm1EYXRh
RWxlbWVudDo6ZG9Ob3RDaGVja0ZpbGVDaGFuZ2UsIHNob3VsZEdlbmVyYXRlRmlsZSkpOworICAg
IG1fZWxlbWVudHMuYXBwZW5kKEZvcm1EYXRhRWxlbWVudChmaWxlbmFtZSwgMCwgQmxvYkRhdGFJ
dGVtOjp0b0VuZE9mRmlsZSwgQmxvYkRhdGFJdGVtOjpkb05vdENoZWNrRmlsZUNoYW5nZSwgc2hv
dWxkR2VuZXJhdGVGaWxlKSk7CiAjZWxzZQogICAgIG1fZWxlbWVudHMuYXBwZW5kKEZvcm1EYXRh
RWxlbWVudChmaWxlbmFtZSwgc2hvdWxkR2VuZXJhdGVGaWxlKSk7CiAjZW5kaWYKIH0KIAotdm9p
ZCBGb3JtRGF0YTo6YXBwZW5kSXRlbXMoY29uc3QgQmxvYkl0ZW1MaXN0JiBpdGVtcykKLXsKLSAg
ICBmb3IgKEJsb2JJdGVtTGlzdDo6Y29uc3RfaXRlcmF0b3IgaXRlcihpdGVtcy5iZWdpbigpKTsg
aXRlciAhPSBpdGVtcy5lbmQoKTsgKytpdGVyKQotICAgICAgICBhcHBlbmRJdGVtKGl0ZXItPmdl
dCgpLCBmYWxzZSk7Ci19Ci0KLXZvaWQgRm9ybURhdGE6OmFwcGVuZEl0ZW0oY29uc3QgQmxvYkl0
ZW0qIGl0ZW0sIGJvb2wgc2hvdWxkR2VuZXJhdGVGaWxlKQotewotICAgIGNvbnN0IERhdGFCbG9i
SXRlbSogZGF0YUl0ZW0gPSBpdGVtLT50b0RhdGFCbG9iSXRlbSgpOwotICAgIGlmIChkYXRhSXRl
bSkgewotICAgICAgICBhcHBlbmREYXRhKGRhdGFJdGVtLT5kYXRhKCksIHN0YXRpY19jYXN0PHNp
emVfdD4oZGF0YUl0ZW0tPnNpemUoKSkpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAg
Y29uc3QgRmlsZUJsb2JJdGVtKiBmaWxlSXRlbSA9IGl0ZW0tPnRvRmlsZUJsb2JJdGVtKCk7Ci0g
ICAgQVNTRVJUKGZpbGVJdGVtKTsKLSAgICBpZiAoZmlsZUl0ZW0tPnBhdGgoKS5pc0VtcHR5KCkp
IHsKLSAgICAgICAgLy8gSWYgdGhlIHBhdGggaXMgZW1wdHkgZG8gbm90IGFkZCB0aGUgaXRlbS4K
LSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotI2lmIEVOQUJMRShCTE9CKQotICAgIGNvbnN0IEZp
bGVSYW5nZUJsb2JJdGVtKiBmaWxlUmFuZ2VJdGVtID0gaXRlbS0+dG9GaWxlUmFuZ2VCbG9iSXRl
bSgpOwotICAgIGlmIChmaWxlUmFuZ2VJdGVtKSB7Ci0gICAgICAgIGFwcGVuZEZpbGVSYW5nZShm
aWxlSXRlbS0+cGF0aCgpLCBmaWxlUmFuZ2VJdGVtLT5zdGFydCgpLCBmaWxlUmFuZ2VJdGVtLT5z
aXplKCksIGZpbGVSYW5nZUl0ZW0tPnNuYXBzaG90TW9kaWZpY2F0aW9uVGltZSgpLCBzaG91bGRH
ZW5lcmF0ZUZpbGUpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotI2VuZGlmCi0KLSAgICBhcHBl
bmRGaWxlKGZpbGVJdGVtLT5wYXRoKCksIHNob3VsZEdlbmVyYXRlRmlsZSk7Ci19Ci0KICNpZiBF
TkFCTEUoQkxPQikKIHZvaWQgRm9ybURhdGE6OmFwcGVuZEZpbGVSYW5nZShjb25zdCBTdHJpbmcm
IGZpbGVuYW1lLCBsb25nIGxvbmcgc3RhcnQsIGxvbmcgbG9uZyBsZW5ndGgsIGRvdWJsZSBleHBl
Y3RlZE1vZGlmaWNhdGlvblRpbWUsIGJvb2wgc2hvdWxkR2VuZXJhdGVGaWxlKQogewpAQCAtMjA3
LDgwICsxNzgsNzkgQEAgdm9pZCBGb3JtRGF0YTo6YXBwZW5kQmxvYihjb25zdCBLVVJMJiBibG9i
VVJMKQogfQogI2VuZGlmCiAKLXZvaWQgRm9ybURhdGE6OmFwcGVuZEtleVZhbHVlUGFpckl0ZW1z
KGNvbnN0IEJsb2JJdGVtTGlzdCYgaXRlbXMsIGNvbnN0IFRleHRFbmNvZGluZyYgZW5jb2Rpbmcs
IGJvb2wgaXNNdWx0aVBhcnRGb3JtLCBEb2N1bWVudCogZG9jdW1lbnQpCit2b2lkIEZvcm1EYXRh
OjphcHBlbmRLZXlWYWx1ZVBhaXJJdGVtcyhjb25zdCBGb3JtRGF0YUxpc3QmIGxpc3QsIGNvbnN0
IFRleHRFbmNvZGluZyYgZW5jb2RpbmcsIGJvb2wgaXNNdWx0aVBhcnRGb3JtLCBEb2N1bWVudCog
ZG9jdW1lbnQpCiB7CiAgICAgaWYgKGlzTXVsdGlQYXJ0Rm9ybSkKICAgICAgICAgbV9ib3VuZGFy
eSA9IEZvcm1EYXRhQnVpbGRlcjo6Z2VuZXJhdGVVbmlxdWVCb3VuZGFyeVN0cmluZygpOwogCiAg
ICAgVmVjdG9yPGNoYXI+IGVuY29kZWREYXRhOwogCisgICAgY29uc3QgVmVjdG9yPEZvcm1EYXRh
TGlzdDo6SXRlbT4mIGl0ZW1zID0gbGlzdC5pdGVtcygpOwogICAgIHNpemVfdCBmb3JtRGF0YUxp
c3RTaXplID0gaXRlbXMuc2l6ZSgpOwogICAgIEFTU0VSVCghKGZvcm1EYXRhTGlzdFNpemUgJSAy
KSk7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBmb3JtRGF0YUxpc3RTaXplOyBpICs9IDIp
IHsKLSAgICAgICAgY29uc3QgU3RyaW5nQmxvYkl0ZW0qIGtleSA9IGl0ZW1zW2ldLT50b1N0cmlu
Z0Jsb2JJdGVtKCk7Ci0gICAgICAgIGNvbnN0IEJsb2JJdGVtKiB2YWx1ZSA9IGl0ZW1zW2kgKyAx
XS5nZXQoKTsKLSAgICAgICAgQVNTRVJUKGtleSk7CisgICAgICAgIGNvbnN0IEZvcm1EYXRhTGlz
dDo6SXRlbSYga2V5ID0gaXRlbXNbaV07CisgICAgICAgIGNvbnN0IEZvcm1EYXRhTGlzdDo6SXRl
bSYgdmFsdWUgPSBpdGVtc1tpICsgMV07CiAgICAgICAgIGlmIChpc011bHRpUGFydEZvcm0pIHsK
ICAgICAgICAgICAgIFZlY3RvcjxjaGFyPiBoZWFkZXI7Ci0gICAgICAgICAgICBGb3JtRGF0YUJ1
aWxkZXI6OmJlZ2luTXVsdGlQYXJ0SGVhZGVyKGhlYWRlciwgbV9ib3VuZGFyeS5kYXRhKCksIGtl
eS0+Y3N0cigpKTsKKyAgICAgICAgICAgIEZvcm1EYXRhQnVpbGRlcjo6YmVnaW5NdWx0aVBhcnRI
ZWFkZXIoaGVhZGVyLCBtX2JvdW5kYXJ5LmRhdGEoKSwga2V5LmRhdGEoKSk7CiAKICAgICAgICAg
ICAgIGJvb2wgc2hvdWxkR2VuZXJhdGVGaWxlID0gZmFsc2U7Ci0gICAgICAgICAgICAvLyBJZiB0
aGUgY3VycmVudCB0eXBlIGlzIEZJTEUsIHRoZW4gd2UgYWxzbyBuZWVkIHRvIGluY2x1ZGUgdGhl
IGZpbGVuYW1lCi0gICAgICAgICAgICBjb25zdCBGaWxlQmxvYkl0ZW0qIGZpbGVJdGVtID0gdmFs
dWUtPnRvRmlsZUJsb2JJdGVtKCk7Ci0gICAgICAgICAgICBpZiAoZmlsZUl0ZW0pIHsKLSAgICAg
ICAgICAgICAgICBjb25zdCBTdHJpbmcmIHBhdGggPSBmaWxlSXRlbS0+cGF0aCgpOwogCi0jaWYg
RU5BQkxFKERJUkVDVE9SWV9VUExPQUQpCi0gICAgICAgICAgICAgICAgU3RyaW5nIGZpbGVOYW1l
ID0gIWZpbGVJdGVtLT5yZWxhdGl2ZVBhdGgoKS5pc0VtcHR5KCkgPyBmaWxlSXRlbS0+cmVsYXRp
dmVQYXRoKCkgOiBmaWxlSXRlbS0+bmFtZSgpOworICAgICAgICAgICAgLy8gSWYgdGhlIGN1cnJl
bnQgdHlwZSBpcyBibG9iLCB0aGVuIHdlIGFsc28gbmVlZCB0byBpbmNsdWRlIHRoZSBmaWxlbmFt
ZQorICAgICAgICAgICAgaWYgKHZhbHVlLmJsb2IoKSkgeworICAgICAgICAgICAgICAgIFN0cmlu
ZyBuYW1lOworICAgICAgICAgICAgICAgIGlmICh2YWx1ZS5ibG9iKCktPmlzRmlsZSgpKSB7Cisg
ICAgICAgICAgICAgICAgICAgIC8vIEZvciBmaWxlIGJsb2IsIHVzZSB0aGUgZmlsZW5hbWUgKG9y
IHJlbGF0aXZlIHBhdGggaWYgaXQgaXMgcHJlc2VudCkgYXMgdGhlIG5hbWUuCisgICAgICAgICAg
ICAgICAgICAgIEZpbGUqIGZpbGUgPSBzdGF0aWNfY2FzdDxGaWxlKj4odmFsdWUuYmxvYigpKTsK
KyNpZiBFTkFCTEUoRElSRUNUT1JZX1VQTE9BRCkgICAgICAgICAgICAgICAgCisgICAgICAgICAg
ICAgICAgICAgIG5hbWUgPSBmaWxlLT53ZWJraXRSZWxhdGl2ZVBhdGgoKS5pc0VtcHR5KCkgPyBm
aWxlLT5uYW1lKCkgOiBmaWxlLT53ZWJraXRSZWxhdGl2ZVBhdGgoKTsKICNlbHNlCi0gICAgICAg
ICAgICAgICAgU3RyaW5nIGZpbGVOYW1lID0gZmlsZUl0ZW0tPm5hbWUoKTsKLSNlbmRpZgorICAg
ICAgICAgICAgICAgICAgICBuYW1lID0gZmlsZS0+bmFtZSgpOworI2VuZGlmICAgICAgICAgICAg
ICAgICAgICAKIAotICAgICAgICAgICAgICAgIC8vIExldCB0aGUgYXBwbGljYXRpb24gc3BlY2lm
eSBhIGZpbGVuYW1lIGlmIGl0J3MgZ29pbmcgdG8gZ2VuZXJhdGUgYSByZXBsYWNlbWVudCBmaWxl
IGZvciB0aGUgdXBsb2FkLgotICAgICAgICAgICAgICAgIGlmICghcGF0aC5pc0VtcHR5KCkpIHsK
KyAgICAgICAgICAgICAgICAgICAgLy8gTGV0IHRoZSBhcHBsaWNhdGlvbiBzcGVjaWZ5IGEgZmls
ZW5hbWUgaWYgaXQncyBnb2luZyB0byBnZW5lcmF0ZSBhIHJlcGxhY2VtZW50IGZpbGUgZm9yIHRo
ZSB1cGxvYWQuCiAgICAgICAgICAgICAgICAgICAgIGlmIChQYWdlKiBwYWdlID0gZG9jdW1lbnQt
PnBhZ2UoKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIGdlbmVyYXRlZEZpbGVO
YW1lOwotICAgICAgICAgICAgICAgICAgICAgICAgc2hvdWxkR2VuZXJhdGVGaWxlID0gcGFnZS0+
Y2hyb21lKCktPmNsaWVudCgpLT5zaG91bGRSZXBsYWNlV2l0aEdlbmVyYXRlZEZpbGVGb3JVcGxv
YWQocGF0aCwgZ2VuZXJhdGVkRmlsZU5hbWUpOworICAgICAgICAgICAgICAgICAgICAgICAgc2hv
dWxkR2VuZXJhdGVGaWxlID0gcGFnZS0+Y2hyb21lKCktPmNsaWVudCgpLT5zaG91bGRSZXBsYWNl
V2l0aEdlbmVyYXRlZEZpbGVGb3JVcGxvYWQoZmlsZS0+cGF0aCgpLCBnZW5lcmF0ZWRGaWxlTmFt
ZSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2hvdWxkR2VuZXJhdGVGaWxlKQotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVOYW1lID0gZ2VuZXJhdGVkRmlsZU5hbWU7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSA9IGdlbmVyYXRlZEZpbGVOYW1lOwogICAg
ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg
ICAgICAgICAgLy8gRm9yIG5vbi1maWxlIGJsb2IsIHVzZSB0aGUgaWRlbnRpZmllciBwYXJ0IG9m
IHRoZSBVUkwgYXMgdGhlIG5hbWUuCisgICAgICAgICAgICAgICAgICAgIG5hbWUgPSAiQmxvYiIg
KyBCbG9iVVJMOjpnZXRJZGVudGlmaWVyKHZhbHVlLmJsb2IoKS0+dXJsKCkpOworICAgICAgICAg
ICAgICAgICAgICBuYW1lID0gbmFtZS5yZXBsYWNlKCItIiwgIiIpOyAvLyBGb3Igc2FmdHksIHJl
bW92ZSAnLScgZnJvbSB0aGUgZmlsZW5hbWUgc25jZSBzb21lIHNlcnZlcnMgbWF5IG5vdCBsaWtl
IGl0LgogICAgICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgICAgIC8vIFdlIGhhdmUgdG8g
aW5jbHVkZSB0aGUgZmlsZW5hbWU9Ii4uIiBwYXJ0IGluIHRoZSBoZWFkZXIsIGV2ZW4gaWYgdGhl
IGZpbGVuYW1lIGlzIGVtcHR5Ci0gICAgICAgICAgICAgICAgRm9ybURhdGFCdWlsZGVyOjphZGRG
aWxlbmFtZVRvTXVsdGlQYXJ0SGVhZGVyKGhlYWRlciwgZW5jb2RpbmcsIGZpbGVOYW1lKTsKKyAg
ICAgICAgICAgICAgICBGb3JtRGF0YUJ1aWxkZXI6OmFkZEZpbGVuYW1lVG9NdWx0aVBhcnRIZWFk
ZXIoaGVhZGVyLCBlbmNvZGluZywgbmFtZSk7CiAKLSAgICAgICAgICAgICAgICAvLyBJZiB0aGUg
aXRlbSBpcyBzbGljZWQgZnJvbSBhIGZpbGUsIGRvIG5vdCBhZGQgdGhlIGNvbnRlbnQgdHlwZS4K
LSNpZiBFTkFCTEUoQkxPQikKLSAgICAgICAgICAgICAgICBpZiAoIWZpbGVOYW1lLmlzRW1wdHko
KSAmJiAhdmFsdWUtPnRvRmlsZVJhbmdlQmxvYkl0ZW0oKSkgewotI2Vsc2UKLSAgICAgICAgICAg
ICAgICBpZiAoIWZpbGVOYW1lLmlzRW1wdHkoKSkgewotI2VuZGlmCi0gICAgICAgICAgICAgICAg
ICAgIC8vIEZJWE1FOiBUaGUgTUlNRVR5cGVSZWdpc3RyeSBmdW5jdGlvbidzIG5hbWUgbWFrZXMg
aXQgc291bmQgbGlrZSBpdCB0YWtlcyBhIHBhdGgsCi0gICAgICAgICAgICAgICAgICAgIC8vIG5v
dCBqdXN0IGEgYmFzZW5hbWUuIEJ1dCBmaWxlbmFtZSBpcyBub3QgdGhlIHBhdGguIEJ1dCBub3Rl
IHRoYXQgaXQncyBub3Qgc2FmZSB0bwotICAgICAgICAgICAgICAgICAgICAvLyBqdXN0IHVzZSBw
YXRoIGluc3RlYWQgc2luY2UgaW4gdGhlIGdlbmVyYXRlZC1maWxlIGNhc2UgaXQgd2lsbCBub3Qg
cmVmbGVjdCB0aGUKLSAgICAgICAgICAgICAgICAgICAgLy8gTUlNRSB0eXBlIG9mIHRoZSBnZW5l
cmF0ZWQgZmlsZS4KLSAgICAgICAgICAgICAgICAgICAgU3RyaW5nIG1pbWVUeXBlID0gTUlNRVR5
cGVSZWdpc3RyeTo6Z2V0TUlNRVR5cGVGb3JQYXRoKGZpbGVOYW1lKTsKLSAgICAgICAgICAgICAg
ICAgICAgaWYgKCFtaW1lVHlwZS5pc0VtcHR5KCkpCi0gICAgICAgICAgICAgICAgICAgICAgICBG
b3JtRGF0YUJ1aWxkZXI6OmFkZENvbnRlbnRUeXBlVG9NdWx0aVBhcnRIZWFkZXIoaGVhZGVyLCBt
aW1lVHlwZS5sYXRpbjEoKSk7Ci0gICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIC8v
IEFkZCB0aGUgY29udGVudCB0eXBlIGlmIGl0IGlzIGF2YWlsYWJsZS4KKyAgICAgICAgICAgICAg
ICBpZiAodmFsdWUuYmxvYigpLT50eXBlKCkuaXNFbXB0eSgpKQorICAgICAgICAgICAgICAgICAg
ICBGb3JtRGF0YUJ1aWxkZXI6OmFkZENvbnRlbnRUeXBlVG9NdWx0aVBhcnRIZWFkZXIoaGVhZGVy
LCB2YWx1ZS5ibG9iKCktPnR5cGUoKS5sYXRpbjEoKSk7CiAgICAgICAgICAgICB9CiAKICAgICAg
ICAgICAgIEZvcm1EYXRhQnVpbGRlcjo6ZmluaXNoTXVsdGlQYXJ0SGVhZGVyKGhlYWRlcik7CiAK
ICAgICAgICAgICAgIC8vIEFwcGVuZCBib2R5CiAgICAgICAgICAgICBhcHBlbmREYXRhKGhlYWRl
ci5kYXRhKCksIGhlYWRlci5zaXplKCkpOwotICAgICAgICAgICAgYXBwZW5kSXRlbSh2YWx1ZSwg
c2hvdWxkR2VuZXJhdGVGaWxlKTsKKyAgICAgICAgICAgIGlmICh2YWx1ZS5ibG9iKCkpIHsKKyAg
ICAgICAgICAgICAgICBpZiAodmFsdWUuYmxvYigpLT5pc0ZpbGUoKSkKKyAgICAgICAgICAgICAg
ICAgICAgYXBwZW5kRmlsZShzdGF0aWNfY2FzdDxGaWxlKj4odmFsdWUuYmxvYigpKS0+cGF0aCgp
LCBzaG91bGRHZW5lcmF0ZUZpbGUpOworI2lmIEVOQUJMRShCTE9CKQorICAgICAgICAgICAgICAg
IGVsc2UKKyAgICAgICAgICAgICAgICAgICAgYXBwZW5kQmxvYih2YWx1ZS5ibG9iKCktPnVybCgp
KTsKKyNlbmRpZgorICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgYXBwZW5kRGF0
YSh2YWx1ZS5kYXRhKCkuZGF0YSgpLCB2YWx1ZS5kYXRhKCkubGVuZ3RoKCkpOwogICAgICAgICAg
ICAgYXBwZW5kRGF0YSgiXHJcbiIsIDIpOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAg
Ly8gT21pdCB0aGUgbmFtZSAiaXNpbmRleCIgaWYgaXQncyB0aGUgZmlyc3QgZm9ybSBkYXRhIGVs
ZW1lbnQuCiAgICAgICAgICAgICAvLyBGSVhNRTogV2h5IGlzIHRoaXMgYSBnb29kIHJ1bGU/IElz
IHRoaXMgb2Jzb2xldGUgbm93PwotICAgICAgICAgICAgY29uc3QgU3RyaW5nQmxvYkl0ZW0qIHN0
cmluZ1ZhbHVlID0gdmFsdWUtPnRvU3RyaW5nQmxvYkl0ZW0oKTsKLSAgICAgICAgICAgIGlmICgh
c3RyaW5nVmFsdWUpCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBpZiAo
ZW5jb2RlZERhdGEuaXNFbXB0eSgpICYmIGtleS0+Y3N0cigpID09ICJpc2luZGV4IikKLSAgICAg
ICAgICAgICAgICBGb3JtRGF0YUJ1aWxkZXI6OmVuY29kZVN0cmluZ0FzRm9ybURhdGEoZW5jb2Rl
ZERhdGEsIHN0cmluZ1ZhbHVlLT5jc3RyKCkpOworICAgICAgICAgICAgaWYgKGVuY29kZWREYXRh
LmlzRW1wdHkoKSAmJiBrZXkuZGF0YSgpID09ICJpc2luZGV4IikKKyAgICAgICAgICAgICAgICBG
b3JtRGF0YUJ1aWxkZXI6OmVuY29kZVN0cmluZ0FzRm9ybURhdGEoZW5jb2RlZERhdGEsIHZhbHVl
LmRhdGEoKSk7CiAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgRm9ybURhdGFCdWls
ZGVyOjphZGRLZXlWYWx1ZVBhaXJBc0Zvcm1EYXRhKGVuY29kZWREYXRhLCBrZXktPmNzdHIoKSwg
c3RyaW5nVmFsdWUtPmNzdHIoKSk7CisgICAgICAgICAgICAgICAgRm9ybURhdGFCdWlsZGVyOjph
ZGRLZXlWYWx1ZVBhaXJBc0Zvcm1EYXRhKGVuY29kZWREYXRhLCBrZXkuZGF0YSgpLCB2YWx1ZS5k
YXRhKCkpOwogICAgICAgICB9CiAgICAgfQogCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3Jt
L25ldHdvcmsvRm9ybURhdGEuaCBiL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9Gb3JtRGF0YS5o
CmluZGV4IGQzNGZkODEuLmNjNDdjZjQgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vbmV0
d29yay9Gb3JtRGF0YS5oCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9Gb3JtRGF0YS5o
CkBAIC0yOCwxMCArMjgsOSBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIEJsb2JJ
dGVtOwogY2xhc3MgRG9jdW1lbnQ7CitjbGFzcyBGb3JtRGF0YUxpc3Q7CiBjbGFzcyBUZXh0RW5j
b2Rpbmc7Ci10eXBlZGVmIFZlY3RvcjxSZWZQdHI8QmxvYkl0ZW0+ID4gQmxvYkl0ZW1MaXN0Owog
CiBjbGFzcyBGb3JtRGF0YUVsZW1lbnQgewogcHVibGljOgpAQCAtNjIsMTEgKzYxLDYgQEAgcHVi
bGljOgogI2VuZGlmCiAgICAgU3RyaW5nIG1fZ2VuZXJhdGVkRmlsZW5hbWU7CiAgICAgYm9vbCBt
X3Nob3VsZEdlbmVyYXRlRmlsZTsKLQotI2lmIEVOQUJMRShCTE9CKQotICAgIHN0YXRpYyBjb25z
dCBsb25nIGxvbmcgdG9FbmRPZkZpbGU7Ci0gICAgc3RhdGljIGNvbnN0IGRvdWJsZSBkb05vdENo
ZWNrRmlsZUNoYW5nZTsKLSNlbmRpZgogfTsKIAogaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25z
dCBGb3JtRGF0YUVsZW1lbnQmIGEsIGNvbnN0IEZvcm1EYXRhRWxlbWVudCYgYikKQEAgLTEwMSwx
NSArOTUsMTQgQEAgcHVibGljOgogICAgIHN0YXRpYyBQYXNzUmVmUHRyPEZvcm1EYXRhPiBjcmVh
dGUoY29uc3Qgdm9pZCosIHNpemVfdCk7CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8Rm9ybURhdGE+
IGNyZWF0ZShjb25zdCBDU3RyaW5nJik7CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8Rm9ybURhdGE+
IGNyZWF0ZShjb25zdCBWZWN0b3I8Y2hhcj4mKTsKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxGb3Jt
RGF0YT4gY3JlYXRlKGNvbnN0IEJsb2JJdGVtTGlzdCYsIGNvbnN0IFRleHRFbmNvZGluZyYpOwot
ICAgIHN0YXRpYyBQYXNzUmVmUHRyPEZvcm1EYXRhPiBjcmVhdGVNdWx0aVBhcnQoY29uc3QgQmxv
Ykl0ZW1MaXN0JiwgY29uc3QgVGV4dEVuY29kaW5nJiwgRG9jdW1lbnQqKTsKKyAgICBzdGF0aWMg
UGFzc1JlZlB0cjxGb3JtRGF0YT4gY3JlYXRlKGNvbnN0IEZvcm1EYXRhTGlzdCYsIGNvbnN0IFRl
eHRFbmNvZGluZyYpOworICAgIHN0YXRpYyBQYXNzUmVmUHRyPEZvcm1EYXRhPiBjcmVhdGVNdWx0
aVBhcnQoY29uc3QgRm9ybURhdGFMaXN0JiwgY29uc3QgVGV4dEVuY29kaW5nJiwgRG9jdW1lbnQq
KTsKICAgICBQYXNzUmVmUHRyPEZvcm1EYXRhPiBjb3B5KCkgY29uc3Q7CiAgICAgUGFzc1JlZlB0
cjxGb3JtRGF0YT4gZGVlcENvcHkoKSBjb25zdDsKICAgICB+Rm9ybURhdGEoKTsKIAogICAgIHZv
aWQgYXBwZW5kRGF0YShjb25zdCB2b2lkKiBkYXRhLCBzaXplX3QpOwotICAgIHZvaWQgYXBwZW5k
SXRlbXMoY29uc3QgQmxvYkl0ZW1MaXN0Jik7Ci0gICAgdm9pZCBhcHBlbmRGaWxlKGNvbnN0IFN0
cmluZyYgZmlsZW5hbWUsIGJvb2wgc2hvdWxkR2VuZXJhdGVGaWxlID0gZmFsc2UpOworICAgIHZv
aWQgYXBwZW5kRmlsZShjb25zdCBTdHJpbmcmIGZpbGVQYXRoLCBib29sIHNob3VsZEdlbmVyYXRl
RmlsZSA9IGZhbHNlKTsKICNpZiBFTkFCTEUoQkxPQikKICAgICB2b2lkIGFwcGVuZEZpbGVSYW5n
ZShjb25zdCBTdHJpbmcmIGZpbGVuYW1lLCBsb25nIGxvbmcgc3RhcnQsIGxvbmcgbG9uZyBsZW5n
dGgsIGRvdWJsZSBleHBlY3RlZE1vZGlmaWNhdGlvblRpbWUsIGJvb2wgc2hvdWxkR2VuZXJhdGVG
aWxlID0gZmFsc2UpOwogICAgIHZvaWQgYXBwZW5kQmxvYihjb25zdCBLVVJMJiBibG9iVVJMKTsK
QEAgLTEzNyw4ICsxMzAsNyBAQCBwcml2YXRlOgogICAgIEZvcm1EYXRhKCk7CiAgICAgRm9ybURh
dGEoY29uc3QgRm9ybURhdGEmKTsKIAotICAgIHZvaWQgYXBwZW5kSXRlbShjb25zdCBCbG9iSXRl
bSosIGJvb2wgc2hvdWxkR2VuZXJhdGVGaWxlKTsKLSAgICB2b2lkIGFwcGVuZEtleVZhbHVlUGFp
ckl0ZW1zKGNvbnN0IEJsb2JJdGVtTGlzdCYsIGNvbnN0IFRleHRFbmNvZGluZyYsIGJvb2wgaXNN
dWx0aVBhcnRGb3JtLCBEb2N1bWVudCopOworICAgIHZvaWQgYXBwZW5kS2V5VmFsdWVQYWlySXRl
bXMoY29uc3QgRm9ybURhdGFMaXN0JiwgY29uc3QgVGV4dEVuY29kaW5nJiwgYm9vbCBpc011bHRp
UGFydEZvcm0sIERvY3VtZW50Kik7CiAKICAgICBWZWN0b3I8Rm9ybURhdGFFbGVtZW50PiBtX2Vs
ZW1lbnRzOwogCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvbWFjL0Zvcm1E
YXRhU3RyZWFtTWFjLm1tIGIvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL21hYy9Gb3JtRGF0YVN0
cmVhbU1hYy5tbQppbmRleCBjN2JkMmU3Li5lZDk4MzU2IDEwMDY0NAotLS0gYS9XZWJDb3JlL3Bs
YXRmb3JtL25ldHdvcmsvbWFjL0Zvcm1EYXRhU3RyZWFtTWFjLm1tCisrKyBiL1dlYkNvcmUvcGxh
dGZvcm0vbmV0d29yay9tYWMvRm9ybURhdGFTdHJlYW1NYWMubW0KQEAgLTMxLDYgKzMxLDcgQEAK
ICNpbXBvcnQgImNvbmZpZy5oIgogI2ltcG9ydCAiRm9ybURhdGFTdHJlYW1NYWMuaCIKIAorI2lt
cG9ydCAiQmxvYlJlZ2lzdHJ5SW1wbC5oIgogI2ltcG9ydCAiRmlsZVN5c3RlbS5oIgogI2ltcG9y
dCAiRm9ybURhdGEuaCIKICNpbXBvcnQgIlJlc291cmNlSGFuZGxlLmgiCkBAIC0xNDEsNyArMTQy
LDcgQEAgc3RhdGljIHZvaWQgY2xvc2VDdXJyZW50U3RyZWFtKEZvcm1TdHJlYW1GaWVsZHMgKmZv
cm0pCiAgICAgICAgIENGUmVsZWFzZShmb3JtLT5jdXJyZW50U3RyZWFtKTsKICAgICAgICAgZm9y
bS0+Y3VycmVudFN0cmVhbSA9IE5VTEw7CiAjaWYgRU5BQkxFKEJMT0IpCi0gICAgICAgIGZvcm0t
PmN1cnJlbnRTdHJlYW1SYW5nZUxlbmd0aCA9IEZvcm1EYXRhRWxlbWVudDo6dG9FbmRPZkZpbGU7
CisgICAgICAgIGZvcm0tPmN1cnJlbnRTdHJlYW1SYW5nZUxlbmd0aCA9IEJsb2JEYXRhSXRlbTo6
dG9FbmRPZkZpbGU7CiAjZW5kaWYKICAgICB9CiAgICAgaWYgKGZvcm0tPmN1cnJlbnREYXRhKSB7
CkBAIC0xNjksNyArMTcwLDcgQEAgc3RhdGljIGJvb2wgYWR2YW5jZUN1cnJlbnRTdHJlYW0oRm9y
bVN0cmVhbUZpZWxkcyogZm9ybSkKICAgICB9IGVsc2UgewogI2lmIEVOQUJMRShCTE9CKQogICAg
ICAgICAvLyBDaGVjayBpZiB0aGUgZmlsZSBoYXMgYmVlbiBjaGFuZ2VkIG9yIG5vdCBpZiByZXF1
aXJlZC4KLSAgICAgICAgaWYgKG5leHRJbnB1dC5tX2V4cGVjdGVkRmlsZU1vZGlmaWNhdGlvblRp
bWUgIT0gRm9ybURhdGFFbGVtZW50Ojpkb05vdENoZWNrRmlsZUNoYW5nZSkgeworICAgICAgICBp
ZiAobmV4dElucHV0Lm1fZXhwZWN0ZWRGaWxlTW9kaWZpY2F0aW9uVGltZSAhPSBCbG9iRGF0YUl0
ZW06OmRvTm90Q2hlY2tGaWxlQ2hhbmdlKSB7CiAgICAgICAgICAgICB0aW1lX3QgZmlsZU1vZGlm
aWNhdGlvblRpbWU7CiAgICAgICAgICAgICBpZiAoIWdldEZpbGVNb2RpZmljYXRpb25UaW1lKG5l
eHRJbnB1dC5tX2ZpbGVuYW1lLCBmaWxlTW9kaWZpY2F0aW9uVGltZSkgfHwgZmlsZU1vZGlmaWNh
dGlvblRpbWUgIT0gc3RhdGljX2Nhc3Q8dGltZV90PihuZXh0SW5wdXQubV9leHBlY3RlZEZpbGVN
b2RpZmljYXRpb25UaW1lKSkKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0yMjUs
NyArMjI2LDcgQEAgc3RhdGljIHZvaWQqIGZvcm1DcmVhdGUoQ0ZSZWFkU3RyZWFtUmVmIHN0cmVh
bSwgdm9pZCogY29udGV4dCkKICAgICBGb3JtU3RyZWFtRmllbGRzKiBuZXdJbmZvID0gbmV3IEZv
cm1TdHJlYW1GaWVsZHM7CiAgICAgbmV3SW5mby0+Y3VycmVudFN0cmVhbSA9IE5VTEw7CiAjaWYg
RU5BQkxFKEJMT0IpCi0gICAgbmV3SW5mby0+Y3VycmVudFN0cmVhbVJhbmdlTGVuZ3RoID0gRm9y
bURhdGFFbGVtZW50Ojp0b0VuZE9mRmlsZTsKKyAgICBuZXdJbmZvLT5jdXJyZW50U3RyZWFtUmFu
Z2VMZW5ndGggPSBCbG9iRGF0YUl0ZW06OnRvRW5kT2ZGaWxlOwogI2VuZGlmCiAgICAgbmV3SW5m
by0+Y3VycmVudERhdGEgPSAwOwogICAgIG5ld0luZm8tPmZvcm1TdHJlYW0gPSBzdHJlYW07IC8v
IERvbid0IHJldGFpbi4gVGhhdCB3b3VsZCBjcmVhdGUgYSByZWZlcmVuY2UgY3ljbGUuCkBAIC0y
NzMsNyArMjc0LDcgQEAgc3RhdGljIENGSW5kZXggZm9ybVJlYWQoQ0ZSZWFkU3RyZWFtUmVmIHN0
cmVhbSwgVUludDgqIGJ1ZmZlciwgQ0ZJbmRleCBidWZmZXJMZW4KICAgICB3aGlsZSAoZm9ybS0+
Y3VycmVudFN0cmVhbSkgewogICAgICAgICBDRkluZGV4IGJ5dGVzVG9SZWFkID0gYnVmZmVyTGVu
Z3RoOwogI2lmIEVOQUJMRShCTE9CKQotICAgICAgICBpZiAoZm9ybS0+Y3VycmVudFN0cmVhbVJh
bmdlTGVuZ3RoICE9IEZvcm1EYXRhRWxlbWVudDo6dG9FbmRPZkZpbGUgJiYgZm9ybS0+Y3VycmVu
dFN0cmVhbVJhbmdlTGVuZ3RoIDwgYnl0ZXNUb1JlYWQpCisgICAgICAgIGlmIChmb3JtLT5jdXJy
ZW50U3RyZWFtUmFuZ2VMZW5ndGggIT0gQmxvYkRhdGFJdGVtOjp0b0VuZE9mRmlsZSAmJiBmb3Jt
LT5jdXJyZW50U3RyZWFtUmFuZ2VMZW5ndGggPCBieXRlc1RvUmVhZCkKICAgICAgICAgICAgIGJ5
dGVzVG9SZWFkID0gc3RhdGljX2Nhc3Q8Q0ZJbmRleD4oZm9ybS0+Y3VycmVudFN0cmVhbVJhbmdl
TGVuZ3RoKTsKICNlbmRpZgogICAgICAgICBDRkluZGV4IGJ5dGVzUmVhZCA9IENGUmVhZFN0cmVh
bVJlYWQoZm9ybS0+Y3VycmVudFN0cmVhbSwgYnVmZmVyLCBieXRlc1RvUmVhZCk7CkBAIC0yODYs
NyArMjg3LDcgQEAgc3RhdGljIENGSW5kZXggZm9ybVJlYWQoQ0ZSZWFkU3RyZWFtUmVmIHN0cmVh
bSwgVUludDgqIGJ1ZmZlciwgQ0ZJbmRleCBidWZmZXJMZW4KICAgICAgICAgICAgICphdEVPRiA9
IEZBTFNFOwogICAgICAgICAgICAgZm9ybS0+Ynl0ZXNTZW50ICs9IGJ5dGVzUmVhZDsKICNpZiBF
TkFCTEUoQkxPQikKLSAgICAgICAgICAgIGlmIChmb3JtLT5jdXJyZW50U3RyZWFtUmFuZ2VMZW5n
dGggIT0gRm9ybURhdGFFbGVtZW50Ojp0b0VuZE9mRmlsZSkKKyAgICAgICAgICAgIGlmIChmb3Jt
LT5jdXJyZW50U3RyZWFtUmFuZ2VMZW5ndGggIT0gQmxvYkRhdGFJdGVtOjp0b0VuZE9mRmlsZSkK
ICAgICAgICAgICAgICAgICBmb3JtLT5jdXJyZW50U3RyZWFtUmFuZ2VMZW5ndGggLT0gYnl0ZXNS
ZWFkOwogI2VuZGlmCiAKQEAgLTM5NCw2ICszOTUsNDkgQEAgdm9pZCBzZXRIVFRQQm9keShOU011
dGFibGVVUkxSZXF1ZXN0ICpyZXF1ZXN0LCBQYXNzUmVmUHRyPEZvcm1EYXRhPiBmb3JtRGF0YSkK
ICAgICAgICAgfQogICAgIH0KIAorI2lmIEVOQUJMRShCTE9CKQorICAgIC8vIENoZWNrIGlmIHRo
ZXJlIGlzIGEgYmxvYiBpbiB0aGUgZm9ybSBkYXRhLgorICAgIGJvb2wgaGFzQmxvYiA9IGZhbHNl
OworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY291bnQ7ICsraSkgeworICAgICAgICBjb25z
dCBGb3JtRGF0YUVsZW1lbnQmIGVsZW1lbnQgPSBmb3JtRGF0YS0+ZWxlbWVudHMoKVtpXTsKKyAg
ICAgICAgaWYgKGVsZW1lbnQubV90eXBlID09IEZvcm1EYXRhRWxlbWVudDo6ZW5jb2RlZEJsb2Ip
IHsKKyAgICAgICAgICAgIGhhc0Jsb2IgPSB0cnVlOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIH0KKyAgICB9CisKKyAgICAvLyBJZiB5ZXMsIHdlIGhhdmUgdG8gcmVzb2x2ZSBhbGwgdGhl
IGJsb2IgcmVmZXJlbmNlcyBhbmQgcmVnZW5lcmF0ZSB0aGUgZm9ybSBkYXRhIHdpdGggb25seSBk
YXRhIGFuZCBmaWxlIHR5cGVzLgorICAgIGlmIChoYXNCbG9iKSB7CisgICAgICAgIFJlZlB0cjxG
b3JtRGF0YT4gbmV3Rm9ybURhdGEgPSBGb3JtRGF0YTo6Y3JlYXRlKCk7CisgICAgICAgIG5ld0Zv
cm1EYXRhLT5zZXRBbHdheXNTdHJlYW0oZm9ybURhdGEtPmFsd2F5c1N0cmVhbSgpKTsKKyAgICAg
ICAgbmV3Rm9ybURhdGEtPnNldElkZW50aWZpZXIoZm9ybURhdGEtPmlkZW50aWZpZXIoKSk7Cisg
ICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY291bnQ7ICsraSkgeworICAgICAgICAgICAg
Y29uc3QgRm9ybURhdGFFbGVtZW50JiBlbGVtZW50ID0gZm9ybURhdGEtPmVsZW1lbnRzKClbaV07
CisgICAgICAgICAgICBpZiAoZWxlbWVudC5tX3R5cGUgPT0gRm9ybURhdGFFbGVtZW50OjpkYXRh
KQorICAgICAgICAgICAgICAgIG5ld0Zvcm1EYXRhLT5hcHBlbmREYXRhKGVsZW1lbnQubV9kYXRh
LmRhdGEoKSwgZWxlbWVudC5tX2RhdGEuc2l6ZSgpKTsKKyAgICAgICAgICAgIGVsc2UgaWYgKGVs
ZW1lbnQubV90eXBlID09IEZvcm1EYXRhRWxlbWVudDo6ZW5jb2RlZEZpbGUpCisgICAgICAgICAg
ICAgICAgbmV3Rm9ybURhdGEtPmFwcGVuZEZpbGUoZWxlbWVudC5tX2ZpbGVuYW1lLCBlbGVtZW50
Lm1fc2hvdWxkR2VuZXJhdGVGaWxlKTsKKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAg
ICAgIEFTU0VSVChlbGVtZW50Lm1fdHlwZSA9PSBGb3JtRGF0YUVsZW1lbnQ6OmVuY29kZWRCbG9i
KTsKKyAgICAgICAgICAgICAgICBSZWZQdHI8QmxvYlN0b3JhZ2VEYXRhPiBibG9iRGF0YSA9IHN0
YXRpY19jYXN0PEJsb2JSZWdpc3RyeUltcGwmPihibG9iUmVnaXN0cnkoKSkuZ2V0QmxvYkRhdGFG
cm9tVVJMKEtVUkwoUGFyc2VkVVJMU3RyaW5nLCBlbGVtZW50Lm1fYmxvYlVSTCkpOworICAgICAg
ICAgICAgICAgIGlmIChibG9iRGF0YSkgeworICAgICAgICAgICAgICAgICAgICBmb3IgKHNpemVf
dCBqID0gMDsgaiA8IGJsb2JEYXRhLT5pdGVtcygpLnNpemUoKTsgKytqKSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICBjb25zdCBCbG9iRGF0YUl0ZW0mIGJsb2JJdGVtID0gYmxvYkRhdGEtPml0
ZW1zKClbal07CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYmxvYkl0ZW0udHlwZSA9PSBC
bG9iRGF0YUl0ZW06OkRhdGEpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdGb3Jt
RGF0YS0+YXBwZW5kRGF0YShibG9iSXRlbS5kYXRhLmRhdGEoKSArIHN0YXRpY19jYXN0PGludD4o
YmxvYkl0ZW0ub2Zmc2V0KSwgc3RhdGljX2Nhc3Q8aW50PihibG9iSXRlbS5sZW5ndGgpKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgQVNTRVJUKGJsb2JJdGVtLnR5cGUgPT0gQmxvYkRhdGFJdGVtOjpGaWxlKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBuZXdGb3JtRGF0YS0+YXBwZW5kRmlsZVJhbmdlKGJsb2JJdGVt
LnBhdGgsIGJsb2JJdGVtLm9mZnNldCwgYmxvYkl0ZW0ubGVuZ3RoLCBibG9iSXRlbS5leHBlY3Rl
ZE1vZGlmaWNhdGlvblRpbWUpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9
CisgICAgICAgIGZvcm1EYXRhID0gbmV3Rm9ybURhdGE7CisgICAgICAgIGNvdW50ID0gZm9ybURh
dGEtPmVsZW1lbnRzKCkuc2l6ZSgpOworICAgIH0KKyNlbmRpZgorCiAgICAgLy8gUHJlY29tcHV0
ZSB0aGUgY29udGVudCBsZW5ndGggc28gTlNVUkxDb25uZWN0aW9uIGRvZXNuJ3QgdXNlIGNodW5r
ZWQgbW9kZS4KICAgICBsb25nIGxvbmcgbGVuZ3RoID0gMDsKICAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IGNvdW50OyArK2kpIHsKQEAgLTQwMyw3ICs0NDcsNyBAQCB2b2lkIHNldEhUVFBCb2R5
KE5TTXV0YWJsZVVSTFJlcXVlc3QgKnJlcXVlc3QsIFBhc3NSZWZQdHI8Rm9ybURhdGE+IGZvcm1E
YXRhKQogICAgICAgICBlbHNlIHsKICNpZiBFTkFCTEUoQkxPQikKICAgICAgICAgICAgIC8vIElm
IHdlJ3JlIHNlbmRpbmcgdGhlIGZpbGUgcmFuZ2UsIHVzZSB0aGUgZXhpc3RpbmcgcmFuZ2UgbGVu
Z3RoIGZvciBub3cuIFdlIHdpbGwgZGV0ZWN0IGlmIHRoZSBmaWxlIGhhcyBiZWVuIGNoYW5nZWQg
cmlnaHQgYmVmb3JlIHdlIHJlYWQgdGhlIGZpbGUgYW5kIGFib3J0IHRoZSBvcGVyYXRpb24gaWYg
bmVjZXNzYXJ5LgotICAgICAgICAgICAgaWYgKGVsZW1lbnQubV9maWxlTGVuZ3RoICE9IEZvcm1E
YXRhRWxlbWVudDo6dG9FbmRPZkZpbGUpIHsKKyAgICAgICAgICAgIGlmIChlbGVtZW50Lm1fZmls
ZUxlbmd0aCAhPSBCbG9iRGF0YUl0ZW06OnRvRW5kT2ZGaWxlKSB7CiAgICAgICAgICAgICAgICAg
bGVuZ3RoICs9IGVsZW1lbnQubV9maWxlTGVuZ3RoOwogICAgICAgICAgICAgICAgIGNvbnRpbnVl
OwogICAgICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS94bWwvWE1MSHR0cFJlcXVlc3Qu
Y3BwIGIvV2ViQ29yZS94bWwvWE1MSHR0cFJlcXVlc3QuY3BwCmluZGV4IDNlNzY0MDcuLjY4YjQy
NGQgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUveG1sL1hNTEh0dHBSZXF1ZXN0LmNwcAorKysgYi9XZWJD
b3JlL3htbC9YTUxIdHRwUmVxdWVzdC5jcHAKQEAgLTQ3OCw3ICs0NzgsNyBAQCB2b2lkIFhNTEh0
dHBSZXF1ZXN0OjpzZW5kKEJsb2IqIGJvZHksIEV4Y2VwdGlvbkNvZGUmIGVjKQogICAgICAgICAv
LyBGSVhNRTogU2hvdWxkIHdlIHNldCBhIENvbnRlbnQtVHlwZSBpZiBvbmUgaXMgbm90IHNldC4K
ICAgICAgICAgLy8gRklYTUU6IGFkZCBzdXBwb3J0IGZvciB1cGxvYWRpbmcgYnVuZGxlcy4KICAg
ICAgICAgbV9yZXF1ZXN0RW50aXR5Qm9keSA9IEZvcm1EYXRhOjpjcmVhdGUoKTsKLSAgICAgICAg
bV9yZXF1ZXN0RW50aXR5Qm9keS0+YXBwZW5kSXRlbXMoYm9keS0+aXRlbXMoKSk7CisgICAgICAg
IG1fcmVxdWVzdEVudGl0eUJvZHktPmFwcGVuZEJsb2IoYm9keS0+dXJsKCkpOwogICAgIH0KIAog
ICAgIGNyZWF0ZVJlcXVlc3QoZWMpOwpAQCAtNDkwLDcgKzQ5MCw3IEBAIHZvaWQgWE1MSHR0cFJl
cXVlc3Q6OnNlbmQoRE9NRm9ybURhdGEqIGJvZHksIEV4Y2VwdGlvbkNvZGUmIGVjKQogICAgICAg
ICByZXR1cm47CiAKICAgICBpZiAobV9tZXRob2QgIT0gIkdFVCIgJiYgbV9tZXRob2QgIT0gIkhF
QUQiICYmIG1fdXJsLnByb3RvY29sSW5IVFRQRmFtaWx5KCkpIHsKLSAgICAgICAgbV9yZXF1ZXN0
RW50aXR5Qm9keSA9IEZvcm1EYXRhOjpjcmVhdGVNdWx0aVBhcnQoYm9keS0+aXRlbXMoKSwgYm9k
eS0+ZW5jb2RpbmcoKSwgZG9jdW1lbnQoKSk7CisgICAgICAgIG1fcmVxdWVzdEVudGl0eUJvZHkg
PSBGb3JtRGF0YTo6Y3JlYXRlTXVsdGlQYXJ0KCooc3RhdGljX2Nhc3Q8Rm9ybURhdGFMaXN0Kj4o
Ym9keSkpLCBib2R5LT5lbmNvZGluZygpLCBkb2N1bWVudCgpKTsKIAogICAgICAgICAvLyBXZSBu
ZWVkIHRvIGFzayB0aGUgY2xpZW50IHRvIHByb3ZpZGUgdGhlIGdlbmVyYXRlZCBmaWxlIG5hbWVz
IGlmIG5lZWRlZC4gV2hlbiBGb3JtRGF0YSBmaWxscyB0aGUgZWxlbWVudAogICAgICAgICAvLyBm
b3IgdGhlIGZpbGUsIGl0IGNvdWxkIHNldCBhIGZsYWcgdG8gdXNlIHRoZSBnZW5lcmF0ZWQgZmls
ZSBuYW1lLCBpLmUuIGEgcGFja2FnZSBmaWxlIG9uIE1hYy4K
</data>
<flag name="review"
          id="53725"
          type_id="1"
          status="+"
          setter="fishd"
    />
    <flag name="commit-queue"
          id="53726"
          type_id="3"
          status="-"
          setter="jianli"
    />
          </attachment>
      

    </bug>

</bugzilla>