<?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>69877</bug_id>
          
          <creation_ts>2011-10-11 15:54:35 -0700</creation_ts>
          <short_desc>Make CachedResourceClientWalker templated and have it do checked casts.</short_desc>
          <delta_ts>2011-10-12 10:50:02 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebCore Misc.</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Nate Chapin">japhet</reporter>
          <assigned_to name="Nate Chapin">japhet</assigned_to>
          <cc>abarth</cc>
    
    <cc>ap</cc>
    
    <cc>koivisto</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>481987</commentid>
    <comment_count>0</comment_count>
    <who name="Nate Chapin">japhet</who>
    <bug_when>2011-10-11 15:54:35 -0700</bug_when>
    <thetext>Followup to https://bugs.webkit.org/show_bug.cgi?id=69790, which introduced a bunch of unchecked casts that rely on CachedResource subtypes and CachedResourceClient subtypes matching each other correctly.  As written, it will fail dangerously in the event of a programmer error.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>481992</commentid>
    <comment_count>1</comment_count>
      <attachid>110597</attachid>
    <who name="Nate Chapin">japhet</who>
    <bug_when>2011-10-11 15:56:51 -0700</bug_when>
    <thetext>Created attachment 110597
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>482059</commentid>
    <comment_count>2</comment_count>
      <attachid>110597</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-10-11 17:11:37 -0700</bug_when>
    <thetext>Comment on attachment 110597
patch

Clearing flags on attachment: 110597

Committed r97199: &lt;http://trac.webkit.org/changeset/97199&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>482060</commentid>
    <comment_count>3</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-10-11 17:11:42 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>482285</commentid>
    <comment_count>4</comment_count>
      <attachid>110597</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2011-10-12 01:03:51 -0700</bug_when>
    <thetext>Comment on attachment 110597
patch

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

&gt; Source/WebCore/loader/cache/CachedResourceClientWalker.h:54
&gt; +            if (m_clientSet.contains(next) &amp;&amp; (T::expectedType() == CachedResourceClient::expectedType() || next-&gt;type() == T::expectedType()))
&gt; +                return static_cast&lt;T*&gt;(next);

What is the purpose of T::expectedType() == CachedResourceClient::expectedType()?

Could this assert the correct type instead?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>482437</commentid>
    <comment_count>5</comment_count>
    <who name="Nate Chapin">japhet</who>
    <bug_when>2011-10-12 08:52:44 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; (From update of attachment 110597 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=110597&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/loader/cache/CachedResourceClientWalker.h:54
&gt; &gt; +            if (m_clientSet.contains(next) &amp;&amp; (T::expectedType() == CachedResourceClient::expectedType() || next-&gt;type() == T::expectedType()))
&gt; &gt; +                return static_cast&lt;T*&gt;(next);
&gt; 
&gt; What is the purpose of T::expectedType() == CachedResourceClient::expectedType()?
&gt; 
&gt; Could this assert the correct type instead?

The purpose is to handle the notifyFinished() callback correctly.  notifyFinished() is called for all CachedResourceClient types, and is templated with the base class rather than a subclass.

I suppose we could assert instead of just skipping clients of the wrong type.  I don&apos;t have a strong opinion.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>482517</commentid>
    <comment_count>6</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2011-10-12 10:50:02 -0700</bug_when>
    <thetext>I suspect that all cases where there are unexpected types on the list are bugs so assert would be the right choice.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>110597</attachid>
            <date>2011-10-11 15:56:51 -0700</date>
            <delta_ts>2011-10-12 01:03:51 -0700</delta_ts>
            <desc>patch</desc>
            <filename>crcw.txt</filename>
            <type>text/plain</type>
            <size>20863</size>
            <attacher name="Nate Chapin">japhet</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQkocmV2aXNpb24gOTcxNzQpCisrKyBT
b3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCSh3b3JraW5nIGNvcHkpCkBAIC0yMTA5
LDcgKzIxMDksNiBAQAogCVNvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRJbWFnZS5j
cHAgXAogCVNvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRJbWFnZS5oIFwKIAlTb3Vy
Y2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2VDbGllbnQuaCBcCi0JU291cmNl
L1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZFJlc291cmNlQ2xpZW50V2Fsa2VyLmNwcCBcCiAJ
U291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZFJlc291cmNlQ2xpZW50V2Fsa2VyLmgg
XAogCVNvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRSYXdSZXNvdXJjZS5jcHAgXAog
CVNvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRSYXdSZXNvdXJjZS5oIFwKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUucHJvCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUucHJvCShyZXZpc2lvbiA5NzE3NCkKKysrIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
cHJvCSh3b3JraW5nIGNvcHkpCkBAIC04NzYsNyArODc2LDYgQEAKICAgICBsb2FkZXIvY2FjaGUv
Q2FjaGVkRm9udC5jcHAgXAogICAgIGxvYWRlci9jYWNoZS9DYWNoZWRJbWFnZS5jcHAgXAogICAg
IGxvYWRlci9jYWNoZS9DYWNoZWRSYXdSZXNvdXJjZS5jcHAgXAotICAgIGxvYWRlci9jYWNoZS9D
YWNoZWRSZXNvdXJjZUNsaWVudFdhbGtlci5jcHAgXAogICAgIGxvYWRlci9jYWNoZS9DYWNoZWRS
ZXNvdXJjZUhhbmRsZS5jcHAgXAogICAgIGxvYWRlci9jYWNoZS9DYWNoZWRSZXNvdXJjZVJlcXVl
c3QuY3BwIFwKICAgICBsb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2UuY3BwIFwKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9DaGFu
Z2VMb2cJKHJldmlzaW9uIDk3MTg4KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDMgKzEsMzQgQEAKKzIwMTEtMTAtMTEgIE5hdGUgQ2hhcGluICA8amFw
aGV0QGNocm9taXVtLm9yZz4KKworICAgICAgICBNYWtlIENhY2hlZFJlc291cmNlQ2xpZW50V2Fs
a2VyIHRlbXBsYXRlcywgYW5kCisgICAgICAgIGhhdmUgaXQgY2hlY2sgYW5kIGZpbHRlciBvdXQg
YmFkIGNhc3RzIHdoZW4gaXRlcmF0aW5nCisgICAgICAgIChjdXJyZW50bHkgd2UgcmVseSBvbiBD
YWNoZWRSZXNvdXJjZUNsaWVudHMgYmVpbmcgY2FyZWZ1bAorICAgICAgICB0byBpbmhlcml0IGZy
b20gdGhlIHJpZ2h0IHN1YmNsYXNzIGZvciB0aGUgdHlwZSBvZiByZXNvdXJjZQorICAgICAgICB0
aGV5IHdhbnQgdG8gbG9hZCkuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD02OTg3NworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgIE5vIG5ldyB0ZXN0cywgbm8gZnVuY3Rpb25hbGl0eSBjaGFuZ2UuCisKKyAgICAg
ICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5saXN0LmFtOgorICAg
ICAgICAqIFdlYkNvcmUuZ3lwaToKKyAgICAgICAgKiBXZWJDb3JlLnBybzoKKyAgICAgICAgKiBX
ZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvajoKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogbG9hZGVyL2NhY2hlL0NhY2hlZENTU1N0eWxl
U2hlZXQuY3BwOgorICAgICAgICAqIGxvYWRlci9jYWNoZS9DYWNoZWRGb250LmNwcDoKKyAgICAg
ICAgKiBsb2FkZXIvY2FjaGUvQ2FjaGVkRm9udC5oOgorICAgICAgICAqIGxvYWRlci9jYWNoZS9D
YWNoZWRJbWFnZS5jcHA6CisgICAgICAgICogbG9hZGVyL2NhY2hlL0NhY2hlZEltYWdlLmg6Cisg
ICAgICAgICogbG9hZGVyL2NhY2hlL0NhY2hlZFJlc291cmNlLmNwcDoKKyAgICAgICAgKiBsb2Fk
ZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2VDbGllbnQuaDoKKyAgICAgICAgKiBsb2FkZXIvY2FjaGUv
Q2FjaGVkUmVzb3VyY2VDbGllbnRXYWxrZXIuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIGxvYWRl
ci9jYWNoZS9DYWNoZWRSZXNvdXJjZUNsaWVudFdhbGtlci5oOgorICAgICAgICAqIGxvYWRlci9j
YWNoZS9DYWNoZWRTdHlsZVNoZWV0Q2xpZW50Lmg6CisgICAgICAgICogbG9hZGVyL2NhY2hlL0Nh
Y2hlZFhTTFN0eWxlU2hlZXQuY3BwOgorCiAyMDExLTEwLTExICBXLiBKYW1lcyBNYWNMZWFuICA8
d2ptYWNsZWFuQGNocm9taXVtLm9yZz4KIAogICAgICAgICBMb3NzIG9mIHByZWNpc2lvbiB3aGVu
IGNvbnZlcnRpbmcgZnJvbSBkb3VibGUgdG8gaW50IGFuZCBkb3VibGUgdG8gZmxvYXQgaW4gRnJh
bWVWaWV3Ojp6b29tQW5pbWF0b3JUcmFuc2Zvcm1DaGFuZ2VkKCkKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCShyZXZpc2lvbiA5NzE3NCkKKysr
IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCSh3b3JraW5nIGNv
cHkpCkBAIC0yNjc5MywxMCArMjY3OTMsNiBAQAogCQkJCQk+CiAJCQkJPC9GaWxlPgogCQkJCTxG
aWxlCi0JCQkJCVJlbGF0aXZlUGF0aD0iLi5cbG9hZGVyXGNhY2hlXENhY2hlZFJlc291cmNlQ2xp
ZW50V2Fsa2VyLmNwcCIKLQkJCQkJPgotCQkJCTwvRmlsZT4KLQkJCQk8RmlsZQogCQkJCQlSZWxh
dGl2ZVBhdGg9Ii4uXGxvYWRlclxjYWNoZVxDYWNoZWRSZXNvdXJjZUNsaWVudFdhbGtlci5oIgog
CQkJCQk+CiAJCQkJPC9GaWxlPgpJbmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQkocmV2aXNpb24gOTcxNzQp
CisrKyBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkJKHdvcmtpbmcgY29weSkKQEAgLTI4NDEs
NyArMjg0MSw2IEBACiAgICAgICAgICAgICAnbG9hZGVyL2NhY2hlL0NhY2hlZEltYWdlLmNwcCcs
CiAgICAgICAgICAgICAnbG9hZGVyL2NhY2hlL0NhY2hlZFJhd1Jlc291cmNlLmNwcCcsCiAgICAg
ICAgICAgICAnbG9hZGVyL2NhY2hlL0NhY2hlZFJlc291cmNlLmNwcCcsCi0gICAgICAgICAgICAn
bG9hZGVyL2NhY2hlL0NhY2hlZFJlc291cmNlQ2xpZW50V2Fsa2VyLmNwcCcsCiAgICAgICAgICAg
ICAnbG9hZGVyL2NhY2hlL0NhY2hlZFJlc291cmNlQ2xpZW50V2Fsa2VyLmgnLAogICAgICAgICAg
ICAgJ2xvYWRlci9jYWNoZS9DYWNoZWRSZXNvdXJjZUhhbmRsZS5jcHAnLAogICAgICAgICAgICAg
J2xvYWRlci9jYWNoZS9DYWNoZWRSZXNvdXJjZUxvYWRlci5jcHAnLApJbmRleDogU291cmNlL1dl
YkNvcmUvQ01ha2VMaXN0cy50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvQ01ha2VM
aXN0cy50eHQJKHJldmlzaW9uIDk3MTc0KQorKysgU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50
eHQJKHdvcmtpbmcgY29weSkKQEAgLTk1MCw3ICs5NTAsNiBAQAogICAgIGxvYWRlci9jYWNoZS9D
YWNoZWRJbWFnZS5jcHAKICAgICBsb2FkZXIvY2FjaGUvQ2FjaGVkUmF3UmVzb3VyY2UuY3BwCiAg
ICAgbG9hZGVyL2NhY2hlL0NhY2hlZFJlc291cmNlLmNwcAotICAgIGxvYWRlci9jYWNoZS9DYWNo
ZWRSZXNvdXJjZUNsaWVudFdhbGtlci5jcHAKICAgICBsb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3Vy
Y2VIYW5kbGUuY3BwCiAgICAgbG9hZGVyL2NhY2hlL0NhY2hlZFJlc291cmNlTG9hZGVyLmNwcAog
ICAgIGxvYWRlci9jYWNoZS9DYWNoZWRSZXNvdXJjZVJlcXVlc3QuY3BwCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lv
biA5NzE3NCkKKysrIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkod29ya2luZyBjb3B5KQpAQCAtNTIwMiw3ICs1MjAyLDYgQEAKIAkJQkNCMTZDMUMwOTc5
QzNCRDAwNDY3NzQxIC8qIENhY2hlZEltYWdlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBCQ0IxNkMwMzA5NzlDM0JEMDA0Njc3NDEgLyogQ2FjaGVkSW1h
Z2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlC
Q0IxNkMxRjA5NzlDM0JEMDA0Njc3NDEgLyogQ2FjaGVkUmVzb3VyY2UuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkNCMTZDMDYwOTc5QzNCRDAwNDY3
NzQxIC8qIENhY2hlZFJlc291cmNlLmNwcCAqLzsgfTsKIAkJQkNCMTZDMjAwOTc5QzNCRDAwNDY3
NzQxIC8qIENhY2hlZFJlc291cmNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBCQ0IxNkMwNzA5NzlDM0JEMDA0Njc3NDEgLyogQ2FjaGVkUmVzb3VyY2Uu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQlCQ0Ix
NkMyMTA5NzlDM0JEMDA0Njc3NDEgLyogQ2FjaGVkUmVzb3VyY2VDbGllbnRXYWxrZXIuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkNCMTZDMDgwOTc5
QzNCRDAwNDY3NzQxIC8qIENhY2hlZFJlc291cmNlQ2xpZW50V2Fsa2VyLmNwcCAqLzsgfTsKIAkJ
QkNCMTZDMjIwOTc5QzNCRDAwNDY3NzQxIC8qIENhY2hlZFJlc291cmNlQ2xpZW50V2Fsa2VyLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQ0IxNkMwOTA5
NzlDM0JEMDA0Njc3NDEgLyogQ2FjaGVkUmVzb3VyY2VDbGllbnRXYWxrZXIuaCAqLzsgfTsKIAkJ
QkNCMTZDMjMwOTc5QzNCRDAwNDY3NzQxIC8qIENhY2hlZFNjcmlwdC5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQ0IxNkMwQTA5NzlDM0JEMDA0Njc3
NDEgLyogQ2FjaGVkU2NyaXB0LmNwcCAqLzsgfTsKIAkJQkNCMTZDMjQwOTc5QzNCRDAwNDY3NzQx
IC8qIENhY2hlZFNjcmlwdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gQkNCMTZDMEIwOTc5QzNCRDAwNDY3NzQxIC8qIENhY2hlZFNjcmlwdC5oICovOyB9
OwpAQCAtMTI0NzMsNyArMTI0NzIsNiBAQAogCQlCQ0IxNkMwMzA5NzlDM0JEMDA0Njc3NDEgLyog
Q2FjaGVkSW1hZ2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENhY2hlZElt
YWdlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUJDQjE2QzA2MDk3OUMzQkQwMDQ2
Nzc0MSAvKiBDYWNoZWRSZXNvdXJjZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gQ2FjaGVkUmVzb3VyY2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQlCQ0IxNkMwNzA5NzlDM0JEMDA0Njc3NDEgLyogQ2FjaGVkUmVzb3VyY2UuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENhY2hlZFJlc291cmNlLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07Ci0JCUJDQjE2QzA4MDk3OUMzQkQwMDQ2Nzc0MSAvKiBDYWNoZWRSZXNvdXJj
ZUNsaWVudFdhbGtlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
Q2FjaGVkUmVzb3VyY2VDbGllbnRXYWxrZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQlCQ0IxNkMwOTA5NzlDM0JEMDA0Njc3NDEgLyogQ2FjaGVkUmVzb3VyY2VDbGllbnRXYWxr
ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENhY2hlZFJlc291cmNlQ2xp
ZW50V2Fsa2VyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUJDQjE2QzBBMDk3OUMz
QkQwMDQ2Nzc0MSAvKiBDYWNoZWRTY3JpcHQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IENhY2hlZFNjcmlwdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCUJDQjE2QzBCMDk3OUMzQkQwMDQ2Nzc0MSAvKiBDYWNoZWRTY3JpcHQuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENhY2hlZFNjcmlwdC5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwpAQCAtMTg0MzksNyArMTg0MzcsNiBAQAogCQkJCUJDQjE2QzA2MDk3OUMzQkQw
MDQ2Nzc0MSAvKiBDYWNoZWRSZXNvdXJjZS5jcHAgKi8sCiAJCQkJQkNCMTZDMDcwOTc5QzNCRDAw
NDY3NzQxIC8qIENhY2hlZFJlc291cmNlLmggKi8sCiAJCQkJQkNGQjJFNUQwOTc5RTQ2NDAwQkE3
MDNEIC8qIENhY2hlZFJlc291cmNlQ2xpZW50LmggKi8sCi0JCQkJQkNCMTZDMDgwOTc5QzNCRDAw
NDY3NzQxIC8qIENhY2hlZFJlc291cmNlQ2xpZW50V2Fsa2VyLmNwcCAqLywKIAkJCQlCQ0IxNkMw
OTA5NzlDM0JEMDA0Njc3NDEgLyogQ2FjaGVkUmVzb3VyY2VDbGllbnRXYWxrZXIuaCAqLywKIAkJ
CQlFNDdCNEJFNzBFNzEyNDE2MDAwMzg4NTQgLyogQ2FjaGVkUmVzb3VyY2VIYW5kbGUuY3BwICov
LAogCQkJCUU0N0I0QkU2MEU3MTI0MTYwMDAzODg1NCAvKiBDYWNoZWRSZXNvdXJjZUhhbmRsZS5o
ICovLApAQCAtMjUwNzgsNyArMjUwNzUsNiBAQAogCQkJCTUxMDE4NDZBMEIwODYwMkEwMDRBODI1
RiAvKiBDYWNoZWRQYWdlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUQwRURBNzc0MTQzRTMwM0Mw
MDI4RTM4MyAvKiBDYWNoZWRSYXdSZXNvdXJjZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCQ0Ix
NkMxRjA5NzlDM0JEMDA0Njc3NDEgLyogQ2FjaGVkUmVzb3VyY2UuY3BwIGluIFNvdXJjZXMgKi8s
Ci0JCQkJQkNCMTZDMjEwOTc5QzNCRDAwNDY3NzQxIC8qIENhY2hlZFJlc291cmNlQ2xpZW50V2Fs
a2VyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUU0N0I0QkU5MEU3MTI0MTYwMDAzODg1NCAvKiBD
YWNoZWRSZXNvdXJjZUhhbmRsZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCQ0IxNkMyOTA5NzlD
M0JEMDA0Njc3NDEgLyogQ2FjaGVkUmVzb3VyY2VMb2FkZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJRDBEMTQxQjIxMkIyQkY1MjAwRTM5NjIwIC8qIENhY2hlZFJlc291cmNlUmVxdWVzdC5jcHAg
aW4gU291cmNlcyAqLywKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRG
b250LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVk
Rm9udC5jcHAJKHJldmlzaW9uIDk3MTc0KQorKysgU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hl
L0NhY2hlZEZvbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03OSw3ICs3OSw3IEBACiAKIHZvaWQg
Q2FjaGVkRm9udDo6ZGlkQWRkQ2xpZW50KENhY2hlZFJlc291cmNlQ2xpZW50KiBjKQogewotICAg
IGlmICghaXNMb2FkaW5nKCkpCisgICAgaWYgKCFpc0xvYWRpbmcoKSAmJiBjLT50eXBlKCkgPT0g
Q2FjaGVkRm9udENsaWVudDo6ZXhwZWN0ZWRUeXBlKCkpCiAgICAgICAgIHN0YXRpY19jYXN0PENh
Y2hlZEZvbnRDbGllbnQqPihjKS0+Zm9udExvYWRlZCh0aGlzKTsKIH0KIApAQCAtMTkyLDkgKzE5
Miw5IEBACiAgICAgaWYgKGlzTG9hZGluZygpKQogICAgICAgICByZXR1cm47CiAgICAgCi0gICAg
Q2FjaGVkUmVzb3VyY2VDbGllbnRXYWxrZXIgdyhtX2NsaWVudHMpOwotICAgIHdoaWxlIChDYWNo
ZWRSZXNvdXJjZUNsaWVudCAqYyA9IHcubmV4dCgpKQotICAgICAgICAgc3RhdGljX2Nhc3Q8Q2Fj
aGVkRm9udENsaWVudCo+KGMpLT5mb250TG9hZGVkKHRoaXMpOworICAgIENhY2hlZFJlc291cmNl
Q2xpZW50V2Fsa2VyPENhY2hlZEZvbnRDbGllbnQ+IHcobV9jbGllbnRzKTsKKyAgICB3aGlsZSAo
Q2FjaGVkRm9udENsaWVudCogYyA9IHcubmV4dCgpKQorICAgICAgICAgYy0+Zm9udExvYWRlZCh0
aGlzKTsKIH0KIAogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkRm9u
dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRGb250
LmgJKHJldmlzaW9uIDk3MTc0KQorKysgU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hl
ZEZvbnQuaAkod29ya2luZyBjb3B5KQpAQCAtODMsNiArODMsOCBAQAogY2xhc3MgQ2FjaGVkRm9u
dENsaWVudCA6IHB1YmxpYyBDYWNoZWRSZXNvdXJjZUNsaWVudCB7CiBwdWJsaWM6CiAgICAgdmly
dHVhbCB+Q2FjaGVkRm9udENsaWVudCgpIHsgfQorICAgIHN0YXRpYyBDYWNoZWRSZXNvdXJjZUNs
aWVudFR5cGUgZXhwZWN0ZWRUeXBlKCkgeyByZXR1cm4gRm9udFR5cGU7IH0KKyAgICB2aXJ0dWFs
IENhY2hlZFJlc291cmNlQ2xpZW50VHlwZSB0eXBlKCkgeyByZXR1cm4gZXhwZWN0ZWRUeXBlKCk7
IH0KICAgICB2aXJ0dWFsIHZvaWQgZm9udExvYWRlZChDYWNoZWRGb250KikgeyB9CiB9OwogCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkWFNMU3R5bGVTaGVldC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZFhTTFN0eWxl
U2hlZXQuY3BwCShyZXZpc2lvbiA5NzE3NCkKKysrIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNo
ZS9DYWNoZWRYU0xTdHlsZVNoZWV0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDgsNyArNDgsNyBA
QAogCiB2b2lkIENhY2hlZFhTTFN0eWxlU2hlZXQ6OmRpZEFkZENsaWVudChDYWNoZWRSZXNvdXJj
ZUNsaWVudCogYykKIHsgIAotICAgIGlmICghaXNMb2FkaW5nKCkpCisgICAgaWYgKCFpc0xvYWRp
bmcoKSAmJiBjLT50eXBlKCkgPT0gQ2FjaGVkU3R5bGVTaGVldENsaWVudDo6ZXhwZWN0ZWRUeXBl
KCkpCiAgICAgICAgIHN0YXRpY19jYXN0PENhY2hlZFN0eWxlU2hlZXRDbGllbnQqPihjKS0+c2V0
WFNMU3R5bGVTaGVldChtX3Jlc291cmNlUmVxdWVzdC51cmwoKSwgbV9yZXNwb25zZS51cmwoKSwg
bV9zaGVldCk7CiB9CiAKQEAgLTgyLDkgKzgyLDkgQEAKICAgICBpZiAoaXNMb2FkaW5nKCkpCiAg
ICAgICAgIHJldHVybjsKICAgICAKLSAgICBDYWNoZWRSZXNvdXJjZUNsaWVudFdhbGtlciB3KG1f
Y2xpZW50cyk7Ci0gICAgd2hpbGUgKENhY2hlZFJlc291cmNlQ2xpZW50ICpjID0gdy5uZXh0KCkp
Ci0gICAgICAgIHN0YXRpY19jYXN0PENhY2hlZFN0eWxlU2hlZXRDbGllbnQqPihjKS0+c2V0WFNM
U3R5bGVTaGVldChtX3Jlc291cmNlUmVxdWVzdC51cmwoKSwgbV9yZXNwb25zZS51cmwoKSwgbV9z
aGVldCk7CisgICAgQ2FjaGVkUmVzb3VyY2VDbGllbnRXYWxrZXI8Q2FjaGVkU3R5bGVTaGVldENs
aWVudD4gdyhtX2NsaWVudHMpOworICAgIHdoaWxlIChDYWNoZWRTdHlsZVNoZWV0Q2xpZW50KiBj
ID0gdy5uZXh0KCkpCisgICAgICAgIGMtPnNldFhTTFN0eWxlU2hlZXQobV9yZXNvdXJjZVJlcXVl
c3QudXJsKCksIG1fcmVzcG9uc2UudXJsKCksIG1fc2hlZXQpOwogfQogCiB2b2lkIENhY2hlZFhT
TFN0eWxlU2hlZXQ6OmVycm9yKENhY2hlZFJlc291cmNlOjpTdGF0dXMgc3RhdHVzKQpJbmRleDog
U291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZEltYWdlLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkSW1hZ2UuY3BwCShyZXZpc2lvbiA5
NzE3NCkKKysrIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRJbWFnZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTk5LDcgKzk5LDcgQEAKICAgICAgICAgbV9pbWFnZS0+c2V0RGF0YSht
X2RhdGEsIHRydWUpOwogICAgIH0KIAotICAgIGlmIChtX2ltYWdlICYmICFtX2ltYWdlLT5pc051
bGwoKSkKKyAgICBpZiAobV9pbWFnZSAmJiAhbV9pbWFnZS0+aXNOdWxsKCkgJiYgYy0+dHlwZSgp
ID09IENhY2hlZEltYWdlQ2xpZW50OjpleHBlY3RlZFR5cGUoKSkKICAgICAgICAgc3RhdGljX2Nh
c3Q8Q2FjaGVkSW1hZ2VDbGllbnQqPihjKS0+aW1hZ2VDaGFuZ2VkKHRoaXMpOwogCiAgICAgQ2Fj
aGVkUmVzb3VyY2U6OmRpZEFkZENsaWVudChjKTsKQEAgLTIyOCw5ICsyMjgsOSBAQAogCiB2b2lk
IENhY2hlZEltYWdlOjpub3RpZnlPYnNlcnZlcnMoY29uc3QgSW50UmVjdCogY2hhbmdlUmVjdCkK
IHsKLSAgICBDYWNoZWRSZXNvdXJjZUNsaWVudFdhbGtlciB3KG1fY2xpZW50cyk7Ci0gICAgd2hp
bGUgKENhY2hlZFJlc291cmNlQ2xpZW50KiBjID0gdy5uZXh0KCkpCi0gICAgICAgIHN0YXRpY19j
YXN0PENhY2hlZEltYWdlQ2xpZW50Kj4oYyktPmltYWdlQ2hhbmdlZCh0aGlzLCBjaGFuZ2VSZWN0
KTsKKyAgICBDYWNoZWRSZXNvdXJjZUNsaWVudFdhbGtlcjxDYWNoZWRJbWFnZUNsaWVudD4gdyht
X2NsaWVudHMpOworICAgIHdoaWxlIChDYWNoZWRJbWFnZUNsaWVudCogYyA9IHcubmV4dCgpKQor
ICAgICAgICBjLT5pbWFnZUNoYW5nZWQodGhpcywgY2hhbmdlUmVjdCk7CiB9CiAKIHZvaWQgQ2Fj
aGVkSW1hZ2U6OmNoZWNrU2hvdWxkUGFpbnRCcm9rZW5JbWFnZSgpCkBAIC0zNzEsOSArMzcxLDkg
QEAKICAgICBpZiAoaW1hZ2UgIT0gbV9pbWFnZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
IAotICAgIENhY2hlZFJlc291cmNlQ2xpZW50V2Fsa2VyIHcobV9jbGllbnRzKTsKLSAgICB3aGls
ZSAoQ2FjaGVkUmVzb3VyY2VDbGllbnQqIGMgPSB3Lm5leHQoKSkgewotICAgICAgICBpZiAoc3Rh
dGljX2Nhc3Q8Q2FjaGVkSW1hZ2VDbGllbnQqPihjKS0+d2lsbFJlbmRlckltYWdlKHRoaXMpKQor
ICAgIENhY2hlZFJlc291cmNlQ2xpZW50V2Fsa2VyPENhY2hlZEltYWdlQ2xpZW50PiB3KG1fY2xp
ZW50cyk7CisgICAgd2hpbGUgKENhY2hlZEltYWdlQ2xpZW50KiBjID0gdy5uZXh0KCkpIHsKKyAg
ICAgICAgaWYgKGMtPndpbGxSZW5kZXJJbWFnZSh0aGlzKSkKICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKICAgICB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRS
ZXNvdXJjZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0Nh
Y2hlZFJlc291cmNlLmNwcAkocmV2aXNpb24gOTcxNzQpCisrKyBTb3VyY2UvV2ViQ29yZS9sb2Fk
ZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDUsNyArMTQ1
LDcgQEAKICAgICBpZiAoaXNMb2FkaW5nKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIENhY2hl
ZFJlc291cmNlQ2xpZW50V2Fsa2VyIHcobV9jbGllbnRzKTsKKyAgICBDYWNoZWRSZXNvdXJjZUNs
aWVudFdhbGtlcjxDYWNoZWRSZXNvdXJjZUNsaWVudD4gdyhtX2NsaWVudHMpOwogICAgIHdoaWxl
IChDYWNoZWRSZXNvdXJjZUNsaWVudCogYyA9IHcubmV4dCgpKQogICAgICAgICBjLT5ub3RpZnlG
aW5pc2hlZCh0aGlzKTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNo
ZWRJbWFnZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNo
ZWRJbWFnZS5oCShyZXZpc2lvbiA5NzE3NCkKKysrIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNo
ZS9DYWNoZWRJbWFnZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDcsNiArMTA3LDggQEAKIGNsYXNz
IENhY2hlZEltYWdlQ2xpZW50IDogcHVibGljIENhY2hlZFJlc291cmNlQ2xpZW50IHsKIHB1Ymxp
YzoKICAgICB2aXJ0dWFsIH5DYWNoZWRJbWFnZUNsaWVudCgpIHsgfQorICAgIHN0YXRpYyBDYWNo
ZWRSZXNvdXJjZUNsaWVudFR5cGUgZXhwZWN0ZWRUeXBlKCkgeyByZXR1cm4gSW1hZ2VUeXBlOyB9
CisgICAgdmlydHVhbCBDYWNoZWRSZXNvdXJjZUNsaWVudFR5cGUgdHlwZSgpIHsgcmV0dXJuIGV4
cGVjdGVkVHlwZSgpOyB9CiAKICAgICAvLyBDYWxsZWQgd2hlbmV2ZXIgYSBmcmFtZSBvZiBhbiBp
bWFnZSBjaGFuZ2VzLCBlaXRoZXIgYmVjYXVzZSB3ZSBnb3QgbW9yZSBkYXRhIGZyb20gdGhlIG5l
dHdvcmsgb3IKICAgICAvLyBiZWNhdXNlIHdlIGFyZSBhbmltYXRpbmcuIElmIG5vdCBudWxsLCB0
aGUgSW50UmVjdCBpcyB0aGUgY2hhbmdlZCByZWN0IG9mIHRoZSBpbWFnZS4KSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRSZXNvdXJjZUNsaWVudC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRSZXNvdXJjZUNsaWVudC5oCShy
ZXZpc2lvbiA5NzE3NCkKKysrIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRSZXNv
dXJjZUNsaWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw4ICszNCwxOSBAQAogY2xhc3MgQ2Fj
aGVkUmVzb3VyY2VDbGllbnQgewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGlj
OgorICAgIGVudW0gQ2FjaGVkUmVzb3VyY2VDbGllbnRUeXBlIHsKKyAgICAgICAgQmFzZVJlc291
cmNlVHlwZSwKKyAgICAgICAgSW1hZ2VUeXBlLAorICAgICAgICBGb250VHlwZSwKKyAgICAgICAg
U3R5bGVTaGVldFR5cGUKKyAgICB9OworCiAgICAgdmlydHVhbCB+Q2FjaGVkUmVzb3VyY2VDbGll
bnQoKSB7IH0KICAgICB2aXJ0dWFsIHZvaWQgbm90aWZ5RmluaXNoZWQoQ2FjaGVkUmVzb3VyY2Uq
KSB7IH0KKyAgICAKKyAgICBzdGF0aWMgQ2FjaGVkUmVzb3VyY2VDbGllbnRUeXBlIGV4cGVjdGVk
VHlwZSgpIHsgcmV0dXJuIEJhc2VSZXNvdXJjZVR5cGU7IH0KKyAgICB2aXJ0dWFsIENhY2hlZFJl
c291cmNlQ2xpZW50VHlwZSB0eXBlKCkgeyByZXR1cm4gZXhwZWN0ZWRUeXBlKCk7IH0KKwogcHJv
dGVjdGVkOgogICAgIENhY2hlZFJlc291cmNlQ2xpZW50KCkgeyB9CiB9OwpJbmRleDogU291cmNl
L1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZFJlc291cmNlQ2xpZW50V2Fsa2VyLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2VDbGll
bnRXYWxrZXIuY3BwCShyZXZpc2lvbiA5NzE3NCkKKysrIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9j
YWNoZS9DYWNoZWRSZXNvdXJjZUNsaWVudFdhbGtlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEs
NTMgKzAsMCBAQAotLyoKLSAgICBDb3B5cmlnaHQgKEMpIDE5OTggTGFycyBLbm9sbCAoa25vbGxA
bXBpLWhkLm1wZy5kZSkKLSAgICBDb3B5cmlnaHQgKEMpIDIwMDEgRGlyayBNdWVsbGVyIChtdWVs
bGVyQGtkZS5vcmcpCi0gICAgQ29weXJpZ2h0IChDKSAyMDAyIFdhbGRvIEJhc3RpYW4gKGJhc3Rp
YW5Aa2RlLm9yZykKLSAgICBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotCi0gICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICAgIG1vZGlmeSBpdCB1
bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gICAgTGlj
ZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVy
Ci0gICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBs
YXRlciB2ZXJzaW9uLgotCi0gICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo
b3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZ
OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAgICBNRVJDSEFOVEFCSUxJ
VFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICAg
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotCi0gICAg
WW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZQotICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZp
bGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gICAgdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAgICBC
b3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLQotICAgIFRoaXMgY2xhc3MgcHJvdmlkZXMgYWxs
IGZ1bmN0aW9uYWxpdHkgbmVlZGVkIGZvciBsb2FkaW5nIGltYWdlcywgc3R5bGUgc2hlZXRzIGFu
ZCBodG1sCi0gICAgcGFnZXMgZnJvbSB0aGUgd2ViLiBJdCBoYXMgYSBtZW1vcnkgY2FjaGUgZm9y
IHRoZXNlIG9iamVjdHMuCi0qLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiQ2Fj
aGVkUmVzb3VyY2VDbGllbnRXYWxrZXIuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1DYWNo
ZWRSZXNvdXJjZUNsaWVudFdhbGtlcjo6Q2FjaGVkUmVzb3VyY2VDbGllbnRXYWxrZXIoY29uc3Qg
SGFzaENvdW50ZWRTZXQ8Q2FjaGVkUmVzb3VyY2VDbGllbnQqPiYgc2V0KQotICAgIDogbV9jbGll
bnRTZXQoc2V0KSwgbV9jbGllbnRWZWN0b3Ioc2V0LnNpemUoKSksIG1faW5kZXgoMCkKLXsKLSAg
ICB0eXBlZGVmIEhhc2hDb3VudGVkU2V0PENhY2hlZFJlc291cmNlQ2xpZW50Kj46OmNvbnN0X2l0
ZXJhdG9yIEl0ZXJhdG9yOwotICAgIEl0ZXJhdG9yIGVuZCA9IHNldC5lbmQoKTsKLSAgICBzaXpl
X3QgY2xpZW50SW5kZXggPSAwOwotICAgIGZvciAoSXRlcmF0b3IgY3VycmVudCA9IHNldC5iZWdp
bigpOyBjdXJyZW50ICE9IGVuZDsgKytjdXJyZW50KQotICAgICAgICBtX2NsaWVudFZlY3Rvcltj
bGllbnRJbmRleCsrXSA9IGN1cnJlbnQtPmZpcnN0OwotfQotCi1DYWNoZWRSZXNvdXJjZUNsaWVu
dCogQ2FjaGVkUmVzb3VyY2VDbGllbnRXYWxrZXI6Om5leHQoKQotewotICAgIHNpemVfdCBzaXpl
ID0gbV9jbGllbnRWZWN0b3Iuc2l6ZSgpOwotICAgIHdoaWxlIChtX2luZGV4IDwgc2l6ZSkgewot
ICAgICAgICBDYWNoZWRSZXNvdXJjZUNsaWVudCogbmV4dCA9IG1fY2xpZW50VmVjdG9yW21faW5k
ZXgrK107Ci0gICAgICAgIGlmIChtX2NsaWVudFNldC5jb250YWlucyhuZXh0KSkKLSAgICAgICAg
ICAgIHJldHVybiBuZXh0OwotICAgIH0KLQotICAgIHJldHVybiAwOwotfQotCi19CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkU3R5bGVTaGVldENsaWVudC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRTdHlsZVNoZWV0Q2xp
ZW50LmgJKHJldmlzaW9uIDk3MTc0KQorKysgU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0Nh
Y2hlZFN0eWxlU2hlZXRDbGllbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMzcsNiArMzcsOCBAQAog
ICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgogICAgIHZpcnR1YWwgfkNhY2hl
ZFN0eWxlU2hlZXRDbGllbnQoKSB7IH0KKyAgICBzdGF0aWMgQ2FjaGVkUmVzb3VyY2VDbGllbnRU
eXBlIGV4cGVjdGVkVHlwZSgpIHsgcmV0dXJuIFN0eWxlU2hlZXRUeXBlOyB9CisgICAgdmlydHVh
bCBDYWNoZWRSZXNvdXJjZUNsaWVudFR5cGUgdHlwZSgpIHsgcmV0dXJuIGV4cGVjdGVkVHlwZSgp
OyB9CiAgICAgdmlydHVhbCB2b2lkIHNldENTU1N0eWxlU2hlZXQoY29uc3QgU3RyaW5nJiAvKiBo
cmVmICovLCBjb25zdCBLVVJMJiAvKiBiYXNlVVJMICovLCBjb25zdCBTdHJpbmcmIC8qIGNoYXJz
ZXQgKi8sIGNvbnN0IENhY2hlZENTU1N0eWxlU2hlZXQqKSB7IH0KICAgICB2aXJ0dWFsIHZvaWQg
c2V0WFNMU3R5bGVTaGVldChjb25zdCBTdHJpbmcmIC8qIGhyZWYgKi8sIGNvbnN0IEtVUkwmIC8q
IGJhc2VVUkwgKi8sIGNvbnN0IFN0cmluZyYgLyogc2hlZXQgKi8pIHsgfQogfTsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRSZXNvdXJjZUNsaWVudFdhbGtlci5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRSZXNvdXJjZUNs
aWVudFdhbGtlci5oCShyZXZpc2lvbiA5NzE3NCkKKysrIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9j
YWNoZS9DYWNoZWRSZXNvdXJjZUNsaWVudFdhbGtlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNSwy
NCArMjUsNDIgQEAKICNpZm5kZWYgQ2FjaGVkUmVzb3VyY2VDbGllbnRXYWxrZXJfaAogI2RlZmlu
ZSBDYWNoZWRSZXNvdXJjZUNsaWVudFdhbGtlcl9oCiAKKyNpbmNsdWRlICJDYWNoZWRSZXNvdXJj
ZUNsaWVudC5oIgogI2luY2x1ZGUgPHd0Zi9IYXNoQ291bnRlZFNldC5oPgogI2luY2x1ZGUgPHd0
Zi9WZWN0b3IuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi0gICAgY2xhc3MgQ2FjaGVkUmVz
b3VyY2VDbGllbnQ7CisvLyBDYWxsIHRoaXMgIndhbGtlciIgaW5zdGVhZCBvZiBpdGVyYXRvciBz
byBwZW9wbGUgd29uJ3QgZXhwZWN0IFF0IG9yIFNUTC1zdHlsZSBpdGVyYXRvciBpbnRlcmZhY2Uu
CisvLyBKdXN0IGtlZXAgY2FsbGluZyBuZXh0KCkgb24gdGhpcy4gSXQncyBzYWZlIGZyb20gZGVs
ZXRpb25zIG9mIGl0ZW1zLgordGVtcGxhdGU8dHlwZW5hbWUgVD4gY2xhc3MgQ2FjaGVkUmVzb3Vy
Y2VDbGllbnRXYWxrZXIgeworcHVibGljOgorICAgIENhY2hlZFJlc291cmNlQ2xpZW50V2Fsa2Vy
KGNvbnN0IEhhc2hDb3VudGVkU2V0PENhY2hlZFJlc291cmNlQ2xpZW50Kj4mIHNldCkKKyAgICAg
ICAgOiBtX2NsaWVudFNldChzZXQpLCBtX2NsaWVudFZlY3RvcihzZXQuc2l6ZSgpKSwgbV9pbmRl
eCgwKQorICAgIHsKKyAgICAgICAgdHlwZWRlZiBIYXNoQ291bnRlZFNldDxDYWNoZWRSZXNvdXJj
ZUNsaWVudCo+Ojpjb25zdF9pdGVyYXRvciBJdGVyYXRvcjsKKyAgICAgICAgSXRlcmF0b3IgZW5k
ID0gc2V0LmVuZCgpOworICAgICAgICBzaXplX3QgY2xpZW50SW5kZXggPSAwOworICAgICAgICBm
b3IgKEl0ZXJhdG9yIGN1cnJlbnQgPSBzZXQuYmVnaW4oKTsgY3VycmVudCAhPSBlbmQ7ICsrY3Vy
cmVudCkKKyAgICAgICAgICAgIG1fY2xpZW50VmVjdG9yW2NsaWVudEluZGV4KytdID0gY3VycmVu
dC0+Zmlyc3Q7CisgICAgfQogCi0gICAgLy8gQ2FsbCB0aGlzICJ3YWxrZXIiIGluc3RlYWQgb2Yg
aXRlcmF0b3Igc28gcGVvcGxlIHdvbid0IGV4cGVjdCBRdCBvciBTVEwtc3R5bGUgaXRlcmF0b3Ig
aW50ZXJmYWNlLgotICAgIC8vIEp1c3Qga2VlcCBjYWxsaW5nIG5leHQoKSBvbiB0aGlzLiBJdCdz
IHNhZmUgZnJvbSBkZWxldGlvbnMgb2YgaXRlbXMuCi0gICAgY2xhc3MgQ2FjaGVkUmVzb3VyY2VD
bGllbnRXYWxrZXIgewotICAgIHB1YmxpYzoKLSAgICAgICAgQ2FjaGVkUmVzb3VyY2VDbGllbnRX
YWxrZXIoY29uc3QgSGFzaENvdW50ZWRTZXQ8Q2FjaGVkUmVzb3VyY2VDbGllbnQqPiYpOwotICAg
ICAgICBDYWNoZWRSZXNvdXJjZUNsaWVudCogbmV4dCgpOwotICAgIHByaXZhdGU6Ci0gICAgICAg
IGNvbnN0IEhhc2hDb3VudGVkU2V0PENhY2hlZFJlc291cmNlQ2xpZW50Kj4mIG1fY2xpZW50U2V0
OwotICAgICAgICBWZWN0b3I8Q2FjaGVkUmVzb3VyY2VDbGllbnQqPiBtX2NsaWVudFZlY3RvcjsK
LSAgICAgICAgc2l6ZV90IG1faW5kZXg7Ci0gICAgfTsKKyAgICBUKiBuZXh0KCkKKyAgICB7Cisg
ICAgICAgIHNpemVfdCBzaXplID0gbV9jbGllbnRWZWN0b3Iuc2l6ZSgpOworICAgICAgICB3aGls
ZSAobV9pbmRleCA8IHNpemUpIHsKKyAgICAgICAgICAgIENhY2hlZFJlc291cmNlQ2xpZW50KiBu
ZXh0ID0gbV9jbGllbnRWZWN0b3JbbV9pbmRleCsrXTsKKyAgICAgICAgICAgIGlmIChtX2NsaWVu
dFNldC5jb250YWlucyhuZXh0KSAmJiAoVDo6ZXhwZWN0ZWRUeXBlKCkgPT0gQ2FjaGVkUmVzb3Vy
Y2VDbGllbnQ6OmV4cGVjdGVkVHlwZSgpIHx8IG5leHQtPnR5cGUoKSA9PSBUOjpleHBlY3RlZFR5
cGUoKSkpCisgICAgICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFQqPihuZXh0KTsKKyAg
ICAgICAgfQorICAgICAgICAKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorcHJpdmF0ZToKKyAg
ICBjb25zdCBIYXNoQ291bnRlZFNldDxDYWNoZWRSZXNvdXJjZUNsaWVudCo+JiBtX2NsaWVudFNl
dDsKKyAgICBWZWN0b3I8Q2FjaGVkUmVzb3VyY2VDbGllbnQqPiBtX2NsaWVudFZlY3RvcjsKKyAg
ICBzaXplX3QgbV9pbmRleDsKK307CiAKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvbG9hZGVy
L2NhY2hlL0NhY2hlZENTU1N0eWxlU2hlZXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2xvYWRlci9jYWNoZS9DYWNoZWRDU1NTdHlsZVNoZWV0LmNwcAkocmV2aXNpb24gOTcxNzQp
CisrKyBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkQ1NTU3R5bGVTaGVldC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTUwLDkgKzUwLDkgQEAKIHsKIH0KIAotdm9pZCBDYWNoZWRDU1NT
dHlsZVNoZWV0OjpkaWRBZGRDbGllbnQoQ2FjaGVkUmVzb3VyY2VDbGllbnQgKmMpCit2b2lkIENh
Y2hlZENTU1N0eWxlU2hlZXQ6OmRpZEFkZENsaWVudChDYWNoZWRSZXNvdXJjZUNsaWVudCogYykK
IHsKLSAgICBpZiAoIWlzTG9hZGluZygpKQorICAgIGlmICghaXNMb2FkaW5nKCkgJiYgYy0+dHlw
ZSgpID09IENhY2hlZFN0eWxlU2hlZXRDbGllbnQ6OmV4cGVjdGVkVHlwZSgpKQogICAgICAgICBz
dGF0aWNfY2FzdDxDYWNoZWRTdHlsZVNoZWV0Q2xpZW50Kj4oYyktPnNldENTU1N0eWxlU2hlZXQo
bV9yZXNvdXJjZVJlcXVlc3QudXJsKCksIG1fcmVzcG9uc2UudXJsKCksIG1fZGVjb2Rlci0+ZW5j
b2RpbmcoKS5uYW1lKCksIHRoaXMpOwogfQogCkBAIC0xMTEsOSArMTExLDkgQEAKICAgICBpZiAo
aXNMb2FkaW5nKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIENhY2hlZFJlc291cmNlQ2xpZW50
V2Fsa2VyIHcobV9jbGllbnRzKTsKLSAgICB3aGlsZSAoQ2FjaGVkUmVzb3VyY2VDbGllbnQgKmMg
PSB3Lm5leHQoKSkKLSAgICAgICAgc3RhdGljX2Nhc3Q8Q2FjaGVkU3R5bGVTaGVldENsaWVudCo+
KGMpLT5zZXRDU1NTdHlsZVNoZWV0KG1fcmVzb3VyY2VSZXF1ZXN0LnVybCgpLCBtX3Jlc3BvbnNl
LnVybCgpLCBtX2RlY29kZXItPmVuY29kaW5nKCkubmFtZSgpLCB0aGlzKTsKKyAgICBDYWNoZWRS
ZXNvdXJjZUNsaWVudFdhbGtlcjxDYWNoZWRTdHlsZVNoZWV0Q2xpZW50PiB3KG1fY2xpZW50cyk7
CisgICAgd2hpbGUgKENhY2hlZFN0eWxlU2hlZXRDbGllbnQqIGMgPSB3Lm5leHQoKSkKKyAgICAg
ICAgYy0+c2V0Q1NTU3R5bGVTaGVldChtX3Jlc291cmNlUmVxdWVzdC51cmwoKSwgbV9yZXNwb25z
ZS51cmwoKSwgbV9kZWNvZGVyLT5lbmNvZGluZygpLm5hbWUoKSwgdGhpcyk7CiB9CiAKIHZvaWQg
Q2FjaGVkQ1NTU3R5bGVTaGVldDo6ZXJyb3IoQ2FjaGVkUmVzb3VyY2U6OlN0YXR1cyBzdGF0dXMp
Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>