<?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>80370</bug_id>
          
          <creation_ts>2012-03-05 19:53:50 -0800</creation_ts>
          <short_desc>Enable matched declaration caching for elements with a style attribute</short_desc>
          <delta_ts>2012-03-08 12:18:27 -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>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>78070</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Julien Chaffraix">jchaffraix</reporter>
          <assigned_to name="Julien Chaffraix">jchaffraix</assigned_to>
          <cc>dglazkov</cc>
    
    <cc>kling</cc>
    
    <cc>koivisto</cc>
    
    <cc>macpherson</cc>
    
    <cc>menard</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>571389</commentid>
    <comment_count>0</comment_count>
    <who name="Julien Chaffraix">jchaffraix</who>
    <bug_when>2012-03-05 19:53:50 -0800</bug_when>
    <thetext>http://trac.webkit.org/changeset/106741 disabled this as there were some issues with properly invalidating our matched declaration cache entries.

Let&apos;s bring the cache back on!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>571401</commentid>
    <comment_count>1</comment_count>
      <attachid>130273</attachid>
    <who name="Julien Chaffraix">jchaffraix</who>
    <bug_when>2012-03-05 20:04:21 -0800</bug_when>
    <thetext>Created attachment 130273
Early prototype: add an inline version to StylePropertySet, include this information to MatchedProperties

FYI this patch has its own issues that needs to be ironed out (like prevent people from abusing the logic for non-inline style StylePropertySet and causing perf regressions). I think however that the logic handles all cases of invalidation (JavaScript vs DOM). An earlier version shaved ~1% on Moz page cycler.

Comments welcome on the approach taken!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>571915</commentid>
    <comment_count>2</comment_count>
      <attachid>130395</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2012-03-06 09:42:21 -0800</bug_when>
    <thetext>Created attachment 130395
another possible patch

This takes somewhat different approach by making inline style property sets immutable as long as there is no CSSOM wrapper (no one accesses element.style). Immutability means they are inherently cacheable.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>571921</commentid>
    <comment_count>3</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-03-06 09:48:24 -0800</bug_when>
    <thetext>Attachment 130395 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCor...&quot; exit_code: 1
Source/WebCore/dom/ElementAttributeData.h:96:  The parameter name &quot;element&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Total errors found: 1 in 18 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>571940</commentid>
    <comment_count>4</comment_count>
      <attachid>130395</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2012-03-06 10:05:17 -0800</bug_when>
    <thetext>Comment on attachment 130395
another possible patch

Attachment 130395 did not pass qt-ews (qt):
Output: http://queues.webkit.org/results/11834477</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>572006</commentid>
    <comment_count>5</comment_count>
      <attachid>130395</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-03-06 11:12:41 -0800</bug_when>
    <thetext>Comment on attachment 130395
another possible patch

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

&gt; Source/WebCore/ChangeLog:4
&gt; +        https://bugs.webkit.org/show_bug.cgi?id=80370
&gt; +        Re-enable matched declaration caching for elements with a style attribute

The order is wrong here...

&gt; Source/WebCore/dom/StyledElement.cpp:108
&gt; +                // Keep inline style property sets without CSSOM wrappers immutable. This way they can be cached.

I&apos;m confused by this comment. This isn&apos;t really a place where we make the property set immutable, or is it?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>572073</commentid>
    <comment_count>6</comment_count>
      <attachid>130395</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-03-06 12:36:25 -0800</bug_when>
    <thetext>Comment on attachment 130395
another possible patch

Attachment 130395 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/11837531

New failing tests:
editing/undo/remove-css-property-and-remove-style.html
fast/css/rem-dynamic-scaling.html
editing/execCommand/toggle-compound-styles.html
editing/execCommand/5770834-1.html
editing/style/push-down-font-styles.html
editing/style/push-down-implicit-styles.html
editing/execCommand/remove-format-multiple-elements.html
editing/style/push-down-inline-styles.html
fast/multicol/vertical-rl/break-properties.html
editing/style/push-down-implicit-styles-around-list.html
editing/style/inline-style-container.html
editing/execCommand/empty-span-removal.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>572090</commentid>
    <comment_count>7</comment_count>
      <attachid>130395</attachid>
    <who name="Julien Chaffraix">jchaffraix</who>
    <bug_when>2012-03-06 13:14:04 -0800</bug_when>
    <thetext>Comment on attachment 130395
another possible patch

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

A couple more comments but I agree that this approach is a more light-weight alternative to what I had in mind (and catch a few bugs at compile time).

&gt; Source/WebCore/dom/StyledElement.cpp:129
&gt; +    ensureAttributeData()-&gt;ensureMutableInlineStyle(this)-&gt;setProperty(propertyID, document()-&gt;cssValuePool()-&gt;createIdentifierValue(identifier), important);

It really looks like ensureAttributeData()-&gt;ensureMutableInlineStyle(this) should have its own method. I wonder if the naming couldn&apos;t be improved to underline that we may copy our style as &apos;mutable&apos; is fairly generic IMHO. I couldn&apos;t find a better naming unfortunately.

&gt; Source/WebCore/dom/StyledElement.h:43
&gt; +    const StylePropertySet* inlineStyle() const { return attributeData() ? attributeData()-&gt;inlineStyle() : 0; }
&gt; +    const StylePropertySet* ensureInlineStyle() { return ensureAttributeData()-&gt;ensureInlineStyle(this); }

Those renamings are making Qt sad:

../../../Source/WebKit/qt/Api/qwebelement.cpp: In member function &apos;QString QWebElement::styleProperty(const QString&amp;, QWebElement::StyleResolveStrategy) const&apos;:
../../../Source/WebKit/qt/Api/qwebelement.cpp:847: error: &apos;class WebCore::StyledElement&apos; has no member named &apos;ensureInlineStyleDecl&apos;
../../../Source/WebKit/qt/Api/qwebelement.cpp: In member function &apos;void QWebElement::setStyleProperty(const QString&amp;, const QString&amp;)&apos;:
../../../Source/WebKit/qt/Api/qwebelement.cpp:912: error: &apos;class WebCore::StyledElement&apos; has no member named &apos;ensureInlineStyleDecl&apos;

&gt; Source/WebCore/editing/ApplyStyleCommand.cpp:512
&gt; +            RefPtr&lt;StylePropertySet&gt; inlineStyle = element-&gt; ensureInlineStyle()-&gt;copy();

Extra space.

&gt; Source/WebCore/editing/ApplyStyleCommand.cpp:726
&gt; +            RefPtr&lt;StylePropertySet&gt; inlineStyle = element-&gt; ensureInlineStyle()-&gt;copy();

Ditto.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>572096</commentid>
    <comment_count>8</comment_count>
      <attachid>130395</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-03-06 13:20:36 -0800</bug_when>
    <thetext>Comment on attachment 130395
another possible patch

Attachment 130395 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/11834576

New failing tests:
editing/undo/remove-css-property-and-remove-style.html
fast/css/rem-dynamic-scaling.html
editing/execCommand/toggle-compound-styles.html
editing/execCommand/5770834-1.html
editing/style/push-down-font-styles.html
editing/style/push-down-implicit-styles.html
editing/execCommand/remove-format-multiple-elements.html
editing/style/push-down-inline-styles.html
fast/multicol/vertical-rl/break-properties.html
editing/style/push-down-implicit-styles-around-list.html
editing/style/inline-style-container.html
editing/execCommand/empty-span-removal.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>572764</commentid>
    <comment_count>9</comment_count>
      <attachid>130590</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2012-03-07 03:45:25 -0800</bug_when>
    <thetext>Created attachment 130590
bug fixes, qt build fix</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>572780</commentid>
    <comment_count>10</comment_count>
      <attachid>130590</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2012-03-07 04:07:37 -0800</bug_when>
    <thetext>Comment on attachment 130590
bug fixes, qt build fix

Attachment 130590 did not pass qt-ews (qt):
Output: http://queues.webkit.org/results/11834965</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>572835</commentid>
    <comment_count>11</comment_count>
      <attachid>130590</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-03-07 06:03:43 -0800</bug_when>
    <thetext>Comment on attachment 130590
bug fixes, qt build fix

Attachment 130590 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/11849059

New failing tests:
media/track/track-cue-rendering.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>572839</commentid>
    <comment_count>12</comment_count>
      <attachid>130609</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2012-03-07 06:18:54 -0800</bug_when>
    <thetext>Created attachment 130609
another qt build fix attempt</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>572874</commentid>
    <comment_count>13</comment_count>
      <attachid>130609</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-03-07 07:25:55 -0800</bug_when>
    <thetext>Comment on attachment 130609
another qt build fix attempt

Attachment 130609 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/11854049

New failing tests:
media/track/track-cue-rendering.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>572894</commentid>
    <comment_count>14</comment_count>
      <attachid>130609</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-03-07 08:15:02 -0800</bug_when>
    <thetext>Comment on attachment 130609
another qt build fix attempt

Attachment 130609 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/11852093

New failing tests:
media/track/track-cue-rendering.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>573012</commentid>
    <comment_count>15</comment_count>
      <attachid>130609</attachid>
    <who name="Andreas Kling">kling</who>
    <bug_when>2012-03-07 10:52:22 -0800</bug_when>
    <thetext>Comment on attachment 130609
another qt build fix attempt

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

This looks pretty cool. r=me, assuming the EWS failure is a flake.

&gt; Source/WebCore/dom/ElementAttributeData.cpp:70
&gt; +        m_inlineStyleDecl = m_inlineStyleDecl-&gt;copy();
&gt; +        m_inlineStyleDecl-&gt;setStrictParsing(element-&gt;isHTMLElement() &amp;&amp; !element-&gt;document()-&gt;inQuirksMode());

I feel like copy() should return a StylePropertySet with the same strictness setting as the original.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>574067</commentid>
    <comment_count>16</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2012-03-08 12:18:16 -0800</bug_when>
    <thetext>http://trac.webkit.org/changeset/110188

(and http://trac.webkit.org/changeset/110190 to fix qt build)</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>130273</attachid>
            <date>2012-03-05 20:04:21 -0800</date>
            <delta_ts>2012-03-05 20:04:21 -0800</delta_ts>
            <desc>Early prototype: add an inline version to StylePropertySet, include this information to MatchedProperties</desc>
            <filename>WIP-cache-style-attribute-matched-declaration.diff</filename>
            <type>text/plain</type>
            <size>5076</size>
            <attacher name="Julien Chaffraix">jchaffraix</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTdHlsZVNlbGVjdG9yLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2Nzcy9DU1NTdHlsZVNlbGVjdG9yLmNwcAppbmRleCA3NDA0MjQ3Li5iOWEw
YjMwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU3R5bGVTZWxlY3Rvci5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU1N0eWxlU2VsZWN0b3IuY3BwCkBAIC03ODMsNiAr
NzgzLDcgQEAgdm9pZCBDU1NTdHlsZVNlbGVjdG9yOjphZGRNYXRjaGVkUHJvcGVydGllcyhNYXRj
aFJlc3VsdCYgbWF0Y2hSZXN1bHQsIFN0eWxlUHJvcGUKICAgICBuZXdQcm9wZXJ0aWVzLnByb3Bl
cnRpZXMgPSBwcm9wZXJ0aWVzOwogICAgIG5ld1Byb3BlcnRpZXMubGlua01hdGNoVHlwZSA9IGxp
bmtNYXRjaFR5cGU7CiAgICAgbmV3UHJvcGVydGllcy5pc0luUmVnaW9uUnVsZSA9IGluUmVnaW9u
UnVsZTsKKyAgICBuZXdQcm9wZXJ0aWVzLmlubGluZVN0eWxlRGVjbFZlcnNpb24gPSBwcm9wZXJ0
aWVzLT5pbmxpbmVTdHlsZURlY2xWZXJzaW9uKCk7CiAgICAgbWF0Y2hSZXN1bHQubWF0Y2hlZFJ1
bGVzLmFwcGVuZChydWxlKTsKIH0KIApAQCAtMTA4OSw3ICsxMDkwLDcgQEAgdm9pZCBDU1NTdHls
ZVNlbGVjdG9yOjptYXRjaEFsbFJ1bGVzKE1hdGNoUmVzdWx0JiByZXN1bHQpCiAKICAgICAvLyBO
b3cgY2hlY2sgb3VyIGlubGluZSBzdHlsZSBhdHRyaWJ1dGUuCiAgICAgaWYgKG1fbWF0Y2hBdXRo
b3JBbmRVc2VyU3R5bGVzICYmIG1fc3R5bGVkRWxlbWVudCkKLSAgICAgICAgYWRkRWxlbWVudFN0
eWxlUHJvcGVydGllcyhyZXN1bHQsIG1fc3R5bGVkRWxlbWVudC0+aW5saW5lU3R5bGVEZWNsKCks
IGZhbHNlIC8qIGlzQ2FjaGVhYmxlICovKTsKKyAgICAgICAgYWRkRWxlbWVudFN0eWxlUHJvcGVy
dGllcyhyZXN1bHQsIG1fc3R5bGVkRWxlbWVudC0+aW5saW5lU3R5bGVEZWNsKCkpOwogCiAjaWYg
RU5BQkxFKFNWRykKICAgICAvLyBOb3cgY2hlY2sgU01JTCBhbmltYXRpb24gb3ZlcnJpZGUgc3R5
bGUuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU3R5bGVTZWxlY3Rvci5oIGIv
U291cmNlL1dlYkNvcmUvY3NzL0NTU1N0eWxlU2VsZWN0b3IuaAppbmRleCBlM2M3MDRkLi41NzE2
MTY3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU3R5bGVTZWxlY3Rvci5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTdHlsZVNlbGVjdG9yLmgKQEAgLTI4NCw2ICsyODQs
NyBAQCBwcml2YXRlOgogICAgICAgICAgICAgc3RydWN0IHsKICAgICAgICAgICAgICAgICB1bnNp
Z25lZCBsaW5rTWF0Y2hUeXBlIDogMjsKICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpc0luUmVn
aW9uUnVsZSA6IDE7CisgICAgICAgICAgICAgICAgdW5zaWduZWQgaW5saW5lU3R5bGVEZWNsVmVy
c2lvbiA6IDEwOwogICAgICAgICAgICAgfTsKICAgICAgICAgICAgIC8vIFVzZWQgdG8gbWFrZSBz
dXJlIGFsbCBtZW1vcnkgaXMgemVyby1pbml0aWFsaXplZCBzaW5jZSB3ZSBjb21wdXRlIHRoZSBo
YXNoIG92ZXIgdGhlIGJ5dGVzIG9mIHRoaXMgb2JqZWN0LgogICAgICAgICAgICAgdm9pZCogcG9z
c2libHlQYWRkZWRNZW1iZXI7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvUHJvcGVy
dHlTZXRDU1NTdHlsZURlY2xhcmF0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9Qcm9wZXJ0
eVNldENTU1N0eWxlRGVjbGFyYXRpb24uY3BwCmluZGV4IDQyOGYxOTUuLjY0MTRjNWMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9Qcm9wZXJ0eVNldENTU1N0eWxlRGVjbGFyYXRpb24u
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9Qcm9wZXJ0eVNldENTU1N0eWxlRGVjbGFyYXRp
b24uY3BwCkBAIC0yOTIsNiArMjkyLDkgQEAgYm9vbCBQcm9wZXJ0eVNldENTU1N0eWxlRGVjbGFy
YXRpb246OmNzc1Byb3BlcnR5TWF0Y2hlcyhjb25zdCBDU1NQcm9wZXJ0eSogcHJvcGUKIAogdm9p
ZCBSdWxlQ1NTU3R5bGVEZWNsYXJhdGlvbjo6c2V0TmVlZHNTdHlsZVJlY2FsYygpCiB7CisgICAg
Ly8gRklYTUU6IE5lZWRlZD8KKyAgICBtX3Byb3BlcnR5U2V0LT5pbmNyZWFzZUlubGluZVN0eWxl
RGVjbFZlcnNpb24oKTsKKwogICAgIGlmIChDU1NTdHlsZVNoZWV0KiBzdHlsZVNoZWV0ID0gY29u
dGV4dFN0eWxlU2hlZXQoKSkgewogICAgICAgICBpZiAoRG9jdW1lbnQqIGRvY3VtZW50ID0gc3R5
bGVTaGVldC0+ZmluZERvY3VtZW50KCkpCiAgICAgICAgICAgICBkb2N1bWVudC0+c3R5bGVTZWxl
Y3RvckNoYW5nZWQoRGVmZXJSZWNhbGNTdHlsZSk7CkBAIC0zMDUsMTIgKzMwOCwxNCBAQCBDU1NT
dHlsZVNoZWV0KiBSdWxlQ1NTU3R5bGVEZWNsYXJhdGlvbjo6Y29udGV4dFN0eWxlU2hlZXQoKSBj
b25zdAogCiB2b2lkIElubGluZUNTU1N0eWxlRGVjbGFyYXRpb246OnNldE5lZWRzU3R5bGVSZWNh
bGMoKQogeworICAgIC8vICFtX3BhcmVudEVsZW1lbnQ/CisgICAgbV9wcm9wZXJ0eVNldC0+aW5j
cmVhc2VJbmxpbmVTdHlsZURlY2xWZXJzaW9uKCk7CisKICAgICBpZiAoIW1fcGFyZW50RWxlbWVu
dCkKICAgICAgICAgcmV0dXJuOwogICAgIG1fcGFyZW50RWxlbWVudC0+c2V0TmVlZHNTdHlsZVJl
Y2FsYyhJbmxpbmVTdHlsZUNoYW5nZSk7CiAgICAgbV9wYXJlbnRFbGVtZW50LT5pbnZhbGlkYXRl
U3R5bGVBdHRyaWJ1dGUoKTsKICAgICBTdHlsZUF0dHJpYnV0ZU11dGF0aW9uU2NvcGUodGhpcyku
ZGlkSW52YWxpZGF0ZVN0eWxlQXR0cigpOwotICAgIHJldHVybjsKIH0KIAogQ1NTU3R5bGVTaGVl
dCogSW5saW5lQ1NTU3R5bGVEZWNsYXJhdGlvbjo6Y29udGV4dFN0eWxlU2hlZXQoKSBjb25zdApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUHJvcGVydHlTZXQuY3BwIGIvU291
cmNlL1dlYkNvcmUvY3NzL1N0eWxlUHJvcGVydHlTZXQuY3BwCmluZGV4IGU4ZDk3Y2EuLjlkMTIy
OTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVByb3BlcnR5U2V0LmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVQcm9wZXJ0eVNldC5jcHAKQEAgLTQ2LDYgKzQ2
LDcgQEAgc3RhdGljIFByb3BlcnR5U2V0Q1NTT01XcmFwcGVyTWFwJiBwcm9wZXJ0eVNldENTU09N
V3JhcHBlck1hcCgpCiBTdHlsZVByb3BlcnR5U2V0OjpTdHlsZVByb3BlcnR5U2V0KCkKICAgICA6
IG1fc3RyaWN0UGFyc2luZyhmYWxzZSkKICAgICAsIG1faGFzQ1NTT01XcmFwcGVyKGZhbHNlKQor
ICAgICwgbV9pbmxpbmVTdHlsZURlY2xWZXJzaW9uKDApCiB7CiB9CiAKQEAgLTUzLDYgKzU0LDcg
QEAgU3R5bGVQcm9wZXJ0eVNldDo6U3R5bGVQcm9wZXJ0eVNldChjb25zdCBWZWN0b3I8Q1NTUHJv
cGVydHk+JiBwcm9wZXJ0aWVzKQogICAgIDogbV9wcm9wZXJ0aWVzKHByb3BlcnRpZXMpCiAgICAg
LCBtX3N0cmljdFBhcnNpbmcodHJ1ZSkKICAgICAsIG1faGFzQ1NTT01XcmFwcGVyKGZhbHNlKQor
ICAgICwgbV9pbmxpbmVTdHlsZURlY2xWZXJzaW9uKDApCiB7CiAgICAgbV9wcm9wZXJ0aWVzLnNo
cmlua1RvRml0KCk7CiB9CkBAIC02MCw2ICs2Miw3IEBAIFN0eWxlUHJvcGVydHlTZXQ6OlN0eWxl
UHJvcGVydHlTZXQoY29uc3QgVmVjdG9yPENTU1Byb3BlcnR5PiYgcHJvcGVydGllcykKIFN0eWxl
UHJvcGVydHlTZXQ6OlN0eWxlUHJvcGVydHlTZXQoY29uc3QgQ1NTUHJvcGVydHkqIGNvbnN0ICog
cHJvcGVydGllcywgaW50IG51bVByb3BlcnRpZXMsIGJvb2wgdXNlU3RyaWN0UGFyc2luZykKICAg
ICA6IG1fc3RyaWN0UGFyc2luZyh1c2VTdHJpY3RQYXJzaW5nKQogICAgICwgbV9oYXNDU1NPTVdy
YXBwZXIoZmFsc2UpCisgICAgLCBtX2lubGluZVN0eWxlRGVjbFZlcnNpb24oMCkKIHsKICAgICBt
X3Byb3BlcnRpZXMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShudW1Qcm9wZXJ0aWVzKTsKICAgICBI
YXNoTWFwPGludCwgYm9vbD4gY2FuZGlkYXRlczsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2Nzcy9TdHlsZVByb3BlcnR5U2V0LmggYi9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVQcm9wZXJ0
eVNldC5oCmluZGV4IDlhZWIyZTQuLjM5YzgyZWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2Nzcy9TdHlsZVByb3BlcnR5U2V0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUHJv
cGVydHlTZXQuaApAQCAtMTA4LDYgKzEwOCwxNCBAQCBwdWJsaWM6CiAgICAgQ1NTU3R5bGVEZWNs
YXJhdGlvbiogZW5zdXJlUnVsZUNTU1N0eWxlRGVjbGFyYXRpb24oY29uc3QgQ1NTUnVsZSogcGFy
ZW50UnVsZSkgY29uc3Q7CiAgICAgQ1NTU3R5bGVEZWNsYXJhdGlvbiogZW5zdXJlSW5saW5lQ1NT
U3R5bGVEZWNsYXJhdGlvbihjb25zdCBTdHlsZWRFbGVtZW50KiBwYXJlbnRFbGVtZW50KSBjb25z
dDsKIAorICAgIHVuc2lnbmVkIGlubGluZVN0eWxlRGVjbFZlcnNpb24oKSBjb25zdCB7IHJldHVy
biBtX2lubGluZVN0eWxlRGVjbFZlcnNpb247IH0KKworICAgIC8vIFNob3VsZCBiZSBwcml2YXRl
PworICAgIHZvaWQgaW5jcmVhc2VJbmxpbmVTdHlsZURlY2xWZXJzaW9uKCkKKyAgICB7CisgICAg
ICAgICsrbV9pbmxpbmVTdHlsZURlY2xWZXJzaW9uOworICAgIH0KKwogcHJpdmF0ZToKICAgICBT
dHlsZVByb3BlcnR5U2V0KCk7CiAgICAgU3R5bGVQcm9wZXJ0eVNldChjb25zdCBWZWN0b3I8Q1NT
UHJvcGVydHk+Jik7CkBAIC0xMzcsNiArMTQ1LDkgQEAgcHJpdmF0ZToKIAogICAgIGJvb2wgbV9z
dHJpY3RQYXJzaW5nIDogMTsKICAgICBtdXRhYmxlIGJvb2wgbV9oYXNDU1NPTVdyYXBwZXIgOiAx
OworICAgIC8vIFRoaXMgaXMgdXNlZCB0byBkZXRlY3QgY2hhbmdlcyBkb25lIGJ5IFByb3BlcnR5
U2V0Q1NTU3R5bGVEZWNsYXJhdGlvbiAoSlMpIG9yIFN0eWxlZEVsZW1lbnQgKFdlYkNvcmUpCisg
ICAgLy8gYW5kIGF2b2lkIHJlLXVzaW5nIG91ciBkaXJ0eSBjYWNoZWQgdmFsdWUgaW4gQ1NTU3R5
bGVTZWxlY3Rvci4KKyAgICB1bnNpZ25lZCBtX2lubGluZVN0eWxlRGVjbFZlcnNpb24gOiAxMDsK
ICAgICAKICAgICBmcmllbmQgY2xhc3MgUHJvcGVydHlTZXRDU1NTdHlsZURlY2xhcmF0aW9uOwog
fTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>130395</attachid>
            <date>2012-03-06 09:42:21 -0800</date>
            <delta_ts>2012-03-07 03:45:25 -0800</delta_ts>
            <desc>another possible patch</desc>
            <filename>cacheable-inline-style.patch</filename>
            <type>text/plain</type>
            <size>32502</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEwOTkyNSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDg3IEBACisyMDEyLTAzLTA2ICBBbnR0aSBL
b2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KKworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODAzNzAKKyAgICAgICAgUmUtZW5hYmxlIG1hdGNoZWQgZGVj
bGFyYXRpb24gY2FjaGluZyBmb3IgZWxlbWVudHMgd2l0aCBhIHN0eWxlIGF0dHJpYnV0ZQorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE1ha2UgdGhlIHBy
b3BlcnR5IHNldCBmb3Igc3R5bGUgYXR0cmlidXRlIGltbXV0YWJsZSBhcyBsb25nIGFzIHRoZXJl
IGlzIG5vIENTU09NCisgICAgICAgIHdyYXBwZXIgZm9yIGl0LiBJZiB0aGUgc3R5bGUgYXR0cmli
dXRlIGNoYW5nZXMgd2UgY3JlYXRlIGEgbmV3IHByb3BlcnR5IHNldCBpbnN0ZWFkCisgICAgICAg
IG9mIHJlY3ljbGluZyB0aGUgb2xkIG9uZS4gVGhpcyB3YXkgdGhlIHByb3BlcnR5IHNldHMgY2Fu
IGJlIG1hZGUgY2FjaGVhYmxlIGFzIGxvbmcKKyAgICAgICAgYXMgdGhlcmUgaXMgbm8gQ1NTT00g
d3JhcHBlciB0aGF0IHdvdWxkIGFsbG93IHVuY29udHJvbGxlZCBtb2RpZmljYXRpb25zLiBDb25z
dHJ1Y3RpbmcKKyAgICAgICAgdGhlIHdyYXBwZXIgZGlzYWJsZXMgY2FjaGluZy4KKyAgICAgICAg
CisgICAgICAgIE1hZGUgU3R5bGVkRWxlbWVudDo6aW5saW5lU3R5bGUoKSBhbmQgU3R5bGVkRWxl
bWVudDo6ZW5zdXJlSW5saW5lU3R5bGUoKSByZXR1cm4gYSBjb25zdAorICAgICAgICBTdHlsZVBy
b3BlcnR5U2V0IHNvIG1ha2luZyBhY2NpZGVudGFsIG1vZGlmaWNhdGlvbnMgZGlmZmljdWx0LiBB
bHNvIGRyb3BwZWQgKkRlY2wgZnJvbQorICAgICAgICB0aGUgbmFtZXMuCisKKyAgICAgICAgKiBj
c3MvQ1NTU3R5bGVTZWxlY3Rvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDU1NTdHlsZVNlbGVj
dG9yOjpjb2xsZWN0TWF0Y2hpbmdSdWxlc0Zvckxpc3QpOgorICAgICAgICAqIGNzcy9TdHlsZVBy
b3BlcnR5U2V0Lmg6CisgICAgICAgIChTdHlsZVByb3BlcnR5U2V0KToKKyAgICAgICAgKFdlYkNv
cmU6OlN0eWxlUHJvcGVydHlTZXQ6Omhhc0NTU09NV3JhcHBlcik6CisgICAgICAgICogZG9tL0Vs
ZW1lbnRBdHRyaWJ1dGVEYXRhLmNwcDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2Vi
Q29yZTo6RWxlbWVudEF0dHJpYnV0ZURhdGE6OmVuc3VyZUlubGluZVN0eWxlKToKKyAgICAgICAg
KFdlYkNvcmU6OkVsZW1lbnRBdHRyaWJ1dGVEYXRhOjplbnN1cmVNdXRhYmxlSW5saW5lU3R5bGUp
OgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudEF0dHJpYnV0ZURhdGE6OmRlc3Ryb3lJbmxpbmVT
dHlsZSk6CisgICAgICAgICogZG9tL0VsZW1lbnRBdHRyaWJ1dGVEYXRhLmg6CisgICAgICAgIChX
ZWJDb3JlOjpFbGVtZW50QXR0cmlidXRlRGF0YTo6aW5saW5lU3R5bGUpOgorICAgICAgICAoRWxl
bWVudEF0dHJpYnV0ZURhdGEpOgorICAgICAgICAqIGRvbS9TdHlsZWRFbGVtZW50LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlN0eWxlZEVsZW1lbnQ6OnVwZGF0ZVN0eWxlQXR0cmlidXRlKToKKyAg
ICAgICAgKFdlYkNvcmU6OlN0eWxlZEVsZW1lbnQ6On5TdHlsZWRFbGVtZW50KToKKyAgICAgICAg
KFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVkRWxlbWVudDo6c3R5bGUpOgorICAg
ICAgICAoV2ViQ29yZTo6U3R5bGVkRWxlbWVudDo6cGFyc2VBdHRyaWJ1dGUpOgorICAgICAgICAo
V2ViQ29yZTo6U3R5bGVkRWxlbWVudDo6c2V0SW5saW5lU3R5bGVQcm9wZXJ0eSk6CisgICAgICAg
IChXZWJDb3JlOjpTdHlsZWRFbGVtZW50OjpyZW1vdmVJbmxpbmVTdHlsZVByb3BlcnR5KToKKyAg
ICAgICAgKFdlYkNvcmU6OlN0eWxlZEVsZW1lbnQ6OmFkZFN1YnJlc291cmNlQXR0cmlidXRlVVJM
cyk6CisgICAgICAgICogZG9tL1N0eWxlZEVsZW1lbnQuaDoKKyAgICAgICAgKFdlYkNvcmU6OlN0
eWxlZEVsZW1lbnQ6OmlubGluZVN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlZEVsZW1l
bnQ6OmVuc3VyZUlubGluZVN0eWxlKToKKyAgICAgICAgKFN0eWxlZEVsZW1lbnQpOgorICAgICAg
ICAoV2ViQ29yZTo6U3R5bGVkRWxlbWVudDo6ZGVzdHJveUlubGluZVN0eWxlKToKKyAgICAgICAg
KiBlZGl0aW5nL0FwcGx5U3R5bGVDb21tYW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Omhhc05v
QXR0cmlidXRlT3JPbmx5U3R5bGVBdHRyaWJ1dGUpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlT
dHlsZUNvbW1hbmQ6OmFwcGx5UmVsYXRpdmVGb250U3R5bGVDaGFuZ2UpOgorICAgICAgICAoV2Vi
Q29yZTo6QXBwbHlTdHlsZUNvbW1hbmQ6OnJlbW92ZUVtYmVkZGluZ1VwVG9FbmNsb3NpbmdCbG9j
ayk6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVN0eWxlQ29tbWFuZDo6YXBwbHlJbmxpbmVTdHls
ZVRvTm9kZVJhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5U3R5bGVDb21tYW5kOjpyZW1v
dmVDU1NTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVN0eWxlQ29tbWFuZDo6YXBwbHlJ
bmxpbmVTdHlsZVRvUHVzaERvd24pOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlTdHlsZUNvbW1h
bmQ6OmFkZEJsb2NrU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlTdHlsZUNvbW1hbmQ6
OmFkZElubGluZVN0eWxlSWZOZWVkZWQpOgorICAgICAgICAqIGVkaXRpbmcvRWRpdGluZ1N0eWxl
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxFbGVtZW50RXF1aXZhbGVudDo6cHJvcGVydHlF
eGlzdHNJblN0eWxlKToKKyAgICAgICAgKEhUTUxUZXh0RGVjb3JhdGlvbkVxdWl2YWxlbnQpOgor
ICAgICAgICAoV2ViQ29yZTo6SFRNTFRleHREZWNvcmF0aW9uRXF1aXZhbGVudDo6cHJvcGVydHlF
eGlzdHNJblN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRpbmdTdHlsZTo6Y29uZmxpY3Rz
V2l0aElubGluZVN0eWxlT2ZFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRpbmdTdHls
ZTo6ZWxlbWVudElzU3R5bGVkU3Bhbk9ySFRNTEVxdWl2YWxlbnQpOgorICAgICAgICAoV2ViQ29y
ZTo6RWRpdGluZ1N0eWxlOjptZXJnZUlubGluZVN0eWxlT2ZFbGVtZW50KToKKyAgICAgICAgKFdl
YkNvcmU6OmVsZW1lbnRNYXRjaGVzQW5kUHJvcGVydHlJc05vdEluSW5saW5lU3R5bGVEZWNsKToK
KyAgICAgICAgKFdlYkNvcmU6OkVkaXRpbmdTdHlsZTo6bWVyZ2VTdHlsZSk6CisgICAgICAgICog
ZWRpdGluZy9FZGl0aW5nU3R5bGUuaDoKKyAgICAgICAgKEVkaXRpbmdTdHlsZSk6CisgICAgICAg
ICogZWRpdGluZy9SZW1vdmVDU1NQcm9wZXJ0eUNvbW1hbmQuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6UmVtb3ZlQ1NTUHJvcGVydHlDb21tYW5kOjpkb0FwcGx5KToKKyAgICAgICAgKiBlZGl0aW5n
L1JlcGxhY2VTZWxlY3Rpb25Db21tYW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlcGxhY2VT
ZWxlY3Rpb25Db21tYW5kOjpyZW1vdmVSZWR1bmRhbnRTdHlsZXNBbmRLZWVwU3R5bGVTcGFuSW5s
aW5lKToKKyAgICAgICAgKFdlYkNvcmU6OlJlcGxhY2VTZWxlY3Rpb25Db21tYW5kOjpoYW5kbGVT
dHlsZVNwYW5zKToKKyAgICAgICAgKiBlZGl0aW5nL21hcmt1cC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpTdHlsZWRNYXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5kRWxlbWVudCk6CisgICAgICAgIChX
ZWJDb3JlOjpzdHlsZUZyb21NYXRjaGVkUnVsZXNBbmRJbmxpbmVEZWNsKToKKyAgICAgICAgKiBo
dG1sL0hUTUxFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlZEVsZW1lbnQ6OmNv
cHlOb25BdHRyaWJ1dGVQcm9wZXJ0aWVzKToKKyAgICAgICAgKiBodG1sL2NhbnZhcy9DYW52YXNT
dHlsZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjdXJyZW50Q29sb3IpOgorICAgICAgICAqIHBh
Z2UvUGFnZVNlcmlhbGl6ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UGFnZVNlcmlhbGl6ZXI6
OnNlcmlhbGl6ZUZyYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OlBhZ2VTZXJpYWxpemVyOjpyZXRy
aWV2ZVJlc291cmNlc0ZvclByb3BlcnRpZXMpOgorICAgICAgICAqIHBhZ2UvUGFnZVNlcmlhbGl6
ZXIuaDoKKyAgICAgICAgKFBhZ2VTZXJpYWxpemVyKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVu
ZGVyVHJlZUFzVGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjppc0VtcHR5T3JVbnN0eWxlZEFw
cGxlU3R5bGVTcGFuKToKKwogMjAxMi0wMy0wNiAgVnNldm9sb2QgVmxhc292ICA8dnNldmlrQGNo
cm9taXVtLm9yZz4KIAogICAgICAgICBXZWIgSW5zcGVjdG9yOiBPcGVuIGxpbmsgaW4gcmVzb3Vy
Y2VzIHBhbmVsIG9ubHkgd29ya3MgdGhlIHNlY29uZCB0aW1lCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9jc3MvQ1NTU3R5bGVTZWxlY3Rvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
Y3NzL0NTU1N0eWxlU2VsZWN0b3IuY3BwCShyZXZpc2lvbiAxMDk4MTQpCisrKyBTb3VyY2UvV2Vi
Q29yZS9jc3MvQ1NTU3R5bGVTZWxlY3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwODMsOCAr
MTA4MywxMiBAQCB2b2lkIENTU1N0eWxlU2VsZWN0b3I6Om1hdGNoQWxsUnVsZXMoTWF0CiAgICAg
ICAgIG1hdGNoQXV0aG9yUnVsZXMocmVzdWx0LCBmYWxzZSk7CiAKICAgICAvLyBOb3cgY2hlY2sg
b3VyIGlubGluZSBzdHlsZSBhdHRyaWJ1dGUuCi0gICAgaWYgKG1fbWF0Y2hBdXRob3JBbmRVc2Vy
U3R5bGVzICYmIG1fc3R5bGVkRWxlbWVudCkKLSAgICAgICAgYWRkRWxlbWVudFN0eWxlUHJvcGVy
dGllcyhyZXN1bHQsIG1fc3R5bGVkRWxlbWVudC0+aW5saW5lU3R5bGVEZWNsKCksIGZhbHNlIC8q
IGlzQ2FjaGVhYmxlICovKTsKKyAgICBpZiAobV9tYXRjaEF1dGhvckFuZFVzZXJTdHlsZXMgJiYg
bV9zdHlsZWRFbGVtZW50ICYmIG1fc3R5bGVkRWxlbWVudC0+aW5saW5lU3R5bGUoKSkgeworICAg
ICAgICAvLyBJbmxpbmUgc3R5bGUgaXMgaW1tdXRhYmxlIGFzIGxvbmcgYXMgdGhlcmUgaXMgbm8g
Q1NTT00gd3JhcHBlci4KKyAgICAgICAgYm9vbCBpc0NhY2hlYWJsZSA9ICFtX3N0eWxlZEVsZW1l
bnQtPmlubGluZVN0eWxlKCktPmhhc0NTU09NV3JhcHBlcigpOworICAgICAgICAvLyBGSVhNRTog
Q29uc3RpZnkuCisgICAgICAgIGFkZEVsZW1lbnRTdHlsZVByb3BlcnRpZXMocmVzdWx0LCBjb25z
dF9jYXN0PFN0eWxlUHJvcGVydHlTZXQqPihtX3N0eWxlZEVsZW1lbnQtPmlubGluZVN0eWxlKCkp
LCBpc0NhY2hlYWJsZSk7CisgICAgfQogCiAjaWYgRU5BQkxFKFNWRykKICAgICAvLyBOb3cgY2hl
Y2sgU01JTCBhbmltYXRpb24gb3ZlcnJpZGUgc3R5bGUuCkBAIC0xMTQ0LDcgKzExNDgsNyBAQCBO
b2RlKiBDU1NTdHlsZVNlbGVjdG9yOjpsb2NhdGVDb3VzaW5MaXN0CiAgICAgICAgIHJldHVybiAw
OwogI2VuZGlmCiAgICAgU3R5bGVkRWxlbWVudCogcCA9IHN0YXRpY19jYXN0PFN0eWxlZEVsZW1l
bnQqPihwYXJlbnQpOwotICAgIGlmIChwLT5pbmxpbmVTdHlsZURlY2woKSkKKyAgICBpZiAocC0+
aW5saW5lU3R5bGUoKSkKICAgICAgICAgcmV0dXJuIDA7CiAjaWYgRU5BQkxFKFNWRykKICAgICBp
ZiAocC0+aXNTVkdFbGVtZW50KCkgJiYgc3RhdGljX2Nhc3Q8U1ZHRWxlbWVudCo+KHApLT5hbmlt
YXRlZFNNSUxTdHlsZVByb3BlcnRpZXMoKSkKQEAgLTEyODksNyArMTI5Myw3IEBAIGJvb2wgQ1NT
U3R5bGVTZWxlY3Rvcjo6Y2FuU2hhcmVTdHlsZVdpdGgKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
ICAgIGlmIChlbGVtZW50LT5oYXNDbGFzcygpICE9IG1fZWxlbWVudC0+aGFzQ2xhc3MoKSkKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmIChlbGVtZW50LT5pbmxpbmVTdHlsZURlY2woKSkK
KyAgICBpZiAoZWxlbWVudC0+aW5saW5lU3R5bGUoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
I2lmIEVOQUJMRShTVkcpCiAgICAgaWYgKGVsZW1lbnQtPmlzU1ZHRWxlbWVudCgpICYmIHN0YXRp
Y19jYXN0PFNWR0VsZW1lbnQqPihlbGVtZW50KS0+YW5pbWF0ZWRTTUlMU3R5bGVQcm9wZXJ0aWVz
KCkpCkBAIC0xNDAzLDcgKzE0MDcsNyBAQCBSZW5kZXJTdHlsZSogQ1NTU3R5bGVTZWxlY3Rvcjo6
bG9jYXRlU2hhCiAgICAgaWYgKCFtX3N0eWxlZEVsZW1lbnQgfHwgIW1fcGFyZW50U3R5bGUpCiAg
ICAgICAgIHJldHVybiAwOwogICAgIC8vIElmIHRoZSBlbGVtZW50IGhhcyBpbmxpbmUgc3R5bGUg
aXQgaXMgcHJvYmFibHkgdW5pcXVlLgotICAgIGlmIChtX3N0eWxlZEVsZW1lbnQtPmlubGluZVN0
eWxlRGVjbCgpKQorICAgIGlmIChtX3N0eWxlZEVsZW1lbnQtPmlubGluZVN0eWxlKCkpCiAgICAg
ICAgIHJldHVybiAwOwogI2lmIEVOQUJMRShTVkcpCiAgICAgaWYgKG1fc3R5bGVkRWxlbWVudC0+
aXNTVkdFbGVtZW50KCkgJiYgc3RhdGljX2Nhc3Q8U1ZHRWxlbWVudCo+KG1fc3R5bGVkRWxlbWVu
dCktPmFuaW1hdGVkU01JTFN0eWxlUHJvcGVydGllcygpKQpJbmRleDogU291cmNlL1dlYkNvcmUv
Y3NzL1N0eWxlUHJvcGVydHlTZXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3Mv
U3R5bGVQcm9wZXJ0eVNldC5oCShyZXZpc2lvbiAxMDk4MTQpCisrKyBTb3VyY2UvV2ViQ29yZS9j
c3MvU3R5bGVQcm9wZXJ0eVNldC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDcsNiArMTA3LDggQEAg
cHVibGljOgogICAgIENTU1N0eWxlRGVjbGFyYXRpb24qIGVuc3VyZUNTU1N0eWxlRGVjbGFyYXRp
b24oKSBjb25zdDsKICAgICBDU1NTdHlsZURlY2xhcmF0aW9uKiBlbnN1cmVSdWxlQ1NTU3R5bGVE
ZWNsYXJhdGlvbihjb25zdCBDU1NSdWxlKiBwYXJlbnRSdWxlKSBjb25zdDsKICAgICBDU1NTdHls
ZURlY2xhcmF0aW9uKiBlbnN1cmVJbmxpbmVDU1NTdHlsZURlY2xhcmF0aW9uKGNvbnN0IFN0eWxl
ZEVsZW1lbnQqIHBhcmVudEVsZW1lbnQpIGNvbnN0OworICAgIAorICAgIGJvb2wgaGFzQ1NTT01X
cmFwcGVyKCkgY29uc3QgeyByZXR1cm4gbV9oYXNDU1NPTVdyYXBwZXI7IH0KIAogcHJpdmF0ZToK
ICAgICBTdHlsZVByb3BlcnR5U2V0KCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVu
dEF0dHJpYnV0ZURhdGEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9FbGVt
ZW50QXR0cmlidXRlRGF0YS5jcHAJKHJldmlzaW9uIDEwOTgxNCkKKysrIFNvdXJjZS9XZWJDb3Jl
L2RvbS9FbGVtZW50QXR0cmlidXRlRGF0YS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUyLDggKzUy
LDggQEAgdm9pZCBFbGVtZW50QXR0cmlidXRlRGF0YTo6c2V0Q2xhc3MoY29ucwogewogICAgIG1f
Y2xhc3NOYW1lcy5zZXQoY2xhc3NOYW1lLCBzaG91bGRGb2xkQ2FzZSk7CiB9Ci0KLVN0eWxlUHJv
cGVydHlTZXQqIEVsZW1lbnRBdHRyaWJ1dGVEYXRhOjplbnN1cmVJbmxpbmVTdHlsZURlY2woU3R5
bGVkRWxlbWVudCogZWxlbWVudCkKKyAgICAKK1N0eWxlUHJvcGVydHlTZXQqIEVsZW1lbnRBdHRy
aWJ1dGVEYXRhOjplbnN1cmVJbmxpbmVTdHlsZShTdHlsZWRFbGVtZW50KiBlbGVtZW50KQogewog
ICAgIGlmICghbV9pbmxpbmVTdHlsZURlY2wpIHsKICAgICAgICAgQVNTRVJUKGVsZW1lbnQtPmlz
U3R5bGVkRWxlbWVudCgpKTsKQEAgLTYzLDcgKzYzLDE3IEBAIFN0eWxlUHJvcGVydHlTZXQqIEVs
ZW1lbnRBdHRyaWJ1dGVEYXRhOjoKICAgICByZXR1cm4gbV9pbmxpbmVTdHlsZURlY2wuZ2V0KCk7
CiB9CiAKLXZvaWQgRWxlbWVudEF0dHJpYnV0ZURhdGE6OmRlc3Ryb3lJbmxpbmVTdHlsZURlY2wo
U3R5bGVkRWxlbWVudCogZWxlbWVudCkKK1N0eWxlUHJvcGVydHlTZXQqIEVsZW1lbnRBdHRyaWJ1
dGVEYXRhOjplbnN1cmVNdXRhYmxlSW5saW5lU3R5bGUoU3R5bGVkRWxlbWVudCogZWxlbWVudCkK
K3sKKyAgICBpZiAobV9pbmxpbmVTdHlsZURlY2wgJiYgIW1faW5saW5lU3R5bGVEZWNsLT5oYXND
U1NPTVdyYXBwZXIoKSkgeworICAgICAgICBtX2lubGluZVN0eWxlRGVjbCA9IG1faW5saW5lU3R5
bGVEZWNsLT5jb3B5KCk7CisgICAgICAgIG1faW5saW5lU3R5bGVEZWNsLT5zZXRTdHJpY3RQYXJz
aW5nKGVsZW1lbnQtPmlzSFRNTEVsZW1lbnQoKSAmJiAhZWxlbWVudC0+ZG9jdW1lbnQoKS0+aW5R
dWlya3NNb2RlKCkpOworICAgICAgICByZXR1cm4gbV9pbmxpbmVTdHlsZURlY2wuZ2V0KCk7Cisg
ICAgfQorICAgIHJldHVybiBlbnN1cmVJbmxpbmVTdHlsZShlbGVtZW50KTsKK30KKwordm9pZCBF
bGVtZW50QXR0cmlidXRlRGF0YTo6ZGVzdHJveUlubGluZVN0eWxlKFN0eWxlZEVsZW1lbnQqIGVs
ZW1lbnQpCiB7CiAgICAgaWYgKCFtX2lubGluZVN0eWxlRGVjbCkKICAgICAgICAgcmV0dXJuOwpJ
bmRleDogU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnRBdHRyaWJ1dGVEYXRhLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnRBdHRyaWJ1dGVEYXRhLmgJKHJldmlzaW9u
IDEwOTgxNCkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50QXR0cmlidXRlRGF0YS5oCSh3
b3JraW5nIGNvcHkpCkBAIC05MCw5ICs5MCwxMCBAQCBwdWJsaWM6CiAgICAgY29uc3QgQXRvbWlj
U3RyaW5nJiBpZEZvclN0eWxlUmVzb2x1dGlvbigpIGNvbnN0IHsgcmV0dXJuIG1faWRGb3JTdHls
ZVJlc29sdXRpb247IH0KICAgICB2b2lkIHNldElkRm9yU3R5bGVSZXNvbHV0aW9uKGNvbnN0IEF0
b21pY1N0cmluZyYgbmV3SWQpIHsgbV9pZEZvclN0eWxlUmVzb2x1dGlvbiA9IG5ld0lkOyB9CiAK
LSAgICBTdHlsZVByb3BlcnR5U2V0KiBpbmxpbmVTdHlsZURlY2woKSB7IHJldHVybiBtX2lubGlu
ZVN0eWxlRGVjbC5nZXQoKTsgfQotICAgIFN0eWxlUHJvcGVydHlTZXQqIGVuc3VyZUlubGluZVN0
eWxlRGVjbChTdHlsZWRFbGVtZW50Kik7Ci0gICAgdm9pZCBkZXN0cm95SW5saW5lU3R5bGVEZWNs
KFN0eWxlZEVsZW1lbnQqIGVsZW1lbnQpOworICAgIFN0eWxlUHJvcGVydHlTZXQqIGlubGluZVN0
eWxlKCkgeyByZXR1cm4gbV9pbmxpbmVTdHlsZURlY2wuZ2V0KCk7IH0KKyAgICBTdHlsZVByb3Bl
cnR5U2V0KiBlbnN1cmVJbmxpbmVTdHlsZShTdHlsZWRFbGVtZW50Kik7CisgICAgU3R5bGVQcm9w
ZXJ0eVNldCogZW5zdXJlTXV0YWJsZUlubGluZVN0eWxlKFN0eWxlZEVsZW1lbnQqKTsKKyAgICB2
b2lkIGRlc3Ryb3lJbmxpbmVTdHlsZShTdHlsZWRFbGVtZW50KiBlbGVtZW50KTsKIAogICAgIFN0
eWxlUHJvcGVydHlTZXQqIGF0dHJpYnV0ZVN0eWxlKCkgY29uc3QgeyByZXR1cm4gbV9hdHRyaWJ1
dGVTdHlsZS5nZXQoKTsgfQogICAgIHZvaWQgc2V0QXR0cmlidXRlU3R5bGUoUGFzc1JlZlB0cjxT
dHlsZVByb3BlcnR5U2V0PiBzdHlsZSkgeyBtX2F0dHJpYnV0ZVN0eWxlID0gc3R5bGU7IH0KSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9TdHlsZWRFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9kb20vU3R5bGVkRWxlbWVudC5jcHAJKHJldmlzaW9uIDEwOTgxNCkKKysr
IFNvdXJjZS9XZWJDb3JlL2RvbS9TdHlsZWRFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NTAsMTMgKzUwLDE4IEBAIHZvaWQgU3R5bGVkRWxlbWVudDo6dXBkYXRlU3R5bGVBdHRyaWJ1dGUK
IHsKICAgICBBU1NFUlQoIWlzU3R5bGVBdHRyaWJ1dGVWYWxpZCgpKTsKICAgICBzZXRJc1N0eWxl
QXR0cmlidXRlVmFsaWQoKTsKLSAgICBpZiAoU3R5bGVQcm9wZXJ0eVNldCogaW5saW5lU3R5bGUg
PSBpbmxpbmVTdHlsZURlY2woKSkKKyAgICBpZiAoY29uc3QgU3R5bGVQcm9wZXJ0eVNldCogaW5s
aW5lU3R5bGUgPSB0aGlzLT5pbmxpbmVTdHlsZSgpKQogICAgICAgICBjb25zdF9jYXN0PFN0eWxl
ZEVsZW1lbnQqPih0aGlzKS0+c2V0QXR0cmlidXRlKHN0eWxlQXR0ciwgaW5saW5lU3R5bGUtPmFz
VGV4dCgpLCAvKm5vdGlmeUNoYW5nZWQqLyBmYWxzZSk7CiB9CiAKIFN0eWxlZEVsZW1lbnQ6On5T
dHlsZWRFbGVtZW50KCkKIHsKLSAgICBkZXN0cm95SW5saW5lU3R5bGVEZWNsKCk7CisgICAgZGVz
dHJveUlubGluZVN0eWxlKCk7Cit9CisKK0NTU1N0eWxlRGVjbGFyYXRpb24qIFN0eWxlZEVsZW1l
bnQ6OnN0eWxlKCkgCit7IAorICAgIHJldHVybiBlbnN1cmVBdHRyaWJ1dGVEYXRhKCktPmVuc3Vy
ZU11dGFibGVJbmxpbmVTdHlsZSh0aGlzKS0+ZW5zdXJlSW5saW5lQ1NTU3R5bGVEZWNsYXJhdGlv
bih0aGlzKTsgCiB9CiAKIHZvaWQgU3R5bGVkRWxlbWVudDo6YXR0cmlidXRlQ2hhbmdlZChBdHRy
aWJ1dGUqIGF0dHIpCkBAIC05Nyw5ICsxMDIsMTUgQEAgdm9pZCBTdHlsZWRFbGVtZW50OjpwYXJz
ZUF0dHJpYnV0ZShBdHRyaQogICAgICAgICBjbGFzc0F0dHJpYnV0ZUNoYW5nZWQoYXR0ci0+dmFs
dWUoKSk7CiAgICAgZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IHN0eWxlQXR0cikgewogICAgICAg
ICBpZiAoYXR0ci0+aXNOdWxsKCkpCi0gICAgICAgICAgICBkZXN0cm95SW5saW5lU3R5bGVEZWNs
KCk7Ci0gICAgICAgIGVsc2UgaWYgKGRvY3VtZW50KCktPmNvbnRlbnRTZWN1cml0eVBvbGljeSgp
LT5hbGxvd0lubGluZVN0eWxlKCkpCi0gICAgICAgICAgICBlbnN1cmVJbmxpbmVTdHlsZURlY2wo
KS0+cGFyc2VEZWNsYXJhdGlvbihhdHRyLT52YWx1ZSgpLCBkb2N1bWVudCgpLT5lbGVtZW50U2hl
ZXQoKSk7CisgICAgICAgICAgICBkZXN0cm95SW5saW5lU3R5bGUoKTsKKyAgICAgICAgZWxzZSBp
ZiAoZG9jdW1lbnQoKS0+Y29udGVudFNlY3VyaXR5UG9saWN5KCktPmFsbG93SW5saW5lU3R5bGUo
KSkgeworICAgICAgICAgICAgaWYgKGNvbnN0IFN0eWxlUHJvcGVydHlTZXQqIGlubGluZVN0eWxl
ID0gdGhpcy0+aW5saW5lU3R5bGUoKSkgeworICAgICAgICAgICAgICAgIC8vIEtlZXAgaW5saW5l
IHN0eWxlIHByb3BlcnR5IHNldHMgd2l0aG91dCBDU1NPTSB3cmFwcGVycyBpbW11dGFibGUuIFRo
aXMgd2F5IHRoZXkgY2FuIGJlIGNhY2hlZC4KKyAgICAgICAgICAgICAgICBpZiAoIWlubGluZVN0
eWxlLT5oYXNDU1NPTVdyYXBwZXIoKSkKKyAgICAgICAgICAgICAgICAgICAgZGVzdHJveUlubGlu
ZVN0eWxlKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbnN1cmVBdHRyaWJ1dGVEYXRh
KCktPmVuc3VyZUlubGluZVN0eWxlKHRoaXMpLT5wYXJzZURlY2xhcmF0aW9uKGF0dHItPnZhbHVl
KCksIGRvY3VtZW50KCktPmVsZW1lbnRTaGVldCgpKTsKKyAgICAgICAgfQogICAgICAgICBzZXRJ
c1N0eWxlQXR0cmlidXRlVmFsaWQoKTsKICAgICAgICAgc2V0TmVlZHNTdHlsZVJlY2FsYygpOwog
ICAgICAgICBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZEludmFsaWRhdGVTdHlsZUF0dHIo
ZG9jdW1lbnQoKSwgdGhpcyk7CkBAIC0xMTUsMjEgKzEyNiwyMSBAQCB2b2lkIFN0eWxlZEVsZW1l
bnQ6OmlubGluZVN0eWxlQ2hhbmdlZCgpCiAgICAgCiBib29sIFN0eWxlZEVsZW1lbnQ6OnNldElu
bGluZVN0eWxlUHJvcGVydHkoaW50IHByb3BlcnR5SUQsIGludCBpZGVudGlmaWVyLCBib29sIGlt
cG9ydGFudCkKIHsKLSAgICBlbnN1cmVJbmxpbmVTdHlsZURlY2woKS0+c2V0UHJvcGVydHkocHJv
cGVydHlJRCwgZG9jdW1lbnQoKS0+Y3NzVmFsdWVQb29sKCktPmNyZWF0ZUlkZW50aWZpZXJWYWx1
ZShpZGVudGlmaWVyKSwgaW1wb3J0YW50KTsKKyAgICBlbnN1cmVBdHRyaWJ1dGVEYXRhKCktPmVu
c3VyZU11dGFibGVJbmxpbmVTdHlsZSh0aGlzKS0+c2V0UHJvcGVydHkocHJvcGVydHlJRCwgZG9j
dW1lbnQoKS0+Y3NzVmFsdWVQb29sKCktPmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShpZGVudGlmaWVy
KSwgaW1wb3J0YW50KTsKICAgICBpbmxpbmVTdHlsZUNoYW5nZWQoKTsKICAgICByZXR1cm4gdHJ1
ZTsKIH0KIAogYm9vbCBTdHlsZWRFbGVtZW50OjpzZXRJbmxpbmVTdHlsZVByb3BlcnR5KGludCBw
cm9wZXJ0eUlELCBkb3VibGUgdmFsdWUsIENTU1ByaW1pdGl2ZVZhbHVlOjpVbml0VHlwZXMgdW5p
dCwgYm9vbCBpbXBvcnRhbnQpCiB7Ci0gICAgZW5zdXJlSW5saW5lU3R5bGVEZWNsKCktPnNldFBy
b3BlcnR5KHByb3BlcnR5SUQsIGRvY3VtZW50KCktPmNzc1ZhbHVlUG9vbCgpLT5jcmVhdGVWYWx1
ZSh2YWx1ZSwgdW5pdCksIGltcG9ydGFudCk7CisgICAgZW5zdXJlQXR0cmlidXRlRGF0YSgpLT5l
bnN1cmVNdXRhYmxlSW5saW5lU3R5bGUodGhpcyktPnNldFByb3BlcnR5KHByb3BlcnR5SUQsIGRv
Y3VtZW50KCktPmNzc1ZhbHVlUG9vbCgpLT5jcmVhdGVWYWx1ZSh2YWx1ZSwgdW5pdCksIGltcG9y
dGFudCk7CiAgICAgaW5saW5lU3R5bGVDaGFuZ2VkKCk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAK
IGJvb2wgU3R5bGVkRWxlbWVudDo6c2V0SW5saW5lU3R5bGVQcm9wZXJ0eShpbnQgcHJvcGVydHlJ
RCwgY29uc3QgU3RyaW5nJiB2YWx1ZSwgYm9vbCBpbXBvcnRhbnQpCiB7Ci0gICAgYm9vbCBjaGFu
Z2VzID0gZW5zdXJlSW5saW5lU3R5bGVEZWNsKCktPnNldFByb3BlcnR5KHByb3BlcnR5SUQsIHZh
bHVlLCBpbXBvcnRhbnQsIGRvY3VtZW50KCktPmVsZW1lbnRTaGVldCgpKTsKKyAgICBib29sIGNo
YW5nZXMgPSBlbnN1cmVBdHRyaWJ1dGVEYXRhKCktPmVuc3VyZU11dGFibGVJbmxpbmVTdHlsZSh0
aGlzKS0+c2V0UHJvcGVydHkocHJvcGVydHlJRCwgdmFsdWUsIGltcG9ydGFudCwgZG9jdW1lbnQo
KS0+ZWxlbWVudFNoZWV0KCkpOwogICAgIGlmIChjaGFuZ2VzKQogICAgICAgICBpbmxpbmVTdHls
ZUNoYW5nZWQoKTsKICAgICByZXR1cm4gY2hhbmdlczsKQEAgLTEzNyw3ICsxNDgsNyBAQCBib29s
IFN0eWxlZEVsZW1lbnQ6OnNldElubGluZVN0eWxlUHJvcGVyCiAKIGJvb2wgU3R5bGVkRWxlbWVu
dDo6cmVtb3ZlSW5saW5lU3R5bGVQcm9wZXJ0eShpbnQgcHJvcGVydHlJRCkKIHsKLSAgICBib29s
IGNoYW5nZXMgPSBlbnN1cmVJbmxpbmVTdHlsZURlY2woKS0+cmVtb3ZlUHJvcGVydHkocHJvcGVy
dHlJRCk7CisgICAgYm9vbCBjaGFuZ2VzID0gZW5zdXJlQXR0cmlidXRlRGF0YSgpLT5lbnN1cmVN
dXRhYmxlSW5saW5lU3R5bGUodGhpcyktPnJlbW92ZVByb3BlcnR5KHByb3BlcnR5SUQpOwogICAg
IGlmIChjaGFuZ2VzKQogICAgICAgICBpbmxpbmVTdHlsZUNoYW5nZWQoKTsKICAgICByZXR1cm4g
Y2hhbmdlczsKQEAgLTE0NSw3ICsxNTYsNyBAQCBib29sIFN0eWxlZEVsZW1lbnQ6OnJlbW92ZUlu
bGluZVN0eWxlUHJvCiAKIHZvaWQgU3R5bGVkRWxlbWVudDo6YWRkU3VicmVzb3VyY2VBdHRyaWJ1
dGVVUkxzKExpc3RIYXNoU2V0PEtVUkw+JiB1cmxzKSBjb25zdAogewotICAgIGlmIChTdHlsZVBy
b3BlcnR5U2V0KiBpbmxpbmVTdHlsZSA9IGlubGluZVN0eWxlRGVjbCgpKQorICAgIGlmIChTdHls
ZVByb3BlcnR5U2V0KiBpbmxpbmVTdHlsZSA9IGF0dHJpYnV0ZURhdGEoKSA/IGF0dHJpYnV0ZURh
dGEoKS0+aW5saW5lU3R5bGUoKSA6IDApCiAgICAgICAgIGlubGluZVN0eWxlLT5hZGRTdWJyZXNv
dXJjZVN0eWxlVVJMcyh1cmxzLCBkb2N1bWVudCgpLT5lbGVtZW50U2hlZXQoKSk7CiB9CiAKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9TdHlsZWRFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvZG9tL1N0eWxlZEVsZW1lbnQuaAkocmV2aXNpb24gMTA5ODE0KQorKysgU291
cmNlL1dlYkNvcmUvZG9tL1N0eWxlZEVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMzksOCAr
MzksOCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBTdHlsZVByb3BlcnR5U2V0KiBhZGRpdGlvbmFs
QXR0cmlidXRlU3R5bGUoKSB7IHJldHVybiAwOyB9CiAgICAgdm9pZCBpbnZhbGlkYXRlU3R5bGVB
dHRyaWJ1dGUoKTsKIAotICAgIFN0eWxlUHJvcGVydHlTZXQqIGlubGluZVN0eWxlRGVjbCgpIGNv
bnN0IHsgcmV0dXJuIGF0dHJpYnV0ZURhdGEoKSA/IGF0dHJpYnV0ZURhdGEoKS0+aW5saW5lU3R5
bGVEZWNsKCkgOiAwOyB9Ci0gICAgU3R5bGVQcm9wZXJ0eVNldCogZW5zdXJlSW5saW5lU3R5bGVE
ZWNsKCkgeyByZXR1cm4gZW5zdXJlQXR0cmlidXRlRGF0YSgpLT5lbnN1cmVJbmxpbmVTdHlsZURl
Y2wodGhpcyk7IH0KKyAgICBjb25zdCBTdHlsZVByb3BlcnR5U2V0KiBpbmxpbmVTdHlsZSgpIGNv
bnN0IHsgcmV0dXJuIGF0dHJpYnV0ZURhdGEoKSA/IGF0dHJpYnV0ZURhdGEoKS0+aW5saW5lU3R5
bGUoKSA6IDA7IH0KKyAgICBjb25zdCBTdHlsZVByb3BlcnR5U2V0KiBlbnN1cmVJbmxpbmVTdHls
ZSgpIHsgcmV0dXJuIGVuc3VyZUF0dHJpYnV0ZURhdGEoKS0+ZW5zdXJlSW5saW5lU3R5bGUodGhp
cyk7IH0KICAgICAKICAgICAvLyBVbmxpa2UgU3R5bGVQcm9wZXJ0eVNldCBzZXR0ZXJzLCB0aGVz
ZSBpbXBsZW1lbnQgaW52YWxpZGF0aW9uLgogICAgIGJvb2wgc2V0SW5saW5lU3R5bGVQcm9wZXJ0
eShpbnQgcHJvcGVydHlJRCwgaW50IGlkZW50aWZpZXIsIGJvb2wgaW1wb3J0YW50ID0gZmFsc2Up
OwpAQCAtNDgsNyArNDgsNyBAQCBwdWJsaWM6CiAgICAgYm9vbCBzZXRJbmxpbmVTdHlsZVByb3Bl
cnR5KGludCBwcm9wZXJ0eUlELCBjb25zdCBTdHJpbmcmIHZhbHVlLCBib29sIGltcG9ydGFudCA9
IGZhbHNlKTsKICAgICBib29sIHJlbW92ZUlubGluZVN0eWxlUHJvcGVydHkoaW50IHByb3BlcnR5
SUQpOwogICAgIAotICAgIHZpcnR1YWwgQ1NTU3R5bGVEZWNsYXJhdGlvbiogc3R5bGUoKSBPVkVS
UklERSB7IHJldHVybiBlbnN1cmVJbmxpbmVTdHlsZURlY2woKS0+ZW5zdXJlSW5saW5lQ1NTU3R5
bGVEZWNsYXJhdGlvbih0aGlzKTsgfQorICAgIHZpcnR1YWwgQ1NTU3R5bGVEZWNsYXJhdGlvbiog
c3R5bGUoKSBPVkVSUklERTsKIAogICAgIFN0eWxlUHJvcGVydHlTZXQqIGF0dHJpYnV0ZVN0eWxl
KCk7CiAKQEAgLTg0LDEwICs4NCwxMCBAQCBwcml2YXRlOgogCiAgICAgdm9pZCB1cGRhdGVBdHRy
aWJ1dGVTdHlsZSgpOwogCi0gICAgdm9pZCBkZXN0cm95SW5saW5lU3R5bGVEZWNsKCkKKyAgICB2
b2lkIGRlc3Ryb3lJbmxpbmVTdHlsZSgpCiAgICAgewogICAgICAgICBpZiAoYXR0cmlidXRlRGF0
YSgpKQotICAgICAgICAgICAgYXR0cmlidXRlRGF0YSgpLT5kZXN0cm95SW5saW5lU3R5bGVEZWNs
KHRoaXMpOworICAgICAgICAgICAgYXR0cmlidXRlRGF0YSgpLT5kZXN0cm95SW5saW5lU3R5bGUo
dGhpcyk7CiAgICAgfQogfTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9BcHBseVN0
eWxlQ29tbWFuZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy9BcHBs
eVN0eWxlQ29tbWFuZC5jcHAJKHJldmlzaW9uIDEwOTgxNCkKKysrIFNvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvQXBwbHlTdHlsZUNvbW1hbmQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04MCw3ICs4MCw3
IEBAIHN0YXRpYyBib29sIGhhc05vQXR0cmlidXRlT3JPbmx5U3R5bGVBdHQKICAgICBpZiAoZWxl
bWVudC0+Z2V0QXR0cmlidXRlKGNsYXNzQXR0cikgPT0gc3R5bGVTcGFuQ2xhc3NTdHJpbmcoKSkK
ICAgICAgICAgbWF0Y2hlZEF0dHJpYnV0ZXMrKzsKICAgICBpZiAoZWxlbWVudC0+aGFzQXR0cmli
dXRlKHN0eWxlQXR0cikgJiYgKHNob3VsZFN0eWxlQXR0cmlidXRlQmVFbXB0eSA9PSBBbGxvd05v
bkVtcHR5U3R5bGVBdHRyaWJ1dGUKLSAgICAgICAgfHwgIWVsZW1lbnQtPmlubGluZVN0eWxlRGVj
bCgpIHx8IGVsZW1lbnQtPmlubGluZVN0eWxlRGVjbCgpLT5pc0VtcHR5KCkpKQorICAgICAgICB8
fCAhZWxlbWVudC0+aW5saW5lU3R5bGUoKSB8fCBlbGVtZW50LT5pbmxpbmVTdHlsZSgpLT5pc0Vt
cHR5KCkpKQogICAgICAgICBtYXRjaGVkQXR0cmlidXRlcysrOwogCiAgICAgQVNTRVJUKG1hdGNo
ZWRBdHRyaWJ1dGVzIDw9IGVsZW1lbnQtPmF0dHJpYnV0ZUNvdW50KCkpOwpAQCAtMzgyLDcgKzM4
Miw3IEBAIHZvaWQgQXBwbHlTdHlsZUNvbW1hbmQ6OmFwcGx5UmVsYXRpdmVGb24KICAgICAgICAg
fQogICAgICAgICBsYXN0U3R5bGVkTm9kZSA9IG5vZGU7CiAKLSAgICAgICAgU3R5bGVQcm9wZXJ0
eVNldCogaW5saW5lU3R5bGVEZWNsID0gZWxlbWVudC0+ZW5zdXJlSW5saW5lU3R5bGVEZWNsKCk7
CisgICAgICAgIFJlZlB0cjxTdHlsZVByb3BlcnR5U2V0PiBpbmxpbmVTdHlsZURlY2wgPSBlbGVt
ZW50LT5lbnN1cmVJbmxpbmVTdHlsZSgpLT5jb3B5KCk7CiAgICAgICAgIGZsb2F0IGN1cnJlbnRG
b250U2l6ZSA9IGNvbXB1dGVkRm9udFNpemUobm9kZSk7CiAgICAgICAgIGZsb2F0IGRlc2lyZWRG
b250U2l6ZSA9IG1heChNaW5pbXVtRm9udFNpemUsIHN0YXJ0aW5nRm9udFNpemVzLmdldChub2Rl
KSArIHN0eWxlLT5mb250U2l6ZURlbHRhKCkpOwogICAgICAgICBSZWZQdHI8Q1NTVmFsdWU+IHZh
bHVlID0gaW5saW5lU3R5bGVEZWNsLT5nZXRQcm9wZXJ0eUNTU1ZhbHVlKENTU1Byb3BlcnR5Rm9u
dFNpemUpOwpAQCAtNTA5LDcgKzUwOSw3IEBAIHZvaWQgQXBwbHlTdHlsZUNvbW1hbmQ6OnJlbW92
ZUVtYmVkZGluZ1UKICAgICAgICAgICAgIC8vIG90aGVyIGF0dHJpYnV0ZXMsIGxpa2Ugd2UgKHNo
b3VsZCkgZG8gd2l0aCBCIGFuZCBJIGVsZW1lbnRzLgogICAgICAgICAgICAgcmVtb3ZlTm9kZUF0
dHJpYnV0ZShlbGVtZW50LCBkaXJBdHRyKTsKICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAg
IFJlZlB0cjxTdHlsZVByb3BlcnR5U2V0PiBpbmxpbmVTdHlsZSA9IGVsZW1lbnQtPmVuc3VyZUlu
bGluZVN0eWxlRGVjbCgpLT5jb3B5KCk7CisgICAgICAgICAgICBSZWZQdHI8U3R5bGVQcm9wZXJ0
eVNldD4gaW5saW5lU3R5bGUgPSBlbGVtZW50LT4gZW5zdXJlSW5saW5lU3R5bGUoKS0+Y29weSgp
OwogICAgICAgICAgICAgaW5saW5lU3R5bGUtPnNldFByb3BlcnR5KENTU1Byb3BlcnR5VW5pY29k
ZUJpZGksIENTU1ZhbHVlTm9ybWFsKTsKICAgICAgICAgICAgIGlubGluZVN0eWxlLT5yZW1vdmVQ
cm9wZXJ0eShDU1NQcm9wZXJ0eURpcmVjdGlvbik7CiAgICAgICAgICAgICBzZXROb2RlQXR0cmli
dXRlKGVsZW1lbnQsIHN0eWxlQXR0ciwgaW5saW5lU3R5bGUtPmFzVGV4dCgpKTsKQEAgLTcyMyw3
ICs3MjMsNyBAQCB2b2lkIEFwcGx5U3R5bGVDb21tYW5kOjphcHBseUlubGluZVN0eWxlCiAgICAg
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAvLyBBZGQgdG8gdGhpcyBlbGVtZW50J3Mg
aW5saW5lIHN0eWxlIGFuZCBza2lwIG92ZXIgaXRzIGNvbnRlbnRzLgogICAgICAgICAgICAgSFRN
TEVsZW1lbnQqIGVsZW1lbnQgPSB0b0hUTUxFbGVtZW50KG5vZGUpOwotICAgICAgICAgICAgUmVm
UHRyPFN0eWxlUHJvcGVydHlTZXQ+IGlubGluZVN0eWxlID0gZWxlbWVudC0+ZW5zdXJlSW5saW5l
U3R5bGVEZWNsKCktPmNvcHkoKTsKKyAgICAgICAgICAgIFJlZlB0cjxTdHlsZVByb3BlcnR5U2V0
PiBpbmxpbmVTdHlsZSA9IGVsZW1lbnQtPiBlbnN1cmVJbmxpbmVTdHlsZSgpLT5jb3B5KCk7CiAg
ICAgICAgICAgICBpbmxpbmVTdHlsZS0+bWVyZ2Uoc3R5bGUtPnN0eWxlKCkpOwogICAgICAgICAg
ICAgc2V0Tm9kZUF0dHJpYnV0ZShlbGVtZW50LCBzdHlsZUF0dHIsIGlubGluZVN0eWxlLT5hc1Rl
eHQoKSk7CiAgICAgICAgICAgICBuZXh0ID0gbm9kZS0+dHJhdmVyc2VOZXh0U2libGluZygpOwpA
QCAtODg4LDcgKzg4OCw3IEBAIGJvb2wgQXBwbHlTdHlsZUNvbW1hbmQ6OnJlbW92ZUNTU1N0eWxl
KEUKICAgICBpZiAoIXN0eWxlLT5jb25mbGljdHNXaXRoSW5saW5lU3R5bGVPZkVsZW1lbnQoZWxl
bWVudCwgZXh0cmFjdGVkU3R5bGUsIHByb3BlcnRpZXMpKQogICAgICAgICByZXR1cm4gZmFsc2U7
CiAKLSAgICBTdHlsZVByb3BlcnR5U2V0KiBpbmxpbmVTdHlsZSA9IGVsZW1lbnQtPmlubGluZVN0
eWxlRGVjbCgpOworICAgIGNvbnN0IFN0eWxlUHJvcGVydHlTZXQqIGlubGluZVN0eWxlID0gZWxl
bWVudC0+aW5saW5lU3R5bGUoKTsKICAgICBBU1NFUlQoaW5saW5lU3R5bGUpOwogICAgIC8vIEZJ
WE1FOiBXZSBzaG91bGQgdXNlIGEgbWFzcy1yZW1vdmFsIGZ1bmN0aW9uIGhlcmUgYnV0IHdlIGRv
bid0IGhhdmUgYW4gdW5kb2FibGUgb25lIHlldC4KICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IHByb3BlcnRpZXMuc2l6ZSgpOyBpKyspCkBAIC05MzIsNyArOTMyLDcgQEAgdm9pZCBBcHBseVN0
eWxlQ29tbWFuZDo6YXBwbHlJbmxpbmVTdHlsZQogICAgICAgICByZXR1cm47CiAKICAgICBSZWZQ
dHI8RWRpdGluZ1N0eWxlPiBuZXdJbmxpbmVTdHlsZSA9IHN0eWxlOwotICAgIGlmIChub2RlLT5p
c0hUTUxFbGVtZW50KCkgJiYgdG9IVE1MRWxlbWVudChub2RlKS0+aW5saW5lU3R5bGVEZWNsKCkp
IHsKKyAgICBpZiAobm9kZS0+aXNIVE1MRWxlbWVudCgpICYmIHRvSFRNTEVsZW1lbnQobm9kZSkt
PmlubGluZVN0eWxlKCkpIHsKICAgICAgICAgbmV3SW5saW5lU3R5bGUgPSBzdHlsZS0+Y29weSgp
OwogICAgICAgICBuZXdJbmxpbmVTdHlsZS0+bWVyZ2VJbmxpbmVTdHlsZU9mRWxlbWVudCh0b0hU
TUxFbGVtZW50KG5vZGUpLCBFZGl0aW5nU3R5bGU6Ok92ZXJyaWRlVmFsdWVzKTsKICAgICB9CkBA
IC0xMzA4LDcgKzEzMDgsNyBAQCB2b2lkIEFwcGx5U3R5bGVDb21tYW5kOjphZGRCbG9ja1N0eWxl
KGNvCiAgICAgICAgIHJldHVybjsKICAgICAgICAgCiAgICAgU3RyaW5nIGNzc1RleHQgPSBzdHls
ZUNoYW5nZS5jc3NTdHlsZSgpOwotICAgIGlmIChTdHlsZVByb3BlcnR5U2V0KiBkZWNsID0gYmxv
Y2stPmlubGluZVN0eWxlRGVjbCgpKQorICAgIGlmIChjb25zdCBTdHlsZVByb3BlcnR5U2V0KiBk
ZWNsID0gYmxvY2stPmlubGluZVN0eWxlKCkpCiAgICAgICAgIGNzc1RleHQgKz0gZGVjbC0+YXNU
ZXh0KCk7CiAgICAgc2V0Tm9kZUF0dHJpYnV0ZShibG9jaywgc3R5bGVBdHRyLCBjc3NUZXh0KTsK
IH0KQEAgLTEzNzMsNyArMTM3Myw3IEBAIHZvaWQgQXBwbHlTdHlsZUNvbW1hbmQ6OmFkZElubGlu
ZVN0eWxlSWYKIAogICAgIGlmIChzdHlsZUNoYW5nZS5jc3NTdHlsZSgpLmxlbmd0aCgpKSB7CiAg
ICAgICAgIGlmIChzdHlsZUNvbnRhaW5lcikgewotICAgICAgICAgICAgaWYgKFN0eWxlUHJvcGVy
dHlTZXQqIGV4aXN0aW5nU3R5bGUgPSBzdHlsZUNvbnRhaW5lci0+aW5saW5lU3R5bGVEZWNsKCkp
CisgICAgICAgICAgICBpZiAoY29uc3QgU3R5bGVQcm9wZXJ0eVNldCogZXhpc3RpbmdTdHlsZSA9
IHN0eWxlQ29udGFpbmVyLT5pbmxpbmVTdHlsZSgpKQogICAgICAgICAgICAgICAgIHNldE5vZGVB
dHRyaWJ1dGUoc3R5bGVDb250YWluZXIsIHN0eWxlQXR0ciwgZXhpc3RpbmdTdHlsZS0+YXNUZXh0
KCkgKyBzdHlsZUNoYW5nZS5jc3NTdHlsZSgpKTsKICAgICAgICAgICAgIGVsc2UKICAgICAgICAg
ICAgICAgICBzZXROb2RlQXR0cmlidXRlKHN0eWxlQ29udGFpbmVyLCBzdHlsZUF0dHIsIHN0eWxl
Q2hhbmdlLmNzc1N0eWxlKCkpOwpJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0aW5n
U3R5bGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdGluZ1N0
eWxlLmNwcAkocmV2aXNpb24gMTA5ODE0KQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0
aW5nU3R5bGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjUsNyArMTI1LDcgQEAgcHVibGljOgog
ICAgIHZpcnR1YWwgfkhUTUxFbGVtZW50RXF1aXZhbGVudCgpIHsgfQogICAgIHZpcnR1YWwgYm9v
bCBtYXRjaGVzKGNvbnN0IEVsZW1lbnQqIGVsZW1lbnQpIGNvbnN0IHsgcmV0dXJuICFtX3RhZ05h
bWUgfHwgZWxlbWVudC0+aGFzVGFnTmFtZSgqbV90YWdOYW1lKTsgfQogICAgIHZpcnR1YWwgYm9v
bCBoYXNBdHRyaWJ1dGUoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQotICAgIHZpcnR1YWwgYm9v
bCBwcm9wZXJ0eUV4aXN0c0luU3R5bGUoU3R5bGVQcm9wZXJ0eVNldCogc3R5bGUpIGNvbnN0IHsg
cmV0dXJuIHN0eWxlICYmIHN0eWxlLT5nZXRQcm9wZXJ0eUNTU1ZhbHVlKG1fcHJvcGVydHlJRCk7
IH0KKyAgICB2aXJ0dWFsIGJvb2wgcHJvcGVydHlFeGlzdHNJblN0eWxlKGNvbnN0IFN0eWxlUHJv
cGVydHlTZXQqIHN0eWxlKSBjb25zdCB7IHJldHVybiBzdHlsZSAmJiBzdHlsZS0+Z2V0UHJvcGVy
dHlDU1NWYWx1ZShtX3Byb3BlcnR5SUQpOyB9CiAgICAgdmlydHVhbCBib29sIHZhbHVlSXNQcmVz
ZW50SW5TdHlsZShFbGVtZW50KiwgU3R5bGVQcm9wZXJ0eVNldCopIGNvbnN0OwogICAgIHZpcnR1
YWwgdm9pZCBhZGRUb1N0eWxlKEVsZW1lbnQqLCBFZGl0aW5nU3R5bGUqKSBjb25zdDsKIApAQCAt
MTc1LDcgKzE3NSw3IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIHJldHVybiBhZG9wdFB0cihu
ZXcgSFRNTFRleHREZWNvcmF0aW9uRXF1aXZhbGVudChwcmltaXRpdmVWYWx1ZSwgdGFnTmFtZSkp
OwogICAgIH0KLSAgICB2aXJ0dWFsIGJvb2wgcHJvcGVydHlFeGlzdHNJblN0eWxlKFN0eWxlUHJv
cGVydHlTZXQqKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgcHJvcGVydHlFeGlzdHNJblN0eWxl
KGNvbnN0IFN0eWxlUHJvcGVydHlTZXQqKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgdmFsdWVJ
c1ByZXNlbnRJblN0eWxlKEVsZW1lbnQqLCBTdHlsZVByb3BlcnR5U2V0KikgY29uc3Q7CiAKIHBy
aXZhdGU6CkBAIC0xODgsNyArMTg4LDcgQEAgSFRNTFRleHREZWNvcmF0aW9uRXF1aXZhbGVudDo6
SFRNTFRleHREZQogewogfQogCi1ib29sIEhUTUxUZXh0RGVjb3JhdGlvbkVxdWl2YWxlbnQ6OnBy
b3BlcnR5RXhpc3RzSW5TdHlsZShTdHlsZVByb3BlcnR5U2V0KiBzdHlsZSkgY29uc3QKK2Jvb2wg
SFRNTFRleHREZWNvcmF0aW9uRXF1aXZhbGVudDo6cHJvcGVydHlFeGlzdHNJblN0eWxlKGNvbnN0
IFN0eWxlUHJvcGVydHlTZXQqIHN0eWxlKSBjb25zdAogewogICAgIHJldHVybiBzdHlsZS0+Z2V0
UHJvcGVydHlDU1NWYWx1ZShDU1NQcm9wZXJ0eVdlYmtpdFRleHREZWNvcmF0aW9uc0luRWZmZWN0
KSB8fCBzdHlsZS0+Z2V0UHJvcGVydHlDU1NWYWx1ZShDU1NQcm9wZXJ0eVRleHREZWNvcmF0aW9u
KTsKIH0KQEAgLTY2NCw3ICs2NjQsNyBAQCBib29sIEVkaXRpbmdTdHlsZTo6Y29uZmxpY3RzV2l0
aElubGluZVN0CiAgICAgQVNTRVJUKGVsZW1lbnQpOwogICAgIEFTU0VSVCghY29uZmxpY3RpbmdQ
cm9wZXJ0aWVzIHx8IGNvbmZsaWN0aW5nUHJvcGVydGllcy0+aXNFbXB0eSgpKTsKIAotICAgIFN0
eWxlUHJvcGVydHlTZXQqIGlubGluZVN0eWxlID0gZWxlbWVudC0+aW5saW5lU3R5bGVEZWNsKCk7
CisgICAgY29uc3QgU3R5bGVQcm9wZXJ0eVNldCogaW5saW5lU3R5bGUgPSBlbGVtZW50LT5pbmxp
bmVTdHlsZSgpOwogICAgIGlmICghbV9tdXRhYmxlU3R5bGUgfHwgIWlubGluZVN0eWxlKQogICAg
ICAgICByZXR1cm4gZmFsc2U7CiAKQEAgLTg1MCw3ICs4NTAsNyBAQCBib29sIEVkaXRpbmdTdHls
ZTo6ZWxlbWVudElzU3R5bGVkU3Bhbk9yCiAgICAgICAgIG1hdGNoZWRBdHRyaWJ1dGVzKys7CiAK
ICAgICBpZiAoZWxlbWVudC0+aGFzQXR0cmlidXRlKEhUTUxOYW1lczo6c3R5bGVBdHRyKSkgewot
ICAgICAgICBpZiAoU3R5bGVQcm9wZXJ0eVNldCogc3R5bGUgPSBlbGVtZW50LT5pbmxpbmVTdHls
ZURlY2woKSkgeworICAgICAgICBpZiAoY29uc3QgU3R5bGVQcm9wZXJ0eVNldCogc3R5bGUgPSBl
bGVtZW50LT5pbmxpbmVTdHlsZSgpKSB7CiAgICAgICAgICAgICB1bnNpZ25lZCBwcm9wZXJ0eUNv
dW50ID0gc3R5bGUtPnByb3BlcnR5Q291bnQoKTsKICAgICAgICAgICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBwcm9wZXJ0eUNvdW50OyArK2kpIHsKICAgICAgICAgICAgICAgICBpZiAoIWlz
RWRpdGluZ1Byb3BlcnR5KHN0eWxlLT5wcm9wZXJ0eUF0KGkpLmlkKCkpKQpAQCAtOTEyLDE4ICs5
MTIsMTggQEAgdm9pZCBFZGl0aW5nU3R5bGU6Om1lcmdlVHlwaW5nU3R5bGUoRG9jdQogdm9pZCBF
ZGl0aW5nU3R5bGU6Om1lcmdlSW5saW5lU3R5bGVPZkVsZW1lbnQoU3R5bGVkRWxlbWVudCogZWxl
bWVudCwgQ1NTUHJvcGVydHlPdmVycmlkZU1vZGUgbW9kZSwgUHJvcGVydGllc1RvSW5jbHVkZSBw
cm9wZXJ0aWVzVG9JbmNsdWRlKQogewogICAgIEFTU0VSVChlbGVtZW50KTsKLSAgICBpZiAoIWVs
ZW1lbnQtPmlubGluZVN0eWxlRGVjbCgpKQorICAgIGlmICghZWxlbWVudC0+aW5saW5lU3R5bGUo
KSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgc3dpdGNoIChwcm9wZXJ0aWVzVG9JbmNsdWRlKSB7
CiAgICAgY2FzZSBBbGxQcm9wZXJ0aWVzOgotICAgICAgICBtZXJnZVN0eWxlKGVsZW1lbnQtPmlu
bGluZVN0eWxlRGVjbCgpLCBtb2RlKTsKKyAgICAgICAgbWVyZ2VTdHlsZShlbGVtZW50LT5pbmxp
bmVTdHlsZSgpLCBtb2RlKTsKICAgICAgICAgcmV0dXJuOwogICAgIGNhc2UgT25seUVkaXRpbmdJ
bmhlcml0YWJsZVByb3BlcnRpZXM6Ci0gICAgICAgIG1lcmdlU3R5bGUoY29weUVkaXRpbmdQcm9w
ZXJ0aWVzKGVsZW1lbnQtPmlubGluZVN0eWxlRGVjbCgpLCBPbmx5SW5oZXJpdGFibGVFZGl0aW5n
UHJvcGVydGllcykuZ2V0KCksIG1vZGUpOworICAgICAgICBtZXJnZVN0eWxlKGNvcHlFZGl0aW5n
UHJvcGVydGllcyhlbGVtZW50LT5pbmxpbmVTdHlsZSgpLCBPbmx5SW5oZXJpdGFibGVFZGl0aW5n
UHJvcGVydGllcykuZ2V0KCksIG1vZGUpOwogICAgICAgICByZXR1cm47CiAgICAgY2FzZSBFZGl0
aW5nUHJvcGVydGllc0luRWZmZWN0OgotICAgICAgICBtZXJnZVN0eWxlKGNvcHlFZGl0aW5nUHJv
cGVydGllcyhlbGVtZW50LT5pbmxpbmVTdHlsZURlY2woKSwgQWxsRWRpdGluZ1Byb3BlcnRpZXMp
LmdldCgpLCBtb2RlKTsKKyAgICAgICAgbWVyZ2VTdHlsZShjb3B5RWRpdGluZ1Byb3BlcnRpZXMo
ZWxlbWVudC0+aW5saW5lU3R5bGUoKSwgQWxsRWRpdGluZ1Byb3BlcnRpZXMpLmdldCgpLCBtb2Rl
KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIH0KQEAgLTkzMSw3ICs5MzEsNyBAQCB2b2lkIEVk
aXRpbmdTdHlsZTo6bWVyZ2VJbmxpbmVTdHlsZU9mRWxlCiBzdGF0aWMgaW5saW5lIGJvb2wgZWxl
bWVudE1hdGNoZXNBbmRQcm9wZXJ0eUlzTm90SW5JbmxpbmVTdHlsZURlY2woY29uc3QgSFRNTEVs
ZW1lbnRFcXVpdmFsZW50KiBlcXVpdmFsZW50LCBjb25zdCBTdHlsZWRFbGVtZW50KiBlbGVtZW50
LAogICAgIEVkaXRpbmdTdHlsZTo6Q1NTUHJvcGVydHlPdmVycmlkZU1vZGUgbW9kZSwgU3R5bGVQ
cm9wZXJ0eVNldCogc3R5bGUpCiB7Ci0gICAgcmV0dXJuIGVxdWl2YWxlbnQtPm1hdGNoZXMoZWxl
bWVudCkgJiYgIWVxdWl2YWxlbnQtPnByb3BlcnR5RXhpc3RzSW5TdHlsZShlbGVtZW50LT5pbmxp
bmVTdHlsZURlY2woKSkKKyAgICByZXR1cm4gZXF1aXZhbGVudC0+bWF0Y2hlcyhlbGVtZW50KSAm
JiAhZXF1aXZhbGVudC0+cHJvcGVydHlFeGlzdHNJblN0eWxlKGVsZW1lbnQtPmlubGluZVN0eWxl
KCkpCiAgICAgICAgICYmIChtb2RlID09IEVkaXRpbmdTdHlsZTo6T3ZlcnJpZGVWYWx1ZXMgfHwg
IWVxdWl2YWxlbnQtPnByb3BlcnR5RXhpc3RzSW5TdHlsZShzdHlsZSkpOwogfQogCkBAIC05OTcs
NyArOTk3LDcgQEAgc3RhdGljIHZvaWQgbWVyZ2VUZXh0RGVjb3JhdGlvblZhbHVlcyhDUwogICAg
ICAgICBtZXJnZWRWYWx1ZS0+YXBwZW5kKGxpbmVUaHJvdWdoLmdldCgpKTsKIH0KIAotdm9pZCBF
ZGl0aW5nU3R5bGU6Om1lcmdlU3R5bGUoU3R5bGVQcm9wZXJ0eVNldCogc3R5bGUsIENTU1Byb3Bl
cnR5T3ZlcnJpZGVNb2RlIG1vZGUpCit2b2lkIEVkaXRpbmdTdHlsZTo6bWVyZ2VTdHlsZShjb25z
dCBTdHlsZVByb3BlcnR5U2V0KiBzdHlsZSwgQ1NTUHJvcGVydHlPdmVycmlkZU1vZGUgbW9kZSkK
IHsKICAgICBpZiAoIXN0eWxlKQogICAgICAgICByZXR1cm47CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL0VkaXRpbmdTdHlsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvRWRpdGluZ1N0eWxlLmgJKHJldmlzaW9uIDEwOTgxNCkKKysrIFNvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvRWRpdGluZ1N0eWxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTE2MSw3ICsxNjEsNyBA
QCBwcml2YXRlOgogICAgIFRyaVN0YXRlIHRyaVN0YXRlT2ZTdHlsZShDU1NTdHlsZURlY2xhcmF0
aW9uKiBzdHlsZVRvQ29tcGFyZSwgU2hvdWxkSWdub3JlVGV4dE9ubHlQcm9wZXJ0aWVzKSBjb25z
dDsKICAgICBib29sIGNvbmZsaWN0c1dpdGhJbmxpbmVTdHlsZU9mRWxlbWVudChTdHlsZWRFbGVt
ZW50KiwgRWRpdGluZ1N0eWxlKiBleHRyYWN0ZWRTdHlsZSwgVmVjdG9yPENTU1Byb3BlcnR5SUQ+
KiBjb25mbGljdGluZ1Byb3BlcnRpZXMpIGNvbnN0OwogICAgIHZvaWQgbWVyZ2VJbmxpbmVBbmRJ
bXBsaWNpdFN0eWxlT2ZFbGVtZW50KFN0eWxlZEVsZW1lbnQqLCBDU1NQcm9wZXJ0eU92ZXJyaWRl
TW9kZSwgUHJvcGVydGllc1RvSW5jbHVkZSk7Ci0gICAgdm9pZCBtZXJnZVN0eWxlKFN0eWxlUHJv
cGVydHlTZXQqLCBDU1NQcm9wZXJ0eU92ZXJyaWRlTW9kZSk7CisgICAgdm9pZCBtZXJnZVN0eWxl
KGNvbnN0IFN0eWxlUHJvcGVydHlTZXQqLCBDU1NQcm9wZXJ0eU92ZXJyaWRlTW9kZSk7CiAKICAg
ICBSZWZQdHI8U3R5bGVQcm9wZXJ0eVNldD4gbV9tdXRhYmxlU3R5bGU7CiAgICAgYm9vbCBtX3No
b3VsZFVzZUZpeGVkRGVmYXVsdEZvbnRTaXplOwpJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9SZW1vdmVDU1NQcm9wZXJ0eUNvbW1hbmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvUmVtb3ZlQ1NTUHJvcGVydHlDb21tYW5kLmNwcAkocmV2aXNpb24gMTA5ODE0
KQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9SZW1vdmVDU1NQcm9wZXJ0eUNvbW1hbmQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC00Myw3ICs0Myw3IEBAIFJlbW92ZUNTU1Byb3BlcnR5Q29tbWFu
ZDo6UmVtb3ZlQ1NTUHJvcGUKIAogdm9pZCBSZW1vdmVDU1NQcm9wZXJ0eUNvbW1hbmQ6OmRvQXBw
bHkoKQogewotICAgIFN0eWxlUHJvcGVydHlTZXQqIHN0eWxlID0gbV9lbGVtZW50LT5pbmxpbmVT
dHlsZURlY2woKTsKKyAgICBjb25zdCBTdHlsZVByb3BlcnR5U2V0KiBzdHlsZSA9IG1fZWxlbWVu
dC0+aW5saW5lU3R5bGUoKTsKICAgICBtX29sZFZhbHVlID0gc3R5bGUtPmdldFByb3BlcnR5VmFs
dWUobV9wcm9wZXJ0eSk7CiAgICAgbV9pbXBvcnRhbnQgPSBzdHlsZS0+cHJvcGVydHlJc0ltcG9y
dGFudChtX3Byb3BlcnR5KTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9SZXBsYWNl
U2VsZWN0aW9uQ29tbWFuZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9SZXBsYWNlU2VsZWN0aW9uQ29tbWFuZC5jcHAJKHJldmlzaW9uIDEwOTgxNCkKKysrIFNvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC00ODQsNyArNDg0LDcgQEAgdm9pZCBSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6cmVt
b3ZlUmVkdQogCiAgICAgICAgIFN0eWxlZEVsZW1lbnQqIGVsZW1lbnQgPSBzdGF0aWNfY2FzdDxT
dHlsZWRFbGVtZW50Kj4obm9kZS5nZXQoKSk7CiAKLSAgICAgICAgU3R5bGVQcm9wZXJ0eVNldCog
aW5saW5lU3R5bGUgPSBlbGVtZW50LT5pbmxpbmVTdHlsZURlY2woKTsKKyAgICAgICAgY29uc3Qg
U3R5bGVQcm9wZXJ0eVNldCogaW5saW5lU3R5bGUgPSBlbGVtZW50LT5pbmxpbmVTdHlsZSgpOwog
ICAgICAgICBSZWZQdHI8RWRpdGluZ1N0eWxlPiBuZXdJbmxpbmVTdHlsZSA9IEVkaXRpbmdTdHls
ZTo6Y3JlYXRlKGlubGluZVN0eWxlKTsKICAgICAgICAgaWYgKGlubGluZVN0eWxlKSB7CiAgICAg
ICAgICAgICBDb250YWluZXJOb2RlKiBjb250ZXh0ID0gZWxlbWVudC0+cGFyZW50Tm9kZSgpOwpA
QCAtNzAzLDcgKzcwMyw3IEBAIHZvaWQgUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ6OmhhbmRsZVN0
eWwKICAgICBpZiAoIXdyYXBwaW5nU3R5bGVTcGFuKQogICAgICAgICByZXR1cm47CiAKLSAgICBS
ZWZQdHI8RWRpdGluZ1N0eWxlPiBzdHlsZSA9IEVkaXRpbmdTdHlsZTo6Y3JlYXRlKHdyYXBwaW5n
U3R5bGVTcGFuLT5lbnN1cmVJbmxpbmVTdHlsZURlY2woKSk7CisgICAgUmVmUHRyPEVkaXRpbmdT
dHlsZT4gc3R5bGUgPSBFZGl0aW5nU3R5bGU6OmNyZWF0ZSh3cmFwcGluZ1N0eWxlU3Bhbi0+ZW5z
dXJlSW5saW5lU3R5bGUoKSk7CiAgICAgQ29udGFpbmVyTm9kZSogY29udGV4dCA9IHdyYXBwaW5n
U3R5bGVTcGFuLT5wYXJlbnROb2RlKCk7CiAKICAgICAvLyBJZiBNYWlsIHdyYXBzIHRoZSBmcmFn
bWVudCB3aXRoIGEgUGFzdGUgYXMgUXVvdGF0aW9uIGJsb2NrcXVvdGUsIG9yIGlmIHlvdSdyZSBw
YXN0aW5nIGludG8gYSBxdW90ZWQgcmVnaW9uLApJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9tYXJrdXAuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFya3Vw
LmNwcAkocmV2aXNpb24gMTA5ODE0KQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9tYXJrdXAu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMTAsOCArMzEwLDggQEAgdm9pZCBTdHlsZWRNYXJrdXBB
Y2N1bXVsYXRvcjo6YXBwZW5kRWxlbQogICAgICAgICB9IGVsc2UKICAgICAgICAgICAgIG5ld0lu
bGluZVN0eWxlID0gRWRpdGluZ1N0eWxlOjpjcmVhdGUoKTsKIAotICAgICAgICBpZiAoZWxlbWVu
dC0+aXNTdHlsZWRFbGVtZW50KCkgJiYgc3RhdGljX2Nhc3Q8U3R5bGVkRWxlbWVudCo+KGVsZW1l
bnQpLT5pbmxpbmVTdHlsZURlY2woKSkKLSAgICAgICAgICAgIG5ld0lubGluZVN0eWxlLT5vdmVy
cmlkZVdpdGhTdHlsZShzdGF0aWNfY2FzdDxTdHlsZWRFbGVtZW50Kj4oZWxlbWVudCktPmlubGlu
ZVN0eWxlRGVjbCgpKTsKKyAgICAgICAgaWYgKGVsZW1lbnQtPmlzU3R5bGVkRWxlbWVudCgpICYm
IHN0YXRpY19jYXN0PFN0eWxlZEVsZW1lbnQqPihlbGVtZW50KS0+aW5saW5lU3R5bGUoKSkKKyAg
ICAgICAgICAgIG5ld0lubGluZVN0eWxlLT5vdmVycmlkZVdpdGhTdHlsZShzdGF0aWNfY2FzdDxT
dHlsZWRFbGVtZW50Kj4oZWxlbWVudCktPmlubGluZVN0eWxlKCkpOwogCiAgICAgICAgIGlmIChz
aG91bGRBbm5vdGF0ZU9yRm9yY2VJbmxpbmUpIHsKICAgICAgICAgICAgIGlmIChzaG91bGRBbm5v
dGF0ZSgpKQpAQCAtNDk1LDcgKzQ5NSw3IEBAIHN0YXRpYyBQYXNzUmVmUHRyPEVkaXRpbmdTdHls
ZT4gc3R5bGVGcm8KICAgICAvLyBGSVhNRTogSGF2aW5nIHRvIGNvbnN0X2Nhc3QgaGVyZSBpcyB1
Z2x5LCBidXQgaXQgaXMgcXVpdGUgYSBiaXQgb2Ygd29yayB0byB1bnRhbmdsZQogICAgIC8vIHRo
ZSBub24tY29uc3QtbmVzcyBvZiBzdHlsZUZyb21NYXRjaGVkUnVsZXNGb3JFbGVtZW50LgogICAg
IEhUTUxFbGVtZW50KiBlbGVtZW50ID0gY29uc3RfY2FzdDxIVE1MRWxlbWVudCo+KHN0YXRpY19j
YXN0PGNvbnN0IEhUTUxFbGVtZW50Kj4obm9kZSkpOwotICAgIFJlZlB0cjxFZGl0aW5nU3R5bGU+
IHN0eWxlID0gRWRpdGluZ1N0eWxlOjpjcmVhdGUoZWxlbWVudC0+aW5saW5lU3R5bGVEZWNsKCkp
OworICAgIFJlZlB0cjxFZGl0aW5nU3R5bGU+IHN0eWxlID0gRWRpdGluZ1N0eWxlOjpjcmVhdGUo
ZWxlbWVudC0+aW5saW5lU3R5bGUoKSk7CiAgICAgc3R5bGUtPm1lcmdlU3R5bGVGcm9tUnVsZXMo
ZWxlbWVudCk7CiAgICAgcmV0dXJuIHN0eWxlLnJlbGVhc2UoKTsKIH0KSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2h0bWwvSFRNTEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2h0bWwvSFRNTEVsZW1lbnQuY3BwCShyZXZpc2lvbiAxMDk4MTQpCisrKyBTb3VyY2UvV2ViQ29y
ZS9odG1sL0hUTUxFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTEwNiwxMiArMTEwNiwx
MiBAQCB2b2lkIFN0eWxlZEVsZW1lbnQ6OmNvcHlOb25BdHRyaWJ1dGVQcm9wCiAgICAgQVNTRVJU
KHNvdXJjZUVsZW1lbnQtPmlzU3R5bGVkRWxlbWVudCgpKTsKIAogICAgIGNvbnN0IFN0eWxlZEVs
ZW1lbnQqIHNvdXJjZSA9IHN0YXRpY19jYXN0PGNvbnN0IFN0eWxlZEVsZW1lbnQqPihzb3VyY2VF
bGVtZW50KTsKLSAgICBpZiAoIXNvdXJjZS0+aW5saW5lU3R5bGVEZWNsKCkpCisgICAgaWYgKCFz
b3VyY2UtPmlubGluZVN0eWxlKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIFN0eWxlUHJvcGVy
dHlTZXQqIGlubGluZVN0eWxlID0gZW5zdXJlSW5saW5lU3R5bGVEZWNsKCk7Ci0gICAgaW5saW5l
U3R5bGUtPmNvcHlQcm9wZXJ0aWVzRnJvbSgqc291cmNlLT5pbmxpbmVTdHlsZURlY2woKSk7Ci0g
ICAgaW5saW5lU3R5bGUtPnNldFN0cmljdFBhcnNpbmcoc291cmNlLT5pbmxpbmVTdHlsZURlY2wo
KS0+dXNlU3RyaWN0UGFyc2luZygpKTsKKyAgICBTdHlsZVByb3BlcnR5U2V0KiBpbmxpbmVTdHls
ZSA9IGVuc3VyZUF0dHJpYnV0ZURhdGEoKS0+ZW5zdXJlTXV0YWJsZUlubGluZVN0eWxlKHRoaXMp
OworICAgIGlubGluZVN0eWxlLT5jb3B5UHJvcGVydGllc0Zyb20oKnNvdXJjZS0+aW5saW5lU3R5
bGUoKSk7CisgICAgaW5saW5lU3R5bGUtPnNldFN0cmljdFBhcnNpbmcoc291cmNlLT5pbmxpbmVT
dHlsZSgpLT51c2VTdHJpY3RQYXJzaW5nKCkpOwogCiAgICAgc2V0SXNTdHlsZUF0dHJpYnV0ZVZh
bGlkKHNvdXJjZS0+aXNTdHlsZUF0dHJpYnV0ZVZhbGlkKCkpOwogCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9odG1sL2NhbnZhcy9DYW52YXNTdHlsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzU3R5bGUuY3BwCShyZXZpc2lvbiAxMDk4MTQpCisrKyBT
b3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNTdHlsZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTY5LDcgKzY5LDcgQEAgUkdCQTMyIGN1cnJlbnRDb2xvcihIVE1MQ2FudmFzRWxlbWVudCog
YwogICAgIGlmICghY2FudmFzIHx8ICFjYW52YXMtPmluRG9jdW1lbnQoKSkKICAgICAgICAgcmV0
dXJuIENvbG9yOjpibGFjazsKICAgICBSR0JBMzIgcmdiYSA9IENvbG9yOjpibGFjazsKLSAgICBD
U1NQYXJzZXI6OnBhcnNlQ29sb3IocmdiYSwgY2FudmFzLT5lbnN1cmVJbmxpbmVTdHlsZURlY2wo
KS0+Z2V0UHJvcGVydHlWYWx1ZShDU1NQcm9wZXJ0eUNvbG9yKSk7CisgICAgQ1NTUGFyc2VyOjpw
YXJzZUNvbG9yKHJnYmEsIGNhbnZhcy0+ZW5zdXJlSW5saW5lU3R5bGUoKS0+Z2V0UHJvcGVydHlW
YWx1ZShDU1NQcm9wZXJ0eUNvbG9yKSk7CiAgICAgcmV0dXJuIHJnYmE7CiB9CiAKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3BhZ2UvUGFnZVNlcmlhbGl6ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BhZ2UvUGFnZVNlcmlhbGl6ZXIuY3BwCShyZXZpc2lvbiAxMDk4MTQpCisrKyBT
b3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2VTZXJpYWxpemVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MjI4LDcgKzIyOCw3IEBAIHZvaWQgUGFnZVNlcmlhbGl6ZXI6OnNlcmlhbGl6ZUZyYW1lKEZyYW0K
ICAgICAgICAgRWxlbWVudCogZWxlbWVudCA9IHRvRWxlbWVudChub2RlKTsKICAgICAgICAgLy8g
V2UgaGF2ZSB0byBwcm9jZXNzIGluLWxpbmUgc3R5bGUgYXMgaXQgbWlnaHQgY29udGFpbiBzb21l
IHJlc291cmNlcyAodHlwaWNhbGx5IGJhY2tncm91bmQgaW1hZ2VzKS4KICAgICAgICAgaWYgKGVs
ZW1lbnQtPmlzU3R5bGVkRWxlbWVudCgpKQotICAgICAgICAgICAgcmV0cmlldmVSZXNvdXJjZXNG
b3JQcm9wZXJ0aWVzKHN0YXRpY19jYXN0PFN0eWxlZEVsZW1lbnQqPihlbGVtZW50KS0+aW5saW5l
U3R5bGVEZWNsKCksIGRvY3VtZW50KTsKKyAgICAgICAgICAgIHJldHJpZXZlUmVzb3VyY2VzRm9y
UHJvcGVydGllcyhzdGF0aWNfY2FzdDxTdHlsZWRFbGVtZW50Kj4oZWxlbWVudCktPmlubGluZVN0
eWxlKCksIGRvY3VtZW50KTsKIAogICAgICAgICBpZiAoZWxlbWVudC0+aGFzVGFnTmFtZShIVE1M
TmFtZXM6OmltZ1RhZykpIHsKICAgICAgICAgICAgIEhUTUxJbWFnZUVsZW1lbnQqIGltYWdlRWxl
bWVudCA9IHN0YXRpY19jYXN0PEhUTUxJbWFnZUVsZW1lbnQqPihlbGVtZW50KTsKQEAgLTMwOCw3
ICszMDgsNyBAQCB2b2lkIFBhZ2VTZXJpYWxpemVyOjpyZXRyaWV2ZVJlc291cmNlc0ZvCiAgICAg
cmV0cmlldmVSZXNvdXJjZXNGb3JQcm9wZXJ0aWVzKHJ1bGUtPnByb3BlcnRpZXMoKSwgZG9jdW1l
bnQpOwogfQogCi12b2lkIFBhZ2VTZXJpYWxpemVyOjpyZXRyaWV2ZVJlc291cmNlc0ZvclByb3Bl
cnRpZXMoU3R5bGVQcm9wZXJ0eVNldCogc3R5bGVEZWNsYXJhdGlvbiwgRG9jdW1lbnQqIGRvY3Vt
ZW50KQordm9pZCBQYWdlU2VyaWFsaXplcjo6cmV0cmlldmVSZXNvdXJjZXNGb3JQcm9wZXJ0aWVz
KGNvbnN0IFN0eWxlUHJvcGVydHlTZXQqIHN0eWxlRGVjbGFyYXRpb24sIERvY3VtZW50KiBkb2N1
bWVudCkKIHsKICAgICBpZiAoIXN0eWxlRGVjbGFyYXRpb24pCiAgICAgICAgIHJldHVybjsKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZVNlcmlhbGl6ZXIuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2VTZXJpYWxpemVyLmgJKHJldmlzaW9uIDEwOTgxNCkKKysr
IFNvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZVNlcmlhbGl6ZXIuaAkod29ya2luZyBjb3B5KQpAQCAt
NzgsNyArNzgsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgc2VyaWFsaXplQ1NTU3R5bGVTaGVldChD
U1NTdHlsZVNoZWV0KiwgY29uc3QgS1VSTCYpOwogCiAgICAgdm9pZCBhZGRJbWFnZVRvUmVzb3Vy
Y2VzKENhY2hlZEltYWdlKiwgUmVuZGVyT2JqZWN0KiwgY29uc3QgS1VSTCYpOwotICAgIHZvaWQg
cmV0cmlldmVSZXNvdXJjZXNGb3JQcm9wZXJ0aWVzKFN0eWxlUHJvcGVydHlTZXQqLCBEb2N1bWVu
dCopOworICAgIHZvaWQgcmV0cmlldmVSZXNvdXJjZXNGb3JQcm9wZXJ0aWVzKGNvbnN0IFN0eWxl
UHJvcGVydHlTZXQqLCBEb2N1bWVudCopOwogICAgIHZvaWQgcmV0cmlldmVSZXNvdXJjZXNGb3JS
dWxlKFN0eWxlUnVsZSosIERvY3VtZW50Kik7CiAKICAgICBWZWN0b3I8UmVzb3VyY2U+KiBtX3Jl
c291cmNlczsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUcmVlQXNUZXh0
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVHJlZUFz
VGV4dC5jcHAJKHJldmlzaW9uIDEwOTgxNCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJUcmVlQXNUZXh0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTgzLDcgKzE4Myw3IEBAIHN0
YXRpYyBib29sIGlzRW1wdHlPclVuc3R5bGVkQXBwbGVTdHlsZVMKICAgICBpZiAoIW5vZGUtPmhh
c0NoaWxkTm9kZXMoKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKLSAgICBTdHlsZVByb3BlcnR5
U2V0KiBpbmxpbmVTdHlsZURlY2wgPSBlbGVtLT5pbmxpbmVTdHlsZURlY2woKTsKKyAgICBjb25z
dCBTdHlsZVByb3BlcnR5U2V0KiBpbmxpbmVTdHlsZURlY2wgPSBlbGVtLT5pbmxpbmVTdHlsZSgp
OwogICAgIHJldHVybiAoIWlubGluZVN0eWxlRGVjbCB8fCBpbmxpbmVTdHlsZURlY2wtPmlzRW1w
dHkoKSk7CiB9CiAK
</data>
<flag name="commit-queue"
          id="133386"
          type_id="3"
          status="-"
          setter="webkit-ews"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>130590</attachid>
            <date>2012-03-07 03:45:25 -0800</date>
            <delta_ts>2012-03-07 06:18:54 -0800</delta_ts>
            <desc>bug fixes, qt build fix</desc>
            <filename>cacheable-inline-style-4.patch</filename>
            <type>text/plain</type>
            <size>38340</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDExMDA0MykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEwMCBAQAorMjAxMi0wMy0wNyAgQW50dGkg
S29pdmlzdG8gIDxhbnR0aUBhcHBsZS5jb20+CisKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTgwMzcwCisgICAgICAgIFJlLWVuYWJsZSBtYXRjaGVkIGRl
Y2xhcmF0aW9uIGNhY2hpbmcgZm9yIGVsZW1lbnRzIHdpdGggYSBzdHlsZSBhdHRyaWJ1dGUKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBNYWtlIHRoZSBw
cm9wZXJ0eSBzZXQgZm9yIHN0eWxlIGF0dHJpYnV0ZSBpbW11dGFibGUgYXMgbG9uZyBhcyB0aGVy
ZSBpcyBubyBDU1NPTQorICAgICAgICB3cmFwcGVyIGZvciBpdC4gSWYgdGhlIHN0eWxlIGF0dHJp
YnV0ZSBjaGFuZ2VzIHdlIGNyZWF0ZSBhIG5ldyBwcm9wZXJ0eSBzZXQgaW5zdGVhZAorICAgICAg
ICBvZiByZWN5Y2xpbmcgdGhlIG9sZCBvbmUuIFRoaXMgd2F5IHRoZSBwcm9wZXJ0eSBzZXRzIGNh
biBiZSBtYWRlIGNhY2hlYWJsZSBhcyBsb25nCisgICAgICAgIGFzIHRoZXJlIGlzIG5vIENTU09N
IHdyYXBwZXIgdGhhdCB3b3VsZCBhbGxvdyB1bmNvbnRyb2xsZWQgbW9kaWZpY2F0aW9ucy4gQ29u
c3RydWN0aW5nCisgICAgICAgIHRoZSB3cmFwcGVyIGRpc2FibGVzIGNhY2hpbmcuCisgICAgICAg
IAorICAgICAgICBNYWRlIFN0eWxlZEVsZW1lbnQ6OmlubGluZVN0eWxlKCkgYW5kIFN0eWxlZEVs
ZW1lbnQ6OmVuc3VyZUlubGluZVN0eWxlKCkgcmV0dXJuIGEgY29uc3QKKyAgICAgICAgU3R5bGVQ
cm9wZXJ0eVNldCBzbyBtYWtpbmcgYWNjaWRlbnRhbCBtb2RpZmljYXRpb25zIGRpZmZpY3VsdC4g
QWxzbyBkcm9wcGVkICpEZWNsIGZyb20KKyAgICAgICAgdGhlIG5hbWVzLgorICAgICAgICAKKyAg
ICAgICAgRml4ZWQgdHdvIHVucmVsYXRlZCBidWdzIHRoYXQgdGhpcyBleHBvc2VkLgorCisgICAg
ICAgICogY3NzL0NTU1N0eWxlU2VsZWN0b3IuY3BwOgorICAgICAgICAKKyAgICAgICAgICAgIERv
bid0IGFsbG93IGNhY2hpbmcgb2YgZG9jdW1lbnQgZWxlbWVudCBzdHlsZSBpZiB3cml0aW5nTW9k
ZVNldE9uRG9jdW1lbnRFbGVtZW50KCkgYml0IGlzIHNldC4KKyAgICAgICAgICAgIFRlc3RlZCBi
eSBmYXN0L211bHRpY29sL3ZlcnRpY2FsLXJsL2JyZWFrLXByb3BlcnRpZXMuaHRtbC4KKyAgICAg
ICAgCisgICAgICAgIChXZWJDb3JlOjpDU1NTdHlsZVNlbGVjdG9yOjpjb2xsZWN0TWF0Y2hpbmdS
dWxlc0Zvckxpc3QpOgorICAgICAgICAqIGNzcy9TdHlsZVByb3BlcnR5U2V0Lmg6CisgICAgICAg
IChTdHlsZVByb3BlcnR5U2V0KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUHJvcGVydHlTZXQ6
Omhhc0NTU09NV3JhcHBlcik6CisgICAgICAgICogZG9tL0VsZW1lbnQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6RWxlbWVudDo6cmVjYWxjU3R5bGUpOgorICAgICAgICAKKyAgICAgICAgICAgIElu
dmFsaWRhdGUgdGhlIG1hdGNoZWQgcHJvcGVydGllcyBjYWNoZSBpZiB0aGUgZG9jdW1lbnQgaGFz
IHJlbSB1bml0cyBhbmQgdGhlIHJvb3QgZm9udCBjaGFuZ2VzLgorICAgICAgICAgICAgVGVzdGVk
IGJ5IGZhc3QvY3NzL3JlbS1keW5hbWljLXNjYWxpbmcuaHRtbC4KKyAgICAgICAgCisgICAgICAg
ICogZG9tL0VsZW1lbnRBdHRyaWJ1dGVEYXRhLmNwcDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAg
ICAgICAoV2ViQ29yZTo6RWxlbWVudEF0dHJpYnV0ZURhdGE6OmVuc3VyZUlubGluZVN0eWxlKToK
KyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnRBdHRyaWJ1dGVEYXRhOjplbnN1cmVNdXRhYmxlSW5s
aW5lU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudEF0dHJpYnV0ZURhdGE6OnVwZGF0
ZUlubGluZVN0eWxlQXZvaWRpbmdNdXRhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50
QXR0cmlidXRlRGF0YTo6ZGVzdHJveUlubGluZVN0eWxlKToKKyAgICAgICAgKiBkb20vRWxlbWVu
dEF0dHJpYnV0ZURhdGEuaDoKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnRBdHRyaWJ1dGVEYXRh
OjppbmxpbmVTdHlsZSk6CisgICAgICAgIChFbGVtZW50QXR0cmlidXRlRGF0YSk6CisgICAgICAg
ICogZG9tL1N0eWxlZEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVkRWxlbWVu
dDo6dXBkYXRlU3R5bGVBdHRyaWJ1dGUpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVkRWxlbWVu
dDo6flN0eWxlZEVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3Jl
OjpTdHlsZWRFbGVtZW50OjpzdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZWRFbGVtZW50
OjpwYXJzZUF0dHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZWRFbGVtZW50OjpzZXRJ
bmxpbmVTdHlsZVByb3BlcnR5KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlZEVsZW1lbnQ6OnJl
bW92ZUlubGluZVN0eWxlUHJvcGVydHkpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVkRWxlbWVu
dDo6YWRkU3VicmVzb3VyY2VBdHRyaWJ1dGVVUkxzKToKKyAgICAgICAgKiBkb20vU3R5bGVkRWxl
bWVudC5oOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVkRWxlbWVudDo6aW5saW5lU3R5bGUpOgor
ICAgICAgICAoV2ViQ29yZTo6U3R5bGVkRWxlbWVudDo6ZW5zdXJlSW5saW5lU3R5bGUpOgorICAg
ICAgICAoU3R5bGVkRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZWRFbGVtZW50Ojpk
ZXN0cm95SW5saW5lU3R5bGUpOgorICAgICAgICAqIGVkaXRpbmcvQXBwbHlTdHlsZUNvbW1hbmQu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6aGFzTm9BdHRyaWJ1dGVPck9ubHlTdHlsZUF0dHJpYnV0
ZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVN0eWxlQ29tbWFuZDo6YXBwbHlSZWxhdGl2ZUZv
bnRTdHlsZUNoYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVN0eWxlQ29tbWFuZDo6cmVt
b3ZlRW1iZWRkaW5nVXBUb0VuY2xvc2luZ0Jsb2NrKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5
U3R5bGVDb21tYW5kOjphcHBseUlubGluZVN0eWxlVG9Ob2RlUmFuZ2UpOgorICAgICAgICAoV2Vi
Q29yZTo6QXBwbHlTdHlsZUNvbW1hbmQ6OnJlbW92ZUNTU1N0eWxlKToKKyAgICAgICAgKFdlYkNv
cmU6OkFwcGx5U3R5bGVDb21tYW5kOjphcHBseUlubGluZVN0eWxlVG9QdXNoRG93bik6CisgICAg
ICAgIChXZWJDb3JlOjpBcHBseVN0eWxlQ29tbWFuZDo6YWRkQmxvY2tTdHlsZSk6CisgICAgICAg
IChXZWJDb3JlOjpBcHBseVN0eWxlQ29tbWFuZDo6YWRkSW5saW5lU3R5bGVJZk5lZWRlZCk6Cisg
ICAgICAgICogZWRpdGluZy9FZGl0aW5nU3R5bGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRN
TEVsZW1lbnRFcXVpdmFsZW50Ojpwcm9wZXJ0eUV4aXN0c0luU3R5bGUpOgorICAgICAgICAoSFRN
TFRleHREZWNvcmF0aW9uRXF1aXZhbGVudCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MVGV4dERl
Y29yYXRpb25FcXVpdmFsZW50Ojpwcm9wZXJ0eUV4aXN0c0luU3R5bGUpOgorICAgICAgICAoV2Vi
Q29yZTo6RWRpdGluZ1N0eWxlOjpjb25mbGljdHNXaXRoSW5saW5lU3R5bGVPZkVsZW1lbnQpOgor
ICAgICAgICAoV2ViQ29yZTo6RWRpdGluZ1N0eWxlOjplbGVtZW50SXNTdHlsZWRTcGFuT3JIVE1M
RXF1aXZhbGVudCk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0aW5nU3R5bGU6Om1lcmdlSW5saW5l
U3R5bGVPZkVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6ZWxlbWVudE1hdGNoZXNBbmRQcm9w
ZXJ0eUlzTm90SW5JbmxpbmVTdHlsZURlY2wpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdGluZ1N0
eWxlOjptZXJnZVN0eWxlKToKKyAgICAgICAgKiBlZGl0aW5nL0VkaXRpbmdTdHlsZS5oOgorICAg
ICAgICAoRWRpdGluZ1N0eWxlKToKKyAgICAgICAgKiBlZGl0aW5nL1JlbW92ZUNTU1Byb3BlcnR5
Q29tbWFuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW1vdmVDU1NQcm9wZXJ0eUNvbW1hbmQ6
OmRvQXBwbHkpOgorICAgICAgICAqIGVkaXRpbmcvUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6UmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ6OnJlbW92ZVJlZHVu
ZGFudFN0eWxlc0FuZEtlZXBTdHlsZVNwYW5JbmxpbmUpOgorICAgICAgICAoV2ViQ29yZTo6UmVw
bGFjZVNlbGVjdGlvbkNvbW1hbmQ6OmhhbmRsZVN0eWxlU3BhbnMpOgorICAgICAgICAqIGVkaXRp
bmcvbWFya3VwLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlZE1hcmt1cEFjY3VtdWxhdG9y
OjphcHBlbmRFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OnN0eWxlRnJvbU1hdGNoZWRSdWxl
c0FuZElubGluZURlY2wpOgorICAgICAgICAqIGh0bWwvSFRNTEVsZW1lbnQuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6U3R5bGVkRWxlbWVudDo6Y29weU5vbkF0dHJpYnV0ZVByb3BlcnRpZXMpOgor
ICAgICAgICAqIGh0bWwvY2FudmFzL0NhbnZhc1N0eWxlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OmN1cnJlbnRDb2xvcik6CisgICAgICAgICogcGFnZS9QYWdlU2VyaWFsaXplci5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpQYWdlU2VyaWFsaXplcjo6c2VyaWFsaXplRnJhbWUpOgorICAgICAgICAo
V2ViQ29yZTo6UGFnZVNlcmlhbGl6ZXI6OnJldHJpZXZlUmVzb3VyY2VzRm9yUHJvcGVydGllcyk6
CisgICAgICAgICogcGFnZS9QYWdlU2VyaWFsaXplci5oOgorICAgICAgICAoUGFnZVNlcmlhbGl6
ZXIpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUcmVlQXNUZXh0LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OmlzRW1wdHlPclVuc3R5bGVkQXBwbGVTdHlsZVNwYW4pOgorCiAyMDEyLTAzLTA2
ICBQYXZlbCBQb2Rpdmlsb3YgIDxwb2Rpdmlsb3ZAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFdl
YiBJbnNwZWN0b3I6IGV4dHJhY3Qgc291cmNlIG1hcHBpbmcgbG9naWMgZnJvbSBEZWJ1Z2dlclBy
ZXNlbnRhdGlvbk1vZGVsIHRvIFNjcmlwdE1hcHBpbmdJbXBsLgpJbmRleDogU291cmNlL1dlYkNv
cmUvY3NzL0NTU1N0eWxlU2VsZWN0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2Nzcy9DU1NTdHlsZVNlbGVjdG9yLmNwcAkocmV2aXNpb24gMTEwMDQzKQorKysgU291cmNlL1dl
YkNvcmUvY3NzL0NTU1N0eWxlU2VsZWN0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDg2LDgg
KzEwODYsMTIgQEAgdm9pZCBDU1NTdHlsZVNlbGVjdG9yOjptYXRjaEFsbFJ1bGVzKE1hdAogICAg
ICAgICBtYXRjaEF1dGhvclJ1bGVzKHJlc3VsdCwgZmFsc2UpOwogCiAgICAgLy8gTm93IGNoZWNr
IG91ciBpbmxpbmUgc3R5bGUgYXR0cmlidXRlLgotICAgIGlmIChtX21hdGNoQXV0aG9yQW5kVXNl
clN0eWxlcyAmJiBtX3N0eWxlZEVsZW1lbnQpCi0gICAgICAgIGFkZEVsZW1lbnRTdHlsZVByb3Bl
cnRpZXMocmVzdWx0LCBtX3N0eWxlZEVsZW1lbnQtPmlubGluZVN0eWxlRGVjbCgpLCBmYWxzZSAv
KiBpc0NhY2hlYWJsZSAqLyk7CisgICAgaWYgKG1fbWF0Y2hBdXRob3JBbmRVc2VyU3R5bGVzICYm
IG1fc3R5bGVkRWxlbWVudCAmJiBtX3N0eWxlZEVsZW1lbnQtPmlubGluZVN0eWxlKCkpIHsKKyAg
ICAgICAgLy8gSW5saW5lIHN0eWxlIGlzIGltbXV0YWJsZSBhcyBsb25nIGFzIHRoZXJlIGlzIG5v
IENTU09NIHdyYXBwZXIuCisgICAgICAgIGJvb2wgaXNJbmxpbmVTdHlsZUNhY2hlYWJsZSA9ICFt
X3N0eWxlZEVsZW1lbnQtPmlubGluZVN0eWxlKCktPmhhc0NTU09NV3JhcHBlcigpOworICAgICAg
ICAvLyBGSVhNRTogQ29uc3RpZnkuCisgICAgICAgIGFkZEVsZW1lbnRTdHlsZVByb3BlcnRpZXMo
cmVzdWx0LCBjb25zdF9jYXN0PFN0eWxlUHJvcGVydHlTZXQqPihtX3N0eWxlZEVsZW1lbnQtPmlu
bGluZVN0eWxlKCkpLCBpc0lubGluZVN0eWxlQ2FjaGVhYmxlKTsKKyAgICB9CiAKICNpZiBFTkFC
TEUoU1ZHKQogICAgIC8vIE5vdyBjaGVjayBTTUlMIGFuaW1hdGlvbiBvdmVycmlkZSBzdHlsZS4K
QEAgLTExNDcsNyArMTE1MSw3IEBAIE5vZGUqIENTU1N0eWxlU2VsZWN0b3I6OmxvY2F0ZUNvdXNp
bkxpc3QKICAgICAgICAgcmV0dXJuIDA7CiAjZW5kaWYKICAgICBTdHlsZWRFbGVtZW50KiBwID0g
c3RhdGljX2Nhc3Q8U3R5bGVkRWxlbWVudCo+KHBhcmVudCk7Ci0gICAgaWYgKHAtPmlubGluZVN0
eWxlRGVjbCgpKQorICAgIGlmIChwLT5pbmxpbmVTdHlsZSgpKQogICAgICAgICByZXR1cm4gMDsK
ICNpZiBFTkFCTEUoU1ZHKQogICAgIGlmIChwLT5pc1NWR0VsZW1lbnQoKSAmJiBzdGF0aWNfY2Fz
dDxTVkdFbGVtZW50Kj4ocCktPmFuaW1hdGVkU01JTFN0eWxlUHJvcGVydGllcygpKQpAQCAtMTI5
Miw3ICsxMjk2LDcgQEAgYm9vbCBDU1NTdHlsZVNlbGVjdG9yOjpjYW5TaGFyZVN0eWxlV2l0aAog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgaWYgKGVsZW1lbnQtPmhhc0NsYXNzKCkgIT0gbV9l
bGVtZW50LT5oYXNDbGFzcygpKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKGVsZW1l
bnQtPmlubGluZVN0eWxlRGVjbCgpKQorICAgIGlmIChlbGVtZW50LT5pbmxpbmVTdHlsZSgpKQog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAjaWYgRU5BQkxFKFNWRykKICAgICBpZiAoZWxlbWVudC0+
aXNTVkdFbGVtZW50KCkgJiYgc3RhdGljX2Nhc3Q8U1ZHRWxlbWVudCo+KGVsZW1lbnQpLT5hbmlt
YXRlZFNNSUxTdHlsZVByb3BlcnRpZXMoKSkKQEAgLTE0MDYsNyArMTQxMCw3IEBAIFJlbmRlclN0
eWxlKiBDU1NTdHlsZVNlbGVjdG9yOjpsb2NhdGVTaGEKICAgICBpZiAoIW1fc3R5bGVkRWxlbWVu
dCB8fCAhbV9wYXJlbnRTdHlsZSkKICAgICAgICAgcmV0dXJuIDA7CiAgICAgLy8gSWYgdGhlIGVs
ZW1lbnQgaGFzIGlubGluZSBzdHlsZSBpdCBpcyBwcm9iYWJseSB1bmlxdWUuCi0gICAgaWYgKG1f
c3R5bGVkRWxlbWVudC0+aW5saW5lU3R5bGVEZWNsKCkpCisgICAgaWYgKG1fc3R5bGVkRWxlbWVu
dC0+aW5saW5lU3R5bGUoKSkKICAgICAgICAgcmV0dXJuIDA7CiAjaWYgRU5BQkxFKFNWRykKICAg
ICBpZiAobV9zdHlsZWRFbGVtZW50LT5pc1NWR0VsZW1lbnQoKSAmJiBzdGF0aWNfY2FzdDxTVkdF
bGVtZW50Kj4obV9zdHlsZWRFbGVtZW50KS0+YW5pbWF0ZWRTTUlMU3R5bGVQcm9wZXJ0aWVzKCkp
CkBAIC0yNzAzLDggKzI3MDcsMTEgQEAgdm9pZCBDU1NTdHlsZVNlbGVjdG9yOjppbnZhbGlkYXRl
TWF0Y2hlZAogICAgIG1fbWF0Y2hlZFByb3BlcnRpZXNDYWNoZS5jbGVhcigpOwogfQogCi1zdGF0
aWMgYm9vbCBpc0NhY2hlYWJsZUluTWF0Y2hlZFByb3BlcnRpZXNDYWNoZShjb25zdCBSZW5kZXJT
dHlsZSogc3R5bGUsIGNvbnN0IFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSkKK3N0YXRpYyBib29s
IGlzQ2FjaGVhYmxlSW5NYXRjaGVkUHJvcGVydGllc0NhY2hlKGNvbnN0IEVsZW1lbnQqIGVsZW1l
bnQsIGNvbnN0IFJlbmRlclN0eWxlKiBzdHlsZSwgY29uc3QgUmVuZGVyU3R5bGUqIHBhcmVudFN0
eWxlKQogeworICAgIC8vIEZJWE1FOiBDU1NQcm9wZXJ0eVdlYmtpdFdyaXRpbmdNb2RlIG1vZGlm
aWVzIHN0YXRlIHdoZW4gYXBwbHlpbmcgdG8gZG9jdW1lbnQgZWxlbWVudC4gV2UgY2FuJ3Qgc2tp
cCB0aGUgYXBwbHlpbmcgYnkgY2FjaGluZy4KKyAgICBpZiAoZWxlbWVudCA9PSBlbGVtZW50LT5k
b2N1bWVudCgpLT5kb2N1bWVudEVsZW1lbnQoKSAmJiBlbGVtZW50LT5kb2N1bWVudCgpLT53cml0
aW5nTW9kZVNldE9uRG9jdW1lbnRFbGVtZW50KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKICAg
ICBpZiAoc3R5bGUtPnVuaXF1ZSgpIHx8IChzdHlsZS0+c3R5bGVUeXBlKCkgIT0gTk9QU0VVRE8g
JiYgcGFyZW50U3R5bGUtPnVuaXF1ZSgpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGlm
IChzdHlsZS0+aGFzQXBwZWFyYW5jZSgpKQpAQCAtMjc4Niw3ICsyNzkzLDcgQEAgdm9pZCBDU1NT
dHlsZVNlbGVjdG9yOjphcHBseU1hdGNoZWRQcm9wZQogICAgIAogICAgIGlmIChjYWNoZUl0ZW0g
fHwgIWNhY2hlSGFzaCkKICAgICAgICAgcmV0dXJuOwotICAgIGlmICghaXNDYWNoZWFibGVJbk1h
dGNoZWRQcm9wZXJ0aWVzQ2FjaGUobV9zdHlsZS5nZXQoKSwgbV9wYXJlbnRTdHlsZSkpCisgICAg
aWYgKCFpc0NhY2hlYWJsZUluTWF0Y2hlZFByb3BlcnRpZXNDYWNoZShtX2VsZW1lbnQsIG1fc3R5
bGUuZ2V0KCksIG1fcGFyZW50U3R5bGUpKQogICAgICAgICByZXR1cm47CiAgICAgYWRkVG9NYXRj
aGVkUHJvcGVydGllc0NhY2hlKG1fc3R5bGUuZ2V0KCksIG1fcGFyZW50U3R5bGUsIGNhY2hlSGFz
aCwgbWF0Y2hSZXN1bHQpOwogfQpAQCAtMzcxNSw2ICszNzIyLDcgQEAgdm9pZCBDU1NTdHlsZVNl
bGVjdG9yOjphcHBseVByb3BlcnR5KGludAogICAgIC8vIENTUyBUZXh0IExheW91dCBNb2R1bGUg
TGV2ZWwgMzogVmVydGljYWwgd3JpdGluZyBzdXBwb3J0CiAgICAgY2FzZSBDU1NQcm9wZXJ0eVdl
YmtpdFdyaXRpbmdNb2RlOiB7CiAgICAgICAgIEhBTkRMRV9JTkhFUklUX0FORF9JTklUSUFMX0FO
RF9QUklNSVRJVkUod3JpdGluZ01vZGUsIFdyaXRpbmdNb2RlKQorICAgICAgICAvLyBGSVhNRTog
SXQgaXMgbm90IG9rIHRvIG1vZGlmeSBkb2N1bWVudCBzdGF0ZSB3aGlsZSBhcHBseWluZyBzdHls
ZS4KICAgICAgICAgaWYgKCFpc0luaGVyaXQgJiYgIWlzSW5pdGlhbCAmJiBtX2VsZW1lbnQgJiYg
bV9lbGVtZW50ID09IG1fZWxlbWVudC0+ZG9jdW1lbnQoKS0+ZG9jdW1lbnRFbGVtZW50KCkpCiAg
ICAgICAgICAgICBtX2VsZW1lbnQtPmRvY3VtZW50KCktPnNldFdyaXRpbmdNb2RlU2V0T25Eb2N1
bWVudEVsZW1lbnQodHJ1ZSk7CiAgICAgICAgIEZvbnREZXNjcmlwdGlvbiBmb250RGVzY3JpcHRp
b24gPSBtX3N0eWxlLT5mb250RGVzY3JpcHRpb24oKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nz
cy9TdHlsZVByb3BlcnR5U2V0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL1N0
eWxlUHJvcGVydHlTZXQuaAkocmV2aXNpb24gMTA5ODE0KQorKysgU291cmNlL1dlYkNvcmUvY3Nz
L1N0eWxlUHJvcGVydHlTZXQuaAkod29ya2luZyBjb3B5KQpAQCAtMTA3LDYgKzEwNyw4IEBAIHB1
YmxpYzoKICAgICBDU1NTdHlsZURlY2xhcmF0aW9uKiBlbnN1cmVDU1NTdHlsZURlY2xhcmF0aW9u
KCkgY29uc3Q7CiAgICAgQ1NTU3R5bGVEZWNsYXJhdGlvbiogZW5zdXJlUnVsZUNTU1N0eWxlRGVj
bGFyYXRpb24oY29uc3QgQ1NTUnVsZSogcGFyZW50UnVsZSkgY29uc3Q7CiAgICAgQ1NTU3R5bGVE
ZWNsYXJhdGlvbiogZW5zdXJlSW5saW5lQ1NTU3R5bGVEZWNsYXJhdGlvbihjb25zdCBTdHlsZWRF
bGVtZW50KiBwYXJlbnRFbGVtZW50KSBjb25zdDsKKyAgICAKKyAgICBib29sIGhhc0NTU09NV3Jh
cHBlcigpIGNvbnN0IHsgcmV0dXJuIG1faGFzQ1NTT01XcmFwcGVyOyB9CiAKIHByaXZhdGU6CiAg
ICAgU3R5bGVQcm9wZXJ0eVNldCgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmNwcAkocmV2aXNp
b24gMTA5ODE0KQorKysgU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xMTAxLDEyICsxMTAxLDE2IEBAIHZvaWQgRWxlbWVudDo6cmVjYWxjU3R5bGUoU3R5
bGVDaGFuZ2UgY2gKICAgICAgICAgfSBlbHNlIGlmIChzdHlsZUNoYW5nZVR5cGUoKSA9PSBTeW50
aGV0aWNTdHlsZUNoYW5nZSkKICAgICAgICAgICAgICBzZXRSZW5kZXJTdHlsZShuZXdTdHlsZSk7
CiAKKyAgICAgICAgLy8gSWYgInJlbSIgdW5pdHMgYXJlIHVzZWQgYW55d2hlcmUgaW4gdGhlIGRv
Y3VtZW50LCBhbmQgaWYgdGhlIGRvY3VtZW50IGVsZW1lbnQncyBmb250IHNpemUgY2hhbmdlcywg
dGhlbiBnbyBhaGVhZCBhbmQgZm9yY2UgZm9udCB1cGRhdGluZworICAgICAgICAvLyBhbGwgdGhl
IHdheSBkb3duIHRoZSB0cmVlLiBUaGlzIGlzIHNpbXBsZXIgdGhhbiBoYXZpbmcgdG8gbWFpbnRh
aW4gYSBjYWNoZSBvZiBvYmplY3RzIChhbmQgc3VjaCBmb250IHNpemUgY2hhbmdlcyBzaG91bGQg
YmUgcmFyZSBhbnl3YXkpLgorICAgICAgICBpZiAoZG9jdW1lbnQoKS0+dXNlc1JlbVVuaXRzKCkg
JiYgZG9jdW1lbnQoKS0+ZG9jdW1lbnRFbGVtZW50KCkgPT0gdGhpcyAmJiBjaCAhPSBOb0NoYW5n
ZSAmJiBjdXJyZW50U3R5bGUgJiYgbmV3U3R5bGUgJiYgY3VycmVudFN0eWxlLT5mb250U2l6ZSgp
ICE9IG5ld1N0eWxlLT5mb250U2l6ZSgpKSB7CisgICAgICAgICAgICAvLyBDYWNoZWQgUmVuZGVy
U3R5bGVzIG1heSBkZXBlbmQgb24gdGhlIHJlbSB1bml0cy4KKyAgICAgICAgICAgIGRvY3VtZW50
KCktPnN0eWxlU2VsZWN0b3IoKS0+aW52YWxpZGF0ZU1hdGNoZWRQcm9wZXJ0aWVzQ2FjaGUoKTsK
KyAgICAgICAgICAgIGNoYW5nZSA9IEZvcmNlOworICAgICAgICB9CisKICAgICAgICAgaWYgKGNo
YW5nZSAhPSBGb3JjZSkgewotICAgICAgICAgICAgLy8gSWYgInJlbSIgdW5pdHMgYXJlIHVzZWQg
YW55d2hlcmUgaW4gdGhlIGRvY3VtZW50LCBhbmQgaWYgdGhlIGRvY3VtZW50IGVsZW1lbnQncyBm
b250IHNpemUgY2hhbmdlcywgdGhlbiBnbyBhaGVhZCBhbmQgZm9yY2UgZm9udCB1cGRhdGluZwot
ICAgICAgICAgICAgLy8gYWxsIHRoZSB3YXkgZG93biB0aGUgdHJlZS4gIFRoaXMgaXMgc2ltcGxl
ciB0aGFuIGhhdmluZyB0byBtYWludGFpbiBhIGNhY2hlIG9mIG9iamVjdHMgKGFuZCBzdWNoIGZv
bnQgc2l6ZSBjaGFuZ2VzIHNob3VsZCBiZSByYXJlIGFueXdheSkuCi0gICAgICAgICAgICBpZiAo
ZG9jdW1lbnQoKS0+dXNlc1JlbVVuaXRzKCkgJiYgY2ggIT0gTm9DaGFuZ2UgJiYgY3VycmVudFN0
eWxlICYmIG5ld1N0eWxlICYmIGN1cnJlbnRTdHlsZS0+Zm9udFNpemUoKSAhPSBuZXdTdHlsZS0+
Zm9udFNpemUoKSAmJiBkb2N1bWVudCgpLT5kb2N1bWVudEVsZW1lbnQoKSA9PSB0aGlzKQotICAg
ICAgICAgICAgICAgIGNoYW5nZSA9IEZvcmNlOwotICAgICAgICAgICAgZWxzZSBpZiAoc3R5bGVD
aGFuZ2VUeXBlKCkgPj0gRnVsbFN0eWxlQ2hhbmdlKQorICAgICAgICAgICAgaWYgKHN0eWxlQ2hh
bmdlVHlwZSgpID49IEZ1bGxTdHlsZUNoYW5nZSkKICAgICAgICAgICAgICAgICBjaGFuZ2UgPSBG
b3JjZTsKICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICBjaGFuZ2UgPSBjaDsKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50QXR0cmlidXRlRGF0YS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnRBdHRyaWJ1dGVEYXRhLmNwcAkocmV2aXNp
b24gMTA5ODE0KQorKysgU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnRBdHRyaWJ1dGVEYXRhLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNTIsOCArNTIsOCBAQCB2b2lkIEVsZW1lbnRBdHRyaWJ1dGVE
YXRhOjpzZXRDbGFzcyhjb25zCiB7CiAgICAgbV9jbGFzc05hbWVzLnNldChjbGFzc05hbWUsIHNo
b3VsZEZvbGRDYXNlKTsKIH0KLQotU3R5bGVQcm9wZXJ0eVNldCogRWxlbWVudEF0dHJpYnV0ZURh
dGE6OmVuc3VyZUlubGluZVN0eWxlRGVjbChTdHlsZWRFbGVtZW50KiBlbGVtZW50KQorICAgIAor
U3R5bGVQcm9wZXJ0eVNldCogRWxlbWVudEF0dHJpYnV0ZURhdGE6OmVuc3VyZUlubGluZVN0eWxl
KFN0eWxlZEVsZW1lbnQqIGVsZW1lbnQpCiB7CiAgICAgaWYgKCFtX2lubGluZVN0eWxlRGVjbCkg
ewogICAgICAgICBBU1NFUlQoZWxlbWVudC0+aXNTdHlsZWRFbGVtZW50KCkpOwpAQCAtNjMsNyAr
NjMsMzAgQEAgU3R5bGVQcm9wZXJ0eVNldCogRWxlbWVudEF0dHJpYnV0ZURhdGE6OgogICAgIHJl
dHVybiBtX2lubGluZVN0eWxlRGVjbC5nZXQoKTsKIH0KIAotdm9pZCBFbGVtZW50QXR0cmlidXRl
RGF0YTo6ZGVzdHJveUlubGluZVN0eWxlRGVjbChTdHlsZWRFbGVtZW50KiBlbGVtZW50KQorU3R5
bGVQcm9wZXJ0eVNldCogRWxlbWVudEF0dHJpYnV0ZURhdGE6OmVuc3VyZU11dGFibGVJbmxpbmVT
dHlsZShTdHlsZWRFbGVtZW50KiBlbGVtZW50KQoreworICAgIGlmIChtX2lubGluZVN0eWxlRGVj
bCAmJiAhbV9pbmxpbmVTdHlsZURlY2wtPmhhc0NTU09NV3JhcHBlcigpKSB7CisgICAgICAgIG1f
aW5saW5lU3R5bGVEZWNsID0gbV9pbmxpbmVTdHlsZURlY2wtPmNvcHkoKTsKKyAgICAgICAgbV9p
bmxpbmVTdHlsZURlY2wtPnNldFN0cmljdFBhcnNpbmcoZWxlbWVudC0+aXNIVE1MRWxlbWVudCgp
ICYmICFlbGVtZW50LT5kb2N1bWVudCgpLT5pblF1aXJrc01vZGUoKSk7CisgICAgICAgIHJldHVy
biBtX2lubGluZVN0eWxlRGVjbC5nZXQoKTsKKyAgICB9CisgICAgcmV0dXJuIGVuc3VyZUlubGlu
ZVN0eWxlKGVsZW1lbnQpOworfQorICAgIAordm9pZCBFbGVtZW50QXR0cmlidXRlRGF0YTo6dXBk
YXRlSW5saW5lU3R5bGVBdm9pZGluZ011dGF0aW9uKFN0eWxlZEVsZW1lbnQqIGVsZW1lbnQsIGNv
bnN0IFN0cmluZyYgdGV4dCkKK3sKKyAgICAvLyBXZSByZWNvbnN0cnVjdCB0aGUgcHJvcGVydHkg
c2V0IGluc3RlYWQgb2YgbXV0YXRpbmcgaWYgdGhlcmUgaXMgbm8gQ1NTT00gd3JhcHBlci4KKyAg
ICAvLyBUaGlzIG1ha2VzIHdyYXBwZXJsZXNzIHByb3BlcnR5IHNldHMgaW1tdXRhYmxlIGFuZCBz
byBjYWNoZWFibGUuCisgICAgaWYgKG1faW5saW5lU3R5bGVEZWNsICYmICFtX2lubGluZVN0eWxl
RGVjbC0+aGFzQ1NTT01XcmFwcGVyKCkpCisgICAgICAgIG1faW5saW5lU3R5bGVEZWNsLmNsZWFy
KCk7CisgICAgaWYgKCFtX2lubGluZVN0eWxlRGVjbCkgeworICAgICAgICBtX2lubGluZVN0eWxl
RGVjbCA9IFN0eWxlUHJvcGVydHlTZXQ6OmNyZWF0ZSgpOworICAgICAgICBtX2lubGluZVN0eWxl
RGVjbC0+c2V0U3RyaWN0UGFyc2luZyhlbGVtZW50LT5pc0hUTUxFbGVtZW50KCkgJiYgIWVsZW1l
bnQtPmRvY3VtZW50KCktPmluUXVpcmtzTW9kZSgpKTsKKyAgICB9CisgICAgbV9pbmxpbmVTdHls
ZURlY2wtPnBhcnNlRGVjbGFyYXRpb24odGV4dCwgZWxlbWVudC0+ZG9jdW1lbnQoKS0+ZWxlbWVu
dFNoZWV0KCkpOworfQorCit2b2lkIEVsZW1lbnRBdHRyaWJ1dGVEYXRhOjpkZXN0cm95SW5saW5l
U3R5bGUoU3R5bGVkRWxlbWVudCogZWxlbWVudCkKIHsKICAgICBpZiAoIW1faW5saW5lU3R5bGVE
ZWNsKQogICAgICAgICByZXR1cm47CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudEF0
dHJpYnV0ZURhdGEuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudEF0
dHJpYnV0ZURhdGEuaAkocmV2aXNpb24gMTA5ODE0KQorKysgU291cmNlL1dlYkNvcmUvZG9tL0Vs
ZW1lbnRBdHRyaWJ1dGVEYXRhLmgJKHdvcmtpbmcgY29weSkKQEAgLTkwLDkgKzkwLDExIEBAIHB1
YmxpYzoKICAgICBjb25zdCBBdG9taWNTdHJpbmcmIGlkRm9yU3R5bGVSZXNvbHV0aW9uKCkgY29u
c3QgeyByZXR1cm4gbV9pZEZvclN0eWxlUmVzb2x1dGlvbjsgfQogICAgIHZvaWQgc2V0SWRGb3JT
dHlsZVJlc29sdXRpb24oY29uc3QgQXRvbWljU3RyaW5nJiBuZXdJZCkgeyBtX2lkRm9yU3R5bGVS
ZXNvbHV0aW9uID0gbmV3SWQ7IH0KIAotICAgIFN0eWxlUHJvcGVydHlTZXQqIGlubGluZVN0eWxl
RGVjbCgpIHsgcmV0dXJuIG1faW5saW5lU3R5bGVEZWNsLmdldCgpOyB9Ci0gICAgU3R5bGVQcm9w
ZXJ0eVNldCogZW5zdXJlSW5saW5lU3R5bGVEZWNsKFN0eWxlZEVsZW1lbnQqKTsKLSAgICB2b2lk
IGRlc3Ryb3lJbmxpbmVTdHlsZURlY2woU3R5bGVkRWxlbWVudCogZWxlbWVudCk7CisgICAgU3R5
bGVQcm9wZXJ0eVNldCogaW5saW5lU3R5bGUoKSB7IHJldHVybiBtX2lubGluZVN0eWxlRGVjbC5n
ZXQoKTsgfQorICAgIFN0eWxlUHJvcGVydHlTZXQqIGVuc3VyZUlubGluZVN0eWxlKFN0eWxlZEVs
ZW1lbnQqKTsKKyAgICBTdHlsZVByb3BlcnR5U2V0KiBlbnN1cmVNdXRhYmxlSW5saW5lU3R5bGUo
U3R5bGVkRWxlbWVudCopOworICAgIHZvaWQgdXBkYXRlSW5saW5lU3R5bGVBdm9pZGluZ011dGF0
aW9uKFN0eWxlZEVsZW1lbnQqLCBjb25zdCBTdHJpbmcmIHRleHQpOworICAgIHZvaWQgZGVzdHJv
eUlubGluZVN0eWxlKFN0eWxlZEVsZW1lbnQqKTsKIAogICAgIFN0eWxlUHJvcGVydHlTZXQqIGF0
dHJpYnV0ZVN0eWxlKCkgY29uc3QgeyByZXR1cm4gbV9hdHRyaWJ1dGVTdHlsZS5nZXQoKTsgfQog
ICAgIHZvaWQgc2V0QXR0cmlidXRlU3R5bGUoUGFzc1JlZlB0cjxTdHlsZVByb3BlcnR5U2V0PiBz
dHlsZSkgeyBtX2F0dHJpYnV0ZVN0eWxlID0gc3R5bGU7IH0KSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2RvbS9TdHlsZWRFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20v
U3R5bGVkRWxlbWVudC5jcHAJKHJldmlzaW9uIDEwOTgxNCkKKysrIFNvdXJjZS9XZWJDb3JlL2Rv
bS9TdHlsZWRFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTAsMTMgKzUwLDE4IEBAIHZv
aWQgU3R5bGVkRWxlbWVudDo6dXBkYXRlU3R5bGVBdHRyaWJ1dGUKIHsKICAgICBBU1NFUlQoIWlz
U3R5bGVBdHRyaWJ1dGVWYWxpZCgpKTsKICAgICBzZXRJc1N0eWxlQXR0cmlidXRlVmFsaWQoKTsK
LSAgICBpZiAoU3R5bGVQcm9wZXJ0eVNldCogaW5saW5lU3R5bGUgPSBpbmxpbmVTdHlsZURlY2wo
KSkKKyAgICBpZiAoY29uc3QgU3R5bGVQcm9wZXJ0eVNldCogaW5saW5lU3R5bGUgPSB0aGlzLT5p
bmxpbmVTdHlsZSgpKQogICAgICAgICBjb25zdF9jYXN0PFN0eWxlZEVsZW1lbnQqPih0aGlzKS0+
c2V0QXR0cmlidXRlKHN0eWxlQXR0ciwgaW5saW5lU3R5bGUtPmFzVGV4dCgpLCAvKm5vdGlmeUNo
YW5nZWQqLyBmYWxzZSk7CiB9CiAKIFN0eWxlZEVsZW1lbnQ6On5TdHlsZWRFbGVtZW50KCkKIHsK
LSAgICBkZXN0cm95SW5saW5lU3R5bGVEZWNsKCk7CisgICAgZGVzdHJveUlubGluZVN0eWxlKCk7
Cit9CisKK0NTU1N0eWxlRGVjbGFyYXRpb24qIFN0eWxlZEVsZW1lbnQ6OnN0eWxlKCkgCit7IAor
ICAgIHJldHVybiBlbnN1cmVBdHRyaWJ1dGVEYXRhKCktPmVuc3VyZU11dGFibGVJbmxpbmVTdHls
ZSh0aGlzKS0+ZW5zdXJlSW5saW5lQ1NTU3R5bGVEZWNsYXJhdGlvbih0aGlzKTsgCiB9CiAKIHZv
aWQgU3R5bGVkRWxlbWVudDo6YXR0cmlidXRlQ2hhbmdlZChBdHRyaWJ1dGUqIGF0dHIpCkBAIC05
Nyw5ICsxMDIsOSBAQCB2b2lkIFN0eWxlZEVsZW1lbnQ6OnBhcnNlQXR0cmlidXRlKEF0dHJpCiAg
ICAgICAgIGNsYXNzQXR0cmlidXRlQ2hhbmdlZChhdHRyLT52YWx1ZSgpKTsKICAgICBlbHNlIGlm
IChhdHRyLT5uYW1lKCkgPT0gc3R5bGVBdHRyKSB7CiAgICAgICAgIGlmIChhdHRyLT5pc051bGwo
KSkKLSAgICAgICAgICAgIGRlc3Ryb3lJbmxpbmVTdHlsZURlY2woKTsKKyAgICAgICAgICAgIGRl
c3Ryb3lJbmxpbmVTdHlsZSgpOwogICAgICAgICBlbHNlIGlmIChkb2N1bWVudCgpLT5jb250ZW50
U2VjdXJpdHlQb2xpY3koKS0+YWxsb3dJbmxpbmVTdHlsZSgpKQotICAgICAgICAgICAgZW5zdXJl
SW5saW5lU3R5bGVEZWNsKCktPnBhcnNlRGVjbGFyYXRpb24oYXR0ci0+dmFsdWUoKSwgZG9jdW1l
bnQoKS0+ZWxlbWVudFNoZWV0KCkpOworICAgICAgICAgICAgZW5zdXJlQXR0cmlidXRlRGF0YSgp
LT51cGRhdGVJbmxpbmVTdHlsZUF2b2lkaW5nTXV0YXRpb24odGhpcywgYXR0ci0+dmFsdWUoKSk7
CiAgICAgICAgIHNldElzU3R5bGVBdHRyaWJ1dGVWYWxpZCgpOwogICAgICAgICBzZXROZWVkc1N0
eWxlUmVjYWxjKCk7CiAgICAgICAgIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkSW52YWxp
ZGF0ZVN0eWxlQXR0cihkb2N1bWVudCgpLCB0aGlzKTsKQEAgLTExNSwyMSArMTIwLDIxIEBAIHZv
aWQgU3R5bGVkRWxlbWVudDo6aW5saW5lU3R5bGVDaGFuZ2VkKCkKICAgICAKIGJvb2wgU3R5bGVk
RWxlbWVudDo6c2V0SW5saW5lU3R5bGVQcm9wZXJ0eShpbnQgcHJvcGVydHlJRCwgaW50IGlkZW50
aWZpZXIsIGJvb2wgaW1wb3J0YW50KQogewotICAgIGVuc3VyZUlubGluZVN0eWxlRGVjbCgpLT5z
ZXRQcm9wZXJ0eShwcm9wZXJ0eUlELCBkb2N1bWVudCgpLT5jc3NWYWx1ZVBvb2woKS0+Y3JlYXRl
SWRlbnRpZmllclZhbHVlKGlkZW50aWZpZXIpLCBpbXBvcnRhbnQpOworICAgIGVuc3VyZUF0dHJp
YnV0ZURhdGEoKS0+ZW5zdXJlTXV0YWJsZUlubGluZVN0eWxlKHRoaXMpLT5zZXRQcm9wZXJ0eShw
cm9wZXJ0eUlELCBkb2N1bWVudCgpLT5jc3NWYWx1ZVBvb2woKS0+Y3JlYXRlSWRlbnRpZmllclZh
bHVlKGlkZW50aWZpZXIpLCBpbXBvcnRhbnQpOwogICAgIGlubGluZVN0eWxlQ2hhbmdlZCgpOwog
ICAgIHJldHVybiB0cnVlOwogfQogCiBib29sIFN0eWxlZEVsZW1lbnQ6OnNldElubGluZVN0eWxl
UHJvcGVydHkoaW50IHByb3BlcnR5SUQsIGRvdWJsZSB2YWx1ZSwgQ1NTUHJpbWl0aXZlVmFsdWU6
OlVuaXRUeXBlcyB1bml0LCBib29sIGltcG9ydGFudCkKIHsKLSAgICBlbnN1cmVJbmxpbmVTdHls
ZURlY2woKS0+c2V0UHJvcGVydHkocHJvcGVydHlJRCwgZG9jdW1lbnQoKS0+Y3NzVmFsdWVQb29s
KCktPmNyZWF0ZVZhbHVlKHZhbHVlLCB1bml0KSwgaW1wb3J0YW50KTsKKyAgICBlbnN1cmVBdHRy
aWJ1dGVEYXRhKCktPmVuc3VyZU11dGFibGVJbmxpbmVTdHlsZSh0aGlzKS0+c2V0UHJvcGVydHko
cHJvcGVydHlJRCwgZG9jdW1lbnQoKS0+Y3NzVmFsdWVQb29sKCktPmNyZWF0ZVZhbHVlKHZhbHVl
LCB1bml0KSwgaW1wb3J0YW50KTsKICAgICBpbmxpbmVTdHlsZUNoYW5nZWQoKTsKICAgICByZXR1
cm4gdHJ1ZTsKIH0KIAogYm9vbCBTdHlsZWRFbGVtZW50OjpzZXRJbmxpbmVTdHlsZVByb3BlcnR5
KGludCBwcm9wZXJ0eUlELCBjb25zdCBTdHJpbmcmIHZhbHVlLCBib29sIGltcG9ydGFudCkKIHsK
LSAgICBib29sIGNoYW5nZXMgPSBlbnN1cmVJbmxpbmVTdHlsZURlY2woKS0+c2V0UHJvcGVydHko
cHJvcGVydHlJRCwgdmFsdWUsIGltcG9ydGFudCwgZG9jdW1lbnQoKS0+ZWxlbWVudFNoZWV0KCkp
OworICAgIGJvb2wgY2hhbmdlcyA9IGVuc3VyZUF0dHJpYnV0ZURhdGEoKS0+ZW5zdXJlTXV0YWJs
ZUlubGluZVN0eWxlKHRoaXMpLT5zZXRQcm9wZXJ0eShwcm9wZXJ0eUlELCB2YWx1ZSwgaW1wb3J0
YW50LCBkb2N1bWVudCgpLT5lbGVtZW50U2hlZXQoKSk7CiAgICAgaWYgKGNoYW5nZXMpCiAgICAg
ICAgIGlubGluZVN0eWxlQ2hhbmdlZCgpOwogICAgIHJldHVybiBjaGFuZ2VzOwpAQCAtMTM3LDcg
KzE0MiwxMCBAQCBib29sIFN0eWxlZEVsZW1lbnQ6OnNldElubGluZVN0eWxlUHJvcGVyCiAKIGJv
b2wgU3R5bGVkRWxlbWVudDo6cmVtb3ZlSW5saW5lU3R5bGVQcm9wZXJ0eShpbnQgcHJvcGVydHlJ
RCkKIHsKLSAgICBib29sIGNoYW5nZXMgPSBlbnN1cmVJbmxpbmVTdHlsZURlY2woKS0+cmVtb3Zl
UHJvcGVydHkocHJvcGVydHlJRCk7CisgICAgU3R5bGVQcm9wZXJ0eVNldCogaW5saW5lU3R5bGUg
PSBhdHRyaWJ1dGVEYXRhKCkgPyBhdHRyaWJ1dGVEYXRhKCktPmlubGluZVN0eWxlKCkgOiAwOwor
ICAgIGlmICghaW5saW5lU3R5bGUpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBib29sIGNo
YW5nZXMgPSBpbmxpbmVTdHlsZS0+cmVtb3ZlUHJvcGVydHkocHJvcGVydHlJRCk7CiAgICAgaWYg
KGNoYW5nZXMpCiAgICAgICAgIGlubGluZVN0eWxlQ2hhbmdlZCgpOwogICAgIHJldHVybiBjaGFu
Z2VzOwpAQCAtMTQ1LDcgKzE1Myw3IEBAIGJvb2wgU3R5bGVkRWxlbWVudDo6cmVtb3ZlSW5saW5l
U3R5bGVQcm8KIAogdm9pZCBTdHlsZWRFbGVtZW50OjphZGRTdWJyZXNvdXJjZUF0dHJpYnV0ZVVS
THMoTGlzdEhhc2hTZXQ8S1VSTD4mIHVybHMpIGNvbnN0CiB7Ci0gICAgaWYgKFN0eWxlUHJvcGVy
dHlTZXQqIGlubGluZVN0eWxlID0gaW5saW5lU3R5bGVEZWNsKCkpCisgICAgaWYgKFN0eWxlUHJv
cGVydHlTZXQqIGlubGluZVN0eWxlID0gYXR0cmlidXRlRGF0YSgpID8gYXR0cmlidXRlRGF0YSgp
LT5pbmxpbmVTdHlsZSgpIDogMCkKICAgICAgICAgaW5saW5lU3R5bGUtPmFkZFN1YnJlc291cmNl
U3R5bGVVUkxzKHVybHMsIGRvY3VtZW50KCktPmVsZW1lbnRTaGVldCgpKTsKIH0KIApJbmRleDog
U291cmNlL1dlYkNvcmUvZG9tL1N0eWxlZEVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9kb20vU3R5bGVkRWxlbWVudC5oCShyZXZpc2lvbiAxMDk4MTQpCisrKyBTb3VyY2Uv
V2ViQ29yZS9kb20vU3R5bGVkRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOSw4ICszOSw4
IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIFN0eWxlUHJvcGVydHlTZXQqIGFkZGl0aW9uYWxBdHRy
aWJ1dGVTdHlsZSgpIHsgcmV0dXJuIDA7IH0KICAgICB2b2lkIGludmFsaWRhdGVTdHlsZUF0dHJp
YnV0ZSgpOwogCi0gICAgU3R5bGVQcm9wZXJ0eVNldCogaW5saW5lU3R5bGVEZWNsKCkgY29uc3Qg
eyByZXR1cm4gYXR0cmlidXRlRGF0YSgpID8gYXR0cmlidXRlRGF0YSgpLT5pbmxpbmVTdHlsZURl
Y2woKSA6IDA7IH0KLSAgICBTdHlsZVByb3BlcnR5U2V0KiBlbnN1cmVJbmxpbmVTdHlsZURlY2wo
KSB7IHJldHVybiBlbnN1cmVBdHRyaWJ1dGVEYXRhKCktPmVuc3VyZUlubGluZVN0eWxlRGVjbCh0
aGlzKTsgfQorICAgIGNvbnN0IFN0eWxlUHJvcGVydHlTZXQqIGlubGluZVN0eWxlKCkgY29uc3Qg
eyByZXR1cm4gYXR0cmlidXRlRGF0YSgpID8gYXR0cmlidXRlRGF0YSgpLT5pbmxpbmVTdHlsZSgp
IDogMDsgfQorICAgIGNvbnN0IFN0eWxlUHJvcGVydHlTZXQqIGVuc3VyZUlubGluZVN0eWxlKCkg
eyByZXR1cm4gZW5zdXJlQXR0cmlidXRlRGF0YSgpLT5lbnN1cmVJbmxpbmVTdHlsZSh0aGlzKTsg
fQogICAgIAogICAgIC8vIFVubGlrZSBTdHlsZVByb3BlcnR5U2V0IHNldHRlcnMsIHRoZXNlIGlt
cGxlbWVudCBpbnZhbGlkYXRpb24uCiAgICAgYm9vbCBzZXRJbmxpbmVTdHlsZVByb3BlcnR5KGlu
dCBwcm9wZXJ0eUlELCBpbnQgaWRlbnRpZmllciwgYm9vbCBpbXBvcnRhbnQgPSBmYWxzZSk7CkBA
IC00OCw3ICs0OCw3IEBAIHB1YmxpYzoKICAgICBib29sIHNldElubGluZVN0eWxlUHJvcGVydHko
aW50IHByb3BlcnR5SUQsIGNvbnN0IFN0cmluZyYgdmFsdWUsIGJvb2wgaW1wb3J0YW50ID0gZmFs
c2UpOwogICAgIGJvb2wgcmVtb3ZlSW5saW5lU3R5bGVQcm9wZXJ0eShpbnQgcHJvcGVydHlJRCk7
CiAgICAgCi0gICAgdmlydHVhbCBDU1NTdHlsZURlY2xhcmF0aW9uKiBzdHlsZSgpIE9WRVJSSURF
IHsgcmV0dXJuIGVuc3VyZUlubGluZVN0eWxlRGVjbCgpLT5lbnN1cmVJbmxpbmVDU1NTdHlsZURl
Y2xhcmF0aW9uKHRoaXMpOyB9CisgICAgdmlydHVhbCBDU1NTdHlsZURlY2xhcmF0aW9uKiBzdHls
ZSgpIE9WRVJSSURFOwogCiAgICAgU3R5bGVQcm9wZXJ0eVNldCogYXR0cmlidXRlU3R5bGUoKTsK
IApAQCAtODQsMTAgKzg0LDEwIEBAIHByaXZhdGU6CiAKICAgICB2b2lkIHVwZGF0ZUF0dHJpYnV0
ZVN0eWxlKCk7CiAKLSAgICB2b2lkIGRlc3Ryb3lJbmxpbmVTdHlsZURlY2woKQorICAgIHZvaWQg
ZGVzdHJveUlubGluZVN0eWxlKCkKICAgICB7CiAgICAgICAgIGlmIChhdHRyaWJ1dGVEYXRhKCkp
Ci0gICAgICAgICAgICBhdHRyaWJ1dGVEYXRhKCktPmRlc3Ryb3lJbmxpbmVTdHlsZURlY2wodGhp
cyk7CisgICAgICAgICAgICBhdHRyaWJ1dGVEYXRhKCktPmRlc3Ryb3lJbmxpbmVTdHlsZSh0aGlz
KTsKICAgICB9CiB9OwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0FwcGx5U3R5bGVD
b21tYW5kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0FwcGx5U3R5
bGVDb21tYW5kLmNwcAkocmV2aXNpb24gMTA5ODE0KQorKysgU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9BcHBseVN0eWxlQ29tbWFuZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgwLDcgKzgwLDcgQEAg
c3RhdGljIGJvb2wgaGFzTm9BdHRyaWJ1dGVPck9ubHlTdHlsZUF0dAogICAgIGlmIChlbGVtZW50
LT5nZXRBdHRyaWJ1dGUoY2xhc3NBdHRyKSA9PSBzdHlsZVNwYW5DbGFzc1N0cmluZygpKQogICAg
ICAgICBtYXRjaGVkQXR0cmlidXRlcysrOwogICAgIGlmIChlbGVtZW50LT5oYXNBdHRyaWJ1dGUo
c3R5bGVBdHRyKSAmJiAoc2hvdWxkU3R5bGVBdHRyaWJ1dGVCZUVtcHR5ID09IEFsbG93Tm9uRW1w
dHlTdHlsZUF0dHJpYnV0ZQotICAgICAgICB8fCAhZWxlbWVudC0+aW5saW5lU3R5bGVEZWNsKCkg
fHwgZWxlbWVudC0+aW5saW5lU3R5bGVEZWNsKCktPmlzRW1wdHkoKSkpCisgICAgICAgIHx8ICFl
bGVtZW50LT5pbmxpbmVTdHlsZSgpIHx8IGVsZW1lbnQtPmlubGluZVN0eWxlKCktPmlzRW1wdHko
KSkpCiAgICAgICAgIG1hdGNoZWRBdHRyaWJ1dGVzKys7CiAKICAgICBBU1NFUlQobWF0Y2hlZEF0
dHJpYnV0ZXMgPD0gZWxlbWVudC0+YXR0cmlidXRlQ291bnQoKSk7CkBAIC0zODIsNyArMzgyLDcg
QEAgdm9pZCBBcHBseVN0eWxlQ29tbWFuZDo6YXBwbHlSZWxhdGl2ZUZvbgogICAgICAgICB9CiAg
ICAgICAgIGxhc3RTdHlsZWROb2RlID0gbm9kZTsKIAotICAgICAgICBTdHlsZVByb3BlcnR5U2V0
KiBpbmxpbmVTdHlsZURlY2wgPSBlbGVtZW50LT5lbnN1cmVJbmxpbmVTdHlsZURlY2woKTsKKyAg
ICAgICAgUmVmUHRyPFN0eWxlUHJvcGVydHlTZXQ+IGlubGluZVN0eWxlRGVjbCA9IGVsZW1lbnQt
PmVuc3VyZUlubGluZVN0eWxlKCktPmNvcHkoKTsKICAgICAgICAgZmxvYXQgY3VycmVudEZvbnRT
aXplID0gY29tcHV0ZWRGb250U2l6ZShub2RlKTsKICAgICAgICAgZmxvYXQgZGVzaXJlZEZvbnRT
aXplID0gbWF4KE1pbmltdW1Gb250U2l6ZSwgc3RhcnRpbmdGb250U2l6ZXMuZ2V0KG5vZGUpICsg
c3R5bGUtPmZvbnRTaXplRGVsdGEoKSk7CiAgICAgICAgIFJlZlB0cjxDU1NWYWx1ZT4gdmFsdWUg
PSBpbmxpbmVTdHlsZURlY2wtPmdldFByb3BlcnR5Q1NTVmFsdWUoQ1NTUHJvcGVydHlGb250U2l6
ZSk7CkBAIC01MDksNyArNTA5LDcgQEAgdm9pZCBBcHBseVN0eWxlQ29tbWFuZDo6cmVtb3ZlRW1i
ZWRkaW5nVQogICAgICAgICAgICAgLy8gb3RoZXIgYXR0cmlidXRlcywgbGlrZSB3ZSAoc2hvdWxk
KSBkbyB3aXRoIEIgYW5kIEkgZWxlbWVudHMuCiAgICAgICAgICAgICByZW1vdmVOb2RlQXR0cmli
dXRlKGVsZW1lbnQsIGRpckF0dHIpOwogICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgUmVm
UHRyPFN0eWxlUHJvcGVydHlTZXQ+IGlubGluZVN0eWxlID0gZWxlbWVudC0+ZW5zdXJlSW5saW5l
U3R5bGVEZWNsKCktPmNvcHkoKTsKKyAgICAgICAgICAgIFJlZlB0cjxTdHlsZVByb3BlcnR5U2V0
PiBpbmxpbmVTdHlsZSA9IGVsZW1lbnQtPmVuc3VyZUlubGluZVN0eWxlKCktPmNvcHkoKTsKICAg
ICAgICAgICAgIGlubGluZVN0eWxlLT5zZXRQcm9wZXJ0eShDU1NQcm9wZXJ0eVVuaWNvZGVCaWRp
LCBDU1NWYWx1ZU5vcm1hbCk7CiAgICAgICAgICAgICBpbmxpbmVTdHlsZS0+cmVtb3ZlUHJvcGVy
dHkoQ1NTUHJvcGVydHlEaXJlY3Rpb24pOwogICAgICAgICAgICAgc2V0Tm9kZUF0dHJpYnV0ZShl
bGVtZW50LCBzdHlsZUF0dHIsIGlubGluZVN0eWxlLT5hc1RleHQoKSk7CkBAIC03MjMsNyArNzIz
LDcgQEAgdm9pZCBBcHBseVN0eWxlQ29tbWFuZDo6YXBwbHlJbmxpbmVTdHlsZQogICAgICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICAgICAgLy8gQWRkIHRvIHRoaXMgZWxlbWVudCdzIGlubGlu
ZSBzdHlsZSBhbmQgc2tpcCBvdmVyIGl0cyBjb250ZW50cy4KICAgICAgICAgICAgIEhUTUxFbGVt
ZW50KiBlbGVtZW50ID0gdG9IVE1MRWxlbWVudChub2RlKTsKLSAgICAgICAgICAgIFJlZlB0cjxT
dHlsZVByb3BlcnR5U2V0PiBpbmxpbmVTdHlsZSA9IGVsZW1lbnQtPmVuc3VyZUlubGluZVN0eWxl
RGVjbCgpLT5jb3B5KCk7CisgICAgICAgICAgICBSZWZQdHI8U3R5bGVQcm9wZXJ0eVNldD4gaW5s
aW5lU3R5bGUgPSBlbGVtZW50LT5lbnN1cmVJbmxpbmVTdHlsZSgpLT5jb3B5KCk7CiAgICAgICAg
ICAgICBpbmxpbmVTdHlsZS0+bWVyZ2Uoc3R5bGUtPnN0eWxlKCkpOwogICAgICAgICAgICAgc2V0
Tm9kZUF0dHJpYnV0ZShlbGVtZW50LCBzdHlsZUF0dHIsIGlubGluZVN0eWxlLT5hc1RleHQoKSk7
CiAgICAgICAgICAgICBuZXh0ID0gbm9kZS0+dHJhdmVyc2VOZXh0U2libGluZygpOwpAQCAtODg4
LDE0ICs4ODgsMTIgQEAgYm9vbCBBcHBseVN0eWxlQ29tbWFuZDo6cmVtb3ZlQ1NTU3R5bGUoRQog
ICAgIGlmICghc3R5bGUtPmNvbmZsaWN0c1dpdGhJbmxpbmVTdHlsZU9mRWxlbWVudChlbGVtZW50
LCBleHRyYWN0ZWRTdHlsZSwgcHJvcGVydGllcykpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAot
ICAgIFN0eWxlUHJvcGVydHlTZXQqIGlubGluZVN0eWxlID0gZWxlbWVudC0+aW5saW5lU3R5bGVE
ZWNsKCk7Ci0gICAgQVNTRVJUKGlubGluZVN0eWxlKTsKICAgICAvLyBGSVhNRTogV2Ugc2hvdWxk
IHVzZSBhIG1hc3MtcmVtb3ZhbCBmdW5jdGlvbiBoZXJlIGJ1dCB3ZSBkb24ndCBoYXZlIGFuIHVu
ZG9hYmxlIG9uZSB5ZXQuCiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBwcm9wZXJ0aWVzLnNp
emUoKTsgaSsrKQogICAgICAgICByZW1vdmVDU1NQcm9wZXJ0eShlbGVtZW50LCBwcm9wZXJ0aWVz
W2ldKTsKIAogICAgIC8vIE5vIG5lZWQgdG8gc2VyaWFsaXplIDxmb28gc3R5bGU9IiI+IGlmIHdl
IGp1c3QgcmVtb3ZlZCB0aGUgbGFzdCBjc3MgcHJvcGVydHkKLSAgICBpZiAoaW5saW5lU3R5bGUt
PmlzRW1wdHkoKSkKKyAgICBpZiAoZWxlbWVudC0+aW5saW5lU3R5bGUoKS0+aXNFbXB0eSgpKQog
ICAgICAgICByZW1vdmVOb2RlQXR0cmlidXRlKGVsZW1lbnQsIHN0eWxlQXR0cik7CiAKICAgICBp
ZiAoaXNTcGFuV2l0aG91dEF0dHJpYnV0ZXNPclVuc3R5bGVkU3R5bGVTcGFuKGVsZW1lbnQpKQpA
QCAtOTMyLDcgKzkzMCw3IEBAIHZvaWQgQXBwbHlTdHlsZUNvbW1hbmQ6OmFwcGx5SW5saW5lU3R5
bGUKICAgICAgICAgcmV0dXJuOwogCiAgICAgUmVmUHRyPEVkaXRpbmdTdHlsZT4gbmV3SW5saW5l
U3R5bGUgPSBzdHlsZTsKLSAgICBpZiAobm9kZS0+aXNIVE1MRWxlbWVudCgpICYmIHRvSFRNTEVs
ZW1lbnQobm9kZSktPmlubGluZVN0eWxlRGVjbCgpKSB7CisgICAgaWYgKG5vZGUtPmlzSFRNTEVs
ZW1lbnQoKSAmJiB0b0hUTUxFbGVtZW50KG5vZGUpLT5pbmxpbmVTdHlsZSgpKSB7CiAgICAgICAg
IG5ld0lubGluZVN0eWxlID0gc3R5bGUtPmNvcHkoKTsKICAgICAgICAgbmV3SW5saW5lU3R5bGUt
Pm1lcmdlSW5saW5lU3R5bGVPZkVsZW1lbnQodG9IVE1MRWxlbWVudChub2RlKSwgRWRpdGluZ1N0
eWxlOjpPdmVycmlkZVZhbHVlcyk7CiAgICAgfQpAQCAtMTMwOCw3ICsxMzA2LDcgQEAgdm9pZCBB
cHBseVN0eWxlQ29tbWFuZDo6YWRkQmxvY2tTdHlsZShjbwogICAgICAgICByZXR1cm47CiAgICAg
ICAgIAogICAgIFN0cmluZyBjc3NUZXh0ID0gc3R5bGVDaGFuZ2UuY3NzU3R5bGUoKTsKLSAgICBp
ZiAoU3R5bGVQcm9wZXJ0eVNldCogZGVjbCA9IGJsb2NrLT5pbmxpbmVTdHlsZURlY2woKSkKKyAg
ICBpZiAoY29uc3QgU3R5bGVQcm9wZXJ0eVNldCogZGVjbCA9IGJsb2NrLT5pbmxpbmVTdHlsZSgp
KQogICAgICAgICBjc3NUZXh0ICs9IGRlY2wtPmFzVGV4dCgpOwogICAgIHNldE5vZGVBdHRyaWJ1
dGUoYmxvY2ssIHN0eWxlQXR0ciwgY3NzVGV4dCk7CiB9CkBAIC0xMzczLDcgKzEzNzEsNyBAQCB2
b2lkIEFwcGx5U3R5bGVDb21tYW5kOjphZGRJbmxpbmVTdHlsZUlmCiAKICAgICBpZiAoc3R5bGVD
aGFuZ2UuY3NzU3R5bGUoKS5sZW5ndGgoKSkgewogICAgICAgICBpZiAoc3R5bGVDb250YWluZXIp
IHsKLSAgICAgICAgICAgIGlmIChTdHlsZVByb3BlcnR5U2V0KiBleGlzdGluZ1N0eWxlID0gc3R5
bGVDb250YWluZXItPmlubGluZVN0eWxlRGVjbCgpKQorICAgICAgICAgICAgaWYgKGNvbnN0IFN0
eWxlUHJvcGVydHlTZXQqIGV4aXN0aW5nU3R5bGUgPSBzdHlsZUNvbnRhaW5lci0+aW5saW5lU3R5
bGUoKSkKICAgICAgICAgICAgICAgICBzZXROb2RlQXR0cmlidXRlKHN0eWxlQ29udGFpbmVyLCBz
dHlsZUF0dHIsIGV4aXN0aW5nU3R5bGUtPmFzVGV4dCgpICsgc3R5bGVDaGFuZ2UuY3NzU3R5bGUo
KSk7CiAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgc2V0Tm9kZUF0dHJpYnV0ZShz
dHlsZUNvbnRhaW5lciwgc3R5bGVBdHRyLCBzdHlsZUNoYW5nZS5jc3NTdHlsZSgpKTsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdGluZ1N0eWxlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRpbmdTdHlsZS5jcHAJKHJldmlzaW9uIDEwOTgxNCkK
KysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdGluZ1N0eWxlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTI1LDcgKzEyNSw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIH5IVE1MRWxlbWVudEVx
dWl2YWxlbnQoKSB7IH0KICAgICB2aXJ0dWFsIGJvb2wgbWF0Y2hlcyhjb25zdCBFbGVtZW50KiBl
bGVtZW50KSBjb25zdCB7IHJldHVybiAhbV90YWdOYW1lIHx8IGVsZW1lbnQtPmhhc1RhZ05hbWUo
Km1fdGFnTmFtZSk7IH0KICAgICB2aXJ0dWFsIGJvb2wgaGFzQXR0cmlidXRlKCkgY29uc3QgeyBy
ZXR1cm4gZmFsc2U7IH0KLSAgICB2aXJ0dWFsIGJvb2wgcHJvcGVydHlFeGlzdHNJblN0eWxlKFN0
eWxlUHJvcGVydHlTZXQqIHN0eWxlKSBjb25zdCB7IHJldHVybiBzdHlsZSAmJiBzdHlsZS0+Z2V0
UHJvcGVydHlDU1NWYWx1ZShtX3Byb3BlcnR5SUQpOyB9CisgICAgdmlydHVhbCBib29sIHByb3Bl
cnR5RXhpc3RzSW5TdHlsZShjb25zdCBTdHlsZVByb3BlcnR5U2V0KiBzdHlsZSkgY29uc3QgeyBy
ZXR1cm4gc3R5bGUgJiYgc3R5bGUtPmdldFByb3BlcnR5Q1NTVmFsdWUobV9wcm9wZXJ0eUlEKTsg
fQogICAgIHZpcnR1YWwgYm9vbCB2YWx1ZUlzUHJlc2VudEluU3R5bGUoRWxlbWVudCosIFN0eWxl
UHJvcGVydHlTZXQqKSBjb25zdDsKICAgICB2aXJ0dWFsIHZvaWQgYWRkVG9TdHlsZShFbGVtZW50
KiwgRWRpdGluZ1N0eWxlKikgY29uc3Q7CiAKQEAgLTE3NSw3ICsxNzUsNyBAQCBwdWJsaWM6CiAg
ICAgewogICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3IEhUTUxUZXh0RGVjb3JhdGlvbkVxdWl2
YWxlbnQocHJpbWl0aXZlVmFsdWUsIHRhZ05hbWUpKTsKICAgICB9Ci0gICAgdmlydHVhbCBib29s
IHByb3BlcnR5RXhpc3RzSW5TdHlsZShTdHlsZVByb3BlcnR5U2V0KikgY29uc3Q7CisgICAgdmly
dHVhbCBib29sIHByb3BlcnR5RXhpc3RzSW5TdHlsZShjb25zdCBTdHlsZVByb3BlcnR5U2V0Kikg
Y29uc3Q7CiAgICAgdmlydHVhbCBib29sIHZhbHVlSXNQcmVzZW50SW5TdHlsZShFbGVtZW50Kiwg
U3R5bGVQcm9wZXJ0eVNldCopIGNvbnN0OwogCiBwcml2YXRlOgpAQCAtMTg4LDcgKzE4OCw3IEBA
IEhUTUxUZXh0RGVjb3JhdGlvbkVxdWl2YWxlbnQ6OkhUTUxUZXh0RGUKIHsKIH0KIAotYm9vbCBI
VE1MVGV4dERlY29yYXRpb25FcXVpdmFsZW50Ojpwcm9wZXJ0eUV4aXN0c0luU3R5bGUoU3R5bGVQ
cm9wZXJ0eVNldCogc3R5bGUpIGNvbnN0Citib29sIEhUTUxUZXh0RGVjb3JhdGlvbkVxdWl2YWxl
bnQ6OnByb3BlcnR5RXhpc3RzSW5TdHlsZShjb25zdCBTdHlsZVByb3BlcnR5U2V0KiBzdHlsZSkg
Y29uc3QKIHsKICAgICByZXR1cm4gc3R5bGUtPmdldFByb3BlcnR5Q1NTVmFsdWUoQ1NTUHJvcGVy
dHlXZWJraXRUZXh0RGVjb3JhdGlvbnNJbkVmZmVjdCkgfHwgc3R5bGUtPmdldFByb3BlcnR5Q1NT
VmFsdWUoQ1NTUHJvcGVydHlUZXh0RGVjb3JhdGlvbik7CiB9CkBAIC02NjQsNyArNjY0LDcgQEAg
Ym9vbCBFZGl0aW5nU3R5bGU6OmNvbmZsaWN0c1dpdGhJbmxpbmVTdAogICAgIEFTU0VSVChlbGVt
ZW50KTsKICAgICBBU1NFUlQoIWNvbmZsaWN0aW5nUHJvcGVydGllcyB8fCBjb25mbGljdGluZ1By
b3BlcnRpZXMtPmlzRW1wdHkoKSk7CiAKLSAgICBTdHlsZVByb3BlcnR5U2V0KiBpbmxpbmVTdHls
ZSA9IGVsZW1lbnQtPmlubGluZVN0eWxlRGVjbCgpOworICAgIGNvbnN0IFN0eWxlUHJvcGVydHlT
ZXQqIGlubGluZVN0eWxlID0gZWxlbWVudC0+aW5saW5lU3R5bGUoKTsKICAgICBpZiAoIW1fbXV0
YWJsZVN0eWxlIHx8ICFpbmxpbmVTdHlsZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCkBAIC04
NTAsNyArODUwLDcgQEAgYm9vbCBFZGl0aW5nU3R5bGU6OmVsZW1lbnRJc1N0eWxlZFNwYW5Pcgog
ICAgICAgICBtYXRjaGVkQXR0cmlidXRlcysrOwogCiAgICAgaWYgKGVsZW1lbnQtPmhhc0F0dHJp
YnV0ZShIVE1MTmFtZXM6OnN0eWxlQXR0cikpIHsKLSAgICAgICAgaWYgKFN0eWxlUHJvcGVydHlT
ZXQqIHN0eWxlID0gZWxlbWVudC0+aW5saW5lU3R5bGVEZWNsKCkpIHsKKyAgICAgICAgaWYgKGNv
bnN0IFN0eWxlUHJvcGVydHlTZXQqIHN0eWxlID0gZWxlbWVudC0+aW5saW5lU3R5bGUoKSkgewog
ICAgICAgICAgICAgdW5zaWduZWQgcHJvcGVydHlDb3VudCA9IHN0eWxlLT5wcm9wZXJ0eUNvdW50
KCk7CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcHJvcGVydHlDb3VudDsg
KytpKSB7CiAgICAgICAgICAgICAgICAgaWYgKCFpc0VkaXRpbmdQcm9wZXJ0eShzdHlsZS0+cHJv
cGVydHlBdChpKS5pZCgpKSkKQEAgLTkxMiwxOCArOTEyLDE4IEBAIHZvaWQgRWRpdGluZ1N0eWxl
OjptZXJnZVR5cGluZ1N0eWxlKERvY3UKIHZvaWQgRWRpdGluZ1N0eWxlOjptZXJnZUlubGluZVN0
eWxlT2ZFbGVtZW50KFN0eWxlZEVsZW1lbnQqIGVsZW1lbnQsIENTU1Byb3BlcnR5T3ZlcnJpZGVN
b2RlIG1vZGUsIFByb3BlcnRpZXNUb0luY2x1ZGUgcHJvcGVydGllc1RvSW5jbHVkZSkKIHsKICAg
ICBBU1NFUlQoZWxlbWVudCk7Ci0gICAgaWYgKCFlbGVtZW50LT5pbmxpbmVTdHlsZURlY2woKSkK
KyAgICBpZiAoIWVsZW1lbnQtPmlubGluZVN0eWxlKCkpCiAgICAgICAgIHJldHVybjsKIAogICAg
IHN3aXRjaCAocHJvcGVydGllc1RvSW5jbHVkZSkgewogICAgIGNhc2UgQWxsUHJvcGVydGllczoK
LSAgICAgICAgbWVyZ2VTdHlsZShlbGVtZW50LT5pbmxpbmVTdHlsZURlY2woKSwgbW9kZSk7Cisg
ICAgICAgIG1lcmdlU3R5bGUoZWxlbWVudC0+aW5saW5lU3R5bGUoKSwgbW9kZSk7CiAgICAgICAg
IHJldHVybjsKICAgICBjYXNlIE9ubHlFZGl0aW5nSW5oZXJpdGFibGVQcm9wZXJ0aWVzOgotICAg
ICAgICBtZXJnZVN0eWxlKGNvcHlFZGl0aW5nUHJvcGVydGllcyhlbGVtZW50LT5pbmxpbmVTdHls
ZURlY2woKSwgT25seUluaGVyaXRhYmxlRWRpdGluZ1Byb3BlcnRpZXMpLmdldCgpLCBtb2RlKTsK
KyAgICAgICAgbWVyZ2VTdHlsZShjb3B5RWRpdGluZ1Byb3BlcnRpZXMoZWxlbWVudC0+aW5saW5l
U3R5bGUoKSwgT25seUluaGVyaXRhYmxlRWRpdGluZ1Byb3BlcnRpZXMpLmdldCgpLCBtb2RlKTsK
ICAgICAgICAgcmV0dXJuOwogICAgIGNhc2UgRWRpdGluZ1Byb3BlcnRpZXNJbkVmZmVjdDoKLSAg
ICAgICAgbWVyZ2VTdHlsZShjb3B5RWRpdGluZ1Byb3BlcnRpZXMoZWxlbWVudC0+aW5saW5lU3R5
bGVEZWNsKCksIEFsbEVkaXRpbmdQcm9wZXJ0aWVzKS5nZXQoKSwgbW9kZSk7CisgICAgICAgIG1l
cmdlU3R5bGUoY29weUVkaXRpbmdQcm9wZXJ0aWVzKGVsZW1lbnQtPmlubGluZVN0eWxlKCksIEFs
bEVkaXRpbmdQcm9wZXJ0aWVzKS5nZXQoKSwgbW9kZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9
CiB9CkBAIC05MzEsNyArOTMxLDcgQEAgdm9pZCBFZGl0aW5nU3R5bGU6Om1lcmdlSW5saW5lU3R5
bGVPZkVsZQogc3RhdGljIGlubGluZSBib29sIGVsZW1lbnRNYXRjaGVzQW5kUHJvcGVydHlJc05v
dEluSW5saW5lU3R5bGVEZWNsKGNvbnN0IEhUTUxFbGVtZW50RXF1aXZhbGVudCogZXF1aXZhbGVu
dCwgY29uc3QgU3R5bGVkRWxlbWVudCogZWxlbWVudCwKICAgICBFZGl0aW5nU3R5bGU6OkNTU1By
b3BlcnR5T3ZlcnJpZGVNb2RlIG1vZGUsIFN0eWxlUHJvcGVydHlTZXQqIHN0eWxlKQogewotICAg
IHJldHVybiBlcXVpdmFsZW50LT5tYXRjaGVzKGVsZW1lbnQpICYmICFlcXVpdmFsZW50LT5wcm9w
ZXJ0eUV4aXN0c0luU3R5bGUoZWxlbWVudC0+aW5saW5lU3R5bGVEZWNsKCkpCisgICAgcmV0dXJu
IGVxdWl2YWxlbnQtPm1hdGNoZXMoZWxlbWVudCkgJiYgIWVxdWl2YWxlbnQtPnByb3BlcnR5RXhp
c3RzSW5TdHlsZShlbGVtZW50LT5pbmxpbmVTdHlsZSgpKQogICAgICAgICAmJiAobW9kZSA9PSBF
ZGl0aW5nU3R5bGU6Ok92ZXJyaWRlVmFsdWVzIHx8ICFlcXVpdmFsZW50LT5wcm9wZXJ0eUV4aXN0
c0luU3R5bGUoc3R5bGUpKTsKIH0KIApAQCAtOTk3LDcgKzk5Nyw3IEBAIHN0YXRpYyB2b2lkIG1l
cmdlVGV4dERlY29yYXRpb25WYWx1ZXMoQ1MKICAgICAgICAgbWVyZ2VkVmFsdWUtPmFwcGVuZChs
aW5lVGhyb3VnaC5nZXQoKSk7CiB9CiAKLXZvaWQgRWRpdGluZ1N0eWxlOjptZXJnZVN0eWxlKFN0
eWxlUHJvcGVydHlTZXQqIHN0eWxlLCBDU1NQcm9wZXJ0eU92ZXJyaWRlTW9kZSBtb2RlKQordm9p
ZCBFZGl0aW5nU3R5bGU6Om1lcmdlU3R5bGUoY29uc3QgU3R5bGVQcm9wZXJ0eVNldCogc3R5bGUs
IENTU1Byb3BlcnR5T3ZlcnJpZGVNb2RlIG1vZGUpCiB7CiAgICAgaWYgKCFzdHlsZSkKICAgICAg
ICAgcmV0dXJuOwpJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0aW5nU3R5bGUuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRpbmdTdHlsZS5oCShyZXZp
c2lvbiAxMDk4MTQpCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRpbmdTdHlsZS5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xNjEsNyArMTYxLDcgQEAgcHJpdmF0ZToKICAgICBUcmlTdGF0ZSB0
cmlTdGF0ZU9mU3R5bGUoQ1NTU3R5bGVEZWNsYXJhdGlvbiogc3R5bGVUb0NvbXBhcmUsIFNob3Vs
ZElnbm9yZVRleHRPbmx5UHJvcGVydGllcykgY29uc3Q7CiAgICAgYm9vbCBjb25mbGljdHNXaXRo
SW5saW5lU3R5bGVPZkVsZW1lbnQoU3R5bGVkRWxlbWVudCosIEVkaXRpbmdTdHlsZSogZXh0cmFj
dGVkU3R5bGUsIFZlY3RvcjxDU1NQcm9wZXJ0eUlEPiogY29uZmxpY3RpbmdQcm9wZXJ0aWVzKSBj
b25zdDsKICAgICB2b2lkIG1lcmdlSW5saW5lQW5kSW1wbGljaXRTdHlsZU9mRWxlbWVudChTdHls
ZWRFbGVtZW50KiwgQ1NTUHJvcGVydHlPdmVycmlkZU1vZGUsIFByb3BlcnRpZXNUb0luY2x1ZGUp
OwotICAgIHZvaWQgbWVyZ2VTdHlsZShTdHlsZVByb3BlcnR5U2V0KiwgQ1NTUHJvcGVydHlPdmVy
cmlkZU1vZGUpOworICAgIHZvaWQgbWVyZ2VTdHlsZShjb25zdCBTdHlsZVByb3BlcnR5U2V0Kiwg
Q1NTUHJvcGVydHlPdmVycmlkZU1vZGUpOwogCiAgICAgUmVmUHRyPFN0eWxlUHJvcGVydHlTZXQ+
IG1fbXV0YWJsZVN0eWxlOwogICAgIGJvb2wgbV9zaG91bGRVc2VGaXhlZERlZmF1bHRGb250U2l6
ZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvUmVtb3ZlQ1NTUHJvcGVydHlDb21tYW5k
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1JlbW92ZUNTU1Byb3Bl
cnR5Q29tbWFuZC5jcHAJKHJldmlzaW9uIDEwOTgxNCkKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvUmVtb3ZlQ1NTUHJvcGVydHlDb21tYW5kLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDMsNyAr
NDMsNyBAQCBSZW1vdmVDU1NQcm9wZXJ0eUNvbW1hbmQ6OlJlbW92ZUNTU1Byb3BlCiAKIHZvaWQg
UmVtb3ZlQ1NTUHJvcGVydHlDb21tYW5kOjpkb0FwcGx5KCkKIHsKLSAgICBTdHlsZVByb3BlcnR5
U2V0KiBzdHlsZSA9IG1fZWxlbWVudC0+aW5saW5lU3R5bGVEZWNsKCk7CisgICAgY29uc3QgU3R5
bGVQcm9wZXJ0eVNldCogc3R5bGUgPSBtX2VsZW1lbnQtPmlubGluZVN0eWxlKCk7CiAgICAgbV9v
bGRWYWx1ZSA9IHN0eWxlLT5nZXRQcm9wZXJ0eVZhbHVlKG1fcHJvcGVydHkpOwogICAgIG1faW1w
b3J0YW50ID0gc3R5bGUtPnByb3BlcnR5SXNJbXBvcnRhbnQobV9wcm9wZXJ0eSk7CiAKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQu
Y3BwCShyZXZpc2lvbiAxMDk4MTQpCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1JlcGxhY2VT
ZWxlY3Rpb25Db21tYW5kLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDg0LDcgKzQ4NCw3IEBAIHZv
aWQgUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ6OnJlbW92ZVJlZHUKIAogICAgICAgICBTdHlsZWRF
bGVtZW50KiBlbGVtZW50ID0gc3RhdGljX2Nhc3Q8U3R5bGVkRWxlbWVudCo+KG5vZGUuZ2V0KCkp
OwogCi0gICAgICAgIFN0eWxlUHJvcGVydHlTZXQqIGlubGluZVN0eWxlID0gZWxlbWVudC0+aW5s
aW5lU3R5bGVEZWNsKCk7CisgICAgICAgIGNvbnN0IFN0eWxlUHJvcGVydHlTZXQqIGlubGluZVN0
eWxlID0gZWxlbWVudC0+aW5saW5lU3R5bGUoKTsKICAgICAgICAgUmVmUHRyPEVkaXRpbmdTdHls
ZT4gbmV3SW5saW5lU3R5bGUgPSBFZGl0aW5nU3R5bGU6OmNyZWF0ZShpbmxpbmVTdHlsZSk7CiAg
ICAgICAgIGlmIChpbmxpbmVTdHlsZSkgewogICAgICAgICAgICAgQ29udGFpbmVyTm9kZSogY29u
dGV4dCA9IGVsZW1lbnQtPnBhcmVudE5vZGUoKTsKQEAgLTcwMyw3ICs3MDMsNyBAQCB2b2lkIFJl
cGxhY2VTZWxlY3Rpb25Db21tYW5kOjpoYW5kbGVTdHlsCiAgICAgaWYgKCF3cmFwcGluZ1N0eWxl
U3BhbikKICAgICAgICAgcmV0dXJuOwogCi0gICAgUmVmUHRyPEVkaXRpbmdTdHlsZT4gc3R5bGUg
PSBFZGl0aW5nU3R5bGU6OmNyZWF0ZSh3cmFwcGluZ1N0eWxlU3Bhbi0+ZW5zdXJlSW5saW5lU3R5
bGVEZWNsKCkpOworICAgIFJlZlB0cjxFZGl0aW5nU3R5bGU+IHN0eWxlID0gRWRpdGluZ1N0eWxl
OjpjcmVhdGUod3JhcHBpbmdTdHlsZVNwYW4tPmVuc3VyZUlubGluZVN0eWxlKCkpOwogICAgIENv
bnRhaW5lck5vZGUqIGNvbnRleHQgPSB3cmFwcGluZ1N0eWxlU3Bhbi0+cGFyZW50Tm9kZSgpOwog
CiAgICAgLy8gSWYgTWFpbCB3cmFwcyB0aGUgZnJhZ21lbnQgd2l0aCBhIFBhc3RlIGFzIFF1b3Rh
dGlvbiBibG9ja3F1b3RlLCBvciBpZiB5b3UncmUgcGFzdGluZyBpbnRvIGEgcXVvdGVkIHJlZ2lv
biwKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFya3VwLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hcmt1cC5jcHAJKHJldmlzaW9uIDEwOTgxNCkKKysr
IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFya3VwLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEw
LDggKzMxMCw4IEBAIHZvaWQgU3R5bGVkTWFya3VwQWNjdW11bGF0b3I6OmFwcGVuZEVsZW0KICAg
ICAgICAgfSBlbHNlCiAgICAgICAgICAgICBuZXdJbmxpbmVTdHlsZSA9IEVkaXRpbmdTdHlsZTo6
Y3JlYXRlKCk7CiAKLSAgICAgICAgaWYgKGVsZW1lbnQtPmlzU3R5bGVkRWxlbWVudCgpICYmIHN0
YXRpY19jYXN0PFN0eWxlZEVsZW1lbnQqPihlbGVtZW50KS0+aW5saW5lU3R5bGVEZWNsKCkpCi0g
ICAgICAgICAgICBuZXdJbmxpbmVTdHlsZS0+b3ZlcnJpZGVXaXRoU3R5bGUoc3RhdGljX2Nhc3Q8
U3R5bGVkRWxlbWVudCo+KGVsZW1lbnQpLT5pbmxpbmVTdHlsZURlY2woKSk7CisgICAgICAgIGlm
IChlbGVtZW50LT5pc1N0eWxlZEVsZW1lbnQoKSAmJiBzdGF0aWNfY2FzdDxTdHlsZWRFbGVtZW50
Kj4oZWxlbWVudCktPmlubGluZVN0eWxlKCkpCisgICAgICAgICAgICBuZXdJbmxpbmVTdHlsZS0+
b3ZlcnJpZGVXaXRoU3R5bGUoc3RhdGljX2Nhc3Q8U3R5bGVkRWxlbWVudCo+KGVsZW1lbnQpLT5p
bmxpbmVTdHlsZSgpKTsKIAogICAgICAgICBpZiAoc2hvdWxkQW5ub3RhdGVPckZvcmNlSW5saW5l
KSB7CiAgICAgICAgICAgICBpZiAoc2hvdWxkQW5ub3RhdGUoKSkKQEAgLTQ5NSw3ICs0OTUsNyBA
QCBzdGF0aWMgUGFzc1JlZlB0cjxFZGl0aW5nU3R5bGU+IHN0eWxlRnJvCiAgICAgLy8gRklYTUU6
IEhhdmluZyB0byBjb25zdF9jYXN0IGhlcmUgaXMgdWdseSwgYnV0IGl0IGlzIHF1aXRlIGEgYml0
IG9mIHdvcmsgdG8gdW50YW5nbGUKICAgICAvLyB0aGUgbm9uLWNvbnN0LW5lc3Mgb2Ygc3R5bGVG
cm9tTWF0Y2hlZFJ1bGVzRm9yRWxlbWVudC4KICAgICBIVE1MRWxlbWVudCogZWxlbWVudCA9IGNv
bnN0X2Nhc3Q8SFRNTEVsZW1lbnQqPihzdGF0aWNfY2FzdDxjb25zdCBIVE1MRWxlbWVudCo+KG5v
ZGUpKTsKLSAgICBSZWZQdHI8RWRpdGluZ1N0eWxlPiBzdHlsZSA9IEVkaXRpbmdTdHlsZTo6Y3Jl
YXRlKGVsZW1lbnQtPmlubGluZVN0eWxlRGVjbCgpKTsKKyAgICBSZWZQdHI8RWRpdGluZ1N0eWxl
PiBzdHlsZSA9IEVkaXRpbmdTdHlsZTo6Y3JlYXRlKGVsZW1lbnQtPmlubGluZVN0eWxlKCkpOwog
ICAgIHN0eWxlLT5tZXJnZVN0eWxlRnJvbVJ1bGVzKGVsZW1lbnQpOwogICAgIHJldHVybiBzdHls
ZS5yZWxlYXNlKCk7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxFbGVtZW50LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxFbGVtZW50LmNwcAkocmV2
aXNpb24gMTA5ODE0KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRWxlbWVudC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTExMDYsMTIgKzExMDYsMTIgQEAgdm9pZCBTdHlsZWRFbGVtZW50Ojpj
b3B5Tm9uQXR0cmlidXRlUHJvcAogICAgIEFTU0VSVChzb3VyY2VFbGVtZW50LT5pc1N0eWxlZEVs
ZW1lbnQoKSk7CiAKICAgICBjb25zdCBTdHlsZWRFbGVtZW50KiBzb3VyY2UgPSBzdGF0aWNfY2Fz
dDxjb25zdCBTdHlsZWRFbGVtZW50Kj4oc291cmNlRWxlbWVudCk7Ci0gICAgaWYgKCFzb3VyY2Ut
PmlubGluZVN0eWxlRGVjbCgpKQorICAgIGlmICghc291cmNlLT5pbmxpbmVTdHlsZSgpKQogICAg
ICAgICByZXR1cm47CiAKLSAgICBTdHlsZVByb3BlcnR5U2V0KiBpbmxpbmVTdHlsZSA9IGVuc3Vy
ZUlubGluZVN0eWxlRGVjbCgpOwotICAgIGlubGluZVN0eWxlLT5jb3B5UHJvcGVydGllc0Zyb20o
KnNvdXJjZS0+aW5saW5lU3R5bGVEZWNsKCkpOwotICAgIGlubGluZVN0eWxlLT5zZXRTdHJpY3RQ
YXJzaW5nKHNvdXJjZS0+aW5saW5lU3R5bGVEZWNsKCktPnVzZVN0cmljdFBhcnNpbmcoKSk7Cisg
ICAgU3R5bGVQcm9wZXJ0eVNldCogaW5saW5lU3R5bGUgPSBlbnN1cmVBdHRyaWJ1dGVEYXRhKCkt
PmVuc3VyZU11dGFibGVJbmxpbmVTdHlsZSh0aGlzKTsKKyAgICBpbmxpbmVTdHlsZS0+Y29weVBy
b3BlcnRpZXNGcm9tKCpzb3VyY2UtPmlubGluZVN0eWxlKCkpOworICAgIGlubGluZVN0eWxlLT5z
ZXRTdHJpY3RQYXJzaW5nKHNvdXJjZS0+aW5saW5lU3R5bGUoKS0+dXNlU3RyaWN0UGFyc2luZygp
KTsKIAogICAgIHNldElzU3R5bGVBdHRyaWJ1dGVWYWxpZChzb3VyY2UtPmlzU3R5bGVBdHRyaWJ1
dGVWYWxpZCgpKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzU3R5
bGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1N0
eWxlLmNwcAkocmV2aXNpb24gMTA5ODE0KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMv
Q2FudmFzU3R5bGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02OSw3ICs2OSw3IEBAIFJHQkEzMiBj
dXJyZW50Q29sb3IoSFRNTENhbnZhc0VsZW1lbnQqIGMKICAgICBpZiAoIWNhbnZhcyB8fCAhY2Fu
dmFzLT5pbkRvY3VtZW50KCkpCiAgICAgICAgIHJldHVybiBDb2xvcjo6YmxhY2s7CiAgICAgUkdC
QTMyIHJnYmEgPSBDb2xvcjo6YmxhY2s7Ci0gICAgQ1NTUGFyc2VyOjpwYXJzZUNvbG9yKHJnYmEs
IGNhbnZhcy0+ZW5zdXJlSW5saW5lU3R5bGVEZWNsKCktPmdldFByb3BlcnR5VmFsdWUoQ1NTUHJv
cGVydHlDb2xvcikpOworICAgIENTU1BhcnNlcjo6cGFyc2VDb2xvcihyZ2JhLCBjYW52YXMtPmVu
c3VyZUlubGluZVN0eWxlKCktPmdldFByb3BlcnR5VmFsdWUoQ1NTUHJvcGVydHlDb2xvcikpOwog
ICAgIHJldHVybiByZ2JhOwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2VTZXJp
YWxpemVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2VTZXJpYWxp
emVyLmNwcAkocmV2aXNpb24gMTA5ODE0KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlU2Vy
aWFsaXplci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyOCw3ICsyMjgsNyBAQCB2b2lkIFBhZ2VT
ZXJpYWxpemVyOjpzZXJpYWxpemVGcmFtZShGcmFtCiAgICAgICAgIEVsZW1lbnQqIGVsZW1lbnQg
PSB0b0VsZW1lbnQobm9kZSk7CiAgICAgICAgIC8vIFdlIGhhdmUgdG8gcHJvY2VzcyBpbi1saW5l
IHN0eWxlIGFzIGl0IG1pZ2h0IGNvbnRhaW4gc29tZSByZXNvdXJjZXMgKHR5cGljYWxseSBiYWNr
Z3JvdW5kIGltYWdlcykuCiAgICAgICAgIGlmIChlbGVtZW50LT5pc1N0eWxlZEVsZW1lbnQoKSkK
LSAgICAgICAgICAgIHJldHJpZXZlUmVzb3VyY2VzRm9yUHJvcGVydGllcyhzdGF0aWNfY2FzdDxT
dHlsZWRFbGVtZW50Kj4oZWxlbWVudCktPmlubGluZVN0eWxlRGVjbCgpLCBkb2N1bWVudCk7Cisg
ICAgICAgICAgICByZXRyaWV2ZVJlc291cmNlc0ZvclByb3BlcnRpZXMoc3RhdGljX2Nhc3Q8U3R5
bGVkRWxlbWVudCo+KGVsZW1lbnQpLT5pbmxpbmVTdHlsZSgpLCBkb2N1bWVudCk7CiAKICAgICAg
ICAgaWYgKGVsZW1lbnQtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjppbWdUYWcpKSB7CiAgICAgICAg
ICAgICBIVE1MSW1hZ2VFbGVtZW50KiBpbWFnZUVsZW1lbnQgPSBzdGF0aWNfY2FzdDxIVE1MSW1h
Z2VFbGVtZW50Kj4oZWxlbWVudCk7CkBAIC0zMDgsNyArMzA4LDcgQEAgdm9pZCBQYWdlU2VyaWFs
aXplcjo6cmV0cmlldmVSZXNvdXJjZXNGbwogICAgIHJldHJpZXZlUmVzb3VyY2VzRm9yUHJvcGVy
dGllcyhydWxlLT5wcm9wZXJ0aWVzKCksIGRvY3VtZW50KTsKIH0KIAotdm9pZCBQYWdlU2VyaWFs
aXplcjo6cmV0cmlldmVSZXNvdXJjZXNGb3JQcm9wZXJ0aWVzKFN0eWxlUHJvcGVydHlTZXQqIHN0
eWxlRGVjbGFyYXRpb24sIERvY3VtZW50KiBkb2N1bWVudCkKK3ZvaWQgUGFnZVNlcmlhbGl6ZXI6
OnJldHJpZXZlUmVzb3VyY2VzRm9yUHJvcGVydGllcyhjb25zdCBTdHlsZVByb3BlcnR5U2V0KiBz
dHlsZURlY2xhcmF0aW9uLCBEb2N1bWVudCogZG9jdW1lbnQpCiB7CiAgICAgaWYgKCFzdHlsZURl
Y2xhcmF0aW9uKQogICAgICAgICByZXR1cm47CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL1Bh
Z2VTZXJpYWxpemVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlU2Vy
aWFsaXplci5oCShyZXZpc2lvbiAxMDk4MTQpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2VT
ZXJpYWxpemVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTc4LDcgKzc4LDcgQEAgcHJpdmF0ZToKICAg
ICB2b2lkIHNlcmlhbGl6ZUNTU1N0eWxlU2hlZXQoQ1NTU3R5bGVTaGVldCosIGNvbnN0IEtVUkwm
KTsKIAogICAgIHZvaWQgYWRkSW1hZ2VUb1Jlc291cmNlcyhDYWNoZWRJbWFnZSosIFJlbmRlck9i
amVjdCosIGNvbnN0IEtVUkwmKTsKLSAgICB2b2lkIHJldHJpZXZlUmVzb3VyY2VzRm9yUHJvcGVy
dGllcyhTdHlsZVByb3BlcnR5U2V0KiwgRG9jdW1lbnQqKTsKKyAgICB2b2lkIHJldHJpZXZlUmVz
b3VyY2VzRm9yUHJvcGVydGllcyhjb25zdCBTdHlsZVByb3BlcnR5U2V0KiwgRG9jdW1lbnQqKTsK
ICAgICB2b2lkIHJldHJpZXZlUmVzb3VyY2VzRm9yUnVsZShTdHlsZVJ1bGUqLCBEb2N1bWVudCop
OwogCiAgICAgVmVjdG9yPFJlc291cmNlPiogbV9yZXNvdXJjZXM7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyVHJlZUFzVGV4dC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRyZWVBc1RleHQuY3BwCShyZXZpc2lvbiAxMDk4MTQp
CisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVHJlZUFzVGV4dC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTE4Myw3ICsxODMsNyBAQCBzdGF0aWMgYm9vbCBpc0VtcHR5T3JVbnN0eWxl
ZEFwcGxlU3R5bGVTCiAgICAgaWYgKCFub2RlLT5oYXNDaGlsZE5vZGVzKCkpCiAgICAgICAgIHJl
dHVybiB0cnVlOwogCi0gICAgU3R5bGVQcm9wZXJ0eVNldCogaW5saW5lU3R5bGVEZWNsID0gZWxl
bS0+aW5saW5lU3R5bGVEZWNsKCk7CisgICAgY29uc3QgU3R5bGVQcm9wZXJ0eVNldCogaW5saW5l
U3R5bGVEZWNsID0gZWxlbS0+aW5saW5lU3R5bGUoKTsKICAgICByZXR1cm4gKCFpbmxpbmVTdHls
ZURlY2wgfHwgaW5saW5lU3R5bGVEZWNsLT5pc0VtcHR5KCkpOwogfQogCkluZGV4OiBTb3VyY2Uv
V2ViS2l0L3F0L0FwaS9xd2ViZWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktp
dC9xdC9BcGkvcXdlYmVsZW1lbnQuY3BwCShyZXZpc2lvbiAxMDk4MTQpCisrKyBTb3VyY2UvV2Vi
S2l0L3F0L0FwaS9xd2ViZWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg0NCw3ICs4NDQs
NyBAQCBRU3RyaW5nIFFXZWJFbGVtZW50OjpzdHlsZVByb3BlcnR5KGNvbnN0CiAgICAgaWYgKCFw
cm9wSUQpCiAgICAgICAgIHJldHVybiBRU3RyaW5nKCk7CiAKLSAgICBTdHlsZVByb3BlcnR5U2V0
KiBzdHlsZSA9IHN0YXRpY19jYXN0PFN0eWxlZEVsZW1lbnQqPihtX2VsZW1lbnQpLT5lbnN1cmVJ
bmxpbmVTdHlsZURlY2woKTsKKyAgICBTdHlsZVByb3BlcnR5U2V0KiBzdHlsZSA9IHN0YXRpY19j
YXN0PFN0eWxlZEVsZW1lbnQqPihtX2VsZW1lbnQpLT5lbnN1cmVJbmxpbmVTdHlsZSgpOwogCiAg
ICAgaWYgKHN0cmF0ZWd5ID09IElubGluZVN0eWxlKQogICAgICAgICByZXR1cm4gc3R5bGUtPmdl
dFByb3BlcnR5VmFsdWUocHJvcElEKTsKQEAgLTkwOSw3ICs5MDksNyBAQCB2b2lkIFFXZWJFbGVt
ZW50OjpzZXRTdHlsZVByb3BlcnR5KGNvbnN0CiAgICAgICAgIHJldHVybjsKIAogICAgIGludCBw
cm9wSUQgPSBjc3NQcm9wZXJ0eUlEKG5hbWUpOwotICAgIFN0eWxlUHJvcGVydHlTZXQqIHN0eWxl
ID0gc3RhdGljX2Nhc3Q8U3R5bGVkRWxlbWVudCo+KG1fZWxlbWVudCktPmVuc3VyZUlubGluZVN0
eWxlRGVjbCgpOworICAgIFN0eWxlUHJvcGVydHlTZXQqIHN0eWxlID0gc3RhdGljX2Nhc3Q8U3R5
bGVkRWxlbWVudCo+KG1fZWxlbWVudCktPmVuc3VyZUlubGluZVN0eWxlKCk7CiAgICAgaWYgKCFw
cm9wSUQgfHwgIXN0eWxlKQogICAgICAgICByZXR1cm47CiAK
</data>
<flag name="commit-queue"
          id="133650"
          type_id="3"
          status="-"
          setter="webkit-ews"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>130609</attachid>
            <date>2012-03-07 06:18:54 -0800</date>
            <delta_ts>2012-03-07 10:52:22 -0800</delta_ts>
            <desc>another qt build fix attempt</desc>
            <filename>cacheable-inline-style-5.patch</filename>
            <type>text/plain</type>
            <size>38389</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDExMDA0MykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEwMCBAQAorMjAxMi0wMy0wNyAgQW50dGkg
S29pdmlzdG8gIDxhbnR0aUBhcHBsZS5jb20+CisKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTgwMzcwCisgICAgICAgIFJlLWVuYWJsZSBtYXRjaGVkIGRl
Y2xhcmF0aW9uIGNhY2hpbmcgZm9yIGVsZW1lbnRzIHdpdGggYSBzdHlsZSBhdHRyaWJ1dGUKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBNYWtlIHRoZSBw
cm9wZXJ0eSBzZXQgZm9yIHN0eWxlIGF0dHJpYnV0ZSBpbW11dGFibGUgYXMgbG9uZyBhcyB0aGVy
ZSBpcyBubyBDU1NPTQorICAgICAgICB3cmFwcGVyIGZvciBpdC4gSWYgdGhlIHN0eWxlIGF0dHJp
YnV0ZSBjaGFuZ2VzIHdlIGNyZWF0ZSBhIG5ldyBwcm9wZXJ0eSBzZXQgaW5zdGVhZAorICAgICAg
ICBvZiByZWN5Y2xpbmcgdGhlIG9sZCBvbmUuIFRoaXMgd2F5IHRoZSBwcm9wZXJ0eSBzZXRzIGNh
biBiZSBtYWRlIGNhY2hlYWJsZSBhcyBsb25nCisgICAgICAgIGFzIHRoZXJlIGlzIG5vIENTU09N
IHdyYXBwZXIgdGhhdCB3b3VsZCBhbGxvdyB1bmNvbnRyb2xsZWQgbW9kaWZpY2F0aW9ucy4gQ29u
c3RydWN0aW5nCisgICAgICAgIHRoZSB3cmFwcGVyIGRpc2FibGVzIGNhY2hpbmcuCisgICAgICAg
IAorICAgICAgICBNYWRlIFN0eWxlZEVsZW1lbnQ6OmlubGluZVN0eWxlKCkgYW5kIFN0eWxlZEVs
ZW1lbnQ6OmVuc3VyZUlubGluZVN0eWxlKCkgcmV0dXJuIGEgY29uc3QKKyAgICAgICAgU3R5bGVQ
cm9wZXJ0eVNldCBzbyBtYWtpbmcgYWNjaWRlbnRhbCBtb2RpZmljYXRpb25zIGRpZmZpY3VsdC4g
QWxzbyBkcm9wcGVkICpEZWNsIGZyb20KKyAgICAgICAgdGhlIG5hbWVzLgorICAgICAgICAKKyAg
ICAgICAgRml4ZWQgdHdvIHVucmVsYXRlZCBidWdzIHRoYXQgdGhpcyBleHBvc2VkLgorCisgICAg
ICAgICogY3NzL0NTU1N0eWxlU2VsZWN0b3IuY3BwOgorICAgICAgICAKKyAgICAgICAgICAgIERv
bid0IGFsbG93IGNhY2hpbmcgb2YgZG9jdW1lbnQgZWxlbWVudCBzdHlsZSBpZiB3cml0aW5nTW9k
ZVNldE9uRG9jdW1lbnRFbGVtZW50KCkgYml0IGlzIHNldC4KKyAgICAgICAgICAgIFRlc3RlZCBi
eSBmYXN0L211bHRpY29sL3ZlcnRpY2FsLXJsL2JyZWFrLXByb3BlcnRpZXMuaHRtbC4KKyAgICAg
ICAgCisgICAgICAgIChXZWJDb3JlOjpDU1NTdHlsZVNlbGVjdG9yOjpjb2xsZWN0TWF0Y2hpbmdS
dWxlc0Zvckxpc3QpOgorICAgICAgICAqIGNzcy9TdHlsZVByb3BlcnR5U2V0Lmg6CisgICAgICAg
IChTdHlsZVByb3BlcnR5U2V0KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUHJvcGVydHlTZXQ6
Omhhc0NTU09NV3JhcHBlcik6CisgICAgICAgICogZG9tL0VsZW1lbnQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6RWxlbWVudDo6cmVjYWxjU3R5bGUpOgorICAgICAgICAKKyAgICAgICAgICAgIElu
dmFsaWRhdGUgdGhlIG1hdGNoZWQgcHJvcGVydGllcyBjYWNoZSBpZiB0aGUgZG9jdW1lbnQgaGFz
IHJlbSB1bml0cyBhbmQgdGhlIHJvb3QgZm9udCBjaGFuZ2VzLgorICAgICAgICAgICAgVGVzdGVk
IGJ5IGZhc3QvY3NzL3JlbS1keW5hbWljLXNjYWxpbmcuaHRtbC4KKyAgICAgICAgCisgICAgICAg
ICogZG9tL0VsZW1lbnRBdHRyaWJ1dGVEYXRhLmNwcDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAg
ICAgICAoV2ViQ29yZTo6RWxlbWVudEF0dHJpYnV0ZURhdGE6OmVuc3VyZUlubGluZVN0eWxlKToK
KyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnRBdHRyaWJ1dGVEYXRhOjplbnN1cmVNdXRhYmxlSW5s
aW5lU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudEF0dHJpYnV0ZURhdGE6OnVwZGF0
ZUlubGluZVN0eWxlQXZvaWRpbmdNdXRhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50
QXR0cmlidXRlRGF0YTo6ZGVzdHJveUlubGluZVN0eWxlKToKKyAgICAgICAgKiBkb20vRWxlbWVu
dEF0dHJpYnV0ZURhdGEuaDoKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnRBdHRyaWJ1dGVEYXRh
OjppbmxpbmVTdHlsZSk6CisgICAgICAgIChFbGVtZW50QXR0cmlidXRlRGF0YSk6CisgICAgICAg
ICogZG9tL1N0eWxlZEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVkRWxlbWVu
dDo6dXBkYXRlU3R5bGVBdHRyaWJ1dGUpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVkRWxlbWVu
dDo6flN0eWxlZEVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3Jl
OjpTdHlsZWRFbGVtZW50OjpzdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZWRFbGVtZW50
OjpwYXJzZUF0dHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZWRFbGVtZW50OjpzZXRJ
bmxpbmVTdHlsZVByb3BlcnR5KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlZEVsZW1lbnQ6OnJl
bW92ZUlubGluZVN0eWxlUHJvcGVydHkpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVkRWxlbWVu
dDo6YWRkU3VicmVzb3VyY2VBdHRyaWJ1dGVVUkxzKToKKyAgICAgICAgKiBkb20vU3R5bGVkRWxl
bWVudC5oOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVkRWxlbWVudDo6aW5saW5lU3R5bGUpOgor
ICAgICAgICAoV2ViQ29yZTo6U3R5bGVkRWxlbWVudDo6ZW5zdXJlSW5saW5lU3R5bGUpOgorICAg
ICAgICAoU3R5bGVkRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZWRFbGVtZW50Ojpk
ZXN0cm95SW5saW5lU3R5bGUpOgorICAgICAgICAqIGVkaXRpbmcvQXBwbHlTdHlsZUNvbW1hbmQu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6aGFzTm9BdHRyaWJ1dGVPck9ubHlTdHlsZUF0dHJpYnV0
ZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVN0eWxlQ29tbWFuZDo6YXBwbHlSZWxhdGl2ZUZv
bnRTdHlsZUNoYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVN0eWxlQ29tbWFuZDo6cmVt
b3ZlRW1iZWRkaW5nVXBUb0VuY2xvc2luZ0Jsb2NrKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5
U3R5bGVDb21tYW5kOjphcHBseUlubGluZVN0eWxlVG9Ob2RlUmFuZ2UpOgorICAgICAgICAoV2Vi
Q29yZTo6QXBwbHlTdHlsZUNvbW1hbmQ6OnJlbW92ZUNTU1N0eWxlKToKKyAgICAgICAgKFdlYkNv
cmU6OkFwcGx5U3R5bGVDb21tYW5kOjphcHBseUlubGluZVN0eWxlVG9QdXNoRG93bik6CisgICAg
ICAgIChXZWJDb3JlOjpBcHBseVN0eWxlQ29tbWFuZDo6YWRkQmxvY2tTdHlsZSk6CisgICAgICAg
IChXZWJDb3JlOjpBcHBseVN0eWxlQ29tbWFuZDo6YWRkSW5saW5lU3R5bGVJZk5lZWRlZCk6Cisg
ICAgICAgICogZWRpdGluZy9FZGl0aW5nU3R5bGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRN
TEVsZW1lbnRFcXVpdmFsZW50Ojpwcm9wZXJ0eUV4aXN0c0luU3R5bGUpOgorICAgICAgICAoSFRN
TFRleHREZWNvcmF0aW9uRXF1aXZhbGVudCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MVGV4dERl
Y29yYXRpb25FcXVpdmFsZW50Ojpwcm9wZXJ0eUV4aXN0c0luU3R5bGUpOgorICAgICAgICAoV2Vi
Q29yZTo6RWRpdGluZ1N0eWxlOjpjb25mbGljdHNXaXRoSW5saW5lU3R5bGVPZkVsZW1lbnQpOgor
ICAgICAgICAoV2ViQ29yZTo6RWRpdGluZ1N0eWxlOjplbGVtZW50SXNTdHlsZWRTcGFuT3JIVE1M
RXF1aXZhbGVudCk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0aW5nU3R5bGU6Om1lcmdlSW5saW5l
U3R5bGVPZkVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6ZWxlbWVudE1hdGNoZXNBbmRQcm9w
ZXJ0eUlzTm90SW5JbmxpbmVTdHlsZURlY2wpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdGluZ1N0
eWxlOjptZXJnZVN0eWxlKToKKyAgICAgICAgKiBlZGl0aW5nL0VkaXRpbmdTdHlsZS5oOgorICAg
ICAgICAoRWRpdGluZ1N0eWxlKToKKyAgICAgICAgKiBlZGl0aW5nL1JlbW92ZUNTU1Byb3BlcnR5
Q29tbWFuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW1vdmVDU1NQcm9wZXJ0eUNvbW1hbmQ6
OmRvQXBwbHkpOgorICAgICAgICAqIGVkaXRpbmcvUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6UmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ6OnJlbW92ZVJlZHVu
ZGFudFN0eWxlc0FuZEtlZXBTdHlsZVNwYW5JbmxpbmUpOgorICAgICAgICAoV2ViQ29yZTo6UmVw
bGFjZVNlbGVjdGlvbkNvbW1hbmQ6OmhhbmRsZVN0eWxlU3BhbnMpOgorICAgICAgICAqIGVkaXRp
bmcvbWFya3VwLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlZE1hcmt1cEFjY3VtdWxhdG9y
OjphcHBlbmRFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OnN0eWxlRnJvbU1hdGNoZWRSdWxl
c0FuZElubGluZURlY2wpOgorICAgICAgICAqIGh0bWwvSFRNTEVsZW1lbnQuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6U3R5bGVkRWxlbWVudDo6Y29weU5vbkF0dHJpYnV0ZVByb3BlcnRpZXMpOgor
ICAgICAgICAqIGh0bWwvY2FudmFzL0NhbnZhc1N0eWxlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OmN1cnJlbnRDb2xvcik6CisgICAgICAgICogcGFnZS9QYWdlU2VyaWFsaXplci5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpQYWdlU2VyaWFsaXplcjo6c2VyaWFsaXplRnJhbWUpOgorICAgICAgICAo
V2ViQ29yZTo6UGFnZVNlcmlhbGl6ZXI6OnJldHJpZXZlUmVzb3VyY2VzRm9yUHJvcGVydGllcyk6
CisgICAgICAgICogcGFnZS9QYWdlU2VyaWFsaXplci5oOgorICAgICAgICAoUGFnZVNlcmlhbGl6
ZXIpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUcmVlQXNUZXh0LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OmlzRW1wdHlPclVuc3R5bGVkQXBwbGVTdHlsZVNwYW4pOgorCiAyMDEyLTAzLTA2
ICBQYXZlbCBQb2Rpdmlsb3YgIDxwb2Rpdmlsb3ZAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFdl
YiBJbnNwZWN0b3I6IGV4dHJhY3Qgc291cmNlIG1hcHBpbmcgbG9naWMgZnJvbSBEZWJ1Z2dlclBy
ZXNlbnRhdGlvbk1vZGVsIHRvIFNjcmlwdE1hcHBpbmdJbXBsLgpJbmRleDogU291cmNlL1dlYkNv
cmUvY3NzL0NTU1N0eWxlU2VsZWN0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2Nzcy9DU1NTdHlsZVNlbGVjdG9yLmNwcAkocmV2aXNpb24gMTEwMDQzKQorKysgU291cmNlL1dl
YkNvcmUvY3NzL0NTU1N0eWxlU2VsZWN0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDg2LDgg
KzEwODYsMTIgQEAgdm9pZCBDU1NTdHlsZVNlbGVjdG9yOjptYXRjaEFsbFJ1bGVzKE1hdAogICAg
ICAgICBtYXRjaEF1dGhvclJ1bGVzKHJlc3VsdCwgZmFsc2UpOwogCiAgICAgLy8gTm93IGNoZWNr
IG91ciBpbmxpbmUgc3R5bGUgYXR0cmlidXRlLgotICAgIGlmIChtX21hdGNoQXV0aG9yQW5kVXNl
clN0eWxlcyAmJiBtX3N0eWxlZEVsZW1lbnQpCi0gICAgICAgIGFkZEVsZW1lbnRTdHlsZVByb3Bl
cnRpZXMocmVzdWx0LCBtX3N0eWxlZEVsZW1lbnQtPmlubGluZVN0eWxlRGVjbCgpLCBmYWxzZSAv
KiBpc0NhY2hlYWJsZSAqLyk7CisgICAgaWYgKG1fbWF0Y2hBdXRob3JBbmRVc2VyU3R5bGVzICYm
IG1fc3R5bGVkRWxlbWVudCAmJiBtX3N0eWxlZEVsZW1lbnQtPmlubGluZVN0eWxlKCkpIHsKKyAg
ICAgICAgLy8gSW5saW5lIHN0eWxlIGlzIGltbXV0YWJsZSBhcyBsb25nIGFzIHRoZXJlIGlzIG5v
IENTU09NIHdyYXBwZXIuCisgICAgICAgIGJvb2wgaXNJbmxpbmVTdHlsZUNhY2hlYWJsZSA9ICFt
X3N0eWxlZEVsZW1lbnQtPmlubGluZVN0eWxlKCktPmhhc0NTU09NV3JhcHBlcigpOworICAgICAg
ICAvLyBGSVhNRTogQ29uc3RpZnkuCisgICAgICAgIGFkZEVsZW1lbnRTdHlsZVByb3BlcnRpZXMo
cmVzdWx0LCBjb25zdF9jYXN0PFN0eWxlUHJvcGVydHlTZXQqPihtX3N0eWxlZEVsZW1lbnQtPmlu
bGluZVN0eWxlKCkpLCBpc0lubGluZVN0eWxlQ2FjaGVhYmxlKTsKKyAgICB9CiAKICNpZiBFTkFC
TEUoU1ZHKQogICAgIC8vIE5vdyBjaGVjayBTTUlMIGFuaW1hdGlvbiBvdmVycmlkZSBzdHlsZS4K
QEAgLTExNDcsNyArMTE1MSw3IEBAIE5vZGUqIENTU1N0eWxlU2VsZWN0b3I6OmxvY2F0ZUNvdXNp
bkxpc3QKICAgICAgICAgcmV0dXJuIDA7CiAjZW5kaWYKICAgICBTdHlsZWRFbGVtZW50KiBwID0g
c3RhdGljX2Nhc3Q8U3R5bGVkRWxlbWVudCo+KHBhcmVudCk7Ci0gICAgaWYgKHAtPmlubGluZVN0
eWxlRGVjbCgpKQorICAgIGlmIChwLT5pbmxpbmVTdHlsZSgpKQogICAgICAgICByZXR1cm4gMDsK
ICNpZiBFTkFCTEUoU1ZHKQogICAgIGlmIChwLT5pc1NWR0VsZW1lbnQoKSAmJiBzdGF0aWNfY2Fz
dDxTVkdFbGVtZW50Kj4ocCktPmFuaW1hdGVkU01JTFN0eWxlUHJvcGVydGllcygpKQpAQCAtMTI5
Miw3ICsxMjk2LDcgQEAgYm9vbCBDU1NTdHlsZVNlbGVjdG9yOjpjYW5TaGFyZVN0eWxlV2l0aAog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgaWYgKGVsZW1lbnQtPmhhc0NsYXNzKCkgIT0gbV9l
bGVtZW50LT5oYXNDbGFzcygpKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKGVsZW1l
bnQtPmlubGluZVN0eWxlRGVjbCgpKQorICAgIGlmIChlbGVtZW50LT5pbmxpbmVTdHlsZSgpKQog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAjaWYgRU5BQkxFKFNWRykKICAgICBpZiAoZWxlbWVudC0+
aXNTVkdFbGVtZW50KCkgJiYgc3RhdGljX2Nhc3Q8U1ZHRWxlbWVudCo+KGVsZW1lbnQpLT5hbmlt
YXRlZFNNSUxTdHlsZVByb3BlcnRpZXMoKSkKQEAgLTE0MDYsNyArMTQxMCw3IEBAIFJlbmRlclN0
eWxlKiBDU1NTdHlsZVNlbGVjdG9yOjpsb2NhdGVTaGEKICAgICBpZiAoIW1fc3R5bGVkRWxlbWVu
dCB8fCAhbV9wYXJlbnRTdHlsZSkKICAgICAgICAgcmV0dXJuIDA7CiAgICAgLy8gSWYgdGhlIGVs
ZW1lbnQgaGFzIGlubGluZSBzdHlsZSBpdCBpcyBwcm9iYWJseSB1bmlxdWUuCi0gICAgaWYgKG1f
c3R5bGVkRWxlbWVudC0+aW5saW5lU3R5bGVEZWNsKCkpCisgICAgaWYgKG1fc3R5bGVkRWxlbWVu
dC0+aW5saW5lU3R5bGUoKSkKICAgICAgICAgcmV0dXJuIDA7CiAjaWYgRU5BQkxFKFNWRykKICAg
ICBpZiAobV9zdHlsZWRFbGVtZW50LT5pc1NWR0VsZW1lbnQoKSAmJiBzdGF0aWNfY2FzdDxTVkdF
bGVtZW50Kj4obV9zdHlsZWRFbGVtZW50KS0+YW5pbWF0ZWRTTUlMU3R5bGVQcm9wZXJ0aWVzKCkp
CkBAIC0yNzAzLDggKzI3MDcsMTEgQEAgdm9pZCBDU1NTdHlsZVNlbGVjdG9yOjppbnZhbGlkYXRl
TWF0Y2hlZAogICAgIG1fbWF0Y2hlZFByb3BlcnRpZXNDYWNoZS5jbGVhcigpOwogfQogCi1zdGF0
aWMgYm9vbCBpc0NhY2hlYWJsZUluTWF0Y2hlZFByb3BlcnRpZXNDYWNoZShjb25zdCBSZW5kZXJT
dHlsZSogc3R5bGUsIGNvbnN0IFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSkKK3N0YXRpYyBib29s
IGlzQ2FjaGVhYmxlSW5NYXRjaGVkUHJvcGVydGllc0NhY2hlKGNvbnN0IEVsZW1lbnQqIGVsZW1l
bnQsIGNvbnN0IFJlbmRlclN0eWxlKiBzdHlsZSwgY29uc3QgUmVuZGVyU3R5bGUqIHBhcmVudFN0
eWxlKQogeworICAgIC8vIEZJWE1FOiBDU1NQcm9wZXJ0eVdlYmtpdFdyaXRpbmdNb2RlIG1vZGlm
aWVzIHN0YXRlIHdoZW4gYXBwbHlpbmcgdG8gZG9jdW1lbnQgZWxlbWVudC4gV2UgY2FuJ3Qgc2tp
cCB0aGUgYXBwbHlpbmcgYnkgY2FjaGluZy4KKyAgICBpZiAoZWxlbWVudCA9PSBlbGVtZW50LT5k
b2N1bWVudCgpLT5kb2N1bWVudEVsZW1lbnQoKSAmJiBlbGVtZW50LT5kb2N1bWVudCgpLT53cml0
aW5nTW9kZVNldE9uRG9jdW1lbnRFbGVtZW50KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKICAg
ICBpZiAoc3R5bGUtPnVuaXF1ZSgpIHx8IChzdHlsZS0+c3R5bGVUeXBlKCkgIT0gTk9QU0VVRE8g
JiYgcGFyZW50U3R5bGUtPnVuaXF1ZSgpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGlm
IChzdHlsZS0+aGFzQXBwZWFyYW5jZSgpKQpAQCAtMjc4Niw3ICsyNzkzLDcgQEAgdm9pZCBDU1NT
dHlsZVNlbGVjdG9yOjphcHBseU1hdGNoZWRQcm9wZQogICAgIAogICAgIGlmIChjYWNoZUl0ZW0g
fHwgIWNhY2hlSGFzaCkKICAgICAgICAgcmV0dXJuOwotICAgIGlmICghaXNDYWNoZWFibGVJbk1h
dGNoZWRQcm9wZXJ0aWVzQ2FjaGUobV9zdHlsZS5nZXQoKSwgbV9wYXJlbnRTdHlsZSkpCisgICAg
aWYgKCFpc0NhY2hlYWJsZUluTWF0Y2hlZFByb3BlcnRpZXNDYWNoZShtX2VsZW1lbnQsIG1fc3R5
bGUuZ2V0KCksIG1fcGFyZW50U3R5bGUpKQogICAgICAgICByZXR1cm47CiAgICAgYWRkVG9NYXRj
aGVkUHJvcGVydGllc0NhY2hlKG1fc3R5bGUuZ2V0KCksIG1fcGFyZW50U3R5bGUsIGNhY2hlSGFz
aCwgbWF0Y2hSZXN1bHQpOwogfQpAQCAtMzcxNSw2ICszNzIyLDcgQEAgdm9pZCBDU1NTdHlsZVNl
bGVjdG9yOjphcHBseVByb3BlcnR5KGludAogICAgIC8vIENTUyBUZXh0IExheW91dCBNb2R1bGUg
TGV2ZWwgMzogVmVydGljYWwgd3JpdGluZyBzdXBwb3J0CiAgICAgY2FzZSBDU1NQcm9wZXJ0eVdl
YmtpdFdyaXRpbmdNb2RlOiB7CiAgICAgICAgIEhBTkRMRV9JTkhFUklUX0FORF9JTklUSUFMX0FO
RF9QUklNSVRJVkUod3JpdGluZ01vZGUsIFdyaXRpbmdNb2RlKQorICAgICAgICAvLyBGSVhNRTog
SXQgaXMgbm90IG9rIHRvIG1vZGlmeSBkb2N1bWVudCBzdGF0ZSB3aGlsZSBhcHBseWluZyBzdHls
ZS4KICAgICAgICAgaWYgKCFpc0luaGVyaXQgJiYgIWlzSW5pdGlhbCAmJiBtX2VsZW1lbnQgJiYg
bV9lbGVtZW50ID09IG1fZWxlbWVudC0+ZG9jdW1lbnQoKS0+ZG9jdW1lbnRFbGVtZW50KCkpCiAg
ICAgICAgICAgICBtX2VsZW1lbnQtPmRvY3VtZW50KCktPnNldFdyaXRpbmdNb2RlU2V0T25Eb2N1
bWVudEVsZW1lbnQodHJ1ZSk7CiAgICAgICAgIEZvbnREZXNjcmlwdGlvbiBmb250RGVzY3JpcHRp
b24gPSBtX3N0eWxlLT5mb250RGVzY3JpcHRpb24oKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nz
cy9TdHlsZVByb3BlcnR5U2V0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL1N0
eWxlUHJvcGVydHlTZXQuaAkocmV2aXNpb24gMTEwMDQzKQorKysgU291cmNlL1dlYkNvcmUvY3Nz
L1N0eWxlUHJvcGVydHlTZXQuaAkod29ya2luZyBjb3B5KQpAQCAtMTA3LDYgKzEwNyw4IEBAIHB1
YmxpYzoKICAgICBDU1NTdHlsZURlY2xhcmF0aW9uKiBlbnN1cmVDU1NTdHlsZURlY2xhcmF0aW9u
KCkgY29uc3Q7CiAgICAgQ1NTU3R5bGVEZWNsYXJhdGlvbiogZW5zdXJlUnVsZUNTU1N0eWxlRGVj
bGFyYXRpb24oY29uc3QgQ1NTUnVsZSogcGFyZW50UnVsZSkgY29uc3Q7CiAgICAgQ1NTU3R5bGVE
ZWNsYXJhdGlvbiogZW5zdXJlSW5saW5lQ1NTU3R5bGVEZWNsYXJhdGlvbihjb25zdCBTdHlsZWRF
bGVtZW50KiBwYXJlbnRFbGVtZW50KSBjb25zdDsKKyAgICAKKyAgICBib29sIGhhc0NTU09NV3Jh
cHBlcigpIGNvbnN0IHsgcmV0dXJuIG1faGFzQ1NTT01XcmFwcGVyOyB9CiAKIHByaXZhdGU6CiAg
ICAgU3R5bGVQcm9wZXJ0eVNldCgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmNwcAkocmV2aXNp
b24gMTEwMDQzKQorKysgU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xMTAxLDEyICsxMTAxLDE2IEBAIHZvaWQgRWxlbWVudDo6cmVjYWxjU3R5bGUoU3R5
bGVDaGFuZ2UgY2gKICAgICAgICAgfSBlbHNlIGlmIChzdHlsZUNoYW5nZVR5cGUoKSA9PSBTeW50
aGV0aWNTdHlsZUNoYW5nZSkKICAgICAgICAgICAgICBzZXRSZW5kZXJTdHlsZShuZXdTdHlsZSk7
CiAKKyAgICAgICAgLy8gSWYgInJlbSIgdW5pdHMgYXJlIHVzZWQgYW55d2hlcmUgaW4gdGhlIGRv
Y3VtZW50LCBhbmQgaWYgdGhlIGRvY3VtZW50IGVsZW1lbnQncyBmb250IHNpemUgY2hhbmdlcywg
dGhlbiBnbyBhaGVhZCBhbmQgZm9yY2UgZm9udCB1cGRhdGluZworICAgICAgICAvLyBhbGwgdGhl
IHdheSBkb3duIHRoZSB0cmVlLiBUaGlzIGlzIHNpbXBsZXIgdGhhbiBoYXZpbmcgdG8gbWFpbnRh
aW4gYSBjYWNoZSBvZiBvYmplY3RzIChhbmQgc3VjaCBmb250IHNpemUgY2hhbmdlcyBzaG91bGQg
YmUgcmFyZSBhbnl3YXkpLgorICAgICAgICBpZiAoZG9jdW1lbnQoKS0+dXNlc1JlbVVuaXRzKCkg
JiYgZG9jdW1lbnQoKS0+ZG9jdW1lbnRFbGVtZW50KCkgPT0gdGhpcyAmJiBjaCAhPSBOb0NoYW5n
ZSAmJiBjdXJyZW50U3R5bGUgJiYgbmV3U3R5bGUgJiYgY3VycmVudFN0eWxlLT5mb250U2l6ZSgp
ICE9IG5ld1N0eWxlLT5mb250U2l6ZSgpKSB7CisgICAgICAgICAgICAvLyBDYWNoZWQgUmVuZGVy
U3R5bGVzIG1heSBkZXBlbmQgb24gdGhlIHJlbSB1bml0cy4KKyAgICAgICAgICAgIGRvY3VtZW50
KCktPnN0eWxlU2VsZWN0b3IoKS0+aW52YWxpZGF0ZU1hdGNoZWRQcm9wZXJ0aWVzQ2FjaGUoKTsK
KyAgICAgICAgICAgIGNoYW5nZSA9IEZvcmNlOworICAgICAgICB9CisKICAgICAgICAgaWYgKGNo
YW5nZSAhPSBGb3JjZSkgewotICAgICAgICAgICAgLy8gSWYgInJlbSIgdW5pdHMgYXJlIHVzZWQg
YW55d2hlcmUgaW4gdGhlIGRvY3VtZW50LCBhbmQgaWYgdGhlIGRvY3VtZW50IGVsZW1lbnQncyBm
b250IHNpemUgY2hhbmdlcywgdGhlbiBnbyBhaGVhZCBhbmQgZm9yY2UgZm9udCB1cGRhdGluZwot
ICAgICAgICAgICAgLy8gYWxsIHRoZSB3YXkgZG93biB0aGUgdHJlZS4gIFRoaXMgaXMgc2ltcGxl
ciB0aGFuIGhhdmluZyB0byBtYWludGFpbiBhIGNhY2hlIG9mIG9iamVjdHMgKGFuZCBzdWNoIGZv
bnQgc2l6ZSBjaGFuZ2VzIHNob3VsZCBiZSByYXJlIGFueXdheSkuCi0gICAgICAgICAgICBpZiAo
ZG9jdW1lbnQoKS0+dXNlc1JlbVVuaXRzKCkgJiYgY2ggIT0gTm9DaGFuZ2UgJiYgY3VycmVudFN0
eWxlICYmIG5ld1N0eWxlICYmIGN1cnJlbnRTdHlsZS0+Zm9udFNpemUoKSAhPSBuZXdTdHlsZS0+
Zm9udFNpemUoKSAmJiBkb2N1bWVudCgpLT5kb2N1bWVudEVsZW1lbnQoKSA9PSB0aGlzKQotICAg
ICAgICAgICAgICAgIGNoYW5nZSA9IEZvcmNlOwotICAgICAgICAgICAgZWxzZSBpZiAoc3R5bGVD
aGFuZ2VUeXBlKCkgPj0gRnVsbFN0eWxlQ2hhbmdlKQorICAgICAgICAgICAgaWYgKHN0eWxlQ2hh
bmdlVHlwZSgpID49IEZ1bGxTdHlsZUNoYW5nZSkKICAgICAgICAgICAgICAgICBjaGFuZ2UgPSBG
b3JjZTsKICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICBjaGFuZ2UgPSBjaDsKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50QXR0cmlidXRlRGF0YS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnRBdHRyaWJ1dGVEYXRhLmNwcAkocmV2aXNp
b24gMTEwMDQzKQorKysgU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnRBdHRyaWJ1dGVEYXRhLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNTIsOCArNTIsOCBAQCB2b2lkIEVsZW1lbnRBdHRyaWJ1dGVE
YXRhOjpzZXRDbGFzcyhjb25zCiB7CiAgICAgbV9jbGFzc05hbWVzLnNldChjbGFzc05hbWUsIHNo
b3VsZEZvbGRDYXNlKTsKIH0KLQotU3R5bGVQcm9wZXJ0eVNldCogRWxlbWVudEF0dHJpYnV0ZURh
dGE6OmVuc3VyZUlubGluZVN0eWxlRGVjbChTdHlsZWRFbGVtZW50KiBlbGVtZW50KQorICAgIAor
U3R5bGVQcm9wZXJ0eVNldCogRWxlbWVudEF0dHJpYnV0ZURhdGE6OmVuc3VyZUlubGluZVN0eWxl
KFN0eWxlZEVsZW1lbnQqIGVsZW1lbnQpCiB7CiAgICAgaWYgKCFtX2lubGluZVN0eWxlRGVjbCkg
ewogICAgICAgICBBU1NFUlQoZWxlbWVudC0+aXNTdHlsZWRFbGVtZW50KCkpOwpAQCAtNjMsNyAr
NjMsMzAgQEAgU3R5bGVQcm9wZXJ0eVNldCogRWxlbWVudEF0dHJpYnV0ZURhdGE6OgogICAgIHJl
dHVybiBtX2lubGluZVN0eWxlRGVjbC5nZXQoKTsKIH0KIAotdm9pZCBFbGVtZW50QXR0cmlidXRl
RGF0YTo6ZGVzdHJveUlubGluZVN0eWxlRGVjbChTdHlsZWRFbGVtZW50KiBlbGVtZW50KQorU3R5
bGVQcm9wZXJ0eVNldCogRWxlbWVudEF0dHJpYnV0ZURhdGE6OmVuc3VyZU11dGFibGVJbmxpbmVT
dHlsZShTdHlsZWRFbGVtZW50KiBlbGVtZW50KQoreworICAgIGlmIChtX2lubGluZVN0eWxlRGVj
bCAmJiAhbV9pbmxpbmVTdHlsZURlY2wtPmhhc0NTU09NV3JhcHBlcigpKSB7CisgICAgICAgIG1f
aW5saW5lU3R5bGVEZWNsID0gbV9pbmxpbmVTdHlsZURlY2wtPmNvcHkoKTsKKyAgICAgICAgbV9p
bmxpbmVTdHlsZURlY2wtPnNldFN0cmljdFBhcnNpbmcoZWxlbWVudC0+aXNIVE1MRWxlbWVudCgp
ICYmICFlbGVtZW50LT5kb2N1bWVudCgpLT5pblF1aXJrc01vZGUoKSk7CisgICAgICAgIHJldHVy
biBtX2lubGluZVN0eWxlRGVjbC5nZXQoKTsKKyAgICB9CisgICAgcmV0dXJuIGVuc3VyZUlubGlu
ZVN0eWxlKGVsZW1lbnQpOworfQorICAgIAordm9pZCBFbGVtZW50QXR0cmlidXRlRGF0YTo6dXBk
YXRlSW5saW5lU3R5bGVBdm9pZGluZ011dGF0aW9uKFN0eWxlZEVsZW1lbnQqIGVsZW1lbnQsIGNv
bnN0IFN0cmluZyYgdGV4dCkKK3sKKyAgICAvLyBXZSByZWNvbnN0cnVjdCB0aGUgcHJvcGVydHkg
c2V0IGluc3RlYWQgb2YgbXV0YXRpbmcgaWYgdGhlcmUgaXMgbm8gQ1NTT00gd3JhcHBlci4KKyAg
ICAvLyBUaGlzIG1ha2VzIHdyYXBwZXJsZXNzIHByb3BlcnR5IHNldHMgaW1tdXRhYmxlIGFuZCBz
byBjYWNoZWFibGUuCisgICAgaWYgKG1faW5saW5lU3R5bGVEZWNsICYmICFtX2lubGluZVN0eWxl
RGVjbC0+aGFzQ1NTT01XcmFwcGVyKCkpCisgICAgICAgIG1faW5saW5lU3R5bGVEZWNsLmNsZWFy
KCk7CisgICAgaWYgKCFtX2lubGluZVN0eWxlRGVjbCkgeworICAgICAgICBtX2lubGluZVN0eWxl
RGVjbCA9IFN0eWxlUHJvcGVydHlTZXQ6OmNyZWF0ZSgpOworICAgICAgICBtX2lubGluZVN0eWxl
RGVjbC0+c2V0U3RyaWN0UGFyc2luZyhlbGVtZW50LT5pc0hUTUxFbGVtZW50KCkgJiYgIWVsZW1l
bnQtPmRvY3VtZW50KCktPmluUXVpcmtzTW9kZSgpKTsKKyAgICB9CisgICAgbV9pbmxpbmVTdHls
ZURlY2wtPnBhcnNlRGVjbGFyYXRpb24odGV4dCwgZWxlbWVudC0+ZG9jdW1lbnQoKS0+ZWxlbWVu
dFNoZWV0KCkpOworfQorCit2b2lkIEVsZW1lbnRBdHRyaWJ1dGVEYXRhOjpkZXN0cm95SW5saW5l
U3R5bGUoU3R5bGVkRWxlbWVudCogZWxlbWVudCkKIHsKICAgICBpZiAoIW1faW5saW5lU3R5bGVE
ZWNsKQogICAgICAgICByZXR1cm47CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudEF0
dHJpYnV0ZURhdGEuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudEF0
dHJpYnV0ZURhdGEuaAkocmV2aXNpb24gMTEwMDQzKQorKysgU291cmNlL1dlYkNvcmUvZG9tL0Vs
ZW1lbnRBdHRyaWJ1dGVEYXRhLmgJKHdvcmtpbmcgY29weSkKQEAgLTkwLDkgKzkwLDExIEBAIHB1
YmxpYzoKICAgICBjb25zdCBBdG9taWNTdHJpbmcmIGlkRm9yU3R5bGVSZXNvbHV0aW9uKCkgY29u
c3QgeyByZXR1cm4gbV9pZEZvclN0eWxlUmVzb2x1dGlvbjsgfQogICAgIHZvaWQgc2V0SWRGb3JT
dHlsZVJlc29sdXRpb24oY29uc3QgQXRvbWljU3RyaW5nJiBuZXdJZCkgeyBtX2lkRm9yU3R5bGVS
ZXNvbHV0aW9uID0gbmV3SWQ7IH0KIAotICAgIFN0eWxlUHJvcGVydHlTZXQqIGlubGluZVN0eWxl
RGVjbCgpIHsgcmV0dXJuIG1faW5saW5lU3R5bGVEZWNsLmdldCgpOyB9Ci0gICAgU3R5bGVQcm9w
ZXJ0eVNldCogZW5zdXJlSW5saW5lU3R5bGVEZWNsKFN0eWxlZEVsZW1lbnQqKTsKLSAgICB2b2lk
IGRlc3Ryb3lJbmxpbmVTdHlsZURlY2woU3R5bGVkRWxlbWVudCogZWxlbWVudCk7CisgICAgU3R5
bGVQcm9wZXJ0eVNldCogaW5saW5lU3R5bGUoKSB7IHJldHVybiBtX2lubGluZVN0eWxlRGVjbC5n
ZXQoKTsgfQorICAgIFN0eWxlUHJvcGVydHlTZXQqIGVuc3VyZUlubGluZVN0eWxlKFN0eWxlZEVs
ZW1lbnQqKTsKKyAgICBTdHlsZVByb3BlcnR5U2V0KiBlbnN1cmVNdXRhYmxlSW5saW5lU3R5bGUo
U3R5bGVkRWxlbWVudCopOworICAgIHZvaWQgdXBkYXRlSW5saW5lU3R5bGVBdm9pZGluZ011dGF0
aW9uKFN0eWxlZEVsZW1lbnQqLCBjb25zdCBTdHJpbmcmIHRleHQpOworICAgIHZvaWQgZGVzdHJv
eUlubGluZVN0eWxlKFN0eWxlZEVsZW1lbnQqKTsKIAogICAgIFN0eWxlUHJvcGVydHlTZXQqIGF0
dHJpYnV0ZVN0eWxlKCkgY29uc3QgeyByZXR1cm4gbV9hdHRyaWJ1dGVTdHlsZS5nZXQoKTsgfQog
ICAgIHZvaWQgc2V0QXR0cmlidXRlU3R5bGUoUGFzc1JlZlB0cjxTdHlsZVByb3BlcnR5U2V0PiBz
dHlsZSkgeyBtX2F0dHJpYnV0ZVN0eWxlID0gc3R5bGU7IH0KSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2RvbS9TdHlsZWRFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20v
U3R5bGVkRWxlbWVudC5jcHAJKHJldmlzaW9uIDExMDA0MykKKysrIFNvdXJjZS9XZWJDb3JlL2Rv
bS9TdHlsZWRFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTAsMTMgKzUwLDE4IEBAIHZv
aWQgU3R5bGVkRWxlbWVudDo6dXBkYXRlU3R5bGVBdHRyaWJ1dGUKIHsKICAgICBBU1NFUlQoIWlz
U3R5bGVBdHRyaWJ1dGVWYWxpZCgpKTsKICAgICBzZXRJc1N0eWxlQXR0cmlidXRlVmFsaWQoKTsK
LSAgICBpZiAoU3R5bGVQcm9wZXJ0eVNldCogaW5saW5lU3R5bGUgPSBpbmxpbmVTdHlsZURlY2wo
KSkKKyAgICBpZiAoY29uc3QgU3R5bGVQcm9wZXJ0eVNldCogaW5saW5lU3R5bGUgPSB0aGlzLT5p
bmxpbmVTdHlsZSgpKQogICAgICAgICBjb25zdF9jYXN0PFN0eWxlZEVsZW1lbnQqPih0aGlzKS0+
c2V0QXR0cmlidXRlKHN0eWxlQXR0ciwgaW5saW5lU3R5bGUtPmFzVGV4dCgpLCAvKm5vdGlmeUNo
YW5nZWQqLyBmYWxzZSk7CiB9CiAKIFN0eWxlZEVsZW1lbnQ6On5TdHlsZWRFbGVtZW50KCkKIHsK
LSAgICBkZXN0cm95SW5saW5lU3R5bGVEZWNsKCk7CisgICAgZGVzdHJveUlubGluZVN0eWxlKCk7
Cit9CisKK0NTU1N0eWxlRGVjbGFyYXRpb24qIFN0eWxlZEVsZW1lbnQ6OnN0eWxlKCkgCit7IAor
ICAgIHJldHVybiBlbnN1cmVBdHRyaWJ1dGVEYXRhKCktPmVuc3VyZU11dGFibGVJbmxpbmVTdHls
ZSh0aGlzKS0+ZW5zdXJlSW5saW5lQ1NTU3R5bGVEZWNsYXJhdGlvbih0aGlzKTsgCiB9CiAKIHZv
aWQgU3R5bGVkRWxlbWVudDo6YXR0cmlidXRlQ2hhbmdlZChBdHRyaWJ1dGUqIGF0dHIpCkBAIC05
Nyw5ICsxMDIsOSBAQCB2b2lkIFN0eWxlZEVsZW1lbnQ6OnBhcnNlQXR0cmlidXRlKEF0dHJpCiAg
ICAgICAgIGNsYXNzQXR0cmlidXRlQ2hhbmdlZChhdHRyLT52YWx1ZSgpKTsKICAgICBlbHNlIGlm
IChhdHRyLT5uYW1lKCkgPT0gc3R5bGVBdHRyKSB7CiAgICAgICAgIGlmIChhdHRyLT5pc051bGwo
KSkKLSAgICAgICAgICAgIGRlc3Ryb3lJbmxpbmVTdHlsZURlY2woKTsKKyAgICAgICAgICAgIGRl
c3Ryb3lJbmxpbmVTdHlsZSgpOwogICAgICAgICBlbHNlIGlmIChkb2N1bWVudCgpLT5jb250ZW50
U2VjdXJpdHlQb2xpY3koKS0+YWxsb3dJbmxpbmVTdHlsZSgpKQotICAgICAgICAgICAgZW5zdXJl
SW5saW5lU3R5bGVEZWNsKCktPnBhcnNlRGVjbGFyYXRpb24oYXR0ci0+dmFsdWUoKSwgZG9jdW1l
bnQoKS0+ZWxlbWVudFNoZWV0KCkpOworICAgICAgICAgICAgZW5zdXJlQXR0cmlidXRlRGF0YSgp
LT51cGRhdGVJbmxpbmVTdHlsZUF2b2lkaW5nTXV0YXRpb24odGhpcywgYXR0ci0+dmFsdWUoKSk7
CiAgICAgICAgIHNldElzU3R5bGVBdHRyaWJ1dGVWYWxpZCgpOwogICAgICAgICBzZXROZWVkc1N0
eWxlUmVjYWxjKCk7CiAgICAgICAgIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkSW52YWxp
ZGF0ZVN0eWxlQXR0cihkb2N1bWVudCgpLCB0aGlzKTsKQEAgLTExNSwyMSArMTIwLDIxIEBAIHZv
aWQgU3R5bGVkRWxlbWVudDo6aW5saW5lU3R5bGVDaGFuZ2VkKCkKICAgICAKIGJvb2wgU3R5bGVk
RWxlbWVudDo6c2V0SW5saW5lU3R5bGVQcm9wZXJ0eShpbnQgcHJvcGVydHlJRCwgaW50IGlkZW50
aWZpZXIsIGJvb2wgaW1wb3J0YW50KQogewotICAgIGVuc3VyZUlubGluZVN0eWxlRGVjbCgpLT5z
ZXRQcm9wZXJ0eShwcm9wZXJ0eUlELCBkb2N1bWVudCgpLT5jc3NWYWx1ZVBvb2woKS0+Y3JlYXRl
SWRlbnRpZmllclZhbHVlKGlkZW50aWZpZXIpLCBpbXBvcnRhbnQpOworICAgIGVuc3VyZUF0dHJp
YnV0ZURhdGEoKS0+ZW5zdXJlTXV0YWJsZUlubGluZVN0eWxlKHRoaXMpLT5zZXRQcm9wZXJ0eShw
cm9wZXJ0eUlELCBkb2N1bWVudCgpLT5jc3NWYWx1ZVBvb2woKS0+Y3JlYXRlSWRlbnRpZmllclZh
bHVlKGlkZW50aWZpZXIpLCBpbXBvcnRhbnQpOwogICAgIGlubGluZVN0eWxlQ2hhbmdlZCgpOwog
ICAgIHJldHVybiB0cnVlOwogfQogCiBib29sIFN0eWxlZEVsZW1lbnQ6OnNldElubGluZVN0eWxl
UHJvcGVydHkoaW50IHByb3BlcnR5SUQsIGRvdWJsZSB2YWx1ZSwgQ1NTUHJpbWl0aXZlVmFsdWU6
OlVuaXRUeXBlcyB1bml0LCBib29sIGltcG9ydGFudCkKIHsKLSAgICBlbnN1cmVJbmxpbmVTdHls
ZURlY2woKS0+c2V0UHJvcGVydHkocHJvcGVydHlJRCwgZG9jdW1lbnQoKS0+Y3NzVmFsdWVQb29s
KCktPmNyZWF0ZVZhbHVlKHZhbHVlLCB1bml0KSwgaW1wb3J0YW50KTsKKyAgICBlbnN1cmVBdHRy
aWJ1dGVEYXRhKCktPmVuc3VyZU11dGFibGVJbmxpbmVTdHlsZSh0aGlzKS0+c2V0UHJvcGVydHko
cHJvcGVydHlJRCwgZG9jdW1lbnQoKS0+Y3NzVmFsdWVQb29sKCktPmNyZWF0ZVZhbHVlKHZhbHVl
LCB1bml0KSwgaW1wb3J0YW50KTsKICAgICBpbmxpbmVTdHlsZUNoYW5nZWQoKTsKICAgICByZXR1
cm4gdHJ1ZTsKIH0KIAogYm9vbCBTdHlsZWRFbGVtZW50OjpzZXRJbmxpbmVTdHlsZVByb3BlcnR5
KGludCBwcm9wZXJ0eUlELCBjb25zdCBTdHJpbmcmIHZhbHVlLCBib29sIGltcG9ydGFudCkKIHsK
LSAgICBib29sIGNoYW5nZXMgPSBlbnN1cmVJbmxpbmVTdHlsZURlY2woKS0+c2V0UHJvcGVydHko
cHJvcGVydHlJRCwgdmFsdWUsIGltcG9ydGFudCwgZG9jdW1lbnQoKS0+ZWxlbWVudFNoZWV0KCkp
OworICAgIGJvb2wgY2hhbmdlcyA9IGVuc3VyZUF0dHJpYnV0ZURhdGEoKS0+ZW5zdXJlTXV0YWJs
ZUlubGluZVN0eWxlKHRoaXMpLT5zZXRQcm9wZXJ0eShwcm9wZXJ0eUlELCB2YWx1ZSwgaW1wb3J0
YW50LCBkb2N1bWVudCgpLT5lbGVtZW50U2hlZXQoKSk7CiAgICAgaWYgKGNoYW5nZXMpCiAgICAg
ICAgIGlubGluZVN0eWxlQ2hhbmdlZCgpOwogICAgIHJldHVybiBjaGFuZ2VzOwpAQCAtMTM3LDcg
KzE0MiwxMCBAQCBib29sIFN0eWxlZEVsZW1lbnQ6OnNldElubGluZVN0eWxlUHJvcGVyCiAKIGJv
b2wgU3R5bGVkRWxlbWVudDo6cmVtb3ZlSW5saW5lU3R5bGVQcm9wZXJ0eShpbnQgcHJvcGVydHlJ
RCkKIHsKLSAgICBib29sIGNoYW5nZXMgPSBlbnN1cmVJbmxpbmVTdHlsZURlY2woKS0+cmVtb3Zl
UHJvcGVydHkocHJvcGVydHlJRCk7CisgICAgU3R5bGVQcm9wZXJ0eVNldCogaW5saW5lU3R5bGUg
PSBhdHRyaWJ1dGVEYXRhKCkgPyBhdHRyaWJ1dGVEYXRhKCktPmlubGluZVN0eWxlKCkgOiAwOwor
ICAgIGlmICghaW5saW5lU3R5bGUpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBib29sIGNo
YW5nZXMgPSBpbmxpbmVTdHlsZS0+cmVtb3ZlUHJvcGVydHkocHJvcGVydHlJRCk7CiAgICAgaWYg
KGNoYW5nZXMpCiAgICAgICAgIGlubGluZVN0eWxlQ2hhbmdlZCgpOwogICAgIHJldHVybiBjaGFu
Z2VzOwpAQCAtMTQ1LDcgKzE1Myw3IEBAIGJvb2wgU3R5bGVkRWxlbWVudDo6cmVtb3ZlSW5saW5l
U3R5bGVQcm8KIAogdm9pZCBTdHlsZWRFbGVtZW50OjphZGRTdWJyZXNvdXJjZUF0dHJpYnV0ZVVS
THMoTGlzdEhhc2hTZXQ8S1VSTD4mIHVybHMpIGNvbnN0CiB7Ci0gICAgaWYgKFN0eWxlUHJvcGVy
dHlTZXQqIGlubGluZVN0eWxlID0gaW5saW5lU3R5bGVEZWNsKCkpCisgICAgaWYgKFN0eWxlUHJv
cGVydHlTZXQqIGlubGluZVN0eWxlID0gYXR0cmlidXRlRGF0YSgpID8gYXR0cmlidXRlRGF0YSgp
LT5pbmxpbmVTdHlsZSgpIDogMCkKICAgICAgICAgaW5saW5lU3R5bGUtPmFkZFN1YnJlc291cmNl
U3R5bGVVUkxzKHVybHMsIGRvY3VtZW50KCktPmVsZW1lbnRTaGVldCgpKTsKIH0KIApJbmRleDog
U291cmNlL1dlYkNvcmUvZG9tL1N0eWxlZEVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9kb20vU3R5bGVkRWxlbWVudC5oCShyZXZpc2lvbiAxMTAwNDMpCisrKyBTb3VyY2Uv
V2ViQ29yZS9kb20vU3R5bGVkRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOSw4ICszOSw4
IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIFN0eWxlUHJvcGVydHlTZXQqIGFkZGl0aW9uYWxBdHRy
aWJ1dGVTdHlsZSgpIHsgcmV0dXJuIDA7IH0KICAgICB2b2lkIGludmFsaWRhdGVTdHlsZUF0dHJp
YnV0ZSgpOwogCi0gICAgU3R5bGVQcm9wZXJ0eVNldCogaW5saW5lU3R5bGVEZWNsKCkgY29uc3Qg
eyByZXR1cm4gYXR0cmlidXRlRGF0YSgpID8gYXR0cmlidXRlRGF0YSgpLT5pbmxpbmVTdHlsZURl
Y2woKSA6IDA7IH0KLSAgICBTdHlsZVByb3BlcnR5U2V0KiBlbnN1cmVJbmxpbmVTdHlsZURlY2wo
KSB7IHJldHVybiBlbnN1cmVBdHRyaWJ1dGVEYXRhKCktPmVuc3VyZUlubGluZVN0eWxlRGVjbCh0
aGlzKTsgfQorICAgIGNvbnN0IFN0eWxlUHJvcGVydHlTZXQqIGlubGluZVN0eWxlKCkgY29uc3Qg
eyByZXR1cm4gYXR0cmlidXRlRGF0YSgpID8gYXR0cmlidXRlRGF0YSgpLT5pbmxpbmVTdHlsZSgp
IDogMDsgfQorICAgIGNvbnN0IFN0eWxlUHJvcGVydHlTZXQqIGVuc3VyZUlubGluZVN0eWxlKCkg
eyByZXR1cm4gZW5zdXJlQXR0cmlidXRlRGF0YSgpLT5lbnN1cmVJbmxpbmVTdHlsZSh0aGlzKTsg
fQogICAgIAogICAgIC8vIFVubGlrZSBTdHlsZVByb3BlcnR5U2V0IHNldHRlcnMsIHRoZXNlIGlt
cGxlbWVudCBpbnZhbGlkYXRpb24uCiAgICAgYm9vbCBzZXRJbmxpbmVTdHlsZVByb3BlcnR5KGlu
dCBwcm9wZXJ0eUlELCBpbnQgaWRlbnRpZmllciwgYm9vbCBpbXBvcnRhbnQgPSBmYWxzZSk7CkBA
IC00OCw3ICs0OCw3IEBAIHB1YmxpYzoKICAgICBib29sIHNldElubGluZVN0eWxlUHJvcGVydHko
aW50IHByb3BlcnR5SUQsIGNvbnN0IFN0cmluZyYgdmFsdWUsIGJvb2wgaW1wb3J0YW50ID0gZmFs
c2UpOwogICAgIGJvb2wgcmVtb3ZlSW5saW5lU3R5bGVQcm9wZXJ0eShpbnQgcHJvcGVydHlJRCk7
CiAgICAgCi0gICAgdmlydHVhbCBDU1NTdHlsZURlY2xhcmF0aW9uKiBzdHlsZSgpIE9WRVJSSURF
IHsgcmV0dXJuIGVuc3VyZUlubGluZVN0eWxlRGVjbCgpLT5lbnN1cmVJbmxpbmVDU1NTdHlsZURl
Y2xhcmF0aW9uKHRoaXMpOyB9CisgICAgdmlydHVhbCBDU1NTdHlsZURlY2xhcmF0aW9uKiBzdHls
ZSgpIE9WRVJSSURFOwogCiAgICAgU3R5bGVQcm9wZXJ0eVNldCogYXR0cmlidXRlU3R5bGUoKTsK
IApAQCAtODQsMTAgKzg0LDEwIEBAIHByaXZhdGU6CiAKICAgICB2b2lkIHVwZGF0ZUF0dHJpYnV0
ZVN0eWxlKCk7CiAKLSAgICB2b2lkIGRlc3Ryb3lJbmxpbmVTdHlsZURlY2woKQorICAgIHZvaWQg
ZGVzdHJveUlubGluZVN0eWxlKCkKICAgICB7CiAgICAgICAgIGlmIChhdHRyaWJ1dGVEYXRhKCkp
Ci0gICAgICAgICAgICBhdHRyaWJ1dGVEYXRhKCktPmRlc3Ryb3lJbmxpbmVTdHlsZURlY2wodGhp
cyk7CisgICAgICAgICAgICBhdHRyaWJ1dGVEYXRhKCktPmRlc3Ryb3lJbmxpbmVTdHlsZSh0aGlz
KTsKICAgICB9CiB9OwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0FwcGx5U3R5bGVD
b21tYW5kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0FwcGx5U3R5
bGVDb21tYW5kLmNwcAkocmV2aXNpb24gMTEwMDQzKQorKysgU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9BcHBseVN0eWxlQ29tbWFuZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgwLDcgKzgwLDcgQEAg
c3RhdGljIGJvb2wgaGFzTm9BdHRyaWJ1dGVPck9ubHlTdHlsZUF0dAogICAgIGlmIChlbGVtZW50
LT5nZXRBdHRyaWJ1dGUoY2xhc3NBdHRyKSA9PSBzdHlsZVNwYW5DbGFzc1N0cmluZygpKQogICAg
ICAgICBtYXRjaGVkQXR0cmlidXRlcysrOwogICAgIGlmIChlbGVtZW50LT5oYXNBdHRyaWJ1dGUo
c3R5bGVBdHRyKSAmJiAoc2hvdWxkU3R5bGVBdHRyaWJ1dGVCZUVtcHR5ID09IEFsbG93Tm9uRW1w
dHlTdHlsZUF0dHJpYnV0ZQotICAgICAgICB8fCAhZWxlbWVudC0+aW5saW5lU3R5bGVEZWNsKCkg
fHwgZWxlbWVudC0+aW5saW5lU3R5bGVEZWNsKCktPmlzRW1wdHkoKSkpCisgICAgICAgIHx8ICFl
bGVtZW50LT5pbmxpbmVTdHlsZSgpIHx8IGVsZW1lbnQtPmlubGluZVN0eWxlKCktPmlzRW1wdHko
KSkpCiAgICAgICAgIG1hdGNoZWRBdHRyaWJ1dGVzKys7CiAKICAgICBBU1NFUlQobWF0Y2hlZEF0
dHJpYnV0ZXMgPD0gZWxlbWVudC0+YXR0cmlidXRlQ291bnQoKSk7CkBAIC0zODIsNyArMzgyLDcg
QEAgdm9pZCBBcHBseVN0eWxlQ29tbWFuZDo6YXBwbHlSZWxhdGl2ZUZvbgogICAgICAgICB9CiAg
ICAgICAgIGxhc3RTdHlsZWROb2RlID0gbm9kZTsKIAotICAgICAgICBTdHlsZVByb3BlcnR5U2V0
KiBpbmxpbmVTdHlsZURlY2wgPSBlbGVtZW50LT5lbnN1cmVJbmxpbmVTdHlsZURlY2woKTsKKyAg
ICAgICAgUmVmUHRyPFN0eWxlUHJvcGVydHlTZXQ+IGlubGluZVN0eWxlRGVjbCA9IGVsZW1lbnQt
PmVuc3VyZUlubGluZVN0eWxlKCktPmNvcHkoKTsKICAgICAgICAgZmxvYXQgY3VycmVudEZvbnRT
aXplID0gY29tcHV0ZWRGb250U2l6ZShub2RlKTsKICAgICAgICAgZmxvYXQgZGVzaXJlZEZvbnRT
aXplID0gbWF4KE1pbmltdW1Gb250U2l6ZSwgc3RhcnRpbmdGb250U2l6ZXMuZ2V0KG5vZGUpICsg
c3R5bGUtPmZvbnRTaXplRGVsdGEoKSk7CiAgICAgICAgIFJlZlB0cjxDU1NWYWx1ZT4gdmFsdWUg
PSBpbmxpbmVTdHlsZURlY2wtPmdldFByb3BlcnR5Q1NTVmFsdWUoQ1NTUHJvcGVydHlGb250U2l6
ZSk7CkBAIC01MDksNyArNTA5LDcgQEAgdm9pZCBBcHBseVN0eWxlQ29tbWFuZDo6cmVtb3ZlRW1i
ZWRkaW5nVQogICAgICAgICAgICAgLy8gb3RoZXIgYXR0cmlidXRlcywgbGlrZSB3ZSAoc2hvdWxk
KSBkbyB3aXRoIEIgYW5kIEkgZWxlbWVudHMuCiAgICAgICAgICAgICByZW1vdmVOb2RlQXR0cmli
dXRlKGVsZW1lbnQsIGRpckF0dHIpOwogICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgUmVm
UHRyPFN0eWxlUHJvcGVydHlTZXQ+IGlubGluZVN0eWxlID0gZWxlbWVudC0+ZW5zdXJlSW5saW5l
U3R5bGVEZWNsKCktPmNvcHkoKTsKKyAgICAgICAgICAgIFJlZlB0cjxTdHlsZVByb3BlcnR5U2V0
PiBpbmxpbmVTdHlsZSA9IGVsZW1lbnQtPmVuc3VyZUlubGluZVN0eWxlKCktPmNvcHkoKTsKICAg
ICAgICAgICAgIGlubGluZVN0eWxlLT5zZXRQcm9wZXJ0eShDU1NQcm9wZXJ0eVVuaWNvZGVCaWRp
LCBDU1NWYWx1ZU5vcm1hbCk7CiAgICAgICAgICAgICBpbmxpbmVTdHlsZS0+cmVtb3ZlUHJvcGVy
dHkoQ1NTUHJvcGVydHlEaXJlY3Rpb24pOwogICAgICAgICAgICAgc2V0Tm9kZUF0dHJpYnV0ZShl
bGVtZW50LCBzdHlsZUF0dHIsIGlubGluZVN0eWxlLT5hc1RleHQoKSk7CkBAIC03MjMsNyArNzIz
LDcgQEAgdm9pZCBBcHBseVN0eWxlQ29tbWFuZDo6YXBwbHlJbmxpbmVTdHlsZQogICAgICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICAgICAgLy8gQWRkIHRvIHRoaXMgZWxlbWVudCdzIGlubGlu
ZSBzdHlsZSBhbmQgc2tpcCBvdmVyIGl0cyBjb250ZW50cy4KICAgICAgICAgICAgIEhUTUxFbGVt
ZW50KiBlbGVtZW50ID0gdG9IVE1MRWxlbWVudChub2RlKTsKLSAgICAgICAgICAgIFJlZlB0cjxT
dHlsZVByb3BlcnR5U2V0PiBpbmxpbmVTdHlsZSA9IGVsZW1lbnQtPmVuc3VyZUlubGluZVN0eWxl
RGVjbCgpLT5jb3B5KCk7CisgICAgICAgICAgICBSZWZQdHI8U3R5bGVQcm9wZXJ0eVNldD4gaW5s
aW5lU3R5bGUgPSBlbGVtZW50LT5lbnN1cmVJbmxpbmVTdHlsZSgpLT5jb3B5KCk7CiAgICAgICAg
ICAgICBpbmxpbmVTdHlsZS0+bWVyZ2Uoc3R5bGUtPnN0eWxlKCkpOwogICAgICAgICAgICAgc2V0
Tm9kZUF0dHJpYnV0ZShlbGVtZW50LCBzdHlsZUF0dHIsIGlubGluZVN0eWxlLT5hc1RleHQoKSk7
CiAgICAgICAgICAgICBuZXh0ID0gbm9kZS0+dHJhdmVyc2VOZXh0U2libGluZygpOwpAQCAtODg4
LDE0ICs4ODgsMTIgQEAgYm9vbCBBcHBseVN0eWxlQ29tbWFuZDo6cmVtb3ZlQ1NTU3R5bGUoRQog
ICAgIGlmICghc3R5bGUtPmNvbmZsaWN0c1dpdGhJbmxpbmVTdHlsZU9mRWxlbWVudChlbGVtZW50
LCBleHRyYWN0ZWRTdHlsZSwgcHJvcGVydGllcykpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAot
ICAgIFN0eWxlUHJvcGVydHlTZXQqIGlubGluZVN0eWxlID0gZWxlbWVudC0+aW5saW5lU3R5bGVE
ZWNsKCk7Ci0gICAgQVNTRVJUKGlubGluZVN0eWxlKTsKICAgICAvLyBGSVhNRTogV2Ugc2hvdWxk
IHVzZSBhIG1hc3MtcmVtb3ZhbCBmdW5jdGlvbiBoZXJlIGJ1dCB3ZSBkb24ndCBoYXZlIGFuIHVu
ZG9hYmxlIG9uZSB5ZXQuCiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBwcm9wZXJ0aWVzLnNp
emUoKTsgaSsrKQogICAgICAgICByZW1vdmVDU1NQcm9wZXJ0eShlbGVtZW50LCBwcm9wZXJ0aWVz
W2ldKTsKIAogICAgIC8vIE5vIG5lZWQgdG8gc2VyaWFsaXplIDxmb28gc3R5bGU9IiI+IGlmIHdl
IGp1c3QgcmVtb3ZlZCB0aGUgbGFzdCBjc3MgcHJvcGVydHkKLSAgICBpZiAoaW5saW5lU3R5bGUt
PmlzRW1wdHkoKSkKKyAgICBpZiAoZWxlbWVudC0+aW5saW5lU3R5bGUoKS0+aXNFbXB0eSgpKQog
ICAgICAgICByZW1vdmVOb2RlQXR0cmlidXRlKGVsZW1lbnQsIHN0eWxlQXR0cik7CiAKICAgICBp
ZiAoaXNTcGFuV2l0aG91dEF0dHJpYnV0ZXNPclVuc3R5bGVkU3R5bGVTcGFuKGVsZW1lbnQpKQpA
QCAtOTMyLDcgKzkzMCw3IEBAIHZvaWQgQXBwbHlTdHlsZUNvbW1hbmQ6OmFwcGx5SW5saW5lU3R5
bGUKICAgICAgICAgcmV0dXJuOwogCiAgICAgUmVmUHRyPEVkaXRpbmdTdHlsZT4gbmV3SW5saW5l
U3R5bGUgPSBzdHlsZTsKLSAgICBpZiAobm9kZS0+aXNIVE1MRWxlbWVudCgpICYmIHRvSFRNTEVs
ZW1lbnQobm9kZSktPmlubGluZVN0eWxlRGVjbCgpKSB7CisgICAgaWYgKG5vZGUtPmlzSFRNTEVs
ZW1lbnQoKSAmJiB0b0hUTUxFbGVtZW50KG5vZGUpLT5pbmxpbmVTdHlsZSgpKSB7CiAgICAgICAg
IG5ld0lubGluZVN0eWxlID0gc3R5bGUtPmNvcHkoKTsKICAgICAgICAgbmV3SW5saW5lU3R5bGUt
Pm1lcmdlSW5saW5lU3R5bGVPZkVsZW1lbnQodG9IVE1MRWxlbWVudChub2RlKSwgRWRpdGluZ1N0
eWxlOjpPdmVycmlkZVZhbHVlcyk7CiAgICAgfQpAQCAtMTMwOCw3ICsxMzA2LDcgQEAgdm9pZCBB
cHBseVN0eWxlQ29tbWFuZDo6YWRkQmxvY2tTdHlsZShjbwogICAgICAgICByZXR1cm47CiAgICAg
ICAgIAogICAgIFN0cmluZyBjc3NUZXh0ID0gc3R5bGVDaGFuZ2UuY3NzU3R5bGUoKTsKLSAgICBp
ZiAoU3R5bGVQcm9wZXJ0eVNldCogZGVjbCA9IGJsb2NrLT5pbmxpbmVTdHlsZURlY2woKSkKKyAg
ICBpZiAoY29uc3QgU3R5bGVQcm9wZXJ0eVNldCogZGVjbCA9IGJsb2NrLT5pbmxpbmVTdHlsZSgp
KQogICAgICAgICBjc3NUZXh0ICs9IGRlY2wtPmFzVGV4dCgpOwogICAgIHNldE5vZGVBdHRyaWJ1
dGUoYmxvY2ssIHN0eWxlQXR0ciwgY3NzVGV4dCk7CiB9CkBAIC0xMzczLDcgKzEzNzEsNyBAQCB2
b2lkIEFwcGx5U3R5bGVDb21tYW5kOjphZGRJbmxpbmVTdHlsZUlmCiAKICAgICBpZiAoc3R5bGVD
aGFuZ2UuY3NzU3R5bGUoKS5sZW5ndGgoKSkgewogICAgICAgICBpZiAoc3R5bGVDb250YWluZXIp
IHsKLSAgICAgICAgICAgIGlmIChTdHlsZVByb3BlcnR5U2V0KiBleGlzdGluZ1N0eWxlID0gc3R5
bGVDb250YWluZXItPmlubGluZVN0eWxlRGVjbCgpKQorICAgICAgICAgICAgaWYgKGNvbnN0IFN0
eWxlUHJvcGVydHlTZXQqIGV4aXN0aW5nU3R5bGUgPSBzdHlsZUNvbnRhaW5lci0+aW5saW5lU3R5
bGUoKSkKICAgICAgICAgICAgICAgICBzZXROb2RlQXR0cmlidXRlKHN0eWxlQ29udGFpbmVyLCBz
dHlsZUF0dHIsIGV4aXN0aW5nU3R5bGUtPmFzVGV4dCgpICsgc3R5bGVDaGFuZ2UuY3NzU3R5bGUo
KSk7CiAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgc2V0Tm9kZUF0dHJpYnV0ZShz
dHlsZUNvbnRhaW5lciwgc3R5bGVBdHRyLCBzdHlsZUNoYW5nZS5jc3NTdHlsZSgpKTsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdGluZ1N0eWxlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRpbmdTdHlsZS5jcHAJKHJldmlzaW9uIDExMDA0MykK
KysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdGluZ1N0eWxlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTI1LDcgKzEyNSw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIH5IVE1MRWxlbWVudEVx
dWl2YWxlbnQoKSB7IH0KICAgICB2aXJ0dWFsIGJvb2wgbWF0Y2hlcyhjb25zdCBFbGVtZW50KiBl
bGVtZW50KSBjb25zdCB7IHJldHVybiAhbV90YWdOYW1lIHx8IGVsZW1lbnQtPmhhc1RhZ05hbWUo
Km1fdGFnTmFtZSk7IH0KICAgICB2aXJ0dWFsIGJvb2wgaGFzQXR0cmlidXRlKCkgY29uc3QgeyBy
ZXR1cm4gZmFsc2U7IH0KLSAgICB2aXJ0dWFsIGJvb2wgcHJvcGVydHlFeGlzdHNJblN0eWxlKFN0
eWxlUHJvcGVydHlTZXQqIHN0eWxlKSBjb25zdCB7IHJldHVybiBzdHlsZSAmJiBzdHlsZS0+Z2V0
UHJvcGVydHlDU1NWYWx1ZShtX3Byb3BlcnR5SUQpOyB9CisgICAgdmlydHVhbCBib29sIHByb3Bl
cnR5RXhpc3RzSW5TdHlsZShjb25zdCBTdHlsZVByb3BlcnR5U2V0KiBzdHlsZSkgY29uc3QgeyBy
ZXR1cm4gc3R5bGUgJiYgc3R5bGUtPmdldFByb3BlcnR5Q1NTVmFsdWUobV9wcm9wZXJ0eUlEKTsg
fQogICAgIHZpcnR1YWwgYm9vbCB2YWx1ZUlzUHJlc2VudEluU3R5bGUoRWxlbWVudCosIFN0eWxl
UHJvcGVydHlTZXQqKSBjb25zdDsKICAgICB2aXJ0dWFsIHZvaWQgYWRkVG9TdHlsZShFbGVtZW50
KiwgRWRpdGluZ1N0eWxlKikgY29uc3Q7CiAKQEAgLTE3NSw3ICsxNzUsNyBAQCBwdWJsaWM6CiAg
ICAgewogICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3IEhUTUxUZXh0RGVjb3JhdGlvbkVxdWl2
YWxlbnQocHJpbWl0aXZlVmFsdWUsIHRhZ05hbWUpKTsKICAgICB9Ci0gICAgdmlydHVhbCBib29s
IHByb3BlcnR5RXhpc3RzSW5TdHlsZShTdHlsZVByb3BlcnR5U2V0KikgY29uc3Q7CisgICAgdmly
dHVhbCBib29sIHByb3BlcnR5RXhpc3RzSW5TdHlsZShjb25zdCBTdHlsZVByb3BlcnR5U2V0Kikg
Y29uc3Q7CiAgICAgdmlydHVhbCBib29sIHZhbHVlSXNQcmVzZW50SW5TdHlsZShFbGVtZW50Kiwg
U3R5bGVQcm9wZXJ0eVNldCopIGNvbnN0OwogCiBwcml2YXRlOgpAQCAtMTg4LDcgKzE4OCw3IEBA
IEhUTUxUZXh0RGVjb3JhdGlvbkVxdWl2YWxlbnQ6OkhUTUxUZXh0RGUKIHsKIH0KIAotYm9vbCBI
VE1MVGV4dERlY29yYXRpb25FcXVpdmFsZW50Ojpwcm9wZXJ0eUV4aXN0c0luU3R5bGUoU3R5bGVQ
cm9wZXJ0eVNldCogc3R5bGUpIGNvbnN0Citib29sIEhUTUxUZXh0RGVjb3JhdGlvbkVxdWl2YWxl
bnQ6OnByb3BlcnR5RXhpc3RzSW5TdHlsZShjb25zdCBTdHlsZVByb3BlcnR5U2V0KiBzdHlsZSkg
Y29uc3QKIHsKICAgICByZXR1cm4gc3R5bGUtPmdldFByb3BlcnR5Q1NTVmFsdWUoQ1NTUHJvcGVy
dHlXZWJraXRUZXh0RGVjb3JhdGlvbnNJbkVmZmVjdCkgfHwgc3R5bGUtPmdldFByb3BlcnR5Q1NT
VmFsdWUoQ1NTUHJvcGVydHlUZXh0RGVjb3JhdGlvbik7CiB9CkBAIC02NjQsNyArNjY0LDcgQEAg
Ym9vbCBFZGl0aW5nU3R5bGU6OmNvbmZsaWN0c1dpdGhJbmxpbmVTdAogICAgIEFTU0VSVChlbGVt
ZW50KTsKICAgICBBU1NFUlQoIWNvbmZsaWN0aW5nUHJvcGVydGllcyB8fCBjb25mbGljdGluZ1By
b3BlcnRpZXMtPmlzRW1wdHkoKSk7CiAKLSAgICBTdHlsZVByb3BlcnR5U2V0KiBpbmxpbmVTdHls
ZSA9IGVsZW1lbnQtPmlubGluZVN0eWxlRGVjbCgpOworICAgIGNvbnN0IFN0eWxlUHJvcGVydHlT
ZXQqIGlubGluZVN0eWxlID0gZWxlbWVudC0+aW5saW5lU3R5bGUoKTsKICAgICBpZiAoIW1fbXV0
YWJsZVN0eWxlIHx8ICFpbmxpbmVTdHlsZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCkBAIC04
NTAsNyArODUwLDcgQEAgYm9vbCBFZGl0aW5nU3R5bGU6OmVsZW1lbnRJc1N0eWxlZFNwYW5Pcgog
ICAgICAgICBtYXRjaGVkQXR0cmlidXRlcysrOwogCiAgICAgaWYgKGVsZW1lbnQtPmhhc0F0dHJp
YnV0ZShIVE1MTmFtZXM6OnN0eWxlQXR0cikpIHsKLSAgICAgICAgaWYgKFN0eWxlUHJvcGVydHlT
ZXQqIHN0eWxlID0gZWxlbWVudC0+aW5saW5lU3R5bGVEZWNsKCkpIHsKKyAgICAgICAgaWYgKGNv
bnN0IFN0eWxlUHJvcGVydHlTZXQqIHN0eWxlID0gZWxlbWVudC0+aW5saW5lU3R5bGUoKSkgewog
ICAgICAgICAgICAgdW5zaWduZWQgcHJvcGVydHlDb3VudCA9IHN0eWxlLT5wcm9wZXJ0eUNvdW50
KCk7CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcHJvcGVydHlDb3VudDsg
KytpKSB7CiAgICAgICAgICAgICAgICAgaWYgKCFpc0VkaXRpbmdQcm9wZXJ0eShzdHlsZS0+cHJv
cGVydHlBdChpKS5pZCgpKSkKQEAgLTkxMiwxOCArOTEyLDE4IEBAIHZvaWQgRWRpdGluZ1N0eWxl
OjptZXJnZVR5cGluZ1N0eWxlKERvY3UKIHZvaWQgRWRpdGluZ1N0eWxlOjptZXJnZUlubGluZVN0
eWxlT2ZFbGVtZW50KFN0eWxlZEVsZW1lbnQqIGVsZW1lbnQsIENTU1Byb3BlcnR5T3ZlcnJpZGVN
b2RlIG1vZGUsIFByb3BlcnRpZXNUb0luY2x1ZGUgcHJvcGVydGllc1RvSW5jbHVkZSkKIHsKICAg
ICBBU1NFUlQoZWxlbWVudCk7Ci0gICAgaWYgKCFlbGVtZW50LT5pbmxpbmVTdHlsZURlY2woKSkK
KyAgICBpZiAoIWVsZW1lbnQtPmlubGluZVN0eWxlKCkpCiAgICAgICAgIHJldHVybjsKIAogICAg
IHN3aXRjaCAocHJvcGVydGllc1RvSW5jbHVkZSkgewogICAgIGNhc2UgQWxsUHJvcGVydGllczoK
LSAgICAgICAgbWVyZ2VTdHlsZShlbGVtZW50LT5pbmxpbmVTdHlsZURlY2woKSwgbW9kZSk7Cisg
ICAgICAgIG1lcmdlU3R5bGUoZWxlbWVudC0+aW5saW5lU3R5bGUoKSwgbW9kZSk7CiAgICAgICAg
IHJldHVybjsKICAgICBjYXNlIE9ubHlFZGl0aW5nSW5oZXJpdGFibGVQcm9wZXJ0aWVzOgotICAg
ICAgICBtZXJnZVN0eWxlKGNvcHlFZGl0aW5nUHJvcGVydGllcyhlbGVtZW50LT5pbmxpbmVTdHls
ZURlY2woKSwgT25seUluaGVyaXRhYmxlRWRpdGluZ1Byb3BlcnRpZXMpLmdldCgpLCBtb2RlKTsK
KyAgICAgICAgbWVyZ2VTdHlsZShjb3B5RWRpdGluZ1Byb3BlcnRpZXMoZWxlbWVudC0+aW5saW5l
U3R5bGUoKSwgT25seUluaGVyaXRhYmxlRWRpdGluZ1Byb3BlcnRpZXMpLmdldCgpLCBtb2RlKTsK
ICAgICAgICAgcmV0dXJuOwogICAgIGNhc2UgRWRpdGluZ1Byb3BlcnRpZXNJbkVmZmVjdDoKLSAg
ICAgICAgbWVyZ2VTdHlsZShjb3B5RWRpdGluZ1Byb3BlcnRpZXMoZWxlbWVudC0+aW5saW5lU3R5
bGVEZWNsKCksIEFsbEVkaXRpbmdQcm9wZXJ0aWVzKS5nZXQoKSwgbW9kZSk7CisgICAgICAgIG1l
cmdlU3R5bGUoY29weUVkaXRpbmdQcm9wZXJ0aWVzKGVsZW1lbnQtPmlubGluZVN0eWxlKCksIEFs
bEVkaXRpbmdQcm9wZXJ0aWVzKS5nZXQoKSwgbW9kZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9
CiB9CkBAIC05MzEsNyArOTMxLDcgQEAgdm9pZCBFZGl0aW5nU3R5bGU6Om1lcmdlSW5saW5lU3R5
bGVPZkVsZQogc3RhdGljIGlubGluZSBib29sIGVsZW1lbnRNYXRjaGVzQW5kUHJvcGVydHlJc05v
dEluSW5saW5lU3R5bGVEZWNsKGNvbnN0IEhUTUxFbGVtZW50RXF1aXZhbGVudCogZXF1aXZhbGVu
dCwgY29uc3QgU3R5bGVkRWxlbWVudCogZWxlbWVudCwKICAgICBFZGl0aW5nU3R5bGU6OkNTU1By
b3BlcnR5T3ZlcnJpZGVNb2RlIG1vZGUsIFN0eWxlUHJvcGVydHlTZXQqIHN0eWxlKQogewotICAg
IHJldHVybiBlcXVpdmFsZW50LT5tYXRjaGVzKGVsZW1lbnQpICYmICFlcXVpdmFsZW50LT5wcm9w
ZXJ0eUV4aXN0c0luU3R5bGUoZWxlbWVudC0+aW5saW5lU3R5bGVEZWNsKCkpCisgICAgcmV0dXJu
IGVxdWl2YWxlbnQtPm1hdGNoZXMoZWxlbWVudCkgJiYgIWVxdWl2YWxlbnQtPnByb3BlcnR5RXhp
c3RzSW5TdHlsZShlbGVtZW50LT5pbmxpbmVTdHlsZSgpKQogICAgICAgICAmJiAobW9kZSA9PSBF
ZGl0aW5nU3R5bGU6Ok92ZXJyaWRlVmFsdWVzIHx8ICFlcXVpdmFsZW50LT5wcm9wZXJ0eUV4aXN0
c0luU3R5bGUoc3R5bGUpKTsKIH0KIApAQCAtOTk3LDcgKzk5Nyw3IEBAIHN0YXRpYyB2b2lkIG1l
cmdlVGV4dERlY29yYXRpb25WYWx1ZXMoQ1MKICAgICAgICAgbWVyZ2VkVmFsdWUtPmFwcGVuZChs
aW5lVGhyb3VnaC5nZXQoKSk7CiB9CiAKLXZvaWQgRWRpdGluZ1N0eWxlOjptZXJnZVN0eWxlKFN0
eWxlUHJvcGVydHlTZXQqIHN0eWxlLCBDU1NQcm9wZXJ0eU92ZXJyaWRlTW9kZSBtb2RlKQordm9p
ZCBFZGl0aW5nU3R5bGU6Om1lcmdlU3R5bGUoY29uc3QgU3R5bGVQcm9wZXJ0eVNldCogc3R5bGUs
IENTU1Byb3BlcnR5T3ZlcnJpZGVNb2RlIG1vZGUpCiB7CiAgICAgaWYgKCFzdHlsZSkKICAgICAg
ICAgcmV0dXJuOwpJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0aW5nU3R5bGUuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRpbmdTdHlsZS5oCShyZXZp
c2lvbiAxMTAwNDMpCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRpbmdTdHlsZS5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xNjEsNyArMTYxLDcgQEAgcHJpdmF0ZToKICAgICBUcmlTdGF0ZSB0
cmlTdGF0ZU9mU3R5bGUoQ1NTU3R5bGVEZWNsYXJhdGlvbiogc3R5bGVUb0NvbXBhcmUsIFNob3Vs
ZElnbm9yZVRleHRPbmx5UHJvcGVydGllcykgY29uc3Q7CiAgICAgYm9vbCBjb25mbGljdHNXaXRo
SW5saW5lU3R5bGVPZkVsZW1lbnQoU3R5bGVkRWxlbWVudCosIEVkaXRpbmdTdHlsZSogZXh0cmFj
dGVkU3R5bGUsIFZlY3RvcjxDU1NQcm9wZXJ0eUlEPiogY29uZmxpY3RpbmdQcm9wZXJ0aWVzKSBj
b25zdDsKICAgICB2b2lkIG1lcmdlSW5saW5lQW5kSW1wbGljaXRTdHlsZU9mRWxlbWVudChTdHls
ZWRFbGVtZW50KiwgQ1NTUHJvcGVydHlPdmVycmlkZU1vZGUsIFByb3BlcnRpZXNUb0luY2x1ZGUp
OwotICAgIHZvaWQgbWVyZ2VTdHlsZShTdHlsZVByb3BlcnR5U2V0KiwgQ1NTUHJvcGVydHlPdmVy
cmlkZU1vZGUpOworICAgIHZvaWQgbWVyZ2VTdHlsZShjb25zdCBTdHlsZVByb3BlcnR5U2V0Kiwg
Q1NTUHJvcGVydHlPdmVycmlkZU1vZGUpOwogCiAgICAgUmVmUHRyPFN0eWxlUHJvcGVydHlTZXQ+
IG1fbXV0YWJsZVN0eWxlOwogICAgIGJvb2wgbV9zaG91bGRVc2VGaXhlZERlZmF1bHRGb250U2l6
ZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvUmVtb3ZlQ1NTUHJvcGVydHlDb21tYW5k
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1JlbW92ZUNTU1Byb3Bl
cnR5Q29tbWFuZC5jcHAJKHJldmlzaW9uIDExMDA0MykKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvUmVtb3ZlQ1NTUHJvcGVydHlDb21tYW5kLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDMsNyAr
NDMsNyBAQCBSZW1vdmVDU1NQcm9wZXJ0eUNvbW1hbmQ6OlJlbW92ZUNTU1Byb3BlCiAKIHZvaWQg
UmVtb3ZlQ1NTUHJvcGVydHlDb21tYW5kOjpkb0FwcGx5KCkKIHsKLSAgICBTdHlsZVByb3BlcnR5
U2V0KiBzdHlsZSA9IG1fZWxlbWVudC0+aW5saW5lU3R5bGVEZWNsKCk7CisgICAgY29uc3QgU3R5
bGVQcm9wZXJ0eVNldCogc3R5bGUgPSBtX2VsZW1lbnQtPmlubGluZVN0eWxlKCk7CiAgICAgbV9v
bGRWYWx1ZSA9IHN0eWxlLT5nZXRQcm9wZXJ0eVZhbHVlKG1fcHJvcGVydHkpOwogICAgIG1faW1w
b3J0YW50ID0gc3R5bGUtPnByb3BlcnR5SXNJbXBvcnRhbnQobV9wcm9wZXJ0eSk7CiAKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQu
Y3BwCShyZXZpc2lvbiAxMTAwNDMpCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1JlcGxhY2VT
ZWxlY3Rpb25Db21tYW5kLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDg0LDcgKzQ4NCw3IEBAIHZv
aWQgUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ6OnJlbW92ZVJlZHUKIAogICAgICAgICBTdHlsZWRF
bGVtZW50KiBlbGVtZW50ID0gc3RhdGljX2Nhc3Q8U3R5bGVkRWxlbWVudCo+KG5vZGUuZ2V0KCkp
OwogCi0gICAgICAgIFN0eWxlUHJvcGVydHlTZXQqIGlubGluZVN0eWxlID0gZWxlbWVudC0+aW5s
aW5lU3R5bGVEZWNsKCk7CisgICAgICAgIGNvbnN0IFN0eWxlUHJvcGVydHlTZXQqIGlubGluZVN0
eWxlID0gZWxlbWVudC0+aW5saW5lU3R5bGUoKTsKICAgICAgICAgUmVmUHRyPEVkaXRpbmdTdHls
ZT4gbmV3SW5saW5lU3R5bGUgPSBFZGl0aW5nU3R5bGU6OmNyZWF0ZShpbmxpbmVTdHlsZSk7CiAg
ICAgICAgIGlmIChpbmxpbmVTdHlsZSkgewogICAgICAgICAgICAgQ29udGFpbmVyTm9kZSogY29u
dGV4dCA9IGVsZW1lbnQtPnBhcmVudE5vZGUoKTsKQEAgLTcwMyw3ICs3MDMsNyBAQCB2b2lkIFJl
cGxhY2VTZWxlY3Rpb25Db21tYW5kOjpoYW5kbGVTdHlsCiAgICAgaWYgKCF3cmFwcGluZ1N0eWxl
U3BhbikKICAgICAgICAgcmV0dXJuOwogCi0gICAgUmVmUHRyPEVkaXRpbmdTdHlsZT4gc3R5bGUg
PSBFZGl0aW5nU3R5bGU6OmNyZWF0ZSh3cmFwcGluZ1N0eWxlU3Bhbi0+ZW5zdXJlSW5saW5lU3R5
bGVEZWNsKCkpOworICAgIFJlZlB0cjxFZGl0aW5nU3R5bGU+IHN0eWxlID0gRWRpdGluZ1N0eWxl
OjpjcmVhdGUod3JhcHBpbmdTdHlsZVNwYW4tPmVuc3VyZUlubGluZVN0eWxlKCkpOwogICAgIENv
bnRhaW5lck5vZGUqIGNvbnRleHQgPSB3cmFwcGluZ1N0eWxlU3Bhbi0+cGFyZW50Tm9kZSgpOwog
CiAgICAgLy8gSWYgTWFpbCB3cmFwcyB0aGUgZnJhZ21lbnQgd2l0aCBhIFBhc3RlIGFzIFF1b3Rh
dGlvbiBibG9ja3F1b3RlLCBvciBpZiB5b3UncmUgcGFzdGluZyBpbnRvIGEgcXVvdGVkIHJlZ2lv
biwKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFya3VwLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hcmt1cC5jcHAJKHJldmlzaW9uIDExMDA0MykKKysr
IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFya3VwLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEw
LDggKzMxMCw4IEBAIHZvaWQgU3R5bGVkTWFya3VwQWNjdW11bGF0b3I6OmFwcGVuZEVsZW0KICAg
ICAgICAgfSBlbHNlCiAgICAgICAgICAgICBuZXdJbmxpbmVTdHlsZSA9IEVkaXRpbmdTdHlsZTo6
Y3JlYXRlKCk7CiAKLSAgICAgICAgaWYgKGVsZW1lbnQtPmlzU3R5bGVkRWxlbWVudCgpICYmIHN0
YXRpY19jYXN0PFN0eWxlZEVsZW1lbnQqPihlbGVtZW50KS0+aW5saW5lU3R5bGVEZWNsKCkpCi0g
ICAgICAgICAgICBuZXdJbmxpbmVTdHlsZS0+b3ZlcnJpZGVXaXRoU3R5bGUoc3RhdGljX2Nhc3Q8
U3R5bGVkRWxlbWVudCo+KGVsZW1lbnQpLT5pbmxpbmVTdHlsZURlY2woKSk7CisgICAgICAgIGlm
IChlbGVtZW50LT5pc1N0eWxlZEVsZW1lbnQoKSAmJiBzdGF0aWNfY2FzdDxTdHlsZWRFbGVtZW50
Kj4oZWxlbWVudCktPmlubGluZVN0eWxlKCkpCisgICAgICAgICAgICBuZXdJbmxpbmVTdHlsZS0+
b3ZlcnJpZGVXaXRoU3R5bGUoc3RhdGljX2Nhc3Q8U3R5bGVkRWxlbWVudCo+KGVsZW1lbnQpLT5p
bmxpbmVTdHlsZSgpKTsKIAogICAgICAgICBpZiAoc2hvdWxkQW5ub3RhdGVPckZvcmNlSW5saW5l
KSB7CiAgICAgICAgICAgICBpZiAoc2hvdWxkQW5ub3RhdGUoKSkKQEAgLTQ5NSw3ICs0OTUsNyBA
QCBzdGF0aWMgUGFzc1JlZlB0cjxFZGl0aW5nU3R5bGU+IHN0eWxlRnJvCiAgICAgLy8gRklYTUU6
IEhhdmluZyB0byBjb25zdF9jYXN0IGhlcmUgaXMgdWdseSwgYnV0IGl0IGlzIHF1aXRlIGEgYml0
IG9mIHdvcmsgdG8gdW50YW5nbGUKICAgICAvLyB0aGUgbm9uLWNvbnN0LW5lc3Mgb2Ygc3R5bGVG
cm9tTWF0Y2hlZFJ1bGVzRm9yRWxlbWVudC4KICAgICBIVE1MRWxlbWVudCogZWxlbWVudCA9IGNv
bnN0X2Nhc3Q8SFRNTEVsZW1lbnQqPihzdGF0aWNfY2FzdDxjb25zdCBIVE1MRWxlbWVudCo+KG5v
ZGUpKTsKLSAgICBSZWZQdHI8RWRpdGluZ1N0eWxlPiBzdHlsZSA9IEVkaXRpbmdTdHlsZTo6Y3Jl
YXRlKGVsZW1lbnQtPmlubGluZVN0eWxlRGVjbCgpKTsKKyAgICBSZWZQdHI8RWRpdGluZ1N0eWxl
PiBzdHlsZSA9IEVkaXRpbmdTdHlsZTo6Y3JlYXRlKGVsZW1lbnQtPmlubGluZVN0eWxlKCkpOwog
ICAgIHN0eWxlLT5tZXJnZVN0eWxlRnJvbVJ1bGVzKGVsZW1lbnQpOwogICAgIHJldHVybiBzdHls
ZS5yZWxlYXNlKCk7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxFbGVtZW50LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxFbGVtZW50LmNwcAkocmV2
aXNpb24gMTEwMDQzKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRWxlbWVudC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTExMDYsMTIgKzExMDYsMTIgQEAgdm9pZCBTdHlsZWRFbGVtZW50Ojpj
b3B5Tm9uQXR0cmlidXRlUHJvcAogICAgIEFTU0VSVChzb3VyY2VFbGVtZW50LT5pc1N0eWxlZEVs
ZW1lbnQoKSk7CiAKICAgICBjb25zdCBTdHlsZWRFbGVtZW50KiBzb3VyY2UgPSBzdGF0aWNfY2Fz
dDxjb25zdCBTdHlsZWRFbGVtZW50Kj4oc291cmNlRWxlbWVudCk7Ci0gICAgaWYgKCFzb3VyY2Ut
PmlubGluZVN0eWxlRGVjbCgpKQorICAgIGlmICghc291cmNlLT5pbmxpbmVTdHlsZSgpKQogICAg
ICAgICByZXR1cm47CiAKLSAgICBTdHlsZVByb3BlcnR5U2V0KiBpbmxpbmVTdHlsZSA9IGVuc3Vy
ZUlubGluZVN0eWxlRGVjbCgpOwotICAgIGlubGluZVN0eWxlLT5jb3B5UHJvcGVydGllc0Zyb20o
KnNvdXJjZS0+aW5saW5lU3R5bGVEZWNsKCkpOwotICAgIGlubGluZVN0eWxlLT5zZXRTdHJpY3RQ
YXJzaW5nKHNvdXJjZS0+aW5saW5lU3R5bGVEZWNsKCktPnVzZVN0cmljdFBhcnNpbmcoKSk7Cisg
ICAgU3R5bGVQcm9wZXJ0eVNldCogaW5saW5lU3R5bGUgPSBlbnN1cmVBdHRyaWJ1dGVEYXRhKCkt
PmVuc3VyZU11dGFibGVJbmxpbmVTdHlsZSh0aGlzKTsKKyAgICBpbmxpbmVTdHlsZS0+Y29weVBy
b3BlcnRpZXNGcm9tKCpzb3VyY2UtPmlubGluZVN0eWxlKCkpOworICAgIGlubGluZVN0eWxlLT5z
ZXRTdHJpY3RQYXJzaW5nKHNvdXJjZS0+aW5saW5lU3R5bGUoKS0+dXNlU3RyaWN0UGFyc2luZygp
KTsKIAogICAgIHNldElzU3R5bGVBdHRyaWJ1dGVWYWxpZChzb3VyY2UtPmlzU3R5bGVBdHRyaWJ1
dGVWYWxpZCgpKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzU3R5
bGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1N0
eWxlLmNwcAkocmV2aXNpb24gMTEwMDQzKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMv
Q2FudmFzU3R5bGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02OSw3ICs2OSw3IEBAIFJHQkEzMiBj
dXJyZW50Q29sb3IoSFRNTENhbnZhc0VsZW1lbnQqIGMKICAgICBpZiAoIWNhbnZhcyB8fCAhY2Fu
dmFzLT5pbkRvY3VtZW50KCkpCiAgICAgICAgIHJldHVybiBDb2xvcjo6YmxhY2s7CiAgICAgUkdC
QTMyIHJnYmEgPSBDb2xvcjo6YmxhY2s7Ci0gICAgQ1NTUGFyc2VyOjpwYXJzZUNvbG9yKHJnYmEs
IGNhbnZhcy0+ZW5zdXJlSW5saW5lU3R5bGVEZWNsKCktPmdldFByb3BlcnR5VmFsdWUoQ1NTUHJv
cGVydHlDb2xvcikpOworICAgIENTU1BhcnNlcjo6cGFyc2VDb2xvcihyZ2JhLCBjYW52YXMtPmVu
c3VyZUlubGluZVN0eWxlKCktPmdldFByb3BlcnR5VmFsdWUoQ1NTUHJvcGVydHlDb2xvcikpOwog
ICAgIHJldHVybiByZ2JhOwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2VTZXJp
YWxpemVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2VTZXJpYWxp
emVyLmNwcAkocmV2aXNpb24gMTEwMDQzKQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlU2Vy
aWFsaXplci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyOCw3ICsyMjgsNyBAQCB2b2lkIFBhZ2VT
ZXJpYWxpemVyOjpzZXJpYWxpemVGcmFtZShGcmFtCiAgICAgICAgIEVsZW1lbnQqIGVsZW1lbnQg
PSB0b0VsZW1lbnQobm9kZSk7CiAgICAgICAgIC8vIFdlIGhhdmUgdG8gcHJvY2VzcyBpbi1saW5l
IHN0eWxlIGFzIGl0IG1pZ2h0IGNvbnRhaW4gc29tZSByZXNvdXJjZXMgKHR5cGljYWxseSBiYWNr
Z3JvdW5kIGltYWdlcykuCiAgICAgICAgIGlmIChlbGVtZW50LT5pc1N0eWxlZEVsZW1lbnQoKSkK
LSAgICAgICAgICAgIHJldHJpZXZlUmVzb3VyY2VzRm9yUHJvcGVydGllcyhzdGF0aWNfY2FzdDxT
dHlsZWRFbGVtZW50Kj4oZWxlbWVudCktPmlubGluZVN0eWxlRGVjbCgpLCBkb2N1bWVudCk7Cisg
ICAgICAgICAgICByZXRyaWV2ZVJlc291cmNlc0ZvclByb3BlcnRpZXMoc3RhdGljX2Nhc3Q8U3R5
bGVkRWxlbWVudCo+KGVsZW1lbnQpLT5pbmxpbmVTdHlsZSgpLCBkb2N1bWVudCk7CiAKICAgICAg
ICAgaWYgKGVsZW1lbnQtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjppbWdUYWcpKSB7CiAgICAgICAg
ICAgICBIVE1MSW1hZ2VFbGVtZW50KiBpbWFnZUVsZW1lbnQgPSBzdGF0aWNfY2FzdDxIVE1MSW1h
Z2VFbGVtZW50Kj4oZWxlbWVudCk7CkBAIC0zMDgsNyArMzA4LDcgQEAgdm9pZCBQYWdlU2VyaWFs
aXplcjo6cmV0cmlldmVSZXNvdXJjZXNGbwogICAgIHJldHJpZXZlUmVzb3VyY2VzRm9yUHJvcGVy
dGllcyhydWxlLT5wcm9wZXJ0aWVzKCksIGRvY3VtZW50KTsKIH0KIAotdm9pZCBQYWdlU2VyaWFs
aXplcjo6cmV0cmlldmVSZXNvdXJjZXNGb3JQcm9wZXJ0aWVzKFN0eWxlUHJvcGVydHlTZXQqIHN0
eWxlRGVjbGFyYXRpb24sIERvY3VtZW50KiBkb2N1bWVudCkKK3ZvaWQgUGFnZVNlcmlhbGl6ZXI6
OnJldHJpZXZlUmVzb3VyY2VzRm9yUHJvcGVydGllcyhjb25zdCBTdHlsZVByb3BlcnR5U2V0KiBz
dHlsZURlY2xhcmF0aW9uLCBEb2N1bWVudCogZG9jdW1lbnQpCiB7CiAgICAgaWYgKCFzdHlsZURl
Y2xhcmF0aW9uKQogICAgICAgICByZXR1cm47CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL1Bh
Z2VTZXJpYWxpemVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlU2Vy
aWFsaXplci5oCShyZXZpc2lvbiAxMTAwNDMpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2VT
ZXJpYWxpemVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTc4LDcgKzc4LDcgQEAgcHJpdmF0ZToKICAg
ICB2b2lkIHNlcmlhbGl6ZUNTU1N0eWxlU2hlZXQoQ1NTU3R5bGVTaGVldCosIGNvbnN0IEtVUkwm
KTsKIAogICAgIHZvaWQgYWRkSW1hZ2VUb1Jlc291cmNlcyhDYWNoZWRJbWFnZSosIFJlbmRlck9i
amVjdCosIGNvbnN0IEtVUkwmKTsKLSAgICB2b2lkIHJldHJpZXZlUmVzb3VyY2VzRm9yUHJvcGVy
dGllcyhTdHlsZVByb3BlcnR5U2V0KiwgRG9jdW1lbnQqKTsKKyAgICB2b2lkIHJldHJpZXZlUmVz
b3VyY2VzRm9yUHJvcGVydGllcyhjb25zdCBTdHlsZVByb3BlcnR5U2V0KiwgRG9jdW1lbnQqKTsK
ICAgICB2b2lkIHJldHJpZXZlUmVzb3VyY2VzRm9yUnVsZShTdHlsZVJ1bGUqLCBEb2N1bWVudCop
OwogCiAgICAgVmVjdG9yPFJlc291cmNlPiogbV9yZXNvdXJjZXM7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyVHJlZUFzVGV4dC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRyZWVBc1RleHQuY3BwCShyZXZpc2lvbiAxMTAwNDMp
CisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVHJlZUFzVGV4dC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTE4Myw3ICsxODMsNyBAQCBzdGF0aWMgYm9vbCBpc0VtcHR5T3JVbnN0eWxl
ZEFwcGxlU3R5bGVTCiAgICAgaWYgKCFub2RlLT5oYXNDaGlsZE5vZGVzKCkpCiAgICAgICAgIHJl
dHVybiB0cnVlOwogCi0gICAgU3R5bGVQcm9wZXJ0eVNldCogaW5saW5lU3R5bGVEZWNsID0gZWxl
bS0+aW5saW5lU3R5bGVEZWNsKCk7CisgICAgY29uc3QgU3R5bGVQcm9wZXJ0eVNldCogaW5saW5l
U3R5bGVEZWNsID0gZWxlbS0+aW5saW5lU3R5bGUoKTsKICAgICByZXR1cm4gKCFpbmxpbmVTdHls
ZURlY2wgfHwgaW5saW5lU3R5bGVEZWNsLT5pc0VtcHR5KCkpOwogfQogCkluZGV4OiBTb3VyY2Uv
V2ViS2l0L3F0L0FwaS9xd2ViZWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktp
dC9xdC9BcGkvcXdlYmVsZW1lbnQuY3BwCShyZXZpc2lvbiAxMTAwNDMpCisrKyBTb3VyY2UvV2Vi
S2l0L3F0L0FwaS9xd2ViZWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg0NCw3ICs4NDQs
NyBAQCBRU3RyaW5nIFFXZWJFbGVtZW50OjpzdHlsZVByb3BlcnR5KGNvbnN0CiAgICAgaWYgKCFw
cm9wSUQpCiAgICAgICAgIHJldHVybiBRU3RyaW5nKCk7CiAKLSAgICBTdHlsZVByb3BlcnR5U2V0
KiBzdHlsZSA9IHN0YXRpY19jYXN0PFN0eWxlZEVsZW1lbnQqPihtX2VsZW1lbnQpLT5lbnN1cmVJ
bmxpbmVTdHlsZURlY2woKTsKKyAgICBjb25zdCBTdHlsZVByb3BlcnR5U2V0KiBzdHlsZSA9IHN0
YXRpY19jYXN0PFN0eWxlZEVsZW1lbnQqPihtX2VsZW1lbnQpLT5lbnN1cmVJbmxpbmVTdHlsZSgp
OwogCiAgICAgaWYgKHN0cmF0ZWd5ID09IElubGluZVN0eWxlKQogICAgICAgICByZXR1cm4gc3R5
bGUtPmdldFByb3BlcnR5VmFsdWUocHJvcElEKTsKQEAgLTkwOSwxMSArOTA5LDcgQEAgdm9pZCBR
V2ViRWxlbWVudDo6c2V0U3R5bGVQcm9wZXJ0eShjb25zdAogICAgICAgICByZXR1cm47CiAKICAg
ICBpbnQgcHJvcElEID0gY3NzUHJvcGVydHlJRChuYW1lKTsKLSAgICBTdHlsZVByb3BlcnR5U2V0
KiBzdHlsZSA9IHN0YXRpY19jYXN0PFN0eWxlZEVsZW1lbnQqPihtX2VsZW1lbnQpLT5lbnN1cmVJ
bmxpbmVTdHlsZURlY2woKTsKLSAgICBpZiAoIXByb3BJRCB8fCAhc3R5bGUpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIHN0eWxlLT5zZXRQcm9wZXJ0eShwcm9wSUQsIHZhbHVlKTsKKyAgICBzdGF0
aWNfY2FzdDxTdHlsZWRFbGVtZW50Kj4obV9lbGVtZW50KS0+c2V0SW5saW5lU3R5bGVQcm9wZXJ0
eShwcm9wSUQsIHZhbHVlKTsKIH0KIAogLyohCg==
</data>
<flag name="review"
          id="133666"
          type_id="1"
          status="+"
          setter="kling"
    />
    <flag name="commit-queue"
          id="133686"
          type_id="3"
          status="-"
          setter="webkit.review.bot"
    />
          </attachment>
      

    </bug>

</bugzilla>