<?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>75508</bug_id>
          
          <creation_ts>2012-01-03 18:22:50 -0800</creation_ts>
          <short_desc>Analyze stylesheet scope to minimize style recalcs</short_desc>
          <delta_ts>2012-01-19 07:26:37 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>CSS</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Antti Koivisto">koivisto</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>dglazkov</cc>
    
    <cc>hyatt</cc>
    
    <cc>kling</cc>
    
    <cc>macpherson</cc>
    
    <cc>manyoso</cc>
    
    <cc>mihaip</cc>
    
    <cc>phiw2</cc>
    
    <cc>pnormand</cc>
    
    <cc>rolandsteiner</cc>
    
    <cc>sam</cc>
    
    <cc>staikos</cc>
    
    <cc>tonikitoo</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>529222</commentid>
    <comment_count>0</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2012-01-03 18:22:50 -0800</bug_when>
    <thetext>It is a relatively common pattern to use inline stylesheets in document body where all rules are scoped using descendant selector

&lt;style&gt;
#foo {...}
#foo div {...}
#foo .bar {...}
&lt;/style&gt;

When this pattern is used it is also common that the rules only apply to elements that come after the style element. 

When the set of active stylesheets changes we invalidate and recompute the entire document style. This is very expensive.  We can detect the case above and avoid the style recalc.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>529246</commentid>
    <comment_count>1</comment_count>
      <attachid>121038</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2012-01-03 18:58:57 -0800</bug_when>
    <thetext>Created attachment 121038
patch

On engadget.com, this patch cuts the time spent in style recalcs to roughly half. There are further savings from reduced relayouts. In total the engine CPU time used over the page load is reduced by ~10%.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>529262</commentid>
    <comment_count>2</comment_count>
      <attachid>121038</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-01-03 19:40:54 -0800</bug_when>
    <thetext>Comment on attachment 121038
patch

Attachment 121038 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/11082256</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>529539</commentid>
    <comment_count>3</comment_count>
      <attachid>121113</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2012-01-04 08:18:11 -0800</bug_when>
    <thetext>Created attachment 121113
Chromium build fix plus some cleanups</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>529550</commentid>
    <comment_count>4</comment_count>
      <attachid>121115</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2012-01-04 09:00:02 -0800</bug_when>
    <thetext>Created attachment 121115
update to tot</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>529566</commentid>
    <comment_count>5</comment_count>
      <attachid>121115</attachid>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2012-01-04 09:28:35 -0800</bug_when>
    <thetext>Comment on attachment 121115
update to tot

I think RecalcStyleOnlyifNeeded would be better than PendingStylesheetCompleted.

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>529611</commentid>
    <comment_count>6</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2012-01-04 10:55:26 -0800</bug_when>
    <thetext>&lt;rdar://problem/10643107&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>529666</commentid>
    <comment_count>7</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2012-01-04 12:05:28 -0800</bug_when>
    <thetext>http://trac.webkit.org/changeset/104060</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>530264</commentid>
    <comment_count>8</comment_count>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2012-01-05 07:02:43 -0800</bug_when>
    <thetext>(In reply to comment #7)
&gt; http://trac.webkit.org/changeset/104060

It seems this patch broke a test in GTK: http://build.webkit.org/results/GTK%20Linux%2064-bit%20Release/r104153%20(15719)/fast/forms/textarea-metrics-diff.txt

--- /home/slave/webkitgtk/gtk-linux-64-release/build/layout-test-results/fast/forms/textarea-metrics-expected.txt 
+++ /home/slave/webkitgtk/gtk-linux-64-release/build/layout-test-results/fast/forms/textarea-metrics-actual.txt 
@@ -88,84 +88,84 @@
 
 Testing CSS1Compat document.
 Properties = none
-PASS CSS1Compatdoc.getElementById(&apos;no-styles&apos;).clientWidth is 54
-PASS CSS1Compatdoc.getElementById(&apos;no-styles&apos;).clientHeight is 54
-PASS CSS1Compatdoc.getElementById(&apos;no-styles&apos;).offsetWidth is 56
-PASS CSS1Compatdoc.getElementById(&apos;no-styles&apos;).offsetHeight is 56
-PASS CSS1Compatdoc.getElementById(&apos;no-styles&apos;).scrollWidth is 54
-PASS CSS1Compatdoc.getElementById(&apos;no-styles&apos;).scrollHeight is 54
+FAIL CSS1Compatdoc.getElementById(&apos;no-styles&apos;).clientWidth should be 54. Was 48.
+FAIL CSS1Compatdoc.getElementById(&apos;no-styles&apos;).clientHeight should be 54. Was 48.
+FAIL CSS1Compatdoc.getElementById(&apos;no-styles&apos;).offsetWidth should be 56. Was 50.
+FAIL CSS1Compatdoc.getElementById(&apos;no-styles&apos;).offsetHeight should be 56. Was 50.
+FAIL CSS1Compatdoc.getElementById(&apos;no-styles&apos;).scrollWidth should be 54. Was 48.
+FAIL CSS1Compatdoc.getElementById(&apos;no-styles&apos;).scrollHeight should be 54. Was 48.
 
 Properties = disabled: &quot;true&quot;,
-PASS CSS1Compatdoc.getElementById(&apos;-disabled-true-&apos;).clientWidth is 54
-PASS CSS1Compatdoc.getElementById(&apos;-disabled-true-&apos;).clientHeight is 54
-PASS CSS1Compatdoc.getElementById(&apos;-disabled-true-&apos;).offsetWidth is 56
-PASS CSS1Compatdoc.getElementById(&apos;-disabled-true-&apos;).offsetHeight is 56
-PASS CSS1Compatdoc.getElementById(&apos;-disabled-true-&apos;).scrollWidth is 54
-PASS CSS1Compatdoc.getElementById(&apos;-disabled-true-&apos;).scrollHeight is 54
+FAIL CSS1Compatdoc.getElementById(&apos;-disabled-true-&apos;).clientWidth should be 54. Was 48.
+FAIL CSS1Compatdoc.getElementById(&apos;-disabled-true-&apos;).clientHeight should be 54. Was 48.
+FAIL CSS1Compatdoc.getElementById(&apos;-disabled-true-&apos;).offsetWidth should be 56. Was 50.
+FAIL CSS1Compatdoc.getElementById(&apos;-disabled-true-&apos;).offsetHeight should be 56. Was 50.
+FAIL CSS1Compatdoc.getElementById(&apos;-disabled-true-&apos;).scrollWidth should be 54. Was 48.
+FAIL CSS1Compatdoc.getElementById(&apos;-disabled-true-&apos;).scrollHeight should be 54. Was 48.
 
 Properties = innerHTML: &quot;A&quot;,
-PASS CSS1Compatdoc.getElementById(&apos;-innerHTML-A-&apos;).clientWidth is 54
-PASS CSS1Compatdoc.getElementById(&apos;-innerHTML-A-&apos;).clientHeight is 54
-PASS CSS1Compatdoc.getElementById(&apos;-innerHTML-A-&apos;).offsetWidth is 56
-PASS CSS1Compatdoc.getElementById(&apos;-innerHTML-A-&apos;).offsetHeight is 56
-PASS CSS1Compatdoc.getElementById(&apos;-innerHTML-A-&apos;).scrollWidth is 54
-PASS CSS1Compatdoc.getElementById(&apos;-innerHTML-A-&apos;).scrollHeight is 54
+FAIL CSS1Compatdoc.getElementById(&apos;-innerHTML-A-&apos;).clientWidth should be 54. Was 48.
+FAIL CSS1Compatdoc.getElementById(&apos;-innerHTML-A-&apos;).clientHeight should be 54. Was 48.
+FAIL CSS1Compatdoc.getElementById(&apos;-innerHTML-A-&apos;).offsetWidth should be 56. Was 50.
+FAIL CSS1Compatdoc.getElementById(&apos;-innerHTML-A-&apos;).offsetHeight should be 56. Was 50.
+FAIL CSS1Compatdoc.getElementById(&apos;-innerHTML-A-&apos;).scrollWidth should be 54. Was 48.
+FAIL CSS1Compatdoc.getElementById(&apos;-innerHTML-A-&apos;).scrollHeight should be 54. Was 48.
 
 Properties = innerHTML: &quot;AAAAAAAAA&quot;,
-PASS CSS1Compatdoc.getElementById(&apos;-innerHTML-AAAAAAAAA-&apos;).clientWidth is 37
-PASS CSS1Compatdoc.getElementById(&apos;-innerHTML-AAAAAAAAA-&apos;).clientHeight is 54
-PASS CSS1Compatdoc.getElementById(&apos;-innerHTML-AAAAAAAAA-&apos;).offsetWidth is 56
-PASS CSS1Compatdoc.getElementById(&apos;-innerHTML-AAAAAAAAA-&apos;).offsetHeight is 56
-PASS CSS1Compatdoc.getElementById(&apos;-innerHTML-AAAAAAAAA-&apos;).scrollWidth is 37
-FAIL CSS1Compatdoc.getElementById(&apos;-innerHTML-AAAAAAAAA-&apos;).scrollHeight should be 64. Was 104.
+FAIL CSS1Compatdoc.getElementById(&apos;-innerHTML-AAAAAAAAA-&apos;).clientWidth should be 37. Was 31.
+FAIL CSS1Compatdoc.getElementById(&apos;-innerHTML-AAAAAAAAA-&apos;).clientHeight should be 54. Was 48.
+FAIL CSS1Compatdoc.getElementById(&apos;-innerHTML-AAAAAAAAA-&apos;).offsetWidth should be 56. Was 50.
+FAIL CSS1Compatdoc.getElementById(&apos;-innerHTML-AAAAAAAAA-&apos;).offsetHeight should be 56. Was 50.
+FAIL CSS1Compatdoc.getElementById(&apos;-innerHTML-AAAAAAAAA-&apos;).scrollWidth should be 37. Was 31.
+FAIL CSS1Compatdoc.getElementById(&apos;-innerHTML-AAAAAAAAA-&apos;).scrollHeight should be 64. Was 184.
 
 Properties = innerHTML: &quot;A&quot;, disabled: &quot;true&quot;,
-PASS CSS1Compatdoc.getElementById(&apos;-innerHTML-A-disabled-true-&apos;).clientWidth is 54
-PASS CSS1Compatdoc.getElementById(&apos;-innerHTML-A-disabled-true-&apos;).clientHeight is 54
-PASS CSS1Compatdoc.getElementById(&apos;-innerHTML-A-disabled-true-&apos;).offsetWidth is 56
-PASS CSS1Compatdoc.getElementById(&apos;-innerHTML-A-disabled-true-&apos;).offsetHeight is 56
-PASS CSS1Compatdoc.getElementById(&apos;-innerHTML-A-disabled-true-&apos;).scrollWidth is 54
-PASS CSS1Compatdoc.getElementById(&apos;-innerHTML-A-disabled-true-&apos;).scrollHeight is 54
+FAIL CSS1Compatdoc.getElementById(&apos;-innerHTML-A-disabled-true-&apos;).clientWidth should be 54. Was 48.
+FAIL CSS1Compatdoc.getElementById(&apos;-innerHTML-A-disabled-true-&apos;).clientHeight should be 54. Was 48.
+FAIL CSS1Compatdoc.getElementById(&apos;-innerHTML-A-disabled-true-&apos;).offsetWidth should be 56. Was 50.
+FAIL CSS1Compatdoc.getElementById(&apos;-innerHTML-A-disabled-true-&apos;).offsetHeight should be 56. Was 50.
+FAIL CSS1Compatdoc.getElementById(&apos;-innerHTML-A-disabled-true-&apos;).scrollWidth should be 54. Was 48.
+FAIL CSS1Compatdoc.getElementById(&apos;-innerHTML-A-disabled-true-&apos;).scrollHeight should be 54. Was 48.
 
 Properties = innerHTML: &quot;AAAAAAAAA&quot;, disabled: &quot;true&quot;,
-PASS CSS1Compatdoc.getElementById(&apos;-innerHTML-AAAAAAAAA-disabled-true-&apos;).clientWidth is 37
-PASS CSS1Compatdoc.getElementById(&apos;-innerHTML-AAAAAAAAA-disabled-true-&apos;).clientHeight is 54
-PASS CSS1Compatdoc.getElementById(&apos;-innerHTML-AAAAAAAAA-disabled-true-&apos;).offsetWidth is 56
-PASS CSS1Compatdoc.getElementById(&apos;-innerHTML-AAAAAAAAA-disabled-true-&apos;).offsetHeight is 56
-PASS CSS1Compatdoc.getElementById(&apos;-innerHTML-AAAAAAAAA-disabled-true-&apos;).scrollWidth is 37
-FAIL CSS1Compatdoc.getElementById(&apos;-innerHTML-AAAAAAAAA-disabled-true-&apos;).scrollHeight should be 64. Was 104.
+FAIL CSS1Compatdoc.getElementById(&apos;-innerHTML-AAAAAAAAA-disabled-true-&apos;).clientWidth should be 37. Was 31.
+FAIL CSS1Compatdoc.getElementById(&apos;-innerHTML-AAAAAAAAA-disabled-true-&apos;).clientHeight should be 54. Was 48.
+FAIL CSS1Compatdoc.getElementById(&apos;-innerHTML-AAAAAAAAA-disabled-true-&apos;).offsetWidth should be 56. Was 50.
+FAIL CSS1Compatdoc.getElementById(&apos;-innerHTML-AAAAAAAAA-disabled-true-&apos;).offsetHeight should be 56. Was 50.
+FAIL CSS1Compatdoc.getElementById(&apos;-innerHTML-AAAAAAAAA-disabled-true-&apos;).scrollWidth should be 37. Was 31.
+FAIL CSS1Compatdoc.getElementById(&apos;-innerHTML-AAAAAAAAA-disabled-true-&apos;).scrollHeight should be 64. Was 184.
 
 Properties = innerHTML: &quot;A&quot;, style: &quot;padding:8px&quot;,
-PASS CSS1Compatdoc.getElementById(&apos;-innerHTML-A-style-padding-8px-&apos;).clientWidth is 66
-PASS CSS1Compatdoc.getElementById(&apos;-innerHTML-A-style-padding-8px-&apos;).clientHeight is 66
-PASS CSS1Compatdoc.getElementById(&apos;-innerHTML-A-style-padding-8px-&apos;).offsetWidth is 68
-PASS CSS1Compatdoc.getElementById(&apos;-innerHTML-A-style-padding-8px-&apos;).offsetHeight is 68
-PASS CSS1Compatdoc.getElementById(&apos;-innerHTML-A-style-padding-8px-&apos;).scrollWidth is 66
-PASS CSS1Compatdoc.getElementById(&apos;-innerHTML-A-style-padding-8px-&apos;).scrollHeight is 66
+FAIL CSS1Compatdoc.getElementById(&apos;-innerHTML-A-style-padding-8px-&apos;).clientWidth should be 66. Was 48.
+FAIL CSS1Compatdoc.getElementById(&apos;-innerHTML-A-style-padding-8px-&apos;).clientHeight should be 66. Was 48.
+FAIL CSS1Compatdoc.getElementById(&apos;-innerHTML-A-style-padding-8px-&apos;).offsetWidth should be 68. Was 50.
+FAIL CSS1Compatdoc.getElementById(&apos;-innerHTML-A-style-padding-8px-&apos;).offsetHeight should be 68. Was 50.
+FAIL CSS1Compatdoc.getElementById(&apos;-innerHTML-A-style-padding-8px-&apos;).scrollWidth should be 66. Was 48.
+FAIL CSS1Compatdoc.getElementById(&apos;-innerHTML-A-style-padding-8px-&apos;).scrollHeight should be 66. Was 48.
 
 Properties = innerHTML: &quot;AAAAAAAAA&quot;, style: &quot;padding:8px&quot;,
-PASS CSS1Compatdoc.getElementById(&apos;-innerHTML-AAAAAAAAA-style-padding-8px-&apos;).clientWidth is 49
-PASS CSS1Compatdoc.getElementById(&apos;-innerHTML-AAAAAAAAA-style-padding-8px-&apos;).clientHeight is 66
-PASS CSS1Compatdoc.getElementById(&apos;-innerHTML-AAAAAAAAA-style-padding-8px-&apos;).offsetWidth is 68
-PASS CSS1Compatdoc.getElementById(&apos;-innerHTML-AAAAAAAAA-style-padding-8px-&apos;).offsetHeight is 68
-PASS CSS1Compatdoc.getElementById(&apos;-innerHTML-AAAAAAAAA-style-padding-8px-&apos;).scrollWidth is 49
-FAIL CSS1Compatdoc.getElementById(&apos;-innerHTML-AAAAAAAAA-style-padding-8px-&apos;).scrollHeight should be 76. Was 116.
+FAIL CSS1Compatdoc.getElementById(&apos;-innerHTML-AAAAAAAAA-style-padding-8px-&apos;).clientWidth should be 49. Was 31.
+FAIL CSS1Compatdoc.getElementById(&apos;-innerHTML-AAAAAAAAA-style-padding-8px-&apos;).clientHeight should be 66. Was 48.
+FAIL CSS1Compatdoc.getElementById(&apos;-innerHTML-AAAAAAAAA-style-padding-8px-&apos;).offsetWidth should be 68. Was 50.
+FAIL CSS1Compatdoc.getElementById(&apos;-innerHTML-AAAAAAAAA-style-padding-8px-&apos;).offsetHeight should be 68. Was 50.
+FAIL CSS1Compatdoc.getElementById(&apos;-innerHTML-AAAAAAAAA-style-padding-8px-&apos;).scrollWidth should be 49. Was 31.
+FAIL CSS1Compatdoc.getElementById(&apos;-innerHTML-AAAAAAAAA-style-padding-8px-&apos;).scrollHeight should be 76. Was 196.
 
 Properties = innerHTML: &quot;A&quot;, rows: &quot;10&quot;,
-PASS CSS1Compatdoc.getElementById(&apos;-innerHTML-A-rows-10-&apos;).clientWidth is 54
-PASS CSS1Compatdoc.getElementById(&apos;-innerHTML-A-rows-10-&apos;).clientHeight is 54
-PASS CSS1Compatdoc.getElementById(&apos;-innerHTML-A-rows-10-&apos;).offsetWidth is 56
-PASS CSS1Compatdoc.getElementById(&apos;-innerHTML-A-rows-10-&apos;).offsetHeight is 56
-PASS CSS1Compatdoc.getElementById(&apos;-innerHTML-A-rows-10-&apos;).scrollWidth is 54
-PASS CSS1Compatdoc.getElementById(&apos;-innerHTML-A-rows-10-&apos;).scrollHeight is 54
+FAIL CSS1Compatdoc.getElementById(&apos;-innerHTML-A-rows-10-&apos;).clientWidth should be 54. Was 48.
+FAIL CSS1Compatdoc.getElementById(&apos;-innerHTML-A-rows-10-&apos;).clientHeight should be 54. Was 48.
+FAIL CSS1Compatdoc.getElementById(&apos;-innerHTML-A-rows-10-&apos;).offsetWidth should be 56. Was 50.
+FAIL CSS1Compatdoc.getElementById(&apos;-innerHTML-A-rows-10-&apos;).offsetHeight should be 56. Was 50.
+FAIL CSS1Compatdoc.getElementById(&apos;-innerHTML-A-rows-10-&apos;).scrollWidth should be 54. Was 48.
+FAIL CSS1Compatdoc.getElementById(&apos;-innerHTML-A-rows-10-&apos;).scrollHeight should be 54. Was 48.
 
 Properties = innerHTML: &quot;AAAAAAAAA&quot;, rows: &quot;10&quot;,
-PASS CSS1Compatdoc.getElementById(&apos;-innerHTML-AAAAAAAAA-rows-10-&apos;).clientWidth is 37
-PASS CSS1Compatdoc.getElementById(&apos;-innerHTML-AAAAAAAAA-rows-10-&apos;).clientHeight is 54
-PASS CSS1Compatdoc.getElementById(&apos;-innerHTML-AAAAAAAAA-rows-10-&apos;).offsetWidth is 56
-PASS CSS1Compatdoc.getElementById(&apos;-innerHTML-AAAAAAAAA-rows-10-&apos;).offsetHeight is 56
-PASS CSS1Compatdoc.getElementById(&apos;-innerHTML-AAAAAAAAA-rows-10-&apos;).scrollWidth is 37
-FAIL CSS1Compatdoc.getElementById(&apos;-innerHTML-AAAAAAAAA-rows-10-&apos;).scrollHeight should be 64. Was 104.
+FAIL CSS1Compatdoc.getElementById(&apos;-innerHTML-AAAAAAAAA-rows-10-&apos;).clientWidth should be 37. Was 31.
+FAIL CSS1Compatdoc.getElementById(&apos;-innerHTML-AAAAAAAAA-rows-10-&apos;).clientHeight should be 54. Was 48.
+FAIL CSS1Compatdoc.getElementById(&apos;-innerHTML-AAAAAAAAA-rows-10-&apos;).offsetWidth should be 56. Was 50.
+FAIL CSS1Compatdoc.getElementById(&apos;-innerHTML-AAAAAAAAA-rows-10-&apos;).offsetHeight should be 56. Was 50.
+FAIL CSS1Compatdoc.getElementById(&apos;-innerHTML-AAAAAAAAA-rows-10-&apos;).scrollWidth should be 37. Was 31.
+FAIL CSS1Compatdoc.getElementById(&apos;-innerHTML-AAAAAAAAA-rows-10-&apos;).scrollHeight should be 64. Was 184.
 
 PASS successfullyParsed is true</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>530549</commentid>
    <comment_count>9</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2012-01-05 12:40:37 -0800</bug_when>
    <thetext>Filed bug 75644: REGRESSION (r104060): fast/forms/textarea-metrics.html.

Philippe, next time please file a new bug instead of pasting stuff to the bug you think is causing the regression.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>531614</commentid>
    <comment_count>10</comment_count>
    <who name="Philippe Wittenbergh">phiw2</who>
    <bug_when>2012-01-06 23:30:38 -0800</bug_when>
    <thetext>Did this cause bug 75772 ?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>538198</commentid>
    <comment_count>11</comment_count>
    <who name="Mihai Parparita">mihaip</who>
    <bug_when>2012-01-18 14:49:08 -0800</bug_when>
    <thetext>FWIW, this causes http://crbug.com/109888. I&apos;ll see if I can create a reduced test case, and file a separate bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>538691</commentid>
    <comment_count>12</comment_count>
    <who name="Mihai Parparita">mihaip</who>
    <bug_when>2012-01-19 07:26:37 -0800</bug_when>
    <thetext>(In reply to comment #11)
&gt; FWIW, this causes http://crbug.com/109888. I&apos;ll see if I can create a reduced test case, and file a separate bug.

I filed https://bugs.webkit.org/show_bug.cgi?id=76590</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>121038</attachid>
            <date>2012-01-03 18:58:57 -0800</date>
            <delta_ts>2012-01-04 08:18:11 -0800</delta_ts>
            <desc>patch</desc>
            <filename>stylesheet-selector-scope-5.patch</filename>
            <type>text/plain</type>
            <size>29533</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEwMzk5NSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDk1IEBACisyMDEyLTAxLTAzICBBbnR0aSBL
b2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBBbmFseXplIHN0eWxlc2hlZXQgc2NvcGUgdG8gbWluaW1pemUg
c3R5bGUgcmVjYWxjcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9NzU1MDgKKyAgICAgICAgCisgICAgICAgIEl0IGlzIGEgcmVsYXRpdmVseSBjb21tb24g
cGF0dGVybiB0byB1c2UgaW5saW5lIHN0eWxlc2hlZXRzIGluIGRvY3VtZW50IGJvZHkgd2hlcmUg
YWxsIHJ1bGVzIGFyZSBzY29wZWQgdXNpbmcgZGVzY2VuZGFudCBzZWxlY3RvcgorCisgICAgICAg
IDxzdHlsZT4KKyAgICAgICAgI2ZvbyB7Li4ufQorICAgICAgICAjZm9vIGRpdiB7Li4ufQorICAg
ICAgICAjZm9vIC5iYXIgey4uLn0KKyAgICAgICAgPC9zdHlsZT4KKworICAgICAgICBXaGVuIHRo
aXMgcGF0dGVybiBpcyB1c2VkIGl0IGlzIGFsc28gY29tbW9uIHRoYXQgdGhlIHJ1bGVzIG9ubHkg
YXBwbHkgdG8gZWxlbWVudHMgdGhhdCBjb21lIGFmdGVyIHRoZSBzdHlsZSBlbGVtZW50LiAKKwor
ICAgICAgICBXaGVuIHRoZSBzZXQgb2YgYWN0aXZlIHN0eWxlc2hlZXRzIGNoYW5nZXMgd2UgaW52
YWxpZGF0ZSBhbmQgcmVjb21wdXRlIHRoZSBlbnRpcmUgZG9jdW1lbnQgc3R5bGUuIFRoaXMgaXMg
dmVyeSBleHBlbnNpdmUuIFdlIGNhbiAKKyAgICAgICAgZGV0ZWN0IHRoZSBjYXNlIGFib3ZlIGFu
ZCBhdm9pZCB0aGUgc3R5bGUgcmVjYWxjLgorICAgICAgICAKKyAgICAgICAgT24gZW5nYWRnZXQu
Y29tLCB0aGlzIHBhdGNoIGN1dHMgdGhlIHRpbWUgc3BlbnQgaW4gc3R5bGUgcmVjYWxjcyB0byBy
b3VnaGx5IGhhbGYuIFRoZXJlIGFyZSBmdXJ0aGVyIHNhdmluZ3MgZnJvbSByZWR1Y2VkIAorICAg
ICAgICByZWxheW91dHMuIEluIHRvdGFsIHRoZSBlbmdpbmUgQ1BVIHRpbWUgdXNlZCBvdmVyIHRo
ZSBwYWdlIGxvYWQgaXMgcmVkdWNlZCBieSB+MTAlLgorCisgICAgICAgICogY3NzL0NTU1N0eWxl
U2VsZWN0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q1NTU3R5bGVTZWxlY3Rvcjo6Q1NTU3R5
bGVTZWxlY3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpDU1NTdHlsZVNlbGVjdG9yOjpjb2xsZWN0
RmVhdHVyZXMpOgorICAgICAgICAKKyAgICAgICAgICAgIFJlZmFjdG9yIGZlYXR1cmUgY29sbGVj
dGlvbiBmcm9tIGNvbnN0cnVjdG9yIHRvIGEgc2VwYXJhdGUgZnVuY3Rpb24uCisgICAgICAgIAor
ICAgICAgICAoV2ViQ29yZTo6Q1NTU3R5bGVTZWxlY3Rvcjo6YXBwZW5kQXV0aG9yU3R5bGVzaGVl
dHMpOgorICAgICAgICAKKyAgICAgICAgICAgIE5ldyBmdW5jdGlvbiBmb3Igbm9uLWRlc3RydWN0
aXZlbHkgdXBkYXRpbmcgdGhlIHN0eWxlIHNlbGVjdG9yLgorICAgICAgICAKKyAgICAgICAgKFdl
YkNvcmU6OkNTU1N0eWxlU2VsZWN0b3I6OkZlYXR1cmVzOjpjbGVhcik6CisgICAgICAgIAorICAg
ICAgICAgICAgQ2xlYXIgdGhlIGZlYXR1cmVzIGZvciBhbm90aGVyIGNvbGxlY3Rpb24uCisgICAg
ICAgIAorICAgICAgICAoV2ViQ29yZTo6Q1NTU3R5bGVTZWxlY3Rvcjo6c3R5bGVGb3JEb2N1bWVu
dCk6CisgICAgICAgIAorICAgICAgICAgICAgQWRkIG9wdGlvbmFsIGZvbnQgc2VsZWN0b3IgYXJn
dW1lbnQuIFdlIHVwZGF0ZWQgdGhlIGNvcnJlY3QgYmFzZSBzdHlsZSBmb250IG9uIHN0eWxlIHNl
bGVjdG9yIGNvbnN0cnVjdGlvbiBidXQgdGhhdCBpcyBubyBsb25nZXIgc3VmZmljaWVudAorICAg
ICAgICAgICAgYXMgZm9udCBzZWxlY3RvciBtYXkgYmUgdXBkYXRlZCB3aXRob3V0IHJlY29uc3Ry
dWN0aW5nIHRoZSBzdHlsZSBzZWxlY3Rvci4KKyAgICAgICAgCisgICAgICAgIChXZWJDb3JlOjpS
dWxlU2V0OjphZGRSdWxlc0Zyb21TaGVldCk6CisgICAgICAgIAorICAgICAgICAgICAgSW52YWxp
ZGF0ZSB0aGUgbWF0Y2hlZCBkZWNsYXJhdGlvbiBjYWNoZSBpbiBjYXNlIG9mIG5ldyBmb250LWZh
Y2UgcnVsZXMuCisgICAgICAgIAorICAgICAgICAqIGNzcy9DU1NTdHlsZVNlbGVjdG9yLmg6Cisg
ICAgICAgICogY3NzL1NlbGVjdG9yQ2hlY2tlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTZWxl
Y3RvckNoZWNrZXI6OmRldGVybWluZVN0eWxlc2hlZXRTZWxlY3RvclNjb3Blcyk6CisgICAgICAg
IAorICAgICAgICAgICAgRmluZCBpZiBhbGwgcnVsZXMgb24gYSBzdHlsZSBzaGVldCBhcmUgc2Nv
cGVkIHRvIHNvbWUgc2V0IG9mIGlkcyBhbmQgY2xhc3Nlcy4KKyAgICAgICAgCisgICAgICAgICog
Y3NzL1NlbGVjdG9yQ2hlY2tlci5oOgorICAgICAgICAqIGRvbS9Eb2N1bWVudC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpEb2N1bWVudDo6RG9jdW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6RG9j
dW1lbnQ6OnJlY2FsY1N0eWxlKToKKyAgICAgICAgCisgICAgICAgICAgICBQYXNzIHRoZSBmb250
IHNlbGVjdG9yLCBpZiBleGlzdHMsIHRvIHN0eWxlRm9yRG9jdW1lbnQgc28gd2UgYWx3YXlzIGhh
dmUgdGhlIGJhc2UgZm9udCB1cCB0byBkYXRlLgorICAgICAgICAKKyAgICAgICAgKFdlYkNvcmU6
OkRvY3VtZW50Ojpjb21iaW5lQ1NTRmVhdHVyZUZsYWdzKToKKyAgICAgICAgKFdlYkNvcmU6OkRv
Y3VtZW50OjpyZXNldENTU0ZlYXR1cmVGbGFncyk6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVu
dDo6Y3JlYXRlU3R5bGVTZWxlY3Rvcik6CisKKyAgICAgICAgICAgIFJlZmFjdG9yIGNzcyBmZWF0
dXJlIGZsYWcgcmVzZXR0aW5nIHRvIGZ1bmN0aW9ucy4KKyAgICAgICAgCisgICAgICAgIChXZWJD
b3JlOjpEb2N1bWVudDo6cmVtb3ZlUGVuZGluZ1NoZWV0KToKKyAgICAgICAgCisgICAgICAgICAg
ICBVc2UgbmV3IFBlbmRpbmdTdHlsZXNoZWV0Q29tcGxldGVkIGZsYWcgd2hlbiBuZXcgc3R5bGVz
aGVldHMgYXJyaXZlLgorCisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6c3R5bGVTZWxlY3Rv
ckNoYW5nZWQpOgorCisgICAgICAgICAgICBTa2lwIHN0eWxlIHJlY2FsYyBpZiBpdCBpcyBub3Qg
bmVlZGVkLgorCisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6Y29sbGVjdEFjdGl2ZVN0eWxl
c2hlZXRzKToKKyAgICAgICAgCisgICAgICAgICAgICBSZWZhY3RvciBjb2xsZWN0aW5nIHN0eWxl
c2hlZXRzIHRvIGEgc2VwYXJhdGUgZnVuY3Rpb24uCisgICAgICAgIAorICAgICAgICAoV2ViQ29y
ZTo6RG9jdW1lbnQ6OnRlc3RBZGRlZFN0eWxlc2hlZXRSZXF1aXJlc1N0eWxlUmVjYWxjKToKKyAg
ICAgICAgCisgICAgICAgICAgICBEZXRlcm1pbmUgdGhlIHNjb3BlcyBhbmQgdXNlIGhhc0VsZW1l
bnRXaXRoSWQvZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSB0byBmaWd1cmUgb3V0IGlmIGFueSBzY29w
ZWQgZWxlbWVudHMgY3VycmVudGx5IGV4aXN0IGluIHRoZSB0cmVlLgorICAgICAgICAKKyAgICAg
ICAgKFdlYkNvcmU6OkRvY3VtZW50OjphbmFseXplU3R5bGVzaGVldENoYW5nZSk6CisgICAgICAg
IAorICAgICAgICAgICAgRmlndXJlIG91dCBpZiB3ZSBjYW4gdXBkYXRlIHRoZSBzdHlsZSBzZWxl
Y3RvciBpbmNyZW1lbnRhbGx5IGFuZCBpZiB3ZSBjYW4gc2tpcCB0aGUgc3R5bGUgcmVjYWxjLgor
ICAgICAgICAKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50Ojp1cGRhdGVBY3RpdmVTdHlsZXNo
ZWV0cyk6CisgICAgICAgIAorICAgICAgICAgICAgUmVuYW1lZCBmcm9tIHJlY2FsY1N0eWxlU2Vs
ZWN0b3IuCisgICAgICAgICAgICBJbnZva2UgdGhlIG5ldyBhbmFseXNpcyBmdW5jdGlvbnMuCisg
ICAgICAgIAorICAgICAgICAqIGRvbS9Eb2N1bWVudC5oOgorCiAyMDEyLTAxLTAzICBXZWkgSmFt
ZXMgIDxqYW1lcy53ZWlAaW50ZWwuY29tPgogCiAgICAgICAgIE9wdGltaXplIEF1ZGlvQnVmZmVy
U291cmNlTm9kZSBwcm9jZXNzIGJ5IGF2b2lkaW5nIGludGVycG9sYXRpb24gd2hlbiBwaXRjaFJh
dGU9PTEKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTdHlsZVNlbGVjdG9yLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU3R5bGVTZWxlY3Rvci5jcHAJKHJldmlz
aW9uIDEwMzkwMSkKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTdHlsZVNlbGVjdG9yLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNDI0LDYgKzQyNCwxNiBAQCBDU1NTdHlsZVNlbGVjdG9yOjpDU1NT
dHlsZVNlbGVjdG9yKERvY3VtCiAgICAgICAgIGlmIChzaGVldC0+aXNDU1NTdHlsZVNoZWV0KCkg
JiYgIXNoZWV0LT5kaXNhYmxlZCgpKQogICAgICAgICAgICAgbV9hdXRob3JTdHlsZS0+YWRkUnVs
ZXNGcm9tU2hlZXQoc3RhdGljX2Nhc3Q8Q1NTU3R5bGVTaGVldCo+KHNoZWV0KSwgKm1fbWVkaXVt
LCB0aGlzKTsKICAgICB9CisgICAgbV9hdXRob3JTdHlsZS0+c2hyaW5rVG9GaXQoKTsKKworICAg
IGNvbGxlY3RGZWF0dXJlcygpOworICAgIAorICAgIGlmIChkb2N1bWVudC0+cmVuZGVyZXIoKSAm
JiBkb2N1bWVudC0+cmVuZGVyZXIoKS0+c3R5bGUoKSkKKyAgICAgICAgZG9jdW1lbnQtPnJlbmRl
cmVyKCktPnN0eWxlKCktPmZvbnQoKS51cGRhdGUoZm9udFNlbGVjdG9yKCkpOworfQorCit2b2lk
IENTU1N0eWxlU2VsZWN0b3I6OmNvbGxlY3RGZWF0dXJlcygpCit7CiAgICAgLy8gQ29sbGVjdCBh
bGwgaWRzIGFuZCBydWxlcyB1c2luZyBzaWJsaW5nIHNlbGVjdG9ycyAoOmZpcnN0LWNoaWxkIGFu
ZCBzaW1pbGFyKQogICAgIC8vIGluIHRoZSBjdXJyZW50IHNldCBvZiBzdHlsZXNoZWV0cy4gU3R5
bGUgc2hhcmluZyBjb2RlIHVzZXMgdGhpcyBpbmZvcm1hdGlvbiB0byByZWplY3QKICAgICAvLyBz
aGFyaW5nIGNhbmRpZGF0ZXMuCkBAIC00MzUsMTUgKzQ0NSwyOSBAQCBDU1NTdHlsZVNlbGVjdG9y
OjpDU1NTdHlsZVNlbGVjdG9yKERvY3VtCiAgICAgbV9hdXRob3JTdHlsZS0+Y29sbGVjdEZlYXR1
cmVzKG1fZmVhdHVyZXMpOwogICAgIGlmIChtX3VzZXJTdHlsZSkKICAgICAgICAgbV91c2VyU3R5
bGUtPmNvbGxlY3RGZWF0dXJlcyhtX2ZlYXR1cmVzKTsKLQotICAgIG1fYXV0aG9yU3R5bGUtPnNo
cmlua1RvRml0KCk7CiAgICAgaWYgKG1fZmVhdHVyZXMuc2libGluZ1J1bGVzKQogICAgICAgICBt
X2ZlYXR1cmVzLnNpYmxpbmdSdWxlcy0+c2hyaW5rVG9GaXQoKTsKICAgICBpZiAobV9mZWF0dXJl
cy51bmNvbW1vbkF0dHJpYnV0ZVJ1bGVzKQogICAgICAgICBtX2ZlYXR1cmVzLnVuY29tbW9uQXR0
cmlidXRlUnVsZXMtPnNocmlua1RvRml0KCk7Cit9CiAKLSAgICBpZiAoZG9jdW1lbnQtPnJlbmRl
cmVyKCkgJiYgZG9jdW1lbnQtPnJlbmRlcmVyKCktPnN0eWxlKCkpCi0gICAgICAgIGRvY3VtZW50
LT5yZW5kZXJlcigpLT5zdHlsZSgpLT5mb250KCkudXBkYXRlKGZvbnRTZWxlY3RvcigpKTsKK3Zv
aWQgQ1NTU3R5bGVTZWxlY3Rvcjo6YXBwZW5kQXV0aG9yU3R5bGVzaGVldHModW5zaWduZWQgZmly
c3ROZXcsIGNvbnN0IFZlY3RvcjxSZWZQdHI8U3R5bGVTaGVldD4gPiYgc3R5bGVzaGVldHMpCit7
CisgICAgLy8gVGhpcyBoYW5kbGVzIHNoZWV0cyBhZGRlZCB0byB0aGUgZW5kIG9mIHRoZSBzdHls
ZXNoZWV0IGxpc3Qgb25seS4gSW4gb3RoZXIgY2FzZXMgdGhlIHN0eWxlIHJlc29sdmVyCisgICAg
Ly8gbmVlZHMgdG8gYmUgcmVjb25zdHJ1Y3RlZC4gVG8gaGFuZGxlIGluc2VydGlvbnMgdG9vIHRo
ZSBydWxlIG9yZGVyIG51bWJlcnMgd291bGQgbmVlZCB0byBiZSB1cGRhdGVkLgorICAgIHVuc2ln
bmVkIHNpemUgPSBzdHlsZXNoZWV0cy5zaXplKCk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gZmly
c3ROZXc7IGkgPCBzaXplOyArK2kpIHsKKyAgICAgICAgaWYgKCFzdHlsZXNoZWV0c1tpXS0+aXND
U1NTdHlsZVNoZWV0KCkgfHwgc3R5bGVzaGVldHNbaV0tPmRpc2FibGVkKCkpCisgICAgICAgICAg
ICBjb250aW51ZTsKKyAgICAgICAgbV9hdXRob3JTdHlsZS0+YWRkUnVsZXNGcm9tU2hlZXQoc3Rh
dGljX2Nhc3Q8Q1NTU3R5bGVTaGVldCo+KHN0eWxlc2hlZXRzW2ldLmdldCgpKSwgKm1fbWVkaXVt
LCB0aGlzKTsKKyAgICB9CisgICAgbV9hdXRob3JTdHlsZS0+c2hyaW5rVG9GaXQoKTsKKyAgICAv
LyBGSVhNRTogVGhpcyByZWFsbHkgb25seSBuZWVkcyB0byBjb2xsZWN0IHRoZSBmZWF0dXJlcyBm
cm9tIHRoZSBuZXdseSBhZGRlZCBzaGVldHMuCisgICAgbV9mZWF0dXJlcy5jbGVhcigpOworICAg
IGNvbGxlY3RGZWF0dXJlcygpOworICAgIAorICAgIGlmIChkb2N1bWVudCgpLT5yZW5kZXJlcigp
ICYmIGRvY3VtZW50KCktPnJlbmRlcmVyKCktPnN0eWxlKCkpCisgICAgICAgIGRvY3VtZW50KCkt
PnJlbmRlcmVyKCktPnN0eWxlKCktPmZvbnQoKS51cGRhdGUoZm9udFNlbGVjdG9yKCkpOwogfQog
CiB2b2lkIENTU1N0eWxlU2VsZWN0b3I6OmFkZFJlZ2lvblJ1bGUoUGFzc1JlZlB0cjxXZWJLaXRD
U1NSZWdpb25SdWxlPiByZWdpb25TdHlsZVJ1bGUpCkBAIC00NzUsNiArNDk5LDE3IEBAIENTU1N0
eWxlU2VsZWN0b3I6OkZlYXR1cmVzOjp+RmVhdHVyZXMoKQogewogfQogCit2b2lkIENTU1N0eWxl
U2VsZWN0b3I6OkZlYXR1cmVzOjpjbGVhcigpCit7CisgICAgaWRzSW5SdWxlcy5jbGVhcigpOwor
ICAgIGF0dHJzSW5SdWxlcy5jbGVhcigpOworICAgIHNpYmxpbmdSdWxlcy5jbGVhcigpOworICAg
IHVuY29tbW9uQXR0cmlidXRlUnVsZXMuY2xlYXIoKTsKKyAgICB1c2VzRmlyc3RMaW5lUnVsZXMg
PSBmYWxzZTsKKyAgICB1c2VzQmVmb3JlQWZ0ZXJSdWxlcyA9IGZhbHNlOworICAgIHVzZXNMaW5r
UnVsZXMgPSBmYWxzZTsKK30KKwogc3RhdGljIENTU1N0eWxlU2hlZXQqIHBhcnNlVUFTaGVldChj
b25zdCBTdHJpbmcmIHN0cikKIHsKICAgICBDU1NTdHlsZVNoZWV0KiBzaGVldCA9IENTU1N0eWxl
U2hlZXQ6OmNyZWF0ZSgpLmxlYWtSZWYoKTsgLy8gbGVhayB0aGUgc2hlZXQgb24gcHVycG9zZQpA
QCAtMTE4OSw3ICsxMjI0LDcgQEAgdm9pZCBDU1NTdHlsZVNlbGVjdG9yOjptYXRjaFVBUnVsZXMo
TWF0YwogICAgIH0KIH0KIAotUGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4gQ1NTU3R5bGVTZWxlY3Rv
cjo6c3R5bGVGb3JEb2N1bWVudChEb2N1bWVudCogZG9jdW1lbnQpCitQYXNzUmVmUHRyPFJlbmRl
clN0eWxlPiBDU1NTdHlsZVNlbGVjdG9yOjpzdHlsZUZvckRvY3VtZW50KERvY3VtZW50KiBkb2N1
bWVudCwgQ1NTRm9udFNlbGVjdG9yKiBmb250U2VsZWN0b3IpCiB7CiAgICAgRnJhbWUqIGZyYW1l
ID0gZG9jdW1lbnQtPmZyYW1lKCk7CiAKQEAgLTEyNDUsNyArMTI4MCw3IEBAIFBhc3NSZWZQdHI8
UmVuZGVyU3R5bGU+IENTU1N0eWxlU2VsZWN0b3IKICAgICB9CiAKICAgICBkb2N1bWVudFN0eWxl
LT5zZXRGb250RGVzY3JpcHRpb24oZm9udERlc2NyaXB0aW9uKTsKLSAgICBkb2N1bWVudFN0eWxl
LT5mb250KCkudXBkYXRlKDApOworICAgIGRvY3VtZW50U3R5bGUtPmZvbnQoKS51cGRhdGUoZm9u
dFNlbGVjdG9yKTsKIAogICAgIHJldHVybiBkb2N1bWVudFN0eWxlLnJlbGVhc2UoKTsKIH0KQEAg
LTIwMTMsNiArMjA0OCw3IEBAIHZvaWQgUnVsZVNldDo6YWRkUnVsZXNGcm9tU2hlZXQoQ1NTU3R5
bGUKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEFkZCB0aGlzIGZvbnQgZmFjZSB0byBvdXIg
c2V0LgogICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQ1NTRm9udEZhY2VSdWxlKiBmb250
RmFjZVJ1bGUgPSBzdGF0aWNfY2FzdDxDU1NGb250RmFjZVJ1bGUqPihjaGlsZEl0ZW0pOwogICAg
ICAgICAgICAgICAgICAgICAgICAgc3R5bGVTZWxlY3Rvci0+Zm9udFNlbGVjdG9yKCktPmFkZEZv
bnRGYWNlUnVsZShmb250RmFjZVJ1bGUpOworICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGVT
ZWxlY3Rvci0+aW52YWxpZGF0ZU1hdGNoZWREZWNsYXJhdGlvbkNhY2hlKCk7CiAgICAgICAgICAg
ICAgICAgICAgIH0gZWxzZSBpZiAoY2hpbGRJdGVtLT5pc0tleWZyYW1lc1J1bGUoKSAmJiBzdHls
ZVNlbGVjdG9yKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBBZGQgdGhpcyBrZXlmcmFt
ZSBydWxlIHRvIG91ciBzZXQuCiAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZVNlbGVjdG9y
LT5hZGRLZXlmcmFtZVN0eWxlKHN0YXRpY19jYXN0PFdlYktpdENTU0tleWZyYW1lc1J1bGUqPihj
aGlsZEl0ZW0pKTsKQEAgLTIwMjMsNiArMjA1OSw3IEBAIHZvaWQgUnVsZVNldDo6YWRkUnVsZXNG
cm9tU2hlZXQoQ1NTU3R5bGUKICAgICAgICAgICAgIC8vIEFkZCB0aGlzIGZvbnQgZmFjZSB0byBv
dXIgc2V0LgogICAgICAgICAgICAgY29uc3QgQ1NTRm9udEZhY2VSdWxlKiBmb250RmFjZVJ1bGUg
PSBzdGF0aWNfY2FzdDxDU1NGb250RmFjZVJ1bGUqPihydWxlKTsKICAgICAgICAgICAgIHN0eWxl
U2VsZWN0b3ItPmZvbnRTZWxlY3RvcigpLT5hZGRGb250RmFjZVJ1bGUoZm9udEZhY2VSdWxlKTsK
KyAgICAgICAgICAgIHN0eWxlU2VsZWN0b3ItPmludmFsaWRhdGVNYXRjaGVkRGVjbGFyYXRpb25D
YWNoZSgpOwogICAgICAgICB9IGVsc2UgaWYgKHJ1bGUtPmlzS2V5ZnJhbWVzUnVsZSgpKQogICAg
ICAgICAgICAgc3R5bGVTZWxlY3Rvci0+YWRkS2V5ZnJhbWVTdHlsZShzdGF0aWNfY2FzdDxXZWJL
aXRDU1NLZXlmcmFtZXNSdWxlKj4ocnVsZSkpOwogICAgICAgICBlbHNlIGlmIChydWxlLT5pc1Jl
Z2lvblJ1bGUoKSAmJiBzdHlsZVNlbGVjdG9yKQpJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL0NT
U1N0eWxlU2VsZWN0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU3R5
bGVTZWxlY3Rvci5oCShyZXZpc2lvbiAxMDM5MDEpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NT
U3R5bGVTZWxlY3Rvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMTMsNyArMTEzLDcgQEAgcHVibGlj
OgogCiAgICAgUGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4gc3R5bGVGb3JQYWdlKGludCBwYWdlSW5k
ZXgpOwogCi0gICAgc3RhdGljIFBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IHN0eWxlRm9yRG9jdW1l
bnQoRG9jdW1lbnQqKTsKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4gc3R5bGVG
b3JEb2N1bWVudChEb2N1bWVudCosIENTU0ZvbnRTZWxlY3RvciogPSAwKTsKIAogICAgIFJlbmRl
clN0eWxlKiBzdHlsZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3R5bGUuZ2V0KCk7IH0KICAgICBSZW5k
ZXJTdHlsZSogcGFyZW50U3R5bGUoKSBjb25zdCB7IHJldHVybiBtX3BhcmVudFN0eWxlOyB9CkBA
IC0xMjcsMTIgKzEyNywxNSBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRFZmZlY3RpdmVab29tKGZs
b2F0IGYpIHsgbV9mb250RGlydHkgfD0gc3R5bGUoKS0+c2V0RWZmZWN0aXZlWm9vbShmKTsgfQog
ICAgIHZvaWQgc2V0VGV4dFNpemVBZGp1c3QoYm9vbCBiKSB7IG1fZm9udERpcnR5IHw9IHN0eWxl
KCktPnNldFRleHRTaXplQWRqdXN0KGIpOyB9CiAgICAgYm9vbCBoYXNQYXJlbnROb2RlKCkgY29u
c3QgeyByZXR1cm4gbV9wYXJlbnROb2RlOyB9CisgICAgCisgICAgdm9pZCBhcHBlbmRBdXRob3JT
dHlsZXNoZWV0cyh1bnNpZ25lZCBmaXJzdE5ldywgY29uc3QgVmVjdG9yPFJlZlB0cjxTdHlsZVNo
ZWV0PiA+Jik7CiAKIHByaXZhdGU6CiAgICAgdm9pZCBpbml0Rm9yU3R5bGVSZXNvbHZlKEVsZW1l
bnQqLCBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUgPSAwLCBQc2V1ZG9JZCA9IE5PUFNFVURPKTsK
ICAgICB2b2lkIGluaXRFbGVtZW50KEVsZW1lbnQqKTsKICAgICB2b2lkIGluaXRGb3JSZWdpb25T
dHlsaW5nKFJlbmRlclJlZ2lvbiopOwogICAgIHZvaWQgaW5pdFJlZ2lvblJ1bGVzKFJlbmRlclJl
Z2lvbiopOworICAgIHZvaWQgY29sbGVjdEZlYXR1cmVzKCk7CiAgICAgUmVuZGVyU3R5bGUqIGxv
Y2F0ZVNoYXJlZFN0eWxlKCk7CiAgICAgYm9vbCBtYXRjaGVzUnVsZVNldChSdWxlU2V0Kik7CiAg
ICAgTm9kZSogbG9jYXRlQ291c2luTGlzdChFbGVtZW50KiBwYXJlbnQsIHVuc2lnbmVkJiB2aXNp
dGVkTm9kZUNvdW50KSBjb25zdDsKQEAgLTIyNCw2ICsyMjcsNyBAQCBwdWJsaWM6CiAgICAgc3Ry
dWN0IEZlYXR1cmVzIHsKICAgICAgICAgRmVhdHVyZXMoKTsKICAgICAgICAgfkZlYXR1cmVzKCk7
CisgICAgICAgIHZvaWQgY2xlYXIoKTsKICAgICAgICAgSGFzaFNldDxBdG9taWNTdHJpbmdJbXBs
Kj4gaWRzSW5SdWxlczsKICAgICAgICAgSGFzaFNldDxBdG9taWNTdHJpbmdJbXBsKj4gYXR0cnNJ
blJ1bGVzOwogICAgICAgICBPd25QdHI8UnVsZVNldD4gc2libGluZ1J1bGVzOwpJbmRleDogU291
cmNlL1dlYkNvcmUvY3NzL1NlbGVjdG9yQ2hlY2tlci5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvY3NzL1NlbGVjdG9yQ2hlY2tlci5jcHAJKHJldmlzaW9uIDEwMzkwMSkKKysrIFNv
dXJjZS9XZWJDb3JlL2Nzcy9TZWxlY3RvckNoZWNrZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
MCw2ICszMCw3IEBACiAKICNpbmNsdWRlICJDU1NTZWxlY3Rvci5oIgogI2luY2x1ZGUgIkNTU1Nl
bGVjdG9yTGlzdC5oIgorI2luY2x1ZGUgIkNTU1N0eWxlUnVsZS5oIgogI2luY2x1ZGUgIkRvY3Vt
ZW50LmgiCiAjaW5jbHVkZSAiRm9jdXNDb250cm9sbGVyLmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIK
QEAgLTEzOTgsNCArMTM5OSw0NSBAQCBib29sIFNlbGVjdG9yQ2hlY2tlcjo6aXNGcmFtZUZvY3Vz
ZWQoY29uCiAgICAgcmV0dXJuIGVsZW1lbnQtPmRvY3VtZW50KCktPmZyYW1lKCkgJiYgZWxlbWVu
dC0+ZG9jdW1lbnQoKS0+ZnJhbWUoKS0+c2VsZWN0aW9uKCktPmlzRm9jdXNlZEFuZEFjdGl2ZSgp
OwogfQogCitib29sIFNlbGVjdG9yQ2hlY2tlcjo6ZGV0ZXJtaW5lU3R5bGVzaGVldFNlbGVjdG9y
U2NvcGVzKENTU1N0eWxlU2hlZXQqIHN0eWxlc2hlZXQsIEhhc2hTZXQ8QXRvbWljU3RyaW5nSW1w
bCo+JiBpZFNjb3BlcywgSGFzaFNldDxBdG9taWNTdHJpbmdJbXBsKj4mIGNsYXNzU2NvcGVzKQor
eworICAgIEFTU0VSVCghc3R5bGVzaGVldC0+aXNMb2FkaW5nKCkpOworICAgIAorICAgIHNpemVf
dCBzaXplID0gc3R5bGVzaGVldC0+bGVuZ3RoKCk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBzaXplOyBpKyspIHsKKyAgICAgICAgQ1NTUnVsZSogcnVsZSA9IHN0eWxlc2hlZXQtPml0ZW0o
aSk7CisgICAgICAgIGlmIChydWxlLT5pc1N0eWxlUnVsZSgpKSB7CisgICAgICAgICAgICBDU1NT
dHlsZVJ1bGUqIHN0eWxlUnVsZSA9IHN0YXRpY19jYXN0PENTU1N0eWxlUnVsZSo+KHJ1bGUpOwor
ICAgICAgICAgICAgZm9yIChDU1NTZWxlY3Rvciogc2VsZWN0b3IgPSBzdHlsZVJ1bGUtPnNlbGVj
dG9yTGlzdCgpLmZpcnN0KCk7IHNlbGVjdG9yOyBzZWxlY3RvciA9IENTU1NlbGVjdG9yTGlzdDo6
bmV4dChzZWxlY3RvcikpIHsKKyAgICAgICAgICAgICAgICBDU1NTZWxlY3RvciogcmlnaHRtb3N0
U2VsZWN0b3IgPSBzZWxlY3RvcjsKKyAgICAgICAgICAgICAgICBDU1NTZWxlY3Rvcjo6UmVsYXRp
b24gcmVsYXRpb24gPSBDU1NTZWxlY3Rvcjo6RGVzY2VuZGFudDsKKyAgICAgICAgICAgICAgICBm
b3IgKDtyaWdodG1vc3RTZWxlY3Rvci0+dGFnSGlzdG9yeSgpOyByaWdodG1vc3RTZWxlY3RvciA9
IHJpZ2h0bW9zdFNlbGVjdG9yLT50YWdIaXN0b3J5KCkpIHsKKyAgICAgICAgICAgICAgICAgICAg
aWYgKHJpZ2h0bW9zdFNlbGVjdG9yLT5yZWxhdGlvbigpICE9IENTU1NlbGVjdG9yOjpTdWJTZWxl
Y3RvcikKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlbGF0aW9uID0gcmlnaHRtb3N0U2VsZWN0
b3ItPnJlbGF0aW9uKCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmIChy
ZWxhdGlvbiAhPSBDU1NTZWxlY3Rvcjo6RGVzY2VuZGFudCAmJiByZWxhdGlvbiAhPSBDU1NTZWxl
Y3Rvcjo6Q2hpbGQpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
ICAgICAgICBpZiAocmlnaHRtb3N0U2VsZWN0b3ItPm1fbWF0Y2ggPT0gQ1NTU2VsZWN0b3I6Oklk
KQorICAgICAgICAgICAgICAgICAgICBpZFNjb3Blcy5hZGQocmlnaHRtb3N0U2VsZWN0b3ItPnZh
bHVlKCkuaW1wbCgpKTsKKyAgICAgICAgICAgICAgICBlbHNlIGlmIChyaWdodG1vc3RTZWxlY3Rv
ci0+bV9tYXRjaCA9PSBDU1NTZWxlY3Rvcjo6Q2xhc3MpCisgICAgICAgICAgICAgICAgICAgIGNs
YXNzU2NvcGVzLmFkZChyaWdodG1vc3RTZWxlY3Rvci0+dmFsdWUoKS5pbXBsKCkpOworICAgICAg
ICAgICAgICAgIGVsc2UgCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9IAorICAgICAgICBpZiAo
cnVsZS0+aXNJbXBvcnRSdWxlKCkpIHsKKyAgICAgICAgICAgIENTU0ltcG9ydFJ1bGUqIGltcG9y
dFJ1bGUgPSBzdGF0aWNfY2FzdDxDU1NJbXBvcnRSdWxlKj4ocnVsZSk7CisgICAgICAgICAgICBp
ZiAoaW1wb3J0UnVsZS0+c3R5bGVTaGVldCgpKSB7CisgICAgICAgICAgICAgICAgaWYgKCFkZXRl
cm1pbmVTdHlsZXNoZWV0U2VsZWN0b3JTY29wZXMoaW1wb3J0UnVsZS0+c3R5bGVTaGVldCgpLCBp
ZFNjb3BlcywgY2xhc3NTY29wZXMpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAgICAg
ICAvLyBGSVhNRTogTWVkaWEgcnVsZXMgYW5kIG1heWJlIHNvbWUgb3RoZXJzIGNvdWxkIGJlIGFs
bG93ZWQuCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgcmV0dXJuIHRydWU7Cit9
CisKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9TZWxlY3RvckNoZWNrZXIuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvU2VsZWN0b3JDaGVja2VyLmgJKHJldmlzaW9uIDEw
MzkwMSkKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9TZWxlY3RvckNoZWNrZXIuaAkod29ya2luZyBj
b3B5KQpAQCAtOTAsNiArOTAsOSBAQCBwdWJsaWM6CiAgICAgZW51bSBMaW5rTWF0Y2hNYXNrIHsg
TWF0Y2hMaW5rID0gMSwgTWF0Y2hWaXNpdGVkID0gMiwgTWF0Y2hBbGwgPSBNYXRjaExpbmsgfCBN
YXRjaFZpc2l0ZWQgfTsKICAgICBzdGF0aWMgdW5zaWduZWQgZGV0ZXJtaW5lTGlua01hdGNoVHlw
ZShjb25zdCBDU1NTZWxlY3RvciopOwogCisgICAgLy8gVGVzdCBpZiBhbGwgcnVsZXMgb24gdGhl
IHN0eWxlc2hlZXQgYXJlIHNjb3BlZCB0byAoc2VsZWN0b3JzIHN0YXJ0IHdpdGgpIHNvbWUgc2V0
IG9mIGlkcyBvciBjbGFzc2VzLgorICAgIHN0YXRpYyBib29sIGRldGVybWluZVN0eWxlc2hlZXRT
ZWxlY3RvclNjb3BlcyhDU1NTdHlsZVNoZWV0KiwgSGFzaFNldDxBdG9taWNTdHJpbmdJbXBsKj4m
IGlkU2NvcGVzLCBIYXNoU2V0PEF0b21pY1N0cmluZ0ltcGwqPiYgY2xhc3NTY29wZXMpOworCiBw
cml2YXRlOgogICAgIGJvb2wgY2hlY2tPbmVTZWxlY3RvcihDU1NTZWxlY3RvciosIEVsZW1lbnQq
LCBQc2V1ZG9JZCYgZHluYW1pY1BzZXVkbywgYm9vbCBpc1N1YlNlbGVjdG9yLCBWaXNpdGVkTWF0
Y2hUeXBlLCBSZW5kZXJTdHlsZSosIFJlbmRlclN0eWxlKiBlbGVtZW50UGFyZW50U3R5bGUpIGNv
bnN0OwogICAgIGJvb2wgY2hlY2tTY3JvbGxiYXJQc2V1ZG9DbGFzcyhDU1NTZWxlY3RvciosIFBz
ZXVkb0lkJiBkeW5hbWljUHNldWRvKSBjb25zdDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9E
b2N1bWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNw
cAkocmV2aXNpb24gMTAzOTAxKQorKysgU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMzgyLDYgKzM4Miw3IEBAIERvY3VtZW50OjpEb2N1bWVudChGcmFt
ZSogZnJhbWUsIGNvbnN0IEsKICAgICAsIG1fbXV0YXRpb25PYnNlcnZlclR5cGVzKDApCiAjZW5k
aWYKICAgICAsIG1fc3R5bGVTaGVldHMoU3R5bGVTaGVldExpc3Q6OmNyZWF0ZSh0aGlzKSkKKyAg
ICAsIG1faGFkQWN0aXZlTG9hZGluZ1N0eWxlc2hlZXQoZmFsc2UpCiAgICAgLCBtX3JlYWR5U3Rh
dGUoQ29tcGxldGUpCiAgICAgLCBtX3N0eWxlUmVjYWxjVGltZXIodGhpcywgJkRvY3VtZW50Ojpz
dHlsZVJlY2FsY1RpbWVyRmlyZWQpCiAgICAgLCBtX3BlbmRpbmdTdHlsZVJlY2FsY1Nob3VsZEZv
cmNlKGZhbHNlKQpAQCAtMTUyOCw3ICsxNTI5LDcgQEAgdm9pZCBEb2N1bWVudDo6cmVjYWxjU3R5
bGUoU3R5bGVDaGFuZ2UgYwogICAgICAgICByZXR1cm47IC8vIEd1YXJkIGFnYWluc3QgcmUtZW50
cmFuY3kuIC1kd2gKICAgICAKICAgICBpZiAobV9oYXNEaXJ0eVN0eWxlU2VsZWN0b3IpCi0gICAg
ICAgIHJlY2FsY1N0eWxlU2VsZWN0b3IoKTsKKyAgICAgICAgdXBkYXRlQWN0aXZlU3R5bGVzaGVl
dHMoUmVjYWxjU3R5bGVJbW1lZGlhdGVseSk7CiAKICAgICBJbnNwZWN0b3JJbnN0cnVtZW50YXRp
b25Db29raWUgY29va2llID0gSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjp3aWxsUmVjYWxjdWxh
dGVTdHlsZSh0aGlzKTsKIApAQCAtMTU1Myw3ICsxNTU0LDcgQEAgdm9pZCBEb2N1bWVudDo6cmVj
YWxjU3R5bGUoU3R5bGVDaGFuZ2UgYwogICAgICAgICAvLyBzdHlsZSBzZWxlY3RvciBtYXkgc2V0
IHRoaXMgYWdhaW4gZHVyaW5nIHJlY2FsYwogICAgICAgICBtX2hhc05vZGVzV2l0aFBsYWNlaG9s
ZGVyU3R5bGUgPSBmYWxzZTsKICAgICAgICAgCi0gICAgICAgIFJlZlB0cjxSZW5kZXJTdHlsZT4g
ZG9jdW1lbnRTdHlsZSA9IENTU1N0eWxlU2VsZWN0b3I6OnN0eWxlRm9yRG9jdW1lbnQodGhpcyk7
CisgICAgICAgIFJlZlB0cjxSZW5kZXJTdHlsZT4gZG9jdW1lbnRTdHlsZSA9IENTU1N0eWxlU2Vs
ZWN0b3I6OnN0eWxlRm9yRG9jdW1lbnQodGhpcywgbV9zdHlsZVNlbGVjdG9yID8gbV9zdHlsZVNl
bGVjdG9yLT5mb250U2VsZWN0b3IoKSA6IDApOwogICAgICAgICBTdHlsZUNoYW5nZSBjaCA9IGRp
ZmYoZG9jdW1lbnRTdHlsZS5nZXQoKSwgcmVuZGVyZXIoKS0+c3R5bGUoKSk7CiAgICAgICAgIGlm
IChjaCAhPSBOb0NoYW5nZSkKICAgICAgICAgICAgIHJlbmRlcmVyKCktPnNldFN0eWxlKGRvY3Vt
ZW50U3R5bGUucmVsZWFzZSgpKTsKQEAgLTE1ODQsMTIgKzE1ODUsOCBAQCBiYWlsX291dDoKICAg
ICBtX2luU3R5bGVSZWNhbGMgPSBmYWxzZTsKICAgICAKICAgICAvLyBQc2V1ZG8gZWxlbWVudCBy
ZW1vdmFsIGFuZCBzaW1pbGFyIG1heSBvbmx5IHdvcmsgd2l0aCB0aGVzZSBmbGFncyBzdGlsbCBz
ZXQuIFJlc2V0IHRoZW0gYWZ0ZXIgdGhlIHN0eWxlIHJlY2FsYy4KLSAgICBpZiAobV9zdHlsZVNl
bGVjdG9yKSB7Ci0gICAgICAgIG1fdXNlc1NpYmxpbmdSdWxlcyA9IG1fc3R5bGVTZWxlY3Rvci0+
dXNlc1NpYmxpbmdSdWxlcygpOwotICAgICAgICBtX3VzZXNGaXJzdExpbmVSdWxlcyA9IG1fc3R5
bGVTZWxlY3Rvci0+dXNlc0ZpcnN0TGluZVJ1bGVzKCk7Ci0gICAgICAgIG1fdXNlc0JlZm9yZUFm
dGVyUnVsZXMgPSBtX3N0eWxlU2VsZWN0b3ItPnVzZXNCZWZvcmVBZnRlclJ1bGVzKCk7Ci0gICAg
ICAgIG1fdXNlc0xpbmtSdWxlcyA9IG1fc3R5bGVTZWxlY3Rvci0+dXNlc0xpbmtSdWxlcygpOwot
ICAgIH0KKyAgICBpZiAobV9zdHlsZVNlbGVjdG9yKQorICAgICAgICByZXNldENTU0ZlYXR1cmVG
bGFncygpOwogCiAgICAgaWYgKGZyYW1lVmlldykgewogICAgICAgICBmcmFtZVZpZXctPnJlc3Vt
ZVNjaGVkdWxlZEV2ZW50cygpOwpAQCAtMTc3OCw2ICsxNzc1LDIzIEBAIHZvaWQgRG9jdW1lbnQ6
OnNldElzVmlld1NvdXJjZShib29sIGlzVmkKICAgICBzZXRTZWN1cml0eU9yaWdpbihTZWN1cml0
eU9yaWdpbjo6Y3JlYXRlVW5pcXVlKCkpOwogfQogCit2b2lkIERvY3VtZW50Ojpjb21iaW5lQ1NT
RmVhdHVyZUZsYWdzKCkKK3sKKyAgICAvLyBEZWxheSByZXNldHRpbmcgdGhlIGZsYWdzIHVudGls
IGFmdGVyIG5leHQgc3R5bGUgcmVjYWxjIHNpbmNlIHVuYXBwbHlpbmcgdGhlIHN0eWxlIG1heSBu
b3Qgd29yayB3aXRob3V0IHRoZXNlIHNldCAodGhpcyBpcyB0cnVlIGF0IGxlYXN0IHdpdGggYmVm
b3JlL2FmdGVyKS4KKyAgICBtX3VzZXNTaWJsaW5nUnVsZXMgPSBtX3VzZXNTaWJsaW5nUnVsZXMg
fHwgbV9zdHlsZVNlbGVjdG9yLT51c2VzU2libGluZ1J1bGVzKCk7CisgICAgbV91c2VzRmlyc3RM
aW5lUnVsZXMgPSBtX3VzZXNGaXJzdExpbmVSdWxlcyB8fCBtX3N0eWxlU2VsZWN0b3ItPnVzZXNG
aXJzdExpbmVSdWxlcygpOworICAgIG1fdXNlc0JlZm9yZUFmdGVyUnVsZXMgPSBtX3VzZXNCZWZv
cmVBZnRlclJ1bGVzIHx8IG1fc3R5bGVTZWxlY3Rvci0+dXNlc0JlZm9yZUFmdGVyUnVsZXMoKTsK
KyAgICBtX3VzZXNMaW5rUnVsZXMgPSBtX3VzZXNMaW5rUnVsZXMgfHwgbV9zdHlsZVNlbGVjdG9y
LT51c2VzTGlua1J1bGVzKCk7Cit9CisKK3ZvaWQgRG9jdW1lbnQ6OnJlc2V0Q1NTRmVhdHVyZUZs
YWdzKCkKK3sKKyAgICBtX3VzZXNTaWJsaW5nUnVsZXMgPSBtX3N0eWxlU2VsZWN0b3ItPnVzZXNT
aWJsaW5nUnVsZXMoKTsKKyAgICBtX3VzZXNGaXJzdExpbmVSdWxlcyA9IG1fc3R5bGVTZWxlY3Rv
ci0+dXNlc0ZpcnN0TGluZVJ1bGVzKCk7CisgICAgbV91c2VzQmVmb3JlQWZ0ZXJSdWxlcyA9IG1f
c3R5bGVTZWxlY3Rvci0+dXNlc0JlZm9yZUFmdGVyUnVsZXMoKTsKKyAgICBtX3VzZXNMaW5rUnVs
ZXMgPSBtX3N0eWxlU2VsZWN0b3ItPnVzZXNMaW5rUnVsZXMoKTsKK30KKwogdm9pZCBEb2N1bWVu
dDo6Y3JlYXRlU3R5bGVTZWxlY3RvcigpCiB7CiAgICAgYm9vbCBtYXRjaEF1dGhvckFuZFVzZXJT
dHlsZXMgPSB0cnVlOwpAQCAtMTc4NSwxMSArMTc5OSw3IEBAIHZvaWQgRG9jdW1lbnQ6OmNyZWF0
ZVN0eWxlU2VsZWN0b3IoKQogICAgICAgICBtYXRjaEF1dGhvckFuZFVzZXJTdHlsZXMgPSBkb2NT
ZXR0aW5ncy0+YXV0aG9yQW5kVXNlclN0eWxlc0VuYWJsZWQoKTsKICAgICBtX3N0eWxlU2VsZWN0
b3IgPSBhZG9wdFB0cihuZXcgQ1NTU3R5bGVTZWxlY3Rvcih0aGlzLCBtX3N0eWxlU2hlZXRzLmdl
dCgpLCBtX21hcHBlZEVsZW1lbnRTaGVldC5nZXQoKSwgcGFnZVVzZXJTaGVldCgpLCBwYWdlR3Jv
dXBVc2VyU2hlZXRzKCksIG1fdXNlclNoZWV0cy5nZXQoKSwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAhaW5RdWlya3NNb2RlKCksIG1hdGNoQXV0
aG9yQW5kVXNlclN0eWxlcykpOwotICAgIC8vIERlbGF5IHJlc2V0dGluZyB0aGUgZmxhZ3MgdW50
aWwgYWZ0ZXIgbmV4dCBzdHlsZSByZWNhbGMgc2luY2UgdW5hcHBseWluZyB0aGUgc3R5bGUgbWF5
IG5vdCB3b3JrIHdpdGhvdXQgdGhlc2Ugc2V0ICh0aGlzIGlzIHRydWUgYXQgbGVhc3Qgd2l0aCBi
ZWZvcmUvYWZ0ZXIpLgotICAgIG1fdXNlc1NpYmxpbmdSdWxlcyA9IG1fdXNlc1NpYmxpbmdSdWxl
cyB8fCBtX3N0eWxlU2VsZWN0b3ItPnVzZXNTaWJsaW5nUnVsZXMoKTsKLSAgICBtX3VzZXNGaXJz
dExpbmVSdWxlcyA9IG1fdXNlc0ZpcnN0TGluZVJ1bGVzIHx8IG1fc3R5bGVTZWxlY3Rvci0+dXNl
c0ZpcnN0TGluZVJ1bGVzKCk7Ci0gICAgbV91c2VzQmVmb3JlQWZ0ZXJSdWxlcyA9IG1fdXNlc0Jl
Zm9yZUFmdGVyUnVsZXMgfHwgbV9zdHlsZVNlbGVjdG9yLT51c2VzQmVmb3JlQWZ0ZXJSdWxlcygp
OwotICAgIG1fdXNlc0xpbmtSdWxlcyA9IG1fdXNlc0xpbmtSdWxlcyB8fCBtX3N0eWxlU2VsZWN0
b3ItPnVzZXNMaW5rUnVsZXMoKTsKKyAgICBjb21iaW5lQ1NTRmVhdHVyZUZsYWdzKCk7CiB9CiAK
IHZvaWQgRG9jdW1lbnQ6OmF0dGFjaCgpCkBAIC0yOTUwLDcgKzI5NjAsNyBAQCB2b2lkIERvY3Vt
ZW50OjpyZW1vdmVQZW5kaW5nU2hlZXQoKQogICAgIGlmIChtX3BlbmRpbmdTdHlsZXNoZWV0cykK
ICAgICAgICAgcmV0dXJuOwogCi0gICAgc3R5bGVTZWxlY3RvckNoYW5nZWQoUmVjYWxjU3R5bGVJ
bW1lZGlhdGVseSk7CisgICAgc3R5bGVTZWxlY3RvckNoYW5nZWQoUGVuZGluZ1N0eWxlc2hlZXRD
b21wbGV0ZWQpOwogCiAgICAgaWYgKFNjcmlwdGFibGVEb2N1bWVudFBhcnNlciogcGFyc2VyID0g
c2NyaXB0YWJsZURvY3VtZW50UGFyc2VyKCkpCiAgICAgICAgIHBhcnNlci0+ZXhlY3V0ZVNjcmlw
dHNXYWl0aW5nRm9yU3R5bGVzaGVldHMoKTsKQEAgLTI5NzEsOCArMjk4MSwxMCBAQCB2b2lkIERv
Y3VtZW50OjpzdHlsZVNlbGVjdG9yQ2hhbmdlZChTdHlsCiAgICAgICAgIHByaW50ZigiQmVnaW5u
aW5nIHVwZGF0ZSBvZiBzdHlsZSBzZWxlY3RvciBhdCB0aW1lICVkLlxuIiwgZWxhcHNlZFRpbWUo
KSk7CiAjZW5kaWYKIAotICAgIHJlY2FsY1N0eWxlU2VsZWN0b3IoKTsKLSAgICAKKyAgICBib29s
IHN0eWxlc2hlZXRDaGFuZ2VSZXF1aXJlc1N0eWxlUmVjYWxjID0gdXBkYXRlQWN0aXZlU3R5bGVz
aGVldHModXBkYXRlRmxhZyk7CisgICAgaWYgKCFzdHlsZXNoZWV0Q2hhbmdlUmVxdWlyZXNTdHls
ZVJlY2FsYykKKyAgICAgICAgcmV0dXJuOworCiAgICAgaWYgKHVwZGF0ZUZsYWcgPT0gRGVmZXJS
ZWNhbGNTdHlsZSkgewogICAgICAgICBzY2hlZHVsZUZvcmNlZFN0eWxlUmVjYWxjKCk7CiAgICAg
ICAgIHJldHVybjsKQEAgLTMwNDQsMjIgKzMwNTYsOSBAQCB2b2lkIERvY3VtZW50OjpyZW1vdmVT
dHlsZVNoZWV0Q2FuZGlkYXRlCiB7CiAgICAgbV9zdHlsZVNoZWV0Q2FuZGlkYXRlTm9kZXMucmVt
b3ZlKG5vZGUpOwogfQotCi12b2lkIERvY3VtZW50OjpyZWNhbGNTdHlsZVNlbGVjdG9yKCkKKyAg
ICAKK3ZvaWQgRG9jdW1lbnQ6OmNvbGxlY3RBY3RpdmVTdHlsZXNoZWV0cyhWZWN0b3I8UmVmUHRy
PFN0eWxlU2hlZXQ+ID4mIHNoZWV0cykKIHsKLSAgICBpZiAobV9pblN0eWxlUmVjYWxjKSB7Ci0g
ICAgICAgIC8vIFNWRyA8dXNlPiBlbGVtZW50IG1heSBtYW5hZ2UgdG8gaW52YWxpZGF0ZSBzdHls
ZSBzZWxlY3RvciBpbiB0aGUgbWlkZGxlIG9mIGEgc3R5bGUgcmVjYWxjLgotICAgICAgICAvLyBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTQzNDQKLSAgICAgICAgLy8g
RklYTUU6IFRoaXMgc2hvdWxkIGJlIGZpeGVkIGluIFNWRyBhbmQgdGhpcyBjb2RlIHJlcGxhY2Vk
IHdpdGggQVNTRVJUKCFtX2luU3R5bGVSZWNhbGMpLgotICAgICAgICBtX2hhc0RpcnR5U3R5bGVT
ZWxlY3RvciA9IHRydWU7Ci0gICAgICAgIHNjaGVkdWxlRm9yY2VkU3R5bGVSZWNhbGMoKTsKLSAg
ICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBpZiAoIXJlbmRlcmVyKCkgfHwgIWF0dGFjaGVkKCkp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIFN0eWxlU2hlZXRWZWN0b3Igc2hlZXRzOwotCiAgICAg
Ym9vbCBtYXRjaEF1dGhvckFuZFVzZXJTdHlsZXMgPSB0cnVlOwogICAgIGlmIChTZXR0aW5ncyog
c2V0dGluZ3MgPSB0aGlzLT5zZXR0aW5ncygpKQogICAgICAgICBtYXRjaEF1dGhvckFuZFVzZXJT
dHlsZXMgPSBzZXR0aW5ncy0+YXV0aG9yQW5kVXNlclN0eWxlc0VuYWJsZWQoKTsKQEAgLTMwNzAs
OSArMzA2OSw3IEBAIHZvaWQgRG9jdW1lbnQ6OnJlY2FsY1N0eWxlU2VsZWN0b3IoKQogICAgICAg
ICBlbmQgPSBiZWdpbjsKICAgICBmb3IgKFN0eWxlU2hlZXRDYW5kaWRhdGVMaXN0SGFzaFNldDo6
aXRlcmF0b3IgaXQgPSBiZWdpbjsgaXQgIT0gZW5kOyArK2l0KSB7CiAgICAgICAgIE5vZGUqIG4g
PSAqaXQ7Ci0KICAgICAgICAgU3R5bGVTaGVldCogc2hlZXQgPSAwOwotCiAgICAgICAgIGlmIChu
LT5ub2RlVHlwZSgpID09IFBST0NFU1NJTkdfSU5TVFJVQ1RJT05fTk9ERSkgewogICAgICAgICAg
ICAgLy8gUHJvY2Vzc2luZyBpbnN0cnVjdGlvbiAoWE1MIGRvY3VtZW50cyBvbmx5KS4KICAgICAg
ICAgICAgIC8vIFdlIGRvbid0IHN1cHBvcnQgbGlua2luZyB0byBlbWJlZGRlZCBDU1Mgc3R5bGVz
aGVldHMsIHNlZSA8aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ5Mjgx
PiBmb3IgZGlzY3Vzc2lvbi4KQEAgLTMwODksOSArMzA4Niw5IEBAIHZvaWQgRG9jdW1lbnQ6OnJl
Y2FsY1N0eWxlU2VsZWN0b3IoKQogI2VuZGlmCiAgICAgICAgIH0gZWxzZSBpZiAoKG4tPmlzSFRN
TEVsZW1lbnQoKSAmJiAobi0+aGFzVGFnTmFtZShsaW5rVGFnKSB8fCBuLT5oYXNUYWdOYW1lKHN0
eWxlVGFnKSkpCiAjaWYgRU5BQkxFKFNWRykKLSAgICAgICAgICAgIHx8ICAobi0+aXNTVkdFbGVt
ZW50KCkgJiYgbi0+aGFzVGFnTmFtZShTVkdOYW1lczo6c3R5bGVUYWcpKQorICAgICAgICAgICAg
ICAgICAgIHx8ICAobi0+aXNTVkdFbGVtZW50KCkgJiYgbi0+aGFzVGFnTmFtZShTVkdOYW1lczo6
c3R5bGVUYWcpKQogI2VuZGlmCi0gICAgICAgICkgeworICAgICAgICAgICAgICAgICAgICkgewog
ICAgICAgICAgICAgRWxlbWVudCogZSA9IHN0YXRpY19jYXN0PEVsZW1lbnQqPihuKTsKICAgICAg
ICAgICAgIEF0b21pY1N0cmluZyB0aXRsZSA9IGUtPmdldEF0dHJpYnV0ZSh0aXRsZUF0dHIpOwog
ICAgICAgICAgICAgYm9vbCBlbmFibGVkVmlhU2NyaXB0ID0gZmFsc2U7CkBAIC0zMTE1LDcgKzMx
MTIsNiBAQCB2b2lkIERvY3VtZW50OjpyZWNhbGNTdHlsZVNlbGVjdG9yKCkKICAgICAgICAgICAg
ICAgICBpZiAoIWxpbmtFbGVtZW50LT5zaGVldCgpKQogICAgICAgICAgICAgICAgICAgICB0aXRs
ZSA9IG51bGxBdG9tOwogICAgICAgICAgICAgfQotCiAgICAgICAgICAgICAvLyBHZXQgdGhlIGN1
cnJlbnQgcHJlZmVycmVkIHN0eWxlc2V0LiAgVGhpcyBpcyB0aGUKICAgICAgICAgICAgIC8vIHNl
dCBvZiBzaGVldHMgdGhhdCB3aWxsIGJlIGVuYWJsZWQuCiAjaWYgRU5BQkxFKFNWRykKQEAgLTMx
MjMsMTIgKzMxMTksMTEgQEAgdm9pZCBEb2N1bWVudDo6cmVjYWxjU3R5bGVTZWxlY3RvcigpCiAg
ICAgICAgICAgICAgICAgc2hlZXQgPSBzdGF0aWNfY2FzdDxTVkdTdHlsZUVsZW1lbnQqPihuKS0+
c2hlZXQoKTsKICAgICAgICAgICAgIGVsc2UKICNlbmRpZgotICAgICAgICAgICAgaWYgKGUtPmhh
c0xvY2FsTmFtZShsaW5rVGFnKSkKLSAgICAgICAgICAgICAgICBzaGVldCA9IHN0YXRpY19jYXN0
PEhUTUxMaW5rRWxlbWVudCo+KG4pLT5zaGVldCgpOwotICAgICAgICAgICAgZWxzZQotICAgICAg
ICAgICAgICAgIC8vIDxTVFlMRT4gZWxlbWVudAotICAgICAgICAgICAgICAgIHNoZWV0ID0gc3Rh
dGljX2Nhc3Q8SFRNTFN0eWxlRWxlbWVudCo+KG4pLT5zaGVldCgpOwotCisgICAgICAgICAgICAg
ICAgaWYgKGUtPmhhc0xvY2FsTmFtZShsaW5rVGFnKSkKKyAgICAgICAgICAgICAgICAgICAgc2hl
ZXQgPSBzdGF0aWNfY2FzdDxIVE1MTGlua0VsZW1lbnQqPihuKS0+c2hlZXQoKTsKKyAgICAgICAg
ICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIC8vIDxTVFlMRT4gZWxlbWVudAorICAg
ICAgICAgICAgICAgICAgICBzaGVldCA9IHN0YXRpY19jYXN0PEhUTUxTdHlsZUVsZW1lbnQqPihu
KS0+c2hlZXQoKTsKICAgICAgICAgICAgIC8vIENoZWNrIHRvIHNlZSBpZiB0aGlzIHNoZWV0IGJl
bG9uZ3MgdG8gYSBzdHlsZXNldAogICAgICAgICAgICAgLy8gKHRodXMgbWFraW5nIGl0IFBSRUZF
UlJFRCBvciBBTFRFUk5BVEUgcmF0aGVyIHRoYW4KICAgICAgICAgICAgIC8vIFBFUlNJU1RFTlQp
LgpAQCAtMzE0MywyMSArMzEzOCwxMjYgQEAgdm9pZCBEb2N1bWVudDo6cmVjYWxjU3R5bGVTZWxl
Y3RvcigpCiAgICAgICAgICAgICAgICAgICAgIGlmIChlLT5oYXNMb2NhbE5hbWUoc3R5bGVUYWcp
IHx8ICFyZWwuY29udGFpbnMoImFsdGVybmF0ZSIpKQogICAgICAgICAgICAgICAgICAgICAgICAg
bV9wcmVmZXJyZWRTdHlsZXNoZWV0U2V0ID0gbV9zZWxlY3RlZFN0eWxlc2hlZXRTZXQgPSB0aXRs
ZTsKICAgICAgICAgICAgICAgICB9Ci0KICAgICAgICAgICAgICAgICBpZiAodGl0bGUgIT0gbV9w
cmVmZXJyZWRTdHlsZXNoZWV0U2V0KQogICAgICAgICAgICAgICAgICAgICBzaGVldCA9IDA7CiAg
ICAgICAgICAgICB9CiAgICAgICAgIH0KLQogICAgICAgICBpZiAoc2hlZXQpCiAgICAgICAgICAg
ICBzaGVldHMuYXBwZW5kKHNoZWV0KTsKICAgICB9Cit9CisgICAgCitib29sIERvY3VtZW50Ojp0
ZXN0QWRkZWRTdHlsZXNoZWV0UmVxdWlyZXNTdHlsZVJlY2FsYyhDU1NTdHlsZVNoZWV0KiBzdHls
ZXNoZWV0KQoreworICAgIGlmIChzdHlsZXNoZWV0LT5kaXNhYmxlZCgpKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgLy8gU2VlIGlmIGFsbCBydWxlcyBvbiB0aGUgc2hlZXQgYXJlIHNjb3Bl
ZCB0byBzb21lIHNwZWNpZmljIGlkcyBvciBjbGFzc2VzLgorICAgIC8vIFRoZW4gdGVzdCBpZiB3
ZSBhY3R1YWxseSBoYXZlIGFueSBvZiB0aG9zZSBpbiB0aGUgdHJlZSBhdCB0aGUgbW9tZW50Lgor
ICAgIC8vIEZJWE1FOiBFdmVuIHdlIGlmIHdlIGZpbmQgc29tZSwgd2UgY291bGQganVzdCBpbnZh
bGlkYXRlIHRob3NlIHN1YnRyZWVzIGluc3RlYWQgb2YgaW52YWxpZGF0aW5nIHRoZSBlbnRpcmUg
c3R5bGUuCisgICAgSGFzaFNldDxBdG9taWNTdHJpbmdJbXBsKj4gaWRTY29wZXM7IAorICAgIEhh
c2hTZXQ8QXRvbWljU3RyaW5nSW1wbCo+IGNsYXNzU2NvcGVzOworICAgIGlmICghU2VsZWN0b3JD
aGVja2VyOjpkZXRlcm1pbmVTdHlsZXNoZWV0U2VsZWN0b3JTY29wZXMoc3R5bGVzaGVldCwgaWRT
Y29wZXMsIGNsYXNzU2NvcGVzKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgLy8gVGVzdGlu
ZyBmb3IgY2xhc3NlcyBpcyBub3QgcGFydGljdWxhcmx5IGZhc3Qgc28gYmFpbCBvdXQgaWYgdGhl
cmUgYXJlIG1vcmUgdGhhbiBhIGZldy4KKyAgICBzdGF0aWMgY29uc3QgaW50IG1heGltdW1DbGFz
c1Njb3Blc1RvVGVzdCA9IDQ7CisgICAgaWYgKGNsYXNzU2NvcGVzLnNpemUoKSA+IG1heGltdW1D
bGFzc1Njb3Blc1RvVGVzdCkKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgSGFzaFNldDxBdG9t
aWNTdHJpbmdJbXBsKj46Oml0ZXJhdG9yIGVuZCA9IGlkU2NvcGVzLmVuZCgpOworICAgIGZvciAo
SGFzaFNldDxBdG9taWNTdHJpbmdJbXBsKj46Oml0ZXJhdG9yIGl0ID0gaWRTY29wZXMuYmVnaW4o
KTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAgIGlmIChoYXNFbGVtZW50V2l0aElkKCppdCkp
CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgZW5kID0gY2xhc3NTY29wZXMu
ZW5kKCk7CisgICAgZm9yIChIYXNoU2V0PEF0b21pY1N0cmluZ0ltcGwqPjo6aXRlcmF0b3IgaXQg
PSBjbGFzc1Njb3Blcy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAgICAgICAgLy8gRklY
TUU6IGdldEVsZW1lbnRzQnlDbGFzc05hbWUgaXMgbm90IG9wdGltYWwgZm9yIHRoaXMuIFdlIHNo
b3VsZCBoYW5kbGUgYWxsIGNsYXNzZXMgaW4gYSBzaW5nbGUgcGFzcy4KKyAgICAgICAgaWYgKGdl
dEVsZW1lbnRzQnlDbGFzc05hbWUoKml0KS0+bGVuZ3RoKCkpCisgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworfQorICAgIAordm9pZCBEb2N1bWVudDo6
YW5hbHl6ZVN0eWxlc2hlZXRDaGFuZ2UoU3R5bGVTZWxlY3RvclVwZGF0ZUZsYWcgdXBkYXRlRmxh
ZywgY29uc3QgVmVjdG9yPFJlZlB0cjxTdHlsZVNoZWV0PiA+JiBuZXdTdHlsZXNoZWV0cywgYm9v
bCYgcmVxdWlyZXNTdHlsZVNlbGVjdG9yUmVzZXQsIGJvb2wmIHJlcXVpcmVzU3R5bGVSZWNhbGMp
Cit7CisgICAgcmVxdWlyZXNTdHlsZVNlbGVjdG9yUmVzZXQgPSB0cnVlOworICAgIHJlcXVpcmVz
U3R5bGVSZWNhbGMgPSB0cnVlOworICAgIAorICAgIC8vIFN0eWxlc2hlZXRzIG9mIDxzdHlsZT4g
ZWxlbWVudHMgdGhhdCBAaW1wb3J0IHN0eWxlc2hlZXRzIGFyZSBhY3RpdmUgYnV0IGxvYWRpbmcu
IFdlIG5lZWQgdG8gdHJpZ2dlciBhIGZ1bGwgcmVjYWxjIHdoZW4gc3VjaCBsb2FkcyBhcmUgZG9u
ZS4KKyAgICBib29sIGhhc0FjdGl2ZUxvYWRpbmdTdHlsZXNoZWV0ID0gZmFsc2U7CisgICAgdW5z
aWduZWQgbmV3U3R5bGVzaGVldENvdW50ID0gbmV3U3R5bGVzaGVldHMuc2l6ZSgpOworICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBuZXdTdHlsZXNoZWV0Q291bnQ7ICsraSkgeworICAgICAg
ICBpZiAobmV3U3R5bGVzaGVldHNbaV0tPmlzTG9hZGluZygpKQorICAgICAgICAgICAgaGFzQWN0
aXZlTG9hZGluZ1N0eWxlc2hlZXQgPSB0cnVlOworICAgIH0KKyAgICBpZiAobV9oYWRBY3RpdmVM
b2FkaW5nU3R5bGVzaGVldCAmJiAhaGFzQWN0aXZlTG9hZGluZ1N0eWxlc2hlZXQpIHsKKyAgICAg
ICAgbV9oYWRBY3RpdmVMb2FkaW5nU3R5bGVzaGVldCA9IGZhbHNlOworICAgICAgICByZXR1cm47
CisgICAgfQorICAgIG1faGFkQWN0aXZlTG9hZGluZ1N0eWxlc2hlZXQgPSBoYXNBY3RpdmVMb2Fk
aW5nU3R5bGVzaGVldDsKKworICAgIGlmICh1cGRhdGVGbGFnICE9IFBlbmRpbmdTdHlsZXNoZWV0
Q29tcGxldGVkKQorICAgICAgICByZXR1cm47CisgICAgaWYgKCFtX3N0eWxlU2VsZWN0b3IpCisg
ICAgICAgIHJldHVybjsKKworICAgIC8vIFNlZSBpZiB3ZSBhcmUganVzdCBhZGRpbmcgc3R5bGVz
aGVldHMuCisgICAgdW5zaWduZWQgb2xkU3R5bGVzaGVldENvdW50ID0gbV9zdHlsZVNoZWV0cy0+
bGVuZ3RoKCk7CisgICAgaWYgKG5ld1N0eWxlc2hlZXRDb3VudCA8IG9sZFN0eWxlc2hlZXRDb3Vu
dCkKKyAgICAgICAgcmV0dXJuOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBvbGRTdHls
ZXNoZWV0Q291bnQ7ICsraSkgeworICAgICAgICBpZiAobV9zdHlsZVNoZWV0cy0+aXRlbShpKSAh
PSBuZXdTdHlsZXNoZWV0c1tpXSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgcmVx
dWlyZXNTdHlsZVNlbGVjdG9yUmVzZXQgPSBmYWxzZTsKKworICAgIC8vIElmIHdlIGFyZSBhbHJl
YWR5IHBhcnNpbmcgdGhlIGJvZHkgYW5kIHNvIG1heSBoYXZlIHNpZ25pZmljYW50IGFtb3VudCBv
ZiBlbGVtZW50cywgcHV0IHNvbWUgZWZmb3J0IGludG8gdHJ5aW5nIHRvIGF2b2lkIHN0eWxlIHJl
Y2FsY3MuCisgICAgaWYgKCFib2R5KCkgfHwgbV9oYXNOb2Rlc1dpdGhQbGFjZWhvbGRlclN0eWxl
KQorICAgICAgICByZXR1cm47CisgICAgZm9yICh1bnNpZ25lZCBpID0gb2xkU3R5bGVzaGVldENv
dW50OyBpIDwgbmV3U3R5bGVzaGVldENvdW50OyArK2kpIHsKKyAgICAgICAgaWYgKCFuZXdTdHls
ZXNoZWV0c1tpXS0+aXNDU1NTdHlsZVNoZWV0KCkpCisgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgIGlmICh0ZXN0QWRkZWRTdHlsZXNoZWV0UmVxdWlyZXNTdHlsZVJlY2FsYyhzdGF0aWNfY2Fz
dDxDU1NTdHlsZVNoZWV0Kj4obmV3U3R5bGVzaGVldHNbaV0uZ2V0KCkpKSkKKyAgICAgICAgICAg
IHJldHVybjsKKyAgICB9CisgICAgcmVxdWlyZXNTdHlsZVJlY2FsYyA9IGZhbHNlOworfQogCi0g
ICAgbV9zdHlsZVNoZWV0cy0+c3dhcChzaGVldHMpOworYm9vbCBEb2N1bWVudDo6dXBkYXRlQWN0
aXZlU3R5bGVzaGVldHMoU3R5bGVTZWxlY3RvclVwZGF0ZUZsYWcgdXBkYXRlRmxhZykKK3sKKyAg
ICBpZiAobV9pblN0eWxlUmVjYWxjKSB7CisgICAgICAgIC8vIFNWRyA8dXNlPiBlbGVtZW50IG1h
eSBtYW5hZ2UgdG8gaW52YWxpZGF0ZSBzdHlsZSBzZWxlY3RvciBpbiB0aGUgbWlkZGxlIG9mIGEg
c3R5bGUgcmVjYWxjLgorICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9NTQzNDQKKyAgICAgICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIGJlIGZpeGVkIGlu
IFNWRyBhbmQgdGhpcyBjb2RlIHJlcGxhY2VkIHdpdGggQVNTRVJUKCFtX2luU3R5bGVSZWNhbGMp
LgorICAgICAgICBtX2hhc0RpcnR5U3R5bGVTZWxlY3RvciA9IHRydWU7CisgICAgICAgIHNjaGVk
dWxlRm9yY2VkU3R5bGVSZWNhbGMoKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAg
ICBpZiAoIXJlbmRlcmVyKCkgfHwgIWF0dGFjaGVkKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KworICAgIFN0eWxlU2hlZXRWZWN0b3IgbmV3U3R5bGVzaGVldHM7CisgICAgY29sbGVjdEFjdGl2
ZVN0eWxlc2hlZXRzKG5ld1N0eWxlc2hlZXRzKTsKKworICAgIC8vIElmIHRoZSBhY3RpdmUgc3R5
bGVzaGVldCBzZXQgY2hhbmdlcyB3aGlsZSBhbHJlYWR5IHBhcnNpbmcgdGhlIGJvZHkgZmlndXJl
IG91dCBpZiB3ZSBhY3R1YWxseSBuZWVkIGEgc3R5bGUgcmVjYWxjLgorICAgIGJvb2wgcmVxdWly
ZXNTdHlsZVNlbGVjdG9yUmVzZXQ7CisgICAgYm9vbCByZXF1aXJlc1N0eWxlUmVjYWxjOworICAg
IGFuYWx5emVTdHlsZXNoZWV0Q2hhbmdlKHVwZGF0ZUZsYWcsIG5ld1N0eWxlc2hlZXRzLCByZXF1
aXJlc1N0eWxlU2VsZWN0b3JSZXNldCwgcmVxdWlyZXNTdHlsZVJlY2FsYyk7CisKKyAgICBpZiAo
cmVxdWlyZXNTdHlsZVNlbGVjdG9yUmVzZXQpCisgICAgICAgIG1fc3R5bGVTZWxlY3Rvci5jbGVh
cigpOworICAgIGVsc2UgeworICAgICAgICBtX3N0eWxlU2VsZWN0b3ItPmFwcGVuZEF1dGhvclN0
eWxlc2hlZXRzKG1fc3R5bGVTaGVldHMtPmxlbmd0aCgpLCBuZXdTdHlsZXNoZWV0cyk7CisgICAg
ICAgIGlmIChyZXF1aXJlc1N0eWxlUmVjYWxjKQorICAgICAgICAgICAgY29tYmluZUNTU0ZlYXR1
cmVGbGFncygpOworICAgICAgICBlbHNlCisgICAgICAgICAgICByZXNldENTU0ZlYXR1cmVGbGFn
cygpOworICAgIH0KKworICAgIG1fc3R5bGVTaGVldHMtPnN3YXAobmV3U3R5bGVzaGVldHMpOwog
Ci0gICAgbV9zdHlsZVNlbGVjdG9yLmNsZWFyKCk7CiAgICAgbV9kaWRDYWxjdWxhdGVTdHlsZVNl
bGVjdG9yID0gdHJ1ZTsKICAgICBtX2hhc0RpcnR5U3R5bGVTZWxlY3RvciA9IGZhbHNlOworICAg
IAorICAgIHJldHVybiByZXF1aXJlc1N0eWxlUmVjYWxjOwogfQogCiB2b2lkIERvY3VtZW50Ojpz
ZXRIb3Zlck5vZGUoUGFzc1JlZlB0cjxOb2RlPiBuZXdIb3Zlck5vZGUpCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9kb20vRG9jdW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20v
RG9jdW1lbnQuaAkocmV2aXNpb24gMTAzOTAxKQorKysgU291cmNlL1dlYkNvcmUvZG9tL0RvY3Vt
ZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTIxMSw3ICsyMTEsNyBAQCBlbnVtIFBhZ2VzaG93RXZl
bnRQZXJzaXN0ZW5jZSB7CiAgICAgUGFnZXNob3dFdmVudFBlcnNpc3RlZCA9IDEKIH07CiAKLWVu
dW0gU3R5bGVTZWxlY3RvclVwZGF0ZUZsYWcgeyBSZWNhbGNTdHlsZUltbWVkaWF0ZWx5LCBEZWZl
clJlY2FsY1N0eWxlIH07CitlbnVtIFN0eWxlU2VsZWN0b3JVcGRhdGVGbGFnIHsgUmVjYWxjU3R5
bGVJbW1lZGlhdGVseSwgRGVmZXJSZWNhbGNTdHlsZSwgUGVuZGluZ1N0eWxlc2hlZXRDb21wbGV0
ZWQgfTsKIAogY2xhc3MgRG9jdW1lbnQgOiBwdWJsaWMgVHJlZVNjb3BlLCBwdWJsaWMgU2NyaXB0
RXhlY3V0aW9uQ29udGV4dCB7CiBwdWJsaWM6CkBAIC00NTYsNyArNDU2LDcgQEAgcHVibGljOgog
ICAgIH0KIAogICAgIC8qKgotICAgICAqIFVwZGF0ZXMgdGhlIHBlbmRpbmcgc2hlZXQgY291bnQg
YW5kIHRoZW4gY2FsbHMgdXBkYXRlU3R5bGVTZWxlY3Rvci4KKyAgICAgKiBVcGRhdGVzIHRoZSBw
ZW5kaW5nIHNoZWV0IGNvdW50IGFuZCB0aGVuIGNhbGxzIHVwZGF0ZUFjdGl2ZVN0eWxlc2hlZXRz
LgogICAgICAqLwogICAgIHZvaWQgcmVtb3ZlUGVuZGluZ1NoZWV0KCk7CiAKQEAgLTQ5MSw3ICs0
OTEsNiBAQCBwdWJsaWM6CiAgICAgICogZm91bmQgYW5kIGlzIHVzZWQgdG8gY2FsY3VsYXRlIHRo
ZSBkZXJpdmVkIHN0eWxlcyBmb3IgYWxsIHJlbmRlcmluZyBvYmplY3RzLgogICAgICAqLwogICAg
IHZvaWQgc3R5bGVTZWxlY3RvckNoYW5nZWQoU3R5bGVTZWxlY3RvclVwZGF0ZUZsYWcpOwotICAg
IHZvaWQgcmVjYWxjU3R5bGVTZWxlY3RvcigpOwogCiAgICAgYm9vbCB1c2VzU2libGluZ1J1bGVz
KCkgY29uc3QgeyByZXR1cm4gbV91c2VzU2libGluZ1J1bGVzIHx8IG1fdXNlc1NpYmxpbmdSdWxl
c092ZXJyaWRlOyB9CiAgICAgdm9pZCBzZXRVc2VzU2libGluZ1J1bGVzKGJvb2wgYikgeyBtX3Vz
ZXNTaWJsaW5nUnVsZXNPdmVycmlkZSA9IGI7IH0KQEAgLTExNjEsNiArMTE2MCwxMyBAQCBwcml2
YXRlOgogICAgIHZvaWQgYnVpbGRBY2Nlc3NLZXlNYXAoVHJlZVNjb3BlKiByb290KTsKIAogICAg
IHZvaWQgY3JlYXRlU3R5bGVTZWxlY3RvcigpOworICAgIHZvaWQgY29tYmluZUNTU0ZlYXR1cmVG
bGFncygpOworICAgIHZvaWQgcmVzZXRDU1NGZWF0dXJlRmxhZ3MoKTsKKyAgICAKKyAgICBib29s
IHVwZGF0ZUFjdGl2ZVN0eWxlc2hlZXRzKFN0eWxlU2VsZWN0b3JVcGRhdGVGbGFnKTsKKyAgICB2
b2lkIGNvbGxlY3RBY3RpdmVTdHlsZXNoZWV0cyhWZWN0b3I8UmVmUHRyPFN0eWxlU2hlZXQ+ID4m
KTsKKyAgICBib29sIHRlc3RBZGRlZFN0eWxlc2hlZXRSZXF1aXJlc1N0eWxlUmVjYWxjKENTU1N0
eWxlU2hlZXQqKTsKKyAgICB2b2lkIGFuYWx5emVTdHlsZXNoZWV0Q2hhbmdlKFN0eWxlU2VsZWN0
b3JVcGRhdGVGbGFnLCBjb25zdCBWZWN0b3I8UmVmUHRyPFN0eWxlU2hlZXQ+ID4mIG5ld1N0eWxl
c2hlZXRzLCBib29sJiByZXF1aXJlc1N0eWxlU2VsZWN0b3JSZXNldCwgYm9vbCYgcmVxdWlyZXNT
dHlsZVJlY2FsYyk7CiAKICAgICB2b2lkIGRlbGV0ZUN1c3RvbUZvbnRzKCk7CiAKQEAgLTEyNjQs
NiArMTI3MCw3IEBAIHByaXZhdGU6CiAjZW5kaWYKIAogICAgIFJlZlB0cjxTdHlsZVNoZWV0TGlz
dD4gbV9zdHlsZVNoZWV0czsgLy8gQWxsIG9mIHRoZSBzdHlsZXNoZWV0cyB0aGF0IGFyZSBjdXJy
ZW50bHkgaW4gZWZmZWN0IGZvciBvdXIgbWVkaWEgdHlwZSBhbmQgc3R5bGVzaGVldCBzZXQuCisg
ICAgYm9vbCBtX2hhZEFjdGl2ZUxvYWRpbmdTdHlsZXNoZWV0OwogICAgIAogICAgIHR5cGVkZWYg
TGlzdEhhc2hTZXQ8Tm9kZSosIDMyPiBTdHlsZVNoZWV0Q2FuZGlkYXRlTGlzdEhhc2hTZXQ7CiAg
ICAgU3R5bGVTaGVldENhbmRpZGF0ZUxpc3RIYXNoU2V0IG1fc3R5bGVTaGVldENhbmRpZGF0ZU5v
ZGVzOyAvLyBBbGwgb2YgdGhlIG5vZGVzIHRoYXQgY291bGQgcG90ZW50aWFsbHkgcHJvdmlkZSBz
dHlsZXNoZWV0cyB0byB0aGUgZG9jdW1lbnQgKDxsaW5rPiwgPHN0eWxlPiwgPD94bWwtc3R5bGVz
aGVldD4pCg==
</data>
<flag name="commit-queue"
          id="121424"
          type_id="3"
          status="-"
          setter="webkit.review.bot"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>121113</attachid>
            <date>2012-01-04 08:18:11 -0800</date>
            <delta_ts>2012-01-04 09:00:02 -0800</delta_ts>
            <desc>Chromium build fix plus some cleanups</desc>
            <filename>stylesheet-selector-scope-6.patch</filename>
            <type>text/plain</type>
            <size>29637</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEwMzk5NSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDk5IEBACisyMDEyLTAxLTAzICBBbnR0aSBL
b2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBBbmFseXplIHN0eWxlc2hlZXQgc2NvcGUgdG8gbWluaW1pemUg
c3R5bGUgcmVjYWxjcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9NzU1MDgKKyAgICAgICAgCisgICAgICAgIEl0IGlzIGEgcmVsYXRpdmVseSBjb21tb24g
cGF0dGVybiB0byB1c2UgaW5saW5lIHN0eWxlc2hlZXRzIGluIGRvY3VtZW50IGJvZHkgd2hlcmUg
YWxsIHJ1bGVzIGFyZSBzY29wZWQgdXNpbmcgZGVzY2VuZGFudCBzZWxlY3RvcgorCisgICAgICAg
IDxzdHlsZT4KKyAgICAgICAgI2ZvbyB7Li4ufQorICAgICAgICAjZm9vIGRpdiB7Li4ufQorICAg
ICAgICAjZm9vIC5iYXIgey4uLn0KKyAgICAgICAgPC9zdHlsZT4KKworICAgICAgICBXaGVuIHRo
aXMgcGF0dGVybiBpcyB1c2VkIGl0IGlzIGFsc28gY29tbW9uIHRoYXQgdGhlIHJ1bGVzIG9ubHkg
YXBwbHkgdG8gZWxlbWVudHMgdGhhdCBjb21lIGFmdGVyIHRoZSBzdHlsZSBlbGVtZW50LiAKKwor
ICAgICAgICBXaGVuIHRoZSBzZXQgb2YgYWN0aXZlIHN0eWxlc2hlZXRzIGNoYW5nZXMgd2UgaW52
YWxpZGF0ZSBhbmQgcmVjb21wdXRlIHRoZSBlbnRpcmUgZG9jdW1lbnQgc3R5bGUuIFRoaXMgaXMg
dmVyeSBleHBlbnNpdmUuIFdlIGNhbiAKKyAgICAgICAgZGV0ZWN0IHRoZSBjYXNlIGFib3ZlIGFu
ZCBhdm9pZCB0aGUgc3R5bGUgcmVjYWxjLgorICAgICAgICAKKyAgICAgICAgT24gZW5nYWRnZXQu
Y29tLCB0aGlzIHBhdGNoIGN1dHMgdGhlIHRpbWUgc3BlbnQgaW4gc3R5bGUgcmVjYWxjcyB0byBy
b3VnaGx5IGhhbGYuIFRoZXJlIGFyZSBmdXJ0aGVyIHNhdmluZ3MgZnJvbSByZWR1Y2VkIAorICAg
ICAgICByZWxheW91dHMuIEluIHRvdGFsIHRoZSBlbmdpbmUgQ1BVIHRpbWUgdXNlZCBvdmVyIHRo
ZSBwYWdlIGxvYWQgaXMgcmVkdWNlZCBieSB+MTAlLgorCisgICAgICAgICogY3NzL0NTU1N0eWxl
U2VsZWN0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q1NTU3R5bGVTZWxlY3Rvcjo6Q1NTU3R5
bGVTZWxlY3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpDU1NTdHlsZVNlbGVjdG9yOjpjb2xsZWN0
RmVhdHVyZXMpOgorICAgICAgICAKKyAgICAgICAgICAgIFJlZmFjdG9yIGZlYXR1cmUgY29sbGVj
dGlvbiBmcm9tIGNvbnN0cnVjdG9yIHRvIGEgc2VwYXJhdGUgZnVuY3Rpb24uCisgICAgICAgIAor
ICAgICAgICAoV2ViQ29yZTo6Q1NTU3R5bGVTZWxlY3Rvcjo6YXBwZW5kQXV0aG9yU3R5bGVzaGVl
dHMpOgorICAgICAgICAKKyAgICAgICAgICAgIE5ldyBmdW5jdGlvbiBmb3Igbm9uLWRlc3RydWN0
aXZlbHkgdXBkYXRpbmcgdGhlIHN0eWxlIHNlbGVjdG9yLgorICAgICAgICAKKyAgICAgICAgKFdl
YkNvcmU6OkNTU1N0eWxlU2VsZWN0b3I6OkZlYXR1cmVzOjpjbGVhcik6CisgICAgICAgIAorICAg
ICAgICAgICAgQ2xlYXIgdGhlIGZlYXR1cmVzIGZvciBhbm90aGVyIGNvbGxlY3Rpb24uCisgICAg
ICAgICAgICAKKyAgICAgICAgKFdlYkNvcmU6OkNTU1N0eWxlU2VsZWN0b3I6OmRldGVybWluZVN0
eWxlc2hlZXRTZWxlY3RvclNjb3Blcyk6CisgICAgICAgIAorICAgICAgICAgICAgRmluZCBpZiBh
bGwgcnVsZXMgb24gYSBzdHlsZXNoZWV0YXJlIHNjb3BlZCB0byBzb21lIHNldCBvZiBpZHMgYW5k
IGNsYXNzZXMuCisgICAgICAgIAorICAgICAgICAoV2ViQ29yZTo6Q1NTU3R5bGVTZWxlY3Rvcjo6
c3R5bGVGb3JEb2N1bWVudCk6CisgICAgICAgIAorICAgICAgICAgICAgQWRkIG9wdGlvbmFsIGZv
bnQgc2VsZWN0b3IgYXJndW1lbnQuIFdlIHVwZGF0ZWQgdGhlIGNvcnJlY3QgYmFzZSBzdHlsZSBm
b250IG9uIHN0eWxlIHNlbGVjdG9yIGNvbnN0cnVjdGlvbiBidXQgdGhhdCBpcyBubyBsb25nZXIg
c3VmZmljaWVudAorICAgICAgICAgICAgYXMgZm9udCBzZWxlY3RvciBtYXkgYmUgdXBkYXRlZCB3
aXRob3V0IHJlY29uc3RydWN0aW5nIHRoZSBzdHlsZSBzZWxlY3Rvci4KKyAgICAgICAgCisgICAg
ICAgIChXZWJDb3JlOjpSdWxlU2V0OjphZGRSdWxlc0Zyb21TaGVldCk6CisgICAgICAgIAorICAg
ICAgICAgICAgSW52YWxpZGF0ZSB0aGUgbWF0Y2hlZCBkZWNsYXJhdGlvbiBjYWNoZSBpbiBjYXNl
IG9mIG5ldyBmb250LWZhY2UgcnVsZXMuCisgICAgICAgIAorICAgICAgICAqIGNzcy9DU1NTdHls
ZVNlbGVjdG9yLmg6CisgICAgICAgICogY3NzL1NlbGVjdG9yQ2hlY2tlci5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpTZWxlY3RvckNoZWNrZXI6OmRldGVybWluZVNlbGVjdG9yU2NvcGVzKToKKyAg
ICAgICAgCisgICAgICAgICAgICBGaW5kIGlmIGFsbCBydWxlcyBvbiBhIHNlbGVjdG9yIGxpc3Qg
YXJlIHNjb3BlZCB0byBzb21lIHNldCBvZiBpZHMgYW5kIGNsYXNzZXMuCisgICAgICAgIAorICAg
ICAgICAqIGNzcy9TZWxlY3RvckNoZWNrZXIuaDoKKyAgICAgICAgKiBkb20vRG9jdW1lbnQuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OkRvY3VtZW50KToKKyAgICAgICAgKFdlYkNv
cmU6OkRvY3VtZW50OjpyZWNhbGNTdHlsZSk6CisgICAgICAgIAorICAgICAgICAgICAgUGFzcyB0
aGUgZm9udCBzZWxlY3RvciwgaWYgZXhpc3RzLCB0byBzdHlsZUZvckRvY3VtZW50IHNvIHdlIGFs
d2F5cyBoYXZlIHRoZSBiYXNlIGZvbnQgdXAgdG8gZGF0ZS4KKyAgICAgICAgCisgICAgICAgIChX
ZWJDb3JlOjpEb2N1bWVudDo6Y29tYmluZUNTU0ZlYXR1cmVGbGFncyk6CisgICAgICAgIChXZWJD
b3JlOjpEb2N1bWVudDo6cmVzZXRDU1NGZWF0dXJlRmxhZ3MpOgorICAgICAgICAoV2ViQ29yZTo6
RG9jdW1lbnQ6OmNyZWF0ZVN0eWxlU2VsZWN0b3IpOgorCisgICAgICAgICAgICBSZWZhY3RvciBj
c3MgZmVhdHVyZSBmbGFnIHJlc2V0dGluZyB0byBmdW5jdGlvbnMuCisgICAgICAgIAorICAgICAg
ICAoV2ViQ29yZTo6RG9jdW1lbnQ6OnJlbW92ZVBlbmRpbmdTaGVldCk6CisgICAgICAgIAorICAg
ICAgICAgICAgVXNlIG5ldyBQZW5kaW5nU3R5bGVzaGVldENvbXBsZXRlZCBmbGFnIHdoZW4gbmV3
IHN0eWxlc2hlZXRzIGFycml2ZS4KKworICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OnN0eWxl
U2VsZWN0b3JDaGFuZ2VkKToKKworICAgICAgICAgICAgU2tpcCBzdHlsZSByZWNhbGMgaWYgaXQg
aXMgbm90IG5lZWRlZC4KKworICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OmNvbGxlY3RBY3Rp
dmVTdHlsZXNoZWV0cyk6CisgICAgICAgIAorICAgICAgICAgICAgUmVmYWN0b3IgY29sbGVjdGlu
ZyBzdHlsZXNoZWV0cyB0byBhIHNlcGFyYXRlIGZ1bmN0aW9uLgorICAgICAgICAKKyAgICAgICAg
KFdlYkNvcmU6OkRvY3VtZW50Ojp0ZXN0QWRkZWRTdHlsZXNoZWV0UmVxdWlyZXNTdHlsZVJlY2Fs
Yyk6CisgICAgICAgIAorICAgICAgICAgICAgRGV0ZXJtaW5lIHRoZSBzY29wZXMgYW5kIHVzZSBo
YXNFbGVtZW50V2l0aElkL2dldEVsZW1lbnRzQnlDbGFzc05hbWUgdG8gZmlndXJlIG91dCBpZiBh
bnkgc2NvcGVkIGVsZW1lbnRzIGN1cnJlbnRseSBleGlzdCBpbiB0aGUgdHJlZS4KKyAgICAgICAg
CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6YW5hbHl6ZVN0eWxlc2hlZXRDaGFuZ2UpOgor
ICAgICAgICAKKyAgICAgICAgICAgIEZpZ3VyZSBvdXQgaWYgd2UgY2FuIHVwZGF0ZSB0aGUgc3R5
bGUgc2VsZWN0b3IgaW5jcmVtZW50YWxseSBhbmQgaWYgd2UgY2FuIHNraXAgdGhlIHN0eWxlIHJl
Y2FsYy4KKyAgICAgICAgCisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6dXBkYXRlQWN0aXZl
U3R5bGVzaGVldHMpOgorICAgICAgICAKKyAgICAgICAgICAgIFJlbmFtZWQgZnJvbSByZWNhbGNT
dHlsZVNlbGVjdG9yLgorICAgICAgICAgICAgSW52b2tlIHRoZSBuZXcgYW5hbHlzaXMgZnVuY3Rp
b25zLgorICAgICAgICAKKyAgICAgICAgKiBkb20vRG9jdW1lbnQuaDoKKwogMjAxMi0wMS0wMyAg
V2VpIEphbWVzICA8amFtZXMud2VpQGludGVsLmNvbT4KIAogICAgICAgICBPcHRpbWl6ZSBBdWRp
b0J1ZmZlclNvdXJjZU5vZGUgcHJvY2VzcyBieSBhdm9pZGluZyBpbnRlcnBvbGF0aW9uIHdoZW4g
cGl0Y2hSYXRlPT0xCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU3R5bGVTZWxlY3Rvci5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL0NTU1N0eWxlU2VsZWN0b3IuY3Bw
CShyZXZpc2lvbiAxMDM5MDEpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU3R5bGVTZWxlY3Rv
ci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQyNCw2ICs0MjQsMTYgQEAgQ1NTU3R5bGVTZWxlY3Rv
cjo6Q1NTU3R5bGVTZWxlY3RvcihEb2N1bQogICAgICAgICBpZiAoc2hlZXQtPmlzQ1NTU3R5bGVT
aGVldCgpICYmICFzaGVldC0+ZGlzYWJsZWQoKSkKICAgICAgICAgICAgIG1fYXV0aG9yU3R5bGUt
PmFkZFJ1bGVzRnJvbVNoZWV0KHN0YXRpY19jYXN0PENTU1N0eWxlU2hlZXQqPihzaGVldCksICpt
X21lZGl1bSwgdGhpcyk7CiAgICAgfQorICAgIG1fYXV0aG9yU3R5bGUtPnNocmlua1RvRml0KCk7
CisKKyAgICBjb2xsZWN0RmVhdHVyZXMoKTsKKyAgICAKKyAgICBpZiAoZG9jdW1lbnQtPnJlbmRl
cmVyKCkgJiYgZG9jdW1lbnQtPnJlbmRlcmVyKCktPnN0eWxlKCkpCisgICAgICAgIGRvY3VtZW50
LT5yZW5kZXJlcigpLT5zdHlsZSgpLT5mb250KCkudXBkYXRlKGZvbnRTZWxlY3RvcigpKTsKK30K
Kwordm9pZCBDU1NTdHlsZVNlbGVjdG9yOjpjb2xsZWN0RmVhdHVyZXMoKQorewogICAgIC8vIENv
bGxlY3QgYWxsIGlkcyBhbmQgcnVsZXMgdXNpbmcgc2libGluZyBzZWxlY3RvcnMgKDpmaXJzdC1j
aGlsZCBhbmQgc2ltaWxhcikKICAgICAvLyBpbiB0aGUgY3VycmVudCBzZXQgb2Ygc3R5bGVzaGVl
dHMuIFN0eWxlIHNoYXJpbmcgY29kZSB1c2VzIHRoaXMgaW5mb3JtYXRpb24gdG8gcmVqZWN0CiAg
ICAgLy8gc2hhcmluZyBjYW5kaWRhdGVzLgpAQCAtNDM1LDE1ICs0NDUsMjkgQEAgQ1NTU3R5bGVT
ZWxlY3Rvcjo6Q1NTU3R5bGVTZWxlY3RvcihEb2N1bQogICAgIG1fYXV0aG9yU3R5bGUtPmNvbGxl
Y3RGZWF0dXJlcyhtX2ZlYXR1cmVzKTsKICAgICBpZiAobV91c2VyU3R5bGUpCiAgICAgICAgIG1f
dXNlclN0eWxlLT5jb2xsZWN0RmVhdHVyZXMobV9mZWF0dXJlcyk7Ci0KLSAgICBtX2F1dGhvclN0
eWxlLT5zaHJpbmtUb0ZpdCgpOwogICAgIGlmIChtX2ZlYXR1cmVzLnNpYmxpbmdSdWxlcykKICAg
ICAgICAgbV9mZWF0dXJlcy5zaWJsaW5nUnVsZXMtPnNocmlua1RvRml0KCk7CiAgICAgaWYgKG1f
ZmVhdHVyZXMudW5jb21tb25BdHRyaWJ1dGVSdWxlcykKICAgICAgICAgbV9mZWF0dXJlcy51bmNv
bW1vbkF0dHJpYnV0ZVJ1bGVzLT5zaHJpbmtUb0ZpdCgpOworfQogCi0gICAgaWYgKGRvY3VtZW50
LT5yZW5kZXJlcigpICYmIGRvY3VtZW50LT5yZW5kZXJlcigpLT5zdHlsZSgpKQotICAgICAgICBk
b2N1bWVudC0+cmVuZGVyZXIoKS0+c3R5bGUoKS0+Zm9udCgpLnVwZGF0ZShmb250U2VsZWN0b3Io
KSk7Cit2b2lkIENTU1N0eWxlU2VsZWN0b3I6OmFwcGVuZEF1dGhvclN0eWxlc2hlZXRzKHVuc2ln
bmVkIGZpcnN0TmV3LCBjb25zdCBWZWN0b3I8UmVmUHRyPFN0eWxlU2hlZXQ+ID4mIHN0eWxlc2hl
ZXRzKQoreworICAgIC8vIFRoaXMgaGFuZGxlcyBzaGVldHMgYWRkZWQgdG8gdGhlIGVuZCBvZiB0
aGUgc3R5bGVzaGVldCBsaXN0IG9ubHkuIEluIG90aGVyIGNhc2VzIHRoZSBzdHlsZSByZXNvbHZl
cgorICAgIC8vIG5lZWRzIHRvIGJlIHJlY29uc3RydWN0ZWQuIFRvIGhhbmRsZSBpbnNlcnRpb25z
IHRvbyB0aGUgcnVsZSBvcmRlciBudW1iZXJzIHdvdWxkIG5lZWQgdG8gYmUgdXBkYXRlZC4KKyAg
ICB1bnNpZ25lZCBzaXplID0gc3R5bGVzaGVldHMuc2l6ZSgpOworICAgIGZvciAodW5zaWduZWQg
aSA9IGZpcnN0TmV3OyBpIDwgc2l6ZTsgKytpKSB7CisgICAgICAgIGlmICghc3R5bGVzaGVldHNb
aV0tPmlzQ1NTU3R5bGVTaGVldCgpIHx8IHN0eWxlc2hlZXRzW2ldLT5kaXNhYmxlZCgpKQorICAg
ICAgICAgICAgY29udGludWU7CisgICAgICAgIG1fYXV0aG9yU3R5bGUtPmFkZFJ1bGVzRnJvbVNo
ZWV0KHN0YXRpY19jYXN0PENTU1N0eWxlU2hlZXQqPihzdHlsZXNoZWV0c1tpXS5nZXQoKSksICpt
X21lZGl1bSwgdGhpcyk7CisgICAgfQorICAgIG1fYXV0aG9yU3R5bGUtPnNocmlua1RvRml0KCk7
CisgICAgLy8gRklYTUU6IFRoaXMgcmVhbGx5IG9ubHkgbmVlZHMgdG8gY29sbGVjdCB0aGUgZmVh
dHVyZXMgZnJvbSB0aGUgbmV3bHkgYWRkZWQgc2hlZXRzLgorICAgIG1fZmVhdHVyZXMuY2xlYXIo
KTsKKyAgICBjb2xsZWN0RmVhdHVyZXMoKTsKKyAgICAKKyAgICBpZiAoZG9jdW1lbnQoKS0+cmVu
ZGVyZXIoKSAmJiBkb2N1bWVudCgpLT5yZW5kZXJlcigpLT5zdHlsZSgpKQorICAgICAgICBkb2N1
bWVudCgpLT5yZW5kZXJlcigpLT5zdHlsZSgpLT5mb250KCkudXBkYXRlKGZvbnRTZWxlY3Rvcigp
KTsKIH0KIAogdm9pZCBDU1NTdHlsZVNlbGVjdG9yOjphZGRSZWdpb25SdWxlKFBhc3NSZWZQdHI8
V2ViS2l0Q1NTUmVnaW9uUnVsZT4gcmVnaW9uU3R5bGVSdWxlKQpAQCAtNDc1LDYgKzQ5OSwxNyBA
QCBDU1NTdHlsZVNlbGVjdG9yOjpGZWF0dXJlczo6fkZlYXR1cmVzKCkKIHsKIH0KIAordm9pZCBD
U1NTdHlsZVNlbGVjdG9yOjpGZWF0dXJlczo6Y2xlYXIoKQoreworICAgIGlkc0luUnVsZXMuY2xl
YXIoKTsKKyAgICBhdHRyc0luUnVsZXMuY2xlYXIoKTsKKyAgICBzaWJsaW5nUnVsZXMuY2xlYXIo
KTsKKyAgICB1bmNvbW1vbkF0dHJpYnV0ZVJ1bGVzLmNsZWFyKCk7CisgICAgdXNlc0ZpcnN0TGlu
ZVJ1bGVzID0gZmFsc2U7CisgICAgdXNlc0JlZm9yZUFmdGVyUnVsZXMgPSBmYWxzZTsKKyAgICB1
c2VzTGlua1J1bGVzID0gZmFsc2U7Cit9CisKIHN0YXRpYyBDU1NTdHlsZVNoZWV0KiBwYXJzZVVB
U2hlZXQoY29uc3QgU3RyaW5nJiBzdHIpCiB7CiAgICAgQ1NTU3R5bGVTaGVldCogc2hlZXQgPSBD
U1NTdHlsZVNoZWV0OjpjcmVhdGUoKS5sZWFrUmVmKCk7IC8vIGxlYWsgdGhlIHNoZWV0IG9uIHB1
cnBvc2UKQEAgLTExODksNyArMTIyNCw3IEBAIHZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6bWF0Y2hV
QVJ1bGVzKE1hdGMKICAgICB9CiB9CiAKLVBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IENTU1N0eWxl
U2VsZWN0b3I6OnN0eWxlRm9yRG9jdW1lbnQoRG9jdW1lbnQqIGRvY3VtZW50KQorUGFzc1JlZlB0
cjxSZW5kZXJTdHlsZT4gQ1NTU3R5bGVTZWxlY3Rvcjo6c3R5bGVGb3JEb2N1bWVudChEb2N1bWVu
dCogZG9jdW1lbnQsIENTU0ZvbnRTZWxlY3RvciogZm9udFNlbGVjdG9yKQogewogICAgIEZyYW1l
KiBmcmFtZSA9IGRvY3VtZW50LT5mcmFtZSgpOwogCkBAIC0xMjQ1LDcgKzEyODAsNyBAQCBQYXNz
UmVmUHRyPFJlbmRlclN0eWxlPiBDU1NTdHlsZVNlbGVjdG9yCiAgICAgfQogCiAgICAgZG9jdW1l
bnRTdHlsZS0+c2V0Rm9udERlc2NyaXB0aW9uKGZvbnREZXNjcmlwdGlvbik7Ci0gICAgZG9jdW1l
bnRTdHlsZS0+Zm9udCgpLnVwZGF0ZSgwKTsKKyAgICBkb2N1bWVudFN0eWxlLT5mb250KCkudXBk
YXRlKGZvbnRTZWxlY3Rvcik7CiAKICAgICByZXR1cm4gZG9jdW1lbnRTdHlsZS5yZWxlYXNlKCk7
CiB9CkBAIC0xODQyLDYgKzE4NzcsMzMgQEAgaW5saW5lIGJvb2wgQ1NTU3R5bGVTZWxlY3Rvcjo6
Y2hlY2tTZWxlYwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgcmV0dXJuIHRydWU7CiB9Cisg
ICAgCitib29sIENTU1N0eWxlU2VsZWN0b3I6OmRldGVybWluZVN0eWxlc2hlZXRTZWxlY3RvclNj
b3BlcyhDU1NTdHlsZVNoZWV0KiBzdHlsZXNoZWV0LCBIYXNoU2V0PEF0b21pY1N0cmluZ0ltcGwq
PiYgaWRTY29wZXMsIEhhc2hTZXQ8QXRvbWljU3RyaW5nSW1wbCo+JiBjbGFzc1Njb3BlcykKK3sK
KyAgICBBU1NFUlQoIXN0eWxlc2hlZXQtPmlzTG9hZGluZygpKTsKKyAgICAKKyAgICBzaXplX3Qg
c2l6ZSA9IHN0eWxlc2hlZXQtPmxlbmd0aCgpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
c2l6ZTsgaSsrKSB7CisgICAgICAgIENTU1J1bGUqIHJ1bGUgPSBzdHlsZXNoZWV0LT5pdGVtKGkp
OworICAgICAgICBpZiAocnVsZS0+aXNTdHlsZVJ1bGUoKSkgeworICAgICAgICAgICAgQ1NTU3R5
bGVSdWxlKiBzdHlsZVJ1bGUgPSBzdGF0aWNfY2FzdDxDU1NTdHlsZVJ1bGUqPihydWxlKTsKKyAg
ICAgICAgICAgIGlmICghU2VsZWN0b3JDaGVja2VyOjpkZXRlcm1pbmVTZWxlY3RvclNjb3Blcyhz
dHlsZVJ1bGUtPnNlbGVjdG9yTGlzdCgpLCBpZFNjb3BlcywgY2xhc3NTY29wZXMpKQorICAgICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9
IAorICAgICAgICBpZiAocnVsZS0+aXNJbXBvcnRSdWxlKCkpIHsKKyAgICAgICAgICAgIENTU0lt
cG9ydFJ1bGUqIGltcG9ydFJ1bGUgPSBzdGF0aWNfY2FzdDxDU1NJbXBvcnRSdWxlKj4ocnVsZSk7
CisgICAgICAgICAgICBpZiAoaW1wb3J0UnVsZS0+c3R5bGVTaGVldCgpKSB7CisgICAgICAgICAg
ICAgICAgaWYgKCFkZXRlcm1pbmVTdHlsZXNoZWV0U2VsZWN0b3JTY29wZXMoaW1wb3J0UnVsZS0+
c3R5bGVTaGVldCgpLCBpZFNjb3BlcywgY2xhc3NTY29wZXMpKQorICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjb250aW51ZTsKKyAg
ICAgICAgfQorICAgICAgICAvLyBGSVhNRTogTWVkaWEgcnVsZXMgYW5kIG1heWJlIHNvbWUgb3Ro
ZXJzIGNvdWxkIGJlIGFsbG93ZWQuCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAg
cmV0dXJuIHRydWU7Cit9CiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKQEAgLTIwMTMsNiArMjA3NSw3IEBAIHZv
aWQgUnVsZVNldDo6YWRkUnVsZXNGcm9tU2hlZXQoQ1NTU3R5bGUKICAgICAgICAgICAgICAgICAg
ICAgICAgIC8vIEFkZCB0aGlzIGZvbnQgZmFjZSB0byBvdXIgc2V0LgogICAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3QgQ1NTRm9udEZhY2VSdWxlKiBmb250RmFjZVJ1bGUgPSBzdGF0aWNfY2Fz
dDxDU1NGb250RmFjZVJ1bGUqPihjaGlsZEl0ZW0pOwogICAgICAgICAgICAgICAgICAgICAgICAg
c3R5bGVTZWxlY3Rvci0+Zm9udFNlbGVjdG9yKCktPmFkZEZvbnRGYWNlUnVsZShmb250RmFjZVJ1
bGUpOworICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGVTZWxlY3Rvci0+aW52YWxpZGF0ZU1h
dGNoZWREZWNsYXJhdGlvbkNhY2hlKCk7CiAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAo
Y2hpbGRJdGVtLT5pc0tleWZyYW1lc1J1bGUoKSAmJiBzdHlsZVNlbGVjdG9yKSB7CiAgICAgICAg
ICAgICAgICAgICAgICAgICAvLyBBZGQgdGhpcyBrZXlmcmFtZSBydWxlIHRvIG91ciBzZXQuCiAg
ICAgICAgICAgICAgICAgICAgICAgICBzdHlsZVNlbGVjdG9yLT5hZGRLZXlmcmFtZVN0eWxlKHN0
YXRpY19jYXN0PFdlYktpdENTU0tleWZyYW1lc1J1bGUqPihjaGlsZEl0ZW0pKTsKQEAgLTIwMjMs
NiArMjA4Niw3IEBAIHZvaWQgUnVsZVNldDo6YWRkUnVsZXNGcm9tU2hlZXQoQ1NTU3R5bGUKICAg
ICAgICAgICAgIC8vIEFkZCB0aGlzIGZvbnQgZmFjZSB0byBvdXIgc2V0LgogICAgICAgICAgICAg
Y29uc3QgQ1NTRm9udEZhY2VSdWxlKiBmb250RmFjZVJ1bGUgPSBzdGF0aWNfY2FzdDxDU1NGb250
RmFjZVJ1bGUqPihydWxlKTsKICAgICAgICAgICAgIHN0eWxlU2VsZWN0b3ItPmZvbnRTZWxlY3Rv
cigpLT5hZGRGb250RmFjZVJ1bGUoZm9udEZhY2VSdWxlKTsKKyAgICAgICAgICAgIHN0eWxlU2Vs
ZWN0b3ItPmludmFsaWRhdGVNYXRjaGVkRGVjbGFyYXRpb25DYWNoZSgpOwogICAgICAgICB9IGVs
c2UgaWYgKHJ1bGUtPmlzS2V5ZnJhbWVzUnVsZSgpKQogICAgICAgICAgICAgc3R5bGVTZWxlY3Rv
ci0+YWRkS2V5ZnJhbWVTdHlsZShzdGF0aWNfY2FzdDxXZWJLaXRDU1NLZXlmcmFtZXNSdWxlKj4o
cnVsZSkpOwogICAgICAgICBlbHNlIGlmIChydWxlLT5pc1JlZ2lvblJ1bGUoKSAmJiBzdHlsZVNl
bGVjdG9yKQpJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL0NTU1N0eWxlU2VsZWN0b3IuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU3R5bGVTZWxlY3Rvci5oCShyZXZpc2lv
biAxMDM5MDEpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU3R5bGVTZWxlY3Rvci5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMTMsNyArMTEzLDcgQEAgcHVibGljOgogCiAgICAgUGFzc1JlZlB0cjxS
ZW5kZXJTdHlsZT4gc3R5bGVGb3JQYWdlKGludCBwYWdlSW5kZXgpOwogCi0gICAgc3RhdGljIFBh
c3NSZWZQdHI8UmVuZGVyU3R5bGU+IHN0eWxlRm9yRG9jdW1lbnQoRG9jdW1lbnQqKTsKKyAgICBz
dGF0aWMgUGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4gc3R5bGVGb3JEb2N1bWVudChEb2N1bWVudCos
IENTU0ZvbnRTZWxlY3RvciogPSAwKTsKIAogICAgIFJlbmRlclN0eWxlKiBzdHlsZSgpIGNvbnN0
IHsgcmV0dXJuIG1fc3R5bGUuZ2V0KCk7IH0KICAgICBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUo
KSBjb25zdCB7IHJldHVybiBtX3BhcmVudFN0eWxlOyB9CkBAIC0xMjcsMTIgKzEyNywxOCBAQCBw
dWJsaWM6CiAgICAgdm9pZCBzZXRFZmZlY3RpdmVab29tKGZsb2F0IGYpIHsgbV9mb250RGlydHkg
fD0gc3R5bGUoKS0+c2V0RWZmZWN0aXZlWm9vbShmKTsgfQogICAgIHZvaWQgc2V0VGV4dFNpemVB
ZGp1c3QoYm9vbCBiKSB7IG1fZm9udERpcnR5IHw9IHN0eWxlKCktPnNldFRleHRTaXplQWRqdXN0
KGIpOyB9CiAgICAgYm9vbCBoYXNQYXJlbnROb2RlKCkgY29uc3QgeyByZXR1cm4gbV9wYXJlbnRO
b2RlOyB9CisgICAgCisgICAgdm9pZCBhcHBlbmRBdXRob3JTdHlsZXNoZWV0cyh1bnNpZ25lZCBm
aXJzdE5ldywgY29uc3QgVmVjdG9yPFJlZlB0cjxTdHlsZVNoZWV0PiA+Jik7CisgICAgCisgICAg
Ly8gRmluZCB0aGUgaWRzIG9yIGNsYXNzZXMgdGhlIHNlbGVjdG9ycyBvbiBhIHN0eWxlc2hlZXQg
YXJlIHNjb3BlZCB0by4gVGhlIHNlbGVjdG9ycyBvbmx5IGFwcGx5IHRvIGVsZW1lbnRzIGluIHN1
YnRyZWVzIHdoZXJlIHRoZSByb290IGVsZW1lbnQgbWF0Y2hlcyB0aGUgc2NvcGUuCisgICAgc3Rh
dGljIGJvb2wgZGV0ZXJtaW5lU3R5bGVzaGVldFNlbGVjdG9yU2NvcGVzKENTU1N0eWxlU2hlZXQq
LCBIYXNoU2V0PEF0b21pY1N0cmluZ0ltcGwqPiYgaWRTY29wZXMsIEhhc2hTZXQ8QXRvbWljU3Ry
aW5nSW1wbCo+JiBjbGFzc1Njb3Blcyk7CiAKIHByaXZhdGU6CiAgICAgdm9pZCBpbml0Rm9yU3R5
bGVSZXNvbHZlKEVsZW1lbnQqLCBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUgPSAwLCBQc2V1ZG9J
ZCA9IE5PUFNFVURPKTsKICAgICB2b2lkIGluaXRFbGVtZW50KEVsZW1lbnQqKTsKICAgICB2b2lk
IGluaXRGb3JSZWdpb25TdHlsaW5nKFJlbmRlclJlZ2lvbiopOwogICAgIHZvaWQgaW5pdFJlZ2lv
blJ1bGVzKFJlbmRlclJlZ2lvbiopOworICAgIHZvaWQgY29sbGVjdEZlYXR1cmVzKCk7CiAgICAg
UmVuZGVyU3R5bGUqIGxvY2F0ZVNoYXJlZFN0eWxlKCk7CiAgICAgYm9vbCBtYXRjaGVzUnVsZVNl
dChSdWxlU2V0Kik7CiAgICAgTm9kZSogbG9jYXRlQ291c2luTGlzdChFbGVtZW50KiBwYXJlbnQs
IHVuc2lnbmVkJiB2aXNpdGVkTm9kZUNvdW50KSBjb25zdDsKQEAgLTIyNCw2ICsyMzAsNyBAQCBw
dWJsaWM6CiAgICAgc3RydWN0IEZlYXR1cmVzIHsKICAgICAgICAgRmVhdHVyZXMoKTsKICAgICAg
ICAgfkZlYXR1cmVzKCk7CisgICAgICAgIHZvaWQgY2xlYXIoKTsKICAgICAgICAgSGFzaFNldDxB
dG9taWNTdHJpbmdJbXBsKj4gaWRzSW5SdWxlczsKICAgICAgICAgSGFzaFNldDxBdG9taWNTdHJp
bmdJbXBsKj4gYXR0cnNJblJ1bGVzOwogICAgICAgICBPd25QdHI8UnVsZVNldD4gc2libGluZ1J1
bGVzOwpJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL1NlbGVjdG9yQ2hlY2tlci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL1NlbGVjdG9yQ2hlY2tlci5jcHAJKHJldmlzaW9u
IDEwMzkwMSkKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9TZWxlY3RvckNoZWNrZXIuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMzk4LDQgKzEzOTgsMjggQEAgYm9vbCBTZWxlY3RvckNoZWNrZXI6Omlz
RnJhbWVGb2N1c2VkKGNvbgogICAgIHJldHVybiBlbGVtZW50LT5kb2N1bWVudCgpLT5mcmFtZSgp
ICYmIGVsZW1lbnQtPmRvY3VtZW50KCktPmZyYW1lKCktPnNlbGVjdGlvbigpLT5pc0ZvY3VzZWRB
bmRBY3RpdmUoKTsKIH0KIAorYm9vbCBTZWxlY3RvckNoZWNrZXI6OmRldGVybWluZVNlbGVjdG9y
U2NvcGVzKGNvbnN0IENTU1NlbGVjdG9yTGlzdCYgc2VsZWN0b3JMaXN0LCBIYXNoU2V0PEF0b21p
Y1N0cmluZ0ltcGwqPiYgaWRTY29wZXMsIEhhc2hTZXQ8QXRvbWljU3RyaW5nSW1wbCo+JiBjbGFz
c1Njb3BlcykKK3sKKyAgICBmb3IgKENTU1NlbGVjdG9yKiBzZWxlY3RvciA9IHNlbGVjdG9yTGlz
dC5maXJzdCgpOyBzZWxlY3Rvcjsgc2VsZWN0b3IgPSBDU1NTZWxlY3Rvckxpc3Q6Om5leHQoc2Vs
ZWN0b3IpKSB7CisgICAgICAgIENTU1NlbGVjdG9yKiByaWdodG1vc3RTZWxlY3RvciA9IHNlbGVj
dG9yOworICAgICAgICBDU1NTZWxlY3Rvcjo6UmVsYXRpb24gcmVsYXRpb24gPSBDU1NTZWxlY3Rv
cjo6RGVzY2VuZGFudDsKKyAgICAgICAgZm9yICg7cmlnaHRtb3N0U2VsZWN0b3ItPnRhZ0hpc3Rv
cnkoKTsgcmlnaHRtb3N0U2VsZWN0b3IgPSByaWdodG1vc3RTZWxlY3Rvci0+dGFnSGlzdG9yeSgp
KSB7CisgICAgICAgICAgICBpZiAocmlnaHRtb3N0U2VsZWN0b3ItPnJlbGF0aW9uKCkgIT0gQ1NT
U2VsZWN0b3I6OlN1YlNlbGVjdG9yKQorICAgICAgICAgICAgICAgIHJlbGF0aW9uID0gcmlnaHRt
b3N0U2VsZWN0b3ItPnJlbGF0aW9uKCk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHJlbGF0aW9u
ICE9IENTU1NlbGVjdG9yOjpEZXNjZW5kYW50ICYmIHJlbGF0aW9uICE9IENTU1NlbGVjdG9yOjpD
aGlsZCkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgaWYgKHJpZ2h0bW9zdFNl
bGVjdG9yLT5tX21hdGNoID09IENTU1NlbGVjdG9yOjpJZCkgeworICAgICAgICAgICAgaWRTY29w
ZXMuYWRkKHJpZ2h0bW9zdFNlbGVjdG9yLT52YWx1ZSgpLmltcGwoKSk7CisgICAgICAgICAgICBj
b250aW51ZTsKKyAgICAgICAgfQorICAgICAgICBpZiAocmlnaHRtb3N0U2VsZWN0b3ItPm1fbWF0
Y2ggPT0gQ1NTU2VsZWN0b3I6OkNsYXNzKSB7CisgICAgICAgICAgICBjbGFzc1Njb3Blcy5hZGQo
cmlnaHRtb3N0U2VsZWN0b3ItPnZhbHVlKCkuaW1wbCgpKTsKKyAgICAgICAgICAgIGNvbnRpbnVl
OworICAgICAgICB9CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgcmV0dXJuIHRy
dWU7Cit9CisKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9TZWxlY3RvckNoZWNrZXIuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvU2VsZWN0b3JDaGVja2VyLmgJKHJldmlz
aW9uIDEwMzkwMSkKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9TZWxlY3RvckNoZWNrZXIuaAkod29y
a2luZyBjb3B5KQpAQCAtOTAsNiArOTAsOSBAQCBwdWJsaWM6CiAgICAgZW51bSBMaW5rTWF0Y2hN
YXNrIHsgTWF0Y2hMaW5rID0gMSwgTWF0Y2hWaXNpdGVkID0gMiwgTWF0Y2hBbGwgPSBNYXRjaExp
bmsgfCBNYXRjaFZpc2l0ZWQgfTsKICAgICBzdGF0aWMgdW5zaWduZWQgZGV0ZXJtaW5lTGlua01h
dGNoVHlwZShjb25zdCBDU1NTZWxlY3RvciopOwogCisgICAgLy8gRmluZCB0aGUgaWRzIG9yIGNs
YXNzZXMgc2VsZWN0b3JzIGFyZSBzY29wZWQgdG8uIFRoZSBzZWxlY3RvcnMgb25seSBhcHBseSB0
byBlbGVtZW50cyBpbiBzdWJ0cmVlcyB3aGVyZSB0aGUgcm9vdCBlbGVtZW50IG1hdGNoZXMgdGhl
IHNjb3BlLgorICAgIHN0YXRpYyBib29sIGRldGVybWluZVNlbGVjdG9yU2NvcGVzKGNvbnN0IENT
U1NlbGVjdG9yTGlzdCYsIEhhc2hTZXQ8QXRvbWljU3RyaW5nSW1wbCo+JiBpZFNjb3BlcywgSGFz
aFNldDxBdG9taWNTdHJpbmdJbXBsKj4mIGNsYXNzU2NvcGVzKTsKKwogcHJpdmF0ZToKICAgICBi
b29sIGNoZWNrT25lU2VsZWN0b3IoQ1NTU2VsZWN0b3IqLCBFbGVtZW50KiwgUHNldWRvSWQmIGR5
bmFtaWNQc2V1ZG8sIGJvb2wgaXNTdWJTZWxlY3RvciwgVmlzaXRlZE1hdGNoVHlwZSwgUmVuZGVy
U3R5bGUqLCBSZW5kZXJTdHlsZSogZWxlbWVudFBhcmVudFN0eWxlKSBjb25zdDsKICAgICBib29s
IGNoZWNrU2Nyb2xsYmFyUHNldWRvQ2xhc3MoQ1NTU2VsZWN0b3IqLCBQc2V1ZG9JZCYgZHluYW1p
Y1BzZXVkbykgY29uc3Q7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAJKHJldmlzaW9uIDEw
MzkwMSkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTM4Miw2ICszODIsNyBAQCBEb2N1bWVudDo6RG9jdW1lbnQoRnJhbWUqIGZyYW1lLCBjb25z
dCBLCiAgICAgLCBtX211dGF0aW9uT2JzZXJ2ZXJUeXBlcygwKQogI2VuZGlmCiAgICAgLCBtX3N0
eWxlU2hlZXRzKFN0eWxlU2hlZXRMaXN0OjpjcmVhdGUodGhpcykpCisgICAgLCBtX2hhZEFjdGl2
ZUxvYWRpbmdTdHlsZXNoZWV0KGZhbHNlKQogICAgICwgbV9yZWFkeVN0YXRlKENvbXBsZXRlKQog
ICAgICwgbV9zdHlsZVJlY2FsY1RpbWVyKHRoaXMsICZEb2N1bWVudDo6c3R5bGVSZWNhbGNUaW1l
ckZpcmVkKQogICAgICwgbV9wZW5kaW5nU3R5bGVSZWNhbGNTaG91bGRGb3JjZShmYWxzZSkKQEAg
LTE1MjgsNyArMTUyOSw3IEBAIHZvaWQgRG9jdW1lbnQ6OnJlY2FsY1N0eWxlKFN0eWxlQ2hhbmdl
IGMKICAgICAgICAgcmV0dXJuOyAvLyBHdWFyZCBhZ2FpbnN0IHJlLWVudHJhbmN5LiAtZHdoCiAg
ICAgCiAgICAgaWYgKG1faGFzRGlydHlTdHlsZVNlbGVjdG9yKQotICAgICAgICByZWNhbGNTdHls
ZVNlbGVjdG9yKCk7CisgICAgICAgIHVwZGF0ZUFjdGl2ZVN0eWxlc2hlZXRzKFJlY2FsY1N0eWxl
SW1tZWRpYXRlbHkpOwogCiAgICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uQ29va2llIGNvb2tp
ZSA9IEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6d2lsbFJlY2FsY3VsYXRlU3R5bGUodGhpcyk7
CiAKQEAgLTE1NTMsNyArMTU1NCw3IEBAIHZvaWQgRG9jdW1lbnQ6OnJlY2FsY1N0eWxlKFN0eWxl
Q2hhbmdlIGMKICAgICAgICAgLy8gc3R5bGUgc2VsZWN0b3IgbWF5IHNldCB0aGlzIGFnYWluIGR1
cmluZyByZWNhbGMKICAgICAgICAgbV9oYXNOb2Rlc1dpdGhQbGFjZWhvbGRlclN0eWxlID0gZmFs
c2U7CiAgICAgICAgIAotICAgICAgICBSZWZQdHI8UmVuZGVyU3R5bGU+IGRvY3VtZW50U3R5bGUg
PSBDU1NTdHlsZVNlbGVjdG9yOjpzdHlsZUZvckRvY3VtZW50KHRoaXMpOworICAgICAgICBSZWZQ
dHI8UmVuZGVyU3R5bGU+IGRvY3VtZW50U3R5bGUgPSBDU1NTdHlsZVNlbGVjdG9yOjpzdHlsZUZv
ckRvY3VtZW50KHRoaXMsIG1fc3R5bGVTZWxlY3RvciA/IG1fc3R5bGVTZWxlY3Rvci0+Zm9udFNl
bGVjdG9yKCkgOiAwKTsKICAgICAgICAgU3R5bGVDaGFuZ2UgY2ggPSBkaWZmKGRvY3VtZW50U3R5
bGUuZ2V0KCksIHJlbmRlcmVyKCktPnN0eWxlKCkpOwogICAgICAgICBpZiAoY2ggIT0gTm9DaGFu
Z2UpCiAgICAgICAgICAgICByZW5kZXJlcigpLT5zZXRTdHlsZShkb2N1bWVudFN0eWxlLnJlbGVh
c2UoKSk7CkBAIC0xNTg0LDEyICsxNTg1LDggQEAgYmFpbF9vdXQ6CiAgICAgbV9pblN0eWxlUmVj
YWxjID0gZmFsc2U7CiAgICAgCiAgICAgLy8gUHNldWRvIGVsZW1lbnQgcmVtb3ZhbCBhbmQgc2lt
aWxhciBtYXkgb25seSB3b3JrIHdpdGggdGhlc2UgZmxhZ3Mgc3RpbGwgc2V0LiBSZXNldCB0aGVt
IGFmdGVyIHRoZSBzdHlsZSByZWNhbGMuCi0gICAgaWYgKG1fc3R5bGVTZWxlY3RvcikgewotICAg
ICAgICBtX3VzZXNTaWJsaW5nUnVsZXMgPSBtX3N0eWxlU2VsZWN0b3ItPnVzZXNTaWJsaW5nUnVs
ZXMoKTsKLSAgICAgICAgbV91c2VzRmlyc3RMaW5lUnVsZXMgPSBtX3N0eWxlU2VsZWN0b3ItPnVz
ZXNGaXJzdExpbmVSdWxlcygpOwotICAgICAgICBtX3VzZXNCZWZvcmVBZnRlclJ1bGVzID0gbV9z
dHlsZVNlbGVjdG9yLT51c2VzQmVmb3JlQWZ0ZXJSdWxlcygpOwotICAgICAgICBtX3VzZXNMaW5r
UnVsZXMgPSBtX3N0eWxlU2VsZWN0b3ItPnVzZXNMaW5rUnVsZXMoKTsKLSAgICB9CisgICAgaWYg
KG1fc3R5bGVTZWxlY3RvcikKKyAgICAgICAgcmVzZXRDU1NGZWF0dXJlRmxhZ3MoKTsKIAogICAg
IGlmIChmcmFtZVZpZXcpIHsKICAgICAgICAgZnJhbWVWaWV3LT5yZXN1bWVTY2hlZHVsZWRFdmVu
dHMoKTsKQEAgLTE3NzgsNiArMTc3NSwyMyBAQCB2b2lkIERvY3VtZW50OjpzZXRJc1ZpZXdTb3Vy
Y2UoYm9vbCBpc1ZpCiAgICAgc2V0U2VjdXJpdHlPcmlnaW4oU2VjdXJpdHlPcmlnaW46OmNyZWF0
ZVVuaXF1ZSgpKTsKIH0KIAordm9pZCBEb2N1bWVudDo6Y29tYmluZUNTU0ZlYXR1cmVGbGFncygp
Cit7CisgICAgLy8gRGVsYXkgcmVzZXR0aW5nIHRoZSBmbGFncyB1bnRpbCBhZnRlciBuZXh0IHN0
eWxlIHJlY2FsYyBzaW5jZSB1bmFwcGx5aW5nIHRoZSBzdHlsZSBtYXkgbm90IHdvcmsgd2l0aG91
dCB0aGVzZSBzZXQgKHRoaXMgaXMgdHJ1ZSBhdCBsZWFzdCB3aXRoIGJlZm9yZS9hZnRlcikuCisg
ICAgbV91c2VzU2libGluZ1J1bGVzID0gbV91c2VzU2libGluZ1J1bGVzIHx8IG1fc3R5bGVTZWxl
Y3Rvci0+dXNlc1NpYmxpbmdSdWxlcygpOworICAgIG1fdXNlc0ZpcnN0TGluZVJ1bGVzID0gbV91
c2VzRmlyc3RMaW5lUnVsZXMgfHwgbV9zdHlsZVNlbGVjdG9yLT51c2VzRmlyc3RMaW5lUnVsZXMo
KTsKKyAgICBtX3VzZXNCZWZvcmVBZnRlclJ1bGVzID0gbV91c2VzQmVmb3JlQWZ0ZXJSdWxlcyB8
fCBtX3N0eWxlU2VsZWN0b3ItPnVzZXNCZWZvcmVBZnRlclJ1bGVzKCk7CisgICAgbV91c2VzTGlu
a1J1bGVzID0gbV91c2VzTGlua1J1bGVzIHx8IG1fc3R5bGVTZWxlY3Rvci0+dXNlc0xpbmtSdWxl
cygpOworfQorCit2b2lkIERvY3VtZW50OjpyZXNldENTU0ZlYXR1cmVGbGFncygpCit7CisgICAg
bV91c2VzU2libGluZ1J1bGVzID0gbV9zdHlsZVNlbGVjdG9yLT51c2VzU2libGluZ1J1bGVzKCk7
CisgICAgbV91c2VzRmlyc3RMaW5lUnVsZXMgPSBtX3N0eWxlU2VsZWN0b3ItPnVzZXNGaXJzdExp
bmVSdWxlcygpOworICAgIG1fdXNlc0JlZm9yZUFmdGVyUnVsZXMgPSBtX3N0eWxlU2VsZWN0b3It
PnVzZXNCZWZvcmVBZnRlclJ1bGVzKCk7CisgICAgbV91c2VzTGlua1J1bGVzID0gbV9zdHlsZVNl
bGVjdG9yLT51c2VzTGlua1J1bGVzKCk7Cit9CisKIHZvaWQgRG9jdW1lbnQ6OmNyZWF0ZVN0eWxl
U2VsZWN0b3IoKQogewogICAgIGJvb2wgbWF0Y2hBdXRob3JBbmRVc2VyU3R5bGVzID0gdHJ1ZTsK
QEAgLTE3ODUsMTEgKzE3OTksNyBAQCB2b2lkIERvY3VtZW50OjpjcmVhdGVTdHlsZVNlbGVjdG9y
KCkKICAgICAgICAgbWF0Y2hBdXRob3JBbmRVc2VyU3R5bGVzID0gZG9jU2V0dGluZ3MtPmF1dGhv
ckFuZFVzZXJTdHlsZXNFbmFibGVkKCk7CiAgICAgbV9zdHlsZVNlbGVjdG9yID0gYWRvcHRQdHIo
bmV3IENTU1N0eWxlU2VsZWN0b3IodGhpcywgbV9zdHlsZVNoZWV0cy5nZXQoKSwgbV9tYXBwZWRF
bGVtZW50U2hlZXQuZ2V0KCksIHBhZ2VVc2VyU2hlZXQoKSwgcGFnZUdyb3VwVXNlclNoZWV0cygp
LCBtX3VzZXJTaGVldHMuZ2V0KCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIWluUXVpcmtzTW9kZSgpLCBtYXRjaEF1dGhvckFuZFVzZXJTdHls
ZXMpKTsKLSAgICAvLyBEZWxheSByZXNldHRpbmcgdGhlIGZsYWdzIHVudGlsIGFmdGVyIG5leHQg
c3R5bGUgcmVjYWxjIHNpbmNlIHVuYXBwbHlpbmcgdGhlIHN0eWxlIG1heSBub3Qgd29yayB3aXRo
b3V0IHRoZXNlIHNldCAodGhpcyBpcyB0cnVlIGF0IGxlYXN0IHdpdGggYmVmb3JlL2FmdGVyKS4K
LSAgICBtX3VzZXNTaWJsaW5nUnVsZXMgPSBtX3VzZXNTaWJsaW5nUnVsZXMgfHwgbV9zdHlsZVNl
bGVjdG9yLT51c2VzU2libGluZ1J1bGVzKCk7Ci0gICAgbV91c2VzRmlyc3RMaW5lUnVsZXMgPSBt
X3VzZXNGaXJzdExpbmVSdWxlcyB8fCBtX3N0eWxlU2VsZWN0b3ItPnVzZXNGaXJzdExpbmVSdWxl
cygpOwotICAgIG1fdXNlc0JlZm9yZUFmdGVyUnVsZXMgPSBtX3VzZXNCZWZvcmVBZnRlclJ1bGVz
IHx8IG1fc3R5bGVTZWxlY3Rvci0+dXNlc0JlZm9yZUFmdGVyUnVsZXMoKTsKLSAgICBtX3VzZXNM
aW5rUnVsZXMgPSBtX3VzZXNMaW5rUnVsZXMgfHwgbV9zdHlsZVNlbGVjdG9yLT51c2VzTGlua1J1
bGVzKCk7CisgICAgY29tYmluZUNTU0ZlYXR1cmVGbGFncygpOwogfQogCiB2b2lkIERvY3VtZW50
OjphdHRhY2goKQpAQCAtMjk1MCw3ICsyOTYwLDcgQEAgdm9pZCBEb2N1bWVudDo6cmVtb3ZlUGVu
ZGluZ1NoZWV0KCkKICAgICBpZiAobV9wZW5kaW5nU3R5bGVzaGVldHMpCiAgICAgICAgIHJldHVy
bjsKIAotICAgIHN0eWxlU2VsZWN0b3JDaGFuZ2VkKFJlY2FsY1N0eWxlSW1tZWRpYXRlbHkpOwor
ICAgIHN0eWxlU2VsZWN0b3JDaGFuZ2VkKFBlbmRpbmdTdHlsZXNoZWV0Q29tcGxldGVkKTsKIAog
ICAgIGlmIChTY3JpcHRhYmxlRG9jdW1lbnRQYXJzZXIqIHBhcnNlciA9IHNjcmlwdGFibGVEb2N1
bWVudFBhcnNlcigpKQogICAgICAgICBwYXJzZXItPmV4ZWN1dGVTY3JpcHRzV2FpdGluZ0ZvclN0
eWxlc2hlZXRzKCk7CkBAIC0yOTcxLDggKzI5ODEsMTAgQEAgdm9pZCBEb2N1bWVudDo6c3R5bGVT
ZWxlY3RvckNoYW5nZWQoU3R5bAogICAgICAgICBwcmludGYoIkJlZ2lubmluZyB1cGRhdGUgb2Yg
c3R5bGUgc2VsZWN0b3IgYXQgdGltZSAlZC5cbiIsIGVsYXBzZWRUaW1lKCkpOwogI2VuZGlmCiAK
LSAgICByZWNhbGNTdHlsZVNlbGVjdG9yKCk7Ci0gICAgCisgICAgYm9vbCBzdHlsZXNoZWV0Q2hh
bmdlUmVxdWlyZXNTdHlsZVJlY2FsYyA9IHVwZGF0ZUFjdGl2ZVN0eWxlc2hlZXRzKHVwZGF0ZUZs
YWcpOworICAgIGlmICghc3R5bGVzaGVldENoYW5nZVJlcXVpcmVzU3R5bGVSZWNhbGMpCisgICAg
ICAgIHJldHVybjsKKwogICAgIGlmICh1cGRhdGVGbGFnID09IERlZmVyUmVjYWxjU3R5bGUpIHsK
ICAgICAgICAgc2NoZWR1bGVGb3JjZWRTdHlsZVJlY2FsYygpOwogICAgICAgICByZXR1cm47CkBA
IC0zMDQ0LDIyICszMDU2LDkgQEAgdm9pZCBEb2N1bWVudDo6cmVtb3ZlU3R5bGVTaGVldENhbmRp
ZGF0ZQogewogICAgIG1fc3R5bGVTaGVldENhbmRpZGF0ZU5vZGVzLnJlbW92ZShub2RlKTsKIH0K
LQotdm9pZCBEb2N1bWVudDo6cmVjYWxjU3R5bGVTZWxlY3RvcigpCisgICAgCit2b2lkIERvY3Vt
ZW50Ojpjb2xsZWN0QWN0aXZlU3R5bGVzaGVldHMoVmVjdG9yPFJlZlB0cjxTdHlsZVNoZWV0PiA+
JiBzaGVldHMpCiB7Ci0gICAgaWYgKG1faW5TdHlsZVJlY2FsYykgewotICAgICAgICAvLyBTVkcg
PHVzZT4gZWxlbWVudCBtYXkgbWFuYWdlIHRvIGludmFsaWRhdGUgc3R5bGUgc2VsZWN0b3IgaW4g
dGhlIG1pZGRsZSBvZiBhIHN0eWxlIHJlY2FsYy4KLSAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTU0MzQ0Ci0gICAgICAgIC8vIEZJWE1FOiBUaGlzIHNo
b3VsZCBiZSBmaXhlZCBpbiBTVkcgYW5kIHRoaXMgY29kZSByZXBsYWNlZCB3aXRoIEFTU0VSVCgh
bV9pblN0eWxlUmVjYWxjKS4KLSAgICAgICAgbV9oYXNEaXJ0eVN0eWxlU2VsZWN0b3IgPSB0cnVl
OwotICAgICAgICBzY2hlZHVsZUZvcmNlZFN0eWxlUmVjYWxjKCk7Ci0gICAgICAgIHJldHVybjsK
LSAgICB9Ci0gICAgaWYgKCFyZW5kZXJlcigpIHx8ICFhdHRhY2hlZCgpKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBTdHlsZVNoZWV0VmVjdG9yIHNoZWV0czsKLQogICAgIGJvb2wgbWF0Y2hBdXRo
b3JBbmRVc2VyU3R5bGVzID0gdHJ1ZTsKICAgICBpZiAoU2V0dGluZ3MqIHNldHRpbmdzID0gdGhp
cy0+c2V0dGluZ3MoKSkKICAgICAgICAgbWF0Y2hBdXRob3JBbmRVc2VyU3R5bGVzID0gc2V0dGlu
Z3MtPmF1dGhvckFuZFVzZXJTdHlsZXNFbmFibGVkKCk7CkBAIC0zMDcwLDkgKzMwNjksNyBAQCB2
b2lkIERvY3VtZW50OjpyZWNhbGNTdHlsZVNlbGVjdG9yKCkKICAgICAgICAgZW5kID0gYmVnaW47
CiAgICAgZm9yIChTdHlsZVNoZWV0Q2FuZGlkYXRlTGlzdEhhc2hTZXQ6Oml0ZXJhdG9yIGl0ID0g
YmVnaW47IGl0ICE9IGVuZDsgKytpdCkgewogICAgICAgICBOb2RlKiBuID0gKml0OwotCiAgICAg
ICAgIFN0eWxlU2hlZXQqIHNoZWV0ID0gMDsKLQogICAgICAgICBpZiAobi0+bm9kZVR5cGUoKSA9
PSBQUk9DRVNTSU5HX0lOU1RSVUNUSU9OX05PREUpIHsKICAgICAgICAgICAgIC8vIFByb2Nlc3Np
bmcgaW5zdHJ1Y3Rpb24gKFhNTCBkb2N1bWVudHMgb25seSkuCiAgICAgICAgICAgICAvLyBXZSBk
b24ndCBzdXBwb3J0IGxpbmtpbmcgdG8gZW1iZWRkZWQgQ1NTIHN0eWxlc2hlZXRzLCBzZWUgPGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00OTI4MT4gZm9yIGRpc2N1c3Np
b24uCkBAIC0zMDg5LDkgKzMwODYsOSBAQCB2b2lkIERvY3VtZW50OjpyZWNhbGNTdHlsZVNlbGVj
dG9yKCkKICNlbmRpZgogICAgICAgICB9IGVsc2UgaWYgKChuLT5pc0hUTUxFbGVtZW50KCkgJiYg
KG4tPmhhc1RhZ05hbWUobGlua1RhZykgfHwgbi0+aGFzVGFnTmFtZShzdHlsZVRhZykpKQogI2lm
IEVOQUJMRShTVkcpCi0gICAgICAgICAgICB8fCAgKG4tPmlzU1ZHRWxlbWVudCgpICYmIG4tPmhh
c1RhZ05hbWUoU1ZHTmFtZXM6OnN0eWxlVGFnKSkKKyAgICAgICAgICAgICAgICAgICB8fCAgKG4t
PmlzU1ZHRWxlbWVudCgpICYmIG4tPmhhc1RhZ05hbWUoU1ZHTmFtZXM6OnN0eWxlVGFnKSkKICNl
bmRpZgotICAgICAgICApIHsKKyAgICAgICAgICAgICAgICAgICApIHsKICAgICAgICAgICAgIEVs
ZW1lbnQqIGUgPSBzdGF0aWNfY2FzdDxFbGVtZW50Kj4obik7CiAgICAgICAgICAgICBBdG9taWNT
dHJpbmcgdGl0bGUgPSBlLT5nZXRBdHRyaWJ1dGUodGl0bGVBdHRyKTsKICAgICAgICAgICAgIGJv
b2wgZW5hYmxlZFZpYVNjcmlwdCA9IGZhbHNlOwpAQCAtMzExNSw3ICszMTEyLDYgQEAgdm9pZCBE
b2N1bWVudDo6cmVjYWxjU3R5bGVTZWxlY3RvcigpCiAgICAgICAgICAgICAgICAgaWYgKCFsaW5r
RWxlbWVudC0+c2hlZXQoKSkKICAgICAgICAgICAgICAgICAgICAgdGl0bGUgPSBudWxsQXRvbTsK
ICAgICAgICAgICAgIH0KLQogICAgICAgICAgICAgLy8gR2V0IHRoZSBjdXJyZW50IHByZWZlcnJl
ZCBzdHlsZXNldC4gIFRoaXMgaXMgdGhlCiAgICAgICAgICAgICAvLyBzZXQgb2Ygc2hlZXRzIHRo
YXQgd2lsbCBiZSBlbmFibGVkLgogI2lmIEVOQUJMRShTVkcpCkBAIC0zMTI4LDcgKzMxMjQsNiBA
QCB2b2lkIERvY3VtZW50OjpyZWNhbGNTdHlsZVNlbGVjdG9yKCkKICAgICAgICAgICAgIGVsc2UK
ICAgICAgICAgICAgICAgICAvLyA8U1RZTEU+IGVsZW1lbnQKICAgICAgICAgICAgICAgICBzaGVl
dCA9IHN0YXRpY19jYXN0PEhUTUxTdHlsZUVsZW1lbnQqPihuKS0+c2hlZXQoKTsKLQogICAgICAg
ICAgICAgLy8gQ2hlY2sgdG8gc2VlIGlmIHRoaXMgc2hlZXQgYmVsb25ncyB0byBhIHN0eWxlc2V0
CiAgICAgICAgICAgICAvLyAodGh1cyBtYWtpbmcgaXQgUFJFRkVSUkVEIG9yIEFMVEVSTkFURSBy
YXRoZXIgdGhhbgogICAgICAgICAgICAgLy8gUEVSU0lTVEVOVCkuCkBAIC0zMTQzLDIxICszMTM4
LDEyMSBAQCB2b2lkIERvY3VtZW50OjpyZWNhbGNTdHlsZVNlbGVjdG9yKCkKICAgICAgICAgICAg
ICAgICAgICAgaWYgKGUtPmhhc0xvY2FsTmFtZShzdHlsZVRhZykgfHwgIXJlbC5jb250YWlucygi
YWx0ZXJuYXRlIikpCiAgICAgICAgICAgICAgICAgICAgICAgICBtX3ByZWZlcnJlZFN0eWxlc2hl
ZXRTZXQgPSBtX3NlbGVjdGVkU3R5bGVzaGVldFNldCA9IHRpdGxlOwogICAgICAgICAgICAgICAg
IH0KLQogICAgICAgICAgICAgICAgIGlmICh0aXRsZSAhPSBtX3ByZWZlcnJlZFN0eWxlc2hlZXRT
ZXQpCiAgICAgICAgICAgICAgICAgICAgIHNoZWV0ID0gMDsKICAgICAgICAgICAgIH0KICAgICAg
ICAgfQotCiAgICAgICAgIGlmIChzaGVldCkKICAgICAgICAgICAgIHNoZWV0cy5hcHBlbmQoc2hl
ZXQpOwogICAgIH0KK30KKworYm9vbCBEb2N1bWVudDo6dGVzdEFkZGVkU3R5bGVzaGVldFJlcXVp
cmVzU3R5bGVSZWNhbGMoQ1NTU3R5bGVTaGVldCogc3R5bGVzaGVldCkKK3sKKyAgICBpZiAoc3R5
bGVzaGVldC0+ZGlzYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIC8vIFNlZSBp
ZiBhbGwgcnVsZXMgb24gdGhlIHNoZWV0IGFyZSBzY29wZWQgdG8gc29tZSBzcGVjaWZpYyBpZHMg
b3IgY2xhc3Nlcy4KKyAgICAvLyBUaGVuIHRlc3QgaWYgd2UgYWN0dWFsbHkgaGF2ZSBhbnkgb2Yg
dGhvc2UgaW4gdGhlIHRyZWUgYXQgdGhlIG1vbWVudC4KKyAgICAvLyBGSVhNRTogRXZlbiB3ZSBp
ZiB3ZSBmaW5kIHNvbWUsIHdlIGNvdWxkIGp1c3QgaW52YWxpZGF0ZSB0aG9zZSBzdWJ0cmVlcyBp
bnN0ZWFkIG9mIGludmFsaWRhdGluZyB0aGUgZW50aXJlIHN0eWxlLgorICAgIEhhc2hTZXQ8QXRv
bWljU3RyaW5nSW1wbCo+IGlkU2NvcGVzOyAKKyAgICBIYXNoU2V0PEF0b21pY1N0cmluZ0ltcGwq
PiBjbGFzc1Njb3BlczsKKyAgICBpZiAoIUNTU1N0eWxlU2VsZWN0b3I6OmRldGVybWluZVN0eWxl
c2hlZXRTZWxlY3RvclNjb3BlcyhzdHlsZXNoZWV0LCBpZFNjb3BlcywgY2xhc3NTY29wZXMpKQor
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAvLyBUZXN0aW5nIGZvciBjbGFzc2VzIGlzIG5vdCBw
YXJ0aWN1bGFybHkgZmFzdCBzbyBiYWlsIG91dCBpZiB0aGVyZSBhcmUgbW9yZSB0aGFuIGEgZmV3
LgorICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4aW11bUNsYXNzU2NvcGVzVG9UZXN0ID0gNDsKKyAg
ICBpZiAoY2xhc3NTY29wZXMuc2l6ZSgpID4gbWF4aW11bUNsYXNzU2NvcGVzVG9UZXN0KQorICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICBIYXNoU2V0PEF0b21pY1N0cmluZ0ltcGwqPjo6aXRlcmF0
b3IgZW5kID0gaWRTY29wZXMuZW5kKCk7CisgICAgZm9yIChIYXNoU2V0PEF0b21pY1N0cmluZ0lt
cGwqPjo6aXRlcmF0b3IgaXQgPSBpZFNjb3Blcy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsK
KyAgICAgICAgaWYgKGhhc0VsZW1lbnRXaXRoSWQoKml0KSkKKyAgICAgICAgICAgIHJldHVybiB0
cnVlOworICAgIH0KKyAgICBlbmQgPSBjbGFzc1Njb3Blcy5lbmQoKTsKKyAgICBmb3IgKEhhc2hT
ZXQ8QXRvbWljU3RyaW5nSW1wbCo+OjppdGVyYXRvciBpdCA9IGNsYXNzU2NvcGVzLmJlZ2luKCk7
IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICAvLyBGSVhNRTogZ2V0RWxlbWVudHNCeUNsYXNz
TmFtZSBpcyBub3Qgb3B0aW1hbCBmb3IgdGhpcy4gV2Ugc2hvdWxkIGhhbmRsZSBhbGwgY2xhc3Nl
cyBpbiBhIHNpbmdsZSBwYXNzLgorICAgICAgICBpZiAoZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgq
aXQpLT5sZW5ndGgoKSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICByZXR1
cm4gZmFsc2U7Cit9CisgICAgCit2b2lkIERvY3VtZW50OjphbmFseXplU3R5bGVzaGVldENoYW5n
ZShTdHlsZVNlbGVjdG9yVXBkYXRlRmxhZyB1cGRhdGVGbGFnLCBjb25zdCBWZWN0b3I8UmVmUHRy
PFN0eWxlU2hlZXQ+ID4mIG5ld1N0eWxlc2hlZXRzLCBib29sJiByZXF1aXJlc1N0eWxlU2VsZWN0
b3JSZXNldCwgYm9vbCYgcmVxdWlyZXNTdHlsZVJlY2FsYykKK3sKKyAgICByZXF1aXJlc1N0eWxl
U2VsZWN0b3JSZXNldCA9IHRydWU7CisgICAgcmVxdWlyZXNTdHlsZVJlY2FsYyA9IHRydWU7Cisg
ICAgCisgICAgLy8gU3R5bGVzaGVldHMgb2YgPHN0eWxlPiBlbGVtZW50cyB0aGF0IEBpbXBvcnQg
c3R5bGVzaGVldHMgYXJlIGFjdGl2ZSBidXQgbG9hZGluZy4gV2UgbmVlZCB0byB0cmlnZ2VyIGEg
ZnVsbCByZWNhbGMgd2hlbiBzdWNoIGxvYWRzIGFyZSBkb25lLgorICAgIGJvb2wgaGFzQWN0aXZl
TG9hZGluZ1N0eWxlc2hlZXQgPSBmYWxzZTsKKyAgICB1bnNpZ25lZCBuZXdTdHlsZXNoZWV0Q291
bnQgPSBuZXdTdHlsZXNoZWV0cy5zaXplKCk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IG5ld1N0eWxlc2hlZXRDb3VudDsgKytpKSB7CisgICAgICAgIGlmIChuZXdTdHlsZXNoZWV0c1tp
XS0+aXNMb2FkaW5nKCkpCisgICAgICAgICAgICBoYXNBY3RpdmVMb2FkaW5nU3R5bGVzaGVldCA9
IHRydWU7CisgICAgfQorICAgIGlmIChtX2hhZEFjdGl2ZUxvYWRpbmdTdHlsZXNoZWV0ICYmICFo
YXNBY3RpdmVMb2FkaW5nU3R5bGVzaGVldCkgeworICAgICAgICBtX2hhZEFjdGl2ZUxvYWRpbmdT
dHlsZXNoZWV0ID0gZmFsc2U7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgbV9oYWRBY3Rp
dmVMb2FkaW5nU3R5bGVzaGVldCA9IGhhc0FjdGl2ZUxvYWRpbmdTdHlsZXNoZWV0OwogCi0gICAg
bV9zdHlsZVNoZWV0cy0+c3dhcChzaGVldHMpOworICAgIGlmICh1cGRhdGVGbGFnICE9IFBlbmRp
bmdTdHlsZXNoZWV0Q29tcGxldGVkKQorICAgICAgICByZXR1cm47CisgICAgaWYgKCFtX3N0eWxl
U2VsZWN0b3IpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIFNlZSBpZiB3ZSBhcmUganVzdCBh
ZGRpbmcgc3R5bGVzaGVldHMuCisgICAgdW5zaWduZWQgb2xkU3R5bGVzaGVldENvdW50ID0gbV9z
dHlsZVNoZWV0cy0+bGVuZ3RoKCk7CisgICAgaWYgKG5ld1N0eWxlc2hlZXRDb3VudCA8IG9sZFN0
eWxlc2hlZXRDb3VudCkKKyAgICAgICAgcmV0dXJuOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBvbGRTdHlsZXNoZWV0Q291bnQ7ICsraSkgeworICAgICAgICBpZiAobV9zdHlsZVNoZWV0
cy0+aXRlbShpKSAhPSBuZXdTdHlsZXNoZWV0c1tpXSkKKyAgICAgICAgICAgIHJldHVybjsKKyAg
ICB9CisgICAgcmVxdWlyZXNTdHlsZVNlbGVjdG9yUmVzZXQgPSBmYWxzZTsKKworICAgIC8vIElm
IHdlIGFyZSBhbHJlYWR5IHBhcnNpbmcgdGhlIGJvZHkgYW5kIHNvIG1heSBoYXZlIHNpZ25pZmlj
YW50IGFtb3VudCBvZiBlbGVtZW50cywgcHV0IHNvbWUgZWZmb3J0IGludG8gdHJ5aW5nIHRvIGF2
b2lkIHN0eWxlIHJlY2FsY3MuCisgICAgaWYgKCFib2R5KCkgfHwgbV9oYXNOb2Rlc1dpdGhQbGFj
ZWhvbGRlclN0eWxlKQorICAgICAgICByZXR1cm47CisgICAgZm9yICh1bnNpZ25lZCBpID0gb2xk
U3R5bGVzaGVldENvdW50OyBpIDwgbmV3U3R5bGVzaGVldENvdW50OyArK2kpIHsKKyAgICAgICAg
aWYgKCFuZXdTdHlsZXNoZWV0c1tpXS0+aXNDU1NTdHlsZVNoZWV0KCkpCisgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgIGlmICh0ZXN0QWRkZWRTdHlsZXNoZWV0UmVxdWlyZXNTdHlsZVJlY2Fs
YyhzdGF0aWNfY2FzdDxDU1NTdHlsZVNoZWV0Kj4obmV3U3R5bGVzaGVldHNbaV0uZ2V0KCkpKSkK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgcmVxdWlyZXNTdHlsZVJlY2FsYyA9IGZh
bHNlOworfQorCitib29sIERvY3VtZW50Ojp1cGRhdGVBY3RpdmVTdHlsZXNoZWV0cyhTdHlsZVNl
bGVjdG9yVXBkYXRlRmxhZyB1cGRhdGVGbGFnKQoreworICAgIGlmIChtX2luU3R5bGVSZWNhbGMp
IHsKKyAgICAgICAgLy8gU1ZHIDx1c2U+IGVsZW1lbnQgbWF5IG1hbmFnZSB0byBpbnZhbGlkYXRl
IHN0eWxlIHNlbGVjdG9yIGluIHRoZSBtaWRkbGUgb2YgYSBzdHlsZSByZWNhbGMuCisgICAgICAg
IC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01NDM0NAorICAgICAg
ICAvLyBGSVhNRTogVGhpcyBzaG91bGQgYmUgZml4ZWQgaW4gU1ZHIGFuZCB0aGlzIGNvZGUgcmVw
bGFjZWQgd2l0aCBBU1NFUlQoIW1faW5TdHlsZVJlY2FsYykuCisgICAgICAgIG1faGFzRGlydHlT
dHlsZVNlbGVjdG9yID0gdHJ1ZTsKKyAgICAgICAgc2NoZWR1bGVGb3JjZWRTdHlsZVJlY2FsYygp
OworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIGlmICghcmVuZGVyZXIoKSB8fCAh
YXR0YWNoZWQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgU3R5bGVTaGVldFZlY3Rv
ciBuZXdTdHlsZXNoZWV0czsKKyAgICBjb2xsZWN0QWN0aXZlU3R5bGVzaGVldHMobmV3U3R5bGVz
aGVldHMpOworCisgICAgYm9vbCByZXF1aXJlc1N0eWxlU2VsZWN0b3JSZXNldDsKKyAgICBib29s
IHJlcXVpcmVzU3R5bGVSZWNhbGM7CisgICAgYW5hbHl6ZVN0eWxlc2hlZXRDaGFuZ2UodXBkYXRl
RmxhZywgbmV3U3R5bGVzaGVldHMsIHJlcXVpcmVzU3R5bGVTZWxlY3RvclJlc2V0LCByZXF1aXJl
c1N0eWxlUmVjYWxjKTsKKworICAgIGlmIChyZXF1aXJlc1N0eWxlU2VsZWN0b3JSZXNldCkKKyAg
ICAgICAgbV9zdHlsZVNlbGVjdG9yLmNsZWFyKCk7CisgICAgZWxzZSB7CisgICAgICAgIG1fc3R5
bGVTZWxlY3Rvci0+YXBwZW5kQXV0aG9yU3R5bGVzaGVldHMobV9zdHlsZVNoZWV0cy0+bGVuZ3Ro
KCksIG5ld1N0eWxlc2hlZXRzKTsKKyAgICAgICAgcmVzZXRDU1NGZWF0dXJlRmxhZ3MoKTsKKyAg
ICB9CisgICAgbV9zdHlsZVNoZWV0cy0+c3dhcChuZXdTdHlsZXNoZWV0cyk7CiAKLSAgICBtX3N0
eWxlU2VsZWN0b3IuY2xlYXIoKTsKICAgICBtX2RpZENhbGN1bGF0ZVN0eWxlU2VsZWN0b3IgPSB0
cnVlOwogICAgIG1faGFzRGlydHlTdHlsZVNlbGVjdG9yID0gZmFsc2U7CisgICAgCisgICAgcmV0
dXJuIHJlcXVpcmVzU3R5bGVSZWNhbGM7CiB9CiAKIHZvaWQgRG9jdW1lbnQ6OnNldEhvdmVyTm9k
ZShQYXNzUmVmUHRyPE5vZGU+IG5ld0hvdmVyTm9kZSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Rv
bS9Eb2N1bWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5o
CShyZXZpc2lvbiAxMDM5MDEpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuaAkod29y
a2luZyBjb3B5KQpAQCAtMjExLDcgKzIxMSw3IEBAIGVudW0gUGFnZXNob3dFdmVudFBlcnNpc3Rl
bmNlIHsKICAgICBQYWdlc2hvd0V2ZW50UGVyc2lzdGVkID0gMQogfTsKIAotZW51bSBTdHlsZVNl
bGVjdG9yVXBkYXRlRmxhZyB7IFJlY2FsY1N0eWxlSW1tZWRpYXRlbHksIERlZmVyUmVjYWxjU3R5
bGUgfTsKK2VudW0gU3R5bGVTZWxlY3RvclVwZGF0ZUZsYWcgeyBSZWNhbGNTdHlsZUltbWVkaWF0
ZWx5LCBEZWZlclJlY2FsY1N0eWxlLCBQZW5kaW5nU3R5bGVzaGVldENvbXBsZXRlZCB9OwogCiBj
bGFzcyBEb2N1bWVudCA6IHB1YmxpYyBUcmVlU2NvcGUsIHB1YmxpYyBTY3JpcHRFeGVjdXRpb25D
b250ZXh0IHsKIHB1YmxpYzoKQEAgLTQ1Niw3ICs0NTYsNyBAQCBwdWJsaWM6CiAgICAgfQogCiAg
ICAgLyoqCi0gICAgICogVXBkYXRlcyB0aGUgcGVuZGluZyBzaGVldCBjb3VudCBhbmQgdGhlbiBj
YWxscyB1cGRhdGVTdHlsZVNlbGVjdG9yLgorICAgICAqIFVwZGF0ZXMgdGhlIHBlbmRpbmcgc2hl
ZXQgY291bnQgYW5kIHRoZW4gY2FsbHMgdXBkYXRlQWN0aXZlU3R5bGVzaGVldHMuCiAgICAgICov
CiAgICAgdm9pZCByZW1vdmVQZW5kaW5nU2hlZXQoKTsKIApAQCAtNDkxLDcgKzQ5MSw2IEBAIHB1
YmxpYzoKICAgICAgKiBmb3VuZCBhbmQgaXMgdXNlZCB0byBjYWxjdWxhdGUgdGhlIGRlcml2ZWQg
c3R5bGVzIGZvciBhbGwgcmVuZGVyaW5nIG9iamVjdHMuCiAgICAgICovCiAgICAgdm9pZCBzdHls
ZVNlbGVjdG9yQ2hhbmdlZChTdHlsZVNlbGVjdG9yVXBkYXRlRmxhZyk7Ci0gICAgdm9pZCByZWNh
bGNTdHlsZVNlbGVjdG9yKCk7CiAKICAgICBib29sIHVzZXNTaWJsaW5nUnVsZXMoKSBjb25zdCB7
IHJldHVybiBtX3VzZXNTaWJsaW5nUnVsZXMgfHwgbV91c2VzU2libGluZ1J1bGVzT3ZlcnJpZGU7
IH0KICAgICB2b2lkIHNldFVzZXNTaWJsaW5nUnVsZXMoYm9vbCBiKSB7IG1fdXNlc1NpYmxpbmdS
dWxlc092ZXJyaWRlID0gYjsgfQpAQCAtMTE2MSw2ICsxMTYwLDEzIEBAIHByaXZhdGU6CiAgICAg
dm9pZCBidWlsZEFjY2Vzc0tleU1hcChUcmVlU2NvcGUqIHJvb3QpOwogCiAgICAgdm9pZCBjcmVh
dGVTdHlsZVNlbGVjdG9yKCk7CisgICAgdm9pZCBjb21iaW5lQ1NTRmVhdHVyZUZsYWdzKCk7Cisg
ICAgdm9pZCByZXNldENTU0ZlYXR1cmVGbGFncygpOworICAgIAorICAgIGJvb2wgdXBkYXRlQWN0
aXZlU3R5bGVzaGVldHMoU3R5bGVTZWxlY3RvclVwZGF0ZUZsYWcpOworICAgIHZvaWQgY29sbGVj
dEFjdGl2ZVN0eWxlc2hlZXRzKFZlY3RvcjxSZWZQdHI8U3R5bGVTaGVldD4gPiYpOworICAgIGJv
b2wgdGVzdEFkZGVkU3R5bGVzaGVldFJlcXVpcmVzU3R5bGVSZWNhbGMoQ1NTU3R5bGVTaGVldCop
OworICAgIHZvaWQgYW5hbHl6ZVN0eWxlc2hlZXRDaGFuZ2UoU3R5bGVTZWxlY3RvclVwZGF0ZUZs
YWcsIGNvbnN0IFZlY3RvcjxSZWZQdHI8U3R5bGVTaGVldD4gPiYgbmV3U3R5bGVzaGVldHMsIGJv
b2wmIHJlcXVpcmVzU3R5bGVTZWxlY3RvclJlc2V0LCBib29sJiByZXF1aXJlc1N0eWxlUmVjYWxj
KTsKIAogICAgIHZvaWQgZGVsZXRlQ3VzdG9tRm9udHMoKTsKIApAQCAtMTI2NCw2ICsxMjcwLDcg
QEAgcHJpdmF0ZToKICNlbmRpZgogCiAgICAgUmVmUHRyPFN0eWxlU2hlZXRMaXN0PiBtX3N0eWxl
U2hlZXRzOyAvLyBBbGwgb2YgdGhlIHN0eWxlc2hlZXRzIHRoYXQgYXJlIGN1cnJlbnRseSBpbiBl
ZmZlY3QgZm9yIG91ciBtZWRpYSB0eXBlIGFuZCBzdHlsZXNoZWV0IHNldC4KKyAgICBib29sIG1f
aGFkQWN0aXZlTG9hZGluZ1N0eWxlc2hlZXQ7CiAgICAgCiAgICAgdHlwZWRlZiBMaXN0SGFzaFNl
dDxOb2RlKiwgMzI+IFN0eWxlU2hlZXRDYW5kaWRhdGVMaXN0SGFzaFNldDsKICAgICBTdHlsZVNo
ZWV0Q2FuZGlkYXRlTGlzdEhhc2hTZXQgbV9zdHlsZVNoZWV0Q2FuZGlkYXRlTm9kZXM7IC8vIEFs
bCBvZiB0aGUgbm9kZXMgdGhhdCBjb3VsZCBwb3RlbnRpYWxseSBwcm92aWRlIHN0eWxlc2hlZXRz
IHRvIHRoZSBkb2N1bWVudCAoPGxpbms+LCA8c3R5bGU+LCA8P3htbC1zdHlsZXNoZWV0PikK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>121115</attachid>
            <date>2012-01-04 09:00:02 -0800</date>
            <delta_ts>2012-01-04 09:28:35 -0800</delta_ts>
            <desc>update to tot</desc>
            <filename>stylesheet-selector-scope-7.patch</filename>
            <type>text/plain</type>
            <size>29554</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEwNDA0MikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDk5IEBACisyMDEyLTAxLTAzICBBbnR0aSBL
b2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBBbmFseXplIHN0eWxlc2hlZXQgc2NvcGUgdG8gbWluaW1pemUg
c3R5bGUgcmVjYWxjcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9NzU1MDgKKyAgICAgICAgCisgICAgICAgIEl0IGlzIGEgcmVsYXRpdmVseSBjb21tb24g
cGF0dGVybiB0byB1c2UgaW5saW5lIHN0eWxlc2hlZXRzIGluIGRvY3VtZW50IGJvZHkgd2hlcmUg
YWxsIHJ1bGVzIGFyZSBzY29wZWQgdXNpbmcgZGVzY2VuZGFudCBzZWxlY3RvcgorCisgICAgICAg
IDxzdHlsZT4KKyAgICAgICAgI2ZvbyB7Li4ufQorICAgICAgICAjZm9vIGRpdiB7Li4ufQorICAg
ICAgICAjZm9vIC5iYXIgey4uLn0KKyAgICAgICAgPC9zdHlsZT4KKworICAgICAgICBXaGVuIHRo
aXMgcGF0dGVybiBpcyB1c2VkIGl0IGlzIGFsc28gY29tbW9uIHRoYXQgdGhlIHJ1bGVzIG9ubHkg
YXBwbHkgdG8gZWxlbWVudHMgdGhhdCBjb21lIGFmdGVyIHRoZSBzdHlsZSBlbGVtZW50LiAKKwor
ICAgICAgICBXaGVuIHRoZSBzZXQgb2YgYWN0aXZlIHN0eWxlc2hlZXRzIGNoYW5nZXMgd2UgaW52
YWxpZGF0ZSBhbmQgcmVjb21wdXRlIHRoZSBlbnRpcmUgZG9jdW1lbnQgc3R5bGUuIFRoaXMgaXMg
dmVyeSBleHBlbnNpdmUuIFdlIGNhbiAKKyAgICAgICAgZGV0ZWN0IHRoZSBjYXNlIGFib3ZlIGFu
ZCBhdm9pZCB0aGUgc3R5bGUgcmVjYWxjLgorICAgICAgICAKKyAgICAgICAgT24gZW5nYWRnZXQu
Y29tLCB0aGlzIHBhdGNoIGN1dHMgdGhlIHRpbWUgc3BlbnQgaW4gc3R5bGUgcmVjYWxjcyB0byBy
b3VnaGx5IGhhbGYuIFRoZXJlIGFyZSBmdXJ0aGVyIHNhdmluZ3MgZnJvbSByZWR1Y2VkIAorICAg
ICAgICByZWxheW91dHMuIEluIHRvdGFsIHRoZSBlbmdpbmUgQ1BVIHRpbWUgdXNlZCBvdmVyIHRo
ZSBwYWdlIGxvYWQgaXMgcmVkdWNlZCBieSB+MTAlLgorCisgICAgICAgICogY3NzL0NTU1N0eWxl
U2VsZWN0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q1NTU3R5bGVTZWxlY3Rvcjo6Q1NTU3R5
bGVTZWxlY3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpDU1NTdHlsZVNlbGVjdG9yOjpjb2xsZWN0
RmVhdHVyZXMpOgorICAgICAgICAKKyAgICAgICAgICAgIFJlZmFjdG9yIGZlYXR1cmUgY29sbGVj
dGlvbiBmcm9tIGNvbnN0cnVjdG9yIHRvIGEgc2VwYXJhdGUgZnVuY3Rpb24uCisgICAgICAgIAor
ICAgICAgICAoV2ViQ29yZTo6Q1NTU3R5bGVTZWxlY3Rvcjo6YXBwZW5kQXV0aG9yU3R5bGVzaGVl
dHMpOgorICAgICAgICAKKyAgICAgICAgICAgIE5ldyBmdW5jdGlvbiBmb3Igbm9uLWRlc3RydWN0
aXZlbHkgdXBkYXRpbmcgdGhlIHN0eWxlIHNlbGVjdG9yLgorICAgICAgICAKKyAgICAgICAgKFdl
YkNvcmU6OkNTU1N0eWxlU2VsZWN0b3I6OkZlYXR1cmVzOjpjbGVhcik6CisgICAgICAgIAorICAg
ICAgICAgICAgQ2xlYXIgdGhlIGZlYXR1cmVzIGZvciBhbm90aGVyIGNvbGxlY3Rpb24uCisgICAg
ICAgICAgICAKKyAgICAgICAgKFdlYkNvcmU6OkNTU1N0eWxlU2VsZWN0b3I6OmRldGVybWluZVN0
eWxlc2hlZXRTZWxlY3RvclNjb3Blcyk6CisgICAgICAgIAorICAgICAgICAgICAgRmluZCBpZiBh
bGwgcnVsZXMgb24gYSBzdHlsZXNoZWV0YXJlIHNjb3BlZCB0byBzb21lIHNldCBvZiBpZHMgYW5k
IGNsYXNzZXMuCisgICAgICAgIAorICAgICAgICAoV2ViQ29yZTo6Q1NTU3R5bGVTZWxlY3Rvcjo6
c3R5bGVGb3JEb2N1bWVudCk6CisgICAgICAgIAorICAgICAgICAgICAgQWRkIG9wdGlvbmFsIGZv
bnQgc2VsZWN0b3IgYXJndW1lbnQuIFdlIHVwZGF0ZWQgdGhlIGNvcnJlY3QgYmFzZSBzdHlsZSBm
b250IG9uIHN0eWxlIHNlbGVjdG9yIGNvbnN0cnVjdGlvbiBidXQgdGhhdCBpcyBubyBsb25nZXIg
c3VmZmljaWVudAorICAgICAgICAgICAgYXMgZm9udCBzZWxlY3RvciBtYXkgYmUgdXBkYXRlZCB3
aXRob3V0IHJlY29uc3RydWN0aW5nIHRoZSBzdHlsZSBzZWxlY3Rvci4KKyAgICAgICAgCisgICAg
ICAgIChXZWJDb3JlOjpSdWxlU2V0OjphZGRSdWxlc0Zyb21TaGVldCk6CisgICAgICAgIAorICAg
ICAgICAgICAgSW52YWxpZGF0ZSB0aGUgbWF0Y2hlZCBkZWNsYXJhdGlvbiBjYWNoZSBpbiBjYXNl
IG9mIG5ldyBmb250LWZhY2UgcnVsZXMuCisgICAgICAgIAorICAgICAgICAqIGNzcy9DU1NTdHls
ZVNlbGVjdG9yLmg6CisgICAgICAgICogY3NzL1NlbGVjdG9yQ2hlY2tlci5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpTZWxlY3RvckNoZWNrZXI6OmRldGVybWluZVNlbGVjdG9yU2NvcGVzKToKKyAg
ICAgICAgCisgICAgICAgICAgICBGaW5kIGlmIGFsbCBydWxlcyBvbiBhIHNlbGVjdG9yIGxpc3Qg
YXJlIHNjb3BlZCB0byBzb21lIHNldCBvZiBpZHMgYW5kIGNsYXNzZXMuCisgICAgICAgIAorICAg
ICAgICAqIGNzcy9TZWxlY3RvckNoZWNrZXIuaDoKKyAgICAgICAgKiBkb20vRG9jdW1lbnQuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OkRvY3VtZW50KToKKyAgICAgICAgKFdlYkNv
cmU6OkRvY3VtZW50OjpyZWNhbGNTdHlsZSk6CisgICAgICAgIAorICAgICAgICAgICAgUGFzcyB0
aGUgZm9udCBzZWxlY3RvciwgaWYgZXhpc3RzLCB0byBzdHlsZUZvckRvY3VtZW50IHNvIHdlIGFs
d2F5cyBoYXZlIHRoZSBiYXNlIGZvbnQgdXAgdG8gZGF0ZS4KKyAgICAgICAgCisgICAgICAgIChX
ZWJDb3JlOjpEb2N1bWVudDo6Y29tYmluZUNTU0ZlYXR1cmVGbGFncyk6CisgICAgICAgIChXZWJD
b3JlOjpEb2N1bWVudDo6cmVzZXRDU1NGZWF0dXJlRmxhZ3MpOgorICAgICAgICAoV2ViQ29yZTo6
RG9jdW1lbnQ6OmNyZWF0ZVN0eWxlU2VsZWN0b3IpOgorCisgICAgICAgICAgICBSZWZhY3RvciBj
c3MgZmVhdHVyZSBmbGFnIHJlc2V0dGluZyB0byBmdW5jdGlvbnMuCisgICAgICAgIAorICAgICAg
ICAoV2ViQ29yZTo6RG9jdW1lbnQ6OnJlbW92ZVBlbmRpbmdTaGVldCk6CisgICAgICAgIAorICAg
ICAgICAgICAgVXNlIG5ldyBQZW5kaW5nU3R5bGVzaGVldENvbXBsZXRlZCBmbGFnIHdoZW4gbmV3
IHN0eWxlc2hlZXRzIGFycml2ZS4KKworICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OnN0eWxl
U2VsZWN0b3JDaGFuZ2VkKToKKworICAgICAgICAgICAgU2tpcCBzdHlsZSByZWNhbGMgaWYgaXQg
aXMgbm90IG5lZWRlZC4KKworICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OmNvbGxlY3RBY3Rp
dmVTdHlsZXNoZWV0cyk6CisgICAgICAgIAorICAgICAgICAgICAgUmVmYWN0b3IgY29sbGVjdGlu
ZyBzdHlsZXNoZWV0cyB0byBhIHNlcGFyYXRlIGZ1bmN0aW9uLgorICAgICAgICAKKyAgICAgICAg
KFdlYkNvcmU6OkRvY3VtZW50Ojp0ZXN0QWRkZWRTdHlsZXNoZWV0UmVxdWlyZXNTdHlsZVJlY2Fs
Yyk6CisgICAgICAgIAorICAgICAgICAgICAgRGV0ZXJtaW5lIHRoZSBzY29wZXMgYW5kIHVzZSBo
YXNFbGVtZW50V2l0aElkL2dldEVsZW1lbnRzQnlDbGFzc05hbWUgdG8gZmlndXJlIG91dCBpZiBh
bnkgc2NvcGVkIGVsZW1lbnRzIGN1cnJlbnRseSBleGlzdCBpbiB0aGUgdHJlZS4KKyAgICAgICAg
CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6YW5hbHl6ZVN0eWxlc2hlZXRDaGFuZ2UpOgor
ICAgICAgICAKKyAgICAgICAgICAgIEZpZ3VyZSBvdXQgaWYgd2UgY2FuIHVwZGF0ZSB0aGUgc3R5
bGUgc2VsZWN0b3IgaW5jcmVtZW50YWxseSBhbmQgaWYgd2UgY2FuIHNraXAgdGhlIHN0eWxlIHJl
Y2FsYy4KKyAgICAgICAgCisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6dXBkYXRlQWN0aXZl
U3R5bGVzaGVldHMpOgorICAgICAgICAKKyAgICAgICAgICAgIFJlbmFtZWQgZnJvbSByZWNhbGNT
dHlsZVNlbGVjdG9yLgorICAgICAgICAgICAgSW52b2tlIHRoZSBuZXcgYW5hbHlzaXMgZnVuY3Rp
b25zLgorICAgICAgICAKKyAgICAgICAgKiBkb20vRG9jdW1lbnQuaDoKKwogMjAxMi0wMS0wNCAg
QWRhbSBSb2JlbiAgPGFyb2JlbkBhcHBsZS5jb20+CiAKICAgICAgICAgVXNlIG9uZSBiaWcgcHJp
bnRmIGNvbW1hbmQgaW5zdGVhZCBvZiBtYW55IGNoYWluZWQgZWNobyBjb21tYW5kcyB0byBnZW5l
cmF0ZSBpZGxfZmlsZXMudG1wCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU3R5bGVTZWxl
Y3Rvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL0NTU1N0eWxlU2VsZWN0
b3IuY3BwCShyZXZpc2lvbiAxMDQwNDIpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU3R5bGVT
ZWxlY3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQxOCw2ICs0MTgsMTYgQEAgQ1NTU3R5bGVT
ZWxlY3Rvcjo6Q1NTU3R5bGVTZWxlY3RvcihEb2N1bQogICAgICAgICBpZiAoc2hlZXQtPmlzQ1NT
U3R5bGVTaGVldCgpICYmICFzaGVldC0+ZGlzYWJsZWQoKSkKICAgICAgICAgICAgIG1fYXV0aG9y
U3R5bGUtPmFkZFJ1bGVzRnJvbVNoZWV0KHN0YXRpY19jYXN0PENTU1N0eWxlU2hlZXQqPihzaGVl
dCksICptX21lZGl1bSwgdGhpcyk7CiAgICAgfQorICAgIG1fYXV0aG9yU3R5bGUtPnNocmlua1Rv
Rml0KCk7CisKKyAgICBjb2xsZWN0RmVhdHVyZXMoKTsKKyAgICAKKyAgICBpZiAoZG9jdW1lbnQt
PnJlbmRlcmVyKCkgJiYgZG9jdW1lbnQtPnJlbmRlcmVyKCktPnN0eWxlKCkpCisgICAgICAgIGRv
Y3VtZW50LT5yZW5kZXJlcigpLT5zdHlsZSgpLT5mb250KCkudXBkYXRlKGZvbnRTZWxlY3Rvcigp
KTsKK30KKwordm9pZCBDU1NTdHlsZVNlbGVjdG9yOjpjb2xsZWN0RmVhdHVyZXMoKQorewogICAg
IC8vIENvbGxlY3QgYWxsIGlkcyBhbmQgcnVsZXMgdXNpbmcgc2libGluZyBzZWxlY3RvcnMgKDpm
aXJzdC1jaGlsZCBhbmQgc2ltaWxhcikKICAgICAvLyBpbiB0aGUgY3VycmVudCBzZXQgb2Ygc3R5
bGVzaGVldHMuIFN0eWxlIHNoYXJpbmcgY29kZSB1c2VzIHRoaXMgaW5mb3JtYXRpb24gdG8gcmVq
ZWN0CiAgICAgLy8gc2hhcmluZyBjYW5kaWRhdGVzLgpAQCAtNDI5LDE1ICs0MzksMjkgQEAgQ1NT
U3R5bGVTZWxlY3Rvcjo6Q1NTU3R5bGVTZWxlY3RvcihEb2N1bQogICAgIG1fYXV0aG9yU3R5bGUt
PmNvbGxlY3RGZWF0dXJlcyhtX2ZlYXR1cmVzKTsKICAgICBpZiAobV91c2VyU3R5bGUpCiAgICAg
ICAgIG1fdXNlclN0eWxlLT5jb2xsZWN0RmVhdHVyZXMobV9mZWF0dXJlcyk7Ci0KLSAgICBtX2F1
dGhvclN0eWxlLT5zaHJpbmtUb0ZpdCgpOwogICAgIGlmIChtX2ZlYXR1cmVzLnNpYmxpbmdSdWxl
cykKICAgICAgICAgbV9mZWF0dXJlcy5zaWJsaW5nUnVsZXMtPnNocmlua1RvRml0KCk7CiAgICAg
aWYgKG1fZmVhdHVyZXMudW5jb21tb25BdHRyaWJ1dGVSdWxlcykKICAgICAgICAgbV9mZWF0dXJl
cy51bmNvbW1vbkF0dHJpYnV0ZVJ1bGVzLT5zaHJpbmtUb0ZpdCgpOworfQogCi0gICAgaWYgKGRv
Y3VtZW50LT5yZW5kZXJlcigpICYmIGRvY3VtZW50LT5yZW5kZXJlcigpLT5zdHlsZSgpKQotICAg
ICAgICBkb2N1bWVudC0+cmVuZGVyZXIoKS0+c3R5bGUoKS0+Zm9udCgpLnVwZGF0ZShmb250U2Vs
ZWN0b3IoKSk7Cit2b2lkIENTU1N0eWxlU2VsZWN0b3I6OmFwcGVuZEF1dGhvclN0eWxlc2hlZXRz
KHVuc2lnbmVkIGZpcnN0TmV3LCBjb25zdCBWZWN0b3I8UmVmUHRyPFN0eWxlU2hlZXQ+ID4mIHN0
eWxlc2hlZXRzKQoreworICAgIC8vIFRoaXMgaGFuZGxlcyBzaGVldHMgYWRkZWQgdG8gdGhlIGVu
ZCBvZiB0aGUgc3R5bGVzaGVldCBsaXN0IG9ubHkuIEluIG90aGVyIGNhc2VzIHRoZSBzdHlsZSBy
ZXNvbHZlcgorICAgIC8vIG5lZWRzIHRvIGJlIHJlY29uc3RydWN0ZWQuIFRvIGhhbmRsZSBpbnNl
cnRpb25zIHRvbyB0aGUgcnVsZSBvcmRlciBudW1iZXJzIHdvdWxkIG5lZWQgdG8gYmUgdXBkYXRl
ZC4KKyAgICB1bnNpZ25lZCBzaXplID0gc3R5bGVzaGVldHMuc2l6ZSgpOworICAgIGZvciAodW5z
aWduZWQgaSA9IGZpcnN0TmV3OyBpIDwgc2l6ZTsgKytpKSB7CisgICAgICAgIGlmICghc3R5bGVz
aGVldHNbaV0tPmlzQ1NTU3R5bGVTaGVldCgpIHx8IHN0eWxlc2hlZXRzW2ldLT5kaXNhYmxlZCgp
KQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIG1fYXV0aG9yU3R5bGUtPmFkZFJ1bGVz
RnJvbVNoZWV0KHN0YXRpY19jYXN0PENTU1N0eWxlU2hlZXQqPihzdHlsZXNoZWV0c1tpXS5nZXQo
KSksICptX21lZGl1bSwgdGhpcyk7CisgICAgfQorICAgIG1fYXV0aG9yU3R5bGUtPnNocmlua1Rv
Rml0KCk7CisgICAgLy8gRklYTUU6IFRoaXMgcmVhbGx5IG9ubHkgbmVlZHMgdG8gY29sbGVjdCB0
aGUgZmVhdHVyZXMgZnJvbSB0aGUgbmV3bHkgYWRkZWQgc2hlZXRzLgorICAgIG1fZmVhdHVyZXMu
Y2xlYXIoKTsKKyAgICBjb2xsZWN0RmVhdHVyZXMoKTsKKyAgICAKKyAgICBpZiAoZG9jdW1lbnQo
KS0+cmVuZGVyZXIoKSAmJiBkb2N1bWVudCgpLT5yZW5kZXJlcigpLT5zdHlsZSgpKQorICAgICAg
ICBkb2N1bWVudCgpLT5yZW5kZXJlcigpLT5zdHlsZSgpLT5mb250KCkudXBkYXRlKGZvbnRTZWxl
Y3RvcigpKTsKIH0KIAogdm9pZCBDU1NTdHlsZVNlbGVjdG9yOjphZGRSZWdpb25SdWxlKFBhc3NS
ZWZQdHI8V2ViS2l0Q1NTUmVnaW9uUnVsZT4gcmVnaW9uU3R5bGVSdWxlKQpAQCAtNDY5LDYgKzQ5
MywxNyBAQCBDU1NTdHlsZVNlbGVjdG9yOjpGZWF0dXJlczo6fkZlYXR1cmVzKCkKIHsKIH0KIAor
dm9pZCBDU1NTdHlsZVNlbGVjdG9yOjpGZWF0dXJlczo6Y2xlYXIoKQoreworICAgIGlkc0luUnVs
ZXMuY2xlYXIoKTsKKyAgICBhdHRyc0luUnVsZXMuY2xlYXIoKTsKKyAgICBzaWJsaW5nUnVsZXMu
Y2xlYXIoKTsKKyAgICB1bmNvbW1vbkF0dHJpYnV0ZVJ1bGVzLmNsZWFyKCk7CisgICAgdXNlc0Zp
cnN0TGluZVJ1bGVzID0gZmFsc2U7CisgICAgdXNlc0JlZm9yZUFmdGVyUnVsZXMgPSBmYWxzZTsK
KyAgICB1c2VzTGlua1J1bGVzID0gZmFsc2U7Cit9CisKIHN0YXRpYyBDU1NTdHlsZVNoZWV0KiBw
YXJzZVVBU2hlZXQoY29uc3QgU3RyaW5nJiBzdHIpCiB7CiAgICAgQ1NTU3R5bGVTaGVldCogc2hl
ZXQgPSBDU1NTdHlsZVNoZWV0OjpjcmVhdGUoKS5sZWFrUmVmKCk7IC8vIGxlYWsgdGhlIHNoZWV0
IG9uIHB1cnBvc2UKQEAgLTExNDgsNyArMTE4Myw3IEBAIHZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6
bWF0Y2hVQVJ1bGVzKE1hdGMKICAgICB9CiB9CiAKLVBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IENT
U1N0eWxlU2VsZWN0b3I6OnN0eWxlRm9yRG9jdW1lbnQoRG9jdW1lbnQqIGRvY3VtZW50KQorUGFz
c1JlZlB0cjxSZW5kZXJTdHlsZT4gQ1NTU3R5bGVTZWxlY3Rvcjo6c3R5bGVGb3JEb2N1bWVudChE
b2N1bWVudCogZG9jdW1lbnQsIENTU0ZvbnRTZWxlY3RvciogZm9udFNlbGVjdG9yKQogewogICAg
IEZyYW1lKiBmcmFtZSA9IGRvY3VtZW50LT5mcmFtZSgpOwogCkBAIC0xMjA0LDcgKzEyMzksNyBA
QCBQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBDU1NTdHlsZVNlbGVjdG9yCiAgICAgfQogCiAgICAg
ZG9jdW1lbnRTdHlsZS0+c2V0Rm9udERlc2NyaXB0aW9uKGZvbnREZXNjcmlwdGlvbik7Ci0gICAg
ZG9jdW1lbnRTdHlsZS0+Zm9udCgpLnVwZGF0ZSgwKTsKKyAgICBkb2N1bWVudFN0eWxlLT5mb250
KCkudXBkYXRlKGZvbnRTZWxlY3Rvcik7CiAKICAgICByZXR1cm4gZG9jdW1lbnRTdHlsZS5yZWxl
YXNlKCk7CiB9CkBAIC0xNzk5LDYgKzE4MzQsMzMgQEAgaW5saW5lIGJvb2wgQ1NTU3R5bGVTZWxl
Y3Rvcjo6Y2hlY2tTZWxlYwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgcmV0dXJuIHRydWU7
CiB9CisgICAgCitib29sIENTU1N0eWxlU2VsZWN0b3I6OmRldGVybWluZVN0eWxlc2hlZXRTZWxl
Y3RvclNjb3BlcyhDU1NTdHlsZVNoZWV0KiBzdHlsZXNoZWV0LCBIYXNoU2V0PEF0b21pY1N0cmlu
Z0ltcGwqPiYgaWRTY29wZXMsIEhhc2hTZXQ8QXRvbWljU3RyaW5nSW1wbCo+JiBjbGFzc1Njb3Bl
cykKK3sKKyAgICBBU1NFUlQoIXN0eWxlc2hlZXQtPmlzTG9hZGluZygpKTsKKyAgICAKKyAgICBz
aXplX3Qgc2l6ZSA9IHN0eWxlc2hlZXQtPmxlbmd0aCgpOworICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgc2l6ZTsgaSsrKSB7CisgICAgICAgIENTU1J1bGUqIHJ1bGUgPSBzdHlsZXNoZWV0LT5p
dGVtKGkpOworICAgICAgICBpZiAocnVsZS0+aXNTdHlsZVJ1bGUoKSkgeworICAgICAgICAgICAg
Q1NTU3R5bGVSdWxlKiBzdHlsZVJ1bGUgPSBzdGF0aWNfY2FzdDxDU1NTdHlsZVJ1bGUqPihydWxl
KTsKKyAgICAgICAgICAgIGlmICghU2VsZWN0b3JDaGVja2VyOjpkZXRlcm1pbmVTZWxlY3RvclNj
b3BlcyhzdHlsZVJ1bGUtPnNlbGVjdG9yTGlzdCgpLCBpZFNjb3BlcywgY2xhc3NTY29wZXMpKQor
ICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAg
ICAgICB9IAorICAgICAgICBpZiAocnVsZS0+aXNJbXBvcnRSdWxlKCkpIHsKKyAgICAgICAgICAg
IENTU0ltcG9ydFJ1bGUqIGltcG9ydFJ1bGUgPSBzdGF0aWNfY2FzdDxDU1NJbXBvcnRSdWxlKj4o
cnVsZSk7CisgICAgICAgICAgICBpZiAoaW1wb3J0UnVsZS0+c3R5bGVTaGVldCgpKSB7CisgICAg
ICAgICAgICAgICAgaWYgKCFkZXRlcm1pbmVTdHlsZXNoZWV0U2VsZWN0b3JTY29wZXMoaW1wb3J0
UnVsZS0+c3R5bGVTaGVldCgpLCBpZFNjb3BlcywgY2xhc3NTY29wZXMpKQorICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjb250aW51
ZTsKKyAgICAgICAgfQorICAgICAgICAvLyBGSVhNRTogTWVkaWEgcnVsZXMgYW5kIG1heWJlIHNv
bWUgb3RoZXJzIGNvdWxkIGJlIGFsbG93ZWQuCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9
CisgICAgcmV0dXJuIHRydWU7Cit9CiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKQEAgLTE5NjgsNiArMjAzMCw3
IEBAIHZvaWQgUnVsZVNldDo6YWRkUnVsZXNGcm9tU2hlZXQoQ1NTU3R5bGUKICAgICAgICAgICAg
ICAgICAgICAgICAgIC8vIEFkZCB0aGlzIGZvbnQgZmFjZSB0byBvdXIgc2V0LgogICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgQ1NTRm9udEZhY2VSdWxlKiBmb250RmFjZVJ1bGUgPSBzdGF0
aWNfY2FzdDxDU1NGb250RmFjZVJ1bGUqPihjaGlsZEl0ZW0pOwogICAgICAgICAgICAgICAgICAg
ICAgICAgc3R5bGVTZWxlY3Rvci0+Zm9udFNlbGVjdG9yKCktPmFkZEZvbnRGYWNlUnVsZShmb250
RmFjZVJ1bGUpOworICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGVTZWxlY3Rvci0+aW52YWxp
ZGF0ZU1hdGNoZWREZWNsYXJhdGlvbkNhY2hlKCk7CiAgICAgICAgICAgICAgICAgICAgIH0gZWxz
ZSBpZiAoY2hpbGRJdGVtLT5pc0tleWZyYW1lc1J1bGUoKSAmJiBzdHlsZVNlbGVjdG9yKSB7CiAg
ICAgICAgICAgICAgICAgICAgICAgICAvLyBBZGQgdGhpcyBrZXlmcmFtZSBydWxlIHRvIG91ciBz
ZXQuCiAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZVNlbGVjdG9yLT5hZGRLZXlmcmFtZVN0
eWxlKHN0YXRpY19jYXN0PFdlYktpdENTU0tleWZyYW1lc1J1bGUqPihjaGlsZEl0ZW0pKTsKQEAg
LTE5NzgsNiArMjA0MSw3IEBAIHZvaWQgUnVsZVNldDo6YWRkUnVsZXNGcm9tU2hlZXQoQ1NTU3R5
bGUKICAgICAgICAgICAgIC8vIEFkZCB0aGlzIGZvbnQgZmFjZSB0byBvdXIgc2V0LgogICAgICAg
ICAgICAgY29uc3QgQ1NTRm9udEZhY2VSdWxlKiBmb250RmFjZVJ1bGUgPSBzdGF0aWNfY2FzdDxD
U1NGb250RmFjZVJ1bGUqPihydWxlKTsKICAgICAgICAgICAgIHN0eWxlU2VsZWN0b3ItPmZvbnRT
ZWxlY3RvcigpLT5hZGRGb250RmFjZVJ1bGUoZm9udEZhY2VSdWxlKTsKKyAgICAgICAgICAgIHN0
eWxlU2VsZWN0b3ItPmludmFsaWRhdGVNYXRjaGVkRGVjbGFyYXRpb25DYWNoZSgpOwogICAgICAg
ICB9IGVsc2UgaWYgKHJ1bGUtPmlzS2V5ZnJhbWVzUnVsZSgpKQogICAgICAgICAgICAgc3R5bGVT
ZWxlY3Rvci0+YWRkS2V5ZnJhbWVTdHlsZShzdGF0aWNfY2FzdDxXZWJLaXRDU1NLZXlmcmFtZXNS
dWxlKj4ocnVsZSkpOwogICAgICAgICBlbHNlIGlmIChydWxlLT5pc1JlZ2lvblJ1bGUoKSAmJiBz
dHlsZVNlbGVjdG9yKQpJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL0NTU1N0eWxlU2VsZWN0b3Iu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU3R5bGVTZWxlY3Rvci5oCShy
ZXZpc2lvbiAxMDQwNDIpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU3R5bGVTZWxlY3Rvci5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xMTIsNyArMTEyLDcgQEAgcHVibGljOgogCiAgICAgUGFzc1Jl
ZlB0cjxSZW5kZXJTdHlsZT4gc3R5bGVGb3JQYWdlKGludCBwYWdlSW5kZXgpOwogCi0gICAgc3Rh
dGljIFBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IHN0eWxlRm9yRG9jdW1lbnQoRG9jdW1lbnQqKTsK
KyAgICBzdGF0aWMgUGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4gc3R5bGVGb3JEb2N1bWVudChEb2N1
bWVudCosIENTU0ZvbnRTZWxlY3RvciogPSAwKTsKIAogICAgIFJlbmRlclN0eWxlKiBzdHlsZSgp
IGNvbnN0IHsgcmV0dXJuIG1fc3R5bGUuZ2V0KCk7IH0KICAgICBSZW5kZXJTdHlsZSogcGFyZW50
U3R5bGUoKSBjb25zdCB7IHJldHVybiBtX3BhcmVudFN0eWxlOyB9CkBAIC0xMjYsMTAgKzEyNiwx
NiBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRFZmZlY3RpdmVab29tKGZsb2F0IGYpIHsgbV9mb250
RGlydHkgfD0gc3R5bGUoKS0+c2V0RWZmZWN0aXZlWm9vbShmKTsgfQogICAgIHZvaWQgc2V0VGV4
dFNpemVBZGp1c3QoYm9vbCBiKSB7IG1fZm9udERpcnR5IHw9IHN0eWxlKCktPnNldFRleHRTaXpl
QWRqdXN0KGIpOyB9CiAgICAgYm9vbCBoYXNQYXJlbnROb2RlKCkgY29uc3QgeyByZXR1cm4gbV9w
YXJlbnROb2RlOyB9CisgICAgCisgICAgdm9pZCBhcHBlbmRBdXRob3JTdHlsZXNoZWV0cyh1bnNp
Z25lZCBmaXJzdE5ldywgY29uc3QgVmVjdG9yPFJlZlB0cjxTdHlsZVNoZWV0PiA+Jik7CisgICAg
CisgICAgLy8gRmluZCB0aGUgaWRzIG9yIGNsYXNzZXMgdGhlIHNlbGVjdG9ycyBvbiBhIHN0eWxl
c2hlZXQgYXJlIHNjb3BlZCB0by4gVGhlIHNlbGVjdG9ycyBvbmx5IGFwcGx5IHRvIGVsZW1lbnRz
IGluIHN1YnRyZWVzIHdoZXJlIHRoZSByb290IGVsZW1lbnQgbWF0Y2hlcyB0aGUgc2NvcGUuCisg
ICAgc3RhdGljIGJvb2wgZGV0ZXJtaW5lU3R5bGVzaGVldFNlbGVjdG9yU2NvcGVzKENTU1N0eWxl
U2hlZXQqLCBIYXNoU2V0PEF0b21pY1N0cmluZ0ltcGwqPiYgaWRTY29wZXMsIEhhc2hTZXQ8QXRv
bWljU3RyaW5nSW1wbCo+JiBjbGFzc1Njb3Blcyk7CiAKIHByaXZhdGU6CiAgICAgdm9pZCBpbml0
Rm9yU3R5bGVSZXNvbHZlKEVsZW1lbnQqLCBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUgPSAwLCBQ
c2V1ZG9JZCA9IE5PUFNFVURPKTsKICAgICB2b2lkIGluaXRFbGVtZW50KEVsZW1lbnQqKTsKKyAg
ICB2b2lkIGNvbGxlY3RGZWF0dXJlcygpOwogICAgIFJlbmRlclN0eWxlKiBsb2NhdGVTaGFyZWRT
dHlsZSgpOwogICAgIGJvb2wgbWF0Y2hlc1J1bGVTZXQoUnVsZVNldCopOwogICAgIE5vZGUqIGxv
Y2F0ZUNvdXNpbkxpc3QoRWxlbWVudCogcGFyZW50LCB1bnNpZ25lZCYgdmlzaXRlZE5vZGVDb3Vu
dCkgY29uc3Q7CkBAIC0yMTgsNiArMjI0LDcgQEAgcHVibGljOgogICAgIHN0cnVjdCBGZWF0dXJl
cyB7CiAgICAgICAgIEZlYXR1cmVzKCk7CiAgICAgICAgIH5GZWF0dXJlcygpOworICAgICAgICB2
b2lkIGNsZWFyKCk7CiAgICAgICAgIEhhc2hTZXQ8QXRvbWljU3RyaW5nSW1wbCo+IGlkc0luUnVs
ZXM7CiAgICAgICAgIEhhc2hTZXQ8QXRvbWljU3RyaW5nSW1wbCo+IGF0dHJzSW5SdWxlczsKICAg
ICAgICAgT3duUHRyPFJ1bGVTZXQ+IHNpYmxpbmdSdWxlczsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2Nzcy9TZWxlY3RvckNoZWNrZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nz
cy9TZWxlY3RvckNoZWNrZXIuY3BwCShyZXZpc2lvbiAxMDQwNDIpCisrKyBTb3VyY2UvV2ViQ29y
ZS9jc3MvU2VsZWN0b3JDaGVja2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTM5OCw0ICsxMzk4
LDI4IEBAIGJvb2wgU2VsZWN0b3JDaGVja2VyOjppc0ZyYW1lRm9jdXNlZChjb24KICAgICByZXR1
cm4gZWxlbWVudC0+ZG9jdW1lbnQoKS0+ZnJhbWUoKSAmJiBlbGVtZW50LT5kb2N1bWVudCgpLT5m
cmFtZSgpLT5zZWxlY3Rpb24oKS0+aXNGb2N1c2VkQW5kQWN0aXZlKCk7CiB9CiAKK2Jvb2wgU2Vs
ZWN0b3JDaGVja2VyOjpkZXRlcm1pbmVTZWxlY3RvclNjb3Blcyhjb25zdCBDU1NTZWxlY3Rvckxp
c3QmIHNlbGVjdG9yTGlzdCwgSGFzaFNldDxBdG9taWNTdHJpbmdJbXBsKj4mIGlkU2NvcGVzLCBI
YXNoU2V0PEF0b21pY1N0cmluZ0ltcGwqPiYgY2xhc3NTY29wZXMpCit7CisgICAgZm9yIChDU1NT
ZWxlY3Rvciogc2VsZWN0b3IgPSBzZWxlY3Rvckxpc3QuZmlyc3QoKTsgc2VsZWN0b3I7IHNlbGVj
dG9yID0gQ1NTU2VsZWN0b3JMaXN0OjpuZXh0KHNlbGVjdG9yKSkgeworICAgICAgICBDU1NTZWxl
Y3RvciogcmlnaHRtb3N0U2VsZWN0b3IgPSBzZWxlY3RvcjsKKyAgICAgICAgQ1NTU2VsZWN0b3I6
OlJlbGF0aW9uIHJlbGF0aW9uID0gQ1NTU2VsZWN0b3I6OkRlc2NlbmRhbnQ7CisgICAgICAgIGZv
ciAoO3JpZ2h0bW9zdFNlbGVjdG9yLT50YWdIaXN0b3J5KCk7IHJpZ2h0bW9zdFNlbGVjdG9yID0g
cmlnaHRtb3N0U2VsZWN0b3ItPnRhZ0hpc3RvcnkoKSkgeworICAgICAgICAgICAgaWYgKHJpZ2h0
bW9zdFNlbGVjdG9yLT5yZWxhdGlvbigpICE9IENTU1NlbGVjdG9yOjpTdWJTZWxlY3RvcikKKyAg
ICAgICAgICAgICAgICByZWxhdGlvbiA9IHJpZ2h0bW9zdFNlbGVjdG9yLT5yZWxhdGlvbigpOwor
ICAgICAgICB9CisgICAgICAgIGlmIChyZWxhdGlvbiAhPSBDU1NTZWxlY3Rvcjo6RGVzY2VuZGFu
dCAmJiByZWxhdGlvbiAhPSBDU1NTZWxlY3Rvcjo6Q2hpbGQpCisgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICAgIGlmIChyaWdodG1vc3RTZWxlY3Rvci0+bV9tYXRjaCA9PSBDU1NTZWxl
Y3Rvcjo6SWQpIHsKKyAgICAgICAgICAgIGlkU2NvcGVzLmFkZChyaWdodG1vc3RTZWxlY3Rvci0+
dmFsdWUoKS5pbXBsKCkpOworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKyAgICAg
ICAgaWYgKHJpZ2h0bW9zdFNlbGVjdG9yLT5tX21hdGNoID09IENTU1NlbGVjdG9yOjpDbGFzcykg
eworICAgICAgICAgICAgY2xhc3NTY29wZXMuYWRkKHJpZ2h0bW9zdFNlbGVjdG9yLT52YWx1ZSgp
LmltcGwoKSk7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgfQorICAgIHJldHVybiB0cnVlOworfQorCiB9CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9jc3MvU2VsZWN0b3JDaGVja2VyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvY3NzL1NlbGVjdG9yQ2hlY2tlci5oCShyZXZpc2lvbiAxMDQwNDIpCisrKyBTb3VyY2UvV2Vi
Q29yZS9jc3MvU2VsZWN0b3JDaGVja2VyLmgJKHdvcmtpbmcgY29weSkKQEAgLTkwLDYgKzkwLDkg
QEAgcHVibGljOgogICAgIGVudW0gTGlua01hdGNoTWFzayB7IE1hdGNoTGluayA9IDEsIE1hdGNo
VmlzaXRlZCA9IDIsIE1hdGNoQWxsID0gTWF0Y2hMaW5rIHwgTWF0Y2hWaXNpdGVkIH07CiAgICAg
c3RhdGljIHVuc2lnbmVkIGRldGVybWluZUxpbmtNYXRjaFR5cGUoY29uc3QgQ1NTU2VsZWN0b3Iq
KTsKIAorICAgIC8vIEZpbmQgdGhlIGlkcyBvciBjbGFzc2VzIHNlbGVjdG9ycyBhcmUgc2NvcGVk
IHRvLiBUaGUgc2VsZWN0b3JzIG9ubHkgYXBwbHkgdG8gZWxlbWVudHMgaW4gc3VidHJlZXMgd2hl
cmUgdGhlIHJvb3QgZWxlbWVudCBtYXRjaGVzIHRoZSBzY29wZS4KKyAgICBzdGF0aWMgYm9vbCBk
ZXRlcm1pbmVTZWxlY3RvclNjb3Blcyhjb25zdCBDU1NTZWxlY3Rvckxpc3QmLCBIYXNoU2V0PEF0
b21pY1N0cmluZ0ltcGwqPiYgaWRTY29wZXMsIEhhc2hTZXQ8QXRvbWljU3RyaW5nSW1wbCo+JiBj
bGFzc1Njb3Blcyk7CisKIHByaXZhdGU6CiAgICAgYm9vbCBjaGVja09uZVNlbGVjdG9yKENTU1Nl
bGVjdG9yKiwgRWxlbWVudCosIFBzZXVkb0lkJiBkeW5hbWljUHNldWRvLCBib29sIGlzU3ViU2Vs
ZWN0b3IsIFZpc2l0ZWRNYXRjaFR5cGUsIFJlbmRlclN0eWxlKiwgUmVuZGVyU3R5bGUqIGVsZW1l
bnRQYXJlbnRTdHlsZSkgY29uc3Q7CiAgICAgYm9vbCBjaGVja1Njcm9sbGJhclBzZXVkb0NsYXNz
KENTU1NlbGVjdG9yKiwgUHNldWRvSWQmIGR5bmFtaWNQc2V1ZG8pIGNvbnN0OwpJbmRleDogU291
cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9kb20vRG9jdW1lbnQuY3BwCShyZXZpc2lvbiAxMDQwNDIpCisrKyBTb3VyY2UvV2ViQ29yZS9k
b20vRG9jdW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zODIsNiArMzgyLDcgQEAgRG9jdW1l
bnQ6OkRvY3VtZW50KEZyYW1lKiBmcmFtZSwgY29uc3QgSwogICAgICwgbV9tdXRhdGlvbk9ic2Vy
dmVyVHlwZXMoMCkKICNlbmRpZgogICAgICwgbV9zdHlsZVNoZWV0cyhTdHlsZVNoZWV0TGlzdDo6
Y3JlYXRlKHRoaXMpKQorICAgICwgbV9oYWRBY3RpdmVMb2FkaW5nU3R5bGVzaGVldChmYWxzZSkK
ICAgICAsIG1fcmVhZHlTdGF0ZShDb21wbGV0ZSkKICAgICAsIG1fc3R5bGVSZWNhbGNUaW1lcih0
aGlzLCAmRG9jdW1lbnQ6OnN0eWxlUmVjYWxjVGltZXJGaXJlZCkKICAgICAsIG1fcGVuZGluZ1N0
eWxlUmVjYWxjU2hvdWxkRm9yY2UoZmFsc2UpCkBAIC0xNTI4LDcgKzE1MjksNyBAQCB2b2lkIERv
Y3VtZW50OjpyZWNhbGNTdHlsZShTdHlsZUNoYW5nZSBjCiAgICAgICAgIHJldHVybjsgLy8gR3Vh
cmQgYWdhaW5zdCByZS1lbnRyYW5jeS4gLWR3aAogICAgIAogICAgIGlmIChtX2hhc0RpcnR5U3R5
bGVTZWxlY3RvcikKLSAgICAgICAgcmVjYWxjU3R5bGVTZWxlY3RvcigpOworICAgICAgICB1cGRh
dGVBY3RpdmVTdHlsZXNoZWV0cyhSZWNhbGNTdHlsZUltbWVkaWF0ZWx5KTsKIAogICAgIEluc3Bl
Y3Rvckluc3RydW1lbnRhdGlvbkNvb2tpZSBjb29raWUgPSBJbnNwZWN0b3JJbnN0cnVtZW50YXRp
b246OndpbGxSZWNhbGN1bGF0ZVN0eWxlKHRoaXMpOwogCkBAIC0xNTUzLDcgKzE1NTQsNyBAQCB2
b2lkIERvY3VtZW50OjpyZWNhbGNTdHlsZShTdHlsZUNoYW5nZSBjCiAgICAgICAgIC8vIHN0eWxl
IHNlbGVjdG9yIG1heSBzZXQgdGhpcyBhZ2FpbiBkdXJpbmcgcmVjYWxjCiAgICAgICAgIG1faGFz
Tm9kZXNXaXRoUGxhY2Vob2xkZXJTdHlsZSA9IGZhbHNlOwogICAgICAgICAKLSAgICAgICAgUmVm
UHRyPFJlbmRlclN0eWxlPiBkb2N1bWVudFN0eWxlID0gQ1NTU3R5bGVTZWxlY3Rvcjo6c3R5bGVG
b3JEb2N1bWVudCh0aGlzKTsKKyAgICAgICAgUmVmUHRyPFJlbmRlclN0eWxlPiBkb2N1bWVudFN0
eWxlID0gQ1NTU3R5bGVTZWxlY3Rvcjo6c3R5bGVGb3JEb2N1bWVudCh0aGlzLCBtX3N0eWxlU2Vs
ZWN0b3IgPyBtX3N0eWxlU2VsZWN0b3ItPmZvbnRTZWxlY3RvcigpIDogMCk7CiAgICAgICAgIFN0
eWxlQ2hhbmdlIGNoID0gZGlmZihkb2N1bWVudFN0eWxlLmdldCgpLCByZW5kZXJlcigpLT5zdHls
ZSgpKTsKICAgICAgICAgaWYgKGNoICE9IE5vQ2hhbmdlKQogICAgICAgICAgICAgcmVuZGVyZXIo
KS0+c2V0U3R5bGUoZG9jdW1lbnRTdHlsZS5yZWxlYXNlKCkpOwpAQCAtMTU4NCwxMiArMTU4NSw4
IEBAIGJhaWxfb3V0OgogICAgIG1faW5TdHlsZVJlY2FsYyA9IGZhbHNlOwogICAgIAogICAgIC8v
IFBzZXVkbyBlbGVtZW50IHJlbW92YWwgYW5kIHNpbWlsYXIgbWF5IG9ubHkgd29yayB3aXRoIHRo
ZXNlIGZsYWdzIHN0aWxsIHNldC4gUmVzZXQgdGhlbSBhZnRlciB0aGUgc3R5bGUgcmVjYWxjLgot
ICAgIGlmIChtX3N0eWxlU2VsZWN0b3IpIHsKLSAgICAgICAgbV91c2VzU2libGluZ1J1bGVzID0g
bV9zdHlsZVNlbGVjdG9yLT51c2VzU2libGluZ1J1bGVzKCk7Ci0gICAgICAgIG1fdXNlc0ZpcnN0
TGluZVJ1bGVzID0gbV9zdHlsZVNlbGVjdG9yLT51c2VzRmlyc3RMaW5lUnVsZXMoKTsKLSAgICAg
ICAgbV91c2VzQmVmb3JlQWZ0ZXJSdWxlcyA9IG1fc3R5bGVTZWxlY3Rvci0+dXNlc0JlZm9yZUFm
dGVyUnVsZXMoKTsKLSAgICAgICAgbV91c2VzTGlua1J1bGVzID0gbV9zdHlsZVNlbGVjdG9yLT51
c2VzTGlua1J1bGVzKCk7Ci0gICAgfQorICAgIGlmIChtX3N0eWxlU2VsZWN0b3IpCisgICAgICAg
IHJlc2V0Q1NTRmVhdHVyZUZsYWdzKCk7CiAKICAgICBpZiAoZnJhbWVWaWV3KSB7CiAgICAgICAg
IGZyYW1lVmlldy0+cmVzdW1lU2NoZWR1bGVkRXZlbnRzKCk7CkBAIC0xNzc4LDYgKzE3NzUsMjMg
QEAgdm9pZCBEb2N1bWVudDo6c2V0SXNWaWV3U291cmNlKGJvb2wgaXNWaQogICAgIHNldFNlY3Vy
aXR5T3JpZ2luKFNlY3VyaXR5T3JpZ2luOjpjcmVhdGVVbmlxdWUoKSk7CiB9CiAKK3ZvaWQgRG9j
dW1lbnQ6OmNvbWJpbmVDU1NGZWF0dXJlRmxhZ3MoKQoreworICAgIC8vIERlbGF5IHJlc2V0dGlu
ZyB0aGUgZmxhZ3MgdW50aWwgYWZ0ZXIgbmV4dCBzdHlsZSByZWNhbGMgc2luY2UgdW5hcHBseWlu
ZyB0aGUgc3R5bGUgbWF5IG5vdCB3b3JrIHdpdGhvdXQgdGhlc2Ugc2V0ICh0aGlzIGlzIHRydWUg
YXQgbGVhc3Qgd2l0aCBiZWZvcmUvYWZ0ZXIpLgorICAgIG1fdXNlc1NpYmxpbmdSdWxlcyA9IG1f
dXNlc1NpYmxpbmdSdWxlcyB8fCBtX3N0eWxlU2VsZWN0b3ItPnVzZXNTaWJsaW5nUnVsZXMoKTsK
KyAgICBtX3VzZXNGaXJzdExpbmVSdWxlcyA9IG1fdXNlc0ZpcnN0TGluZVJ1bGVzIHx8IG1fc3R5
bGVTZWxlY3Rvci0+dXNlc0ZpcnN0TGluZVJ1bGVzKCk7CisgICAgbV91c2VzQmVmb3JlQWZ0ZXJS
dWxlcyA9IG1fdXNlc0JlZm9yZUFmdGVyUnVsZXMgfHwgbV9zdHlsZVNlbGVjdG9yLT51c2VzQmVm
b3JlQWZ0ZXJSdWxlcygpOworICAgIG1fdXNlc0xpbmtSdWxlcyA9IG1fdXNlc0xpbmtSdWxlcyB8
fCBtX3N0eWxlU2VsZWN0b3ItPnVzZXNMaW5rUnVsZXMoKTsKK30KKwordm9pZCBEb2N1bWVudDo6
cmVzZXRDU1NGZWF0dXJlRmxhZ3MoKQoreworICAgIG1fdXNlc1NpYmxpbmdSdWxlcyA9IG1fc3R5
bGVTZWxlY3Rvci0+dXNlc1NpYmxpbmdSdWxlcygpOworICAgIG1fdXNlc0ZpcnN0TGluZVJ1bGVz
ID0gbV9zdHlsZVNlbGVjdG9yLT51c2VzRmlyc3RMaW5lUnVsZXMoKTsKKyAgICBtX3VzZXNCZWZv
cmVBZnRlclJ1bGVzID0gbV9zdHlsZVNlbGVjdG9yLT51c2VzQmVmb3JlQWZ0ZXJSdWxlcygpOwor
ICAgIG1fdXNlc0xpbmtSdWxlcyA9IG1fc3R5bGVTZWxlY3Rvci0+dXNlc0xpbmtSdWxlcygpOwor
fQorCiB2b2lkIERvY3VtZW50OjpjcmVhdGVTdHlsZVNlbGVjdG9yKCkKIHsKICAgICBib29sIG1h
dGNoQXV0aG9yQW5kVXNlclN0eWxlcyA9IHRydWU7CkBAIC0xNzg1LDExICsxNzk5LDcgQEAgdm9p
ZCBEb2N1bWVudDo6Y3JlYXRlU3R5bGVTZWxlY3RvcigpCiAgICAgICAgIG1hdGNoQXV0aG9yQW5k
VXNlclN0eWxlcyA9IGRvY1NldHRpbmdzLT5hdXRob3JBbmRVc2VyU3R5bGVzRW5hYmxlZCgpOwog
ICAgIG1fc3R5bGVTZWxlY3RvciA9IGFkb3B0UHRyKG5ldyBDU1NTdHlsZVNlbGVjdG9yKHRoaXMs
IG1fc3R5bGVTaGVldHMuZ2V0KCksIG1fbWFwcGVkRWxlbWVudFNoZWV0LmdldCgpLCBwYWdlVXNl
clNoZWV0KCksIHBhZ2VHcm91cFVzZXJTaGVldHMoKSwgbV91c2VyU2hlZXRzLmdldCgpLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICFpblF1aXJr
c01vZGUoKSwgbWF0Y2hBdXRob3JBbmRVc2VyU3R5bGVzKSk7Ci0gICAgLy8gRGVsYXkgcmVzZXR0
aW5nIHRoZSBmbGFncyB1bnRpbCBhZnRlciBuZXh0IHN0eWxlIHJlY2FsYyBzaW5jZSB1bmFwcGx5
aW5nIHRoZSBzdHlsZSBtYXkgbm90IHdvcmsgd2l0aG91dCB0aGVzZSBzZXQgKHRoaXMgaXMgdHJ1
ZSBhdCBsZWFzdCB3aXRoIGJlZm9yZS9hZnRlcikuCi0gICAgbV91c2VzU2libGluZ1J1bGVzID0g
bV91c2VzU2libGluZ1J1bGVzIHx8IG1fc3R5bGVTZWxlY3Rvci0+dXNlc1NpYmxpbmdSdWxlcygp
OwotICAgIG1fdXNlc0ZpcnN0TGluZVJ1bGVzID0gbV91c2VzRmlyc3RMaW5lUnVsZXMgfHwgbV9z
dHlsZVNlbGVjdG9yLT51c2VzRmlyc3RMaW5lUnVsZXMoKTsKLSAgICBtX3VzZXNCZWZvcmVBZnRl
clJ1bGVzID0gbV91c2VzQmVmb3JlQWZ0ZXJSdWxlcyB8fCBtX3N0eWxlU2VsZWN0b3ItPnVzZXNC
ZWZvcmVBZnRlclJ1bGVzKCk7Ci0gICAgbV91c2VzTGlua1J1bGVzID0gbV91c2VzTGlua1J1bGVz
IHx8IG1fc3R5bGVTZWxlY3Rvci0+dXNlc0xpbmtSdWxlcygpOworICAgIGNvbWJpbmVDU1NGZWF0
dXJlRmxhZ3MoKTsKIH0KIAogdm9pZCBEb2N1bWVudDo6YXR0YWNoKCkKQEAgLTI5NTAsNyArMjk2
MCw3IEBAIHZvaWQgRG9jdW1lbnQ6OnJlbW92ZVBlbmRpbmdTaGVldCgpCiAgICAgaWYgKG1fcGVu
ZGluZ1N0eWxlc2hlZXRzKQogICAgICAgICByZXR1cm47CiAKLSAgICBzdHlsZVNlbGVjdG9yQ2hh
bmdlZChSZWNhbGNTdHlsZUltbWVkaWF0ZWx5KTsKKyAgICBzdHlsZVNlbGVjdG9yQ2hhbmdlZChQ
ZW5kaW5nU3R5bGVzaGVldENvbXBsZXRlZCk7CiAKICAgICBpZiAoU2NyaXB0YWJsZURvY3VtZW50
UGFyc2VyKiBwYXJzZXIgPSBzY3JpcHRhYmxlRG9jdW1lbnRQYXJzZXIoKSkKICAgICAgICAgcGFy
c2VyLT5leGVjdXRlU2NyaXB0c1dhaXRpbmdGb3JTdHlsZXNoZWV0cygpOwpAQCAtMjk3MSw4ICsy
OTgxLDEwIEBAIHZvaWQgRG9jdW1lbnQ6OnN0eWxlU2VsZWN0b3JDaGFuZ2VkKFN0eWwKICAgICAg
ICAgcHJpbnRmKCJCZWdpbm5pbmcgdXBkYXRlIG9mIHN0eWxlIHNlbGVjdG9yIGF0IHRpbWUgJWQu
XG4iLCBlbGFwc2VkVGltZSgpKTsKICNlbmRpZgogCi0gICAgcmVjYWxjU3R5bGVTZWxlY3Rvcigp
OwotICAgIAorICAgIGJvb2wgc3R5bGVzaGVldENoYW5nZVJlcXVpcmVzU3R5bGVSZWNhbGMgPSB1
cGRhdGVBY3RpdmVTdHlsZXNoZWV0cyh1cGRhdGVGbGFnKTsKKyAgICBpZiAoIXN0eWxlc2hlZXRD
aGFuZ2VSZXF1aXJlc1N0eWxlUmVjYWxjKQorICAgICAgICByZXR1cm47CisKICAgICBpZiAodXBk
YXRlRmxhZyA9PSBEZWZlclJlY2FsY1N0eWxlKSB7CiAgICAgICAgIHNjaGVkdWxlRm9yY2VkU3R5
bGVSZWNhbGMoKTsKICAgICAgICAgcmV0dXJuOwpAQCAtMzA0NCwyMiArMzA1Niw5IEBAIHZvaWQg
RG9jdW1lbnQ6OnJlbW92ZVN0eWxlU2hlZXRDYW5kaWRhdGUKIHsKICAgICBtX3N0eWxlU2hlZXRD
YW5kaWRhdGVOb2Rlcy5yZW1vdmUobm9kZSk7CiB9Ci0KLXZvaWQgRG9jdW1lbnQ6OnJlY2FsY1N0
eWxlU2VsZWN0b3IoKQorICAgIAordm9pZCBEb2N1bWVudDo6Y29sbGVjdEFjdGl2ZVN0eWxlc2hl
ZXRzKFZlY3RvcjxSZWZQdHI8U3R5bGVTaGVldD4gPiYgc2hlZXRzKQogewotICAgIGlmIChtX2lu
U3R5bGVSZWNhbGMpIHsKLSAgICAgICAgLy8gU1ZHIDx1c2U+IGVsZW1lbnQgbWF5IG1hbmFnZSB0
byBpbnZhbGlkYXRlIHN0eWxlIHNlbGVjdG9yIGluIHRoZSBtaWRkbGUgb2YgYSBzdHlsZSByZWNh
bGMuCi0gICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01
NDM0NAotICAgICAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQgYmUgZml4ZWQgaW4gU1ZHIGFuZCB0
aGlzIGNvZGUgcmVwbGFjZWQgd2l0aCBBU1NFUlQoIW1faW5TdHlsZVJlY2FsYykuCi0gICAgICAg
IG1faGFzRGlydHlTdHlsZVNlbGVjdG9yID0gdHJ1ZTsKLSAgICAgICAgc2NoZWR1bGVGb3JjZWRT
dHlsZVJlY2FsYygpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGlmICghcmVuZGVyZXIo
KSB8fCAhYXR0YWNoZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgU3R5bGVTaGVldFZlY3Rv
ciBzaGVldHM7Ci0KICAgICBib29sIG1hdGNoQXV0aG9yQW5kVXNlclN0eWxlcyA9IHRydWU7CiAg
ICAgaWYgKFNldHRpbmdzKiBzZXR0aW5ncyA9IHRoaXMtPnNldHRpbmdzKCkpCiAgICAgICAgIG1h
dGNoQXV0aG9yQW5kVXNlclN0eWxlcyA9IHNldHRpbmdzLT5hdXRob3JBbmRVc2VyU3R5bGVzRW5h
YmxlZCgpOwpAQCAtMzA3MCw5ICszMDY5LDcgQEAgdm9pZCBEb2N1bWVudDo6cmVjYWxjU3R5bGVT
ZWxlY3RvcigpCiAgICAgICAgIGVuZCA9IGJlZ2luOwogICAgIGZvciAoU3R5bGVTaGVldENhbmRp
ZGF0ZUxpc3RIYXNoU2V0OjppdGVyYXRvciBpdCA9IGJlZ2luOyBpdCAhPSBlbmQ7ICsraXQpIHsK
ICAgICAgICAgTm9kZSogbiA9ICppdDsKLQogICAgICAgICBTdHlsZVNoZWV0KiBzaGVldCA9IDA7
Ci0KICAgICAgICAgaWYgKG4tPm5vZGVUeXBlKCkgPT0gUFJPQ0VTU0lOR19JTlNUUlVDVElPTl9O
T0RFKSB7CiAgICAgICAgICAgICAvLyBQcm9jZXNzaW5nIGluc3RydWN0aW9uIChYTUwgZG9jdW1l
bnRzIG9ubHkpLgogICAgICAgICAgICAgLy8gV2UgZG9uJ3Qgc3VwcG9ydCBsaW5raW5nIHRvIGVt
YmVkZGVkIENTUyBzdHlsZXNoZWV0cywgc2VlIDxodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9NDkyODE+IGZvciBkaXNjdXNzaW9uLgpAQCAtMzA4OSw5ICszMDg2LDkgQEAg
dm9pZCBEb2N1bWVudDo6cmVjYWxjU3R5bGVTZWxlY3RvcigpCiAjZW5kaWYKICAgICAgICAgfSBl
bHNlIGlmICgobi0+aXNIVE1MRWxlbWVudCgpICYmIChuLT5oYXNUYWdOYW1lKGxpbmtUYWcpIHx8
IG4tPmhhc1RhZ05hbWUoc3R5bGVUYWcpKSkKICNpZiBFTkFCTEUoU1ZHKQotICAgICAgICAgICAg
fHwgIChuLT5pc1NWR0VsZW1lbnQoKSAmJiBuLT5oYXNUYWdOYW1lKFNWR05hbWVzOjpzdHlsZVRh
ZykpCisgICAgICAgICAgICAgICAgICAgfHwgIChuLT5pc1NWR0VsZW1lbnQoKSAmJiBuLT5oYXNU
YWdOYW1lKFNWR05hbWVzOjpzdHlsZVRhZykpCiAjZW5kaWYKLSAgICAgICAgKSB7CisgICAgICAg
ICAgICAgICAgICAgKSB7CiAgICAgICAgICAgICBFbGVtZW50KiBlID0gc3RhdGljX2Nhc3Q8RWxl
bWVudCo+KG4pOwogICAgICAgICAgICAgQXRvbWljU3RyaW5nIHRpdGxlID0gZS0+Z2V0QXR0cmli
dXRlKHRpdGxlQXR0cik7CiAgICAgICAgICAgICBib29sIGVuYWJsZWRWaWFTY3JpcHQgPSBmYWxz
ZTsKQEAgLTMxMTUsNyArMzExMiw2IEBAIHZvaWQgRG9jdW1lbnQ6OnJlY2FsY1N0eWxlU2VsZWN0
b3IoKQogICAgICAgICAgICAgICAgIGlmICghbGlua0VsZW1lbnQtPnNoZWV0KCkpCiAgICAgICAg
ICAgICAgICAgICAgIHRpdGxlID0gbnVsbEF0b207CiAgICAgICAgICAgICB9Ci0KICAgICAgICAg
ICAgIC8vIEdldCB0aGUgY3VycmVudCBwcmVmZXJyZWQgc3R5bGVzZXQuICBUaGlzIGlzIHRoZQog
ICAgICAgICAgICAgLy8gc2V0IG9mIHNoZWV0cyB0aGF0IHdpbGwgYmUgZW5hYmxlZC4KICNpZiBF
TkFCTEUoU1ZHKQpAQCAtMzEyOCw3ICszMTI0LDYgQEAgdm9pZCBEb2N1bWVudDo6cmVjYWxjU3R5
bGVTZWxlY3RvcigpCiAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgLy8gPFNUWUxF
PiBlbGVtZW50CiAgICAgICAgICAgICAgICAgc2hlZXQgPSBzdGF0aWNfY2FzdDxIVE1MU3R5bGVF
bGVtZW50Kj4obiktPnNoZWV0KCk7Ci0KICAgICAgICAgICAgIC8vIENoZWNrIHRvIHNlZSBpZiB0
aGlzIHNoZWV0IGJlbG9uZ3MgdG8gYSBzdHlsZXNldAogICAgICAgICAgICAgLy8gKHRodXMgbWFr
aW5nIGl0IFBSRUZFUlJFRCBvciBBTFRFUk5BVEUgcmF0aGVyIHRoYW4KICAgICAgICAgICAgIC8v
IFBFUlNJU1RFTlQpLgpAQCAtMzE0MywyMSArMzEzOCwxMjEgQEAgdm9pZCBEb2N1bWVudDo6cmVj
YWxjU3R5bGVTZWxlY3RvcigpCiAgICAgICAgICAgICAgICAgICAgIGlmIChlLT5oYXNMb2NhbE5h
bWUoc3R5bGVUYWcpIHx8ICFyZWwuY29udGFpbnMoImFsdGVybmF0ZSIpKQogICAgICAgICAgICAg
ICAgICAgICAgICAgbV9wcmVmZXJyZWRTdHlsZXNoZWV0U2V0ID0gbV9zZWxlY3RlZFN0eWxlc2hl
ZXRTZXQgPSB0aXRsZTsKICAgICAgICAgICAgICAgICB9Ci0KICAgICAgICAgICAgICAgICBpZiAo
dGl0bGUgIT0gbV9wcmVmZXJyZWRTdHlsZXNoZWV0U2V0KQogICAgICAgICAgICAgICAgICAgICBz
aGVldCA9IDA7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KLQogICAgICAgICBpZiAoc2hlZXQp
CiAgICAgICAgICAgICBzaGVldHMuYXBwZW5kKHNoZWV0KTsKICAgICB9Cit9CisKK2Jvb2wgRG9j
dW1lbnQ6OnRlc3RBZGRlZFN0eWxlc2hlZXRSZXF1aXJlc1N0eWxlUmVjYWxjKENTU1N0eWxlU2hl
ZXQqIHN0eWxlc2hlZXQpCit7CisgICAgaWYgKHN0eWxlc2hlZXQtPmRpc2FibGVkKCkpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAvLyBTZWUgaWYgYWxsIHJ1bGVzIG9uIHRoZSBzaGVldCBh
cmUgc2NvcGVkIHRvIHNvbWUgc3BlY2lmaWMgaWRzIG9yIGNsYXNzZXMuCisgICAgLy8gVGhlbiB0
ZXN0IGlmIHdlIGFjdHVhbGx5IGhhdmUgYW55IG9mIHRob3NlIGluIHRoZSB0cmVlIGF0IHRoZSBt
b21lbnQuCisgICAgLy8gRklYTUU6IEV2ZW4gd2UgaWYgd2UgZmluZCBzb21lLCB3ZSBjb3VsZCBq
dXN0IGludmFsaWRhdGUgdGhvc2Ugc3VidHJlZXMgaW5zdGVhZCBvZiBpbnZhbGlkYXRpbmcgdGhl
IGVudGlyZSBzdHlsZS4KKyAgICBIYXNoU2V0PEF0b21pY1N0cmluZ0ltcGwqPiBpZFNjb3Blczsg
CisgICAgSGFzaFNldDxBdG9taWNTdHJpbmdJbXBsKj4gY2xhc3NTY29wZXM7CisgICAgaWYgKCFD
U1NTdHlsZVNlbGVjdG9yOjpkZXRlcm1pbmVTdHlsZXNoZWV0U2VsZWN0b3JTY29wZXMoc3R5bGVz
aGVldCwgaWRTY29wZXMsIGNsYXNzU2NvcGVzKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
Ly8gVGVzdGluZyBmb3IgY2xhc3NlcyBpcyBub3QgcGFydGljdWxhcmx5IGZhc3Qgc28gYmFpbCBv
dXQgaWYgdGhlcmUgYXJlIG1vcmUgdGhhbiBhIGZldy4KKyAgICBzdGF0aWMgY29uc3QgaW50IG1h
eGltdW1DbGFzc1Njb3Blc1RvVGVzdCA9IDQ7CisgICAgaWYgKGNsYXNzU2NvcGVzLnNpemUoKSA+
IG1heGltdW1DbGFzc1Njb3Blc1RvVGVzdCkKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgSGFz
aFNldDxBdG9taWNTdHJpbmdJbXBsKj46Oml0ZXJhdG9yIGVuZCA9IGlkU2NvcGVzLmVuZCgpOwor
ICAgIGZvciAoSGFzaFNldDxBdG9taWNTdHJpbmdJbXBsKj46Oml0ZXJhdG9yIGl0ID0gaWRTY29w
ZXMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAgIGlmIChoYXNFbGVtZW50V2l0
aElkKCppdCkpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgZW5kID0gY2xh
c3NTY29wZXMuZW5kKCk7CisgICAgZm9yIChIYXNoU2V0PEF0b21pY1N0cmluZ0ltcGwqPjo6aXRl
cmF0b3IgaXQgPSBjbGFzc1Njb3Blcy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAgICAg
ICAgLy8gRklYTUU6IGdldEVsZW1lbnRzQnlDbGFzc05hbWUgaXMgbm90IG9wdGltYWwgZm9yIHRo
aXMuIFdlIHNob3VsZCBoYW5kbGUgYWxsIGNsYXNzZXMgaW4gYSBzaW5nbGUgcGFzcy4KKyAgICAg
ICAgaWYgKGdldEVsZW1lbnRzQnlDbGFzc05hbWUoKml0KS0+bGVuZ3RoKCkpCisgICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworfQorICAgIAordm9pZCBE
b2N1bWVudDo6YW5hbHl6ZVN0eWxlc2hlZXRDaGFuZ2UoU3R5bGVTZWxlY3RvclVwZGF0ZUZsYWcg
dXBkYXRlRmxhZywgY29uc3QgVmVjdG9yPFJlZlB0cjxTdHlsZVNoZWV0PiA+JiBuZXdTdHlsZXNo
ZWV0cywgYm9vbCYgcmVxdWlyZXNTdHlsZVNlbGVjdG9yUmVzZXQsIGJvb2wmIHJlcXVpcmVzU3R5
bGVSZWNhbGMpCit7CisgICAgcmVxdWlyZXNTdHlsZVNlbGVjdG9yUmVzZXQgPSB0cnVlOworICAg
IHJlcXVpcmVzU3R5bGVSZWNhbGMgPSB0cnVlOworICAgIAorICAgIC8vIFN0eWxlc2hlZXRzIG9m
IDxzdHlsZT4gZWxlbWVudHMgdGhhdCBAaW1wb3J0IHN0eWxlc2hlZXRzIGFyZSBhY3RpdmUgYnV0
IGxvYWRpbmcuIFdlIG5lZWQgdG8gdHJpZ2dlciBhIGZ1bGwgcmVjYWxjIHdoZW4gc3VjaCBsb2Fk
cyBhcmUgZG9uZS4KKyAgICBib29sIGhhc0FjdGl2ZUxvYWRpbmdTdHlsZXNoZWV0ID0gZmFsc2U7
CisgICAgdW5zaWduZWQgbmV3U3R5bGVzaGVldENvdW50ID0gbmV3U3R5bGVzaGVldHMuc2l6ZSgp
OworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBuZXdTdHlsZXNoZWV0Q291bnQ7ICsraSkg
eworICAgICAgICBpZiAobmV3U3R5bGVzaGVldHNbaV0tPmlzTG9hZGluZygpKQorICAgICAgICAg
ICAgaGFzQWN0aXZlTG9hZGluZ1N0eWxlc2hlZXQgPSB0cnVlOworICAgIH0KKyAgICBpZiAobV9o
YWRBY3RpdmVMb2FkaW5nU3R5bGVzaGVldCAmJiAhaGFzQWN0aXZlTG9hZGluZ1N0eWxlc2hlZXQp
IHsKKyAgICAgICAgbV9oYWRBY3RpdmVMb2FkaW5nU3R5bGVzaGVldCA9IGZhbHNlOworICAgICAg
ICByZXR1cm47CisgICAgfQorICAgIG1faGFkQWN0aXZlTG9hZGluZ1N0eWxlc2hlZXQgPSBoYXNB
Y3RpdmVMb2FkaW5nU3R5bGVzaGVldDsKIAotICAgIG1fc3R5bGVTaGVldHMtPnN3YXAoc2hlZXRz
KTsKKyAgICBpZiAodXBkYXRlRmxhZyAhPSBQZW5kaW5nU3R5bGVzaGVldENvbXBsZXRlZCkKKyAg
ICAgICAgcmV0dXJuOworICAgIGlmICghbV9zdHlsZVNlbGVjdG9yKQorICAgICAgICByZXR1cm47
CisKKyAgICAvLyBTZWUgaWYgd2UgYXJlIGp1c3QgYWRkaW5nIHN0eWxlc2hlZXRzLgorICAgIHVu
c2lnbmVkIG9sZFN0eWxlc2hlZXRDb3VudCA9IG1fc3R5bGVTaGVldHMtPmxlbmd0aCgpOworICAg
IGlmIChuZXdTdHlsZXNoZWV0Q291bnQgPCBvbGRTdHlsZXNoZWV0Q291bnQpCisgICAgICAgIHJl
dHVybjsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgb2xkU3R5bGVzaGVldENvdW50OyAr
K2kpIHsKKyAgICAgICAgaWYgKG1fc3R5bGVTaGVldHMtPml0ZW0oaSkgIT0gbmV3U3R5bGVzaGVl
dHNbaV0pCisgICAgICAgICAgICByZXR1cm47CisgICAgfQorICAgIHJlcXVpcmVzU3R5bGVTZWxl
Y3RvclJlc2V0ID0gZmFsc2U7CisKKyAgICAvLyBJZiB3ZSBhcmUgYWxyZWFkeSBwYXJzaW5nIHRo
ZSBib2R5IGFuZCBzbyBtYXkgaGF2ZSBzaWduaWZpY2FudCBhbW91bnQgb2YgZWxlbWVudHMsIHB1
dCBzb21lIGVmZm9ydCBpbnRvIHRyeWluZyB0byBhdm9pZCBzdHlsZSByZWNhbGNzLgorICAgIGlm
ICghYm9keSgpIHx8IG1faGFzTm9kZXNXaXRoUGxhY2Vob2xkZXJTdHlsZSkKKyAgICAgICAgcmV0
dXJuOworICAgIGZvciAodW5zaWduZWQgaSA9IG9sZFN0eWxlc2hlZXRDb3VudDsgaSA8IG5ld1N0
eWxlc2hlZXRDb3VudDsgKytpKSB7CisgICAgICAgIGlmICghbmV3U3R5bGVzaGVldHNbaV0tPmlz
Q1NTU3R5bGVTaGVldCgpKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBpZiAodGVzdEFk
ZGVkU3R5bGVzaGVldFJlcXVpcmVzU3R5bGVSZWNhbGMoc3RhdGljX2Nhc3Q8Q1NTU3R5bGVTaGVl
dCo+KG5ld1N0eWxlc2hlZXRzW2ldLmdldCgpKSkpCisgICAgICAgICAgICByZXR1cm47CisgICAg
fQorICAgIHJlcXVpcmVzU3R5bGVSZWNhbGMgPSBmYWxzZTsKK30KKworYm9vbCBEb2N1bWVudDo6
dXBkYXRlQWN0aXZlU3R5bGVzaGVldHMoU3R5bGVTZWxlY3RvclVwZGF0ZUZsYWcgdXBkYXRlRmxh
ZykKK3sKKyAgICBpZiAobV9pblN0eWxlUmVjYWxjKSB7CisgICAgICAgIC8vIFNWRyA8dXNlPiBl
bGVtZW50IG1heSBtYW5hZ2UgdG8gaW52YWxpZGF0ZSBzdHlsZSBzZWxlY3RvciBpbiB0aGUgbWlk
ZGxlIG9mIGEgc3R5bGUgcmVjYWxjLgorICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9NTQzNDQKKyAgICAgICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIGJl
IGZpeGVkIGluIFNWRyBhbmQgdGhpcyBjb2RlIHJlcGxhY2VkIHdpdGggQVNTRVJUKCFtX2luU3R5
bGVSZWNhbGMpLgorICAgICAgICBtX2hhc0RpcnR5U3R5bGVTZWxlY3RvciA9IHRydWU7CisgICAg
ICAgIHNjaGVkdWxlRm9yY2VkU3R5bGVSZWNhbGMoKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIH0KKyAgICBpZiAoIXJlbmRlcmVyKCkgfHwgIWF0dGFjaGVkKCkpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKworICAgIFN0eWxlU2hlZXRWZWN0b3IgbmV3U3R5bGVzaGVldHM7CisgICAgY29s
bGVjdEFjdGl2ZVN0eWxlc2hlZXRzKG5ld1N0eWxlc2hlZXRzKTsKKworICAgIGJvb2wgcmVxdWly
ZXNTdHlsZVNlbGVjdG9yUmVzZXQ7CisgICAgYm9vbCByZXF1aXJlc1N0eWxlUmVjYWxjOworICAg
IGFuYWx5emVTdHlsZXNoZWV0Q2hhbmdlKHVwZGF0ZUZsYWcsIG5ld1N0eWxlc2hlZXRzLCByZXF1
aXJlc1N0eWxlU2VsZWN0b3JSZXNldCwgcmVxdWlyZXNTdHlsZVJlY2FsYyk7CisKKyAgICBpZiAo
cmVxdWlyZXNTdHlsZVNlbGVjdG9yUmVzZXQpCisgICAgICAgIG1fc3R5bGVTZWxlY3Rvci5jbGVh
cigpOworICAgIGVsc2UgeworICAgICAgICBtX3N0eWxlU2VsZWN0b3ItPmFwcGVuZEF1dGhvclN0
eWxlc2hlZXRzKG1fc3R5bGVTaGVldHMtPmxlbmd0aCgpLCBuZXdTdHlsZXNoZWV0cyk7CisgICAg
ICAgIHJlc2V0Q1NTRmVhdHVyZUZsYWdzKCk7CisgICAgfQorICAgIG1fc3R5bGVTaGVldHMtPnN3
YXAobmV3U3R5bGVzaGVldHMpOwogCi0gICAgbV9zdHlsZVNlbGVjdG9yLmNsZWFyKCk7CiAgICAg
bV9kaWRDYWxjdWxhdGVTdHlsZVNlbGVjdG9yID0gdHJ1ZTsKICAgICBtX2hhc0RpcnR5U3R5bGVT
ZWxlY3RvciA9IGZhbHNlOworICAgIAorICAgIHJldHVybiByZXF1aXJlc1N0eWxlUmVjYWxjOwog
fQogCiB2b2lkIERvY3VtZW50OjpzZXRIb3Zlck5vZGUoUGFzc1JlZlB0cjxOb2RlPiBuZXdIb3Zl
ck5vZGUpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuaAkocmV2aXNpb24gMTA0MDQyKQorKysgU291
cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTIxMSw3ICsyMTEs
NyBAQCBlbnVtIFBhZ2VzaG93RXZlbnRQZXJzaXN0ZW5jZSB7CiAgICAgUGFnZXNob3dFdmVudFBl
cnNpc3RlZCA9IDEKIH07CiAKLWVudW0gU3R5bGVTZWxlY3RvclVwZGF0ZUZsYWcgeyBSZWNhbGNT
dHlsZUltbWVkaWF0ZWx5LCBEZWZlclJlY2FsY1N0eWxlIH07CitlbnVtIFN0eWxlU2VsZWN0b3JV
cGRhdGVGbGFnIHsgUmVjYWxjU3R5bGVJbW1lZGlhdGVseSwgRGVmZXJSZWNhbGNTdHlsZSwgUGVu
ZGluZ1N0eWxlc2hlZXRDb21wbGV0ZWQgfTsKIAogY2xhc3MgRG9jdW1lbnQgOiBwdWJsaWMgVHJl
ZVNjb3BlLCBwdWJsaWMgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCB7CiBwdWJsaWM6CkBAIC00NTYs
NyArNDU2LDcgQEAgcHVibGljOgogICAgIH0KIAogICAgIC8qKgotICAgICAqIFVwZGF0ZXMgdGhl
IHBlbmRpbmcgc2hlZXQgY291bnQgYW5kIHRoZW4gY2FsbHMgdXBkYXRlU3R5bGVTZWxlY3Rvci4K
KyAgICAgKiBVcGRhdGVzIHRoZSBwZW5kaW5nIHNoZWV0IGNvdW50IGFuZCB0aGVuIGNhbGxzIHVw
ZGF0ZUFjdGl2ZVN0eWxlc2hlZXRzLgogICAgICAqLwogICAgIHZvaWQgcmVtb3ZlUGVuZGluZ1No
ZWV0KCk7CiAKQEAgLTQ5MSw3ICs0OTEsNiBAQCBwdWJsaWM6CiAgICAgICogZm91bmQgYW5kIGlz
IHVzZWQgdG8gY2FsY3VsYXRlIHRoZSBkZXJpdmVkIHN0eWxlcyBmb3IgYWxsIHJlbmRlcmluZyBv
YmplY3RzLgogICAgICAqLwogICAgIHZvaWQgc3R5bGVTZWxlY3RvckNoYW5nZWQoU3R5bGVTZWxl
Y3RvclVwZGF0ZUZsYWcpOwotICAgIHZvaWQgcmVjYWxjU3R5bGVTZWxlY3RvcigpOwogCiAgICAg
Ym9vbCB1c2VzU2libGluZ1J1bGVzKCkgY29uc3QgeyByZXR1cm4gbV91c2VzU2libGluZ1J1bGVz
IHx8IG1fdXNlc1NpYmxpbmdSdWxlc092ZXJyaWRlOyB9CiAgICAgdm9pZCBzZXRVc2VzU2libGlu
Z1J1bGVzKGJvb2wgYikgeyBtX3VzZXNTaWJsaW5nUnVsZXNPdmVycmlkZSA9IGI7IH0KQEAgLTEx
NjEsNiArMTE2MCwxMyBAQCBwcml2YXRlOgogICAgIHZvaWQgYnVpbGRBY2Nlc3NLZXlNYXAoVHJl
ZVNjb3BlKiByb290KTsKIAogICAgIHZvaWQgY3JlYXRlU3R5bGVTZWxlY3RvcigpOworICAgIHZv
aWQgY29tYmluZUNTU0ZlYXR1cmVGbGFncygpOworICAgIHZvaWQgcmVzZXRDU1NGZWF0dXJlRmxh
Z3MoKTsKKyAgICAKKyAgICBib29sIHVwZGF0ZUFjdGl2ZVN0eWxlc2hlZXRzKFN0eWxlU2VsZWN0
b3JVcGRhdGVGbGFnKTsKKyAgICB2b2lkIGNvbGxlY3RBY3RpdmVTdHlsZXNoZWV0cyhWZWN0b3I8
UmVmUHRyPFN0eWxlU2hlZXQ+ID4mKTsKKyAgICBib29sIHRlc3RBZGRlZFN0eWxlc2hlZXRSZXF1
aXJlc1N0eWxlUmVjYWxjKENTU1N0eWxlU2hlZXQqKTsKKyAgICB2b2lkIGFuYWx5emVTdHlsZXNo
ZWV0Q2hhbmdlKFN0eWxlU2VsZWN0b3JVcGRhdGVGbGFnLCBjb25zdCBWZWN0b3I8UmVmUHRyPFN0
eWxlU2hlZXQ+ID4mIG5ld1N0eWxlc2hlZXRzLCBib29sJiByZXF1aXJlc1N0eWxlU2VsZWN0b3JS
ZXNldCwgYm9vbCYgcmVxdWlyZXNTdHlsZVJlY2FsYyk7CiAKICAgICB2b2lkIGRlbGV0ZUN1c3Rv
bUZvbnRzKCk7CiAKQEAgLTEyNjQsNiArMTI3MCw3IEBAIHByaXZhdGU6CiAjZW5kaWYKIAogICAg
IFJlZlB0cjxTdHlsZVNoZWV0TGlzdD4gbV9zdHlsZVNoZWV0czsgLy8gQWxsIG9mIHRoZSBzdHls
ZXNoZWV0cyB0aGF0IGFyZSBjdXJyZW50bHkgaW4gZWZmZWN0IGZvciBvdXIgbWVkaWEgdHlwZSBh
bmQgc3R5bGVzaGVldCBzZXQuCisgICAgYm9vbCBtX2hhZEFjdGl2ZUxvYWRpbmdTdHlsZXNoZWV0
OwogICAgIAogICAgIHR5cGVkZWYgTGlzdEhhc2hTZXQ8Tm9kZSosIDMyPiBTdHlsZVNoZWV0Q2Fu
ZGlkYXRlTGlzdEhhc2hTZXQ7CiAgICAgU3R5bGVTaGVldENhbmRpZGF0ZUxpc3RIYXNoU2V0IG1f
c3R5bGVTaGVldENhbmRpZGF0ZU5vZGVzOyAvLyBBbGwgb2YgdGhlIG5vZGVzIHRoYXQgY291bGQg
cG90ZW50aWFsbHkgcHJvdmlkZSBzdHlsZXNoZWV0cyB0byB0aGUgZG9jdW1lbnQgKDxsaW5rPiwg
PHN0eWxlPiwgPD94bWwtc3R5bGVzaGVldD4pCg==
</data>
<flag name="review"
          id="121520"
          type_id="1"
          status="+"
          setter="hyatt"
    />
          </attachment>
      

    </bug>

</bugzilla>