<?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>23036</bug_id>
          
          <creation_ts>2008-12-30 10:23:04 -0800</creation_ts>
          <short_desc>Implement AppCache fallback entries</short_desc>
          <delta_ts>2009-01-02 01:31:20 -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 Misc.</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>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Enhancement</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Alexey Proskuryakov">ap</reporter>
          <assigned_to name="Alexey Proskuryakov">ap</assigned_to>
          
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>103798</commentid>
    <comment_count>0</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2008-12-30 10:23:04 -0800</bug_when>
    <thetext>Fallback namespaces: URLs, used as prefix match patterns, each of which is mapped to a fallback entry. Each namespace URL has the same origin as the manifest.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>103799</commentid>
    <comment_count>1</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2008-12-30 10:23:30 -0800</bug_when>
    <thetext>&lt;rdar://problem/6451666&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>103804</commentid>
    <comment_count>2</comment_count>
      <attachid>26313</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2008-12-30 10:47:28 -0800</bug_when>
    <thetext>Created attachment 26313
proposed patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>103809</commentid>
    <comment_count>3</comment_count>
      <attachid>26313</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-12-30 11:02:06 -0800</bug_when>
    <thetext>Comment on attachment 26313
proposed patch

&gt; +    if (!cache)
&gt; +        cache = applicationCache();
&gt; +    if (!cache)
&gt; +        return false;

I suggest nesting the second if statement inside the first.

&gt; +                    data.clear();
&gt; +                    data.append(resource-&gt;data()-&gt;data(), resource-&gt;data()-&gt;size());

We recently changed clear() so that it actually shrinks the capacity of the vector. This makes this an inefficient algorithm since it involves a free and subsequent malloc. On the other hand, if the data is going to be kept around for a while, then maybe it&apos;s the right thing to do. Another possibility is to call shrink(0) instead of clear(). Or to call resize() and then memcpy() instead of append().

&gt; +    unsigned fallbackCount = m_fallbackURLs.size();
&gt; +    for (unsigned i = 0; i &lt; fallbackCount; ++i) {

We normally use size_t to iterate vectors. I&apos;m concerned that using a vector won&apos;t scale well if the number of URLs gets large.

&gt; +    void setFallbackURLs(const Vector&lt;std::pair&lt;KURL, KURL&gt; &gt;&amp;);

I think this vector type could use a typedef. FallbackURLVector maybe?

&gt; +    unsigned fallbackCount = manifest.fallbackURLs.size();
&gt; +    for (unsigned i = 0; i  &lt; fallbackCount; ++i)

Again, size_t.

&gt; +        unsigned newestCacheID = (unsigned)statement.getColumnInt64(2);

&gt; +        group-&gt;setStorageID((unsigned)statement.getColumnInt64(0));

Lets use C++ casts instead of C casts. And for integer truncation, we normally don&apos;t cast at all -- we use local variables and rely on the compiler allowing that without a warning. Not a great approach, I guess, but I really believe in keeping the casts down to a minimum and as clear as possible. Maybe we should define our own truncation_cast function template?

&gt; +        unsigned fallbackCount = fallbackURLs.size();
&gt; +        for (unsigned i = 0; i &lt; fallbackCount; ++i) {

size_t again.

&gt; +                namespaceURL.setRef(String());

Makes me wish for a clearRef() function.

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>104046</commentid>
    <comment_count>4</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2009-01-02 01:31:20 -0800</bug_when>
    <thetext>Committed as &lt;http://trac.webkit.org/changeset/39546&gt;.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>26313</attachid>
            <date>2008-12-30 10:47:28 -0800</date>
            <delta_ts>2008-12-30 11:02:06 -0800</delta_ts>
            <desc>proposed patch</desc>
            <filename>Fallback.txt</filename>
            <type>text/plain</type>
            <size>37857</size>
            <attacher name="Alexey Proskuryakov">ap</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAzOTUxOCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNjggQEAKKzIwMDgtMTItMzAgIEFsZXhleSBQcm9za3VyeWFrb3YgIDxhcEB3ZWJr
aXQub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzAzNgorICAgICAgICA8
cmRhcjovL3Byb2JsZW0vNjQ1MTY2Nj4gSW1wbGVtZW50IEFwcENhY2hlIGZhbGxiYWNrIGVudHJp
ZXMgKDIzMDM2KQorCisgICAgICAgIFRlc3Q6IGh0dHAvdGVzdHMvYXBwY2FjaGUvZmFsbGJhY2su
aHRtbAorCisgICAgICAgICogbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcDogKFdlYkNvcmU6OkZyYW1l
TG9hZGVyOjpsb2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5KTogVXNlIGZhbGxiYWNrCisgICAgICAg
IGVudHJpZXMgaWYgbm9ybWFsIGxvYWRpbmcgZmFpbHMuCisKKyAgICAgICAgKiBsb2FkZXIvRG9j
dW1lbnRMb2FkZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnRMb2FkZXI6OnNob3Vs
ZExvYWRSZXNvdXJjZUZyb21BcHBsaWNhdGlvbkNhY2hlKTogRG8gbm90IHByZXZlbnQgbm9ybWFs
CisgICAgICAgIGxvYWRpbmcgZm9yIHJlc291cmNlcyB0aGF0IG1hdGNoIGZhbGxiYWNrIG5hbWVz
cGFjZXMgLSB0aGV5IGFyZSBvbmx5IGxvYWRlZCBmcm9tIHRoZSBjYWNoZQorICAgICAgICBpZiB0
aGF0IGZhaWxzLgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnRMb2FkZXI6OmdldEFwcGxpY2F0
aW9uQ2FjaGVGYWxsYmFja1Jlc291cmNlKTogR2V0IGEgZmFsbGJhY2sgZW50cnkgZm9yCisgICAg
ICAgIHJlc291cmNlIGZyb20gYXNzb2NpYXRlZCBhcHBjYWNoZSwgb3IgZnJvbSBwYXNzZWQgaW4g
b25lLCBpZiBhbnkuCisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudExvYWRlcjo6c2NoZWR1bGVM
b2FkRmFsbGJhY2tSZXNvdXJjZUZyb21BcHBsaWNhdGlvbkNhY2hlKTogSWYgYSBmYWxsYmFjawor
ICAgICAgICBlbnRyeSBmb3IgcmVzb3Vyc2UgZXhpc3RzLCBhZGQgaXQgdG8gcGVuZGluZyBzdWJz
dGl0dXRlIGxvYWRzLgorCisgICAgICAgICogbG9hZGVyL0RvY3VtZW50TG9hZGVyLmg6IEFkZGVk
IG5ldyBmdW5jdGlvbnMgZm9yIGxvYWRpbmcgZmFsbGJhY2sgZGF0YSBmb3IgcmVzb3VyY2VzLgor
CisgICAgICAgICogbG9hZGVyL1Jlc291cmNlTG9hZGVyLmg6CisgICAgICAgICogbG9hZGVyL1Jl
c291cmNlTG9hZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlTG9hZGVyOjpzY2hl
ZHVsZUxvYWRGYWxsYmFja1Jlc291cmNlRnJvbUFwcGxpY2F0aW9uQ2FjaGUpOiBUaGlzIGZ1bmN0
aW9uCisgICAgICAgIGlzIGNhbGxlZCB3aGVuIG5vcm1hbCBsb2FkaW5nIGZhaWxzICh3aGljaCBp
bmNsdWRlcyBuZXR3b3JrIGZhaWx1cmVzLCA0eHggYW5kIDV4eCByZXNwb25zZXMsCisgICAgICAg
IGFuZCBjcm9zcy1vcmlnaW4gcmVkaXJlY3RzKSB0byBsb2FkIGFwcGNhY2hlIGZhbGxiYWNrIGRh
dGEgaW5zdGVhZC4gSXQgY2FuIHVzZSBlaXRoZXIgdGhlCisgICAgICAgIGNhY2hlIHRoYXQgaXMg
YXNzb2NpYXRlZCB3aXRoIHRoZSBicm93c2luZyBjb250ZXh0LCBvciBhIGN1c3RvbSBvbmUgaWYg
YXNzb2NpYXRpb24gaXMgeWV0CisgICAgICAgIHRvIHRha2UgcGxhY2UuCisgICAgICAgIChXZWJD
b3JlOjpSZXNvdXJjZUxvYWRlcjo6d2lsbFNlbmRSZXF1ZXN0KTogVHJ5IHVzaW5nIGZhbGxiYWNr
IGRhdGEuCisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUxvYWRlcjo6ZGlkUmVjZWl2ZVJlc3Bv
bnNlKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUxvYWRlcjo6ZGlkRmFpbCk6
IERpdHRvLgorCisgICAgICAgICogbG9hZGVyL01haW5SZXNvdXJjZUxvYWRlci5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpNYWluUmVzb3VyY2VMb2FkZXI6OmRpZFJlY2VpdmVSZXNwb25zZSk6IExv
Y2F0ZSBhbiBhcHByb3ByaWF0ZSBjYWNoZSBhbmQgbG9hZAorICAgICAgICBmYWxsYmFjayBkYXRh
IGZyb20gaXQgaWYgbG9hZGluZyBmYWlscy4gVGhlIGJyb3dzaW5nIGNvbnRleHQgbWF5IHN0aWxs
IGJlIGFzc29jaWF0ZWQgd2l0aAorICAgICAgICBpdHMgcHJldmlvdXMgZG9jdW1lbnQgaGVyZSwg
c28gdGhlIGNhY2hlIHRvIGxvYWQgZnJvbSBtdXN0IGJlIHBhc3NlZCBleHBsaWNpdGx5LgorICAg
ICAgICAoV2ViQ29yZTo6TWFpblJlc291cmNlTG9hZGVyOjpkaWRGYWlsKTogRGl0dG8uCisgICAg
ICAgIChXZWJDb3JlOjpNYWluUmVzb3VyY2VMb2FkZXI6OmxvYWQpOiBSZW1vdmUgdW5uZWNlc3Nh
cnkgY2hlY2sgYW5kIEZJWE1FLgorCisgICAgICAgICogbG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0
aW9uQ2FjaGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QXBwbGljYXRpb25DYWNoZTo6c2V0RmFs
bGJhY2tVUkxzKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGxpY2F0aW9uQ2FjaGU6OnVybE1hdGNo
ZXNGYWxsYmFja05hbWVzcGFjZSk6CisgICAgICAgICogbG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0
aW9uQ2FjaGUuaDoKKyAgICAgICAgKFdlYkNvcmU6OkFwcGxpY2F0aW9uQ2FjaGU6OmZhbGxiYWNr
VVJMcyk6CisgICAgICAgICogbG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGVTdG9yYWdl
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjpjYWNoZUdy
b3VwRm9yVVJMKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjpm
YWxsYmFja0NhY2hlR3JvdXBGb3JVUkwpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbGljYXRpb25D
YWNoZVN0b3JhZ2U6OnN0b3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGxpY2F0aW9uQ2FjaGVT
dG9yYWdlOjpsb2FkQ2FjaGUpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbGljYXRpb25DYWNoZVN0
b3JhZ2U6OnN0b3JlQ29weU9mQ2FjaGUpOgorICAgICAgICAqIGxvYWRlci9hcHBjYWNoZS9BcHBs
aWNhdGlvbkNhY2hlU3RvcmFnZS5oOgorICAgICAgICAqIGxvYWRlci9hcHBjYWNoZS9BcHBsaWNh
dGlvbkNhY2hlR3JvdXAuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QXBwbGljYXRpb25DYWNoZUdy
b3VwOjpmYWxsYmFja0NhY2hlRm9yTWFpblJlcXVlc3QpOgorICAgICAgICAoV2ViQ29yZTo6QXBw
bGljYXRpb25DYWNoZUdyb3VwOjpkaWRGaW5pc2hMb2FkaW5nTWFuaWZlc3QpOgorICAgICAgICAq
IGxvYWRlci9hcHBjYWNoZS9BcHBsaWNhdGlvbkNhY2hlR3JvdXAuaDoKKyAgICAgICAgSW1wbGVt
ZW50IGZhbGxiYWNrIG1hcCBzYXZpbmcgYW5kIGxvYWRpbmcsIHBhc3MgaXQgdG8gdGhlIGNhY2hl
LgorCisgICAgICAgICogbG9hZGVyL2FwcGNhY2hlL01hbmlmZXN0UGFyc2VyLmg6IFVzZSBhIGNv
cnJlY3QgZGF0YSBzdHJ1Y3R1cmUgZm9yIGZhbGxiYWNrIG1hcCAtIGtleXMKKyAgICAgICAgYXJl
IG1hdGNoZWQgYnkgcHJlZml4LCBzbyBIQXNoTWFwIGNhbm5vdCBiZSB1c2VkLgorCisgICAgICAg
ICogbG9hZGVyL2FwcGNhY2hlL01hbmlmZXN0UGFyc2VyLmNwcDogKFdlYkNvcmU6OnBhcnNlTWFu
aWZlc3QpOiBGaXggYnVncyBpbiBmYWxsYmFjayBzZWN0aW9uCisgICAgICAgIHBhcnNpbmcuCisK
IDIwMDgtMTItMzAgIE9saXZlciBIdW50ICA8b2xpdmVyQGFwcGxlLmNvbT4KIAogICAgICAgICBS
ZXZpZXdlZCBieSBBbnR0aSBLb2l2aXN0by4KSW5kZXg6IFdlYkNvcmUvbG9hZGVyL0RvY3VtZW50
TG9hZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2xvYWRlci9Eb2N1bWVudExvYWRlci5j
cHAJKHJldmlzaW9uIDM5NTE0KQorKysgV2ViQ29yZS9sb2FkZXIvRG9jdW1lbnRMb2FkZXIuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC04NzAsNyArODcwLDEwIEBAIGJvb2wgRG9jdW1lbnRMb2FkZXI6
OnNob3VsZExvYWRSZXNvdXJjZUYKICAgICAvLyBJZiB0aGUgcmVzb3VyY2UgaXMgbm90IGEgSFRU
UC9IVFRQUyBHRVQsIHRoZW4gYWJvcnQKICAgICBpZiAoIUFwcGxpY2F0aW9uQ2FjaGU6OnJlcXVl
c3RJc0hUVFBPckhUVFBTR2V0KHJlcXVlc3QpKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
CisKKyAgICBpZiAoY2FjaGUtPnVybE1hdGNoZXNGYWxsYmFja05hbWVzcGFjZShyZXF1ZXN0LnVy
bCgpKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCiAgICAgaWYgKGNhY2hlLT5pc1VSTEluT25s
aW5lV2hpdGVsaXN0KHJlcXVlc3QudXJsKCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAg
CkBAIC04ODMsNiArODg2LDI3IEBAIGJvb2wgRG9jdW1lbnRMb2FkZXI6OnNob3VsZExvYWRSZXNv
dXJjZUYKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAorYm9vbCBEb2N1bWVudExvYWRlcjo6Z2V0QXBw
bGljYXRpb25DYWNoZUZhbGxiYWNrUmVzb3VyY2UoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1
ZXN0LCBBcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2UqJiByZXNvdXJjZSwgQXBwbGljYXRpb25DYWNo
ZSogY2FjaGUpCit7CisgICAgaWYgKCFjYWNoZSkKKyAgICAgICAgY2FjaGUgPSBhcHBsaWNhdGlv
bkNhY2hlKCk7CisgICAgaWYgKCFjYWNoZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAor
ICAgIC8vIElmIHRoZSByZXNvdXJjZSBpcyBub3QgYSBIVFRQL0hUVFBTIEdFVCwgdGhlbiBhYm9y
dAorICAgIGlmICghQXBwbGljYXRpb25DYWNoZTo6cmVxdWVzdElzSFRUUE9ySFRUUFNHZXQocmVx
dWVzdCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIEtVUkwgZmFsbGJhY2tVUkw7Cisg
ICAgaWYgKCFjYWNoZS0+dXJsTWF0Y2hlc0ZhbGxiYWNrTmFtZXNwYWNlKHJlcXVlc3QudXJsKCks
ICZmYWxsYmFja1VSTCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHJlc291cmNlID0g
Y2FjaGUtPnJlc291cmNlRm9yVVJMKGZhbGxiYWNrVVJMKTsKKyAgICBBU1NFUlQocmVzb3VyY2Up
OworCisgICAgcmV0dXJuIHRydWU7Cit9CisKIGJvb2wgRG9jdW1lbnRMb2FkZXI6OnNjaGVkdWxl
QXBwbGljYXRpb25DYWNoZUxvYWQoUmVzb3VyY2VMb2FkZXIqIGxvYWRlciwgY29uc3QgUmVzb3Vy
Y2VSZXF1ZXN0JiByZXF1ZXN0LCBjb25zdCBLVVJMJiBvcmlnaW5hbFVSTCkKIHsKICAgICBpZiAo
IWZyYW1lTG9hZGVyKCktPmZyYW1lKCktPnNldHRpbmdzKCkgfHwgIWZyYW1lTG9hZGVyKCktPmZy
YW1lKCktPnNldHRpbmdzKCktPm9mZmxpbmVXZWJBcHBsaWNhdGlvbkNhY2hlRW5hYmxlZCgpKQpA
QCAtOTAxLDYgKzkyNSwyMSBAQCBib29sIERvY3VtZW50TG9hZGVyOjpzY2hlZHVsZUFwcGxpY2F0
aW9uCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKK2Jvb2wgRG9jdW1lbnRMb2FkZXI6OnNjaGVkdWxl
TG9hZEZhbGxiYWNrUmVzb3VyY2VGcm9tQXBwbGljYXRpb25DYWNoZShSZXNvdXJjZUxvYWRlciog
bG9hZGVyLCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIEFwcGxpY2F0aW9uQ2FjaGUq
IGNhY2hlKQoreworICAgIGlmICghZnJhbWVMb2FkZXIoKS0+ZnJhbWUoKS0+c2V0dGluZ3MoKSB8
fCAhZnJhbWVMb2FkZXIoKS0+ZnJhbWUoKS0+c2V0dGluZ3MoKS0+b2ZmbGluZVdlYkFwcGxpY2F0
aW9uQ2FjaGVFbmFibGVkKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIEFwcGxpY2F0
aW9uQ2FjaGVSZXNvdXJjZSogcmVzb3VyY2U7CisgICAgaWYgKCFnZXRBcHBsaWNhdGlvbkNhY2hl
RmFsbGJhY2tSZXNvdXJjZShyZXF1ZXN0LCByZXNvdXJjZSwgY2FjaGUpKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisKKyAgICBtX3BlbmRpbmdTdWJzdGl0dXRlUmVzb3VyY2VzLnNldChsb2FkZXIs
IHJlc291cmNlKTsKKyAgICBkZWxpdmVyU3Vic3RpdHV0ZVJlc291cmNlc0FmdGVyRGVsYXkoKTsK
KyAgICAgICAgCisgICAgcmV0dXJuIHRydWU7Cit9CisKICNlbmRpZiAvLyBFTkFCTEUoT0ZGTElO
RV9XRUJfQVBQTElDQVRJT05TKQogCiB9CkluZGV4OiBXZWJDb3JlL2xvYWRlci9Eb2N1bWVudExv
YWRlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvbG9hZGVyL0RvY3VtZW50TG9hZGVyLmgJKHJl
dmlzaW9uIDM5NTA5KQorKysgV2ViQ29yZS9sb2FkZXIvRG9jdW1lbnRMb2FkZXIuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMTk4LDcgKzE5OCw5IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAg
CiAjaWYgRU5BQkxFKE9GRkxJTkVfV0VCX0FQUExJQ0FUSU9OUykKICAgICAgICAgYm9vbCBzY2hl
ZHVsZUFwcGxpY2F0aW9uQ2FjaGVMb2FkKFJlc291cmNlTG9hZGVyKiwgY29uc3QgUmVzb3VyY2VS
ZXF1ZXN0JiwgY29uc3QgS1VSTCYgb3JpZ2luYWxVUkwpOworICAgICAgICBib29sIHNjaGVkdWxl
TG9hZEZhbGxiYWNrUmVzb3VyY2VGcm9tQXBwbGljYXRpb25DYWNoZShSZXNvdXJjZUxvYWRlcios
IGNvbnN0IFJlc291cmNlUmVxdWVzdCYsIEFwcGxpY2F0aW9uQ2FjaGUqID0gMCk7CiAgICAgICAg
IGJvb2wgc2hvdWxkTG9hZFJlc291cmNlRnJvbUFwcGxpY2F0aW9uQ2FjaGUoY29uc3QgUmVzb3Vy
Y2VSZXF1ZXN0JiwgQXBwbGljYXRpb25DYWNoZVJlc291cmNlKiYpOworICAgICAgICBib29sIGdl
dEFwcGxpY2F0aW9uQ2FjaGVGYWxsYmFja1Jlc291cmNlKGNvbnN0IFJlc291cmNlUmVxdWVzdCYs
IEFwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZSomLCBBcHBsaWNhdGlvbkNhY2hlKiA9IDApOwogICAg
ICAgICAKICAgICAgICAgdm9pZCBzZXRDYW5kaWRhdGVBcHBsaWNhdGlvbkNhY2hlR3JvdXAoQXBw
bGljYXRpb25DYWNoZUdyb3VwKiBncm91cCk7CiAgICAgICAgIEFwcGxpY2F0aW9uQ2FjaGVHcm91
cCogY2FuZGlkYXRlQXBwbGljYXRpb25DYWNoZUdyb3VwKCkgY29uc3QgeyByZXR1cm4gbV9jYW5k
aWRhdGVBcHBsaWNhdGlvbkNhY2hlR3JvdXA7IH0KSW5kZXg6IFdlYkNvcmUvbG9hZGVyL0ZyYW1l
TG9hZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlci5jcHAJ
KHJldmlzaW9uIDM5NTA5KQorKysgV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXIuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zNTk1LDkgKzM1OTUsMjUgQEAgdW5zaWduZWQgbG9uZyBGcmFtZUxvYWRl
cjo6bG9hZFJlc291cmNlUwogICAgICAgICAgICAgICAgIGRhdGEuYXBwZW5kKHJlc291cmNlLT5k
YXRhKCktPmRhdGEoKSwgcmVzb3VyY2UtPmRhdGEoKS0+c2l6ZSgpKTsKICAgICAgICAgICAgIH0g
ZWxzZQogICAgICAgICAgICAgICAgIGVycm9yID0gY2Fubm90U2hvd1VSTEVycm9yKG5ld1JlcXVl
c3QpOwotICAgICAgICB9IGVsc2UgCisgICAgICAgIH0gZWxzZSB7CiAjZW5kaWYKICAgICAgICAg
ICAgIFJlc291cmNlSGFuZGxlOjpsb2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5KG5ld1JlcXVlc3Qs
IGVycm9yLCByZXNwb25zZSwgZGF0YSwgbV9mcmFtZSk7CisKKyNpZiBFTkFCTEUoT0ZGTElORV9X
RUJfQVBQTElDQVRJT05TKQorICAgICAgICAgICAgLy8gSWYgbm9ybWFsIGxvYWRpbmcgcmVzdWx0
cyBpbiBhIHJlZGlyZWN0IHRvIGEgcmVzb3VyY2Ugd2l0aCBhbm90aGVyIG9yaWdpbiAoaW5kaWNh
dGl2ZSBvZiBhIGNhcHRpdmUgcG9ydGFsKSwgb3IgYSA0eHggb3IgNXh4IHN0YXR1cyBjb2RlIG9y
IGVxdWl2YWxlbnQsCisgICAgICAgICAgICAvLyBvciBpZiB0aGVyZSB3ZXJlIG5ldHdvcmsgZXJy
b3JzIChidXQgbm90IGlmIHRoZSB1c2VyIGNhbmNlbGVkIHRoZSBkb3dubG9hZCksIHRoZW4gaW5z
dGVhZCBnZXQsIGZyb20gdGhlIGNhY2hlLCB0aGUgcmVzb3VyY2Ugb2YgdGhlIGZhbGxiYWNrIGVu
dHJ5CisgICAgICAgICAgICAvLyBjb3JyZXNwb25kaW5nIHRvIHRoZSBtYXRjaGVkIG5hbWVzcGFj
ZS4KKyAgICAgICAgICAgIGlmICgoIWVycm9yLmlzTnVsbCgpICYmICFlcnJvci5pc0NhbmNlbGxh
dGlvbigpKQorICAgICAgICAgICAgICAgICB8fCByZXNwb25zZS5odHRwU3RhdHVzQ29kZSgpIC8g
MTAwID09IDQgfHwgcmVzcG9uc2UuaHR0cFN0YXR1c0NvZGUoKSAvIDEwMCA9PSA1CisgICAgICAg
ICAgICAgICAgIHx8ICFwcm90b2NvbEhvc3RBbmRQb3J0QXJlRXF1YWwobmV3UmVxdWVzdC51cmwo
KSwgcmVzcG9uc2UudXJsKCkpKSB7CisgICAgICAgICAgICAgICAgaWYgKGRvY3VtZW50TG9hZGVy
KCktPmdldEFwcGxpY2F0aW9uQ2FjaGVGYWxsYmFja1Jlc291cmNlKG5ld1JlcXVlc3QsIHJlc291
cmNlKSkgeworICAgICAgICAgICAgICAgICAgICByZXNwb25zZSA9IHJlc291cmNlLT5yZXNwb25z
ZSgpOworICAgICAgICAgICAgICAgICAgICBkYXRhLmNsZWFyKCk7CisgICAgICAgICAgICAgICAg
ICAgIGRhdGEuYXBwZW5kKHJlc291cmNlLT5kYXRhKCktPmRhdGEoKSwgcmVzb3VyY2UtPmRhdGEo
KS0+c2l6ZSgpKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KyNlbmRpZgogICAgIH0KICAgICAKICAgICBzZW5kUmVtYWluaW5nRGVsZWdhdGVNZXNzYWdlcyhp
ZGVudGlmaWVyLCByZXNwb25zZSwgZGF0YS5zaXplKCksIGVycm9yKTsKSW5kZXg6IFdlYkNvcmUv
bG9hZGVyL01haW5SZXNvdXJjZUxvYWRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9sb2Fk
ZXIvTWFpblJlc291cmNlTG9hZGVyLmNwcAkocmV2aXNpb24gMzk1MDkpCisrKyBXZWJDb3JlL2xv
YWRlci9NYWluUmVzb3VyY2VMb2FkZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNjksNiArMjY5
LDE4IEBAIHZvaWQgTWFpblJlc291cmNlTG9hZGVyOjpjb250aW51ZUFmdGVyQ28KIAogdm9pZCBN
YWluUmVzb3VyY2VMb2FkZXI6OmRpZFJlY2VpdmVSZXNwb25zZShjb25zdCBSZXNvdXJjZVJlc3Bv
bnNlJiByKQogeworI2lmIEVOQUJMRShPRkZMSU5FX1dFQl9BUFBMSUNBVElPTlMpCisgICAgaWYg
KHIuaHR0cFN0YXR1c0NvZGUoKSAvIDEwMCA9PSA0IHx8IHIuaHR0cFN0YXR1c0NvZGUoKSAvIDEw
MCA9PSA1KSB7CisgICAgICAgIEFTU0VSVCghbV9hcHBsaWNhdGlvbkNhY2hlKTsKKyAgICAgICAg
aWYgKG1fZnJhbWUtPnNldHRpbmdzKCkgJiYgbV9mcmFtZS0+c2V0dGluZ3MoKS0+b2ZmbGluZVdl
YkFwcGxpY2F0aW9uQ2FjaGVFbmFibGVkKCkpIHsKKyAgICAgICAgICAgIG1fYXBwbGljYXRpb25D
YWNoZSA9IEFwcGxpY2F0aW9uQ2FjaGVHcm91cDo6ZmFsbGJhY2tDYWNoZUZvck1haW5SZXF1ZXN0
KHJlcXVlc3QoKSwgZG9jdW1lbnRMb2FkZXIoKSk7CisKKyAgICAgICAgICAgIGlmIChzY2hlZHVs
ZUxvYWRGYWxsYmFja1Jlc291cmNlRnJvbUFwcGxpY2F0aW9uQ2FjaGUobV9hcHBsaWNhdGlvbkNh
Y2hlLmdldCgpKSkKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9Cisj
ZW5kaWYKKwogICAgIC8vIFRoZXJlIGlzIGEgYnVnIGluIENGTmV0d29yayB3aGVyZSBjYWxsYmFj
a3MgY2FuIGJlIGRpc3BhdGNoZWQgZXZlbiB3aGVuIGxvYWRzIGFyZSBkZWZlcnJlZC4KICAgICAv
LyBTZWUgPHJkYXI6Ly9wcm9ibGVtLzYzMDQ2MDA+IGZvciBtb3JlIGRldGFpbHMuCiAjaWYgIVBM
QVRGT1JNKENGKQpAQCAtMzQ2LDYgKzM1OCwxOCBAQCB2b2lkIE1haW5SZXNvdXJjZUxvYWRlcjo6
ZGlkRmluaXNoTG9hZGluCiAKIHZvaWQgTWFpblJlc291cmNlTG9hZGVyOjpkaWRGYWlsKGNvbnN0
IFJlc291cmNlRXJyb3ImIGVycm9yKQogeworI2lmIEVOQUJMRShPRkZMSU5FX1dFQl9BUFBMSUNB
VElPTlMpCisgICAgaWYgKCFlcnJvci5pc0NhbmNlbGxhdGlvbigpKSB7CisgICAgICAgIEFTU0VS
VCghbV9hcHBsaWNhdGlvbkNhY2hlKTsKKyAgICAgICAgaWYgKG1fZnJhbWUtPnNldHRpbmdzKCkg
JiYgbV9mcmFtZS0+c2V0dGluZ3MoKS0+b2ZmbGluZVdlYkFwcGxpY2F0aW9uQ2FjaGVFbmFibGVk
KCkpIHsKKyAgICAgICAgICAgIG1fYXBwbGljYXRpb25DYWNoZSA9IEFwcGxpY2F0aW9uQ2FjaGVH
cm91cDo6ZmFsbGJhY2tDYWNoZUZvck1haW5SZXF1ZXN0KHJlcXVlc3QoKSwgZG9jdW1lbnRMb2Fk
ZXIoKSk7CisKKyAgICAgICAgICAgIGlmIChzY2hlZHVsZUxvYWRGYWxsYmFja1Jlc291cmNlRnJv
bUFwcGxpY2F0aW9uQ2FjaGUobV9hcHBsaWNhdGlvbkNhY2hlLmdldCgpKSkKKyAgICAgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9CisjZW5kaWYKKwogICAgIC8vIFRoZXJlIGlz
IGEgYnVnIGluIENGTmV0d29yayB3aGVyZSBjYWxsYmFja3MgY2FuIGJlIGRpc3BhdGNoZWQgZXZl
biB3aGVuIGxvYWRzIGFyZSBkZWZlcnJlZC4KICAgICAvLyBTZWUgPHJkYXI6Ly9wcm9ibGVtLzYz
MDQ2MDA+IGZvciBtb3JlIGRldGFpbHMuCiAjaWYgIVBMQVRGT1JNKENGKQpAQCAtNDM0LDE1ICs0
NTgsMTMgQEAgYm9vbCBNYWluUmVzb3VyY2VMb2FkZXI6OmxvYWQoY29uc3QgUmVzbwogICAgICAg
ICBBU1NFUlQoIW1fYXBwbGljYXRpb25DYWNoZSk7CiAKICAgICAgICAgbV9hcHBsaWNhdGlvbkNh
Y2hlID0gQXBwbGljYXRpb25DYWNoZUdyb3VwOjpjYWNoZUZvck1haW5SZXF1ZXN0KHIsIG1fZG9j
dW1lbnRMb2FkZXIuZ2V0KCkpOwotICAgICAgICAgICAgCisKICAgICAgICAgaWYgKG1fYXBwbGlj
YXRpb25DYWNoZSkgewotICAgICAgICAgICAgLy8gR2V0IHRoZSByZXNvdXJjZSBmcm9tIHRoZSBh
cHBsaWNhdGlvbiBjYWNoZS4KLSAgICAgICAgICAgIC8vIEZJWE1FOiBJZiB0aGUgcmVzb3VyY2Ug
ZG9lcyBub3QgZXhpc3QsIHRoZSBsb2FkIHNob3VsZCBmYWlsLgotICAgICAgICAgICAgaWYgKEFw
cGxpY2F0aW9uQ2FjaGVSZXNvdXJjZSogcmVzb3VyY2UgPSBtX2FwcGxpY2F0aW9uQ2FjaGUtPnJl
c291cmNlRm9yUmVxdWVzdChyKSkgewotICAgICAgICAgICAgICAgIG1fc3Vic3RpdHV0ZURhdGEg
PSBTdWJzdGl0dXRlRGF0YShyZXNvdXJjZS0+ZGF0YSgpLCAKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb3VyY2UtPnJlc3BvbnNlKCkubWltZVR5
cGUoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
cmVzb3VyY2UtPnJlc3BvbnNlKCkudGV4dEVuY29kaW5nTmFtZSgpLCBLVVJMKCkpOwotICAgICAg
ICAgICAgfQorICAgICAgICAgICAgLy8gR2V0IHRoZSByZXNvdXJjZSBmcm9tIHRoZSBhcHBsaWNh
dGlvbiBjYWNoZS4gQnkgZGVmaW5pdGlvbiwgY2FjaGVGb3JNYWluUmVxdWVzdCgpIHJldHVybnMg
YSBjYWNoZSB0aGF0IGNvbnRhaW5zIHRoZSByZXNvdXJjZS4KKyAgICAgICAgICAgIEFwcGxpY2F0
aW9uQ2FjaGVSZXNvdXJjZSogcmVzb3VyY2UgPSBtX2FwcGxpY2F0aW9uQ2FjaGUtPnJlc291cmNl
Rm9yUmVxdWVzdChyKTsKKyAgICAgICAgICAgIG1fc3Vic3RpdHV0ZURhdGEgPSBTdWJzdGl0dXRl
RGF0YShyZXNvdXJjZS0+ZGF0YSgpLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICByZXNvdXJjZS0+cmVzcG9uc2UoKS5taW1lVHlwZSgpLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc291cmNlLT5yZXNwb25zZSgp
LnRleHRFbmNvZGluZ05hbWUoKSwgS1VSTCgpKTsKICAgICAgICAgfQogICAgIH0KICNlbmRpZgpJ
bmRleDogV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VMb2FkZXIuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvbG9hZGVyL1Jlc291cmNlTG9hZGVyLmNwcAkocmV2aXNpb24gMzk1MDkpCisrKyBXZWJD
b3JlL2xvYWRlci9SZXNvdXJjZUxvYWRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE5NSw2ICsx
OTUsMTggQEAgdm9pZCBSZXNvdXJjZUxvYWRlcjo6Y2xlYXJSZXNvdXJjZURhdGEoKQogICAgICAg
ICBtX3Jlc291cmNlRGF0YS0+Y2xlYXIoKTsKIH0KIAorI2lmIEVOQUJMRShPRkZMSU5FX1dFQl9B
UFBMSUNBVElPTlMpCitib29sIFJlc291cmNlTG9hZGVyOjpzY2hlZHVsZUxvYWRGYWxsYmFja1Jl
c291cmNlRnJvbUFwcGxpY2F0aW9uQ2FjaGUoQXBwbGljYXRpb25DYWNoZSogY2FjaGUpCit7Cisg
ICAgaWYgKGRvY3VtZW50TG9hZGVyKCktPnNjaGVkdWxlTG9hZEZhbGxiYWNrUmVzb3VyY2VGcm9t
QXBwbGljYXRpb25DYWNoZSh0aGlzLCBtX3JlcXVlc3QsIGNhY2hlKSkgeworICAgICAgICBoYW5k
bGUoKS0+Y2FuY2VsKCk7CisgICAgICAgIG1fd2FzTG9hZGVkRnJvbUFwcGxpY2F0aW9uQ2FjaGUg
PSB0cnVlOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOwor
fQorI2VuZGlmCisKIHZvaWQgUmVzb3VyY2VMb2FkZXI6OndpbGxTZW5kUmVxdWVzdChSZXNvdXJj
ZVJlcXVlc3QmIHJlcXVlc3QsIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlZGlyZWN0UmVzcG9u
c2UpCiB7CiAgICAgLy8gUHJvdGVjdCB0aGlzIGluIHRoaXMgZGVsZWdhdGUgbWV0aG9kIHNpbmNl
IHRoZSBhZGRpdGlvbmFsIHByb2Nlc3NpbmcgY2FuIGRvCkBAIC0zNzUsNiArMzg3LDEyIEBAIFJl
c291cmNlRXJyb3IgUmVzb3VyY2VMb2FkZXI6OmNhbm5vdFNob3cKIAogdm9pZCBSZXNvdXJjZUxv
YWRlcjo6d2lsbFNlbmRSZXF1ZXN0KFJlc291cmNlSGFuZGxlKiwgUmVzb3VyY2VSZXF1ZXN0JiBy
ZXF1ZXN0LCBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiByZWRpcmVjdFJlc3BvbnNlKQogeworI2lm
IEVOQUJMRShPRkZMSU5FX1dFQl9BUFBMSUNBVElPTlMpCisgICAgaWYgKCFyZWRpcmVjdFJlc3Bv
bnNlLmlzTnVsbCgpICYmICFwcm90b2NvbEhvc3RBbmRQb3J0QXJlRXF1YWwocmVxdWVzdC51cmwo
KSwgcmVkaXJlY3RSZXNwb25zZS51cmwoKSkpIHsKKyAgICAgICAgaWYgKHNjaGVkdWxlTG9hZEZh
bGxiYWNrUmVzb3VyY2VGcm9tQXBwbGljYXRpb25DYWNoZSgpKQorICAgICAgICAgICAgcmV0dXJu
OworICAgIH0KKyNlbmRpZgogICAgIHdpbGxTZW5kUmVxdWVzdChyZXF1ZXN0LCByZWRpcmVjdFJl
c3BvbnNlKTsKIH0KIApAQCAtMzg1LDYgKzQwMywxMiBAQCB2b2lkIFJlc291cmNlTG9hZGVyOjpk
aWRTZW5kRGF0YShSZXNvdXJjCiAKIHZvaWQgUmVzb3VyY2VMb2FkZXI6OmRpZFJlY2VpdmVSZXNw
b25zZShSZXNvdXJjZUhhbmRsZSosIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlKQog
eworI2lmIEVOQUJMRShPRkZMSU5FX1dFQl9BUFBMSUNBVElPTlMpCisgICAgaWYgKHJlc3BvbnNl
Lmh0dHBTdGF0dXNDb2RlKCkgLyAxMDAgPT0gNCB8fCByZXNwb25zZS5odHRwU3RhdHVzQ29kZSgp
IC8gMTAwID09IDUpIHsKKyAgICAgICAgaWYgKHNjaGVkdWxlTG9hZEZhbGxiYWNrUmVzb3VyY2VG
cm9tQXBwbGljYXRpb25DYWNoZSgpKQorICAgICAgICAgICAgcmV0dXJuOworICAgIH0KKyNlbmRp
ZgogICAgIGRpZFJlY2VpdmVSZXNwb25zZShyZXNwb25zZSk7CiB9CiAKQEAgLTQwMCw2ICs0MjQs
MTIgQEAgdm9pZCBSZXNvdXJjZUxvYWRlcjo6ZGlkRmluaXNoTG9hZGluZyhSZQogCiB2b2lkIFJl
c291cmNlTG9hZGVyOjpkaWRGYWlsKFJlc291cmNlSGFuZGxlKiwgY29uc3QgUmVzb3VyY2VFcnJv
ciYgZXJyb3IpCiB7CisjaWYgRU5BQkxFKE9GRkxJTkVfV0VCX0FQUExJQ0FUSU9OUykKKyAgICBp
ZiAoIWVycm9yLmlzQ2FuY2VsbGF0aW9uKCkpIHsKKyAgICAgICAgaWYgKGRvY3VtZW50TG9hZGVy
KCktPnNjaGVkdWxlTG9hZEZhbGxiYWNrUmVzb3VyY2VGcm9tQXBwbGljYXRpb25DYWNoZSh0aGlz
LCBtX3JlcXVlc3QpKQorICAgICAgICAgICAgcmV0dXJuOworICAgIH0KKyNlbmRpZgogICAgIGRp
ZEZhaWwoZXJyb3IpOwogfQogCkluZGV4OiBXZWJDb3JlL2xvYWRlci9SZXNvdXJjZUxvYWRlci5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvbG9hZGVyL1Jlc291cmNlTG9hZGVyLmgJKHJldmlzaW9u
IDM5NTA5KQorKysgV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VMb2FkZXIuaAkod29ya2luZyBjb3B5
KQpAQCAtNDAsNiArNDAsNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKKyAgICBjbGFzcyBB
cHBsaWNhdGlvbkNhY2hlOwogICAgIGNsYXNzIERvY3VtZW50TG9hZGVyOwogICAgIGNsYXNzIEZy
YW1lOwogICAgIGNsYXNzIEZyYW1lTG9hZGVyOwpAQCAtMTE0LDYgKzExNSwxMCBAQCBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAgICAgcHJvdGVjdGVkOgogICAgICAgICBSZXNvdXJjZUxvYWRlcihGcmFt
ZSosIGJvb2wgc2VuZFJlc291cmNlTG9hZENhbGxiYWNrcywgYm9vbCBzaG91bGRDb250ZW50U25p
ZmYpOwogCisjaWYgRU5BQkxFKE9GRkxJTkVfV0VCX0FQUExJQ0FUSU9OUykKKyAgICAgICAgYm9v
bCBzY2hlZHVsZUxvYWRGYWxsYmFja1Jlc291cmNlRnJvbUFwcGxpY2F0aW9uQ2FjaGUoQXBwbGlj
YXRpb25DYWNoZSogPSAwKTsKKyNlbmRpZgorCiAgICAgICAgIHZpcnR1YWwgdm9pZCBkaWRDYW5j
ZWwoY29uc3QgUmVzb3VyY2VFcnJvciYpOwogICAgICAgICB2b2lkIGRpZEZpbmlzaExvYWRpbmdP
bmVQYXJ0KCk7CiAKSW5kZXg6IFdlYkNvcmUvbG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2Fj
aGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvbG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9u
Q2FjaGUuY3BwCShyZXZpc2lvbiAzOTUwOSkKKysrIFdlYkNvcmUvbG9hZGVyL2FwcGNhY2hlL0Fw
cGxpY2F0aW9uQ2FjaGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNjUsNyArMTY1LDI2IEBAIGJv
b2wgQXBwbGljYXRpb25DYWNoZTo6aXNVUkxJbk9ubGluZVdoaXQKICAgICBjb3B5LnNldFJlZihT
dHJpbmcoKSk7CiAgICAgcmV0dXJuIG1fb25saW5lV2hpdGVsaXN0LmNvbnRhaW5zKGNvcHkpOwog
fQotICAgIAorCit2b2lkIEFwcGxpY2F0aW9uQ2FjaGU6OnNldEZhbGxiYWNrVVJMcyhjb25zdCBW
ZWN0b3I8c3RkOjpwYWlyPEtVUkwsIEtVUkw+ID4mIGZhbGxiYWNrVVJMcykKK3sKKyAgICBBU1NF
UlQobV9mYWxsYmFja1VSTHMuaXNFbXB0eSgpKTsKKyAgICBtX2ZhbGxiYWNrVVJMcyA9IGZhbGxi
YWNrVVJMczsKK30KKworYm9vbCBBcHBsaWNhdGlvbkNhY2hlOjp1cmxNYXRjaGVzRmFsbGJhY2tO
YW1lc3BhY2UoY29uc3QgS1VSTCYgdXJsLCBLVVJMKiBmYWxsYmFja1VSTCkKK3sKKyAgICB1bnNp
Z25lZCBmYWxsYmFja0NvdW50ID0gbV9mYWxsYmFja1VSTHMuc2l6ZSgpOworICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBmYWxsYmFja0NvdW50OyArK2kpIHsKKyAgICAgICAgaWYgKHByb3Rv
Y29sSG9zdEFuZFBvcnRBcmVFcXVhbCh1cmwsIG1fZmFsbGJhY2tVUkxzW2ldLmZpcnN0KSAmJiB1
cmwuc3RyaW5nKCkuc3RhcnRzV2l0aChtX2ZhbGxiYWNrVVJMc1tpXS5maXJzdC5zdHJpbmcoKSkp
IHsKKyAgICAgICAgICAgIGlmIChmYWxsYmFja1VSTCkKKyAgICAgICAgICAgICAgICAqZmFsbGJh
Y2tVUkwgPSBtX2ZhbGxiYWNrVVJMc1tpXS5zZWNvbmQ7CisgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisKIHZvaWQgQXBwbGlj
YXRpb25DYWNoZTo6Y2xlYXJTdG9yYWdlSUQoKQogewogICAgIG1fc3RvcmFnZUlEID0gMDsKSW5k
ZXg6IFdlYkNvcmUvbG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGUuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL2xvYWRlci9hcHBjYWNoZS9BcHBsaWNhdGlvbkNhY2hlLmgJKHJldmlzaW9u
IDM5NTA5KQorKysgV2ViQ29yZS9sb2FkZXIvYXBwY2FjaGUvQXBwbGljYXRpb25DYWNoZS5oCSh3
b3JraW5nIGNvcHkpCkBAIC03MCw2ICs3MCwxMCBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRPbmxp
bmVXaGl0ZWxpc3QoY29uc3QgSGFzaFNldDxTdHJpbmc+JiBvbmxpbmVXaGl0ZWxpc3QpOwogICAg
IGNvbnN0IEhhc2hTZXQ8U3RyaW5nPiYgb25saW5lV2hpdGVsaXN0KCkgY29uc3QgeyByZXR1cm4g
bV9vbmxpbmVXaGl0ZWxpc3Q7IH0KICAgICBib29sIGlzVVJMSW5PbmxpbmVXaGl0ZWxpc3QoY29u
c3QgS1VSTCYpOworCisgICAgdm9pZCBzZXRGYWxsYmFja1VSTHMoY29uc3QgVmVjdG9yPHN0ZDo6
cGFpcjxLVVJMLCBLVVJMPiA+Jik7CisgICAgY29uc3QgVmVjdG9yPHN0ZDo6cGFpcjxLVVJMLCBL
VVJMPiA+JiBmYWxsYmFja1VSTHMoKSBjb25zdCB7IHJldHVybiBtX2ZhbGxiYWNrVVJMczsgfQor
ICAgIGJvb2wgdXJsTWF0Y2hlc0ZhbGxiYWNrTmFtZXNwYWNlKGNvbnN0IEtVUkwmLCBLVVJMKiBm
YWxsYmFja1VSTCA9IDApOwogICAgIAogI2lmbmRlZiBOREVCVUcKICAgICB2b2lkIGR1bXAoKTsK
QEAgLTkyLDYgKzk2LDcgQEAgcHJpdmF0ZToKICAgICBBcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2Uq
IG1fbWFuaWZlc3Q7CiAgICAgCiAgICAgSGFzaFNldDxTdHJpbmc+IG1fb25saW5lV2hpdGVsaXN0
OworICAgIFZlY3RvcjxzdGQ6OnBhaXI8S1VSTCwgS1VSTD4gPiBtX2ZhbGxiYWNrVVJMczsKICAg
ICAKICAgICB1bnNpZ25lZCBtX3N0b3JhZ2VJRDsKIH07CkluZGV4OiBXZWJDb3JlL2xvYWRlci9h
cHBjYWNoZS9BcHBsaWNhdGlvbkNhY2hlR3JvdXAuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
bG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGVHcm91cC5jcHAJKHJldmlzaW9uIDM5NTE0
KQorKysgV2ViQ29yZS9sb2FkZXIvYXBwY2FjaGUvQXBwbGljYXRpb25DYWNoZUdyb3VwLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtOTAsNiArOTAsMjAgQEAgQXBwbGljYXRpb25DYWNoZSogQXBwbGlj
YXRpb25DYWNoZUdyb3VwOgogICAgIHJldHVybiAwOwogfQogICAgIAorQXBwbGljYXRpb25DYWNo
ZSogQXBwbGljYXRpb25DYWNoZUdyb3VwOjpmYWxsYmFja0NhY2hlRm9yTWFpblJlcXVlc3QoY29u
c3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBEb2N1bWVudExvYWRlciogbG9hZGVyKQorewor
ICAgIGlmICghQXBwbGljYXRpb25DYWNoZTo6cmVxdWVzdElzSFRUUE9ySFRUUFNHZXQocmVxdWVz
dCkpCisgICAgICAgIHJldHVybiAwOworCisgICAgaWYgKEFwcGxpY2F0aW9uQ2FjaGVHcm91cCog
Z3JvdXAgPSBjYWNoZVN0b3JhZ2UoKS5mYWxsYmFja0NhY2hlR3JvdXBGb3JVUkwocmVxdWVzdC51
cmwoKSkpIHsKKyAgICAgICAgQVNTRVJUKGdyb3VwLT5uZXdlc3RDYWNoZSgpKTsKKyAgICAgICAg
CisgICAgICAgIHJldHVybiBncm91cC0+bmV3ZXN0Q2FjaGUoKTsKKyAgICB9CisgICAgCisgICAg
cmV0dXJuIDA7Cit9CisKIHZvaWQgQXBwbGljYXRpb25DYWNoZUdyb3VwOjpzZWxlY3RDYWNoZShG
cmFtZSogZnJhbWUsIGNvbnN0IEtVUkwmIG1hbmlmZXN0VVJMKQogewogICAgIEFTU0VSVChmcmFt
ZSAmJiBmcmFtZS0+cGFnZSgpKTsKQEAgLTQ5OCw4ICs1MTIsMTMgQEAgdm9pZCBBcHBsaWNhdGlv
bkNhY2hlR3JvdXA6OmRpZEZpbmlzaExvYQogICAgIEhhc2hTZXQ8U3RyaW5nPjo6Y29uc3RfaXRl
cmF0b3IgZW5kID0gbWFuaWZlc3QuZXhwbGljaXRVUkxzLmVuZCgpOwogICAgIGZvciAoSGFzaFNl
dDxTdHJpbmc+Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1hbmlmZXN0LmV4cGxpY2l0VVJMcy5iZWdp
bigpOyBpdCAhPSBlbmQ7ICsraXQpCiAgICAgICAgIGFkZEVudHJ5KCppdCwgQXBwbGljYXRpb25D
YWNoZVJlc291cmNlOjpFeHBsaWNpdCk7CisKKyAgICB1bnNpZ25lZCBmYWxsYmFja0NvdW50ID0g
bWFuaWZlc3QuZmFsbGJhY2tVUkxzLnNpemUoKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
ICA8IGZhbGxiYWNrQ291bnQ7ICsraSkKKyAgICAgICAgYWRkRW50cnkobWFuaWZlc3QuZmFsbGJh
Y2tVUkxzW2ldLnNlY29uZCwgQXBwbGljYXRpb25DYWNoZVJlc291cmNlOjpGYWxsYmFjayk7CiAg
ICAgCiAgICAgbV9jYWNoZUJlaW5nVXBkYXRlZC0+c2V0T25saW5lV2hpdGVsaXN0KG1hbmlmZXN0
Lm9ubGluZVdoaXRlbGlzdGVkVVJMcyk7CisgICAgbV9jYWNoZUJlaW5nVXBkYXRlZC0+c2V0RmFs
bGJhY2tVUkxzKG1hbmlmZXN0LmZhbGxiYWNrVVJMcyk7CiAgICAgCiAgICAgc3RhcnRMb2FkaW5n
RW50cnkoKTsKIH0KSW5kZXg6IFdlYkNvcmUvbG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2Fj
aGVHcm91cC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvbG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0
aW9uQ2FjaGVHcm91cC5oCShyZXZpc2lvbiAzOTUwOSkKKysrIFdlYkNvcmUvbG9hZGVyL2FwcGNh
Y2hlL0FwcGxpY2F0aW9uQ2FjaGVHcm91cC5oCSh3b3JraW5nIGNvcHkpCkBAIC01NSw2ICs1NSw3
IEBAIHB1YmxpYzoKICAgICBlbnVtIFN0YXR1cyB7IElkbGUsIENoZWNraW5nLCBEb3dubG9hZGlu
ZyB9OwogCiAgICAgc3RhdGljIEFwcGxpY2F0aW9uQ2FjaGUqIGNhY2hlRm9yTWFpblJlcXVlc3Qo
Y29uc3QgUmVzb3VyY2VSZXF1ZXN0JiwgRG9jdW1lbnRMb2FkZXIqKTsKKyAgICBzdGF0aWMgQXBw
bGljYXRpb25DYWNoZSogZmFsbGJhY2tDYWNoZUZvck1haW5SZXF1ZXN0KGNvbnN0IFJlc291cmNl
UmVxdWVzdCYsIERvY3VtZW50TG9hZGVyKik7CiAgICAgCiAgICAgc3RhdGljIHZvaWQgc2VsZWN0
Q2FjaGUoRnJhbWUqLCBjb25zdCBLVVJMJiBtYW5pZmVzdFVSTCk7CiAgICAgc3RhdGljIHZvaWQg
c2VsZWN0Q2FjaGVXaXRob3V0TWFuaWZlc3RVUkwoRnJhbWUqKTsKSW5kZXg6IFdlYkNvcmUvbG9h
ZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL2xvYWRlci9hcHBjYWNoZS9BcHBsaWNhdGlvbkNhY2hlU3RvcmFnZS5jcHAJKHJldmlz
aW9uIDM5NTA5KQorKysgV2ViQ29yZS9sb2FkZXIvYXBwY2FjaGUvQXBwbGljYXRpb25DYWNoZVN0
b3JhZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOCw2ICszOCw4IEBACiAjaW5jbHVkZSAiU1FM
aXRlVHJhbnNhY3Rpb24uaCIKICNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CiAKK3VzaW5n
IG5hbWVzcGFjZSBzdGQ7CisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogc3RhdGljIHVuc2lnbmVk
IHVybEhvc3RIYXNoKGNvbnN0IEtVUkwmIHVybCkKQEAgLTE0OSw4ICsxNTEsMTIgQEAgQXBwbGlj
YXRpb25DYWNoZUdyb3VwKiBBcHBsaWNhdGlvbkNhY2hlUwogICAgICAgICAgICAgY29udGludWU7
CiAgICAgICAgIAogICAgICAgICBpZiAoQXBwbGljYXRpb25DYWNoZSogY2FjaGUgPSBncm91cC0+
bmV3ZXN0Q2FjaGUoKSkgewotICAgICAgICAgICAgaWYgKGNhY2hlLT5yZXNvdXJjZUZvclVSTCh1
cmwpKQotICAgICAgICAgICAgICAgIHJldHVybiBncm91cDsKKyAgICAgICAgICAgIEFwcGxpY2F0
aW9uQ2FjaGVSZXNvdXJjZSogcmVzb3VyY2UgPSBjYWNoZS0+cmVzb3VyY2VGb3JVUkwodXJsKTsK
KyAgICAgICAgICAgIGlmICghcmVzb3VyY2UpCisgICAgICAgICAgICAgICAgY29udGludWU7Cisg
ICAgICAgICAgICBpZiAocmVzb3VyY2UtPnR5cGUoKSAmIEFwcGxpY2F0aW9uQ2FjaGVSZXNvdXJj
ZTo6Rm9yZWlnbikKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIHJldHVy
biBncm91cDsKICAgICAgICAgfQogICAgIH0KICAgICAKQEAgLTE5NCw2ICsyMDAsNjcgQEAgQXBw
bGljYXRpb25DYWNoZUdyb3VwKiBBcHBsaWNhdGlvbkNhY2hlUwogICAgIHJldHVybiAwOwogfQog
CitBcHBsaWNhdGlvbkNhY2hlR3JvdXAqIEFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjpmYWxsYmFj
a0NhY2hlR3JvdXBGb3JVUkwoY29uc3QgS1VSTCYgdXJsKQoreworICAgIC8vIENoZWNrIGlmIGFu
IGFwcHJvcHJpYXRlIGNhY2hlIGFscmVhZHkgZXhpc3RzIGluIG1lbW9yeS4KKyAgICBDYWNoZUdy
b3VwTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBtX2NhY2hlc0luTWVtb3J5LmVuZCgpOworICAg
IGZvciAoQ2FjaGVHcm91cE1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX2NhY2hlc0luTWVtb3J5
LmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICBBcHBsaWNhdGlvbkNhY2hlR3Jv
dXAqIGdyb3VwID0gaXQtPnNlY29uZDsKKyAgICAgICAgCisgICAgICAgIGlmIChBcHBsaWNhdGlv
bkNhY2hlKiBjYWNoZSA9IGdyb3VwLT5uZXdlc3RDYWNoZSgpKSB7CisgICAgICAgICAgICBLVVJM
IGZhbGxiYWNrVVJMOworICAgICAgICAgICAgaWYgKCFjYWNoZS0+dXJsTWF0Y2hlc0ZhbGxiYWNr
TmFtZXNwYWNlKHVybCwgJmZhbGxiYWNrVVJMKSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsK
KyAgICAgICAgICAgIGlmIChjYWNoZS0+cmVzb3VyY2VGb3JVUkwoZmFsbGJhY2tVUkwpLT50eXBl
KCkgJiBBcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2U6OkZvcmVpZ24pCisgICAgICAgICAgICAgICAg
Y29udGludWU7CisgICAgICAgICAgICByZXR1cm4gZ3JvdXA7CisgICAgICAgIH0KKyAgICB9Cisg
ICAgCisgICAgaWYgKCFtX2RhdGFiYXNlLmlzT3BlbigpKQorICAgICAgICByZXR1cm4gMDsKKyAg
ICAgICAgCisgICAgLy8gQ2hlY2sgdGhlIGRhdGFiYXNlLiBMb29rIGZvciBhbGwgY2FjaGUgZ3Jv
dXBzIHdpdGggYSBuZXdlc3QgY2FjaGUuCisgICAgU1FMaXRlU3RhdGVtZW50IHN0YXRlbWVudCht
X2RhdGFiYXNlLCAiU0VMRUNUIGlkLCBtYW5pZmVzdFVSTCwgbmV3ZXN0Q2FjaGUgRlJPTSBDYWNo
ZUdyb3VwcyBXSEVSRSBuZXdlc3RDYWNoZSBJUyBOT1QgTlVMTCIpOworICAgIGlmIChzdGF0ZW1l
bnQucHJlcGFyZSgpICE9IFNRTFJlc3VsdE9rKQorICAgICAgICByZXR1cm4gMDsKKyAgICAKKyAg
ICBpbnQgcmVzdWx0OworICAgIHdoaWxlICgocmVzdWx0ID0gc3RhdGVtZW50LnN0ZXAoKSkgPT0g
U1FMUmVzdWx0Um93KSB7CisgICAgICAgIEtVUkwgbWFuaWZlc3RVUkwgPSBLVVJMKHN0YXRlbWVu
dC5nZXRDb2x1bW5UZXh0KDEpKTsKKworICAgICAgICAvLyBGYWxsYmFjayBuYW1lc3BhY2VzIGFs
d2F5cyBoYXZlIHRoZSBzYW1lIG9yaWdpbiBhcyBtYW5pZmVzdCBVUkwsIHNvIHdlIGNhbiBhdm9p
ZCBsb2FkaW5nIGNhY2hlcyB0aGF0IGNhbm5vdCBtYXRjaC4KKyAgICAgICAgaWYgKCFwcm90b2Nv
bEhvc3RBbmRQb3J0QXJlRXF1YWwodXJsLCBtYW5pZmVzdFVSTCkpCisgICAgICAgICAgICBjb250
aW51ZTsKKworICAgICAgICAvLyBXZSBmb3VuZCBhIGNhY2hlIGdyb3VwIHRoYXQgbWF0Y2hlcy4g
Tm93IGNoZWNrIGlmIHRoZSBuZXdlc3QgY2FjaGUgaGFzIGEgcmVzb3VyY2Ugd2l0aAorICAgICAg
ICAvLyBhIG1hdGNoaW5nIGZhbGxiYWNrIG5hbWVzcGFjZS4KKyAgICAgICAgdW5zaWduZWQgbmV3
ZXN0Q2FjaGVJRCA9ICh1bnNpZ25lZClzdGF0ZW1lbnQuZ2V0Q29sdW1uSW50NjQoMik7CisgICAg
ICAgIFJlZlB0cjxBcHBsaWNhdGlvbkNhY2hlPiBjYWNoZSA9IGxvYWRDYWNoZShuZXdlc3RDYWNo
ZUlEKTsKKworICAgICAgICBLVVJMIGZhbGxiYWNrVVJMOworICAgICAgICBpZiAoIWNhY2hlLT51
cmxNYXRjaGVzRmFsbGJhY2tOYW1lc3BhY2UodXJsLCAmZmFsbGJhY2tVUkwpKQorICAgICAgICAg
ICAgY29udGludWU7CisgICAgICAgIGlmIChjYWNoZS0+cmVzb3VyY2VGb3JVUkwoZmFsbGJhY2tV
UkwpLT50eXBlKCkgJiBBcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2U6OkZvcmVpZ24pCisgICAgICAg
ICAgICBjb250aW51ZTsKKworICAgICAgICBBcHBsaWNhdGlvbkNhY2hlR3JvdXAqIGdyb3VwID0g
bmV3IEFwcGxpY2F0aW9uQ2FjaGVHcm91cChtYW5pZmVzdFVSTCk7CisgICAgICAgIAorICAgICAg
ICBncm91cC0+c2V0U3RvcmFnZUlEKCh1bnNpZ25lZClzdGF0ZW1lbnQuZ2V0Q29sdW1uSW50NjQo
MCkpOworICAgICAgICBncm91cC0+c2V0TmV3ZXN0Q2FjaGUoY2FjaGUucmVsZWFzZSgpKTsKKyAg
ICAgICAgCisgICAgICAgIEFTU0VSVCghbV9jYWNoZXNJbk1lbW9yeS5jb250YWlucyhtYW5pZmVz
dFVSTCkpOworICAgICAgICBtX2NhY2hlc0luTWVtb3J5LnNldChncm91cC0+bWFuaWZlc3RVUkwo
KSwgZ3JvdXApOworICAgICAgICAKKyAgICAgICAgcmV0dXJuIGdyb3VwOworICAgIH0KKworICAg
IGlmIChyZXN1bHQgIT0gU1FMUmVzdWx0RG9uZSkKKyAgICAgICAgTE9HX0VSUk9SKCJDb3VsZCBu
b3QgbG9hZCBjYWNoZSBncm91cCwgZXJyb3IgXCIlc1wiIiwgbV9kYXRhYmFzZS5sYXN0RXJyb3JN
c2coKSk7CisgICAgCisgICAgcmV0dXJuIDA7Cit9CisKIHZvaWQgQXBwbGljYXRpb25DYWNoZVN0
b3JhZ2U6OmNhY2hlR3JvdXBEZXN0cm95ZWQoQXBwbGljYXRpb25DYWNoZUdyb3VwKiBncm91cCkK
IHsKICAgICBBU1NFUlQobV9jYWNoZXNJbk1lbW9yeS5nZXQoZ3JvdXAtPm1hbmlmZXN0VVJMKCkp
ID09IGdyb3VwKTsKQEAgLTM3NCw2ICs0NDEsMjMgQEAgYm9vbCBBcHBsaWNhdGlvbkNhY2hlU3Rv
cmFnZTo6c3RvcmUoQXBwbAogICAgICAgICB9CiAgICAgfQogICAgIAorICAgIC8vIFN0b3JlIGZh
bGxiYWNrIFVSTHMuCisgICAgY29uc3QgVmVjdG9yPHBhaXI8S1VSTCwgS1VSTD4gPiYgZmFsbGJh
Y2tVUkxzID0gY2FjaGUtPmZhbGxiYWNrVVJMcygpOworICAgIHsKKyAgICAgICAgdW5zaWduZWQg
ZmFsbGJhY2tDb3VudCA9IGZhbGxiYWNrVVJMcy5zaXplKCk7CisgICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBmYWxsYmFja0NvdW50OyArK2kpIHsKKyAgICAgICAgICAgIFNRTGl0ZVN0
YXRlbWVudCBzdGF0ZW1lbnQobV9kYXRhYmFzZSwgIklOU0VSVCBJTlRPIEZhbGxiYWNrVVJMcyAo
bmFtZXNwYWNlLCBmYWxsYmFja1VSTCwgY2FjaGUpIFZBTFVFUyAoPywgPywgPykiKTsKKyAgICAg
ICAgICAgIHN0YXRlbWVudC5wcmVwYXJlKCk7CisKKyAgICAgICAgICAgIHN0YXRlbWVudC5iaW5k
VGV4dCgxLCBmYWxsYmFja1VSTHNbaV0uZmlyc3QpOworICAgICAgICAgICAgc3RhdGVtZW50LmJp
bmRUZXh0KDIsIGZhbGxiYWNrVVJMc1tpXS5zZWNvbmQpOworICAgICAgICAgICAgc3RhdGVtZW50
LmJpbmRJbnQ2NCgzLCBjYWNoZVN0b3JhZ2VJRCk7CisKKyAgICAgICAgICAgIGlmICghZXhlY3V0
ZVN0YXRlbWVudChzdGF0ZW1lbnQpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgfQorICAgIH0KKwogICAgIGNhY2hlLT5zZXRTdG9yYWdlSUQoY2FjaGVTdG9yYWdlSUQp
OwogICAgIHJldHVybiB0cnVlOwogfQpAQCAtNTgzLDYgKzY2NywyMSBAQCBQYXNzUmVmUHRyPEFw
cGxpY2F0aW9uQ2FjaGU+IEFwcGxpY2F0aW9uCiAgICAgICAgIExPR19FUlJPUigiQ291bGQgbm90
IGxvYWQgY2FjaGUgb25saW5lIHdoaXRlbGlzdCwgZXJyb3IgXCIlc1wiIiwgbV9kYXRhYmFzZS5s
YXN0RXJyb3JNc2coKSk7CiAKICAgICBjYWNoZS0+c2V0T25saW5lV2hpdGVsaXN0KHdoaXRlbGlz
dCk7CisKKyAgICAvLyBMb2FkIGZhbGxiYWNrIFVSTHMuCisgICAgU1FMaXRlU3RhdGVtZW50IGZh
bGxiYWNrU3RhdGVtZW50KG1fZGF0YWJhc2UsICJTRUxFQ1QgbmFtZXNwYWNlLCBmYWxsYmFja1VS
TCBGUk9NIEZhbGxiYWNrVVJMcyBXSEVSRSBjYWNoZT0/Iik7CisgICAgaWYgKGZhbGxiYWNrU3Rh
dGVtZW50LnByZXBhcmUoKSAhPSBTUUxSZXN1bHRPaykKKyAgICAgICAgcmV0dXJuIDA7CisgICAg
ZmFsbGJhY2tTdGF0ZW1lbnQuYmluZEludDY0KDEsIHN0b3JhZ2VJRCk7CisgICAgCisgICAgVmVj
dG9yPHBhaXI8S1VSTCwgS1VSTD4gPiBmYWxsYmFja1VSTHM7CisgICAgd2hpbGUgKChyZXN1bHQg
PSBmYWxsYmFja1N0YXRlbWVudC5zdGVwKCkpID09IFNRTFJlc3VsdFJvdykgCisgICAgICAgIGZh
bGxiYWNrVVJMcy5hcHBlbmQobWFrZV9wYWlyKGZhbGxiYWNrU3RhdGVtZW50LmdldENvbHVtblRl
eHQoMCksIGZhbGxiYWNrU3RhdGVtZW50LmdldENvbHVtblRleHQoMSkpKTsKKworICAgIGlmIChy
ZXN1bHQgIT0gU1FMUmVzdWx0RG9uZSkKKyAgICAgICAgTE9HX0VSUk9SKCJDb3VsZCBub3QgbG9h
ZCBmYWxsYmFjayBVUkxzLCBlcnJvciBcIiVzXCIiLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygp
KTsKKworICAgIGNhY2hlLT5zZXRGYWxsYmFja1VSTHMoZmFsbGJhY2tVUkxzKTsKICAgICAKICAg
ICBjYWNoZS0+c2V0U3RvcmFnZUlEKHN0b3JhZ2VJRCk7CiAKQEAgLTYzMCwxMCArNzI5LDEwIEBA
IGJvb2wgQXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OnN0b3JlQ29weU8KIHsKICAgICAvLyBDcmVh
dGUgYSBuZXcgY2FjaGUuCiAgICAgUmVmUHRyPEFwcGxpY2F0aW9uQ2FjaGU+IGNhY2hlQ29weSA9
IEFwcGxpY2F0aW9uQ2FjaGU6OmNyZWF0ZSgpOwotICAgIAotICAgIC8vIFNldCB0aGUgb25saW5l
IHdoaXRlbGlzdAorCiAgICAgY2FjaGVDb3B5LT5zZXRPbmxpbmVXaGl0ZWxpc3QoY2FjaGUtPm9u
bGluZVdoaXRlbGlzdCgpKTsKLSAgICAKKyAgICBjYWNoZUNvcHktPnNldEZhbGxiYWNrVVJMcyhj
YWNoZS0+ZmFsbGJhY2tVUkxzKCkpOworCiAgICAgLy8gVHJhdmVyc2UgdGhlIGNhY2hlIGFuZCBh
ZGQgY29waWVzIG9mIGFsbCByZXNvdXJjZXMuCiAgICAgQXBwbGljYXRpb25DYWNoZTo6UmVzb3Vy
Y2VNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IGNhY2hlLT5lbmQoKTsKICAgICBmb3IgKEFwcGxp
Y2F0aW9uQ2FjaGU6OlJlc291cmNlTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IGNhY2hlLT5iZWdp
bigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKSW5kZXg6IFdlYkNvcmUvbG9hZGVyL2FwcGNhY2hlL0Fw
cGxpY2F0aW9uQ2FjaGVTdG9yYWdlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9sb2FkZXIvYXBw
Y2FjaGUvQXBwbGljYXRpb25DYWNoZVN0b3JhZ2UuaAkocmV2aXNpb24gMzk1MDkpCisrKyBXZWJD
b3JlL2xvYWRlci9hcHBjYWNoZS9BcHBsaWNhdGlvbkNhY2hlU3RvcmFnZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC00Niw3ICs0Niw4IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldENhY2hlRGlyZWN0b3J5
KGNvbnN0IFN0cmluZyYpOwogICAgIGNvbnN0IFN0cmluZyYgY2FjaGVEaXJlY3RvcnkoKSBjb25z
dDsKICAgICAKLSAgICBBcHBsaWNhdGlvbkNhY2hlR3JvdXAqIGNhY2hlR3JvdXBGb3JVUkwoY29u
c3QgS1VSTCYpOworICAgIEFwcGxpY2F0aW9uQ2FjaGVHcm91cCogY2FjaGVHcm91cEZvclVSTChj
b25zdCBLVVJMJik7IC8vIENhY2hlIHRvIGxvYWQgYSBtYWluIHJlc291cmNlIGZyb20uCisgICAg
QXBwbGljYXRpb25DYWNoZUdyb3VwKiBmYWxsYmFja0NhY2hlR3JvdXBGb3JVUkwoY29uc3QgS1VS
TCYpOyAvLyBDYWNoZSB0aGF0IGhhcyBhIGZhbGxiYWNrIGVudHJ5IHRvIGxvYWQgYSBtYWluIHJl
c291cmNlIGZyb20gaWYgbm9ybWFsIGxvYWRpbmcgZmFpbHMuCiAKICAgICBBcHBsaWNhdGlvbkNh
Y2hlR3JvdXAqIGZpbmRPckNyZWF0ZUNhY2hlR3JvdXAoY29uc3QgS1VSTCYgbWFuaWZlc3RVUkwp
OwogICAgIHZvaWQgY2FjaGVHcm91cERlc3Ryb3llZChBcHBsaWNhdGlvbkNhY2hlR3JvdXAqKTsK
QEAgLTU5LDYgKzYwLDcgQEAgcHVibGljOgogICAgIHZvaWQgZW1wdHkoKTsKICAgICAKICAgICBz
dGF0aWMgYm9vbCBzdG9yZUNvcHlPZkNhY2hlKGNvbnN0IFN0cmluZyYgY2FjaGVEaXJlY3Rvcnks
IEFwcGxpY2F0aW9uQ2FjaGUqKTsKKwogcHJpdmF0ZToKICAgICBQYXNzUmVmUHRyPEFwcGxpY2F0
aW9uQ2FjaGU+IGxvYWRDYWNoZSh1bnNpZ25lZCBzdG9yYWdlSUQpOwogICAgIEFwcGxpY2F0aW9u
Q2FjaGVHcm91cCogbG9hZENhY2hlR3JvdXAoY29uc3QgS1VSTCYgbWFuaWZlc3RVUkwpOwpAQCAt
NzksOCArODEsOCBAQCBwcml2YXRlOgogICAgIFN0cmluZyBtX2NhY2hlRGlyZWN0b3J5OwogCiAg
ICAgU1FMaXRlRGF0YWJhc2UgbV9kYXRhYmFzZTsKLSAgICAKLSAgICAvLyBJbiBvcmRlciB0byBx
dWlja2x5IGRldGVybWluYXRlIGlmIGEgZ2l2ZW4gcmVzb3VyY2UgZXhpc3RzIGluIGFuIGFwcGxp
Y2F0aW9uIGNhY2hlLAorCisgICAgLy8gSW4gb3JkZXIgdG8gcXVpY2tseSBkZXRlcm1pbmUgaWYg
YSBnaXZlbiByZXNvdXJjZSBleGlzdHMgaW4gYW4gYXBwbGljYXRpb24gY2FjaGUsCiAgICAgLy8g
d2Uga2VlcCBhIGhhc2ggc2V0IG9mIHRoZSBob3N0cyBvZiB0aGUgbWFuaWZlc3QgVVJMcyBvZiBh
bGwgY2FjaGUgZ3JvdXBzLgogICAgIEhhc2hDb3VudGVkU2V0PHVuc2lnbmVkLCBBbHJlYWR5SGFz
aGVkPiBtX2NhY2hlSG9zdFNldDsKICAgICAKSW5kZXg6IFdlYkNvcmUvbG9hZGVyL2FwcGNhY2hl
L01hbmlmZXN0UGFyc2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2xvYWRlci9hcHBjYWNo
ZS9NYW5pZmVzdFBhcnNlci5jcHAJKHJldmlzaW9uIDM5NTA5KQorKysgV2ViQ29yZS9sb2FkZXIv
YXBwY2FjaGUvTWFuaWZlc3RQYXJzZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw2ICszMiw4
IEBACiAjaW5jbHVkZSAiS1VSTC5oIgogI2luY2x1ZGUgIlRleHRFbmNvZGluZy5oIgogCit1c2lu
ZyBuYW1lc3BhY2Ugc3RkOworCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGVudW0gTW9kZSB7IEV4
cGxpY2l0LCBGYWxsYmFjaywgT25saW5lV2hpdGVsaXN0LCBVbmtub3duIH07CkBAIC0xNDgsOCAr
MTUwLDkgQEAgYm9vbCBwYXJzZU1hbmlmZXN0KGNvbnN0IEtVUkwmIG1hbmlmZXN0VQogICAgICAg
ICAgICAgS1VSTCBuYW1lc3BhY2VVUkwobWFuaWZlc3RVUkwsIFN0cmluZyhsaW5lLmNoYXJhY3Rl
cnMoKSwgcCAtIGxpbmUuY2hhcmFjdGVycygpKSk7CiAgICAgICAgICAgICBpZiAoIW5hbWVzcGFj
ZVVSTC5pc1ZhbGlkKCkpCiAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAK
LSAgICAgICAgICAgIC8vIENoZWNrIHRoYXQgdGhlIG5hbWVzcGFjZSBVUkwgaGFzIHRoZSBzYW1l
IHNjaGVtZS9ob3N0L3BvcnQgYXMgdGhlIG1hbmlmZXN0IFVSTC4KKyAgICAgICAgICAgIGlmIChu
YW1lc3BhY2VVUkwuaGFzUmVmKCkpCisgICAgICAgICAgICAgICAgbmFtZXNwYWNlVVJMLnNldFJl
ZihTdHJpbmcoKSk7CisKICAgICAgICAgICAgIGlmICghcHJvdG9jb2xIb3N0QW5kUG9ydEFyZUVx
dWFsKG1hbmlmZXN0VVJMLCBuYW1lc3BhY2VVUkwpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVl
OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKQEAgLTE2MiwxNSArMTY1LDE2
IEBAIGJvb2wgcGFyc2VNYW5pZmVzdChjb25zdCBLVVJMJiBtYW5pZmVzdFUKICAgICAgICAgICAg
IHdoaWxlIChwIDwgbGluZUVuZCAmJiAqcCAhPSAnXHQnICYmICpwICE9ICcgJykgCiAgICAgICAg
ICAgICAgICAgcCsrOwogCi0gICAgICAgICAgICBLVVJMIGZhbGxiYWNrVVJMKFN0cmluZyhmYWxs
YmFja1N0YXJ0LCBmYWxsYmFja1N0YXJ0IC0gcCkpOwotCisgICAgICAgICAgICBLVVJMIGZhbGxi
YWNrVVJMKG1hbmlmZXN0VVJMLCBTdHJpbmcoZmFsbGJhY2tTdGFydCwgcCAtIGZhbGxiYWNrU3Rh
cnQpKTsKICAgICAgICAgICAgIGlmICghZmFsbGJhY2tVUkwuaXNWYWxpZCgpKQogICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAoIWVxdWFsSWdu
b3JpbmdDYXNlKGZhbGxiYWNrVVJMLnByb3RvY29sKCksIG1hbmlmZXN0VVJMLnByb3RvY29sKCkp
KQorICAgICAgICAgICAgaWYgKGZhbGxiYWNrVVJMLmhhc1JlZigpKQorICAgICAgICAgICAgICAg
IGZhbGxiYWNrVVJMLnNldFJlZihTdHJpbmcoKSk7CisKKyAgICAgICAgICAgIGlmICghcHJvdG9j
b2xIb3N0QW5kUG9ydEFyZUVxdWFsKG1hbmlmZXN0VVJMLCBmYWxsYmFja1VSTCkpCiAgICAgICAg
ICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIG1hbmlmZXN0LmZh
bGxiYWNrVVJMcy5hZGQobmFtZXNwYWNlVVJMLCBmYWxsYmFja1VSTCk7ICAgICAgICAgICAgCisK
KyAgICAgICAgICAgIG1hbmlmZXN0LmZhbGxiYWNrVVJMcy5hcHBlbmQobWFrZV9wYWlyKG5hbWVz
cGFjZVVSTCwgZmFsbGJhY2tVUkwpKTsgICAgICAgICAgICAKICAgICAgICAgfSBlbHNlIAogICAg
ICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgfQpJbmRleDogV2ViQ29yZS9sb2Fk
ZXIvYXBwY2FjaGUvTWFuaWZlc3RQYXJzZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2xvYWRl
ci9hcHBjYWNoZS9NYW5pZmVzdFBhcnNlci5oCShyZXZpc2lvbiAzOTUwOSkKKysrIFdlYkNvcmUv
bG9hZGVyL2FwcGNhY2hlL01hbmlmZXN0UGFyc2VyLmgJKHdvcmtpbmcgY29weSkKQEAgLTQwLDcg
KzQwLDcgQEAgY2xhc3MgS1VSTDsKIHN0cnVjdCBNYW5pZmVzdCB7CiAgICAgSGFzaFNldDxTdHJp
bmc+IG9ubGluZVdoaXRlbGlzdGVkVVJMczsKICAgICBIYXNoU2V0PFN0cmluZz4gZXhwbGljaXRV
UkxzOwotICAgIEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+IGZhbGxiYWNrVVJMczsKKyAgICBWZWN0
b3I8c3RkOjpwYWlyPEtVUkwsIEtVUkw+ID4gZmFsbGJhY2tVUkxzOwogfTsKIAogYm9vbCBwYXJz
ZU1hbmlmZXN0KGNvbnN0IEtVUkwmIG1hbmlmZXN0VVJMLCBjb25zdCBjaGFyKiBkYXRhLCBpbnQg
bGVuZ3RoLCBNYW5pZmVzdCYpOwpJbmRleDogTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIExheW91dFRlc3RzL0NoYW5nZUxvZwkocmV2aXNpb24gMzk1MTgpCisrKyBMYXlvdXRU
ZXN0cy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxOCBAQAorMjAwOC0xMi0z
MCAgQWxleGV5IFByb3NrdXJ5YWtvdiAgPGFwQHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTIzMDM2CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS82NDUxNjY2PiBJ
bXBsZW1lbnQgQXBwQ2FjaGUgZmFsbGJhY2sgZW50cmllcyAoMjMwMzYpCisKKyAgICAgICAgKiBo
dHRwL3Rlc3RzL2FwcGNhY2hlL2ZhbGxiYWNrLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAg
ICogaHR0cC90ZXN0cy9hcHBjYWNoZS9mYWxsYmFjay5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBo
dHRwL3Rlc3RzL2FwcGNhY2hlL3Jlc291cmNlcy9mYWxsYmFjay1yZWRpcmVjdC5waHA6IEFkZGVk
LgorICAgICAgICAqIGh0dHAvdGVzdHMvYXBwY2FjaGUvcmVzb3VyY2VzL2ZhbGxiYWNrLm1hbmlm
ZXN0OiBBZGRlZC4KKyAgICAgICAgRmlyZWZveCAzLjJiMiBwYXNzZXMgYWxsIHN1YnRlc3RzLCBl
eGNlcHQgZm9yIFhNTEh0dHBSZXF1ZXN0IGNyb3NzLW9yaWdpbiByZWRpcmVjdC4KKworICAgICAg
ICAqIGh0dHAvdGVzdHMvcmVzb3VyY2VzL25ldHdvcmstc2ltdWxhdG9yLnBocDogUmV0dXJuIDQw
NCBmb3IgbWlzc2luZyBmaWxlcy4KKwogMjAwOC0xMi0yOSAgT2xpdmVyIEh1bnQgIDxvbGl2ZXJA
YXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IENhbWVyb24gWndhcmljaC4KSW5kZXg6
IExheW91dFRlc3RzL2h0dHAvdGVzdHMvYXBwY2FjaGUvZmFsbGJhY2stZXhwZWN0ZWQudHh0Cj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIExheW91dFRlc3RzL2h0dHAvdGVzdHMvYXBwY2FjaGUvZmFsbGJhY2stZXhw
ZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9hcHBjYWNo
ZS9mYWxsYmFjay1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNiBAQAorVGVz
dCBhcHBsaWNhdGlvbiBjYWNoZSBmYWxsYmFjayBlbnRyaWVzLgorCitTaG91bGQgc2F5IFNVQ0NF
U1M6CisKK1NVQ0NFU1MKKwoKUHJvcGVydHkgY2hhbmdlcyBvbjogTGF5b3V0VGVzdHMvaHR0cC90
ZXN0cy9hcHBjYWNoZS9mYWxsYmFjay1leHBlY3RlZC50eHQKX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpOYW1lOiBzdm46
bWltZS10eXBlCiAgICsgdGV4dC9wbGFpbgpOYW1lOiBzdm46ZW9sLXN0eWxlCiAgICsgbmF0aXZl
CgpJbmRleDogTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9hcHBjYWNoZS9mYWxsYmFjay5odG1sCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIExheW91dFRlc3RzL2h0dHAvdGVzdHMvYXBwY2FjaGUvZmFsbGJhY2suaHRt
bAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2h0dHAvdGVzdHMvYXBwY2FjaGUvZmFsbGJh
Y2suaHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxNzEgQEAKKzxodG1sIG1hbmlmZXN0PSJy
ZXNvdXJjZXMvZmFsbGJhY2subWFuaWZlc3QiPgorPGJvZHk+Cis8cD5UZXN0IGFwcGxpY2F0aW9u
IGNhY2hlIGZhbGxiYWNrIGVudHJpZXMuPC9wPgorPHA+U2hvdWxkIHNheSBTVUNDRVNTOjwvcD4K
KzxkaXYgaWQ9cmVzdWx0PjwvZGl2PgorCis8c2NyaXB0PgoraWYgKHdpbmRvdy5sYXlvdXRUZXN0
Q29udHJvbGxlcikgeworICAgIGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQoKTsKKyAg
ICBsYXlvdXRUZXN0Q29udHJvbGxlci53YWl0VW50aWxEb25lKCk7Cit9CisKK3ZhciBoYWRFcnJv
ciA9IGZhbHNlOworCitmdW5jdGlvbiBsb2cobWVzc2FnZSkKK3sKKyAgICBkb2N1bWVudC5nZXRF
bGVtZW50QnlJZCgicmVzdWx0IikuaW5uZXJIVE1MICs9IG1lc3NhZ2UgKyAiPGJyPiI7Cit9CisK
K2Z1bmN0aW9uIHNldE5ldHdvcmtFbmFibGVkKHN0YXRlKQoreworICAgIHRyeSB7CisgICAgICAg
IHZhciByZXEgPSBuZXcgWE1MSHR0cFJlcXVlc3Q7CisgICAgICAgIHJlcS5vcGVuKCJHRVQiLCAi
L3Jlc291cmNlcy9uZXR3b3JrLXNpbXVsYXRvci5waHA/Y29tbWFuZD0iICsgKHN0YXRlID8gImNv
bm5lY3QiIDogImRpc2Nvbm5lY3QiKSwgZmFsc2UpOworICAgICAgICByZXEuc2VuZCgiIik7Cisg
ICAgfSBjYXRjaCAoZXgpIHsKKyAgICAgICAgbG9nKCJDYW5ub3QgYWNjZXNzIG5ldHdvcmsgc2lt
dWxhdG9yIFVSTCIpOworICAgICAgICBoYWRFcnJvciA9IHRydWU7CisgICAgfQorfQorCitmdW5j
dGlvbiBjYW5Mb2FkKHVybCkKK3sKKyAgICB0cnkgeworICAgICAgICB2YXIgcmVxID0gbmV3IFhN
TEh0dHBSZXF1ZXN0KCk7CisgICAgICAgIHJlcS5vcGVuKCJHRVQiLCB1cmwsIGZhbHNlKTsKKyAg
ICAgICAgcmVxLnNlbmQoIiIpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9IGNhdGNoIChl
KSB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisKK2Z1bmN0aW9uIGxvYWQodXJs
KQoreworICAgIHRyeSB7CisgICAgICAgIHZhciByZXEgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTsK
KyAgICAgICAgcmVxLm9wZW4oIkdFVCIsIHVybCwgZmFsc2UpOworICAgICAgICByZXEuc2VuZCgi
Iik7CisgICAgICAgIHJldHVybiByZXEucmVzcG9uc2VUZXh0OworICAgIH0gY2F0Y2ggKGV4KSB7
CisgICAgICAgIGFsZXJ0KCJVbmV4cGVjdGVkIGVycm9yIGxvYWRpbmcgIiArIHVybCArICI6ICIg
KyBleCk7CisgICAgICAgIGhhZEVycm9yID0gdHJ1ZTsKKyAgICB9Cit9CisKK3ZhciB0ZXN0VVJM
ID0gIi9yZXNvdXJjZXMvbmV0d29yay1zaW11bGF0b3IucGhwP3BhdGg9L2FwcGNhY2hlL3Jlc291
cmNlcy9ub3QtaW4tY2FjaGUudHh0IjsKK3ZhciBub25leGlzdGVudFVSTCA9ICJyZXNvdXJjZXMv
ZG9lcy1ub3QtZXhpc3QiOwordmFyIHJlZGlyZWN0VVJMID0gInJlc291cmNlcy9mYWxsYmFjay1y
ZWRpcmVjdC5waHAiOworCitmdW5jdGlvbiB0ZXN0KCkKK3sKKyAgICBhcHBsaWNhdGlvbkNhY2hl
Lm9ubm91cGRhdGUgPSBmdW5jdGlvbigpIHsgbG9nKCJGQUlMOiByZWNlaXZlZCB1bmV4cGVjdGVk
IG5vdXBkYXRlIGV2ZW50IikgfQorICAgIGFwcGxpY2F0aW9uQ2FjaGUub25jYWNoZWQgPSBmdW5j
dGlvbigpIHsgbG9nKCJGQUlMOiByZWNlaXZlZCB1bmV4cGVjdGVkIGNhY2hlZCBldmVudCIpIH0K
KyAgICAKKyAgICBzZXROZXR3b3JrRW5hYmxlZCh0cnVlKTsKKworICAgIGlmICghY2FuTG9hZCh0
ZXN0VVJMKSB8fCAhL25vdCBpbiB0aGUgY2FjaGUvLnRlc3QobG9hZCh0ZXN0VVJMKSkpIHsKKyAg
ICAgICAgbG9nKCJGQUlMOiBDYW5ub3QgbG9hZCBhbiBVUkwgZnJvbSBmYWxsYmFjayBuYW1lc3Bh
Y2Ugd2hlbiBuZXR3b3JrIGlzIGVuYWJsZWQiKTsKKyAgICAgICAgaGFkRXJyb3IgPSB0cnVlOwor
ICAgIH0KKworICAgIGlmICghY2FuTG9hZChub25leGlzdGVudFVSTCkgfHwgbG9hZChub25leGlz
dGVudFVSTCkgIT0gIkhlbGxvLCBXb3JsZCEiKSB7CisgICAgICAgIGxvZygiRkFJTDogRmFsbGJh
Y2sgcmVzb3VyY2Ugd2Fzbid0IHVzZWQgZm9yIGEgNDA0IHJlc3BvbnNlIik7CisgICAgICAgIGhh
ZEVycm9yID0gdHJ1ZTsKKyAgICB9CisKKyAgICBpZiAoIWNhbkxvYWQocmVkaXJlY3RVUkwpIHx8
IGxvYWQocmVkaXJlY3RVUkwpICE9ICJIZWxsbywgV29ybGQhIikgeworICAgICAgICBsb2coIkZB
SUw6IEZhbGxiYWNrIHJlc291cmNlIHdhc24ndCB1c2VkIGZvciBhIHJlZGlyZWN0IHRvIGEgcmVz
b3VyY2Ugd2l0aCBhbm90aGVyIG9yaWdpbiIpOworICAgICAgICBoYWRFcnJvciA9IHRydWU7Cisg
ICAgfQorCisgICAgdGVzdDIoKTsKK30KKworZnVuY3Rpb24gdGVzdDIoKQoreworICAgIHZhciBy
ZXEgPSBuZXcgWE1MSHR0cFJlcXVlc3Q7CisgICAgcmVxLm9wZW4oIkdFVCIsIG5vbmV4aXN0ZW50
VVJMKTsKKyAgICByZXEub25lcnJvciA9IGZ1bmN0aW9uKCkgeworICAgICAgICBsb2coIkZBSUw6
IEZhbGxiYWNrIHJlc291cmNlIHdhc24ndCB1c2VkIGZvciBhIDQwNCByZXNwb25zZSAoYXN5bmMp
Iik7CisgICAgICAgIGhhZEVycm9yID0gdHJ1ZTsKKyAgICAgICAgdGVzdDMoKTsKKyAgICB9Cisg
ICAgcmVxLm9ubG9hZCA9IGZ1bmN0aW9uKCkgeworICAgICAgICBpZiAocmVxLnJlc3BvbnNlVGV4
dCAhPSAiSGVsbG8sIFdvcmxkISIpIHsKKyAgICAgICAgICAgIGxvZygiRkFJTDogVW5leHBlY3Rl
ZCByZXN1bHQgZm9yIGEgNDA0IHJlc3BvbnNlIChhc3luYykiKTsKKyAgICAgICAgICAgIGhhZEVy
cm9yID0gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICB0ZXN0MygpOworICAgIH0KKworICAgIHJl
cS5zZW5kKCIiKTsKK30KKworZnVuY3Rpb24gdGVzdDMoKQoreworICAgIHZhciByZXEgPSBuZXcg
WE1MSHR0cFJlcXVlc3Q7CisgICAgcmVxLm9wZW4oIkdFVCIsIHJlZGlyZWN0VVJMKTsKKyAgICBy
ZXEub25lcnJvciA9IGZ1bmN0aW9uKCkgeworICAgICAgICBsb2coIkZBSUw6IEZhbGxiYWNrIHJl
c291cmNlIHdhc24ndCB1c2VkIGZvciBhIHJlZGlyZWN0IHRvIGEgcmVzb3VyY2Ugd2l0aCBhbm90
aGVyIG9yaWdpbiAoYXN5bmMpIik7CisgICAgICAgIGhhZEVycm9yID0gdHJ1ZTsKKyAgICAgICAg
dGVzdDQoKTsKKyAgICB9CisgICAgcmVxLm9ubG9hZCA9IGZ1bmN0aW9uKCkgeworICAgICAgICBp
ZiAocmVxLnJlc3BvbnNlVGV4dCAhPSAiSGVsbG8sIFdvcmxkISIpIHsKKyAgICAgICAgICAgIGxv
ZygiRkFJTDogVW5leHBlY3RlZCByZXN1bHQgZm9yIGEgcmVkaXJlY3QgcmVzcG9uc2UgKGFzeW5j
KSIpOworICAgICAgICAgICAgaGFkRXJyb3IgPSB0cnVlOworICAgICAgICB9CisgICAgICAgIHRl
c3Q0KCk7CisgICAgfQorCisgICAgcmVxLnNlbmQoIiIpOworfQorCitmdW5jdGlvbiB0ZXN0NCgp
Cit7CisgICAgLy8gVHJ5IGxvYWRpbmcgYSBmYWxsYmFjayByZXNvdXJjZSBhcyBtYWluIG9uZS4K
KworICAgIGFwcGxpY2F0aW9uQ2FjaGUub25ub3VwZGF0ZSA9IHRlc3Q1OworCisgICAgdmFyIGlm
ciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImlmcmFtZSIpOworICAgIGlmci5zZXRBdHRyaWJ1
dGUoInNyYyIsIG5vbmV4aXN0ZW50VVJMKTsKKyAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxk
KGlmcik7Cit9CisKK2Z1bmN0aW9uIHRlc3Q1KCkKK3sKKyAgICBpZiAoIS9IZWxsbywgV29ybGQv
LnRlc3Qod2luZG93LmZyYW1lc1swXS5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuaW5uZXJIVE1M
KSkgeworICAgICAgICBsb2coIkZBSUw6IEZhbGxiYWNrIFVSTCB3YXMgbm90IGhvbm9yZWQgZm9y
IG1haW4gcmVzb3VyY2UiKTsKKyAgICAgICAgaGFkRXJyb3IgPSB0cnVlOworICAgIH0KKyAgICB0
ZXN0NigpOworfQorCitmdW5jdGlvbiB0ZXN0NigpCit7CisgICAgc2V0TmV0d29ya0VuYWJsZWQo
ZmFsc2UpOworCisgICAgaWYgKCFjYW5Mb2FkKHRlc3RVUkwpKSB7CisgICAgICAgIGxvZygiRkFJ
TDogQ2Fubm90IGxvYWQgYW4gVVJMIGZyb20gZmFsbGJhY2sgbmFtZXNwYWNlIHdoZW4gbmV0d29y
ayBpcyBkaXNhYmxlZCIpOworICAgICAgICBoYWRFcnJvciA9IHRydWU7CisgICAgfSBlbHNlIGlm
IChsb2FkKHRlc3RVUkwpICE9IGxvYWQoInJlc291cmNlcy9zaW1wbGUudHh0IikpIHsKKyAgICAg
ICAgbG9nKCJGQUlMOiBMb2FkaW5nIGFuIFVSTCBmcm9tIGZhbGxiYWNrIG5hbWVzcGFjZSB3aGVu
IG5ldHdvcmsgaXMgZGlzYWJsZWQgcmV0dXJuZWQgdW5leHBlY3RlZCByZXNwb25zZSIpOworICAg
ICAgICBoYWRFcnJvciA9IHRydWU7CisgICAgfQorCisgICAgbG9nKGhhZEVycm9yID8gIkZBSUxV
UkUiIDogIlNVQ0NFU1MiKTsKKyAgICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQor
ICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5ub3RpZnlEb25lKCk7Cit9CisKK2FwcGxpY2F0
aW9uQ2FjaGUub25ub3VwZGF0ZSA9IGZ1bmN0aW9uKCkgeyB0ZXN0KCkgfQorYXBwbGljYXRpb25D
YWNoZS5vbmNhY2hlZCA9IGZ1bmN0aW9uKCkgeyB0ZXN0KCkgfQorCithcHBsaWNhdGlvbkNhY2hl
Lm9udXBkYXRlcmVhZHkgPSBmdW5jdGlvbigpIHsgbG9nKCJGQUlMOiByZWNlaXZlZCB1bmV4cGVj
dGVkIHVwZGF0ZXJlYWR5IGV2ZW50IikgfQorYXBwbGljYXRpb25DYWNoZS5vbmVycm9yID0gZnVu
Y3Rpb24oKSB7IGxvZygiRkFJTDogcmVjZWl2ZWQgdW5leHBlY3RlZCBlcnJvciBldmVudCIpIH0K
KworPC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBMYXlv
dXRUZXN0cy9odHRwL3Rlc3RzL2FwcGNhY2hlL2ZhbGxiYWNrLmh0bWwKX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpOYW1l
OiBzdm46bWltZS10eXBlCiAgICsgdGV4dC9odG1sCgpJbmRleDogTGF5b3V0VGVzdHMvaHR0cC90
ZXN0cy9hcHBjYWNoZS9yZXNvdXJjZXMvZmFsbGJhY2stcmVkaXJlY3QucGhwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIExheW91dFRlc3RzL2h0dHAvdGVzdHMvYXBwY2FjaGUvcmVzb3VyY2VzL2ZhbGxiYWNrLXJl
ZGlyZWN0LnBocAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2h0dHAvdGVzdHMvYXBwY2Fj
aGUvcmVzb3VyY2VzL2ZhbGxiYWNrLXJlZGlyZWN0LnBocAkocmV2aXNpb24gMCkKQEAgLTAsMCAr
MSw4IEBACis8P3BocAorICAgIGhlYWRlcignSFRUUC8xLjEgMzA3IFRlbXBvcmFyeSBSZWRpcmVj
dCcpOworICAgIGhlYWRlcignTG9jYXRpb246IGh0dHA6Ly9sb2NhbGhvc3Q6ODAwMC9hcHBjYWNo
ZS9yZXNvdXJjZXMvc2ltcGxlLnR4dCcpOworCisgICAgaGVhZGVyKCJFeHBpcmVzOiBUaHUsIDAx
IERlYyAyMDAzIDE2OjAwOjAwIEdNVCIpOworICAgIGhlYWRlcigiQ2FjaGUtQ29udHJvbDogbm8t
Y2FjaGUsIG11c3QtcmV2YWxpZGF0ZSIpOworICAgIGhlYWRlcigiUHJhZ21hOiBuby1jYWNoZSIp
OworPz4KSW5kZXg6IExheW91dFRlc3RzL2h0dHAvdGVzdHMvYXBwY2FjaGUvcmVzb3VyY2VzL2Zh
bGxiYWNrLm1hbmlmZXN0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2h0dHAvdGVzdHMvYXBw
Y2FjaGUvcmVzb3VyY2VzL2ZhbGxiYWNrLm1hbmlmZXN0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0
VGVzdHMvaHR0cC90ZXN0cy9hcHBjYWNoZS9yZXNvdXJjZXMvZmFsbGJhY2subWFuaWZlc3QJKHJl
dmlzaW9uIDApCkBAIC0wLDAgKzEsNSBAQAorQ0FDSEUgTUFOSUZFU1QKK0ZBTExCQUNLOgorL3Jl
c291cmNlcy9uZXR3b3JrLXNpbXVsYXRvci5waHA/IHNpbXBsZS50eHQKK2ZhbGxiYWNrLXJlZGly
ZWN0IHNpbXBsZS50eHQKK2RvZXMtbm90LWV4aXN0IHNpbXBsZS50eHQKXCBObyBuZXdsaW5lIGF0
IGVuZCBvZiBmaWxlCkluZGV4OiBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3Jlc291cmNlcy9uZXR3
b3JrLXNpbXVsYXRvci5waHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9y
ZXNvdXJjZXMvbmV0d29yay1zaW11bGF0b3IucGhwCShyZXZpc2lvbiAzOTUwOSkKKysrIExheW91
dFRlc3RzL2h0dHAvdGVzdHMvcmVzb3VyY2VzL25ldHdvcmstc2ltdWxhdG9yLnBocAkod29ya2lu
ZyBjb3B5KQpAQCAtNTgsMTIgKzU4LDE3IEBAIGlmICgkc3RhdGUgPT0gIk9mZmxpbmUiKSB7CiAg
ICAgaWYgKCRyZXF1ZXN0ZWRQYXRoWzBdID09ICcvJykKICAgICAgICAgJHJlcXVlc3RlZFBhdGgg
PSAnLi4nIC4gJHJlcXVlc3RlZFBhdGg7CiAKLSAgICBoZWFkZXIoIkxhc3QtTW9kaWZpZWQ6ICIg
LiBnbWRhdGUoIkQsIGQgTSBZIEg6aTpzIFQiLCBmaWxlbXRpbWUoJHJlcXVlc3RlZFBhdGgpKSk7
Ci0gICAgaGVhZGVyKCJDb250ZW50LVR5cGU6ICIgLiBjb250ZW50VHlwZSgkcmVxdWVzdGVkUGF0
aCkpOwogICAgIGhlYWRlcigiRXhwaXJlczogVGh1LCAwMSBEZWMgMjAwMyAxNjowMDowMCBHTVQi
KTsKICAgICBoZWFkZXIoIkNhY2hlLUNvbnRyb2w6IG5vLWNhY2hlLCBtdXN0LXJldmFsaWRhdGUi
KTsKICAgICBoZWFkZXIoIlByYWdtYTogbm8tY2FjaGUiKTsKIAotICAgIHByaW50IGZpbGVfZ2V0
X2NvbnRlbnRzKCRyZXF1ZXN0ZWRQYXRoKTsKKyAgICBpZiAoZmlsZV9leGlzdHMoJHJlcXVlc3Rl
ZFBhdGgpKSB7CisgICAgICAgIGhlYWRlcigiTGFzdC1Nb2RpZmllZDogIiAuIGdtZGF0ZSgiRCwg
ZCBNIFkgSDppOnMgVCIsIGZpbGVtdGltZSgkcmVxdWVzdGVkUGF0aCkpKTsKKyAgICAgICAgaGVh
ZGVyKCJDb250ZW50LVR5cGU6ICIgLiBjb250ZW50VHlwZSgkcmVxdWVzdGVkUGF0aCkpOworICAg
IAorICAgICAgICBwcmludCBmaWxlX2dldF9jb250ZW50cygkcmVxdWVzdGVkUGF0aCk7CisgICAg
fSBlbHNlIHsKKyAgICAgICAgaGVhZGVyKCdIVFRQLzEuMSA0MDQgTm90IEZvdW5kJyk7CisgICAg
fQogfQogPz4K
</data>
<flag name="review"
          id="12462"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>