<?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>25673</bug_id>
          
          <creation_ts>2009-05-10 12:43:00 -0700</creation_ts>
          <short_desc>[GTK] ATs should be able to select/unselect text</short_desc>
          <delta_ts>2010-09-13 05:30:17 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Accessibility</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>Linux</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>Gtk</keywords>
          <priority>P3</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>26991</dependson>
          <blocked>25531</blocked>
    
    <blocked>43919</blocked>
          <everconfirmed>0</everconfirmed>
          <reporter name="Joanmarie Diggs">jdiggs</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>apinheiro</cc>
    
    <cc>commit-queue</cc>
    
    <cc>gustavo</cc>
    
    <cc>mario</cc>
    
    <cc>mrobinson</cc>
    
    <cc>walker.willie</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>xan.lopez</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>120571</commentid>
    <comment_count>0</comment_count>
    <who name="Joanmarie Diggs">jdiggs</who>
    <bug_when>2009-05-10 12:43:00 -0700</bug_when>
    <thetext>As part of bug 16135 support was added for text selection via the keyboard. (Thanks!!)

In addition to this capability, users of refreshable braille displays expect to be able to select text using their display instead of the keyboard. In order to provide this support, assistive technologies such as Orca need to be able to select and unselect text. This can be accomplished via set_selection and remove_selection. 

(If multiple text selections can or will be possible via keyboard or mouse, add_selection should also be implemented.)

Marking the priority as P3 because the other Gtk+/Atk bugs are more critical than this one.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>263861</commentid>
    <comment_count>1</comment_count>
      <attachid>64235</attachid>
    <who name="Mario Sanchez Prada">mario</who>
    <bug_when>2010-08-12 10:15:21 -0700</bug_when>
    <thetext>Created attachment 64235
Patch proposal

Asking for review on this patch. More details in the ChangeLog entry inside the patch.

Note: Unit tests for this new stuff are provided by the patch for bug 43919 (which was filed just with the purpose of providing those unittests) because they couldn&apos;t be properly implemented without the fix for bug 26991, which is closely related to this one. That&apos;s why bug 43919 was set as dependent on these other two bugs (so patches get applied in order once reviewed+). See comments on bug 26991 and bug 43919 for more details</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>263906</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-08-12 12:15:31 -0700</bug_when>
    <thetext>Attachment 64235 did not build on gtk:
Build output: http://queues.webkit.org/results/3762092</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>263916</commentid>
    <comment_count>3</comment_count>
    <who name="Mario Sanchez Prada">mario</who>
    <bug_when>2010-08-12 12:43:46 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; Attachment 64235 [details] did not build on gtk:
&gt; Build output: http://queues.webkit.org/results/3762092

Hmm... true, but that is because it uses a new static function defined while writing the patch for bug 26991.

It would be great if we could set this bug as depending on bug 26991 then, but I can&apos;t do it. Perhaps Joanmarie could (as she&apos;s the reporter). If not possible, I can write a new patch not assuming the function defined in the other patch and later on we could do the merge, or just provide a new -updated- patch in the bug being fixed in second place.

Opinions?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>263917</commentid>
    <comment_count>4</comment_count>
    <who name="Mario Sanchez Prada">mario</who>
    <bug_when>2010-08-12 12:49:41 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; [...]
&gt; It would be great if we could set this bug as depending on bug 26991 then, but 
&gt; I can&apos;t do it. Perhaps Joanmarie could (as she&apos;s the reporter). 

Thanks Joanie! Now let&apos;s wait for 26991 to get reviewed+ :-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>272048</commentid>
    <comment_count>5</comment_count>
      <attachid>66040</attachid>
    <who name="Mario Sanchez Prada">mario</who>
    <bug_when>2010-08-31 05:19:00 -0700</bug_when>
    <thetext>Created attachment 66040
Patch proposal

Updating patch after coming back from holidays, based on comment #5 for bug 26991 (guess the same rationale applies here).
(Remember that this patch depends on patch bug 26991 to work)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>272054</commentid>
    <comment_count>6</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-08-31 05:34:07 -0700</bug_when>
    <thetext>Attachment 66040 did not build on gtk:
Build output: http://queues.webkit.org/results/3855184</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>275120</commentid>
    <comment_count>7</comment_count>
      <attachid>66735</attachid>
    <who name="Mario Sanchez Prada">mario</who>
    <bug_when>2010-09-07 10:13:40 -0700</bug_when>
    <thetext>Created attachment 66735
Path proposal + Unit tests

Attaching new up-to-date version now we (Martin and I) decided to bundle unit tests for this stuff along with this patch (instead of using a the new bug 43919 for that, which should be closed/invalidated now).

Hope this helps to get this stuff in soon O:-)

PS: Still, note this patch won&apos;t work if you don&apos;t apply patch for bug 26991 first, as it uses a new function defined there</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>275172</commentid>
    <comment_count>8</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-09-07 11:15:07 -0700</bug_when>
    <thetext>Attachment 66735 did not build on gtk:
Build output: http://queues.webkit.org/results/3961245</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>275326</commentid>
    <comment_count>9</comment_count>
      <attachid>66735</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2010-09-07 15:06:32 -0700</bug_when>
    <thetext>Comment on attachment 66735
Path proposal + Unit tests

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

Looks good, but I have a few concerns.

&gt; WebCore/accessibility/AccessibilityObject.cpp:-377
&gt; -#if PLATFORM(GTK)
Nice!

&gt; WebCore/accessibility/gtk/AccessibilityObjectWrapperAtk.cpp:1419
&gt;  static gboolean webkit_accessible_text_remove_selection(AtkText* text, gint selection_num)
Please convert non-WebKit-style variable names as you implement these methods.

&gt; WebCore/accessibility/gtk/AccessibilityObjectWrapperAtk.cpp:1435
&gt; +    if (startOffset != endOffset) {
Please use early returns.

&gt; WebCore/accessibility/gtk/AccessibilityObjectWrapperAtk.cpp:1440
&gt; +        VisiblePositionRange range = coreObject-&gt;visiblePositionRangeForRange(textRange);
Why not just use core(text)-&gt;setSelectedTextRange(PlainTextRange(caretOffset, 0)); ?

&gt; WebCore/accessibility/gtk/AccessibilityObjectWrapperAtk.cpp:1449
&gt;  static gboolean webkit_accessible_text_set_selection(AtkText* text, gint selection_num, gint start_offset, gint end_offset)
Please convert these variable names to WebKit-style as you implement these methods.

&gt; WebCore/accessibility/gtk/AccessibilityObjectWrapperAtk.cpp:1455
&gt; +    if (start_offset != end_offset) {
Please use an early return here instead.
if (start_offset == end_offset)
    return FALSE;

&gt; WebCore/accessibility/gtk/AccessibilityObjectWrapperAtk.cpp:1458
&gt; +        VisiblePositionRange range = coreObject-&gt;visiblePositionRangeForRange(textRange);
Why not just use core(text)-&gt;setSelectedTextRange(PlainTextRange(startOffset, endOffset - startOffset)); ?

&gt; WebCore/accessibility/gtk/AccessibilityObjectWrapperAtk.cpp:1472
&gt; +    VisiblePositionRange range = coreObject-&gt;visiblePositionRangeForRange(textRange);
Why not just use core(text)-&gt;setSelectedTextRange(PlainTextRange(offset, 0)); ?

&gt; WebKit/gtk/WebCoreSupport/EditorClientGtk.cpp:357
&gt; +    if (gtk_widget_has_screen(GTK_WIDGET(m_webView))) {
This change seems sane, but since we&apos;re getting into a condition of depth three (if you count the #if), perhaps we should move this logic to a new method called something like setSelectionPrimaryClipboardIfNeeded and use early returns.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>277306</commentid>
    <comment_count>10</comment_count>
      <attachid>67206</attachid>
    <who name="Mario Sanchez Prada">mario</who>
    <bug_when>2010-09-10 11:04:13 -0700</bug_when>
    <thetext>Created attachment 67206
Path proposal + Unit tests

(In reply to comment #9)
&gt; (From update of attachment 66735 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=66735&amp;action=prettypatch
&gt; 
&gt; Looks good, but I have a few concerns.

Attaching a new patch, hopefully better (still it depends on patch for 26991 so don&apos;t expect this to compile without applying the other one first).

&gt; &gt; WebCore/accessibility/gtk/AccessibilityObjectWrapperAtk.cpp:1419
&gt; &gt;  static gboolean webkit_accessible_text_remove_selection(AtkText* text, gint selection_num)
&gt; Please convert non-WebKit-style variable names as you implement these methods.

Done
 
&gt; &gt; WebCore/accessibility/gtk/AccessibilityObjectWrapperAtk.cpp:1435
&gt; &gt; +    if (startOffset != endOffset) {
&gt; Please use early returns.

Done.

&gt; &gt; WebCore/accessibility/gtk/AccessibilityObjectWrapperAtk.cpp:1440
&gt; &gt; +        VisiblePositionRange range = coreObject-&gt;visiblePositionRangeForRange(textRange);
&gt; Why not just use core(text)-&gt;setSelectedTextRange(PlainTextRange(caretOffset, 0)); ?

I removed this part now, and make removeSelection delegate on setSelection, so no more a problem.

&gt; &gt; WebCore/accessibility/gtk/AccessibilityObjectWrapperAtk.cpp:1449
&gt; &gt;  static gboolean webkit_accessible_text_set_selection(AtkText* text, gint selection_num, gint start_offset, gint end_offset)
&gt; Please convert these variable names to WebKit-style as you implement these methods.

Done.

&gt; &gt; WebCore/accessibility/gtk/AccessibilityObjectWrapperAtk.cpp:1455
&gt; &gt; +    if (start_offset != end_offset) {
&gt; Please use an early return here instead.
&gt; if (start_offset == end_offset)
&gt;     return FALSE;
&gt; 
&gt; &gt; WebCore/accessibility/gtk/AccessibilityObjectWrapperAtk.cpp:1458
&gt; &gt; +        VisiblePositionRange range = coreObject-&gt;visiblePositionRangeForRange(textRange);
&gt; Why not just use core(text)-&gt;setSelectedTextRange(PlainTextRange(startOffset, endOffset - startOffset)); ?

I tried that but didn&apos;t work fine, probably (wild guess) because it&apos;s not the same than setting a VisibleSelection. Not sure, though.
Hence I kept this part as it is.
 
&gt; &gt; WebCore/accessibility/gtk/AccessibilityObjectWrapperAtk.cpp:1472
&gt; &gt; +    VisiblePositionRange range = coreObject-&gt;visiblePositionRangeForRange(textRange);
&gt; Why not just use core(text)-&gt;setSelectedTextRange(PlainTextRange(offset, 0)); ?

I kept this part as it is, as that change didn&apos;t work (see rationale above)
 
&gt; &gt; WebKit/gtk/WebCoreSupport/EditorClientGtk.cpp:357
&gt; &gt; +    if (gtk_widget_has_screen(GTK_WIDGET(m_webView))) {
&gt; This change seems sane, but since we&apos;re getting into a condition of depth three (if you count the #if), perhaps we should move this logic to a new method called something like setSelectionPrimaryClipboardIfNeeded and use early returns.

Done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>277311</commentid>
    <comment_count>11</comment_count>
      <attachid>67206</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2010-09-10 11:12:16 -0700</bug_when>
    <thetext>Comment on attachment 67206
Path proposal + Unit tests

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

&gt; WebCore/accessibility/gtk/AccessibilityObjectAtk.cpp:112
&gt; +    if (!textLength) {
This should probably be an early return.

&gt; WebKit/gtk/WebCoreSupport/EditorClientGtk.cpp:346
&gt; +{
I like this a lot better, but I&apos;d rather see early returns. :/

Looks good! r=me, but please switch to using early returns before landing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>277323</commentid>
    <comment_count>12</comment_count>
      <attachid>67208</attachid>
    <who name="Mario Sanchez Prada">mario</who>
    <bug_when>2010-09-10 11:27:39 -0700</bug_when>
    <thetext>Created attachment 67208
Path proposal + Unit tests

(In reply to comment #11)
&gt; (From update of attachment 67206 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=67206&amp;action=prettypatch
&gt; 
&gt; &gt; WebCore/accessibility/gtk/AccessibilityObjectAtk.cpp:112
&gt; &gt; +    if (!textLength) {
&gt; This should probably be an early return.
&gt; 
&gt; &gt; WebKit/gtk/WebCoreSupport/EditorClientGtk.cpp:346
&gt; &gt; +{
&gt; I like this a lot better, but I&apos;d rather see early returns. :/
&gt; 
&gt; Looks good! r=me, but please switch to using early returns before landing.

Here you have a new version.

BTw, I&apos;m not asking for cq+ for now because we must make sure patch for 26991 are landed first (hence, I&apos;ll ask for cq+ later)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>277328</commentid>
    <comment_count>13</comment_count>
      <attachid>67208</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2010-09-10 11:35:26 -0700</bug_when>
    <thetext>Comment on attachment 67208
Path proposal + Unit tests

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

Thanks! LGTM.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>277343</commentid>
    <comment_count>14</comment_count>
      <attachid>67214</attachid>
    <who name="Mario Sanchez Prada">mario</who>
    <bug_when>2010-09-10 11:55:00 -0700</bug_when>
    <thetext>Created attachment 67214
Path proposal + Unit tests

(In reply to comment #13)
&gt; (From update of attachment 67208 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=67208&amp;action=prettypatch
&gt; 
&gt; Thanks! LGTM.

This is *the right patch*, sorry for the noise. Guess you&apos;ll need to review+ it again (but do not cq+ it yet, please)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>277347</commentid>
    <comment_count>15</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-09-10 11:56:40 -0700</bug_when>
    <thetext>Attachment 67214 did not pass style-queue:

Failed to run &quot;[&apos;WebKitTools/Scripts/check-webkit-style&apos;]&quot; exit_code: 1
WARNING: File exempt from style guide. Skipping: &quot;WebKit/gtk/tests/testatk.c&quot;
WebCore/accessibility/gtk/AccessibilityObjectWrapperAtk.cpp:1390:  webkit_accessible_text_set_selection is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
WebCore/accessibility/gtk/AccessibilityObjectWrapperAtk.cpp:1411:  webkit_accessible_text_remove_selection is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Total errors found: 2 in 8 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>277384</commentid>
    <comment_count>16</comment_count>
      <attachid>67214</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2010-09-10 12:59:17 -0700</bug_when>
    <thetext>Comment on attachment 67214
Path proposal + Unit tests

Ok.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>277654</commentid>
    <comment_count>17</comment_count>
      <attachid>67206</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-09-10 23:03:58 -0700</bug_when>
    <thetext>Comment on attachment 67206
Path proposal + Unit tests

Cleared Martin Robinson&apos;s review+ from obsolete attachment 67206 so that this bug does not appear in http://webkit.org/pending-commit.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>277655</commentid>
    <comment_count>18</comment_count>
      <attachid>67208</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-09-10 23:04:02 -0700</bug_when>
    <thetext>Comment on attachment 67208
Path proposal + Unit tests

Cleared Martin Robinson&apos;s review+ from obsolete attachment 67208 so that this bug does not appear in http://webkit.org/pending-commit.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>278127</commentid>
    <comment_count>19</comment_count>
      <attachid>67214</attachid>
    <who name="Mario Sanchez Prada">mario</who>
    <bug_when>2010-09-13 04:58:09 -0700</bug_when>
    <thetext>Comment on attachment 67214
Path proposal + Unit tests

Now that the patch for bug 26991 has already landed in the WK repository, it&apos;s time to ask for the cq+ for this patch.

Thanks!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>278132</commentid>
    <comment_count>20</comment_count>
      <attachid>67214</attachid>
    <who name="Xan Lopez">xan.lopez</who>
    <bug_when>2010-09-13 05:08:01 -0700</bug_when>
    <thetext>Comment on attachment 67214
Path proposal + Unit tests

Bang.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>278140</commentid>
    <comment_count>21</comment_count>
      <attachid>67214</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-09-13 05:30:08 -0700</bug_when>
    <thetext>Comment on attachment 67214
Path proposal + Unit tests

Clearing flags on attachment: 67214

Committed r67383: &lt;http://trac.webkit.org/changeset/67383&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>278141</commentid>
    <comment_count>22</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-09-13 05:30:17 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>64235</attachid>
            <date>2010-08-12 10:15:21 -0700</date>
            <delta_ts>2010-08-31 05:19:00 -0700</delta_ts>
            <desc>Patch proposal</desc>
            <filename>0002-2010-08-12-Mario-Sanchez-Prada-msanchez-igalia.com.patch</filename>
            <type>text/plain</type>
            <size>10004</size>
            <attacher name="Mario Sanchez Prada">mario</attacher>
            
              <data encoding="base64">RnJvbSBlN2ZlN2U3MjNiZDUxN2U4NTViYmFkYjY3Njg5MzJmZjhmMjExZjE1IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBNYXJpbyBTYW5jaGV6IFByYWRhIDxtc2FuY2hlekBpZ2FsaWEu
Y29tPgpEYXRlOiBUaHUsIDEyIEF1ZyAyMDEwIDE3OjA3OjMwICswMjAwClN1YmplY3Q6IFtQQVRD
SF0gMjAxMC0wOC0xMiAgTWFyaW8gU2FuY2hleiBQcmFkYSAgPG1zYW5jaGV6QGlnYWxpYS5jb20+
CgogICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgoKICAgICAgICBbR1RLXSBBVHMg
c2hvdWxkIGJlIGFibGUgdG8gc2VsZWN0L3Vuc2VsZWN0IHRleHQKICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjU2NzMKCiAgICAgICAgSW1wbGVtZW50IEF0
a1RleHQncyBzZXRTZWxlY3Rpb24gYW5kIHJlbW92ZVNlbGVjdGlvbiBmdW5jdGlvbnMKCiAgICAg
ICAgSW1wbGVtZW50ZWQgdGhvc2UgdHdvIGZ1bmN0aW9uLCBmb2xsb3dpbmcgdGhlIGxlYWQgb2Yg
R0FJTCdzCiAgICAgICAgaW1wbGVtZW50YXRpb24gb2YgdGhlIEF0a1RleHQgaW50ZXJmYWNlIGZv
ciBHVEsgd2lkZ2V0cy4KCiAgICAgICAgTW92ZWQgc29tZSBHVEsgc3BlY2lmaWMgY29kZSBmcm9t
IGEgaWZkZWYtZW5kaWYgcmVnaW9uIGluc2lkZQogICAgICAgIEFjY2Vzc2liaWxpdHlPYmplY3Q6
OnZpc2libGVQb3NpdGlvblJhbmdlRm9yUmFuZ2UgdG8KICAgICAgICBBY2Nlc3NpYmlsaXR5T2Jq
ZWN0QXRrLmNwcC4KCiAgICAgICAgQ2hhbmdlZCB3ZWJraXRfYWNjZXNzaWJsZV90ZXh0X3NldF9j
YXJldF9vZmZzZXQgdG8gZGlyZWN0bHkgdXNlCiAgICAgICAgdmlzaWJsZVBvc2l0aW9uUmFuZ2VG
b3JSYW5nZSBub3cgdGhhdCBpcyBub3cgbG9uZ2VyIGEgcHJvYmxlbSwgYXMKICAgICAgICBpdCB3
YXMgaW4gdGhlIHBhc3QgKG9ubHkgd29ya2VkIGZvciB0ZXh0IGNvbnRyb2xzKS4KCiAgICAgICAg
KiBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuY3BwOgogICAgICAgIChXZWJDb3Jl
OjpBY2Nlc3NpYmlsaXR5T2JqZWN0Ojp2aXNpYmxlUG9zaXRpb25SYW5nZUZvclJhbmdlKToKICAg
ICAgICAqIGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdC5oOgogICAgICAgICogYWNj
ZXNzaWJpbGl0eS9ndGsvQWNjZXNzaWJpbGl0eU9iamVjdEF0ay5jcHA6CiAgICAgICAgKFdlYkNv
cmU6OkFjY2Vzc2liaWxpdHlPYmplY3Q6OmdldExlbmd0aEZvclRleHRSYW5nZSk6CiAgICAgICAg
KiBhY2Nlc3NpYmlsaXR5L2d0ay9BY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlckF0ay5jcHA6CiAg
ICAgICAgKHdlYmtpdF9hY2Nlc3NpYmxlX3RleHRfcmVtb3ZlX3NlbGVjdGlvbik6CiAgICAgICAg
KHdlYmtpdF9hY2Nlc3NpYmxlX3RleHRfc2V0X3NlbGVjdGlvbik6CiAgICAgICAgKHdlYmtpdF9h
Y2Nlc3NpYmxlX3RleHRfc2V0X2NhcmV0X29mZnNldCk6Ci0tLQogV2ViQ29yZS9DaGFuZ2VMb2cg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDMwICsrKysrKysrKysrKwogV2Vi
Q29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuY3BwICAgICAgfCAgIDE3ICst
LS0tLS0KIFdlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmggICAgICAg
IHwgICAgMiArCiAuLi4vYWNjZXNzaWJpbGl0eS9ndGsvQWNjZXNzaWJpbGl0eU9iamVjdEF0ay5j
cHAgICB8ICAgMjMgKysrKysrKysrCiAuLi4vZ3RrL0FjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVy
QXRrLmNwcCAgICAgICAgICB8ICAgNTEgKysrKysrKysrKysrKysrKy0tLS0KIDUgZmlsZXMgY2hh
bmdlZCwgOTcgaW5zZXJ0aW9ucygrKSwgMjYgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9DaGFuZ2VMb2cgYi9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCA4ZDU3OWM1Li40YjdmMzcw
IDEwMDY0NAotLS0gYS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9XZWJDb3JlL0NoYW5nZUxvZwpA
QCAtMiw2ICsyLDM2IEBACiAKICAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCiAK
KyAgICAgICAgW0dUS10gQVRzIHNob3VsZCBiZSBhYmxlIHRvIHNlbGVjdC91bnNlbGVjdCB0ZXh0
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yNTY3Mwor
CisgICAgICAgIEltcGxlbWVudCBBdGtUZXh0J3Mgc2V0U2VsZWN0aW9uIGFuZCByZW1vdmVTZWxl
Y3Rpb24gZnVuY3Rpb25zCisKKyAgICAgICAgSW1wbGVtZW50ZWQgdGhvc2UgdHdvIGZ1bmN0aW9u
LCBmb2xsb3dpbmcgdGhlIGxlYWQgb2YgR0FJTCdzCisgICAgICAgIGltcGxlbWVudGF0aW9uIG9m
IHRoZSBBdGtUZXh0IGludGVyZmFjZSBmb3IgR1RLIHdpZGdldHMuCisKKyAgICAgICAgTW92ZWQg
c29tZSBHVEsgc3BlY2lmaWMgY29kZSBmcm9tIGEgaWZkZWYtZW5kaWYgcmVnaW9uIGluc2lkZQor
ICAgICAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0Ojp2aXNpYmxlUG9zaXRpb25SYW5nZUZvclJhbmdl
IHRvCisgICAgICAgIEFjY2Vzc2liaWxpdHlPYmplY3RBdGsuY3BwLgorCisgICAgICAgIENoYW5n
ZWQgd2Via2l0X2FjY2Vzc2libGVfdGV4dF9zZXRfY2FyZXRfb2Zmc2V0IHRvIGRpcmVjdGx5IHVz
ZQorICAgICAgICB2aXNpYmxlUG9zaXRpb25SYW5nZUZvclJhbmdlIG5vdyB0aGF0IGlzIG5vdyBs
b25nZXIgYSBwcm9ibGVtLCBhcworICAgICAgICBpdCB3YXMgaW4gdGhlIHBhc3QgKG9ubHkgd29y
a2VkIGZvciB0ZXh0IGNvbnRyb2xzKS4KKworICAgICAgICAqIGFjY2Vzc2liaWxpdHkvQWNjZXNz
aWJpbGl0eU9iamVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5T2JqZWN0
Ojp2aXNpYmxlUG9zaXRpb25SYW5nZUZvclJhbmdlKToKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5
L0FjY2Vzc2liaWxpdHlPYmplY3QuaDoKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L2d0ay9BY2Nl
c3NpYmlsaXR5T2JqZWN0QXRrLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlP
YmplY3Q6OmdldExlbmd0aEZvclRleHRSYW5nZSk6CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9n
dGsvQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJBdGsuY3BwOgorICAgICAgICAod2Via2l0X2Fj
Y2Vzc2libGVfdGV4dF9yZW1vdmVfc2VsZWN0aW9uKToKKyAgICAgICAgKHdlYmtpdF9hY2Nlc3Np
YmxlX3RleHRfc2V0X3NlbGVjdGlvbik6CisgICAgICAgICh3ZWJraXRfYWNjZXNzaWJsZV90ZXh0
X3NldF9jYXJldF9vZmZzZXQpOgorCisyMDEwLTA4LTEyICBNYXJpbyBTYW5jaGV6IFByYWRhICA8
bXNhbmNoZXpAaWdhbGlhLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKwogICAgICAgICBbR3RrXSBnZXRfbl9zZWxlY3Rpb25zIGFuZCBnZXRfc2VsZWN0aW9uIGZh
aWwgd2hlbiBzZWxlY3RpbmcgdGV4dCBhY3Jvc3Mgb2JqZWN0IGJvdW5kYXJpZXMKICAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI2OTkxCiAKZGlmZiAtLWdp
dCBhL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmNwcCBiL1dlYkNv
cmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmNwcAppbmRleCBhNmJiMDMzLi4z
ZGRjZGM1IDEwMDY0NAotLS0gYS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9i
amVjdC5jcHAKKysrIGIvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3Qu
Y3BwCkBAIC0zNzMsMjIgKzM3Myw3IEBAIFZpc2libGVQb3NpdGlvblJhbmdlIEFjY2Vzc2liaWxp
dHlPYmplY3Q6OnN0eWxlUmFuZ2VGb3JQb3NpdGlvbihjb25zdCBWaXNpYmxlUG9zCiAvLyBOT1RF
OiBDb25zaWRlciBwcm92aWRpbmcgdGhpcyB1dGlsaXR5IG1ldGhvZCBhcyBBWCBBUEkKIFZpc2li
bGVQb3NpdGlvblJhbmdlIEFjY2Vzc2liaWxpdHlPYmplY3Q6OnZpc2libGVQb3NpdGlvblJhbmdl
Rm9yUmFuZ2UoY29uc3QgUGxhaW5UZXh0UmFuZ2UmIHJhbmdlKSBjb25zdAogewotICAgIHVuc2ln
bmVkIHRleHRMZW5ndGggPSB0ZXh0KCkubGVuZ3RoKCk7Ci0jaWYgUExBVEZPUk0oR1RLKQotICAg
IC8vIEd0ayBBVHMgbmVlZCB0aGlzIGZvciBhbGwgdGV4dCBvYmplY3RzOyBub3QganVzdCB0ZXh0
IGNvbnRyb2xzLgotICAgIGlmICghdGV4dExlbmd0aCkgewotICAgICAgICBOb2RlKiBub2RlID0g
dGhpcy0+bm9kZSgpOwotICAgICAgICBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gbm9kZSA/IG5v
ZGUtPnJlbmRlcmVyKCkgOiAwOwotICAgICAgICBpZiAocmVuZGVyZXIgJiYgcmVuZGVyZXItPmlz
VGV4dCgpKSB7Ci0gICAgICAgICAgICBSZW5kZXJUZXh0KiByZW5kZXJUZXh0ID0gdG9SZW5kZXJU
ZXh0KHJlbmRlcmVyKTsKLSAgICAgICAgICAgIHRleHRMZW5ndGggPSByZW5kZXJUZXh0ID8gcmVu
ZGVyVGV4dC0+dGV4dExlbmd0aCgpIDogMDsKLSAgICAgICAgfQotICAgICAgICAvLyBHZXQgdGhl
IHRleHQgbGVuZ3RoIGZyb20gdGhlIGVsZW1lbnRzIHVuZGVyIHRoZQotICAgICAgICAvLyBhY2Nl
c3NpYmlsaXR5IG9iamVjdCBpZiB0aGUgdmFsdWUgaXMgc3RpbGwgemVyby4KLSAgICAgICAgaWYg
KCF0ZXh0TGVuZ3RoICYmIGFsbG93c1RleHRSYW5nZXMoKSkKLSAgICAgICAgICAgIHRleHRMZW5n
dGggPSB0ZXh0VW5kZXJFbGVtZW50KCkubGVuZ3RoKCk7Ci0gICAgfQotI2VuZGlmCisgICAgdW5z
aWduZWQgdGV4dExlbmd0aCA9IGdldExlbmd0aEZvclRleHRSYW5nZSgpOwogICAgIGlmIChyYW5n
ZS5zdGFydCArIHJhbmdlLmxlbmd0aCA+IHRleHRMZW5ndGgpCiAgICAgICAgIHJldHVybiBWaXNp
YmxlUG9zaXRpb25SYW5nZSgpOwogCmRpZmYgLS1naXQgYS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkv
QWNjZXNzaWJpbGl0eU9iamVjdC5oIGIvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxp
dHlPYmplY3QuaAppbmRleCAwZTQ0ZDFiLi5lOGY2ZDFiIDEwMDY0NAotLS0gYS9XZWJDb3JlL2Fj
Y2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdC5oCisrKyBiL1dlYkNvcmUvYWNjZXNzaWJp
bGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmgKQEAgLTU3NCw4ICs1NzQsMTAgQEAgcHJvdGVjdGVk
OgogICAgIAogI2lmIFBMQVRGT1JNKEdUSykKICAgICBib29sIGFsbG93c1RleHRSYW5nZXMoKSBj
b25zdDsKKyAgICB1bnNpZ25lZCBnZXRMZW5ndGhGb3JUZXh0UmFuZ2UoKSBjb25zdDsKICNlbHNl
CiAgICAgYm9vbCBhbGxvd3NUZXh0UmFuZ2VzKCkgY29uc3QgeyByZXR1cm4gaXNUZXh0Q29udHJv
bCgpOyB9CisgICAgdW5zaWduZWQgZ2V0TGVuZ3RoRm9yVGV4dFJhbmdlKCkgY29uc3QgeyByZXR1
cm4gdGV4dCgpLmxlbmd0aCgpOyB9CiAjZW5kaWYKIAogI2lmIFBMQVRGT1JNKE1BQykKZGlmZiAt
LWdpdCBhL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9ndGsvQWNjZXNzaWJpbGl0eU9iamVjdEF0ay5j
cHAgYi9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvZ3RrL0FjY2Vzc2liaWxpdHlPYmplY3RBdGsuY3Bw
CmluZGV4IGQwMDU3NGIuLjQ2MGZhOTAgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYWNjZXNzaWJpbGl0
eS9ndGsvQWNjZXNzaWJpbGl0eU9iamVjdEF0ay5jcHAKKysrIGIvV2ViQ29yZS9hY2Nlc3NpYmls
aXR5L2d0ay9BY2Nlc3NpYmlsaXR5T2JqZWN0QXRrLmNwcApAQCAtMjAsNiArMjAsOCBAQAogCiAj
aW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiQWNjZXNzaWJpbGl0eU9iamVjdC5oIgorI2lu
Y2x1ZGUgIlJlbmRlck9iamVjdC5oIgorI2luY2x1ZGUgIlJlbmRlclRleHQuaCIKIAogI2luY2x1
ZGUgPGdsaWItb2JqZWN0Lmg+CiAKQEAgLTk4LDYgKzEwMCwyNyBAQCBib29sIEFjY2Vzc2liaWxp
dHlPYmplY3Q6OmFsbG93c1RleHRSYW5nZXMoKSBjb25zdAogICAgIHJldHVybiBpc1RleHRDb250
cm9sKCkgfHwgaXNXZWJBcmVhKCkgfHwgaXNHcm91cCgpIHx8IGlzTGluaygpIHx8IGlzSGVhZGlu
ZygpOwogfQogCit1bnNpZ25lZCBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpnZXRMZW5ndGhGb3JUZXh0
UmFuZ2UoKSBjb25zdAoreworICAgIHVuc2lnbmVkIHRleHRMZW5ndGggPSB0ZXh0KCkubGVuZ3Ro
KCk7CisKKyAgICAvLyBHdGsgQVRzIG5lZWQgdGhpcyBmb3IgYWxsIHRleHQgb2JqZWN0czsgbm90
IGp1c3QgdGV4dCBjb250cm9scy4KKyAgICBpZiAoIXRleHRMZW5ndGgpIHsKKyAgICAgICAgTm9k
ZSogbm9kZSA9IHRoaXMtPm5vZGUoKTsKKyAgICAgICAgUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9
IG5vZGUgPyBub2RlLT5yZW5kZXJlcigpIDogMDsKKyAgICAgICAgaWYgKHJlbmRlcmVyICYmIHJl
bmRlcmVyLT5pc1RleHQoKSkgeworICAgICAgICAgICAgUmVuZGVyVGV4dCogcmVuZGVyVGV4dCA9
IHRvUmVuZGVyVGV4dChyZW5kZXJlcik7CisgICAgICAgICAgICB0ZXh0TGVuZ3RoID0gcmVuZGVy
VGV4dCA/IHJlbmRlclRleHQtPnRleHRMZW5ndGgoKSA6IDA7CisgICAgICAgIH0KKyAgICAgICAg
Ly8gR2V0IHRoZSB0ZXh0IGxlbmd0aCBmcm9tIHRoZSBlbGVtZW50cyB1bmRlciB0aGUKKyAgICAg
ICAgLy8gYWNjZXNzaWJpbGl0eSBvYmplY3QgaWYgdGhlIHZhbHVlIGlzIHN0aWxsIHplcm8uCisg
ICAgICAgIGlmICghdGV4dExlbmd0aCAmJiBhbGxvd3NUZXh0UmFuZ2VzKCkpCisgICAgICAgICAg
ICB0ZXh0TGVuZ3RoID0gdGV4dFVuZGVyRWxlbWVudCgpLmxlbmd0aCgpOworICAgIH0KKworICAg
IHJldHVybiB0ZXh0TGVuZ3RoOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRp
ZiAvLyBIQVZFKEFDQ0VTU0lCSUxJVFkpCmRpZmYgLS1naXQgYS9XZWJDb3JlL2FjY2Vzc2liaWxp
dHkvZ3RrL0FjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyQXRrLmNwcCBiL1dlYkNvcmUvYWNjZXNz
aWJpbGl0eS9ndGsvQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJBdGsuY3BwCmluZGV4IDYxYzM5
YjguLmQ3YzNjZTQgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9ndGsvQWNjZXNz
aWJpbGl0eU9iamVjdFdyYXBwZXJBdGsuY3BwCisrKyBiL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9n
dGsvQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJBdGsuY3BwCkBAIC0xNDE3LDEzICsxNDE3LDUw
IEBAIHN0YXRpYyBnYm9vbGVhbiB3ZWJraXRfYWNjZXNzaWJsZV90ZXh0X2FkZF9zZWxlY3Rpb24o
QXRrVGV4dCogdGV4dCwgZ2ludCBzdGFydF9vCiAKIHN0YXRpYyBnYm9vbGVhbiB3ZWJraXRfYWNj
ZXNzaWJsZV90ZXh0X3JlbW92ZV9zZWxlY3Rpb24oQXRrVGV4dCogdGV4dCwgZ2ludCBzZWxlY3Rp
b25fbnVtKQogewotICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgLy8gV2ViQ29yZSBkb2VzIG5v
dCBzdXBwb3J0IG11bHRpcGxlIHNlbGVjdGlvbiwgc28gYW55dGhpbmcgYnV0IDAgZG9lcyBub3Qg
bWFrZSBzZW5zZSBmb3Igbm93LgorICAgIGlmIChzZWxlY3Rpb25fbnVtKQorICAgICAgICByZXR1
cm4gRkFMU0U7CisKKyAgICAvLyBEbyBub3RoaW5nIGlmIGN1cnJlbnQgc2VsZWN0aW9uIGRvZXNu
J3QgYmVsb25nIHRvIHRoZSBvYmplY3QKKyAgICBpZiAoIXdlYmtpdF9hY2Nlc3NpYmxlX3RleHRf
Z2V0X25fc2VsZWN0aW9ucyh0ZXh0KSkKKyAgICAgICAgcmV0dXJuIEZBTFNFOworCisgICAgLy8g
R2V0IHRoZSBzdGFydCBhbmQgZW5kIG9mZnNldHMgb2YgY3VycmVudCBzZWxlY3Rpb24KKyAgICBB
Y2Nlc3NpYmlsaXR5T2JqZWN0KiBjb3JlT2JqZWN0ID0gY29yZSh0ZXh0KTsKKyAgICBWaXNpYmxl
U2VsZWN0aW9uIHNlbGVjdGlvbiA9IGNvcmVPYmplY3QtPnNlbGVjdGlvbigpOworICAgIGdpbnQg
c3RhcnRPZmZzZXQ7CisgICAgZ2ludCBlbmRPZmZzZXQ7CisgICAgZ2V0U2VsZWN0aW9uT2Zmc2V0
c0Zvck9iamVjdChjb3JlT2JqZWN0LCBzZWxlY3Rpb24sIHN0YXJ0T2Zmc2V0LCBlbmRPZmZzZXQp
OworCisgICAgaWYgKHN0YXJ0T2Zmc2V0ICE9IGVuZE9mZnNldCkgeworICAgICAgICAvLyBTZXQg
YSBuZXcgMC1zaXplZCBzZWxlY3Rpb24gdG8gdGhlIGNhcmV0IHBvc2l0aW9uLCBpbiBvcmRlcgor
ICAgICAgICAvLyB0byBzaW11bGF0ZSBzZWxlY3Rpb24gcmVtb3ZhbCAoR0FJTCBzdHlsZSkKKyAg
ICAgICAgZ2ludCBjYXJldE9mZnNldCA9IHdlYmtpdF9hY2Nlc3NpYmxlX3RleHRfZ2V0X2NhcmV0
X29mZnNldCh0ZXh0KTsKKyAgICAgICAgUGxhaW5UZXh0UmFuZ2UgdGV4dFJhbmdlKGNhcmV0T2Zm
c2V0LCAwKTsKKyAgICAgICAgVmlzaWJsZVBvc2l0aW9uUmFuZ2UgcmFuZ2UgPSBjb3JlT2JqZWN0
LT52aXNpYmxlUG9zaXRpb25SYW5nZUZvclJhbmdlKHRleHRSYW5nZSk7CisKKyAgICAgICAgY29y
ZU9iamVjdC0+c2V0U2VsZWN0ZWRWaXNpYmxlUG9zaXRpb25SYW5nZShyYW5nZSk7CisgICAgICAg
IHJldHVybiBUUlVFOworICAgIH0KKwogICAgIHJldHVybiBGQUxTRTsKIH0KIAogc3RhdGljIGdi
b29sZWFuIHdlYmtpdF9hY2Nlc3NpYmxlX3RleHRfc2V0X3NlbGVjdGlvbihBdGtUZXh0KiB0ZXh0
LCBnaW50IHNlbGVjdGlvbl9udW0sIGdpbnQgc3RhcnRfb2Zmc2V0LCBnaW50IGVuZF9vZmZzZXQp
CiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICAvLyBXZWJDb3JlIGRvZXMgbm90IHN1cHBv
cnQgbXVsdGlwbGUgc2VsZWN0aW9uLCBzbyBhbnl0aGluZyBidXQgMCBkb2VzIG5vdCBtYWtlIHNl
bnNlIGZvciBub3cuCisgICAgaWYgKHNlbGVjdGlvbl9udW0pCisgICAgICAgIHJldHVybiBGQUxT
RTsKKworICAgIGlmIChzdGFydF9vZmZzZXQgIT0gZW5kX29mZnNldCkgeworICAgICAgICBBY2Nl
c3NpYmlsaXR5T2JqZWN0KiBjb3JlT2JqZWN0ID0gY29yZSh0ZXh0KTsKKyAgICAgICAgUGxhaW5U
ZXh0UmFuZ2UgdGV4dFJhbmdlKHN0YXJ0X29mZnNldCwgZW5kX29mZnNldCAtIHN0YXJ0X29mZnNl
dCk7CisgICAgICAgIFZpc2libGVQb3NpdGlvblJhbmdlIHJhbmdlID0gY29yZU9iamVjdC0+dmlz
aWJsZVBvc2l0aW9uUmFuZ2VGb3JSYW5nZSh0ZXh0UmFuZ2UpOworCisgICAgICAgIGNvcmVPYmpl
Y3QtPnNldFNlbGVjdGVkVmlzaWJsZVBvc2l0aW9uUmFuZ2UocmFuZ2UpOworICAgICAgICByZXR1
cm4gVFJVRTsKKyAgICB9CisKICAgICByZXR1cm4gRkFMU0U7CiB9CiAKQEAgLTE0MzEsMTQgKzE0
NjgsOCBAQCBzdGF0aWMgZ2Jvb2xlYW4gd2Via2l0X2FjY2Vzc2libGVfdGV4dF9zZXRfY2FyZXRf
b2Zmc2V0KEF0a1RleHQqIHRleHQsIGdpbnQgb2ZmcwogewogICAgIEFjY2Vzc2liaWxpdHlPYmpl
Y3QqIGNvcmVPYmplY3QgPSBjb3JlKHRleHQpOwogCi0gICAgLy8gRklYTUU6IFdlIG5lZWQgdG8g
cmVpbXBsZW1lbnQgdmlzaWJsZVBvc2l0aW9uUmFuZ2VGb3JSYW5nZSBoZXJlCi0gICAgLy8gYmVj
YXVzZSB0aGUgYWN0dWFsIGZ1bmN0aW9uIGNoZWNrcyB0aGUgb2Zmc2V0IGlzIHdpdGhpbiB0aGUK
LSAgICAvLyBib3VuZGFyaWVzIG9mIHRleHQoKS5sZW5ndGgoKSwgYnV0IHRleHQoKSBvbmx5IHdv
cmtzIGZvciB0ZXh0Ci0gICAgLy8gY29udHJvbHMuLi4KLSAgICBWaXNpYmxlUG9zaXRpb24gc3Rh
cnRQb3NpdGlvbiA9IGNvcmVPYmplY3QtPnZpc2libGVQb3NpdGlvbkZvckluZGV4KG9mZnNldCk7
Ci0gICAgc3RhcnRQb3NpdGlvbi5zZXRBZmZpbml0eShET1dOU1RSRUFNKTsKLSAgICBWaXNpYmxl
UG9zaXRpb24gZW5kUG9zaXRpb24gPSBjb3JlT2JqZWN0LT52aXNpYmxlUG9zaXRpb25Gb3JJbmRl
eChvZmZzZXQpOwotICAgIFZpc2libGVQb3NpdGlvblJhbmdlIHJhbmdlID0gVmlzaWJsZVBvc2l0
aW9uUmFuZ2Uoc3RhcnRQb3NpdGlvbiwgZW5kUG9zaXRpb24pOworICAgIFBsYWluVGV4dFJhbmdl
IHRleHRSYW5nZShvZmZzZXQsIDApOworICAgIFZpc2libGVQb3NpdGlvblJhbmdlIHJhbmdlID0g
Y29yZU9iamVjdC0+dmlzaWJsZVBvc2l0aW9uUmFuZ2VGb3JSYW5nZSh0ZXh0UmFuZ2UpOwogCiAg
ICAgY29yZU9iamVjdC0+c2V0U2VsZWN0ZWRWaXNpYmxlUG9zaXRpb25SYW5nZShyYW5nZSk7CiAg
ICAgcmV0dXJuIFRSVUU7Ci0tIAoxLjcuMC40Cgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>66040</attachid>
            <date>2010-08-31 05:19:00 -0700</date>
            <delta_ts>2010-09-07 10:13:40 -0700</delta_ts>
            <desc>Patch proposal</desc>
            <filename>0002-2010-08-31-Mario-Sanchez-Prada-msanchez-igalia.com.patch</filename>
            <type>text/plain</type>
            <size>9838</size>
            <attacher name="Mario Sanchez Prada">mario</attacher>
            
              <data encoding="base64">RnJvbSA5ZTY3ODA2NTA1N2U3NWVhY2RmM2M4MTVlNDRiMzM1YjkyMmE4ZjkzIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBNYXJpbyBTYW5jaGV6IFByYWRhIDxtc2FuY2hlekBpZ2FsaWEu
Y29tPgpEYXRlOiBUaHUsIDEyIEF1ZyAyMDEwIDE3OjA3OjMwICswMjAwClN1YmplY3Q6IFtQQVRD
SCAyLzNdIDIwMTAtMDgtMzEgIE1hcmlvIFNhbmNoZXogUHJhZGEgIDxtc2FuY2hlekBpZ2FsaWEu
Y29tPgoKICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KCiAgICAgICAgW0dUS10g
QVRzIHNob3VsZCBiZSBhYmxlIHRvIHNlbGVjdC91bnNlbGVjdCB0ZXh0CiAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI1NjczCgogICAgICAgIEltcGxlbWVu
dCBBdGtUZXh0J3Mgc2V0U2VsZWN0aW9uIGFuZCByZW1vdmVTZWxlY3Rpb24gZnVuY3Rpb25zCgog
ICAgICAgICogYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmNwcDoKICAgICAgICAo
V2ViQ29yZTo6QWNjZXNzaWJpbGl0eU9iamVjdDo6dmlzaWJsZVBvc2l0aW9uUmFuZ2VGb3JSYW5n
ZSk6CiAgICAgICAgTW92ZWQgc29tZSBHVEsgc3BlY2lmaWMgY29kZSBmcm9tIGEgaWZkZWYtZW5k
aWYgcmVnaW9uIHRvCiAgICAgICAgQWNjZXNzaWJpbGl0eU9iamVjdEF0ay5jcHAKICAgICAgICAq
IGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdC5oOgogICAgICAgICogYWNjZXNzaWJp
bGl0eS9ndGsvQWNjZXNzaWJpbGl0eU9iamVjdEF0ay5jcHA6CiAgICAgICAgKFdlYkNvcmU6OkFj
Y2Vzc2liaWxpdHlPYmplY3Q6OmdldExlbmd0aEZvclRleHRSYW5nZSk6IE5ldy4KICAgICAgICAq
IGFjY2Vzc2liaWxpdHkvZ3RrL0FjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyQXRrLmNwcDoKICAg
ICAgICAod2Via2l0X2FjY2Vzc2libGVfdGV4dF9yZW1vdmVfc2VsZWN0aW9uKTogSW1wbGVtZW50
ZWQgZm9sbG93aW5nCiAgICAgICAgdGhlIGxlYWQgb2YgR0FJTCdzIGltcGxlbWVudGF0aW9uIG9m
IHRoZSBBdGtUZXh0IGludGVyZmFjZS4KICAgICAgICAod2Via2l0X2FjY2Vzc2libGVfdGV4dF9z
ZXRfc2VsZWN0aW9uKTogSW1wbGVtZW50ZWQgZm9sbG93aW5nCiAgICAgICAgdGhlIGxlYWQgb2Yg
R0FJTCdzIGltcGxlbWVudGF0aW9uIG9mIHRoZSBBdGtUZXh0IGludGVyZmFjZS4KICAgICAgICAo
d2Via2l0X2FjY2Vzc2libGVfdGV4dF9zZXRfY2FyZXRfb2Zmc2V0KTogQ2hhbmdlZCB0byBkaXJl
Y3RseSB1c2UKICAgICAgICB2aXNpYmxlUG9zaXRpb25SYW5nZUZvclJhbmdlIG5vdyB0aGF0IHRo
ZXJlJ3Mgbm8gbG9uZ2VyIGEgcHJvYmxlbQogICAgICAgIHdpdGggdGhhdCwgYXMgaXQgd2FzIGlu
IHRoZSBwYXN0IChvbmx5IHdvcmtlZCBmb3IgdGV4dCBjb250cm9scykuCi0tLQogV2ViQ29yZS9D
aGFuZ2VMb2cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDI1ICsrKysrKysr
KysKIFdlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmNwcCAgICAgIHwg
ICAxNyArLS0tLS0tCiBXZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdC5o
ICAgICAgICB8ICAgIDIgKwogLi4uL2FjY2Vzc2liaWxpdHkvZ3RrL0FjY2Vzc2liaWxpdHlPYmpl
Y3RBdGsuY3BwICAgfCAgIDIzICsrKysrKysrKwogLi4uL2d0ay9BY2Nlc3NpYmlsaXR5T2JqZWN0
V3JhcHBlckF0ay5jcHAgICAgICAgICAgfCAgIDUwICsrKysrKysrKysrKysrKystLS0tCiA1IGZp
bGVzIGNoYW5nZWQsIDkxIGluc2VydGlvbnMoKyksIDI2IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdp
dCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYmQxOGYyNS4u
MGYyOTBjYiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2ViQ29yZS9DaGFu
Z2VMb2cKQEAgLTIsNiArMiwzMSBAQAogCiAgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgogCisgICAgICAgIFtHVEtdIEFUcyBzaG91bGQgYmUgYWJsZSB0byBzZWxlY3QvdW5zZWxl
Y3QgdGV4dAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MjU2NzMKKworICAgICAgICBJbXBsZW1lbnQgQXRrVGV4dCdzIHNldFNlbGVjdGlvbiBhbmQgcmVt
b3ZlU2VsZWN0aW9uIGZ1bmN0aW9ucworCisgICAgICAgICogYWNjZXNzaWJpbGl0eS9BY2Nlc3Np
YmlsaXR5T2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlPYmplY3Q6
OnZpc2libGVQb3NpdGlvblJhbmdlRm9yUmFuZ2UpOgorICAgICAgICBNb3ZlZCBzb21lIEdUSyBz
cGVjaWZpYyBjb2RlIGZyb20gYSBpZmRlZi1lbmRpZiByZWdpb24gdG8KKyAgICAgICAgQWNjZXNz
aWJpbGl0eU9iamVjdEF0ay5jcHAKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxp
dHlPYmplY3QuaDoKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L2d0ay9BY2Nlc3NpYmlsaXR5T2Jq
ZWN0QXRrLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlPYmplY3Q6OmdldExl
bmd0aEZvclRleHRSYW5nZSk6IE5ldy4KKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L2d0ay9BY2Nl
c3NpYmlsaXR5T2JqZWN0V3JhcHBlckF0ay5jcHA6CisgICAgICAgICh3ZWJraXRfYWNjZXNzaWJs
ZV90ZXh0X3JlbW92ZV9zZWxlY3Rpb24pOiBJbXBsZW1lbnRlZCBmb2xsb3dpbmcKKyAgICAgICAg
dGhlIGxlYWQgb2YgR0FJTCdzIGltcGxlbWVudGF0aW9uIG9mIHRoZSBBdGtUZXh0IGludGVyZmFj
ZS4KKyAgICAgICAgKHdlYmtpdF9hY2Nlc3NpYmxlX3RleHRfc2V0X3NlbGVjdGlvbik6IEltcGxl
bWVudGVkIGZvbGxvd2luZworICAgICAgICB0aGUgbGVhZCBvZiBHQUlMJ3MgaW1wbGVtZW50YXRp
b24gb2YgdGhlIEF0a1RleHQgaW50ZXJmYWNlLgorICAgICAgICAod2Via2l0X2FjY2Vzc2libGVf
dGV4dF9zZXRfY2FyZXRfb2Zmc2V0KTogQ2hhbmdlZCB0byBkaXJlY3RseSB1c2UKKyAgICAgICAg
dmlzaWJsZVBvc2l0aW9uUmFuZ2VGb3JSYW5nZSBub3cgdGhhdCB0aGVyZSdzIG5vIGxvbmdlciBh
IHByb2JsZW0KKyAgICAgICAgd2l0aCB0aGF0LCBhcyBpdCB3YXMgaW4gdGhlIHBhc3QgKG9ubHkg
d29ya2VkIGZvciB0ZXh0IGNvbnRyb2xzKS4KKworMjAxMC0wOC0zMSAgTWFyaW8gU2FuY2hleiBQ
cmFkYSAgPG1zYW5jaGV6QGlnYWxpYS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKICAgICAgICAgW0d0a10gZ2V0X25fc2VsZWN0aW9ucyBhbmQgZ2V0X3NlbGVj
dGlvbiBmYWlsIHdoZW4gc2VsZWN0aW5nIHRleHQgYWNyb3NzIG9iamVjdCBib3VuZGFyaWVzCiAg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yNjk5MQogCmRp
ZmYgLS1naXQgYS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdC5jcHAg
Yi9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdC5jcHAKaW5kZXggYTZi
YjAzMy4uM2RkY2RjNSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2li
aWxpdHlPYmplY3QuY3BwCisrKyBiL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5
T2JqZWN0LmNwcApAQCAtMzczLDIyICszNzMsNyBAQCBWaXNpYmxlUG9zaXRpb25SYW5nZSBBY2Nl
c3NpYmlsaXR5T2JqZWN0OjpzdHlsZVJhbmdlRm9yUG9zaXRpb24oY29uc3QgVmlzaWJsZVBvcwog
Ly8gTk9URTogQ29uc2lkZXIgcHJvdmlkaW5nIHRoaXMgdXRpbGl0eSBtZXRob2QgYXMgQVggQVBJ
CiBWaXNpYmxlUG9zaXRpb25SYW5nZSBBY2Nlc3NpYmlsaXR5T2JqZWN0Ojp2aXNpYmxlUG9zaXRp
b25SYW5nZUZvclJhbmdlKGNvbnN0IFBsYWluVGV4dFJhbmdlJiByYW5nZSkgY29uc3QKIHsKLSAg
ICB1bnNpZ25lZCB0ZXh0TGVuZ3RoID0gdGV4dCgpLmxlbmd0aCgpOwotI2lmIFBMQVRGT1JNKEdU
SykKLSAgICAvLyBHdGsgQVRzIG5lZWQgdGhpcyBmb3IgYWxsIHRleHQgb2JqZWN0czsgbm90IGp1
c3QgdGV4dCBjb250cm9scy4KLSAgICBpZiAoIXRleHRMZW5ndGgpIHsKLSAgICAgICAgTm9kZSog
bm9kZSA9IHRoaXMtPm5vZGUoKTsKLSAgICAgICAgUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IG5v
ZGUgPyBub2RlLT5yZW5kZXJlcigpIDogMDsKLSAgICAgICAgaWYgKHJlbmRlcmVyICYmIHJlbmRl
cmVyLT5pc1RleHQoKSkgewotICAgICAgICAgICAgUmVuZGVyVGV4dCogcmVuZGVyVGV4dCA9IHRv
UmVuZGVyVGV4dChyZW5kZXJlcik7Ci0gICAgICAgICAgICB0ZXh0TGVuZ3RoID0gcmVuZGVyVGV4
dCA/IHJlbmRlclRleHQtPnRleHRMZW5ndGgoKSA6IDA7Ci0gICAgICAgIH0KLSAgICAgICAgLy8g
R2V0IHRoZSB0ZXh0IGxlbmd0aCBmcm9tIHRoZSBlbGVtZW50cyB1bmRlciB0aGUKLSAgICAgICAg
Ly8gYWNjZXNzaWJpbGl0eSBvYmplY3QgaWYgdGhlIHZhbHVlIGlzIHN0aWxsIHplcm8uCi0gICAg
ICAgIGlmICghdGV4dExlbmd0aCAmJiBhbGxvd3NUZXh0UmFuZ2VzKCkpCi0gICAgICAgICAgICB0
ZXh0TGVuZ3RoID0gdGV4dFVuZGVyRWxlbWVudCgpLmxlbmd0aCgpOwotICAgIH0KLSNlbmRpZgor
ICAgIHVuc2lnbmVkIHRleHRMZW5ndGggPSBnZXRMZW5ndGhGb3JUZXh0UmFuZ2UoKTsKICAgICBp
ZiAocmFuZ2Uuc3RhcnQgKyByYW5nZS5sZW5ndGggPiB0ZXh0TGVuZ3RoKQogICAgICAgICByZXR1
cm4gVmlzaWJsZVBvc2l0aW9uUmFuZ2UoKTsKIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9hY2Nlc3Np
YmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuaCBiL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nl
c3NpYmlsaXR5T2JqZWN0LmgKaW5kZXggMGU0NGQxYi4uZThmNmQxYiAxMDA2NDQKLS0tIGEvV2Vi
Q29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuaAorKysgYi9XZWJDb3JlL2Fj
Y2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdC5oCkBAIC01NzQsOCArNTc0LDEwIEBAIHBy
b3RlY3RlZDoKICAgICAKICNpZiBQTEFURk9STShHVEspCiAgICAgYm9vbCBhbGxvd3NUZXh0UmFu
Z2VzKCkgY29uc3Q7CisgICAgdW5zaWduZWQgZ2V0TGVuZ3RoRm9yVGV4dFJhbmdlKCkgY29uc3Q7
CiAjZWxzZQogICAgIGJvb2wgYWxsb3dzVGV4dFJhbmdlcygpIGNvbnN0IHsgcmV0dXJuIGlzVGV4
dENvbnRyb2woKTsgfQorICAgIHVuc2lnbmVkIGdldExlbmd0aEZvclRleHRSYW5nZSgpIGNvbnN0
IHsgcmV0dXJuIHRleHQoKS5sZW5ndGgoKTsgfQogI2VuZGlmCiAKICNpZiBQTEFURk9STShNQUMp
CmRpZmYgLS1naXQgYS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvZ3RrL0FjY2Vzc2liaWxpdHlPYmpl
Y3RBdGsuY3BwIGIvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2d0ay9BY2Nlc3NpYmlsaXR5T2JqZWN0
QXRrLmNwcAppbmRleCBkMDA1NzRiLi40NjBmYTkwIDEwMDY0NAotLS0gYS9XZWJDb3JlL2FjY2Vz
c2liaWxpdHkvZ3RrL0FjY2Vzc2liaWxpdHlPYmplY3RBdGsuY3BwCisrKyBiL1dlYkNvcmUvYWNj
ZXNzaWJpbGl0eS9ndGsvQWNjZXNzaWJpbGl0eU9iamVjdEF0ay5jcHAKQEAgLTIwLDYgKzIwLDgg
QEAKIAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkFjY2Vzc2liaWxpdHlPYmplY3Qu
aCIKKyNpbmNsdWRlICJSZW5kZXJPYmplY3QuaCIKKyNpbmNsdWRlICJSZW5kZXJUZXh0LmgiCiAK
ICNpbmNsdWRlIDxnbGliLW9iamVjdC5oPgogCkBAIC05OCw2ICsxMDAsMjcgQEAgYm9vbCBBY2Nl
c3NpYmlsaXR5T2JqZWN0OjphbGxvd3NUZXh0UmFuZ2VzKCkgY29uc3QKICAgICByZXR1cm4gaXNU
ZXh0Q29udHJvbCgpIHx8IGlzV2ViQXJlYSgpIHx8IGlzR3JvdXAoKSB8fCBpc0xpbmsoKSB8fCBp
c0hlYWRpbmcoKTsKIH0KIAordW5zaWduZWQgQWNjZXNzaWJpbGl0eU9iamVjdDo6Z2V0TGVuZ3Ro
Rm9yVGV4dFJhbmdlKCkgY29uc3QKK3sKKyAgICB1bnNpZ25lZCB0ZXh0TGVuZ3RoID0gdGV4dCgp
Lmxlbmd0aCgpOworCisgICAgLy8gR3RrIEFUcyBuZWVkIHRoaXMgZm9yIGFsbCB0ZXh0IG9iamVj
dHM7IG5vdCBqdXN0IHRleHQgY29udHJvbHMuCisgICAgaWYgKCF0ZXh0TGVuZ3RoKSB7CisgICAg
ICAgIE5vZGUqIG5vZGUgPSB0aGlzLT5ub2RlKCk7CisgICAgICAgIFJlbmRlck9iamVjdCogcmVu
ZGVyZXIgPSBub2RlID8gbm9kZS0+cmVuZGVyZXIoKSA6IDA7CisgICAgICAgIGlmIChyZW5kZXJl
ciAmJiByZW5kZXJlci0+aXNUZXh0KCkpIHsKKyAgICAgICAgICAgIFJlbmRlclRleHQqIHJlbmRl
clRleHQgPSB0b1JlbmRlclRleHQocmVuZGVyZXIpOworICAgICAgICAgICAgdGV4dExlbmd0aCA9
IHJlbmRlclRleHQgPyByZW5kZXJUZXh0LT50ZXh0TGVuZ3RoKCkgOiAwOworICAgICAgICB9Cisg
ICAgICAgIC8vIEdldCB0aGUgdGV4dCBsZW5ndGggZnJvbSB0aGUgZWxlbWVudHMgdW5kZXIgdGhl
CisgICAgICAgIC8vIGFjY2Vzc2liaWxpdHkgb2JqZWN0IGlmIHRoZSB2YWx1ZSBpcyBzdGlsbCB6
ZXJvLgorICAgICAgICBpZiAoIXRleHRMZW5ndGggJiYgYWxsb3dzVGV4dFJhbmdlcygpKQorICAg
ICAgICAgICAgdGV4dExlbmd0aCA9IHRleHRVbmRlckVsZW1lbnQoKS5sZW5ndGgoKTsKKyAgICB9
CisKKyAgICByZXR1cm4gdGV4dExlbmd0aDsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQog
CiAjZW5kaWYgLy8gSEFWRShBQ0NFU1NJQklMSVRZKQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9hY2Nl
c3NpYmlsaXR5L2d0ay9BY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlckF0ay5jcHAgYi9XZWJDb3Jl
L2FjY2Vzc2liaWxpdHkvZ3RrL0FjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyQXRrLmNwcAppbmRl
eCBiZjgyYzY2Li42NzFmZTZlIDEwMDY0NAotLS0gYS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvZ3Rr
L0FjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyQXRrLmNwcAorKysgYi9XZWJDb3JlL2FjY2Vzc2li
aWxpdHkvZ3RrL0FjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyQXRrLmNwcApAQCAtMTQxOCwxMyAr
MTQxOCw0OSBAQCBzdGF0aWMgZ2Jvb2xlYW4gd2Via2l0X2FjY2Vzc2libGVfdGV4dF9hZGRfc2Vs
ZWN0aW9uKEF0a1RleHQqIHRleHQsIGdpbnQgc3RhcnRfbwogCiBzdGF0aWMgZ2Jvb2xlYW4gd2Vi
a2l0X2FjY2Vzc2libGVfdGV4dF9yZW1vdmVfc2VsZWN0aW9uKEF0a1RleHQqIHRleHQsIGdpbnQg
c2VsZWN0aW9uX251bSkKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIC8vIFdlYkNvcmUg
ZG9lcyBub3Qgc3VwcG9ydCBtdWx0aXBsZSBzZWxlY3Rpb24sIHNvIGFueXRoaW5nIGJ1dCAwIGRv
ZXMgbm90IG1ha2Ugc2Vuc2UgZm9yIG5vdy4KKyAgICBpZiAoc2VsZWN0aW9uX251bSkKKyAgICAg
ICAgcmV0dXJuIEZBTFNFOworCisgICAgLy8gRG8gbm90aGluZyBpZiBjdXJyZW50IHNlbGVjdGlv
biBkb2Vzbid0IGJlbG9uZyB0byB0aGUgb2JqZWN0CisgICAgaWYgKCF3ZWJraXRfYWNjZXNzaWJs
ZV90ZXh0X2dldF9uX3NlbGVjdGlvbnModGV4dCkpCisgICAgICAgIHJldHVybiBGQUxTRTsKKwor
ICAgIEFjY2Vzc2liaWxpdHlPYmplY3QqIGNvcmVPYmplY3QgPSBjb3JlKHRleHQpOworICAgIFZp
c2libGVTZWxlY3Rpb24gc2VsZWN0aW9uID0gY29yZU9iamVjdC0+c2VsZWN0aW9uKCk7CisgICAg
Z2ludCBzdGFydE9mZnNldDsKKyAgICBnaW50IGVuZE9mZnNldDsKKyAgICBnZXRTZWxlY3Rpb25P
ZmZzZXRzRm9yT2JqZWN0KGNvcmVPYmplY3QsIHNlbGVjdGlvbiwgc3RhcnRPZmZzZXQsIGVuZE9m
ZnNldCk7CisKKyAgICBpZiAoc3RhcnRPZmZzZXQgIT0gZW5kT2Zmc2V0KSB7CisgICAgICAgIC8v
IFNldCBhIG5ldyAwLXNpemVkIHNlbGVjdGlvbiB0byB0aGUgY2FyZXQgcG9zaXRpb24sIGluIG9y
ZGVyCisgICAgICAgIC8vIHRvIHNpbXVsYXRlIHNlbGVjdGlvbiByZW1vdmFsIChHQUlMIHN0eWxl
KQorICAgICAgICBnaW50IGNhcmV0T2Zmc2V0ID0gd2Via2l0X2FjY2Vzc2libGVfdGV4dF9nZXRf
Y2FyZXRfb2Zmc2V0KHRleHQpOworICAgICAgICBQbGFpblRleHRSYW5nZSB0ZXh0UmFuZ2UoY2Fy
ZXRPZmZzZXQsIDApOworICAgICAgICBWaXNpYmxlUG9zaXRpb25SYW5nZSByYW5nZSA9IGNvcmVP
YmplY3QtPnZpc2libGVQb3NpdGlvblJhbmdlRm9yUmFuZ2UodGV4dFJhbmdlKTsKKworICAgICAg
ICBjb3JlT2JqZWN0LT5zZXRTZWxlY3RlZFZpc2libGVQb3NpdGlvblJhbmdlKHJhbmdlKTsKKyAg
ICAgICAgcmV0dXJuIFRSVUU7CisgICAgfQorCiAgICAgcmV0dXJuIEZBTFNFOwogfQogCiBzdGF0
aWMgZ2Jvb2xlYW4gd2Via2l0X2FjY2Vzc2libGVfdGV4dF9zZXRfc2VsZWN0aW9uKEF0a1RleHQq
IHRleHQsIGdpbnQgc2VsZWN0aW9uX251bSwgZ2ludCBzdGFydF9vZmZzZXQsIGdpbnQgZW5kX29m
ZnNldCkKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIC8vIFdlYkNvcmUgZG9lcyBub3Qg
c3VwcG9ydCBtdWx0aXBsZSBzZWxlY3Rpb24sIHNvIGFueXRoaW5nIGJ1dCAwIGRvZXMgbm90IG1h
a2Ugc2Vuc2UgZm9yIG5vdy4KKyAgICBpZiAoc2VsZWN0aW9uX251bSkKKyAgICAgICAgcmV0dXJu
IEZBTFNFOworCisgICAgaWYgKHN0YXJ0X29mZnNldCAhPSBlbmRfb2Zmc2V0KSB7CisgICAgICAg
IEFjY2Vzc2liaWxpdHlPYmplY3QqIGNvcmVPYmplY3QgPSBjb3JlKHRleHQpOworICAgICAgICBQ
bGFpblRleHRSYW5nZSB0ZXh0UmFuZ2Uoc3RhcnRfb2Zmc2V0LCBlbmRfb2Zmc2V0IC0gc3RhcnRf
b2Zmc2V0KTsKKyAgICAgICAgVmlzaWJsZVBvc2l0aW9uUmFuZ2UgcmFuZ2UgPSBjb3JlT2JqZWN0
LT52aXNpYmxlUG9zaXRpb25SYW5nZUZvclJhbmdlKHRleHRSYW5nZSk7CisKKyAgICAgICAgY29y
ZU9iamVjdC0+c2V0U2VsZWN0ZWRWaXNpYmxlUG9zaXRpb25SYW5nZShyYW5nZSk7CisgICAgICAg
IHJldHVybiBUUlVFOworICAgIH0KKwogICAgIHJldHVybiBGQUxTRTsKIH0KIApAQCAtMTQzMiwx
NCArMTQ2OCw4IEBAIHN0YXRpYyBnYm9vbGVhbiB3ZWJraXRfYWNjZXNzaWJsZV90ZXh0X3NldF9j
YXJldF9vZmZzZXQoQXRrVGV4dCogdGV4dCwgZ2ludCBvZmZzCiB7CiAgICAgQWNjZXNzaWJpbGl0
eU9iamVjdCogY29yZU9iamVjdCA9IGNvcmUodGV4dCk7CiAKLSAgICAvLyBGSVhNRTogV2UgbmVl
ZCB0byByZWltcGxlbWVudCB2aXNpYmxlUG9zaXRpb25SYW5nZUZvclJhbmdlIGhlcmUKLSAgICAv
LyBiZWNhdXNlIHRoZSBhY3R1YWwgZnVuY3Rpb24gY2hlY2tzIHRoZSBvZmZzZXQgaXMgd2l0aGlu
IHRoZQotICAgIC8vIGJvdW5kYXJpZXMgb2YgdGV4dCgpLmxlbmd0aCgpLCBidXQgdGV4dCgpIG9u
bHkgd29ya3MgZm9yIHRleHQKLSAgICAvLyBjb250cm9scy4uLgotICAgIFZpc2libGVQb3NpdGlv
biBzdGFydFBvc2l0aW9uID0gY29yZU9iamVjdC0+dmlzaWJsZVBvc2l0aW9uRm9ySW5kZXgob2Zm
c2V0KTsKLSAgICBzdGFydFBvc2l0aW9uLnNldEFmZmluaXR5KERPV05TVFJFQU0pOwotICAgIFZp
c2libGVQb3NpdGlvbiBlbmRQb3NpdGlvbiA9IGNvcmVPYmplY3QtPnZpc2libGVQb3NpdGlvbkZv
ckluZGV4KG9mZnNldCk7Ci0gICAgVmlzaWJsZVBvc2l0aW9uUmFuZ2UgcmFuZ2UgPSBWaXNpYmxl
UG9zaXRpb25SYW5nZShzdGFydFBvc2l0aW9uLCBlbmRQb3NpdGlvbik7CisgICAgUGxhaW5UZXh0
UmFuZ2UgdGV4dFJhbmdlKG9mZnNldCwgMCk7CisgICAgVmlzaWJsZVBvc2l0aW9uUmFuZ2UgcmFu
Z2UgPSBjb3JlT2JqZWN0LT52aXNpYmxlUG9zaXRpb25SYW5nZUZvclJhbmdlKHRleHRSYW5nZSk7
CiAKICAgICBjb3JlT2JqZWN0LT5zZXRTZWxlY3RlZFZpc2libGVQb3NpdGlvblJhbmdlKHJhbmdl
KTsKICAgICByZXR1cm4gVFJVRTsKLS0gCjEuNy4wLjQKCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>66735</attachid>
            <date>2010-09-07 10:13:40 -0700</date>
            <delta_ts>2010-09-10 11:04:13 -0700</delta_ts>
            <desc>Path proposal + Unit tests</desc>
            <filename>0002-2010-09-07-Mario-Sanchez-Prada-msanchez-igalia.com.patch</filename>
            <type>text/plain</type>
            <size>19992</size>
            <attacher name="Mario Sanchez Prada">mario</attacher>
            
              <data encoding="base64">RnJvbSA4MmMwYzc1YmQ2YmJkYTRjNTQ3YzNkZGE5MzczNWQ2MDY5MzRmM2ZmIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBNYXJpbyBTYW5jaGV6IFByYWRhIDxtc2FuY2hlekBpZ2FsaWEu
Y29tPgpEYXRlOiBUdWUsIDcgU2VwIDIwMTAgMTg6NDg6MjMgKzAyMDAKU3ViamVjdDogMjAxMC0w
OS0wNyAgTWFyaW8gU2FuY2hleiBQcmFkYSAgPG1zYW5jaGV6QGlnYWxpYS5jb20+CgogICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgoKICAgICAgICBbR1RLXSBBVHMgc2hvdWxkIGJl
IGFibGUgdG8gc2VsZWN0L3Vuc2VsZWN0IHRleHQKICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjU2NzMKCiAgICAgICAgSW1wbGVtZW50IEF0a1RleHQncyBz
ZXRTZWxlY3Rpb24gYW5kIHJlbW92ZVNlbGVjdGlvbiBmdW5jdGlvbnMKCiAgICAgICAgKiBhY2Nl
c3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuY3BwOgogICAgICAgIChXZWJDb3JlOjpBY2Nl
c3NpYmlsaXR5T2JqZWN0Ojp2aXNpYmxlUG9zaXRpb25SYW5nZUZvclJhbmdlKToKICAgICAgICBN
b3ZlZCBzb21lIEdUSyBzcGVjaWZpYyBjb2RlIGZyb20gYSBpZmRlZi1lbmRpZiByZWdpb24gdG8K
ICAgICAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0QXRrLmNwcAogICAgICAgICogYWNjZXNzaWJpbGl0
eS9BY2Nlc3NpYmlsaXR5T2JqZWN0Lmg6CiAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L2d0ay9BY2Nl
c3NpYmlsaXR5T2JqZWN0QXRrLmNwcDoKICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU9i
amVjdDo6Z2V0TGVuZ3RoRm9yVGV4dFJhbmdlKTogTmV3LgogICAgICAgICogYWNjZXNzaWJpbGl0
eS9ndGsvQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJBdGsuY3BwOgogICAgICAgICh3ZWJraXRf
YWNjZXNzaWJsZV90ZXh0X3JlbW92ZV9zZWxlY3Rpb24pOiBJbXBsZW1lbnRlZCBmb2xsb3dpbmcK
ICAgICAgICB0aGUgbGVhZCBvZiBHQUlMJ3MgaW1wbGVtZW50YXRpb24gb2YgdGhlIEF0a1RleHQg
aW50ZXJmYWNlLgogICAgICAgICh3ZWJraXRfYWNjZXNzaWJsZV90ZXh0X3NldF9zZWxlY3Rpb24p
OiBJbXBsZW1lbnRlZCBmb2xsb3dpbmcKICAgICAgICB0aGUgbGVhZCBvZiBHQUlMJ3MgaW1wbGVt
ZW50YXRpb24gb2YgdGhlIEF0a1RleHQgaW50ZXJmYWNlLgogICAgICAgICh3ZWJraXRfYWNjZXNz
aWJsZV90ZXh0X3NldF9jYXJldF9vZmZzZXQpOiBDaGFuZ2VkIHRvIGRpcmVjdGx5IHVzZQogICAg
ICAgIHZpc2libGVQb3NpdGlvblJhbmdlRm9yUmFuZ2Ugbm93IHRoYXQgdGhlcmUncyBubyBsb25n
ZXIgYSBwcm9ibGVtCiAgICAgICAgd2l0aCB0aGF0LCBhcyBpdCB3YXMgaW4gdGhlIHBhc3QgKG9u
bHkgd29ya2VkIGZvciB0ZXh0IGNvbnRyb2xzKS4KCiAgICAgICAgTmV3IHRlc3RzIHRvIGNoZWNr
IGdldHRpbmcsIHNldHRpbmcgYW5kIHJlbW92aW5nIHRleHQgc2VsZWN0aW9ucwoKICAgICAgICAq
IHRlc3RzL3Rlc3RhdGsuYzoKICAgICAgICAodGVzdFdla2l0QXRrVGV4dFNlbGVjdGlvbnMpOiBO
ZXcgdW5pdCB0ZXN0cyB0byBjaGVjayBhbGwgdGhlIHRleHQKICAgICAgICBzZWxlY3Rpb24gcmVs
YXRlZCBmdW5jdGlvbnMgYWx0b2dldGhlciB0aHJvdWdoIGEgc2luZ2xlIHRlc3QKICAgICAgICBm
dW5jdGlvbi4KICAgICAgICAobWFpbik6CgogICAgICAgIE1ha2Ugc3VyZSB0aGF0IGNvZGUgZGVw
ZW5kYW50IG9uIGdldHRpbmcgaW5mb3JtYXRpb24gZnJvbSB0aGUKICAgICAgICBjbGlwYm9hcmQg
Z2V0cyBleGVjdXRlZCBvbmx5IHdoZW4gdGhlcmUncyBhIEdESyB3aW5kb3cgYXNzb2NpYXRlZAog
ICAgICAgIHRvIHRoZSB3ZWJ2aWV3IHdpZGdldCwgYXMgdGhhdCdzIG5vdCB0aGUgY2FzZSB3aGVu
IGV4ZWN1dGluZyB0aGUKICAgICAgICB1bml0IHRlc3RzICh0aGUgd2VkYnZpZXcgaXMgbm90IGlu
c2lkZSBvZiBhbnkgdG9wbGV2ZWwgd2luZG93KSBhbmQKICAgICAgICB3aWxsIG1ha2UgdGhlIHRl
c3RzIGNyYXNoIGlmIG5vdCB0YWtlbiBpbnRvIGFjY291bnQuCgogICAgICAgICogV2ViQ29yZVN1
cHBvcnQvRWRpdG9yQ2xpZW50R3RrLmNwcDoKICAgICAgICAoV2ViS2l0OjpFZGl0b3JDbGllbnQ6
OnJlc3BvbmRUb0NoYW5nZWRTZWxlY3Rpb24pOgotLS0KIFdlYkNvcmUvQ2hhbmdlTG9nICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAyNSArKysrCiBXZWJDb3JlL2FjY2Vzc2li
aWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdC5jcHAgICAgICB8ICAgMTcgKy0tLQogV2ViQ29yZS9h
Y2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuaCAgICAgICAgfCAgICAyICsKIC4uLi9h
Y2Nlc3NpYmlsaXR5L2d0ay9BY2Nlc3NpYmlsaXR5T2JqZWN0QXRrLmNwcCAgIHwgICAyMyArKysr
CiAuLi4vZ3RrL0FjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyQXRrLmNwcCAgICAgICAgICB8ICAg
NTAgKysrKysrKy0tCiBXZWJLaXQvZ3RrL0NoYW5nZUxvZyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB8ICAgMjQgKysrKwogV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9FZGl0b3JDbGll
bnRHdGsuY3BwICAgICAgfCAgIDI2ICsrKy0tCiBXZWJLaXQvZ3RrL3Rlc3RzL3Rlc3RhdGsuYyAg
ICAgICAgICAgICAgICAgICAgICAgICB8ICAxMTYgKysrKysrKysrKysrKysrKysrKysKIDggZmls
ZXMgY2hhbmdlZCwgMjQ1IGluc2VydGlvbnMoKyksIDM4IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdp
dCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYWQzOWQ4ZS4u
ZDhiY2Q4ZSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2ViQ29yZS9DaGFu
Z2VMb2cKQEAgLTIsNiArMiwzMSBAQAogCiAgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgogCisgICAgICAgIFtHVEtdIEFUcyBzaG91bGQgYmUgYWJsZSB0byBzZWxlY3QvdW5zZWxl
Y3QgdGV4dAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MjU2NzMKKworICAgICAgICBJbXBsZW1lbnQgQXRrVGV4dCdzIHNldFNlbGVjdGlvbiBhbmQgcmVt
b3ZlU2VsZWN0aW9uIGZ1bmN0aW9ucworCisgICAgICAgICogYWNjZXNzaWJpbGl0eS9BY2Nlc3Np
YmlsaXR5T2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlPYmplY3Q6
OnZpc2libGVQb3NpdGlvblJhbmdlRm9yUmFuZ2UpOgorICAgICAgICBNb3ZlZCBzb21lIEdUSyBz
cGVjaWZpYyBjb2RlIGZyb20gYSBpZmRlZi1lbmRpZiByZWdpb24gdG8KKyAgICAgICAgQWNjZXNz
aWJpbGl0eU9iamVjdEF0ay5jcHAKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxp
dHlPYmplY3QuaDoKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L2d0ay9BY2Nlc3NpYmlsaXR5T2Jq
ZWN0QXRrLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlPYmplY3Q6OmdldExl
bmd0aEZvclRleHRSYW5nZSk6IE5ldy4KKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L2d0ay9BY2Nl
c3NpYmlsaXR5T2JqZWN0V3JhcHBlckF0ay5jcHA6CisgICAgICAgICh3ZWJraXRfYWNjZXNzaWJs
ZV90ZXh0X3JlbW92ZV9zZWxlY3Rpb24pOiBJbXBsZW1lbnRlZCBmb2xsb3dpbmcKKyAgICAgICAg
dGhlIGxlYWQgb2YgR0FJTCdzIGltcGxlbWVudGF0aW9uIG9mIHRoZSBBdGtUZXh0IGludGVyZmFj
ZS4KKyAgICAgICAgKHdlYmtpdF9hY2Nlc3NpYmxlX3RleHRfc2V0X3NlbGVjdGlvbik6IEltcGxl
bWVudGVkIGZvbGxvd2luZworICAgICAgICB0aGUgbGVhZCBvZiBHQUlMJ3MgaW1wbGVtZW50YXRp
b24gb2YgdGhlIEF0a1RleHQgaW50ZXJmYWNlLgorICAgICAgICAod2Via2l0X2FjY2Vzc2libGVf
dGV4dF9zZXRfY2FyZXRfb2Zmc2V0KTogQ2hhbmdlZCB0byBkaXJlY3RseSB1c2UKKyAgICAgICAg
dmlzaWJsZVBvc2l0aW9uUmFuZ2VGb3JSYW5nZSBub3cgdGhhdCB0aGVyZSdzIG5vIGxvbmdlciBh
IHByb2JsZW0KKyAgICAgICAgd2l0aCB0aGF0LCBhcyBpdCB3YXMgaW4gdGhlIHBhc3QgKG9ubHkg
d29ya2VkIGZvciB0ZXh0IGNvbnRyb2xzKS4KKworMjAxMC0wOS0wNyAgTWFyaW8gU2FuY2hleiBQ
cmFkYSAgPG1zYW5jaGV6QGlnYWxpYS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKICAgICAgICAgW0d0a10gZ2V0X25fc2VsZWN0aW9ucyBhbmQgZ2V0X3NlbGVj
dGlvbiBmYWlsIHdoZW4gc2VsZWN0aW5nIHRleHQgYWNyb3NzIG9iamVjdCBib3VuZGFyaWVzCiAg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yNjk5MQogCmRp
ZmYgLS1naXQgYS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdC5jcHAg
Yi9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdC5jcHAKaW5kZXggYTZi
YjAzMy4uM2RkY2RjNSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2li
aWxpdHlPYmplY3QuY3BwCisrKyBiL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5
T2JqZWN0LmNwcApAQCAtMzczLDIyICszNzMsNyBAQCBWaXNpYmxlUG9zaXRpb25SYW5nZSBBY2Nl
c3NpYmlsaXR5T2JqZWN0OjpzdHlsZVJhbmdlRm9yUG9zaXRpb24oY29uc3QgVmlzaWJsZVBvcwog
Ly8gTk9URTogQ29uc2lkZXIgcHJvdmlkaW5nIHRoaXMgdXRpbGl0eSBtZXRob2QgYXMgQVggQVBJ
CiBWaXNpYmxlUG9zaXRpb25SYW5nZSBBY2Nlc3NpYmlsaXR5T2JqZWN0Ojp2aXNpYmxlUG9zaXRp
b25SYW5nZUZvclJhbmdlKGNvbnN0IFBsYWluVGV4dFJhbmdlJiByYW5nZSkgY29uc3QKIHsKLSAg
ICB1bnNpZ25lZCB0ZXh0TGVuZ3RoID0gdGV4dCgpLmxlbmd0aCgpOwotI2lmIFBMQVRGT1JNKEdU
SykKLSAgICAvLyBHdGsgQVRzIG5lZWQgdGhpcyBmb3IgYWxsIHRleHQgb2JqZWN0czsgbm90IGp1
c3QgdGV4dCBjb250cm9scy4KLSAgICBpZiAoIXRleHRMZW5ndGgpIHsKLSAgICAgICAgTm9kZSog
bm9kZSA9IHRoaXMtPm5vZGUoKTsKLSAgICAgICAgUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IG5v
ZGUgPyBub2RlLT5yZW5kZXJlcigpIDogMDsKLSAgICAgICAgaWYgKHJlbmRlcmVyICYmIHJlbmRl
cmVyLT5pc1RleHQoKSkgewotICAgICAgICAgICAgUmVuZGVyVGV4dCogcmVuZGVyVGV4dCA9IHRv
UmVuZGVyVGV4dChyZW5kZXJlcik7Ci0gICAgICAgICAgICB0ZXh0TGVuZ3RoID0gcmVuZGVyVGV4
dCA/IHJlbmRlclRleHQtPnRleHRMZW5ndGgoKSA6IDA7Ci0gICAgICAgIH0KLSAgICAgICAgLy8g
R2V0IHRoZSB0ZXh0IGxlbmd0aCBmcm9tIHRoZSBlbGVtZW50cyB1bmRlciB0aGUKLSAgICAgICAg
Ly8gYWNjZXNzaWJpbGl0eSBvYmplY3QgaWYgdGhlIHZhbHVlIGlzIHN0aWxsIHplcm8uCi0gICAg
ICAgIGlmICghdGV4dExlbmd0aCAmJiBhbGxvd3NUZXh0UmFuZ2VzKCkpCi0gICAgICAgICAgICB0
ZXh0TGVuZ3RoID0gdGV4dFVuZGVyRWxlbWVudCgpLmxlbmd0aCgpOwotICAgIH0KLSNlbmRpZgor
ICAgIHVuc2lnbmVkIHRleHRMZW5ndGggPSBnZXRMZW5ndGhGb3JUZXh0UmFuZ2UoKTsKICAgICBp
ZiAocmFuZ2Uuc3RhcnQgKyByYW5nZS5sZW5ndGggPiB0ZXh0TGVuZ3RoKQogICAgICAgICByZXR1
cm4gVmlzaWJsZVBvc2l0aW9uUmFuZ2UoKTsKIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9hY2Nlc3Np
YmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuaCBiL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nl
c3NpYmlsaXR5T2JqZWN0LmgKaW5kZXggMGU0NGQxYi4uZThmNmQxYiAxMDA2NDQKLS0tIGEvV2Vi
Q29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuaAorKysgYi9XZWJDb3JlL2Fj
Y2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdC5oCkBAIC01NzQsOCArNTc0LDEwIEBAIHBy
b3RlY3RlZDoKICAgICAKICNpZiBQTEFURk9STShHVEspCiAgICAgYm9vbCBhbGxvd3NUZXh0UmFu
Z2VzKCkgY29uc3Q7CisgICAgdW5zaWduZWQgZ2V0TGVuZ3RoRm9yVGV4dFJhbmdlKCkgY29uc3Q7
CiAjZWxzZQogICAgIGJvb2wgYWxsb3dzVGV4dFJhbmdlcygpIGNvbnN0IHsgcmV0dXJuIGlzVGV4
dENvbnRyb2woKTsgfQorICAgIHVuc2lnbmVkIGdldExlbmd0aEZvclRleHRSYW5nZSgpIGNvbnN0
IHsgcmV0dXJuIHRleHQoKS5sZW5ndGgoKTsgfQogI2VuZGlmCiAKICNpZiBQTEFURk9STShNQUMp
CmRpZmYgLS1naXQgYS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvZ3RrL0FjY2Vzc2liaWxpdHlPYmpl
Y3RBdGsuY3BwIGIvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2d0ay9BY2Nlc3NpYmlsaXR5T2JqZWN0
QXRrLmNwcAppbmRleCBkMDA1NzRiLi40NjBmYTkwIDEwMDY0NAotLS0gYS9XZWJDb3JlL2FjY2Vz
c2liaWxpdHkvZ3RrL0FjY2Vzc2liaWxpdHlPYmplY3RBdGsuY3BwCisrKyBiL1dlYkNvcmUvYWNj
ZXNzaWJpbGl0eS9ndGsvQWNjZXNzaWJpbGl0eU9iamVjdEF0ay5jcHAKQEAgLTIwLDYgKzIwLDgg
QEAKIAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkFjY2Vzc2liaWxpdHlPYmplY3Qu
aCIKKyNpbmNsdWRlICJSZW5kZXJPYmplY3QuaCIKKyNpbmNsdWRlICJSZW5kZXJUZXh0LmgiCiAK
ICNpbmNsdWRlIDxnbGliLW9iamVjdC5oPgogCkBAIC05OCw2ICsxMDAsMjcgQEAgYm9vbCBBY2Nl
c3NpYmlsaXR5T2JqZWN0OjphbGxvd3NUZXh0UmFuZ2VzKCkgY29uc3QKICAgICByZXR1cm4gaXNU
ZXh0Q29udHJvbCgpIHx8IGlzV2ViQXJlYSgpIHx8IGlzR3JvdXAoKSB8fCBpc0xpbmsoKSB8fCBp
c0hlYWRpbmcoKTsKIH0KIAordW5zaWduZWQgQWNjZXNzaWJpbGl0eU9iamVjdDo6Z2V0TGVuZ3Ro
Rm9yVGV4dFJhbmdlKCkgY29uc3QKK3sKKyAgICB1bnNpZ25lZCB0ZXh0TGVuZ3RoID0gdGV4dCgp
Lmxlbmd0aCgpOworCisgICAgLy8gR3RrIEFUcyBuZWVkIHRoaXMgZm9yIGFsbCB0ZXh0IG9iamVj
dHM7IG5vdCBqdXN0IHRleHQgY29udHJvbHMuCisgICAgaWYgKCF0ZXh0TGVuZ3RoKSB7CisgICAg
ICAgIE5vZGUqIG5vZGUgPSB0aGlzLT5ub2RlKCk7CisgICAgICAgIFJlbmRlck9iamVjdCogcmVu
ZGVyZXIgPSBub2RlID8gbm9kZS0+cmVuZGVyZXIoKSA6IDA7CisgICAgICAgIGlmIChyZW5kZXJl
ciAmJiByZW5kZXJlci0+aXNUZXh0KCkpIHsKKyAgICAgICAgICAgIFJlbmRlclRleHQqIHJlbmRl
clRleHQgPSB0b1JlbmRlclRleHQocmVuZGVyZXIpOworICAgICAgICAgICAgdGV4dExlbmd0aCA9
IHJlbmRlclRleHQgPyByZW5kZXJUZXh0LT50ZXh0TGVuZ3RoKCkgOiAwOworICAgICAgICB9Cisg
ICAgICAgIC8vIEdldCB0aGUgdGV4dCBsZW5ndGggZnJvbSB0aGUgZWxlbWVudHMgdW5kZXIgdGhl
CisgICAgICAgIC8vIGFjY2Vzc2liaWxpdHkgb2JqZWN0IGlmIHRoZSB2YWx1ZSBpcyBzdGlsbCB6
ZXJvLgorICAgICAgICBpZiAoIXRleHRMZW5ndGggJiYgYWxsb3dzVGV4dFJhbmdlcygpKQorICAg
ICAgICAgICAgdGV4dExlbmd0aCA9IHRleHRVbmRlckVsZW1lbnQoKS5sZW5ndGgoKTsKKyAgICB9
CisKKyAgICByZXR1cm4gdGV4dExlbmd0aDsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQog
CiAjZW5kaWYgLy8gSEFWRShBQ0NFU1NJQklMSVRZKQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9hY2Nl
c3NpYmlsaXR5L2d0ay9BY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlckF0ay5jcHAgYi9XZWJDb3Jl
L2FjY2Vzc2liaWxpdHkvZ3RrL0FjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyQXRrLmNwcAppbmRl
eCA1YWRkZGNiLi5hNWYyODg4IDEwMDY0NAotLS0gYS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvZ3Rr
L0FjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyQXRrLmNwcAorKysgYi9XZWJDb3JlL2FjY2Vzc2li
aWxpdHkvZ3RrL0FjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyQXRrLmNwcApAQCAtMTQxOCwxMyAr
MTQxOCw0OSBAQCBzdGF0aWMgZ2Jvb2xlYW4gd2Via2l0X2FjY2Vzc2libGVfdGV4dF9hZGRfc2Vs
ZWN0aW9uKEF0a1RleHQqIHRleHQsIGdpbnQgc3RhcnRfbwogCiBzdGF0aWMgZ2Jvb2xlYW4gd2Vi
a2l0X2FjY2Vzc2libGVfdGV4dF9yZW1vdmVfc2VsZWN0aW9uKEF0a1RleHQqIHRleHQsIGdpbnQg
c2VsZWN0aW9uX251bSkKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIC8vIFdlYkNvcmUg
ZG9lcyBub3Qgc3VwcG9ydCBtdWx0aXBsZSBzZWxlY3Rpb24sIHNvIGFueXRoaW5nIGJ1dCAwIGRv
ZXMgbm90IG1ha2Ugc2Vuc2UgZm9yIG5vdy4KKyAgICBpZiAoc2VsZWN0aW9uX251bSkKKyAgICAg
ICAgcmV0dXJuIEZBTFNFOworCisgICAgLy8gRG8gbm90aGluZyBpZiBjdXJyZW50IHNlbGVjdGlv
biBkb2Vzbid0IGJlbG9uZyB0byB0aGUgb2JqZWN0CisgICAgaWYgKCF3ZWJraXRfYWNjZXNzaWJs
ZV90ZXh0X2dldF9uX3NlbGVjdGlvbnModGV4dCkpCisgICAgICAgIHJldHVybiBGQUxTRTsKKwor
ICAgIEFjY2Vzc2liaWxpdHlPYmplY3QqIGNvcmVPYmplY3QgPSBjb3JlKHRleHQpOworICAgIFZp
c2libGVTZWxlY3Rpb24gc2VsZWN0aW9uID0gY29yZU9iamVjdC0+c2VsZWN0aW9uKCk7CisgICAg
Z2ludCBzdGFydE9mZnNldDsKKyAgICBnaW50IGVuZE9mZnNldDsKKyAgICBnZXRTZWxlY3Rpb25P
ZmZzZXRzRm9yT2JqZWN0KGNvcmVPYmplY3QsIHNlbGVjdGlvbiwgc3RhcnRPZmZzZXQsIGVuZE9m
ZnNldCk7CisKKyAgICBpZiAoc3RhcnRPZmZzZXQgIT0gZW5kT2Zmc2V0KSB7CisgICAgICAgIC8v
IFNldCBhIG5ldyAwLXNpemVkIHNlbGVjdGlvbiB0byB0aGUgY2FyZXQgcG9zaXRpb24sIGluIG9y
ZGVyCisgICAgICAgIC8vIHRvIHNpbXVsYXRlIHNlbGVjdGlvbiByZW1vdmFsIChHQUlMIHN0eWxl
KQorICAgICAgICBnaW50IGNhcmV0T2Zmc2V0ID0gd2Via2l0X2FjY2Vzc2libGVfdGV4dF9nZXRf
Y2FyZXRfb2Zmc2V0KHRleHQpOworICAgICAgICBQbGFpblRleHRSYW5nZSB0ZXh0UmFuZ2UoY2Fy
ZXRPZmZzZXQsIDApOworICAgICAgICBWaXNpYmxlUG9zaXRpb25SYW5nZSByYW5nZSA9IGNvcmVP
YmplY3QtPnZpc2libGVQb3NpdGlvblJhbmdlRm9yUmFuZ2UodGV4dFJhbmdlKTsKKworICAgICAg
ICBjb3JlT2JqZWN0LT5zZXRTZWxlY3RlZFZpc2libGVQb3NpdGlvblJhbmdlKHJhbmdlKTsKKyAg
ICAgICAgcmV0dXJuIFRSVUU7CisgICAgfQorCiAgICAgcmV0dXJuIEZBTFNFOwogfQogCiBzdGF0
aWMgZ2Jvb2xlYW4gd2Via2l0X2FjY2Vzc2libGVfdGV4dF9zZXRfc2VsZWN0aW9uKEF0a1RleHQq
IHRleHQsIGdpbnQgc2VsZWN0aW9uX251bSwgZ2ludCBzdGFydF9vZmZzZXQsIGdpbnQgZW5kX29m
ZnNldCkKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIC8vIFdlYkNvcmUgZG9lcyBub3Qg
c3VwcG9ydCBtdWx0aXBsZSBzZWxlY3Rpb24sIHNvIGFueXRoaW5nIGJ1dCAwIGRvZXMgbm90IG1h
a2Ugc2Vuc2UgZm9yIG5vdy4KKyAgICBpZiAoc2VsZWN0aW9uX251bSkKKyAgICAgICAgcmV0dXJu
IEZBTFNFOworCisgICAgaWYgKHN0YXJ0X29mZnNldCAhPSBlbmRfb2Zmc2V0KSB7CisgICAgICAg
IEFjY2Vzc2liaWxpdHlPYmplY3QqIGNvcmVPYmplY3QgPSBjb3JlKHRleHQpOworICAgICAgICBQ
bGFpblRleHRSYW5nZSB0ZXh0UmFuZ2Uoc3RhcnRfb2Zmc2V0LCBlbmRfb2Zmc2V0IC0gc3RhcnRf
b2Zmc2V0KTsKKyAgICAgICAgVmlzaWJsZVBvc2l0aW9uUmFuZ2UgcmFuZ2UgPSBjb3JlT2JqZWN0
LT52aXNpYmxlUG9zaXRpb25SYW5nZUZvclJhbmdlKHRleHRSYW5nZSk7CisKKyAgICAgICAgY29y
ZU9iamVjdC0+c2V0U2VsZWN0ZWRWaXNpYmxlUG9zaXRpb25SYW5nZShyYW5nZSk7CisgICAgICAg
IHJldHVybiBUUlVFOworICAgIH0KKwogICAgIHJldHVybiBGQUxTRTsKIH0KIApAQCAtMTQzMiwx
NCArMTQ2OCw4IEBAIHN0YXRpYyBnYm9vbGVhbiB3ZWJraXRfYWNjZXNzaWJsZV90ZXh0X3NldF9j
YXJldF9vZmZzZXQoQXRrVGV4dCogdGV4dCwgZ2ludCBvZmZzCiB7CiAgICAgQWNjZXNzaWJpbGl0
eU9iamVjdCogY29yZU9iamVjdCA9IGNvcmUodGV4dCk7CiAKLSAgICAvLyBGSVhNRTogV2UgbmVl
ZCB0byByZWltcGxlbWVudCB2aXNpYmxlUG9zaXRpb25SYW5nZUZvclJhbmdlIGhlcmUKLSAgICAv
LyBiZWNhdXNlIHRoZSBhY3R1YWwgZnVuY3Rpb24gY2hlY2tzIHRoZSBvZmZzZXQgaXMgd2l0aGlu
IHRoZQotICAgIC8vIGJvdW5kYXJpZXMgb2YgdGV4dCgpLmxlbmd0aCgpLCBidXQgdGV4dCgpIG9u
bHkgd29ya3MgZm9yIHRleHQKLSAgICAvLyBjb250cm9scy4uLgotICAgIFZpc2libGVQb3NpdGlv
biBzdGFydFBvc2l0aW9uID0gY29yZU9iamVjdC0+dmlzaWJsZVBvc2l0aW9uRm9ySW5kZXgob2Zm
c2V0KTsKLSAgICBzdGFydFBvc2l0aW9uLnNldEFmZmluaXR5KERPV05TVFJFQU0pOwotICAgIFZp
c2libGVQb3NpdGlvbiBlbmRQb3NpdGlvbiA9IGNvcmVPYmplY3QtPnZpc2libGVQb3NpdGlvbkZv
ckluZGV4KG9mZnNldCk7Ci0gICAgVmlzaWJsZVBvc2l0aW9uUmFuZ2UgcmFuZ2UgPSBWaXNpYmxl
UG9zaXRpb25SYW5nZShzdGFydFBvc2l0aW9uLCBlbmRQb3NpdGlvbik7CisgICAgUGxhaW5UZXh0
UmFuZ2UgdGV4dFJhbmdlKG9mZnNldCwgMCk7CisgICAgVmlzaWJsZVBvc2l0aW9uUmFuZ2UgcmFu
Z2UgPSBjb3JlT2JqZWN0LT52aXNpYmxlUG9zaXRpb25SYW5nZUZvclJhbmdlKHRleHRSYW5nZSk7
CiAKICAgICBjb3JlT2JqZWN0LT5zZXRTZWxlY3RlZFZpc2libGVQb3NpdGlvblJhbmdlKHJhbmdl
KTsKICAgICByZXR1cm4gVFJVRTsKZGlmZiAtLWdpdCBhL1dlYktpdC9ndGsvQ2hhbmdlTG9nIGIv
V2ViS2l0L2d0ay9DaGFuZ2VMb2cKaW5kZXggNTI2NjViMS4uMTQ4Mjk0MyAxMDA2NDQKLS0tIGEv
V2ViS2l0L2d0ay9DaGFuZ2VMb2cKKysrIGIvV2ViS2l0L2d0ay9DaGFuZ2VMb2cKQEAgLTEsMyAr
MSwyNyBAQAorMjAxMC0wOS0wNyAgTWFyaW8gU2FuY2hleiBQcmFkYSAgPG1zYW5jaGV6QGlnYWxp
YS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
W0dUS10gUHJvdmlkZSB1bml0IHRlc3RzIGZvciBBdGtUZXh0J3MgdGV4dCBzZWxlY3Rpb24gZnVu
Y3Rpb25zCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00
MzkxOQorCisgICAgICAgIE5ldyB0ZXN0cyB0byBjaGVjayBnZXR0aW5nLCBzZXR0aW5nIGFuZCBy
ZW1vdmluZyB0ZXh0IHNlbGVjdGlvbnMKKworICAgICAgICAqIHRlc3RzL3Rlc3RhdGsuYzoKKyAg
ICAgICAgKHRlc3RXZWtpdEF0a1RleHRTZWxlY3Rpb25zKTogTmV3IHVuaXQgdGVzdHMgdG8gY2hl
Y2sgYWxsIHRoZSB0ZXh0CisgICAgICAgIHNlbGVjdGlvbiByZWxhdGVkIGZ1bmN0aW9ucyBhbHRv
Z2V0aGVyIHRocm91Z2ggYSBzaW5nbGUgdGVzdAorICAgICAgICBmdW5jdGlvbi4KKyAgICAgICAg
KG1haW4pOgorCisgICAgICAgIE1ha2Ugc3VyZSB0aGF0IGNvZGUgZGVwZW5kYW50IG9uIGdldHRp
bmcgaW5mb3JtYXRpb24gZnJvbSB0aGUKKyAgICAgICAgY2xpcGJvYXJkIGdldHMgZXhlY3V0ZWQg
b25seSB3aGVuIHRoZXJlJ3MgYSBHREsgd2luZG93IGFzc29jaWF0ZWQKKyAgICAgICAgdG8gdGhl
IHdlYnZpZXcgd2lkZ2V0LCBhcyB0aGF0J3Mgbm90IHRoZSBjYXNlIHdoZW4gZXhlY3V0aW5nIHRo
ZQorICAgICAgICB1bml0IHRlc3RzICh0aGUgd2VkYnZpZXcgaXMgbm90IGluc2lkZSBvZiBhbnkg
dG9wbGV2ZWwgd2luZG93KSBhbmQKKyAgICAgICAgd2lsbCBtYWtlIHRoZSB0ZXN0cyBjcmFzaCBp
ZiBub3QgdGFrZW4gaW50byBhY2NvdW50LgorCisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvRWRp
dG9yQ2xpZW50R3RrLmNwcDoKKyAgICAgICAgKFdlYktpdDo6RWRpdG9yQ2xpZW50OjpyZXNwb25k
VG9DaGFuZ2VkU2VsZWN0aW9uKToKKwogMjAxMC0wOS0wMyAgSmVzdXMgU2FuY2hlei1QYWxlbmNp
YSAgPGplc3VzLnBhbGVuY2lhQG9wZW5ib3NzYS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkg
RGFyaW4gQWRsZXIuCmRpZmYgLS1naXQgYS9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0VkaXRv
ckNsaWVudEd0ay5jcHAgYi9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0VkaXRvckNsaWVudEd0
ay5jcHAKaW5kZXggOGEwMTliNC4uY2JkOWExNSAxMDA2NDQKLS0tIGEvV2ViS2l0L2d0ay9XZWJD
b3JlU3VwcG9ydC9FZGl0b3JDbGllbnRHdGsuY3BwCisrKyBiL1dlYktpdC9ndGsvV2ViQ29yZVN1
cHBvcnQvRWRpdG9yQ2xpZW50R3RrLmNwcApAQCAtMzU0LDE4ICszNTQsMjAgQEAgdm9pZCBFZGl0
b3JDbGllbnQ6OnJlc3BvbmRUb0NoYW5nZWRTZWxlY3Rpb24oKQogICAgICAgICByZXR1cm47CiAK
ICNpZiBQTEFURk9STShYMTEpCi0gICAgR3RrQ2xpcGJvYXJkKiBjbGlwYm9hcmQgPSBndGtfd2lk
Z2V0X2dldF9jbGlwYm9hcmQoR1RLX1dJREdFVChtX3dlYlZpZXcpLCBHREtfU0VMRUNUSU9OX1BS
SU1BUlkpOwotICAgIERhdGFPYmplY3RHdGsqIGRhdGFPYmplY3QgPSBEYXRhT2JqZWN0R3RrOjpm
b3JDbGlwYm9hcmQoY2xpcGJvYXJkKTsKLQotICAgIGlmICh0YXJnZXRGcmFtZS0+c2VsZWN0aW9u
KCktPmlzUmFuZ2UoKSkgewotICAgICAgICBkYXRhT2JqZWN0LT5jbGVhcigpOwotICAgICAgICBk
YXRhT2JqZWN0LT5zZXRSYW5nZSh0YXJnZXRGcmFtZS0+c2VsZWN0aW9uKCktPnRvTm9ybWFsaXpl
ZFJhbmdlKCkpOwotCi0gICAgICAgIHZpZXdTZXR0aW5nQ2xpcGJvYXJkID0gbV93ZWJWaWV3Owot
ICAgICAgICBHQ2xvc3VyZSogY2FsbGJhY2sgPSBnX2NjbG9zdXJlX25ld19vYmplY3QoR19DQUxM
QkFDSyhjb2xsYXBzZVNlbGVjdGlvbiksIEdfT0JKRUNUKG1fd2ViVmlldykpOwotICAgICAgICBn
X2Nsb3N1cmVfc2V0X21hcnNoYWwoY2FsbGJhY2ssIGdfY2Nsb3N1cmVfbWFyc2hhbF9WT0lEX19W
T0lEKTsKLSAgICAgICAgcGFzdGVib2FyZEhlbHBlckluc3RhbmNlKCktPndyaXRlQ2xpcGJvYXJk
Q29udGVudHMoY2xpcGJvYXJkLCBjYWxsYmFjayk7Ci0gICAgICAgIHZpZXdTZXR0aW5nQ2xpcGJv
YXJkID0gMDsKKyAgICBpZiAoZ3RrX3dpZGdldF9oYXNfc2NyZWVuKEdUS19XSURHRVQobV93ZWJW
aWV3KSkpIHsKKyAgICAgICAgR3RrQ2xpcGJvYXJkKiBjbGlwYm9hcmQgPSBndGtfd2lkZ2V0X2dl
dF9jbGlwYm9hcmQoR1RLX1dJREdFVChtX3dlYlZpZXcpLCBHREtfU0VMRUNUSU9OX1BSSU1BUlkp
OworICAgICAgICBEYXRhT2JqZWN0R3RrKiBkYXRhT2JqZWN0ID0gRGF0YU9iamVjdEd0azo6Zm9y
Q2xpcGJvYXJkKGNsaXBib2FyZCk7CisKKyAgICAgICAgaWYgKHRhcmdldEZyYW1lLT5zZWxlY3Rp
b24oKS0+aXNSYW5nZSgpKSB7CisgICAgICAgICAgICBkYXRhT2JqZWN0LT5jbGVhcigpOworICAg
ICAgICAgICAgZGF0YU9iamVjdC0+c2V0UmFuZ2UodGFyZ2V0RnJhbWUtPnNlbGVjdGlvbigpLT50
b05vcm1hbGl6ZWRSYW5nZSgpKTsKKworICAgICAgICAgICAgdmlld1NldHRpbmdDbGlwYm9hcmQg
PSBtX3dlYlZpZXc7CisgICAgICAgICAgICBHQ2xvc3VyZSogY2FsbGJhY2sgPSBnX2NjbG9zdXJl
X25ld19vYmplY3QoR19DQUxMQkFDSyhjb2xsYXBzZVNlbGVjdGlvbiksIEdfT0JKRUNUKG1fd2Vi
VmlldykpOworICAgICAgICAgICAgZ19jbG9zdXJlX3NldF9tYXJzaGFsKGNhbGxiYWNrLCBnX2Nj
bG9zdXJlX21hcnNoYWxfVk9JRF9fVk9JRCk7CisgICAgICAgICAgICBwYXN0ZWJvYXJkSGVscGVy
SW5zdGFuY2UoKS0+d3JpdGVDbGlwYm9hcmRDb250ZW50cyhjbGlwYm9hcmQsIGNhbGxiYWNrKTsK
KyAgICAgICAgICAgIHZpZXdTZXR0aW5nQ2xpcGJvYXJkID0gMDsKKyAgICAgICAgfQogICAgIH0K
ICNlbmRpZgogCmRpZmYgLS1naXQgYS9XZWJLaXQvZ3RrL3Rlc3RzL3Rlc3RhdGsuYyBiL1dlYktp
dC9ndGsvdGVzdHMvdGVzdGF0ay5jCmluZGV4IGUxNTlmOGEuLjE0ZTkwZmMgMTAwNjQ0Ci0tLSBh
L1dlYktpdC9ndGsvdGVzdHMvdGVzdGF0ay5jCisrKyBiL1dlYktpdC9ndGsvdGVzdHMvdGVzdGF0
ay5jCkBAIC00Niw2ICs0Niw4IEBAIHN0YXRpYyBjb25zdCBjaGFyKiBjb250ZW50c0luVGFibGVX
aXRoSGVhZGVycyA9ICI8aHRtbD48Ym9keT48dGFibGU+PHRyPjx0aD5mb288CiAKIHN0YXRpYyBj
b25zdCBjaGFyKiB0ZXh0V2l0aEF0dHJpYnV0ZXMgPSAiPGh0bWw+PGhlYWQ+PHN0eWxlPi5zdDEg
e2ZvbnQtZmFtaWx5OiBtb25vc3BhY2U7IGNvbG9yOnJnYigxMjAsMTIxLDEyMik7fSAuc3QyIHt0
ZXh0LWRlY29yYXRpb246dW5kZXJsaW5lOyBiYWNrZ3JvdW5kLWNvbG9yOnJnYig4MCw4MSw4Mik7
fTwvc3R5bGU+PC9oZWFkPjxib2R5PjxwIHN0eWxlPVwiZm9udC1zaXplOjE0OyB0ZXh0LWFsaWdu
OnJpZ2h0O1wiPlRoaXMgaXMgdGhlIDxpPmZpcnN0PC9pPjxiPiBzZW50ZW5jZSBvZiB0aGlzIHRl
eHQuPC9iPjwvcD48cCBjbGFzcz1cInN0MVwiPlRoaXMgc2VudGVuY2Ugc2hvdWxkIGhhdmUgYW4g
c3R5bGUgYXBwbGllZCA8c3BhbiBjbGFzcz1cInN0MlwiPmFuZCB0aGlzIHBhcnQgc2hvdWxkIGhh
dmUgYW5vdGhlciBvbmU8L3NwYW4+LjwvcD48cD54PHN1Yj4xPC9zdWI+PHN1cD4yPC9zdXA+PXg8
c3ViPjI8L3N1Yj48c3VwPjM8L3N1cD48L3A+PHAgc3R5bGU9XCJ0ZXh0LWFsaWduOmNlbnRlcjtc
Ij5UaGlzIHNlbnRlbmNlIGlzIHRoZSA8c3RyaWtlPmxhc3Q8L3N0cmlrZT4gb25lLjwvcD48L2Jv
ZHk+PC9odG1sPiI7CiAKK3N0YXRpYyBjb25zdCBjaGFyKiB0ZXh0Rm9yU2VsZWN0aW9ucyA9ICI8
aHRtbD48Ym9keT48cD5BIHBhcmFncmFwaCB3aXRoIHBsYWluIHRleHQ8L3A+PHA+QSBwYXJhZ3Jh
cGggd2l0aCA8YSBocmVmPSdodHRwOi8vd2Via2l0Lm9yZyc+YSBsaW5rPC9hPiBpbiB0aGUgbWlk
ZGxlPC9wPjwvYm9keT48L2h0bWw+IjsKKwogc3RhdGljIGdib29sZWFuIGJhaWxfb3V0KEdNYWlu
TG9vcCogbG9vcCkKIHsKICAgICBpZiAoZ19tYWluX2xvb3BfaXNfcnVubmluZyhsb29wKSkKQEAg
LTg0Myw2ICs4NDUsMTE5IEBAIHN0YXRpYyB2b2lkIHRlc3Rfd2Via2l0X2F0a19nZXRfZXh0ZW50
cyh2b2lkKQogICAgIGdfb2JqZWN0X3VucmVmKHdlYlZpZXcpOwogfQogCitzdGF0aWMgdm9pZCB0
ZXN0V2VraXRBdGtUZXh0U2VsZWN0aW9ucyh2b2lkKQoreworICAgIFdlYktpdFdlYlZpZXcqIHdl
YlZpZXc7CisgICAgQXRrT2JqZWN0KiBvYmo7CisgICAgR01haW5Mb29wKiBsb29wOworICAgIGdj
aGFyKiBzZWxlY3RlZFRleHQ7CisgICAgZ2ludCBzdGFydE9mZnNldDsKKyAgICBnaW50IGVuZE9m
ZnNldDsKKyAgICBnYm9vbGVhbiByZXN1bHQ7CisKKyAgICB3ZWJWaWV3ID0gV0VCS0lUX1dFQl9W
SUVXKHdlYmtpdF93ZWJfdmlld19uZXcoKSk7CisgICAgZ19vYmplY3RfcmVmX3Npbmsod2ViVmll
dyk7CisgICAgR3RrQWxsb2NhdGlvbiBhbGxvYyA9IHsgMCwgMCwgODAwLCA2MDAgfTsKKyAgICBn
dGtfd2lkZ2V0X3NpemVfYWxsb2NhdGUoR1RLX1dJREdFVCh3ZWJWaWV3KSwgJmFsbG9jKTsKKyAg
ICB3ZWJraXRfd2ViX3ZpZXdfbG9hZF9zdHJpbmcod2ViVmlldywgdGV4dEZvclNlbGVjdGlvbnMs
IE5VTEwsIE5VTEwsIE5VTEwpOworICAgIGxvb3AgPSBnX21haW5fbG9vcF9uZXcoTlVMTCwgVFJV
RSk7CisKKyAgICBnX3RpbWVvdXRfYWRkKDEwMCwgKEdTb3VyY2VGdW5jKWJhaWxfb3V0LCBsb29w
KTsKKyAgICBnX21haW5fbG9vcF9ydW4obG9vcCk7CisKKyAgICBvYmogPSBndGtfd2lkZ2V0X2dl
dF9hY2Nlc3NpYmxlKEdUS19XSURHRVQod2ViVmlldykpOworICAgIGdfYXNzZXJ0KG9iaik7CisK
KyAgICBBdGtUZXh0KiBwYXJhZ3JhcGgxID0gQVRLX1RFWFQoYXRrX29iamVjdF9yZWZfYWNjZXNz
aWJsZV9jaGlsZChvYmosIDApKTsKKyAgICBnX2Fzc2VydChBVEtfSVNfVEVYVChwYXJhZ3JhcGgx
KSk7CisgICAgQXRrVGV4dCogcGFyYWdyYXBoMiA9IEFUS19URVhUKGF0a19vYmplY3RfcmVmX2Fj
Y2Vzc2libGVfY2hpbGQob2JqLCAxKSk7CisgICAgZ19hc3NlcnQoQVRLX0lTX1RFWFQocGFyYWdy
YXBoMikpOworICAgIEF0a1RleHQqIGxpbmsgPSBBVEtfVEVYVChhdGtfb2JqZWN0X3JlZl9hY2Nl
c3NpYmxlX2NoaWxkKEFUS19PQkpFQ1QocGFyYWdyYXBoMiksIDApKTsKKyAgICBnX2Fzc2VydChB
VEtfSVNfVEVYVChsaW5rKSk7CisKKyAgICAvLyBGaXJzdCBwYXJhZ3JhcGggKHNpbXBsZSB0ZXh0
KQorCisgICAgLy8gQmFzaWMgaW5pdGlhbCBjaGVja3MKKyAgICBnX2Fzc2VydF9jbXBpbnQoYXRr
X3RleHRfZ2V0X25fc2VsZWN0aW9ucyhwYXJhZ3JhcGgxKSwgPT0sIDApOworICAgIHNlbGVjdGVk
VGV4dCA9IGF0a190ZXh0X2dldF9zZWxlY3Rpb24ocGFyYWdyYXBoMSwgMCwgJnN0YXJ0T2Zmc2V0
LCAmZW5kT2Zmc2V0KTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoc3RhcnRPZmZzZXQsID09LCAwKTsK
KyAgICBnX2Fzc2VydF9jbXBpbnQoZW5kT2Zmc2V0LCA9PSwgMCk7CisgICAgZ19hc3NlcnRfY21w
c3RyKHNlbGVjdGVkVGV4dCwgPT0sIE5VTEwpOworICAgIGdfZnJlZSAoc2VsZWN0ZWRUZXh0KTsK
KyAgICAvLyBUcnkgcmVtb3ZpbmcgYSBub24gZXhpc3RpbmcgKHlldCkgc2VsZWN0aW9uCisgICAg
cmVzdWx0ID0gYXRrX3RleHRfcmVtb3ZlX3NlbGVjdGlvbihwYXJhZ3JhcGgxLCAwKTsKKyAgICBn
X2Fzc2VydCghcmVzdWx0KTsKKyAgICAvLyBUcnkgc2V0dGluZyBhIDAtY2hhciBzZWxlY3Rpb24K
KyAgICByZXN1bHQgPSBhdGtfdGV4dF9zZXRfc2VsZWN0aW9uKHBhcmFncmFwaDEsIDAsIDUsIDUp
OworICAgIGdfYXNzZXJ0KCFyZXN1bHQpOworCisgICAgLy8gTWFrZSBhIHNlbGVjdGlvbiBhbmQg
dGVzdCBpdAorICAgIHJlc3VsdCA9IGF0a190ZXh0X3NldF9zZWxlY3Rpb24ocGFyYWdyYXBoMSwg
MCwgNSwgMjUpOworICAgIGdfYXNzZXJ0KHJlc3VsdCk7CisgICAgZ19hc3NlcnRfY21waW50KGF0
a190ZXh0X2dldF9uX3NlbGVjdGlvbnMocGFyYWdyYXBoMSksID09LCAxKTsKKyAgICBzZWxlY3Rl
ZFRleHQgPSBhdGtfdGV4dF9nZXRfc2VsZWN0aW9uKHBhcmFncmFwaDEsIDAsICZzdGFydE9mZnNl
dCwgJmVuZE9mZnNldCk7CisgICAgZ19hc3NlcnRfY21waW50KHN0YXJ0T2Zmc2V0LCA9PSwgNSk7
CisgICAgZ19hc3NlcnRfY21waW50KGVuZE9mZnNldCwgPT0sIDI1KTsKKyAgICBnX2Fzc2VydF9j
bXBzdHIoc2VsZWN0ZWRUZXh0LCA9PSwgImFncmFwaCB3aXRoIHBsYWluIHRlIik7CisgICAgZ19m
cmVlIChzZWxlY3RlZFRleHQpOworICAgIC8vIFRyeSByZW1vdmluZyB0aGUgc2VsZWN0aW9uIGZy
b20gb3RoZXIgQXRrVGV4dCBvYmplY3QgKHNob3VsZCBmYWlsKQorICAgIHJlc3VsdCA9IGF0a190
ZXh0X3JlbW92ZV9zZWxlY3Rpb24ocGFyYWdyYXBoMiwgMCk7CisgICAgZ19hc3NlcnQoIXJlc3Vs
dCk7CisKKyAgICAvLyBSZW1vdmUgdGhlIHNlbGVjdGlvbiBhbmQgdGVzdCBldmVyeXRoaW5nIGFn
YWluCisgICAgcmVzdWx0ID0gYXRrX3RleHRfcmVtb3ZlX3NlbGVjdGlvbihwYXJhZ3JhcGgxLCAw
KTsKKyAgICBnX2Fzc2VydChyZXN1bHQpOworICAgIGdfYXNzZXJ0X2NtcGludChhdGtfdGV4dF9n
ZXRfbl9zZWxlY3Rpb25zKHBhcmFncmFwaDEpLCA9PSwgMCk7CisgICAgc2VsZWN0ZWRUZXh0ID0g
YXRrX3RleHRfZ2V0X3NlbGVjdGlvbihwYXJhZ3JhcGgxLCAwLCAmc3RhcnRPZmZzZXQsICZlbmRP
ZmZzZXQpOworICAgIGdfYXNzZXJ0X2NtcGludChzdGFydE9mZnNldCwgPT0sIDApOworICAgIGdf
YXNzZXJ0X2NtcGludChlbmRPZmZzZXQsID09LCAwKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIoc2Vs
ZWN0ZWRUZXh0LCA9PSwgTlVMTCk7CisgICAgZ19mcmVlIChzZWxlY3RlZFRleHQpOworCisgICAg
Ly8gU2Vjb25kIHBhcmFncmFwaCAodGV4dCArIGxpbmsgKyB0ZXh0KQorCisgICAgLy8gU2V0IGEg
c2VsZWN0aW9uIHBhcnRpYWxseSBjb3ZlcmluZyB0aGUgbGluayBhbmQgdGVzdCBpdAorICAgIHJl
c3VsdCA9IGF0a190ZXh0X3NldF9zZWxlY3Rpb24ocGFyYWdyYXBoMiwgMCwgNywgMjEpOworICAg
IGdfYXNzZXJ0KHJlc3VsdCk7CisKKyAgICAvLyBUZXN0IHRoZSBwYXJhZ3JhcGggZmlyc3QKKyAg
ICBnX2Fzc2VydF9jbXBpbnQoYXRrX3RleHRfZ2V0X25fc2VsZWN0aW9ucyhwYXJhZ3JhcGgyKSwg
PT0sIDEpOworICAgIHNlbGVjdGVkVGV4dCA9IGF0a190ZXh0X2dldF9zZWxlY3Rpb24ocGFyYWdy
YXBoMiwgMCwgJnN0YXJ0T2Zmc2V0LCAmZW5kT2Zmc2V0KTsKKyAgICBnX2Fzc2VydF9jbXBpbnQo
c3RhcnRPZmZzZXQsID09LCA3KTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoZW5kT2Zmc2V0LCA9PSwg
MjEpOworICAgIGdfYXNzZXJ0X2NtcHN0cihzZWxlY3RlZFRleHQsID09LCAicmFwaCB3aXRoIGEg
bGkiKTsKKyAgICBnX2ZyZWUgKHNlbGVjdGVkVGV4dCk7CisKKyAgICAvLyBOb3cgdGVzdCBqdXN0
IHRoZSBsaW5rCisgICAgZ19hc3NlcnRfY21waW50KGF0a190ZXh0X2dldF9uX3NlbGVjdGlvbnMo
bGluayksID09LCAxKTsKKyAgICBzZWxlY3RlZFRleHQgPSBhdGtfdGV4dF9nZXRfc2VsZWN0aW9u
KGxpbmssIDAsICZzdGFydE9mZnNldCwgJmVuZE9mZnNldCk7CisgICAgZ19hc3NlcnRfY21waW50
KHN0YXJ0T2Zmc2V0LCA9PSwgMCk7CisgICAgZ19hc3NlcnRfY21waW50KGVuZE9mZnNldCwgPT0s
IDQpOworICAgIGdfYXNzZXJ0X2NtcHN0cihzZWxlY3RlZFRleHQsID09LCAiYSBsaSIpOworICAg
IGdfZnJlZSAoc2VsZWN0ZWRUZXh0KTsKKworICAgIC8vIFJlbW92ZSBzZWxlY3Rpb25zIGFuZCB0
ZXh0IGV2ZXJ5dGhpbmcgYWdhaW4KKyAgICByZXN1bHQgPSBhdGtfdGV4dF9yZW1vdmVfc2VsZWN0
aW9uKHBhcmFncmFwaDIsIDApOworICAgIGdfYXNzZXJ0KHJlc3VsdCk7CisgICAgZ19hc3NlcnRf
Y21waW50KGF0a190ZXh0X2dldF9uX3NlbGVjdGlvbnMocGFyYWdyYXBoMiksID09LCAwKTsKKyAg
ICBzZWxlY3RlZFRleHQgPSBhdGtfdGV4dF9nZXRfc2VsZWN0aW9uKHBhcmFncmFwaDIsIDAsICZz
dGFydE9mZnNldCwgJmVuZE9mZnNldCk7CisgICAgZ19hc3NlcnRfY21waW50KHN0YXJ0T2Zmc2V0
LCA9PSwgMCk7CisgICAgZ19hc3NlcnRfY21waW50KGVuZE9mZnNldCwgPT0sIDApOworICAgIGdf
YXNzZXJ0X2NtcHN0cihzZWxlY3RlZFRleHQsID09LCBOVUxMKTsKKyAgICBnX2ZyZWUgKHNlbGVj
dGVkVGV4dCk7CisKKyAgICBnX2Fzc2VydF9jbXBpbnQoYXRrX3RleHRfZ2V0X25fc2VsZWN0aW9u
cyhsaW5rKSwgPT0sIDApOworICAgIHNlbGVjdGVkVGV4dCA9IGF0a190ZXh0X2dldF9zZWxlY3Rp
b24obGluaywgMCwgJnN0YXJ0T2Zmc2V0LCAmZW5kT2Zmc2V0KTsKKyAgICBnX2Fzc2VydF9jbXBp
bnQoc3RhcnRPZmZzZXQsID09LCAwKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoZW5kT2Zmc2V0LCA9
PSwgMCk7CisgICAgZ19hc3NlcnRfY21wc3RyKHNlbGVjdGVkVGV4dCwgPT0sIE5VTEwpOworICAg
IGdfZnJlZSAoc2VsZWN0ZWRUZXh0KTsKKworICAgIGdfb2JqZWN0X3VucmVmKHBhcmFncmFwaDEp
OworICAgIGdfb2JqZWN0X3VucmVmKHBhcmFncmFwaDIpOworICAgIGdfb2JqZWN0X3VucmVmKHdl
YlZpZXcpOworfQorCiBpbnQgbWFpbihpbnQgYXJnYywgY2hhcioqIGFyZ3YpCiB7CiAgICAgZ190
aHJlYWRfaW5pdChOVUxMKTsKQEAgLTg2MCw2ICs5NzUsNyBAQCBpbnQgbWFpbihpbnQgYXJnYywg
Y2hhcioqIGFyZ3YpCiAgICAgZ190ZXN0X2FkZF9mdW5jKCIvd2Via2l0L2F0ay9nZXRIZWFkZXJz
SW5UYWJsZSIsIHRlc3RXZWJraXRBdGtHZXRIZWFkZXJzSW5UYWJsZSk7CiAgICAgZ190ZXN0X2Fk
ZF9mdW5jKCIvd2Via2l0L2F0ay90ZXh0QXR0cmlidXRlcyIsIHRlc3RXZWJraXRBdGtUZXh0QXR0
cmlidXRlcyk7CiAgICAgZ190ZXN0X2FkZF9mdW5jKCIvd2Via2l0L2F0ay9nZXRfZXh0ZW50cyIs
IHRlc3Rfd2Via2l0X2F0a19nZXRfZXh0ZW50cyk7CisgICAgZ190ZXN0X2FkZF9mdW5jKCIvd2Vi
a2l0L2F0ay90ZXh0U2VsZWN0aW9ucyIsIHRlc3RXZWtpdEF0a1RleHRTZWxlY3Rpb25zKTsKICAg
ICByZXR1cm4gZ190ZXN0X3J1biAoKTsKIH0KIAotLSAKMS43LjAuNAoK
</data>
<flag name="review"
          id="55838"
          type_id="1"
          status="-"
          setter="mrobinson"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>67206</attachid>
            <date>2010-09-10 11:04:13 -0700</date>
            <delta_ts>2010-09-10 23:03:58 -0700</delta_ts>
            <desc>Path proposal + Unit tests</desc>
            <filename>0002-2010-09-10-Mario-Sanchez-Prada-msanchez-igalia.com.patch</filename>
            <type>text/plain</type>
            <size>23161</size>
            <attacher name="Mario Sanchez Prada">mario</attacher>
            
              <data encoding="base64">RnJvbSA0ODkzNDg1YWI5NDBiMmQ0MTNmM2U3ZDg3YTRlZmM5ZTM1ODI4YjE4IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBNYXJpbyBTYW5jaGV6IFByYWRhIDxtc2FuY2hlekBpZ2FsaWEu
Y29tPgpEYXRlOiBXZWQsIDggU2VwIDIwMTAgMTM6MzE6MDkgKzAyMDAKU3ViamVjdDogW1BBVENI
IDIvMl0gMjAxMC0wOS0xMCAgTWFyaW8gU2FuY2hleiBQcmFkYSAgPG1zYW5jaGV6QGlnYWxpYS5j
b20+CgogICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgoKICAgICAgICBbR1RLXSBB
VHMgc2hvdWxkIGJlIGFibGUgdG8gc2VsZWN0L3Vuc2VsZWN0IHRleHQKICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjU2NzMKCiAgICAgICAgSW1wbGVtZW50
IEF0a1RleHQncyBzZXRTZWxlY3Rpb24gYW5kIHJlbW92ZVNlbGVjdGlvbiBmdW5jdGlvbnMKCiAg
ICAgICAgKiBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuY3BwOgogICAgICAgIChX
ZWJDb3JlOjpBY2Nlc3NpYmlsaXR5T2JqZWN0Ojp2aXNpYmxlUG9zaXRpb25SYW5nZUZvclJhbmdl
KToKICAgICAgICBNb3ZlZCBzb21lIEdUSyBzcGVjaWZpYyBjb2RlIGZyb20gYSBpZmRlZi1lbmRp
ZiByZWdpb24gdG8KICAgICAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0QXRrLmNwcAogICAgICAgICog
YWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0Lmg6CiAgICAgICAgKiBhY2Nlc3NpYmls
aXR5L2d0ay9BY2Nlc3NpYmlsaXR5T2JqZWN0QXRrLmNwcDoKICAgICAgICAoV2ViQ29yZTo6QWNj
ZXNzaWJpbGl0eU9iamVjdDo6Z2V0TGVuZ3RoRm9yVGV4dFJhbmdlKTogTmV3LgogICAgICAgICog
YWNjZXNzaWJpbGl0eS9ndGsvQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJBdGsuY3BwOgogICAg
ICAgICh3ZWJraXRfYWNjZXNzaWJsZV90ZXh0X3JlbW92ZV9zZWxlY3Rpb24pOiBJbXBsZW1lbnRl
ZCBmb2xsb3dpbmcKICAgICAgICB0aGUgbGVhZCBvZiBHQUlMJ3MgaW1wbGVtZW50YXRpb24gb2Yg
dGhlIEF0a1RleHQgaW50ZXJmYWNlLgogICAgICAgICh3ZWJraXRfYWNjZXNzaWJsZV90ZXh0X3Nl
dF9zZWxlY3Rpb24pOiBJbXBsZW1lbnRlZCBmb2xsb3dpbmcKICAgICAgICB0aGUgbGVhZCBvZiBH
QUlMJ3MgaW1wbGVtZW50YXRpb24gb2YgdGhlIEF0a1RleHQgaW50ZXJmYWNlLgogICAgICAgICh3
ZWJraXRfYWNjZXNzaWJsZV90ZXh0X3NldF9jYXJldF9vZmZzZXQpOiBDaGFuZ2VkIHRvIGRpcmVj
dGx5IHVzZQogICAgICAgIHZpc2libGVQb3NpdGlvblJhbmdlRm9yUmFuZ2Ugbm93IHRoYXQgdGhl
cmUncyBubyBsb25nZXIgYSBwcm9ibGVtCiAgICAgICAgd2l0aCB0aGF0LCBhcyBpdCB3YXMgaW4g
dGhlIHBhc3QgKG9ubHkgd29ya2VkIGZvciB0ZXh0IGNvbnRyb2xzKS4KCiAgICAgICAgTmV3IHRl
c3RzIHRvIGNoZWNrIGdldHRpbmcsIHNldHRpbmcgYW5kIHJlbW92aW5nIHRleHQgc2VsZWN0aW9u
cwoKICAgICAgICAqIHRlc3RzL3Rlc3RhdGsuYzoKICAgICAgICAodGVzdFdla2l0QXRrVGV4dFNl
bGVjdGlvbnMpOiBOZXcgdW5pdCB0ZXN0cyB0byBjaGVjayBhbGwgdGhlIHRleHQKICAgICAgICBz
ZWxlY3Rpb24gcmVsYXRlZCBmdW5jdGlvbnMgYWx0b2dldGhlciB0aHJvdWdoIGEgc2luZ2xlIHRl
c3QKICAgICAgICBmdW5jdGlvbi4KICAgICAgICAobWFpbik6CgogICAgICAgIE1ha2Ugc3VyZSB0
aGF0IGNvZGUgZGVwZW5kYW50IG9uIGdldHRpbmcgaW5mb3JtYXRpb24gZnJvbSB0aGUKICAgICAg
ICBjbGlwYm9hcmQgZ2V0cyBleGVjdXRlZCBvbmx5IHdoZW4gdGhlcmUncyBhIEdESyB3aW5kb3cg
YXNzb2NpYXRlZAogICAgICAgIHRvIHRoZSB3ZWJ2aWV3IHdpZGdldCwgYXMgdGhhdCdzIG5vdCB0
aGUgY2FzZSB3aGVuIGV4ZWN1dGluZyB0aGUKICAgICAgICB1bml0IHRlc3RzICh0aGUgd2VkYnZp
ZXcgaXMgbm90IGluc2lkZSBvZiBhbnkgdG9wbGV2ZWwgd2luZG93KSBhbmQKICAgICAgICB3aWxs
IG1ha2UgdGhlIHRlc3RzIGNyYXNoIGlmIG5vdCB0YWtlbiBpbnRvIGFjY291bnQuCgogICAgICAg
ICogV2ViQ29yZVN1cHBvcnQvRWRpdG9yQ2xpZW50R3RrLmNwcDoKICAgICAgICAoV2ViS2l0OjpF
ZGl0b3JDbGllbnQ6OnJlc3BvbmRUb0NoYW5nZWRTZWxlY3Rpb24pOgotLS0KIFdlYkNvcmUvQ2hh
bmdlTG9nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAyNSArKysrCiBXZWJD
b3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdC5jcHAgICAgICB8ICAgMTcgKy0t
LQogV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuaCAgICAgICAgfCAg
ICAyICsKIC4uLi9hY2Nlc3NpYmlsaXR5L2d0ay9BY2Nlc3NpYmlsaXR5T2JqZWN0QXRrLmNwcCAg
IHwgICAyMyArKysrCiAuLi4vZ3RrL0FjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyQXRrLmNwcCAg
ICAgICAgICB8ICAgNTIgKysrKysrLS0tCiBXZWJLaXQvZ3RrL0NoYW5nZUxvZyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB8ICAgMjQgKysrKwogV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9y
dC9FZGl0b3JDbGllbnRHdGsuY3BwICAgICAgfCAgIDM3ICsrKystLQogV2ViS2l0L2d0ay90ZXN0
cy90ZXN0YXRrLmMgICAgICAgICAgICAgICAgICAgICAgICAgfCAgMTIyICsrKysrKysrKysrKysr
KysrKystCiA4IGZpbGVzIGNoYW5nZWQsIDI1NSBpbnNlcnRpb25zKCspLCA0NyBkZWxldGlvbnMo
LSkKCmRpZmYgLS1naXQgYS9XZWJDb3JlL0NoYW5nZUxvZyBiL1dlYkNvcmUvQ2hhbmdlTG9nCmlu
ZGV4IDNjMjFlMDEuLmY0Nzc0NjcgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBi
L1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0yLDYgKzIsMzEgQEAKIAogICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KIAorICAgICAgICBbR1RLXSBBVHMgc2hvdWxkIGJlIGFibGUgdG8g
c2VsZWN0L3Vuc2VsZWN0IHRleHQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTI1NjczCisKKyAgICAgICAgSW1wbGVtZW50IEF0a1RleHQncyBzZXRTZWxl
Y3Rpb24gYW5kIHJlbW92ZVNlbGVjdGlvbiBmdW5jdGlvbnMKKworICAgICAgICAqIGFjY2Vzc2li
aWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3Np
YmlsaXR5T2JqZWN0Ojp2aXNpYmxlUG9zaXRpb25SYW5nZUZvclJhbmdlKToKKyAgICAgICAgTW92
ZWQgc29tZSBHVEsgc3BlY2lmaWMgY29kZSBmcm9tIGEgaWZkZWYtZW5kaWYgcmVnaW9uIHRvCisg
ICAgICAgIEFjY2Vzc2liaWxpdHlPYmplY3RBdGsuY3BwCisgICAgICAgICogYWNjZXNzaWJpbGl0
eS9BY2Nlc3NpYmlsaXR5T2JqZWN0Lmg6CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9ndGsvQWNj
ZXNzaWJpbGl0eU9iamVjdEF0ay5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5
T2JqZWN0OjpnZXRMZW5ndGhGb3JUZXh0UmFuZ2UpOiBOZXcuCisgICAgICAgICogYWNjZXNzaWJp
bGl0eS9ndGsvQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJBdGsuY3BwOgorICAgICAgICAod2Vi
a2l0X2FjY2Vzc2libGVfdGV4dF9yZW1vdmVfc2VsZWN0aW9uKTogSW1wbGVtZW50ZWQgZm9sbG93
aW5nCisgICAgICAgIHRoZSBsZWFkIG9mIEdBSUwncyBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgQXRr
VGV4dCBpbnRlcmZhY2UuCisgICAgICAgICh3ZWJraXRfYWNjZXNzaWJsZV90ZXh0X3NldF9zZWxl
Y3Rpb24pOiBJbXBsZW1lbnRlZCBmb2xsb3dpbmcKKyAgICAgICAgdGhlIGxlYWQgb2YgR0FJTCdz
IGltcGxlbWVudGF0aW9uIG9mIHRoZSBBdGtUZXh0IGludGVyZmFjZS4KKyAgICAgICAgKHdlYmtp
dF9hY2Nlc3NpYmxlX3RleHRfc2V0X2NhcmV0X29mZnNldCk6IENoYW5nZWQgdG8gZGlyZWN0bHkg
dXNlCisgICAgICAgIHZpc2libGVQb3NpdGlvblJhbmdlRm9yUmFuZ2Ugbm93IHRoYXQgdGhlcmUn
cyBubyBsb25nZXIgYSBwcm9ibGVtCisgICAgICAgIHdpdGggdGhhdCwgYXMgaXQgd2FzIGluIHRo
ZSBwYXN0IChvbmx5IHdvcmtlZCBmb3IgdGV4dCBjb250cm9scykuCisKKzIwMTAtMDktMTAgIE1h
cmlvIFNhbmNoZXogUHJhZGEgIDxtc2FuY2hlekBpZ2FsaWEuY29tPgorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCiAgICAgICAgIFtHdGtdIGdldF9uX3NlbGVjdGlvbnMg
YW5kIGdldF9zZWxlY3Rpb24gZmFpbCB3aGVuIHNlbGVjdGluZyB0ZXh0IGFjcm9zcyBvYmplY3Qg
Ym91bmRhcmllcwogICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MjY5OTEKIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxp
dHlPYmplY3QuY3BwIGIvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3Qu
Y3BwCmluZGV4IGE2YmIwMzMuLjNkZGNkYzUgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYWNjZXNzaWJp
bGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmNwcAorKysgYi9XZWJDb3JlL2FjY2Vzc2liaWxpdHkv
QWNjZXNzaWJpbGl0eU9iamVjdC5jcHAKQEAgLTM3MywyMiArMzczLDcgQEAgVmlzaWJsZVBvc2l0
aW9uUmFuZ2UgQWNjZXNzaWJpbGl0eU9iamVjdDo6c3R5bGVSYW5nZUZvclBvc2l0aW9uKGNvbnN0
IFZpc2libGVQb3MKIC8vIE5PVEU6IENvbnNpZGVyIHByb3ZpZGluZyB0aGlzIHV0aWxpdHkgbWV0
aG9kIGFzIEFYIEFQSQogVmlzaWJsZVBvc2l0aW9uUmFuZ2UgQWNjZXNzaWJpbGl0eU9iamVjdDo6
dmlzaWJsZVBvc2l0aW9uUmFuZ2VGb3JSYW5nZShjb25zdCBQbGFpblRleHRSYW5nZSYgcmFuZ2Up
IGNvbnN0CiB7Ci0gICAgdW5zaWduZWQgdGV4dExlbmd0aCA9IHRleHQoKS5sZW5ndGgoKTsKLSNp
ZiBQTEFURk9STShHVEspCi0gICAgLy8gR3RrIEFUcyBuZWVkIHRoaXMgZm9yIGFsbCB0ZXh0IG9i
amVjdHM7IG5vdCBqdXN0IHRleHQgY29udHJvbHMuCi0gICAgaWYgKCF0ZXh0TGVuZ3RoKSB7Ci0g
ICAgICAgIE5vZGUqIG5vZGUgPSB0aGlzLT5ub2RlKCk7Ci0gICAgICAgIFJlbmRlck9iamVjdCog
cmVuZGVyZXIgPSBub2RlID8gbm9kZS0+cmVuZGVyZXIoKSA6IDA7Ci0gICAgICAgIGlmIChyZW5k
ZXJlciAmJiByZW5kZXJlci0+aXNUZXh0KCkpIHsKLSAgICAgICAgICAgIFJlbmRlclRleHQqIHJl
bmRlclRleHQgPSB0b1JlbmRlclRleHQocmVuZGVyZXIpOwotICAgICAgICAgICAgdGV4dExlbmd0
aCA9IHJlbmRlclRleHQgPyByZW5kZXJUZXh0LT50ZXh0TGVuZ3RoKCkgOiAwOwotICAgICAgICB9
Ci0gICAgICAgIC8vIEdldCB0aGUgdGV4dCBsZW5ndGggZnJvbSB0aGUgZWxlbWVudHMgdW5kZXIg
dGhlCi0gICAgICAgIC8vIGFjY2Vzc2liaWxpdHkgb2JqZWN0IGlmIHRoZSB2YWx1ZSBpcyBzdGls
bCB6ZXJvLgotICAgICAgICBpZiAoIXRleHRMZW5ndGggJiYgYWxsb3dzVGV4dFJhbmdlcygpKQot
ICAgICAgICAgICAgdGV4dExlbmd0aCA9IHRleHRVbmRlckVsZW1lbnQoKS5sZW5ndGgoKTsKLSAg
ICB9Ci0jZW5kaWYKKyAgICB1bnNpZ25lZCB0ZXh0TGVuZ3RoID0gZ2V0TGVuZ3RoRm9yVGV4dFJh
bmdlKCk7CiAgICAgaWYgKHJhbmdlLnN0YXJ0ICsgcmFuZ2UubGVuZ3RoID4gdGV4dExlbmd0aCkK
ICAgICAgICAgcmV0dXJuIFZpc2libGVQb3NpdGlvblJhbmdlKCk7CiAKZGlmZiAtLWdpdCBhL1dl
YkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmggYi9XZWJDb3JlL2FjY2Vz
c2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdC5oCmluZGV4IDBlNDRkMWIuLmU4ZjZkMWIgMTAw
NjQ0Ci0tLSBhL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmgKKysr
IGIvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuaApAQCAtNTc0LDgg
KzU3NCwxMCBAQCBwcm90ZWN0ZWQ6CiAgICAgCiAjaWYgUExBVEZPUk0oR1RLKQogICAgIGJvb2wg
YWxsb3dzVGV4dFJhbmdlcygpIGNvbnN0OworICAgIHVuc2lnbmVkIGdldExlbmd0aEZvclRleHRS
YW5nZSgpIGNvbnN0OwogI2Vsc2UKICAgICBib29sIGFsbG93c1RleHRSYW5nZXMoKSBjb25zdCB7
IHJldHVybiBpc1RleHRDb250cm9sKCk7IH0KKyAgICB1bnNpZ25lZCBnZXRMZW5ndGhGb3JUZXh0
UmFuZ2UoKSBjb25zdCB7IHJldHVybiB0ZXh0KCkubGVuZ3RoKCk7IH0KICNlbmRpZgogCiAjaWYg
UExBVEZPUk0oTUFDKQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2d0ay9BY2Nl
c3NpYmlsaXR5T2JqZWN0QXRrLmNwcCBiL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9ndGsvQWNjZXNz
aWJpbGl0eU9iamVjdEF0ay5jcHAKaW5kZXggYjIyYTUxZS4uODcwMmNhOCAxMDA2NDQKLS0tIGEv
V2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2d0ay9BY2Nlc3NpYmlsaXR5T2JqZWN0QXRrLmNwcAorKysg
Yi9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvZ3RrL0FjY2Vzc2liaWxpdHlPYmplY3RBdGsuY3BwCkBA
IC0yMCw2ICsyMCw4IEBACiAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJBY2Nlc3Np
YmlsaXR5T2JqZWN0LmgiCisjaW5jbHVkZSAiUmVuZGVyT2JqZWN0LmgiCisjaW5jbHVkZSAiUmVu
ZGVyVGV4dC5oIgogCiAjaW5jbHVkZSA8Z2xpYi1vYmplY3QuaD4KIApAQCAtMTAyLDYgKzEwNCwy
NyBAQCBib29sIEFjY2Vzc2liaWxpdHlPYmplY3Q6OmFsbG93c1RleHRSYW5nZXMoKSBjb25zdAog
ICAgIHJldHVybiBpc1RleHRDb250cm9sKCkgfHwgaXNXZWJBcmVhKCkgfHwgaXNHcm91cCgpIHx8
IGlzTGluaygpIHx8IGlzSGVhZGluZygpOwogfQogCit1bnNpZ25lZCBBY2Nlc3NpYmlsaXR5T2Jq
ZWN0OjpnZXRMZW5ndGhGb3JUZXh0UmFuZ2UoKSBjb25zdAoreworICAgIHVuc2lnbmVkIHRleHRM
ZW5ndGggPSB0ZXh0KCkubGVuZ3RoKCk7CisKKyAgICAvLyBHdGsgQVRzIG5lZWQgdGhpcyBmb3Ig
YWxsIHRleHQgb2JqZWN0czsgbm90IGp1c3QgdGV4dCBjb250cm9scy4KKyAgICBpZiAoIXRleHRM
ZW5ndGgpIHsKKyAgICAgICAgTm9kZSogbm9kZSA9IHRoaXMtPm5vZGUoKTsKKyAgICAgICAgUmVu
ZGVyT2JqZWN0KiByZW5kZXJlciA9IG5vZGUgPyBub2RlLT5yZW5kZXJlcigpIDogMDsKKyAgICAg
ICAgaWYgKHJlbmRlcmVyICYmIHJlbmRlcmVyLT5pc1RleHQoKSkgeworICAgICAgICAgICAgUmVu
ZGVyVGV4dCogcmVuZGVyVGV4dCA9IHRvUmVuZGVyVGV4dChyZW5kZXJlcik7CisgICAgICAgICAg
ICB0ZXh0TGVuZ3RoID0gcmVuZGVyVGV4dCA/IHJlbmRlclRleHQtPnRleHRMZW5ndGgoKSA6IDA7
CisgICAgICAgIH0KKyAgICAgICAgLy8gR2V0IHRoZSB0ZXh0IGxlbmd0aCBmcm9tIHRoZSBlbGVt
ZW50cyB1bmRlciB0aGUKKyAgICAgICAgLy8gYWNjZXNzaWJpbGl0eSBvYmplY3QgaWYgdGhlIHZh
bHVlIGlzIHN0aWxsIHplcm8uCisgICAgICAgIGlmICghdGV4dExlbmd0aCAmJiBhbGxvd3NUZXh0
UmFuZ2VzKCkpCisgICAgICAgICAgICB0ZXh0TGVuZ3RoID0gdGV4dFVuZGVyRWxlbWVudCgpLmxl
bmd0aCgpOworICAgIH0KKworICAgIHJldHVybiB0ZXh0TGVuZ3RoOworfQorCiB9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBIQVZFKEFDQ0VTU0lCSUxJVFkpCmRpZmYgLS1naXQg
YS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvZ3RrL0FjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyQXRr
LmNwcCBiL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9ndGsvQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBw
ZXJBdGsuY3BwCmluZGV4IGI2NmMzODcuLjIyMjg3MTggMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYWNj
ZXNzaWJpbGl0eS9ndGsvQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJBdGsuY3BwCisrKyBiL1dl
YkNvcmUvYWNjZXNzaWJpbGl0eS9ndGsvQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJBdGsuY3Bw
CkBAIC0xMzUyLDEwICsxMzUyLDExIEBAIHN0YXRpYyBib29sIHNlbGVjdGlvbkJlbG9uZ3NUb09i
amVjdChBY2Nlc3NpYmlsaXR5T2JqZWN0KiBjb3JlT2JqZWN0LCBWaXNpYmxlU2VsCiAgICAgLy8g
Ym91bmRhcmllcyBmb3IgdGhlIHNlbGVjdGVkIG5vZGUuIFdlIHdhbnQgdG8gY2hlY2sgd2hldGhl
ciB0aGUKICAgICAvLyBub2RlIGlzIGFjdHVhbGx5IGluc2lkZSB0aGUgcmVnaW9uLCBhdCBsZWFz
dCBwYXJ0aWFsbHkKICAgICBOb2RlKiBub2RlID0gY29yZU9iamVjdC0+bm9kZSgpOworICAgIE5v
ZGUqIGxhc3REZXNjZW5kYW50ID0gbm9kZS0+bGFzdERlc2NlbmRhbnQoKTsKICAgICBFeGNlcHRp
b25Db2RlIGVjID0gMDsKICAgICByZXR1cm4gKHJhbmdlLT5pbnRlcnNlY3RzTm9kZShub2RlLCBl
YykKICAgICAgICAgICAgICYmIChyYW5nZS0+ZW5kQ29udGFpbmVyKCkgIT0gbm9kZSB8fCByYW5n
ZS0+ZW5kT2Zmc2V0KCkpCi0gICAgICAgICAgICAmJiAocmFuZ2UtPnN0YXJ0Q29udGFpbmVyKCkg
IT0gbm9kZSB8fCByYW5nZS0+c3RhcnRPZmZzZXQoKSAhPSBsYXN0T2Zmc2V0SW5Ob2RlKG5vZGUp
KSk7CisgICAgICAgICAgICAmJiAocmFuZ2UtPnN0YXJ0Q29udGFpbmVyKCkgIT0gbGFzdERlc2Nl
bmRhbnQgfHwgcmFuZ2UtPnN0YXJ0T2Zmc2V0KCkgIT0gbGFzdE9mZnNldEluTm9kZShsYXN0RGVz
Y2VuZGFudCkpKTsKIH0KIAogc3RhdGljIHZvaWQgZ2V0U2VsZWN0aW9uT2Zmc2V0c0Zvck9iamVj
dChBY2Nlc3NpYmlsaXR5T2JqZWN0KiBjb3JlT2JqZWN0LCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxl
Y3Rpb24sIGdpbnQmIHN0YXJ0T2Zmc2V0LCBnaW50JiBlbmRPZmZzZXQpCkBAIC0xNDU4LDMyICsx
NDU5LDUxIEBAIHN0YXRpYyBnYm9vbGVhbiB3ZWJraXRfYWNjZXNzaWJsZV90ZXh0X2FkZF9zZWxl
Y3Rpb24oQXRrVGV4dCogdGV4dCwgZ2ludCBzdGFydF9vCiAgICAgcmV0dXJuIEZBTFNFOwogfQog
Ci1zdGF0aWMgZ2Jvb2xlYW4gd2Via2l0X2FjY2Vzc2libGVfdGV4dF9yZW1vdmVfc2VsZWN0aW9u
KEF0a1RleHQqIHRleHQsIGdpbnQgc2VsZWN0aW9uX251bSkKK3N0YXRpYyBnYm9vbGVhbiB3ZWJr
aXRfYWNjZXNzaWJsZV90ZXh0X3NldF9zZWxlY3Rpb24oQXRrVGV4dCogdGV4dCwgZ2ludCBzZWxl
Y3Rpb25OdW0sIGdpbnQgc3RhcnRPZmZzZXQsIGdpbnQgZW5kT2Zmc2V0KQogewotICAgIG5vdElt
cGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIEZBTFNFOworICAgIC8vIFdlYkNvcmUgZG9lcyBub3Qg
c3VwcG9ydCBtdWx0aXBsZSBzZWxlY3Rpb24sIHNvIGFueXRoaW5nIGJ1dCAwIGRvZXMgbm90IG1h
a2Ugc2Vuc2UgZm9yIG5vdy4KKyAgICBpZiAoc2VsZWN0aW9uTnVtKQorICAgICAgICByZXR1cm4g
RkFMU0U7CisKKyAgICAvLyBDb25zaWRlciAtMSBhbmQgb3V0LW9mLWJvdW5kIHZhbHVlcyBhbmQg
Y29ycmVjdCB0aGVtIHRvIGxlbmd0aAorICAgIGdpbnQgdGV4dENvdW50ID0gd2Via2l0X2FjY2Vz
c2libGVfdGV4dF9nZXRfY2hhcmFjdGVyX2NvdW50KHRleHQpOworICAgIGlmIChzdGFydE9mZnNl
dCA8IDAgfHwgc3RhcnRPZmZzZXQgPiB0ZXh0Q291bnQpCisgICAgICBzdGFydE9mZnNldCA9IHRl
eHRDb3VudDsKKyAgICBpZiAoZW5kT2Zmc2V0IDwgMCB8fCBlbmRPZmZzZXQgPiB0ZXh0Q291bnQp
CisgICAgICBlbmRPZmZzZXQgPSB0ZXh0Q291bnQ7CisKKyAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0
KiBjb3JlT2JqZWN0ID0gY29yZSh0ZXh0KTsKKyAgICBQbGFpblRleHRSYW5nZSB0ZXh0UmFuZ2Uo
c3RhcnRPZmZzZXQsIGVuZE9mZnNldCAtIHN0YXJ0T2Zmc2V0KTsKKyAgICBWaXNpYmxlUG9zaXRp
b25SYW5nZSByYW5nZSA9IGNvcmVPYmplY3QtPnZpc2libGVQb3NpdGlvblJhbmdlRm9yUmFuZ2Uo
dGV4dFJhbmdlKTsKKyAgICBjb3JlT2JqZWN0LT5zZXRTZWxlY3RlZFZpc2libGVQb3NpdGlvblJh
bmdlKHJhbmdlKTsKKworICAgIHJldHVybiBUUlVFOwogfQogCi1zdGF0aWMgZ2Jvb2xlYW4gd2Vi
a2l0X2FjY2Vzc2libGVfdGV4dF9zZXRfc2VsZWN0aW9uKEF0a1RleHQqIHRleHQsIGdpbnQgc2Vs
ZWN0aW9uX251bSwgZ2ludCBzdGFydF9vZmZzZXQsIGdpbnQgZW5kX29mZnNldCkKK3N0YXRpYyBn
Ym9vbGVhbiB3ZWJraXRfYWNjZXNzaWJsZV90ZXh0X3JlbW92ZV9zZWxlY3Rpb24oQXRrVGV4dCog
dGV4dCwgZ2ludCBzZWxlY3Rpb25OdW0pCiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICBy
ZXR1cm4gRkFMU0U7CisgICAgLy8gV2ViQ29yZSBkb2VzIG5vdCBzdXBwb3J0IG11bHRpcGxlIHNl
bGVjdGlvbiwgc28gYW55dGhpbmcgYnV0IDAgZG9lcyBub3QgbWFrZSBzZW5zZSBmb3Igbm93Lgor
ICAgIGlmIChzZWxlY3Rpb25OdW0pCisgICAgICAgIHJldHVybiBGQUxTRTsKKworICAgIC8vIERv
IG5vdGhpbmcgaWYgY3VycmVudCBzZWxlY3Rpb24gZG9lc24ndCBiZWxvbmcgdG8gdGhlIG9iamVj
dAorICAgIGlmICghd2Via2l0X2FjY2Vzc2libGVfdGV4dF9nZXRfbl9zZWxlY3Rpb25zKHRleHQp
KQorICAgICAgICByZXR1cm4gRkFMU0U7CisKKyAgICAvLyBTZXQgYSBuZXcgMC1zaXplZCBzZWxl
Y3Rpb24gdG8gdGhlIGNhcmV0IHBvc2l0aW9uLCBpbiBvcmRlcgorICAgIC8vIHRvIHNpbXVsYXRl
IHNlbGVjdGlvbiByZW1vdmFsIChHQUlMIHN0eWxlKQorICAgIGdpbnQgY2FyZXRPZmZzZXQgPSB3
ZWJraXRfYWNjZXNzaWJsZV90ZXh0X2dldF9jYXJldF9vZmZzZXQodGV4dCk7CisgICAgcmV0dXJu
IHdlYmtpdF9hY2Nlc3NpYmxlX3RleHRfc2V0X3NlbGVjdGlvbih0ZXh0LCBzZWxlY3Rpb25OdW0s
IGNhcmV0T2Zmc2V0LCBjYXJldE9mZnNldCk7CiB9CiAKIHN0YXRpYyBnYm9vbGVhbiB3ZWJraXRf
YWNjZXNzaWJsZV90ZXh0X3NldF9jYXJldF9vZmZzZXQoQXRrVGV4dCogdGV4dCwgZ2ludCBvZmZz
ZXQpCiB7CiAgICAgQWNjZXNzaWJpbGl0eU9iamVjdCogY29yZU9iamVjdCA9IGNvcmUodGV4dCk7
CiAKLSAgICAvLyBGSVhNRTogV2UgbmVlZCB0byByZWltcGxlbWVudCB2aXNpYmxlUG9zaXRpb25S
YW5nZUZvclJhbmdlIGhlcmUKLSAgICAvLyBiZWNhdXNlIHRoZSBhY3R1YWwgZnVuY3Rpb24gY2hl
Y2tzIHRoZSBvZmZzZXQgaXMgd2l0aGluIHRoZQotICAgIC8vIGJvdW5kYXJpZXMgb2YgdGV4dCgp
Lmxlbmd0aCgpLCBidXQgdGV4dCgpIG9ubHkgd29ya3MgZm9yIHRleHQKLSAgICAvLyBjb250cm9s
cy4uLgotICAgIFZpc2libGVQb3NpdGlvbiBzdGFydFBvc2l0aW9uID0gY29yZU9iamVjdC0+dmlz
aWJsZVBvc2l0aW9uRm9ySW5kZXgob2Zmc2V0KTsKLSAgICBzdGFydFBvc2l0aW9uLnNldEFmZmlu
aXR5KERPV05TVFJFQU0pOwotICAgIFZpc2libGVQb3NpdGlvbiBlbmRQb3NpdGlvbiA9IGNvcmVP
YmplY3QtPnZpc2libGVQb3NpdGlvbkZvckluZGV4KG9mZnNldCk7Ci0gICAgVmlzaWJsZVBvc2l0
aW9uUmFuZ2UgcmFuZ2UgPSBWaXNpYmxlUG9zaXRpb25SYW5nZShzdGFydFBvc2l0aW9uLCBlbmRQ
b3NpdGlvbik7Ci0KKyAgICBQbGFpblRleHRSYW5nZSB0ZXh0UmFuZ2Uob2Zmc2V0LCAwKTsKKyAg
ICBWaXNpYmxlUG9zaXRpb25SYW5nZSByYW5nZSA9IGNvcmVPYmplY3QtPnZpc2libGVQb3NpdGlv
blJhbmdlRm9yUmFuZ2UodGV4dFJhbmdlKTsKICAgICBjb3JlT2JqZWN0LT5zZXRTZWxlY3RlZFZp
c2libGVQb3NpdGlvblJhbmdlKHJhbmdlKTsKKwogICAgIHJldHVybiBUUlVFOwogfQogCmRpZmYg
LS1naXQgYS9XZWJLaXQvZ3RrL0NoYW5nZUxvZyBiL1dlYktpdC9ndGsvQ2hhbmdlTG9nCmluZGV4
IGVkMDg0ZjguLjY3OGVhYTEgMTAwNjQ0Ci0tLSBhL1dlYktpdC9ndGsvQ2hhbmdlTG9nCisrKyBi
L1dlYktpdC9ndGsvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjcgQEAKKzIwMTAtMDktMTAgIE1hcmlv
IFNhbmNoZXogUHJhZGEgIDxtc2FuY2hlekBpZ2FsaWEuY29tPgorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFtHVEtdIFByb3ZpZGUgdW5pdCB0ZXN0cyBm
b3IgQXRrVGV4dCdzIHRleHQgc2VsZWN0aW9uIGZ1bmN0aW9ucworICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDM5MTkKKworICAgICAgICBOZXcgdGVzdHMg
dG8gY2hlY2sgZ2V0dGluZywgc2V0dGluZyBhbmQgcmVtb3ZpbmcgdGV4dCBzZWxlY3Rpb25zCisK
KyAgICAgICAgKiB0ZXN0cy90ZXN0YXRrLmM6CisgICAgICAgICh0ZXN0V2VraXRBdGtUZXh0U2Vs
ZWN0aW9ucyk6IE5ldyB1bml0IHRlc3RzIHRvIGNoZWNrIGFsbCB0aGUgdGV4dAorICAgICAgICBz
ZWxlY3Rpb24gcmVsYXRlZCBmdW5jdGlvbnMgYWx0b2dldGhlciB0aHJvdWdoIGEgc2luZ2xlIHRl
c3QKKyAgICAgICAgZnVuY3Rpb24uCisgICAgICAgIChtYWluKToKKworICAgICAgICBNYWtlIHN1
cmUgdGhhdCBjb2RlIGRlcGVuZGFudCBvbiBnZXR0aW5nIGluZm9ybWF0aW9uIGZyb20gdGhlCisg
ICAgICAgIGNsaXBib2FyZCBnZXRzIGV4ZWN1dGVkIG9ubHkgd2hlbiB0aGVyZSdzIGEgR0RLIHdp
bmRvdyBhc3NvY2lhdGVkCisgICAgICAgIHRvIHRoZSB3ZWJ2aWV3IHdpZGdldCwgYXMgdGhhdCdz
IG5vdCB0aGUgY2FzZSB3aGVuIGV4ZWN1dGluZyB0aGUKKyAgICAgICAgdW5pdCB0ZXN0cyAodGhl
IHdlZGJ2aWV3IGlzIG5vdCBpbnNpZGUgb2YgYW55IHRvcGxldmVsIHdpbmRvdykgYW5kCisgICAg
ICAgIHdpbGwgbWFrZSB0aGUgdGVzdHMgY3Jhc2ggaWYgbm90IHRha2VuIGludG8gYWNjb3VudC4K
KworICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0VkaXRvckNsaWVudEd0ay5jcHA6CisgICAgICAg
IChXZWJLaXQ6OkVkaXRvckNsaWVudDo6cmVzcG9uZFRvQ2hhbmdlZFNlbGVjdGlvbik6CisKIDIw
MTAtMDktMTAgIFhhbiBMb3BleiAgPHhsb3BlekBpZ2FsaWEuY29tPgogCiAgICAgICAgIFJldmll
d2VkIGJ5IE1hcnRpbiBSb2JpbnNvbi4KZGlmZiAtLWdpdCBhL1dlYktpdC9ndGsvV2ViQ29yZVN1
cHBvcnQvRWRpdG9yQ2xpZW50R3RrLmNwcCBiL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvRWRp
dG9yQ2xpZW50R3RrLmNwcAppbmRleCA4YTAxOWI0Li4yMWJiZWIxIDEwMDY0NAotLS0gYS9XZWJL
aXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0VkaXRvckNsaWVudEd0ay5jcHAKKysrIGIvV2ViS2l0L2d0
ay9XZWJDb3JlU3VwcG9ydC9FZGl0b3JDbGllbnRHdGsuY3BwCkBAIC0zNDEsNiArMzQxLDI5IEBA
IHN0YXRpYyB2b2lkIGNvbGxhcHNlU2VsZWN0aW9uKEd0a0NsaXBib2FyZCogY2xpcGJvYXJkLCBX
ZWJLaXRXZWJWaWV3KiB3ZWJWaWV3KQogICAgIGZyYW1lLT5zZWxlY3Rpb24oKS0+c2V0QmFzZShm
cmFtZS0+c2VsZWN0aW9uKCktPmV4dGVudCgpLCBmcmFtZS0+c2VsZWN0aW9uKCktPmFmZmluaXR5
KCkpOwogfQogCisjaWYgUExBVEZPUk0oWDExKQorc3RhdGljIHZvaWQgc2V0U2VsZWN0aW9uUHJp
bWFyeUNsaXBib2FyZElmTmVlZGVkKFdlYktpdFdlYlZpZXcqIHdlYlZpZXcpCit7CisgICAgaWYg
KGd0a193aWRnZXRfaGFzX3NjcmVlbihHVEtfV0lER0VUKHdlYlZpZXcpKSkgeworICAgICAgICBH
dGtDbGlwYm9hcmQqIGNsaXBib2FyZCA9IGd0a193aWRnZXRfZ2V0X2NsaXBib2FyZChHVEtfV0lE
R0VUKHdlYlZpZXcpLCBHREtfU0VMRUNUSU9OX1BSSU1BUlkpOworICAgICAgICBEYXRhT2JqZWN0
R3RrKiBkYXRhT2JqZWN0ID0gRGF0YU9iamVjdEd0azo6Zm9yQ2xpcGJvYXJkKGNsaXBib2FyZCk7
CisgICAgICAgIFdlYkNvcmU6OlBhZ2UqIGNvcmVQYWdlID0gY29yZSh3ZWJWaWV3KTsKKyAgICAg
ICAgRnJhbWUqIHRhcmdldEZyYW1lID0gY29yZVBhZ2UtPmZvY3VzQ29udHJvbGxlcigpLT5mb2N1
c2VkT3JNYWluRnJhbWUoKTsKKworICAgICAgICBpZiAodGFyZ2V0RnJhbWUtPnNlbGVjdGlvbigp
LT5pc1JhbmdlKCkpIHsKKyAgICAgICAgICAgIGRhdGFPYmplY3QtPmNsZWFyKCk7CisgICAgICAg
ICAgICBkYXRhT2JqZWN0LT5zZXRSYW5nZSh0YXJnZXRGcmFtZS0+c2VsZWN0aW9uKCktPnRvTm9y
bWFsaXplZFJhbmdlKCkpOworCisgICAgICAgICAgICB2aWV3U2V0dGluZ0NsaXBib2FyZCA9IHdl
YlZpZXc7CisgICAgICAgICAgICBHQ2xvc3VyZSogY2FsbGJhY2sgPSBnX2NjbG9zdXJlX25ld19v
YmplY3QoR19DQUxMQkFDSyhjb2xsYXBzZVNlbGVjdGlvbiksIEdfT0JKRUNUKHdlYlZpZXcpKTsK
KyAgICAgICAgICAgIGdfY2xvc3VyZV9zZXRfbWFyc2hhbChjYWxsYmFjaywgZ19jY2xvc3VyZV9t
YXJzaGFsX1ZPSURfX1ZPSUQpOworICAgICAgICAgICAgcGFzdGVib2FyZEhlbHBlckluc3RhbmNl
KCktPndyaXRlQ2xpcGJvYXJkQ29udGVudHMoY2xpcGJvYXJkLCBjYWxsYmFjayk7CisgICAgICAg
ICAgICB2aWV3U2V0dGluZ0NsaXBib2FyZCA9IDA7CisgICAgICAgIH0KKyAgICB9Cit9CisjZW5k
aWYKKwogdm9pZCBFZGl0b3JDbGllbnQ6OnJlc3BvbmRUb0NoYW5nZWRTZWxlY3Rpb24oKQogewog
ICAgIFdlYktpdFdlYlZpZXdQcml2YXRlKiBwcml2ID0gbV93ZWJWaWV3LT5wcml2OwpAQCAtMzU0
LDE5ICszNzcsNyBAQCB2b2lkIEVkaXRvckNsaWVudDo6cmVzcG9uZFRvQ2hhbmdlZFNlbGVjdGlv
bigpCiAgICAgICAgIHJldHVybjsKIAogI2lmIFBMQVRGT1JNKFgxMSkKLSAgICBHdGtDbGlwYm9h
cmQqIGNsaXBib2FyZCA9IGd0a193aWRnZXRfZ2V0X2NsaXBib2FyZChHVEtfV0lER0VUKG1fd2Vi
VmlldyksIEdES19TRUxFQ1RJT05fUFJJTUFSWSk7Ci0gICAgRGF0YU9iamVjdEd0ayogZGF0YU9i
amVjdCA9IERhdGFPYmplY3RHdGs6OmZvckNsaXBib2FyZChjbGlwYm9hcmQpOwotCi0gICAgaWYg
KHRhcmdldEZyYW1lLT5zZWxlY3Rpb24oKS0+aXNSYW5nZSgpKSB7Ci0gICAgICAgIGRhdGFPYmpl
Y3QtPmNsZWFyKCk7Ci0gICAgICAgIGRhdGFPYmplY3QtPnNldFJhbmdlKHRhcmdldEZyYW1lLT5z
ZWxlY3Rpb24oKS0+dG9Ob3JtYWxpemVkUmFuZ2UoKSk7Ci0KLSAgICAgICAgdmlld1NldHRpbmdD
bGlwYm9hcmQgPSBtX3dlYlZpZXc7Ci0gICAgICAgIEdDbG9zdXJlKiBjYWxsYmFjayA9IGdfY2Ns
b3N1cmVfbmV3X29iamVjdChHX0NBTExCQUNLKGNvbGxhcHNlU2VsZWN0aW9uKSwgR19PQkpFQ1Qo
bV93ZWJWaWV3KSk7Ci0gICAgICAgIGdfY2xvc3VyZV9zZXRfbWFyc2hhbChjYWxsYmFjaywgZ19j
Y2xvc3VyZV9tYXJzaGFsX1ZPSURfX1ZPSUQpOwotICAgICAgICBwYXN0ZWJvYXJkSGVscGVySW5z
dGFuY2UoKS0+d3JpdGVDbGlwYm9hcmRDb250ZW50cyhjbGlwYm9hcmQsIGNhbGxiYWNrKTsKLSAg
ICAgICAgdmlld1NldHRpbmdDbGlwYm9hcmQgPSAwOwotICAgIH0KKyAgICBzZXRTZWxlY3Rpb25Q
cmltYXJ5Q2xpcGJvYXJkSWZOZWVkZWQobV93ZWJWaWV3KTsKICNlbmRpZgogCiAgICAgaWYgKCF0
YXJnZXRGcmFtZS0+ZWRpdG9yKCktPmhhc0NvbXBvc2l0aW9uKCkpCmRpZmYgLS1naXQgYS9XZWJL
aXQvZ3RrL3Rlc3RzL3Rlc3RhdGsuYyBiL1dlYktpdC9ndGsvdGVzdHMvdGVzdGF0ay5jCmluZGV4
IDk5MzBiYzIuLjAzN2ExMWIgMTAwNjQ0Ci0tLSBhL1dlYktpdC9ndGsvdGVzdHMvdGVzdGF0ay5j
CisrKyBiL1dlYktpdC9ndGsvdGVzdHMvdGVzdGF0ay5jCkBAIC00NCwxMCArNDQsMTIgQEAgc3Rh
dGljIGNvbnN0IGNoYXIqIGNvbnRlbnRzSW5UYWJsZSA9ICI8aHRtbD48Ym9keT48dGFibGU+PHRy
Pjx0ZD5mb288L3RkPjx0ZD5iYXIKIAogc3RhdGljIGNvbnN0IGNoYXIqIGNvbnRlbnRzSW5UYWJs
ZVdpdGhIZWFkZXJzID0gIjxodG1sPjxib2R5Pjx0YWJsZT48dHI+PHRoPmZvbzwvdGg+PHRoPmJh
cjwvdGg+PHRoIGNvbHNwYW49JzInPmJhejwvdGg+PC90cj48dHI+PHRoPnF1eDwvdGg+PHRkPjE8
L3RkPjx0ZD4yPC90ZD48dGQ+MzwvdGQ+PC90cj48dHI+PHRoIHJvd3NwYW49JzInPnF1dXg8L3Ro
Pjx0ZD40PC90ZD48dGQ+NTwvdGQ+PHRkPjY8L3RkPjwvdHI+PHRyPjx0ZD42PC90ZD48dGQ+Nzwv
dGQ+PHRkPjg8L3RkPjwvdHI+PHRyPjx0aD5jb3JnZTwvdGg+PHRkPjk8L3RkPjx0ZD4xMDwvdGQ+
PHRkPjExPC90ZD48L3RyPjwvdGFibGU+PHRhYmxlPjx0cj48dGQ+MTwvdGQ+PHRkPjI8L3RkPjwv
dHI+PHRyPjx0ZD4zPC90ZD48dGQ+NDwvdGQ+PC90cj48L3RhYmxlPjwvYm9keT48L2h0bWw+IjsK
IAotc3RhdGljIGNvbnN0IGNoYXIqIHRleHRXaXRoQXR0cmlidXRlcyA9ICI8aHRtbD48aGVhZD48
c3R5bGU+LnN0MSB7Zm9udC1mYW1pbHk6IG1vbm9zcGFjZTsgY29sb3I6cmdiKDEyMCwxMjEsMTIy
KTt9IC5zdDIge3RleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmU7IGJhY2tncm91bmQtY29sb3I6cmdi
KDgwLDgxLDgyKTt9PC9zdHlsZT48L2hlYWQ+PGJvZHk+PHAgc3R5bGU9XCJmb250LXNpemU6MTQ7
IHRleHQtYWxpZ246cmlnaHQ7XCI+VGhpcyBpcyB0aGUgPGk+Zmlyc3Q8L2k+PGI+IHNlbnRlbmNl
IG9mIHRoaXMgdGV4dC48L2I+PC9wPjxwIGNsYXNzPVwic3QxXCI+VGhpcyBzZW50ZW5jZSBzaG91
bGQgaGF2ZSBhbiBzdHlsZSBhcHBsaWVkIDxzcGFuIGNsYXNzPVwic3QyXCI+YW5kIHRoaXMgcGFy
dCBzaG91bGQgaGF2ZSBhbm90aGVyIG9uZTwvc3Bhbj4uPC9wPjxwPng8c3ViPjE8L3N1Yj48c3Vw
PjI8L3N1cD49eDxzdWI+Mjwvc3ViPjxzdXA+Mzwvc3VwPjwvcD48cCBzdHlsZT1cInRleHQtYWxp
Z246Y2VudGVyO1wiPlRoaXMgc2VudGVuY2UgaXMgdGhlIDxzdHJpa2U+bGFzdDwvc3RyaWtlPiBv
bmUuPC9wPjwvYm9keT48L2h0bWw+IjsKLQogc3RhdGljIGNvbnN0IGNoYXIqIGxpc3RzT2ZJdGVt
cyA9ICI8aHRtbD48Ym9keT48dWw+PGxpPnRleHQgb25seTwvbGk+PGxpPjxhIGhyZWY9J2Zvbyc+
bGluayBvbmx5PC9hPjwvbGk+PGxpPnRleHQgYW5kIGEgPGEgaHJlZj0nYmFyJz5saW5rPC9hPjwv
bGk+PC91bD48b2w+PGxpPnRleHQgb25seTwvbGk+PGxpPjxhIGhyZWY9J2Zvbyc+bGluayBvbmx5
PC9hPjwvbGk+PGxpPnRleHQgYW5kIGEgPGEgaHJlZj0nYmFyJz5saW5rPC9hPjwvbGk+PC9vbD48
L2JvZHk+PC9odG1sPiI7CiAKK3N0YXRpYyBjb25zdCBjaGFyKiB0ZXh0Rm9yU2VsZWN0aW9ucyA9
ICI8aHRtbD48Ym9keT48cD5BIHBhcmFncmFwaCB3aXRoIHBsYWluIHRleHQ8L3A+PHA+QSBwYXJh
Z3JhcGggd2l0aCA8YSBocmVmPSdodHRwOi8vd2Via2l0Lm9yZyc+YSBsaW5rPC9hPiBpbiB0aGUg
bWlkZGxlPC9wPjwvYm9keT48L2h0bWw+IjsKKworc3RhdGljIGNvbnN0IGNoYXIqIHRleHRXaXRo
QXR0cmlidXRlcyA9ICI8aHRtbD48aGVhZD48c3R5bGU+LnN0MSB7Zm9udC1mYW1pbHk6IG1vbm9z
cGFjZTsgY29sb3I6cmdiKDEyMCwxMjEsMTIyKTt9IC5zdDIge3RleHQtZGVjb3JhdGlvbjp1bmRl
cmxpbmU7IGJhY2tncm91bmQtY29sb3I6cmdiKDgwLDgxLDgyKTt9PC9zdHlsZT48L2hlYWQ+PGJv
ZHk+PHAgc3R5bGU9XCJmb250LXNpemU6MTQ7IHRleHQtYWxpZ246cmlnaHQ7XCI+VGhpcyBpcyB0
aGUgPGk+Zmlyc3Q8L2k+PGI+IHNlbnRlbmNlIG9mIHRoaXMgdGV4dC48L2I+PC9wPjxwIGNsYXNz
PVwic3QxXCI+VGhpcyBzZW50ZW5jZSBzaG91bGQgaGF2ZSBhbiBzdHlsZSBhcHBsaWVkIDxzcGFu
IGNsYXNzPVwic3QyXCI+YW5kIHRoaXMgcGFydCBzaG91bGQgaGF2ZSBhbm90aGVyIG9uZTwvc3Bh
bj4uPC9wPjxwPng8c3ViPjE8L3N1Yj48c3VwPjI8L3N1cD49eDxzdWI+Mjwvc3ViPjxzdXA+Mzwv
c3VwPjwvcD48cCBzdHlsZT1cInRleHQtYWxpZ246Y2VudGVyO1wiPlRoaXMgc2VudGVuY2UgaXMg
dGhlIDxzdHJpa2U+bGFzdDwvc3RyaWtlPiBvbmUuPC9wPjwvYm9keT48L2h0bWw+IjsKKwogc3Rh
dGljIGdib29sZWFuIGJhaWxfb3V0KEdNYWluTG9vcCogbG9vcCkKIHsKICAgICBpZiAoZ19tYWlu
X2xvb3BfaXNfcnVubmluZyhsb29wKSkKQEAgLTc0Miw2ICs3NDQsMTIxIEBAIHN0YXRpYyB2b2lk
IHRlc3RXZWJraXRBdGtUZXh0QXR0cmlidXRlcyh2b2lkKQogICAgIGF0a19hdHRyaWJ1dGVfc2V0
X2ZyZWUoc2V0Myk7CiB9CiAKK3N0YXRpYyB2b2lkIHRlc3RXZWtpdEF0a1RleHRTZWxlY3Rpb25z
KHZvaWQpCit7CisgICAgV2ViS2l0V2ViVmlldyogd2ViVmlldzsKKyAgICBBdGtPYmplY3QqIG9i
ajsKKyAgICBHTWFpbkxvb3AqIGxvb3A7CisgICAgZ2NoYXIqIHNlbGVjdGVkVGV4dDsKKyAgICBn
aW50IHN0YXJ0T2Zmc2V0OworICAgIGdpbnQgZW5kT2Zmc2V0OworICAgIGdib29sZWFuIHJlc3Vs
dDsKKworICAgIHdlYlZpZXcgPSBXRUJLSVRfV0VCX1ZJRVcod2Via2l0X3dlYl92aWV3X25ldygp
KTsKKyAgICBnX29iamVjdF9yZWZfc2luayh3ZWJWaWV3KTsKKyAgICBHdGtBbGxvY2F0aW9uIGFs
bG9jID0geyAwLCAwLCA4MDAsIDYwMCB9OworICAgIGd0a193aWRnZXRfc2l6ZV9hbGxvY2F0ZShH
VEtfV0lER0VUKHdlYlZpZXcpLCAmYWxsb2MpOworICAgIHdlYmtpdF93ZWJfdmlld19sb2FkX3N0
cmluZyh3ZWJWaWV3LCB0ZXh0Rm9yU2VsZWN0aW9ucywgTlVMTCwgTlVMTCwgTlVMTCk7CisgICAg
bG9vcCA9IGdfbWFpbl9sb29wX25ldyhOVUxMLCBUUlVFKTsKKworICAgIGdfdGltZW91dF9hZGQo
MTAwLCAoR1NvdXJjZUZ1bmMpYmFpbF9vdXQsIGxvb3ApOworICAgIGdfbWFpbl9sb29wX3J1bihs
b29wKTsKKworICAgIG9iaiA9IGd0a193aWRnZXRfZ2V0X2FjY2Vzc2libGUoR1RLX1dJREdFVCh3
ZWJWaWV3KSk7CisgICAgZ19hc3NlcnQob2JqKTsKKworICAgIEF0a1RleHQqIHBhcmFncmFwaDEg
PSBBVEtfVEVYVChhdGtfb2JqZWN0X3JlZl9hY2Nlc3NpYmxlX2NoaWxkKG9iaiwgMCkpOworICAg
IGdfYXNzZXJ0KEFUS19JU19URVhUKHBhcmFncmFwaDEpKTsKKyAgICBBdGtUZXh0KiBwYXJhZ3Jh
cGgyID0gQVRLX1RFWFQoYXRrX29iamVjdF9yZWZfYWNjZXNzaWJsZV9jaGlsZChvYmosIDEpKTsK
KyAgICBnX2Fzc2VydChBVEtfSVNfVEVYVChwYXJhZ3JhcGgyKSk7CisgICAgQXRrVGV4dCogbGlu
ayA9IEFUS19URVhUKGF0a19vYmplY3RfcmVmX2FjY2Vzc2libGVfY2hpbGQoQVRLX09CSkVDVChw
YXJhZ3JhcGgyKSwgMCkpOworICAgIGdfYXNzZXJ0KEFUS19JU19URVhUKGxpbmspKTsKKworICAg
IC8vIEZpcnN0IHBhcmFncmFwaCAoc2ltcGxlIHRleHQpCisKKyAgICAvLyBCYXNpYyBpbml0aWFs
IGNoZWNrcworICAgIGdfYXNzZXJ0X2NtcGludChhdGtfdGV4dF9nZXRfbl9zZWxlY3Rpb25zKHBh
cmFncmFwaDEpLCA9PSwgMCk7CisgICAgc2VsZWN0ZWRUZXh0ID0gYXRrX3RleHRfZ2V0X3NlbGVj
dGlvbihwYXJhZ3JhcGgxLCAwLCAmc3RhcnRPZmZzZXQsICZlbmRPZmZzZXQpOworICAgIGdfYXNz
ZXJ0X2NtcGludChzdGFydE9mZnNldCwgPT0sIDApOworICAgIGdfYXNzZXJ0X2NtcGludChlbmRP
ZmZzZXQsID09LCAwKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIoc2VsZWN0ZWRUZXh0LCA9PSwgTlVM
TCk7CisgICAgZ19mcmVlIChzZWxlY3RlZFRleHQpOworICAgIC8vIFRyeSByZW1vdmluZyBhIG5v
biBleGlzdGluZyAoeWV0KSBzZWxlY3Rpb24KKyAgICByZXN1bHQgPSBhdGtfdGV4dF9yZW1vdmVf
c2VsZWN0aW9uKHBhcmFncmFwaDEsIDApOworICAgIGdfYXNzZXJ0KCFyZXN1bHQpOworICAgIC8v
IFRyeSBzZXR0aW5nIGEgMC1jaGFyIHNlbGVjdGlvbgorICAgIHJlc3VsdCA9IGF0a190ZXh0X3Nl
dF9zZWxlY3Rpb24ocGFyYWdyYXBoMSwgMCwgNSwgNSk7CisgICAgZ19hc3NlcnQocmVzdWx0KTsK
KworICAgIC8vIE1ha2UgYSBzZWxlY3Rpb24gYW5kIHRlc3QgaXQKKyAgICByZXN1bHQgPSBhdGtf
dGV4dF9zZXRfc2VsZWN0aW9uKHBhcmFncmFwaDEsIDAsIDUsIDI1KTsKKyAgICBnX2Fzc2VydChy
ZXN1bHQpOworICAgIGdfYXNzZXJ0X2NtcGludChhdGtfdGV4dF9nZXRfbl9zZWxlY3Rpb25zKHBh
cmFncmFwaDEpLCA9PSwgMSk7CisgICAgc2VsZWN0ZWRUZXh0ID0gYXRrX3RleHRfZ2V0X3NlbGVj
dGlvbihwYXJhZ3JhcGgxLCAwLCAmc3RhcnRPZmZzZXQsICZlbmRPZmZzZXQpOworICAgIGdfYXNz
ZXJ0X2NtcGludChzdGFydE9mZnNldCwgPT0sIDUpOworICAgIGdfYXNzZXJ0X2NtcGludChlbmRP
ZmZzZXQsID09LCAyNSk7CisgICAgZ19hc3NlcnRfY21wc3RyKHNlbGVjdGVkVGV4dCwgPT0sICJh
Z3JhcGggd2l0aCBwbGFpbiB0ZSIpOworICAgIGdfZnJlZSAoc2VsZWN0ZWRUZXh0KTsKKyAgICAv
LyBUcnkgcmVtb3ZpbmcgdGhlIHNlbGVjdGlvbiBmcm9tIG90aGVyIEF0a1RleHQgb2JqZWN0IChz
aG91bGQgZmFpbCkKKyAgICByZXN1bHQgPSBhdGtfdGV4dF9yZW1vdmVfc2VsZWN0aW9uKHBhcmFn
cmFwaDIsIDApOworICAgIGdfYXNzZXJ0KCFyZXN1bHQpOworCisgICAgLy8gUmVtb3ZlIHRoZSBz
ZWxlY3Rpb24gYW5kIHRlc3QgZXZlcnl0aGluZyBhZ2FpbgorICAgIHJlc3VsdCA9IGF0a190ZXh0
X3JlbW92ZV9zZWxlY3Rpb24ocGFyYWdyYXBoMSwgMCk7CisgICAgZ19hc3NlcnQocmVzdWx0KTsK
KyAgICBnX2Fzc2VydF9jbXBpbnQoYXRrX3RleHRfZ2V0X25fc2VsZWN0aW9ucyhwYXJhZ3JhcGgx
KSwgPT0sIDApOworICAgIHNlbGVjdGVkVGV4dCA9IGF0a190ZXh0X2dldF9zZWxlY3Rpb24ocGFy
YWdyYXBoMSwgMCwgJnN0YXJ0T2Zmc2V0LCAmZW5kT2Zmc2V0KTsKKyAgICAvLyBOb3cgb2Zmc2V0
cyBzaG91bGQgYmUgdGhlIHNhbWUsIHNldCB0byB0aGUgbGFzdCBwb3NpdGlvbiBvZiB0aGUgY2Fy
ZXQKKyAgICBnX2Fzc2VydF9jbXBpbnQoc3RhcnRPZmZzZXQsID09LCBlbmRPZmZzZXQpOworICAg
IGdfYXNzZXJ0X2NtcGludChzdGFydE9mZnNldCwgPT0sIDI1KTsKKyAgICBnX2Fzc2VydF9jbXBp
bnQoZW5kT2Zmc2V0LCA9PSwgMjUpOworICAgIGdfYXNzZXJ0X2NtcHN0cihzZWxlY3RlZFRleHQs
ID09LCBOVUxMKTsKKyAgICBnX2ZyZWUgKHNlbGVjdGVkVGV4dCk7CisKKyAgICAvLyBTZWNvbmQg
cGFyYWdyYXBoICh0ZXh0ICsgbGluayArIHRleHQpCisKKyAgICAvLyBTZXQgYSBzZWxlY3Rpb24g
cGFydGlhbGx5IGNvdmVyaW5nIHRoZSBsaW5rIGFuZCB0ZXN0IGl0CisgICAgcmVzdWx0ID0gYXRr
X3RleHRfc2V0X3NlbGVjdGlvbihwYXJhZ3JhcGgyLCAwLCA3LCAyMSk7CisgICAgZ19hc3NlcnQo
cmVzdWx0KTsKKworICAgIC8vIFRlc3QgdGhlIHBhcmFncmFwaCBmaXJzdAorICAgIGdfYXNzZXJ0
X2NtcGludChhdGtfdGV4dF9nZXRfbl9zZWxlY3Rpb25zKHBhcmFncmFwaDIpLCA9PSwgMSk7Cisg
ICAgc2VsZWN0ZWRUZXh0ID0gYXRrX3RleHRfZ2V0X3NlbGVjdGlvbihwYXJhZ3JhcGgyLCAwLCAm
c3RhcnRPZmZzZXQsICZlbmRPZmZzZXQpOworICAgIGdfYXNzZXJ0X2NtcGludChzdGFydE9mZnNl
dCwgPT0sIDcpOworICAgIGdfYXNzZXJ0X2NtcGludChlbmRPZmZzZXQsID09LCAyMSk7CisgICAg
Z19hc3NlcnRfY21wc3RyKHNlbGVjdGVkVGV4dCwgPT0sICJyYXBoIHdpdGggYSBsaSIpOworICAg
IGdfZnJlZSAoc2VsZWN0ZWRUZXh0KTsKKworICAgIC8vIE5vdyB0ZXN0IGp1c3QgdGhlIGxpbmsK
KyAgICBnX2Fzc2VydF9jbXBpbnQoYXRrX3RleHRfZ2V0X25fc2VsZWN0aW9ucyhsaW5rKSwgPT0s
IDEpOworICAgIHNlbGVjdGVkVGV4dCA9IGF0a190ZXh0X2dldF9zZWxlY3Rpb24obGluaywgMCwg
JnN0YXJ0T2Zmc2V0LCAmZW5kT2Zmc2V0KTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoc3RhcnRPZmZz
ZXQsID09LCAwKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoZW5kT2Zmc2V0LCA9PSwgNCk7CisgICAg
Z19hc3NlcnRfY21wc3RyKHNlbGVjdGVkVGV4dCwgPT0sICJhIGxpIik7CisgICAgZ19mcmVlIChz
ZWxlY3RlZFRleHQpOworCisgICAgLy8gUmVtb3ZlIHNlbGVjdGlvbnMgYW5kIHRleHQgZXZlcnl0
aGluZyBhZ2FpbgorICAgIHJlc3VsdCA9IGF0a190ZXh0X3JlbW92ZV9zZWxlY3Rpb24ocGFyYWdy
YXBoMiwgMCk7CisgICAgZ19hc3NlcnQocmVzdWx0KTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoYXRr
X3RleHRfZ2V0X25fc2VsZWN0aW9ucyhwYXJhZ3JhcGgyKSwgPT0sIDApOworICAgIHNlbGVjdGVk
VGV4dCA9IGF0a190ZXh0X2dldF9zZWxlY3Rpb24ocGFyYWdyYXBoMiwgMCwgJnN0YXJ0T2Zmc2V0
LCAmZW5kT2Zmc2V0KTsKKyAgICAvLyBOb3cgb2Zmc2V0cyBzaG91bGQgYmUgdGhlIHNhbWUgKG5v
IHNlbGVjdGlvbikKKyAgICBnX2Fzc2VydF9jbXBpbnQoc3RhcnRPZmZzZXQsID09LCBlbmRPZmZz
ZXQpOworICAgIGdfYXNzZXJ0X2NtcHN0cihzZWxlY3RlZFRleHQsID09LCBOVUxMKTsKKyAgICBn
X2ZyZWUgKHNlbGVjdGVkVGV4dCk7CisKKyAgICBnX2Fzc2VydF9jbXBpbnQoYXRrX3RleHRfZ2V0
X25fc2VsZWN0aW9ucyhsaW5rKSwgPT0sIDApOworICAgIHNlbGVjdGVkVGV4dCA9IGF0a190ZXh0
X2dldF9zZWxlY3Rpb24obGluaywgMCwgJnN0YXJ0T2Zmc2V0LCAmZW5kT2Zmc2V0KTsKKyAgICAv
LyBOb3cgb2Zmc2V0cyBzaG91bGQgYmUgdGhlIHNhbWUgKG5vIHNlbGVjdGlvbikKKyAgICBnX2Fz
c2VydF9jbXBpbnQoc3RhcnRPZmZzZXQsID09LCBlbmRPZmZzZXQpOworICAgIGdfYXNzZXJ0X2Nt
cHN0cihzZWxlY3RlZFRleHQsID09LCBOVUxMKTsKKyAgICBnX2ZyZWUgKHNlbGVjdGVkVGV4dCk7
CisKKyAgICBnX29iamVjdF91bnJlZihwYXJhZ3JhcGgxKTsKKyAgICBnX29iamVjdF91bnJlZihw
YXJhZ3JhcGgyKTsKKyAgICBnX29iamVjdF91bnJlZih3ZWJWaWV3KTsKK30KKwogc3RhdGljIHZv
aWQgdGVzdF93ZWJraXRfYXRrX2dldF9leHRlbnRzKHZvaWQpCiB7CiAgICAgV2ViS2l0V2ViVmll
dyogd2ViVmlldzsKQEAgLTkzNiw2ICsxMDUzLDcgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIq
KiBhcmd2KQogICAgIGdfdGVzdF9hZGRfZnVuYygiL3dlYmtpdC9hdGsvZ2V0VGV4dEluVGFibGUi
LCB0ZXN0V2Via2l0QXRrR2V0VGV4dEluVGFibGUpOwogICAgIGdfdGVzdF9hZGRfZnVuYygiL3dl
YmtpdC9hdGsvZ2V0SGVhZGVyc0luVGFibGUiLCB0ZXN0V2Via2l0QXRrR2V0SGVhZGVyc0luVGFi
bGUpOwogICAgIGdfdGVzdF9hZGRfZnVuYygiL3dlYmtpdC9hdGsvdGV4dEF0dHJpYnV0ZXMiLCB0
ZXN0V2Via2l0QXRrVGV4dEF0dHJpYnV0ZXMpOworICAgIGdfdGVzdF9hZGRfZnVuYygiL3dlYmtp
dC9hdGsvdGV4dFNlbGVjdGlvbnMiLCB0ZXN0V2VraXRBdGtUZXh0U2VsZWN0aW9ucyk7CiAgICAg
Z190ZXN0X2FkZF9mdW5jKCIvd2Via2l0L2F0ay9nZXRfZXh0ZW50cyIsIHRlc3Rfd2Via2l0X2F0
a19nZXRfZXh0ZW50cyk7CiAgICAgZ190ZXN0X2FkZF9mdW5jKCIvd2Via2l0L2F0ay9saXN0c09m
SXRlbXMiLCB0ZXN0V2Via2l0QXRrTGlzdHNPZkl0ZW1zKTsKICAgICByZXR1cm4gZ190ZXN0X3J1
biAoKTsKLS0gCjEuNy4wLjQKCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>67208</attachid>
            <date>2010-09-10 11:27:39 -0700</date>
            <delta_ts>2010-09-10 23:04:02 -0700</delta_ts>
            <desc>Path proposal + Unit tests</desc>
            <filename>0002-2010-09-10-Mario-Sanchez-Prada-msanchez-igalia.com.patch</filename>
            <type>text/plain</type>
            <size>23089</size>
            <attacher name="Mario Sanchez Prada">mario</attacher>
            
              <data encoding="base64">RnJvbSAzYzQ0MjcyZGMzYjFmYjkzNWQ5MjBiMTdmMTgzMzU0MjdlZmJjZGFmIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBNYXJpbyBTYW5jaGV6IFByYWRhIDxtc2FuY2hlekBpZ2FsaWEu
Y29tPgpEYXRlOiBXZWQsIDggU2VwIDIwMTAgMTM6MzE6MDkgKzAyMDAKU3ViamVjdDogW1BBVENI
IDIvMl0gMjAxMC0wOS0xMCAgTWFyaW8gU2FuY2hleiBQcmFkYSAgPG1zYW5jaGV6QGlnYWxpYS5j
b20+CgogICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgoKICAgICAgICBbR1RLXSBB
VHMgc2hvdWxkIGJlIGFibGUgdG8gc2VsZWN0L3Vuc2VsZWN0IHRleHQKICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjU2NzMKCiAgICAgICAgSW1wbGVtZW50
IEF0a1RleHQncyBzZXRTZWxlY3Rpb24gYW5kIHJlbW92ZVNlbGVjdGlvbiBmdW5jdGlvbnMKCiAg
ICAgICAgKiBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuY3BwOgogICAgICAgIChX
ZWJDb3JlOjpBY2Nlc3NpYmlsaXR5T2JqZWN0Ojp2aXNpYmxlUG9zaXRpb25SYW5nZUZvclJhbmdl
KToKICAgICAgICBNb3ZlZCBzb21lIEdUSyBzcGVjaWZpYyBjb2RlIGZyb20gYSBpZmRlZi1lbmRp
ZiByZWdpb24gdG8KICAgICAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0QXRrLmNwcAogICAgICAgICog
YWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0Lmg6CiAgICAgICAgKiBhY2Nlc3NpYmls
aXR5L2d0ay9BY2Nlc3NpYmlsaXR5T2JqZWN0QXRrLmNwcDoKICAgICAgICAoV2ViQ29yZTo6QWNj
ZXNzaWJpbGl0eU9iamVjdDo6Z2V0TGVuZ3RoRm9yVGV4dFJhbmdlKTogTmV3LgogICAgICAgICog
YWNjZXNzaWJpbGl0eS9ndGsvQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJBdGsuY3BwOgogICAg
ICAgICh3ZWJraXRfYWNjZXNzaWJsZV90ZXh0X3JlbW92ZV9zZWxlY3Rpb24pOiBJbXBsZW1lbnRl
ZCBmb2xsb3dpbmcKICAgICAgICB0aGUgbGVhZCBvZiBHQUlMJ3MgaW1wbGVtZW50YXRpb24gb2Yg
dGhlIEF0a1RleHQgaW50ZXJmYWNlLgogICAgICAgICh3ZWJraXRfYWNjZXNzaWJsZV90ZXh0X3Nl
dF9zZWxlY3Rpb24pOiBJbXBsZW1lbnRlZCBmb2xsb3dpbmcKICAgICAgICB0aGUgbGVhZCBvZiBH
QUlMJ3MgaW1wbGVtZW50YXRpb24gb2YgdGhlIEF0a1RleHQgaW50ZXJmYWNlLgogICAgICAgICh3
ZWJraXRfYWNjZXNzaWJsZV90ZXh0X3NldF9jYXJldF9vZmZzZXQpOiBDaGFuZ2VkIHRvIGRpcmVj
dGx5IHVzZQogICAgICAgIHZpc2libGVQb3NpdGlvblJhbmdlRm9yUmFuZ2Ugbm93IHRoYXQgdGhl
cmUncyBubyBsb25nZXIgYSBwcm9ibGVtCiAgICAgICAgd2l0aCB0aGF0LCBhcyBpdCB3YXMgaW4g
dGhlIHBhc3QgKG9ubHkgd29ya2VkIGZvciB0ZXh0IGNvbnRyb2xzKS4KCiAgICAgICAgTmV3IHRl
c3RzIHRvIGNoZWNrIGdldHRpbmcsIHNldHRpbmcgYW5kIHJlbW92aW5nIHRleHQgc2VsZWN0aW9u
cwoKICAgICAgICAqIHRlc3RzL3Rlc3RhdGsuYzoKICAgICAgICAodGVzdFdla2l0QXRrVGV4dFNl
bGVjdGlvbnMpOiBOZXcgdW5pdCB0ZXN0cyB0byBjaGVjayBhbGwgdGhlIHRleHQKICAgICAgICBz
ZWxlY3Rpb24gcmVsYXRlZCBmdW5jdGlvbnMgYWx0b2dldGhlciB0aHJvdWdoIGEgc2luZ2xlIHRl
c3QKICAgICAgICBmdW5jdGlvbi4KICAgICAgICAobWFpbik6CgogICAgICAgIE1ha2Ugc3VyZSB0
aGF0IGNvZGUgZGVwZW5kYW50IG9uIGdldHRpbmcgaW5mb3JtYXRpb24gZnJvbSB0aGUKICAgICAg
ICBjbGlwYm9hcmQgZ2V0cyBleGVjdXRlZCBvbmx5IHdoZW4gdGhlcmUncyBhIEdESyB3aW5kb3cg
YXNzb2NpYXRlZAogICAgICAgIHRvIHRoZSB3ZWJ2aWV3IHdpZGdldCwgYXMgdGhhdCdzIG5vdCB0
aGUgY2FzZSB3aGVuIGV4ZWN1dGluZyB0aGUKICAgICAgICB1bml0IHRlc3RzICh0aGUgd2VkYnZp
ZXcgaXMgbm90IGluc2lkZSBvZiBhbnkgdG9wbGV2ZWwgd2luZG93KSBhbmQKICAgICAgICB3aWxs
IG1ha2UgdGhlIHRlc3RzIGNyYXNoIGlmIG5vdCB0YWtlbiBpbnRvIGFjY291bnQuCgogICAgICAg
ICogV2ViQ29yZVN1cHBvcnQvRWRpdG9yQ2xpZW50R3RrLmNwcDoKICAgICAgICAoV2ViS2l0OjpF
ZGl0b3JDbGllbnQ6OnJlc3BvbmRUb0NoYW5nZWRTZWxlY3Rpb24pOgotLS0KIFdlYkNvcmUvQ2hh
bmdlTG9nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAyNSArKysrCiBXZWJD
b3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdC5jcHAgICAgICB8ICAgMTcgKy0t
LQogV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuaCAgICAgICAgfCAg
ICAyICsKIC4uLi9hY2Nlc3NpYmlsaXR5L2d0ay9BY2Nlc3NpYmlsaXR5T2JqZWN0QXRrLmNwcCAg
IHwgICAyNSArKysrCiAuLi4vZ3RrL0FjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyQXRrLmNwcCAg
ICAgICAgICB8ICAgNTIgKysrKysrLS0tCiBXZWJLaXQvZ3RrL0NoYW5nZUxvZyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB8ICAgMjQgKysrKwogV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9y
dC9FZGl0b3JDbGllbnRHdGsuY3BwICAgICAgfCAgIDM5ICsrKystLQogV2ViS2l0L2d0ay90ZXN0
cy90ZXN0YXRrLmMgICAgICAgICAgICAgICAgICAgICAgICAgfCAgMTIyICsrKysrKysrKysrKysr
KysrKystCiA4IGZpbGVzIGNoYW5nZWQsIDI1OSBpbnNlcnRpb25zKCspLCA0NyBkZWxldGlvbnMo
LSkKCmRpZmYgLS1naXQgYS9XZWJDb3JlL0NoYW5nZUxvZyBiL1dlYkNvcmUvQ2hhbmdlTG9nCmlu
ZGV4IDNjMjFlMDEuLmY0Nzc0NjcgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBi
L1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0yLDYgKzIsMzEgQEAKIAogICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KIAorICAgICAgICBbR1RLXSBBVHMgc2hvdWxkIGJlIGFibGUgdG8g
c2VsZWN0L3Vuc2VsZWN0IHRleHQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTI1NjczCisKKyAgICAgICAgSW1wbGVtZW50IEF0a1RleHQncyBzZXRTZWxl
Y3Rpb24gYW5kIHJlbW92ZVNlbGVjdGlvbiBmdW5jdGlvbnMKKworICAgICAgICAqIGFjY2Vzc2li
aWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3Np
YmlsaXR5T2JqZWN0Ojp2aXNpYmxlUG9zaXRpb25SYW5nZUZvclJhbmdlKToKKyAgICAgICAgTW92
ZWQgc29tZSBHVEsgc3BlY2lmaWMgY29kZSBmcm9tIGEgaWZkZWYtZW5kaWYgcmVnaW9uIHRvCisg
ICAgICAgIEFjY2Vzc2liaWxpdHlPYmplY3RBdGsuY3BwCisgICAgICAgICogYWNjZXNzaWJpbGl0
eS9BY2Nlc3NpYmlsaXR5T2JqZWN0Lmg6CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9ndGsvQWNj
ZXNzaWJpbGl0eU9iamVjdEF0ay5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5
T2JqZWN0OjpnZXRMZW5ndGhGb3JUZXh0UmFuZ2UpOiBOZXcuCisgICAgICAgICogYWNjZXNzaWJp
bGl0eS9ndGsvQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJBdGsuY3BwOgorICAgICAgICAod2Vi
a2l0X2FjY2Vzc2libGVfdGV4dF9yZW1vdmVfc2VsZWN0aW9uKTogSW1wbGVtZW50ZWQgZm9sbG93
aW5nCisgICAgICAgIHRoZSBsZWFkIG9mIEdBSUwncyBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgQXRr
VGV4dCBpbnRlcmZhY2UuCisgICAgICAgICh3ZWJraXRfYWNjZXNzaWJsZV90ZXh0X3NldF9zZWxl
Y3Rpb24pOiBJbXBsZW1lbnRlZCBmb2xsb3dpbmcKKyAgICAgICAgdGhlIGxlYWQgb2YgR0FJTCdz
IGltcGxlbWVudGF0aW9uIG9mIHRoZSBBdGtUZXh0IGludGVyZmFjZS4KKyAgICAgICAgKHdlYmtp
dF9hY2Nlc3NpYmxlX3RleHRfc2V0X2NhcmV0X29mZnNldCk6IENoYW5nZWQgdG8gZGlyZWN0bHkg
dXNlCisgICAgICAgIHZpc2libGVQb3NpdGlvblJhbmdlRm9yUmFuZ2Ugbm93IHRoYXQgdGhlcmUn
cyBubyBsb25nZXIgYSBwcm9ibGVtCisgICAgICAgIHdpdGggdGhhdCwgYXMgaXQgd2FzIGluIHRo
ZSBwYXN0IChvbmx5IHdvcmtlZCBmb3IgdGV4dCBjb250cm9scykuCisKKzIwMTAtMDktMTAgIE1h
cmlvIFNhbmNoZXogUHJhZGEgIDxtc2FuY2hlekBpZ2FsaWEuY29tPgorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCiAgICAgICAgIFtHdGtdIGdldF9uX3NlbGVjdGlvbnMg
YW5kIGdldF9zZWxlY3Rpb24gZmFpbCB3aGVuIHNlbGVjdGluZyB0ZXh0IGFjcm9zcyBvYmplY3Qg
Ym91bmRhcmllcwogICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MjY5OTEKIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxp
dHlPYmplY3QuY3BwIGIvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3Qu
Y3BwCmluZGV4IGE2YmIwMzMuLjNkZGNkYzUgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYWNjZXNzaWJp
bGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmNwcAorKysgYi9XZWJDb3JlL2FjY2Vzc2liaWxpdHkv
QWNjZXNzaWJpbGl0eU9iamVjdC5jcHAKQEAgLTM3MywyMiArMzczLDcgQEAgVmlzaWJsZVBvc2l0
aW9uUmFuZ2UgQWNjZXNzaWJpbGl0eU9iamVjdDo6c3R5bGVSYW5nZUZvclBvc2l0aW9uKGNvbnN0
IFZpc2libGVQb3MKIC8vIE5PVEU6IENvbnNpZGVyIHByb3ZpZGluZyB0aGlzIHV0aWxpdHkgbWV0
aG9kIGFzIEFYIEFQSQogVmlzaWJsZVBvc2l0aW9uUmFuZ2UgQWNjZXNzaWJpbGl0eU9iamVjdDo6
dmlzaWJsZVBvc2l0aW9uUmFuZ2VGb3JSYW5nZShjb25zdCBQbGFpblRleHRSYW5nZSYgcmFuZ2Up
IGNvbnN0CiB7Ci0gICAgdW5zaWduZWQgdGV4dExlbmd0aCA9IHRleHQoKS5sZW5ndGgoKTsKLSNp
ZiBQTEFURk9STShHVEspCi0gICAgLy8gR3RrIEFUcyBuZWVkIHRoaXMgZm9yIGFsbCB0ZXh0IG9i
amVjdHM7IG5vdCBqdXN0IHRleHQgY29udHJvbHMuCi0gICAgaWYgKCF0ZXh0TGVuZ3RoKSB7Ci0g
ICAgICAgIE5vZGUqIG5vZGUgPSB0aGlzLT5ub2RlKCk7Ci0gICAgICAgIFJlbmRlck9iamVjdCog
cmVuZGVyZXIgPSBub2RlID8gbm9kZS0+cmVuZGVyZXIoKSA6IDA7Ci0gICAgICAgIGlmIChyZW5k
ZXJlciAmJiByZW5kZXJlci0+aXNUZXh0KCkpIHsKLSAgICAgICAgICAgIFJlbmRlclRleHQqIHJl
bmRlclRleHQgPSB0b1JlbmRlclRleHQocmVuZGVyZXIpOwotICAgICAgICAgICAgdGV4dExlbmd0
aCA9IHJlbmRlclRleHQgPyByZW5kZXJUZXh0LT50ZXh0TGVuZ3RoKCkgOiAwOwotICAgICAgICB9
Ci0gICAgICAgIC8vIEdldCB0aGUgdGV4dCBsZW5ndGggZnJvbSB0aGUgZWxlbWVudHMgdW5kZXIg
dGhlCi0gICAgICAgIC8vIGFjY2Vzc2liaWxpdHkgb2JqZWN0IGlmIHRoZSB2YWx1ZSBpcyBzdGls
bCB6ZXJvLgotICAgICAgICBpZiAoIXRleHRMZW5ndGggJiYgYWxsb3dzVGV4dFJhbmdlcygpKQot
ICAgICAgICAgICAgdGV4dExlbmd0aCA9IHRleHRVbmRlckVsZW1lbnQoKS5sZW5ndGgoKTsKLSAg
ICB9Ci0jZW5kaWYKKyAgICB1bnNpZ25lZCB0ZXh0TGVuZ3RoID0gZ2V0TGVuZ3RoRm9yVGV4dFJh
bmdlKCk7CiAgICAgaWYgKHJhbmdlLnN0YXJ0ICsgcmFuZ2UubGVuZ3RoID4gdGV4dExlbmd0aCkK
ICAgICAgICAgcmV0dXJuIFZpc2libGVQb3NpdGlvblJhbmdlKCk7CiAKZGlmZiAtLWdpdCBhL1dl
YkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmggYi9XZWJDb3JlL2FjY2Vz
c2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdC5oCmluZGV4IDBlNDRkMWIuLmU4ZjZkMWIgMTAw
NjQ0Ci0tLSBhL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmgKKysr
IGIvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuaApAQCAtNTc0LDgg
KzU3NCwxMCBAQCBwcm90ZWN0ZWQ6CiAgICAgCiAjaWYgUExBVEZPUk0oR1RLKQogICAgIGJvb2wg
YWxsb3dzVGV4dFJhbmdlcygpIGNvbnN0OworICAgIHVuc2lnbmVkIGdldExlbmd0aEZvclRleHRS
YW5nZSgpIGNvbnN0OwogI2Vsc2UKICAgICBib29sIGFsbG93c1RleHRSYW5nZXMoKSBjb25zdCB7
IHJldHVybiBpc1RleHRDb250cm9sKCk7IH0KKyAgICB1bnNpZ25lZCBnZXRMZW5ndGhGb3JUZXh0
UmFuZ2UoKSBjb25zdCB7IHJldHVybiB0ZXh0KCkubGVuZ3RoKCk7IH0KICNlbmRpZgogCiAjaWYg
UExBVEZPUk0oTUFDKQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2d0ay9BY2Nl
c3NpYmlsaXR5T2JqZWN0QXRrLmNwcCBiL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9ndGsvQWNjZXNz
aWJpbGl0eU9iamVjdEF0ay5jcHAKaW5kZXggYjIyYTUxZS4uN2Y5ZmQxYSAxMDA2NDQKLS0tIGEv
V2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2d0ay9BY2Nlc3NpYmlsaXR5T2JqZWN0QXRrLmNwcAorKysg
Yi9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvZ3RrL0FjY2Vzc2liaWxpdHlPYmplY3RBdGsuY3BwCkBA
IC0yMCw2ICsyMCw4IEBACiAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJBY2Nlc3Np
YmlsaXR5T2JqZWN0LmgiCisjaW5jbHVkZSAiUmVuZGVyT2JqZWN0LmgiCisjaW5jbHVkZSAiUmVu
ZGVyVGV4dC5oIgogCiAjaW5jbHVkZSA8Z2xpYi1vYmplY3QuaD4KIApAQCAtMTAyLDYgKzEwNCwy
OSBAQCBib29sIEFjY2Vzc2liaWxpdHlPYmplY3Q6OmFsbG93c1RleHRSYW5nZXMoKSBjb25zdAog
ICAgIHJldHVybiBpc1RleHRDb250cm9sKCkgfHwgaXNXZWJBcmVhKCkgfHwgaXNHcm91cCgpIHx8
IGlzTGluaygpIHx8IGlzSGVhZGluZygpOwogfQogCit1bnNpZ25lZCBBY2Nlc3NpYmlsaXR5T2Jq
ZWN0OjpnZXRMZW5ndGhGb3JUZXh0UmFuZ2UoKSBjb25zdAoreworICAgIHVuc2lnbmVkIHRleHRM
ZW5ndGggPSB0ZXh0KCkubGVuZ3RoKCk7CisKKyAgICBpZiAodGV4dExlbmd0aCkKKyAgICAgICAg
cmV0dXJuIHRleHRMZW5ndGg7CisKKyAgICAvLyBHdGsgQVRzIG5lZWQgdGhpcyBmb3IgYWxsIHRl
eHQgb2JqZWN0czsgbm90IGp1c3QgdGV4dCBjb250cm9scy4KKyAgICBOb2RlKiBub2RlID0gdGhp
cy0+bm9kZSgpOworICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSBub2RlID8gbm9kZS0+cmVu
ZGVyZXIoKSA6IDA7CisgICAgaWYgKHJlbmRlcmVyICYmIHJlbmRlcmVyLT5pc1RleHQoKSkgewor
ICAgICAgICBSZW5kZXJUZXh0KiByZW5kZXJUZXh0ID0gdG9SZW5kZXJUZXh0KHJlbmRlcmVyKTsK
KyAgICAgICAgdGV4dExlbmd0aCA9IHJlbmRlclRleHQgPyByZW5kZXJUZXh0LT50ZXh0TGVuZ3Ro
KCkgOiAwOworICAgIH0KKworICAgIC8vIEdldCB0aGUgdGV4dCBsZW5ndGggZnJvbSB0aGUgZWxl
bWVudHMgdW5kZXIgdGhlCisgICAgLy8gYWNjZXNzaWJpbGl0eSBvYmplY3QgaWYgdGhlIHZhbHVl
IGlzIHN0aWxsIHplcm8uCisgICAgaWYgKCF0ZXh0TGVuZ3RoICYmIGFsbG93c1RleHRSYW5nZXMo
KSkKKyAgICAgICAgdGV4dExlbmd0aCA9IHRleHRVbmRlckVsZW1lbnQoKS5sZW5ndGgoKTsKKwor
ICAgIHJldHVybiB0ZXh0TGVuZ3RoOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNl
bmRpZiAvLyBIQVZFKEFDQ0VTU0lCSUxJVFkpCmRpZmYgLS1naXQgYS9XZWJDb3JlL2FjY2Vzc2li
aWxpdHkvZ3RrL0FjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyQXRrLmNwcCBiL1dlYkNvcmUvYWNj
ZXNzaWJpbGl0eS9ndGsvQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJBdGsuY3BwCmluZGV4IGI2
NmMzODcuLjk4MGUxNmUgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9ndGsvQWNj
ZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJBdGsuY3BwCisrKyBiL1dlYkNvcmUvYWNjZXNzaWJpbGl0
eS9ndGsvQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJBdGsuY3BwCkBAIC0xMzUyLDEwICsxMzUy
LDExIEBAIHN0YXRpYyBib29sIHNlbGVjdGlvbkJlbG9uZ3NUb09iamVjdChBY2Nlc3NpYmlsaXR5
T2JqZWN0KiBjb3JlT2JqZWN0LCBWaXNpYmxlU2VsCiAgICAgLy8gYm91bmRhcmllcyBmb3IgdGhl
IHNlbGVjdGVkIG5vZGUuIFdlIHdhbnQgdG8gY2hlY2sgd2hldGhlciB0aGUKICAgICAvLyBub2Rl
IGlzIGFjdHVhbGx5IGluc2lkZSB0aGUgcmVnaW9uLCBhdCBsZWFzdCBwYXJ0aWFsbHkKICAgICBO
b2RlKiBub2RlID0gY29yZU9iamVjdC0+bm9kZSgpOworICAgIE5vZGUqIGxhc3REZXNjZW5kYW50
ID0gbm9kZS0+bGFzdERlc2NlbmRhbnQoKTsKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKICAg
ICByZXR1cm4gKHJhbmdlLT5pbnRlcnNlY3RzTm9kZShub2RlLCBlYykKICAgICAgICAgICAgICYm
IChyYW5nZS0+ZW5kQ29udGFpbmVyKCkgIT0gbm9kZSB8fCByYW5nZS0+ZW5kT2Zmc2V0KCkpCi0g
ICAgICAgICAgICAmJiAocmFuZ2UtPnN0YXJ0Q29udGFpbmVyKCkgIT0gbm9kZSB8fCByYW5nZS0+
c3RhcnRPZmZzZXQoKSAhPSBsYXN0T2Zmc2V0SW5Ob2RlKG5vZGUpKSk7CisgICAgICAgICAgICAm
JiAocmFuZ2UtPnN0YXJ0Q29udGFpbmVyKCkgIT0gbGFzdERlc2NlbmRhbnQgfHwgcmFuZ2UtPnN0
YXJ0T2Zmc2V0KCkgIT0gbGFzdE9mZnNldEluTm9kZShsYXN0RGVzY2VuZGFudCkpKTsKIH0KIAog
c3RhdGljIHZvaWQgZ2V0U2VsZWN0aW9uT2Zmc2V0c0Zvck9iamVjdChBY2Nlc3NpYmlsaXR5T2Jq
ZWN0KiBjb3JlT2JqZWN0LCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rpb24sIGdpbnQmIHN0YXJ0
T2Zmc2V0LCBnaW50JiBlbmRPZmZzZXQpCkBAIC0xNDU4LDMyICsxNDU5LDUxIEBAIHN0YXRpYyBn
Ym9vbGVhbiB3ZWJraXRfYWNjZXNzaWJsZV90ZXh0X2FkZF9zZWxlY3Rpb24oQXRrVGV4dCogdGV4
dCwgZ2ludCBzdGFydF9vCiAgICAgcmV0dXJuIEZBTFNFOwogfQogCi1zdGF0aWMgZ2Jvb2xlYW4g
d2Via2l0X2FjY2Vzc2libGVfdGV4dF9yZW1vdmVfc2VsZWN0aW9uKEF0a1RleHQqIHRleHQsIGdp
bnQgc2VsZWN0aW9uX251bSkKK3N0YXRpYyBnYm9vbGVhbiB3ZWJraXRfYWNjZXNzaWJsZV90ZXh0
X3NldF9zZWxlY3Rpb24oQXRrVGV4dCogdGV4dCwgZ2ludCBzZWxlY3Rpb25OdW0sIGdpbnQgc3Rh
cnRPZmZzZXQsIGdpbnQgZW5kT2Zmc2V0KQogewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAg
cmV0dXJuIEZBTFNFOworICAgIC8vIFdlYkNvcmUgZG9lcyBub3Qgc3VwcG9ydCBtdWx0aXBsZSBz
ZWxlY3Rpb24sIHNvIGFueXRoaW5nIGJ1dCAwIGRvZXMgbm90IG1ha2Ugc2Vuc2UgZm9yIG5vdy4K
KyAgICBpZiAoc2VsZWN0aW9uTnVtKQorICAgICAgICByZXR1cm4gRkFMU0U7CisKKyAgICAvLyBD
b25zaWRlciAtMSBhbmQgb3V0LW9mLWJvdW5kIHZhbHVlcyBhbmQgY29ycmVjdCB0aGVtIHRvIGxl
bmd0aAorICAgIGdpbnQgdGV4dENvdW50ID0gd2Via2l0X2FjY2Vzc2libGVfdGV4dF9nZXRfY2hh
cmFjdGVyX2NvdW50KHRleHQpOworICAgIGlmIChzdGFydE9mZnNldCA8IDAgfHwgc3RhcnRPZmZz
ZXQgPiB0ZXh0Q291bnQpCisgICAgICAgIHN0YXJ0T2Zmc2V0ID0gdGV4dENvdW50OworICAgIGlm
IChlbmRPZmZzZXQgPCAwIHx8IGVuZE9mZnNldCA+IHRleHRDb3VudCkKKyAgICAgICAgZW5kT2Zm
c2V0ID0gdGV4dENvdW50OworCisgICAgQWNjZXNzaWJpbGl0eU9iamVjdCogY29yZU9iamVjdCA9
IGNvcmUodGV4dCk7CisgICAgUGxhaW5UZXh0UmFuZ2UgdGV4dFJhbmdlKHN0YXJ0T2Zmc2V0LCBl
bmRPZmZzZXQgLSBzdGFydE9mZnNldCk7CisgICAgVmlzaWJsZVBvc2l0aW9uUmFuZ2UgcmFuZ2Ug
PSBjb3JlT2JqZWN0LT52aXNpYmxlUG9zaXRpb25SYW5nZUZvclJhbmdlKHRleHRSYW5nZSk7Cisg
ICAgY29yZU9iamVjdC0+c2V0U2VsZWN0ZWRWaXNpYmxlUG9zaXRpb25SYW5nZShyYW5nZSk7CisK
KyAgICByZXR1cm4gVFJVRTsKIH0KIAotc3RhdGljIGdib29sZWFuIHdlYmtpdF9hY2Nlc3NpYmxl
X3RleHRfc2V0X3NlbGVjdGlvbihBdGtUZXh0KiB0ZXh0LCBnaW50IHNlbGVjdGlvbl9udW0sIGdp
bnQgc3RhcnRfb2Zmc2V0LCBnaW50IGVuZF9vZmZzZXQpCitzdGF0aWMgZ2Jvb2xlYW4gd2Via2l0
X2FjY2Vzc2libGVfdGV4dF9yZW1vdmVfc2VsZWN0aW9uKEF0a1RleHQqIHRleHQsIGdpbnQgc2Vs
ZWN0aW9uTnVtKQogewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIEZBTFNFOwor
ICAgIC8vIFdlYkNvcmUgZG9lcyBub3Qgc3VwcG9ydCBtdWx0aXBsZSBzZWxlY3Rpb24sIHNvIGFu
eXRoaW5nIGJ1dCAwIGRvZXMgbm90IG1ha2Ugc2Vuc2UgZm9yIG5vdy4KKyAgICBpZiAoc2VsZWN0
aW9uTnVtKQorICAgICAgICByZXR1cm4gRkFMU0U7CisKKyAgICAvLyBEbyBub3RoaW5nIGlmIGN1
cnJlbnQgc2VsZWN0aW9uIGRvZXNuJ3QgYmVsb25nIHRvIHRoZSBvYmplY3QKKyAgICBpZiAoIXdl
YmtpdF9hY2Nlc3NpYmxlX3RleHRfZ2V0X25fc2VsZWN0aW9ucyh0ZXh0KSkKKyAgICAgICAgcmV0
dXJuIEZBTFNFOworCisgICAgLy8gU2V0IGEgbmV3IDAtc2l6ZWQgc2VsZWN0aW9uIHRvIHRoZSBj
YXJldCBwb3NpdGlvbiwgaW4gb3JkZXIKKyAgICAvLyB0byBzaW11bGF0ZSBzZWxlY3Rpb24gcmVt
b3ZhbCAoR0FJTCBzdHlsZSkKKyAgICBnaW50IGNhcmV0T2Zmc2V0ID0gd2Via2l0X2FjY2Vzc2li
bGVfdGV4dF9nZXRfY2FyZXRfb2Zmc2V0KHRleHQpOworICAgIHJldHVybiB3ZWJraXRfYWNjZXNz
aWJsZV90ZXh0X3NldF9zZWxlY3Rpb24odGV4dCwgc2VsZWN0aW9uTnVtLCBjYXJldE9mZnNldCwg
Y2FyZXRPZmZzZXQpOwogfQogCiBzdGF0aWMgZ2Jvb2xlYW4gd2Via2l0X2FjY2Vzc2libGVfdGV4
dF9zZXRfY2FyZXRfb2Zmc2V0KEF0a1RleHQqIHRleHQsIGdpbnQgb2Zmc2V0KQogewogICAgIEFj
Y2Vzc2liaWxpdHlPYmplY3QqIGNvcmVPYmplY3QgPSBjb3JlKHRleHQpOwogCi0gICAgLy8gRklY
TUU6IFdlIG5lZWQgdG8gcmVpbXBsZW1lbnQgdmlzaWJsZVBvc2l0aW9uUmFuZ2VGb3JSYW5nZSBo
ZXJlCi0gICAgLy8gYmVjYXVzZSB0aGUgYWN0dWFsIGZ1bmN0aW9uIGNoZWNrcyB0aGUgb2Zmc2V0
IGlzIHdpdGhpbiB0aGUKLSAgICAvLyBib3VuZGFyaWVzIG9mIHRleHQoKS5sZW5ndGgoKSwgYnV0
IHRleHQoKSBvbmx5IHdvcmtzIGZvciB0ZXh0Ci0gICAgLy8gY29udHJvbHMuLi4KLSAgICBWaXNp
YmxlUG9zaXRpb24gc3RhcnRQb3NpdGlvbiA9IGNvcmVPYmplY3QtPnZpc2libGVQb3NpdGlvbkZv
ckluZGV4KG9mZnNldCk7Ci0gICAgc3RhcnRQb3NpdGlvbi5zZXRBZmZpbml0eShET1dOU1RSRUFN
KTsKLSAgICBWaXNpYmxlUG9zaXRpb24gZW5kUG9zaXRpb24gPSBjb3JlT2JqZWN0LT52aXNpYmxl
UG9zaXRpb25Gb3JJbmRleChvZmZzZXQpOwotICAgIFZpc2libGVQb3NpdGlvblJhbmdlIHJhbmdl
ID0gVmlzaWJsZVBvc2l0aW9uUmFuZ2Uoc3RhcnRQb3NpdGlvbiwgZW5kUG9zaXRpb24pOwotCisg
ICAgUGxhaW5UZXh0UmFuZ2UgdGV4dFJhbmdlKG9mZnNldCwgMCk7CisgICAgVmlzaWJsZVBvc2l0
aW9uUmFuZ2UgcmFuZ2UgPSBjb3JlT2JqZWN0LT52aXNpYmxlUG9zaXRpb25SYW5nZUZvclJhbmdl
KHRleHRSYW5nZSk7CiAgICAgY29yZU9iamVjdC0+c2V0U2VsZWN0ZWRWaXNpYmxlUG9zaXRpb25S
YW5nZShyYW5nZSk7CisKICAgICByZXR1cm4gVFJVRTsKIH0KIApkaWZmIC0tZ2l0IGEvV2ViS2l0
L2d0ay9DaGFuZ2VMb2cgYi9XZWJLaXQvZ3RrL0NoYW5nZUxvZwppbmRleCBlZDA4NGY4Li42Nzhl
YWExIDEwMDY0NAotLS0gYS9XZWJLaXQvZ3RrL0NoYW5nZUxvZworKysgYi9XZWJLaXQvZ3RrL0No
YW5nZUxvZwpAQCAtMSwzICsxLDI3IEBACisyMDEwLTA5LTEwICBNYXJpbyBTYW5jaGV6IFByYWRh
ICA8bXNhbmNoZXpAaWdhbGlhLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBbR1RLXSBQcm92aWRlIHVuaXQgdGVzdHMgZm9yIEF0a1RleHQncyB0
ZXh0IHNlbGVjdGlvbiBmdW5jdGlvbnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTQzOTE5CisKKyAgICAgICAgTmV3IHRlc3RzIHRvIGNoZWNrIGdldHRp
bmcsIHNldHRpbmcgYW5kIHJlbW92aW5nIHRleHQgc2VsZWN0aW9ucworCisgICAgICAgICogdGVz
dHMvdGVzdGF0ay5jOgorICAgICAgICAodGVzdFdla2l0QXRrVGV4dFNlbGVjdGlvbnMpOiBOZXcg
dW5pdCB0ZXN0cyB0byBjaGVjayBhbGwgdGhlIHRleHQKKyAgICAgICAgc2VsZWN0aW9uIHJlbGF0
ZWQgZnVuY3Rpb25zIGFsdG9nZXRoZXIgdGhyb3VnaCBhIHNpbmdsZSB0ZXN0CisgICAgICAgIGZ1
bmN0aW9uLgorICAgICAgICAobWFpbik6CisKKyAgICAgICAgTWFrZSBzdXJlIHRoYXQgY29kZSBk
ZXBlbmRhbnQgb24gZ2V0dGluZyBpbmZvcm1hdGlvbiBmcm9tIHRoZQorICAgICAgICBjbGlwYm9h
cmQgZ2V0cyBleGVjdXRlZCBvbmx5IHdoZW4gdGhlcmUncyBhIEdESyB3aW5kb3cgYXNzb2NpYXRl
ZAorICAgICAgICB0byB0aGUgd2VidmlldyB3aWRnZXQsIGFzIHRoYXQncyBub3QgdGhlIGNhc2Ug
d2hlbiBleGVjdXRpbmcgdGhlCisgICAgICAgIHVuaXQgdGVzdHMgKHRoZSB3ZWRidmlldyBpcyBu
b3QgaW5zaWRlIG9mIGFueSB0b3BsZXZlbCB3aW5kb3cpIGFuZAorICAgICAgICB3aWxsIG1ha2Ug
dGhlIHRlc3RzIGNyYXNoIGlmIG5vdCB0YWtlbiBpbnRvIGFjY291bnQuCisKKyAgICAgICAgKiBX
ZWJDb3JlU3VwcG9ydC9FZGl0b3JDbGllbnRHdGsuY3BwOgorICAgICAgICAoV2ViS2l0OjpFZGl0
b3JDbGllbnQ6OnJlc3BvbmRUb0NoYW5nZWRTZWxlY3Rpb24pOgorCiAyMDEwLTA5LTEwICBYYW4g
TG9wZXogIDx4bG9wZXpAaWdhbGlhLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBNYXJ0aW4g
Um9iaW5zb24uCmRpZmYgLS1naXQgYS9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0VkaXRvckNs
aWVudEd0ay5jcHAgYi9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0VkaXRvckNsaWVudEd0ay5j
cHAKaW5kZXggOGEwMTliNC4uYjE5NzNiYyAxMDA2NDQKLS0tIGEvV2ViS2l0L2d0ay9XZWJDb3Jl
U3VwcG9ydC9FZGl0b3JDbGllbnRHdGsuY3BwCisrKyBiL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBv
cnQvRWRpdG9yQ2xpZW50R3RrLmNwcApAQCAtMzQxLDYgKzM0MSwzMSBAQCBzdGF0aWMgdm9pZCBj
b2xsYXBzZVNlbGVjdGlvbihHdGtDbGlwYm9hcmQqIGNsaXBib2FyZCwgV2ViS2l0V2ViVmlldyog
d2ViVmlldykKICAgICBmcmFtZS0+c2VsZWN0aW9uKCktPnNldEJhc2UoZnJhbWUtPnNlbGVjdGlv
bigpLT5leHRlbnQoKSwgZnJhbWUtPnNlbGVjdGlvbigpLT5hZmZpbml0eSgpKTsKIH0KIAorI2lm
IFBMQVRGT1JNKFgxMSkKK3N0YXRpYyB2b2lkIHNldFNlbGVjdGlvblByaW1hcnlDbGlwYm9hcmRJ
Zk5lZWRlZChXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3KQoreworICAgIGlmICghZ3RrX3dpZGdldF9o
YXNfc2NyZWVuKEdUS19XSURHRVQod2ViVmlldykpKQorICAgICAgICByZXR1cm47CisKKyAgICBH
dGtDbGlwYm9hcmQqIGNsaXBib2FyZCA9IGd0a193aWRnZXRfZ2V0X2NsaXBib2FyZChHVEtfV0lE
R0VUKHdlYlZpZXcpLCBHREtfU0VMRUNUSU9OX1BSSU1BUlkpOworICAgIERhdGFPYmplY3RHdGsq
IGRhdGFPYmplY3QgPSBEYXRhT2JqZWN0R3RrOjpmb3JDbGlwYm9hcmQoY2xpcGJvYXJkKTsKKyAg
ICBXZWJDb3JlOjpQYWdlKiBjb3JlUGFnZSA9IGNvcmUod2ViVmlldyk7CisgICAgRnJhbWUqIHRh
cmdldEZyYW1lID0gY29yZVBhZ2UtPmZvY3VzQ29udHJvbGxlcigpLT5mb2N1c2VkT3JNYWluRnJh
bWUoKTsKKworICAgIGlmICghdGFyZ2V0RnJhbWUtPnNlbGVjdGlvbigpLT5pc1JhbmdlKCkpCisg
ICAgICAgIHJldHVybjsKKworICAgIGRhdGFPYmplY3QtPmNsZWFyKCk7CisgICAgZGF0YU9iamVj
dC0+c2V0UmFuZ2UodGFyZ2V0RnJhbWUtPnNlbGVjdGlvbigpLT50b05vcm1hbGl6ZWRSYW5nZSgp
KTsKKworICAgIHZpZXdTZXR0aW5nQ2xpcGJvYXJkID0gd2ViVmlldzsKKyAgICBHQ2xvc3VyZSog
Y2FsbGJhY2sgPSBnX2NjbG9zdXJlX25ld19vYmplY3QoR19DQUxMQkFDSyhjb2xsYXBzZVNlbGVj
dGlvbiksIEdfT0JKRUNUKHdlYlZpZXcpKTsKKyAgICBnX2Nsb3N1cmVfc2V0X21hcnNoYWwoY2Fs
bGJhY2ssIGdfY2Nsb3N1cmVfbWFyc2hhbF9WT0lEX19WT0lEKTsKKyAgICBwYXN0ZWJvYXJkSGVs
cGVySW5zdGFuY2UoKS0+d3JpdGVDbGlwYm9hcmRDb250ZW50cyhjbGlwYm9hcmQsIGNhbGxiYWNr
KTsKKyAgICB2aWV3U2V0dGluZ0NsaXBib2FyZCA9IDA7Cit9CisjZW5kaWYKKwogdm9pZCBFZGl0
b3JDbGllbnQ6OnJlc3BvbmRUb0NoYW5nZWRTZWxlY3Rpb24oKQogewogICAgIFdlYktpdFdlYlZp
ZXdQcml2YXRlKiBwcml2ID0gbV93ZWJWaWV3LT5wcml2OwpAQCAtMzU0LDE5ICszNzksNyBAQCB2
b2lkIEVkaXRvckNsaWVudDo6cmVzcG9uZFRvQ2hhbmdlZFNlbGVjdGlvbigpCiAgICAgICAgIHJl
dHVybjsKIAogI2lmIFBMQVRGT1JNKFgxMSkKLSAgICBHdGtDbGlwYm9hcmQqIGNsaXBib2FyZCA9
IGd0a193aWRnZXRfZ2V0X2NsaXBib2FyZChHVEtfV0lER0VUKG1fd2ViVmlldyksIEdES19TRUxF
Q1RJT05fUFJJTUFSWSk7Ci0gICAgRGF0YU9iamVjdEd0ayogZGF0YU9iamVjdCA9IERhdGFPYmpl
Y3RHdGs6OmZvckNsaXBib2FyZChjbGlwYm9hcmQpOwotCi0gICAgaWYgKHRhcmdldEZyYW1lLT5z
ZWxlY3Rpb24oKS0+aXNSYW5nZSgpKSB7Ci0gICAgICAgIGRhdGFPYmplY3QtPmNsZWFyKCk7Ci0g
ICAgICAgIGRhdGFPYmplY3QtPnNldFJhbmdlKHRhcmdldEZyYW1lLT5zZWxlY3Rpb24oKS0+dG9O
b3JtYWxpemVkUmFuZ2UoKSk7Ci0KLSAgICAgICAgdmlld1NldHRpbmdDbGlwYm9hcmQgPSBtX3dl
YlZpZXc7Ci0gICAgICAgIEdDbG9zdXJlKiBjYWxsYmFjayA9IGdfY2Nsb3N1cmVfbmV3X29iamVj
dChHX0NBTExCQUNLKGNvbGxhcHNlU2VsZWN0aW9uKSwgR19PQkpFQ1QobV93ZWJWaWV3KSk7Ci0g
ICAgICAgIGdfY2xvc3VyZV9zZXRfbWFyc2hhbChjYWxsYmFjaywgZ19jY2xvc3VyZV9tYXJzaGFs
X1ZPSURfX1ZPSUQpOwotICAgICAgICBwYXN0ZWJvYXJkSGVscGVySW5zdGFuY2UoKS0+d3JpdGVD
bGlwYm9hcmRDb250ZW50cyhjbGlwYm9hcmQsIGNhbGxiYWNrKTsKLSAgICAgICAgdmlld1NldHRp
bmdDbGlwYm9hcmQgPSAwOwotICAgIH0KKyAgICBzZXRTZWxlY3Rpb25QcmltYXJ5Q2xpcGJvYXJk
SWZOZWVkZWQobV93ZWJWaWV3KTsKICNlbmRpZgogCiAgICAgaWYgKCF0YXJnZXRGcmFtZS0+ZWRp
dG9yKCktPmhhc0NvbXBvc2l0aW9uKCkpCmRpZmYgLS1naXQgYS9XZWJLaXQvZ3RrL3Rlc3RzL3Rl
c3RhdGsuYyBiL1dlYktpdC9ndGsvdGVzdHMvdGVzdGF0ay5jCmluZGV4IDk5MzBiYzIuLjAzN2Ex
MWIgMTAwNjQ0Ci0tLSBhL1dlYktpdC9ndGsvdGVzdHMvdGVzdGF0ay5jCisrKyBiL1dlYktpdC9n
dGsvdGVzdHMvdGVzdGF0ay5jCkBAIC00NCwxMCArNDQsMTIgQEAgc3RhdGljIGNvbnN0IGNoYXIq
IGNvbnRlbnRzSW5UYWJsZSA9ICI8aHRtbD48Ym9keT48dGFibGU+PHRyPjx0ZD5mb288L3RkPjx0
ZD5iYXIKIAogc3RhdGljIGNvbnN0IGNoYXIqIGNvbnRlbnRzSW5UYWJsZVdpdGhIZWFkZXJzID0g
IjxodG1sPjxib2R5Pjx0YWJsZT48dHI+PHRoPmZvbzwvdGg+PHRoPmJhcjwvdGg+PHRoIGNvbHNw
YW49JzInPmJhejwvdGg+PC90cj48dHI+PHRoPnF1eDwvdGg+PHRkPjE8L3RkPjx0ZD4yPC90ZD48
dGQ+MzwvdGQ+PC90cj48dHI+PHRoIHJvd3NwYW49JzInPnF1dXg8L3RoPjx0ZD40PC90ZD48dGQ+
NTwvdGQ+PHRkPjY8L3RkPjwvdHI+PHRyPjx0ZD42PC90ZD48dGQ+NzwvdGQ+PHRkPjg8L3RkPjwv
dHI+PHRyPjx0aD5jb3JnZTwvdGg+PHRkPjk8L3RkPjx0ZD4xMDwvdGQ+PHRkPjExPC90ZD48L3Ry
PjwvdGFibGU+PHRhYmxlPjx0cj48dGQ+MTwvdGQ+PHRkPjI8L3RkPjwvdHI+PHRyPjx0ZD4zPC90
ZD48dGQ+NDwvdGQ+PC90cj48L3RhYmxlPjwvYm9keT48L2h0bWw+IjsKIAotc3RhdGljIGNvbnN0
IGNoYXIqIHRleHRXaXRoQXR0cmlidXRlcyA9ICI8aHRtbD48aGVhZD48c3R5bGU+LnN0MSB7Zm9u
dC1mYW1pbHk6IG1vbm9zcGFjZTsgY29sb3I6cmdiKDEyMCwxMjEsMTIyKTt9IC5zdDIge3RleHQt
ZGVjb3JhdGlvbjp1bmRlcmxpbmU7IGJhY2tncm91bmQtY29sb3I6cmdiKDgwLDgxLDgyKTt9PC9z
dHlsZT48L2hlYWQ+PGJvZHk+PHAgc3R5bGU9XCJmb250LXNpemU6MTQ7IHRleHQtYWxpZ246cmln
aHQ7XCI+VGhpcyBpcyB0aGUgPGk+Zmlyc3Q8L2k+PGI+IHNlbnRlbmNlIG9mIHRoaXMgdGV4dC48
L2I+PC9wPjxwIGNsYXNzPVwic3QxXCI+VGhpcyBzZW50ZW5jZSBzaG91bGQgaGF2ZSBhbiBzdHls
ZSBhcHBsaWVkIDxzcGFuIGNsYXNzPVwic3QyXCI+YW5kIHRoaXMgcGFydCBzaG91bGQgaGF2ZSBh
bm90aGVyIG9uZTwvc3Bhbj4uPC9wPjxwPng8c3ViPjE8L3N1Yj48c3VwPjI8L3N1cD49eDxzdWI+
Mjwvc3ViPjxzdXA+Mzwvc3VwPjwvcD48cCBzdHlsZT1cInRleHQtYWxpZ246Y2VudGVyO1wiPlRo
aXMgc2VudGVuY2UgaXMgdGhlIDxzdHJpa2U+bGFzdDwvc3RyaWtlPiBvbmUuPC9wPjwvYm9keT48
L2h0bWw+IjsKLQogc3RhdGljIGNvbnN0IGNoYXIqIGxpc3RzT2ZJdGVtcyA9ICI8aHRtbD48Ym9k
eT48dWw+PGxpPnRleHQgb25seTwvbGk+PGxpPjxhIGhyZWY9J2Zvbyc+bGluayBvbmx5PC9hPjwv
bGk+PGxpPnRleHQgYW5kIGEgPGEgaHJlZj0nYmFyJz5saW5rPC9hPjwvbGk+PC91bD48b2w+PGxp
PnRleHQgb25seTwvbGk+PGxpPjxhIGhyZWY9J2Zvbyc+bGluayBvbmx5PC9hPjwvbGk+PGxpPnRl
eHQgYW5kIGEgPGEgaHJlZj0nYmFyJz5saW5rPC9hPjwvbGk+PC9vbD48L2JvZHk+PC9odG1sPiI7
CiAKK3N0YXRpYyBjb25zdCBjaGFyKiB0ZXh0Rm9yU2VsZWN0aW9ucyA9ICI8aHRtbD48Ym9keT48
cD5BIHBhcmFncmFwaCB3aXRoIHBsYWluIHRleHQ8L3A+PHA+QSBwYXJhZ3JhcGggd2l0aCA8YSBo
cmVmPSdodHRwOi8vd2Via2l0Lm9yZyc+YSBsaW5rPC9hPiBpbiB0aGUgbWlkZGxlPC9wPjwvYm9k
eT48L2h0bWw+IjsKKworc3RhdGljIGNvbnN0IGNoYXIqIHRleHRXaXRoQXR0cmlidXRlcyA9ICI8
aHRtbD48aGVhZD48c3R5bGU+LnN0MSB7Zm9udC1mYW1pbHk6IG1vbm9zcGFjZTsgY29sb3I6cmdi
KDEyMCwxMjEsMTIyKTt9IC5zdDIge3RleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmU7IGJhY2tncm91
bmQtY29sb3I6cmdiKDgwLDgxLDgyKTt9PC9zdHlsZT48L2hlYWQ+PGJvZHk+PHAgc3R5bGU9XCJm
b250LXNpemU6MTQ7IHRleHQtYWxpZ246cmlnaHQ7XCI+VGhpcyBpcyB0aGUgPGk+Zmlyc3Q8L2k+
PGI+IHNlbnRlbmNlIG9mIHRoaXMgdGV4dC48L2I+PC9wPjxwIGNsYXNzPVwic3QxXCI+VGhpcyBz
ZW50ZW5jZSBzaG91bGQgaGF2ZSBhbiBzdHlsZSBhcHBsaWVkIDxzcGFuIGNsYXNzPVwic3QyXCI+
YW5kIHRoaXMgcGFydCBzaG91bGQgaGF2ZSBhbm90aGVyIG9uZTwvc3Bhbj4uPC9wPjxwPng8c3Vi
PjE8L3N1Yj48c3VwPjI8L3N1cD49eDxzdWI+Mjwvc3ViPjxzdXA+Mzwvc3VwPjwvcD48cCBzdHls
ZT1cInRleHQtYWxpZ246Y2VudGVyO1wiPlRoaXMgc2VudGVuY2UgaXMgdGhlIDxzdHJpa2U+bGFz
dDwvc3RyaWtlPiBvbmUuPC9wPjwvYm9keT48L2h0bWw+IjsKKwogc3RhdGljIGdib29sZWFuIGJh
aWxfb3V0KEdNYWluTG9vcCogbG9vcCkKIHsKICAgICBpZiAoZ19tYWluX2xvb3BfaXNfcnVubmlu
Zyhsb29wKSkKQEAgLTc0Miw2ICs3NDQsMTIxIEBAIHN0YXRpYyB2b2lkIHRlc3RXZWJraXRBdGtU
ZXh0QXR0cmlidXRlcyh2b2lkKQogICAgIGF0a19hdHRyaWJ1dGVfc2V0X2ZyZWUoc2V0Myk7CiB9
CiAKK3N0YXRpYyB2b2lkIHRlc3RXZWtpdEF0a1RleHRTZWxlY3Rpb25zKHZvaWQpCit7CisgICAg
V2ViS2l0V2ViVmlldyogd2ViVmlldzsKKyAgICBBdGtPYmplY3QqIG9iajsKKyAgICBHTWFpbkxv
b3AqIGxvb3A7CisgICAgZ2NoYXIqIHNlbGVjdGVkVGV4dDsKKyAgICBnaW50IHN0YXJ0T2Zmc2V0
OworICAgIGdpbnQgZW5kT2Zmc2V0OworICAgIGdib29sZWFuIHJlc3VsdDsKKworICAgIHdlYlZp
ZXcgPSBXRUJLSVRfV0VCX1ZJRVcod2Via2l0X3dlYl92aWV3X25ldygpKTsKKyAgICBnX29iamVj
dF9yZWZfc2luayh3ZWJWaWV3KTsKKyAgICBHdGtBbGxvY2F0aW9uIGFsbG9jID0geyAwLCAwLCA4
MDAsIDYwMCB9OworICAgIGd0a193aWRnZXRfc2l6ZV9hbGxvY2F0ZShHVEtfV0lER0VUKHdlYlZp
ZXcpLCAmYWxsb2MpOworICAgIHdlYmtpdF93ZWJfdmlld19sb2FkX3N0cmluZyh3ZWJWaWV3LCB0
ZXh0Rm9yU2VsZWN0aW9ucywgTlVMTCwgTlVMTCwgTlVMTCk7CisgICAgbG9vcCA9IGdfbWFpbl9s
b29wX25ldyhOVUxMLCBUUlVFKTsKKworICAgIGdfdGltZW91dF9hZGQoMTAwLCAoR1NvdXJjZUZ1
bmMpYmFpbF9vdXQsIGxvb3ApOworICAgIGdfbWFpbl9sb29wX3J1bihsb29wKTsKKworICAgIG9i
aiA9IGd0a193aWRnZXRfZ2V0X2FjY2Vzc2libGUoR1RLX1dJREdFVCh3ZWJWaWV3KSk7CisgICAg
Z19hc3NlcnQob2JqKTsKKworICAgIEF0a1RleHQqIHBhcmFncmFwaDEgPSBBVEtfVEVYVChhdGtf
b2JqZWN0X3JlZl9hY2Nlc3NpYmxlX2NoaWxkKG9iaiwgMCkpOworICAgIGdfYXNzZXJ0KEFUS19J
U19URVhUKHBhcmFncmFwaDEpKTsKKyAgICBBdGtUZXh0KiBwYXJhZ3JhcGgyID0gQVRLX1RFWFQo
YXRrX29iamVjdF9yZWZfYWNjZXNzaWJsZV9jaGlsZChvYmosIDEpKTsKKyAgICBnX2Fzc2VydChB
VEtfSVNfVEVYVChwYXJhZ3JhcGgyKSk7CisgICAgQXRrVGV4dCogbGluayA9IEFUS19URVhUKGF0
a19vYmplY3RfcmVmX2FjY2Vzc2libGVfY2hpbGQoQVRLX09CSkVDVChwYXJhZ3JhcGgyKSwgMCkp
OworICAgIGdfYXNzZXJ0KEFUS19JU19URVhUKGxpbmspKTsKKworICAgIC8vIEZpcnN0IHBhcmFn
cmFwaCAoc2ltcGxlIHRleHQpCisKKyAgICAvLyBCYXNpYyBpbml0aWFsIGNoZWNrcworICAgIGdf
YXNzZXJ0X2NtcGludChhdGtfdGV4dF9nZXRfbl9zZWxlY3Rpb25zKHBhcmFncmFwaDEpLCA9PSwg
MCk7CisgICAgc2VsZWN0ZWRUZXh0ID0gYXRrX3RleHRfZ2V0X3NlbGVjdGlvbihwYXJhZ3JhcGgx
LCAwLCAmc3RhcnRPZmZzZXQsICZlbmRPZmZzZXQpOworICAgIGdfYXNzZXJ0X2NtcGludChzdGFy
dE9mZnNldCwgPT0sIDApOworICAgIGdfYXNzZXJ0X2NtcGludChlbmRPZmZzZXQsID09LCAwKTsK
KyAgICBnX2Fzc2VydF9jbXBzdHIoc2VsZWN0ZWRUZXh0LCA9PSwgTlVMTCk7CisgICAgZ19mcmVl
IChzZWxlY3RlZFRleHQpOworICAgIC8vIFRyeSByZW1vdmluZyBhIG5vbiBleGlzdGluZyAoeWV0
KSBzZWxlY3Rpb24KKyAgICByZXN1bHQgPSBhdGtfdGV4dF9yZW1vdmVfc2VsZWN0aW9uKHBhcmFn
cmFwaDEsIDApOworICAgIGdfYXNzZXJ0KCFyZXN1bHQpOworICAgIC8vIFRyeSBzZXR0aW5nIGEg
MC1jaGFyIHNlbGVjdGlvbgorICAgIHJlc3VsdCA9IGF0a190ZXh0X3NldF9zZWxlY3Rpb24ocGFy
YWdyYXBoMSwgMCwgNSwgNSk7CisgICAgZ19hc3NlcnQocmVzdWx0KTsKKworICAgIC8vIE1ha2Ug
YSBzZWxlY3Rpb24gYW5kIHRlc3QgaXQKKyAgICByZXN1bHQgPSBhdGtfdGV4dF9zZXRfc2VsZWN0
aW9uKHBhcmFncmFwaDEsIDAsIDUsIDI1KTsKKyAgICBnX2Fzc2VydChyZXN1bHQpOworICAgIGdf
YXNzZXJ0X2NtcGludChhdGtfdGV4dF9nZXRfbl9zZWxlY3Rpb25zKHBhcmFncmFwaDEpLCA9PSwg
MSk7CisgICAgc2VsZWN0ZWRUZXh0ID0gYXRrX3RleHRfZ2V0X3NlbGVjdGlvbihwYXJhZ3JhcGgx
LCAwLCAmc3RhcnRPZmZzZXQsICZlbmRPZmZzZXQpOworICAgIGdfYXNzZXJ0X2NtcGludChzdGFy
dE9mZnNldCwgPT0sIDUpOworICAgIGdfYXNzZXJ0X2NtcGludChlbmRPZmZzZXQsID09LCAyNSk7
CisgICAgZ19hc3NlcnRfY21wc3RyKHNlbGVjdGVkVGV4dCwgPT0sICJhZ3JhcGggd2l0aCBwbGFp
biB0ZSIpOworICAgIGdfZnJlZSAoc2VsZWN0ZWRUZXh0KTsKKyAgICAvLyBUcnkgcmVtb3Zpbmcg
dGhlIHNlbGVjdGlvbiBmcm9tIG90aGVyIEF0a1RleHQgb2JqZWN0IChzaG91bGQgZmFpbCkKKyAg
ICByZXN1bHQgPSBhdGtfdGV4dF9yZW1vdmVfc2VsZWN0aW9uKHBhcmFncmFwaDIsIDApOworICAg
IGdfYXNzZXJ0KCFyZXN1bHQpOworCisgICAgLy8gUmVtb3ZlIHRoZSBzZWxlY3Rpb24gYW5kIHRl
c3QgZXZlcnl0aGluZyBhZ2FpbgorICAgIHJlc3VsdCA9IGF0a190ZXh0X3JlbW92ZV9zZWxlY3Rp
b24ocGFyYWdyYXBoMSwgMCk7CisgICAgZ19hc3NlcnQocmVzdWx0KTsKKyAgICBnX2Fzc2VydF9j
bXBpbnQoYXRrX3RleHRfZ2V0X25fc2VsZWN0aW9ucyhwYXJhZ3JhcGgxKSwgPT0sIDApOworICAg
IHNlbGVjdGVkVGV4dCA9IGF0a190ZXh0X2dldF9zZWxlY3Rpb24ocGFyYWdyYXBoMSwgMCwgJnN0
YXJ0T2Zmc2V0LCAmZW5kT2Zmc2V0KTsKKyAgICAvLyBOb3cgb2Zmc2V0cyBzaG91bGQgYmUgdGhl
IHNhbWUsIHNldCB0byB0aGUgbGFzdCBwb3NpdGlvbiBvZiB0aGUgY2FyZXQKKyAgICBnX2Fzc2Vy
dF9jbXBpbnQoc3RhcnRPZmZzZXQsID09LCBlbmRPZmZzZXQpOworICAgIGdfYXNzZXJ0X2NtcGlu
dChzdGFydE9mZnNldCwgPT0sIDI1KTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoZW5kT2Zmc2V0LCA9
PSwgMjUpOworICAgIGdfYXNzZXJ0X2NtcHN0cihzZWxlY3RlZFRleHQsID09LCBOVUxMKTsKKyAg
ICBnX2ZyZWUgKHNlbGVjdGVkVGV4dCk7CisKKyAgICAvLyBTZWNvbmQgcGFyYWdyYXBoICh0ZXh0
ICsgbGluayArIHRleHQpCisKKyAgICAvLyBTZXQgYSBzZWxlY3Rpb24gcGFydGlhbGx5IGNvdmVy
aW5nIHRoZSBsaW5rIGFuZCB0ZXN0IGl0CisgICAgcmVzdWx0ID0gYXRrX3RleHRfc2V0X3NlbGVj
dGlvbihwYXJhZ3JhcGgyLCAwLCA3LCAyMSk7CisgICAgZ19hc3NlcnQocmVzdWx0KTsKKworICAg
IC8vIFRlc3QgdGhlIHBhcmFncmFwaCBmaXJzdAorICAgIGdfYXNzZXJ0X2NtcGludChhdGtfdGV4
dF9nZXRfbl9zZWxlY3Rpb25zKHBhcmFncmFwaDIpLCA9PSwgMSk7CisgICAgc2VsZWN0ZWRUZXh0
ID0gYXRrX3RleHRfZ2V0X3NlbGVjdGlvbihwYXJhZ3JhcGgyLCAwLCAmc3RhcnRPZmZzZXQsICZl
bmRPZmZzZXQpOworICAgIGdfYXNzZXJ0X2NtcGludChzdGFydE9mZnNldCwgPT0sIDcpOworICAg
IGdfYXNzZXJ0X2NtcGludChlbmRPZmZzZXQsID09LCAyMSk7CisgICAgZ19hc3NlcnRfY21wc3Ry
KHNlbGVjdGVkVGV4dCwgPT0sICJyYXBoIHdpdGggYSBsaSIpOworICAgIGdfZnJlZSAoc2VsZWN0
ZWRUZXh0KTsKKworICAgIC8vIE5vdyB0ZXN0IGp1c3QgdGhlIGxpbmsKKyAgICBnX2Fzc2VydF9j
bXBpbnQoYXRrX3RleHRfZ2V0X25fc2VsZWN0aW9ucyhsaW5rKSwgPT0sIDEpOworICAgIHNlbGVj
dGVkVGV4dCA9IGF0a190ZXh0X2dldF9zZWxlY3Rpb24obGluaywgMCwgJnN0YXJ0T2Zmc2V0LCAm
ZW5kT2Zmc2V0KTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoc3RhcnRPZmZzZXQsID09LCAwKTsKKyAg
ICBnX2Fzc2VydF9jbXBpbnQoZW5kT2Zmc2V0LCA9PSwgNCk7CisgICAgZ19hc3NlcnRfY21wc3Ry
KHNlbGVjdGVkVGV4dCwgPT0sICJhIGxpIik7CisgICAgZ19mcmVlIChzZWxlY3RlZFRleHQpOwor
CisgICAgLy8gUmVtb3ZlIHNlbGVjdGlvbnMgYW5kIHRleHQgZXZlcnl0aGluZyBhZ2FpbgorICAg
IHJlc3VsdCA9IGF0a190ZXh0X3JlbW92ZV9zZWxlY3Rpb24ocGFyYWdyYXBoMiwgMCk7CisgICAg
Z19hc3NlcnQocmVzdWx0KTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoYXRrX3RleHRfZ2V0X25fc2Vs
ZWN0aW9ucyhwYXJhZ3JhcGgyKSwgPT0sIDApOworICAgIHNlbGVjdGVkVGV4dCA9IGF0a190ZXh0
X2dldF9zZWxlY3Rpb24ocGFyYWdyYXBoMiwgMCwgJnN0YXJ0T2Zmc2V0LCAmZW5kT2Zmc2V0KTsK
KyAgICAvLyBOb3cgb2Zmc2V0cyBzaG91bGQgYmUgdGhlIHNhbWUgKG5vIHNlbGVjdGlvbikKKyAg
ICBnX2Fzc2VydF9jbXBpbnQoc3RhcnRPZmZzZXQsID09LCBlbmRPZmZzZXQpOworICAgIGdfYXNz
ZXJ0X2NtcHN0cihzZWxlY3RlZFRleHQsID09LCBOVUxMKTsKKyAgICBnX2ZyZWUgKHNlbGVjdGVk
VGV4dCk7CisKKyAgICBnX2Fzc2VydF9jbXBpbnQoYXRrX3RleHRfZ2V0X25fc2VsZWN0aW9ucyhs
aW5rKSwgPT0sIDApOworICAgIHNlbGVjdGVkVGV4dCA9IGF0a190ZXh0X2dldF9zZWxlY3Rpb24o
bGluaywgMCwgJnN0YXJ0T2Zmc2V0LCAmZW5kT2Zmc2V0KTsKKyAgICAvLyBOb3cgb2Zmc2V0cyBz
aG91bGQgYmUgdGhlIHNhbWUgKG5vIHNlbGVjdGlvbikKKyAgICBnX2Fzc2VydF9jbXBpbnQoc3Rh
cnRPZmZzZXQsID09LCBlbmRPZmZzZXQpOworICAgIGdfYXNzZXJ0X2NtcHN0cihzZWxlY3RlZFRl
eHQsID09LCBOVUxMKTsKKyAgICBnX2ZyZWUgKHNlbGVjdGVkVGV4dCk7CisKKyAgICBnX29iamVj
dF91bnJlZihwYXJhZ3JhcGgxKTsKKyAgICBnX29iamVjdF91bnJlZihwYXJhZ3JhcGgyKTsKKyAg
ICBnX29iamVjdF91bnJlZih3ZWJWaWV3KTsKK30KKwogc3RhdGljIHZvaWQgdGVzdF93ZWJraXRf
YXRrX2dldF9leHRlbnRzKHZvaWQpCiB7CiAgICAgV2ViS2l0V2ViVmlldyogd2ViVmlldzsKQEAg
LTkzNiw2ICsxMDUzLDcgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIqKiBhcmd2KQogICAgIGdf
dGVzdF9hZGRfZnVuYygiL3dlYmtpdC9hdGsvZ2V0VGV4dEluVGFibGUiLCB0ZXN0V2Via2l0QXRr
R2V0VGV4dEluVGFibGUpOwogICAgIGdfdGVzdF9hZGRfZnVuYygiL3dlYmtpdC9hdGsvZ2V0SGVh
ZGVyc0luVGFibGUiLCB0ZXN0V2Via2l0QXRrR2V0SGVhZGVyc0luVGFibGUpOwogICAgIGdfdGVz
dF9hZGRfZnVuYygiL3dlYmtpdC9hdGsvdGV4dEF0dHJpYnV0ZXMiLCB0ZXN0V2Via2l0QXRrVGV4
dEF0dHJpYnV0ZXMpOworICAgIGdfdGVzdF9hZGRfZnVuYygiL3dlYmtpdC9hdGsvdGV4dFNlbGVj
dGlvbnMiLCB0ZXN0V2VraXRBdGtUZXh0U2VsZWN0aW9ucyk7CiAgICAgZ190ZXN0X2FkZF9mdW5j
KCIvd2Via2l0L2F0ay9nZXRfZXh0ZW50cyIsIHRlc3Rfd2Via2l0X2F0a19nZXRfZXh0ZW50cyk7
CiAgICAgZ190ZXN0X2FkZF9mdW5jKCIvd2Via2l0L2F0ay9saXN0c09mSXRlbXMiLCB0ZXN0V2Vi
a2l0QXRrTGlzdHNPZkl0ZW1zKTsKICAgICByZXR1cm4gZ190ZXN0X3J1biAoKTsKLS0gCjEuNy4w
LjQKCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>67214</attachid>
            <date>2010-09-10 11:55:00 -0700</date>
            <delta_ts>2010-09-13 05:30:07 -0700</delta_ts>
            <desc>Path proposal + Unit tests</desc>
            <filename>0002-2010-09-10-Mario-Sanchez-Prada-msanchez-igalia.com.patch</filename>
            <type>text/plain</type>
            <size>22249</size>
            <attacher name="Mario Sanchez Prada">mario</attacher>
            
              <data encoding="base64">RnJvbSA0ZTJiYTdhMmM3Y2YxZDAwMDk2Y2VmZmM5ZmNjNTUwYzEyMDJkMjAzIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBNYXJpbyBTYW5jaGV6IFByYWRhIDxtc2FuY2hlekBpZ2FsaWEu
Y29tPgpEYXRlOiBXZWQsIDggU2VwIDIwMTAgMTM6MzE6MDkgKzAyMDAKU3ViamVjdDogW1BBVENI
IDIvMl0gMjAxMC0wOS0xMCAgTWFyaW8gU2FuY2hleiBQcmFkYSAgPG1zYW5jaGV6QGlnYWxpYS5j
b20+CgogICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgoKICAgICAgICBbR1RLXSBB
VHMgc2hvdWxkIGJlIGFibGUgdG8gc2VsZWN0L3Vuc2VsZWN0IHRleHQKICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjU2NzMKCiAgICAgICAgSW1wbGVtZW50
IEF0a1RleHQncyBzZXRTZWxlY3Rpb24gYW5kIHJlbW92ZVNlbGVjdGlvbiBmdW5jdGlvbnMKCiAg
ICAgICAgKiBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuY3BwOgogICAgICAgIChX
ZWJDb3JlOjpBY2Nlc3NpYmlsaXR5T2JqZWN0Ojp2aXNpYmxlUG9zaXRpb25SYW5nZUZvclJhbmdl
KToKICAgICAgICBNb3ZlZCBzb21lIEdUSyBzcGVjaWZpYyBjb2RlIGZyb20gYSBpZmRlZi1lbmRp
ZiByZWdpb24gdG8KICAgICAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0QXRrLmNwcAogICAgICAgICog
YWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0Lmg6CiAgICAgICAgKiBhY2Nlc3NpYmls
aXR5L2d0ay9BY2Nlc3NpYmlsaXR5T2JqZWN0QXRrLmNwcDoKICAgICAgICAoV2ViQ29yZTo6QWNj
ZXNzaWJpbGl0eU9iamVjdDo6Z2V0TGVuZ3RoRm9yVGV4dFJhbmdlKTogTmV3LgogICAgICAgICog
YWNjZXNzaWJpbGl0eS9ndGsvQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJBdGsuY3BwOgogICAg
ICAgICh3ZWJraXRfYWNjZXNzaWJsZV90ZXh0X3JlbW92ZV9zZWxlY3Rpb24pOiBJbXBsZW1lbnRl
ZCBmb2xsb3dpbmcKICAgICAgICB0aGUgbGVhZCBvZiBHQUlMJ3MgaW1wbGVtZW50YXRpb24gb2Yg
dGhlIEF0a1RleHQgaW50ZXJmYWNlLgogICAgICAgICh3ZWJraXRfYWNjZXNzaWJsZV90ZXh0X3Nl
dF9zZWxlY3Rpb24pOiBJbXBsZW1lbnRlZCBmb2xsb3dpbmcKICAgICAgICB0aGUgbGVhZCBvZiBH
QUlMJ3MgaW1wbGVtZW50YXRpb24gb2YgdGhlIEF0a1RleHQgaW50ZXJmYWNlLgogICAgICAgICh3
ZWJraXRfYWNjZXNzaWJsZV90ZXh0X3NldF9jYXJldF9vZmZzZXQpOiBDaGFuZ2VkIHRvIGRpcmVj
dGx5IHVzZQogICAgICAgIHZpc2libGVQb3NpdGlvblJhbmdlRm9yUmFuZ2Ugbm93IHRoYXQgdGhl
cmUncyBubyBsb25nZXIgYSBwcm9ibGVtCiAgICAgICAgd2l0aCB0aGF0LCBhcyBpdCB3YXMgaW4g
dGhlIHBhc3QgKG9ubHkgd29ya2VkIGZvciB0ZXh0IGNvbnRyb2xzKS4KCiAgICAgICAgTmV3IHRl
c3RzIHRvIGNoZWNrIGdldHRpbmcsIHNldHRpbmcgYW5kIHJlbW92aW5nIHRleHQgc2VsZWN0aW9u
cwoKICAgICAgICAqIHRlc3RzL3Rlc3RhdGsuYzoKICAgICAgICAodGVzdFdla2l0QXRrVGV4dFNl
bGVjdGlvbnMpOiBOZXcgdW5pdCB0ZXN0cyB0byBjaGVjayBhbGwgdGhlIHRleHQKICAgICAgICBz
ZWxlY3Rpb24gcmVsYXRlZCBmdW5jdGlvbnMgYWx0b2dldGhlciB0aHJvdWdoIGEgc2luZ2xlIHRl
c3QKICAgICAgICBmdW5jdGlvbi4KICAgICAgICAobWFpbik6CgogICAgICAgIE1ha2Ugc3VyZSB0
aGF0IGNvZGUgZGVwZW5kYW50IG9uIGdldHRpbmcgaW5mb3JtYXRpb24gZnJvbSB0aGUKICAgICAg
ICBjbGlwYm9hcmQgZ2V0cyBleGVjdXRlZCBvbmx5IHdoZW4gdGhlcmUncyBhIEdESyB3aW5kb3cg
YXNzb2NpYXRlZAogICAgICAgIHRvIHRoZSB3ZWJ2aWV3IHdpZGdldCwgYXMgdGhhdCdzIG5vdCB0
aGUgY2FzZSB3aGVuIGV4ZWN1dGluZyB0aGUKICAgICAgICB1bml0IHRlc3RzICh0aGUgd2VkYnZp
ZXcgaXMgbm90IGluc2lkZSBvZiBhbnkgdG9wbGV2ZWwgd2luZG93KSBhbmQKICAgICAgICB3aWxs
IG1ha2UgdGhlIHRlc3RzIGNyYXNoIGlmIG5vdCB0YWtlbiBpbnRvIGFjY291bnQuCgogICAgICAg
ICogV2ViQ29yZVN1cHBvcnQvRWRpdG9yQ2xpZW50R3RrLmNwcDoKICAgICAgICAoV2ViS2l0OjpF
ZGl0b3JDbGllbnQ6OnJlc3BvbmRUb0NoYW5nZWRTZWxlY3Rpb24pOgotLS0KIFdlYkNvcmUvQ2hh
bmdlTG9nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAyNSArKysrCiBXZWJD
b3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdC5jcHAgICAgICB8ICAgMTcgKy0t
LQogV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuaCAgICAgICAgfCAg
ICAyICsKIC4uLi9hY2Nlc3NpYmlsaXR5L2d0ay9BY2Nlc3NpYmlsaXR5T2JqZWN0QXRrLmNwcCAg
IHwgICAyNSArKysrCiAuLi4vZ3RrL0FjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyQXRrLmNwcCAg
ICAgICAgICB8ICAgNDkgKysrKysrLS0tCiBXZWJLaXQvZ3RrL0NoYW5nZUxvZyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB8ICAgMjQgKysrKwogV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9y
dC9FZGl0b3JDbGllbnRHdGsuY3BwICAgICAgfCAgIDM5ICsrKystLQogV2ViS2l0L2d0ay90ZXN0
cy90ZXN0YXRrLmMgICAgICAgICAgICAgICAgICAgICAgICAgfCAgMTIyICsrKysrKysrKysrKysr
KysrKystCiA4IGZpbGVzIGNoYW5nZWQsIDI1NyBpbnNlcnRpb25zKCspLCA0NiBkZWxldGlvbnMo
LSkKCmRpZmYgLS1naXQgYS9XZWJDb3JlL0NoYW5nZUxvZyBiL1dlYkNvcmUvQ2hhbmdlTG9nCmlu
ZGV4IDNjMjFlMDEuLmY0Nzc0NjcgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBi
L1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0yLDYgKzIsMzEgQEAKIAogICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KIAorICAgICAgICBbR1RLXSBBVHMgc2hvdWxkIGJlIGFibGUgdG8g
c2VsZWN0L3Vuc2VsZWN0IHRleHQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTI1NjczCisKKyAgICAgICAgSW1wbGVtZW50IEF0a1RleHQncyBzZXRTZWxl
Y3Rpb24gYW5kIHJlbW92ZVNlbGVjdGlvbiBmdW5jdGlvbnMKKworICAgICAgICAqIGFjY2Vzc2li
aWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3Np
YmlsaXR5T2JqZWN0Ojp2aXNpYmxlUG9zaXRpb25SYW5nZUZvclJhbmdlKToKKyAgICAgICAgTW92
ZWQgc29tZSBHVEsgc3BlY2lmaWMgY29kZSBmcm9tIGEgaWZkZWYtZW5kaWYgcmVnaW9uIHRvCisg
ICAgICAgIEFjY2Vzc2liaWxpdHlPYmplY3RBdGsuY3BwCisgICAgICAgICogYWNjZXNzaWJpbGl0
eS9BY2Nlc3NpYmlsaXR5T2JqZWN0Lmg6CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9ndGsvQWNj
ZXNzaWJpbGl0eU9iamVjdEF0ay5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5
T2JqZWN0OjpnZXRMZW5ndGhGb3JUZXh0UmFuZ2UpOiBOZXcuCisgICAgICAgICogYWNjZXNzaWJp
bGl0eS9ndGsvQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJBdGsuY3BwOgorICAgICAgICAod2Vi
a2l0X2FjY2Vzc2libGVfdGV4dF9yZW1vdmVfc2VsZWN0aW9uKTogSW1wbGVtZW50ZWQgZm9sbG93
aW5nCisgICAgICAgIHRoZSBsZWFkIG9mIEdBSUwncyBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgQXRr
VGV4dCBpbnRlcmZhY2UuCisgICAgICAgICh3ZWJraXRfYWNjZXNzaWJsZV90ZXh0X3NldF9zZWxl
Y3Rpb24pOiBJbXBsZW1lbnRlZCBmb2xsb3dpbmcKKyAgICAgICAgdGhlIGxlYWQgb2YgR0FJTCdz
IGltcGxlbWVudGF0aW9uIG9mIHRoZSBBdGtUZXh0IGludGVyZmFjZS4KKyAgICAgICAgKHdlYmtp
dF9hY2Nlc3NpYmxlX3RleHRfc2V0X2NhcmV0X29mZnNldCk6IENoYW5nZWQgdG8gZGlyZWN0bHkg
dXNlCisgICAgICAgIHZpc2libGVQb3NpdGlvblJhbmdlRm9yUmFuZ2Ugbm93IHRoYXQgdGhlcmUn
cyBubyBsb25nZXIgYSBwcm9ibGVtCisgICAgICAgIHdpdGggdGhhdCwgYXMgaXQgd2FzIGluIHRo
ZSBwYXN0IChvbmx5IHdvcmtlZCBmb3IgdGV4dCBjb250cm9scykuCisKKzIwMTAtMDktMTAgIE1h
cmlvIFNhbmNoZXogUHJhZGEgIDxtc2FuY2hlekBpZ2FsaWEuY29tPgorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCiAgICAgICAgIFtHdGtdIGdldF9uX3NlbGVjdGlvbnMg
YW5kIGdldF9zZWxlY3Rpb24gZmFpbCB3aGVuIHNlbGVjdGluZyB0ZXh0IGFjcm9zcyBvYmplY3Qg
Ym91bmRhcmllcwogICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MjY5OTEKIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxp
dHlPYmplY3QuY3BwIGIvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3Qu
Y3BwCmluZGV4IGE2YmIwMzMuLjNkZGNkYzUgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYWNjZXNzaWJp
bGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmNwcAorKysgYi9XZWJDb3JlL2FjY2Vzc2liaWxpdHkv
QWNjZXNzaWJpbGl0eU9iamVjdC5jcHAKQEAgLTM3MywyMiArMzczLDcgQEAgVmlzaWJsZVBvc2l0
aW9uUmFuZ2UgQWNjZXNzaWJpbGl0eU9iamVjdDo6c3R5bGVSYW5nZUZvclBvc2l0aW9uKGNvbnN0
IFZpc2libGVQb3MKIC8vIE5PVEU6IENvbnNpZGVyIHByb3ZpZGluZyB0aGlzIHV0aWxpdHkgbWV0
aG9kIGFzIEFYIEFQSQogVmlzaWJsZVBvc2l0aW9uUmFuZ2UgQWNjZXNzaWJpbGl0eU9iamVjdDo6
dmlzaWJsZVBvc2l0aW9uUmFuZ2VGb3JSYW5nZShjb25zdCBQbGFpblRleHRSYW5nZSYgcmFuZ2Up
IGNvbnN0CiB7Ci0gICAgdW5zaWduZWQgdGV4dExlbmd0aCA9IHRleHQoKS5sZW5ndGgoKTsKLSNp
ZiBQTEFURk9STShHVEspCi0gICAgLy8gR3RrIEFUcyBuZWVkIHRoaXMgZm9yIGFsbCB0ZXh0IG9i
amVjdHM7IG5vdCBqdXN0IHRleHQgY29udHJvbHMuCi0gICAgaWYgKCF0ZXh0TGVuZ3RoKSB7Ci0g
ICAgICAgIE5vZGUqIG5vZGUgPSB0aGlzLT5ub2RlKCk7Ci0gICAgICAgIFJlbmRlck9iamVjdCog
cmVuZGVyZXIgPSBub2RlID8gbm9kZS0+cmVuZGVyZXIoKSA6IDA7Ci0gICAgICAgIGlmIChyZW5k
ZXJlciAmJiByZW5kZXJlci0+aXNUZXh0KCkpIHsKLSAgICAgICAgICAgIFJlbmRlclRleHQqIHJl
bmRlclRleHQgPSB0b1JlbmRlclRleHQocmVuZGVyZXIpOwotICAgICAgICAgICAgdGV4dExlbmd0
aCA9IHJlbmRlclRleHQgPyByZW5kZXJUZXh0LT50ZXh0TGVuZ3RoKCkgOiAwOwotICAgICAgICB9
Ci0gICAgICAgIC8vIEdldCB0aGUgdGV4dCBsZW5ndGggZnJvbSB0aGUgZWxlbWVudHMgdW5kZXIg
dGhlCi0gICAgICAgIC8vIGFjY2Vzc2liaWxpdHkgb2JqZWN0IGlmIHRoZSB2YWx1ZSBpcyBzdGls
bCB6ZXJvLgotICAgICAgICBpZiAoIXRleHRMZW5ndGggJiYgYWxsb3dzVGV4dFJhbmdlcygpKQot
ICAgICAgICAgICAgdGV4dExlbmd0aCA9IHRleHRVbmRlckVsZW1lbnQoKS5sZW5ndGgoKTsKLSAg
ICB9Ci0jZW5kaWYKKyAgICB1bnNpZ25lZCB0ZXh0TGVuZ3RoID0gZ2V0TGVuZ3RoRm9yVGV4dFJh
bmdlKCk7CiAgICAgaWYgKHJhbmdlLnN0YXJ0ICsgcmFuZ2UubGVuZ3RoID4gdGV4dExlbmd0aCkK
ICAgICAgICAgcmV0dXJuIFZpc2libGVQb3NpdGlvblJhbmdlKCk7CiAKZGlmZiAtLWdpdCBhL1dl
YkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmggYi9XZWJDb3JlL2FjY2Vz
c2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdC5oCmluZGV4IDBlNDRkMWIuLmU4ZjZkMWIgMTAw
NjQ0Ci0tLSBhL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmgKKysr
IGIvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuaApAQCAtNTc0LDgg
KzU3NCwxMCBAQCBwcm90ZWN0ZWQ6CiAgICAgCiAjaWYgUExBVEZPUk0oR1RLKQogICAgIGJvb2wg
YWxsb3dzVGV4dFJhbmdlcygpIGNvbnN0OworICAgIHVuc2lnbmVkIGdldExlbmd0aEZvclRleHRS
YW5nZSgpIGNvbnN0OwogI2Vsc2UKICAgICBib29sIGFsbG93c1RleHRSYW5nZXMoKSBjb25zdCB7
IHJldHVybiBpc1RleHRDb250cm9sKCk7IH0KKyAgICB1bnNpZ25lZCBnZXRMZW5ndGhGb3JUZXh0
UmFuZ2UoKSBjb25zdCB7IHJldHVybiB0ZXh0KCkubGVuZ3RoKCk7IH0KICNlbmRpZgogCiAjaWYg
UExBVEZPUk0oTUFDKQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2d0ay9BY2Nl
c3NpYmlsaXR5T2JqZWN0QXRrLmNwcCBiL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9ndGsvQWNjZXNz
aWJpbGl0eU9iamVjdEF0ay5jcHAKaW5kZXggYjIyYTUxZS4uN2Y5ZmQxYSAxMDA2NDQKLS0tIGEv
V2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2d0ay9BY2Nlc3NpYmlsaXR5T2JqZWN0QXRrLmNwcAorKysg
Yi9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvZ3RrL0FjY2Vzc2liaWxpdHlPYmplY3RBdGsuY3BwCkBA
IC0yMCw2ICsyMCw4IEBACiAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJBY2Nlc3Np
YmlsaXR5T2JqZWN0LmgiCisjaW5jbHVkZSAiUmVuZGVyT2JqZWN0LmgiCisjaW5jbHVkZSAiUmVu
ZGVyVGV4dC5oIgogCiAjaW5jbHVkZSA8Z2xpYi1vYmplY3QuaD4KIApAQCAtMTAyLDYgKzEwNCwy
OSBAQCBib29sIEFjY2Vzc2liaWxpdHlPYmplY3Q6OmFsbG93c1RleHRSYW5nZXMoKSBjb25zdAog
ICAgIHJldHVybiBpc1RleHRDb250cm9sKCkgfHwgaXNXZWJBcmVhKCkgfHwgaXNHcm91cCgpIHx8
IGlzTGluaygpIHx8IGlzSGVhZGluZygpOwogfQogCit1bnNpZ25lZCBBY2Nlc3NpYmlsaXR5T2Jq
ZWN0OjpnZXRMZW5ndGhGb3JUZXh0UmFuZ2UoKSBjb25zdAoreworICAgIHVuc2lnbmVkIHRleHRM
ZW5ndGggPSB0ZXh0KCkubGVuZ3RoKCk7CisKKyAgICBpZiAodGV4dExlbmd0aCkKKyAgICAgICAg
cmV0dXJuIHRleHRMZW5ndGg7CisKKyAgICAvLyBHdGsgQVRzIG5lZWQgdGhpcyBmb3IgYWxsIHRl
eHQgb2JqZWN0czsgbm90IGp1c3QgdGV4dCBjb250cm9scy4KKyAgICBOb2RlKiBub2RlID0gdGhp
cy0+bm9kZSgpOworICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSBub2RlID8gbm9kZS0+cmVu
ZGVyZXIoKSA6IDA7CisgICAgaWYgKHJlbmRlcmVyICYmIHJlbmRlcmVyLT5pc1RleHQoKSkgewor
ICAgICAgICBSZW5kZXJUZXh0KiByZW5kZXJUZXh0ID0gdG9SZW5kZXJUZXh0KHJlbmRlcmVyKTsK
KyAgICAgICAgdGV4dExlbmd0aCA9IHJlbmRlclRleHQgPyByZW5kZXJUZXh0LT50ZXh0TGVuZ3Ro
KCkgOiAwOworICAgIH0KKworICAgIC8vIEdldCB0aGUgdGV4dCBsZW5ndGggZnJvbSB0aGUgZWxl
bWVudHMgdW5kZXIgdGhlCisgICAgLy8gYWNjZXNzaWJpbGl0eSBvYmplY3QgaWYgdGhlIHZhbHVl
IGlzIHN0aWxsIHplcm8uCisgICAgaWYgKCF0ZXh0TGVuZ3RoICYmIGFsbG93c1RleHRSYW5nZXMo
KSkKKyAgICAgICAgdGV4dExlbmd0aCA9IHRleHRVbmRlckVsZW1lbnQoKS5sZW5ndGgoKTsKKwor
ICAgIHJldHVybiB0ZXh0TGVuZ3RoOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNl
bmRpZiAvLyBIQVZFKEFDQ0VTU0lCSUxJVFkpCmRpZmYgLS1naXQgYS9XZWJDb3JlL2FjY2Vzc2li
aWxpdHkvZ3RrL0FjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyQXRrLmNwcCBiL1dlYkNvcmUvYWNj
ZXNzaWJpbGl0eS9ndGsvQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJBdGsuY3BwCmluZGV4IGU4
MTgxMTMuLjk4MGUxNmUgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9ndGsvQWNj
ZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJBdGsuY3BwCisrKyBiL1dlYkNvcmUvYWNjZXNzaWJpbGl0
eS9ndGsvQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJBdGsuY3BwCkBAIC0xNDU5LDMyICsxNDU5
LDUxIEBAIHN0YXRpYyBnYm9vbGVhbiB3ZWJraXRfYWNjZXNzaWJsZV90ZXh0X2FkZF9zZWxlY3Rp
b24oQXRrVGV4dCogdGV4dCwgZ2ludCBzdGFydF9vCiAgICAgcmV0dXJuIEZBTFNFOwogfQogCi1z
dGF0aWMgZ2Jvb2xlYW4gd2Via2l0X2FjY2Vzc2libGVfdGV4dF9yZW1vdmVfc2VsZWN0aW9uKEF0
a1RleHQqIHRleHQsIGdpbnQgc2VsZWN0aW9uX251bSkKK3N0YXRpYyBnYm9vbGVhbiB3ZWJraXRf
YWNjZXNzaWJsZV90ZXh0X3NldF9zZWxlY3Rpb24oQXRrVGV4dCogdGV4dCwgZ2ludCBzZWxlY3Rp
b25OdW0sIGdpbnQgc3RhcnRPZmZzZXQsIGdpbnQgZW5kT2Zmc2V0KQogewotICAgIG5vdEltcGxl
bWVudGVkKCk7Ci0gICAgcmV0dXJuIEZBTFNFOworICAgIC8vIFdlYkNvcmUgZG9lcyBub3Qgc3Vw
cG9ydCBtdWx0aXBsZSBzZWxlY3Rpb24sIHNvIGFueXRoaW5nIGJ1dCAwIGRvZXMgbm90IG1ha2Ug
c2Vuc2UgZm9yIG5vdy4KKyAgICBpZiAoc2VsZWN0aW9uTnVtKQorICAgICAgICByZXR1cm4gRkFM
U0U7CisKKyAgICAvLyBDb25zaWRlciAtMSBhbmQgb3V0LW9mLWJvdW5kIHZhbHVlcyBhbmQgY29y
cmVjdCB0aGVtIHRvIGxlbmd0aAorICAgIGdpbnQgdGV4dENvdW50ID0gd2Via2l0X2FjY2Vzc2li
bGVfdGV4dF9nZXRfY2hhcmFjdGVyX2NvdW50KHRleHQpOworICAgIGlmIChzdGFydE9mZnNldCA8
IDAgfHwgc3RhcnRPZmZzZXQgPiB0ZXh0Q291bnQpCisgICAgICAgIHN0YXJ0T2Zmc2V0ID0gdGV4
dENvdW50OworICAgIGlmIChlbmRPZmZzZXQgPCAwIHx8IGVuZE9mZnNldCA+IHRleHRDb3VudCkK
KyAgICAgICAgZW5kT2Zmc2V0ID0gdGV4dENvdW50OworCisgICAgQWNjZXNzaWJpbGl0eU9iamVj
dCogY29yZU9iamVjdCA9IGNvcmUodGV4dCk7CisgICAgUGxhaW5UZXh0UmFuZ2UgdGV4dFJhbmdl
KHN0YXJ0T2Zmc2V0LCBlbmRPZmZzZXQgLSBzdGFydE9mZnNldCk7CisgICAgVmlzaWJsZVBvc2l0
aW9uUmFuZ2UgcmFuZ2UgPSBjb3JlT2JqZWN0LT52aXNpYmxlUG9zaXRpb25SYW5nZUZvclJhbmdl
KHRleHRSYW5nZSk7CisgICAgY29yZU9iamVjdC0+c2V0U2VsZWN0ZWRWaXNpYmxlUG9zaXRpb25S
YW5nZShyYW5nZSk7CisKKyAgICByZXR1cm4gVFJVRTsKIH0KIAotc3RhdGljIGdib29sZWFuIHdl
YmtpdF9hY2Nlc3NpYmxlX3RleHRfc2V0X3NlbGVjdGlvbihBdGtUZXh0KiB0ZXh0LCBnaW50IHNl
bGVjdGlvbl9udW0sIGdpbnQgc3RhcnRfb2Zmc2V0LCBnaW50IGVuZF9vZmZzZXQpCitzdGF0aWMg
Z2Jvb2xlYW4gd2Via2l0X2FjY2Vzc2libGVfdGV4dF9yZW1vdmVfc2VsZWN0aW9uKEF0a1RleHQq
IHRleHQsIGdpbnQgc2VsZWN0aW9uTnVtKQogewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAg
cmV0dXJuIEZBTFNFOworICAgIC8vIFdlYkNvcmUgZG9lcyBub3Qgc3VwcG9ydCBtdWx0aXBsZSBz
ZWxlY3Rpb24sIHNvIGFueXRoaW5nIGJ1dCAwIGRvZXMgbm90IG1ha2Ugc2Vuc2UgZm9yIG5vdy4K
KyAgICBpZiAoc2VsZWN0aW9uTnVtKQorICAgICAgICByZXR1cm4gRkFMU0U7CisKKyAgICAvLyBE
byBub3RoaW5nIGlmIGN1cnJlbnQgc2VsZWN0aW9uIGRvZXNuJ3QgYmVsb25nIHRvIHRoZSBvYmpl
Y3QKKyAgICBpZiAoIXdlYmtpdF9hY2Nlc3NpYmxlX3RleHRfZ2V0X25fc2VsZWN0aW9ucyh0ZXh0
KSkKKyAgICAgICAgcmV0dXJuIEZBTFNFOworCisgICAgLy8gU2V0IGEgbmV3IDAtc2l6ZWQgc2Vs
ZWN0aW9uIHRvIHRoZSBjYXJldCBwb3NpdGlvbiwgaW4gb3JkZXIKKyAgICAvLyB0byBzaW11bGF0
ZSBzZWxlY3Rpb24gcmVtb3ZhbCAoR0FJTCBzdHlsZSkKKyAgICBnaW50IGNhcmV0T2Zmc2V0ID0g
d2Via2l0X2FjY2Vzc2libGVfdGV4dF9nZXRfY2FyZXRfb2Zmc2V0KHRleHQpOworICAgIHJldHVy
biB3ZWJraXRfYWNjZXNzaWJsZV90ZXh0X3NldF9zZWxlY3Rpb24odGV4dCwgc2VsZWN0aW9uTnVt
LCBjYXJldE9mZnNldCwgY2FyZXRPZmZzZXQpOwogfQogCiBzdGF0aWMgZ2Jvb2xlYW4gd2Via2l0
X2FjY2Vzc2libGVfdGV4dF9zZXRfY2FyZXRfb2Zmc2V0KEF0a1RleHQqIHRleHQsIGdpbnQgb2Zm
c2V0KQogewogICAgIEFjY2Vzc2liaWxpdHlPYmplY3QqIGNvcmVPYmplY3QgPSBjb3JlKHRleHQp
OwogCi0gICAgLy8gRklYTUU6IFdlIG5lZWQgdG8gcmVpbXBsZW1lbnQgdmlzaWJsZVBvc2l0aW9u
UmFuZ2VGb3JSYW5nZSBoZXJlCi0gICAgLy8gYmVjYXVzZSB0aGUgYWN0dWFsIGZ1bmN0aW9uIGNo
ZWNrcyB0aGUgb2Zmc2V0IGlzIHdpdGhpbiB0aGUKLSAgICAvLyBib3VuZGFyaWVzIG9mIHRleHQo
KS5sZW5ndGgoKSwgYnV0IHRleHQoKSBvbmx5IHdvcmtzIGZvciB0ZXh0Ci0gICAgLy8gY29udHJv
bHMuLi4KLSAgICBWaXNpYmxlUG9zaXRpb24gc3RhcnRQb3NpdGlvbiA9IGNvcmVPYmplY3QtPnZp
c2libGVQb3NpdGlvbkZvckluZGV4KG9mZnNldCk7Ci0gICAgc3RhcnRQb3NpdGlvbi5zZXRBZmZp
bml0eShET1dOU1RSRUFNKTsKLSAgICBWaXNpYmxlUG9zaXRpb24gZW5kUG9zaXRpb24gPSBjb3Jl
T2JqZWN0LT52aXNpYmxlUG9zaXRpb25Gb3JJbmRleChvZmZzZXQpOwotICAgIFZpc2libGVQb3Np
dGlvblJhbmdlIHJhbmdlID0gVmlzaWJsZVBvc2l0aW9uUmFuZ2Uoc3RhcnRQb3NpdGlvbiwgZW5k
UG9zaXRpb24pOwotCisgICAgUGxhaW5UZXh0UmFuZ2UgdGV4dFJhbmdlKG9mZnNldCwgMCk7Cisg
ICAgVmlzaWJsZVBvc2l0aW9uUmFuZ2UgcmFuZ2UgPSBjb3JlT2JqZWN0LT52aXNpYmxlUG9zaXRp
b25SYW5nZUZvclJhbmdlKHRleHRSYW5nZSk7CiAgICAgY29yZU9iamVjdC0+c2V0U2VsZWN0ZWRW
aXNpYmxlUG9zaXRpb25SYW5nZShyYW5nZSk7CisKICAgICByZXR1cm4gVFJVRTsKIH0KIApkaWZm
IC0tZ2l0IGEvV2ViS2l0L2d0ay9DaGFuZ2VMb2cgYi9XZWJLaXQvZ3RrL0NoYW5nZUxvZwppbmRl
eCBlZDA4NGY4Li42NzhlYWExIDEwMDY0NAotLS0gYS9XZWJLaXQvZ3RrL0NoYW5nZUxvZworKysg
Yi9XZWJLaXQvZ3RrL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI3IEBACisyMDEwLTA5LTEwICBNYXJp
byBTYW5jaGV6IFByYWRhICA8bXNhbmNoZXpAaWdhbGlhLmNvbT4KKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBbR1RLXSBQcm92aWRlIHVuaXQgdGVzdHMg
Zm9yIEF0a1RleHQncyB0ZXh0IHNlbGVjdGlvbiBmdW5jdGlvbnMKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQzOTE5CisKKyAgICAgICAgTmV3IHRlc3Rz
IHRvIGNoZWNrIGdldHRpbmcsIHNldHRpbmcgYW5kIHJlbW92aW5nIHRleHQgc2VsZWN0aW9ucwor
CisgICAgICAgICogdGVzdHMvdGVzdGF0ay5jOgorICAgICAgICAodGVzdFdla2l0QXRrVGV4dFNl
bGVjdGlvbnMpOiBOZXcgdW5pdCB0ZXN0cyB0byBjaGVjayBhbGwgdGhlIHRleHQKKyAgICAgICAg
c2VsZWN0aW9uIHJlbGF0ZWQgZnVuY3Rpb25zIGFsdG9nZXRoZXIgdGhyb3VnaCBhIHNpbmdsZSB0
ZXN0CisgICAgICAgIGZ1bmN0aW9uLgorICAgICAgICAobWFpbik6CisKKyAgICAgICAgTWFrZSBz
dXJlIHRoYXQgY29kZSBkZXBlbmRhbnQgb24gZ2V0dGluZyBpbmZvcm1hdGlvbiBmcm9tIHRoZQor
ICAgICAgICBjbGlwYm9hcmQgZ2V0cyBleGVjdXRlZCBvbmx5IHdoZW4gdGhlcmUncyBhIEdESyB3
aW5kb3cgYXNzb2NpYXRlZAorICAgICAgICB0byB0aGUgd2VidmlldyB3aWRnZXQsIGFzIHRoYXQn
cyBub3QgdGhlIGNhc2Ugd2hlbiBleGVjdXRpbmcgdGhlCisgICAgICAgIHVuaXQgdGVzdHMgKHRo
ZSB3ZWRidmlldyBpcyBub3QgaW5zaWRlIG9mIGFueSB0b3BsZXZlbCB3aW5kb3cpIGFuZAorICAg
ICAgICB3aWxsIG1ha2UgdGhlIHRlc3RzIGNyYXNoIGlmIG5vdCB0YWtlbiBpbnRvIGFjY291bnQu
CisKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9FZGl0b3JDbGllbnRHdGsuY3BwOgorICAgICAg
ICAoV2ViS2l0OjpFZGl0b3JDbGllbnQ6OnJlc3BvbmRUb0NoYW5nZWRTZWxlY3Rpb24pOgorCiAy
MDEwLTA5LTEwICBYYW4gTG9wZXogIDx4bG9wZXpAaWdhbGlhLmNvbT4KIAogICAgICAgICBSZXZp
ZXdlZCBieSBNYXJ0aW4gUm9iaW5zb24uCmRpZmYgLS1naXQgYS9XZWJLaXQvZ3RrL1dlYkNvcmVT
dXBwb3J0L0VkaXRvckNsaWVudEd0ay5jcHAgYi9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0Vk
aXRvckNsaWVudEd0ay5jcHAKaW5kZXggOGEwMTliNC4uYjE5NzNiYyAxMDA2NDQKLS0tIGEvV2Vi
S2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9FZGl0b3JDbGllbnRHdGsuY3BwCisrKyBiL1dlYktpdC9n
dGsvV2ViQ29yZVN1cHBvcnQvRWRpdG9yQ2xpZW50R3RrLmNwcApAQCAtMzQxLDYgKzM0MSwzMSBA
QCBzdGF0aWMgdm9pZCBjb2xsYXBzZVNlbGVjdGlvbihHdGtDbGlwYm9hcmQqIGNsaXBib2FyZCwg
V2ViS2l0V2ViVmlldyogd2ViVmlldykKICAgICBmcmFtZS0+c2VsZWN0aW9uKCktPnNldEJhc2Uo
ZnJhbWUtPnNlbGVjdGlvbigpLT5leHRlbnQoKSwgZnJhbWUtPnNlbGVjdGlvbigpLT5hZmZpbml0
eSgpKTsKIH0KIAorI2lmIFBMQVRGT1JNKFgxMSkKK3N0YXRpYyB2b2lkIHNldFNlbGVjdGlvblBy
aW1hcnlDbGlwYm9hcmRJZk5lZWRlZChXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3KQoreworICAgIGlm
ICghZ3RrX3dpZGdldF9oYXNfc2NyZWVuKEdUS19XSURHRVQod2ViVmlldykpKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBHdGtDbGlwYm9hcmQqIGNsaXBib2FyZCA9IGd0a193aWRnZXRfZ2V0X2Ns
aXBib2FyZChHVEtfV0lER0VUKHdlYlZpZXcpLCBHREtfU0VMRUNUSU9OX1BSSU1BUlkpOworICAg
IERhdGFPYmplY3RHdGsqIGRhdGFPYmplY3QgPSBEYXRhT2JqZWN0R3RrOjpmb3JDbGlwYm9hcmQo
Y2xpcGJvYXJkKTsKKyAgICBXZWJDb3JlOjpQYWdlKiBjb3JlUGFnZSA9IGNvcmUod2ViVmlldyk7
CisgICAgRnJhbWUqIHRhcmdldEZyYW1lID0gY29yZVBhZ2UtPmZvY3VzQ29udHJvbGxlcigpLT5m
b2N1c2VkT3JNYWluRnJhbWUoKTsKKworICAgIGlmICghdGFyZ2V0RnJhbWUtPnNlbGVjdGlvbigp
LT5pc1JhbmdlKCkpCisgICAgICAgIHJldHVybjsKKworICAgIGRhdGFPYmplY3QtPmNsZWFyKCk7
CisgICAgZGF0YU9iamVjdC0+c2V0UmFuZ2UodGFyZ2V0RnJhbWUtPnNlbGVjdGlvbigpLT50b05v
cm1hbGl6ZWRSYW5nZSgpKTsKKworICAgIHZpZXdTZXR0aW5nQ2xpcGJvYXJkID0gd2ViVmlldzsK
KyAgICBHQ2xvc3VyZSogY2FsbGJhY2sgPSBnX2NjbG9zdXJlX25ld19vYmplY3QoR19DQUxMQkFD
Syhjb2xsYXBzZVNlbGVjdGlvbiksIEdfT0JKRUNUKHdlYlZpZXcpKTsKKyAgICBnX2Nsb3N1cmVf
c2V0X21hcnNoYWwoY2FsbGJhY2ssIGdfY2Nsb3N1cmVfbWFyc2hhbF9WT0lEX19WT0lEKTsKKyAg
ICBwYXN0ZWJvYXJkSGVscGVySW5zdGFuY2UoKS0+d3JpdGVDbGlwYm9hcmRDb250ZW50cyhjbGlw
Ym9hcmQsIGNhbGxiYWNrKTsKKyAgICB2aWV3U2V0dGluZ0NsaXBib2FyZCA9IDA7Cit9CisjZW5k
aWYKKwogdm9pZCBFZGl0b3JDbGllbnQ6OnJlc3BvbmRUb0NoYW5nZWRTZWxlY3Rpb24oKQogewog
ICAgIFdlYktpdFdlYlZpZXdQcml2YXRlKiBwcml2ID0gbV93ZWJWaWV3LT5wcml2OwpAQCAtMzU0
LDE5ICszNzksNyBAQCB2b2lkIEVkaXRvckNsaWVudDo6cmVzcG9uZFRvQ2hhbmdlZFNlbGVjdGlv
bigpCiAgICAgICAgIHJldHVybjsKIAogI2lmIFBMQVRGT1JNKFgxMSkKLSAgICBHdGtDbGlwYm9h
cmQqIGNsaXBib2FyZCA9IGd0a193aWRnZXRfZ2V0X2NsaXBib2FyZChHVEtfV0lER0VUKG1fd2Vi
VmlldyksIEdES19TRUxFQ1RJT05fUFJJTUFSWSk7Ci0gICAgRGF0YU9iamVjdEd0ayogZGF0YU9i
amVjdCA9IERhdGFPYmplY3RHdGs6OmZvckNsaXBib2FyZChjbGlwYm9hcmQpOwotCi0gICAgaWYg
KHRhcmdldEZyYW1lLT5zZWxlY3Rpb24oKS0+aXNSYW5nZSgpKSB7Ci0gICAgICAgIGRhdGFPYmpl
Y3QtPmNsZWFyKCk7Ci0gICAgICAgIGRhdGFPYmplY3QtPnNldFJhbmdlKHRhcmdldEZyYW1lLT5z
ZWxlY3Rpb24oKS0+dG9Ob3JtYWxpemVkUmFuZ2UoKSk7Ci0KLSAgICAgICAgdmlld1NldHRpbmdD
bGlwYm9hcmQgPSBtX3dlYlZpZXc7Ci0gICAgICAgIEdDbG9zdXJlKiBjYWxsYmFjayA9IGdfY2Ns
b3N1cmVfbmV3X29iamVjdChHX0NBTExCQUNLKGNvbGxhcHNlU2VsZWN0aW9uKSwgR19PQkpFQ1Qo
bV93ZWJWaWV3KSk7Ci0gICAgICAgIGdfY2xvc3VyZV9zZXRfbWFyc2hhbChjYWxsYmFjaywgZ19j
Y2xvc3VyZV9tYXJzaGFsX1ZPSURfX1ZPSUQpOwotICAgICAgICBwYXN0ZWJvYXJkSGVscGVySW5z
dGFuY2UoKS0+d3JpdGVDbGlwYm9hcmRDb250ZW50cyhjbGlwYm9hcmQsIGNhbGxiYWNrKTsKLSAg
ICAgICAgdmlld1NldHRpbmdDbGlwYm9hcmQgPSAwOwotICAgIH0KKyAgICBzZXRTZWxlY3Rpb25Q
cmltYXJ5Q2xpcGJvYXJkSWZOZWVkZWQobV93ZWJWaWV3KTsKICNlbmRpZgogCiAgICAgaWYgKCF0
YXJnZXRGcmFtZS0+ZWRpdG9yKCktPmhhc0NvbXBvc2l0aW9uKCkpCmRpZmYgLS1naXQgYS9XZWJL
aXQvZ3RrL3Rlc3RzL3Rlc3RhdGsuYyBiL1dlYktpdC9ndGsvdGVzdHMvdGVzdGF0ay5jCmluZGV4
IDk5MzBiYzIuLjAzN2ExMWIgMTAwNjQ0Ci0tLSBhL1dlYktpdC9ndGsvdGVzdHMvdGVzdGF0ay5j
CisrKyBiL1dlYktpdC9ndGsvdGVzdHMvdGVzdGF0ay5jCkBAIC00NCwxMCArNDQsMTIgQEAgc3Rh
dGljIGNvbnN0IGNoYXIqIGNvbnRlbnRzSW5UYWJsZSA9ICI8aHRtbD48Ym9keT48dGFibGU+PHRy
Pjx0ZD5mb288L3RkPjx0ZD5iYXIKIAogc3RhdGljIGNvbnN0IGNoYXIqIGNvbnRlbnRzSW5UYWJs
ZVdpdGhIZWFkZXJzID0gIjxodG1sPjxib2R5Pjx0YWJsZT48dHI+PHRoPmZvbzwvdGg+PHRoPmJh
cjwvdGg+PHRoIGNvbHNwYW49JzInPmJhejwvdGg+PC90cj48dHI+PHRoPnF1eDwvdGg+PHRkPjE8
L3RkPjx0ZD4yPC90ZD48dGQ+MzwvdGQ+PC90cj48dHI+PHRoIHJvd3NwYW49JzInPnF1dXg8L3Ro
Pjx0ZD40PC90ZD48dGQ+NTwvdGQ+PHRkPjY8L3RkPjwvdHI+PHRyPjx0ZD42PC90ZD48dGQ+Nzwv
dGQ+PHRkPjg8L3RkPjwvdHI+PHRyPjx0aD5jb3JnZTwvdGg+PHRkPjk8L3RkPjx0ZD4xMDwvdGQ+
PHRkPjExPC90ZD48L3RyPjwvdGFibGU+PHRhYmxlPjx0cj48dGQ+MTwvdGQ+PHRkPjI8L3RkPjwv
dHI+PHRyPjx0ZD4zPC90ZD48dGQ+NDwvdGQ+PC90cj48L3RhYmxlPjwvYm9keT48L2h0bWw+IjsK
IAotc3RhdGljIGNvbnN0IGNoYXIqIHRleHRXaXRoQXR0cmlidXRlcyA9ICI8aHRtbD48aGVhZD48
c3R5bGU+LnN0MSB7Zm9udC1mYW1pbHk6IG1vbm9zcGFjZTsgY29sb3I6cmdiKDEyMCwxMjEsMTIy
KTt9IC5zdDIge3RleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmU7IGJhY2tncm91bmQtY29sb3I6cmdi
KDgwLDgxLDgyKTt9PC9zdHlsZT48L2hlYWQ+PGJvZHk+PHAgc3R5bGU9XCJmb250LXNpemU6MTQ7
IHRleHQtYWxpZ246cmlnaHQ7XCI+VGhpcyBpcyB0aGUgPGk+Zmlyc3Q8L2k+PGI+IHNlbnRlbmNl
IG9mIHRoaXMgdGV4dC48L2I+PC9wPjxwIGNsYXNzPVwic3QxXCI+VGhpcyBzZW50ZW5jZSBzaG91
bGQgaGF2ZSBhbiBzdHlsZSBhcHBsaWVkIDxzcGFuIGNsYXNzPVwic3QyXCI+YW5kIHRoaXMgcGFy
dCBzaG91bGQgaGF2ZSBhbm90aGVyIG9uZTwvc3Bhbj4uPC9wPjxwPng8c3ViPjE8L3N1Yj48c3Vw
PjI8L3N1cD49eDxzdWI+Mjwvc3ViPjxzdXA+Mzwvc3VwPjwvcD48cCBzdHlsZT1cInRleHQtYWxp
Z246Y2VudGVyO1wiPlRoaXMgc2VudGVuY2UgaXMgdGhlIDxzdHJpa2U+bGFzdDwvc3RyaWtlPiBv
bmUuPC9wPjwvYm9keT48L2h0bWw+IjsKLQogc3RhdGljIGNvbnN0IGNoYXIqIGxpc3RzT2ZJdGVt
cyA9ICI8aHRtbD48Ym9keT48dWw+PGxpPnRleHQgb25seTwvbGk+PGxpPjxhIGhyZWY9J2Zvbyc+
bGluayBvbmx5PC9hPjwvbGk+PGxpPnRleHQgYW5kIGEgPGEgaHJlZj0nYmFyJz5saW5rPC9hPjwv
bGk+PC91bD48b2w+PGxpPnRleHQgb25seTwvbGk+PGxpPjxhIGhyZWY9J2Zvbyc+bGluayBvbmx5
PC9hPjwvbGk+PGxpPnRleHQgYW5kIGEgPGEgaHJlZj0nYmFyJz5saW5rPC9hPjwvbGk+PC9vbD48
L2JvZHk+PC9odG1sPiI7CiAKK3N0YXRpYyBjb25zdCBjaGFyKiB0ZXh0Rm9yU2VsZWN0aW9ucyA9
ICI8aHRtbD48Ym9keT48cD5BIHBhcmFncmFwaCB3aXRoIHBsYWluIHRleHQ8L3A+PHA+QSBwYXJh
Z3JhcGggd2l0aCA8YSBocmVmPSdodHRwOi8vd2Via2l0Lm9yZyc+YSBsaW5rPC9hPiBpbiB0aGUg
bWlkZGxlPC9wPjwvYm9keT48L2h0bWw+IjsKKworc3RhdGljIGNvbnN0IGNoYXIqIHRleHRXaXRo
QXR0cmlidXRlcyA9ICI8aHRtbD48aGVhZD48c3R5bGU+LnN0MSB7Zm9udC1mYW1pbHk6IG1vbm9z
cGFjZTsgY29sb3I6cmdiKDEyMCwxMjEsMTIyKTt9IC5zdDIge3RleHQtZGVjb3JhdGlvbjp1bmRl
cmxpbmU7IGJhY2tncm91bmQtY29sb3I6cmdiKDgwLDgxLDgyKTt9PC9zdHlsZT48L2hlYWQ+PGJv
ZHk+PHAgc3R5bGU9XCJmb250LXNpemU6MTQ7IHRleHQtYWxpZ246cmlnaHQ7XCI+VGhpcyBpcyB0
aGUgPGk+Zmlyc3Q8L2k+PGI+IHNlbnRlbmNlIG9mIHRoaXMgdGV4dC48L2I+PC9wPjxwIGNsYXNz
PVwic3QxXCI+VGhpcyBzZW50ZW5jZSBzaG91bGQgaGF2ZSBhbiBzdHlsZSBhcHBsaWVkIDxzcGFu
IGNsYXNzPVwic3QyXCI+YW5kIHRoaXMgcGFydCBzaG91bGQgaGF2ZSBhbm90aGVyIG9uZTwvc3Bh
bj4uPC9wPjxwPng8c3ViPjE8L3N1Yj48c3VwPjI8L3N1cD49eDxzdWI+Mjwvc3ViPjxzdXA+Mzwv
c3VwPjwvcD48cCBzdHlsZT1cInRleHQtYWxpZ246Y2VudGVyO1wiPlRoaXMgc2VudGVuY2UgaXMg
dGhlIDxzdHJpa2U+bGFzdDwvc3RyaWtlPiBvbmUuPC9wPjwvYm9keT48L2h0bWw+IjsKKwogc3Rh
dGljIGdib29sZWFuIGJhaWxfb3V0KEdNYWluTG9vcCogbG9vcCkKIHsKICAgICBpZiAoZ19tYWlu
X2xvb3BfaXNfcnVubmluZyhsb29wKSkKQEAgLTc0Miw2ICs3NDQsMTIxIEBAIHN0YXRpYyB2b2lk
IHRlc3RXZWJraXRBdGtUZXh0QXR0cmlidXRlcyh2b2lkKQogICAgIGF0a19hdHRyaWJ1dGVfc2V0
X2ZyZWUoc2V0Myk7CiB9CiAKK3N0YXRpYyB2b2lkIHRlc3RXZWtpdEF0a1RleHRTZWxlY3Rpb25z
KHZvaWQpCit7CisgICAgV2ViS2l0V2ViVmlldyogd2ViVmlldzsKKyAgICBBdGtPYmplY3QqIG9i
ajsKKyAgICBHTWFpbkxvb3AqIGxvb3A7CisgICAgZ2NoYXIqIHNlbGVjdGVkVGV4dDsKKyAgICBn
aW50IHN0YXJ0T2Zmc2V0OworICAgIGdpbnQgZW5kT2Zmc2V0OworICAgIGdib29sZWFuIHJlc3Vs
dDsKKworICAgIHdlYlZpZXcgPSBXRUJLSVRfV0VCX1ZJRVcod2Via2l0X3dlYl92aWV3X25ldygp
KTsKKyAgICBnX29iamVjdF9yZWZfc2luayh3ZWJWaWV3KTsKKyAgICBHdGtBbGxvY2F0aW9uIGFs
bG9jID0geyAwLCAwLCA4MDAsIDYwMCB9OworICAgIGd0a193aWRnZXRfc2l6ZV9hbGxvY2F0ZShH
VEtfV0lER0VUKHdlYlZpZXcpLCAmYWxsb2MpOworICAgIHdlYmtpdF93ZWJfdmlld19sb2FkX3N0
cmluZyh3ZWJWaWV3LCB0ZXh0Rm9yU2VsZWN0aW9ucywgTlVMTCwgTlVMTCwgTlVMTCk7CisgICAg
bG9vcCA9IGdfbWFpbl9sb29wX25ldyhOVUxMLCBUUlVFKTsKKworICAgIGdfdGltZW91dF9hZGQo
MTAwLCAoR1NvdXJjZUZ1bmMpYmFpbF9vdXQsIGxvb3ApOworICAgIGdfbWFpbl9sb29wX3J1bihs
b29wKTsKKworICAgIG9iaiA9IGd0a193aWRnZXRfZ2V0X2FjY2Vzc2libGUoR1RLX1dJREdFVCh3
ZWJWaWV3KSk7CisgICAgZ19hc3NlcnQob2JqKTsKKworICAgIEF0a1RleHQqIHBhcmFncmFwaDEg
PSBBVEtfVEVYVChhdGtfb2JqZWN0X3JlZl9hY2Nlc3NpYmxlX2NoaWxkKG9iaiwgMCkpOworICAg
IGdfYXNzZXJ0KEFUS19JU19URVhUKHBhcmFncmFwaDEpKTsKKyAgICBBdGtUZXh0KiBwYXJhZ3Jh
cGgyID0gQVRLX1RFWFQoYXRrX29iamVjdF9yZWZfYWNjZXNzaWJsZV9jaGlsZChvYmosIDEpKTsK
KyAgICBnX2Fzc2VydChBVEtfSVNfVEVYVChwYXJhZ3JhcGgyKSk7CisgICAgQXRrVGV4dCogbGlu
ayA9IEFUS19URVhUKGF0a19vYmplY3RfcmVmX2FjY2Vzc2libGVfY2hpbGQoQVRLX09CSkVDVChw
YXJhZ3JhcGgyKSwgMCkpOworICAgIGdfYXNzZXJ0KEFUS19JU19URVhUKGxpbmspKTsKKworICAg
IC8vIEZpcnN0IHBhcmFncmFwaCAoc2ltcGxlIHRleHQpCisKKyAgICAvLyBCYXNpYyBpbml0aWFs
IGNoZWNrcworICAgIGdfYXNzZXJ0X2NtcGludChhdGtfdGV4dF9nZXRfbl9zZWxlY3Rpb25zKHBh
cmFncmFwaDEpLCA9PSwgMCk7CisgICAgc2VsZWN0ZWRUZXh0ID0gYXRrX3RleHRfZ2V0X3NlbGVj
dGlvbihwYXJhZ3JhcGgxLCAwLCAmc3RhcnRPZmZzZXQsICZlbmRPZmZzZXQpOworICAgIGdfYXNz
ZXJ0X2NtcGludChzdGFydE9mZnNldCwgPT0sIDApOworICAgIGdfYXNzZXJ0X2NtcGludChlbmRP
ZmZzZXQsID09LCAwKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIoc2VsZWN0ZWRUZXh0LCA9PSwgTlVM
TCk7CisgICAgZ19mcmVlIChzZWxlY3RlZFRleHQpOworICAgIC8vIFRyeSByZW1vdmluZyBhIG5v
biBleGlzdGluZyAoeWV0KSBzZWxlY3Rpb24KKyAgICByZXN1bHQgPSBhdGtfdGV4dF9yZW1vdmVf
c2VsZWN0aW9uKHBhcmFncmFwaDEsIDApOworICAgIGdfYXNzZXJ0KCFyZXN1bHQpOworICAgIC8v
IFRyeSBzZXR0aW5nIGEgMC1jaGFyIHNlbGVjdGlvbgorICAgIHJlc3VsdCA9IGF0a190ZXh0X3Nl
dF9zZWxlY3Rpb24ocGFyYWdyYXBoMSwgMCwgNSwgNSk7CisgICAgZ19hc3NlcnQocmVzdWx0KTsK
KworICAgIC8vIE1ha2UgYSBzZWxlY3Rpb24gYW5kIHRlc3QgaXQKKyAgICByZXN1bHQgPSBhdGtf
dGV4dF9zZXRfc2VsZWN0aW9uKHBhcmFncmFwaDEsIDAsIDUsIDI1KTsKKyAgICBnX2Fzc2VydChy
ZXN1bHQpOworICAgIGdfYXNzZXJ0X2NtcGludChhdGtfdGV4dF9nZXRfbl9zZWxlY3Rpb25zKHBh
cmFncmFwaDEpLCA9PSwgMSk7CisgICAgc2VsZWN0ZWRUZXh0ID0gYXRrX3RleHRfZ2V0X3NlbGVj
dGlvbihwYXJhZ3JhcGgxLCAwLCAmc3RhcnRPZmZzZXQsICZlbmRPZmZzZXQpOworICAgIGdfYXNz
ZXJ0X2NtcGludChzdGFydE9mZnNldCwgPT0sIDUpOworICAgIGdfYXNzZXJ0X2NtcGludChlbmRP
ZmZzZXQsID09LCAyNSk7CisgICAgZ19hc3NlcnRfY21wc3RyKHNlbGVjdGVkVGV4dCwgPT0sICJh
Z3JhcGggd2l0aCBwbGFpbiB0ZSIpOworICAgIGdfZnJlZSAoc2VsZWN0ZWRUZXh0KTsKKyAgICAv
LyBUcnkgcmVtb3ZpbmcgdGhlIHNlbGVjdGlvbiBmcm9tIG90aGVyIEF0a1RleHQgb2JqZWN0IChz
aG91bGQgZmFpbCkKKyAgICByZXN1bHQgPSBhdGtfdGV4dF9yZW1vdmVfc2VsZWN0aW9uKHBhcmFn
cmFwaDIsIDApOworICAgIGdfYXNzZXJ0KCFyZXN1bHQpOworCisgICAgLy8gUmVtb3ZlIHRoZSBz
ZWxlY3Rpb24gYW5kIHRlc3QgZXZlcnl0aGluZyBhZ2FpbgorICAgIHJlc3VsdCA9IGF0a190ZXh0
X3JlbW92ZV9zZWxlY3Rpb24ocGFyYWdyYXBoMSwgMCk7CisgICAgZ19hc3NlcnQocmVzdWx0KTsK
KyAgICBnX2Fzc2VydF9jbXBpbnQoYXRrX3RleHRfZ2V0X25fc2VsZWN0aW9ucyhwYXJhZ3JhcGgx
KSwgPT0sIDApOworICAgIHNlbGVjdGVkVGV4dCA9IGF0a190ZXh0X2dldF9zZWxlY3Rpb24ocGFy
YWdyYXBoMSwgMCwgJnN0YXJ0T2Zmc2V0LCAmZW5kT2Zmc2V0KTsKKyAgICAvLyBOb3cgb2Zmc2V0
cyBzaG91bGQgYmUgdGhlIHNhbWUsIHNldCB0byB0aGUgbGFzdCBwb3NpdGlvbiBvZiB0aGUgY2Fy
ZXQKKyAgICBnX2Fzc2VydF9jbXBpbnQoc3RhcnRPZmZzZXQsID09LCBlbmRPZmZzZXQpOworICAg
IGdfYXNzZXJ0X2NtcGludChzdGFydE9mZnNldCwgPT0sIDI1KTsKKyAgICBnX2Fzc2VydF9jbXBp
bnQoZW5kT2Zmc2V0LCA9PSwgMjUpOworICAgIGdfYXNzZXJ0X2NtcHN0cihzZWxlY3RlZFRleHQs
ID09LCBOVUxMKTsKKyAgICBnX2ZyZWUgKHNlbGVjdGVkVGV4dCk7CisKKyAgICAvLyBTZWNvbmQg
cGFyYWdyYXBoICh0ZXh0ICsgbGluayArIHRleHQpCisKKyAgICAvLyBTZXQgYSBzZWxlY3Rpb24g
cGFydGlhbGx5IGNvdmVyaW5nIHRoZSBsaW5rIGFuZCB0ZXN0IGl0CisgICAgcmVzdWx0ID0gYXRr
X3RleHRfc2V0X3NlbGVjdGlvbihwYXJhZ3JhcGgyLCAwLCA3LCAyMSk7CisgICAgZ19hc3NlcnQo
cmVzdWx0KTsKKworICAgIC8vIFRlc3QgdGhlIHBhcmFncmFwaCBmaXJzdAorICAgIGdfYXNzZXJ0
X2NtcGludChhdGtfdGV4dF9nZXRfbl9zZWxlY3Rpb25zKHBhcmFncmFwaDIpLCA9PSwgMSk7Cisg
ICAgc2VsZWN0ZWRUZXh0ID0gYXRrX3RleHRfZ2V0X3NlbGVjdGlvbihwYXJhZ3JhcGgyLCAwLCAm
c3RhcnRPZmZzZXQsICZlbmRPZmZzZXQpOworICAgIGdfYXNzZXJ0X2NtcGludChzdGFydE9mZnNl
dCwgPT0sIDcpOworICAgIGdfYXNzZXJ0X2NtcGludChlbmRPZmZzZXQsID09LCAyMSk7CisgICAg
Z19hc3NlcnRfY21wc3RyKHNlbGVjdGVkVGV4dCwgPT0sICJyYXBoIHdpdGggYSBsaSIpOworICAg
IGdfZnJlZSAoc2VsZWN0ZWRUZXh0KTsKKworICAgIC8vIE5vdyB0ZXN0IGp1c3QgdGhlIGxpbmsK
KyAgICBnX2Fzc2VydF9jbXBpbnQoYXRrX3RleHRfZ2V0X25fc2VsZWN0aW9ucyhsaW5rKSwgPT0s
IDEpOworICAgIHNlbGVjdGVkVGV4dCA9IGF0a190ZXh0X2dldF9zZWxlY3Rpb24obGluaywgMCwg
JnN0YXJ0T2Zmc2V0LCAmZW5kT2Zmc2V0KTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoc3RhcnRPZmZz
ZXQsID09LCAwKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoZW5kT2Zmc2V0LCA9PSwgNCk7CisgICAg
Z19hc3NlcnRfY21wc3RyKHNlbGVjdGVkVGV4dCwgPT0sICJhIGxpIik7CisgICAgZ19mcmVlIChz
ZWxlY3RlZFRleHQpOworCisgICAgLy8gUmVtb3ZlIHNlbGVjdGlvbnMgYW5kIHRleHQgZXZlcnl0
aGluZyBhZ2FpbgorICAgIHJlc3VsdCA9IGF0a190ZXh0X3JlbW92ZV9zZWxlY3Rpb24ocGFyYWdy
YXBoMiwgMCk7CisgICAgZ19hc3NlcnQocmVzdWx0KTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoYXRr
X3RleHRfZ2V0X25fc2VsZWN0aW9ucyhwYXJhZ3JhcGgyKSwgPT0sIDApOworICAgIHNlbGVjdGVk
VGV4dCA9IGF0a190ZXh0X2dldF9zZWxlY3Rpb24ocGFyYWdyYXBoMiwgMCwgJnN0YXJ0T2Zmc2V0
LCAmZW5kT2Zmc2V0KTsKKyAgICAvLyBOb3cgb2Zmc2V0cyBzaG91bGQgYmUgdGhlIHNhbWUgKG5v
IHNlbGVjdGlvbikKKyAgICBnX2Fzc2VydF9jbXBpbnQoc3RhcnRPZmZzZXQsID09LCBlbmRPZmZz
ZXQpOworICAgIGdfYXNzZXJ0X2NtcHN0cihzZWxlY3RlZFRleHQsID09LCBOVUxMKTsKKyAgICBn
X2ZyZWUgKHNlbGVjdGVkVGV4dCk7CisKKyAgICBnX2Fzc2VydF9jbXBpbnQoYXRrX3RleHRfZ2V0
X25fc2VsZWN0aW9ucyhsaW5rKSwgPT0sIDApOworICAgIHNlbGVjdGVkVGV4dCA9IGF0a190ZXh0
X2dldF9zZWxlY3Rpb24obGluaywgMCwgJnN0YXJ0T2Zmc2V0LCAmZW5kT2Zmc2V0KTsKKyAgICAv
LyBOb3cgb2Zmc2V0cyBzaG91bGQgYmUgdGhlIHNhbWUgKG5vIHNlbGVjdGlvbikKKyAgICBnX2Fz
c2VydF9jbXBpbnQoc3RhcnRPZmZzZXQsID09LCBlbmRPZmZzZXQpOworICAgIGdfYXNzZXJ0X2Nt
cHN0cihzZWxlY3RlZFRleHQsID09LCBOVUxMKTsKKyAgICBnX2ZyZWUgKHNlbGVjdGVkVGV4dCk7
CisKKyAgICBnX29iamVjdF91bnJlZihwYXJhZ3JhcGgxKTsKKyAgICBnX29iamVjdF91bnJlZihw
YXJhZ3JhcGgyKTsKKyAgICBnX29iamVjdF91bnJlZih3ZWJWaWV3KTsKK30KKwogc3RhdGljIHZv
aWQgdGVzdF93ZWJraXRfYXRrX2dldF9leHRlbnRzKHZvaWQpCiB7CiAgICAgV2ViS2l0V2ViVmll
dyogd2ViVmlldzsKQEAgLTkzNiw2ICsxMDUzLDcgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIq
KiBhcmd2KQogICAgIGdfdGVzdF9hZGRfZnVuYygiL3dlYmtpdC9hdGsvZ2V0VGV4dEluVGFibGUi
LCB0ZXN0V2Via2l0QXRrR2V0VGV4dEluVGFibGUpOwogICAgIGdfdGVzdF9hZGRfZnVuYygiL3dl
YmtpdC9hdGsvZ2V0SGVhZGVyc0luVGFibGUiLCB0ZXN0V2Via2l0QXRrR2V0SGVhZGVyc0luVGFi
bGUpOwogICAgIGdfdGVzdF9hZGRfZnVuYygiL3dlYmtpdC9hdGsvdGV4dEF0dHJpYnV0ZXMiLCB0
ZXN0V2Via2l0QXRrVGV4dEF0dHJpYnV0ZXMpOworICAgIGdfdGVzdF9hZGRfZnVuYygiL3dlYmtp
dC9hdGsvdGV4dFNlbGVjdGlvbnMiLCB0ZXN0V2VraXRBdGtUZXh0U2VsZWN0aW9ucyk7CiAgICAg
Z190ZXN0X2FkZF9mdW5jKCIvd2Via2l0L2F0ay9nZXRfZXh0ZW50cyIsIHRlc3Rfd2Via2l0X2F0
a19nZXRfZXh0ZW50cyk7CiAgICAgZ190ZXN0X2FkZF9mdW5jKCIvd2Via2l0L2F0ay9saXN0c09m
SXRlbXMiLCB0ZXN0V2Via2l0QXRrTGlzdHNPZkl0ZW1zKTsKICAgICByZXR1cm4gZ190ZXN0X3J1
biAoKTsKLS0gCjEuNy4wLjQKCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>