<?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>128321</bug_id>
          
          <creation_ts>2014-02-06 11:59:06 -0800</creation_ts>
          <short_desc>Check selectors exactly when invalidating style</short_desc>
          <delta_ts>2014-02-06 17:57:03 -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>DOM</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="Antti Koivisto">koivisto</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>allan.jensen</cc>
    
    <cc>commit-queue</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>glenn</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>kangil.han</cc>
    
    <cc>macpherson</cc>
    
    <cc>menard</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>977465</commentid>
    <comment_count>0</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2014-02-06 11:59:06 -0800</bug_when>
    <thetext>instead of heuristics</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>977472</commentid>
    <comment_count>1</comment_count>
      <attachid>223362</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2014-02-06 12:08:22 -0800</bug_when>
    <thetext>Created attachment 223362
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>977499</commentid>
    <comment_count>2</comment_count>
      <attachid>223362</attachid>
    <who name="Andreas Kling">kling</who>
    <bug_when>2014-02-06 12:45:10 -0800</bug_when>
    <thetext>Comment on attachment 223362
patch

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

r=me with some tweaks.

Q: Can we piggyback on the already massaged data in the Document&apos;s StyleResolver here?

&gt; Source/WebCore/ChangeLog:9
&gt; +        With selectors are really fast to match with the JIT. Take advantage of it by invalidating
&gt; +        document style exactly when new stylesheets arrive (instead of heuristics).

I don&apos;t think you need the &quot;With&quot; here. We should remove it to achieve 60fps on mobile in 2014.

&gt; Source/WebCore/css/StyleInvalidationAnalysis.cpp:40
&gt; +static bool shouldDirtyAllStyle(const Vector&lt;RefPtr&lt;StyleRuleBase&gt;&gt; rules)

We should pass the rules vector by (const) reference here.

&gt; Source/WebCore/css/StyleInvalidationAnalysis.cpp:42
&gt; +    for (auto rule : rules) {

Ref churn here. auto&amp; would avoid it.

&gt; Source/WebCore/css/StyleInvalidationAnalysis.cpp:57
&gt; +    for (auto import : sheet.importRules()) {

Same here.

&gt; Source/WebCore/css/StyleInvalidationAnalysis.cpp:70
&gt; +    for (auto sheet : sheets) {

Sam has convinced me to start writing &quot;auto*&quot; to clarify that there&apos;s no by-value copy.

&gt; Source/WebCore/css/StyleInvalidationAnalysis.cpp:84
&gt; +    for (auto sheet : sheets)

Same comment here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>977568</commentid>
    <comment_count>3</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2014-02-06 15:30:05 -0800</bug_when>
    <thetext>(In reply to comment #2)
&gt; (From update of attachment 223362 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=223362&amp;action=review
&gt; 
&gt; r=me with some tweaks.
&gt; 
&gt; Q: Can we piggyback on the already massaged data in the Document&apos;s StyleResolver here?

Not really. The new sheet stuff is not in StyleResolver yet. Optimally we would transfer it over instead of reprocessing but everything here is pretty cheap in any case.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>977664</commentid>
    <comment_count>4</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2014-02-06 17:54:16 -0800</bug_when>
    <thetext>https://trac.webkit.org/r163592</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>977665</commentid>
    <comment_count>5</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2014-02-06 17:57:03 -0800</bug_when>
    <thetext>https://trac.webkit.org/r163592
https://trac.webkit.org/r163594</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>223362</attachid>
            <date>2014-02-06 12:08:22 -0800</date>
            <delta_ts>2014-02-06 12:45:10 -0800</delta_ts>
            <desc>patch</desc>
            <filename>style-analysis-real-checker-3.patch</filename>
            <type>text/plain</type>
            <size>16841</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE2MzU1MykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQ0IEBACisyMDE0LTAyLTA2ICBBbnR0aSBL
b2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KKworICAgICAgICBDaGVjayBzZWxlY3RvcnMgZXhh
Y3RseSB3aGVuIGludmFsaWRhdGluZyBzdHlsZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTI4MzIxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisgICAgICAgIAorICAgICAgICBXaXRoIHNlbGVjdG9ycyBhcmUgcmVhbGx5IGZh
c3QgdG8gbWF0Y2ggd2l0aCB0aGUgSklULiBUYWtlIGFkdmFudGFnZSBvZiBpdCBieSBpbnZhbGlk
YXRpbmcKKyAgICAgICAgZG9jdW1lbnQgc3R5bGUgZXhhY3RseSB3aGVuIG5ldyBzdHlsZXNoZWV0
cyBhcnJpdmUgKGluc3RlYWQgb2YgaGV1cmlzdGljcykuCisgICAgICAgIAorICAgICAgICBUaGlz
IHJlZHVjZXMgbmVlZCBmb3IgbGFyZ2Ugc3R5bGUgcmVjYWxjdWxhdGlvbnMgaW4gc29tZSBjb21t
b24gY2FzZXMuCisKKyAgICAgICAgKiBjc3MvRWxlbWVudFJ1bGVDb2xsZWN0b3IuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6RWxlbWVudFJ1bGVDb2xsZWN0b3I6OmNsZWFyTWF0Y2hlZFJ1bGVzKToK
KyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnRSdWxlQ29sbGVjdG9yOjpjb2xsZWN0TWF0Y2hpbmdS
dWxlc0Zvckxpc3QpOgorICAgICAgICAqIGNzcy9FbGVtZW50UnVsZUNvbGxlY3Rvci5oOgorICAg
ICAgICAoV2ViQ29yZTo6RWxlbWVudFJ1bGVDb2xsZWN0b3I6Omhhc01hdGNoZWRSdWxlcyk6Cisg
ICAgICAgICogY3NzL1J1bGVTZXQuaDoKKyAgICAgICAgKFdlYkNvcmU6OlJ1bGVTZXQ6Omhhc1No
YWRvd1BzZXVkb0VsZW1lbnRSdWxlcyk6CisgICAgICAgICogY3NzL1NlbGVjdG9yQ2hlY2tlci5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpTZWxlY3RvckNoZWNrZXI6Om1hdGNoUmVjdXJzaXZlbHkp
OgorICAgICAgICAqIGNzcy9TZWxlY3RvckNoZWNrZXIuaDoKKyAgICAgICAgCisgICAgICAgICAg
ICBBZGQgbmV3IG1vZGUgd2hlcmUgYWxsIHBzZXVkbyBlbGVtZW50cyBtYXRjaCBzbyB3ZSBjYW4g
aW52YWxpZGF0ZSB0aGVpciBlbGVtZW50LgorCisgICAgICAgICogY3NzL1N0eWxlSW52YWxpZGF0
aW9uQW5hbHlzaXMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6c2hvdWxkRGlydHlBbGxTdHlsZSk6
CisgICAgICAgIChXZWJDb3JlOjpTdHlsZUludmFsaWRhdGlvbkFuYWx5c2lzOjpTdHlsZUludmFs
aWRhdGlvbkFuYWx5c2lzKToKKyAgICAgICAgKFdlYkNvcmU6OmludmFsaWRhdGVTdHlsZVJlY3Vy
c2l2ZWx5KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlSW52YWxpZGF0aW9uQW5hbHlzaXM6Omlu
dmFsaWRhdGVTdHlsZSk6CisgICAgICAgIAorICAgICAgICAgICAgU3dpdGNoIHRvIHJlYWwgc2Vs
ZWN0b3IgY2hlY2tlci4KKworICAgICAgICAqIGNzcy9TdHlsZUludmFsaWRhdGlvbkFuYWx5c2lz
Lmg6CisgICAgICAgICogY3NzL1N0eWxlUmVzb2x2ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
U3R5bGVSZXNvbHZlcjo6TWF0Y2hlZFByb3BlcnRpZXM6On5NYXRjaGVkUHJvcGVydGllcyk6Cisg
ICAgICAgICogY3NzL1N0eWxlUmVzb2x2ZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVz
b2x2ZXI6Om1lZGlhUXVlcnlFdmFsdWF0b3IpOgorICAgICAgICAqIGRvbS9Eb2N1bWVudFN0eWxl
U2hlZXRDb2xsZWN0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50U3R5bGVTaGVl
dENvbGxlY3Rpb246OmFuYWx5emVTdHlsZVNoZWV0Q2hhbmdlKToKKwogMjAxNC0wMi0wNiAgRnLD
qWTDqXJpYyBXYW5nICA8ZnJlZC53YW5nQGZyZWUuZnI+CiAKICAgICAgICAgRG8gbm90IGRyYXcg
bXVsdGktY2hhcmFjdGVycyA8bWk+IGluIGl0YWxpYy4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nz
cy9FbGVtZW50UnVsZUNvbGxlY3Rvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
Y3NzL0VsZW1lbnRSdWxlQ29sbGVjdG9yLmNwcAkocmV2aXNpb24gMTYzNDc1KQorKysgU291cmNl
L1dlYkNvcmUvY3NzL0VsZW1lbnRSdWxlQ29sbGVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
OTQsNyArOTQsNyBAQCBpbmxpbmUgdm9pZCBFbGVtZW50UnVsZUNvbGxlY3Rvcjo6YWRkTWF0CiAg
ICAgbV9tYXRjaGVkUnVsZXMtPmFwcGVuZChydWxlKTsKIH0KIAotaW5saW5lIHZvaWQgRWxlbWVu
dFJ1bGVDb2xsZWN0b3I6OmNsZWFyTWF0Y2hlZFJ1bGVzKCkKK3ZvaWQgRWxlbWVudFJ1bGVDb2xs
ZWN0b3I6OmNsZWFyTWF0Y2hlZFJ1bGVzKCkKIHsKICAgICBpZiAoIW1fbWF0Y2hlZFJ1bGVzKQog
ICAgICAgICByZXR1cm47CkBAIC0zNjAsNyArMzYwLDcgQEAgdm9pZCBFbGVtZW50UnVsZUNvbGxl
Y3Rvcjo6Y29sbGVjdE1hdGNoaQogICAgICAgICBQc2V1ZG9JZCBkeW5hbWljUHNldWRvID0gTk9Q
U0VVRE87CiAgICAgICAgIGlmIChydWxlTWF0Y2hlcyhydWxlRGF0YSwgZHluYW1pY1BzZXVkbykp
IHsKICAgICAgICAgICAgIC8vIEZvciBTaGFyaW5nUnVsZXMgdGVzdGluZywgYW55IG1hdGNoIGlz
IGdvb2QgZW5vdWdoLCB3ZSBkb24ndCBjYXJlIHdoYXQgaXMgbWF0Y2hlZC4KLSAgICAgICAgICAg
IGlmIChtX21vZGUgPT0gU2VsZWN0b3JDaGVja2VyOjpTaGFyaW5nUnVsZXMpIHsKKyAgICAgICAg
ICAgIGlmIChtX21vZGUgPT0gU2VsZWN0b3JDaGVja2VyOjpTaGFyaW5nUnVsZXMgfHwgbV9tb2Rl
ID09IFNlbGVjdG9yQ2hlY2tlcjo6U3R5bGVJbnZhbGlkYXRpb24pIHsKICAgICAgICAgICAgICAg
ICBhZGRNYXRjaGVkUnVsZSgmcnVsZURhdGEpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICAgICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL0VsZW1lbnRSdWxlQ29sbGVjdG9y
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL0VsZW1lbnRSdWxlQ29sbGVjdG9y
LmgJKHJldmlzaW9uIDE2MzQ3NSkKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9FbGVtZW50UnVsZUNv
bGxlY3Rvci5oCSh3b3JraW5nIGNvcHkpCkBAIC03MCw2ICs3MCw5IEBAIHB1YmxpYzoKICAgICBT
dHlsZVJlc29sdmVyOjpNYXRjaFJlc3VsdCYgbWF0Y2hlZFJlc3VsdCgpOwogICAgIGNvbnN0IFZl
Y3RvcjxSZWZQdHI8U3R5bGVSdWxlQmFzZT4+JiBtYXRjaGVkUnVsZUxpc3QoKSBjb25zdDsKIAor
ICAgIGJvb2wgaGFzTWF0Y2hlZFJ1bGVzKCkgY29uc3QgeyByZXR1cm4gbV9tYXRjaGVkUnVsZXMg
JiYgIW1fbWF0Y2hlZFJ1bGVzLT5pc0VtcHR5KCk7IH0KKyAgICB2b2lkIGNsZWFyTWF0Y2hlZFJ1
bGVzKCk7CisKIHByaXZhdGU6CiAgICAgdm9pZCBhZGRFbGVtZW50U3R5bGVQcm9wZXJ0aWVzKGNv
bnN0IFN0eWxlUHJvcGVydGllcyosIGJvb2wgaXNDYWNoZWFibGUgPSB0cnVlKTsKIApAQCAtODQs
NyArODcsNiBAQCBwcml2YXRlOgogICAgIHZvaWQgc29ydEFuZFRyYW5zZmVyTWF0Y2hlZFJ1bGVz
KCk7CiAKICAgICB2b2lkIGFkZE1hdGNoZWRSdWxlKGNvbnN0IFJ1bGVEYXRhKik7Ci0gICAgdm9p
ZCBjbGVhck1hdGNoZWRSdWxlcygpOwogCiAgICAgRWxlbWVudCYgbV9lbGVtZW50OwogICAgIFJl
bmRlclN0eWxlKiBtX3N0eWxlOwpJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL1J1bGVTZXQuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvUnVsZVNldC5oCShyZXZpc2lvbiAxNjM0
NjUpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvUnVsZVNldC5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
NjYsNiArMTY2LDggQEAgcHVibGljOgogCiAgICAgdW5zaWduZWQgcnVsZUNvdW50KCkgY29uc3Qg
eyByZXR1cm4gbV9ydWxlQ291bnQ7IH0KIAorICAgIGJvb2wgaGFzU2hhZG93UHNldWRvRWxlbWVu
dFJ1bGVzKCkgY29uc3QgeyByZXR1cm4gIW1fc2hhZG93UHNldWRvRWxlbWVudFJ1bGVzLmlzRW1w
dHkoKTsgfQorCiBwcml2YXRlOgogICAgIHZvaWQgYWRkQ2hpbGRSdWxlcyhjb25zdCBWZWN0b3I8
UmVmUHRyPFN0eWxlUnVsZUJhc2U+PiYsIGNvbnN0IE1lZGlhUXVlcnlFdmFsdWF0b3ImIG1lZGl1
bSwgU3R5bGVSZXNvbHZlciosIGNvbnN0IENvbnRhaW5lck5vZGUqIHNjb3BlLCBib29sIGhhc0Rv
Y3VtZW50U2VjdXJpdHlPcmlnaW4sIEFkZFJ1bGVGbGFncyk7CiAgICAgYm9vbCBmaW5kQmVzdFJ1
bGVTZXRBbmRBZGQoY29uc3QgQ1NTU2VsZWN0b3IqLCBSdWxlRGF0YSYpOwpJbmRleDogU291cmNl
L1dlYkNvcmUvY3NzL1NlbGVjdG9yQ2hlY2tlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvY3NzL1NlbGVjdG9yQ2hlY2tlci5jcHAJKHJldmlzaW9uIDE2MzQ2NSkKKysrIFNvdXJj
ZS9XZWJDb3JlL2Nzcy9TZWxlY3RvckNoZWNrZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNjIs
MTMgKzE2MiwxNCBAQCBTZWxlY3RvckNoZWNrZXI6Ok1hdGNoIFNlbGVjdG9yQ2hlY2tlcjo6CiAK
ICAgICAgICAgICAgICAgICBpZiAoY29udGV4dC5zZWxlY3Rvci0+cHNldWRvVHlwZSgpID09IENT
U1NlbGVjdG9yOjpQc2V1ZG9XZWJLaXRDdXN0b21FbGVtZW50ICYmIHJvb3QtPnR5cGUoKSAhPSBT
aGFkb3dSb290OjpVc2VyQWdlbnRTaGFkb3dSb290KQogICAgICAgICAgICAgICAgICAgICByZXR1
cm4gU2VsZWN0b3JGYWlsc0xvY2FsbHk7Ci0gICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAg
IH0gZWxzZSBpZiAobV9tb2RlICE9IFN0eWxlSW52YWxpZGF0aW9uKQogICAgICAgICAgICAgICAg
IHJldHVybiBTZWxlY3RvckZhaWxzTG9jYWxseTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAg
ICAgIGlmICgoIWNvbnRleHQuZWxlbWVudFN0eWxlICYmIG1fbW9kZSA9PSBSZXNvbHZpbmdTdHls
ZSkgfHwgbV9tb2RlID09IFF1ZXJ5aW5nUnVsZXMpCiAgICAgICAgICAgICAgICAgcmV0dXJuIFNl
bGVjdG9yRmFpbHNMb2NhbGx5OwogCi0gICAgICAgICAgICBQc2V1ZG9JZCBwc2V1ZG9JZCA9IENT
U1NlbGVjdG9yOjpwc2V1ZG9JZChjb250ZXh0LnNlbGVjdG9yLT5wc2V1ZG9UeXBlKCkpOworICAg
ICAgICAgICAgLy8gV2hlbiBpbnZhbGlkYXRpbmcgc3R5bGUgYWxsIHBzZXVkbyBlbGVtZW50cyBu
ZWVkIHRvIG1hdGNoLgorICAgICAgICAgICAgUHNldWRvSWQgcHNldWRvSWQgPSBtX21vZGUgPT0g
U3R5bGVJbnZhbGlkYXRpb24gPyBOT1BTRVVETyA6IENTU1NlbGVjdG9yOjpwc2V1ZG9JZChjb250
ZXh0LnNlbGVjdG9yLT5wc2V1ZG9UeXBlKCkpOwogICAgICAgICAgICAgaWYgKHBzZXVkb0lkID09
IEZJUlNUX0xFVFRFUikKICAgICAgICAgICAgICAgICBjb250ZXh0LmVsZW1lbnQtPmRvY3VtZW50
KCkuc3R5bGVTaGVldENvbGxlY3Rpb24oKS5zZXRVc2VzRmlyc3RMZXR0ZXJSdWxlcyh0cnVlKTsK
ICAgICAgICAgICAgIGlmIChwc2V1ZG9JZCAhPSBOT1BTRVVETykKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2Nzcy9TZWxlY3RvckNoZWNrZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9j
c3MvU2VsZWN0b3JDaGVja2VyLmgJKHJldmlzaW9uIDE2MzQ2NSkKKysrIFNvdXJjZS9XZWJDb3Jl
L2Nzcy9TZWxlY3RvckNoZWNrZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNDcsNyArNDcsNyBAQCBj
bGFzcyBTZWxlY3RvckNoZWNrZXIgewogCiBwdWJsaWM6CiAgICAgZW51bSBWaXNpdGVkTWF0Y2hU
eXBlIHsgVmlzaXRlZE1hdGNoRGlzYWJsZWQsIFZpc2l0ZWRNYXRjaEVuYWJsZWQgfTsKLSAgICBl
bnVtIE1vZGUgeyBSZXNvbHZpbmdTdHlsZSA9IDAsIENvbGxlY3RpbmdSdWxlcywgUXVlcnlpbmdS
dWxlcywgU2hhcmluZ1J1bGVzIH07CisgICAgZW51bSBNb2RlIHsgUmVzb2x2aW5nU3R5bGUgPSAw
LCBDb2xsZWN0aW5nUnVsZXMsIFF1ZXJ5aW5nUnVsZXMsIFNoYXJpbmdSdWxlcywgU3R5bGVJbnZh
bGlkYXRpb24gfTsKIAogICAgIFNlbGVjdG9yQ2hlY2tlcihEb2N1bWVudCYsIE1vZGUpOwogCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVJbnZhbGlkYXRpb25BbmFseXNpcy5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlSW52YWxpZGF0aW9uQW5hbHlzaXMu
Y3BwCShyZXZpc2lvbiAxNjM0NjUpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVJbnZhbGlk
YXRpb25BbmFseXNpcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5LDEwNiArMjksMTAxIEBACiAj
aW5jbHVkZSAiQ1NTU2VsZWN0b3JMaXN0LmgiCiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKICNpbmNs
dWRlICJFbGVtZW50SXRlcmF0b3IuaCIKKyNpbmNsdWRlICJFbGVtZW50UnVsZUNvbGxlY3Rvci5o
IgorI2luY2x1ZGUgIlNlbGVjdG9yRmlsdGVyLmgiCiAjaW5jbHVkZSAiU3R5bGVSdWxlSW1wb3J0
LmgiCiAjaW5jbHVkZSAiU3R5bGVTaGVldENvbnRlbnRzLmgiCi0jaW5jbHVkZSAiU3R5bGVkRWxl
bWVudC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLVN0eWxlSW52YWxpZGF0aW9uQW5hbHlz
aXM6OlN0eWxlSW52YWxpZGF0aW9uQW5hbHlzaXMoY29uc3QgVmVjdG9yPFN0eWxlU2hlZXRDb250
ZW50cyo+JiBzaGVldHMpCi0gICAgOiBtX2RpcnRpZXNBbGxTdHlsZShmYWxzZSkKLXsKLSAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2hlZXRzLnNpemUoKSAmJiAhbV9kaXJ0aWVzQWxsU3R5
bGU7ICsraSkKLSAgICAgICAgYW5hbHl6ZVN0eWxlU2hlZXQoc2hlZXRzW2ldKTsKLX0KIAotc3Rh
dGljIGJvb2wgZGV0ZXJtaW5lU2VsZWN0b3JTY29wZXMoY29uc3QgQ1NTU2VsZWN0b3JMaXN0JiBz
ZWxlY3Rvckxpc3QsIEhhc2hTZXQ8QXRvbWljU3RyaW5nSW1wbCo+JiBpZFNjb3BlcywgSGFzaFNl
dDxBdG9taWNTdHJpbmdJbXBsKj4mIGNsYXNzU2NvcGVzKQorc3RhdGljIGJvb2wgc2hvdWxkRGly
dHlBbGxTdHlsZShjb25zdCBWZWN0b3I8UmVmUHRyPFN0eWxlUnVsZUJhc2U+PiBydWxlcykKIHsK
LSAgICBmb3IgKGNvbnN0IENTU1NlbGVjdG9yKiBzZWxlY3RvciA9IHNlbGVjdG9yTGlzdC5maXJz
dCgpOyBzZWxlY3Rvcjsgc2VsZWN0b3IgPSBDU1NTZWxlY3Rvckxpc3Q6Om5leHQoc2VsZWN0b3Ip
KSB7Ci0gICAgICAgIGNvbnN0IENTU1NlbGVjdG9yKiBzY29wZVNlbGVjdG9yID0gMDsKLSAgICAg
ICAgLy8gVGhpcyBwaWNrcyB0aGUgd2lkZXN0IHNjb3BlLCBub3QgdGhlIG5hcnJvd2VzdCwgdG8g
bWluaW1pemUgdGhlIG51bWJlciBvZiBmb3VuZCBzY29wZXMuCi0gICAgICAgIGZvciAoY29uc3Qg
Q1NTU2VsZWN0b3IqIGN1cnJlbnQgPSBzZWxlY3RvcjsgY3VycmVudDsgY3VycmVudCA9IGN1cnJl
bnQtPnRhZ0hpc3RvcnkoKSkgewotICAgICAgICAgICAgLy8gUHJlZmVyIGlkcyBvdmVyIGNsYXNz
ZXMuCi0gICAgICAgICAgICBpZiAoY3VycmVudC0+bV9tYXRjaCA9PSBDU1NTZWxlY3Rvcjo6SWQp
Ci0gICAgICAgICAgICAgICAgc2NvcGVTZWxlY3RvciA9IGN1cnJlbnQ7Ci0gICAgICAgICAgICBl
bHNlIGlmIChjdXJyZW50LT5tX21hdGNoID09IENTU1NlbGVjdG9yOjpDbGFzcyAmJiAoIXNjb3Bl
U2VsZWN0b3IgfHwgc2NvcGVTZWxlY3Rvci0+bV9tYXRjaCAhPSBDU1NTZWxlY3Rvcjo6SWQpKQot
ICAgICAgICAgICAgICAgIHNjb3BlU2VsZWN0b3IgPSBjdXJyZW50OwotICAgICAgICAgICAgQ1NT
U2VsZWN0b3I6OlJlbGF0aW9uIHJlbGF0aW9uID0gY3VycmVudC0+cmVsYXRpb24oKTsKLSAgICAg
ICAgICAgIGlmIChyZWxhdGlvbiAhPSBDU1NTZWxlY3Rvcjo6RGVzY2VuZGFudCAmJiByZWxhdGlv
biAhPSBDU1NTZWxlY3Rvcjo6Q2hpbGQgJiYgcmVsYXRpb24gIT0gQ1NTU2VsZWN0b3I6OlN1YlNl
bGVjdG9yKQotICAgICAgICAgICAgICAgIGJyZWFrOworICAgIGZvciAoYXV0byBydWxlIDogcnVs
ZXMpIHsKKyAgICAgICAgaWYgKHJ1bGUtPmlzTWVkaWFSdWxlKCkpIHsKKyAgICAgICAgICAgIGlm
IChzaG91bGREaXJ0eUFsbFN0eWxlKHN0YXRpY19jYXN0PFN0eWxlUnVsZU1lZGlhJj4oKnJ1bGUp
LmNoaWxkUnVsZXMoKSkpCisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAg
ICBjb250aW51ZTsKICAgICAgICAgfQotICAgICAgICBpZiAoIXNjb3BlU2VsZWN0b3IpCi0gICAg
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIEFTU0VSVChzY29wZVNlbGVjdG9yLT5tX21h
dGNoID09IENTU1NlbGVjdG9yOjpDbGFzcyB8fCBzY29wZVNlbGVjdG9yLT5tX21hdGNoID09IENT
U1NlbGVjdG9yOjpJZCk7Ci0gICAgICAgIGlmIChzY29wZVNlbGVjdG9yLT5tX21hdGNoID09IENT
U1NlbGVjdG9yOjpJZCkKLSAgICAgICAgICAgIGlkU2NvcGVzLmFkZChzY29wZVNlbGVjdG9yLT52
YWx1ZSgpLmltcGwoKSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGNsYXNzU2NvcGVzLmFk
ZChzY29wZVNlbGVjdG9yLT52YWx1ZSgpLmltcGwoKSk7CisgICAgICAgIC8vIEZJWE1FOiBBdCBs
ZWFzdCBmb250IGZhY2VzIGRvbid0IG5lZWQgZnVsbCByZWNhbGMgaW4gYWxsIGNhc2VzLgorICAg
ICAgICBpZiAoIXJ1bGUtPmlzU3R5bGVSdWxlKCkpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
ICAgICB9Ci0gICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIGZhbHNlOwogfQogCi12b2lkIFN0
eWxlSW52YWxpZGF0aW9uQW5hbHlzaXM6OmFuYWx5emVTdHlsZVNoZWV0KFN0eWxlU2hlZXRDb250
ZW50cyogc3R5bGVTaGVldENvbnRlbnRzKQorc3RhdGljIGJvb2wgc2hvdWxkRGlydHlBbGxTdHls
ZShjb25zdCBTdHlsZVNoZWV0Q29udGVudHMmIHNoZWV0KQogewotICAgIEFTU0VSVCghc3R5bGVT
aGVldENvbnRlbnRzLT5pc0xvYWRpbmcoKSk7Ci0KLSAgICAvLyBTZWUgaWYgYWxsIHJ1bGVzIG9u
IHRoZSBzaGVldCBhcmUgc2NvcGVkIHRvIHNvbWUgc3BlY2lmaWMgaWRzIG9yIGNsYXNzZXMuCi0g
ICAgLy8gVGhlbiB0ZXN0IGlmIHdlIGFjdHVhbGx5IGhhdmUgYW55IG9mIHRob3NlIGluIHRoZSB0
cmVlIGF0IHRoZSBtb21lbnQuCi0gICAgY29uc3QgVmVjdG9yPFJlZlB0cjxTdHlsZVJ1bGVJbXBv
cnQ+PiYgaW1wb3J0UnVsZXMgPSBzdHlsZVNoZWV0Q29udGVudHMtPmltcG9ydFJ1bGVzKCk7Ci0g
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGltcG9ydFJ1bGVzLnNpemUoKTsgKytpKSB7Ci0g
ICAgICAgIGlmICghaW1wb3J0UnVsZXNbaV0tPnN0eWxlU2hlZXQoKSkKKyAgICBmb3IgKGF1dG8g
aW1wb3J0IDogc2hlZXQuaW1wb3J0UnVsZXMoKSkgeworICAgICAgICBpZiAoIWltcG9ydC0+c3R5
bGVTaGVldCgpKQogICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIGFuYWx5emVTdHlsZVNo
ZWV0KGltcG9ydFJ1bGVzW2ldLT5zdHlsZVNoZWV0KCkpOwotICAgICAgICBpZiAobV9kaXJ0aWVz
QWxsU3R5bGUpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGNvbnN0IFZlY3RvcjxS
ZWZQdHI8U3R5bGVSdWxlQmFzZT4+JiBydWxlcyA9IHN0eWxlU2hlZXRDb250ZW50cy0+Y2hpbGRS
dWxlcygpOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBydWxlcy5zaXplKCk7IGkrKykg
ewotICAgICAgICBTdHlsZVJ1bGVCYXNlKiBydWxlID0gcnVsZXNbaV0uZ2V0KCk7Ci0gICAgICAg
IGlmICghcnVsZS0+aXNTdHlsZVJ1bGUoKSkgewotICAgICAgICAgICAgLy8gRklYTUU6IE1lZGlh
IHJ1bGVzIGFuZCBtYXliZSBzb21lIG90aGVycyBjb3VsZCBiZSBhbGxvd2VkLgotICAgICAgICAg
ICAgbV9kaXJ0aWVzQWxsU3R5bGUgPSB0cnVlOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAg
ICB9Ci0gICAgICAgIFN0eWxlUnVsZSogc3R5bGVSdWxlID0gc3RhdGljX2Nhc3Q8U3R5bGVSdWxl
Kj4ocnVsZSk7Ci0gICAgICAgIGlmICghZGV0ZXJtaW5lU2VsZWN0b3JTY29wZXMoc3R5bGVSdWxl
LT5zZWxlY3Rvckxpc3QoKSwgbV9pZFNjb3BlcywgbV9jbGFzc1Njb3BlcykpIHsKLSAgICAgICAg
ICAgIG1fZGlydGllc0FsbFN0eWxlID0gdHJ1ZTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAg
ICAgfQorICAgICAgICBpZiAoc2hvdWxkRGlydHlBbGxTdHlsZSgqaW1wb3J0LT5zdHlsZVNoZWV0
KCkpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQorICAgIGlmIChzaG91bGREaXJ0
eUFsbFN0eWxlKHNoZWV0LmNoaWxkUnVsZXMoKSkpCisgICAgICAgIHJldHVybiB0cnVlOworICAg
IHJldHVybiBmYWxzZTsKIH0KIAotc3RhdGljIGJvb2wgZWxlbWVudE1hdGNoZXNTZWxlY3RvclNj
b3Blcyhjb25zdCBFbGVtZW50JiBlbGVtZW50LCBjb25zdCBIYXNoU2V0PEF0b21pY1N0cmluZ0lt
cGwqPiYgaWRTY29wZXMsIGNvbnN0IEhhc2hTZXQ8QXRvbWljU3RyaW5nSW1wbCo+JiBjbGFzc1Nj
b3BlcykKK3N0YXRpYyBib29sIHNob3VsZERpcnR5QWxsU3R5bGUoY29uc3QgVmVjdG9yPFN0eWxl
U2hlZXRDb250ZW50cyo+JiBzaGVldHMpCiB7Ci0gICAgaWYgKCFpZFNjb3Blcy5pc0VtcHR5KCkg
JiYgZWxlbWVudC5oYXNJRCgpICYmIGlkU2NvcGVzLmNvbnRhaW5zKGVsZW1lbnQuaWRGb3JTdHls
ZVJlc29sdXRpb24oKS5pbXBsKCkpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICBpZiAoY2xh
c3NTY29wZXMuaXNFbXB0eSgpIHx8ICFlbGVtZW50Lmhhc0NsYXNzKCkpCi0gICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICBjb25zdCBTcGFjZVNwbGl0U3RyaW5nJiBjbGFzc05hbWVzID0gZWxlbWVu
dC5jbGFzc05hbWVzKCk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGNsYXNzTmFtZXMu
c2l6ZSgpOyArK2kpIHsKLSAgICAgICAgaWYgKGNsYXNzU2NvcGVzLmNvbnRhaW5zKGNsYXNzTmFt
ZXNbaV0uaW1wbCgpKSkKKyAgICBmb3IgKGF1dG8gc2hlZXQgOiBzaGVldHMpIHsKKyAgICAgICAg
aWYgKHNob3VsZERpcnR5QWxsU3R5bGUoKnNoZWV0KSkKICAgICAgICAgICAgIHJldHVybiB0cnVl
OwogICAgIH0KICAgICByZXR1cm4gZmFsc2U7CiB9CiAKK1N0eWxlSW52YWxpZGF0aW9uQW5hbHlz
aXM6OlN0eWxlSW52YWxpZGF0aW9uQW5hbHlzaXMoY29uc3QgVmVjdG9yPFN0eWxlU2hlZXRDb250
ZW50cyo+JiBzaGVldHMsIGNvbnN0IE1lZGlhUXVlcnlFdmFsdWF0b3ImIG1lZGlhUXVlcnlFdmFs
dWF0b3IpCisgICAgOiBtX2RpcnRpZXNBbGxTdHlsZShzaG91bGREaXJ0eUFsbFN0eWxlKHNoZWV0
cykpCit7CisgICAgaWYgKG1fZGlydGllc0FsbFN0eWxlKQorICAgICAgICByZXR1cm47CisKKyAg
ICBtX3J1bGVTZXRzLnJlc2V0QXV0aG9yU3R5bGUoKTsKKyAgICBmb3IgKGF1dG8gc2hlZXQgOiBz
aGVldHMpCisgICAgICAgIG1fcnVsZVNldHMuYXV0aG9yU3R5bGUoKS0+YWRkUnVsZXNGcm9tU2hl
ZXQoc2hlZXQsIG1lZGlhUXVlcnlFdmFsdWF0b3IpOworCisgICAgaWYgKG1fcnVsZVNldHMuYXV0
aG9yU3R5bGUoKS0+aGFzU2hhZG93UHNldWRvRWxlbWVudFJ1bGVzKCkpCisgICAgICAgIG1fZGly
dGllc0FsbFN0eWxlID0gdHJ1ZTsKK30KKworCitzdGF0aWMgdm9pZCBpbnZhbGlkYXRlU3R5bGVS
ZWN1cnNpdmVseShFbGVtZW50JiBlbGVtZW50LCBTZWxlY3RvckZpbHRlciYgZmlsdGVyLCBjb25z
dCBEb2N1bWVudFJ1bGVTZXRzJiBydWxlU2V0cykKK3sKKyAgICBpZiAoZWxlbWVudC5zdHlsZUNo
YW5nZVR5cGUoKSA+IElubGluZVN0eWxlQ2hhbmdlKQorICAgICAgICByZXR1cm47CisgICAgaWYg
KGVsZW1lbnQuc3R5bGVDaGFuZ2VUeXBlKCkgPT0gTm9TdHlsZUNoYW5nZSkgeworICAgICAgICBF
bGVtZW50UnVsZUNvbGxlY3RvciBydWxlQ29sbGVjdG9yKGVsZW1lbnQsIG51bGxwdHIsIHJ1bGVT
ZXRzLCBmaWx0ZXIpOworICAgICAgICBydWxlQ29sbGVjdG9yLnNldE1vZGUoU2VsZWN0b3JDaGVj
a2VyOjpTdHlsZUludmFsaWRhdGlvbik7CisgICAgICAgIHJ1bGVDb2xsZWN0b3IubWF0Y2hBdXRo
b3JSdWxlcyhmYWxzZSk7CisKKyAgICAgICAgaWYgKHJ1bGVDb2xsZWN0b3IuaGFzTWF0Y2hlZFJ1
bGVzKCkpCisgICAgICAgICAgICBlbGVtZW50LnNldE5lZWRzU3R5bGVSZWNhbGMoSW5saW5lU3R5
bGVDaGFuZ2UpOworICAgIH0KKworICAgIGF1dG8gY2hpbGRyZW4gPSBjaGlsZHJlbk9mVHlwZTxF
bGVtZW50PihlbGVtZW50KTsKKyAgICBpZiAoIWNoaWxkcmVuLmZpcnN0KCkpCisgICAgICAgIHJl
dHVybjsKKyAgICBmaWx0ZXIucHVzaFBhcmVudCgmZWxlbWVudCk7CisgICAgZm9yIChhdXRvJiBj
aGlsZCA6IGNoaWxkcmVuKQorICAgICAgICBpbnZhbGlkYXRlU3R5bGVSZWN1cnNpdmVseShjaGls
ZCwgZmlsdGVyLCBydWxlU2V0cyk7CisgICAgZmlsdGVyLnBvcFBhcmVudCgpOworfQorCiB2b2lk
IFN0eWxlSW52YWxpZGF0aW9uQW5hbHlzaXM6OmludmFsaWRhdGVTdHlsZShEb2N1bWVudCYgZG9j
dW1lbnQpCiB7CiAgICAgQVNTRVJUKCFtX2RpcnRpZXNBbGxTdHlsZSk7Ci0gICAgaWYgKG1faWRT
Y29wZXMuaXNFbXB0eSgpICYmIG1fY2xhc3NTY29wZXMuaXNFbXB0eSgpKQorICAgIGlmICghbV9y
dWxlU2V0cy5hdXRob3JTdHlsZSgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBhdXRvIGl0ID0g
ZGVzY2VuZGFudHNPZlR5cGU8RWxlbWVudD4oZG9jdW1lbnQpLmJlZ2luKCk7Ci0gICAgYXV0byBl
bmQgPSBkZXNjZW5kYW50c09mVHlwZTxFbGVtZW50Pihkb2N1bWVudCkuZW5kKCk7Ci0gICAgd2hp
bGUgKGl0ICE9IGVuZCkgewotICAgICAgICBpZiAoZWxlbWVudE1hdGNoZXNTZWxlY3RvclNjb3Bl
cygqaXQsIG1faWRTY29wZXMsIG1fY2xhc3NTY29wZXMpKSB7Ci0gICAgICAgICAgICBpdC0+c2V0
TmVlZHNTdHlsZVJlY2FsYygpOwotICAgICAgICAgICAgLy8gVGhlIHdob2xlIHN1YnRyZWUgaXMg
bm93IGludmFsaWRhdGVkLCB3ZSBjYW4gc2tpcCB0byB0aGUgbmV4dCBzaWJsaW5nLgotICAgICAg
ICAgICAgaXQudHJhdmVyc2VOZXh0U2tpcHBpbmdDaGlsZHJlbigpOwotICAgICAgICAgICAgY29u
dGludWU7Ci0gICAgICAgIH0KLSAgICAgICAgKytpdDsKLSAgICB9CisgICAgRWxlbWVudCogZG9j
dW1lbnRFbGVtZW50ID0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KCk7CisgICAgaWYgKCFkb2N1
bWVudEVsZW1lbnQpCisgICAgICAgIHJldHVybjsKKworICAgIFNlbGVjdG9yRmlsdGVyIGZpbHRl
cjsKKyAgICBmaWx0ZXIuc2V0dXBQYXJlbnRTdGFjayhkb2N1bWVudEVsZW1lbnQpOworICAgIGlu
dmFsaWRhdGVTdHlsZVJlY3Vyc2l2ZWx5KCpkb2N1bWVudEVsZW1lbnQsIGZpbHRlciwgbV9ydWxl
U2V0cyk7CiB9CiAKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZUludmFsaWRhdGlv
bkFuYWx5c2lzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlSW52YWxp
ZGF0aW9uQW5hbHlzaXMuaAkocmV2aXNpb24gMTYzNDY1KQorKysgU291cmNlL1dlYkNvcmUvY3Nz
L1N0eWxlSW52YWxpZGF0aW9uQW5hbHlzaXMuaAkod29ya2luZyBjb3B5KQpAQCAtMjYsNiArMjYs
NyBAQAogI2lmbmRlZiBTdHlsZUludmFsaWRhdGlvbkFuYWx5c2lzX2gKICNkZWZpbmUgU3R5bGVJ
bnZhbGlkYXRpb25BbmFseXNpc19oCiAKKyNpbmNsdWRlICJEb2N1bWVudFJ1bGVTZXRzLmgiCiAj
aW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9BdG9taWNTdHJpbmdJ
bXBsLmg+CiAKQEAgLTM2LDE4ICszNywxNCBAQCBjbGFzcyBTdHlsZVNoZWV0Q29udGVudHM7CiAK
IGNsYXNzIFN0eWxlSW52YWxpZGF0aW9uQW5hbHlzaXMgewogcHVibGljOgotICAgIFN0eWxlSW52
YWxpZGF0aW9uQW5hbHlzaXMoY29uc3QgVmVjdG9yPFN0eWxlU2hlZXRDb250ZW50cyo+Jik7Cisg
ICAgU3R5bGVJbnZhbGlkYXRpb25BbmFseXNpcyhjb25zdCBWZWN0b3I8U3R5bGVTaGVldENvbnRl
bnRzKj4mLCBjb25zdCBNZWRpYVF1ZXJ5RXZhbHVhdG9yJik7CiAKICAgICBib29sIGRpcnRpZXNB
bGxTdHlsZSgpIGNvbnN0IHsgcmV0dXJuIG1fZGlydGllc0FsbFN0eWxlOyB9CiAgICAgdm9pZCBp
bnZhbGlkYXRlU3R5bGUoRG9jdW1lbnQmKTsKIAogcHJpdmF0ZToKLQotICAgIHZvaWQgYW5hbHl6
ZVN0eWxlU2hlZXQoU3R5bGVTaGVldENvbnRlbnRzKik7Ci0KICAgICBib29sIG1fZGlydGllc0Fs
bFN0eWxlOwotICAgIEhhc2hTZXQ8QXRvbWljU3RyaW5nSW1wbCo+IG1faWRTY29wZXM7Ci0gICAg
SGFzaFNldDxBdG9taWNTdHJpbmdJbXBsKj4gbV9jbGFzc1Njb3BlczsKKyAgICBEb2N1bWVudFJ1
bGVTZXRzIG1fcnVsZVNldHM7CiB9OwogCiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvU3R5
bGVSZXNvbHZlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVz
b2x2ZXIuY3BwCShyZXZpc2lvbiAxNjM0NzUpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVS
ZXNvbHZlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM2NTgsNyArMzY1OCw3IEBAIGlubGluZSBT
dHlsZVJlc29sdmVyOjpNYXRjaGVkUHJvcGVydGllczoKIHsKIH0KIAotaW5saW5lIFN0eWxlUmVz
b2x2ZXI6Ok1hdGNoZWRQcm9wZXJ0aWVzOjp+TWF0Y2hlZFByb3BlcnRpZXMoKQorU3R5bGVSZXNv
bHZlcjo6TWF0Y2hlZFByb3BlcnRpZXM6On5NYXRjaGVkUHJvcGVydGllcygpCiB7CiB9CiAKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVyLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIuaAkocmV2aXNpb24gMTYzNDY1KQorKysgU291
cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMTY4LDYg
KzE2OCw4IEBAIHB1YmxpYzoKICAgICBjb25zdCBEb2N1bWVudFJ1bGVTZXRzJiBydWxlU2V0cygp
IGNvbnN0IHsgcmV0dXJuIG1fcnVsZVNldHM7IH0KICAgICBTZWxlY3RvckZpbHRlciYgc2VsZWN0
b3JGaWx0ZXIoKSB7IHJldHVybiBtX3NlbGVjdG9yRmlsdGVyOyB9CiAKKyAgICBjb25zdCBNZWRp
YVF1ZXJ5RXZhbHVhdG9yJiBtZWRpYVF1ZXJ5RXZhbHVhdG9yKCkgY29uc3QgeyByZXR1cm4gKm1f
bWVkaXVtOyB9CisKIHByaXZhdGU6CiAgICAgdm9pZCBpbml0RWxlbWVudChFbGVtZW50Kik7CiAg
ICAgUmVuZGVyU3R5bGUqIGxvY2F0ZVNoYXJlZFN0eWxlKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9kb20vRG9jdW1lbnRTdHlsZVNoZWV0Q29sbGVjdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50U3R5bGVTaGVldENvbGxlY3Rpb24uY3BwCShyZXZpc2lv
biAxNjM0NjUpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnRTdHlsZVNoZWV0Q29sbGVj
dGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM2Niw2ICszNjYsNyBAQCB2b2lkIERvY3VtZW50
U3R5bGVTaGVldENvbGxlY3Rpb246OmFuYWx5CiAgICAgICAgIHJldHVybjsKICAgICBpZiAoIW1f
ZG9jdW1lbnQuc3R5bGVSZXNvbHZlcklmRXhpc3RzKCkpCiAgICAgICAgIHJldHVybjsKKyAgICBT
dHlsZVJlc29sdmVyJiBzdHlsZVJlc29sdmVyID0gKm1fZG9jdW1lbnQuc3R5bGVSZXNvbHZlcklm
RXhpc3RzKCk7CiAKICAgICAvLyBGaW5kIG91dCB3aGljaCBzdHlsZXNoZWV0cyBhcmUgbmV3Lgog
ICAgIHVuc2lnbmVkIG9sZFN0eWxlc2hlZXRDb3VudCA9IG1fYWN0aXZlQXV0aG9yU3R5bGVTaGVl
dHMuc2l6ZSgpOwpAQCAtMzk2LDcgKzM5Nyw3IEBAIHZvaWQgRG9jdW1lbnRTdHlsZVNoZWV0Q29s
bGVjdGlvbjo6YW5hbHkKICAgICAvLyBJZiB3ZSBhcmUgYWxyZWFkeSBwYXJzaW5nIHRoZSBib2R5
IGFuZCBzbyBtYXkgaGF2ZSBzaWduaWZpY2FudCBhbW91bnQgb2YgZWxlbWVudHMsIHB1dCBzb21l
IGVmZm9ydCBpbnRvIHRyeWluZyB0byBhdm9pZCBzdHlsZSByZWNhbGNzLgogICAgIGlmICghbV9k
b2N1bWVudC5ib2R5KCkgfHwgbV9kb2N1bWVudC5oYXNOb2Rlc1dpdGhQbGFjZWhvbGRlclN0eWxl
KCkpCiAgICAgICAgIHJldHVybjsKLSAgICBTdHlsZUludmFsaWRhdGlvbkFuYWx5c2lzIGludmFs
aWRhdGlvbkFuYWx5c2lzKGFkZGVkU2hlZXRzKTsKKyAgICBTdHlsZUludmFsaWRhdGlvbkFuYWx5
c2lzIGludmFsaWRhdGlvbkFuYWx5c2lzKGFkZGVkU2hlZXRzLCBzdHlsZVJlc29sdmVyLm1lZGlh
UXVlcnlFdmFsdWF0b3IoKSk7CiAgICAgaWYgKGludmFsaWRhdGlvbkFuYWx5c2lzLmRpcnRpZXNB
bGxTdHlsZSgpKQogICAgICAgICByZXR1cm47CiAgICAgaW52YWxpZGF0aW9uQW5hbHlzaXMuaW52
YWxpZGF0ZVN0eWxlKG1fZG9jdW1lbnQpOwo=
</data>
<flag name="review"
          id="247373"
          type_id="1"
          status="+"
          setter="kling"
    />
          </attachment>
      

    </bug>

</bugzilla>