<?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>132350</bug_id>
          
          <creation_ts>2014-04-29 12:50:44 -0700</creation_ts>
          <short_desc>AX: [PATCH] procedures for automated atk text and caret tests</short_desc>
          <delta_ts>2014-06-04 00:54:48 -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>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>WONTFIX</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Jarek Czekalski">jarekczek</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>apinheiro</cc>
    
    <cc>jdiggs</cc>
    
    <cc>mario</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1005070</commentid>
    <comment_count>0</comment_count>
      <attachid>230405</attachid>
    <who name="Jarek Czekalski">jarekczek</who>
    <bug_when>2014-04-29 12:50:44 -0700</bug_when>
    <thetext>Created attachment 230405
auto tests for testatk.c

testatk.c lacks a convenient machinery to quickly add more test. I have an idea how to improve it. I think of a test that would get 2 things on input:

1. html source
2. corresponding text

The test procedure would verify 3 things:

A. Whether all text atk components summed up give the expected text.
B. Whether caret may be inserted into all text components at all offsets.
C. Whether caret movements cause text-caret-moved events.

What a conincidence, recently I reported 3 bugs, each of them fails at another testing part. They are bug #130941, bug #131933, bug #132349.

I attach the testatk.c patch that prepares testing procedures and 3 test cases. If this could be committed, let&apos;s comment out the code adding these test cases, so that tests not fail until they are fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1005071</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2014-04-29 12:51:25 -0700</bug_when>
    <thetext>&lt;rdar://problem/16759498&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1005343</commentid>
    <comment_count>2</comment_count>
    <who name="Mario Sanchez Prada">mario</who>
    <bug_when>2014-04-30 04:06:33 -0700</bug_when>
    <thetext>Hi Jarek,

First of all, thanks a lot for your efforts to help improve the accessibility support in WebKitGTK, is very much appreciated indeed. I&apos;ve been following your bug reports closely, but unfortunately did not have much time to reply due to other things that keep me busy these days, however, I think I do need to make a comment now, before you spend perhaps too much time in the wrong path:

testatk.c is part of the unit tests suite used in the WebKit1 port, which is now in the process of being deprecated[1][2] and so has actually been removed already now from trunk (still kept in a branch, though). You can see in [3][4] the relevant commits removing that code.

So, that means that testatk.c no longer exist, meaning that any accessibility related test you want to add has to be written as a Layout test using the API provided by the AccessibilityController and AccessibilityUIElement classes in WebKitTestRunner.

That said, it might be that we would need to extend those APIs to be able to properly test some things, as we did in the past, but that&apos;s definitely the way to go, so I&apos;m letting you know asap so you can better refocus your efforts from now on.

Of course, I&apos;m more than happy to help with anything you might need (not only reviews) and also will try helping with code if possible as soon as I get rid of the extra things I have on top of myself these days (not sure when, though).

Thank you very much!

[1] https://lists.webkit.org/pipermail/webkit-gtk/2014-March/001821.html
[2] https://lists.webkit.org/pipermail/webkit-gtk/2014-April/001862.html
[3] http://trac.webkit.org/changeset/166979
[4] http://trac.webkit.org/changeset/166977</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1005353</commentid>
    <comment_count>3</comment_count>
    <who name="Jarek Czekalski">jarekczek</who>
    <bug_when>2014-04-30 04:52:05 -0700</bug_when>
    <thetext>Hi Mario

Thank you for the warning :)
Now I won&apos;t spend too much time on a bug, that will look difficult. But one of the bugs (bug #13941) is already fixed and just for the sake of this bug we could try to patch testatk.c with my auto test method. It would help to keep stability of webkit1 in the maintanance period.

Another advantage of my patch: it helps much in diagnosing other atk bugs, because new tests can be added so quickly.

If you think it would be too much work, then yes, I can prepare an old fashioned test for that.

By the time we make the decision, I will try to gather information about Debian and their plans regarding webkit2.

Jarek</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1005704</commentid>
    <comment_count>4</comment_count>
    <who name="Mario Sanchez Prada">mario</who>
    <bug_when>2014-05-01 04:02:25 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; Hi Mario
&gt; 
&gt; Thank you for the warning :)
&gt; Now I won&apos;t spend too much time on a bug, that will look difficult. But one of 
&gt; the bugs (bug #13941) is already fixed and just for the sake of this bug we 
&gt; could try to patch testatk.c with my auto test method. It would help to keep 
&gt; stability of webkit1 in the maintanance period.

I&apos;m not sure about this, to be honest. It would mean putting effort on testing something in a way that we know will go away, while keeping the main trunk untested, which is where I think the effort should be put instead.

&gt; Another advantage of my patch: it helps much in diagnosing other atk bugs, 
&gt; because new tests can be added so quickly.

Yes, testatk.c is easier to handle than layout tests for this (too ATK specific) kind of tests, but again that&apos;s code that will go away and that is no longer in trunk, so I see little point on that approach.

&gt; If you think it would be too much work, then yes, I can prepare an old 
&gt; fashioned test for that.
&gt; 
By old-fashioned test you mean a layout test? If so, then yes I do think that would be better :)

&gt; By the time we make the decision, I will try to gather information about 
&gt; Debian and their plans regarding webkit2.

Cool thanks!
&gt; 
&gt; Jarek</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1005708</commentid>
    <comment_count>5</comment_count>
    <who name="Jarek Czekalski">jarekczek</who>
    <bug_when>2014-05-01 05:02:22 -0700</bug_when>
    <thetext>Ok, I forget about this patch. I wanted to achieve a goal in a way that turned out to be unacceptable.

Mario, could you help me do it in an acceptable way? I would like to have a function that would receive 2 arguments and perform 3 tests. Details as described in the description of this bug report. If possible, actually only 1 argument could be given, the html source, because perhaps webkit could give us the text using non-accessibility functions.

Is extending AccessibilityController a way to go? Would you suggest a signature of a function or functions?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1005717</commentid>
    <comment_count>6</comment_count>
    <who name="Jarek Czekalski">jarekczek</who>
    <bug_when>2014-05-01 07:09:31 -0700</bug_when>
    <thetext>Sorry if I make a conceptual mistake again, but...

When we had webkit1, testatk.c did all atk (and spi2 in other words) tests, including caret-moved tests. It served whole webkit, including webkit2, by testing accessibility scenarios. Now that we don&apos;t have testatk.c, what takes its role of testing atk related issues? Shouldn&apos;t we simply port testatk.c to webkit2 and use it then as before?

Wording it differently: testatk.c (and other files from this directory) covered a set of tests, that were not covered by other tests in webkit. Do we want to drop this set?

If I don&apos;t make a mistake, it may be better to answer this on webkit-gtk.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1005718</commentid>
    <comment_count>7</comment_count>
    <who name="Mario Sanchez Prada">mario</who>
    <bug_when>2014-05-01 07:11:16 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; Ok, I forget about this patch. I wanted to achieve a goal in a way that turned out to be unacceptable.
&gt; 
&gt; Mario, could you help me do it in an acceptable way? I would like to have a function that would receive 2 arguments and perform 3 tests. Details as described in the description of this bug report. If possible, actually only 1 argument could be given, the html source, because perhaps webkit could give us the text using non-accessibility functions.
&gt; 
&gt; Is extending AccessibilityController a way to go? Would you suggest a signature of a function or functions?

I think there&apos;s a bit of confusion here, which I&apos;m not surprised about since everything related to a11y in WebKitGTK is quite confusing anyway :)...

As per the description of this bug:

&gt; testatk.c lacks a convenient machinery to quickly add more test. I have an idea how to improve it. I think of a test that would get 2 things on input:
&gt; 
&gt; 1. html source
&gt; 2. corresponding text
&gt; 
&gt; The test procedure would verify 3 things:
&gt; 
&gt; A. Whether all text atk components summed up give the expected text.
&gt; B. Whether caret may be inserted into all text components at all offsets.
&gt; C. Whether caret movements cause text-caret-moved events.
&gt; 

I think you might not be understanding how we test things in WebKit and, more specifically, accessibility related features. Let me try to summarize some points:

We do have 2 kind of tests of interest:

  * Unit tests: used to test APIs, both public (e.g. WebKit2GTK+ API) or private (between internal components).
  * Layout tests: used to test the features of the engine by feeding HTML/CSS/JavaScript content to a WebView and then performing some checks over that using some helper tools (DumpRenderTree for the WebKit1, WebKitTestRunner for WebKit2).


So, testatk.c belongs to the old set of unit tests from WebKit1, because it&apos;s just a C file explicitly checking ATK functions which is indeed an API consumed outside of webkit (by the ATSPI-ATK bridge). So, even though it was not a &quot;true WebKit API&quot; as for instance is the case of the WebKit2GTK+ API, it was more or less fine for WebKitGTK+ when based in WebKit1 for the following reasons:

 * It gave complete control on how to test ATK specific functions and signals without bothering other ports
 * It was possible to do it because we only had one process, so we could access the ATK world from the unit tests even if those actually lived in WebCore
 * It was easy and quick :)

However, the testatk.c posed a big number of problems too, which rendered into a not feasible approach when WebKit2 arrived. Some reasons:

 * It does not scale well: not easy to add more cases in an organized way (as you noticed)
 * It forced other ports using ATK for a11y (EFLWebKit) to either not have a11y unit tests or code their own. Duplication is bad
 * In WebKit2GTK+ is simply not possible to use the ATK API since the unit tests are in the UI Process and the ATK world lives in the Web Process. We could use AT-SPI instead, but then we would be getting into an additional layer of trouble, would not be testing exactly the same things and still would have the other problems
 * Probably something else I&apos;m missing now...


So, what we decided to do was to convert the unit tests in testatk.c into regular layout tests that would end up testing exactly the same ATK calls under the hood, by means of the helper tools in place: DumpRenderTree (for WebKit1) and WebkitTestRunner (for WebKit2). That&apos;s precisely what Joanmarie was doing during the WebKitGTK+ hackfest in december, as you can see here:

http://trac.webkit.org/changeset/160316
http://trac.webkit.org/changeset/160365

As you can see there, she converted a bunch of unit tests in testatk.c into layout tests, both by (1) writing new HTML files that would check the same things AND (2) adding the needed support -if not present already- in the ATK versions of AccessibilityUIElement in DumpRenderTree and WebKitTestRunner to make sure we could test that by using regular Javascript calls.

So, if you really want to help with this (which is extremely appreciated, since I barely would have time for that these days), I believe a good point to start from would be to convert into layout tests the remaining tests that were left in testatk.c after Joanie&apos;s patches, adding support when needed in the accessibility related classes (AccessibilityUIElement, AccessibilityController) for ATK in WebKitTestRunner only (as DRT is gone too from trunk these days). Those files live in Tools/WebKitTestRunner/InjectedBundle/atk, btw.

How does that sound?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1005719</commentid>
    <comment_count>8</comment_count>
    <who name="Mario Sanchez Prada">mario</who>
    <bug_when>2014-05-01 07:21:40 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; Sorry if I make a conceptual mistake again, but...
&gt; 
&gt; When we had webkit1, testatk.c did all atk (and spi2 in other words) tests, 
&gt; including caret-moved tests. It served whole webkit, including webkit2, by 
&gt; testing accessibility scenarios. Now that we don&apos;t have testatk.c, what 
&gt; takes its role of testing atk related issues? Shouldn&apos;t we simply port 
&gt; testatk.c to webkit2 and use it then as before?

See my previous comment for further details but, trying to reply shortly here:

 - testatk.c only tested things using ATK, no AT-SPI2 was involved at all
 - testatk.c only served the WebKit1 version of WebKitGTK+. Webkit2GTK+ or EFL, for instance, were not covered by it
 - Porting testatk.c to WebKit2 would be possible, but then we would need to call it testatspi2.c instead, because we could no longer use ATK API to test things, but AT-SPI2 instead, since the unit tests and the ATK world would be living in different processes.
 - Converting those tests into layout tests is a much better approach (see my previous comment)
 
I recommend you to read a post I wrote last year (and not because of self-promotion purposes), I guess you might find it handy to understand some of the messy concepts here :). Here&apos;s the link: http://mariospr.org/2013/02/03/accessibility-in-webkitgtk/

&gt; Wording it differently: testatk.c (and other files from this directory) 
&gt; covered a set of tests, that were not covered by other tests in webkit.

That is right but, as mentioned in my previous comment, the best idea would be to continue Joanie&apos;s work on converting those leftovers in testatk.c into layout tests, so we can keep testing those cases in upstream ports based in WebKit2, such as WebKit2GTK+ and EFLWebKit.

&gt; Do we want to drop this set?
&gt; 
Of course not, and I would have gladly worked on this myself if I could, but has not been possible so far :(

And that&apos;s part of the reason why I&apos;m so happy to help you with this by giving you the right pointers, because if you could help with that that would be really great (and I&apos;m sure Joanie would agree with that too).

&gt; If I don&apos;t make a mistake, it may be better to answer this on webkit-gtk.

I&apos;m fine if you want to move the discussion to webkit-gtk, yet I&apos;m fine as well with keeping discussing here too. Joanie is on CC in this bug anyway and I&apos;m adding apinheiro (ATK maintainer) now, to keep him in the loop</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1005770</commentid>
    <comment_count>9</comment_count>
    <who name="Jarek Czekalski">jarekczek</who>
    <bug_when>2014-05-01 10:30:40 -0700</bug_when>
    <thetext>Mario, thank you for your exhaustive answers. All makes sense after these explanations. Actually I missed the LayoutTests/platform/gtk directory so this part was especially helpful:

&gt;So, what we decided to do was to convert the unit tests in testatk.c into regular layout tests that would end up testing exactly the same ATK calls under the hood, by means of the helper tools in place: DumpRenderTree (for WebKit1) and WebkitTestRunner (for WebKit2). That&apos;s precisely what Joanmarie was doing during the WebKitGTK+ hackfest in december, as you can see here:

&gt;http://trac.webkit.org/changeset/160316
&gt;http://trac.webkit.org/changeset/160365

Further:

&gt;I recommend you to read a post I wrote last year (and not because of self-promotion purposes), I guess you might find it handy to understand some of the messy concepts here . Here&apos;s the link: http://mariospr.org/2013/02/03/accessibility-in-webkitgtk/

Never too much promotion about this spot on article. The things explained there fill the gap, because they are nowhere expressed so clearly and completely. It is a must for anyone willing to discover accessibility framework on Linux. I read it thoroughly 2 weeks ago and also bookmarked it permanently. I wanted to say thanks at the bottom, because the last &quot;thank you&quot; was in 2013, but the page did not allow. So now expressing my gratitude directly :)

From the first glance at caret layout tests I see no additional api is needed. But a javascript function may probably be added to perform the same things I implemented in testatk.c. I think now I can get back to work and return with something for platform/gtk/accessibility directory.

&gt;the best idea would be to continue Joanie&apos;s work on converting those leftovers in testatk.c into layout tests

Actually I don&apos;t intend to become a full-time webkit contributor, so I don&apos;t plan to rewrite many tests from testatk.c. But the few things I plan to do, I would like to do them completely and in a good style. In the meantime I&apos;ll gather some knowledge about webkit, and probably will be coming back when another bug trace leads from orca to webkit. I like the webkit code, its documentation, its webpage. I like the order and clarity of how things are done in this project. I like it that you guys are responsive. It&apos;s a nice place for a dev :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1006019</commentid>
    <comment_count>10</comment_count>
    <who name="Mario Sanchez Prada">mario</who>
    <bug_when>2014-05-02 06:25:03 -0700</bug_when>
    <thetext>(In reply to comment #9)
&gt; Mario, thank you for your exhaustive answers. All makes sense after these explanations.
&gt; Actually I missed the LayoutTests/platform/gtk directory so this part was especially helpful:
&gt; 
You&apos;re welcome. Very happy to be helpful! :)

&gt; [..]
&gt; &gt; I recommend you to read a post I wrote last year (and not because of self-promotion purposes),
&gt; &gt; I guess you might find it handy to understand some of the messy concepts here . Here&apos;s the link:
&gt; &gt; http://mariospr.org/2013/02/03/accessibility-in-webkitgtk/
&gt; 
&gt; Never too much promotion about this spot on article. The things explained there fill the gap,
&gt; because they are nowhere expressed so clearly and completely.

Yes, that&apos;s exactly what I thought when I wrote it and also precisely why I did it: I felt there was a gap, or at least that &quot;my life would have been much easier if I had access to that info, all together in the same place, when I started&quot; :)

&gt; It is a must for anyone willing to discover accessibility framework on Linux.

Thanks for your kind words. Happy to see it&apos;s useful, because it did take me quite some time to put it together and write it. Actually, I even asked Joanie for help to &quot;proof read&quot; it and make comments and changes before publishing, because I did want to make sure I avoided confusing people even more when it comes to this topic (Big thanks to Joanie, btw).

&gt; I read it thoroughly 2 weeks ago and also bookmarked it permanently.I wanted
&gt; to say thanks at the bottom, because the last &quot;thank you&quot; was in 2013, but the
&gt; page did not allow. So now expressing my gratitude directly :)

Yes, the WordPress is configured to close comments after a while, to help me fight spam, but thank you anyway.

&gt; From the first glance at caret layout tests I see no additional api is needed.
&gt; But a javascript function may probably be added to perform the same things I
&gt; implemented in testatk.c. I think now I can get back to work and return with
&gt; something for platform/gtk/accessibility directory.

Make sure you enable caret browsing in the test, so you can then set the caret anywhere (not only in editable content) and move it around using either the DOM selection API or the eventSender object.

See some examples here:
LayoutTests/platform/gtk/accessibility/caret-browsing-select-focus.html
LayoutTests/platform/gtk/accessibility/caret-browsing-text-focus.html

&gt; &gt;the best idea would be to continue Joanie&apos;s work on converting those leftovers in testatk.c into layout tests
&gt; 
&gt; Actually I don&apos;t intend to become a full-time webkit contributor, so I don&apos;t plan to rewrite many tests from testatk.c.

That&apos;s fine, we&apos;re all busy people :). Any contribution you make will be valuable on its own, don&apos;t worry about that.

&gt; But the few things I plan to do, I would like to do them completely and in a good style.
&gt; In the meantime I&apos;ll gather some knowledge about webkit, and probably will be coming
&gt; back when another bug trace leads from orca to webkit.

Sounds great

&gt; I like the webkit code, its documentation, its webpage. I like the order and
&gt; clarity of how things are done in this project. I like it that you guys are
&gt; responsive. It&apos;s a nice place for a dev :)

Welcome :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1006366</commentid>
    <comment_count>11</comment_count>
    <who name="Jarek Czekalski">jarekczek</who>
    <bug_when>2014-05-03 12:53:39 -0700</bug_when>
    <thetext>Suggested implementation started in #132527.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1013263</commentid>
    <comment_count>12</comment_count>
      <attachid>230405</attachid>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2014-06-04 00:54:48 -0700</bug_when>
    <thetext>Comment on attachment 230405
auto tests for testatk.c

Cleared review? from attachment 230405 so that this bug does not appear in http://webkit.org/pending-review.  If you would like this patch reviewed, please attach it to a new bug (or re-open this bug before marking it for review again).</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>230405</attachid>
            <date>2014-04-29 12:50:44 -0700</date>
            <delta_ts>2014-06-04 00:54:47 -0700</delta_ts>
            <desc>auto tests for testatk.c</desc>
            <filename>testatk_auto_1_0.patch</filename>
            <type>text/plain</type>
            <size>9033</size>
            <attacher name="Jarek Czekalski">jarekczek</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0R3RrL3Rlc3RhdGsuYwo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEd0ay90ZXN0YXRrLmMJ
KHJldmlzaW9uIDE2NjQwNSkKKysrIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0R3Rr
L3Rlc3RhdGsuYwkod29ya2luZyBjb3B5KQpAQCAtNTEsMTAgKzUxLDQzIEBACiAKIHN0YXRpYyBj
b25zdCBjaGFyKiB0ZXh0Rm9yQ2FyZXRCcm93c2luZyA9ICI8aHRtbD48Ym9keT48aDE+QSB0ZXh0
IGhlYWRlcjwvaDE+PHA+QSBwYXJhZ3JhcGggPGEgaHJlZj0naHR0cDovL2Zvby5iYXIuYmF6Lyc+
d2l0aCBhIGxpbms8L2E+IGluIHRoZSBtaWRkbGU8L3A+PG9sPjxsaT5BIGxpc3QgaXRlbTwvbGk+
PGxpPjxzcGFuIHN0eWxlPSdkaXNwbGF5OmJsb2NrOyc+QmxvY2sgc3BhbiBpbiBhIGxpc3QgaXRl
bTwvc3Bhbj48c3Bhbj5JbmxpbmUgc3BhbiBpbiBhIGxpc3QgaXRlbTwvc3Bhbj48L2xpPjxsaT48
YSBocmVmPSdmb28nPjxzcGFuIHN0eWxlPSdkaXNwbGF5OmJsb2NrOyc+QmxvY2sgc3BhbiBpbiBh
IGxpbmsgaW4gYSBsaXN0IGl0ZW08L3NwYW4+PHNwYW4+SW5saW5lIHNwYW4gaW4gYSBsaW5rIGlu
IGEgbGlzdCBpdGVtPC9zcGFuPjwvYT48L2xpPjwvb2w+PHNlbGVjdD48b3B0aW9uIHNlbGVjdGVk
IHZhbHVlPSdmb28nPkFuIG9wdGlvbiBpbiBhIGNvbWJvIGJveDwvb3B0aW9uPjwvc2VsZWN0Pjxp
bnB1dCB0eXBlPSd0ZXh0JyBuYW1lPSdmb28nIHZhbHVlPSdmb28gYmFyIGJheicgLz48dGFibGU+
PHRyPjx0ZD5hIHRhYmxlIGNlbGw8L3RkPjx0ZD48L3RkPjx0ZD48YSBocmVmPSdmb28nPjxzcGFu
IHN0eWxlPSdkaXNwbGF5OmJsb2NrOyc+QmxvY2sgc3BhbiBpbiBhIGxpbmsgaW4gYSB0YWJsZSBj
ZWxsPC9zcGFuPjxzcGFuPklubGluZSBzcGFuIGluIGEgbGluayBpbiBhIHRhYmxlIGNlbGw8L3Nw
YW4+PC9hPjwvdGQ+PHRkPjxzcGFuIHN0eWxlPSdkaXNwbGF5OmJsb2NrOyc+QmxvY2sgc3BhbiBp
biBhIHRhYmxlIGNlbGw8L3NwYW4+PHNwYW4+SW5saW5lIHNwYW4gaW4gYSB0YWJsZSBjZWxsPC9z
cGFuPjwvdGQ+PC90cj48L3RhYmxlPjxoND48YSBocmVmPSdmb28nPjxzcGFuIHN0eWxlPSdkaXNw
bGF5OmJsb2NrOyc+QmxvY2sgc3BhbiBpbiBhIGxpbmsgaW4gYSBoZWFkaW5nPC9zcGFuPjxzcGFu
PklubGluZSBzcGFuIGluIGEgbGluayBpbiBhIGhlYWRpbmc8L3NwYW4+PC9oND48aDQ+PHNwYW4g
c3R5bGU9J2Rpc3BsYXk6YmxvY2s7Jz5CbG9jayBzcGFuIGluIGEgaGVhZGluZzwvc3Bhbj48c3Bh
bj5JbmxpbmUgc3BhbiBpbiBhIGhlYWRpbmc8L3NwYW4+PC9oND48L2JvZHk+PC9odG1sPiI7CiAK
K3R5cGVkZWYgc3RydWN0IHsKKyAgY29uc3QgY2hhciAqaHRtbDsKKyAgY29uc3QgY2hhciAqdGV4
dDsKK30gVGVzdERhdGE7CisKK1Rlc3REYXRhIHRlc3REYXRhX2NhcmV0QUJsb2NrID0KKyAgeyAi
PGh0bWw+PGJvZHk+XG5cCis8ZGl2PlxuXAorPGRpdj5cblwKKzxwPlBhcmEgMTwvcD5cblwKKzxh
IHN0eWxlPVwiZGlzcGxheTpibG9jaztcIiBocmVmPVwiYW55dGhpbmdcIj5BbiBhIHRhZyB3aXRo
IGhyZWY8L2E+XG5cCis8cD5QYXJhIDI8L3A+XG5cCis8L2Rpdj5cblwKKzwvZGl2PlxuXAorPC9i
b2R5PjwvaHRtbD5cbiIsICJQYXJhIDEgQW4gYSB0YWcgd2l0aCBocmVmIFBhcmEgMiIgfTsKKwor
VGVzdERhdGEgdGVzdERhdGFfY2FyZXRBQmxvY2tTcGFuQmxvY2sgPSB7CisiPGh0bWw+PGJvZHk+
XG5cCis8ZGl2PlxuXAorPHA+UDE8L3A+XG5cCis8YSBzdHlsZT1cImRpc3BsYXk6YmxvY2s7XCIg
aHJlZj1cImFueXRoaW5nXCI+XG5cCis8c3BhbiBzdHlsZT1cImRpc3BsYXk6YmxvY2s7XCI+U3Bh
biBibG9jayBpbiBBPC9zcGFuPlxuXAorPC9hPlxuXAorPHA+UDI8L3A+XG5cCis8L2Rpdj5cblwK
KzwvZGl2PlxuXAorPC9ib2R5PjwvaHRtbD5cbiIsICJQMSBTcGFuIGJsb2NrIGluIEEgUDIiIH07
CisKK1Rlc3REYXRhIHRlc3REYXRhX2NhcmV0SW5Cb2R5ID0geworIjxodG1sPjxib2R5PjxkaXY+
MTwvZGl2PkJvZHk8ZGl2PjI8L2Rpdj48L2JvZHk+PC9odG1sPiIsICIxIEJvZHkgMiIgfTsKKwog
c3RhdGljIGNvbnN0IGNoYXIqIHRleHRGb3JTZWxlY3Rpb25zID0gIjxodG1sPjxib2R5PjxwPkEg
cGFyYWdyYXBoIHdpdGggcGxhaW4gdGV4dDwvcD48cD5BIHBhcmFncmFwaCB3aXRoIDxhIGhyZWY9
J2h0dHA6Ly93ZWJraXQub3JnJz5hIGxpbms8L2E+IGluIHRoZSBtaWRkbGU8L3A+PG9sPjxsaT5B
IGxpc3QgaXRlbTwvbGk+PC9vbD48c2VsZWN0PjwvYm9keT48L2h0bWw+IjsKIAogc3RhdGljIGNv
bnN0IGNoYXIqIHRleHRXaXRoQXR0cmlidXRlcyA9ICI8aHRtbD48aGVhZD48c3R5bGU+LnN0MSB7
Zm9udC1mYW1pbHk6IG1vbm9zcGFjZTsgY29sb3I6cmdiKDEyMCwxMjEsMTIyKTt9IC5zdDIge3Rl
eHQtZGVjb3JhdGlvbjp1bmRlcmxpbmU7IGJhY2tncm91bmQtY29sb3I6cmdiKDgwLDgxLDgyKTt9
PC9zdHlsZT48L2hlYWQ+PGJvZHk+PHAgc3R5bGU9XCJmb250LXNpemU6MTQ7IHRleHQtYWxpZ246
cmlnaHQ7XCI+VGhpcyBpcyB0aGUgPGk+Zmlyc3Q8L2k+PGI+IHNlbnRlbmNlIG9mIHRoaXMgdGV4
dC48L2I+PC9wPjxwIGNsYXNzPVwic3QxXCI+VGhpcyBzZW50ZW5jZSBzaG91bGQgaGF2ZSBhbiBz
dHlsZSBhcHBsaWVkIDxzcGFuIGNsYXNzPVwic3QyXCI+YW5kIHRoaXMgcGFydCBzaG91bGQgaGF2
ZSBhbm90aGVyIG9uZTwvc3Bhbj4uPC9wPjxwPng8c3ViPjE8L3N1Yj48c3VwPjI8L3N1cD49eDxz
dWI+Mjwvc3ViPjxzdXA+Mzwvc3VwPjwvcD48cCBzdHlsZT1cInRleHQtYWxpZ246Y2VudGVyO1wi
PlRoaXMgc2VudGVuY2UgaXMgdGhlIDxzdHJpa2U+bGFzdDwvc3RyaWtlPiBvbmUuPC9wPjwvYm9k
eT48L2h0bWw+IjsKIAorc3RhdGljIGNvbnN0IGNoYXIqIG5vTW92ZVN0ciA9ICJubyBtb3ZlIjsK
Kwogc3RhdGljIEF0a09iamVjdCogZ2V0V2ViQXJlYU9iamVjdChXZWJLaXRXZWJWaWV3KiB3ZWJW
aWV3KQogewogICAgIC8qIE1hbnVhbGx5IHNwaW4gdGhlIG1haW4gY29udGV4dCB0byBtYWtlIHN1
cmUgdGhlIGFjY2Vzc2libGUKQEAgLTg3LDYgKzEyMCwxNDEgQEAKICAgICB0ZXh0Q2FyZXRNb3Zl
ZFJlc3VsdCA9IGdfc3RyZHVwX3ByaW50ZigifCVzfCVkfCIsIGF0a19yb2xlX2dldF9uYW1lKHJv
bGUpLCBwb3MpOwogfQogCisvLyBDb25uZWN0IHNpZ25hbCB0byB0aGUgZ2l2ZW4gYXRrIG9iamVj
dCBhbmQgYWxsIGl0cyBkZXNjZW5kYW50cworLy8gcmVjdXJzaXZlbHksIHRvIG1ha2Ugc3VyZSBp
dCdzIGFsd2F5cyBjYXVnaHQuCitzdGF0aWMgdm9pZCB0ZXN0V2Via2l0QXRrQ29ubmVjdFJlY3Vy
KEF0a09iamVjdCAqcGFyZW50LAorICAgIGdjaGFyICpzaWduYWwsIEdDYWxsYmFjayBoYW5kbGVy
KQoreworICAgIGludCBpQ2hpbGQgPSAwOworICAgIGludCBjQ2hpbGQgPSBhdGtfb2JqZWN0X2dl
dF9uX2FjY2Vzc2libGVfY2hpbGRyZW4ocGFyZW50KTsKKyAgICBpZiAoQVRLX0lTX1RFWFQocGFy
ZW50KSkKKyAgICAgICAgZ19zaWduYWxfY29ubmVjdChwYXJlbnQsICJ0ZXh0LWNhcmV0LW1vdmVk
IiwgaGFuZGxlciwgMCk7CisgICAgZm9yIChpQ2hpbGQgPSAwOyBpQ2hpbGQgPCBjQ2hpbGQ7IGlD
aGlsZCsrKSB7CisgICAgICAgIEF0a09iamVjdCAqY2hpbGQgPSBhdGtfb2JqZWN0X3JlZl9hY2Nl
c3NpYmxlX2NoaWxkKHBhcmVudCwgaUNoaWxkKTsKKyAgICAgICAgdGVzdFdlYmtpdEF0a0Nvbm5l
Y3RSZWN1cihjaGlsZCwgc2lnbmFsLCBoYW5kbGVyKTsKKyAgICAgICAgZ19vYmplY3RfdW5yZWYo
Y2hpbGQpOworICAgIH0KK30KKworLyoqIEFwcGVuZHMgdGV4dCBvYmplY3RzIHRvIHRoZSBsaXN0
LiBDYWxsZXIgc2hvdWxkIHVucmVmIHRoZSBvYmplY3RzCisgICAgb24gdGhlIGxpc3QuICovCitz
dGF0aWMgdm9pZCBhcHBlbmRUZXh0T2JqZWN0c1JlY3VyKEdMaXN0ICpsc3QsIEF0a09iamVjdCAq
cGFyKQoreworICAgIGlmIChBVEtfSVNfVEVYVChwYXIpKSB7CisgICAgICAgIC8vIEFkZGl0aW9u
YWwgcmVmLCBiZWNhdXNlIG9iamVjdCBvbiB0aGUgbGlzdCB3aWxsIGJlIHVucmVmZmVkCisgICAg
ICAgIC8vIGJ5IGNhbGxlci4KKyAgICAgICAgZ19vYmplY3RfcmVmKHBhcik7CisgICAgICAgIEdM
aXN0ICpsc3RSZXQgPSBnX2xpc3RfYXBwZW5kKGxzdCwgcGFyKTsKKyAgICAgICAgZ19hc3NlcnQo
bHN0UmV0ID09IGxzdCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgaW50IGNDaGlsZCA9IGF0a19v
YmplY3RfZ2V0X25fYWNjZXNzaWJsZV9jaGlsZHJlbihwYXIpOworICAgICAgICBpbnQgaUNoaWxk
OworICAgICAgICBmb3IoaUNoaWxkID0gMDsgaUNoaWxkIDwgY0NoaWxkOyBpQ2hpbGQrKykgewor
ICAgICAgICAgICAgQXRrT2JqZWN0ICpjaGlsZCA9IGF0a19vYmplY3RfcmVmX2FjY2Vzc2libGVf
Y2hpbGQocGFyLCBpQ2hpbGQpOworICAgICAgICAgICAgZ19hc3NlcnQoY2hpbGQpOworICAgICAg
ICAgICAgYXBwZW5kVGV4dE9iamVjdHNSZWN1cihsc3QsIGNoaWxkKTsKKyAgICAgICAgICAgIGdf
b2JqZWN0X3VucmVmKGNoaWxkKTsKKyAgICAgICAgfQorICAgIH0KK30KKworc3RhdGljIHZvaWQg
YXNzZXJ0VGV4dEVxdWFsTm9uV2hpdGUoY29uc3QgY2hhciAqdDEsIGNvbnN0IGNoYXIgKnQyKQor
eworICAvLyBXVEYgc3VnZ2VzdHMgdG8gdXNlIEFTQ0lJQ1R5cGUuaCwgYnV0IEkgZG9uJ3Qga25v
dyBob3cgdG8gbWFrZSBpdCwKKyAgLy8gYmVjYXVzZSBpdCdzIGEgQysrIGhlYWRlciwgc28gd29y
a2Fyb3VuZGluZyB3aXRoIHVuZGVmIGluc3RlYWQuCisgICN1bmRlZiBpc3NwYWNlCisKKyAgY29u
c3QgY2hhciAqcDEsICpwMjsKKyAgZm9yIChwMSA9IHQxLCBwMiA9IHQyOyAqcDEgJiYgKnAyOyBw
MSsrLCBwMisrKSB7CisgICAgICB3aGlsZSAoKnAxICYmIGlzc3BhY2UoKnAxKSkgcDErKzsKKyAg
ICAgIHdoaWxlICgqcDIgJiYgaXNzcGFjZSgqcDIpKSBwMisrOworICAgICAgaWYgKCpwMSAhPSAq
cDIpCisgICAgICAgICAgYnJlYWs7CisgIH0KKyAgaWYgKCpwMSAhPSAqcDIpCisgICAgICBnX2Fz
c2VydF9jbXBzdHIodDEsID09LCB0Mik7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3RXZWJraXRBdGtB
dXRvVGVzdChUZXN0RGF0YSAqZGF0YSkKK3sKKyAgICBXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3ID0g
V0VCS0lUX1dFQl9WSUVXKHdlYmtpdF93ZWJfdmlld19uZXcoKSk7CisgICAgZ19vYmplY3RfcmVm
X3Npbmsod2ViVmlldyk7CisgICAgR3RrQWxsb2NhdGlvbiBhbGxvY2F0aW9uID0geyAwLCAwLCA4
MDAsIDYwMCB9OworICAgIGd0a193aWRnZXRfc2l6ZV9hbGxvY2F0ZShHVEtfV0lER0VUKHdlYlZp
ZXcpLCAmYWxsb2NhdGlvbik7CisgICAgd2Via2l0X3dlYl92aWV3X2xvYWRfc3RyaW5nKHdlYlZp
ZXcsIGRhdGEtPmh0bWwsIDAsIDAsIDApOworICAgIEF0a09iamVjdCogb2JqZWN0ID0gZ2V0V2Vi
QXJlYU9iamVjdCh3ZWJWaWV3KTsKKyAgICBnX2Fzc2VydChvYmplY3QpOworICAgIC8vIE91ciBs
aXN0J3MgaGVhZCBpcyBudWxsLCBub3QgdXNlZC4KKyAgICBHTGlzdCAqbHN0VGV4dE9iaiA9IGdf
bGlzdF9hbGxvYygpOworICAgIGFwcGVuZFRleHRPYmplY3RzUmVjdXIobHN0VGV4dE9iaiwgb2Jq
ZWN0KTsKKyAgICBnY2hhciAqYWxsVGV4dCA9IGdfc3RyZHVwKCIiKTsKKyAgICBHTGlzdCAqcDsK
KyAgICBmb3IocCA9IGdfbGlzdF9uZXh0KGxzdFRleHRPYmopOyBwOyBwID0gZ19saXN0X25leHQo
cCkpIHsKKyAgICAgICAgZ19hc3NlcnQoKEF0a09iamVjdCopcC0+ZGF0YSk7CisgICAgICAgIGdj
aGFyICp0ZXh0ID0gYXRrX3RleHRfZ2V0X3RleHQoKEF0a1RleHQqKXAtPmRhdGEsIDAsIC0xKTsK
KyAgICAgICAgZ2NoYXIgKmFsbFRleHRQcmV2ID0gYWxsVGV4dDsKKyAgICAgICAgYWxsVGV4dCA9
IGdfc3RyZHVwX3ByaW50ZigiJXMlcyIsIGFsbFRleHRQcmV2LCB0ZXh0KTsKKyAgICAgICAgZ19m
cmVlKGFsbFRleHRQcmV2KTsKKyAgICAgICAgZ19mcmVlKHRleHQpOworICAgIH0KKyAgICBhc3Nl
cnRUZXh0RXF1YWxOb25XaGl0ZShhbGxUZXh0LCBkYXRhLT50ZXh0KTsKKworICAgIC8vIExldCdz
IGNvbm5lY3QgdGhlIHNpZ25hbCBldmVyeXdoZXJlLiBJdCBkb2VzIG5vdCBhbHdheXMgY29tZXMg
ZnJvbQorICAgIC8vIHRoZSBzYW1lIG9iamVjdCwgaW4gd2hpY2ggd2UgbW92ZSBjYXJldC4KKyAg
ICB0ZXN0V2Via2l0QXRrQ29ubmVjdFJlY3VyKG9iamVjdCwgInRleHQtY2FyZXQtbW92ZWQiLAor
ICAgICAgICBHX0NBTExCQUNLKHRleHRDYXJldE1vdmVkQ2FsbGJhY2spKTsKKyAgICBmb3IocCA9
IGdfbGlzdF9uZXh0KGxzdFRleHRPYmopOyBwOyBwID0gZ19saXN0X25leHQocCkpIHsKKyAgICAg
ICAgZ19hc3NlcnQoKEF0a09iamVjdCopcC0+ZGF0YSk7CisgICAgICAgIGludCBMID0gYXRrX3Rl
eHRfZ2V0X2NoYXJhY3Rlcl9jb3VudChBVEtfVEVYVChwLT5kYXRhKSk7CisgICAgICAgIGlmIChM
ID09IDApCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgZ2NoYXIgKnRleHQgPSBhdGtf
dGV4dF9nZXRfdGV4dChBVEtfVEVYVChwLT5kYXRhKSwgMCwgLTEpOworCisgICAgICAgIC8vIEZp
cnN0IHBsYWNlIGNhcmV0IGluc2lkZSwgYmVjYXVzZSBsYXRlciB3ZSB3YW50IHRvIHN0YXJ0IGZy
b20gMAorICAgICAgICAvLyBhbmQgZGV0ZWN0IGEgbW92ZW1lbnQuCisgICAgICAgIGdib29sZWFu
IHJlc3VsdCA9IGF0a190ZXh0X3NldF9jYXJldF9vZmZzZXQoQVRLX1RFWFQocC0+ZGF0YSksIDEp
OworICAgICAgICBnX2Fzc2VydF9jbXBpbnQocmVzdWx0LCA9PSwgVFJVRSk7CisKKyAgICAgICAg
Ly8gTm93IHdhbGsgYWxsIHRleHQuCisgICAgICAgIGludCBpOworICAgICAgICBmb3IgKGkgPSAw
OyBpIDw9IEw7IGkrKykgeworICAgICAgICAgICAgLy8gTGV0J3Mgc2tpcCBsaW5lIGVuZGluZ3Ms
IHRoZXkgZG9uJ3QgYmVoYXZlIGV4cGVjdGVkbHkuCisgICAgICAgICAgICBpZiAodGV4dFtpXSA9
PSAxMCkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIGdfZnJlZSh0ZXh0
Q2FyZXRNb3ZlZFJlc3VsdCk7CisgICAgICAgICAgICB0ZXh0Q2FyZXRNb3ZlZFJlc3VsdCA9IGdf
c3RyZHVwKG5vTW92ZVN0cik7CisgICAgICAgICAgICBpbnQgcmVzdWx0ID0gYXRrX3RleHRfc2V0
X2NhcmV0X29mZnNldChBVEtfVEVYVChwLT5kYXRhKSwgaSk7CisgICAgICAgICAgICBnX2Fzc2Vy
dF9jbXBpbnQocmVzdWx0LCA9PSwgVFJVRSk7CisgICAgICAgICAgICBpZiAoZ19zdHJjbXAwKHRl
eHRDYXJldE1vdmVkUmVzdWx0LCBub01vdmVTdHIpID09IDApIHsKKyAgICAgICAgICAgICAgICBw
cmludGYoImNhcmV0LW1vdmVkIG5vdCByZWNlaXZlZCBmb3IgdGV4dCAlcywgb2Zmc2V0ICVkLCBj
aGFyYWN0ZXI6JyVjJyAoJWQpXG4iLAorICAgICAgICAgICAgICAgICAgICB0ZXh0LCBpLCB0ZXh0
W2ldLCAoaW50KXRleHRbaV0pOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZ19hc3NlcnRf
Y21wc3RyKHRleHRDYXJldE1vdmVkUmVzdWx0LCAhPSwgbm9Nb3ZlU3RyKTsKKyAgICAgICAgfQor
ICAgICAgICBnX2ZyZWUodGV4dCk7CisgICAgfQorCisgICAgZm9yKHAgPSBnX2xpc3RfbmV4dChs
c3RUZXh0T2JqKTsgcDsgcCA9IGdfbGlzdF9uZXh0KHApKQorICAgICAgICBnX29iamVjdF91bnJl
ZihwLT5kYXRhKTsKKyAgICBnX2xpc3RfZnJlZShsc3RUZXh0T2JqKTsKKyAgICBnX2ZyZWUoYWxs
VGV4dCk7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3RXZWJraXRBdGtDYXJldEFCbG9jaygpCit7Cisg
ICAgdGVzdFdlYmtpdEF0a0F1dG9UZXN0KCZ0ZXN0RGF0YV9jYXJldEFCbG9jayk7Cit9CisKK3N0
YXRpYyB2b2lkIHRlc3RXZWJraXRBdGtDYXJldEFCbG9ja1NwYW5CbG9jaygpCit7CisgICAgdGVz
dFdlYmtpdEF0a0F1dG9UZXN0KCZ0ZXN0RGF0YV9jYXJldEFCbG9ja1NwYW5CbG9jayk7Cit9CisK
K3N0YXRpYyB2b2lkIHRlc3RXZWJraXRBdGtDYXJldEluQm9keSgpCit7CisgICAgdGVzdFdlYmtp
dEF0a0F1dG9UZXN0KCZ0ZXN0RGF0YV9jYXJldEluQm9keSk7Cit9CisKIHN0YXRpYyB2b2lkIHRl
c3RXZWJraXRBdGtDYXJldE9mZnNldHMoKQogewogICAgIFdlYktpdFdlYlZpZXcqIHdlYlZpZXcg
PSBXRUJLSVRfV0VCX1ZJRVcod2Via2l0X3dlYl92aWV3X25ldygpKTsKQEAgLTIwMyw2ICszNzEs
NyBAQAogICAgIGdfYXNzZXJ0X2NtcGludChvZmZzZXQsID09LCAyKTsKIAogICAgIGdfZnJlZSh0
ZXh0Q2FyZXRNb3ZlZFJlc3VsdCk7CisgICAgdGV4dENhcmV0TW92ZWRSZXN1bHQgPSBOVUxMOwog
CiAgICAgZ19vYmplY3RfdW5yZWYocGFyYWdyYXBoKTsKICAgICBnX29iamVjdF91bnJlZihsaW5r
KTsKQEAgLTE0NTUsNiArMTYyNCw5IEBACiAjZW5kaWYKIAogICAgIGdfdGVzdF9idWdfYmFzZSgi
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvIik7CisgICAgZ190ZXN0X2FkZF9mdW5jKCIvd2Via2l0
L2F0ay9jYXJldEFCbG9jayIsIHRlc3RXZWJraXRBdGtDYXJldEFCbG9jayk7CisgICAgZ190ZXN0
X2FkZF9mdW5jKCIvd2Via2l0L2F0ay9jYXJldEFCbG9ja1NwYW5CbG9jayIsIHRlc3RXZWJraXRB
dGtDYXJldEFCbG9ja1NwYW5CbG9jayk7CisgICAgZ190ZXN0X2FkZF9mdW5jKCIvd2Via2l0L2F0
ay9jYXJldEluQm9keSIsIHRlc3RXZWJraXRBdGtDYXJldEluQm9keSk7CiAgICAgZ190ZXN0X2Fk
ZF9mdW5jKCIvd2Via2l0L2F0ay9jYXJldE9mZnNldHMiLCB0ZXN0V2Via2l0QXRrQ2FyZXRPZmZz
ZXRzKTsKICAgICBnX3Rlc3RfYWRkX2Z1bmMoIi93ZWJraXQvYXRrL2NhcmV0T2Zmc2V0c0FuZEV4
dHJhbm91c1doaXRlU3BhY2VzIiwgdGVzdFdlYmtpdEF0a0NhcmV0T2Zmc2V0c0FuZEV4dHJhbm91
c1doaXRlU3BhY2VzKTsKICAgICBnX3Rlc3RfYWRkX2Z1bmMoIi93ZWJraXQvYXRrL2NvbWJvQm94
IiwgdGVzdFdlYmtpdEF0a0NvbWJvQm94KTsK
</data>

          </attachment>
      

    </bug>

</bugzilla>