<?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>76337</bug_id>
          
          <creation_ts>2012-01-14 11:20:55 -0800</creation_ts>
          <short_desc>Cache CSSStyleSelector::Features in RuleSets</short_desc>
          <delta_ts>2012-01-16 14:46:21 -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>CSS</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>kling</cc>
    
    <cc>macpherson</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>536200</commentid>
    <comment_count>0</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2012-01-14 11:20:55 -0800</bug_when>
    <thetext>Currently whenever the style selector is updated we go through all the applicable rules and collect the used features again. We should keep the features around as part of the RuleSets and update them incrementally. Collecting the features will then be just a matter of taking the union of all features used by the RuleSets.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>536203</commentid>
    <comment_count>1</comment_count>
      <attachid>122554</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2012-01-14 12:03:06 -0800</bug_when>
    <thetext>Created attachment 122554
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>536205</commentid>
    <comment_count>2</comment_count>
      <attachid>122554</attachid>
    <who name="Andreas Kling">kling</who>
    <bug_when>2012-01-14 12:26:28 -0800</bug_when>
    <thetext>Comment on attachment 122554
patch

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

Dumping superficial comments since you have to reup anyway.

&gt; Source/WebCore/ChangeLog:13
&gt; +        This is 1-2% CPU time reduction (engadged, nytimes) due less time spent in feature collection.

Typo, engadget.

&gt; Source/WebCore/ChangeLog:25
&gt; +            Add a field far caching the features.

Typo, for.

&gt; Source/WebCore/css/CSSStyleSelector.cpp:225
&gt; +    void addRule(CSSStyleRule* , CSSSelector*);

Extra space after CSSStyleRule*.

&gt; Source/WebCore/css/CSSStyleSelector.cpp:230
&gt; +    

Extra whitespace.

&gt; Source/WebCore/css/CSSStyleSelector.cpp:1950
&gt; +    if (selector-&gt;m_match == CSSSelector::Id &amp;&amp; !selector-&gt;value().isEmpty())

I suspect selector-&gt;value() can&apos;t be empty if selector-&gt;m_match == CSSSelector::Id.
No need to change that in this patch as you&apos;re just moving the code though.

&gt; Source/WebCore/css/CSSStyleSelector.cpp:1980
&gt; +                if (selector-&gt;isSiblingSelector())
&gt; +                    foundSiblingSelector = true;

You could change this to:
if (!foundSiblingSelector &amp;&amp; selector-&gt;isSiblingSelector())
To avoid wasting cycles after a first sibling selector is found.

&gt; Source/WebCore/css/CSSStyleSelector.h:225
&gt; +    struct RuleSelectorPair {
&gt; +        RuleSelectorPair(CSSStyleRule* rule, CSSSelector* selector) : rule(rule), selector(selector) { }

Seems like we should either hide RuleSelectorPair() or make it initialize rule and selector as null pointers.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>536516</commentid>
    <comment_count>3</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2012-01-16 06:07:04 -0800</bug_when>
    <thetext>(In reply to comment #2)
&gt; &gt; Source/WebCore/css/CSSStyleSelector.h:225
&gt; &gt; +    struct RuleSelectorPair {
&gt; &gt; +        RuleSelectorPair(CSSStyleRule* rule, CSSSelector* selector) : rule(rule), selector(selector) { }
&gt; 
&gt; Seems like we should either hide RuleSelectorPair() or make it initialize rule and selector as null pointers.

I think it is better to keep simple structs simple. The constructor is there for convenience only.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>536748</commentid>
    <comment_count>4</comment_count>
      <attachid>122681</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2012-01-16 13:56:10 -0800</bug_when>
    <thetext>Created attachment 122681
updated to tot</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>536755</commentid>
    <comment_count>5</comment_count>
      <attachid>122681</attachid>
    <who name="Andreas Kling">kling</who>
    <bug_when>2012-01-16 14:09:28 -0800</bug_when>
    <thetext>Comment on attachment 122681
updated to tot

r=muppet</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>536757</commentid>
    <comment_count>6</comment_count>
      <attachid>122681</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2012-01-16 14:13:15 -0800</bug_when>
    <thetext>Comment on attachment 122681
updated to tot

Attachment 122681 did not pass qt-ews (qt):
Output: http://queues.webkit.org/results/11254319</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>536764</commentid>
    <comment_count>7</comment_count>
      <attachid>122685</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2012-01-16 14:29:44 -0800</bug_when>
    <thetext>Created attachment 122685
build fix for bots</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>536771</commentid>
    <comment_count>8</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2012-01-16 14:46:21 -0800</bug_when>
    <thetext>http://trac.webkit.org/changeset/105093</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>122554</attachid>
            <date>2012-01-14 12:03:06 -0800</date>
            <delta_ts>2012-01-16 13:56:10 -0800</delta_ts>
            <desc>patch</desc>
            <filename>styleselector-features-merge-3.patch</filename>
            <type>text/plain</type>
            <size>21570</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEwNTAyMSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDUzIEBACisyMDEyLTAxLTE0ICBBbnR0aSBL
b2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KKworICAgICAgICBDYWNoZSBDU1NTdHlsZVNlbGVj
dG9yOjpGZWF0dXJlcyBpbiBSdWxlU2V0cworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9NzYzMzcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBDdXJyZW50bHkgd2hlbmV2ZXIgdGhlIHN0eWxlIHNlbGVjdG9yIGlz
IHVwZGF0ZWQgd2UgZ28gdGhyb3VnaCBhbGwgdGhlIGFwcGxpY2FibGUgcnVsZXMgYW5kCisgICAg
ICAgIGNvbGxlY3QgdGhlIHVzZWQgZmVhdHVyZXMgYWdhaW4uIFdlIHNob3VsZCBrZWVwIHRoZSBm
ZWF0dXJlcyBhcm91bmQgYXMgcGFydCBvZiB0aGUgUnVsZVNldHMKKyAgICAgICAgYW5kIHVwZGF0
ZSB0aGVtIGluY3JlbWVudGFsbHkuIENvbGxlY3RpbmcgdGhlIGZlYXR1cmVzIHdpbGwgdGhlbiBi
ZSBqdXN0IGEgbWF0dGVyIG9mIHRha2luZworICAgICAgICB0aGUgdW5pb24gb2YgYWxsIGZlYXR1
cmVzIHVzZWQgYnkgdGhlIFJ1bGVTZXRzLgorICAgICAgICAKKyAgICAgICAgVGhpcyBpcyAxLTIl
IENQVSB0aW1lIHJlZHVjdGlvbiAoZW5nYWRnZWQsIG55dGltZXMpIGR1ZSBsZXNzIHRpbWUgc3Bl
bnQgaW4gZmVhdHVyZSBjb2xsZWN0aW9uLgorICAgICAgICAKKyAgICAgICAgVGhpcyBhbHNvIHNp
bXBsaWZpZXMgdGhlIGNvZGUgYnkgcmVtb3ZpbmcgdGhlIG5lZWQgdG8gY2FjaGUgdGhlIGRlZmF1
bHQgc3R5bGUgc2hlZXQgZmVhdHVyZXMKKyAgICAgICAgc2VwYXJhdGVseS4gCisKKyAgICAgICAg
KiBjc3MvQ1NTU3R5bGVTZWxlY3Rvci5jcHA6CisgICAgICAgIAorICAgICAgICAgICAgUmVtb3Zl
IHRoZSBnbG9iYWwgc2libGluZ1J1bGVzSW5EZWZhdWx0U3R5bGUgYW5kIHVuY29tbW9uQXR0cmli
dXRlUnVsZXNJbkRlZmF1bHRTdHlsZSBSdWxlU2V0cy4KKyAgICAgICAgICAgIFRoZXNlIGFyZSBu
b3cgcGFydCBvZiB0aGUgY2FjaGVkIGZlYXR1cmVzIG9mIHRoZSBkZWZhdWx0U3R5bGUuCisgICAg
ICAgIAorICAgICAgICAoV2ViQ29yZTo6UnVsZVNldDo6ZmVhdHVyZXMpOgorICAgICAgICAKKyAg
ICAgICAgICAgIEFkZCBhIGZpZWxkIGZhciBjYWNoaW5nIHRoZSBmZWF0dXJlcy4KKyAgICAgICAg
CisgICAgICAgIChXZWJDb3JlOjptYWtlUnVsZVNldCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NT
dHlsZVNlbGVjdG9yOjpjb2xsZWN0RmVhdHVyZXMpOgorICAgICAgICAKKyAgICAgICAgICAgIFVu
aWZ5IHRoZSBmZWF0dXJlcyBvZiBhbGwgUnVsZVNldHMuCisgICAgICAgICAgICBDcmVhdGUgUnVs
ZVNldHMgZm9yIHNpYmxpbmcgYW5kIHVuY29tbW9uIGF0dHJpYnV0ZSBsb29rdXBzIGF0IHRoZSBl
bmQuCisgICAgICAgIAorICAgICAgICAoV2ViQ29yZTo6Q1NTU3R5bGVTZWxlY3Rvcjo6YXBwZW5k
QXV0aG9yU3R5bGVzaGVldHMpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTU3R5bGVTZWxlY3Rvcjo6
RmVhdHVyZXM6OmFkZCk6CisgICAgICAgIChXZWJDb3JlOjplbnN1cmVEZWZhdWx0U3R5bGVTaGVl
dHNGb3JFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1N0eWxlU2VsZWN0b3I6OmxvY2F0
ZVNoYXJlZFN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OmNvbGxlY3RGZWF0dXJlc0Zyb21TZWxl
Y3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpjb2xsZWN0RmVhdHVyZXNGcm9tUnVsZURhdGEpOgor
ICAgICAgICAoV2ViQ29yZTo6UnVsZVNldDo6YWRkVG9SdWxlU2V0KToKKyAgICAgICAgKFdlYkNv
cmU6OlJ1bGVTZXQ6OmFkZFJ1bGUpOgorICAgICAgICAKKyAgICAgICAgICAgIENvbGxlY3QgdGhl
IGZlYXR1cmVzIHdoZW4gYWRkaW5nIHRoZSBydWxlcyByYXRoZXIgdGhhbiBhcyBhIHNlcGFyYXRl
IHBhc3MgdGhyb3VnaCBhbGwgdGhlIHJ1bGVzLgorICAgICAgICAKKyAgICAgICAgKiBjc3MvQ1NT
U3R5bGVTZWxlY3Rvci5oOgorICAgICAgICAoV2ViQ29yZTo6Q1NTU3R5bGVTZWxlY3Rvcjo6dXNl
c1NpYmxpbmdSdWxlcyk6CisgICAgICAgIChXZWJDb3JlOjpDU1NTdHlsZVNlbGVjdG9yOjpSdWxl
U2VsZWN0b3JQYWlyOjpSdWxlU2VsZWN0b3JQYWlyKToKKyAgICAgICAgCisgICAgICAgICAgICBV
c2UgVmVjdG9yIGluc3RlYWQgb2YgYSBSdWxlU2V0IGZvciBzaWJsaW5nIGFuZCB1bmNvbW1vbiBh
dHRyaWJ1dGUgc2VsZWN0b3JzIHNvIHVuaWZ5aW5nCisgICAgICAgICAgICBGZWF0dXJlcyBpcyBz
aW1wbGVyLgorCiAyMDExLTExLTA5ICBSb2JlcnQgSG9nYW4gIDxyb2JlcnRAd2Via2l0Lm9yZz4K
IAogICAgICAgICBDU1MgMi4xIGZhaWx1cmU6IG91dGxpbmUtY29sb3ItYXBwbGllcy10byogdGVz
dHMgZmFpbApJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL0NTU1N0eWxlU2VsZWN0b3IuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTdHlsZVNlbGVjdG9yLmNwcAkocmV2
aXNpb24gMTA0OTEwKQorKysgU291cmNlL1dlYkNvcmUvY3NzL0NTU1N0eWxlU2VsZWN0b3IuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yMjEsMTQgKzIyMSwxNCBAQCBwdWJsaWM6CiAKICAgICB2b2lk
IGFkZFJ1bGVzRnJvbVNoZWV0KENTU1N0eWxlU2hlZXQqLCBjb25zdCBNZWRpYVF1ZXJ5RXZhbHVh
dG9yJiwgQ1NTU3R5bGVTZWxlY3RvciogPSAwKTsKIAotICAgIHZvaWQgYWRkU3R5bGVSdWxlKENT
U1N0eWxlUnVsZSogaXRlbSk7Ci0gICAgdm9pZCBhZGRSdWxlKENTU1N0eWxlUnVsZSogcnVsZSwg
Q1NTU2VsZWN0b3IqIHNlbCk7CisgICAgdm9pZCBhZGRTdHlsZVJ1bGUoQ1NTU3R5bGVSdWxlKik7
CisgICAgdm9pZCBhZGRSdWxlKENTU1N0eWxlUnVsZSogLCBDU1NTZWxlY3RvciopOwogICAgIHZv
aWQgYWRkUGFnZVJ1bGUoQ1NTUGFnZVJ1bGUqKTsKLSAgICB2b2lkIGFkZFRvUnVsZVNldChBdG9t
aWNTdHJpbmdJbXBsKiBrZXksIEF0b21SdWxlTWFwJiwgQ1NTU3R5bGVSdWxlKiwgQ1NTU2VsZWN0
b3IqKTsKKyAgICB2b2lkIGFkZFRvUnVsZVNldChBdG9taWNTdHJpbmdJbXBsKiBrZXksIEF0b21S
dWxlTWFwJiwgY29uc3QgUnVsZURhdGEmKTsKICAgICB2b2lkIHNocmlua1RvRml0KCk7CiAgICAg
dm9pZCBkaXNhYmxlQXV0b1Nocmlua1RvRml0KCkgeyBtX2F1dG9TaHJpbmtUb0ZpdEVuYWJsZWQg
PSBmYWxzZTsgfQotCi0gICAgdm9pZCBjb2xsZWN0RmVhdHVyZXMoQ1NTU3R5bGVTZWxlY3Rvcjo6
RmVhdHVyZXMmKSBjb25zdDsKKyAgICAKKyAgICBjb25zdCBDU1NTdHlsZVNlbGVjdG9yOjpGZWF0
dXJlcyYgZmVhdHVyZXMoKSBjb25zdCB7IHJldHVybiBtX2ZlYXR1cmVzOyB9CiAKICAgICBjb25z
dCBWZWN0b3I8UnVsZURhdGE+KiBpZFJ1bGVzKEF0b21pY1N0cmluZ0ltcGwqIGtleSkgY29uc3Qg
eyByZXR1cm4gbV9pZFJ1bGVzLmdldChrZXkpOyB9CiAgICAgY29uc3QgVmVjdG9yPFJ1bGVEYXRh
PiogY2xhc3NSdWxlcyhBdG9taWNTdHJpbmdJbXBsKiBrZXkpIGNvbnN0IHsgcmV0dXJuIG1fY2xh
c3NSdWxlcy5nZXQoa2V5KTsgfQpAQCAtMjUwLDYgKzI1MCw3IEBAIHB1YmxpYzoKICAgICBWZWN0
b3I8UnVsZURhdGE+IG1fcGFnZVJ1bGVzOwogICAgIHVuc2lnbmVkIG1fcnVsZUNvdW50OwogICAg
IGJvb2wgbV9hdXRvU2hyaW5rVG9GaXRFbmFibGVkOworICAgIENTU1N0eWxlU2VsZWN0b3I6OkZl
YXR1cmVzIG1fZmVhdHVyZXM7CiB9OwogCiBzdGF0aWMgUnVsZVNldCogZGVmYXVsdFN0eWxlOwpA
QCAtMjU4LDkgKzI1OSw2IEBAIHN0YXRpYyBSdWxlU2V0KiBkZWZhdWx0UHJpbnRTdHlsZTsKIHN0
YXRpYyBSdWxlU2V0KiBkZWZhdWx0Vmlld1NvdXJjZVN0eWxlOwogc3RhdGljIENTU1N0eWxlU2hl
ZXQqIHNpbXBsZURlZmF1bHRTdHlsZVNoZWV0OwogCi1zdGF0aWMgUnVsZVNldCogc2libGluZ1J1
bGVzSW5EZWZhdWx0U3R5bGU7Ci1zdGF0aWMgUnVsZVNldCogdW5jb21tb25BdHRyaWJ1dGVSdWxl
c0luRGVmYXVsdFN0eWxlOwotCiBSZW5kZXJTdHlsZSogQ1NTU3R5bGVTZWxlY3Rvcjo6c19zdHls
ZU5vdFlldEF2YWlsYWJsZTsKIAogc3RhdGljIHZvaWQgbG9hZEZ1bGxEZWZhdWx0U3R5bGUoKTsK
QEAgLTI3MywyNyArMjcxLDYgQEAgc3RhdGljIGlubGluZSBib29sIGVsZW1lbnRDYW5Vc2VTaW1w
bGVEZQogICAgIHJldHVybiBlLT5oYXNUYWdOYW1lKGh0bWxUYWcpIHx8IGUtPmhhc1RhZ05hbWUo
aGVhZFRhZykgfHwgZS0+aGFzVGFnTmFtZShib2R5VGFnKSB8fCBlLT5oYXNUYWdOYW1lKGRpdlRh
ZykgfHwgZS0+aGFzVGFnTmFtZShzcGFuVGFnKSB8fCBlLT5oYXNUYWdOYW1lKGJyVGFnKSB8fCBl
LT5oYXNUYWdOYW1lKGFUYWcpOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgY29sbGVjdFNwZWNp
YWxSdWxlc0luRGVmYXVsdFN0eWxlKCkKLXsKLSAgICBDU1NTdHlsZVNlbGVjdG9yOjpGZWF0dXJl
cyBmZWF0dXJlczsKLSAgICBkZWZhdWx0U3R5bGUtPmNvbGxlY3RGZWF0dXJlcyhmZWF0dXJlcyk7
Ci0gICAgQVNTRVJUKGZlYXR1cmVzLmlkc0luUnVsZXMuaXNFbXB0eSgpKTsKLSAgICBkZWxldGUg
c2libGluZ1J1bGVzSW5EZWZhdWx0U3R5bGU7Ci0gICAgZGVsZXRlIHVuY29tbW9uQXR0cmlidXRl
UnVsZXNJbkRlZmF1bHRTdHlsZTsKLSAgICBzaWJsaW5nUnVsZXNJbkRlZmF1bHRTdHlsZSA9IGZl
YXR1cmVzLnNpYmxpbmdSdWxlcy5sZWFrUHRyKCk7Ci0gICAgdW5jb21tb25BdHRyaWJ1dGVSdWxl
c0luRGVmYXVsdFN0eWxlID0gZmVhdHVyZXMudW5jb21tb25BdHRyaWJ1dGVSdWxlcy5sZWFrUHRy
KCk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBhc3NlcnROb1NpYmxpbmdSdWxlc0luRGVmYXVs
dFN0eWxlKCkKLXsKLSNpZm5kZWYgTkRFQlVHCi0gICAgaWYgKHNpYmxpbmdSdWxlc0luRGVmYXVs
dFN0eWxlKQotICAgICAgICByZXR1cm47Ci0gICAgY29sbGVjdFNwZWNpYWxSdWxlc0luRGVmYXVs
dFN0eWxlKCk7Ci0gICAgQVNTRVJUKCFzaWJsaW5nUnVsZXNJbkRlZmF1bHRTdHlsZSk7Ci0jZW5k
aWYKLX0KLQogc3RhdGljIGNvbnN0IE1lZGlhUXVlcnlFdmFsdWF0b3ImIHNjcmVlbkV2YWwoKQog
ewogICAgIERFRklORV9TVEFUSUNfTE9DQUwoY29uc3QgTWVkaWFRdWVyeUV2YWx1YXRvciwgc3Rh
dGljU2NyZWVuRXZhbCwgKCJzY3JlZW4iKSk7CkBAIC00MjcsMjQgKzQwNCwzMSBAQCBDU1NTdHls
ZVNlbGVjdG9yOjpDU1NTdHlsZVNlbGVjdG9yKERvY3VtCiAgICAgaWYgKGRvY3VtZW50LT5yZW5k
ZXJlcigpICYmIGRvY3VtZW50LT5yZW5kZXJlcigpLT5zdHlsZSgpKQogICAgICAgICBkb2N1bWVu
dC0+cmVuZGVyZXIoKS0+c3R5bGUoKS0+Zm9udCgpLnVwZGF0ZShmb250U2VsZWN0b3IoKSk7CiB9
CisgICAgCitzdGF0aWMgUGFzc093blB0cjxSdWxlU2V0PiBtYWtlUnVsZVNldChjb25zdCBWZWN0
b3I8Q1NTU3R5bGVTZWxlY3Rvcjo6UnVsZVNlbGVjdG9yUGFpcj4mIHJ1bGVzKQoreworICAgIHNp
emVfdCBzaXplID0gcnVsZXMuc2l6ZSgpOworICAgIGlmICghc2l6ZSkKKyAgICAgICAgcmV0dXJu
IG51bGxwdHI7CisgICAgT3duUHRyPFJ1bGVTZXQ+IHJ1bGVTZXQgPSBhZG9wdFB0cihuZXcgUnVs
ZVNldCk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplOyArK2kpCisgICAgICAgIHJ1
bGVTZXQtPmFkZFJ1bGUocnVsZXNbaV0ucnVsZSwgcnVsZXNbaV0uc2VsZWN0b3IpOworICAgIHJl
dHVybiBydWxlU2V0LnJlbGVhc2UoKTsKK30KIAogdm9pZCBDU1NTdHlsZVNlbGVjdG9yOjpjb2xs
ZWN0RmVhdHVyZXMoKQogeworICAgIG1fZmVhdHVyZXMuY2xlYXIoKTsKICAgICAvLyBDb2xsZWN0
IGFsbCBpZHMgYW5kIHJ1bGVzIHVzaW5nIHNpYmxpbmcgc2VsZWN0b3JzICg6Zmlyc3QtY2hpbGQg
YW5kIHNpbWlsYXIpCiAgICAgLy8gaW4gdGhlIGN1cnJlbnQgc2V0IG9mIHN0eWxlc2hlZXRzLiBT
dHlsZSBzaGFyaW5nIGNvZGUgdXNlcyB0aGlzIGluZm9ybWF0aW9uIHRvIHJlamVjdAogICAgIC8v
IHNoYXJpbmcgY2FuZGlkYXRlcy4KLSAgICAvLyBVc3VhbGx5IHRoZXJlIGFyZSBubyBzaWJsaW5n
IHJ1bGVzIGluIHRoZSBkZWZhdWx0IHN0eWxlIGJ1dCB0aGUgTWF0aE1MIHNoZWV0IGhhcyBzb21l
LgotICAgIGlmIChzaWJsaW5nUnVsZXNJbkRlZmF1bHRTdHlsZSkKLSAgICAgICAgc2libGluZ1J1
bGVzSW5EZWZhdWx0U3R5bGUtPmNvbGxlY3RGZWF0dXJlcyhtX2ZlYXR1cmVzKTsKLSAgICBpZiAo
dW5jb21tb25BdHRyaWJ1dGVSdWxlc0luRGVmYXVsdFN0eWxlKQotICAgICAgICB1bmNvbW1vbkF0
dHJpYnV0ZVJ1bGVzSW5EZWZhdWx0U3R5bGUtPmNvbGxlY3RGZWF0dXJlcyhtX2ZlYXR1cmVzKTsK
LSAgICBtX2F1dGhvclN0eWxlLT5jb2xsZWN0RmVhdHVyZXMobV9mZWF0dXJlcyk7CisgICAgbV9m
ZWF0dXJlcy5hZGQoZGVmYXVsdFN0eWxlLT5mZWF0dXJlcygpKTsKKyAgICBtX2ZlYXR1cmVzLmFk
ZChtX2F1dGhvclN0eWxlLT5mZWF0dXJlcygpKTsKICAgICBpZiAobV91c2VyU3R5bGUpCi0gICAg
ICAgIG1fdXNlclN0eWxlLT5jb2xsZWN0RmVhdHVyZXMobV9mZWF0dXJlcyk7Ci0gICAgaWYgKG1f
ZmVhdHVyZXMuc2libGluZ1J1bGVzKQotICAgICAgICBtX2ZlYXR1cmVzLnNpYmxpbmdSdWxlcy0+
c2hyaW5rVG9GaXQoKTsKLSAgICBpZiAobV9mZWF0dXJlcy51bmNvbW1vbkF0dHJpYnV0ZVJ1bGVz
KQotICAgICAgICBtX2ZlYXR1cmVzLnVuY29tbW9uQXR0cmlidXRlUnVsZXMtPnNocmlua1RvRml0
KCk7CisgICAgICAgIG1fZmVhdHVyZXMuYWRkKG1fdXNlclN0eWxlLT5mZWF0dXJlcygpKTsKKwor
ICAgIG1fc2libGluZ1J1bGVTZXQgPSBtYWtlUnVsZVNldChtX2ZlYXR1cmVzLnNpYmxpbmdSdWxl
cyk7CisgICAgbV91bmNvbW1vbkF0dHJpYnV0ZVJ1bGVTZXQgPSBtYWtlUnVsZVNldChtX2ZlYXR1
cmVzLnVuY29tbW9uQXR0cmlidXRlUnVsZXMpOwogfQogCiB2b2lkIENTU1N0eWxlU2VsZWN0b3I6
OmFwcGVuZEF1dGhvclN0eWxlc2hlZXRzKHVuc2lnbmVkIGZpcnN0TmV3LCBjb25zdCBWZWN0b3I8
UmVmUHRyPFN0eWxlU2hlZXQ+ID4mIHN0eWxlc2hlZXRzKQpAQCAtNDU4LDggKzQ0Miw2IEBAIHZv
aWQgQ1NTU3R5bGVTZWxlY3Rvcjo6YXBwZW5kQXV0aG9yU3R5bGUKICAgICAgICAgbV9hdXRob3JT
dHlsZS0+YWRkUnVsZXNGcm9tU2hlZXQoc3RhdGljX2Nhc3Q8Q1NTU3R5bGVTaGVldCo+KHN0eWxl
c2hlZXRzW2ldLmdldCgpKSwgKm1fbWVkaXVtLCB0aGlzKTsKICAgICB9CiAgICAgbV9hdXRob3JT
dHlsZS0+c2hyaW5rVG9GaXQoKTsKLSAgICAvLyBGSVhNRTogVGhpcyByZWFsbHkgb25seSBuZWVk
cyB0byBjb2xsZWN0IHRoZSBmZWF0dXJlcyBmcm9tIHRoZSBuZXdseSBhZGRlZCBzaGVldHMuCi0g
ICAgbV9mZWF0dXJlcy5jbGVhcigpOwogICAgIGNvbGxlY3RGZWF0dXJlcygpOwogICAgIAogICAg
IGlmIChkb2N1bWVudCgpLT5yZW5kZXJlcigpICYmIGRvY3VtZW50KCktPnJlbmRlcmVyKCktPnN0
eWxlKCkpCkBAIC01MTQsNiArNDk2LDIxIEBAIENTU1N0eWxlU2VsZWN0b3I6OkZlYXR1cmVzOjpG
ZWF0dXJlcygpCiBDU1NTdHlsZVNlbGVjdG9yOjpGZWF0dXJlczo6fkZlYXR1cmVzKCkKIHsKIH0K
KyAgICAKK3ZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6RmVhdHVyZXM6OmFkZChjb25zdCBDU1NTdHls
ZVNlbGVjdG9yOjpGZWF0dXJlcyYgb3RoZXIpCit7CisgICAgSGFzaFNldDxBdG9taWNTdHJpbmdJ
bXBsKj46Oml0ZXJhdG9yIGVuZCA9IG90aGVyLmlkc0luUnVsZXMuZW5kKCk7CisgICAgZm9yIChI
YXNoU2V0PEF0b21pY1N0cmluZ0ltcGwqPjo6aXRlcmF0b3IgaXQgPSBvdGhlci5pZHNJblJ1bGVz
LmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKKyAgICAgICAgaWRzSW5SdWxlcy5hZGQoKml0KTsK
KyAgICBlbmQgPSBvdGhlci5hdHRyc0luUnVsZXMuZW5kKCk7CisgICAgZm9yIChIYXNoU2V0PEF0
b21pY1N0cmluZ0ltcGwqPjo6aXRlcmF0b3IgaXQgPSBvdGhlci5hdHRyc0luUnVsZXMuYmVnaW4o
KTsgaXQgIT0gZW5kOyArK2l0KQorICAgICAgICBhdHRyc0luUnVsZXMuYWRkKCppdCk7CisgICAg
c2libGluZ1J1bGVzLmFwcGVuZChvdGhlci5zaWJsaW5nUnVsZXMpOworICAgIHVuY29tbW9uQXR0
cmlidXRlUnVsZXMuYXBwZW5kKG90aGVyLnVuY29tbW9uQXR0cmlidXRlUnVsZXMpOworICAgIHVz
ZXNGaXJzdExpbmVSdWxlcyA9IHVzZXNGaXJzdExpbmVSdWxlcyB8fCBvdGhlci51c2VzRmlyc3RM
aW5lUnVsZXM7CisgICAgdXNlc0JlZm9yZUFmdGVyUnVsZXMgPSB1c2VzQmVmb3JlQWZ0ZXJSdWxl
cyB8fCBvdGhlci51c2VzQmVmb3JlQWZ0ZXJSdWxlczsKKyAgICB1c2VzTGlua1J1bGVzID0gdXNl
c0xpbmtSdWxlcyB8fCBvdGhlci51c2VzTGlua1J1bGVzOworfQogCiB2b2lkIENTU1N0eWxlU2Vs
ZWN0b3I6OkZlYXR1cmVzOjpjbGVhcigpCiB7CkBAIC01OTIsMTEgKzU4OSw4IEBAIHN0YXRpYyB2
b2lkIGxvYWRWaWV3U291cmNlU3R5bGUoKQogCiBzdGF0aWMgdm9pZCBlbnN1cmVEZWZhdWx0U3R5
bGVTaGVldHNGb3JFbGVtZW50KEVsZW1lbnQqIGVsZW1lbnQpCiB7Ci0gICAgaWYgKHNpbXBsZURl
ZmF1bHRTdHlsZVNoZWV0ICYmICFlbGVtZW50Q2FuVXNlU2ltcGxlRGVmYXVsdFN0eWxlKGVsZW1l
bnQpKSB7CisgICAgaWYgKHNpbXBsZURlZmF1bHRTdHlsZVNoZWV0ICYmICFlbGVtZW50Q2FuVXNl
U2ltcGxlRGVmYXVsdFN0eWxlKGVsZW1lbnQpKQogICAgICAgICBsb2FkRnVsbERlZmF1bHRTdHls
ZSgpOwotICAgICAgICBhc3NlcnROb1NpYmxpbmdSdWxlc0luRGVmYXVsdFN0eWxlKCk7Ci0gICAg
ICAgIGNvbGxlY3RTcGVjaWFsUnVsZXNJbkRlZmF1bHRTdHlsZSgpOwotICAgIH0KIAogI2lmIEVO
QUJMRShTVkcpCiAgICAgc3RhdGljIGJvb2wgbG9hZGVkU1ZHVXNlckFnZW50U2hlZXQ7CkBAIC02
MDYsMjEgKzYwMCwxNyBAQCBzdGF0aWMgdm9pZCBlbnN1cmVEZWZhdWx0U3R5bGVTaGVldHNGb3JF
CiAgICAgICAgIENTU1N0eWxlU2hlZXQqIHN2Z1NoZWV0ID0gcGFyc2VVQVNoZWV0KHN2Z1VzZXJB
Z2VudFN0eWxlU2hlZXQsIHNpemVvZihzdmdVc2VyQWdlbnRTdHlsZVNoZWV0KSk7CiAgICAgICAg
IGRlZmF1bHRTdHlsZS0+YWRkUnVsZXNGcm9tU2hlZXQoc3ZnU2hlZXQsIHNjcmVlbkV2YWwoKSk7
CiAgICAgICAgIGRlZmF1bHRQcmludFN0eWxlLT5hZGRSdWxlc0Zyb21TaGVldChzdmdTaGVldCwg
cHJpbnRFdmFsKCkpOwotICAgICAgICBhc3NlcnROb1NpYmxpbmdSdWxlc0luRGVmYXVsdFN0eWxl
KCk7Ci0gICAgICAgIGNvbGxlY3RTcGVjaWFsUnVsZXNJbkRlZmF1bHRTdHlsZSgpOwogICAgIH0K
ICNlbmRpZgogCi0jaWYgRU5BQkxFKE1BVEhNTCkKICAgICBzdGF0aWMgYm9vbCBsb2FkZWRNYXRo
TUxVc2VyQWdlbnRTaGVldDsKKyNpZiBFTkFCTEUoTUFUSE1MKQogICAgIGlmIChlbGVtZW50LT5p
c01hdGhNTEVsZW1lbnQoKSAmJiAhbG9hZGVkTWF0aE1MVXNlckFnZW50U2hlZXQpIHsKICAgICAg
ICAgLy8gTWF0aE1MIHJ1bGVzLgogICAgICAgICBsb2FkZWRNYXRoTUxVc2VyQWdlbnRTaGVldCA9
IHRydWU7CiAgICAgICAgIENTU1N0eWxlU2hlZXQqIG1hdGhNTFNoZWV0ID0gcGFyc2VVQVNoZWV0
KG1hdGhtbFVzZXJBZ2VudFN0eWxlU2hlZXQsIHNpemVvZihtYXRobWxVc2VyQWdlbnRTdHlsZVNo
ZWV0KSk7CiAgICAgICAgIGRlZmF1bHRTdHlsZS0+YWRkUnVsZXNGcm9tU2hlZXQobWF0aE1MU2hl
ZXQsIHNjcmVlbkV2YWwoKSk7CiAgICAgICAgIGRlZmF1bHRQcmludFN0eWxlLT5hZGRSdWxlc0Zy
b21TaGVldChtYXRoTUxTaGVldCwgcHJpbnRFdmFsKCkpOwotICAgICAgICAvLyBUaGVyZSBhcmUg
c29tZSBzaWJsaW5nIGFuZCB1bmNvbW1vbiBhdHRyaWJ1dGUgcnVsZXMgaGVyZS4KLSAgICAgICAg
Y29sbGVjdFNwZWNpYWxSdWxlc0luRGVmYXVsdFN0eWxlKCk7CiAgICAgfQogI2VuZGlmCiAKQEAg
LTYzMiw3ICs2MjIsNiBAQCBzdGF0aWMgdm9pZCBlbnN1cmVEZWZhdWx0U3R5bGVTaGVldHNGb3JF
CiAgICAgICAgIENTU1N0eWxlU2hlZXQqIG1lZGlhQ29udHJvbHNTaGVldCA9IHBhcnNlVUFTaGVl
dChtZWRpYVJ1bGVzKTsKICAgICAgICAgZGVmYXVsdFN0eWxlLT5hZGRSdWxlc0Zyb21TaGVldCht
ZWRpYUNvbnRyb2xzU2hlZXQsIHNjcmVlbkV2YWwoKSk7CiAgICAgICAgIGRlZmF1bHRQcmludFN0
eWxlLT5hZGRSdWxlc0Zyb21TaGVldChtZWRpYUNvbnRyb2xzU2hlZXQsIHByaW50RXZhbCgpKTsK
LSAgICAgICAgY29sbGVjdFNwZWNpYWxSdWxlc0luRGVmYXVsdFN0eWxlKCk7CiAgICAgfQogI2Vu
ZGlmCiAKQEAgLTY0NCw5ICs2MzMsMTEgQEAgc3RhdGljIHZvaWQgZW5zdXJlRGVmYXVsdFN0eWxl
U2hlZXRzRm9yRQogICAgICAgICBDU1NTdHlsZVNoZWV0KiBmdWxsc2NyZWVuU2hlZXQgPSBwYXJz
ZVVBU2hlZXQoZnVsbHNjcmVlblJ1bGVzKTsKICAgICAgICAgZGVmYXVsdFN0eWxlLT5hZGRSdWxl
c0Zyb21TaGVldChmdWxsc2NyZWVuU2hlZXQsIHNjcmVlbkV2YWwoKSk7CiAgICAgICAgIGRlZmF1
bHRRdWlya3NTdHlsZS0+YWRkUnVsZXNGcm9tU2hlZXQoZnVsbHNjcmVlblNoZWV0LCBzY3JlZW5F
dmFsKCkpOwotICAgICAgICBjb2xsZWN0U3BlY2lhbFJ1bGVzSW5EZWZhdWx0U3R5bGUoKTsKICAg
ICB9CiAjZW5kaWYKKworICAgIEFTU0VSVChkZWZhdWx0U3R5bGUtPmZlYXR1cmVzKCkuaWRzSW5S
dWxlcy5pc0VtcHR5KCkpOworICAgIEFTU0VSVChsb2FkZWRNYXRoTUxVc2VyQWdlbnRTaGVldCB8
fCBkZWZhdWx0U3R5bGUtPmZlYXR1cmVzKCkuc2libGluZ1J1bGVzLmlzRW1wdHkoKSk7CiB9CiAK
IHZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6YWRkTWF0Y2hlZERlY2xhcmF0aW9uKENTU011dGFibGVT
dHlsZURlY2xhcmF0aW9uKiBzdHlsZURlY2xhcmF0aW9uLCB1bnNpZ25lZCBsaW5rTWF0Y2hUeXBl
KQpAQCAtMTE2NSwxMCArMTE1NiwxMCBAQCBSZW5kZXJTdHlsZSogQ1NTU3R5bGVTZWxlY3Rvcjo6
bG9jYXRlU2hhCiAgICAgICAgIHJldHVybiAwOwogCiAgICAgLy8gQ2FuJ3Qgc2hhcmUgaWYgc2li
bGluZyBydWxlcyBhcHBseS4gVGhpcyBpcyBjaGVja2VkIGF0IHRoZSBlbmQgYXMgaXQgc2hvdWxk
IHJhcmVseSBmYWlsLgotICAgIGlmIChtYXRjaGVzUnVsZVNldChtX2ZlYXR1cmVzLnNpYmxpbmdS
dWxlcy5nZXQoKSkpCisgICAgaWYgKG1hdGNoZXNSdWxlU2V0KG1fc2libGluZ1J1bGVTZXQuZ2V0
KCkpKQogICAgICAgICByZXR1cm4gMDsKICAgICAvLyBDYW4ndCBzaGFyZSBpZiBhdHRyaWJ1dGUg
cnVsZXMgYXBwbHkuCi0gICAgaWYgKG1hdGNoZXNSdWxlU2V0KG1fZmVhdHVyZXMudW5jb21tb25B
dHRyaWJ1dGVSdWxlcy5nZXQoKSkpCisgICAgaWYgKG1hdGNoZXNSdWxlU2V0KG1fdW5jb21tb25B
dHRyaWJ1dGVSdWxlU2V0LmdldCgpKSkKICAgICAgICAgcmV0dXJuIDA7CiAgICAgLy8gVHJhY2tp
bmcgY2hpbGQgaW5kZXggcmVxdWlyZXMgdW5pcXVlIHN0eWxlIGZvciBlYWNoIG5vZGUuIFRoaXMg
bWF5IGdldCBzZXQgYnkgdGhlIHNpYmxpbmcgcnVsZSBtYXRjaCBhYm92ZS4KICAgICBpZiAocGFy
ZW50U3R5bGVQcmV2ZW50c1NoYXJpbmcobV9wYXJlbnRTdHlsZSkpCkBAIC0xOTU0LDMzICsxOTQ1
LDc5IEBAIFJ1bGVTZXQ6OlJ1bGVTZXQoKQogewogfQogCi12b2lkIFJ1bGVTZXQ6OmFkZFRvUnVs
ZVNldChBdG9taWNTdHJpbmdJbXBsKiBrZXksIEF0b21SdWxlTWFwJiBtYXAsIENTU1N0eWxlUnVs
ZSogcnVsZSwgQ1NTU2VsZWN0b3IqIHNlbGVjdG9yKQorc3RhdGljIGlubGluZSB2b2lkIGNvbGxl
Y3RGZWF0dXJlc0Zyb21TZWxlY3RvcihDU1NTdHlsZVNlbGVjdG9yOjpGZWF0dXJlcyYgZmVhdHVy
ZXMsIGNvbnN0IENTU1NlbGVjdG9yKiBzZWxlY3RvcikKK3sKKyAgICBpZiAoc2VsZWN0b3ItPm1f
bWF0Y2ggPT0gQ1NTU2VsZWN0b3I6OklkICYmICFzZWxlY3Rvci0+dmFsdWUoKS5pc0VtcHR5KCkp
CisgICAgICAgIGZlYXR1cmVzLmlkc0luUnVsZXMuYWRkKHNlbGVjdG9yLT52YWx1ZSgpLmltcGwo
KSk7CisgICAgaWYgKHNlbGVjdG9yLT5pc0F0dHJpYnV0ZVNlbGVjdG9yKCkpCisgICAgICAgIGZl
YXR1cmVzLmF0dHJzSW5SdWxlcy5hZGQoc2VsZWN0b3ItPmF0dHJpYnV0ZSgpLmxvY2FsTmFtZSgp
LmltcGwoKSk7CisgICAgc3dpdGNoIChzZWxlY3Rvci0+cHNldWRvVHlwZSgpKSB7CisgICAgY2Fz
ZSBDU1NTZWxlY3Rvcjo6UHNldWRvRmlyc3RMaW5lOgorICAgICAgICBmZWF0dXJlcy51c2VzRmly
c3RMaW5lUnVsZXMgPSB0cnVlOworICAgICAgICBicmVhazsKKyAgICBjYXNlIENTU1NlbGVjdG9y
OjpQc2V1ZG9CZWZvcmU6CisgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvQWZ0ZXI6CisgICAg
ICAgIGZlYXR1cmVzLnVzZXNCZWZvcmVBZnRlclJ1bGVzID0gdHJ1ZTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvTGluazoKKyAgICBjYXNlIENTU1NlbGVjdG9y
OjpQc2V1ZG9WaXNpdGVkOgorICAgICAgICBmZWF0dXJlcy51c2VzTGlua1J1bGVzID0gdHJ1ZTsK
KyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgYnJlYWs7CisgICAgfQorfQor
CitzdGF0aWMgdm9pZCBjb2xsZWN0RmVhdHVyZXNGcm9tUnVsZURhdGEoQ1NTU3R5bGVTZWxlY3Rv
cjo6RmVhdHVyZXMmIGZlYXR1cmVzLCBjb25zdCBSdWxlRGF0YSYgcnVsZURhdGEpCit7CisgICAg
Ym9vbCBmb3VuZFNpYmxpbmdTZWxlY3RvciA9IGZhbHNlOworICAgIGZvciAoQ1NTU2VsZWN0b3Iq
IHNlbGVjdG9yID0gcnVsZURhdGEuc2VsZWN0b3IoKTsgc2VsZWN0b3I7IHNlbGVjdG9yID0gc2Vs
ZWN0b3ItPnRhZ0hpc3RvcnkoKSkgeworICAgICAgICBjb2xsZWN0RmVhdHVyZXNGcm9tU2VsZWN0
b3IoZmVhdHVyZXMsIHNlbGVjdG9yKTsKKyAgICAgICAgCisgICAgICAgIGlmIChDU1NTZWxlY3Rv
ckxpc3QqIHNlbGVjdG9yTGlzdCA9IHNlbGVjdG9yLT5zZWxlY3Rvckxpc3QoKSkgeworICAgICAg
ICAgICAgZm9yIChDU1NTZWxlY3Rvciogc3ViU2VsZWN0b3IgPSBzZWxlY3Rvckxpc3QtPmZpcnN0
KCk7IHN1YlNlbGVjdG9yOyBzdWJTZWxlY3RvciA9IENTU1NlbGVjdG9yTGlzdDo6bmV4dChzdWJT
ZWxlY3RvcikpIHsKKyAgICAgICAgICAgICAgICBpZiAoc2VsZWN0b3ItPmlzU2libGluZ1NlbGVj
dG9yKCkpCisgICAgICAgICAgICAgICAgICAgIGZvdW5kU2libGluZ1NlbGVjdG9yID0gdHJ1ZTsK
KyAgICAgICAgICAgICAgICBjb2xsZWN0RmVhdHVyZXNGcm9tU2VsZWN0b3IoZmVhdHVyZXMsIHN1
YlNlbGVjdG9yKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIGlmIChzZWxlY3Rvci0+
aXNTaWJsaW5nU2VsZWN0b3IoKSkKKyAgICAgICAgICAgIGZvdW5kU2libGluZ1NlbGVjdG9yID0g
dHJ1ZTsKKyAgICB9CisgICAgaWYgKGZvdW5kU2libGluZ1NlbGVjdG9yKQorICAgICAgICBmZWF0
dXJlcy5zaWJsaW5nUnVsZXMuYXBwZW5kKENTU1N0eWxlU2VsZWN0b3I6OlJ1bGVTZWxlY3RvclBh
aXIocnVsZURhdGEucnVsZSgpLCBydWxlRGF0YS5zZWxlY3RvcigpKSk7CisgICAgaWYgKHJ1bGVE
YXRhLmNvbnRhaW5zVW5jb21tb25BdHRyaWJ1dGVTZWxlY3RvcigpKQorICAgICAgICBmZWF0dXJl
cy51bmNvbW1vbkF0dHJpYnV0ZVJ1bGVzLmFwcGVuZChDU1NTdHlsZVNlbGVjdG9yOjpSdWxlU2Vs
ZWN0b3JQYWlyKHJ1bGVEYXRhLnJ1bGUoKSwgcnVsZURhdGEuc2VsZWN0b3IoKSkpOworfQorICAg
IAordm9pZCBSdWxlU2V0OjphZGRUb1J1bGVTZXQoQXRvbWljU3RyaW5nSW1wbCoga2V5LCBBdG9t
UnVsZU1hcCYgbWFwLCBjb25zdCBSdWxlRGF0YSYgcnVsZURhdGEpCiB7CiAgICAgaWYgKCFrZXkp
CiAgICAgICAgIHJldHVybjsKICAgICBPd25QdHI8VmVjdG9yPFJ1bGVEYXRhPiA+JiBydWxlcyA9
IG1hcC5hZGQoa2V5LCBudWxscHRyKS5maXJzdC0+c2Vjb25kOwogICAgIGlmICghcnVsZXMpCiAg
ICAgICAgIHJ1bGVzID0gYWRvcHRQdHIobmV3IFZlY3RvcjxSdWxlRGF0YT4pOwotICAgIHJ1bGVz
LT5hcHBlbmQoUnVsZURhdGEocnVsZSwgc2VsZWN0b3IsIG1fcnVsZUNvdW50KyspKTsKKyAgICBy
dWxlcy0+YXBwZW5kKHJ1bGVEYXRhKTsKIH0KIAotdm9pZCBSdWxlU2V0OjphZGRSdWxlKENTU1N0
eWxlUnVsZSogcnVsZSwgQ1NTU2VsZWN0b3IqIHNlbCkKK3ZvaWQgUnVsZVNldDo6YWRkUnVsZShD
U1NTdHlsZVJ1bGUqIHJ1bGUsIENTU1NlbGVjdG9yKiBzZWxlY3RvcikKIHsKLSAgICBpZiAoc2Vs
LT5tX21hdGNoID09IENTU1NlbGVjdG9yOjpJZCkgewotICAgICAgICBhZGRUb1J1bGVTZXQoc2Vs
LT52YWx1ZSgpLmltcGwoKSwgbV9pZFJ1bGVzLCBydWxlLCBzZWwpOworICAgIFJ1bGVEYXRhIHJ1
bGVEYXRhKHJ1bGUsIHNlbGVjdG9yLCBtX3J1bGVDb3VudCsrKTsKKyAgICBjb2xsZWN0RmVhdHVy
ZXNGcm9tUnVsZURhdGEobV9mZWF0dXJlcywgcnVsZURhdGEpOworCisgICAgaWYgKHNlbGVjdG9y
LT5tX21hdGNoID09IENTU1NlbGVjdG9yOjpJZCkgeworICAgICAgICBhZGRUb1J1bGVTZXQoc2Vs
ZWN0b3ItPnZhbHVlKCkuaW1wbCgpLCBtX2lkUnVsZXMsIHJ1bGVEYXRhKTsKICAgICAgICAgcmV0
dXJuOwogICAgIH0KLSAgICBpZiAoc2VsLT5tX21hdGNoID09IENTU1NlbGVjdG9yOjpDbGFzcykg
ewotICAgICAgICBhZGRUb1J1bGVTZXQoc2VsLT52YWx1ZSgpLmltcGwoKSwgbV9jbGFzc1J1bGVz
LCBydWxlLCBzZWwpOworICAgIGlmIChzZWxlY3Rvci0+bV9tYXRjaCA9PSBDU1NTZWxlY3Rvcjo6
Q2xhc3MpIHsKKyAgICAgICAgYWRkVG9SdWxlU2V0KHNlbGVjdG9yLT52YWx1ZSgpLmltcGwoKSwg
bV9jbGFzc1J1bGVzLCBydWxlRGF0YSk7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgaWYg
KHNlbC0+aXNVbmtub3duUHNldWRvRWxlbWVudCgpKSB7Ci0gICAgICAgIGFkZFRvUnVsZVNldChz
ZWwtPnZhbHVlKCkuaW1wbCgpLCBtX3NoYWRvd1BzZXVkb0VsZW1lbnRSdWxlcywgcnVsZSwgc2Vs
KTsKKyAgICBpZiAoc2VsZWN0b3ItPmlzVW5rbm93blBzZXVkb0VsZW1lbnQoKSkgeworICAgICAg
ICBhZGRUb1J1bGVTZXQoc2VsZWN0b3ItPnZhbHVlKCkuaW1wbCgpLCBtX3NoYWRvd1BzZXVkb0Vs
ZW1lbnRSdWxlcywgcnVsZURhdGEpOwogICAgICAgICByZXR1cm47CiAgICAgfQotICAgIGlmIChT
ZWxlY3RvckNoZWNrZXI6OmlzQ29tbW9uUHNldWRvQ2xhc3NTZWxlY3RvcihzZWwpKSB7Ci0gICAg
ICAgIFJ1bGVEYXRhIHJ1bGVEYXRhKHJ1bGUsIHNlbCwgbV9ydWxlQ291bnQrKyk7Ci0gICAgICAg
IHN3aXRjaCAoc2VsLT5wc2V1ZG9UeXBlKCkpIHsKKyAgICBpZiAoU2VsZWN0b3JDaGVja2VyOjpp
c0NvbW1vblBzZXVkb0NsYXNzU2VsZWN0b3Ioc2VsZWN0b3IpKSB7CisgICAgICAgIHN3aXRjaCAo
c2VsZWN0b3ItPnBzZXVkb1R5cGUoKSkgewogICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1
ZG9MaW5rOgogICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9WaXNpdGVkOgogICAgICAg
ICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9BbnlMaW5rOgpAQCAtMTk5NCwxMyArMjAzMSwxMiBA
QCB2b2lkIFJ1bGVTZXQ6OmFkZFJ1bGUoQ1NTU3R5bGVSdWxlKiBydWxlCiAgICAgICAgIH0KICAg
ICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBjb25zdCBBdG9taWNTdHJpbmcmIGxvY2FsTmFtZSA9
IHNlbC0+dGFnKCkubG9jYWxOYW1lKCk7CisgICAgY29uc3QgQXRvbWljU3RyaW5nJiBsb2NhbE5h
bWUgPSBzZWxlY3Rvci0+dGFnKCkubG9jYWxOYW1lKCk7CiAgICAgaWYgKGxvY2FsTmFtZSAhPSBz
dGFyQXRvbSkgewotICAgICAgICBhZGRUb1J1bGVTZXQobG9jYWxOYW1lLmltcGwoKSwgbV90YWdS
dWxlcywgcnVsZSwgc2VsKTsKKyAgICAgICAgYWRkVG9SdWxlU2V0KGxvY2FsTmFtZS5pbXBsKCks
IG1fdGFnUnVsZXMsIHJ1bGVEYXRhKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLQotICAgIG1f
dW5pdmVyc2FsUnVsZXMuYXBwZW5kKFJ1bGVEYXRhKHJ1bGUsIHNlbCwgbV9ydWxlQ291bnQrKykp
OworICAgIG1fdW5pdmVyc2FsUnVsZXMuYXBwZW5kKHJ1bGVEYXRhKTsKIH0KIAogdm9pZCBSdWxl
U2V0OjphZGRQYWdlUnVsZShDU1NQYWdlUnVsZSogcnVsZSkKQEAgLTIwNzMsNzkgKzIxMDksNiBA
QCB2b2lkIFJ1bGVTZXQ6OmFkZFN0eWxlUnVsZShDU1NTdHlsZVJ1bGUqCiAgICAgICAgIGFkZFJ1
bGUocnVsZSwgcyk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBjb2xsZWN0RmVhdHVyZXNGcm9t
U2VsZWN0b3IoQ1NTU3R5bGVTZWxlY3Rvcjo6RmVhdHVyZXMmIGZlYXR1cmVzLCBjb25zdCBDU1NT
ZWxlY3Rvciogc2VsZWN0b3IpCi17Ci0gICAgaWYgKHNlbGVjdG9yLT5tX21hdGNoID09IENTU1Nl
bGVjdG9yOjpJZCAmJiAhc2VsZWN0b3ItPnZhbHVlKCkuaXNFbXB0eSgpKQotICAgICAgICBmZWF0
dXJlcy5pZHNJblJ1bGVzLmFkZChzZWxlY3Rvci0+dmFsdWUoKS5pbXBsKCkpOwotICAgIGlmIChz
ZWxlY3Rvci0+aXNBdHRyaWJ1dGVTZWxlY3RvcigpKQotICAgICAgICBmZWF0dXJlcy5hdHRyc0lu
UnVsZXMuYWRkKHNlbGVjdG9yLT5hdHRyaWJ1dGUoKS5sb2NhbE5hbWUoKS5pbXBsKCkpOwotICAg
IHN3aXRjaCAoc2VsZWN0b3ItPnBzZXVkb1R5cGUoKSkgewotICAgIGNhc2UgQ1NTU2VsZWN0b3I6
OlBzZXVkb0ZpcnN0TGluZToKLSAgICAgICAgZmVhdHVyZXMudXNlc0ZpcnN0TGluZVJ1bGVzID0g
dHJ1ZTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvQmVmb3Jl
OgotICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0FmdGVyOgotICAgICAgICBmZWF0dXJlcy51
c2VzQmVmb3JlQWZ0ZXJSdWxlcyA9IHRydWU7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQ1NT
U2VsZWN0b3I6OlBzZXVkb0xpbms6Ci0gICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvVmlzaXRl
ZDoKLSAgICAgICAgZmVhdHVyZXMudXNlc0xpbmtSdWxlcyA9IHRydWU7Ci0gICAgICAgIGJyZWFr
OwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLX0KLQotc3RhdGljIHZvaWQg
Y29sbGVjdEZlYXR1cmVzRnJvbUxpc3QoQ1NTU3R5bGVTZWxlY3Rvcjo6RmVhdHVyZXMmIGZlYXR1
cmVzLCBjb25zdCBWZWN0b3I8UnVsZURhdGE+JiBydWxlcykKLXsKLSAgICB1bnNpZ25lZCBzaXpl
ID0gcnVsZXMuc2l6ZSgpOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzaXplOyArK2kp
IHsKLSAgICAgICAgY29uc3QgUnVsZURhdGEmIHJ1bGVEYXRhID0gcnVsZXNbaV07Ci0gICAgICAg
IGJvb2wgZm91bmRTaWJsaW5nU2VsZWN0b3IgPSBmYWxzZTsKLSAgICAgICAgZm9yIChDU1NTZWxl
Y3Rvciogc2VsZWN0b3IgPSBydWxlRGF0YS5zZWxlY3RvcigpOyBzZWxlY3Rvcjsgc2VsZWN0b3Ig
PSBzZWxlY3Rvci0+dGFnSGlzdG9yeSgpKSB7Ci0gICAgICAgICAgICBjb2xsZWN0RmVhdHVyZXNG
cm9tU2VsZWN0b3IoZmVhdHVyZXMsIHNlbGVjdG9yKTsKLQotICAgICAgICAgICAgaWYgKENTU1Nl
bGVjdG9yTGlzdCogc2VsZWN0b3JMaXN0ID0gc2VsZWN0b3ItPnNlbGVjdG9yTGlzdCgpKSB7Ci0g
ICAgICAgICAgICAgICAgZm9yIChDU1NTZWxlY3Rvciogc3ViU2VsZWN0b3IgPSBzZWxlY3Rvckxp
c3QtPmZpcnN0KCk7IHN1YlNlbGVjdG9yOyBzdWJTZWxlY3RvciA9IENTU1NlbGVjdG9yTGlzdDo6
bmV4dChzdWJTZWxlY3RvcikpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHNlbGVjdG9yLT5p
c1NpYmxpbmdTZWxlY3RvcigpKQotICAgICAgICAgICAgICAgICAgICAgICAgZm91bmRTaWJsaW5n
U2VsZWN0b3IgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICBjb2xsZWN0RmVhdHVyZXNGcm9t
U2VsZWN0b3IoZmVhdHVyZXMsIHN1YlNlbGVjdG9yKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICB9IGVsc2UgaWYgKHNlbGVjdG9yLT5pc1NpYmxpbmdTZWxlY3RvcigpKQotICAgICAg
ICAgICAgICAgIGZvdW5kU2libGluZ1NlbGVjdG9yID0gdHJ1ZTsKLSAgICAgICAgfQotICAgICAg
ICBpZiAoZm91bmRTaWJsaW5nU2VsZWN0b3IpIHsKLSAgICAgICAgICAgIGlmICghZmVhdHVyZXMu
c2libGluZ1J1bGVzKQotICAgICAgICAgICAgICAgIGZlYXR1cmVzLnNpYmxpbmdSdWxlcyA9IGFk
b3B0UHRyKG5ldyBSdWxlU2V0KTsKLSAgICAgICAgICAgIGZlYXR1cmVzLnNpYmxpbmdSdWxlcy0+
YWRkUnVsZShydWxlRGF0YS5ydWxlKCksIHJ1bGVEYXRhLnNlbGVjdG9yKCkpOwotICAgICAgICB9
Ci0gICAgICAgIGlmIChydWxlRGF0YS5jb250YWluc1VuY29tbW9uQXR0cmlidXRlU2VsZWN0b3Io
KSkgewotICAgICAgICAgICAgaWYgKCFmZWF0dXJlcy51bmNvbW1vbkF0dHJpYnV0ZVJ1bGVzKQot
ICAgICAgICAgICAgICAgIGZlYXR1cmVzLnVuY29tbW9uQXR0cmlidXRlUnVsZXMgPSBhZG9wdFB0
cihuZXcgUnVsZVNldCk7Ci0gICAgICAgICAgICBmZWF0dXJlcy51bmNvbW1vbkF0dHJpYnV0ZVJ1
bGVzLT5hZGRSdWxlKHJ1bGVEYXRhLnJ1bGUoKSwgcnVsZURhdGEuc2VsZWN0b3IoKSk7Ci0gICAg
ICAgIH0KLSAgICB9Ci19Ci0KLXZvaWQgUnVsZVNldDo6Y29sbGVjdEZlYXR1cmVzKENTU1N0eWxl
U2VsZWN0b3I6OkZlYXR1cmVzJiBmZWF0dXJlcykgY29uc3QKLXsKLSAgICBBdG9tUnVsZU1hcDo6
Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9pZFJ1bGVzLmVuZCgpOwotICAgIGZvciAoQXRvbVJ1bGVN
YXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9pZFJ1bGVzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytp
dCkKLSAgICAgICAgY29sbGVjdEZlYXR1cmVzRnJvbUxpc3QoZmVhdHVyZXMsICppdC0+c2Vjb25k
KTsKLSAgICBlbmQgPSBtX2NsYXNzUnVsZXMuZW5kKCk7Ci0gICAgZm9yIChBdG9tUnVsZU1hcDo6
Y29uc3RfaXRlcmF0b3IgaXQgPSBtX2NsYXNzUnVsZXMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0
KQotICAgICAgICBjb2xsZWN0RmVhdHVyZXNGcm9tTGlzdChmZWF0dXJlcywgKml0LT5zZWNvbmQp
OwotICAgIGVuZCA9IG1fdGFnUnVsZXMuZW5kKCk7Ci0gICAgZm9yIChBdG9tUnVsZU1hcDo6Y29u
c3RfaXRlcmF0b3IgaXQgPSBtX3RhZ1J1bGVzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAg
ICAgICAgY29sbGVjdEZlYXR1cmVzRnJvbUxpc3QoZmVhdHVyZXMsICppdC0+c2Vjb25kKTsKLSAg
ICBlbmQgPSBtX3NoYWRvd1BzZXVkb0VsZW1lbnRSdWxlcy5lbmQoKTsKLSAgICBmb3IgKEF0b21S
dWxlTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fc2hhZG93UHNldWRvRWxlbWVudFJ1bGVzLmJl
Z2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgY29sbGVjdEZlYXR1cmVzRnJvbUxpc3Qo
ZmVhdHVyZXMsICppdC0+c2Vjb25kKTsKLSAgICBjb2xsZWN0RmVhdHVyZXNGcm9tTGlzdChmZWF0
dXJlcywgbV9saW5rUHNldWRvQ2xhc3NSdWxlcyk7Ci0gICAgY29sbGVjdEZlYXR1cmVzRnJvbUxp
c3QoZmVhdHVyZXMsIG1fZm9jdXNQc2V1ZG9DbGFzc1J1bGVzKTsKLSAgICBjb2xsZWN0RmVhdHVy
ZXNGcm9tTGlzdChmZWF0dXJlcywgbV91bml2ZXJzYWxSdWxlcyk7Ci19Ci0KIHN0YXRpYyBpbmxp
bmUgdm9pZCBzaHJpbmtNYXBWZWN0b3JzVG9GaXQoUnVsZVNldDo6QXRvbVJ1bGVNYXAmIG1hcCkK
IHsKICAgICBSdWxlU2V0OjpBdG9tUnVsZU1hcDo6aXRlcmF0b3IgZW5kID0gbWFwLmVuZCgpOwpJ
bmRleDogU291cmNlL1dlYkNvcmUvY3NzL0NTU1N0eWxlU2VsZWN0b3IuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU3R5bGVTZWxlY3Rvci5oCShyZXZpc2lvbiAxMDQ5MTAp
CisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU3R5bGVTZWxlY3Rvci5oCSh3b3JraW5nIGNvcHkp
CkBAIC0yMDIsNyArMjAyLDcgQEAgcHVibGljOgogCiAgICAgYm9vbCBjaGVja1JlZ2lvblN0eWxl
KEVsZW1lbnQqKTsKIAotICAgIGJvb2wgdXNlc1NpYmxpbmdSdWxlcygpIGNvbnN0IHsgcmV0dXJu
IG1fZmVhdHVyZXMuc2libGluZ1J1bGVzOyB9CisgICAgYm9vbCB1c2VzU2libGluZ1J1bGVzKCkg
Y29uc3QgeyByZXR1cm4gIW1fZmVhdHVyZXMuc2libGluZ1J1bGVzLmlzRW1wdHkoKTsgfQogICAg
IGJvb2wgdXNlc0ZpcnN0TGluZVJ1bGVzKCkgY29uc3QgeyByZXR1cm4gbV9mZWF0dXJlcy51c2Vz
Rmlyc3RMaW5lUnVsZXM7IH0KICAgICBib29sIHVzZXNCZWZvcmVBZnRlclJ1bGVzKCkgY29uc3Qg
eyByZXR1cm4gbV9mZWF0dXJlcy51c2VzQmVmb3JlQWZ0ZXJSdWxlczsgfQogICAgIGJvb2wgdXNl
c0xpbmtSdWxlcygpIGNvbnN0IHsgcmV0dXJuIG1fZmVhdHVyZXMudXNlc0xpbmtSdWxlczsgfQpA
QCAtMjIxLDE0ICsyMjEsMjAgQEAgcHVibGljOgogI2VuZGlmCiAjZW5kaWYgLy8gRU5BQkxFKENT
U19GSUxURVJTKQogCisgICAgc3RydWN0IFJ1bGVTZWxlY3RvclBhaXIgeworICAgICAgICBSdWxl
U2VsZWN0b3JQYWlyKENTU1N0eWxlUnVsZSogcnVsZSwgQ1NTU2VsZWN0b3IqIHNlbGVjdG9yKSA6
IHJ1bGUocnVsZSksIHNlbGVjdG9yKHNlbGVjdG9yKSB7IH0KKyAgICAgICAgQ1NTU3R5bGVSdWxl
KiBydWxlOworICAgICAgICBDU1NTZWxlY3Rvciogc2VsZWN0b3I7CisgICAgfTsKICAgICBzdHJ1
Y3QgRmVhdHVyZXMgewogICAgICAgICBGZWF0dXJlcygpOwogICAgICAgICB+RmVhdHVyZXMoKTsK
KyAgICAgICAgdm9pZCBhZGQoY29uc3QgQ1NTU3R5bGVTZWxlY3Rvcjo6RmVhdHVyZXMmKTsKICAg
ICAgICAgdm9pZCBjbGVhcigpOwogICAgICAgICBIYXNoU2V0PEF0b21pY1N0cmluZ0ltcGwqPiBp
ZHNJblJ1bGVzOwogICAgICAgICBIYXNoU2V0PEF0b21pY1N0cmluZ0ltcGwqPiBhdHRyc0luUnVs
ZXM7Ci0gICAgICAgIE93blB0cjxSdWxlU2V0PiBzaWJsaW5nUnVsZXM7Ci0gICAgICAgIE93blB0
cjxSdWxlU2V0PiB1bmNvbW1vbkF0dHJpYnV0ZVJ1bGVzOworICAgICAgICBWZWN0b3I8UnVsZVNl
bGVjdG9yUGFpcj4gc2libGluZ1J1bGVzOworICAgICAgICBWZWN0b3I8UnVsZVNlbGVjdG9yUGFp
cj4gdW5jb21tb25BdHRyaWJ1dGVSdWxlczsKICAgICAgICAgYm9vbCB1c2VzRmlyc3RMaW5lUnVs
ZXM7CiAgICAgICAgIGJvb2wgdXNlc0JlZm9yZUFmdGVyUnVsZXM7CiAgICAgICAgIGJvb2wgdXNl
c0xpbmtSdWxlczsKQEAgLTI4MSw2ICsyODcsOCBAQCBwcml2YXRlOgogICAgIE93blB0cjxSdWxl
U2V0PiBtX3VzZXJTdHlsZTsKIAogICAgIEZlYXR1cmVzIG1fZmVhdHVyZXM7CisgICAgT3duUHRy
PFJ1bGVTZXQ+IG1fc2libGluZ1J1bGVTZXQ7CisgICAgT3duUHRyPFJ1bGVTZXQ+IG1fdW5jb21t
b25BdHRyaWJ1dGVSdWxlU2V0OwogCiAgICAgYm9vbCBtX2hhc1VBQXBwZWFyYW5jZTsKICAgICBC
b3JkZXJEYXRhIG1fYm9yZGVyRGF0YTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>122681</attachid>
            <date>2012-01-16 13:56:10 -0800</date>
            <delta_ts>2012-01-16 14:29:44 -0800</delta_ts>
            <desc>updated to tot</desc>
            <filename>styleselector-features-merge-5.patch</filename>
            <type>text/plain</type>
            <size>21662</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEwNTA2MikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDUzIEBACisyMDEyLTAxLTE2ICBBbnR0aSBL
b2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KKworICAgICAgICBDYWNoZSBDU1NTdHlsZVNlbGVj
dG9yOjpGZWF0dXJlcyBpbiBSdWxlU2V0cworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9NzYzMzcKKworICAgICAgICBSZXZpZXdlZCBieSBBbmRyZWFzIEts
aW5nLgorCisgICAgICAgIEN1cnJlbnRseSB3aGVuZXZlciB0aGUgc3R5bGUgc2VsZWN0b3IgaXMg
dXBkYXRlZCB3ZSBnbyB0aHJvdWdoIGFsbCB0aGUgYXBwbGljYWJsZSBydWxlcyBhbmQKKyAgICAg
ICAgY29sbGVjdCB0aGUgdXNlZCBmZWF0dXJlcyBhZ2Fpbi4gV2Ugc2hvdWxkIGtlZXAgdGhlIGZl
YXR1cmVzIGFyb3VuZCBhcyBwYXJ0IG9mIHRoZSBSdWxlU2V0cworICAgICAgICBhbmQgdXBkYXRl
IHRoZW0gaW5jcmVtZW50YWxseS4gQ29sbGVjdGluZyB0aGUgZmVhdHVyZXMgd2lsbCB0aGVuIGJl
IGp1c3QgYSBtYXR0ZXIgb2YgdGFraW5nCisgICAgICAgIHRoZSB1bmlvbiBvZiBhbGwgZmVhdHVy
ZXMgdXNlZCBieSB0aGUgUnVsZVNldHMuCisgICAgICAgIAorICAgICAgICBUaGlzIGlzIDEtMiUg
Q1BVIHRpbWUgcmVkdWN0aW9uIChlbmdhZGdldCwgbnl0aW1lcykgZHVlIGxlc3MgdGltZSBzcGVu
dCBpbiBmZWF0dXJlIGNvbGxlY3Rpb24uCisgICAgICAgIAorICAgICAgICBUaGlzIGFsc28gc2lt
cGxpZmllcyB0aGUgY29kZSBieSByZW1vdmluZyB0aGUgbmVlZCB0byBjYWNoZSB0aGUgZGVmYXVs
dCBzdHlsZSBzaGVldCBmZWF0dXJlcworICAgICAgICBzZXBhcmF0ZWx5LiAKKworICAgICAgICAq
IGNzcy9DU1NTdHlsZVNlbGVjdG9yLmNwcDoKKyAgICAgICAgCisgICAgICAgICAgICBSZW1vdmUg
dGhlIGdsb2JhbCBzaWJsaW5nUnVsZXNJbkRlZmF1bHRTdHlsZSBhbmQgdW5jb21tb25BdHRyaWJ1
dGVSdWxlc0luRGVmYXVsdFN0eWxlIFJ1bGVTZXRzLgorICAgICAgICAgICAgVGhlc2UgYXJlIG5v
dyBwYXJ0IG9mIHRoZSBjYWNoZWQgZmVhdHVyZXMgb2YgdGhlIGRlZmF1bHRTdHlsZS4KKyAgICAg
ICAgCisgICAgICAgIChXZWJDb3JlOjpSdWxlU2V0OjpmZWF0dXJlcyk6CisgICAgICAgIAorICAg
ICAgICAgICAgQWRkIGEgZmllbGQgZm9yIGNhY2hpbmcgdGhlIGZlYXR1cmVzLgorICAgICAgICAK
KyAgICAgICAgKFdlYkNvcmU6Om1ha2VSdWxlU2V0KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1N0
eWxlU2VsZWN0b3I6OmNvbGxlY3RGZWF0dXJlcyk6CisgICAgICAgIAorICAgICAgICAgICAgVW5p
ZnkgdGhlIGZlYXR1cmVzIG9mIGFsbCBSdWxlU2V0cy4KKyAgICAgICAgICAgIENyZWF0ZSBSdWxl
U2V0cyBmb3Igc2libGluZyBhbmQgdW5jb21tb24gYXR0cmlidXRlIGxvb2t1cHMgYXQgdGhlIGVu
ZC4KKyAgICAgICAgCisgICAgICAgIChXZWJDb3JlOjpDU1NTdHlsZVNlbGVjdG9yOjphcHBlbmRB
dXRob3JTdHlsZXNoZWV0cyk6CisgICAgICAgIChXZWJDb3JlOjpDU1NTdHlsZVNlbGVjdG9yOjpG
ZWF0dXJlczo6YWRkKToKKyAgICAgICAgKFdlYkNvcmU6OmVuc3VyZURlZmF1bHRTdHlsZVNoZWV0
c0ZvckVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTU3R5bGVTZWxlY3Rvcjo6bG9jYXRl
U2hhcmVkU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6Y29sbGVjdEZlYXR1cmVzRnJvbVNlbGVj
dG9yKToKKyAgICAgICAgKFdlYkNvcmU6OmNvbGxlY3RGZWF0dXJlc0Zyb21SdWxlRGF0YSk6Cisg
ICAgICAgIChXZWJDb3JlOjpSdWxlU2V0OjphZGRUb1J1bGVTZXQpOgorICAgICAgICAoV2ViQ29y
ZTo6UnVsZVNldDo6YWRkUnVsZSk6CisgICAgICAgIAorICAgICAgICAgICAgQ29sbGVjdCB0aGUg
ZmVhdHVyZXMgd2hlbiBhZGRpbmcgdGhlIHJ1bGVzIHJhdGhlciB0aGFuIGFzIGEgc2VwYXJhdGUg
cGFzcyB0aHJvdWdoIGFsbCB0aGUgcnVsZXMuCisgICAgICAgIAorICAgICAgICAqIGNzcy9DU1NT
dHlsZVNlbGVjdG9yLmg6CisgICAgICAgIChXZWJDb3JlOjpDU1NTdHlsZVNlbGVjdG9yOjp1c2Vz
U2libGluZ1J1bGVzKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1N0eWxlU2VsZWN0b3I6OlJ1bGVT
ZWxlY3RvclBhaXI6OlJ1bGVTZWxlY3RvclBhaXIpOgorICAgICAgICAKKyAgICAgICAgICAgIFVz
ZSBWZWN0b3IgaW5zdGVhZCBvZiBhIFJ1bGVTZXQgZm9yIHNpYmxpbmcgYW5kIHVuY29tbW9uIGF0
dHJpYnV0ZSBzZWxlY3RvcnMgc28gdW5pZnlpbmcKKyAgICAgICAgICAgIEZlYXR1cmVzIGlzIHNp
bXBsZXIuCisKIDIwMTItMDEtMTYgIE5pa29sYXMgWmltbWVybWFubiAgPG56aW1tZXJtYW5uQHJp
bS5jb20+CiAKICAgICAgICAgTGFyZ2UgU1ZHIHRleHQgbGF5b3V0IHBlcmZvcm1hbmNlIHJlZ3Jl
c3Npb24gaW4gcjgxMTY4CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU3R5bGVTZWxlY3Rv
ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL0NTU1N0eWxlU2VsZWN0b3Iu
Y3BwCShyZXZpc2lvbiAxMDUwNjIpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU3R5bGVTZWxl
Y3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyNCwxNCArMjI0LDE0IEBAIHB1YmxpYzoKIAog
ICAgIHZvaWQgYWRkUnVsZXNGcm9tU2hlZXQoQ1NTU3R5bGVTaGVldCosIGNvbnN0IE1lZGlhUXVl
cnlFdmFsdWF0b3ImLCBDU1NTdHlsZVNlbGVjdG9yKiA9IDApOwogCi0gICAgdm9pZCBhZGRTdHls
ZVJ1bGUoQ1NTU3R5bGVSdWxlKiBpdGVtKTsKLSAgICB2b2lkIGFkZFJ1bGUoQ1NTU3R5bGVSdWxl
KiBydWxlLCBDU1NTZWxlY3Rvciogc2VsKTsKKyAgICB2b2lkIGFkZFN0eWxlUnVsZShDU1NTdHls
ZVJ1bGUqKTsKKyAgICB2b2lkIGFkZFJ1bGUoQ1NTU3R5bGVSdWxlKiwgQ1NTU2VsZWN0b3IqKTsK
ICAgICB2b2lkIGFkZFBhZ2VSdWxlKENTU1BhZ2VSdWxlKik7Ci0gICAgdm9pZCBhZGRUb1J1bGVT
ZXQoQXRvbWljU3RyaW5nSW1wbCoga2V5LCBBdG9tUnVsZU1hcCYsIENTU1N0eWxlUnVsZSosIENT
U1NlbGVjdG9yKik7CisgICAgdm9pZCBhZGRUb1J1bGVTZXQoQXRvbWljU3RyaW5nSW1wbCoga2V5
LCBBdG9tUnVsZU1hcCYsIGNvbnN0IFJ1bGVEYXRhJik7CiAgICAgdm9pZCBzaHJpbmtUb0ZpdCgp
OwogICAgIHZvaWQgZGlzYWJsZUF1dG9TaHJpbmtUb0ZpdCgpIHsgbV9hdXRvU2hyaW5rVG9GaXRF
bmFibGVkID0gZmFsc2U7IH0KIAotICAgIHZvaWQgY29sbGVjdEZlYXR1cmVzKENTU1N0eWxlU2Vs
ZWN0b3I6OkZlYXR1cmVzJikgY29uc3Q7CisgICAgY29uc3QgQ1NTU3R5bGVTZWxlY3Rvcjo6RmVh
dHVyZXMmIGZlYXR1cmVzKCkgY29uc3QgeyByZXR1cm4gbV9mZWF0dXJlczsgfQogCiAgICAgY29u
c3QgVmVjdG9yPFJ1bGVEYXRhPiogaWRSdWxlcyhBdG9taWNTdHJpbmdJbXBsKiBrZXkpIGNvbnN0
IHsgcmV0dXJuIG1faWRSdWxlcy5nZXQoa2V5KTsgfQogICAgIGNvbnN0IFZlY3RvcjxSdWxlRGF0
YT4qIGNsYXNzUnVsZXMoQXRvbWljU3RyaW5nSW1wbCoga2V5KSBjb25zdCB7IHJldHVybiBtX2Ns
YXNzUnVsZXMuZ2V0KGtleSk7IH0KQEAgLTI1NCw2ICsyNTQsOCBAQCBwdWJsaWM6CiAgICAgdW5z
aWduZWQgbV9ydWxlQ291bnQ7CiAgICAgYm9vbCBtX2F1dG9TaHJpbmtUb0ZpdEVuYWJsZWQ7CiAg
ICAgRVJlZ2lvblN0eWxlRW5hYmxlZCBtX3VzZUluUmVnaW9uU3R5bGU7CisKKyAgICBDU1NTdHls
ZVNlbGVjdG9yOjpGZWF0dXJlcyBtX2ZlYXR1cmVzOwogfTsKIAogc3RhdGljIFJ1bGVTZXQqIGRl
ZmF1bHRTdHlsZTsKQEAgLTI2Miw5ICsyNjQsNiBAQCBzdGF0aWMgUnVsZVNldCogZGVmYXVsdFBy
aW50U3R5bGU7CiBzdGF0aWMgUnVsZVNldCogZGVmYXVsdFZpZXdTb3VyY2VTdHlsZTsKIHN0YXRp
YyBDU1NTdHlsZVNoZWV0KiBzaW1wbGVEZWZhdWx0U3R5bGVTaGVldDsKIAotc3RhdGljIFJ1bGVT
ZXQqIHNpYmxpbmdSdWxlc0luRGVmYXVsdFN0eWxlOwotc3RhdGljIFJ1bGVTZXQqIHVuY29tbW9u
QXR0cmlidXRlUnVsZXNJbkRlZmF1bHRTdHlsZTsKLQogUmVuZGVyU3R5bGUqIENTU1N0eWxlU2Vs
ZWN0b3I6OnNfc3R5bGVOb3RZZXRBdmFpbGFibGU7CiAKIHN0YXRpYyB2b2lkIGxvYWRGdWxsRGVm
YXVsdFN0eWxlKCk7CkBAIC0yNzcsMjcgKzI3Niw2IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBlbGVt
ZW50Q2FuVXNlU2ltcGxlRGUKICAgICByZXR1cm4gZS0+aGFzVGFnTmFtZShodG1sVGFnKSB8fCBl
LT5oYXNUYWdOYW1lKGhlYWRUYWcpIHx8IGUtPmhhc1RhZ05hbWUoYm9keVRhZykgfHwgZS0+aGFz
VGFnTmFtZShkaXZUYWcpIHx8IGUtPmhhc1RhZ05hbWUoc3BhblRhZykgfHwgZS0+aGFzVGFnTmFt
ZShiclRhZykgfHwgZS0+aGFzVGFnTmFtZShhVGFnKTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lk
IGNvbGxlY3RTcGVjaWFsUnVsZXNJbkRlZmF1bHRTdHlsZSgpCi17Ci0gICAgQ1NTU3R5bGVTZWxl
Y3Rvcjo6RmVhdHVyZXMgZmVhdHVyZXM7Ci0gICAgZGVmYXVsdFN0eWxlLT5jb2xsZWN0RmVhdHVy
ZXMoZmVhdHVyZXMpOwotICAgIEFTU0VSVChmZWF0dXJlcy5pZHNJblJ1bGVzLmlzRW1wdHkoKSk7
Ci0gICAgZGVsZXRlIHNpYmxpbmdSdWxlc0luRGVmYXVsdFN0eWxlOwotICAgIGRlbGV0ZSB1bmNv
bW1vbkF0dHJpYnV0ZVJ1bGVzSW5EZWZhdWx0U3R5bGU7Ci0gICAgc2libGluZ1J1bGVzSW5EZWZh
dWx0U3R5bGUgPSBmZWF0dXJlcy5zaWJsaW5nUnVsZXMubGVha1B0cigpOwotICAgIHVuY29tbW9u
QXR0cmlidXRlUnVsZXNJbkRlZmF1bHRTdHlsZSA9IGZlYXR1cmVzLnVuY29tbW9uQXR0cmlidXRl
UnVsZXMubGVha1B0cigpOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgYXNzZXJ0Tm9TaWJsaW5n
UnVsZXNJbkRlZmF1bHRTdHlsZSgpCi17Ci0jaWZuZGVmIE5ERUJVRwotICAgIGlmIChzaWJsaW5n
UnVsZXNJbkRlZmF1bHRTdHlsZSkKLSAgICAgICAgcmV0dXJuOwotICAgIGNvbGxlY3RTcGVjaWFs
UnVsZXNJbkRlZmF1bHRTdHlsZSgpOwotICAgIEFTU0VSVCghc2libGluZ1J1bGVzSW5EZWZhdWx0
U3R5bGUpOwotI2VuZGlmCi19Ci0KIHN0YXRpYyBjb25zdCBNZWRpYVF1ZXJ5RXZhbHVhdG9yJiBz
Y3JlZW5FdmFsKCkKIHsKICAgICBERUZJTkVfU1RBVElDX0xPQ0FMKGNvbnN0IE1lZGlhUXVlcnlF
dmFsdWF0b3IsIHN0YXRpY1NjcmVlbkV2YWwsICgic2NyZWVuIikpOwpAQCAtNDE4LDI0ICszOTYs
MzEgQEAgQ1NTU3R5bGVTZWxlY3Rvcjo6Q1NTU3R5bGVTZWxlY3RvcihEb2N1bQogICAgIC8vIGFk
ZCBzdHlsZXNoZWV0cyBmcm9tIGRvY3VtZW50CiAgICAgYXBwZW5kQXV0aG9yU3R5bGVzaGVldHMo
MCwgc3R5bGVTaGVldHMtPnZlY3RvcigpKTsKIH0KKyAgICAKK3N0YXRpYyBQYXNzT3duUHRyPFJ1
bGVTZXQ+IG1ha2VSdWxlU2V0KGNvbnN0IFZlY3RvcjxDU1NTdHlsZVNlbGVjdG9yOjpSdWxlU2Vs
ZWN0b3JQYWlyPiYgcnVsZXMpCit7CisgICAgc2l6ZV90IHNpemUgPSBydWxlcy5zaXplKCk7Cisg
ICAgaWYgKCFzaXplKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICBPd25QdHI8UnVsZVNl
dD4gcnVsZVNldCA9IGFkb3B0UHRyKG5ldyBSdWxlU2V0KTsKKyAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IHNpemU7ICsraSkKKyAgICAgICAgcnVsZVNldC0+YWRkUnVsZShydWxlc1tpXS5ydWxl
LCBydWxlc1tpXS5zZWxlY3Rvcik7CisgICAgcmV0dXJuIHJ1bGVTZXQucmVsZWFzZSgpOworfQog
CiB2b2lkIENTU1N0eWxlU2VsZWN0b3I6OmNvbGxlY3RGZWF0dXJlcygpCiB7CisgICAgbV9mZWF0
dXJlcy5jbGVhcigpOwogICAgIC8vIENvbGxlY3QgYWxsIGlkcyBhbmQgcnVsZXMgdXNpbmcgc2li
bGluZyBzZWxlY3RvcnMgKDpmaXJzdC1jaGlsZCBhbmQgc2ltaWxhcikKICAgICAvLyBpbiB0aGUg
Y3VycmVudCBzZXQgb2Ygc3R5bGVzaGVldHMuIFN0eWxlIHNoYXJpbmcgY29kZSB1c2VzIHRoaXMg
aW5mb3JtYXRpb24gdG8gcmVqZWN0CiAgICAgLy8gc2hhcmluZyBjYW5kaWRhdGVzLgotICAgIC8v
IFVzdWFsbHkgdGhlcmUgYXJlIG5vIHNpYmxpbmcgcnVsZXMgaW4gdGhlIGRlZmF1bHQgc3R5bGUg
YnV0IHRoZSBNYXRoTUwgc2hlZXQgaGFzIHNvbWUuCi0gICAgaWYgKHNpYmxpbmdSdWxlc0luRGVm
YXVsdFN0eWxlKQotICAgICAgICBzaWJsaW5nUnVsZXNJbkRlZmF1bHRTdHlsZS0+Y29sbGVjdEZl
YXR1cmVzKG1fZmVhdHVyZXMpOwotICAgIGlmICh1bmNvbW1vbkF0dHJpYnV0ZVJ1bGVzSW5EZWZh
dWx0U3R5bGUpCi0gICAgICAgIHVuY29tbW9uQXR0cmlidXRlUnVsZXNJbkRlZmF1bHRTdHlsZS0+
Y29sbGVjdEZlYXR1cmVzKG1fZmVhdHVyZXMpOwotICAgIG1fYXV0aG9yU3R5bGUtPmNvbGxlY3RG
ZWF0dXJlcyhtX2ZlYXR1cmVzKTsKKyAgICBtX2ZlYXR1cmVzLmFkZChkZWZhdWx0U3R5bGUtPmZl
YXR1cmVzKCkpOworICAgIG1fZmVhdHVyZXMuYWRkKG1fYXV0aG9yU3R5bGUtPmZlYXR1cmVzKCkp
OwogICAgIGlmIChtX3VzZXJTdHlsZSkKLSAgICAgICAgbV91c2VyU3R5bGUtPmNvbGxlY3RGZWF0
dXJlcyhtX2ZlYXR1cmVzKTsKLSAgICBpZiAobV9mZWF0dXJlcy5zaWJsaW5nUnVsZXMpCi0gICAg
ICAgIG1fZmVhdHVyZXMuc2libGluZ1J1bGVzLT5zaHJpbmtUb0ZpdCgpOwotICAgIGlmIChtX2Zl
YXR1cmVzLnVuY29tbW9uQXR0cmlidXRlUnVsZXMpCi0gICAgICAgIG1fZmVhdHVyZXMudW5jb21t
b25BdHRyaWJ1dGVSdWxlcy0+c2hyaW5rVG9GaXQoKTsKKyAgICAgICAgbV9mZWF0dXJlcy5hZGQo
bV91c2VyU3R5bGUtPmZlYXR1cmVzKCkpOworCisgICAgbV9zaWJsaW5nUnVsZVNldCA9IG1ha2VS
dWxlU2V0KG1fZmVhdHVyZXMuc2libGluZ1J1bGVzKTsKKyAgICBtX3VuY29tbW9uQXR0cmlidXRl
UnVsZVNldCA9IG1ha2VSdWxlU2V0KG1fZmVhdHVyZXMudW5jb21tb25BdHRyaWJ1dGVSdWxlcyk7
CiB9CiAKIHZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6YXBwZW5kQXV0aG9yU3R5bGVzaGVldHModW5z
aWduZWQgZmlyc3ROZXcsIGNvbnN0IFZlY3RvcjxSZWZQdHI8U3R5bGVTaGVldD4gPiYgc3R5bGVz
aGVldHMpCkBAIC00NDksOCArNDM0LDYgQEAgdm9pZCBDU1NTdHlsZVNlbGVjdG9yOjphcHBlbmRB
dXRob3JTdHlsZQogICAgICAgICBtX2F1dGhvclN0eWxlLT5hZGRSdWxlc0Zyb21TaGVldChzdGF0
aWNfY2FzdDxDU1NTdHlsZVNoZWV0Kj4oc3R5bGVzaGVldHNbaV0uZ2V0KCkpLCAqbV9tZWRpdW0s
IHRoaXMpOwogICAgIH0KICAgICBtX2F1dGhvclN0eWxlLT5zaHJpbmtUb0ZpdCgpOwotICAgIC8v
IEZJWE1FOiBUaGlzIHJlYWxseSBvbmx5IG5lZWRzIHRvIGNvbGxlY3QgdGhlIGZlYXR1cmVzIGZy
b20gdGhlIG5ld2x5IGFkZGVkIHNoZWV0cy4KLSAgICBtX2ZlYXR1cmVzLmNsZWFyKCk7CiAgICAg
Y29sbGVjdEZlYXR1cmVzKCk7CiAgICAgCiAgICAgaWYgKGRvY3VtZW50KCktPnJlbmRlcmVyKCkg
JiYgZG9jdW1lbnQoKS0+cmVuZGVyZXIoKS0+c3R5bGUoKSkKQEAgLTUwNSw2ICs0ODgsMjEgQEAg
Q1NTU3R5bGVTZWxlY3Rvcjo6RmVhdHVyZXM6OkZlYXR1cmVzKCkKIENTU1N0eWxlU2VsZWN0b3I6
OkZlYXR1cmVzOjp+RmVhdHVyZXMoKQogewogfQorICAgIAordm9pZCBDU1NTdHlsZVNlbGVjdG9y
OjpGZWF0dXJlczo6YWRkKGNvbnN0IENTU1N0eWxlU2VsZWN0b3I6OkZlYXR1cmVzJiBvdGhlcikK
K3sKKyAgICBIYXNoU2V0PEF0b21pY1N0cmluZ0ltcGwqPjo6aXRlcmF0b3IgZW5kID0gb3RoZXIu
aWRzSW5SdWxlcy5lbmQoKTsKKyAgICBmb3IgKEhhc2hTZXQ8QXRvbWljU3RyaW5nSW1wbCo+Ojpp
dGVyYXRvciBpdCA9IG90aGVyLmlkc0luUnVsZXMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQor
ICAgICAgICBpZHNJblJ1bGVzLmFkZCgqaXQpOworICAgIGVuZCA9IG90aGVyLmF0dHJzSW5SdWxl
cy5lbmQoKTsKKyAgICBmb3IgKEhhc2hTZXQ8QXRvbWljU3RyaW5nSW1wbCo+OjppdGVyYXRvciBp
dCA9IG90aGVyLmF0dHJzSW5SdWxlcy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCisgICAgICAg
IGF0dHJzSW5SdWxlcy5hZGQoKml0KTsKKyAgICBzaWJsaW5nUnVsZXMuYXBwZW5kKG90aGVyLnNp
YmxpbmdSdWxlcyk7CisgICAgdW5jb21tb25BdHRyaWJ1dGVSdWxlcy5hcHBlbmQob3RoZXIudW5j
b21tb25BdHRyaWJ1dGVSdWxlcyk7CisgICAgdXNlc0ZpcnN0TGluZVJ1bGVzID0gdXNlc0ZpcnN0
TGluZVJ1bGVzIHx8IG90aGVyLnVzZXNGaXJzdExpbmVSdWxlczsKKyAgICB1c2VzQmVmb3JlQWZ0
ZXJSdWxlcyA9IHVzZXNCZWZvcmVBZnRlclJ1bGVzIHx8IG90aGVyLnVzZXNCZWZvcmVBZnRlclJ1
bGVzOworICAgIHVzZXNMaW5rUnVsZXMgPSB1c2VzTGlua1J1bGVzIHx8IG90aGVyLnVzZXNMaW5r
UnVsZXM7Cit9CiAKIHZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6RmVhdHVyZXM6OmNsZWFyKCkKIHsK
QEAgLTU4MywxMSArNTgxLDggQEAgc3RhdGljIHZvaWQgbG9hZFZpZXdTb3VyY2VTdHlsZSgpCiAK
IHN0YXRpYyB2b2lkIGVuc3VyZURlZmF1bHRTdHlsZVNoZWV0c0ZvckVsZW1lbnQoRWxlbWVudCog
ZWxlbWVudCkKIHsKLSAgICBpZiAoc2ltcGxlRGVmYXVsdFN0eWxlU2hlZXQgJiYgIWVsZW1lbnRD
YW5Vc2VTaW1wbGVEZWZhdWx0U3R5bGUoZWxlbWVudCkpIHsKKyAgICBpZiAoc2ltcGxlRGVmYXVs
dFN0eWxlU2hlZXQgJiYgIWVsZW1lbnRDYW5Vc2VTaW1wbGVEZWZhdWx0U3R5bGUoZWxlbWVudCkp
CiAgICAgICAgIGxvYWRGdWxsRGVmYXVsdFN0eWxlKCk7Ci0gICAgICAgIGFzc2VydE5vU2libGlu
Z1J1bGVzSW5EZWZhdWx0U3R5bGUoKTsKLSAgICAgICAgY29sbGVjdFNwZWNpYWxSdWxlc0luRGVm
YXVsdFN0eWxlKCk7Ci0gICAgfQogCiAjaWYgRU5BQkxFKFNWRykKICAgICBzdGF0aWMgYm9vbCBs
b2FkZWRTVkdVc2VyQWdlbnRTaGVldDsKQEAgLTU5NywyMSArNTkyLDE3IEBAIHN0YXRpYyB2b2lk
IGVuc3VyZURlZmF1bHRTdHlsZVNoZWV0c0ZvckUKICAgICAgICAgQ1NTU3R5bGVTaGVldCogc3Zn
U2hlZXQgPSBwYXJzZVVBU2hlZXQoc3ZnVXNlckFnZW50U3R5bGVTaGVldCwgc2l6ZW9mKHN2Z1Vz
ZXJBZ2VudFN0eWxlU2hlZXQpKTsKICAgICAgICAgZGVmYXVsdFN0eWxlLT5hZGRSdWxlc0Zyb21T
aGVldChzdmdTaGVldCwgc2NyZWVuRXZhbCgpKTsKICAgICAgICAgZGVmYXVsdFByaW50U3R5bGUt
PmFkZFJ1bGVzRnJvbVNoZWV0KHN2Z1NoZWV0LCBwcmludEV2YWwoKSk7Ci0gICAgICAgIGFzc2Vy
dE5vU2libGluZ1J1bGVzSW5EZWZhdWx0U3R5bGUoKTsKLSAgICAgICAgY29sbGVjdFNwZWNpYWxS
dWxlc0luRGVmYXVsdFN0eWxlKCk7CiAgICAgfQogI2VuZGlmCiAKLSNpZiBFTkFCTEUoTUFUSE1M
KQogICAgIHN0YXRpYyBib29sIGxvYWRlZE1hdGhNTFVzZXJBZ2VudFNoZWV0OworI2lmIEVOQUJM
RShNQVRITUwpCiAgICAgaWYgKGVsZW1lbnQtPmlzTWF0aE1MRWxlbWVudCgpICYmICFsb2FkZWRN
YXRoTUxVc2VyQWdlbnRTaGVldCkgewogICAgICAgICAvLyBNYXRoTUwgcnVsZXMuCiAgICAgICAg
IGxvYWRlZE1hdGhNTFVzZXJBZ2VudFNoZWV0ID0gdHJ1ZTsKICAgICAgICAgQ1NTU3R5bGVTaGVl
dCogbWF0aE1MU2hlZXQgPSBwYXJzZVVBU2hlZXQobWF0aG1sVXNlckFnZW50U3R5bGVTaGVldCwg
c2l6ZW9mKG1hdGhtbFVzZXJBZ2VudFN0eWxlU2hlZXQpKTsKICAgICAgICAgZGVmYXVsdFN0eWxl
LT5hZGRSdWxlc0Zyb21TaGVldChtYXRoTUxTaGVldCwgc2NyZWVuRXZhbCgpKTsKICAgICAgICAg
ZGVmYXVsdFByaW50U3R5bGUtPmFkZFJ1bGVzRnJvbVNoZWV0KG1hdGhNTFNoZWV0LCBwcmludEV2
YWwoKSk7Ci0gICAgICAgIC8vIFRoZXJlIGFyZSBzb21lIHNpYmxpbmcgYW5kIHVuY29tbW9uIGF0
dHJpYnV0ZSBydWxlcyBoZXJlLgotICAgICAgICBjb2xsZWN0U3BlY2lhbFJ1bGVzSW5EZWZhdWx0
U3R5bGUoKTsKICAgICB9CiAjZW5kaWYKIApAQCAtNjIzLDcgKzYxNCw2IEBAIHN0YXRpYyB2b2lk
IGVuc3VyZURlZmF1bHRTdHlsZVNoZWV0c0ZvckUKICAgICAgICAgQ1NTU3R5bGVTaGVldCogbWVk
aWFDb250cm9sc1NoZWV0ID0gcGFyc2VVQVNoZWV0KG1lZGlhUnVsZXMpOwogICAgICAgICBkZWZh
dWx0U3R5bGUtPmFkZFJ1bGVzRnJvbVNoZWV0KG1lZGlhQ29udHJvbHNTaGVldCwgc2NyZWVuRXZh
bCgpKTsKICAgICAgICAgZGVmYXVsdFByaW50U3R5bGUtPmFkZFJ1bGVzRnJvbVNoZWV0KG1lZGlh
Q29udHJvbHNTaGVldCwgcHJpbnRFdmFsKCkpOwotICAgICAgICBjb2xsZWN0U3BlY2lhbFJ1bGVz
SW5EZWZhdWx0U3R5bGUoKTsKICAgICB9CiAjZW5kaWYKIApAQCAtNjM1LDkgKzYyNSwxMSBAQCBz
dGF0aWMgdm9pZCBlbnN1cmVEZWZhdWx0U3R5bGVTaGVldHNGb3JFCiAgICAgICAgIENTU1N0eWxl
U2hlZXQqIGZ1bGxzY3JlZW5TaGVldCA9IHBhcnNlVUFTaGVldChmdWxsc2NyZWVuUnVsZXMpOwog
ICAgICAgICBkZWZhdWx0U3R5bGUtPmFkZFJ1bGVzRnJvbVNoZWV0KGZ1bGxzY3JlZW5TaGVldCwg
c2NyZWVuRXZhbCgpKTsKICAgICAgICAgZGVmYXVsdFF1aXJrc1N0eWxlLT5hZGRSdWxlc0Zyb21T
aGVldChmdWxsc2NyZWVuU2hlZXQsIHNjcmVlbkV2YWwoKSk7Ci0gICAgICAgIGNvbGxlY3RTcGVj
aWFsUnVsZXNJbkRlZmF1bHRTdHlsZSgpOwogICAgIH0KICNlbmRpZgorCisgICAgQVNTRVJUKGRl
ZmF1bHRTdHlsZS0+ZmVhdHVyZXMoKS5pZHNJblJ1bGVzLmlzRW1wdHkoKSk7CisgICAgQVNTRVJU
KGxvYWRlZE1hdGhNTFVzZXJBZ2VudFNoZWV0IHx8IGRlZmF1bHRTdHlsZS0+ZmVhdHVyZXMoKS5z
aWJsaW5nUnVsZXMuaXNFbXB0eSgpKTsKIH0KIAogdm9pZCBDU1NTdHlsZVNlbGVjdG9yOjphZGRN
YXRjaGVkRGVjbGFyYXRpb24oQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24qIHN0eWxlRGVjbGFy
YXRpb24sIHVuc2lnbmVkIGxpbmtNYXRjaFR5cGUsIEVSZWdpb25TdHlsZUVuYWJsZWQgdXNlSW5S
ZWdpb25TdHlsZSkKQEAgLTExOTEsMTAgKzExODMsMTAgQEAgUmVuZGVyU3R5bGUqIENTU1N0eWxl
U2VsZWN0b3I6OmxvY2F0ZVNoYQogICAgICAgICByZXR1cm4gMDsKIAogICAgIC8vIENhbid0IHNo
YXJlIGlmIHNpYmxpbmcgcnVsZXMgYXBwbHkuIFRoaXMgaXMgY2hlY2tlZCBhdCB0aGUgZW5kIGFz
IGl0IHNob3VsZCByYXJlbHkgZmFpbC4KLSAgICBpZiAobWF0Y2hlc1J1bGVTZXQobV9mZWF0dXJl
cy5zaWJsaW5nUnVsZXMuZ2V0KCkpKQorICAgIGlmIChtYXRjaGVzUnVsZVNldChtX3NpYmxpbmdS
dWxlU2V0LmdldCgpKSkKICAgICAgICAgcmV0dXJuIDA7CiAgICAgLy8gQ2FuJ3Qgc2hhcmUgaWYg
YXR0cmlidXRlIHJ1bGVzIGFwcGx5LgotICAgIGlmIChtYXRjaGVzUnVsZVNldChtX2ZlYXR1cmVz
LnVuY29tbW9uQXR0cmlidXRlUnVsZXMuZ2V0KCkpKQorICAgIGlmIChtYXRjaGVzUnVsZVNldCht
X3VuY29tbW9uQXR0cmlidXRlUnVsZVNldC5nZXQoKSkpCiAgICAgICAgIHJldHVybiAwOwogICAg
IC8vIFRyYWNraW5nIGNoaWxkIGluZGV4IHJlcXVpcmVzIHVuaXF1ZSBzdHlsZSBmb3IgZWFjaCBu
b2RlLiBUaGlzIG1heSBnZXQgc2V0IGJ5IHRoZSBzaWJsaW5nIHJ1bGUgbWF0Y2ggYWJvdmUuCiAg
ICAgaWYgKHBhcmVudFN0eWxlUHJldmVudHNTaGFyaW5nKG1fcGFyZW50U3R5bGUpKQpAQCAtMTk4
NCwzMyArMTk3Niw3OSBAQCBSdWxlU2V0OjpSdWxlU2V0KEVSZWdpb25TdHlsZUVuYWJsZWQgdXNl
CiB7CiB9CiAKLXZvaWQgUnVsZVNldDo6YWRkVG9SdWxlU2V0KEF0b21pY1N0cmluZ0ltcGwqIGtl
eSwgQXRvbVJ1bGVNYXAmIG1hcCwgQ1NTU3R5bGVSdWxlKiBydWxlLCBDU1NTZWxlY3Rvciogc2Vs
ZWN0b3IpCitzdGF0aWMgaW5saW5lIHZvaWQgY29sbGVjdEZlYXR1cmVzRnJvbVNlbGVjdG9yKENT
U1N0eWxlU2VsZWN0b3I6OkZlYXR1cmVzJiBmZWF0dXJlcywgY29uc3QgQ1NTU2VsZWN0b3IqIHNl
bGVjdG9yKQoreworICAgIGlmIChzZWxlY3Rvci0+bV9tYXRjaCA9PSBDU1NTZWxlY3Rvcjo6SWQp
CisgICAgICAgIGZlYXR1cmVzLmlkc0luUnVsZXMuYWRkKHNlbGVjdG9yLT52YWx1ZSgpLmltcGwo
KSk7CisgICAgaWYgKHNlbGVjdG9yLT5pc0F0dHJpYnV0ZVNlbGVjdG9yKCkpCisgICAgICAgIGZl
YXR1cmVzLmF0dHJzSW5SdWxlcy5hZGQoc2VsZWN0b3ItPmF0dHJpYnV0ZSgpLmxvY2FsTmFtZSgp
LmltcGwoKSk7CisgICAgc3dpdGNoIChzZWxlY3Rvci0+cHNldWRvVHlwZSgpKSB7CisgICAgY2Fz
ZSBDU1NTZWxlY3Rvcjo6UHNldWRvRmlyc3RMaW5lOgorICAgICAgICBmZWF0dXJlcy51c2VzRmly
c3RMaW5lUnVsZXMgPSB0cnVlOworICAgICAgICBicmVhazsKKyAgICBjYXNlIENTU1NlbGVjdG9y
OjpQc2V1ZG9CZWZvcmU6CisgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvQWZ0ZXI6CisgICAg
ICAgIGZlYXR1cmVzLnVzZXNCZWZvcmVBZnRlclJ1bGVzID0gdHJ1ZTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvTGluazoKKyAgICBjYXNlIENTU1NlbGVjdG9y
OjpQc2V1ZG9WaXNpdGVkOgorICAgICAgICBmZWF0dXJlcy51c2VzTGlua1J1bGVzID0gdHJ1ZTsK
KyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgYnJlYWs7CisgICAgfQorfQor
CitzdGF0aWMgdm9pZCBjb2xsZWN0RmVhdHVyZXNGcm9tUnVsZURhdGEoQ1NTU3R5bGVTZWxlY3Rv
cjo6RmVhdHVyZXMmIGZlYXR1cmVzLCBjb25zdCBSdWxlRGF0YSYgcnVsZURhdGEpCit7CisgICAg
Ym9vbCBmb3VuZFNpYmxpbmdTZWxlY3RvciA9IGZhbHNlOworICAgIGZvciAoQ1NTU2VsZWN0b3Iq
IHNlbGVjdG9yID0gcnVsZURhdGEuc2VsZWN0b3IoKTsgc2VsZWN0b3I7IHNlbGVjdG9yID0gc2Vs
ZWN0b3ItPnRhZ0hpc3RvcnkoKSkgeworICAgICAgICBjb2xsZWN0RmVhdHVyZXNGcm9tU2VsZWN0
b3IoZmVhdHVyZXMsIHNlbGVjdG9yKTsKKyAgICAgICAgCisgICAgICAgIGlmIChDU1NTZWxlY3Rv
ckxpc3QqIHNlbGVjdG9yTGlzdCA9IHNlbGVjdG9yLT5zZWxlY3Rvckxpc3QoKSkgeworICAgICAg
ICAgICAgZm9yIChDU1NTZWxlY3Rvciogc3ViU2VsZWN0b3IgPSBzZWxlY3Rvckxpc3QtPmZpcnN0
KCk7IHN1YlNlbGVjdG9yOyBzdWJTZWxlY3RvciA9IENTU1NlbGVjdG9yTGlzdDo6bmV4dChzdWJT
ZWxlY3RvcikpIHsKKyAgICAgICAgICAgICAgICBpZiAoIWZvdW5kU2libGluZ1NlbGVjdG9yICYm
IHNlbGVjdG9yLT5pc1NpYmxpbmdTZWxlY3RvcigpKQorICAgICAgICAgICAgICAgICAgICBmb3Vu
ZFNpYmxpbmdTZWxlY3RvciA9IHRydWU7CisgICAgICAgICAgICAgICAgY29sbGVjdEZlYXR1cmVz
RnJvbVNlbGVjdG9yKGZlYXR1cmVzLCBzdWJTZWxlY3Rvcik7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0gZWxzZSBpZiAoIWZvdW5kU2libGluZ1NlbGVjdG9yICYmIHNlbGVjdG9yLT5pc1NpYmxp
bmdTZWxlY3RvcigpKQorICAgICAgICAgICAgZm91bmRTaWJsaW5nU2VsZWN0b3IgPSB0cnVlOwor
ICAgIH0KKyAgICBpZiAoZm91bmRTaWJsaW5nU2VsZWN0b3IpCisgICAgICAgIGZlYXR1cmVzLnNp
YmxpbmdSdWxlcy5hcHBlbmQoQ1NTU3R5bGVTZWxlY3Rvcjo6UnVsZVNlbGVjdG9yUGFpcihydWxl
RGF0YS5ydWxlKCksIHJ1bGVEYXRhLnNlbGVjdG9yKCkpKTsKKyAgICBpZiAocnVsZURhdGEuY29u
dGFpbnNVbmNvbW1vbkF0dHJpYnV0ZVNlbGVjdG9yKCkpCisgICAgICAgIGZlYXR1cmVzLnVuY29t
bW9uQXR0cmlidXRlUnVsZXMuYXBwZW5kKENTU1N0eWxlU2VsZWN0b3I6OlJ1bGVTZWxlY3RvclBh
aXIocnVsZURhdGEucnVsZSgpLCBydWxlRGF0YS5zZWxlY3RvcigpKSk7Cit9CisgICAgCit2b2lk
IFJ1bGVTZXQ6OmFkZFRvUnVsZVNldChBdG9taWNTdHJpbmdJbXBsKiBrZXksIEF0b21SdWxlTWFw
JiBtYXAsIGNvbnN0IFJ1bGVEYXRhJiBydWxlRGF0YSkKIHsKICAgICBpZiAoIWtleSkKICAgICAg
ICAgcmV0dXJuOwogICAgIE93blB0cjxWZWN0b3I8UnVsZURhdGE+ID4mIHJ1bGVzID0gbWFwLmFk
ZChrZXksIG51bGxwdHIpLmZpcnN0LT5zZWNvbmQ7CiAgICAgaWYgKCFydWxlcykKICAgICAgICAg
cnVsZXMgPSBhZG9wdFB0cihuZXcgVmVjdG9yPFJ1bGVEYXRhPik7Ci0gICAgcnVsZXMtPmFwcGVu
ZChSdWxlRGF0YShydWxlLCBzZWxlY3RvciwgbV9ydWxlQ291bnQrKywgbV91c2VJblJlZ2lvblN0
eWxlKSk7CisgICAgcnVsZXMtPmFwcGVuZChydWxlRGF0YSk7CiB9CiAKLXZvaWQgUnVsZVNldDo6
YWRkUnVsZShDU1NTdHlsZVJ1bGUqIHJ1bGUsIENTU1NlbGVjdG9yKiBzZWwpCit2b2lkIFJ1bGVT
ZXQ6OmFkZFJ1bGUoQ1NTU3R5bGVSdWxlKiBydWxlLCBDU1NTZWxlY3Rvciogc2VsZWN0b3IpCiB7
Ci0gICAgaWYgKHNlbC0+bV9tYXRjaCA9PSBDU1NTZWxlY3Rvcjo6SWQpIHsKLSAgICAgICAgYWRk
VG9SdWxlU2V0KHNlbC0+dmFsdWUoKS5pbXBsKCksIG1faWRSdWxlcywgcnVsZSwgc2VsKTsKKyAg
ICBSdWxlRGF0YSBydWxlRGF0YShydWxlLCBzZWxlY3RvciwgbV9ydWxlQ291bnQrKywgbV91c2VJ
blJlZ2lvblN0eWxlKTsKKyAgICBjb2xsZWN0RmVhdHVyZXNGcm9tUnVsZURhdGEobV9mZWF0dXJl
cywgcnVsZURhdGEpOworCisgICAgaWYgKHNlbGVjdG9yLT5tX21hdGNoID09IENTU1NlbGVjdG9y
OjpJZCkgeworICAgICAgICBhZGRUb1J1bGVTZXQoc2VsZWN0b3ItPnZhbHVlKCkuaW1wbCgpLCBt
X2lkUnVsZXMsIHJ1bGVEYXRhKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBpZiAoc2Vs
LT5tX21hdGNoID09IENTU1NlbGVjdG9yOjpDbGFzcykgewotICAgICAgICBhZGRUb1J1bGVTZXQo
c2VsLT52YWx1ZSgpLmltcGwoKSwgbV9jbGFzc1J1bGVzLCBydWxlLCBzZWwpOworICAgIGlmIChz
ZWxlY3Rvci0+bV9tYXRjaCA9PSBDU1NTZWxlY3Rvcjo6Q2xhc3MpIHsKKyAgICAgICAgYWRkVG9S
dWxlU2V0KHNlbGVjdG9yLT52YWx1ZSgpLmltcGwoKSwgbV9jbGFzc1J1bGVzLCBydWxlRGF0YSk7
CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgaWYgKHNlbC0+aXNVbmtub3duUHNldWRvRWxl
bWVudCgpKSB7Ci0gICAgICAgIGFkZFRvUnVsZVNldChzZWwtPnZhbHVlKCkuaW1wbCgpLCBtX3No
YWRvd1BzZXVkb0VsZW1lbnRSdWxlcywgcnVsZSwgc2VsKTsKKyAgICBpZiAoc2VsZWN0b3ItPmlz
VW5rbm93blBzZXVkb0VsZW1lbnQoKSkgeworICAgICAgICBhZGRUb1J1bGVTZXQoc2VsZWN0b3It
PnZhbHVlKCkuaW1wbCgpLCBtX3NoYWRvd1BzZXVkb0VsZW1lbnRSdWxlcywgcnVsZURhdGEpOwog
ICAgICAgICByZXR1cm47CiAgICAgfQotICAgIGlmIChTZWxlY3RvckNoZWNrZXI6OmlzQ29tbW9u
UHNldWRvQ2xhc3NTZWxlY3RvcihzZWwpKSB7Ci0gICAgICAgIFJ1bGVEYXRhIHJ1bGVEYXRhKHJ1
bGUsIHNlbCwgbV9ydWxlQ291bnQrKyk7Ci0gICAgICAgIHN3aXRjaCAoc2VsLT5wc2V1ZG9UeXBl
KCkpIHsKKyAgICBpZiAoU2VsZWN0b3JDaGVja2VyOjppc0NvbW1vblBzZXVkb0NsYXNzU2VsZWN0
b3Ioc2VsZWN0b3IpKSB7CisgICAgICAgIHN3aXRjaCAoc2VsZWN0b3ItPnBzZXVkb1R5cGUoKSkg
ewogICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9MaW5rOgogICAgICAgICBjYXNlIENT
U1NlbGVjdG9yOjpQc2V1ZG9WaXNpdGVkOgogICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1
ZG9BbnlMaW5rOgpAQCAtMjAyNCwxMyArMjA2MiwxMiBAQCB2b2lkIFJ1bGVTZXQ6OmFkZFJ1bGUo
Q1NTU3R5bGVSdWxlKiBydWxlCiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAg
ICBjb25zdCBBdG9taWNTdHJpbmcmIGxvY2FsTmFtZSA9IHNlbC0+dGFnKCkubG9jYWxOYW1lKCk7
CisgICAgY29uc3QgQXRvbWljU3RyaW5nJiBsb2NhbE5hbWUgPSBzZWxlY3Rvci0+dGFnKCkubG9j
YWxOYW1lKCk7CiAgICAgaWYgKGxvY2FsTmFtZSAhPSBzdGFyQXRvbSkgewotICAgICAgICBhZGRU
b1J1bGVTZXQobG9jYWxOYW1lLmltcGwoKSwgbV90YWdSdWxlcywgcnVsZSwgc2VsKTsKKyAgICAg
ICAgYWRkVG9SdWxlU2V0KGxvY2FsTmFtZS5pbXBsKCksIG1fdGFnUnVsZXMsIHJ1bGVEYXRhKTsK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KLQotICAgIG1fdW5pdmVyc2FsUnVsZXMuYXBwZW5kKFJ1
bGVEYXRhKHJ1bGUsIHNlbCwgbV9ydWxlQ291bnQrKykpOworICAgIG1fdW5pdmVyc2FsUnVsZXMu
YXBwZW5kKHJ1bGVEYXRhKTsKIH0KIAogdm9pZCBSdWxlU2V0OjphZGRQYWdlUnVsZShDU1NQYWdl
UnVsZSogcnVsZSkKQEAgLTIxMDMsNzkgKzIxNDAsNiBAQCB2b2lkIFJ1bGVTZXQ6OmFkZFN0eWxl
UnVsZShDU1NTdHlsZVJ1bGUqCiAgICAgICAgIGFkZFJ1bGUocnVsZSwgcyk7CiB9CiAKLXN0YXRp
YyBpbmxpbmUgdm9pZCBjb2xsZWN0RmVhdHVyZXNGcm9tU2VsZWN0b3IoQ1NTU3R5bGVTZWxlY3Rv
cjo6RmVhdHVyZXMmIGZlYXR1cmVzLCBjb25zdCBDU1NTZWxlY3Rvciogc2VsZWN0b3IpCi17Ci0g
ICAgaWYgKHNlbGVjdG9yLT5tX21hdGNoID09IENTU1NlbGVjdG9yOjpJZCAmJiAhc2VsZWN0b3It
PnZhbHVlKCkuaXNFbXB0eSgpKQotICAgICAgICBmZWF0dXJlcy5pZHNJblJ1bGVzLmFkZChzZWxl
Y3Rvci0+dmFsdWUoKS5pbXBsKCkpOwotICAgIGlmIChzZWxlY3Rvci0+aXNBdHRyaWJ1dGVTZWxl
Y3RvcigpKQotICAgICAgICBmZWF0dXJlcy5hdHRyc0luUnVsZXMuYWRkKHNlbGVjdG9yLT5hdHRy
aWJ1dGUoKS5sb2NhbE5hbWUoKS5pbXBsKCkpOwotICAgIHN3aXRjaCAoc2VsZWN0b3ItPnBzZXVk
b1R5cGUoKSkgewotICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0ZpcnN0TGluZToKLSAgICAg
ICAgZmVhdHVyZXMudXNlc0ZpcnN0TGluZVJ1bGVzID0gdHJ1ZTsKLSAgICAgICAgYnJlYWs7Ci0g
ICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvQmVmb3JlOgotICAgIGNhc2UgQ1NTU2VsZWN0b3I6
OlBzZXVkb0FmdGVyOgotICAgICAgICBmZWF0dXJlcy51c2VzQmVmb3JlQWZ0ZXJSdWxlcyA9IHRy
dWU7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0xpbms6Ci0g
ICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvVmlzaXRlZDoKLSAgICAgICAgZmVhdHVyZXMudXNl
c0xpbmtSdWxlcyA9IHRydWU7Ci0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICAg
IGJyZWFrOwotICAgIH0KLX0KLQotc3RhdGljIHZvaWQgY29sbGVjdEZlYXR1cmVzRnJvbUxpc3Qo
Q1NTU3R5bGVTZWxlY3Rvcjo6RmVhdHVyZXMmIGZlYXR1cmVzLCBjb25zdCBWZWN0b3I8UnVsZURh
dGE+JiBydWxlcykKLXsKLSAgICB1bnNpZ25lZCBzaXplID0gcnVsZXMuc2l6ZSgpOwotICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBzaXplOyArK2kpIHsKLSAgICAgICAgY29uc3QgUnVsZURh
dGEmIHJ1bGVEYXRhID0gcnVsZXNbaV07Ci0gICAgICAgIGJvb2wgZm91bmRTaWJsaW5nU2VsZWN0
b3IgPSBmYWxzZTsKLSAgICAgICAgZm9yIChDU1NTZWxlY3Rvciogc2VsZWN0b3IgPSBydWxlRGF0
YS5zZWxlY3RvcigpOyBzZWxlY3Rvcjsgc2VsZWN0b3IgPSBzZWxlY3Rvci0+dGFnSGlzdG9yeSgp
KSB7Ci0gICAgICAgICAgICBjb2xsZWN0RmVhdHVyZXNGcm9tU2VsZWN0b3IoZmVhdHVyZXMsIHNl
bGVjdG9yKTsKLQotICAgICAgICAgICAgaWYgKENTU1NlbGVjdG9yTGlzdCogc2VsZWN0b3JMaXN0
ID0gc2VsZWN0b3ItPnNlbGVjdG9yTGlzdCgpKSB7Ci0gICAgICAgICAgICAgICAgZm9yIChDU1NT
ZWxlY3Rvciogc3ViU2VsZWN0b3IgPSBzZWxlY3Rvckxpc3QtPmZpcnN0KCk7IHN1YlNlbGVjdG9y
OyBzdWJTZWxlY3RvciA9IENTU1NlbGVjdG9yTGlzdDo6bmV4dChzdWJTZWxlY3RvcikpIHsKLSAg
ICAgICAgICAgICAgICAgICAgaWYgKHNlbGVjdG9yLT5pc1NpYmxpbmdTZWxlY3RvcigpKQotICAg
ICAgICAgICAgICAgICAgICAgICAgZm91bmRTaWJsaW5nU2VsZWN0b3IgPSB0cnVlOwotICAgICAg
ICAgICAgICAgICAgICBjb2xsZWN0RmVhdHVyZXNGcm9tU2VsZWN0b3IoZmVhdHVyZXMsIHN1YlNl
bGVjdG9yKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKHNlbGVj
dG9yLT5pc1NpYmxpbmdTZWxlY3RvcigpKQotICAgICAgICAgICAgICAgIGZvdW5kU2libGluZ1Nl
bGVjdG9yID0gdHJ1ZTsKLSAgICAgICAgfQotICAgICAgICBpZiAoZm91bmRTaWJsaW5nU2VsZWN0
b3IpIHsKLSAgICAgICAgICAgIGlmICghZmVhdHVyZXMuc2libGluZ1J1bGVzKQotICAgICAgICAg
ICAgICAgIGZlYXR1cmVzLnNpYmxpbmdSdWxlcyA9IGFkb3B0UHRyKG5ldyBSdWxlU2V0KTsKLSAg
ICAgICAgICAgIGZlYXR1cmVzLnNpYmxpbmdSdWxlcy0+YWRkUnVsZShydWxlRGF0YS5ydWxlKCks
IHJ1bGVEYXRhLnNlbGVjdG9yKCkpOwotICAgICAgICB9Ci0gICAgICAgIGlmIChydWxlRGF0YS5j
b250YWluc1VuY29tbW9uQXR0cmlidXRlU2VsZWN0b3IoKSkgewotICAgICAgICAgICAgaWYgKCFm
ZWF0dXJlcy51bmNvbW1vbkF0dHJpYnV0ZVJ1bGVzKQotICAgICAgICAgICAgICAgIGZlYXR1cmVz
LnVuY29tbW9uQXR0cmlidXRlUnVsZXMgPSBhZG9wdFB0cihuZXcgUnVsZVNldCk7Ci0gICAgICAg
ICAgICBmZWF0dXJlcy51bmNvbW1vbkF0dHJpYnV0ZVJ1bGVzLT5hZGRSdWxlKHJ1bGVEYXRhLnJ1
bGUoKSwgcnVsZURhdGEuc2VsZWN0b3IoKSk7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLXZvaWQg
UnVsZVNldDo6Y29sbGVjdEZlYXR1cmVzKENTU1N0eWxlU2VsZWN0b3I6OkZlYXR1cmVzJiBmZWF0
dXJlcykgY29uc3QKLXsKLSAgICBBdG9tUnVsZU1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9p
ZFJ1bGVzLmVuZCgpOwotICAgIGZvciAoQXRvbVJ1bGVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0g
bV9pZFJ1bGVzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgY29sbGVjdEZlYXR1
cmVzRnJvbUxpc3QoZmVhdHVyZXMsICppdC0+c2Vjb25kKTsKLSAgICBlbmQgPSBtX2NsYXNzUnVs
ZXMuZW5kKCk7Ci0gICAgZm9yIChBdG9tUnVsZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX2Ns
YXNzUnVsZXMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICBjb2xsZWN0RmVhdHVy
ZXNGcm9tTGlzdChmZWF0dXJlcywgKml0LT5zZWNvbmQpOwotICAgIGVuZCA9IG1fdGFnUnVsZXMu
ZW5kKCk7Ci0gICAgZm9yIChBdG9tUnVsZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3RhZ1J1
bGVzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgY29sbGVjdEZlYXR1cmVzRnJv
bUxpc3QoZmVhdHVyZXMsICppdC0+c2Vjb25kKTsKLSAgICBlbmQgPSBtX3NoYWRvd1BzZXVkb0Vs
ZW1lbnRSdWxlcy5lbmQoKTsKLSAgICBmb3IgKEF0b21SdWxlTWFwOjpjb25zdF9pdGVyYXRvciBp
dCA9IG1fc2hhZG93UHNldWRvRWxlbWVudFJ1bGVzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkK
LSAgICAgICAgY29sbGVjdEZlYXR1cmVzRnJvbUxpc3QoZmVhdHVyZXMsICppdC0+c2Vjb25kKTsK
LSAgICBjb2xsZWN0RmVhdHVyZXNGcm9tTGlzdChmZWF0dXJlcywgbV9saW5rUHNldWRvQ2xhc3NS
dWxlcyk7Ci0gICAgY29sbGVjdEZlYXR1cmVzRnJvbUxpc3QoZmVhdHVyZXMsIG1fZm9jdXNQc2V1
ZG9DbGFzc1J1bGVzKTsKLSAgICBjb2xsZWN0RmVhdHVyZXNGcm9tTGlzdChmZWF0dXJlcywgbV91
bml2ZXJzYWxSdWxlcyk7Ci19Ci0KIHN0YXRpYyBpbmxpbmUgdm9pZCBzaHJpbmtNYXBWZWN0b3Jz
VG9GaXQoUnVsZVNldDo6QXRvbVJ1bGVNYXAmIG1hcCkKIHsKICAgICBSdWxlU2V0OjpBdG9tUnVs
ZU1hcDo6aXRlcmF0b3IgZW5kID0gbWFwLmVuZCgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvY3Nz
L0NTU1N0eWxlU2VsZWN0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NT
U3R5bGVTZWxlY3Rvci5oCShyZXZpc2lvbiAxMDUwNjIpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3Mv
Q1NTU3R5bGVTZWxlY3Rvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMDgsNyArMjA4LDcgQEAgcHVi
bGljOgogCiAgICAgYm9vbCBjaGVja1JlZ2lvblN0eWxlKEVsZW1lbnQqKTsKIAotICAgIGJvb2wg
dXNlc1NpYmxpbmdSdWxlcygpIGNvbnN0IHsgcmV0dXJuIG1fZmVhdHVyZXMuc2libGluZ1J1bGVz
OyB9CisgICAgYm9vbCB1c2VzU2libGluZ1J1bGVzKCkgY29uc3QgeyByZXR1cm4gIW1fZmVhdHVy
ZXMuc2libGluZ1J1bGVzLmlzRW1wdHkoKTsgfQogICAgIGJvb2wgdXNlc0ZpcnN0TGluZVJ1bGVz
KCkgY29uc3QgeyByZXR1cm4gbV9mZWF0dXJlcy51c2VzRmlyc3RMaW5lUnVsZXM7IH0KICAgICBi
b29sIHVzZXNCZWZvcmVBZnRlclJ1bGVzKCkgY29uc3QgeyByZXR1cm4gbV9mZWF0dXJlcy51c2Vz
QmVmb3JlQWZ0ZXJSdWxlczsgfQogICAgIGJvb2wgdXNlc0xpbmtSdWxlcygpIGNvbnN0IHsgcmV0
dXJuIG1fZmVhdHVyZXMudXNlc0xpbmtSdWxlczsgfQpAQCAtMjI3LDE0ICsyMjcsMjAgQEAgcHVi
bGljOgogI2VuZGlmCiAjZW5kaWYgLy8gRU5BQkxFKENTU19GSUxURVJTKQogCisgICAgc3RydWN0
IFJ1bGVTZWxlY3RvclBhaXIgeworICAgICAgICBSdWxlU2VsZWN0b3JQYWlyKENTU1N0eWxlUnVs
ZSogcnVsZSwgQ1NTU2VsZWN0b3IqIHNlbGVjdG9yKSA6IHJ1bGUocnVsZSksIHNlbGVjdG9yKHNl
bGVjdG9yKSB7IH0KKyAgICAgICAgQ1NTU3R5bGVSdWxlKiBydWxlOworICAgICAgICBDU1NTZWxl
Y3Rvciogc2VsZWN0b3I7CisgICAgfTsKICAgICBzdHJ1Y3QgRmVhdHVyZXMgewogICAgICAgICBG
ZWF0dXJlcygpOwogICAgICAgICB+RmVhdHVyZXMoKTsKKyAgICAgICAgdm9pZCBhZGQoY29uc3Qg
Q1NTU3R5bGVTZWxlY3Rvcjo6RmVhdHVyZXMmKTsKICAgICAgICAgdm9pZCBjbGVhcigpOwogICAg
ICAgICBIYXNoU2V0PEF0b21pY1N0cmluZ0ltcGwqPiBpZHNJblJ1bGVzOwogICAgICAgICBIYXNo
U2V0PEF0b21pY1N0cmluZ0ltcGwqPiBhdHRyc0luUnVsZXM7Ci0gICAgICAgIE93blB0cjxSdWxl
U2V0PiBzaWJsaW5nUnVsZXM7Ci0gICAgICAgIE93blB0cjxSdWxlU2V0PiB1bmNvbW1vbkF0dHJp
YnV0ZVJ1bGVzOworICAgICAgICBWZWN0b3I8UnVsZVNlbGVjdG9yUGFpcj4gc2libGluZ1J1bGVz
OworICAgICAgICBWZWN0b3I8UnVsZVNlbGVjdG9yUGFpcj4gdW5jb21tb25BdHRyaWJ1dGVSdWxl
czsKICAgICAgICAgYm9vbCB1c2VzRmlyc3RMaW5lUnVsZXM7CiAgICAgICAgIGJvb2wgdXNlc0Jl
Zm9yZUFmdGVyUnVsZXM7CiAgICAgICAgIGJvb2wgdXNlc0xpbmtSdWxlczsKQEAgLTI4OCw2ICsy
OTQsOCBAQCBwcml2YXRlOgogICAgIE93blB0cjxSdWxlU2V0PiBtX3JlZ2lvblJ1bGVzOwogCiAg
ICAgRmVhdHVyZXMgbV9mZWF0dXJlczsKKyAgICBPd25QdHI8UnVsZVNldD4gbV9zaWJsaW5nUnVs
ZVNldDsKKyAgICBPd25QdHI8UnVsZVNldD4gbV91bmNvbW1vbkF0dHJpYnV0ZVJ1bGVTZXQ7CiAK
ICAgICBib29sIG1faGFzVUFBcHBlYXJhbmNlOwogICAgIEJvcmRlckRhdGEgbV9ib3JkZXJEYXRh
Owo=
</data>
<flag name="review"
          id="123538"
          type_id="1"
          status="+"
          setter="kling"
    />
    <flag name="commit-queue"
          id="123540"
          type_id="3"
          status="-"
          setter="webkit-ews"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>122685</attachid>
            <date>2012-01-16 14:29:44 -0800</date>
            <delta_ts>2012-01-16 14:29:44 -0800</delta_ts>
            <desc>build fix for bots</desc>
            <filename>styleselector-features-merge-6.patch</filename>
            <type>text/plain</type>
            <size>21695</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEwNTA4OSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDUzIEBACisyMDEyLTAxLTE2ICBBbnR0aSBL
b2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KKworICAgICAgICBDYWNoZSBDU1NTdHlsZVNlbGVj
dG9yOjpGZWF0dXJlcyBpbiBSdWxlU2V0cworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9NzYzMzcKKworICAgICAgICBSZXZpZXdlZCBieSBBbmRyZWFzIEts
aW5nLgorCisgICAgICAgIEN1cnJlbnRseSB3aGVuZXZlciB0aGUgc3R5bGUgc2VsZWN0b3IgaXMg
dXBkYXRlZCB3ZSBnbyB0aHJvdWdoIGFsbCB0aGUgYXBwbGljYWJsZSBydWxlcyBhbmQKKyAgICAg
ICAgY29sbGVjdCB0aGUgdXNlZCBmZWF0dXJlcyBhZ2Fpbi4gV2Ugc2hvdWxkIGtlZXAgdGhlIGZl
YXR1cmVzIGFyb3VuZCBhcyBwYXJ0IG9mIHRoZSBSdWxlU2V0cworICAgICAgICBhbmQgdXBkYXRl
IHRoZW0gaW5jcmVtZW50YWxseS4gQ29sbGVjdGluZyB0aGUgZmVhdHVyZXMgd2lsbCB0aGVuIGJl
IGp1c3QgYSBtYXR0ZXIgb2YgdGFraW5nCisgICAgICAgIHRoZSB1bmlvbiBvZiBhbGwgZmVhdHVy
ZXMgdXNlZCBieSB0aGUgUnVsZVNldHMuCisgICAgICAgIAorICAgICAgICBUaGlzIGlzIDEtMiUg
Q1BVIHRpbWUgcmVkdWN0aW9uIChlbmdhZGdldCwgbnl0aW1lcykgZHVlIGxlc3MgdGltZSBzcGVu
dCBpbiBmZWF0dXJlIGNvbGxlY3Rpb24uCisgICAgICAgIAorICAgICAgICBUaGlzIGFsc28gc2lt
cGxpZmllcyB0aGUgY29kZSBieSByZW1vdmluZyB0aGUgbmVlZCB0byBjYWNoZSB0aGUgZGVmYXVs
dCBzdHlsZSBzaGVldCBmZWF0dXJlcworICAgICAgICBzZXBhcmF0ZWx5LiAKKworICAgICAgICAq
IGNzcy9DU1NTdHlsZVNlbGVjdG9yLmNwcDoKKyAgICAgICAgCisgICAgICAgICAgICBSZW1vdmUg
dGhlIGdsb2JhbCBzaWJsaW5nUnVsZXNJbkRlZmF1bHRTdHlsZSBhbmQgdW5jb21tb25BdHRyaWJ1
dGVSdWxlc0luRGVmYXVsdFN0eWxlIFJ1bGVTZXRzLgorICAgICAgICAgICAgVGhlc2UgYXJlIG5v
dyBwYXJ0IG9mIHRoZSBjYWNoZWQgZmVhdHVyZXMgb2YgdGhlIGRlZmF1bHRTdHlsZS4KKyAgICAg
ICAgCisgICAgICAgIChXZWJDb3JlOjpSdWxlU2V0OjpmZWF0dXJlcyk6CisgICAgICAgIAorICAg
ICAgICAgICAgQWRkIGEgZmllbGQgZm9yIGNhY2hpbmcgdGhlIGZlYXR1cmVzLgorICAgICAgICAK
KyAgICAgICAgKFdlYkNvcmU6Om1ha2VSdWxlU2V0KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1N0
eWxlU2VsZWN0b3I6OmNvbGxlY3RGZWF0dXJlcyk6CisgICAgICAgIAorICAgICAgICAgICAgVW5p
ZnkgdGhlIGZlYXR1cmVzIG9mIGFsbCBSdWxlU2V0cy4KKyAgICAgICAgICAgIENyZWF0ZSBSdWxl
U2V0cyBmb3Igc2libGluZyBhbmQgdW5jb21tb24gYXR0cmlidXRlIGxvb2t1cHMgYXQgdGhlIGVu
ZC4KKyAgICAgICAgCisgICAgICAgIChXZWJDb3JlOjpDU1NTdHlsZVNlbGVjdG9yOjphcHBlbmRB
dXRob3JTdHlsZXNoZWV0cyk6CisgICAgICAgIChXZWJDb3JlOjpDU1NTdHlsZVNlbGVjdG9yOjpG
ZWF0dXJlczo6YWRkKToKKyAgICAgICAgKFdlYkNvcmU6OmVuc3VyZURlZmF1bHRTdHlsZVNoZWV0
c0ZvckVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTU3R5bGVTZWxlY3Rvcjo6bG9jYXRl
U2hhcmVkU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6Y29sbGVjdEZlYXR1cmVzRnJvbVNlbGVj
dG9yKToKKyAgICAgICAgKFdlYkNvcmU6OmNvbGxlY3RGZWF0dXJlc0Zyb21SdWxlRGF0YSk6Cisg
ICAgICAgIChXZWJDb3JlOjpSdWxlU2V0OjphZGRUb1J1bGVTZXQpOgorICAgICAgICAoV2ViQ29y
ZTo6UnVsZVNldDo6YWRkUnVsZSk6CisgICAgICAgIAorICAgICAgICAgICAgQ29sbGVjdCB0aGUg
ZmVhdHVyZXMgd2hlbiBhZGRpbmcgdGhlIHJ1bGVzIHJhdGhlciB0aGFuIGFzIGEgc2VwYXJhdGUg
cGFzcyB0aHJvdWdoIGFsbCB0aGUgcnVsZXMuCisgICAgICAgIAorICAgICAgICAqIGNzcy9DU1NT
dHlsZVNlbGVjdG9yLmg6CisgICAgICAgIChXZWJDb3JlOjpDU1NTdHlsZVNlbGVjdG9yOjp1c2Vz
U2libGluZ1J1bGVzKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1N0eWxlU2VsZWN0b3I6OlJ1bGVT
ZWxlY3RvclBhaXI6OlJ1bGVTZWxlY3RvclBhaXIpOgorICAgICAgICAKKyAgICAgICAgICAgIFVz
ZSBWZWN0b3IgaW5zdGVhZCBvZiBhIFJ1bGVTZXQgZm9yIHNpYmxpbmcgYW5kIHVuY29tbW9uIGF0
dHJpYnV0ZSBzZWxlY3RvcnMgc28gdW5pZnlpbmcKKyAgICAgICAgICAgIEZlYXR1cmVzIGlzIHNp
bXBsZXIuCisKIDIwMTItMDEtMTYgIEFuZHJlYXMgS2xpbmcgIDxhd2Vzb21la2xpbmdAYXBwbGUu
Y29tPgogCiAgICAgICAgIEZpeCBhc3NlcnRpb24gZmFpbHVyZSBpbiBtYXBwZWRBdHRyaWJ1dGVz
RXF1aXZhbGVudCgpLgpJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL0NTU1N0eWxlU2VsZWN0b3Iu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTdHlsZVNlbGVjdG9yLmNw
cAkocmV2aXNpb24gMTA1MDYyKQorKysgU291cmNlL1dlYkNvcmUvY3NzL0NTU1N0eWxlU2VsZWN0
b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMjQsMTQgKzIyNCwxNCBAQCBwdWJsaWM6CiAKICAg
ICB2b2lkIGFkZFJ1bGVzRnJvbVNoZWV0KENTU1N0eWxlU2hlZXQqLCBjb25zdCBNZWRpYVF1ZXJ5
RXZhbHVhdG9yJiwgQ1NTU3R5bGVTZWxlY3RvciogPSAwKTsKIAotICAgIHZvaWQgYWRkU3R5bGVS
dWxlKENTU1N0eWxlUnVsZSogaXRlbSk7Ci0gICAgdm9pZCBhZGRSdWxlKENTU1N0eWxlUnVsZSog
cnVsZSwgQ1NTU2VsZWN0b3IqIHNlbCk7CisgICAgdm9pZCBhZGRTdHlsZVJ1bGUoQ1NTU3R5bGVS
dWxlKik7CisgICAgdm9pZCBhZGRSdWxlKENTU1N0eWxlUnVsZSosIENTU1NlbGVjdG9yKik7CiAg
ICAgdm9pZCBhZGRQYWdlUnVsZShDU1NQYWdlUnVsZSopOwotICAgIHZvaWQgYWRkVG9SdWxlU2V0
KEF0b21pY1N0cmluZ0ltcGwqIGtleSwgQXRvbVJ1bGVNYXAmLCBDU1NTdHlsZVJ1bGUqLCBDU1NT
ZWxlY3RvciopOworICAgIHZvaWQgYWRkVG9SdWxlU2V0KEF0b21pY1N0cmluZ0ltcGwqIGtleSwg
QXRvbVJ1bGVNYXAmLCBjb25zdCBSdWxlRGF0YSYpOwogICAgIHZvaWQgc2hyaW5rVG9GaXQoKTsK
ICAgICB2b2lkIGRpc2FibGVBdXRvU2hyaW5rVG9GaXQoKSB7IG1fYXV0b1Nocmlua1RvRml0RW5h
YmxlZCA9IGZhbHNlOyB9CiAKLSAgICB2b2lkIGNvbGxlY3RGZWF0dXJlcyhDU1NTdHlsZVNlbGVj
dG9yOjpGZWF0dXJlcyYpIGNvbnN0OworICAgIGNvbnN0IENTU1N0eWxlU2VsZWN0b3I6OkZlYXR1
cmVzJiBmZWF0dXJlcygpIGNvbnN0IHsgcmV0dXJuIG1fZmVhdHVyZXM7IH0KIAogICAgIGNvbnN0
IFZlY3RvcjxSdWxlRGF0YT4qIGlkUnVsZXMoQXRvbWljU3RyaW5nSW1wbCoga2V5KSBjb25zdCB7
IHJldHVybiBtX2lkUnVsZXMuZ2V0KGtleSk7IH0KICAgICBjb25zdCBWZWN0b3I8UnVsZURhdGE+
KiBjbGFzc1J1bGVzKEF0b21pY1N0cmluZ0ltcGwqIGtleSkgY29uc3QgeyByZXR1cm4gbV9jbGFz
c1J1bGVzLmdldChrZXkpOyB9CkBAIC0yNTQsNiArMjU0LDggQEAgcHVibGljOgogICAgIHVuc2ln
bmVkIG1fcnVsZUNvdW50OwogICAgIGJvb2wgbV9hdXRvU2hyaW5rVG9GaXRFbmFibGVkOwogICAg
IEVSZWdpb25TdHlsZUVuYWJsZWQgbV91c2VJblJlZ2lvblN0eWxlOworCisgICAgQ1NTU3R5bGVT
ZWxlY3Rvcjo6RmVhdHVyZXMgbV9mZWF0dXJlczsKIH07CiAKIHN0YXRpYyBSdWxlU2V0KiBkZWZh
dWx0U3R5bGU7CkBAIC0yNjIsOSArMjY0LDYgQEAgc3RhdGljIFJ1bGVTZXQqIGRlZmF1bHRQcmlu
dFN0eWxlOwogc3RhdGljIFJ1bGVTZXQqIGRlZmF1bHRWaWV3U291cmNlU3R5bGU7CiBzdGF0aWMg
Q1NTU3R5bGVTaGVldCogc2ltcGxlRGVmYXVsdFN0eWxlU2hlZXQ7CiAKLXN0YXRpYyBSdWxlU2V0
KiBzaWJsaW5nUnVsZXNJbkRlZmF1bHRTdHlsZTsKLXN0YXRpYyBSdWxlU2V0KiB1bmNvbW1vbkF0
dHJpYnV0ZVJ1bGVzSW5EZWZhdWx0U3R5bGU7Ci0KIFJlbmRlclN0eWxlKiBDU1NTdHlsZVNlbGVj
dG9yOjpzX3N0eWxlTm90WWV0QXZhaWxhYmxlOwogCiBzdGF0aWMgdm9pZCBsb2FkRnVsbERlZmF1
bHRTdHlsZSgpOwpAQCAtMjc3LDI3ICsyNzYsNiBAQCBzdGF0aWMgaW5saW5lIGJvb2wgZWxlbWVu
dENhblVzZVNpbXBsZURlCiAgICAgcmV0dXJuIGUtPmhhc1RhZ05hbWUoaHRtbFRhZykgfHwgZS0+
aGFzVGFnTmFtZShoZWFkVGFnKSB8fCBlLT5oYXNUYWdOYW1lKGJvZHlUYWcpIHx8IGUtPmhhc1Rh
Z05hbWUoZGl2VGFnKSB8fCBlLT5oYXNUYWdOYW1lKHNwYW5UYWcpIHx8IGUtPmhhc1RhZ05hbWUo
YnJUYWcpIHx8IGUtPmhhc1RhZ05hbWUoYVRhZyk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBj
b2xsZWN0U3BlY2lhbFJ1bGVzSW5EZWZhdWx0U3R5bGUoKQotewotICAgIENTU1N0eWxlU2VsZWN0
b3I6OkZlYXR1cmVzIGZlYXR1cmVzOwotICAgIGRlZmF1bHRTdHlsZS0+Y29sbGVjdEZlYXR1cmVz
KGZlYXR1cmVzKTsKLSAgICBBU1NFUlQoZmVhdHVyZXMuaWRzSW5SdWxlcy5pc0VtcHR5KCkpOwot
ICAgIGRlbGV0ZSBzaWJsaW5nUnVsZXNJbkRlZmF1bHRTdHlsZTsKLSAgICBkZWxldGUgdW5jb21t
b25BdHRyaWJ1dGVSdWxlc0luRGVmYXVsdFN0eWxlOwotICAgIHNpYmxpbmdSdWxlc0luRGVmYXVs
dFN0eWxlID0gZmVhdHVyZXMuc2libGluZ1J1bGVzLmxlYWtQdHIoKTsKLSAgICB1bmNvbW1vbkF0
dHJpYnV0ZVJ1bGVzSW5EZWZhdWx0U3R5bGUgPSBmZWF0dXJlcy51bmNvbW1vbkF0dHJpYnV0ZVJ1
bGVzLmxlYWtQdHIoKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIGFzc2VydE5vU2libGluZ1J1
bGVzSW5EZWZhdWx0U3R5bGUoKQotewotI2lmbmRlZiBOREVCVUcKLSAgICBpZiAoc2libGluZ1J1
bGVzSW5EZWZhdWx0U3R5bGUpCi0gICAgICAgIHJldHVybjsKLSAgICBjb2xsZWN0U3BlY2lhbFJ1
bGVzSW5EZWZhdWx0U3R5bGUoKTsKLSAgICBBU1NFUlQoIXNpYmxpbmdSdWxlc0luRGVmYXVsdFN0
eWxlKTsKLSNlbmRpZgotfQotCiBzdGF0aWMgY29uc3QgTWVkaWFRdWVyeUV2YWx1YXRvciYgc2Ny
ZWVuRXZhbCgpCiB7CiAgICAgREVGSU5FX1NUQVRJQ19MT0NBTChjb25zdCBNZWRpYVF1ZXJ5RXZh
bHVhdG9yLCBzdGF0aWNTY3JlZW5FdmFsLCAoInNjcmVlbiIpKTsKQEAgLTQxOCwyNCArMzk2LDMx
IEBAIENTU1N0eWxlU2VsZWN0b3I6OkNTU1N0eWxlU2VsZWN0b3IoRG9jdW0KICAgICAvLyBhZGQg
c3R5bGVzaGVldHMgZnJvbSBkb2N1bWVudAogICAgIGFwcGVuZEF1dGhvclN0eWxlc2hlZXRzKDAs
IHN0eWxlU2hlZXRzLT52ZWN0b3IoKSk7CiB9CisgICAgCitzdGF0aWMgUGFzc093blB0cjxSdWxl
U2V0PiBtYWtlUnVsZVNldChjb25zdCBWZWN0b3I8Q1NTU3R5bGVTZWxlY3Rvcjo6UnVsZVNlbGVj
dG9yUGFpcj4mIHJ1bGVzKQoreworICAgIHNpemVfdCBzaXplID0gcnVsZXMuc2l6ZSgpOworICAg
IGlmICghc2l6ZSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgT3duUHRyPFJ1bGVTZXQ+
IHJ1bGVTZXQgPSBhZG9wdFB0cihuZXcgUnVsZVNldCk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBzaXplOyArK2kpCisgICAgICAgIHJ1bGVTZXQtPmFkZFJ1bGUocnVsZXNbaV0ucnVsZSwg
cnVsZXNbaV0uc2VsZWN0b3IpOworICAgIHJldHVybiBydWxlU2V0LnJlbGVhc2UoKTsKK30KIAog
dm9pZCBDU1NTdHlsZVNlbGVjdG9yOjpjb2xsZWN0RmVhdHVyZXMoKQogeworICAgIG1fZmVhdHVy
ZXMuY2xlYXIoKTsKICAgICAvLyBDb2xsZWN0IGFsbCBpZHMgYW5kIHJ1bGVzIHVzaW5nIHNpYmxp
bmcgc2VsZWN0b3JzICg6Zmlyc3QtY2hpbGQgYW5kIHNpbWlsYXIpCiAgICAgLy8gaW4gdGhlIGN1
cnJlbnQgc2V0IG9mIHN0eWxlc2hlZXRzLiBTdHlsZSBzaGFyaW5nIGNvZGUgdXNlcyB0aGlzIGlu
Zm9ybWF0aW9uIHRvIHJlamVjdAogICAgIC8vIHNoYXJpbmcgY2FuZGlkYXRlcy4KLSAgICAvLyBV
c3VhbGx5IHRoZXJlIGFyZSBubyBzaWJsaW5nIHJ1bGVzIGluIHRoZSBkZWZhdWx0IHN0eWxlIGJ1
dCB0aGUgTWF0aE1MIHNoZWV0IGhhcyBzb21lLgotICAgIGlmIChzaWJsaW5nUnVsZXNJbkRlZmF1
bHRTdHlsZSkKLSAgICAgICAgc2libGluZ1J1bGVzSW5EZWZhdWx0U3R5bGUtPmNvbGxlY3RGZWF0
dXJlcyhtX2ZlYXR1cmVzKTsKLSAgICBpZiAodW5jb21tb25BdHRyaWJ1dGVSdWxlc0luRGVmYXVs
dFN0eWxlKQotICAgICAgICB1bmNvbW1vbkF0dHJpYnV0ZVJ1bGVzSW5EZWZhdWx0U3R5bGUtPmNv
bGxlY3RGZWF0dXJlcyhtX2ZlYXR1cmVzKTsKLSAgICBtX2F1dGhvclN0eWxlLT5jb2xsZWN0RmVh
dHVyZXMobV9mZWF0dXJlcyk7CisgICAgbV9mZWF0dXJlcy5hZGQoZGVmYXVsdFN0eWxlLT5mZWF0
dXJlcygpKTsKKyAgICBtX2ZlYXR1cmVzLmFkZChtX2F1dGhvclN0eWxlLT5mZWF0dXJlcygpKTsK
ICAgICBpZiAobV91c2VyU3R5bGUpCi0gICAgICAgIG1fdXNlclN0eWxlLT5jb2xsZWN0RmVhdHVy
ZXMobV9mZWF0dXJlcyk7Ci0gICAgaWYgKG1fZmVhdHVyZXMuc2libGluZ1J1bGVzKQotICAgICAg
ICBtX2ZlYXR1cmVzLnNpYmxpbmdSdWxlcy0+c2hyaW5rVG9GaXQoKTsKLSAgICBpZiAobV9mZWF0
dXJlcy51bmNvbW1vbkF0dHJpYnV0ZVJ1bGVzKQotICAgICAgICBtX2ZlYXR1cmVzLnVuY29tbW9u
QXR0cmlidXRlUnVsZXMtPnNocmlua1RvRml0KCk7CisgICAgICAgIG1fZmVhdHVyZXMuYWRkKG1f
dXNlclN0eWxlLT5mZWF0dXJlcygpKTsKKworICAgIG1fc2libGluZ1J1bGVTZXQgPSBtYWtlUnVs
ZVNldChtX2ZlYXR1cmVzLnNpYmxpbmdSdWxlcyk7CisgICAgbV91bmNvbW1vbkF0dHJpYnV0ZVJ1
bGVTZXQgPSBtYWtlUnVsZVNldChtX2ZlYXR1cmVzLnVuY29tbW9uQXR0cmlidXRlUnVsZXMpOwog
fQogCiB2b2lkIENTU1N0eWxlU2VsZWN0b3I6OmFwcGVuZEF1dGhvclN0eWxlc2hlZXRzKHVuc2ln
bmVkIGZpcnN0TmV3LCBjb25zdCBWZWN0b3I8UmVmUHRyPFN0eWxlU2hlZXQ+ID4mIHN0eWxlc2hl
ZXRzKQpAQCAtNDQ5LDggKzQzNCw2IEBAIHZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6YXBwZW5kQXV0
aG9yU3R5bGUKICAgICAgICAgbV9hdXRob3JTdHlsZS0+YWRkUnVsZXNGcm9tU2hlZXQoc3RhdGlj
X2Nhc3Q8Q1NTU3R5bGVTaGVldCo+KHN0eWxlc2hlZXRzW2ldLmdldCgpKSwgKm1fbWVkaXVtLCB0
aGlzKTsKICAgICB9CiAgICAgbV9hdXRob3JTdHlsZS0+c2hyaW5rVG9GaXQoKTsKLSAgICAvLyBG
SVhNRTogVGhpcyByZWFsbHkgb25seSBuZWVkcyB0byBjb2xsZWN0IHRoZSBmZWF0dXJlcyBmcm9t
IHRoZSBuZXdseSBhZGRlZCBzaGVldHMuCi0gICAgbV9mZWF0dXJlcy5jbGVhcigpOwogICAgIGNv
bGxlY3RGZWF0dXJlcygpOwogICAgIAogICAgIGlmIChkb2N1bWVudCgpLT5yZW5kZXJlcigpICYm
IGRvY3VtZW50KCktPnJlbmRlcmVyKCktPnN0eWxlKCkpCkBAIC01MDUsNiArNDg4LDIxIEBAIENT
U1N0eWxlU2VsZWN0b3I6OkZlYXR1cmVzOjpGZWF0dXJlcygpCiBDU1NTdHlsZVNlbGVjdG9yOjpG
ZWF0dXJlczo6fkZlYXR1cmVzKCkKIHsKIH0KKyAgICAKK3ZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6
RmVhdHVyZXM6OmFkZChjb25zdCBDU1NTdHlsZVNlbGVjdG9yOjpGZWF0dXJlcyYgb3RoZXIpCit7
CisgICAgSGFzaFNldDxBdG9taWNTdHJpbmdJbXBsKj46Oml0ZXJhdG9yIGVuZCA9IG90aGVyLmlk
c0luUnVsZXMuZW5kKCk7CisgICAgZm9yIChIYXNoU2V0PEF0b21pY1N0cmluZ0ltcGwqPjo6aXRl
cmF0b3IgaXQgPSBvdGhlci5pZHNJblJ1bGVzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKKyAg
ICAgICAgaWRzSW5SdWxlcy5hZGQoKml0KTsKKyAgICBlbmQgPSBvdGhlci5hdHRyc0luUnVsZXMu
ZW5kKCk7CisgICAgZm9yIChIYXNoU2V0PEF0b21pY1N0cmluZ0ltcGwqPjo6aXRlcmF0b3IgaXQg
PSBvdGhlci5hdHRyc0luUnVsZXMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQorICAgICAgICBh
dHRyc0luUnVsZXMuYWRkKCppdCk7CisgICAgc2libGluZ1J1bGVzLmFwcGVuZChvdGhlci5zaWJs
aW5nUnVsZXMpOworICAgIHVuY29tbW9uQXR0cmlidXRlUnVsZXMuYXBwZW5kKG90aGVyLnVuY29t
bW9uQXR0cmlidXRlUnVsZXMpOworICAgIHVzZXNGaXJzdExpbmVSdWxlcyA9IHVzZXNGaXJzdExp
bmVSdWxlcyB8fCBvdGhlci51c2VzRmlyc3RMaW5lUnVsZXM7CisgICAgdXNlc0JlZm9yZUFmdGVy
UnVsZXMgPSB1c2VzQmVmb3JlQWZ0ZXJSdWxlcyB8fCBvdGhlci51c2VzQmVmb3JlQWZ0ZXJSdWxl
czsKKyAgICB1c2VzTGlua1J1bGVzID0gdXNlc0xpbmtSdWxlcyB8fCBvdGhlci51c2VzTGlua1J1
bGVzOworfQogCiB2b2lkIENTU1N0eWxlU2VsZWN0b3I6OkZlYXR1cmVzOjpjbGVhcigpCiB7CkBA
IC01ODMsMTEgKzU4MSw4IEBAIHN0YXRpYyB2b2lkIGxvYWRWaWV3U291cmNlU3R5bGUoKQogCiBz
dGF0aWMgdm9pZCBlbnN1cmVEZWZhdWx0U3R5bGVTaGVldHNGb3JFbGVtZW50KEVsZW1lbnQqIGVs
ZW1lbnQpCiB7Ci0gICAgaWYgKHNpbXBsZURlZmF1bHRTdHlsZVNoZWV0ICYmICFlbGVtZW50Q2Fu
VXNlU2ltcGxlRGVmYXVsdFN0eWxlKGVsZW1lbnQpKSB7CisgICAgaWYgKHNpbXBsZURlZmF1bHRT
dHlsZVNoZWV0ICYmICFlbGVtZW50Q2FuVXNlU2ltcGxlRGVmYXVsdFN0eWxlKGVsZW1lbnQpKQog
ICAgICAgICBsb2FkRnVsbERlZmF1bHRTdHlsZSgpOwotICAgICAgICBhc3NlcnROb1NpYmxpbmdS
dWxlc0luRGVmYXVsdFN0eWxlKCk7Ci0gICAgICAgIGNvbGxlY3RTcGVjaWFsUnVsZXNJbkRlZmF1
bHRTdHlsZSgpOwotICAgIH0KIAogI2lmIEVOQUJMRShTVkcpCiAgICAgc3RhdGljIGJvb2wgbG9h
ZGVkU1ZHVXNlckFnZW50U2hlZXQ7CkBAIC01OTcsMjEgKzU5MiwxNyBAQCBzdGF0aWMgdm9pZCBl
bnN1cmVEZWZhdWx0U3R5bGVTaGVldHNGb3JFCiAgICAgICAgIENTU1N0eWxlU2hlZXQqIHN2Z1No
ZWV0ID0gcGFyc2VVQVNoZWV0KHN2Z1VzZXJBZ2VudFN0eWxlU2hlZXQsIHNpemVvZihzdmdVc2Vy
QWdlbnRTdHlsZVNoZWV0KSk7CiAgICAgICAgIGRlZmF1bHRTdHlsZS0+YWRkUnVsZXNGcm9tU2hl
ZXQoc3ZnU2hlZXQsIHNjcmVlbkV2YWwoKSk7CiAgICAgICAgIGRlZmF1bHRQcmludFN0eWxlLT5h
ZGRSdWxlc0Zyb21TaGVldChzdmdTaGVldCwgcHJpbnRFdmFsKCkpOwotICAgICAgICBhc3NlcnRO
b1NpYmxpbmdSdWxlc0luRGVmYXVsdFN0eWxlKCk7Ci0gICAgICAgIGNvbGxlY3RTcGVjaWFsUnVs
ZXNJbkRlZmF1bHRTdHlsZSgpOwogICAgIH0KICNlbmRpZgogCi0jaWYgRU5BQkxFKE1BVEhNTCkK
ICAgICBzdGF0aWMgYm9vbCBsb2FkZWRNYXRoTUxVc2VyQWdlbnRTaGVldDsKKyNpZiBFTkFCTEUo
TUFUSE1MKQogICAgIGlmIChlbGVtZW50LT5pc01hdGhNTEVsZW1lbnQoKSAmJiAhbG9hZGVkTWF0
aE1MVXNlckFnZW50U2hlZXQpIHsKICAgICAgICAgLy8gTWF0aE1MIHJ1bGVzLgogICAgICAgICBs
b2FkZWRNYXRoTUxVc2VyQWdlbnRTaGVldCA9IHRydWU7CiAgICAgICAgIENTU1N0eWxlU2hlZXQq
IG1hdGhNTFNoZWV0ID0gcGFyc2VVQVNoZWV0KG1hdGhtbFVzZXJBZ2VudFN0eWxlU2hlZXQsIHNp
emVvZihtYXRobWxVc2VyQWdlbnRTdHlsZVNoZWV0KSk7CiAgICAgICAgIGRlZmF1bHRTdHlsZS0+
YWRkUnVsZXNGcm9tU2hlZXQobWF0aE1MU2hlZXQsIHNjcmVlbkV2YWwoKSk7CiAgICAgICAgIGRl
ZmF1bHRQcmludFN0eWxlLT5hZGRSdWxlc0Zyb21TaGVldChtYXRoTUxTaGVldCwgcHJpbnRFdmFs
KCkpOwotICAgICAgICAvLyBUaGVyZSBhcmUgc29tZSBzaWJsaW5nIGFuZCB1bmNvbW1vbiBhdHRy
aWJ1dGUgcnVsZXMgaGVyZS4KLSAgICAgICAgY29sbGVjdFNwZWNpYWxSdWxlc0luRGVmYXVsdFN0
eWxlKCk7CiAgICAgfQogI2VuZGlmCiAKQEAgLTYyMyw3ICs2MTQsNiBAQCBzdGF0aWMgdm9pZCBl
bnN1cmVEZWZhdWx0U3R5bGVTaGVldHNGb3JFCiAgICAgICAgIENTU1N0eWxlU2hlZXQqIG1lZGlh
Q29udHJvbHNTaGVldCA9IHBhcnNlVUFTaGVldChtZWRpYVJ1bGVzKTsKICAgICAgICAgZGVmYXVs
dFN0eWxlLT5hZGRSdWxlc0Zyb21TaGVldChtZWRpYUNvbnRyb2xzU2hlZXQsIHNjcmVlbkV2YWwo
KSk7CiAgICAgICAgIGRlZmF1bHRQcmludFN0eWxlLT5hZGRSdWxlc0Zyb21TaGVldChtZWRpYUNv
bnRyb2xzU2hlZXQsIHByaW50RXZhbCgpKTsKLSAgICAgICAgY29sbGVjdFNwZWNpYWxSdWxlc0lu
RGVmYXVsdFN0eWxlKCk7CiAgICAgfQogI2VuZGlmCiAKQEAgLTYzNSw5ICs2MjUsMTEgQEAgc3Rh
dGljIHZvaWQgZW5zdXJlRGVmYXVsdFN0eWxlU2hlZXRzRm9yRQogICAgICAgICBDU1NTdHlsZVNo
ZWV0KiBmdWxsc2NyZWVuU2hlZXQgPSBwYXJzZVVBU2hlZXQoZnVsbHNjcmVlblJ1bGVzKTsKICAg
ICAgICAgZGVmYXVsdFN0eWxlLT5hZGRSdWxlc0Zyb21TaGVldChmdWxsc2NyZWVuU2hlZXQsIHNj
cmVlbkV2YWwoKSk7CiAgICAgICAgIGRlZmF1bHRRdWlya3NTdHlsZS0+YWRkUnVsZXNGcm9tU2hl
ZXQoZnVsbHNjcmVlblNoZWV0LCBzY3JlZW5FdmFsKCkpOwotICAgICAgICBjb2xsZWN0U3BlY2lh
bFJ1bGVzSW5EZWZhdWx0U3R5bGUoKTsKICAgICB9CiAjZW5kaWYKKworICAgIEFTU0VSVChkZWZh
dWx0U3R5bGUtPmZlYXR1cmVzKCkuaWRzSW5SdWxlcy5pc0VtcHR5KCkpOworICAgIEFTU0VSVF9V
TlVTRUQobG9hZGVkTWF0aE1MVXNlckFnZW50U2hlZXQsIGxvYWRlZE1hdGhNTFVzZXJBZ2VudFNo
ZWV0IHx8IGRlZmF1bHRTdHlsZS0+ZmVhdHVyZXMoKS5zaWJsaW5nUnVsZXMuaXNFbXB0eSgpKTsK
IH0KIAogdm9pZCBDU1NTdHlsZVNlbGVjdG9yOjphZGRNYXRjaGVkRGVjbGFyYXRpb24oQ1NTTXV0
YWJsZVN0eWxlRGVjbGFyYXRpb24qIHN0eWxlRGVjbGFyYXRpb24sIHVuc2lnbmVkIGxpbmtNYXRj
aFR5cGUsIEVSZWdpb25TdHlsZUVuYWJsZWQgdXNlSW5SZWdpb25TdHlsZSkKQEAgLTExOTEsMTAg
KzExODMsMTAgQEAgUmVuZGVyU3R5bGUqIENTU1N0eWxlU2VsZWN0b3I6OmxvY2F0ZVNoYQogICAg
ICAgICByZXR1cm4gMDsKIAogICAgIC8vIENhbid0IHNoYXJlIGlmIHNpYmxpbmcgcnVsZXMgYXBw
bHkuIFRoaXMgaXMgY2hlY2tlZCBhdCB0aGUgZW5kIGFzIGl0IHNob3VsZCByYXJlbHkgZmFpbC4K
LSAgICBpZiAobWF0Y2hlc1J1bGVTZXQobV9mZWF0dXJlcy5zaWJsaW5nUnVsZXMuZ2V0KCkpKQor
ICAgIGlmIChtYXRjaGVzUnVsZVNldChtX3NpYmxpbmdSdWxlU2V0LmdldCgpKSkKICAgICAgICAg
cmV0dXJuIDA7CiAgICAgLy8gQ2FuJ3Qgc2hhcmUgaWYgYXR0cmlidXRlIHJ1bGVzIGFwcGx5Lgot
ICAgIGlmIChtYXRjaGVzUnVsZVNldChtX2ZlYXR1cmVzLnVuY29tbW9uQXR0cmlidXRlUnVsZXMu
Z2V0KCkpKQorICAgIGlmIChtYXRjaGVzUnVsZVNldChtX3VuY29tbW9uQXR0cmlidXRlUnVsZVNl
dC5nZXQoKSkpCiAgICAgICAgIHJldHVybiAwOwogICAgIC8vIFRyYWNraW5nIGNoaWxkIGluZGV4
IHJlcXVpcmVzIHVuaXF1ZSBzdHlsZSBmb3IgZWFjaCBub2RlLiBUaGlzIG1heSBnZXQgc2V0IGJ5
IHRoZSBzaWJsaW5nIHJ1bGUgbWF0Y2ggYWJvdmUuCiAgICAgaWYgKHBhcmVudFN0eWxlUHJldmVu
dHNTaGFyaW5nKG1fcGFyZW50U3R5bGUpKQpAQCAtMTk4NCwzMyArMTk3Niw3OSBAQCBSdWxlU2V0
OjpSdWxlU2V0KEVSZWdpb25TdHlsZUVuYWJsZWQgdXNlCiB7CiB9CiAKLXZvaWQgUnVsZVNldDo6
YWRkVG9SdWxlU2V0KEF0b21pY1N0cmluZ0ltcGwqIGtleSwgQXRvbVJ1bGVNYXAmIG1hcCwgQ1NT
U3R5bGVSdWxlKiBydWxlLCBDU1NTZWxlY3Rvciogc2VsZWN0b3IpCitzdGF0aWMgaW5saW5lIHZv
aWQgY29sbGVjdEZlYXR1cmVzRnJvbVNlbGVjdG9yKENTU1N0eWxlU2VsZWN0b3I6OkZlYXR1cmVz
JiBmZWF0dXJlcywgY29uc3QgQ1NTU2VsZWN0b3IqIHNlbGVjdG9yKQoreworICAgIGlmIChzZWxl
Y3Rvci0+bV9tYXRjaCA9PSBDU1NTZWxlY3Rvcjo6SWQpCisgICAgICAgIGZlYXR1cmVzLmlkc0lu
UnVsZXMuYWRkKHNlbGVjdG9yLT52YWx1ZSgpLmltcGwoKSk7CisgICAgaWYgKHNlbGVjdG9yLT5p
c0F0dHJpYnV0ZVNlbGVjdG9yKCkpCisgICAgICAgIGZlYXR1cmVzLmF0dHJzSW5SdWxlcy5hZGQo
c2VsZWN0b3ItPmF0dHJpYnV0ZSgpLmxvY2FsTmFtZSgpLmltcGwoKSk7CisgICAgc3dpdGNoIChz
ZWxlY3Rvci0+cHNldWRvVHlwZSgpKSB7CisgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvRmly
c3RMaW5lOgorICAgICAgICBmZWF0dXJlcy51c2VzRmlyc3RMaW5lUnVsZXMgPSB0cnVlOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9CZWZvcmU6CisgICAgY2Fz
ZSBDU1NTZWxlY3Rvcjo6UHNldWRvQWZ0ZXI6CisgICAgICAgIGZlYXR1cmVzLnVzZXNCZWZvcmVB
ZnRlclJ1bGVzID0gdHJ1ZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBDU1NTZWxlY3Rvcjo6
UHNldWRvTGluazoKKyAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9WaXNpdGVkOgorICAgICAg
ICBmZWF0dXJlcy51c2VzTGlua1J1bGVzID0gdHJ1ZTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVm
YXVsdDoKKyAgICAgICAgYnJlYWs7CisgICAgfQorfQorCitzdGF0aWMgdm9pZCBjb2xsZWN0RmVh
dHVyZXNGcm9tUnVsZURhdGEoQ1NTU3R5bGVTZWxlY3Rvcjo6RmVhdHVyZXMmIGZlYXR1cmVzLCBj
b25zdCBSdWxlRGF0YSYgcnVsZURhdGEpCit7CisgICAgYm9vbCBmb3VuZFNpYmxpbmdTZWxlY3Rv
ciA9IGZhbHNlOworICAgIGZvciAoQ1NTU2VsZWN0b3IqIHNlbGVjdG9yID0gcnVsZURhdGEuc2Vs
ZWN0b3IoKTsgc2VsZWN0b3I7IHNlbGVjdG9yID0gc2VsZWN0b3ItPnRhZ0hpc3RvcnkoKSkgewor
ICAgICAgICBjb2xsZWN0RmVhdHVyZXNGcm9tU2VsZWN0b3IoZmVhdHVyZXMsIHNlbGVjdG9yKTsK
KyAgICAgICAgCisgICAgICAgIGlmIChDU1NTZWxlY3Rvckxpc3QqIHNlbGVjdG9yTGlzdCA9IHNl
bGVjdG9yLT5zZWxlY3Rvckxpc3QoKSkgeworICAgICAgICAgICAgZm9yIChDU1NTZWxlY3Rvciog
c3ViU2VsZWN0b3IgPSBzZWxlY3Rvckxpc3QtPmZpcnN0KCk7IHN1YlNlbGVjdG9yOyBzdWJTZWxl
Y3RvciA9IENTU1NlbGVjdG9yTGlzdDo6bmV4dChzdWJTZWxlY3RvcikpIHsKKyAgICAgICAgICAg
ICAgICBpZiAoIWZvdW5kU2libGluZ1NlbGVjdG9yICYmIHNlbGVjdG9yLT5pc1NpYmxpbmdTZWxl
Y3RvcigpKQorICAgICAgICAgICAgICAgICAgICBmb3VuZFNpYmxpbmdTZWxlY3RvciA9IHRydWU7
CisgICAgICAgICAgICAgICAgY29sbGVjdEZlYXR1cmVzRnJvbVNlbGVjdG9yKGZlYXR1cmVzLCBz
dWJTZWxlY3Rvcik7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSBpZiAoIWZvdW5kU2li
bGluZ1NlbGVjdG9yICYmIHNlbGVjdG9yLT5pc1NpYmxpbmdTZWxlY3RvcigpKQorICAgICAgICAg
ICAgZm91bmRTaWJsaW5nU2VsZWN0b3IgPSB0cnVlOworICAgIH0KKyAgICBpZiAoZm91bmRTaWJs
aW5nU2VsZWN0b3IpCisgICAgICAgIGZlYXR1cmVzLnNpYmxpbmdSdWxlcy5hcHBlbmQoQ1NTU3R5
bGVTZWxlY3Rvcjo6UnVsZVNlbGVjdG9yUGFpcihydWxlRGF0YS5ydWxlKCksIHJ1bGVEYXRhLnNl
bGVjdG9yKCkpKTsKKyAgICBpZiAocnVsZURhdGEuY29udGFpbnNVbmNvbW1vbkF0dHJpYnV0ZVNl
bGVjdG9yKCkpCisgICAgICAgIGZlYXR1cmVzLnVuY29tbW9uQXR0cmlidXRlUnVsZXMuYXBwZW5k
KENTU1N0eWxlU2VsZWN0b3I6OlJ1bGVTZWxlY3RvclBhaXIocnVsZURhdGEucnVsZSgpLCBydWxl
RGF0YS5zZWxlY3RvcigpKSk7Cit9CisgICAgCit2b2lkIFJ1bGVTZXQ6OmFkZFRvUnVsZVNldChB
dG9taWNTdHJpbmdJbXBsKiBrZXksIEF0b21SdWxlTWFwJiBtYXAsIGNvbnN0IFJ1bGVEYXRhJiBy
dWxlRGF0YSkKIHsKICAgICBpZiAoIWtleSkKICAgICAgICAgcmV0dXJuOwogICAgIE93blB0cjxW
ZWN0b3I8UnVsZURhdGE+ID4mIHJ1bGVzID0gbWFwLmFkZChrZXksIG51bGxwdHIpLmZpcnN0LT5z
ZWNvbmQ7CiAgICAgaWYgKCFydWxlcykKICAgICAgICAgcnVsZXMgPSBhZG9wdFB0cihuZXcgVmVj
dG9yPFJ1bGVEYXRhPik7Ci0gICAgcnVsZXMtPmFwcGVuZChSdWxlRGF0YShydWxlLCBzZWxlY3Rv
ciwgbV9ydWxlQ291bnQrKywgbV91c2VJblJlZ2lvblN0eWxlKSk7CisgICAgcnVsZXMtPmFwcGVu
ZChydWxlRGF0YSk7CiB9CiAKLXZvaWQgUnVsZVNldDo6YWRkUnVsZShDU1NTdHlsZVJ1bGUqIHJ1
bGUsIENTU1NlbGVjdG9yKiBzZWwpCit2b2lkIFJ1bGVTZXQ6OmFkZFJ1bGUoQ1NTU3R5bGVSdWxl
KiBydWxlLCBDU1NTZWxlY3Rvciogc2VsZWN0b3IpCiB7Ci0gICAgaWYgKHNlbC0+bV9tYXRjaCA9
PSBDU1NTZWxlY3Rvcjo6SWQpIHsKLSAgICAgICAgYWRkVG9SdWxlU2V0KHNlbC0+dmFsdWUoKS5p
bXBsKCksIG1faWRSdWxlcywgcnVsZSwgc2VsKTsKKyAgICBSdWxlRGF0YSBydWxlRGF0YShydWxl
LCBzZWxlY3RvciwgbV9ydWxlQ291bnQrKywgbV91c2VJblJlZ2lvblN0eWxlKTsKKyAgICBjb2xs
ZWN0RmVhdHVyZXNGcm9tUnVsZURhdGEobV9mZWF0dXJlcywgcnVsZURhdGEpOworCisgICAgaWYg
KHNlbGVjdG9yLT5tX21hdGNoID09IENTU1NlbGVjdG9yOjpJZCkgeworICAgICAgICBhZGRUb1J1
bGVTZXQoc2VsZWN0b3ItPnZhbHVlKCkuaW1wbCgpLCBtX2lkUnVsZXMsIHJ1bGVEYXRhKTsKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBpZiAoc2VsLT5tX21hdGNoID09IENTU1NlbGVjdG9y
OjpDbGFzcykgewotICAgICAgICBhZGRUb1J1bGVTZXQoc2VsLT52YWx1ZSgpLmltcGwoKSwgbV9j
bGFzc1J1bGVzLCBydWxlLCBzZWwpOworICAgIGlmIChzZWxlY3Rvci0+bV9tYXRjaCA9PSBDU1NT
ZWxlY3Rvcjo6Q2xhc3MpIHsKKyAgICAgICAgYWRkVG9SdWxlU2V0KHNlbGVjdG9yLT52YWx1ZSgp
LmltcGwoKSwgbV9jbGFzc1J1bGVzLCBydWxlRGF0YSk7CiAgICAgICAgIHJldHVybjsKICAgICB9
Ci0gICAgaWYgKHNlbC0+aXNVbmtub3duUHNldWRvRWxlbWVudCgpKSB7Ci0gICAgICAgIGFkZFRv
UnVsZVNldChzZWwtPnZhbHVlKCkuaW1wbCgpLCBtX3NoYWRvd1BzZXVkb0VsZW1lbnRSdWxlcywg
cnVsZSwgc2VsKTsKKyAgICBpZiAoc2VsZWN0b3ItPmlzVW5rbm93blBzZXVkb0VsZW1lbnQoKSkg
eworICAgICAgICBhZGRUb1J1bGVTZXQoc2VsZWN0b3ItPnZhbHVlKCkuaW1wbCgpLCBtX3NoYWRv
d1BzZXVkb0VsZW1lbnRSdWxlcywgcnVsZURhdGEpOwogICAgICAgICByZXR1cm47CiAgICAgfQot
ICAgIGlmIChTZWxlY3RvckNoZWNrZXI6OmlzQ29tbW9uUHNldWRvQ2xhc3NTZWxlY3RvcihzZWwp
KSB7Ci0gICAgICAgIFJ1bGVEYXRhIHJ1bGVEYXRhKHJ1bGUsIHNlbCwgbV9ydWxlQ291bnQrKyk7
Ci0gICAgICAgIHN3aXRjaCAoc2VsLT5wc2V1ZG9UeXBlKCkpIHsKKyAgICBpZiAoU2VsZWN0b3JD
aGVja2VyOjppc0NvbW1vblBzZXVkb0NsYXNzU2VsZWN0b3Ioc2VsZWN0b3IpKSB7CisgICAgICAg
IHN3aXRjaCAoc2VsZWN0b3ItPnBzZXVkb1R5cGUoKSkgewogICAgICAgICBjYXNlIENTU1NlbGVj
dG9yOjpQc2V1ZG9MaW5rOgogICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9WaXNpdGVk
OgogICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9BbnlMaW5rOgpAQCAtMjAyNCwxMyAr
MjA2MiwxMiBAQCB2b2lkIFJ1bGVTZXQ6OmFkZFJ1bGUoQ1NTU3R5bGVSdWxlKiBydWxlCiAgICAg
ICAgIH0KICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBjb25zdCBBdG9taWNTdHJpbmcmIGxv
Y2FsTmFtZSA9IHNlbC0+dGFnKCkubG9jYWxOYW1lKCk7CisgICAgY29uc3QgQXRvbWljU3RyaW5n
JiBsb2NhbE5hbWUgPSBzZWxlY3Rvci0+dGFnKCkubG9jYWxOYW1lKCk7CiAgICAgaWYgKGxvY2Fs
TmFtZSAhPSBzdGFyQXRvbSkgewotICAgICAgICBhZGRUb1J1bGVTZXQobG9jYWxOYW1lLmltcGwo
KSwgbV90YWdSdWxlcywgcnVsZSwgc2VsKTsKKyAgICAgICAgYWRkVG9SdWxlU2V0KGxvY2FsTmFt
ZS5pbXBsKCksIG1fdGFnUnVsZXMsIHJ1bGVEYXRhKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0K
LQotICAgIG1fdW5pdmVyc2FsUnVsZXMuYXBwZW5kKFJ1bGVEYXRhKHJ1bGUsIHNlbCwgbV9ydWxl
Q291bnQrKykpOworICAgIG1fdW5pdmVyc2FsUnVsZXMuYXBwZW5kKHJ1bGVEYXRhKTsKIH0KIAog
dm9pZCBSdWxlU2V0OjphZGRQYWdlUnVsZShDU1NQYWdlUnVsZSogcnVsZSkKQEAgLTIxMDMsNzkg
KzIxNDAsNiBAQCB2b2lkIFJ1bGVTZXQ6OmFkZFN0eWxlUnVsZShDU1NTdHlsZVJ1bGUqCiAgICAg
ICAgIGFkZFJ1bGUocnVsZSwgcyk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBjb2xsZWN0RmVh
dHVyZXNGcm9tU2VsZWN0b3IoQ1NTU3R5bGVTZWxlY3Rvcjo6RmVhdHVyZXMmIGZlYXR1cmVzLCBj
b25zdCBDU1NTZWxlY3Rvciogc2VsZWN0b3IpCi17Ci0gICAgaWYgKHNlbGVjdG9yLT5tX21hdGNo
ID09IENTU1NlbGVjdG9yOjpJZCAmJiAhc2VsZWN0b3ItPnZhbHVlKCkuaXNFbXB0eSgpKQotICAg
ICAgICBmZWF0dXJlcy5pZHNJblJ1bGVzLmFkZChzZWxlY3Rvci0+dmFsdWUoKS5pbXBsKCkpOwot
ICAgIGlmIChzZWxlY3Rvci0+aXNBdHRyaWJ1dGVTZWxlY3RvcigpKQotICAgICAgICBmZWF0dXJl
cy5hdHRyc0luUnVsZXMuYWRkKHNlbGVjdG9yLT5hdHRyaWJ1dGUoKS5sb2NhbE5hbWUoKS5pbXBs
KCkpOwotICAgIHN3aXRjaCAoc2VsZWN0b3ItPnBzZXVkb1R5cGUoKSkgewotICAgIGNhc2UgQ1NT
U2VsZWN0b3I6OlBzZXVkb0ZpcnN0TGluZToKLSAgICAgICAgZmVhdHVyZXMudXNlc0ZpcnN0TGlu
ZVJ1bGVzID0gdHJ1ZTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNl
dWRvQmVmb3JlOgotICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0FmdGVyOgotICAgICAgICBm
ZWF0dXJlcy51c2VzQmVmb3JlQWZ0ZXJSdWxlcyA9IHRydWU7Ci0gICAgICAgIGJyZWFrOwotICAg
IGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0xpbms6Ci0gICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNl
dWRvVmlzaXRlZDoKLSAgICAgICAgZmVhdHVyZXMudXNlc0xpbmtSdWxlcyA9IHRydWU7Ci0gICAg
ICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLX0KLQotc3Rh
dGljIHZvaWQgY29sbGVjdEZlYXR1cmVzRnJvbUxpc3QoQ1NTU3R5bGVTZWxlY3Rvcjo6RmVhdHVy
ZXMmIGZlYXR1cmVzLCBjb25zdCBWZWN0b3I8UnVsZURhdGE+JiBydWxlcykKLXsKLSAgICB1bnNp
Z25lZCBzaXplID0gcnVsZXMuc2l6ZSgpOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBz
aXplOyArK2kpIHsKLSAgICAgICAgY29uc3QgUnVsZURhdGEmIHJ1bGVEYXRhID0gcnVsZXNbaV07
Ci0gICAgICAgIGJvb2wgZm91bmRTaWJsaW5nU2VsZWN0b3IgPSBmYWxzZTsKLSAgICAgICAgZm9y
IChDU1NTZWxlY3Rvciogc2VsZWN0b3IgPSBydWxlRGF0YS5zZWxlY3RvcigpOyBzZWxlY3Rvcjsg
c2VsZWN0b3IgPSBzZWxlY3Rvci0+dGFnSGlzdG9yeSgpKSB7Ci0gICAgICAgICAgICBjb2xsZWN0
RmVhdHVyZXNGcm9tU2VsZWN0b3IoZmVhdHVyZXMsIHNlbGVjdG9yKTsKLQotICAgICAgICAgICAg
aWYgKENTU1NlbGVjdG9yTGlzdCogc2VsZWN0b3JMaXN0ID0gc2VsZWN0b3ItPnNlbGVjdG9yTGlz
dCgpKSB7Ci0gICAgICAgICAgICAgICAgZm9yIChDU1NTZWxlY3Rvciogc3ViU2VsZWN0b3IgPSBz
ZWxlY3Rvckxpc3QtPmZpcnN0KCk7IHN1YlNlbGVjdG9yOyBzdWJTZWxlY3RvciA9IENTU1NlbGVj
dG9yTGlzdDo6bmV4dChzdWJTZWxlY3RvcikpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHNl
bGVjdG9yLT5pc1NpYmxpbmdTZWxlY3RvcigpKQotICAgICAgICAgICAgICAgICAgICAgICAgZm91
bmRTaWJsaW5nU2VsZWN0b3IgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICBjb2xsZWN0RmVh
dHVyZXNGcm9tU2VsZWN0b3IoZmVhdHVyZXMsIHN1YlNlbGVjdG9yKTsKLSAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKHNlbGVjdG9yLT5pc1NpYmxpbmdTZWxlY3Rvcigp
KQotICAgICAgICAgICAgICAgIGZvdW5kU2libGluZ1NlbGVjdG9yID0gdHJ1ZTsKLSAgICAgICAg
fQotICAgICAgICBpZiAoZm91bmRTaWJsaW5nU2VsZWN0b3IpIHsKLSAgICAgICAgICAgIGlmICgh
ZmVhdHVyZXMuc2libGluZ1J1bGVzKQotICAgICAgICAgICAgICAgIGZlYXR1cmVzLnNpYmxpbmdS
dWxlcyA9IGFkb3B0UHRyKG5ldyBSdWxlU2V0KTsKLSAgICAgICAgICAgIGZlYXR1cmVzLnNpYmxp
bmdSdWxlcy0+YWRkUnVsZShydWxlRGF0YS5ydWxlKCksIHJ1bGVEYXRhLnNlbGVjdG9yKCkpOwot
ICAgICAgICB9Ci0gICAgICAgIGlmIChydWxlRGF0YS5jb250YWluc1VuY29tbW9uQXR0cmlidXRl
U2VsZWN0b3IoKSkgewotICAgICAgICAgICAgaWYgKCFmZWF0dXJlcy51bmNvbW1vbkF0dHJpYnV0
ZVJ1bGVzKQotICAgICAgICAgICAgICAgIGZlYXR1cmVzLnVuY29tbW9uQXR0cmlidXRlUnVsZXMg
PSBhZG9wdFB0cihuZXcgUnVsZVNldCk7Ci0gICAgICAgICAgICBmZWF0dXJlcy51bmNvbW1vbkF0
dHJpYnV0ZVJ1bGVzLT5hZGRSdWxlKHJ1bGVEYXRhLnJ1bGUoKSwgcnVsZURhdGEuc2VsZWN0b3Io
KSk7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLXZvaWQgUnVsZVNldDo6Y29sbGVjdEZlYXR1cmVz
KENTU1N0eWxlU2VsZWN0b3I6OkZlYXR1cmVzJiBmZWF0dXJlcykgY29uc3QKLXsKLSAgICBBdG9t
UnVsZU1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9pZFJ1bGVzLmVuZCgpOwotICAgIGZvciAo
QXRvbVJ1bGVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9pZFJ1bGVzLmJlZ2luKCk7IGl0ICE9
IGVuZDsgKytpdCkKLSAgICAgICAgY29sbGVjdEZlYXR1cmVzRnJvbUxpc3QoZmVhdHVyZXMsICpp
dC0+c2Vjb25kKTsKLSAgICBlbmQgPSBtX2NsYXNzUnVsZXMuZW5kKCk7Ci0gICAgZm9yIChBdG9t
UnVsZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX2NsYXNzUnVsZXMuYmVnaW4oKTsgaXQgIT0g
ZW5kOyArK2l0KQotICAgICAgICBjb2xsZWN0RmVhdHVyZXNGcm9tTGlzdChmZWF0dXJlcywgKml0
LT5zZWNvbmQpOwotICAgIGVuZCA9IG1fdGFnUnVsZXMuZW5kKCk7Ci0gICAgZm9yIChBdG9tUnVs
ZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3RhZ1J1bGVzLmJlZ2luKCk7IGl0ICE9IGVuZDsg
KytpdCkKLSAgICAgICAgY29sbGVjdEZlYXR1cmVzRnJvbUxpc3QoZmVhdHVyZXMsICppdC0+c2Vj
b25kKTsKLSAgICBlbmQgPSBtX3NoYWRvd1BzZXVkb0VsZW1lbnRSdWxlcy5lbmQoKTsKLSAgICBm
b3IgKEF0b21SdWxlTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fc2hhZG93UHNldWRvRWxlbWVu
dFJ1bGVzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgY29sbGVjdEZlYXR1cmVz
RnJvbUxpc3QoZmVhdHVyZXMsICppdC0+c2Vjb25kKTsKLSAgICBjb2xsZWN0RmVhdHVyZXNGcm9t
TGlzdChmZWF0dXJlcywgbV9saW5rUHNldWRvQ2xhc3NSdWxlcyk7Ci0gICAgY29sbGVjdEZlYXR1
cmVzRnJvbUxpc3QoZmVhdHVyZXMsIG1fZm9jdXNQc2V1ZG9DbGFzc1J1bGVzKTsKLSAgICBjb2xs
ZWN0RmVhdHVyZXNGcm9tTGlzdChmZWF0dXJlcywgbV91bml2ZXJzYWxSdWxlcyk7Ci19Ci0KIHN0
YXRpYyBpbmxpbmUgdm9pZCBzaHJpbmtNYXBWZWN0b3JzVG9GaXQoUnVsZVNldDo6QXRvbVJ1bGVN
YXAmIG1hcCkKIHsKICAgICBSdWxlU2V0OjpBdG9tUnVsZU1hcDo6aXRlcmF0b3IgZW5kID0gbWFw
LmVuZCgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL0NTU1N0eWxlU2VsZWN0b3IuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU3R5bGVTZWxlY3Rvci5oCShyZXZpc2lv
biAxMDUwNjIpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU3R5bGVTZWxlY3Rvci5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yMDgsNyArMjA4LDcgQEAgcHVibGljOgogCiAgICAgYm9vbCBjaGVja1Jl
Z2lvblN0eWxlKEVsZW1lbnQqKTsKIAotICAgIGJvb2wgdXNlc1NpYmxpbmdSdWxlcygpIGNvbnN0
IHsgcmV0dXJuIG1fZmVhdHVyZXMuc2libGluZ1J1bGVzOyB9CisgICAgYm9vbCB1c2VzU2libGlu
Z1J1bGVzKCkgY29uc3QgeyByZXR1cm4gIW1fZmVhdHVyZXMuc2libGluZ1J1bGVzLmlzRW1wdHko
KTsgfQogICAgIGJvb2wgdXNlc0ZpcnN0TGluZVJ1bGVzKCkgY29uc3QgeyByZXR1cm4gbV9mZWF0
dXJlcy51c2VzRmlyc3RMaW5lUnVsZXM7IH0KICAgICBib29sIHVzZXNCZWZvcmVBZnRlclJ1bGVz
KCkgY29uc3QgeyByZXR1cm4gbV9mZWF0dXJlcy51c2VzQmVmb3JlQWZ0ZXJSdWxlczsgfQogICAg
IGJvb2wgdXNlc0xpbmtSdWxlcygpIGNvbnN0IHsgcmV0dXJuIG1fZmVhdHVyZXMudXNlc0xpbmtS
dWxlczsgfQpAQCAtMjI3LDE0ICsyMjcsMjAgQEAgcHVibGljOgogI2VuZGlmCiAjZW5kaWYgLy8g
RU5BQkxFKENTU19GSUxURVJTKQogCisgICAgc3RydWN0IFJ1bGVTZWxlY3RvclBhaXIgeworICAg
ICAgICBSdWxlU2VsZWN0b3JQYWlyKENTU1N0eWxlUnVsZSogcnVsZSwgQ1NTU2VsZWN0b3IqIHNl
bGVjdG9yKSA6IHJ1bGUocnVsZSksIHNlbGVjdG9yKHNlbGVjdG9yKSB7IH0KKyAgICAgICAgQ1NT
U3R5bGVSdWxlKiBydWxlOworICAgICAgICBDU1NTZWxlY3Rvciogc2VsZWN0b3I7CisgICAgfTsK
ICAgICBzdHJ1Y3QgRmVhdHVyZXMgewogICAgICAgICBGZWF0dXJlcygpOwogICAgICAgICB+RmVh
dHVyZXMoKTsKKyAgICAgICAgdm9pZCBhZGQoY29uc3QgQ1NTU3R5bGVTZWxlY3Rvcjo6RmVhdHVy
ZXMmKTsKICAgICAgICAgdm9pZCBjbGVhcigpOwogICAgICAgICBIYXNoU2V0PEF0b21pY1N0cmlu
Z0ltcGwqPiBpZHNJblJ1bGVzOwogICAgICAgICBIYXNoU2V0PEF0b21pY1N0cmluZ0ltcGwqPiBh
dHRyc0luUnVsZXM7Ci0gICAgICAgIE93blB0cjxSdWxlU2V0PiBzaWJsaW5nUnVsZXM7Ci0gICAg
ICAgIE93blB0cjxSdWxlU2V0PiB1bmNvbW1vbkF0dHJpYnV0ZVJ1bGVzOworICAgICAgICBWZWN0
b3I8UnVsZVNlbGVjdG9yUGFpcj4gc2libGluZ1J1bGVzOworICAgICAgICBWZWN0b3I8UnVsZVNl
bGVjdG9yUGFpcj4gdW5jb21tb25BdHRyaWJ1dGVSdWxlczsKICAgICAgICAgYm9vbCB1c2VzRmly
c3RMaW5lUnVsZXM7CiAgICAgICAgIGJvb2wgdXNlc0JlZm9yZUFmdGVyUnVsZXM7CiAgICAgICAg
IGJvb2wgdXNlc0xpbmtSdWxlczsKQEAgLTI4OCw2ICsyOTQsOCBAQCBwcml2YXRlOgogICAgIE93
blB0cjxSdWxlU2V0PiBtX3JlZ2lvblJ1bGVzOwogCiAgICAgRmVhdHVyZXMgbV9mZWF0dXJlczsK
KyAgICBPd25QdHI8UnVsZVNldD4gbV9zaWJsaW5nUnVsZVNldDsKKyAgICBPd25QdHI8UnVsZVNl
dD4gbV91bmNvbW1vbkF0dHJpYnV0ZVJ1bGVTZXQ7CiAKICAgICBib29sIG1faGFzVUFBcHBlYXJh
bmNlOwogICAgIEJvcmRlckRhdGEgbV9ib3JkZXJEYXRhOwo=
</data>

          </attachment>
      

    </bug>

</bugzilla>