<?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>132527</bug_id>
          
          <creation_ts>2014-05-03 12:43:15 -0700</creation_ts>
          <short_desc>AX: [ATK] [PATCH] add text-caret-moved signal to accessibilityController</short_desc>
          <delta_ts>2014-06-24 13:11:11 -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>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>aboxhall</cc>
    
    <cc>apinheiro</cc>
    
    <cc>cfleizach</cc>
    
    <cc>cgarcia</cc>
    
    <cc>commit-queue</cc>
    
    <cc>dmazzoni</cc>
    
    <cc>jcraig</cc>
    
    <cc>jdiggs</cc>
    
    <cc>k.czech</cc>
    
    <cc>mario</cc>
    
    <cc>samuel_white</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1006363</commentid>
    <comment_count>0</comment_count>
    <who name="Jarek Czekalski">jarekczek</who>
    <bug_when>2014-05-03 12:43:15 -0700</bug_when>
    <thetext>Mario&apos;s suggestions (in &quot;[webkit-gtk] testing text-caret-moved events&quot; thread) [1] made it easy to prepare the patch.

This patch could potentially break tests which use logAccessibilityEvents feature, but all 2 tests using it in gtk are anyway marked with Failure. Maybe this gets explained in thread &quot;[webkit-dev] why these tests are still marked Failure? r148002&quot; [2].

There are several possibilities to show the signal for logAccessibilityEvents() mode. I chose the way similar to what was in testatk.c [3], line 87. It displays for example:
Accessibility object emitted &quot;text-caret-moved = paragraph|4&quot; / Name: &quot;(No name)&quot; / Role: 71

[1] https://lists.webkit.org/pipermail/webkit-gtk/2014-May/001888.html
[2] https://lists.webkit.org/pipermail/webkit-dev/2014-May/026509.html
[3] https://trac.webkit.org/browser/releases/WebKitGTK/webkit-2.4.1/Tools/TestWebKitAPI/Tests/WebKitGtk/testatk.c</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1006364</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2014-05-03 12:43:27 -0700</bug_when>
    <thetext>&lt;rdar://problem/16805879&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1006365</commentid>
    <comment_count>2</comment_count>
      <attachid>230759</attachid>
    <who name="Jarek Czekalski">jarekczek</who>
    <bug_when>2014-05-03 12:50:09 -0700</bug_when>
    <thetext>Created attachment 230759
the patch, version 1.00</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1006919</commentid>
    <comment_count>3</comment_count>
      <attachid>230759</attachid>
    <who name="Mario Sanchez Prada">mario</who>
    <bug_when>2014-05-06 05:18:59 -0700</bug_when>
    <thetext>Comment on attachment 230759
the patch, version 1.00

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

Thanks for the patch. The idea looks good to me, although I think it would be nice if we could include a new layout test using this new feature together with the patch (e.g. migrating one of the unit tests in the old testatk.c file), to confirm it works and have it properly justified.

Also, now that the WebKitGTK+ port removed the WebKit1 API from trunk, I&apos;m not sure whether it makes sense to keep mirroring the changes from WKTR here.

The only reason would be the EFL port, but I think they pretty much use WebKit2 only these days (yet I&apos;m not sure). It would be nice if someone from EFL could answer that question (e.g. Krzysztof?)

See my comments below (setting r- for now)...

&gt; Tools/WebKitTestRunner/InjectedBundle/atk/AccessibilityNotificationHandlerAtk.cpp:93
&gt; +    AtkRole objectRole = atk_object_get_role(accessible);
&gt; +    const gchar* roleName = atk_role_get_name(objectRole);

Why do you need the role and the name of the object here? This variables are used only to set the value of signalValue, which will be used only to pass it to printAccessibilityEvent(), where the role will be retrieved and printed anyway

(Same comment apply to DRT implementation)

&gt; Tools/WebKitTestRunner/InjectedBundle/atk/AccessibilityNotificationHandlerAtk.cpp:122
&gt; +        signalValue.reset(g_strdup_printf(&quot;%s|%d&quot;,
&gt; +            roleName, g_value_get_int(&amp;paramValues[1])));

you don&apos;t need to emit the roleName explicitly here, just the value for the offset (the &quot;%d&quot;)

(Same comment apply to DRT implementation)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1006920</commentid>
    <comment_count>4</comment_count>
    <who name="Mario Sanchez Prada">mario</who>
    <bug_when>2014-05-06 05:19:49 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; [...]
&gt; Also, now that the WebKitGTK+ port removed the WebKit1 API from trunk, I&apos;m 
&gt; not sure whether it makes sense to keep mirroring the changes from WKTR here.
&gt; 
&gt; The only reason would be the EFL port, but I think they pretty much use 
&gt; WebKit2 only these days (yet I&apos;m not sure). It would be nice if someone
&gt; from EFL could answer that question (e.g. Krzysztof?)

Krzysztof, would you mind commenting on this?

Thanks!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1006942</commentid>
    <comment_count>5</comment_count>
    <who name="Jarek Czekalski">jarekczek</who>
    <bug_when>2014-05-06 06:46:01 -0700</bug_when>
    <thetext>Hi Mario,

Thank you for the review.

(In reply to comment #3)
&gt; &gt; Tools/WebKitTestRunner/InjectedBundle/atk/AccessibilityNotificationHandlerAtk.cpp:93
&gt; &gt; +    AtkRole objectRole = atk_object_get_role(accessible);
&gt; &gt; +    const gchar* roleName = atk_role_get_name(objectRole);
&gt; 
&gt; Why do you need the role and the name of the object here? This variables are used only to set the value of signalValue, which will be used only to pass it to printAccessibilityEvent(), where the role will be retrieved and printed anyway

Good catch. My intention was to pass signalValue as the 3rd parameter to event listener. But there is no 3rd parameter, I missed it.

In testatk.c we verify not only whether the signal was delivered, but if the reported offset is correct as well. I will try to provide a modification allowing to pass additional parameter to the handler.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1006954</commentid>
    <comment_count>6</comment_count>
    <who name="Krzysztof Czech">k.czech</who>
    <bug_when>2014-05-06 08:05:09 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; (In reply to comment #3)
&gt; &gt; [...]
&gt; &gt; Also, now that the WebKitGTK+ port removed the WebKit1 API from trunk, I&apos;m 
&gt; &gt; not sure whether it makes sense to keep mirroring the changes from WKTR here.
&gt; &gt; 
&gt; &gt; The only reason would be the EFL port, but I think they pretty much use 
&gt; &gt; WebKit2 only these days (yet I&apos;m not sure). It would be nice if someone
&gt; &gt; from EFL could answer that question (e.g. Krzysztof?)
&gt; 
&gt; Krzysztof, would you mind commenting on this?
&gt; 
&gt; Thanks!

I agree, we do not have to keep mirroring WKTR - DRT in terms of accessibility and I guess other things as well, but I&apos;m rather far from decide that we definitely should stop doing this.

Regarding accessibility, we concentrate on WebKit2.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1006959</commentid>
    <comment_count>7</comment_count>
    <who name="Mario Sanchez Prada">mario</who>
    <bug_when>2014-05-06 08:51:16 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; [...]
&gt; I agree, we do not have to keep mirroring WKTR - DRT in terms of accessibility 
&gt; and I guess other things as well, but I&apos;m rather far from decide that we 
&gt; definitely should stop doing this.
&gt; 
&gt; Regarding accessibility, we concentrate on WebKit2.

Then I think we should focus on WKTR and forget about DRT from now on for ATK accessibility related purposes, at least on trunk.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1009037</commentid>
    <comment_count>8</comment_count>
      <attachid>231399</attachid>
    <who name="Jarek Czekalski">jarekczek</who>
    <bug_when>2014-05-13 12:13:10 -0700</bug_when>
    <thetext>Created attachment 231399
caret-moved signal and caret offset tests

Hi Mario. This is bigger, as you suggested. Thanks in advance for your review!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1009209</commentid>
    <comment_count>9</comment_count>
    <who name="Mario Sanchez Prada">mario</who>
    <bug_when>2014-05-14 02:11:58 -0700</bug_when>
    <thetext>(In reply to comment #8)
&gt; Created an attachment (id=231399) [details]
&gt; caret-moved signal and caret offset tests
&gt; 
&gt; Hi Mario. This is bigger, as you suggested. Thanks in advance for your review!

Thanks for the patch Jarek, it definitely looks like a better approach after a quick glance over it!

Still, before I do a proper review, would you mind rebasing your patch against trunk and uploading it again? Asking that because the patch does not currently apply on trunk, which is preventing the style and EWS bots from running, which would be helpful if they did.

Once you do that, I promise I&apos;ll find time during this crazy week to review it properly :)

Thanks again!

PS: I&apos;ve tried to apply it locally to make sure it did not apply and this is the rejection that I got:

--- Source/WebCore/page/ViewportConfiguration.cpp       (revision 0)
+++ Source/WebCore/page/ViewportConfiguration.cpp       (working copy)
@@ -26,8 +26,10 @@
 #include &quot;config.h&quot;
 #include &quot;ViewportConfiguration.h&quot;

+#include &lt;WebCore/TextStream.h&gt;
 #include &lt;wtf/Assertions.h&gt;
 #include &lt;wtf/MathExtras.h&gt;
+#include &lt;wtf/text/CString.h&gt;

 #if PLATFORM(IOS)
 #include &quot;WebCoreSystemInterface.h&quot;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1009259</commentid>
    <comment_count>10</comment_count>
      <attachid>231455</attachid>
    <who name="Jarek Czekalski">jarekczek</who>
    <bug_when>2014-05-14 08:29:43 -0700</bug_when>
    <thetext>Created attachment 231455
caret-moved signal and caret offset tests

Mario,

Sorry for posting an outdated patch. I thought I was in non-changeable area. But AccessibilityUIElement.idl file is alive and it produced the conflict. Now it&apos;s clear. My box will finish build tomorrow, but I submit now to let bots check other ports, before you start working on that.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1009742</commentid>
    <comment_count>11</comment_count>
      <attachid>231455</attachid>
    <who name="Mario Sanchez Prada">mario</who>
    <bug_when>2014-05-16 04:21:57 -0700</bug_when>
    <thetext>Comment on attachment 231455
caret-moved signal and caret offset tests

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

Sorry for the delay, Jarek. This week is being crazy here, but I&apos;d rather review this now because next week will be even more complex :)

This patch is awesome, I&apos;m placing the r- flag now because there are some things that need fixing, but it seems to be indeed in the right direction. See my comments below...

&gt; LayoutTests/ChangeLog:8
&gt; +        * platform/gtk/accessibility/js-test-atk.js: Added, to place

I think it&apos;s ok to have a new file to place this helpers (and probably others that are used in different ATK tests) in a common place, but I&apos;d rather put it in a platform/gtk/resources directory, for consistency with what&apos;s done everywhere else. Also (and sorry for the bike shedding), I&apos;d rather name it something like atk-helpers.js or the like, not need to use a &quot;js-&quot; prefix in a .js file :)

&gt; LayoutTests/platform/gtk/accessibility/caret-offsets.html:5
&gt; +&lt;script src=&quot;js-test-atk.js&quot;&gt;&lt;/script&gt;

Remember to update this path if you do the change suggested above

&gt; LayoutTests/platform/gtk/accessibility/caret-offsets.html:9
&gt; +&lt;script&gt;
&gt; +descriptionText = &quot;This test is replicated from old file testatk.c and tests various scenarios&lt;br&gt;&quot; +
&gt; +                  &quot;of caret movement: setting caret offset and receiving text-caret-moved signal.&quot;;
&gt; +&lt;/script&gt;

We normally use the description() JS function for this purpose (see for instance accessibility/button-title-uses-inner-img-alt.html)

&gt; LayoutTests/platform/gtk/accessibility/caret-offsets.html:44
&gt; +if (window.layoutController) {

s/layoutController/testRunner (layoutController was the old name of the testRunner)

&gt; LayoutTests/platform/gtk/accessibility/caret-offsets.html:47
&gt; +if (window.layoutController) {
&gt; +    testRunner.overridePreference(&quot;WebKitEnableCaretBrowsing&quot;, true);
&gt; +    testRunner.dumpAsText();
&gt; +}

Could you move this &quot;if { ... }&quot; block after the functions? (to keep the functions at the beginning)?

&gt; LayoutTests/platform/gtk/accessibility/caret-offsets.html:53
&gt; +        caretMovedData += role + &apos;|&apos; + offset;

You are using caretMovedData as a global variable, so you should declare it with &quot;var caretMovedData&quot; outside every block and every function (not needed but good practice)

&gt; LayoutTests/platform/gtk/accessibility/caret-offsets.html:57
&gt; +function setCaretOffsetHelper(object, offset)

Perhaps naming this &apos;resetCaretOffsetForObject()&apos; would be clearer

&gt; LayoutTests/platform/gtk/accessibility/caret-offsets.html:81
&gt; +    /* Following tests are replicated from testatk.c file, functions
&gt; +    testWebkitAtkCaretOffsets()
&gt; +    testWebkitAtkCaretOffsetsAndExtranousWhiteSpaces()
&gt; +    that was present in webkit1. Removed from
&gt; +    trunk in r166977, so the last version was
&gt; +    https://trac.webkit.org/browser/trunk/Tools/TestWebKitAPI/Tests/WebKitGtk/testatk.c?rev=166976
&gt; +    What could not be verified in the same way:
&gt; +    1. Whether element implements ATK_TEXT. If setCaretOffset succeeds, it confirms
&gt; +       that element is text as well. But in cases when setCaretOffset must fail
&gt; +       I see no way to confirm it is text element.
&gt; +    2. Whether position is correct through a call to atk_text_get_caret_offset.
&gt; +       text-caret-moved signal value is tested instead.
&gt; +    Anyway these cases don&apos;t look crucial, so they are skipped.
&gt; +    */

I think this is a great comment to put in the LayoutTests/ChangeLog, but I&apos;m not sure you need to put it here because, as you mentioned, those cases are not crucial anyway :)

&gt; Tools/DumpRenderTree/atk/AccessibilityCallbacksAtk.cpp:62
&gt; +// Up to 2014 it was obligatory to mirror the changes from
&gt; +// WebKitTestRunner/InjectedBundle/atk/AccessibilityNotificationHandlerAtk.cpp,
&gt; +// but the habit has been dropped: https://bugs.webkit.org/show_bug.cgi?id=132527#c6

Again, I think this is a nice comment for the ChangeLog, but I wouldn&apos;t put it here since the reason is quite simple anyway: The WebKit1 versions of the GTK and EFL ports (the only ones using ATK) are no longer maintained upstream

&gt; Tools/WebKitTestRunner/InjectedBundle/AccessibilityUIElement.h:261
&gt; -    
&gt; +

Don&apos;t include this change (it&apos;s not related)

&gt; Tools/WebKitTestRunner/InjectedBundle/Bindings/AccessibilityUIElement.idl:-203
&gt; -    

Ditto.

&gt; Tools/WebKitTestRunner/InjectedBundle/atk/AccessibilityNotificationHandlerAtk.cpp:43
&gt; +WTF::Vector&lt;guint&gt; listenerIds;

Loved this change, but please keep the unsigned type instead of guint (we only use GLib types for public interfaces)

&gt; Tools/WebKitTestRunner/InjectedBundle/atk/AccessibilityNotificationHandlerAtk.cpp:143
&gt; +        int lastArgument = 1;
&gt; +        for (int i = 0; i &lt; extraArgs.size(); i++)
&gt; +            arguments[lastArgument += 1] = extraArgs[i];

Instead of doing this to keep the value of lastArgument outside the loop and use it later, you could use a while loop with only one iterator (e.g. &quot;currentArgument&quot;) and then use it later to know the last argument position (e.g. currentArgument+1).

If, however, you still prefer to use the for loop, please split that statement in too so you don&apos;t use the &apos;lastArgument += 1&apos; as the index for the array (that&apos;s not clear)

&gt; Tools/WebKitTestRunner/InjectedBundle/atk/AccessibilityNotificationHandlerAtk.cpp:-139
&gt; -

I think you can keep this line :)

&gt; Tools/WebKitTestRunner/InjectedBundle/atk/AccessibilityNotificationHandlerAtk.cpp:269
&gt; +    for (const char** signalName = signalNames; *signalName; signalName++) {

Thanks for doing this refactoring :)

&gt; Tools/WebKitTestRunner/InjectedBundle/atk/AccessibilityNotificationHandlerAtk.cpp:273
&gt; +            String message = String::format(&quot;atk_add_global_event_listener failed for signal %s\n&quot;,
&gt; +                *signalName);

One line only</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1009750</commentid>
    <comment_count>12</comment_count>
    <who name="Jarek Czekalski">jarekczek</who>
    <bug_when>2014-05-16 05:45:03 -0700</bug_when>
    <thetext>Hi Mario. Thank you for your comments. I have only one thing to discuss before I proceed with applying your suggestions. 

&gt;&gt; Tools/DumpRenderTree/atk/AccessibilityCallbacksAtk.cpp:62
&gt;&gt; +// Up to 2014 it was obligatory to mirror the changes from
&gt;&gt; +// WebKitTestRunner/InjectedBundle/atk/AccessibilityNotificationHandlerAtk.cpp,
&gt;&gt; +// but the habit has been dropped: https://bugs.webkit.org/show_bug.cgi?id=132527#c6

&gt;Again, I think this is a nice comment for the ChangeLog, but I wouldn&apos;t put it &gt;here since the reason is quite simple anyway: The WebKit1 versions of the GTK &gt;and EFL ports (the only ones using ATK) are no longer maintained upstream

Someone may notice similar things in these 2 places and I would like to help him by leaving a notice here. Now the files will differ significantly, but the argument still holds. And if we remove this comment, we will have no reference from this file&apos;s history (svn log) to the comment in Changelog.

Have a nice weekend!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1009970</commentid>
    <comment_count>13</comment_count>
      <attachid>231455</attachid>
    <who name="Jarek Czekalski">jarekczek</who>
    <bug_when>2014-05-17 07:29:00 -0700</bug_when>
    <thetext>Comment on attachment 231455
caret-moved signal and caret offset tests

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

Mario, except the thing I put yesterday there is only one more item that was not fully done along your suggestions. The rest of the hints is applied thoroughly.

Are there any additional changes needed to land it in 2.4? Because all I do is to fix the bugs in the branch containing webkit1.

&gt;&gt; Tools/WebKitTestRunner/InjectedBundle/atk/AccessibilityNotificationHandlerAtk.cpp:143
&gt;&gt; +            arguments[lastArgument += 1] = extraArgs[i];
&gt; 
&gt; Instead of doing this to keep the value of lastArgument outside the loop and use it later, you could use a while loop with only one iterator (e.g. &quot;currentArgument&quot;) and then use it later to know the last argument position (e.g. currentArgument+1).
&gt; 
&gt; If, however, you still prefer to use the for loop, please split that statement in too so you don&apos;t use the &apos;lastArgument += 1&apos; as the index for the array (that&apos;s not clear)

I find it clearer with &apos;i&apos;, so I only did the splitting.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1009971</commentid>
    <comment_count>14</comment_count>
      <attachid>231629</attachid>
    <who name="Jarek Czekalski">jarekczek</who>
    <bug_when>2014-05-17 07:30:05 -0700</bug_when>
    <thetext>Created attachment 231629
 caret-moved signal and caret offset tests v2.04</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1012382</commentid>
    <comment_count>15</comment_count>
      <attachid>231629</attachid>
    <who name="Mario Sanchez Prada">mario</who>
    <bug_when>2014-05-29 02:18:02 -0700</bug_when>
    <thetext>Comment on attachment 231629
 caret-moved signal and caret offset tests v2.04

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

Hi Jarek, apologies for the delayed response, but last week I&apos;ve been quite busy (and mostly offline) most of the time and could not devote time to this at all. Now I&apos;m back, and reviewing your patch again, which I think it&apos;s almost there. I just have a couple of comments/suggestions more.

See them below...

&gt; LayoutTests/ChangeLog:29
&gt; +        * platform/gtk/accessibility/caret-offsets.html: Added.

Sorry I haven&apos;t realized about this before, but I think that this file is actually too big (as it includes tests from both testWebkitAtkCaretOffsets() and testWebkitAtkCaretOffsetsAndExtraneousWhiteSpaces()). Could you better split it into two different .html files? Something like this: 

  - platform/gtk/accessibility/caret-offsets.html
  - platform/gtk/accessibility/caret-offsets-and-extraneous-white-spaces.html

&gt; Tools/WebKitTestRunner/InjectedBundle/atk/AccessibilityNotificationHandlerAtk.cpp:147
&gt;              // Listener for one element just gets one argument, the notification name.

This comment is obsolete now

&gt; Tools/WebKitTestRunner/InjectedBundle/atk/AccessibilityNotificationHandlerAtk.cpp:150
&gt; +                0, lastArgument + 1 - 1, arguments + 1, 0);

lastArgument + 1 - 1? That looks like a strange idiom, even if it&apos;s correct. I personally think something like this would be less cryptic:

 [...]

 size_t numOfExtraArgs = extraArgs.size();
 for (int i = 0; i &lt; numOfExtraArgs; i++)
     arguments[i + 2] = extraArgs[i];

 if (elementNotificationHandler != notificationHandlers.end()) {
     // Listener for one element. As arguments, it gets the notification name
     // plus any extra argument that must be needed to pass to the callback
     JSObjectCallAsFunction(jsContext,
         const_cast&lt;JSObjectRef&gt;(elementNotificationHandler-&gt;value-&gt;notificationFunctionCallback()),
         0, numOfExtraArgs + 1, arguments + 1, 0);

 [...]


What do you think?

&gt; Tools/WebKitTestRunner/InjectedBundle/atk/AccessibilityNotificationHandlerAtk.cpp:157
&gt; +                0, lastArgument + 1, arguments, 0);

If you agree with the proposed change above, then you&apos;d need to use numberOfExtraArgs + 2 here

&gt; Tools/WebKitTestRunner/InjectedBundle/atk/AccessibilityNotificationHandlerAtk.cpp:273
&gt; +        guint id = atk_add_global_event_listener(axObjectEventListener, *signalName);

Use non-glib types for basic data (e.g. unsigned instead of guint) for this kind of variables in private files

&gt; Tools/WebKitTestRunner/InjectedBundle/atk/AccessibilityNotificationHandlerAtk.cpp:278
&gt; +        if (!id) {
&gt; +            String message = String::format(&quot;atk_add_global_event_listener failed for signal %s\n&quot;, *signalName);
&gt; +            InjectedBundle::shared().outputText(message);
&gt; +        } else
&gt; +            listenerIds.append(id);

Could you make this just an &quot;if&quot; with an &quot;early continue&quot;?

  for (...) {
   [...]
   if (!id) {
       String message = String::format(&quot;atk_add_global_event_listener failed for signal %s\n&quot;, *signalName);
       InjectedBundle::shared().outputText(message);
       continue;
   }

   listenerIds.append(id);
  }</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1012446</commentid>
    <comment_count>16</comment_count>
      <attachid>231629</attachid>
    <who name="Jarek Czekalski">jarekczek</who>
    <bug_when>2014-05-29 09:38:14 -0700</bug_when>
    <thetext>Comment on attachment 231629
 caret-moved signal and caret offset tests v2.04

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

&gt;&gt; Tools/WebKitTestRunner/InjectedBundle/atk/AccessibilityNotificationHandlerAtk.cpp:150
&gt;&gt; +                0, lastArgument + 1 - 1, arguments + 1, 0);
&gt; 
&gt; lastArgument + 1 - 1? That looks like a strange idiom, even if it&apos;s correct. I personally think something like this would be less cryptic:
&gt; 
&gt;  [...]
&gt; 
&gt;  size_t numOfExtraArgs = extraArgs.size();
&gt;  for (int i = 0; i &lt; numOfExtraArgs; i++)
&gt;      arguments[i + 2] = extraArgs[i];
&gt; 
&gt;  if (elementNotificationHandler != notificationHandlers.end()) {
&gt;      // Listener for one element. As arguments, it gets the notification name
&gt;      // plus any extra argument that must be needed to pass to the callback
&gt;      JSObjectCallAsFunction(jsContext,
&gt;          const_cast&lt;JSObjectRef&gt;(elementNotificationHandler-&gt;value-&gt;notificationFunctionCallback()),
&gt;          0, numOfExtraArgs + 1, arguments + 1, 0);
&gt; 
&gt;  [...]
&gt; 
&gt; 
&gt; What do you think?

I think this is a good change. The comments were outdated indeed. Have a look at them once more before committing, because I rewrote them.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1012449</commentid>
    <comment_count>17</comment_count>
      <attachid>232251</attachid>
    <who name="Jarek Czekalski">jarekczek</who>
    <bug_when>2014-05-29 10:01:04 -0700</bug_when>
    <thetext>Created attachment 232251
caret-moved signal and caret offset tests v2.05

Hi Mario. No problem with the delay. I&apos;m attaching another version, incorporating your suggestions.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1012582</commentid>
    <comment_count>18</comment_count>
      <attachid>232251</attachid>
    <who name="Mario Sanchez Prada">mario</who>
    <bug_when>2014-05-30 02:14:14 -0700</bug_when>
    <thetext>Comment on attachment 232251
caret-moved signal and caret offset tests v2.05

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

Thanks for the new patch, it&apos;s almost there. Only a minor suggestion (in the ChangeLog, sorry!) and I think we are ready to give this a try.

(In reply to comment #16)
&gt; (From update of attachment 231629 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=231629&amp;action=review
&gt; [...]
&gt; The comments were outdated indeed. Have a look at them once more before committing, because I rewrote them.

I think the new comments are fine

&gt; LayoutTests/ChangeLog:30
&gt; +        * platform/gtk/accessibility/caret-offsets.html: Added.
&gt; +        * platform/gtk/accessibility/caret-offsets-expected.txt: Added.

You forgot to mention the new test caret-offsets-and-extraneous-white-spaces.html here. But that&apos;s the only thing I see in this patch at the moment so iy fyou could update this changelog and submit a new patch just with that change, I&apos;ll r+ and cq+ rightaway.

By the way, thanks a lot for splitting the original test in two anyway.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1012586</commentid>
    <comment_count>19</comment_count>
      <attachid>232286</attachid>
    <who name="Jarek Czekalski">jarekczek</who>
    <bug_when>2014-05-30 02:39:39 -0700</bug_when>
    <thetext>Created attachment 232286
caret-moved signal and caret offset tests v2.06

Mario, thank you for immediate and positive review!

How about pushing this to 2.4 branch?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1012589</commentid>
    <comment_count>20</comment_count>
      <attachid>232286</attachid>
    <who name="Mario Sanchez Prada">mario</who>
    <bug_when>2014-05-30 03:29:56 -0700</bug_when>
    <thetext>Comment on attachment 232286
caret-moved signal and caret offset tests v2.06

(In reply to comment #19)
&gt; Created an attachment (id=232286) [details]
&gt; caret-moved signal and caret offset tests v2.06
&gt; 
&gt; Mario, thank you for immediate and positive review!

No problem. Thanks for the quick response
 
&gt; How about pushing this to 2.4 branch?

Normally, only critical bugfixes are merged into the stable branch, and this changeset is related to improving test coverage (and testing tools!), so I don&apos;t think we should port it there.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1012593</commentid>
    <comment_count>21</comment_count>
      <attachid>232286</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-05-30 03:59:07 -0700</bug_when>
    <thetext>Comment on attachment 232286
caret-moved signal and caret offset tests v2.06

Clearing flags on attachment: 232286

Committed r169483: &lt;http://trac.webkit.org/changeset/169483&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1012594</commentid>
    <comment_count>22</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-05-30 03:59:12 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1012598</commentid>
    <comment_count>23</comment_count>
    <who name="Jarek Czekalski">jarekczek</who>
    <bug_when>2014-05-30 04:43:01 -0700</bug_when>
    <thetext>(In reply to comment #20)

&gt; &gt; How about pushing this to 2.4 branch?
&gt; 
&gt; Normally, only critical bugfixes are merged into the stable branch, and this changeset is related to improving test coverage (and testing tools!), so I don&apos;t think we should port it there.

Accessibility fixes will contain tests using this patch. How are we going to apply these fixes to 2.4, if we don&apos;t apply this patch?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1012601</commentid>
    <comment_count>24</comment_count>
    <who name="Mario Sanchez Prada">mario</who>
    <bug_when>2014-05-30 06:32:04 -0700</bug_when>
    <thetext>(In reply to comment #23)
&gt; (In reply to comment #20)
&gt; 
&gt; &gt; &gt; How about pushing this to 2.4 branch?
&gt; &gt; 
&gt; &gt; Normally, only critical bugfixes are merged into the stable branch, and this changeset is related to improving test coverage (and testing tools!), so I don&apos;t think we should port it there.
&gt; 
&gt; Accessibility fixes will contain tests using this patch. How are we going to apply these fixes to 2.4, if we don&apos;t apply this patch?

I see your point, but still this patch is not a bugfix per se, so I don&apos;t see why we should request to merge it into the 2.4 stable branch *now*.

It would be different if we had a bugfix that we wanted to merge in 2.4. If that&apos;s the case, and such a bugfix depends on this other patch, then we could request the inclusion of both the two patches (assuming they apply cleanly on top).

For merge requests in the 2.4 branch, see this wiki page:
http://trac.webkit.org/wiki/WebKitGTK/2.4.x</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1012609</commentid>
    <comment_count>25</comment_count>
    <who name="Jarek Czekalski">jarekczek</who>
    <bug_when>2014-05-30 07:40:48 -0700</bug_when>
    <thetext>(In reply to comment #24)
&gt;It would be different if we had a bugfix that we wanted to merge in 2.4.

Mario, could we make it clear: do we want the fixes for bug #130941 and bug #132349 (not yet ready) to be merged in 2.4?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1012611</commentid>
    <comment_count>26</comment_count>
    <who name="Mario Sanchez Prada">mario</who>
    <bug_when>2014-05-30 07:50:08 -0700</bug_when>
    <thetext>(In reply to comment #25)
&gt; (In reply to comment #24)
&gt; &gt;It would be different if we had a bugfix that we wanted to merge in 2.4.
&gt; 
&gt; Mario, could we make it clear: do we want the fixes for bug #130941 and bug #132349 (not yet ready) to be merged in 2.4?

I&apos;d say &quot;yes&quot;, but we need to make sure that the proposed list of patches apply cleanly on top of that branch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1012612</commentid>
    <comment_count>27</comment_count>
    <who name="Mario Sanchez Prada">mario</who>
    <bug_when>2014-05-30 08:02:02 -0700</bug_when>
    <thetext>(In reply to comment #26)
&gt; (In reply to comment #25)
&gt; &gt; (In reply to comment #24)
&gt; &gt; &gt;It would be different if we had a bugfix that we wanted to merge in 2.4.
&gt; &gt; 
&gt; &gt; Mario, could we make it clear: do we want the fixes for bug #130941 and bug #132349 (not yet ready) to be merged in 2.4?
&gt; 
&gt; I&apos;d say &quot;yes&quot;, but we need to make sure that the proposed list of patches apply cleanly on top of that branch.

Damm... I just found out that I missed two things while reviewing this patch, that caused two tests to get broken:

  accessibility/notification-listeners.html [ Failure ]
  accessibility/textarea-selected-text-range.html [ Failure ]

The first test is broken because of this:

+    const char* signalNames[] = {
+        &quot;ATK:AtkObject:state-change&quot;,
+        &quot;ATK:AtkObject:state-change&quot;,  // DUPLICATED
+        &quot;ATK:AtkObject:focus-event&quot;,
+        &quot;ATK:AtkObject:active-descendant-changed&quot;,
+        &quot;ATK:AtkObject:children-changed&quot;,
+        &quot;ATK:AtkObject:property-change&quot;,
+        &quot;ATK:AtkObject:visible-data-changed&quot;,
+        &quot;ATK:AtkDocument:load-complete&quot;,
+        &quot;ATK:AtkText:text-caret-moved&quot;,
+        0
+    };

The second test is broken because of this:

-void AccessibilityUIElement::setSelectedTextRange(unsigned location, unsigned length)
+bool AccessibilityUIElement::setSelectedTextRange(unsigned location, unsigned length)
 {
     if (!ATK_IS_TEXT(m_element.get()))
-        return;
+        return false;
+
+    if (length)
+        return atk_text_set_caret_offset(ATK_TEXT(m_element.get()), location);
 
-    atk_text_set_selection(ATK_TEXT(m_element.get()), 0, location, location + length);
+    return atk_text_set_selection(ATK_TEXT(m_element.get()), 0, location, location + length);
 }


It should be &quot;if (!length)&quot; not, &quot;if (length)&quot;. I&apos;ll propose a quick patch now...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1012613</commentid>
    <comment_count>28</comment_count>
    <who name="Mario Sanchez Prada">mario</who>
    <bug_when>2014-05-30 08:12:47 -0700</bug_when>
    <thetext>FWIW, the following patch fixes the wrong bits:
http://pastebin.com/ejzW7viS

I&apos;ve asked for a &quot;rubber stamp&quot; in #webkitgtk+ (as it&apos;s a simple thing) but if we don&apos;t get it approved today I&apos;m afraid the best thing to do would be to roll out the original patch and provide a new one with those bits corrected.

Still, the accessibility/textarea-selected-text-range.html test is giving a different output, but I believe that&apos;s because we are now using atk_text_set_caret_offset() for zero-length selections and so in that case a rebaseline would probably be fine.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1012617</commentid>
    <comment_count>29</comment_count>
    <who name="Mario Sanchez Prada">mario</who>
    <bug_when>2014-05-30 08:24:02 -0700</bug_when>
    <thetext>(In reply to comment #28)
&gt; FWIW, the following patch fixes the wrong bits:
&gt; http://pastebin.com/ejzW7viS
&gt; 
&gt; I&apos;ve asked for a &quot;rubber stamp&quot; in #webkitgtk+ (as it&apos;s a simple thing) but if
&gt; we don&apos;t get it approved today I&apos;m afraid the best thing to do would be to roll 
&gt; out the original patch and provide a new one with those bits corrected.

Rubber stamped patch landed here:
http://trac.webkit.org/changeset/169485</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1012665</commentid>
    <comment_count>30</comment_count>
    <who name="Jarek Czekalski">jarekczek</who>
    <bug_when>2014-05-30 12:47:39 -0700</bug_when>
    <thetext>(In reply to comment #27)
&gt; Damm... I just found out that I missed two things while reviewing this patch, that caused two tests to get broken:
&gt; 
&gt;   accessibility/notification-listeners.html [ Failure ]
&gt;   accessibility/textarea-selected-text-range.html [ Failure ]
&gt; [...]
&gt; The second test is broken because of this:
&gt; [...]
&gt; +    if (length)
&gt; +        return atk_text_set_caret_offset(ATK_TEXT(m_element.get()), 
[...]
&gt; It should be &quot;if (!length)&quot; not, &quot;if (length)&quot;. I&apos;ll propose a quick patch now...

I did that mistake during style fix. length == 0 would be more readable here (as in 2.00), but such expressions are banned. It&apos;s funny that it didn&apos;t affect my tests at all.

My fault, I&apos;m sorry. But please note that I was looking for a way to perform all tests: https://bugs.webkit.org/show_bug.cgi?id=131373#c3</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1012836</commentid>
    <comment_count>31</comment_count>
    <who name="Jarek Czekalski">jarekczek</who>
    <bug_when>2014-06-01 10:25:37 -0700</bug_when>
    <thetext>(In reply to comment #26)
&gt; &gt; Mario, could we make it clear: do we want the fixes for bug #130941 and bug #132349 (not yet ready) to be merged in 2.4?
&gt; 
&gt; I&apos;d say &quot;yes&quot;, but we need to make sure that the proposed list of patches apply cleanly on top of that branch.

Do I need to rebase those patches for 2.4? This patch does not apply cleanly. There were changes in Tools/WebKitTestRunner/InjectedBundle/Bindings/AccessibilityUIElement.idl</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1012922</commentid>
    <comment_count>32</comment_count>
    <who name="Mario Sanchez Prada">mario</who>
    <bug_when>2014-06-02 03:09:54 -0700</bug_when>
    <thetext>(In reply to comment #30)
&gt; (In reply to comment #27)
&gt; &gt; Damm... I just found out that I missed two things while reviewing this patch, that caused two tests to get broken:
&gt; &gt; 
&gt; &gt;   accessibility/notification-listeners.html [ Failure ]
&gt; &gt;   accessibility/textarea-selected-text-range.html [ Failure ]
&gt; &gt; [...]
&gt; &gt; The second test is broken because of this:
&gt; &gt; [...]
&gt; &gt; +    if (length)
&gt; &gt; +        return atk_text_set_caret_offset(ATK_TEXT(m_element.get()), 
&gt; [...]
&gt; &gt; It should be &quot;if (!length)&quot; not, &quot;if (length)&quot;. I&apos;ll propose a quick patch now...
&gt; 
&gt; I did that mistake during style fix. length == 0 would be more readable here (as in 2.00), but such expressions are banned. It&apos;s funny that it didn&apos;t affect my tests at all.
&gt; 
&gt; My fault, I&apos;m sorry. But please note that I was looking for a way to perform all tests: https://bugs.webkit.org/show_bug.cgi?id=131373#c3

No problem, it&apos;s fixed now. Only thing is that we need to remember to ask for merging that follow up patch when asking for integrating this into the stable branch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1012923</commentid>
    <comment_count>33</comment_count>
    <who name="Mario Sanchez Prada">mario</who>
    <bug_when>2014-06-02 03:14:30 -0700</bug_when>
    <thetext>(In reply to comment #31)
&gt; (In reply to comment #26)
&gt; &gt; &gt; Mario, could we make it clear: do we want the fixes for bug #130941 and bug #132349 (not yet ready) to be merged in 2.4?
&gt; &gt; 
&gt; &gt; I&apos;d say &quot;yes&quot;, but we need to make sure that the proposed list of patches apply cleanly on top of that branch.
&gt; 
&gt; Do I need to rebase those patches for 2.4? This patch does not apply cleanly.
&gt; There were changes in Tools/WebKitTestRunner/InjectedBundle/Bindings/AccessibilityUIElement.idl

If it&apos;s a simply rebase, I think Carlos can do it while merging, as he&apos;s the one usually taking care of this tasks.

I&apos;m adding him to CC now in case he wants to comment on this, although as I said, I would not propose to merge this patch before having the bugfixes depending on it ready.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1018051</commentid>
    <comment_count>34</comment_count>
    <who name="Jarek Czekalski">jarekczek</who>
    <bug_when>2014-06-24 12:33:56 -0700</bug_when>
    <thetext>(In reply to comment #29)
&gt; Rubber stamped patch landed here:
&gt; http://trac.webkit.org/changeset/169485

A note for merge time: the log message header in this revision comes from a different issue, it could be a mistake.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1018072</commentid>
    <comment_count>35</comment_count>
    <who name="Mario Sanchez Prada">mario</who>
    <bug_when>2014-06-24 13:11:11 -0700</bug_when>
    <thetext>(In reply to comment #34)
&gt; (In reply to comment #29)
&gt; &gt; Rubber stamped patch landed here:
&gt; &gt; http://trac.webkit.org/changeset/169485
&gt; 
&gt; A note for merge time: the log message header in this revision comes from a different issue, it could be a mistake.

Indeed it was a mistake, my mistake actually :/</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>230759</attachid>
            <date>2014-05-03 12:50:09 -0700</date>
            <delta_ts>2014-05-13 12:13:10 -0700</delta_ts>
            <desc>the patch, version 1.00</desc>
            <filename>caretmoved_1_00.patch</filename>
            <type>text/plain</type>
            <size>6860</size>
            <attacher name="Jarek Czekalski">jarekczek</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDE2NjQwNSkKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDIzIEBACisyMDE0LTA1LTAzICBKYXJlayBDemVrYWxza2kgIDxqYXJla2N6ZWtAcG9jenRh
Lm9uZXQucGw+CisKKyAgICAgICAgW0FUS10gQWRkZWQgbmV3IGFjY2Vzc2liaWxpdHkgc2lnbmFs
OiB0ZXh0LWNhcmV0LW1vdmVkCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xMzI1MjcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICB0ZXh0LWNhcmV0LW1vdmVkIHNpZ25hbCBpbiBhY2Nlc3NpYmlsaXR5Q29udHJv
bGxlciBpcyBuZWVkZWQgdG8KKyAgICAgICAgaW1wbGVtZW50IHRlc3RzIGZyb20gVG9vbHMvVGVz
dFdlYktpdEFQSS9UZXN0cy9XZWJLaXRHdGsvdGVzdGF0ay5jCisgICAgICAgIGFzIExheW91dFRl
c3RzLiBBZGQgdGhlIHNpZ25hbCB0byB0aGUgY29udHJvbGxlci4KKworICAgICAgICAqIFdlYktp
dFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvYXRrL0FjY2Vzc2liaWxpdHlOb3RpZmljYXRpb25I
YW5kbGVyQXRrLmNwcDoKKyAgICAgICAgKGF4T2JqZWN0RXZlbnRMaXN0ZW5lcik6IEFkZCBub3Rp
ZmljYXRpb24gbmFtZSBBWFRleHRDYXJldE1vdmVkLgorICAgICAgICAoV1RSOjpBY2Nlc3NpYmls
aXR5Tm90aWZpY2F0aW9uSGFuZGxlcjo6Y29ubmVjdEFjY2Vzc2liaWxpdHlDYWxsYmFja3MpOgor
ICAgICAgICBDb25uZWN0IGNhbGxiYWNrIHRvIG5ldyBsaXN0ZW5lciBmb3IgQVRLOkF0a1RleHQ6
dGV4dC1jYXJldC1tb3ZlZC4KKyAgICAgICAgKFdUUjo6QWNjZXNzaWJpbGl0eU5vdGlmaWNhdGlv
bkhhbmRsZXI6OmRpc2Nvbm5lY3RBY2Nlc3NpYmlsaXR5Q2FsbGJhY2tzKToKKyAgICAgICAgRGlz
Y29ubmVjdCBjYWxsYmFjayB0byB0aGUgbmV3IGxpc3RlbmVyLgorICAgICAgICAqIER1bXBSZW5k
ZXJUcmVlL2F0ay9BY2Nlc3NpYmlsaXR5Q2FsbGJhY2tzQXRrLmNwcDoKKyAgICAgICAgTWlycm9y
IHRoZSBjaGFuZ2VzIGZyb20gV2ViS2l0VGVzdFJ1bm5lciwgYXMgb3RoZXJzIGRvLgorCiAyMDE0
LTAzLTI4ICBHeXV5b3VuZyBLaW0gIDxneXV5b3VuZy5raW1Ac2Ftc3VuZy5jb20+CiAKICAgICAg
ICAgW0VGTF0gQnVtcCBnbGliIHZlcnNpb24gZnJvbSAyLjM2IHRvIDIuMzggCkluZGV4OiBUb29s
cy9EdW1wUmVuZGVyVHJlZS9hdGsvQWNjZXNzaWJpbGl0eUNhbGxiYWNrc0F0ay5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gVG9vbHMvRHVtcFJlbmRlclRyZWUvYXRrL0FjY2Vzc2liaWxpdHlDYWxsYmFja3NB
dGsuY3BwCShyZXZpc2lvbiAxNjY0MDUpCisrKyBUb29scy9EdW1wUmVuZGVyVHJlZS9hdGsvQWNj
ZXNzaWJpbGl0eUNhbGxiYWNrc0F0ay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU3LDYgKzU3LDcg
QEAgc3RhdGljIGd1aW50IGNoaWxkcmVuQ2hhbmdlZExpc3RlbmVySWQgPQogc3RhdGljIGd1aW50
IHByb3BlcnR5Q2hhbmdlZExpc3RlbmVySWQgPSAwOwogc3RhdGljIGd1aW50IHZpc2libGVEYXRh
Q2hhbmdlZExpc3RlbmVySWQgPSAwOwogc3RhdGljIGd1aW50IGxvYWRDb21wbGV0ZUxpc3RlbmVy
SWQgPSAwOworc3RhdGljIGd1aW50IHRleHRDYXJldE1vdmVkTGlzdGVuZXJJZCA9IDA7CiBzdGF0
aWMgTm90aWZpY2F0aW9uSGFuZGxlcnNNYXAgbm90aWZpY2F0aW9uSGFuZGxlcnM7CiBzdGF0aWMg
QWNjZXNzaWJpbGl0eU5vdGlmaWNhdGlvbkhhbmRsZXIqIGdsb2JhbE5vdGlmaWNhdGlvbkhhbmRs
ZXIgPSAwOwogCkBAIC05OSw2ICsxMDAsOCBAQCBzdGF0aWMgZ2Jvb2xlYW4gYXhPYmplY3RFdmVu
dExpc3RlbmVyKEdTCiAgICAgU3RyaW5nIG5vdGlmaWNhdGlvbk5hbWU7CiAKICAgICBnX3NpZ25h
bF9xdWVyeShzaWduYWxIaW50LT5zaWduYWxfaWQsICZzaWduYWxRdWVyeSk7CisgICAgQXRrUm9s
ZSBvYmplY3RSb2xlID0gYXRrX29iamVjdF9nZXRfcm9sZShhY2Nlc3NpYmxlKTsKKyAgICBjb25z
dCBnY2hhciogcm9sZU5hbWUgPSBhdGtfcm9sZV9nZXRfbmFtZShvYmplY3RSb2xlKTsKIAogICAg
IGlmICghZ19zdHJjbXAwKHNpZ25hbFF1ZXJ5LnNpZ25hbF9uYW1lLCAic3RhdGUtY2hhbmdlIikp
IHsKICAgICAgICAgc2lnbmFsTmFtZS5yZXNldChnX3N0cmR1cF9wcmludGYoInN0YXRlLWNoYW5n
ZTolcyIsIGdfdmFsdWVfZ2V0X3N0cmluZygmcGFyYW1WYWx1ZXNbMV0pKSk7CkBAIC0xMjMsNyAr
MTI2LDEyIEBAIHN0YXRpYyBnYm9vbGVhbiBheE9iamVjdEV2ZW50TGlzdGVuZXIoR1MKICAgICAg
ICAgICAgIG5vdGlmaWNhdGlvbk5hbWUgPSAiQVhWYWx1ZUNoYW5nZWQiOwogICAgIH0gZWxzZSBp
ZiAoIWdfc3RyY21wMChzaWduYWxRdWVyeS5zaWduYWxfbmFtZSwgImxvYWQtY29tcGxldGUiKSkK
ICAgICAgICAgbm90aWZpY2F0aW9uTmFtZSA9ICJBWExvYWRDb21wbGV0ZSI7Ci0gICAgZWxzZQor
ICAgIGVsc2UgaWYgKCFnX3N0cmNtcDAoc2lnbmFsUXVlcnkuc2lnbmFsX25hbWUsICJ0ZXh0LWNh
cmV0LW1vdmVkIikpIHsKKyAgICAgICAgbm90aWZpY2F0aW9uTmFtZSA9ICJBWFRleHRDYXJldE1v
dmVkIjsKKyAgICAgICAgc2lnbmFsTmFtZS5yZXNldChnX3N0cmR1cChzaWduYWxRdWVyeS5zaWdu
YWxfbmFtZSkpOworICAgICAgICBzaWduYWxWYWx1ZS5yZXNldChnX3N0cmR1cF9wcmludGYoIiVz
fCVkIiwKKyAgICAgICAgICAgIHJvbGVOYW1lLCBnX3ZhbHVlX2dldF9pbnQoJnBhcmFtVmFsdWVz
WzFdKSkpOworICAgIH0gZWxzZQogICAgICAgICBzaWduYWxOYW1lLnJlc2V0KGdfc3RyZHVwKHNp
Z25hbFF1ZXJ5LnNpZ25hbF9uYW1lKSk7CiAKICAgICBpZiAobG9nZ2luZ0FjY2Vzc2liaWxpdHlF
dmVudHMpCkBAIC0xODIsNiArMTkwLDcgQEAgdm9pZCBjb25uZWN0QWNjZXNzaWJpbGl0eUNhbGxi
YWNrcygpCiAgICAgcHJvcGVydHlDaGFuZ2VkTGlzdGVuZXJJZCA9IGF0a19hZGRfZ2xvYmFsX2V2
ZW50X2xpc3RlbmVyKGF4T2JqZWN0RXZlbnRMaXN0ZW5lciwgIkFUSzpBdGtPYmplY3Q6cHJvcGVy
dHktY2hhbmdlIik7CiAgICAgdmlzaWJsZURhdGFDaGFuZ2VkTGlzdGVuZXJJZCA9IGF0a19hZGRf
Z2xvYmFsX2V2ZW50X2xpc3RlbmVyKGF4T2JqZWN0RXZlbnRMaXN0ZW5lciwgIkFUSzpBdGtPYmpl
Y3Q6dmlzaWJsZS1kYXRhLWNoYW5nZWQiKTsKICAgICBsb2FkQ29tcGxldGVMaXN0ZW5lcklkID0g
YXRrX2FkZF9nbG9iYWxfZXZlbnRfbGlzdGVuZXIoYXhPYmplY3RFdmVudExpc3RlbmVyLCAiQVRL
OkF0a0RvY3VtZW50OmxvYWQtY29tcGxldGUiKTsKKyAgICB0ZXh0Q2FyZXRNb3ZlZExpc3RlbmVy
SWQgPSBhdGtfYWRkX2dsb2JhbF9ldmVudF9saXN0ZW5lcihheE9iamVjdEV2ZW50TGlzdGVuZXIs
ICJBVEs6QXRrVGV4dDp0ZXh0LWNhcmV0LW1vdmVkIik7CiAKICAgICAvLyBFbnN1cmUgdGhlIEF0
ayBpbnRlcmZhY2UgdHlwZXMgYXJlIHJlZ2lzdGVyZWQsIG90aGVyd2lzZQogICAgIC8vIHRoZSBB
dGtEb2N1bWVudCBzaWduYWwgaGFuZGxlcnMgYmVsb3cgd29uJ3QgZ2V0IHJlZ2lzdGVyZWQuCkBA
IC0yMjYsNiArMjM1LDEwIEBAIGJvb2wgZGlzY29ubmVjdEFjY2Vzc2liaWxpdHlDYWxsYmFja3Mo
KQogICAgICAgICBhdGtfcmVtb3ZlX2dsb2JhbF9ldmVudF9saXN0ZW5lcihsb2FkQ29tcGxldGVM
aXN0ZW5lcklkKTsKICAgICAgICAgbG9hZENvbXBsZXRlTGlzdGVuZXJJZCA9IDA7CiAgICAgfQor
ICAgIGlmICh0ZXh0Q2FyZXRNb3ZlZExpc3RlbmVySWQpIHsKKyAgICAgICAgYXRrX3JlbW92ZV9n
bG9iYWxfZXZlbnRfbGlzdGVuZXIodGV4dENhcmV0TW92ZWRMaXN0ZW5lcklkKTsKKyAgICAgICAg
dGV4dENhcmV0TW92ZWRMaXN0ZW5lcklkID0gMDsKKyAgICB9CiAKICAgICByZXR1cm4gdHJ1ZTsK
IH0KSW5kZXg6IFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvYXRrL0FjY2Vz
c2liaWxpdHlOb3RpZmljYXRpb25IYW5kbGVyQXRrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9X
ZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL2F0ay9BY2Nlc3NpYmlsaXR5Tm90aWZpY2F0
aW9uSGFuZGxlckF0ay5jcHAJKHJldmlzaW9uIDE2NjQwNSkKKysrIFRvb2xzL1dlYktpdFRlc3RS
dW5uZXIvSW5qZWN0ZWRCdW5kbGUvYXRrL0FjY2Vzc2liaWxpdHlOb3RpZmljYXRpb25IYW5kbGVy
QXRrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDYsNiArNDYsNyBAQCB1bnNpZ25lZCBjaGlsZHJl
bkNoYW5nZWRMaXN0ZW5lcklkID0gMDsKIHVuc2lnbmVkIHByb3BlcnR5Q2hhbmdlZExpc3RlbmVy
SWQgPSAwOwogdW5zaWduZWQgdmlzaWJsZURhdGFDaGFuZ2VkTGlzdGVuZXJJZCA9IDA7CiB1bnNp
Z25lZCBsb2FkQ29tcGxldGVMaXN0ZW5lcklkID0gMDsKK3Vuc2lnbmVkIHRleHRDYXJldE1vdmVk
TGlzdGVuZXJJZCA9IDA7CiBOb3RpZmljYXRpb25IYW5kbGVyc01hcCBub3RpZmljYXRpb25IYW5k
bGVyczsKIEFjY2Vzc2liaWxpdHlOb3RpZmljYXRpb25IYW5kbGVyKiBnbG9iYWxOb3RpZmljYXRp
b25IYW5kbGVyID0gbnVsbHB0cjsKIGJvb2wgbG9nZ2luZ0FjY2Vzc2liaWxpdHlFdmVudHMgPSBm
YWxzZTsKQEAgLTg4LDYgKzg5LDggQEAgZ2Jvb2xlYW4gYXhPYmplY3RFdmVudExpc3RlbmVyKEdT
aWduYWxJbgogICAgIGNvbnN0IGNoYXIqIG5vdGlmaWNhdGlvbk5hbWUgPSBudWxscHRyOwogCiAg
ICAgZ19zaWduYWxfcXVlcnkoc2lnbmFsSGludC0+c2lnbmFsX2lkLCAmc2lnbmFsUXVlcnkpOwor
ICAgIEF0a1JvbGUgb2JqZWN0Um9sZSA9IGF0a19vYmplY3RfZ2V0X3JvbGUoYWNjZXNzaWJsZSk7
CisgICAgY29uc3QgZ2NoYXIqIHJvbGVOYW1lID0gYXRrX3JvbGVfZ2V0X25hbWUob2JqZWN0Um9s
ZSk7CiAKICAgICBpZiAoIWdfc3RyY21wMChzaWduYWxRdWVyeS5zaWduYWxfbmFtZSwgInN0YXRl
LWNoYW5nZSIpKSB7CiAgICAgICAgIHNpZ25hbE5hbWUucmVzZXQoZ19zdHJkdXBfcHJpbnRmKCJz
dGF0ZS1jaGFuZ2U6JXMiLCBnX3ZhbHVlX2dldF9zdHJpbmcoJnBhcmFtVmFsdWVzWzFdKSkpOwpA
QCAtMTEyLDcgKzExNSwxMiBAQCBnYm9vbGVhbiBheE9iamVjdEV2ZW50TGlzdGVuZXIoR1NpZ25h
bEluCiAgICAgICAgICAgICBub3RpZmljYXRpb25OYW1lID0gIkFYVmFsdWVDaGFuZ2VkIjsKICAg
ICB9IGVsc2UgaWYgKCFnX3N0cmNtcDAoc2lnbmFsUXVlcnkuc2lnbmFsX25hbWUsICJsb2FkLWNv
bXBsZXRlIikpCiAgICAgICAgIG5vdGlmaWNhdGlvbk5hbWUgPSAiQVhMb2FkQ29tcGxldGUiOwot
ICAgIGVsc2UKKyAgICBlbHNlIGlmICghZ19zdHJjbXAwKHNpZ25hbFF1ZXJ5LnNpZ25hbF9uYW1l
LCAidGV4dC1jYXJldC1tb3ZlZCIpKSB7CisgICAgICAgIG5vdGlmaWNhdGlvbk5hbWUgPSAiQVhU
ZXh0Q2FyZXRNb3ZlZCI7CisgICAgICAgIHNpZ25hbE5hbWUucmVzZXQoZ19zdHJkdXAoc2lnbmFs
UXVlcnkuc2lnbmFsX25hbWUpKTsKKyAgICAgICAgc2lnbmFsVmFsdWUucmVzZXQoZ19zdHJkdXBf
cHJpbnRmKCIlc3wlZCIsCisgICAgICAgICAgICByb2xlTmFtZSwgZ192YWx1ZV9nZXRfaW50KCZw
YXJhbVZhbHVlc1sxXSkpKTsKKyAgICB9IGVsc2UKICAgICAgICAgc2lnbmFsTmFtZS5yZXNldChn
X3N0cmR1cChzaWduYWxRdWVyeS5zaWduYWxfbmFtZSkpOwogCiAgICAgaWYgKGxvZ2dpbmdBY2Nl
c3NpYmlsaXR5RXZlbnRzKQpAQCAtMjQ2LDYgKzI1NCw3IEBAIHZvaWQgQWNjZXNzaWJpbGl0eU5v
dGlmaWNhdGlvbkhhbmRsZXI6OmMKICAgICBwcm9wZXJ0eUNoYW5nZWRMaXN0ZW5lcklkID0gYXRr
X2FkZF9nbG9iYWxfZXZlbnRfbGlzdGVuZXIoYXhPYmplY3RFdmVudExpc3RlbmVyLCAiQVRLOkF0
a09iamVjdDpwcm9wZXJ0eS1jaGFuZ2UiKTsKICAgICB2aXNpYmxlRGF0YUNoYW5nZWRMaXN0ZW5l
cklkID0gYXRrX2FkZF9nbG9iYWxfZXZlbnRfbGlzdGVuZXIoYXhPYmplY3RFdmVudExpc3RlbmVy
LCAiQVRLOkF0a09iamVjdDp2aXNpYmxlLWRhdGEtY2hhbmdlZCIpOwogICAgIGxvYWRDb21wbGV0
ZUxpc3RlbmVySWQgPSBhdGtfYWRkX2dsb2JhbF9ldmVudF9saXN0ZW5lcihheE9iamVjdEV2ZW50
TGlzdGVuZXIsICJBVEs6QXRrRG9jdW1lbnQ6bG9hZC1jb21wbGV0ZSIpOworICAgIHRleHRDYXJl
dE1vdmVkTGlzdGVuZXJJZCA9IGF0a19hZGRfZ2xvYmFsX2V2ZW50X2xpc3RlbmVyKGF4T2JqZWN0
RXZlbnRMaXN0ZW5lciwgIkFUSzpBdGtUZXh0OnRleHQtY2FyZXQtbW92ZWQiKTsKIH0KIAogYm9v
bCBBY2Nlc3NpYmlsaXR5Tm90aWZpY2F0aW9uSGFuZGxlcjo6ZGlzY29ubmVjdEFjY2Vzc2liaWxp
dHlDYWxsYmFja3MoKQpAQCAtMjgzLDYgKzI5MiwxMCBAQCBib29sIEFjY2Vzc2liaWxpdHlOb3Rp
ZmljYXRpb25IYW5kbGVyOjpkCiAgICAgICAgIGF0a19yZW1vdmVfZ2xvYmFsX2V2ZW50X2xpc3Rl
bmVyKGxvYWRDb21wbGV0ZUxpc3RlbmVySWQpOwogICAgICAgICBsb2FkQ29tcGxldGVMaXN0ZW5l
cklkID0gMDsKICAgICB9CisgICAgaWYgKHRleHRDYXJldE1vdmVkTGlzdGVuZXJJZCkgeworICAg
ICAgICBhdGtfcmVtb3ZlX2dsb2JhbF9ldmVudF9saXN0ZW5lcih0ZXh0Q2FyZXRNb3ZlZExpc3Rl
bmVySWQpOworICAgICAgICB0ZXh0Q2FyZXRNb3ZlZExpc3RlbmVySWQgPSAwOworICAgIH0KICAg
ICByZXR1cm4gdHJ1ZTsKIH0KIAo=
</data>
<flag name="review"
          id="255147"
          type_id="1"
          status="-"
          setter="mario"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>231399</attachid>
            <date>2014-05-13 12:13:10 -0700</date>
            <delta_ts>2014-05-14 08:29:43 -0700</delta_ts>
            <desc>caret-moved signal and caret offset tests</desc>
            <filename>caretmoved_2_00.patch</filename>
            <type>text/plain</type>
            <size>28258</size>
            <attacher name="Jarek Czekalski">jarekczek</attacher>
            
              <data encoding="base64">SW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9D
aGFuZ2VMb2cJKHJldmlzaW9uIDE2ODI0MSkKKysrIExheW91dFRlc3RzL0NoYW5nZUxvZwkod29y
a2luZyBjb3B5KQpAQCAtMSwzICsxLDE2IEBACisyMDE0LTA1LTEyICBKYXJlayBDemVrYWxza2kg
IDxqYXJla2N6ZWtAcG9jenRhLm9uZXQucGw+CisKKyAgICAgICAgW0FUS10gQ29udmVydCBjYXJl
dCBvZmZzZXQgdGVzdHMgZnJvbSB0ZXN0YXRrLmMuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzI1MjcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICAqIHBsYXRmb3JtL2d0ay9hY2Nlc3NpYmlsaXR5L2pzLXRl
c3QtYXRrLmpzOiBBZGRlZCwgdG8gcGxhY2UKKyAgICAgICAgYXRrIGhlbHBlcnMgdGhlcmUuCisg
ICAgICAgIChzZXRDYXJldE9mZnNldCk6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL2d0ay9h
Y2Nlc3NpYmlsaXR5L2NhcmV0LW9mZnNldHMuaHRtbDogQWRkZWQuCisgICAgICAgICogcGxhdGZv
cm0vZ3RrL2FjY2Vzc2liaWxpdHkvY2FyZXQtb2Zmc2V0cy1leHBlY3RlZC50eHQ6IEFkZGVkLgor
CiAyMDE0LTA1LTAzICBZdXN1a2UgU3V6dWtpICA8dXRhdGFuZS50ZWFAZ21haWwuY29tPgogCiAg
ICAgICAgIENTUyBKSVQ6IG9wdGltaXplIGRpcmVjdCAvIGluZGlyZWN0IGFkamFjZW50J3MgdHJh
dmVyc2FsIGJhY2t0cmFja2luZwpJbmRleDogTGF5b3V0VGVzdHMvcGxhdGZvcm0vZ3RrL2FjY2Vz
c2liaWxpdHkvY2FyZXQtb2Zmc2V0cy1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0
VGVzdHMvcGxhdGZvcm0vZ3RrL2FjY2Vzc2liaWxpdHkvY2FyZXQtb2Zmc2V0cy1leHBlY3RlZC50
eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9ndGsvYWNjZXNzaWJpbGl0
eS9jYXJldC1vZmZzZXRzLWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDUz
IEBACitUaGlzIHRlc3QgaXMgcmVwbGljYXRlZCBmcm9tIG9sZCBmaWxlIHRlc3RhdGsuYyBhbmQg
dGVzdHMgdmFyaW91cyBzY2VuYXJpb3MKK29mIGNhcmV0IG1vdmVtZW50OiBzZXR0aW5nIGNhcmV0
IG9mZnNldCBhbmQgcmVjZWl2aW5nIHRleHQtY2FyZXQtbW92ZWQgc2lnbmFsLgorCitPbiBzdWNj
ZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBi
eSAiVEVTVCBDT01QTEVURSIuCisKKworQSB0ZXh0IGhlYWRlcgorCitBIHBhcmFncmFwaCB3aXRo
IGEgbGluayBpbiB0aGUgbWlkZGxlCisKK0EgbGlzdCBpdGVtCitCbG9jayBzcGFuIGluIGEgbGlz
dCBpdGVtCitJbmxpbmUgc3BhbiBpbiBhIGxpc3QgaXRlbQorQmxvY2sgc3BhbiBpbiBhIGxpbmsg
aW4gYSBsaXN0IGl0ZW0KK0lubGluZSBzcGFuIGluIGEgbGluayBpbiBhIGxpc3QgaXRlbQorICAK
K2EgdGFibGUgY2VsbAkJCitCbG9jayBzcGFuIGluIGEgbGluayBpbiBhIHRhYmxlIGNlbGwKK0lu
bGluZSBzcGFuIGluIGEgbGluayBpbiBhIHRhYmxlIGNlbGwJCitCbG9jayBzcGFuIGluIGEgdGFi
bGUgY2VsbAorSW5saW5lIHNwYW4gaW4gYSB0YWJsZSBjZWxsCitUaGlzIHBhcmFncmFwaCBpcyBi
b3JrZWQhCisKK1BBU1Mgcm9vdC5jaGlsZHJlbkNvdW50IGlzIDYKK1BBU1Mgc2V0Q2FyZXRPZmZz
ZXQoaDEsIDUpIGlzIHRydWUKK1BBU1MgY2FyZXRNb3ZlZERhdGEgaXMgIkhlYWRpbmd8NSIKK1BB
U1MgY2FyZXRNb3ZlZERhdGEgaXMgIlBhcmFncmFwaHw1IgorUEFTUyBjYXJldE1vdmVkRGF0YSBp
cyAiUGFyYWdyYXBofDIwIgorUEFTUyBjYXJldE1vdmVkRGF0YSBpcyAiUGFyYWdyYXBofDMwIgor
UEFTUyBzZXRDYXJldE9mZnNldChsaW5rLCA1KSBpcyB0cnVlCitQQVNTIGNhcmV0TW92ZWREYXRh
IGlzICJQYXJhZ3JhcGh8MTciCitQQVNTIGxpc3Qucm9sZSBpcyAiQVhSb2xlOiBBWExpc3QiCitQ
QVNTIGxpc3QuY2hpbGRyZW5Db3VudCBpcyAzCitQQVNTIHNldENhcmV0T2Zmc2V0KGxpc3RJdGVt
LCAxKSBpcyBmYWxzZQorUEFTUyBzZXRDYXJldE9mZnNldChsaXN0SXRlbSwgNSkgaXMgdHJ1ZQor
UEFTUyBjYXJldE1vdmVkRGF0YSBpcyAiTGlzdEl0ZW18MiIKK1BBU1MgY29tYm9Cb3gucm9sZSBp
cyAiQVhSb2xlOiBBWENvbWJvQm94IgorUEFTUyBtZW51UG9wdXAucm9sZSBpcyAiQVhSb2xlOiBB
WE1lbnUiCitQQVNTIGNvbWJvQm94T3B0aW9uLnJvbGUgaXMgIkFYUm9sZTogQVhNZW51SXRlbSIK
K1BBU1Mgc2V0Q2FyZXRPZmZzZXQoY29tYm9Cb3hPcHRpb24sIDEpIGlzIGZhbHNlCitQQVNTIHRl
eHRFbnRyeS5yb2xlIGlzICJBWFJvbGU6IEFYVGV4dEZpZWxkIgorUEFTUyBjYXJldE1vdmVkRGF0
YSBpcyAiVGV4dEZpZWxkfDUiCitQQVNTIHRhYmxlLnJvbGUgaXMgIkFYUm9sZTogQVhUYWJsZSIK
K1BBU1MgdGFibGUuY2hpbGRyZW5Db3VudCBpcyA0CitQQVNTIHRhYmxlQ2VsbC5yb2xlIGlzICJB
WFJvbGU6IEFYQ2VsbCIKK1BBU1MgY2FyZXRNb3ZlZERhdGEgaXMgIkNlbGx8MiIKK1BBU1MgYm9y
a2VkVGV4dExlbmd0aCBpcyAyNQorUEFTUyBjYXJldE1vdmVkRGF0YSBpcyAiUGFyYWdyYXBofDI0
IgorUEFTUyBjYXJldE1vdmVkRGF0YSBpcyAiUGFyYWdyYXBofDI1IgorUEFTUyBzdWNjZXNzZnVs
bHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKSW5kZXg6IExheW91dFRlc3RzL3Bs
YXRmb3JtL2d0ay9hY2Nlc3NpYmlsaXR5L2NhcmV0LW9mZnNldHMuaHRtbAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9ndGsvYWNjZXNzaWJpbGl0eS9jYXJldC1vZmZzZXRzLmh0
bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9ndGsvYWNjZXNzaWJpbGl0
eS9jYXJldC1vZmZzZXRzLmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxNTQgQEAKKzwh
RE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vSUVURi8vRFREIEhUTUwvL0VOIj4KKzxodG1sPgorPGhl
YWQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vLi4vcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3Nj
cmlwdD4KKzxzY3JpcHQgc3JjPSJqcy10ZXN0LWF0ay5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0Pgor
ZGVzY3JpcHRpb25UZXh0ID0gIlRoaXMgdGVzdCBpcyByZXBsaWNhdGVkIGZyb20gb2xkIGZpbGUg
dGVzdGF0ay5jIGFuZCB0ZXN0cyB2YXJpb3VzIHNjZW5hcmlvczxicj4iICsKKyAgICAgICAgICAg
ICAgICAgICJvZiBjYXJldCBtb3ZlbWVudDogc2V0dGluZyBjYXJldCBvZmZzZXQgYW5kIHJlY2Vp
dmluZyB0ZXh0LWNhcmV0LW1vdmVkIHNpZ25hbC4iOworPC9zY3JpcHQ+Cis8L2hlYWQ+CisKKzxi
b2R5IGlkPSJib2R5Ij4KKzxoMSBpZD0nZmlyc3RDaGlsZCc+QSB0ZXh0IGhlYWRlcjwvaDE+CisK
KzxwPkEgcGFyYWdyYXBoIDxhIGhyZWY9J2h0dHA6Ly9mb28uYmFyLmJhei8nPndpdGggYSBsaW5r
PC9hPiBpbiB0aGUgbWlkZGxlPC9wPgorCis8b2w+CisgIDxsaT5BIGxpc3QgaXRlbTwvbGk+Cisg
IDxsaT48c3BhbiBzdHlsZT0nZGlzcGxheTpibG9jazsnPkJsb2NrIHNwYW4gaW4gYSBsaXN0IGl0
ZW08L3NwYW4+PHNwYW4+SW5saW5lIHNwYW4gaW4gYSBsaXN0IGl0ZW08L3NwYW4+PC9saT4KKyAg
PGxpPjxhIGhyZWY9J2Zvbyc+PHNwYW4gc3R5bGU9J2Rpc3BsYXk6YmxvY2s7Jz5CbG9jayBzcGFu
IGluIGEgbGluayBpbiBhIGxpc3QgaXRlbTwvc3Bhbj48c3Bhbj5JbmxpbmUgc3BhbiBpbiBhIGxp
bmsgaW4gYSBsaXN0IGl0ZW08L3NwYW4+PC9hPjwvbGk+Cis8L29sPgorCis8c2VsZWN0PjxvcHRp
b24gc2VsZWN0ZWQgdmFsdWU9J2Zvbyc+QW4gb3B0aW9uIGluIGEgY29tYm8gYm94PC9vcHRpb24+
PC9zZWxlY3Q+CisKKzxpbnB1dCB0eXBlPSd0ZXh0JyBuYW1lPSdmb28nIHZhbHVlPSdmb28gYmFy
IGJheicgLz4KKworPHRhYmxlPgorICA8dHI+CisgICAgPHRkPmEgdGFibGUgY2VsbDwvdGQ+Cisg
ICAgPHRkPjwvdGQ+CisgICAgPHRkPjxhIGhyZWY9J2Zvbyc+PHNwYW4gc3R5bGU9J2Rpc3BsYXk6
YmxvY2s7Jz5CbG9jayBzcGFuIGluIGEgbGluayBpbiBhIHRhYmxlIGNlbGw8L3NwYW4+PHNwYW4+
SW5saW5lIHNwYW4gaW4gYSBsaW5rIGluIGEgdGFibGUgY2VsbDwvc3Bhbj48L2E+PC90ZD4KKyAg
ICA8dGQ+PHNwYW4gc3R5bGU9J2Rpc3BsYXk6YmxvY2s7Jz5CbG9jayBzcGFuIGluIGEgdGFibGUg
Y2VsbDwvc3Bhbj48c3Bhbj5JbmxpbmUgc3BhbiBpbiBhIHRhYmxlIGNlbGw8L3NwYW4+PC90ZD4K
KyAgPC90cj4KKzwvdGFibGU+CisKKzxwPlRoaXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
cGFyYWdyYXBoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpcworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvcmtlZCE8L3A+CisKKzxkaXYgaWQ9
ImNvbnNvbGUiPjwvZGl2PgorCis8c2NyaXB0PgoraWYgKHdpbmRvdy5sYXlvdXRDb250cm9sbGVy
KSB7CisgICAgdGVzdFJ1bm5lci5vdmVycmlkZVByZWZlcmVuY2UoIldlYktpdEVuYWJsZUNhcmV0
QnJvd3NpbmciLCB0cnVlKTsKKyAgICB0ZXN0UnVubmVyLmR1bXBBc1RleHQoKTsKK30KKworZnVu
Y3Rpb24gZ2xvYmFsTGlzdGVuZXIob2JqZWN0LCBuYW1lLCBvZmZzZXQpCit7CisgICAgdmFyIHJv
bGUgPSBvYmplY3Qucm9sZS5yZXBsYWNlKCdBWFJvbGU6IEFYJywgJycpOworICAgIGlmIChuYW1l
ID09ICdBWFRleHRDYXJldE1vdmVkJykgeworICAgICAgICBjYXJldE1vdmVkRGF0YSArPSByb2xl
ICsgJ3wnICsgb2Zmc2V0OworICAgIH0KK30KKworZnVuY3Rpb24gc2V0Q2FyZXRPZmZzZXRIZWxw
ZXIob2JqZWN0LCBvZmZzZXQpCit7CisgICAgY2FyZXRNb3ZlZERhdGEgPSAnJzsKKyAgICBzZXRD
YXJldE9mZnNldChvYmplY3QsIG9mZnNldCk7Cit9CisKK2lmICh3aW5kb3cuYWNjZXNzaWJpbGl0
eUNvbnRyb2xsZXIpIHsKKyAgICBhY2Nlc3NpYmlsaXR5Q29udHJvbGxlci5hZGROb3RpZmljYXRp
b25MaXN0ZW5lcihnbG9iYWxMaXN0ZW5lcik7CisgICAgcm9vdCA9IGFjY2Vzc2liaWxpdHlDb250
cm9sbGVyLmFjY2Vzc2libGVFbGVtZW50QnlJZCgnZmlyc3RDaGlsZCcpLnBhcmVudEVsZW1lbnQo
KTsKKyAgICBzaG91bGRCZSgncm9vdC5jaGlsZHJlbkNvdW50JywgJzYnKTsKKworICAgIC8qIEZv
bGxvd2luZyB0ZXN0cyBhcmUgcmVwbGljYXRlZCBmcm9tIHRlc3RhdGsuYyBmaWxlLCBmdW5jdGlv
bnMKKyAgICB0ZXN0V2Via2l0QXRrQ2FyZXRPZmZzZXRzKCkKKyAgICB0ZXN0V2Via2l0QXRrQ2Fy
ZXRPZmZzZXRzQW5kRXh0cmFub3VzV2hpdGVTcGFjZXMoKQorICAgIHRoYXQgd2FzIHByZXNlbnQg
aW4gd2Via2l0MS4gUmVtb3ZlZCBmcm9tCisgICAgdHJ1bmsgaW4gcjE2Njk3Nywgc28gdGhlIGxh
c3QgdmVyc2lvbiB3YXMKKyAgICBodHRwczovL3RyYWMud2Via2l0Lm9yZy9icm93c2VyL3RydW5r
L1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0R3RrL3Rlc3RhdGsuYz9yZXY9MTY2OTc2
CisgICAgV2hhdCBjb3VsZCBub3QgYmUgdmVyaWZpZWQgaW4gdGhlIHNhbWUgd2F5OgorICAgIDEu
IFdoZXRoZXIgZWxlbWVudCBpbXBsZW1lbnRzIEFUS19URVhULiBJZiBzZXRDYXJldE9mZnNldCBz
dWNjZWVkcywgaXQgY29uZmlybXMKKyAgICAgICB0aGF0IGVsZW1lbnQgaXMgdGV4dCBhcyB3ZWxs
LiBCdXQgaW4gY2FzZXMgd2hlbiBzZXRDYXJldE9mZnNldCBtdXN0IGZhaWwKKyAgICAgICBJIHNl
ZSBubyB3YXkgdG8gY29uZmlybSBpdCBpcyB0ZXh0IGVsZW1lbnQuCisgICAgMi4gV2hldGhlciBw
b3NpdGlvbiBpcyBjb3JyZWN0IHRocm91Z2ggYSBjYWxsIHRvIGF0a190ZXh0X2dldF9jYXJldF9v
ZmZzZXQuCisgICAgICAgdGV4dC1jYXJldC1tb3ZlZCBzaWduYWwgdmFsdWUgaXMgdGVzdGVkIGlu
c3RlYWQuCisgICAgQW55d2F5IHRoZXNlIGNhc2VzIGRvbid0IGxvb2sgY3J1Y2lhbCwgc28gdGhl
eSBhcmUgc2tpcHBlZC4KKyAgICAqLworCisgICAgLyogSXQgc2hvdWxkIGJlIHBvc3NpYmxlIHRv
IHBsYWNlIHRoZSBjYXJldCBpbnNpZGUgYSBoZWFkZXIuICovCisgICAgaDEgPSByb290LmNoaWxk
QXRJbmRleCgwKTsKKyAgICBjYXJldE1vdmVkRGF0YSA9ICcnOworICAgIHNob3VsZEJlVHJ1ZSgn
c2V0Q2FyZXRPZmZzZXQoaDEsIDUpJyk7CisgICAgc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCdjYXJl
dE1vdmVkRGF0YScsICdIZWFkaW5nfDUnKTsKKworICAgIC8qIEl0IHNob3VsZCBiZSBwb3NzaWJs
ZSB0byBwbGFjZSB0aGUgY2FyZXQgaW5zaWRlIGEgcGFyYWdyYXBoIGFuZCBhIGxpbmsuICovCisg
ICAgcDEgPSByb290LmNoaWxkQXRJbmRleCgxKTsKKyAgICBzZXRDYXJldE9mZnNldEhlbHBlcihw
MSwgNSk7CisgICAgc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCdjYXJldE1vdmVkRGF0YScsICdQYXJh
Z3JhcGh8NScpOworICAgIHNldENhcmV0T2Zmc2V0SGVscGVyKHAxLCAyMCk7CisgICAgc2hvdWxk
QmVFcXVhbFRvU3RyaW5nKCdjYXJldE1vdmVkRGF0YScsICdQYXJhZ3JhcGh8MjAnKTsKKyAgICBz
ZXRDYXJldE9mZnNldEhlbHBlcihwMSwgMzApOworICAgIHNob3VsZEJlRXF1YWxUb1N0cmluZygn
Y2FyZXRNb3ZlZERhdGEnLCAnUGFyYWdyYXBofDMwJyk7CisgICAgbGluayA9IHAxLmNoaWxkQXRJ
bmRleCgwKTsKKyAgICBjYXJldE1vdmVkRGF0YSA9ICcnOworICAgIHNob3VsZEJlVHJ1ZSgnc2V0
Q2FyZXRPZmZzZXQobGluaywgNSknKTsKKyAgICAvKiBQb3NpdGlvbnMgaW5zaWRlIGxpbmtzIGFy
ZSByZXBvcnRlZCByZWxhdGl2ZSB0byB0aGUgcGFyYWdyYXBoLiAqLworICAgIHNob3VsZEJlRXF1
YWxUb1N0cmluZygnY2FyZXRNb3ZlZERhdGEnLCAnUGFyYWdyYXBofDE3Jyk7CisKKyAgICBsaXN0
ID0gcm9vdC5jaGlsZEF0SW5kZXgoMik7CisgICAgc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCdsaXN0
LnJvbGUnLCAnQVhSb2xlOiBBWExpc3QnKTsKKyAgICBzaG91bGRCZSgnbGlzdC5jaGlsZHJlbkNv
dW50JywgJzMnKTsKKyAgICBsaXN0SXRlbSA9IGxpc3QuY2hpbGRBdEluZGV4KDIpOworICAgIC8q
IEl0J3Mgbm90IHBvc3NpYmxlIHRvIHBsYWNlIHRoZSBjYXJldCBpbnNpZGUgYW4gaXRlbSdzIG1h
cmtlci4gKi8KKyAgICBzaG91bGRCZSgnc2V0Q2FyZXRPZmZzZXQobGlzdEl0ZW0sIDEpJywgJ2Zh
bHNlJyk7CisgICAgLyogSXQgc2hvdWxkIGJlIHBvc3NpYmxlIHRvIHBsYWNlIHRoZSBjYXJldCBp
bnNpZGUgYW4gaXRlbSdzIHRleHQuICovCisgICAgY2FyZXRNb3ZlZERhdGEgPSAnJzsKKyAgICBz
aG91bGRCZSgnc2V0Q2FyZXRPZmZzZXQobGlzdEl0ZW0sIDUpJywgJ3RydWUnKTsKKyAgICBzaG91
bGRCZUVxdWFsVG9TdHJpbmcoJ2NhcmV0TW92ZWREYXRhJywgJ0xpc3RJdGVtfDInKTsKKworICAg
IHBhbmVsID0gcm9vdC5jaGlsZEF0SW5kZXgoMyk7CisgICAgY29tYm9Cb3ggPSBwYW5lbC5jaGls
ZEF0SW5kZXgoMCk7CisgICAgc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCdjb21ib0JveC5yb2xlJywg
J0FYUm9sZTogQVhDb21ib0JveCcpOworICAgIG1lbnVQb3B1cCA9IGNvbWJvQm94LmNoaWxkQXRJ
bmRleCgwKTsKKyAgICBzaG91bGRCZUVxdWFsVG9TdHJpbmcoJ21lbnVQb3B1cC5yb2xlJywgJ0FY
Um9sZTogQVhNZW51Jyk7CisgICAgY29tYm9Cb3hPcHRpb24gPSBtZW51UG9wdXAuY2hpbGRBdElu
ZGV4KDApOworICAgIHNob3VsZEJlRXF1YWxUb1N0cmluZygnY29tYm9Cb3hPcHRpb24ucm9sZScs
ICdBWFJvbGU6IEFYTWVudUl0ZW0nKTsKKyAgICAvKiBJdCdzIG5vdCBwb3NzaWJsZSB0byBwbGFj
ZSB0aGUgY2FyZXQgaW5zaWRlIGFuIG9wdGlvbiBmb3IgYSBjb21ib2JveC4gKi8KKyAgICBzaG91
bGRCZSgnc2V0Q2FyZXRPZmZzZXQoY29tYm9Cb3hPcHRpb24sIDEpJywgJ2ZhbHNlJyk7CisgICAg
dGV4dEVudHJ5ID0gcGFuZWwuY2hpbGRBdEluZGV4KDEpOworICAgIHNob3VsZEJlRXF1YWxUb1N0
cmluZygndGV4dEVudHJ5LnJvbGUnLCAnQVhSb2xlOiBBWFRleHRGaWVsZCcpOworICAgIHNldENh
cmV0T2Zmc2V0SGVscGVyKHRleHRFbnRyeSwgNSk7CisgICAgc2hvdWxkQmVFcXVhbFRvU3RyaW5n
KCdjYXJldE1vdmVkRGF0YScsICdUZXh0RmllbGR8NScpOworCisgICAgdGFibGUgPSByb290LmNo
aWxkQXRJbmRleCg0KTsKKyAgICBzaG91bGRCZUVxdWFsVG9TdHJpbmcoJ3RhYmxlLnJvbGUnLCAn
QVhSb2xlOiBBWFRhYmxlJyk7CisgICAgc2hvdWxkQmUoJ3RhYmxlLmNoaWxkcmVuQ291bnQnLCAn
NCcpOworICAgIHRhYmxlQ2VsbCA9IHRhYmxlLmNoaWxkQXRJbmRleCgwKTsKKyAgICBzaG91bGRC
ZUVxdWFsVG9TdHJpbmcoJ3RhYmxlQ2VsbC5yb2xlJywgJ0FYUm9sZTogQVhDZWxsJyk7CisgICAg
c2V0Q2FyZXRPZmZzZXRIZWxwZXIodGFibGVDZWxsLCAyKTsKKyAgICBzaG91bGRCZUVxdWFsVG9T
dHJpbmcoJ2NhcmV0TW92ZWREYXRhJywgJ0NlbGx8MicpOworCisgICAgYm9ya2VkID0gcm9vdC5j
aGlsZEF0SW5kZXgoNSk7CisgICAgcHJlZml4ID0gJ0FYVmFsdWU6ICcKKyAgICBzaG91bGRCZVRy
dWVRdWlldCgnYm9ya2VkLnN0cmluZ1ZhbHVlLnN1YnN0cmluZygwLCA5KSA9PSAiJyArIHByZWZp
eCArICciJyk7CisgICAgYm9ya2VkVGV4dExlbmd0aCA9IGJvcmtlZC5zdHJpbmdWYWx1ZS5sZW5n
dGggLSBwcmVmaXgubGVuZ3RoCisgICAgc2hvdWxkQmUoJ2JvcmtlZFRleHRMZW5ndGgnLCAnMjUn
KTsKKyAgICBzZXRDYXJldE9mZnNldEhlbHBlcihib3JrZWQsIGJvcmtlZFRleHRMZW5ndGggLSAx
KTsKKyAgICBzaG91bGRCZUVxdWFsVG9TdHJpbmcoJ2NhcmV0TW92ZWREYXRhJywgJ1BhcmFncmFw
aHwyNCcpOworICAgIHNldENhcmV0T2Zmc2V0SGVscGVyKGJvcmtlZCwgYm9ya2VkVGV4dExlbmd0
aCk7CisgICAgc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCdjYXJldE1vdmVkRGF0YScsICdQYXJhZ3Jh
cGh8MjUnKTsKKworICAgIGRlc2NFbGVtID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgicCIpOwor
ICAgIGRlc2NFbGVtLmlkID0gJ2Rlc2NyaXB0aW9uJzsKKyAgICBkb2N1bWVudC5ib2R5Lmluc2Vy
dEJlZm9yZShkZXNjRWxlbSwgZG9jdW1lbnQuYm9keS5jaGlsZE5vZGVzLml0ZW0oMCkpOworICAg
IGRlc2NyaXB0aW9uKGRlc2NyaXB0aW9uVGV4dCk7Cit9Cis8L3NjcmlwdD4KKzxzY3JpcHQgc3Jj
PSIuLi8uLi8uLi9yZXNvdXJjZXMvanMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KKzwvYm9keT4K
KzwvaHRtbD4KSW5kZXg6IExheW91dFRlc3RzL3BsYXRmb3JtL2d0ay9hY2Nlc3NpYmlsaXR5L2pz
LXRlc3QtYXRrLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3BsYXRmb3JtL2d0ay9hY2Nl
c3NpYmlsaXR5L2pzLXRlc3QtYXRrLmpzCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvcGxh
dGZvcm0vZ3RrL2FjY2Vzc2liaWxpdHkvanMtdGVzdC1hdGsuanMJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSw0IEBACitmdW5jdGlvbiBzZXRDYXJldE9mZnNldChhY2Nlc3NpYmxlVGV4dCwgb2Zm
c2V0KQoreworICAgIHJldHVybiBhY2Nlc3NpYmxlVGV4dC5zZXRTZWxlY3RlZFRleHRSYW5nZShv
ZmZzZXQsIDApOworfQpJbmRleDogVG9vbHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xz
L0NoYW5nZUxvZwkocmV2aXNpb24gMTY4MjQxKQorKysgVG9vbHMvQ2hhbmdlTG9nCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDMgKzEsMzcgQEAKKzIwMTQtMDUtMTIgIEphcmVrIEN6ZWthbHNraSAgPGph
cmVrY3pla0Bwb2N6dGEub25ldC5wbD4KKworICAgICAgICBbQVRLXSBBZGRlZCBuZXcgYWNjZXNz
aWJpbGl0eSBzaWduYWw6IHRleHQtY2FyZXQtbW92ZWQuCisgICAgICAgIE1ha2UgQWNjZXNzaWJp
bGl0eVVJRWxlbWVudC5zZXRTZWxlY3RlZFRleHRSYW5nZSB3b3JrCisgICAgICAgIGFzIGF0a190
ZXh0X3NldF9jYXJldF9vZmZzZXQgd2hlbiBnaXZlbiBvZmZzZXQgPT0gMC4KKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzMjUyNworCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIHRleHQtY2FyZXQtbW92ZWQgc2ln
bmFsIGluIGFjY2Vzc2liaWxpdHlDb250cm9sbGVyIGlzIG5lZWRlZCB0bworICAgICAgICBpbXBs
ZW1lbnQgdGVzdHMgZnJvbSBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEd0ay90ZXN0
YXRrLmMKKyAgICAgICAgYXMgTGF5b3V0VGVzdHMuIEFkZCB0aGUgc2lnbmFsIHRvIHRoZSBjb250
cm9sbGVyLgorCisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9CaW5k
aW5ncy9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50LmlkbCwKKyAgICAgICAgKiBXZWJLaXRUZXN0UnVu
bmVyL0luamVjdGVkQnVuZGxlL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnQuY3BwLAorICAgICAgICAq
IFdlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvQWNjZXNzaWJpbGl0eVVJRWxlbWVudC5o
OgorICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvaW9zL0FjY2Vzc2li
aWxpdHlVSUVsZW1lbnRJT1MubW06CisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9JbmplY3Rl
ZEJ1bmRsZS9tYWMvQWNjZXNzaWJpbGl0eVVJRWxlbWVudE1hYy5tbToKKyAgICAgICAgKHNldFNl
bGVjdGVkVGV4dFJhbmdlKTogQ2hhbmdlIHJldHVybiB0eXBlIHRvIGJvb2wuCisgICAgICAgICog
V2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9hdGsvQWNjZXNzaWJpbGl0eVVJRWxlbWVu
dEF0ay5jcHA6CisgICAgICAgIChzZXRTZWxlY3RlZFRleHRSYW5nZSk6IENhbGwgYXRrX3RleHRf
c2V0X2NhcmV0X29mZnNldCBhbmQgcmV0dXJuIGJvb2wuCisgICAgICAgICogV2ViS2l0VGVzdFJ1
bm5lci9JbmplY3RlZEJ1bmRsZS9hdGsvQWNjZXNzaWJpbGl0eU5vdGlmaWNhdGlvbkhhbmRsZXJB
dGsuY3BwOgorICAgICAgICAoYXhPYmplY3RFdmVudExpc3RlbmVyKTogQWRkIG5vdGlmaWNhdGlv
biBuYW1lIEFYVGV4dENhcmV0TW92ZWQsIGFsbG93CisgICAgICAgIGZvciBleHRyYSBhcmd1bWVu
dHMgcGFzc2VkIHRvIGhhbmRsZXIgYW5kIHVzZSBpdCBmb3IgdGV4dC1jYXJldC1tb3ZlZCBvZmZz
ZXQuCisgICAgICAgIChXVFI6OkFjY2Vzc2liaWxpdHlOb3RpZmljYXRpb25IYW5kbGVyOjpjb25u
ZWN0QWNjZXNzaWJpbGl0eUNhbGxiYWNrcyk6CisgICAgICAgIENvbm5lY3QgY2FsbGJhY2sgdG8g
bmV3IGxpc3RlbmVyIGZvciBBVEs6QXRrVGV4dDp0ZXh0LWNhcmV0LW1vdmVkLgorICAgICAgICBS
ZWZhY3RvciBzbyB0aGF0IGZhaWx1cmVzIGJlIHJlcG9ydGVkLgorICAgICAgICBJbml0aWFsaXpl
IGF0ayBpbnRlcmZhY2VzIGJlZm9yZSB0cnlpbmcgdG8gY29ubmVjdCB0byB0aGVtLCBzZWUKKyAg
ICAgICAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTcyOTkyMgor
ICAgICAgICAoV1RSOjpBY2Nlc3NpYmlsaXR5Tm90aWZpY2F0aW9uSGFuZGxlcjo6ZGlzY29ubmVj
dEFjY2Vzc2liaWxpdHlDYWxsYmFja3MpOgorICAgICAgICBTaW1wbGlmeSBjb2RlIGJ5IHVzaW5n
IGEgdmVjdG9yIGluIHBsYWNlIG9mIGRvemVuIHZhcmlhYmxlcy4KKyAgICAgICAgKiBEdW1wUmVu
ZGVyVHJlZS9hdGsvQWNjZXNzaWJpbGl0eUNhbGxiYWNrc0F0ay5jcHA6CisgICAgICAgIENvbW1l
bnQgYWJvdXQgbm90IHN5bmNocm9uaXppbmcgd2l0aCBhY2Nlc3NpYmlsaXR5Q29udHJvbGxlci4K
KwogMjAxNC0wNS0wMiAgTWFyayBSb3dlICA8bXJvd2VAYXBwbGUuY29tPgogCiAgICAgICAgIDxo
dHRwczovL3dlYmtpdC5vcmcvYi8xMzI1MDU+IE1ha2UgaXQgcG9zc2libGUgdG8gdGVsbCBjb3B5
LXdlYmtpdGxpYnJhcmllcy10by1wcm9kdWN0LWRpcmVjdG9yeSB3aGljaCBPUyBYIHZlcnNpb24g
dG8gY29weSBmb3IKSW5kZXg6IFRvb2xzL0R1bXBSZW5kZXJUcmVlL2F0ay9BY2Nlc3NpYmlsaXR5
Q2FsbGJhY2tzQXRrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9EdW1wUmVuZGVyVHJlZS9hdGsv
QWNjZXNzaWJpbGl0eUNhbGxiYWNrc0F0ay5jcHAJKHJldmlzaW9uIDE2ODI0MSkKKysrIFRvb2xz
L0R1bXBSZW5kZXJUcmVlL2F0ay9BY2Nlc3NpYmlsaXR5Q2FsbGJhY2tzQXRrLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNTcsNiArNTcsOSBAQAogc3RhdGljIGd1aW50IHByb3BlcnR5Q2hhbmdlZExp
c3RlbmVySWQgPSAwOwogc3RhdGljIGd1aW50IHZpc2libGVEYXRhQ2hhbmdlZExpc3RlbmVySWQg
PSAwOwogc3RhdGljIGd1aW50IGxvYWRDb21wbGV0ZUxpc3RlbmVySWQgPSAwOworLy8gVXAgdG8g
MjAxNCBpdCB3YXMgb2JsaWdhdG9yeSB0byBtaXJyb3IgdGhlIGNoYW5nZXMgZnJvbQorLy8gV2Vi
S2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9hdGsvQWNjZXNzaWJpbGl0eU5vdGlmaWNhdGlv
bkhhbmRsZXJBdGsuY3BwLAorLy8gYnV0IHRoZSBoYWJpdCBoYXMgYmVlbiBkcm9wcGVkOiBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTMyNTI3I2M2CiBzdGF0aWMgTm90
aWZpY2F0aW9uSGFuZGxlcnNNYXAgbm90aWZpY2F0aW9uSGFuZGxlcnM7CiBzdGF0aWMgQWNjZXNz
aWJpbGl0eU5vdGlmaWNhdGlvbkhhbmRsZXIqIGdsb2JhbE5vdGlmaWNhdGlvbkhhbmRsZXIgPSAw
OwogCkluZGV4OiBUb29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0FjY2Vzc2li
aWxpdHlVSUVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIv
SW5qZWN0ZWRCdW5kbGUvQWNjZXNzaWJpbGl0eVVJRWxlbWVudC5jcHAJKHJldmlzaW9uIDE2ODI0
MSkKKysrIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvQWNjZXNzaWJpbGl0
eVVJRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE3Miw3ICsxNzIsNyBAQAogSlNSZXRh
aW5QdHI8SlNTdHJpbmdSZWY+IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnJhbmdlRm9yTGluZShp
bnQpIHsgcmV0dXJuIDA7IH0KIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBBY2Nlc3NpYmlsaXR5
VUlFbGVtZW50OjpyYW5nZUZvclBvc2l0aW9uKGludCwgaW50KSB7IHJldHVybiAwOyB9CiBKU1Jl
dGFpblB0cjxKU1N0cmluZ1JlZj4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6Ym91bmRzRm9yUmFu
Z2UodW5zaWduZWQsIHVuc2lnbmVkKSB7IHJldHVybiAwOyB9Ci12b2lkIEFjY2Vzc2liaWxpdHlV
SUVsZW1lbnQ6OnNldFNlbGVjdGVkVGV4dFJhbmdlKHVuc2lnbmVkLCB1bnNpZ25lZCkgeyB9Citi
b29sIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnNldFNlbGVjdGVkVGV4dFJhbmdlKHVuc2lnbmVk
LCB1bnNpZ25lZCkgeyByZXR1cm4gZmFsc2U7IH0KIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBB
Y2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpzdHJpbmdGb3JSYW5nZSh1bnNpZ25lZCwgdW5zaWduZWQp
IHsgcmV0dXJuIDA7IH0KIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBBY2Nlc3NpYmlsaXR5VUlF
bGVtZW50OjphdHRyaWJ1dGVkU3RyaW5nRm9yUmFuZ2UodW5zaWduZWQsIHVuc2lnbmVkKSB7IHJl
dHVybiAwOyB9CiBib29sIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmF0dHJpYnV0ZWRTdHJpbmdS
YW5nZUlzTWlzc3BlbGxlZCh1bnNpZ25lZCwgdW5zaWduZWQpIHsgcmV0dXJuIGZhbHNlOyB9Cklu
ZGV4OiBUb29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0FjY2Vzc2liaWxpdHlV
SUVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVk
QnVuZGxlL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnQuaAkocmV2aXNpb24gMTY4MjQxKQorKysgVG9v
bHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50
LmgJKHdvcmtpbmcgY29weSkKQEAgLTIwMiw3ICsyMDIsNyBAQAogICAgIEpTUmV0YWluUHRyPEpT
U3RyaW5nUmVmPiByYW5nZUZvckxpbmUoaW50KTsKICAgICBKU1JldGFpblB0cjxKU1N0cmluZ1Jl
Zj4gcmFuZ2VGb3JQb3NpdGlvbihpbnQgeCwgaW50IHkpOwogICAgIEpTUmV0YWluUHRyPEpTU3Ry
aW5nUmVmPiBib3VuZHNGb3JSYW5nZSh1bnNpZ25lZCBsb2NhdGlvbiwgdW5zaWduZWQgbGVuZ3Ro
KTsKLSAgICB2b2lkIHNldFNlbGVjdGVkVGV4dFJhbmdlKHVuc2lnbmVkIGxvY2F0aW9uLCB1bnNp
Z25lZCBsZW5ndGgpOworICAgIGJvb2wgc2V0U2VsZWN0ZWRUZXh0UmFuZ2UodW5zaWduZWQgbG9j
YXRpb24sIHVuc2lnbmVkIGxlbmd0aCk7CiAgICAgSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IHN0
cmluZ0ZvclJhbmdlKHVuc2lnbmVkIGxvY2F0aW9uLCB1bnNpZ25lZCBsZW5ndGgpOwogICAgIEpT
UmV0YWluUHRyPEpTU3RyaW5nUmVmPiBhdHRyaWJ1dGVkU3RyaW5nRm9yUmFuZ2UodW5zaWduZWQg
bG9jYXRpb24sIHVuc2lnbmVkIGxlbmd0aCk7CiAgICAgYm9vbCBhdHRyaWJ1dGVkU3RyaW5nUmFu
Z2VJc01pc3NwZWxsZWQodW5zaWduZWQgbG9jYXRpb24sIHVuc2lnbmVkIGxlbmd0aCk7CkBAIC0y
NTgsNyArMjU4LDcgQEAKICAgICBib29sIGFkZE5vdGlmaWNhdGlvbkxpc3RlbmVyKEpTVmFsdWVS
ZWYgZnVuY3Rpb25DYWxsYmFjayk7CiAgICAgLy8gTWFrZSBzdXJlIHlvdSBjYWxsIHJlbW92ZSwg
YmVjYXVzZSB5b3UgY2FuJ3QgcmVseSBvbiBvYmplY3RzIGJlaW5nIGRlYWxsb2NhdGVkIGluIGEg
dGltZWx5IGZhc2hpb24uCiAgICAgYm9vbCByZW1vdmVOb3RpZmljYXRpb25MaXN0ZW5lcigpOwot
ICAgIAorCiBwcml2YXRlOgogICAgIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQoUGxhdGZvcm1VSUVs
ZW1lbnQpOwogICAgIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQoY29uc3QgQWNjZXNzaWJpbGl0eVVJ
RWxlbWVudCYpOwpJbmRleDogVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9C
aW5kaW5ncy9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50LmlkbAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9X
ZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0JpbmRpbmdzL0FjY2Vzc2liaWxpdHlVSUVs
ZW1lbnQuaWRsCShyZXZpc2lvbiAxNjgyNDEpCisrKyBUb29scy9XZWJLaXRUZXN0UnVubmVyL0lu
amVjdGVkQnVuZGxlL0JpbmRpbmdzL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnQuaWRsCSh3b3JraW5n
IGNvcHkpCkBAIC0xNjEsNyArMTYxLDcgQEAKICAgICBbUGFzc0NvbnRleHRdIHVuc2lnbmVkIGlu
dCB1aUVsZW1lbnRDb3VudEZvclNlYXJjaFByZWRpY2F0ZShBY2Nlc3NpYmlsaXR5VUlFbGVtZW50
IHN0YXJ0RWxlbWVudCwgYm9vbGVhbiBpc0RpcmVjdGlvbk5leHQsIG9iamVjdCBzZWFyY2hLZXks
IERPTVN0cmluZyBzZWFyY2hUZXh0LCBib29sZWFuIHZpc2libGVPbmx5LCBib29sZWFuIGltbWVk
aWF0ZURlc2NlbmRhbnRzT25seSk7CiAgICAgW1Bhc3NDb250ZXh0XSBBY2Nlc3NpYmlsaXR5VUlF
bGVtZW50IHVpRWxlbWVudEZvclNlYXJjaFByZWRpY2F0ZShBY2Nlc3NpYmlsaXR5VUlFbGVtZW50
IHN0YXJ0RWxlbWVudCwgYm9vbGVhbiBpc0RpcmVjdGlvbk5leHQsIG9iamVjdCBzZWFyY2hLZXks
IERPTVN0cmluZyBzZWFyY2hUZXh0LCBib29sZWFuIHZpc2libGVPbmx5LCBib29sZWFuIGltbWVk
aWF0ZURlc2NlbmRhbnRzT25seSk7CiAgICAgW1Bhc3NDb250ZXh0XSBET01TdHJpbmcgc2VsZWN0
VGV4dFdpdGhDcml0ZXJpYShET01TdHJpbmcgYW1iaWd1aXR5UmVzb2x1dGlvbiwgb2JqZWN0IHNl
YXJjaFN0cmluZ3MsIERPTVN0cmluZyByZXBsYWNlbWVudFN0cmluZyk7Ci0gICAgdm9pZCBzZXRT
ZWxlY3RlZFRleHRSYW5nZSh1bnNpZ25lZCBsb25nIGxvY2F0aW9uLCB1bnNpZ25lZCBsb25nIGxl
bmd0aCk7CisgICAgYm9vbGVhbiBzZXRTZWxlY3RlZFRleHRSYW5nZSh1bnNpZ25lZCBsb25nIGxv
Y2F0aW9uLCB1bnNpZ25lZCBsb25nIGxlbmd0aCk7CiAKICAgICAvLyBTY3JvbGwgYXJlYSBhdHRy
aWJ1dGVzLgogICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50IGhv
cml6b250YWxTY3JvbGxiYXI7CkBAIC0yMDAsNiArMjAwLDUgQEAKICAgICAvLyBOb3RpZmljYXRp
b24gc3VwcG9ydC4KICAgICBib29sZWFuIGFkZE5vdGlmaWNhdGlvbkxpc3RlbmVyKG9iamVjdCBj
YWxsYmFja0Z1bmN0aW9uKTsKICAgICBib29sZWFuIHJlbW92ZU5vdGlmaWNhdGlvbkxpc3RlbmVy
KCk7Ci0gICAgCiB9OwogCkluZGV4OiBUb29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVu
ZGxlL2F0ay9BY2Nlc3NpYmlsaXR5Tm90aWZpY2F0aW9uSGFuZGxlckF0ay5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9hdGsvQWNjZXNzaWJp
bGl0eU5vdGlmaWNhdGlvbkhhbmRsZXJBdGsuY3BwCShyZXZpc2lvbiAxNjgyNDEpCisrKyBUb29s
cy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL2F0ay9BY2Nlc3NpYmlsaXR5Tm90aWZp
Y2F0aW9uSGFuZGxlckF0ay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5LDYgKzI5LDcgQEAKICNp
bmNsdWRlIDxXZWJLaXQyL1dLQnVuZGxlUGFnZS5oPgogI2luY2x1ZGUgPFdlYktpdDIvV0tCdW5k
bGVQYWdlUHJpdmF0ZS5oPgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8d3Rm
L1ZlY3Rvci5oPgogI2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dVbmlxdWVQdHIuaD4KICNpbmNsdWRl
IDx3dGYvdGV4dC9DU3RyaW5nLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CkBA
IC0zOSwxMyArNDAsNyBAQAogCiB0eXBlZGVmIEhhc2hNYXA8QXRrT2JqZWN0KiwgQWNjZXNzaWJp
bGl0eU5vdGlmaWNhdGlvbkhhbmRsZXIqPiBOb3RpZmljYXRpb25IYW5kbGVyc01hcDsKIAotdW5z
aWduZWQgc3RhdGVDaGFuZ2VMaXN0ZW5lcklkID0gMDsKLXVuc2lnbmVkIGZvY3VzRXZlbnRMaXN0
ZW5lcklkID0gMDsKLXVuc2lnbmVkIGFjdGl2ZURlc2NlbmRhbnRDaGFuZ2VkTGlzdGVuZXJJZCA9
IDA7Ci11bnNpZ25lZCBjaGlsZHJlbkNoYW5nZWRMaXN0ZW5lcklkID0gMDsKLXVuc2lnbmVkIHBy
b3BlcnR5Q2hhbmdlZExpc3RlbmVySWQgPSAwOwotdW5zaWduZWQgdmlzaWJsZURhdGFDaGFuZ2Vk
TGlzdGVuZXJJZCA9IDA7Ci11bnNpZ25lZCBsb2FkQ29tcGxldGVMaXN0ZW5lcklkID0gMDsKK1dU
Rjo6VmVjdG9yPGd1aW50PiBsaXN0ZW5lcklkczsKIE5vdGlmaWNhdGlvbkhhbmRsZXJzTWFwIG5v
dGlmaWNhdGlvbkhhbmRsZXJzOwogQWNjZXNzaWJpbGl0eU5vdGlmaWNhdGlvbkhhbmRsZXIqIGds
b2JhbE5vdGlmaWNhdGlvbkhhbmRsZXIgPSBudWxscHRyOwogYm9vbCBsb2dnaW5nQWNjZXNzaWJp
bGl0eUV2ZW50cyA9IGZhbHNlOwpAQCAtODIsMTAgKzc3LDE5IEBACiAgICAgaWYgKCFhY2Nlc3Np
YmxlIHx8ICFBVEtfSVNfT0JKRUNUKGFjY2Vzc2libGUpKQogICAgICAgICByZXR1cm4gdHJ1ZTsK
IAorI2lmIFBMQVRGT1JNKEdUSykgfHwgUExBVEZPUk0oRUZMKQorICAgIFdLQnVuZGxlUGFnZVJl
ZiBwYWdlID0gSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnBhZ2UoKS0+cGFnZSgpOworICAgIFdL
QnVuZGxlRnJhbWVSZWYgbWFpbkZyYW1lID0gV0tCdW5kbGVQYWdlR2V0TWFpbkZyYW1lKHBhZ2Up
OworICAgIEpTQ29udGV4dFJlZiBqc0NvbnRleHQgPSBXS0J1bmRsZUZyYW1lR2V0SmF2YVNjcmlw
dENvbnRleHQobWFpbkZyYW1lKTsKKyNlbHNlCisgICAgSlNDb250ZXh0UmVmIGpzQ29udGV4dCA9
IG51bGxwdHI7CisjZW5kaWYKKwogICAgIEdTaWduYWxRdWVyeSBzaWduYWxRdWVyeTsKICAgICBH
VW5pcXVlUHRyPGNoYXI+IHNpZ25hbE5hbWU7CiAgICAgR1VuaXF1ZVB0cjxjaGFyPiBzaWduYWxW
YWx1ZTsKICAgICBjb25zdCBjaGFyKiBub3RpZmljYXRpb25OYW1lID0gbnVsbHB0cjsKKyAgICBW
ZWN0b3I8SlNWYWx1ZVJlZj4gZXh0cmFBcmdzOwogCiAgICAgZ19zaWduYWxfcXVlcnkoc2lnbmFs
SGludC0+c2lnbmFsX2lkLCAmc2lnbmFsUXVlcnkpOwogCkBAIC0xMTIsMTkgKzExNiwxOCBAQAog
ICAgICAgICAgICAgbm90aWZpY2F0aW9uTmFtZSA9ICJBWFZhbHVlQ2hhbmdlZCI7CiAgICAgfSBl
bHNlIGlmICghZ19zdHJjbXAwKHNpZ25hbFF1ZXJ5LnNpZ25hbF9uYW1lLCAibG9hZC1jb21wbGV0
ZSIpKQogICAgICAgICBub3RpZmljYXRpb25OYW1lID0gIkFYTG9hZENvbXBsZXRlIjsKLSAgICBl
bHNlCisgICAgZWxzZSBpZiAoIWdfc3RyY21wMChzaWduYWxRdWVyeS5zaWduYWxfbmFtZSwgInRl
eHQtY2FyZXQtbW92ZWQiKSkgeworICAgICAgICBub3RpZmljYXRpb25OYW1lID0gIkFYVGV4dENh
cmV0TW92ZWQiOwogICAgICAgICBzaWduYWxOYW1lLnJlc2V0KGdfc3RyZHVwKHNpZ25hbFF1ZXJ5
LnNpZ25hbF9uYW1lKSk7CisgICAgICAgIHNpZ25hbFZhbHVlLnJlc2V0KGdfc3RyZHVwX3ByaW50
ZigiJWQiLCBnX3ZhbHVlX2dldF9pbnQoJnBhcmFtVmFsdWVzWzFdKSkpOworICAgICAgICBKU1Jl
dGFpblB0cjxKU1N0cmluZ1JlZj4ganNTaWduYWxWYWx1ZShBZG9wdCwgSlNTdHJpbmdDcmVhdGVX
aXRoVVRGOENTdHJpbmcoc2lnbmFsVmFsdWUuZ2V0KCkpKTsKKyAgICAgICAgZXh0cmFBcmdzLmFw
cGVuZChKU1ZhbHVlTWFrZVN0cmluZyhqc0NvbnRleHQsIGpzU2lnbmFsVmFsdWUuZ2V0KCkpKTsK
KyAgICB9IGVsc2UKKyAgICAgICAgc2lnbmFsTmFtZS5yZXNldChnX3N0cmR1cChzaWduYWxRdWVy
eS5zaWduYWxfbmFtZSkpOwogCiAgICAgaWYgKGxvZ2dpbmdBY2Nlc3NpYmlsaXR5RXZlbnRzKQog
ICAgICAgICBwcmludEFjY2Vzc2liaWxpdHlFdmVudChhY2Nlc3NpYmxlLCBzaWduYWxOYW1lLmdl
dCgpLCBzaWduYWxWYWx1ZS5nZXQoKSk7CiAKLSNpZiBQTEFURk9STShHVEspIHx8IFBMQVRGT1JN
KEVGTCkKLSAgICBXS0J1bmRsZVBhZ2VSZWYgcGFnZSA9IEluamVjdGVkQnVuZGxlOjpzaGFyZWQo
KS5wYWdlKCktPnBhZ2UoKTsKLSAgICBXS0J1bmRsZUZyYW1lUmVmIG1haW5GcmFtZSA9IFdLQnVu
ZGxlUGFnZUdldE1haW5GcmFtZShwYWdlKTsKLSAgICBKU0NvbnRleHRSZWYganNDb250ZXh0ID0g
V0tCdW5kbGVGcmFtZUdldEphdmFTY3JpcHRDb250ZXh0KG1haW5GcmFtZSk7Ci0jZWxzZQotICAg
IEpTQ29udGV4dFJlZiBqc0NvbnRleHQgPSBudWxscHRyOwotI2VuZGlmCiAgICAgaWYgKCFqc0Nv
bnRleHQpCiAgICAgICAgIHJldHVybiB0cnVlOwogCkBAIC0xMzIsMTcgKzEzNSwyMyBAQAogICAg
ICAgICBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4ganNOb3RpZmljYXRpb25FdmVudE5hbWUoQWRv
cHQsIEpTU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKG5vdGlmaWNhdGlvbk5hbWUpKTsKICAg
ICAgICAgSlNWYWx1ZVJlZiBub3RpZmljYXRpb25OYW1lQXJndW1lbnQgPSBKU1ZhbHVlTWFrZVN0
cmluZyhqc0NvbnRleHQsIGpzTm90aWZpY2F0aW9uRXZlbnROYW1lLmdldCgpKTsKICAgICAgICAg
Tm90aWZpY2F0aW9uSGFuZGxlcnNNYXA6Oml0ZXJhdG9yIGVsZW1lbnROb3RpZmljYXRpb25IYW5k
bGVyID0gbm90aWZpY2F0aW9uSGFuZGxlcnMuZmluZChhY2Nlc3NpYmxlKTsKKyAgICAgICAgSlNW
YWx1ZVJlZiBhcmd1bWVudHNbNV07IC8vIHRoaXMgZGltZW5zaW9uIG11c3QgYmUgPj0gMiArIG1h
eChleHRyYUFyZ3Muc2l6ZSgpKQorICAgICAgICBhcmd1bWVudHNbMF0gPSB0b0pTKGpzQ29udGV4
dCwgV1RGOjpnZXRQdHIoV1RSOjpBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpjcmVhdGUoYWNjZXNz
aWJsZSkpKTsKKyAgICAgICAgYXJndW1lbnRzWzFdID0gbm90aWZpY2F0aW9uTmFtZUFyZ3VtZW50
OworICAgICAgICBpbnQgbGFzdEFyZ3VtZW50ID0gMTsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7
IGkgPCBleHRyYUFyZ3Muc2l6ZSgpOyBpKyspCisgICAgICAgICAgICBhcmd1bWVudHNbbGFzdEFy
Z3VtZW50ICs9IDFdID0gZXh0cmFBcmdzW2ldOwogICAgICAgICBpZiAoZWxlbWVudE5vdGlmaWNh
dGlvbkhhbmRsZXIgIT0gbm90aWZpY2F0aW9uSGFuZGxlcnMuZW5kKCkpIHsKICAgICAgICAgICAg
IC8vIExpc3RlbmVyIGZvciBvbmUgZWxlbWVudCBqdXN0IGdldHMgb25lIGFyZ3VtZW50LCB0aGUg
bm90aWZpY2F0aW9uIG5hbWUuCi0gICAgICAgICAgICBKU09iamVjdENhbGxBc0Z1bmN0aW9uKGpz
Q29udGV4dCwgY29uc3RfY2FzdDxKU09iamVjdFJlZj4oZWxlbWVudE5vdGlmaWNhdGlvbkhhbmRs
ZXItPnZhbHVlLT5ub3RpZmljYXRpb25GdW5jdGlvbkNhbGxiYWNrKCkpLCAwLCAxLCAmbm90aWZp
Y2F0aW9uTmFtZUFyZ3VtZW50LCAwKTsKKyAgICAgICAgICAgIEpTT2JqZWN0Q2FsbEFzRnVuY3Rp
b24oanNDb250ZXh0LAorICAgICAgICAgICAgICAgIGNvbnN0X2Nhc3Q8SlNPYmplY3RSZWY+KGVs
ZW1lbnROb3RpZmljYXRpb25IYW5kbGVyLT52YWx1ZS0+bm90aWZpY2F0aW9uRnVuY3Rpb25DYWxs
YmFjaygpKSwKKyAgICAgICAgICAgICAgICAwLCBsYXN0QXJndW1lbnQgKyAxIC0gMSwgYXJndW1l
bnRzICsgMSwgMCk7CiAgICAgICAgIH0KLQogICAgICAgICBpZiAoZ2xvYmFsTm90aWZpY2F0aW9u
SGFuZGxlcikgewogICAgICAgICAgICAgLy8gQSBnbG9iYWwgbGlzdGVuZXIgZ2V0cyB0aGUgZWxl
bWVudCBhbmQgdGhlIG5vdGlmaWNhdGlvbiBuYW1lIGFzIGFyZ3VtZW50cy4KLSAgICAgICAgICAg
IEpTVmFsdWVSZWYgYXJndW1lbnRzWzJdOwotICAgICAgICAgICAgYXJndW1lbnRzWzBdID0gdG9K
Uyhqc0NvbnRleHQsIFdURjo6Z2V0UHRyKFdUUjo6QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6Y3Jl
YXRlKGFjY2Vzc2libGUpKSk7Ci0gICAgICAgICAgICBhcmd1bWVudHNbMV0gPSBub3RpZmljYXRp
b25OYW1lQXJndW1lbnQ7Ci0gICAgICAgICAgICBKU09iamVjdENhbGxBc0Z1bmN0aW9uKGpzQ29u
dGV4dCwgY29uc3RfY2FzdDxKU09iamVjdFJlZj4oZ2xvYmFsTm90aWZpY2F0aW9uSGFuZGxlci0+
bm90aWZpY2F0aW9uRnVuY3Rpb25DYWxsYmFjaygpKSwgMCwgMiwgYXJndW1lbnRzLCAwKTsKKyAg
ICAgICAgICAgIEpTT2JqZWN0Q2FsbEFzRnVuY3Rpb24oanNDb250ZXh0LAorICAgICAgICAgICAg
ICAgIGNvbnN0X2Nhc3Q8SlNPYmplY3RSZWY+KGdsb2JhbE5vdGlmaWNhdGlvbkhhbmRsZXItPm5v
dGlmaWNhdGlvbkZ1bmN0aW9uQ2FsbGJhY2soKSksCisgICAgICAgICAgICAgICAgMCwgbGFzdEFy
Z3VtZW50ICsgMSwgYXJndW1lbnRzLCAwKTsKICAgICAgICAgfQogICAgIH0KIApAQCAtMjM4LDE0
ICsyNDcsMzUgQEAKICAgICBpZiAoIWRpc2Nvbm5lY3RBY2Nlc3NpYmlsaXR5Q2FsbGJhY2tzKCkp
CiAgICAgICAgIHJldHVybjsKIAorICAgIGNvbnN0IGNoYXIqIHNpZ25hbE5hbWVzW10gPSB7Cisg
ICAgICAgICJBVEs6QXRrT2JqZWN0OnN0YXRlLWNoYW5nZSIsCisgICAgICAgICJBVEs6QXRrT2Jq
ZWN0OnN0YXRlLWNoYW5nZSIsCisgICAgICAgICJBVEs6QXRrT2JqZWN0OmZvY3VzLWV2ZW50IiwK
KyAgICAgICAgIkFUSzpBdGtPYmplY3Q6YWN0aXZlLWRlc2NlbmRhbnQtY2hhbmdlZCIsCisgICAg
ICAgICJBVEs6QXRrT2JqZWN0OmNoaWxkcmVuLWNoYW5nZWQiLAorICAgICAgICAiQVRLOkF0a09i
amVjdDpwcm9wZXJ0eS1jaGFuZ2UiLAorICAgICAgICAiQVRLOkF0a09iamVjdDp2aXNpYmxlLWRh
dGEtY2hhbmdlZCIsCisgICAgICAgICJBVEs6QXRrRG9jdW1lbnQ6bG9hZC1jb21wbGV0ZSIsCisg
ICAgICAgICJBVEs6QXRrVGV4dDp0ZXh0LWNhcmV0LW1vdmVkIiwKKyAgICAgICAgTlVMTAorICAg
IH07CisKKyAgICAvLyBSZWdpc3RlciBhdGsgaW50ZXJmYWNlcywgb3RoZXJ3aXNlIGFkZF9nbG9i
YWwgbWF5IGZhaWwuCisgICAgR09iamVjdCogZHVtbXlPYmplY3QgPSAoR09iamVjdCopZ19vYmpl
Y3RfbmV3KEdfVFlQRV9PQkpFQ1QsIE5VTEwsIE5VTEwpOworICAgIGdfb2JqZWN0X3VucmVmKGF0
a19ub19vcF9vYmplY3RfbmV3KGR1bW15T2JqZWN0KSk7CisgICAgZ19vYmplY3RfdW5yZWYoZHVt
bXlPYmplY3QpOworCiAgICAgLy8gQWRkIGdsb2JhbCBsaXN0ZW5lcnMgZm9yIEF0a09iamVjdCdz
IHNpZ25hbHMuCi0gICAgc3RhdGVDaGFuZ2VMaXN0ZW5lcklkID0gYXRrX2FkZF9nbG9iYWxfZXZl
bnRfbGlzdGVuZXIoYXhPYmplY3RFdmVudExpc3RlbmVyLCAiQVRLOkF0a09iamVjdDpzdGF0ZS1j
aGFuZ2UiKTsKLSAgICBmb2N1c0V2ZW50TGlzdGVuZXJJZCA9IGF0a19hZGRfZ2xvYmFsX2V2ZW50
X2xpc3RlbmVyKGF4T2JqZWN0RXZlbnRMaXN0ZW5lciwgIkFUSzpBdGtPYmplY3Q6Zm9jdXMtZXZl
bnQiKTsKLSAgICBhY3RpdmVEZXNjZW5kYW50Q2hhbmdlZExpc3RlbmVySWQgPSBhdGtfYWRkX2ds
b2JhbF9ldmVudF9saXN0ZW5lcihheE9iamVjdEV2ZW50TGlzdGVuZXIsICJBVEs6QXRrT2JqZWN0
OmFjdGl2ZS1kZXNjZW5kYW50LWNoYW5nZWQiKTsKLSAgICBjaGlsZHJlbkNoYW5nZWRMaXN0ZW5l
cklkID0gYXRrX2FkZF9nbG9iYWxfZXZlbnRfbGlzdGVuZXIoYXhPYmplY3RFdmVudExpc3RlbmVy
LCAiQVRLOkF0a09iamVjdDpjaGlsZHJlbi1jaGFuZ2VkIik7Ci0gICAgcHJvcGVydHlDaGFuZ2Vk
TGlzdGVuZXJJZCA9IGF0a19hZGRfZ2xvYmFsX2V2ZW50X2xpc3RlbmVyKGF4T2JqZWN0RXZlbnRM
aXN0ZW5lciwgIkFUSzpBdGtPYmplY3Q6cHJvcGVydHktY2hhbmdlIik7Ci0gICAgdmlzaWJsZURh
dGFDaGFuZ2VkTGlzdGVuZXJJZCA9IGF0a19hZGRfZ2xvYmFsX2V2ZW50X2xpc3RlbmVyKGF4T2Jq
ZWN0RXZlbnRMaXN0ZW5lciwgIkFUSzpBdGtPYmplY3Q6dmlzaWJsZS1kYXRhLWNoYW5nZWQiKTsK
LSAgICBsb2FkQ29tcGxldGVMaXN0ZW5lcklkID0gYXRrX2FkZF9nbG9iYWxfZXZlbnRfbGlzdGVu
ZXIoYXhPYmplY3RFdmVudExpc3RlbmVyLCAiQVRLOkF0a0RvY3VtZW50OmxvYWQtY29tcGxldGUi
KTsKKyAgICBmb3IoY29uc3QgY2hhcioqIHNpZ25hbE5hbWUgPSBzaWduYWxOYW1lczsgKnNpZ25h
bE5hbWU7IHNpZ25hbE5hbWUrKykgeworICAgICAgICBndWludCBpZCA9IGF0a19hZGRfZ2xvYmFs
X2V2ZW50X2xpc3RlbmVyKGF4T2JqZWN0RXZlbnRMaXN0ZW5lciwgKnNpZ25hbE5hbWUpOworICAg
ICAgICBpZiAoIWlkKSB7CisgICAgICAgICAgICBTdHJpbmcgbWVzc2FnZSA9IFN0cmluZzo6Zm9y
bWF0KCJhdGtfYWRkX2dsb2JhbF9ldmVudF9saXN0ZW5lciBmYWlsZWQgZm9yIHNpZ25hbCAlc1xu
IiwKKyAgICAgICAgICAgICAgICAqc2lnbmFsTmFtZSk7CisgICAgICAgICAgICBJbmplY3RlZEJ1
bmRsZTo6c2hhcmVkKCkub3V0cHV0VGV4dChtZXNzYWdlKTsKKyAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICAgIGxpc3RlbmVySWRzLmFwcGVuZChpZCk7CisgICAgICAgIH0KKyAgICB9CiB9CiAK
IGJvb2wgQWNjZXNzaWJpbGl0eU5vdGlmaWNhdGlvbkhhbmRsZXI6OmRpc2Nvbm5lY3RBY2Nlc3Np
YmlsaXR5Q2FsbGJhY2tzKCkKQEAgLTI1NSwzNCArMjg1LDExIEBACiAgICAgICAgIHJldHVybiBm
YWxzZTsKIAogICAgIC8vIEF0a09iamVjdCBzaWduYWxzLgotICAgIGlmIChzdGF0ZUNoYW5nZUxp
c3RlbmVySWQpIHsKLSAgICAgICAgYXRrX3JlbW92ZV9nbG9iYWxfZXZlbnRfbGlzdGVuZXIoc3Rh
dGVDaGFuZ2VMaXN0ZW5lcklkKTsKLSAgICAgICAgc3RhdGVDaGFuZ2VMaXN0ZW5lcklkID0gMDsK
KyAgICBmb3IoaW50IGkgPSAwOyBpIDwgbGlzdGVuZXJJZHMuc2l6ZSgpOyBpKyspIHsKKyAgICAg
ICAgQVNTRVJUKGxpc3RlbmVySWRzW2ldICE9IDApOworICAgICAgICBhdGtfcmVtb3ZlX2dsb2Jh
bF9ldmVudF9saXN0ZW5lcihsaXN0ZW5lcklkc1tpXSk7CiAgICAgfQotICAgIGlmIChmb2N1c0V2
ZW50TGlzdGVuZXJJZCkgewotICAgICAgICBhdGtfcmVtb3ZlX2dsb2JhbF9ldmVudF9saXN0ZW5l
cihmb2N1c0V2ZW50TGlzdGVuZXJJZCk7Ci0gICAgICAgIGZvY3VzRXZlbnRMaXN0ZW5lcklkID0g
MDsKLSAgICB9Ci0gICAgaWYgKGFjdGl2ZURlc2NlbmRhbnRDaGFuZ2VkTGlzdGVuZXJJZCkgewot
ICAgICAgICBhdGtfcmVtb3ZlX2dsb2JhbF9ldmVudF9saXN0ZW5lcihhY3RpdmVEZXNjZW5kYW50
Q2hhbmdlZExpc3RlbmVySWQpOwotICAgICAgICBhY3RpdmVEZXNjZW5kYW50Q2hhbmdlZExpc3Rl
bmVySWQgPSAwOwotICAgIH0KLSAgICBpZiAoY2hpbGRyZW5DaGFuZ2VkTGlzdGVuZXJJZCkgewot
ICAgICAgICBhdGtfcmVtb3ZlX2dsb2JhbF9ldmVudF9saXN0ZW5lcihjaGlsZHJlbkNoYW5nZWRM
aXN0ZW5lcklkKTsKLSAgICAgICAgY2hpbGRyZW5DaGFuZ2VkTGlzdGVuZXJJZCA9IDA7Ci0gICAg
fQotICAgIGlmIChwcm9wZXJ0eUNoYW5nZWRMaXN0ZW5lcklkKSB7Ci0gICAgICAgIGF0a19yZW1v
dmVfZ2xvYmFsX2V2ZW50X2xpc3RlbmVyKHByb3BlcnR5Q2hhbmdlZExpc3RlbmVySWQpOwotICAg
ICAgICBwcm9wZXJ0eUNoYW5nZWRMaXN0ZW5lcklkID0gMDsKLSAgICB9Ci0gICAgaWYgKHZpc2li
bGVEYXRhQ2hhbmdlZExpc3RlbmVySWQpIHsKLSAgICAgICAgYXRrX3JlbW92ZV9nbG9iYWxfZXZl
bnRfbGlzdGVuZXIodmlzaWJsZURhdGFDaGFuZ2VkTGlzdGVuZXJJZCk7Ci0gICAgICAgIHZpc2li
bGVEYXRhQ2hhbmdlZExpc3RlbmVySWQgPSAwOwotICAgIH0KLSAgICBpZiAobG9hZENvbXBsZXRl
TGlzdGVuZXJJZCkgewotICAgICAgICBhdGtfcmVtb3ZlX2dsb2JhbF9ldmVudF9saXN0ZW5lcihs
b2FkQ29tcGxldGVMaXN0ZW5lcklkKTsKLSAgICAgICAgbG9hZENvbXBsZXRlTGlzdGVuZXJJZCA9
IDA7Ci0gICAgfQorICAgIGxpc3RlbmVySWRzLmNsZWFyKCk7CiAgICAgcmV0dXJuIHRydWU7CiB9
CiAKSW5kZXg6IFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvYXRrL0FjY2Vz
c2liaWxpdHlVSUVsZW1lbnRBdGsuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYktpdFRlc3RS
dW5uZXIvSW5qZWN0ZWRCdW5kbGUvYXRrL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnRBdGsuY3BwCShy
ZXZpc2lvbiAxNjgyNDEpCisrKyBUb29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxl
L2F0ay9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50QXRrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTU4
MCwxMiArMTU4MCwxNSBAQAogICAgIHJldHVybiBKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmlu
ZyhzZWxlY3Rpb24uZ2V0KCkpOwogfQogCi12b2lkIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnNl
dFNlbGVjdGVkVGV4dFJhbmdlKHVuc2lnbmVkIGxvY2F0aW9uLCB1bnNpZ25lZCBsZW5ndGgpCiti
b29sIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnNldFNlbGVjdGVkVGV4dFJhbmdlKHVuc2lnbmVk
IGxvY2F0aW9uLCB1bnNpZ25lZCBsZW5ndGgpCiB7CiAgICAgaWYgKCFBVEtfSVNfVEVYVChtX2Vs
ZW1lbnQuZ2V0KCkpKQotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybiBmYWxzZTsKIAot
ICAgIGF0a190ZXh0X3NldF9zZWxlY3Rpb24oQVRLX1RFWFQobV9lbGVtZW50LmdldCgpKSwgMCwg
bG9jYXRpb24sIGxvY2F0aW9uICsgbGVuZ3RoKTsKKyAgICBpZiAobGVuZ3RoID09IDApCisgICAg
ICAgIHJldHVybiBhdGtfdGV4dF9zZXRfY2FyZXRfb2Zmc2V0KEFUS19URVhUKG1fZWxlbWVudC5n
ZXQoKSksIGxvY2F0aW9uKTsKKyAgICBlbHNlCisgICAgICAgIHJldHVybiBhdGtfdGV4dF9zZXRf
c2VsZWN0aW9uKEFUS19URVhUKG1fZWxlbWVudC5nZXQoKSksIDAsIGxvY2F0aW9uLCBsb2NhdGlv
biArIGxlbmd0aCk7CiB9CiAKIHZvaWQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aW5jcmVtZW50
KCkKSW5kZXg6IFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvaW9zL0FjY2Vz
c2liaWxpdHlVSUVsZW1lbnRJT1MubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViS2l0VGVzdFJ1
bm5lci9JbmplY3RlZEJ1bmRsZS9pb3MvQWNjZXNzaWJpbGl0eVVJRWxlbWVudElPUy5tbQkocmV2
aXNpb24gMTY4MjQxKQorKysgVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9p
b3MvQWNjZXNzaWJpbGl0eVVJRWxlbWVudElPUy5tbQkod29ya2luZyBjb3B5KQpAQCAtNTYyLDgg
KzU2Miw5IEBACiAgICAgcmV0dXJuIEpTU3RyaW5nQ3JlYXRlV2l0aENoYXJhY3RlcnMoMCwgMCk7
CiB9CiAKLXZvaWQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6c2V0U2VsZWN0ZWRUZXh0UmFuZ2Uo
dW5zaWduZWQgbG9jYXRpb24sIHVuc2lnbmVkIGxlbmd0aCkKK2Jvb2wgQWNjZXNzaWJpbGl0eVVJ
RWxlbWVudDo6c2V0U2VsZWN0ZWRUZXh0UmFuZ2UodW5zaWduZWQgbG9jYXRpb24sIHVuc2lnbmVk
IGxlbmd0aCkKIHsKKyAgICByZXR1cm4gZmFsc2U7CiB9CiAKIHZvaWQgQWNjZXNzaWJpbGl0eVVJ
RWxlbWVudDo6aW5jcmVtZW50KCkKSW5kZXg6IFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0
ZWRCdW5kbGUvbWFjL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnRNYWMubW0KPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
VG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9tYWMvQWNjZXNzaWJpbGl0eVVJ
RWxlbWVudE1hYy5tbQkocmV2aXNpb24gMTY4MjQxKQorKysgVG9vbHMvV2ViS2l0VGVzdFJ1bm5l
ci9JbmplY3RlZEJ1bmRsZS9tYWMvQWNjZXNzaWJpbGl0eVVJRWxlbWVudE1hYy5tbQkod29ya2lu
ZyBjb3B5KQpAQCAtMTM2MSw3ICsxMzYxLDcgQEAKICAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAot
dm9pZCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpzZXRTZWxlY3RlZFRleHRSYW5nZSh1bnNpZ25l
ZCBsb2NhdGlvbiwgdW5zaWduZWQgbGVuZ3RoKQorYm9vbCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50
OjpzZXRTZWxlY3RlZFRleHRSYW5nZSh1bnNpZ25lZCBsb2NhdGlvbiwgdW5zaWduZWQgbGVuZ3Ro
KQogewogICAgIE5TUmFuZ2UgdGV4dFJhbmdlID0gTlNNYWtlUmFuZ2UobG9jYXRpb24sIGxlbmd0
aCk7CiAgICAgTlNWYWx1ZSAqdGV4dFJhbmdlVmFsdWUgPSBbTlNWYWx1ZSB2YWx1ZVdpdGhSYW5n
ZTp0ZXh0UmFuZ2VdOwpAQCAtMTM2OCw2ICsxMzY4LDggQEAKICAgICBCRUdJTl9BWF9PQkpDX0VY
Q0VQVElPTlMKICAgICBbbV9lbGVtZW50IGFjY2Vzc2liaWxpdHlTZXRWYWx1ZTp0ZXh0UmFuZ2VW
YWx1ZSBmb3JBdHRyaWJ1dGU6TlNBY2Nlc3NpYmlsaXR5U2VsZWN0ZWRUZXh0UmFuZ2VBdHRyaWJ1
dGVdOwogICAgIEVORF9BWF9PQkpDX0VYQ0VQVElPTlMKKworICAgIHJldHVybiB0cnVlOwogfQog
CiB2b2lkIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmluY3JlbWVudCgpCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>231455</attachid>
            <date>2014-05-14 08:29:43 -0700</date>
            <delta_ts>2014-05-17 07:30:05 -0700</delta_ts>
            <desc>caret-moved signal and caret offset tests</desc>
            <filename>caretmoved_2_02.patch</filename>
            <type>text/plain</type>
            <size>28191</size>
            <attacher name="Jarek Czekalski">jarekczek</attacher>
            
              <data encoding="base64">SW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9D
aGFuZ2VMb2cJKHJldmlzaW9uIDE2ODgzMikKKysrIExheW91dFRlc3RzL0NoYW5nZUxvZwkod29y
a2luZyBjb3B5KQpAQCAtMSwzICsxLDE2IEBACisyMDE0LTA1LTE0ICBKYXJlayBDemVrYWxza2kg
IDxqYXJla2N6ZWtAcG9jenRhLm9uZXQucGw+CisKKyAgICAgICAgW0FUS10gQ29udmVydCBjYXJl
dCBvZmZzZXQgdGVzdHMgZnJvbSB0ZXN0YXRrLmMuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzI1MjcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICAqIHBsYXRmb3JtL2d0ay9hY2Nlc3NpYmlsaXR5L2pzLXRl
c3QtYXRrLmpzOiBBZGRlZCwgdG8gcGxhY2UKKyAgICAgICAgYXRrIGhlbHBlcnMgdGhlcmUuCisg
ICAgICAgIChzZXRDYXJldE9mZnNldCk6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL2d0ay9h
Y2Nlc3NpYmlsaXR5L2NhcmV0LW9mZnNldHMuaHRtbDogQWRkZWQuCisgICAgICAgICogcGxhdGZv
cm0vZ3RrL2FjY2Vzc2liaWxpdHkvY2FyZXQtb2Zmc2V0cy1leHBlY3RlZC50eHQ6IEFkZGVkLgor
CiAyMDE0LTA1LTEzICBBbmRyZWkgQnVjdXIgIDxhYnVjdXJAYWRvYmUuY29tPgogCiAgICAgICAg
IFtDU1MgUmVnaW9uc10gQXNzZXJ0aW9uIGZhaWx1cmUgaW4gc29tZSBjYXNlcyB3aXRoIGlubGlu
ZSBibG9ja3MKSW5kZXg6IExheW91dFRlc3RzL3BsYXRmb3JtL2d0ay9hY2Nlc3NpYmlsaXR5L2Nh
cmV0LW9mZnNldHMtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3BsYXRm
b3JtL2d0ay9hY2Nlc3NpYmlsaXR5L2NhcmV0LW9mZnNldHMtZXhwZWN0ZWQudHh0CShyZXZpc2lv
biAwKQorKysgTGF5b3V0VGVzdHMvcGxhdGZvcm0vZ3RrL2FjY2Vzc2liaWxpdHkvY2FyZXQtb2Zm
c2V0cy1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1MyBAQAorVGhpcyB0
ZXN0IGlzIHJlcGxpY2F0ZWQgZnJvbSBvbGQgZmlsZSB0ZXN0YXRrLmMgYW5kIHRlc3RzIHZhcmlv
dXMgc2NlbmFyaW9zCitvZiBjYXJldCBtb3ZlbWVudDogc2V0dGluZyBjYXJldCBvZmZzZXQgYW5k
IHJlY2VpdmluZyB0ZXh0LWNhcmV0LW1vdmVkIHNpZ25hbC4KKworT24gc3VjY2VzcywgeW91IHdp
bGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09N
UExFVEUiLgorCisKK0EgdGV4dCBoZWFkZXIKKworQSBwYXJhZ3JhcGggd2l0aCBhIGxpbmsgaW4g
dGhlIG1pZGRsZQorCitBIGxpc3QgaXRlbQorQmxvY2sgc3BhbiBpbiBhIGxpc3QgaXRlbQorSW5s
aW5lIHNwYW4gaW4gYSBsaXN0IGl0ZW0KK0Jsb2NrIHNwYW4gaW4gYSBsaW5rIGluIGEgbGlzdCBp
dGVtCitJbmxpbmUgc3BhbiBpbiBhIGxpbmsgaW4gYSBsaXN0IGl0ZW0KKyAgCithIHRhYmxlIGNl
bGwJCQorQmxvY2sgc3BhbiBpbiBhIGxpbmsgaW4gYSB0YWJsZSBjZWxsCitJbmxpbmUgc3BhbiBp
biBhIGxpbmsgaW4gYSB0YWJsZSBjZWxsCQorQmxvY2sgc3BhbiBpbiBhIHRhYmxlIGNlbGwKK0lu
bGluZSBzcGFuIGluIGEgdGFibGUgY2VsbAorVGhpcyBwYXJhZ3JhcGggaXMgYm9ya2VkIQorCitQ
QVNTIHJvb3QuY2hpbGRyZW5Db3VudCBpcyA2CitQQVNTIHNldENhcmV0T2Zmc2V0KGgxLCA1KSBp
cyB0cnVlCitQQVNTIGNhcmV0TW92ZWREYXRhIGlzICJIZWFkaW5nfDUiCitQQVNTIGNhcmV0TW92
ZWREYXRhIGlzICJQYXJhZ3JhcGh8NSIKK1BBU1MgY2FyZXRNb3ZlZERhdGEgaXMgIlBhcmFncmFw
aHwyMCIKK1BBU1MgY2FyZXRNb3ZlZERhdGEgaXMgIlBhcmFncmFwaHwzMCIKK1BBU1Mgc2V0Q2Fy
ZXRPZmZzZXQobGluaywgNSkgaXMgdHJ1ZQorUEFTUyBjYXJldE1vdmVkRGF0YSBpcyAiUGFyYWdy
YXBofDE3IgorUEFTUyBsaXN0LnJvbGUgaXMgIkFYUm9sZTogQVhMaXN0IgorUEFTUyBsaXN0LmNo
aWxkcmVuQ291bnQgaXMgMworUEFTUyBzZXRDYXJldE9mZnNldChsaXN0SXRlbSwgMSkgaXMgZmFs
c2UKK1BBU1Mgc2V0Q2FyZXRPZmZzZXQobGlzdEl0ZW0sIDUpIGlzIHRydWUKK1BBU1MgY2FyZXRN
b3ZlZERhdGEgaXMgIkxpc3RJdGVtfDIiCitQQVNTIGNvbWJvQm94LnJvbGUgaXMgIkFYUm9sZTog
QVhDb21ib0JveCIKK1BBU1MgbWVudVBvcHVwLnJvbGUgaXMgIkFYUm9sZTogQVhNZW51IgorUEFT
UyBjb21ib0JveE9wdGlvbi5yb2xlIGlzICJBWFJvbGU6IEFYTWVudUl0ZW0iCitQQVNTIHNldENh
cmV0T2Zmc2V0KGNvbWJvQm94T3B0aW9uLCAxKSBpcyBmYWxzZQorUEFTUyB0ZXh0RW50cnkucm9s
ZSBpcyAiQVhSb2xlOiBBWFRleHRGaWVsZCIKK1BBU1MgY2FyZXRNb3ZlZERhdGEgaXMgIlRleHRG
aWVsZHw1IgorUEFTUyB0YWJsZS5yb2xlIGlzICJBWFJvbGU6IEFYVGFibGUiCitQQVNTIHRhYmxl
LmNoaWxkcmVuQ291bnQgaXMgNAorUEFTUyB0YWJsZUNlbGwucm9sZSBpcyAiQVhSb2xlOiBBWENl
bGwiCitQQVNTIGNhcmV0TW92ZWREYXRhIGlzICJDZWxsfDIiCitQQVNTIGJvcmtlZFRleHRMZW5n
dGggaXMgMjUKK1BBU1MgY2FyZXRNb3ZlZERhdGEgaXMgIlBhcmFncmFwaHwyNCIKK1BBU1MgY2Fy
ZXRNb3ZlZERhdGEgaXMgIlBhcmFncmFwaHwyNSIKK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlz
IHRydWUKKworVEVTVCBDT01QTEVURQorCkluZGV4OiBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9ndGsv
YWNjZXNzaWJpbGl0eS9jYXJldC1vZmZzZXRzLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVz
dHMvcGxhdGZvcm0vZ3RrL2FjY2Vzc2liaWxpdHkvY2FyZXQtb2Zmc2V0cy5odG1sCShyZXZpc2lv
biAwKQorKysgTGF5b3V0VGVzdHMvcGxhdGZvcm0vZ3RrL2FjY2Vzc2liaWxpdHkvY2FyZXQtb2Zm
c2V0cy5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTU0IEBACis8IURPQ1RZUEUgSFRN
TCBQVUJMSUMgIi0vL0lFVEYvL0RURCBIVE1MLy9FTiI+Cis8aHRtbD4KKzxoZWFkPgorPHNjcmlw
dCBzcmM9Ii4uLy4uLy4uL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8c2Ny
aXB0IHNyYz0ianMtdGVzdC1hdGsuanMiPjwvc2NyaXB0PgorPHNjcmlwdD4KK2Rlc2NyaXB0aW9u
VGV4dCA9ICJUaGlzIHRlc3QgaXMgcmVwbGljYXRlZCBmcm9tIG9sZCBmaWxlIHRlc3RhdGsuYyBh
bmQgdGVzdHMgdmFyaW91cyBzY2VuYXJpb3M8YnI+IiArCisgICAgICAgICAgICAgICAgICAib2Yg
Y2FyZXQgbW92ZW1lbnQ6IHNldHRpbmcgY2FyZXQgb2Zmc2V0IGFuZCByZWNlaXZpbmcgdGV4dC1j
YXJldC1tb3ZlZCBzaWduYWwuIjsKKzwvc2NyaXB0PgorPC9oZWFkPgorCis8Ym9keSBpZD0iYm9k
eSI+Cis8aDEgaWQ9J2ZpcnN0Q2hpbGQnPkEgdGV4dCBoZWFkZXI8L2gxPgorCis8cD5BIHBhcmFn
cmFwaCA8YSBocmVmPSdodHRwOi8vZm9vLmJhci5iYXovJz53aXRoIGEgbGluazwvYT4gaW4gdGhl
IG1pZGRsZTwvcD4KKworPG9sPgorICA8bGk+QSBsaXN0IGl0ZW08L2xpPgorICA8bGk+PHNwYW4g
c3R5bGU9J2Rpc3BsYXk6YmxvY2s7Jz5CbG9jayBzcGFuIGluIGEgbGlzdCBpdGVtPC9zcGFuPjxz
cGFuPklubGluZSBzcGFuIGluIGEgbGlzdCBpdGVtPC9zcGFuPjwvbGk+CisgIDxsaT48YSBocmVm
PSdmb28nPjxzcGFuIHN0eWxlPSdkaXNwbGF5OmJsb2NrOyc+QmxvY2sgc3BhbiBpbiBhIGxpbmsg
aW4gYSBsaXN0IGl0ZW08L3NwYW4+PHNwYW4+SW5saW5lIHNwYW4gaW4gYSBsaW5rIGluIGEgbGlz
dCBpdGVtPC9zcGFuPjwvYT48L2xpPgorPC9vbD4KKworPHNlbGVjdD48b3B0aW9uIHNlbGVjdGVk
IHZhbHVlPSdmb28nPkFuIG9wdGlvbiBpbiBhIGNvbWJvIGJveDwvb3B0aW9uPjwvc2VsZWN0Pgor
Cis8aW5wdXQgdHlwZT0ndGV4dCcgbmFtZT0nZm9vJyB2YWx1ZT0nZm9vIGJhciBiYXonIC8+CisK
Kzx0YWJsZT4KKyAgPHRyPgorICAgIDx0ZD5hIHRhYmxlIGNlbGw8L3RkPgorICAgIDx0ZD48L3Rk
PgorICAgIDx0ZD48YSBocmVmPSdmb28nPjxzcGFuIHN0eWxlPSdkaXNwbGF5OmJsb2NrOyc+Qmxv
Y2sgc3BhbiBpbiBhIGxpbmsgaW4gYSB0YWJsZSBjZWxsPC9zcGFuPjxzcGFuPklubGluZSBzcGFu
IGluIGEgbGluayBpbiBhIHRhYmxlIGNlbGw8L3NwYW4+PC9hPjwvdGQ+CisgICAgPHRkPjxzcGFu
IHN0eWxlPSdkaXNwbGF5OmJsb2NrOyc+QmxvY2sgc3BhbiBpbiBhIHRhYmxlIGNlbGw8L3NwYW4+
PHNwYW4+SW5saW5lIHNwYW4gaW4gYSB0YWJsZSBjZWxsPC9zcGFuPjwvdGQ+CisgIDwvdHI+Cis8
L3RhYmxlPgorCis8cD5UaGlzCisgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFncmFwaAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXMK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBib3JrZWQhPC9wPgorCis8ZGl2IGlkPSJjb25zb2xlIj48
L2Rpdj4KKworPHNjcmlwdD4KK2lmICh3aW5kb3cubGF5b3V0Q29udHJvbGxlcikgeworICAgIHRl
c3RSdW5uZXIub3ZlcnJpZGVQcmVmZXJlbmNlKCJXZWJLaXRFbmFibGVDYXJldEJyb3dzaW5nIiwg
dHJ1ZSk7CisgICAgdGVzdFJ1bm5lci5kdW1wQXNUZXh0KCk7Cit9CisKK2Z1bmN0aW9uIGdsb2Jh
bExpc3RlbmVyKG9iamVjdCwgbmFtZSwgb2Zmc2V0KQoreworICAgIHZhciByb2xlID0gb2JqZWN0
LnJvbGUucmVwbGFjZSgnQVhSb2xlOiBBWCcsICcnKTsKKyAgICBpZiAobmFtZSA9PSAnQVhUZXh0
Q2FyZXRNb3ZlZCcpIHsKKyAgICAgICAgY2FyZXRNb3ZlZERhdGEgKz0gcm9sZSArICd8JyArIG9m
ZnNldDsKKyAgICB9Cit9CisKK2Z1bmN0aW9uIHNldENhcmV0T2Zmc2V0SGVscGVyKG9iamVjdCwg
b2Zmc2V0KQoreworICAgIGNhcmV0TW92ZWREYXRhID0gJyc7CisgICAgc2V0Q2FyZXRPZmZzZXQo
b2JqZWN0LCBvZmZzZXQpOworfQorCitpZiAod2luZG93LmFjY2Vzc2liaWxpdHlDb250cm9sbGVy
KSB7CisgICAgYWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIuYWRkTm90aWZpY2F0aW9uTGlzdGVuZXIo
Z2xvYmFsTGlzdGVuZXIpOworICAgIHJvb3QgPSBhY2Nlc3NpYmlsaXR5Q29udHJvbGxlci5hY2Nl
c3NpYmxlRWxlbWVudEJ5SWQoJ2ZpcnN0Q2hpbGQnKS5wYXJlbnRFbGVtZW50KCk7CisgICAgc2hv
dWxkQmUoJ3Jvb3QuY2hpbGRyZW5Db3VudCcsICc2Jyk7CisKKyAgICAvKiBGb2xsb3dpbmcgdGVz
dHMgYXJlIHJlcGxpY2F0ZWQgZnJvbSB0ZXN0YXRrLmMgZmlsZSwgZnVuY3Rpb25zCisgICAgdGVz
dFdlYmtpdEF0a0NhcmV0T2Zmc2V0cygpCisgICAgdGVzdFdlYmtpdEF0a0NhcmV0T2Zmc2V0c0Fu
ZEV4dHJhbm91c1doaXRlU3BhY2VzKCkKKyAgICB0aGF0IHdhcyBwcmVzZW50IGluIHdlYmtpdDEu
IFJlbW92ZWQgZnJvbQorICAgIHRydW5rIGluIHIxNjY5NzcsIHNvIHRoZSBsYXN0IHZlcnNpb24g
d2FzCisgICAgaHR0cHM6Ly90cmFjLndlYmtpdC5vcmcvYnJvd3Nlci90cnVuay9Ub29scy9UZXN0
V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEd0ay90ZXN0YXRrLmM/cmV2PTE2Njk3NgorICAgIFdoYXQg
Y291bGQgbm90IGJlIHZlcmlmaWVkIGluIHRoZSBzYW1lIHdheToKKyAgICAxLiBXaGV0aGVyIGVs
ZW1lbnQgaW1wbGVtZW50cyBBVEtfVEVYVC4gSWYgc2V0Q2FyZXRPZmZzZXQgc3VjY2VlZHMsIGl0
IGNvbmZpcm1zCisgICAgICAgdGhhdCBlbGVtZW50IGlzIHRleHQgYXMgd2VsbC4gQnV0IGluIGNh
c2VzIHdoZW4gc2V0Q2FyZXRPZmZzZXQgbXVzdCBmYWlsCisgICAgICAgSSBzZWUgbm8gd2F5IHRv
IGNvbmZpcm0gaXQgaXMgdGV4dCBlbGVtZW50LgorICAgIDIuIFdoZXRoZXIgcG9zaXRpb24gaXMg
Y29ycmVjdCB0aHJvdWdoIGEgY2FsbCB0byBhdGtfdGV4dF9nZXRfY2FyZXRfb2Zmc2V0LgorICAg
ICAgIHRleHQtY2FyZXQtbW92ZWQgc2lnbmFsIHZhbHVlIGlzIHRlc3RlZCBpbnN0ZWFkLgorICAg
IEFueXdheSB0aGVzZSBjYXNlcyBkb24ndCBsb29rIGNydWNpYWwsIHNvIHRoZXkgYXJlIHNraXBw
ZWQuCisgICAgKi8KKworICAgIC8qIEl0IHNob3VsZCBiZSBwb3NzaWJsZSB0byBwbGFjZSB0aGUg
Y2FyZXQgaW5zaWRlIGEgaGVhZGVyLiAqLworICAgIGgxID0gcm9vdC5jaGlsZEF0SW5kZXgoMCk7
CisgICAgY2FyZXRNb3ZlZERhdGEgPSAnJzsKKyAgICBzaG91bGRCZVRydWUoJ3NldENhcmV0T2Zm
c2V0KGgxLCA1KScpOworICAgIHNob3VsZEJlRXF1YWxUb1N0cmluZygnY2FyZXRNb3ZlZERhdGEn
LCAnSGVhZGluZ3w1Jyk7CisKKyAgICAvKiBJdCBzaG91bGQgYmUgcG9zc2libGUgdG8gcGxhY2Ug
dGhlIGNhcmV0IGluc2lkZSBhIHBhcmFncmFwaCBhbmQgYSBsaW5rLiAqLworICAgIHAxID0gcm9v
dC5jaGlsZEF0SW5kZXgoMSk7CisgICAgc2V0Q2FyZXRPZmZzZXRIZWxwZXIocDEsIDUpOworICAg
IHNob3VsZEJlRXF1YWxUb1N0cmluZygnY2FyZXRNb3ZlZERhdGEnLCAnUGFyYWdyYXBofDUnKTsK
KyAgICBzZXRDYXJldE9mZnNldEhlbHBlcihwMSwgMjApOworICAgIHNob3VsZEJlRXF1YWxUb1N0
cmluZygnY2FyZXRNb3ZlZERhdGEnLCAnUGFyYWdyYXBofDIwJyk7CisgICAgc2V0Q2FyZXRPZmZz
ZXRIZWxwZXIocDEsIDMwKTsKKyAgICBzaG91bGRCZUVxdWFsVG9TdHJpbmcoJ2NhcmV0TW92ZWRE
YXRhJywgJ1BhcmFncmFwaHwzMCcpOworICAgIGxpbmsgPSBwMS5jaGlsZEF0SW5kZXgoMCk7Cisg
ICAgY2FyZXRNb3ZlZERhdGEgPSAnJzsKKyAgICBzaG91bGRCZVRydWUoJ3NldENhcmV0T2Zmc2V0
KGxpbmssIDUpJyk7CisgICAgLyogUG9zaXRpb25zIGluc2lkZSBsaW5rcyBhcmUgcmVwb3J0ZWQg
cmVsYXRpdmUgdG8gdGhlIHBhcmFncmFwaC4gKi8KKyAgICBzaG91bGRCZUVxdWFsVG9TdHJpbmco
J2NhcmV0TW92ZWREYXRhJywgJ1BhcmFncmFwaHwxNycpOworCisgICAgbGlzdCA9IHJvb3QuY2hp
bGRBdEluZGV4KDIpOworICAgIHNob3VsZEJlRXF1YWxUb1N0cmluZygnbGlzdC5yb2xlJywgJ0FY
Um9sZTogQVhMaXN0Jyk7CisgICAgc2hvdWxkQmUoJ2xpc3QuY2hpbGRyZW5Db3VudCcsICczJyk7
CisgICAgbGlzdEl0ZW0gPSBsaXN0LmNoaWxkQXRJbmRleCgyKTsKKyAgICAvKiBJdCdzIG5vdCBw
b3NzaWJsZSB0byBwbGFjZSB0aGUgY2FyZXQgaW5zaWRlIGFuIGl0ZW0ncyBtYXJrZXIuICovCisg
ICAgc2hvdWxkQmUoJ3NldENhcmV0T2Zmc2V0KGxpc3RJdGVtLCAxKScsICdmYWxzZScpOworICAg
IC8qIEl0IHNob3VsZCBiZSBwb3NzaWJsZSB0byBwbGFjZSB0aGUgY2FyZXQgaW5zaWRlIGFuIGl0
ZW0ncyB0ZXh0LiAqLworICAgIGNhcmV0TW92ZWREYXRhID0gJyc7CisgICAgc2hvdWxkQmUoJ3Nl
dENhcmV0T2Zmc2V0KGxpc3RJdGVtLCA1KScsICd0cnVlJyk7CisgICAgc2hvdWxkQmVFcXVhbFRv
U3RyaW5nKCdjYXJldE1vdmVkRGF0YScsICdMaXN0SXRlbXwyJyk7CisKKyAgICBwYW5lbCA9IHJv
b3QuY2hpbGRBdEluZGV4KDMpOworICAgIGNvbWJvQm94ID0gcGFuZWwuY2hpbGRBdEluZGV4KDAp
OworICAgIHNob3VsZEJlRXF1YWxUb1N0cmluZygnY29tYm9Cb3gucm9sZScsICdBWFJvbGU6IEFY
Q29tYm9Cb3gnKTsKKyAgICBtZW51UG9wdXAgPSBjb21ib0JveC5jaGlsZEF0SW5kZXgoMCk7Cisg
ICAgc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCdtZW51UG9wdXAucm9sZScsICdBWFJvbGU6IEFYTWVu
dScpOworICAgIGNvbWJvQm94T3B0aW9uID0gbWVudVBvcHVwLmNoaWxkQXRJbmRleCgwKTsKKyAg
ICBzaG91bGRCZUVxdWFsVG9TdHJpbmcoJ2NvbWJvQm94T3B0aW9uLnJvbGUnLCAnQVhSb2xlOiBB
WE1lbnVJdGVtJyk7CisgICAgLyogSXQncyBub3QgcG9zc2libGUgdG8gcGxhY2UgdGhlIGNhcmV0
IGluc2lkZSBhbiBvcHRpb24gZm9yIGEgY29tYm9ib3guICovCisgICAgc2hvdWxkQmUoJ3NldENh
cmV0T2Zmc2V0KGNvbWJvQm94T3B0aW9uLCAxKScsICdmYWxzZScpOworICAgIHRleHRFbnRyeSA9
IHBhbmVsLmNoaWxkQXRJbmRleCgxKTsKKyAgICBzaG91bGRCZUVxdWFsVG9TdHJpbmcoJ3RleHRF
bnRyeS5yb2xlJywgJ0FYUm9sZTogQVhUZXh0RmllbGQnKTsKKyAgICBzZXRDYXJldE9mZnNldEhl
bHBlcih0ZXh0RW50cnksIDUpOworICAgIHNob3VsZEJlRXF1YWxUb1N0cmluZygnY2FyZXRNb3Zl
ZERhdGEnLCAnVGV4dEZpZWxkfDUnKTsKKworICAgIHRhYmxlID0gcm9vdC5jaGlsZEF0SW5kZXgo
NCk7CisgICAgc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCd0YWJsZS5yb2xlJywgJ0FYUm9sZTogQVhU
YWJsZScpOworICAgIHNob3VsZEJlKCd0YWJsZS5jaGlsZHJlbkNvdW50JywgJzQnKTsKKyAgICB0
YWJsZUNlbGwgPSB0YWJsZS5jaGlsZEF0SW5kZXgoMCk7CisgICAgc2hvdWxkQmVFcXVhbFRvU3Ry
aW5nKCd0YWJsZUNlbGwucm9sZScsICdBWFJvbGU6IEFYQ2VsbCcpOworICAgIHNldENhcmV0T2Zm
c2V0SGVscGVyKHRhYmxlQ2VsbCwgMik7CisgICAgc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCdjYXJl
dE1vdmVkRGF0YScsICdDZWxsfDInKTsKKworICAgIGJvcmtlZCA9IHJvb3QuY2hpbGRBdEluZGV4
KDUpOworICAgIHByZWZpeCA9ICdBWFZhbHVlOiAnCisgICAgc2hvdWxkQmVUcnVlUXVpZXQoJ2Jv
cmtlZC5zdHJpbmdWYWx1ZS5zdWJzdHJpbmcoMCwgOSkgPT0gIicgKyBwcmVmaXggKyAnIicpOwor
ICAgIGJvcmtlZFRleHRMZW5ndGggPSBib3JrZWQuc3RyaW5nVmFsdWUubGVuZ3RoIC0gcHJlZml4
Lmxlbmd0aAorICAgIHNob3VsZEJlKCdib3JrZWRUZXh0TGVuZ3RoJywgJzI1Jyk7CisgICAgc2V0
Q2FyZXRPZmZzZXRIZWxwZXIoYm9ya2VkLCBib3JrZWRUZXh0TGVuZ3RoIC0gMSk7CisgICAgc2hv
dWxkQmVFcXVhbFRvU3RyaW5nKCdjYXJldE1vdmVkRGF0YScsICdQYXJhZ3JhcGh8MjQnKTsKKyAg
ICBzZXRDYXJldE9mZnNldEhlbHBlcihib3JrZWQsIGJvcmtlZFRleHRMZW5ndGgpOworICAgIHNo
b3VsZEJlRXF1YWxUb1N0cmluZygnY2FyZXRNb3ZlZERhdGEnLCAnUGFyYWdyYXBofDI1Jyk7CisK
KyAgICBkZXNjRWxlbSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInAiKTsKKyAgICBkZXNjRWxl
bS5pZCA9ICdkZXNjcmlwdGlvbic7CisgICAgZG9jdW1lbnQuYm9keS5pbnNlcnRCZWZvcmUoZGVz
Y0VsZW0sIGRvY3VtZW50LmJvZHkuY2hpbGROb2Rlcy5pdGVtKDApKTsKKyAgICBkZXNjcmlwdGlv
bihkZXNjcmlwdGlvblRleHQpOworfQorPC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vLi4v
cmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+Cklu
ZGV4OiBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9ndGsvYWNjZXNzaWJpbGl0eS9qcy10ZXN0LWF0ay5q
cwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9ndGsvYWNjZXNzaWJpbGl0eS9q
cy10ZXN0LWF0ay5qcwkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL3BsYXRmb3JtL2d0ay9h
Y2Nlc3NpYmlsaXR5L2pzLXRlc3QtYXRrLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNCBA
QAorZnVuY3Rpb24gc2V0Q2FyZXRPZmZzZXQoYWNjZXNzaWJsZVRleHQsIG9mZnNldCkKK3sKKyAg
ICByZXR1cm4gYWNjZXNzaWJsZVRleHQuc2V0U2VsZWN0ZWRUZXh0UmFuZ2Uob2Zmc2V0LCAwKTsK
K30KSW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJ
KHJldmlzaW9uIDE2ODgzMikKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAt
MSwzICsxLDM3IEBACisyMDE0LTA1LTE0ICBKYXJlayBDemVrYWxza2kgIDxqYXJla2N6ZWtAcG9j
enRhLm9uZXQucGw+CisKKyAgICAgICAgW0FUS10gQWRkZWQgbmV3IGFjY2Vzc2liaWxpdHkgc2ln
bmFsOiB0ZXh0LWNhcmV0LW1vdmVkLgorICAgICAgICBNYWtlIEFjY2Vzc2liaWxpdHlVSUVsZW1l
bnQuc2V0U2VsZWN0ZWRUZXh0UmFuZ2Ugd29yaworICAgICAgICBhcyBhdGtfdGV4dF9zZXRfY2Fy
ZXRfb2Zmc2V0IHdoZW4gZ2l2ZW4gb2Zmc2V0ID09IDAuCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzI1MjcKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICB0ZXh0LWNhcmV0LW1vdmVkIHNpZ25hbCBpbiBhY2Nl
c3NpYmlsaXR5Q29udHJvbGxlciBpcyBuZWVkZWQgdG8KKyAgICAgICAgaW1wbGVtZW50IHRlc3Rz
IGZyb20gVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRHdGsvdGVzdGF0ay5jCisgICAg
ICAgIGFzIExheW91dFRlc3RzLiBBZGQgdGhlIHNpZ25hbCB0byB0aGUgY29udHJvbGxlci4KKwor
ICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvQmluZGluZ3MvQWNjZXNz
aWJpbGl0eVVJRWxlbWVudC5pZGw6CisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9JbmplY3Rl
ZEJ1bmRsZS9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50LmNwcDoKKyAgICAgICAgKiBXZWJLaXRUZXN0
UnVubmVyL0luamVjdGVkQnVuZGxlL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnQuaDoKKyAgICAgICAg
KiBXZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL2lvcy9BY2Nlc3NpYmlsaXR5VUlFbGVt
ZW50SU9TLm1tOgorICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvbWFj
L0FjY2Vzc2liaWxpdHlVSUVsZW1lbnRNYWMubW06CisgICAgICAgIChzZXRTZWxlY3RlZFRleHRS
YW5nZSk6IENoYW5nZSByZXR1cm4gdHlwZSB0byBib29sLgorICAgICAgICAqIFdlYktpdFRlc3RS
dW5uZXIvSW5qZWN0ZWRCdW5kbGUvYXRrL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnRBdGsuY3BwOgor
ICAgICAgICAoc2V0U2VsZWN0ZWRUZXh0UmFuZ2UpOiBDYWxsIGF0a190ZXh0X3NldF9jYXJldF9v
ZmZzZXQgYW5kIHJldHVybiBib29sLgorICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvSW5qZWN0
ZWRCdW5kbGUvYXRrL0FjY2Vzc2liaWxpdHlOb3RpZmljYXRpb25IYW5kbGVyQXRrLmNwcDoKKyAg
ICAgICAgKGF4T2JqZWN0RXZlbnRMaXN0ZW5lcik6IEFkZCBub3RpZmljYXRpb24gbmFtZSBBWFRl
eHRDYXJldE1vdmVkLCBhbGxvdworICAgICAgICBmb3IgZXh0cmEgYXJndW1lbnRzIHBhc3NlZCB0
byBoYW5kbGVyIGFuZCB1c2UgaXQgZm9yIHRleHQtY2FyZXQtbW92ZWQgb2Zmc2V0LgorICAgICAg
ICAoV1RSOjpBY2Nlc3NpYmlsaXR5Tm90aWZpY2F0aW9uSGFuZGxlcjo6Y29ubmVjdEFjY2Vzc2li
aWxpdHlDYWxsYmFja3MpOgorICAgICAgICBDb25uZWN0IGNhbGxiYWNrIHRvIG5ldyBsaXN0ZW5l
ciBmb3IgQVRLOkF0a1RleHQ6dGV4dC1jYXJldC1tb3ZlZC4KKyAgICAgICAgUmVmYWN0b3Igc28g
dGhhdCBmYWlsdXJlcyBiZSByZXBvcnRlZC4KKyAgICAgICAgSW5pdGlhbGl6ZSBhdGsgaW50ZXJm
YWNlcyBiZWZvcmUgdHJ5aW5nIHRvIGNvbm5lY3QgdG8gdGhlbSwgc2VlCisgICAgICAgIGh0dHBz
Oi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03Mjk5MjIKKyAgICAgICAgKFdU
Ujo6QWNjZXNzaWJpbGl0eU5vdGlmaWNhdGlvbkhhbmRsZXI6OmRpc2Nvbm5lY3RBY2Nlc3NpYmls
aXR5Q2FsbGJhY2tzKToKKyAgICAgICAgU2ltcGxpZnkgY29kZSBieSB1c2luZyBhIHZlY3RvciBp
biBwbGFjZSBvZiBkb3plbiB2YXJpYWJsZXMuCisgICAgICAgICogRHVtcFJlbmRlclRyZWUvYXRr
L0FjY2Vzc2liaWxpdHlDYWxsYmFja3NBdGsuY3BwOgorICAgICAgICBDb21tZW50IGFib3V0IG5v
dCBzeW5jaHJvbml6aW5nIHdpdGggYWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIuCisKIDIwMTQtMDUt
MTMgIENhcmxvcyBBbGJlcnRvIExvcGV6IFBlcmV6ICA8Y2xvcGV6QGlnYWxpYS5jb20+CiAKICAg
ICAgICAgRmxha2luZXNzIGRhc2hib2FyZCBjb250YWlucyBvdXRkYXRlZCBsaXN0IG9mIGJvdHMg
b24gYnVpbGRlcnMuanNvbnAKSW5kZXg6IFRvb2xzL0R1bXBSZW5kZXJUcmVlL2F0ay9BY2Nlc3Np
YmlsaXR5Q2FsbGJhY2tzQXRrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9EdW1wUmVuZGVyVHJl
ZS9hdGsvQWNjZXNzaWJpbGl0eUNhbGxiYWNrc0F0ay5jcHAJKHJldmlzaW9uIDE2ODgzMikKKysr
IFRvb2xzL0R1bXBSZW5kZXJUcmVlL2F0ay9BY2Nlc3NpYmlsaXR5Q2FsbGJhY2tzQXRrLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNTcsNiArNTcsOSBAQAogc3RhdGljIGd1aW50IHByb3BlcnR5Q2hh
bmdlZExpc3RlbmVySWQgPSAwOwogc3RhdGljIGd1aW50IHZpc2libGVEYXRhQ2hhbmdlZExpc3Rl
bmVySWQgPSAwOwogc3RhdGljIGd1aW50IGxvYWRDb21wbGV0ZUxpc3RlbmVySWQgPSAwOworLy8g
VXAgdG8gMjAxNCBpdCB3YXMgb2JsaWdhdG9yeSB0byBtaXJyb3IgdGhlIGNoYW5nZXMgZnJvbQor
Ly8gV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9hdGsvQWNjZXNzaWJpbGl0eU5vdGlm
aWNhdGlvbkhhbmRsZXJBdGsuY3BwLAorLy8gYnV0IHRoZSBoYWJpdCBoYXMgYmVlbiBkcm9wcGVk
OiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTMyNTI3I2M2CiBzdGF0
aWMgTm90aWZpY2F0aW9uSGFuZGxlcnNNYXAgbm90aWZpY2F0aW9uSGFuZGxlcnM7CiBzdGF0aWMg
QWNjZXNzaWJpbGl0eU5vdGlmaWNhdGlvbkhhbmRsZXIqIGdsb2JhbE5vdGlmaWNhdGlvbkhhbmRs
ZXIgPSAwOwogCkluZGV4OiBUb29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0Fj
Y2Vzc2liaWxpdHlVSUVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYktpdFRlc3RS
dW5uZXIvSW5qZWN0ZWRCdW5kbGUvQWNjZXNzaWJpbGl0eVVJRWxlbWVudC5jcHAJKHJldmlzaW9u
IDE2ODgzMikKKysrIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvQWNjZXNz
aWJpbGl0eVVJRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE3Miw3ICsxNzIsNyBAQAog
SlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnJhbmdlRm9y
TGluZShpbnQpIHsgcmV0dXJuIDA7IH0KIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBBY2Nlc3Np
YmlsaXR5VUlFbGVtZW50OjpyYW5nZUZvclBvc2l0aW9uKGludCwgaW50KSB7IHJldHVybiAwOyB9
CiBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6Ym91bmRz
Rm9yUmFuZ2UodW5zaWduZWQsIHVuc2lnbmVkKSB7IHJldHVybiAwOyB9Ci12b2lkIEFjY2Vzc2li
aWxpdHlVSUVsZW1lbnQ6OnNldFNlbGVjdGVkVGV4dFJhbmdlKHVuc2lnbmVkLCB1bnNpZ25lZCkg
eyB9Citib29sIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnNldFNlbGVjdGVkVGV4dFJhbmdlKHVu
c2lnbmVkLCB1bnNpZ25lZCkgeyByZXR1cm4gZmFsc2U7IH0KIEpTUmV0YWluUHRyPEpTU3RyaW5n
UmVmPiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpzdHJpbmdGb3JSYW5nZSh1bnNpZ25lZCwgdW5z
aWduZWQpIHsgcmV0dXJuIDA7IH0KIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBBY2Nlc3NpYmls
aXR5VUlFbGVtZW50OjphdHRyaWJ1dGVkU3RyaW5nRm9yUmFuZ2UodW5zaWduZWQsIHVuc2lnbmVk
KSB7IHJldHVybiAwOyB9CiBib29sIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmF0dHJpYnV0ZWRT
dHJpbmdSYW5nZUlzTWlzc3BlbGxlZCh1bnNpZ25lZCwgdW5zaWduZWQpIHsgcmV0dXJuIGZhbHNl
OyB9CkluZGV4OiBUb29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0FjY2Vzc2li
aWxpdHlVSUVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJLaXRUZXN0UnVubmVyL0lu
amVjdGVkQnVuZGxlL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnQuaAkocmV2aXNpb24gMTY4ODMyKQor
KysgVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9BY2Nlc3NpYmlsaXR5VUlF
bGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTIwMiw3ICsyMDIsNyBAQAogICAgIEpTUmV0YWlu
UHRyPEpTU3RyaW5nUmVmPiByYW5nZUZvckxpbmUoaW50KTsKICAgICBKU1JldGFpblB0cjxKU1N0
cmluZ1JlZj4gcmFuZ2VGb3JQb3NpdGlvbihpbnQgeCwgaW50IHkpOwogICAgIEpTUmV0YWluUHRy
PEpTU3RyaW5nUmVmPiBib3VuZHNGb3JSYW5nZSh1bnNpZ25lZCBsb2NhdGlvbiwgdW5zaWduZWQg
bGVuZ3RoKTsKLSAgICB2b2lkIHNldFNlbGVjdGVkVGV4dFJhbmdlKHVuc2lnbmVkIGxvY2F0aW9u
LCB1bnNpZ25lZCBsZW5ndGgpOworICAgIGJvb2wgc2V0U2VsZWN0ZWRUZXh0UmFuZ2UodW5zaWdu
ZWQgbG9jYXRpb24sIHVuc2lnbmVkIGxlbmd0aCk7CiAgICAgSlNSZXRhaW5QdHI8SlNTdHJpbmdS
ZWY+IHN0cmluZ0ZvclJhbmdlKHVuc2lnbmVkIGxvY2F0aW9uLCB1bnNpZ25lZCBsZW5ndGgpOwog
ICAgIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBhdHRyaWJ1dGVkU3RyaW5nRm9yUmFuZ2UodW5z
aWduZWQgbG9jYXRpb24sIHVuc2lnbmVkIGxlbmd0aCk7CiAgICAgYm9vbCBhdHRyaWJ1dGVkU3Ry
aW5nUmFuZ2VJc01pc3NwZWxsZWQodW5zaWduZWQgbG9jYXRpb24sIHVuc2lnbmVkIGxlbmd0aCk7
CkBAIC0yNTgsNyArMjU4LDcgQEAKICAgICBib29sIGFkZE5vdGlmaWNhdGlvbkxpc3RlbmVyKEpT
VmFsdWVSZWYgZnVuY3Rpb25DYWxsYmFjayk7CiAgICAgLy8gTWFrZSBzdXJlIHlvdSBjYWxsIHJl
bW92ZSwgYmVjYXVzZSB5b3UgY2FuJ3QgcmVseSBvbiBvYmplY3RzIGJlaW5nIGRlYWxsb2NhdGVk
IGluIGEgdGltZWx5IGZhc2hpb24uCiAgICAgYm9vbCByZW1vdmVOb3RpZmljYXRpb25MaXN0ZW5l
cigpOwotICAgIAorCiBwcml2YXRlOgogICAgIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQoUGxhdGZv
cm1VSUVsZW1lbnQpOwogICAgIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQoY29uc3QgQWNjZXNzaWJp
bGl0eVVJRWxlbWVudCYpOwpJbmRleDogVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1
bmRsZS9CaW5kaW5ncy9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50LmlkbAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBU
b29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0JpbmRpbmdzL0FjY2Vzc2liaWxp
dHlVSUVsZW1lbnQuaWRsCShyZXZpc2lvbiAxNjg4MzIpCisrKyBUb29scy9XZWJLaXRUZXN0UnVu
bmVyL0luamVjdGVkQnVuZGxlL0JpbmRpbmdzL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnQuaWRsCSh3
b3JraW5nIGNvcHkpCkBAIC0xNjEsNyArMTYxLDcgQEAKICAgICBbUGFzc0NvbnRleHRdIHVuc2ln
bmVkIGludCB1aUVsZW1lbnRDb3VudEZvclNlYXJjaFByZWRpY2F0ZShBY2Nlc3NpYmlsaXR5VUlF
bGVtZW50IHN0YXJ0RWxlbWVudCwgYm9vbGVhbiBpc0RpcmVjdGlvbk5leHQsIG9iamVjdCBzZWFy
Y2hLZXksIERPTVN0cmluZyBzZWFyY2hUZXh0LCBib29sZWFuIHZpc2libGVPbmx5LCBib29sZWFu
IGltbWVkaWF0ZURlc2NlbmRhbnRzT25seSk7CiAgICAgW1Bhc3NDb250ZXh0XSBBY2Nlc3NpYmls
aXR5VUlFbGVtZW50IHVpRWxlbWVudEZvclNlYXJjaFByZWRpY2F0ZShBY2Nlc3NpYmlsaXR5VUlF
bGVtZW50IHN0YXJ0RWxlbWVudCwgYm9vbGVhbiBpc0RpcmVjdGlvbk5leHQsIG9iamVjdCBzZWFy
Y2hLZXksIERPTVN0cmluZyBzZWFyY2hUZXh0LCBib29sZWFuIHZpc2libGVPbmx5LCBib29sZWFu
IGltbWVkaWF0ZURlc2NlbmRhbnRzT25seSk7CiAgICAgW1Bhc3NDb250ZXh0XSBET01TdHJpbmcg
c2VsZWN0VGV4dFdpdGhDcml0ZXJpYShET01TdHJpbmcgYW1iaWd1aXR5UmVzb2x1dGlvbiwgb2Jq
ZWN0IHNlYXJjaFN0cmluZ3MsIERPTVN0cmluZyByZXBsYWNlbWVudFN0cmluZywgRE9NU3RyaW5n
IGFjdGl2aXR5KTsKLSAgICB2b2lkIHNldFNlbGVjdGVkVGV4dFJhbmdlKHVuc2lnbmVkIGxvbmcg
bG9jYXRpb24sIHVuc2lnbmVkIGxvbmcgbGVuZ3RoKTsKKyAgICBib29sZWFuIHNldFNlbGVjdGVk
VGV4dFJhbmdlKHVuc2lnbmVkIGxvbmcgbG9jYXRpb24sIHVuc2lnbmVkIGxvbmcgbGVuZ3RoKTsK
IAogICAgIC8vIFNjcm9sbCBhcmVhIGF0dHJpYnV0ZXMuCiAgICAgcmVhZG9ubHkgYXR0cmlidXRl
IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQgaG9yaXpvbnRhbFNjcm9sbGJhcjsKQEAgLTIwMCw2ICsy
MDAsNSBAQAogICAgIC8vIE5vdGlmaWNhdGlvbiBzdXBwb3J0LgogICAgIGJvb2xlYW4gYWRkTm90
aWZpY2F0aW9uTGlzdGVuZXIob2JqZWN0IGNhbGxiYWNrRnVuY3Rpb24pOwogICAgIGJvb2xlYW4g
cmVtb3ZlTm90aWZpY2F0aW9uTGlzdGVuZXIoKTsKLSAgICAKIH07CiAKSW5kZXg6IFRvb2xzL1dl
YktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvYXRrL0FjY2Vzc2liaWxpdHlOb3RpZmljYXRp
b25IYW5kbGVyQXRrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJLaXRUZXN0UnVubmVyL0lu
amVjdGVkQnVuZGxlL2F0ay9BY2Nlc3NpYmlsaXR5Tm90aWZpY2F0aW9uSGFuZGxlckF0ay5jcHAJ
KHJldmlzaW9uIDE2ODgzMikKKysrIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5k
bGUvYXRrL0FjY2Vzc2liaWxpdHlOb3RpZmljYXRpb25IYW5kbGVyQXRrLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjksNiArMjksNyBAQAogI2luY2x1ZGUgPFdlYktpdDIvV0tCdW5kbGVQYWdlLmg+
CiAjaW5jbHVkZSA8V2ViS2l0Mi9XS0J1bmRsZVBhZ2VQcml2YXRlLmg+CiAjaW5jbHVkZSA8d3Rm
L0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAjaW5jbHVkZSA8d3RmL2dvYmpl
Y3QvR1VuaXF1ZVB0ci5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KICNpbmNsdWRl
IDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KQEAgLTM5LDEzICs0MCw3IEBACiAKIHR5cGVkZWYgSGFz
aE1hcDxBdGtPYmplY3QqLCBBY2Nlc3NpYmlsaXR5Tm90aWZpY2F0aW9uSGFuZGxlcio+IE5vdGlm
aWNhdGlvbkhhbmRsZXJzTWFwOwogCi11bnNpZ25lZCBzdGF0ZUNoYW5nZUxpc3RlbmVySWQgPSAw
OwotdW5zaWduZWQgZm9jdXNFdmVudExpc3RlbmVySWQgPSAwOwotdW5zaWduZWQgYWN0aXZlRGVz
Y2VuZGFudENoYW5nZWRMaXN0ZW5lcklkID0gMDsKLXVuc2lnbmVkIGNoaWxkcmVuQ2hhbmdlZExp
c3RlbmVySWQgPSAwOwotdW5zaWduZWQgcHJvcGVydHlDaGFuZ2VkTGlzdGVuZXJJZCA9IDA7Ci11
bnNpZ25lZCB2aXNpYmxlRGF0YUNoYW5nZWRMaXN0ZW5lcklkID0gMDsKLXVuc2lnbmVkIGxvYWRD
b21wbGV0ZUxpc3RlbmVySWQgPSAwOworV1RGOjpWZWN0b3I8Z3VpbnQ+IGxpc3RlbmVySWRzOwog
Tm90aWZpY2F0aW9uSGFuZGxlcnNNYXAgbm90aWZpY2F0aW9uSGFuZGxlcnM7CiBBY2Nlc3NpYmls
aXR5Tm90aWZpY2F0aW9uSGFuZGxlciogZ2xvYmFsTm90aWZpY2F0aW9uSGFuZGxlciA9IG51bGxw
dHI7CiBib29sIGxvZ2dpbmdBY2Nlc3NpYmlsaXR5RXZlbnRzID0gZmFsc2U7CkBAIC04MiwxMCAr
NzcsMTkgQEAKICAgICBpZiAoIWFjY2Vzc2libGUgfHwgIUFUS19JU19PQkpFQ1QoYWNjZXNzaWJs
ZSkpCiAgICAgICAgIHJldHVybiB0cnVlOwogCisjaWYgUExBVEZPUk0oR1RLKSB8fCBQTEFURk9S
TShFRkwpCisgICAgV0tCdW5kbGVQYWdlUmVmIHBhZ2UgPSBJbmplY3RlZEJ1bmRsZTo6c2hhcmVk
KCkucGFnZSgpLT5wYWdlKCk7CisgICAgV0tCdW5kbGVGcmFtZVJlZiBtYWluRnJhbWUgPSBXS0J1
bmRsZVBhZ2VHZXRNYWluRnJhbWUocGFnZSk7CisgICAgSlNDb250ZXh0UmVmIGpzQ29udGV4dCA9
IFdLQnVuZGxlRnJhbWVHZXRKYXZhU2NyaXB0Q29udGV4dChtYWluRnJhbWUpOworI2Vsc2UKKyAg
ICBKU0NvbnRleHRSZWYganNDb250ZXh0ID0gbnVsbHB0cjsKKyNlbmRpZgorCiAgICAgR1NpZ25h
bFF1ZXJ5IHNpZ25hbFF1ZXJ5OwogICAgIEdVbmlxdWVQdHI8Y2hhcj4gc2lnbmFsTmFtZTsKICAg
ICBHVW5pcXVlUHRyPGNoYXI+IHNpZ25hbFZhbHVlOwogICAgIGNvbnN0IGNoYXIqIG5vdGlmaWNh
dGlvbk5hbWUgPSBudWxscHRyOworICAgIFZlY3RvcjxKU1ZhbHVlUmVmPiBleHRyYUFyZ3M7CiAK
ICAgICBnX3NpZ25hbF9xdWVyeShzaWduYWxIaW50LT5zaWduYWxfaWQsICZzaWduYWxRdWVyeSk7
CiAKQEAgLTExMiwxOSArMTE2LDE4IEBACiAgICAgICAgICAgICBub3RpZmljYXRpb25OYW1lID0g
IkFYVmFsdWVDaGFuZ2VkIjsKICAgICB9IGVsc2UgaWYgKCFnX3N0cmNtcDAoc2lnbmFsUXVlcnku
c2lnbmFsX25hbWUsICJsb2FkLWNvbXBsZXRlIikpCiAgICAgICAgIG5vdGlmaWNhdGlvbk5hbWUg
PSAiQVhMb2FkQ29tcGxldGUiOwotICAgIGVsc2UKKyAgICBlbHNlIGlmICghZ19zdHJjbXAwKHNp
Z25hbFF1ZXJ5LnNpZ25hbF9uYW1lLCAidGV4dC1jYXJldC1tb3ZlZCIpKSB7CisgICAgICAgIG5v
dGlmaWNhdGlvbk5hbWUgPSAiQVhUZXh0Q2FyZXRNb3ZlZCI7CiAgICAgICAgIHNpZ25hbE5hbWUu
cmVzZXQoZ19zdHJkdXAoc2lnbmFsUXVlcnkuc2lnbmFsX25hbWUpKTsKKyAgICAgICAgc2lnbmFs
VmFsdWUucmVzZXQoZ19zdHJkdXBfcHJpbnRmKCIlZCIsIGdfdmFsdWVfZ2V0X2ludCgmcGFyYW1W
YWx1ZXNbMV0pKSk7CisgICAgICAgIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBqc1NpZ25hbFZh
bHVlKEFkb3B0LCBKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZyhzaWduYWxWYWx1ZS5nZXQo
KSkpOworICAgICAgICBleHRyYUFyZ3MuYXBwZW5kKEpTVmFsdWVNYWtlU3RyaW5nKGpzQ29udGV4
dCwganNTaWduYWxWYWx1ZS5nZXQoKSkpOworICAgIH0gZWxzZQorICAgICAgICBzaWduYWxOYW1l
LnJlc2V0KGdfc3RyZHVwKHNpZ25hbFF1ZXJ5LnNpZ25hbF9uYW1lKSk7CiAKICAgICBpZiAobG9n
Z2luZ0FjY2Vzc2liaWxpdHlFdmVudHMpCiAgICAgICAgIHByaW50QWNjZXNzaWJpbGl0eUV2ZW50
KGFjY2Vzc2libGUsIHNpZ25hbE5hbWUuZ2V0KCksIHNpZ25hbFZhbHVlLmdldCgpKTsKIAotI2lm
IFBMQVRGT1JNKEdUSykgfHwgUExBVEZPUk0oRUZMKQotICAgIFdLQnVuZGxlUGFnZVJlZiBwYWdl
ID0gSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnBhZ2UoKS0+cGFnZSgpOwotICAgIFdLQnVuZGxl
RnJhbWVSZWYgbWFpbkZyYW1lID0gV0tCdW5kbGVQYWdlR2V0TWFpbkZyYW1lKHBhZ2UpOwotICAg
IEpTQ29udGV4dFJlZiBqc0NvbnRleHQgPSBXS0J1bmRsZUZyYW1lR2V0SmF2YVNjcmlwdENvbnRl
eHQobWFpbkZyYW1lKTsKLSNlbHNlCi0gICAgSlNDb250ZXh0UmVmIGpzQ29udGV4dCA9IG51bGxw
dHI7Ci0jZW5kaWYKICAgICBpZiAoIWpzQ29udGV4dCkKICAgICAgICAgcmV0dXJuIHRydWU7CiAK
QEAgLTEzMiwxNyArMTM1LDIzIEBACiAgICAgICAgIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBq
c05vdGlmaWNhdGlvbkV2ZW50TmFtZShBZG9wdCwgSlNTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJp
bmcobm90aWZpY2F0aW9uTmFtZSkpOwogICAgICAgICBKU1ZhbHVlUmVmIG5vdGlmaWNhdGlvbk5h
bWVBcmd1bWVudCA9IEpTVmFsdWVNYWtlU3RyaW5nKGpzQ29udGV4dCwganNOb3RpZmljYXRpb25F
dmVudE5hbWUuZ2V0KCkpOwogICAgICAgICBOb3RpZmljYXRpb25IYW5kbGVyc01hcDo6aXRlcmF0
b3IgZWxlbWVudE5vdGlmaWNhdGlvbkhhbmRsZXIgPSBub3RpZmljYXRpb25IYW5kbGVycy5maW5k
KGFjY2Vzc2libGUpOworICAgICAgICBKU1ZhbHVlUmVmIGFyZ3VtZW50c1s1XTsgLy8gdGhpcyBk
aW1lbnNpb24gbXVzdCBiZSA+PSAyICsgbWF4KGV4dHJhQXJncy5zaXplKCkpCisgICAgICAgIGFy
Z3VtZW50c1swXSA9IHRvSlMoanNDb250ZXh0LCBXVEY6OmdldFB0cihXVFI6OkFjY2Vzc2liaWxp
dHlVSUVsZW1lbnQ6OmNyZWF0ZShhY2Nlc3NpYmxlKSkpOworICAgICAgICBhcmd1bWVudHNbMV0g
PSBub3RpZmljYXRpb25OYW1lQXJndW1lbnQ7CisgICAgICAgIGludCBsYXN0QXJndW1lbnQgPSAx
OworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGV4dHJhQXJncy5zaXplKCk7IGkrKykKKyAg
ICAgICAgICAgIGFyZ3VtZW50c1tsYXN0QXJndW1lbnQgKz0gMV0gPSBleHRyYUFyZ3NbaV07CiAg
ICAgICAgIGlmIChlbGVtZW50Tm90aWZpY2F0aW9uSGFuZGxlciAhPSBub3RpZmljYXRpb25IYW5k
bGVycy5lbmQoKSkgewogICAgICAgICAgICAgLy8gTGlzdGVuZXIgZm9yIG9uZSBlbGVtZW50IGp1
c3QgZ2V0cyBvbmUgYXJndW1lbnQsIHRoZSBub3RpZmljYXRpb24gbmFtZS4KLSAgICAgICAgICAg
IEpTT2JqZWN0Q2FsbEFzRnVuY3Rpb24oanNDb250ZXh0LCBjb25zdF9jYXN0PEpTT2JqZWN0UmVm
PihlbGVtZW50Tm90aWZpY2F0aW9uSGFuZGxlci0+dmFsdWUtPm5vdGlmaWNhdGlvbkZ1bmN0aW9u
Q2FsbGJhY2soKSksIDAsIDEsICZub3RpZmljYXRpb25OYW1lQXJndW1lbnQsIDApOworICAgICAg
ICAgICAgSlNPYmplY3RDYWxsQXNGdW5jdGlvbihqc0NvbnRleHQsCisgICAgICAgICAgICAgICAg
Y29uc3RfY2FzdDxKU09iamVjdFJlZj4oZWxlbWVudE5vdGlmaWNhdGlvbkhhbmRsZXItPnZhbHVl
LT5ub3RpZmljYXRpb25GdW5jdGlvbkNhbGxiYWNrKCkpLAorICAgICAgICAgICAgICAgIDAsIGxh
c3RBcmd1bWVudCArIDEgLSAxLCBhcmd1bWVudHMgKyAxLCAwKTsKICAgICAgICAgfQotCiAgICAg
ICAgIGlmIChnbG9iYWxOb3RpZmljYXRpb25IYW5kbGVyKSB7CiAgICAgICAgICAgICAvLyBBIGds
b2JhbCBsaXN0ZW5lciBnZXRzIHRoZSBlbGVtZW50IGFuZCB0aGUgbm90aWZpY2F0aW9uIG5hbWUg
YXMgYXJndW1lbnRzLgotICAgICAgICAgICAgSlNWYWx1ZVJlZiBhcmd1bWVudHNbMl07Ci0gICAg
ICAgICAgICBhcmd1bWVudHNbMF0gPSB0b0pTKGpzQ29udGV4dCwgV1RGOjpnZXRQdHIoV1RSOjpB
Y2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpjcmVhdGUoYWNjZXNzaWJsZSkpKTsKLSAgICAgICAgICAg
IGFyZ3VtZW50c1sxXSA9IG5vdGlmaWNhdGlvbk5hbWVBcmd1bWVudDsKLSAgICAgICAgICAgIEpT
T2JqZWN0Q2FsbEFzRnVuY3Rpb24oanNDb250ZXh0LCBjb25zdF9jYXN0PEpTT2JqZWN0UmVmPihn
bG9iYWxOb3RpZmljYXRpb25IYW5kbGVyLT5ub3RpZmljYXRpb25GdW5jdGlvbkNhbGxiYWNrKCkp
LCAwLCAyLCBhcmd1bWVudHMsIDApOworICAgICAgICAgICAgSlNPYmplY3RDYWxsQXNGdW5jdGlv
bihqc0NvbnRleHQsCisgICAgICAgICAgICAgICAgY29uc3RfY2FzdDxKU09iamVjdFJlZj4oZ2xv
YmFsTm90aWZpY2F0aW9uSGFuZGxlci0+bm90aWZpY2F0aW9uRnVuY3Rpb25DYWxsYmFjaygpKSwK
KyAgICAgICAgICAgICAgICAwLCBsYXN0QXJndW1lbnQgKyAxLCBhcmd1bWVudHMsIDApOwogICAg
ICAgICB9CiAgICAgfQogCkBAIC0yMzgsMTQgKzI0NywzNCBAQAogICAgIGlmICghZGlzY29ubmVj
dEFjY2Vzc2liaWxpdHlDYWxsYmFja3MoKSkKICAgICAgICAgcmV0dXJuOwogCisgICAgY29uc3Qg
Y2hhciogc2lnbmFsTmFtZXNbXSA9IHsKKyAgICAgICAgIkFUSzpBdGtPYmplY3Q6c3RhdGUtY2hh
bmdlIiwKKyAgICAgICAgIkFUSzpBdGtPYmplY3Q6c3RhdGUtY2hhbmdlIiwKKyAgICAgICAgIkFU
SzpBdGtPYmplY3Q6Zm9jdXMtZXZlbnQiLAorICAgICAgICAiQVRLOkF0a09iamVjdDphY3RpdmUt
ZGVzY2VuZGFudC1jaGFuZ2VkIiwKKyAgICAgICAgIkFUSzpBdGtPYmplY3Q6Y2hpbGRyZW4tY2hh
bmdlZCIsCisgICAgICAgICJBVEs6QXRrT2JqZWN0OnByb3BlcnR5LWNoYW5nZSIsCisgICAgICAg
ICJBVEs6QXRrT2JqZWN0OnZpc2libGUtZGF0YS1jaGFuZ2VkIiwKKyAgICAgICAgIkFUSzpBdGtE
b2N1bWVudDpsb2FkLWNvbXBsZXRlIiwKKyAgICAgICAgIkFUSzpBdGtUZXh0OnRleHQtY2FyZXQt
bW92ZWQiLAorICAgICAgICAwCisgICAgfTsKKworICAgIC8vIFJlZ2lzdGVyIGF0ayBpbnRlcmZh
Y2VzLCBvdGhlcndpc2UgYWRkX2dsb2JhbCBtYXkgZmFpbC4KKyAgICBHT2JqZWN0KiBkdW1teU9i
amVjdCA9IChHT2JqZWN0KilnX29iamVjdF9uZXcoR19UWVBFX09CSkVDVCwgTlVMTCwgTlVMTCk7
CisgICAgZ19vYmplY3RfdW5yZWYoYXRrX25vX29wX29iamVjdF9uZXcoZHVtbXlPYmplY3QpKTsK
KyAgICBnX29iamVjdF91bnJlZihkdW1teU9iamVjdCk7CisKICAgICAvLyBBZGQgZ2xvYmFsIGxp
c3RlbmVycyBmb3IgQXRrT2JqZWN0J3Mgc2lnbmFscy4KLSAgICBzdGF0ZUNoYW5nZUxpc3RlbmVy
SWQgPSBhdGtfYWRkX2dsb2JhbF9ldmVudF9saXN0ZW5lcihheE9iamVjdEV2ZW50TGlzdGVuZXIs
ICJBVEs6QXRrT2JqZWN0OnN0YXRlLWNoYW5nZSIpOwotICAgIGZvY3VzRXZlbnRMaXN0ZW5lcklk
ID0gYXRrX2FkZF9nbG9iYWxfZXZlbnRfbGlzdGVuZXIoYXhPYmplY3RFdmVudExpc3RlbmVyLCAi
QVRLOkF0a09iamVjdDpmb2N1cy1ldmVudCIpOwotICAgIGFjdGl2ZURlc2NlbmRhbnRDaGFuZ2Vk
TGlzdGVuZXJJZCA9IGF0a19hZGRfZ2xvYmFsX2V2ZW50X2xpc3RlbmVyKGF4T2JqZWN0RXZlbnRM
aXN0ZW5lciwgIkFUSzpBdGtPYmplY3Q6YWN0aXZlLWRlc2NlbmRhbnQtY2hhbmdlZCIpOwotICAg
IGNoaWxkcmVuQ2hhbmdlZExpc3RlbmVySWQgPSBhdGtfYWRkX2dsb2JhbF9ldmVudF9saXN0ZW5l
cihheE9iamVjdEV2ZW50TGlzdGVuZXIsICJBVEs6QXRrT2JqZWN0OmNoaWxkcmVuLWNoYW5nZWQi
KTsKLSAgICBwcm9wZXJ0eUNoYW5nZWRMaXN0ZW5lcklkID0gYXRrX2FkZF9nbG9iYWxfZXZlbnRf
bGlzdGVuZXIoYXhPYmplY3RFdmVudExpc3RlbmVyLCAiQVRLOkF0a09iamVjdDpwcm9wZXJ0eS1j
aGFuZ2UiKTsKLSAgICB2aXNpYmxlRGF0YUNoYW5nZWRMaXN0ZW5lcklkID0gYXRrX2FkZF9nbG9i
YWxfZXZlbnRfbGlzdGVuZXIoYXhPYmplY3RFdmVudExpc3RlbmVyLCAiQVRLOkF0a09iamVjdDp2
aXNpYmxlLWRhdGEtY2hhbmdlZCIpOwotICAgIGxvYWRDb21wbGV0ZUxpc3RlbmVySWQgPSBhdGtf
YWRkX2dsb2JhbF9ldmVudF9saXN0ZW5lcihheE9iamVjdEV2ZW50TGlzdGVuZXIsICJBVEs6QXRr
RG9jdW1lbnQ6bG9hZC1jb21wbGV0ZSIpOworICAgIGZvciAoY29uc3QgY2hhcioqIHNpZ25hbE5h
bWUgPSBzaWduYWxOYW1lczsgKnNpZ25hbE5hbWU7IHNpZ25hbE5hbWUrKykgeworICAgICAgICBn
dWludCBpZCA9IGF0a19hZGRfZ2xvYmFsX2V2ZW50X2xpc3RlbmVyKGF4T2JqZWN0RXZlbnRMaXN0
ZW5lciwgKnNpZ25hbE5hbWUpOworICAgICAgICBpZiAoIWlkKSB7CisgICAgICAgICAgICBTdHJp
bmcgbWVzc2FnZSA9IFN0cmluZzo6Zm9ybWF0KCJhdGtfYWRkX2dsb2JhbF9ldmVudF9saXN0ZW5l
ciBmYWlsZWQgZm9yIHNpZ25hbCAlc1xuIiwKKyAgICAgICAgICAgICAgICAqc2lnbmFsTmFtZSk7
CisgICAgICAgICAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkub3V0cHV0VGV4dChtZXNzYWdl
KTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBsaXN0ZW5lcklkcy5hcHBlbmQoaWQpOwor
ICAgIH0KIH0KIAogYm9vbCBBY2Nlc3NpYmlsaXR5Tm90aWZpY2F0aW9uSGFuZGxlcjo6ZGlzY29u
bmVjdEFjY2Vzc2liaWxpdHlDYWxsYmFja3MoKQpAQCAtMjU1LDM0ICsyODQsMTEgQEAKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogCiAgICAgLy8gQXRrT2JqZWN0IHNpZ25hbHMuCi0gICAgaWYgKHN0
YXRlQ2hhbmdlTGlzdGVuZXJJZCkgewotICAgICAgICBhdGtfcmVtb3ZlX2dsb2JhbF9ldmVudF9s
aXN0ZW5lcihzdGF0ZUNoYW5nZUxpc3RlbmVySWQpOwotICAgICAgICBzdGF0ZUNoYW5nZUxpc3Rl
bmVySWQgPSAwOworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGlzdGVuZXJJZHMuc2l6ZSgpOyBp
KyspIHsKKyAgICAgICAgQVNTRVJUKGxpc3RlbmVySWRzW2ldKTsKKyAgICAgICAgYXRrX3JlbW92
ZV9nbG9iYWxfZXZlbnRfbGlzdGVuZXIobGlzdGVuZXJJZHNbaV0pOwogICAgIH0KLSAgICBpZiAo
Zm9jdXNFdmVudExpc3RlbmVySWQpIHsKLSAgICAgICAgYXRrX3JlbW92ZV9nbG9iYWxfZXZlbnRf
bGlzdGVuZXIoZm9jdXNFdmVudExpc3RlbmVySWQpOwotICAgICAgICBmb2N1c0V2ZW50TGlzdGVu
ZXJJZCA9IDA7Ci0gICAgfQotICAgIGlmIChhY3RpdmVEZXNjZW5kYW50Q2hhbmdlZExpc3RlbmVy
SWQpIHsKLSAgICAgICAgYXRrX3JlbW92ZV9nbG9iYWxfZXZlbnRfbGlzdGVuZXIoYWN0aXZlRGVz
Y2VuZGFudENoYW5nZWRMaXN0ZW5lcklkKTsKLSAgICAgICAgYWN0aXZlRGVzY2VuZGFudENoYW5n
ZWRMaXN0ZW5lcklkID0gMDsKLSAgICB9Ci0gICAgaWYgKGNoaWxkcmVuQ2hhbmdlZExpc3RlbmVy
SWQpIHsKLSAgICAgICAgYXRrX3JlbW92ZV9nbG9iYWxfZXZlbnRfbGlzdGVuZXIoY2hpbGRyZW5D
aGFuZ2VkTGlzdGVuZXJJZCk7Ci0gICAgICAgIGNoaWxkcmVuQ2hhbmdlZExpc3RlbmVySWQgPSAw
OwotICAgIH0KLSAgICBpZiAocHJvcGVydHlDaGFuZ2VkTGlzdGVuZXJJZCkgewotICAgICAgICBh
dGtfcmVtb3ZlX2dsb2JhbF9ldmVudF9saXN0ZW5lcihwcm9wZXJ0eUNoYW5nZWRMaXN0ZW5lcklk
KTsKLSAgICAgICAgcHJvcGVydHlDaGFuZ2VkTGlzdGVuZXJJZCA9IDA7Ci0gICAgfQotICAgIGlm
ICh2aXNpYmxlRGF0YUNoYW5nZWRMaXN0ZW5lcklkKSB7Ci0gICAgICAgIGF0a19yZW1vdmVfZ2xv
YmFsX2V2ZW50X2xpc3RlbmVyKHZpc2libGVEYXRhQ2hhbmdlZExpc3RlbmVySWQpOwotICAgICAg
ICB2aXNpYmxlRGF0YUNoYW5nZWRMaXN0ZW5lcklkID0gMDsKLSAgICB9Ci0gICAgaWYgKGxvYWRD
b21wbGV0ZUxpc3RlbmVySWQpIHsKLSAgICAgICAgYXRrX3JlbW92ZV9nbG9iYWxfZXZlbnRfbGlz
dGVuZXIobG9hZENvbXBsZXRlTGlzdGVuZXJJZCk7Ci0gICAgICAgIGxvYWRDb21wbGV0ZUxpc3Rl
bmVySWQgPSAwOwotICAgIH0KKyAgICBsaXN0ZW5lcklkcy5jbGVhcigpOwogICAgIHJldHVybiB0
cnVlOwogfQogCkluZGV4OiBUb29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL2F0
ay9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50QXRrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJL
aXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL2F0ay9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50QXRr
LmNwcAkocmV2aXNpb24gMTY4ODMyKQorKysgVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3Rl
ZEJ1bmRsZS9hdGsvQWNjZXNzaWJpbGl0eVVJRWxlbWVudEF0ay5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTE1ODAsMTIgKzE1ODAsMTUgQEAKICAgICByZXR1cm4gSlNTdHJpbmdDcmVhdGVXaXRoVVRG
OENTdHJpbmcoc2VsZWN0aW9uLmdldCgpKTsKIH0KIAotdm9pZCBBY2Nlc3NpYmlsaXR5VUlFbGVt
ZW50OjpzZXRTZWxlY3RlZFRleHRSYW5nZSh1bnNpZ25lZCBsb2NhdGlvbiwgdW5zaWduZWQgbGVu
Z3RoKQorYm9vbCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpzZXRTZWxlY3RlZFRleHRSYW5nZSh1
bnNpZ25lZCBsb2NhdGlvbiwgdW5zaWduZWQgbGVuZ3RoKQogewogICAgIGlmICghQVRLX0lTX1RF
WFQobV9lbGVtZW50LmdldCgpKSkKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4gZmFs
c2U7CiAKLSAgICBhdGtfdGV4dF9zZXRfc2VsZWN0aW9uKEFUS19URVhUKG1fZWxlbWVudC5nZXQo
KSksIDAsIGxvY2F0aW9uLCBsb2NhdGlvbiArIGxlbmd0aCk7CisgICAgaWYgKGxlbmd0aCkKKyAg
ICAgICAgcmV0dXJuIGF0a190ZXh0X3NldF9jYXJldF9vZmZzZXQoQVRLX1RFWFQobV9lbGVtZW50
LmdldCgpKSwgbG9jYXRpb24pOworCisgICAgcmV0dXJuIGF0a190ZXh0X3NldF9zZWxlY3Rpb24o
QVRLX1RFWFQobV9lbGVtZW50LmdldCgpKSwgMCwgbG9jYXRpb24sIGxvY2F0aW9uICsgbGVuZ3Ro
KTsKIH0KIAogdm9pZCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjppbmNyZW1lbnQoKQpJbmRleDog
VG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9pb3MvQWNjZXNzaWJpbGl0eVVJ
RWxlbWVudElPUy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJLaXRUZXN0UnVubmVyL0luamVj
dGVkQnVuZGxlL2lvcy9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50SU9TLm1tCShyZXZpc2lvbiAxNjg4
MzIpCisrKyBUb29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL2lvcy9BY2Nlc3Np
YmlsaXR5VUlFbGVtZW50SU9TLm1tCSh3b3JraW5nIGNvcHkpCkBAIC01NjIsOCArNTYyLDkgQEAK
ICAgICByZXR1cm4gSlNTdHJpbmdDcmVhdGVXaXRoQ2hhcmFjdGVycygwLCAwKTsKIH0KIAotdm9p
ZCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpzZXRTZWxlY3RlZFRleHRSYW5nZSh1bnNpZ25lZCBs
b2NhdGlvbiwgdW5zaWduZWQgbGVuZ3RoKQorYm9vbCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojpz
ZXRTZWxlY3RlZFRleHRSYW5nZSh1bnNpZ25lZCBsb2NhdGlvbiwgdW5zaWduZWQgbGVuZ3RoKQog
eworICAgIHJldHVybiBmYWxzZTsKIH0KIAogdm9pZCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojpp
bmNyZW1lbnQoKQpJbmRleDogVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9t
YWMvQWNjZXNzaWJpbGl0eVVJRWxlbWVudE1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJL
aXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL21hYy9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50TWFj
Lm1tCShyZXZpc2lvbiAxNjg4MzIpCisrKyBUb29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVk
QnVuZGxlL21hYy9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50TWFjLm1tCSh3b3JraW5nIGNvcHkpCkBA
IC0xMzY0LDcgKzEzNjQsNyBAQAogICAgIHJldHVybiBudWxscHRyOwogfQogCi12b2lkIEFjY2Vz
c2liaWxpdHlVSUVsZW1lbnQ6OnNldFNlbGVjdGVkVGV4dFJhbmdlKHVuc2lnbmVkIGxvY2F0aW9u
LCB1bnNpZ25lZCBsZW5ndGgpCitib29sIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnNldFNlbGVj
dGVkVGV4dFJhbmdlKHVuc2lnbmVkIGxvY2F0aW9uLCB1bnNpZ25lZCBsZW5ndGgpCiB7CiAgICAg
TlNSYW5nZSB0ZXh0UmFuZ2UgPSBOU01ha2VSYW5nZShsb2NhdGlvbiwgbGVuZ3RoKTsKICAgICBO
U1ZhbHVlICp0ZXh0UmFuZ2VWYWx1ZSA9IFtOU1ZhbHVlIHZhbHVlV2l0aFJhbmdlOnRleHRSYW5n
ZV07CkBAIC0xMzcxLDYgKzEzNzEsOCBAQAogICAgIEJFR0lOX0FYX09CSkNfRVhDRVBUSU9OUwog
ICAgIFttX2VsZW1lbnQgYWNjZXNzaWJpbGl0eVNldFZhbHVlOnRleHRSYW5nZVZhbHVlIGZvckF0
dHJpYnV0ZTpOU0FjY2Vzc2liaWxpdHlTZWxlY3RlZFRleHRSYW5nZUF0dHJpYnV0ZV07CiAgICAg
RU5EX0FYX09CSkNfRVhDRVBUSU9OUworCisgICAgcmV0dXJuIHRydWU7CiB9CiAKIHZvaWQgQWNj
ZXNzaWJpbGl0eVVJRWxlbWVudDo6aW5jcmVtZW50KCkK
</data>
<flag name="review"
          id="255906"
          type_id="1"
          status="-"
          setter="mario"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>231629</attachid>
            <date>2014-05-17 07:30:05 -0700</date>
            <delta_ts>2014-05-29 10:01:04 -0700</delta_ts>
            <desc> caret-moved signal and caret offset tests v2.04</desc>
            <filename>caretmoved_2_04.patch</filename>
            <type>text/plain</type>
            <size>27525</size>
            <attacher name="Jarek Czekalski">jarekczek</attacher>
            
              <data encoding="base64">SW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9D
aGFuZ2VMb2cJKHJldmlzaW9uIDE2ODgzMikKKysrIExheW91dFRlc3RzL0NoYW5nZUxvZwkod29y
a2luZyBjb3B5KQpAQCAtMSwzICsxLDM0IEBACisyMDE0LTA1LTE0ICBKYXJlayBDemVrYWxza2kg
IDxqYXJla2N6ZWtAcG9jenRhLm9uZXQucGw+CisKKyAgICAgICAgW0FUS10gQ29udmVydCBjYXJl
dCBvZmZzZXQgdGVzdHMgZnJvbSB0ZXN0YXRrLmMuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzI1MjcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBUaGUgdGVzdHMgYXJlIHJlcGxpY2F0ZWQgZnJvbSB0ZXN0
YXRrLmMgZmlsZSwgZnVuY3Rpb25zCisgICAgICAgICAgICB0ZXN0V2Via2l0QXRrQ2FyZXRPZmZz
ZXRzKCkKKyAgICAgICAgICAgIHRlc3RXZWJraXRBdGtDYXJldE9mZnNldHNBbmRFeHRyYW5vdXNX
aGl0ZVNwYWNlcygpCisgICAgICAgIFRoZSBmaWxlIHdhcyBwcmVzZW50IGluIHdlYmtpdDEuIFJl
bW92ZWQgZnJvbSB0cnVuayBpbiByMTY2OTc3LCBzbworICAgICAgICB0aGUgbGFzdCB2ZXJzaW9u
IHdhcworICAgICAgICBodHRwczovL3RyYWMud2Via2l0Lm9yZy9icm93c2VyL3RydW5rL1Rvb2xz
L1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0R3RrL3Rlc3RhdGsuYz9yZXY9MTY2OTc2CisgICAg
ICAgIFdoYXQgY291bGQgbm90IGJlIHZlcmlmaWVkIGluIHRoZSBzYW1lIHdheToKKworICAgICAg
ICAxLiBXaGV0aGVyIGVsZW1lbnQgaW1wbGVtZW50cyBBVEtfVEVYVC4gSWYgc2V0Q2FyZXRPZmZz
ZXQKKyAgICAgICAgc3VjY2VlZHMsIGl0IGNvbmZpcm1zIHRoYXQgZWxlbWVudCBpcyB0ZXh0IGFz
IHdlbGwuIEJ1dCBpbiBjYXNlcworICAgICAgICB3aGVuIHNldENhcmV0T2Zmc2V0IG11c3QgZmFp
bCBJIHNlZSBubyB3YXkgdG8gY29uZmlybSBpdCBpcyB0ZXh0CisgICAgICAgIGVsZW1lbnQuCisK
KyAgICAgICAgMi4gV2hldGhlciBwb3NpdGlvbiBpcyBjb3JyZWN0IHRocm91Z2ggYSBjYWxsIHRv
CisgICAgICAgIGF0a190ZXh0X2dldF9jYXJldF9vZmZzZXQuICB0ZXh0LWNhcmV0LW1vdmVkIHNp
Z25hbCB2YWx1ZSBpcworICAgICAgICB0ZXN0ZWQgaW5zdGVhZC4KKworICAgICAgICBBbnl3YXkg
dGhlc2UgY2FzZXMgZG9uJ3QgbG9vayBjcnVjaWFsLCBzbyB0aGV5IGFyZSBza2lwcGVkLgorCisg
ICAgICAgICogcGxhdGZvcm0vZ3RrL3Jlc291cmNlcy9hdGstaGVscGVycy5qczogQWRkZWQuCisg
ICAgICAgIChzZXRDYXJldE9mZnNldCk6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL2d0ay9h
Y2Nlc3NpYmlsaXR5L2NhcmV0LW9mZnNldHMuaHRtbDogQWRkZWQuCisgICAgICAgICogcGxhdGZv
cm0vZ3RrL2FjY2Vzc2liaWxpdHkvY2FyZXQtb2Zmc2V0cy1leHBlY3RlZC50eHQ6IEFkZGVkLgor
CiAyMDE0LTA1LTEzICBBbmRyZWkgQnVjdXIgIDxhYnVjdXJAYWRvYmUuY29tPgogCiAgICAgICAg
IFtDU1MgUmVnaW9uc10gQXNzZXJ0aW9uIGZhaWx1cmUgaW4gc29tZSBjYXNlcyB3aXRoIGlubGlu
ZSBibG9ja3MKSW5kZXg6IExheW91dFRlc3RzL3BsYXRmb3JtL2d0ay9hY2Nlc3NpYmlsaXR5L2Nh
cmV0LW9mZnNldHMtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3BsYXRm
b3JtL2d0ay9hY2Nlc3NpYmlsaXR5L2NhcmV0LW9mZnNldHMtZXhwZWN0ZWQudHh0CShyZXZpc2lv
biAwKQorKysgTGF5b3V0VGVzdHMvcGxhdGZvcm0vZ3RrL2FjY2Vzc2liaWxpdHkvY2FyZXQtb2Zm
c2V0cy1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1MiBAQAorQSB0ZXh0
IGhlYWRlcgorCitBIHBhcmFncmFwaCB3aXRoIGEgbGluayBpbiB0aGUgbWlkZGxlCisKK0EgbGlz
dCBpdGVtCitCbG9jayBzcGFuIGluIGEgbGlzdCBpdGVtCitJbmxpbmUgc3BhbiBpbiBhIGxpc3Qg
aXRlbQorQmxvY2sgc3BhbiBpbiBhIGxpbmsgaW4gYSBsaXN0IGl0ZW0KK0lubGluZSBzcGFuIGlu
IGEgbGluayBpbiBhIGxpc3QgaXRlbQorICAKK2EgdGFibGUgY2VsbAkJCitCbG9jayBzcGFuIGlu
IGEgbGluayBpbiBhIHRhYmxlIGNlbGwKK0lubGluZSBzcGFuIGluIGEgbGluayBpbiBhIHRhYmxl
IGNlbGwJCitCbG9jayBzcGFuIGluIGEgdGFibGUgY2VsbAorSW5saW5lIHNwYW4gaW4gYSB0YWJs
ZSBjZWxsCitUaGlzIHBhcmFncmFwaCBpcyBib3JrZWQhCisKK1RoaXMgdGVzdCBpcyByZXBsaWNh
dGVkIGZyb20gb2xkIGZpbGUgdGVzdGF0ay5jIGFuZCB0ZXN0cyB2YXJpb3VzIHNjZW5hcmlvcyBv
ZiBjYXJldCBtb3ZlbWVudDogc2V0dGluZyBjYXJldCBvZmZzZXQgYW5kIHJlY2VpdmluZyB0ZXh0
LWNhcmV0LW1vdmVkIHNpZ25hbC4KKworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVz
IG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCisKK1BB
U1Mgcm9vdC5jaGlsZHJlbkNvdW50IGlzIDYKK1BBU1Mgc2V0Q2FyZXRPZmZzZXQoaDEsIDUpIGlz
IHRydWUKK1BBU1MgY2FyZXRNb3ZlZERhdGEgaXMgIkhlYWRpbmd8NSIKK1BBU1MgY2FyZXRNb3Zl
ZERhdGEgaXMgIlBhcmFncmFwaHw1IgorUEFTUyBjYXJldE1vdmVkRGF0YSBpcyAiUGFyYWdyYXBo
fDIwIgorUEFTUyBjYXJldE1vdmVkRGF0YSBpcyAiUGFyYWdyYXBofDMwIgorUEFTUyBzZXRDYXJl
dE9mZnNldChsaW5rLCA1KSBpcyB0cnVlCitQQVNTIGNhcmV0TW92ZWREYXRhIGlzICJQYXJhZ3Jh
cGh8MTciCitQQVNTIGxpc3Qucm9sZSBpcyAiQVhSb2xlOiBBWExpc3QiCitQQVNTIGxpc3QuY2hp
bGRyZW5Db3VudCBpcyAzCitQQVNTIHNldENhcmV0T2Zmc2V0KGxpc3RJdGVtLCAxKSBpcyBmYWxz
ZQorUEFTUyBzZXRDYXJldE9mZnNldChsaXN0SXRlbSwgNSkgaXMgdHJ1ZQorUEFTUyBjYXJldE1v
dmVkRGF0YSBpcyAiTGlzdEl0ZW18MiIKK1BBU1MgY29tYm9Cb3gucm9sZSBpcyAiQVhSb2xlOiBB
WENvbWJvQm94IgorUEFTUyBtZW51UG9wdXAucm9sZSBpcyAiQVhSb2xlOiBBWE1lbnUiCitQQVNT
IGNvbWJvQm94T3B0aW9uLnJvbGUgaXMgIkFYUm9sZTogQVhNZW51SXRlbSIKK1BBU1Mgc2V0Q2Fy
ZXRPZmZzZXQoY29tYm9Cb3hPcHRpb24sIDEpIGlzIGZhbHNlCitQQVNTIHRleHRFbnRyeS5yb2xl
IGlzICJBWFJvbGU6IEFYVGV4dEZpZWxkIgorUEFTUyBjYXJldE1vdmVkRGF0YSBpcyAiVGV4dEZp
ZWxkfDUiCitQQVNTIHRhYmxlLnJvbGUgaXMgIkFYUm9sZTogQVhUYWJsZSIKK1BBU1MgdGFibGUu
Y2hpbGRyZW5Db3VudCBpcyA0CitQQVNTIHRhYmxlQ2VsbC5yb2xlIGlzICJBWFJvbGU6IEFYQ2Vs
bCIKK1BBU1MgY2FyZXRNb3ZlZERhdGEgaXMgIkNlbGx8MiIKK1BBU1MgYm9ya2VkVGV4dExlbmd0
aCBpcyAyNQorUEFTUyBjYXJldE1vdmVkRGF0YSBpcyAiUGFyYWdyYXBofDI0IgorUEFTUyBjYXJl
dE1vdmVkRGF0YSBpcyAiUGFyYWdyYXBofDI1IgorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMg
dHJ1ZQorCitURVNUIENPTVBMRVRFCisKSW5kZXg6IExheW91dFRlc3RzL3BsYXRmb3JtL2d0ay9h
Y2Nlc3NpYmlsaXR5L2NhcmV0LW9mZnNldHMuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0
cy9wbGF0Zm9ybS9ndGsvYWNjZXNzaWJpbGl0eS9jYXJldC1vZmZzZXRzLmh0bWwJKHJldmlzaW9u
IDApCisrKyBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9ndGsvYWNjZXNzaWJpbGl0eS9jYXJldC1vZmZz
ZXRzLmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMzUgQEAKKzwhRE9DVFlQRSBIVE1M
IFBVQkxJQyAiLS8vSUVURi8vRFREIEhUTUwvL0VOIj4KKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0
IHNyYz0iLi4vLi4vLi4vcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzxzY3Jp
cHQgc3JjPSIuLi9yZXNvdXJjZXMvYXRrLWhlbHBlcnMuanMiPjwvc2NyaXB0PgorPC9oZWFkPgor
Cis8Ym9keSBpZD0iYm9keSI+Cis8aDEgaWQ9J2ZpcnN0Q2hpbGQnPkEgdGV4dCBoZWFkZXI8L2gx
PgorCis8cD5BIHBhcmFncmFwaCA8YSBocmVmPSdodHRwOi8vZm9vLmJhci5iYXovJz53aXRoIGEg
bGluazwvYT4gaW4gdGhlIG1pZGRsZTwvcD4KKworPG9sPgorICA8bGk+QSBsaXN0IGl0ZW08L2xp
PgorICA8bGk+PHNwYW4gc3R5bGU9J2Rpc3BsYXk6YmxvY2s7Jz5CbG9jayBzcGFuIGluIGEgbGlz
dCBpdGVtPC9zcGFuPjxzcGFuPklubGluZSBzcGFuIGluIGEgbGlzdCBpdGVtPC9zcGFuPjwvbGk+
CisgIDxsaT48YSBocmVmPSdmb28nPjxzcGFuIHN0eWxlPSdkaXNwbGF5OmJsb2NrOyc+QmxvY2sg
c3BhbiBpbiBhIGxpbmsgaW4gYSBsaXN0IGl0ZW08L3NwYW4+PHNwYW4+SW5saW5lIHNwYW4gaW4g
YSBsaW5rIGluIGEgbGlzdCBpdGVtPC9zcGFuPjwvYT48L2xpPgorPC9vbD4KKworPHNlbGVjdD48
b3B0aW9uIHNlbGVjdGVkIHZhbHVlPSdmb28nPkFuIG9wdGlvbiBpbiBhIGNvbWJvIGJveDwvb3B0
aW9uPjwvc2VsZWN0PgorCis8aW5wdXQgdHlwZT0ndGV4dCcgbmFtZT0nZm9vJyB2YWx1ZT0nZm9v
IGJhciBiYXonIC8+CisKKzx0YWJsZT4KKyAgPHRyPgorICAgIDx0ZD5hIHRhYmxlIGNlbGw8L3Rk
PgorICAgIDx0ZD48L3RkPgorICAgIDx0ZD48YSBocmVmPSdmb28nPjxzcGFuIHN0eWxlPSdkaXNw
bGF5OmJsb2NrOyc+QmxvY2sgc3BhbiBpbiBhIGxpbmsgaW4gYSB0YWJsZSBjZWxsPC9zcGFuPjxz
cGFuPklubGluZSBzcGFuIGluIGEgbGluayBpbiBhIHRhYmxlIGNlbGw8L3NwYW4+PC9hPjwvdGQ+
CisgICAgPHRkPjxzcGFuIHN0eWxlPSdkaXNwbGF5OmJsb2NrOyc+QmxvY2sgc3BhbiBpbiBhIHRh
YmxlIGNlbGw8L3NwYW4+PHNwYW4+SW5saW5lIHNwYW4gaW4gYSB0YWJsZSBjZWxsPC9zcGFuPjwv
dGQ+CisgIDwvdHI+Cis8L3RhYmxlPgorCis8cD5UaGlzCisgICAgICAgICAgICAgICAgICAgICAg
ICAgIHBhcmFncmFwaAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib3JrZWQhPC9wPgorCis8ZGl2
IGlkPSJjb25zb2xlIj48L2Rpdj4KKworPHNjcmlwdD4KK3ZhciBjYXJldE1vdmVkRGF0YTsKKwor
ZnVuY3Rpb24gZ2xvYmFsTGlzdGVuZXIob2JqZWN0LCBuYW1lLCBvZmZzZXQpCit7CisgICAgdmFy
IHJvbGUgPSBvYmplY3Qucm9sZS5yZXBsYWNlKCdBWFJvbGU6IEFYJywgJycpOworICAgIGlmIChu
YW1lID09ICdBWFRleHRDYXJldE1vdmVkJykgeworICAgICAgICBjYXJldE1vdmVkRGF0YSArPSBy
b2xlICsgJ3wnICsgb2Zmc2V0OworICAgIH0KK30KKworZnVuY3Rpb24gcmVzZXRDYXJldE9mZnNl
dEZvck9iamVjdChvYmplY3QsIG9mZnNldCkKK3sKKyAgICBjYXJldE1vdmVkRGF0YSA9ICcnOwor
ICAgIHNldENhcmV0T2Zmc2V0KG9iamVjdCwgb2Zmc2V0KTsKK30KKworaWYgKHdpbmRvdy50ZXN0
UnVubmVyKSB7CisgICAgdGVzdFJ1bm5lci5vdmVycmlkZVByZWZlcmVuY2UoIldlYktpdEVuYWJs
ZUNhcmV0QnJvd3NpbmciLCB0cnVlKTsKKyAgICB0ZXN0UnVubmVyLmR1bXBBc1RleHQoKTsKK30K
KworaWYgKHdpbmRvdy5hY2Nlc3NpYmlsaXR5Q29udHJvbGxlcikgeworICAgIGFjY2Vzc2liaWxp
dHlDb250cm9sbGVyLmFkZE5vdGlmaWNhdGlvbkxpc3RlbmVyKGdsb2JhbExpc3RlbmVyKTsKKyAg
ICByb290ID0gYWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIuYWNjZXNzaWJsZUVsZW1lbnRCeUlkKCdm
aXJzdENoaWxkJykucGFyZW50RWxlbWVudCgpOworICAgIHNob3VsZEJlKCdyb290LmNoaWxkcmVu
Q291bnQnLCAnNicpOworCisgICAgLyogSXQgc2hvdWxkIGJlIHBvc3NpYmxlIHRvIHBsYWNlIHRo
ZSBjYXJldCBpbnNpZGUgYSBoZWFkZXIuICovCisgICAgaDEgPSByb290LmNoaWxkQXRJbmRleCgw
KTsKKyAgICBjYXJldE1vdmVkRGF0YSA9ICcnOworICAgIHNob3VsZEJlVHJ1ZSgnc2V0Q2FyZXRP
ZmZzZXQoaDEsIDUpJyk7CisgICAgc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCdjYXJldE1vdmVkRGF0
YScsICdIZWFkaW5nfDUnKTsKKworICAgIC8qIEl0IHNob3VsZCBiZSBwb3NzaWJsZSB0byBwbGFj
ZSB0aGUgY2FyZXQgaW5zaWRlIGEgcGFyYWdyYXBoIGFuZCBhIGxpbmsuICovCisgICAgcDEgPSBy
b290LmNoaWxkQXRJbmRleCgxKTsKKyAgICByZXNldENhcmV0T2Zmc2V0Rm9yT2JqZWN0KHAxLCA1
KTsKKyAgICBzaG91bGRCZUVxdWFsVG9TdHJpbmcoJ2NhcmV0TW92ZWREYXRhJywgJ1BhcmFncmFw
aHw1Jyk7CisgICAgcmVzZXRDYXJldE9mZnNldEZvck9iamVjdChwMSwgMjApOworICAgIHNob3Vs
ZEJlRXF1YWxUb1N0cmluZygnY2FyZXRNb3ZlZERhdGEnLCAnUGFyYWdyYXBofDIwJyk7CisgICAg
cmVzZXRDYXJldE9mZnNldEZvck9iamVjdChwMSwgMzApOworICAgIHNob3VsZEJlRXF1YWxUb1N0
cmluZygnY2FyZXRNb3ZlZERhdGEnLCAnUGFyYWdyYXBofDMwJyk7CisgICAgbGluayA9IHAxLmNo
aWxkQXRJbmRleCgwKTsKKyAgICBjYXJldE1vdmVkRGF0YSA9ICcnOworICAgIHNob3VsZEJlVHJ1
ZSgnc2V0Q2FyZXRPZmZzZXQobGluaywgNSknKTsKKyAgICAvKiBQb3NpdGlvbnMgaW5zaWRlIGxp
bmtzIGFyZSByZXBvcnRlZCByZWxhdGl2ZSB0byB0aGUgcGFyYWdyYXBoLiAqLworICAgIHNob3Vs
ZEJlRXF1YWxUb1N0cmluZygnY2FyZXRNb3ZlZERhdGEnLCAnUGFyYWdyYXBofDE3Jyk7CisKKyAg
ICBsaXN0ID0gcm9vdC5jaGlsZEF0SW5kZXgoMik7CisgICAgc2hvdWxkQmVFcXVhbFRvU3RyaW5n
KCdsaXN0LnJvbGUnLCAnQVhSb2xlOiBBWExpc3QnKTsKKyAgICBzaG91bGRCZSgnbGlzdC5jaGls
ZHJlbkNvdW50JywgJzMnKTsKKyAgICBsaXN0SXRlbSA9IGxpc3QuY2hpbGRBdEluZGV4KDIpOwor
ICAgIC8qIEl0J3Mgbm90IHBvc3NpYmxlIHRvIHBsYWNlIHRoZSBjYXJldCBpbnNpZGUgYW4gaXRl
bSdzIG1hcmtlci4gKi8KKyAgICBzaG91bGRCZSgnc2V0Q2FyZXRPZmZzZXQobGlzdEl0ZW0sIDEp
JywgJ2ZhbHNlJyk7CisgICAgLyogSXQgc2hvdWxkIGJlIHBvc3NpYmxlIHRvIHBsYWNlIHRoZSBj
YXJldCBpbnNpZGUgYW4gaXRlbSdzIHRleHQuICovCisgICAgY2FyZXRNb3ZlZERhdGEgPSAnJzsK
KyAgICBzaG91bGRCZSgnc2V0Q2FyZXRPZmZzZXQobGlzdEl0ZW0sIDUpJywgJ3RydWUnKTsKKyAg
ICBzaG91bGRCZUVxdWFsVG9TdHJpbmcoJ2NhcmV0TW92ZWREYXRhJywgJ0xpc3RJdGVtfDInKTsK
KworICAgIHBhbmVsID0gcm9vdC5jaGlsZEF0SW5kZXgoMyk7CisgICAgY29tYm9Cb3ggPSBwYW5l
bC5jaGlsZEF0SW5kZXgoMCk7CisgICAgc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCdjb21ib0JveC5y
b2xlJywgJ0FYUm9sZTogQVhDb21ib0JveCcpOworICAgIG1lbnVQb3B1cCA9IGNvbWJvQm94LmNo
aWxkQXRJbmRleCgwKTsKKyAgICBzaG91bGRCZUVxdWFsVG9TdHJpbmcoJ21lbnVQb3B1cC5yb2xl
JywgJ0FYUm9sZTogQVhNZW51Jyk7CisgICAgY29tYm9Cb3hPcHRpb24gPSBtZW51UG9wdXAuY2hp
bGRBdEluZGV4KDApOworICAgIHNob3VsZEJlRXF1YWxUb1N0cmluZygnY29tYm9Cb3hPcHRpb24u
cm9sZScsICdBWFJvbGU6IEFYTWVudUl0ZW0nKTsKKyAgICAvKiBJdCdzIG5vdCBwb3NzaWJsZSB0
byBwbGFjZSB0aGUgY2FyZXQgaW5zaWRlIGFuIG9wdGlvbiBmb3IgYSBjb21ib2JveC4gKi8KKyAg
ICBzaG91bGRCZSgnc2V0Q2FyZXRPZmZzZXQoY29tYm9Cb3hPcHRpb24sIDEpJywgJ2ZhbHNlJyk7
CisgICAgdGV4dEVudHJ5ID0gcGFuZWwuY2hpbGRBdEluZGV4KDEpOworICAgIHNob3VsZEJlRXF1
YWxUb1N0cmluZygndGV4dEVudHJ5LnJvbGUnLCAnQVhSb2xlOiBBWFRleHRGaWVsZCcpOworICAg
IHJlc2V0Q2FyZXRPZmZzZXRGb3JPYmplY3QodGV4dEVudHJ5LCA1KTsKKyAgICBzaG91bGRCZUVx
dWFsVG9TdHJpbmcoJ2NhcmV0TW92ZWREYXRhJywgJ1RleHRGaWVsZHw1Jyk7CisKKyAgICB0YWJs
ZSA9IHJvb3QuY2hpbGRBdEluZGV4KDQpOworICAgIHNob3VsZEJlRXF1YWxUb1N0cmluZygndGFi
bGUucm9sZScsICdBWFJvbGU6IEFYVGFibGUnKTsKKyAgICBzaG91bGRCZSgndGFibGUuY2hpbGRy
ZW5Db3VudCcsICc0Jyk7CisgICAgdGFibGVDZWxsID0gdGFibGUuY2hpbGRBdEluZGV4KDApOwor
ICAgIHNob3VsZEJlRXF1YWxUb1N0cmluZygndGFibGVDZWxsLnJvbGUnLCAnQVhSb2xlOiBBWENl
bGwnKTsKKyAgICByZXNldENhcmV0T2Zmc2V0Rm9yT2JqZWN0KHRhYmxlQ2VsbCwgMik7CisgICAg
c2hvdWxkQmVFcXVhbFRvU3RyaW5nKCdjYXJldE1vdmVkRGF0YScsICdDZWxsfDInKTsKKworICAg
IGJvcmtlZCA9IHJvb3QuY2hpbGRBdEluZGV4KDUpOworICAgIHByZWZpeCA9ICdBWFZhbHVlOiAn
CisgICAgc2hvdWxkQmVUcnVlUXVpZXQoJ2JvcmtlZC5zdHJpbmdWYWx1ZS5zdWJzdHJpbmcoMCwg
OSkgPT0gIicgKyBwcmVmaXggKyAnIicpOworICAgIGJvcmtlZFRleHRMZW5ndGggPSBib3JrZWQu
c3RyaW5nVmFsdWUubGVuZ3RoIC0gcHJlZml4Lmxlbmd0aAorICAgIHNob3VsZEJlKCdib3JrZWRU
ZXh0TGVuZ3RoJywgJzI1Jyk7CisgICAgcmVzZXRDYXJldE9mZnNldEZvck9iamVjdChib3JrZWQs
IGJvcmtlZFRleHRMZW5ndGggLSAxKTsKKyAgICBzaG91bGRCZUVxdWFsVG9TdHJpbmcoJ2NhcmV0
TW92ZWREYXRhJywgJ1BhcmFncmFwaHwyNCcpOworICAgIHJlc2V0Q2FyZXRPZmZzZXRGb3JPYmpl
Y3QoYm9ya2VkLCBib3JrZWRUZXh0TGVuZ3RoKTsKKyAgICBzaG91bGRCZUVxdWFsVG9TdHJpbmco
J2NhcmV0TW92ZWREYXRhJywgJ1BhcmFncmFwaHwyNScpOworfQorCitkZXNjcmlwdGlvbigiVGhp
cyB0ZXN0IGlzIHJlcGxpY2F0ZWQgZnJvbSBvbGQgZmlsZSB0ZXN0YXRrLmMgYW5kIHRlc3RzIHZh
cmlvdXMgc2NlbmFyaW9zIG9mIGNhcmV0IG1vdmVtZW50OiBzZXR0aW5nIGNhcmV0IG9mZnNldCBh
bmQgcmVjZWl2aW5nIHRleHQtY2FyZXQtbW92ZWQgc2lnbmFsLiIpOworCis8L3NjcmlwdD4KKzxz
Y3JpcHQgc3JjPSIuLi8uLi8uLi9yZXNvdXJjZXMvanMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4K
KzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IExheW91dFRlc3RzL3BsYXRmb3JtL2d0ay9yZXNvdXJj
ZXMvYXRrLWhlbHBlcnMuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvcGxhdGZvcm0vZ3Rr
L3Jlc291cmNlcy9hdGstaGVscGVycy5qcwkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL3Bs
YXRmb3JtL2d0ay9yZXNvdXJjZXMvYXRrLWhlbHBlcnMuanMJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSw0IEBACitmdW5jdGlvbiBzZXRDYXJldE9mZnNldChhY2Nlc3NpYmxlVGV4dCwgb2Zmc2V0
KQoreworICAgIHJldHVybiBhY2Nlc3NpYmxlVGV4dC5zZXRTZWxlY3RlZFRleHRSYW5nZShvZmZz
ZXQsIDApOworfQpJbmRleDogVG9vbHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0No
YW5nZUxvZwkocmV2aXNpb24gMTY4ODMyKQorKysgVG9vbHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDMgKzEsMzcgQEAKKzIwMTQtMDUtMTQgIEphcmVrIEN6ZWthbHNraSAgPGphcmVr
Y3pla0Bwb2N6dGEub25ldC5wbD4KKworICAgICAgICBbQVRLXSBBZGRlZCBuZXcgYWNjZXNzaWJp
bGl0eSBzaWduYWw6IHRleHQtY2FyZXQtbW92ZWQuCisgICAgICAgIE1ha2UgQWNjZXNzaWJpbGl0
eVVJRWxlbWVudC5zZXRTZWxlY3RlZFRleHRSYW5nZSB3b3JrCisgICAgICAgIGFzIGF0a190ZXh0
X3NldF9jYXJldF9vZmZzZXQgd2hlbiBnaXZlbiBvZmZzZXQgPT0gMC4KKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzMjUyNworCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIHRleHQtY2FyZXQtbW92ZWQgc2lnbmFs
IGluIGFjY2Vzc2liaWxpdHlDb250cm9sbGVyIGlzIG5lZWRlZCB0bworICAgICAgICBpbXBsZW1l
bnQgdGVzdHMgZnJvbSBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEd0ay90ZXN0YXRr
LmMKKyAgICAgICAgYXMgTGF5b3V0VGVzdHMuIEFkZCB0aGUgc2lnbmFsIHRvIHRoZSBjb250cm9s
bGVyLgorCisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9CaW5kaW5n
cy9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50LmlkbDoKKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVy
L0luamVjdGVkQnVuZGxlL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnQuY3BwOgorICAgICAgICAqIFdl
YktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvQWNjZXNzaWJpbGl0eVVJRWxlbWVudC5oOgor
ICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvaW9zL0FjY2Vzc2liaWxp
dHlVSUVsZW1lbnRJT1MubW06CisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1
bmRsZS9tYWMvQWNjZXNzaWJpbGl0eVVJRWxlbWVudE1hYy5tbToKKyAgICAgICAgKHNldFNlbGVj
dGVkVGV4dFJhbmdlKTogQ2hhbmdlIHJldHVybiB0eXBlIHRvIGJvb2wuCisgICAgICAgICogV2Vi
S2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9hdGsvQWNjZXNzaWJpbGl0eVVJRWxlbWVudEF0
ay5jcHA6CisgICAgICAgIChzZXRTZWxlY3RlZFRleHRSYW5nZSk6IENhbGwgYXRrX3RleHRfc2V0
X2NhcmV0X29mZnNldCBhbmQgcmV0dXJuIGJvb2wuCisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5l
ci9JbmplY3RlZEJ1bmRsZS9hdGsvQWNjZXNzaWJpbGl0eU5vdGlmaWNhdGlvbkhhbmRsZXJBdGsu
Y3BwOgorICAgICAgICAoYXhPYmplY3RFdmVudExpc3RlbmVyKTogQWRkIG5vdGlmaWNhdGlvbiBu
YW1lIEFYVGV4dENhcmV0TW92ZWQsIGFsbG93CisgICAgICAgIGZvciBleHRyYSBhcmd1bWVudHMg
cGFzc2VkIHRvIGhhbmRsZXIgYW5kIHVzZSBpdCBmb3IgdGV4dC1jYXJldC1tb3ZlZCBvZmZzZXQu
CisgICAgICAgIChXVFI6OkFjY2Vzc2liaWxpdHlOb3RpZmljYXRpb25IYW5kbGVyOjpjb25uZWN0
QWNjZXNzaWJpbGl0eUNhbGxiYWNrcyk6CisgICAgICAgIENvbm5lY3QgY2FsbGJhY2sgdG8gbmV3
IGxpc3RlbmVyIGZvciBBVEs6QXRrVGV4dDp0ZXh0LWNhcmV0LW1vdmVkLgorICAgICAgICBSZWZh
Y3RvciBzbyB0aGF0IGZhaWx1cmVzIGJlIHJlcG9ydGVkLgorICAgICAgICBJbml0aWFsaXplIGF0
ayBpbnRlcmZhY2VzIGJlZm9yZSB0cnlpbmcgdG8gY29ubmVjdCB0byB0aGVtLCBzZWUKKyAgICAg
ICAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTcyOTkyMgorICAg
ICAgICAoV1RSOjpBY2Nlc3NpYmlsaXR5Tm90aWZpY2F0aW9uSGFuZGxlcjo6ZGlzY29ubmVjdEFj
Y2Vzc2liaWxpdHlDYWxsYmFja3MpOgorICAgICAgICBTaW1wbGlmeSBjb2RlIGJ5IHVzaW5nIGEg
dmVjdG9yIGluIHBsYWNlIG9mIGRvemVuIHZhcmlhYmxlcy4KKyAgICAgICAgKiBEdW1wUmVuZGVy
VHJlZS9hdGsvQWNjZXNzaWJpbGl0eUNhbGxiYWNrc0F0ay5jcHA6CisgICAgICAgIENvbW1lbnQg
YWJvdXQgbm90IHN5bmNocm9uaXppbmcgd2l0aCBhY2Nlc3NpYmlsaXR5Q29udHJvbGxlci4KKwog
MjAxNC0wNS0xMyAgQ2FybG9zIEFsYmVydG8gTG9wZXogUGVyZXogIDxjbG9wZXpAaWdhbGlhLmNv
bT4KIAogICAgICAgICBGbGFraW5lc3MgZGFzaGJvYXJkIGNvbnRhaW5zIG91dGRhdGVkIGxpc3Qg
b2YgYm90cyBvbiBidWlsZGVycy5qc29ucApJbmRleDogVG9vbHMvRHVtcFJlbmRlclRyZWUvYXRr
L0FjY2Vzc2liaWxpdHlDYWxsYmFja3NBdGsuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0R1bXBS
ZW5kZXJUcmVlL2F0ay9BY2Nlc3NpYmlsaXR5Q2FsbGJhY2tzQXRrLmNwcAkocmV2aXNpb24gMTY4
ODMyKQorKysgVG9vbHMvRHVtcFJlbmRlclRyZWUvYXRrL0FjY2Vzc2liaWxpdHlDYWxsYmFja3NB
dGsuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Nyw2ICs1Nyw5IEBACiBzdGF0aWMgZ3VpbnQgcHJv
cGVydHlDaGFuZ2VkTGlzdGVuZXJJZCA9IDA7CiBzdGF0aWMgZ3VpbnQgdmlzaWJsZURhdGFDaGFu
Z2VkTGlzdGVuZXJJZCA9IDA7CiBzdGF0aWMgZ3VpbnQgbG9hZENvbXBsZXRlTGlzdGVuZXJJZCA9
IDA7CisvLyBVcCB0byAyMDE0IGl0IHdhcyBvYmxpZ2F0b3J5IHRvIG1pcnJvciB0aGUgY2hhbmdl
cyBmcm9tCisvLyBXZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL2F0ay9BY2Nlc3NpYmls
aXR5Tm90aWZpY2F0aW9uSGFuZGxlckF0ay5jcHAsCisvLyBidXQgdGhlIGhhYml0IGhhcyBiZWVu
IGRyb3BwZWQ6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzI1Mjcj
YzYKIHN0YXRpYyBOb3RpZmljYXRpb25IYW5kbGVyc01hcCBub3RpZmljYXRpb25IYW5kbGVyczsK
IHN0YXRpYyBBY2Nlc3NpYmlsaXR5Tm90aWZpY2F0aW9uSGFuZGxlciogZ2xvYmFsTm90aWZpY2F0
aW9uSGFuZGxlciA9IDA7CiAKSW5kZXg6IFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRC
dW5kbGUvQWNjZXNzaWJpbGl0eVVJRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2Vi
S2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50LmNwcAko
cmV2aXNpb24gMTY4ODMyKQorKysgVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRs
ZS9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTcyLDcgKzE3
Miw3IEBACiBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6
cmFuZ2VGb3JMaW5lKGludCkgeyByZXR1cm4gMDsgfQogSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+
IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnJhbmdlRm9yUG9zaXRpb24oaW50LCBpbnQpIHsgcmV0
dXJuIDA7IH0KIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50
Ojpib3VuZHNGb3JSYW5nZSh1bnNpZ25lZCwgdW5zaWduZWQpIHsgcmV0dXJuIDA7IH0KLXZvaWQg
QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6c2V0U2VsZWN0ZWRUZXh0UmFuZ2UodW5zaWduZWQsIHVu
c2lnbmVkKSB7IH0KK2Jvb2wgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6c2V0U2VsZWN0ZWRUZXh0
UmFuZ2UodW5zaWduZWQsIHVuc2lnbmVkKSB7IHJldHVybiBmYWxzZTsgfQogSlNSZXRhaW5QdHI8
SlNTdHJpbmdSZWY+IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnN0cmluZ0ZvclJhbmdlKHVuc2ln
bmVkLCB1bnNpZ25lZCkgeyByZXR1cm4gMDsgfQogSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IEFj
Y2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmF0dHJpYnV0ZWRTdHJpbmdGb3JSYW5nZSh1bnNpZ25lZCwg
dW5zaWduZWQpIHsgcmV0dXJuIDA7IH0KIGJvb2wgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YXR0
cmlidXRlZFN0cmluZ1JhbmdlSXNNaXNzcGVsbGVkKHVuc2lnbmVkLCB1bnNpZ25lZCkgeyByZXR1
cm4gZmFsc2U7IH0KSW5kZXg6IFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUv
QWNjZXNzaWJpbGl0eVVJRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYktpdFRlc3RS
dW5uZXIvSW5qZWN0ZWRCdW5kbGUvQWNjZXNzaWJpbGl0eVVJRWxlbWVudC5oCShyZXZpc2lvbiAx
Njg4MzIpCisrKyBUb29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0FjY2Vzc2li
aWxpdHlVSUVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMjAyLDcgKzIwMiw3IEBACiAgICAg
SlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IHJhbmdlRm9yTGluZShpbnQpOwogICAgIEpTUmV0YWlu
UHRyPEpTU3RyaW5nUmVmPiByYW5nZUZvclBvc2l0aW9uKGludCB4LCBpbnQgeSk7CiAgICAgSlNS
ZXRhaW5QdHI8SlNTdHJpbmdSZWY+IGJvdW5kc0ZvclJhbmdlKHVuc2lnbmVkIGxvY2F0aW9uLCB1
bnNpZ25lZCBsZW5ndGgpOwotICAgIHZvaWQgc2V0U2VsZWN0ZWRUZXh0UmFuZ2UodW5zaWduZWQg
bG9jYXRpb24sIHVuc2lnbmVkIGxlbmd0aCk7CisgICAgYm9vbCBzZXRTZWxlY3RlZFRleHRSYW5n
ZSh1bnNpZ25lZCBsb2NhdGlvbiwgdW5zaWduZWQgbGVuZ3RoKTsKICAgICBKU1JldGFpblB0cjxK
U1N0cmluZ1JlZj4gc3RyaW5nRm9yUmFuZ2UodW5zaWduZWQgbG9jYXRpb24sIHVuc2lnbmVkIGxl
bmd0aCk7CiAgICAgSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IGF0dHJpYnV0ZWRTdHJpbmdGb3JS
YW5nZSh1bnNpZ25lZCBsb2NhdGlvbiwgdW5zaWduZWQgbGVuZ3RoKTsKICAgICBib29sIGF0dHJp
YnV0ZWRTdHJpbmdSYW5nZUlzTWlzc3BlbGxlZCh1bnNpZ25lZCBsb2NhdGlvbiwgdW5zaWduZWQg
bGVuZ3RoKTsKSW5kZXg6IFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvQmlu
ZGluZ3MvQWNjZXNzaWJpbGl0eVVJRWxlbWVudC5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2Vi
S2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9CaW5kaW5ncy9BY2Nlc3NpYmlsaXR5VUlFbGVt
ZW50LmlkbAkocmV2aXNpb24gMTY4ODMyKQorKysgVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9Jbmpl
Y3RlZEJ1bmRsZS9CaW5kaW5ncy9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50LmlkbAkod29ya2luZyBj
b3B5KQpAQCAtMTYxLDcgKzE2MSw3IEBACiAgICAgW1Bhc3NDb250ZXh0XSB1bnNpZ25lZCBpbnQg
dWlFbGVtZW50Q291bnRGb3JTZWFyY2hQcmVkaWNhdGUoQWNjZXNzaWJpbGl0eVVJRWxlbWVudCBz
dGFydEVsZW1lbnQsIGJvb2xlYW4gaXNEaXJlY3Rpb25OZXh0LCBvYmplY3Qgc2VhcmNoS2V5LCBE
T01TdHJpbmcgc2VhcmNoVGV4dCwgYm9vbGVhbiB2aXNpYmxlT25seSwgYm9vbGVhbiBpbW1lZGlh
dGVEZXNjZW5kYW50c09ubHkpOwogICAgIFtQYXNzQ29udGV4dF0gQWNjZXNzaWJpbGl0eVVJRWxl
bWVudCB1aUVsZW1lbnRGb3JTZWFyY2hQcmVkaWNhdGUoQWNjZXNzaWJpbGl0eVVJRWxlbWVudCBz
dGFydEVsZW1lbnQsIGJvb2xlYW4gaXNEaXJlY3Rpb25OZXh0LCBvYmplY3Qgc2VhcmNoS2V5LCBE
T01TdHJpbmcgc2VhcmNoVGV4dCwgYm9vbGVhbiB2aXNpYmxlT25seSwgYm9vbGVhbiBpbW1lZGlh
dGVEZXNjZW5kYW50c09ubHkpOwogICAgIFtQYXNzQ29udGV4dF0gRE9NU3RyaW5nIHNlbGVjdFRl
eHRXaXRoQ3JpdGVyaWEoRE9NU3RyaW5nIGFtYmlndWl0eVJlc29sdXRpb24sIG9iamVjdCBzZWFy
Y2hTdHJpbmdzLCBET01TdHJpbmcgcmVwbGFjZW1lbnRTdHJpbmcsIERPTVN0cmluZyBhY3Rpdml0
eSk7Ci0gICAgdm9pZCBzZXRTZWxlY3RlZFRleHRSYW5nZSh1bnNpZ25lZCBsb25nIGxvY2F0aW9u
LCB1bnNpZ25lZCBsb25nIGxlbmd0aCk7CisgICAgYm9vbGVhbiBzZXRTZWxlY3RlZFRleHRSYW5n
ZSh1bnNpZ25lZCBsb25nIGxvY2F0aW9uLCB1bnNpZ25lZCBsb25nIGxlbmd0aCk7CiAKICAgICAv
LyBTY3JvbGwgYXJlYSBhdHRyaWJ1dGVzLgogICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBBY2Nlc3Np
YmlsaXR5VUlFbGVtZW50IGhvcml6b250YWxTY3JvbGxiYXI7CkluZGV4OiBUb29scy9XZWJLaXRU
ZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL2F0ay9BY2Nlc3NpYmlsaXR5Tm90aWZpY2F0aW9uSGFu
ZGxlckF0ay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3Rl
ZEJ1bmRsZS9hdGsvQWNjZXNzaWJpbGl0eU5vdGlmaWNhdGlvbkhhbmRsZXJBdGsuY3BwCShyZXZp
c2lvbiAxNjg4MzIpCisrKyBUb29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL2F0
ay9BY2Nlc3NpYmlsaXR5Tm90aWZpY2F0aW9uSGFuZGxlckF0ay5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTI5LDYgKzI5LDcgQEAKICNpbmNsdWRlIDxXZWJLaXQyL1dLQnVuZGxlUGFnZS5oPgogI2lu
Y2x1ZGUgPFdlYktpdDIvV0tCdW5kbGVQYWdlUHJpdmF0ZS5oPgogI2luY2x1ZGUgPHd0Zi9IYXNo
TWFwLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogI2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dV
bmlxdWVQdHIuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CiAjaW5jbHVkZSA8d3Rm
L3RleHQvV1RGU3RyaW5nLmg+CkBAIC0zOSwxMyArNDAsNyBAQAogCiB0eXBlZGVmIEhhc2hNYXA8
QXRrT2JqZWN0KiwgQWNjZXNzaWJpbGl0eU5vdGlmaWNhdGlvbkhhbmRsZXIqPiBOb3RpZmljYXRp
b25IYW5kbGVyc01hcDsKIAotdW5zaWduZWQgc3RhdGVDaGFuZ2VMaXN0ZW5lcklkID0gMDsKLXVu
c2lnbmVkIGZvY3VzRXZlbnRMaXN0ZW5lcklkID0gMDsKLXVuc2lnbmVkIGFjdGl2ZURlc2NlbmRh
bnRDaGFuZ2VkTGlzdGVuZXJJZCA9IDA7Ci11bnNpZ25lZCBjaGlsZHJlbkNoYW5nZWRMaXN0ZW5l
cklkID0gMDsKLXVuc2lnbmVkIHByb3BlcnR5Q2hhbmdlZExpc3RlbmVySWQgPSAwOwotdW5zaWdu
ZWQgdmlzaWJsZURhdGFDaGFuZ2VkTGlzdGVuZXJJZCA9IDA7Ci11bnNpZ25lZCBsb2FkQ29tcGxl
dGVMaXN0ZW5lcklkID0gMDsKK1dURjo6VmVjdG9yPHVuc2lnbmVkPiBsaXN0ZW5lcklkczsKIE5v
dGlmaWNhdGlvbkhhbmRsZXJzTWFwIG5vdGlmaWNhdGlvbkhhbmRsZXJzOwogQWNjZXNzaWJpbGl0
eU5vdGlmaWNhdGlvbkhhbmRsZXIqIGdsb2JhbE5vdGlmaWNhdGlvbkhhbmRsZXIgPSBudWxscHRy
OwogYm9vbCBsb2dnaW5nQWNjZXNzaWJpbGl0eUV2ZW50cyA9IGZhbHNlOwpAQCAtODIsMTAgKzc3
LDE5IEBACiAgICAgaWYgKCFhY2Nlc3NpYmxlIHx8ICFBVEtfSVNfT0JKRUNUKGFjY2Vzc2libGUp
KQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAorI2lmIFBMQVRGT1JNKEdUSykgfHwgUExBVEZPUk0o
RUZMKQorICAgIFdLQnVuZGxlUGFnZVJlZiBwYWdlID0gSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgp
LnBhZ2UoKS0+cGFnZSgpOworICAgIFdLQnVuZGxlRnJhbWVSZWYgbWFpbkZyYW1lID0gV0tCdW5k
bGVQYWdlR2V0TWFpbkZyYW1lKHBhZ2UpOworICAgIEpTQ29udGV4dFJlZiBqc0NvbnRleHQgPSBX
S0J1bmRsZUZyYW1lR2V0SmF2YVNjcmlwdENvbnRleHQobWFpbkZyYW1lKTsKKyNlbHNlCisgICAg
SlNDb250ZXh0UmVmIGpzQ29udGV4dCA9IG51bGxwdHI7CisjZW5kaWYKKwogICAgIEdTaWduYWxR
dWVyeSBzaWduYWxRdWVyeTsKICAgICBHVW5pcXVlUHRyPGNoYXI+IHNpZ25hbE5hbWU7CiAgICAg
R1VuaXF1ZVB0cjxjaGFyPiBzaWduYWxWYWx1ZTsKICAgICBjb25zdCBjaGFyKiBub3RpZmljYXRp
b25OYW1lID0gbnVsbHB0cjsKKyAgICBWZWN0b3I8SlNWYWx1ZVJlZj4gZXh0cmFBcmdzOwogCiAg
ICAgZ19zaWduYWxfcXVlcnkoc2lnbmFsSGludC0+c2lnbmFsX2lkLCAmc2lnbmFsUXVlcnkpOwog
CkBAIC0xMTIsMTkgKzExNiwxOCBAQAogICAgICAgICAgICAgbm90aWZpY2F0aW9uTmFtZSA9ICJB
WFZhbHVlQ2hhbmdlZCI7CiAgICAgfSBlbHNlIGlmICghZ19zdHJjbXAwKHNpZ25hbFF1ZXJ5LnNp
Z25hbF9uYW1lLCAibG9hZC1jb21wbGV0ZSIpKQogICAgICAgICBub3RpZmljYXRpb25OYW1lID0g
IkFYTG9hZENvbXBsZXRlIjsKLSAgICBlbHNlCisgICAgZWxzZSBpZiAoIWdfc3RyY21wMChzaWdu
YWxRdWVyeS5zaWduYWxfbmFtZSwgInRleHQtY2FyZXQtbW92ZWQiKSkgeworICAgICAgICBub3Rp
ZmljYXRpb25OYW1lID0gIkFYVGV4dENhcmV0TW92ZWQiOwogICAgICAgICBzaWduYWxOYW1lLnJl
c2V0KGdfc3RyZHVwKHNpZ25hbFF1ZXJ5LnNpZ25hbF9uYW1lKSk7CisgICAgICAgIHNpZ25hbFZh
bHVlLnJlc2V0KGdfc3RyZHVwX3ByaW50ZigiJWQiLCBnX3ZhbHVlX2dldF9pbnQoJnBhcmFtVmFs
dWVzWzFdKSkpOworICAgICAgICBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4ganNTaWduYWxWYWx1
ZShBZG9wdCwgSlNTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoc2lnbmFsVmFsdWUuZ2V0KCkp
KTsKKyAgICAgICAgZXh0cmFBcmdzLmFwcGVuZChKU1ZhbHVlTWFrZVN0cmluZyhqc0NvbnRleHQs
IGpzU2lnbmFsVmFsdWUuZ2V0KCkpKTsKKyAgICB9IGVsc2UKKyAgICAgICAgc2lnbmFsTmFtZS5y
ZXNldChnX3N0cmR1cChzaWduYWxRdWVyeS5zaWduYWxfbmFtZSkpOwogCiAgICAgaWYgKGxvZ2dp
bmdBY2Nlc3NpYmlsaXR5RXZlbnRzKQogICAgICAgICBwcmludEFjY2Vzc2liaWxpdHlFdmVudChh
Y2Nlc3NpYmxlLCBzaWduYWxOYW1lLmdldCgpLCBzaWduYWxWYWx1ZS5nZXQoKSk7CiAKLSNpZiBQ
TEFURk9STShHVEspIHx8IFBMQVRGT1JNKEVGTCkKLSAgICBXS0J1bmRsZVBhZ2VSZWYgcGFnZSA9
IEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5wYWdlKCktPnBhZ2UoKTsKLSAgICBXS0J1bmRsZUZy
YW1lUmVmIG1haW5GcmFtZSA9IFdLQnVuZGxlUGFnZUdldE1haW5GcmFtZShwYWdlKTsKLSAgICBK
U0NvbnRleHRSZWYganNDb250ZXh0ID0gV0tCdW5kbGVGcmFtZUdldEphdmFTY3JpcHRDb250ZXh0
KG1haW5GcmFtZSk7Ci0jZWxzZQotICAgIEpTQ29udGV4dFJlZiBqc0NvbnRleHQgPSBudWxscHRy
OwotI2VuZGlmCiAgICAgaWYgKCFqc0NvbnRleHQpCiAgICAgICAgIHJldHVybiB0cnVlOwogCkBA
IC0xMzIsMTcgKzEzNSwyNiBAQAogICAgICAgICBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4ganNO
b3RpZmljYXRpb25FdmVudE5hbWUoQWRvcHQsIEpTU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5n
KG5vdGlmaWNhdGlvbk5hbWUpKTsKICAgICAgICAgSlNWYWx1ZVJlZiBub3RpZmljYXRpb25OYW1l
QXJndW1lbnQgPSBKU1ZhbHVlTWFrZVN0cmluZyhqc0NvbnRleHQsIGpzTm90aWZpY2F0aW9uRXZl
bnROYW1lLmdldCgpKTsKICAgICAgICAgTm90aWZpY2F0aW9uSGFuZGxlcnNNYXA6Oml0ZXJhdG9y
IGVsZW1lbnROb3RpZmljYXRpb25IYW5kbGVyID0gbm90aWZpY2F0aW9uSGFuZGxlcnMuZmluZChh
Y2Nlc3NpYmxlKTsKKyAgICAgICAgSlNWYWx1ZVJlZiBhcmd1bWVudHNbNV07IC8vIHRoaXMgZGlt
ZW5zaW9uIG11c3QgYmUgPj0gMiArIG1heChleHRyYUFyZ3Muc2l6ZSgpKQorICAgICAgICBhcmd1
bWVudHNbMF0gPSB0b0pTKGpzQ29udGV4dCwgV1RGOjpnZXRQdHIoV1RSOjpBY2Nlc3NpYmlsaXR5
VUlFbGVtZW50OjpjcmVhdGUoYWNjZXNzaWJsZSkpKTsKKyAgICAgICAgYXJndW1lbnRzWzFdID0g
bm90aWZpY2F0aW9uTmFtZUFyZ3VtZW50OworICAgICAgICBpbnQgbGFzdEFyZ3VtZW50ID0gMTsK
KyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBleHRyYUFyZ3Muc2l6ZSgpOyBpKyspIHsKKyAg
ICAgICAgICAgIGxhc3RBcmd1bWVudCsrOworICAgICAgICAgICAgYXJndW1lbnRzW2xhc3RBcmd1
bWVudF0gPSBleHRyYUFyZ3NbaV07CisgICAgICAgIH0KICAgICAgICAgaWYgKGVsZW1lbnROb3Rp
ZmljYXRpb25IYW5kbGVyICE9IG5vdGlmaWNhdGlvbkhhbmRsZXJzLmVuZCgpKSB7CiAgICAgICAg
ICAgICAvLyBMaXN0ZW5lciBmb3Igb25lIGVsZW1lbnQganVzdCBnZXRzIG9uZSBhcmd1bWVudCwg
dGhlIG5vdGlmaWNhdGlvbiBuYW1lLgotICAgICAgICAgICAgSlNPYmplY3RDYWxsQXNGdW5jdGlv
bihqc0NvbnRleHQsIGNvbnN0X2Nhc3Q8SlNPYmplY3RSZWY+KGVsZW1lbnROb3RpZmljYXRpb25I
YW5kbGVyLT52YWx1ZS0+bm90aWZpY2F0aW9uRnVuY3Rpb25DYWxsYmFjaygpKSwgMCwgMSwgJm5v
dGlmaWNhdGlvbk5hbWVBcmd1bWVudCwgMCk7CisgICAgICAgICAgICBKU09iamVjdENhbGxBc0Z1
bmN0aW9uKGpzQ29udGV4dCwKKyAgICAgICAgICAgICAgICBjb25zdF9jYXN0PEpTT2JqZWN0UmVm
PihlbGVtZW50Tm90aWZpY2F0aW9uSGFuZGxlci0+dmFsdWUtPm5vdGlmaWNhdGlvbkZ1bmN0aW9u
Q2FsbGJhY2soKSksCisgICAgICAgICAgICAgICAgMCwgbGFzdEFyZ3VtZW50ICsgMSAtIDEsIGFy
Z3VtZW50cyArIDEsIDApOwogICAgICAgICB9CiAKICAgICAgICAgaWYgKGdsb2JhbE5vdGlmaWNh
dGlvbkhhbmRsZXIpIHsKICAgICAgICAgICAgIC8vIEEgZ2xvYmFsIGxpc3RlbmVyIGdldHMgdGhl
IGVsZW1lbnQgYW5kIHRoZSBub3RpZmljYXRpb24gbmFtZSBhcyBhcmd1bWVudHMuCi0gICAgICAg
ICAgICBKU1ZhbHVlUmVmIGFyZ3VtZW50c1syXTsKLSAgICAgICAgICAgIGFyZ3VtZW50c1swXSA9
IHRvSlMoanNDb250ZXh0LCBXVEY6OmdldFB0cihXVFI6OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6
OmNyZWF0ZShhY2Nlc3NpYmxlKSkpOwotICAgICAgICAgICAgYXJndW1lbnRzWzFdID0gbm90aWZp
Y2F0aW9uTmFtZUFyZ3VtZW50OwotICAgICAgICAgICAgSlNPYmplY3RDYWxsQXNGdW5jdGlvbihq
c0NvbnRleHQsIGNvbnN0X2Nhc3Q8SlNPYmplY3RSZWY+KGdsb2JhbE5vdGlmaWNhdGlvbkhhbmRs
ZXItPm5vdGlmaWNhdGlvbkZ1bmN0aW9uQ2FsbGJhY2soKSksIDAsIDIsIGFyZ3VtZW50cywgMCk7
CisgICAgICAgICAgICBKU09iamVjdENhbGxBc0Z1bmN0aW9uKGpzQ29udGV4dCwKKyAgICAgICAg
ICAgICAgICBjb25zdF9jYXN0PEpTT2JqZWN0UmVmPihnbG9iYWxOb3RpZmljYXRpb25IYW5kbGVy
LT5ub3RpZmljYXRpb25GdW5jdGlvbkNhbGxiYWNrKCkpLAorICAgICAgICAgICAgICAgIDAsIGxh
c3RBcmd1bWVudCArIDEsIGFyZ3VtZW50cywgMCk7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTIz
OCwxNCArMjUwLDMzIEBACiAgICAgaWYgKCFkaXNjb25uZWN0QWNjZXNzaWJpbGl0eUNhbGxiYWNr
cygpKQogICAgICAgICByZXR1cm47CiAKKyAgICBjb25zdCBjaGFyKiBzaWduYWxOYW1lc1tdID0g
eworICAgICAgICAiQVRLOkF0a09iamVjdDpzdGF0ZS1jaGFuZ2UiLAorICAgICAgICAiQVRLOkF0
a09iamVjdDpzdGF0ZS1jaGFuZ2UiLAorICAgICAgICAiQVRLOkF0a09iamVjdDpmb2N1cy1ldmVu
dCIsCisgICAgICAgICJBVEs6QXRrT2JqZWN0OmFjdGl2ZS1kZXNjZW5kYW50LWNoYW5nZWQiLAor
ICAgICAgICAiQVRLOkF0a09iamVjdDpjaGlsZHJlbi1jaGFuZ2VkIiwKKyAgICAgICAgIkFUSzpB
dGtPYmplY3Q6cHJvcGVydHktY2hhbmdlIiwKKyAgICAgICAgIkFUSzpBdGtPYmplY3Q6dmlzaWJs
ZS1kYXRhLWNoYW5nZWQiLAorICAgICAgICAiQVRLOkF0a0RvY3VtZW50OmxvYWQtY29tcGxldGUi
LAorICAgICAgICAiQVRLOkF0a1RleHQ6dGV4dC1jYXJldC1tb3ZlZCIsCisgICAgICAgIDAKKyAg
ICB9OworCisgICAgLy8gUmVnaXN0ZXIgYXRrIGludGVyZmFjZXMsIG90aGVyd2lzZSBhZGRfZ2xv
YmFsIG1heSBmYWlsLgorICAgIEdPYmplY3QqIGR1bW15T2JqZWN0ID0gKEdPYmplY3QqKWdfb2Jq
ZWN0X25ldyhHX1RZUEVfT0JKRUNULCBOVUxMLCBOVUxMKTsKKyAgICBnX29iamVjdF91bnJlZihh
dGtfbm9fb3Bfb2JqZWN0X25ldyhkdW1teU9iamVjdCkpOworICAgIGdfb2JqZWN0X3VucmVmKGR1
bW15T2JqZWN0KTsKKwogICAgIC8vIEFkZCBnbG9iYWwgbGlzdGVuZXJzIGZvciBBdGtPYmplY3Qn
cyBzaWduYWxzLgotICAgIHN0YXRlQ2hhbmdlTGlzdGVuZXJJZCA9IGF0a19hZGRfZ2xvYmFsX2V2
ZW50X2xpc3RlbmVyKGF4T2JqZWN0RXZlbnRMaXN0ZW5lciwgIkFUSzpBdGtPYmplY3Q6c3RhdGUt
Y2hhbmdlIik7Ci0gICAgZm9jdXNFdmVudExpc3RlbmVySWQgPSBhdGtfYWRkX2dsb2JhbF9ldmVu
dF9saXN0ZW5lcihheE9iamVjdEV2ZW50TGlzdGVuZXIsICJBVEs6QXRrT2JqZWN0OmZvY3VzLWV2
ZW50Iik7Ci0gICAgYWN0aXZlRGVzY2VuZGFudENoYW5nZWRMaXN0ZW5lcklkID0gYXRrX2FkZF9n
bG9iYWxfZXZlbnRfbGlzdGVuZXIoYXhPYmplY3RFdmVudExpc3RlbmVyLCAiQVRLOkF0a09iamVj
dDphY3RpdmUtZGVzY2VuZGFudC1jaGFuZ2VkIik7Ci0gICAgY2hpbGRyZW5DaGFuZ2VkTGlzdGVu
ZXJJZCA9IGF0a19hZGRfZ2xvYmFsX2V2ZW50X2xpc3RlbmVyKGF4T2JqZWN0RXZlbnRMaXN0ZW5l
ciwgIkFUSzpBdGtPYmplY3Q6Y2hpbGRyZW4tY2hhbmdlZCIpOwotICAgIHByb3BlcnR5Q2hhbmdl
ZExpc3RlbmVySWQgPSBhdGtfYWRkX2dsb2JhbF9ldmVudF9saXN0ZW5lcihheE9iamVjdEV2ZW50
TGlzdGVuZXIsICJBVEs6QXRrT2JqZWN0OnByb3BlcnR5LWNoYW5nZSIpOwotICAgIHZpc2libGVE
YXRhQ2hhbmdlZExpc3RlbmVySWQgPSBhdGtfYWRkX2dsb2JhbF9ldmVudF9saXN0ZW5lcihheE9i
amVjdEV2ZW50TGlzdGVuZXIsICJBVEs6QXRrT2JqZWN0OnZpc2libGUtZGF0YS1jaGFuZ2VkIik7
Ci0gICAgbG9hZENvbXBsZXRlTGlzdGVuZXJJZCA9IGF0a19hZGRfZ2xvYmFsX2V2ZW50X2xpc3Rl
bmVyKGF4T2JqZWN0RXZlbnRMaXN0ZW5lciwgIkFUSzpBdGtEb2N1bWVudDpsb2FkLWNvbXBsZXRl
Iik7CisgICAgZm9yIChjb25zdCBjaGFyKiogc2lnbmFsTmFtZSA9IHNpZ25hbE5hbWVzOyAqc2ln
bmFsTmFtZTsgc2lnbmFsTmFtZSsrKSB7CisgICAgICAgIGd1aW50IGlkID0gYXRrX2FkZF9nbG9i
YWxfZXZlbnRfbGlzdGVuZXIoYXhPYmplY3RFdmVudExpc3RlbmVyLCAqc2lnbmFsTmFtZSk7Cisg
ICAgICAgIGlmICghaWQpIHsKKyAgICAgICAgICAgIFN0cmluZyBtZXNzYWdlID0gU3RyaW5nOjpm
b3JtYXQoImF0a19hZGRfZ2xvYmFsX2V2ZW50X2xpc3RlbmVyIGZhaWxlZCBmb3Igc2lnbmFsICVz
XG4iLCAqc2lnbmFsTmFtZSk7CisgICAgICAgICAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCku
b3V0cHV0VGV4dChtZXNzYWdlKTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBsaXN0ZW5l
cklkcy5hcHBlbmQoaWQpOworICAgIH0KIH0KIAogYm9vbCBBY2Nlc3NpYmlsaXR5Tm90aWZpY2F0
aW9uSGFuZGxlcjo6ZGlzY29ubmVjdEFjY2Vzc2liaWxpdHlDYWxsYmFja3MoKQpAQCAtMjU1LDM0
ICsyODYsMTEgQEAKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgLy8gQXRrT2JqZWN0IHNp
Z25hbHMuCi0gICAgaWYgKHN0YXRlQ2hhbmdlTGlzdGVuZXJJZCkgewotICAgICAgICBhdGtfcmVt
b3ZlX2dsb2JhbF9ldmVudF9saXN0ZW5lcihzdGF0ZUNoYW5nZUxpc3RlbmVySWQpOwotICAgICAg
ICBzdGF0ZUNoYW5nZUxpc3RlbmVySWQgPSAwOworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGlz
dGVuZXJJZHMuc2l6ZSgpOyBpKyspIHsKKyAgICAgICAgQVNTRVJUKGxpc3RlbmVySWRzW2ldKTsK
KyAgICAgICAgYXRrX3JlbW92ZV9nbG9iYWxfZXZlbnRfbGlzdGVuZXIobGlzdGVuZXJJZHNbaV0p
OwogICAgIH0KLSAgICBpZiAoZm9jdXNFdmVudExpc3RlbmVySWQpIHsKLSAgICAgICAgYXRrX3Jl
bW92ZV9nbG9iYWxfZXZlbnRfbGlzdGVuZXIoZm9jdXNFdmVudExpc3RlbmVySWQpOwotICAgICAg
ICBmb2N1c0V2ZW50TGlzdGVuZXJJZCA9IDA7Ci0gICAgfQotICAgIGlmIChhY3RpdmVEZXNjZW5k
YW50Q2hhbmdlZExpc3RlbmVySWQpIHsKLSAgICAgICAgYXRrX3JlbW92ZV9nbG9iYWxfZXZlbnRf
bGlzdGVuZXIoYWN0aXZlRGVzY2VuZGFudENoYW5nZWRMaXN0ZW5lcklkKTsKLSAgICAgICAgYWN0
aXZlRGVzY2VuZGFudENoYW5nZWRMaXN0ZW5lcklkID0gMDsKLSAgICB9Ci0gICAgaWYgKGNoaWxk
cmVuQ2hhbmdlZExpc3RlbmVySWQpIHsKLSAgICAgICAgYXRrX3JlbW92ZV9nbG9iYWxfZXZlbnRf
bGlzdGVuZXIoY2hpbGRyZW5DaGFuZ2VkTGlzdGVuZXJJZCk7Ci0gICAgICAgIGNoaWxkcmVuQ2hh
bmdlZExpc3RlbmVySWQgPSAwOwotICAgIH0KLSAgICBpZiAocHJvcGVydHlDaGFuZ2VkTGlzdGVu
ZXJJZCkgewotICAgICAgICBhdGtfcmVtb3ZlX2dsb2JhbF9ldmVudF9saXN0ZW5lcihwcm9wZXJ0
eUNoYW5nZWRMaXN0ZW5lcklkKTsKLSAgICAgICAgcHJvcGVydHlDaGFuZ2VkTGlzdGVuZXJJZCA9
IDA7Ci0gICAgfQotICAgIGlmICh2aXNpYmxlRGF0YUNoYW5nZWRMaXN0ZW5lcklkKSB7Ci0gICAg
ICAgIGF0a19yZW1vdmVfZ2xvYmFsX2V2ZW50X2xpc3RlbmVyKHZpc2libGVEYXRhQ2hhbmdlZExp
c3RlbmVySWQpOwotICAgICAgICB2aXNpYmxlRGF0YUNoYW5nZWRMaXN0ZW5lcklkID0gMDsKLSAg
ICB9Ci0gICAgaWYgKGxvYWRDb21wbGV0ZUxpc3RlbmVySWQpIHsKLSAgICAgICAgYXRrX3JlbW92
ZV9nbG9iYWxfZXZlbnRfbGlzdGVuZXIobG9hZENvbXBsZXRlTGlzdGVuZXJJZCk7Ci0gICAgICAg
IGxvYWRDb21wbGV0ZUxpc3RlbmVySWQgPSAwOwotICAgIH0KKyAgICBsaXN0ZW5lcklkcy5jbGVh
cigpOwogICAgIHJldHVybiB0cnVlOwogfQogCkluZGV4OiBUb29scy9XZWJLaXRUZXN0UnVubmVy
L0luamVjdGVkQnVuZGxlL2F0ay9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50QXRrLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBUb29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL2F0ay9BY2Nlc3Np
YmlsaXR5VUlFbGVtZW50QXRrLmNwcAkocmV2aXNpb24gMTY4ODMyKQorKysgVG9vbHMvV2ViS2l0
VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9hdGsvQWNjZXNzaWJpbGl0eVVJRWxlbWVudEF0ay5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTE1ODAsMTIgKzE1ODAsMTUgQEAKICAgICByZXR1cm4gSlNT
dHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoc2VsZWN0aW9uLmdldCgpKTsKIH0KIAotdm9pZCBB
Y2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpzZXRTZWxlY3RlZFRleHRSYW5nZSh1bnNpZ25lZCBsb2Nh
dGlvbiwgdW5zaWduZWQgbGVuZ3RoKQorYm9vbCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpzZXRT
ZWxlY3RlZFRleHRSYW5nZSh1bnNpZ25lZCBsb2NhdGlvbiwgdW5zaWduZWQgbGVuZ3RoKQogewog
ICAgIGlmICghQVRLX0lTX1RFWFQobV9lbGVtZW50LmdldCgpKSkKLSAgICAgICAgcmV0dXJuOwor
ICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBhdGtfdGV4dF9zZXRfc2VsZWN0aW9uKEFUS19U
RVhUKG1fZWxlbWVudC5nZXQoKSksIDAsIGxvY2F0aW9uLCBsb2NhdGlvbiArIGxlbmd0aCk7Cisg
ICAgaWYgKGxlbmd0aCkKKyAgICAgICAgcmV0dXJuIGF0a190ZXh0X3NldF9jYXJldF9vZmZzZXQo
QVRLX1RFWFQobV9lbGVtZW50LmdldCgpKSwgbG9jYXRpb24pOworCisgICAgcmV0dXJuIGF0a190
ZXh0X3NldF9zZWxlY3Rpb24oQVRLX1RFWFQobV9lbGVtZW50LmdldCgpKSwgMCwgbG9jYXRpb24s
IGxvY2F0aW9uICsgbGVuZ3RoKTsKIH0KIAogdm9pZCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojpp
bmNyZW1lbnQoKQpJbmRleDogVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9p
b3MvQWNjZXNzaWJpbGl0eVVJRWxlbWVudElPUy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJL
aXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL2lvcy9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50SU9T
Lm1tCShyZXZpc2lvbiAxNjg4MzIpCisrKyBUb29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVk
QnVuZGxlL2lvcy9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50SU9TLm1tCSh3b3JraW5nIGNvcHkpCkBA
IC01NjIsOCArNTYyLDkgQEAKICAgICByZXR1cm4gSlNTdHJpbmdDcmVhdGVXaXRoQ2hhcmFjdGVy
cygwLCAwKTsKIH0KIAotdm9pZCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpzZXRTZWxlY3RlZFRl
eHRSYW5nZSh1bnNpZ25lZCBsb2NhdGlvbiwgdW5zaWduZWQgbGVuZ3RoKQorYm9vbCBBY2Nlc3Np
YmlsaXR5VUlFbGVtZW50OjpzZXRTZWxlY3RlZFRleHRSYW5nZSh1bnNpZ25lZCBsb2NhdGlvbiwg
dW5zaWduZWQgbGVuZ3RoKQogeworICAgIHJldHVybiBmYWxzZTsKIH0KIAogdm9pZCBBY2Nlc3Np
YmlsaXR5VUlFbGVtZW50OjppbmNyZW1lbnQoKQpJbmRleDogVG9vbHMvV2ViS2l0VGVzdFJ1bm5l
ci9JbmplY3RlZEJ1bmRsZS9tYWMvQWNjZXNzaWJpbGl0eVVJRWxlbWVudE1hYy5tbQo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBUb29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL21hYy9BY2Nlc3Np
YmlsaXR5VUlFbGVtZW50TWFjLm1tCShyZXZpc2lvbiAxNjg4MzIpCisrKyBUb29scy9XZWJLaXRU
ZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL21hYy9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50TWFjLm1t
CSh3b3JraW5nIGNvcHkpCkBAIC0xMzY0LDcgKzEzNjQsNyBAQAogICAgIHJldHVybiBudWxscHRy
OwogfQogCi12b2lkIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnNldFNlbGVjdGVkVGV4dFJhbmdl
KHVuc2lnbmVkIGxvY2F0aW9uLCB1bnNpZ25lZCBsZW5ndGgpCitib29sIEFjY2Vzc2liaWxpdHlV
SUVsZW1lbnQ6OnNldFNlbGVjdGVkVGV4dFJhbmdlKHVuc2lnbmVkIGxvY2F0aW9uLCB1bnNpZ25l
ZCBsZW5ndGgpCiB7CiAgICAgTlNSYW5nZSB0ZXh0UmFuZ2UgPSBOU01ha2VSYW5nZShsb2NhdGlv
biwgbGVuZ3RoKTsKICAgICBOU1ZhbHVlICp0ZXh0UmFuZ2VWYWx1ZSA9IFtOU1ZhbHVlIHZhbHVl
V2l0aFJhbmdlOnRleHRSYW5nZV07CkBAIC0xMzcxLDYgKzEzNzEsOCBAQAogICAgIEJFR0lOX0FY
X09CSkNfRVhDRVBUSU9OUwogICAgIFttX2VsZW1lbnQgYWNjZXNzaWJpbGl0eVNldFZhbHVlOnRl
eHRSYW5nZVZhbHVlIGZvckF0dHJpYnV0ZTpOU0FjY2Vzc2liaWxpdHlTZWxlY3RlZFRleHRSYW5n
ZUF0dHJpYnV0ZV07CiAgICAgRU5EX0FYX09CSkNfRVhDRVBUSU9OUworCisgICAgcmV0dXJuIHRy
dWU7CiB9CiAKIHZvaWQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aW5jcmVtZW50KCkK
</data>
<flag name="review"
          id="256076"
          type_id="1"
          status="-"
          setter="mario"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>232251</attachid>
            <date>2014-05-29 10:01:04 -0700</date>
            <delta_ts>2014-05-30 02:39:39 -0700</delta_ts>
            <desc>caret-moved signal and caret offset tests v2.05</desc>
            <filename>caretmoved_2_05.patch</filename>
            <type>text/plain</type>
            <size>29979</size>
            <attacher name="Jarek Czekalski">jarekczek</attacher>
            
              <data encoding="base64">SW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9D
aGFuZ2VMb2cJKHJldmlzaW9uIDE2OTQzMykKKysrIExheW91dFRlc3RzL0NoYW5nZUxvZwkod29y
a2luZyBjb3B5KQpAQCAtMSwzICsxLDM0IEBACisyMDE0LTA1LTI5ICBKYXJlayBDemVrYWxza2kg
IDxqYXJla2N6ZWtAcG9jenRhLm9uZXQucGw+CisKKyAgICAgICAgW0FUS10gQ29udmVydCBjYXJl
dCBvZmZzZXQgdGVzdHMgZnJvbSB0ZXN0YXRrLmMuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzI1MjcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBUaGUgdGVzdHMgYXJlIHJlcGxpY2F0ZWQgZnJvbSB0ZXN0
YXRrLmMgZmlsZSwgZnVuY3Rpb25zCisgICAgICAgICAgICB0ZXN0V2Via2l0QXRrQ2FyZXRPZmZz
ZXRzKCkKKyAgICAgICAgICAgIHRlc3RXZWJraXRBdGtDYXJldE9mZnNldHNBbmRFeHRyYW5vdXNX
aGl0ZVNwYWNlcygpCisgICAgICAgIFRoZSBmaWxlIHdhcyBwcmVzZW50IGluIHdlYmtpdDEuIFJl
bW92ZWQgZnJvbSB0cnVuayBpbiByMTY2OTc3LCBzbworICAgICAgICB0aGUgbGFzdCB2ZXJzaW9u
IHdhcworICAgICAgICBodHRwczovL3RyYWMud2Via2l0Lm9yZy9icm93c2VyL3RydW5rL1Rvb2xz
L1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0R3RrL3Rlc3RhdGsuYz9yZXY9MTY2OTc2CisgICAg
ICAgIFdoYXQgY291bGQgbm90IGJlIHZlcmlmaWVkIGluIHRoZSBzYW1lIHdheToKKworICAgICAg
ICAxLiBXaGV0aGVyIGVsZW1lbnQgaW1wbGVtZW50cyBBVEtfVEVYVC4gSWYgc2V0Q2FyZXRPZmZz
ZXQKKyAgICAgICAgc3VjY2VlZHMsIGl0IGNvbmZpcm1zIHRoYXQgZWxlbWVudCBpcyB0ZXh0IGFz
IHdlbGwuIEJ1dCBpbiBjYXNlcworICAgICAgICB3aGVuIHNldENhcmV0T2Zmc2V0IG11c3QgZmFp
bCBJIHNlZSBubyB3YXkgdG8gY29uZmlybSBpdCBpcyB0ZXh0CisgICAgICAgIGVsZW1lbnQuCisK
KyAgICAgICAgMi4gV2hldGhlciBwb3NpdGlvbiBpcyBjb3JyZWN0IHRocm91Z2ggYSBjYWxsIHRv
CisgICAgICAgIGF0a190ZXh0X2dldF9jYXJldF9vZmZzZXQuICB0ZXh0LWNhcmV0LW1vdmVkIHNp
Z25hbCB2YWx1ZSBpcworICAgICAgICB0ZXN0ZWQgaW5zdGVhZC4KKworICAgICAgICBBbnl3YXkg
dGhlc2UgY2FzZXMgZG9uJ3QgbG9vayBjcnVjaWFsLCBzbyB0aGV5IGFyZSBza2lwcGVkLgorCisg
ICAgICAgICogcGxhdGZvcm0vZ3RrL3Jlc291cmNlcy9hdGstaGVscGVycy5qczogQWRkZWQuCisg
ICAgICAgIChzZXRDYXJldE9mZnNldCk6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL2d0ay9h
Y2Nlc3NpYmlsaXR5L2NhcmV0LW9mZnNldHMuaHRtbDogQWRkZWQuCisgICAgICAgICogcGxhdGZv
cm0vZ3RrL2FjY2Vzc2liaWxpdHkvY2FyZXQtb2Zmc2V0cy1leHBlY3RlZC50eHQ6IEFkZGVkLgor
CiAyMDE0LTA1LTI4ICBPbGl2ZXIgSHVudCAgPG9saXZlckBhcHBsZS5jb20+CiAKICAgICAgICAg
TWFrZSBET00gcHJvcGVydGllcyBleHBvc2VkIGFzIGluc3RhbmNlIHByb3BlcnRpZXMgdXNlIHRo
ZSBiYXNlIG9iamVjdCBpbnN0ZWFkIG9mIHx0aGlzfApJbmRleDogTGF5b3V0VGVzdHMvcGxhdGZv
cm0vZ3RrL2FjY2Vzc2liaWxpdHkvY2FyZXQtb2Zmc2V0cy1hbmQtZXh0cmFuZW91cy13aGl0ZS1z
cGFjZXMtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3BsYXRmb3JtL2d0
ay9hY2Nlc3NpYmlsaXR5L2NhcmV0LW9mZnNldHMtYW5kLWV4dHJhbmVvdXMtd2hpdGUtc3BhY2Vz
LWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL3BsYXRmb3JtL2d0ay9h
Y2Nlc3NpYmlsaXR5L2NhcmV0LW9mZnNldHMtYW5kLWV4dHJhbmVvdXMtd2hpdGUtc3BhY2VzLWV4
cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE0IEBACitUaGlzIHBhcmFncmFw
aCBpcyBib3JrZWQhCisKK1RoaXMgdGVzdCBpcyByZXBsaWNhdGVkIGZyb20gb2xkIGZpbGUgdGVz
dGF0ay5jIGFuZCB0ZXN0cyB0ZXh0IGxlbmd0aCwgc2V0dGluZyBjYXJldCBvZmZzZXQgYW5kIHJl
Y2VpdmluZyB0ZXh0LWNhcmV0LW1vdmVkIHNpZ25hbCBvbiBhIHBhcmFncmFwaCB3aXRoIGxvdHMg
b2Ygd2hpdGVzcGFjZS4KKworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQ
QVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCisKK1BBU1MgYm9y
a2VkVGV4dExlbmd0aCBpcyAyNQorUEFTUyBjYXJldE1vdmVkRGF0YSBpcyAiUGFyYWdyYXBofDI0
IgorUEFTUyBjYXJldE1vdmVkRGF0YSBpcyAiUGFyYWdyYXBofDI1IgorUEFTUyBzdWNjZXNzZnVs
bHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKSW5kZXg6IExheW91dFRlc3RzL3Bs
YXRmb3JtL2d0ay9hY2Nlc3NpYmlsaXR5L2NhcmV0LW9mZnNldHMtYW5kLWV4dHJhbmVvdXMtd2hp
dGUtc3BhY2VzLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvcGxhdGZvcm0vZ3RrL2Fj
Y2Vzc2liaWxpdHkvY2FyZXQtb2Zmc2V0cy1hbmQtZXh0cmFuZW91cy13aGl0ZS1zcGFjZXMuaHRt
bAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL3BsYXRmb3JtL2d0ay9hY2Nlc3NpYmlsaXR5
L2NhcmV0LW9mZnNldHMtYW5kLWV4dHJhbmVvdXMtd2hpdGUtc3BhY2VzLmh0bWwJKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSw1NiBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9JRVRGLy9E
VEQgSFRNTC8vRU4iPgorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSIuLi8uLi8uLi9yZXNv
dXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uL3Jlc291cmNl
cy9hdGstaGVscGVycy5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+CisKKzxib2R5PgorPHAgaWQ9ImJv
cmtlZCI+VGhpcworICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhZ3JhcGgKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgYm9ya2VkITwvcD4KKworPGRpdiBpZD0iY29uc29sZSI+PC9kaXY+CisK
KzxzY3JpcHQ+Cit2YXIgY2FyZXRNb3ZlZERhdGE7CisKK2Z1bmN0aW9uIGdsb2JhbExpc3RlbmVy
KG9iamVjdCwgbmFtZSwgb2Zmc2V0KQoreworICAgIHZhciByb2xlID0gb2JqZWN0LnJvbGUucmVw
bGFjZSgnQVhSb2xlOiBBWCcsICcnKTsKKyAgICBpZiAobmFtZSA9PSAnQVhUZXh0Q2FyZXRNb3Zl
ZCcpIHsKKyAgICAgICAgY2FyZXRNb3ZlZERhdGEgKz0gcm9sZSArICd8JyArIG9mZnNldDsKKyAg
ICB9Cit9CisKK2Z1bmN0aW9uIHJlc2V0Q2FyZXRPZmZzZXRGb3JPYmplY3Qob2JqZWN0LCBvZmZz
ZXQpCit7CisgICAgY2FyZXRNb3ZlZERhdGEgPSAnJzsKKyAgICBzZXRDYXJldE9mZnNldChvYmpl
Y3QsIG9mZnNldCk7Cit9CisKK2lmICh3aW5kb3cudGVzdFJ1bm5lcikgeworICAgIHRlc3RSdW5u
ZXIub3ZlcnJpZGVQcmVmZXJlbmNlKCJXZWJLaXRFbmFibGVDYXJldEJyb3dzaW5nIiwgdHJ1ZSk7
CisgICAgdGVzdFJ1bm5lci5kdW1wQXNUZXh0KCk7Cit9CisKK2lmICh3aW5kb3cuYWNjZXNzaWJp
bGl0eUNvbnRyb2xsZXIpIHsKKyAgICBhY2Nlc3NpYmlsaXR5Q29udHJvbGxlci5hZGROb3RpZmlj
YXRpb25MaXN0ZW5lcihnbG9iYWxMaXN0ZW5lcik7CisgICAgYm9ya2VkID0gYWNjZXNzaWJpbGl0
eUNvbnRyb2xsZXIuYWNjZXNzaWJsZUVsZW1lbnRCeUlkKCdib3JrZWQnKTsKKyAgICBwcmVmaXgg
PSAnQVhWYWx1ZTogJworICAgIHNob3VsZEJlVHJ1ZVF1aWV0KCdib3JrZWQuc3RyaW5nVmFsdWUu
c3Vic3RyaW5nKDAsIDkpID09ICInICsgcHJlZml4ICsgJyInKTsKKyAgICBib3JrZWRUZXh0TGVu
Z3RoID0gYm9ya2VkLnN0cmluZ1ZhbHVlLmxlbmd0aCAtIHByZWZpeC5sZW5ndGgKKyAgICBzaG91
bGRCZSgnYm9ya2VkVGV4dExlbmd0aCcsICcyNScpOworICAgIHJlc2V0Q2FyZXRPZmZzZXRGb3JP
YmplY3QoYm9ya2VkLCBib3JrZWRUZXh0TGVuZ3RoIC0gMSk7CisgICAgc2hvdWxkQmVFcXVhbFRv
U3RyaW5nKCdjYXJldE1vdmVkRGF0YScsICdQYXJhZ3JhcGh8MjQnKTsKKyAgICByZXNldENhcmV0
T2Zmc2V0Rm9yT2JqZWN0KGJvcmtlZCwgYm9ya2VkVGV4dExlbmd0aCk7CisgICAgc2hvdWxkQmVF
cXVhbFRvU3RyaW5nKCdjYXJldE1vdmVkRGF0YScsICdQYXJhZ3JhcGh8MjUnKTsKK30KKworZGVz
Y3JpcHRpb24oIlRoaXMgdGVzdCBpcyByZXBsaWNhdGVkIGZyb20gb2xkIGZpbGUgdGVzdGF0ay5j
IGFuZCB0ZXN0cyB0ZXh0IGxlbmd0aCwgc2V0dGluZyBjYXJldCBvZmZzZXQgYW5kIHJlY2Vpdmlu
ZyB0ZXh0LWNhcmV0LW1vdmVkIHNpZ25hbCBvbiBhIHBhcmFncmFwaCB3aXRoIGxvdHMgb2Ygd2hp
dGVzcGFjZS4iKTsKKworPC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vLi4vcmVzb3VyY2Vz
L2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlv
dXRUZXN0cy9wbGF0Zm9ybS9ndGsvYWNjZXNzaWJpbGl0eS9jYXJldC1vZmZzZXRzLWV4cGVjdGVk
LnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9ndGsvYWNjZXNzaWJpbGl0
eS9jYXJldC1vZmZzZXRzLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3Rz
L3BsYXRmb3JtL2d0ay9hY2Nlc3NpYmlsaXR5L2NhcmV0LW9mZnNldHMtZXhwZWN0ZWQudHh0CSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDcgQEAKK0EgdGV4dCBoZWFkZXIKKworQSBwYXJhZ3Jh
cGggd2l0aCBhIGxpbmsgaW4gdGhlIG1pZGRsZQorCitBIGxpc3QgaXRlbQorQmxvY2sgc3BhbiBp
biBhIGxpc3QgaXRlbQorSW5saW5lIHNwYW4gaW4gYSBsaXN0IGl0ZW0KK0Jsb2NrIHNwYW4gaW4g
YSBsaW5rIGluIGEgbGlzdCBpdGVtCitJbmxpbmUgc3BhbiBpbiBhIGxpbmsgaW4gYSBsaXN0IGl0
ZW0KKyAgCithIHRhYmxlIGNlbGwJCQorQmxvY2sgc3BhbiBpbiBhIGxpbmsgaW4gYSB0YWJsZSBj
ZWxsCitJbmxpbmUgc3BhbiBpbiBhIGxpbmsgaW4gYSB0YWJsZSBjZWxsCQorQmxvY2sgc3BhbiBp
biBhIHRhYmxlIGNlbGwKK0lubGluZSBzcGFuIGluIGEgdGFibGUgY2VsbAorVGhpcyB0ZXN0IGlz
IHJlcGxpY2F0ZWQgZnJvbSBvbGQgZmlsZSB0ZXN0YXRrLmMgYW5kIHRlc3RzIHZhcmlvdXMgc2Nl
bmFyaW9zIG9mIGNhcmV0IG1vdmVtZW50OiBzZXR0aW5nIGNhcmV0IG9mZnNldCBhbmQgcmVjZWl2
aW5nIHRleHQtY2FyZXQtbW92ZWQgc2lnbmFsLgorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUg
YSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIu
CisKKworUEFTUyByb290LmNoaWxkcmVuQ291bnQgaXMgNQorUEFTUyBzZXRDYXJldE9mZnNldCho
MSwgNSkgaXMgdHJ1ZQorUEFTUyBjYXJldE1vdmVkRGF0YSBpcyAiSGVhZGluZ3w1IgorUEFTUyBj
YXJldE1vdmVkRGF0YSBpcyAiUGFyYWdyYXBofDUiCitQQVNTIGNhcmV0TW92ZWREYXRhIGlzICJQ
YXJhZ3JhcGh8MjAiCitQQVNTIGNhcmV0TW92ZWREYXRhIGlzICJQYXJhZ3JhcGh8MzAiCitQQVNT
IHNldENhcmV0T2Zmc2V0KGxpbmssIDUpIGlzIHRydWUKK1BBU1MgY2FyZXRNb3ZlZERhdGEgaXMg
IlBhcmFncmFwaHwxNyIKK1BBU1MgbGlzdC5yb2xlIGlzICJBWFJvbGU6IEFYTGlzdCIKK1BBU1Mg
bGlzdC5jaGlsZHJlbkNvdW50IGlzIDMKK1BBU1Mgc2V0Q2FyZXRPZmZzZXQobGlzdEl0ZW0sIDEp
IGlzIGZhbHNlCitQQVNTIHNldENhcmV0T2Zmc2V0KGxpc3RJdGVtLCA1KSBpcyB0cnVlCitQQVNT
IGNhcmV0TW92ZWREYXRhIGlzICJMaXN0SXRlbXwyIgorUEFTUyBjb21ib0JveC5yb2xlIGlzICJB
WFJvbGU6IEFYQ29tYm9Cb3giCitQQVNTIG1lbnVQb3B1cC5yb2xlIGlzICJBWFJvbGU6IEFYTWVu
dSIKK1BBU1MgY29tYm9Cb3hPcHRpb24ucm9sZSBpcyAiQVhSb2xlOiBBWE1lbnVJdGVtIgorUEFT
UyBzZXRDYXJldE9mZnNldChjb21ib0JveE9wdGlvbiwgMSkgaXMgZmFsc2UKK1BBU1MgdGV4dEVu
dHJ5LnJvbGUgaXMgIkFYUm9sZTogQVhUZXh0RmllbGQiCitQQVNTIGNhcmV0TW92ZWREYXRhIGlz
ICJUZXh0RmllbGR8NSIKK1BBU1MgdGFibGUucm9sZSBpcyAiQVhSb2xlOiBBWFRhYmxlIgorUEFT
UyB0YWJsZS5jaGlsZHJlbkNvdW50IGlzIDQKK1BBU1MgdGFibGVDZWxsLnJvbGUgaXMgIkFYUm9s
ZTogQVhDZWxsIgorUEFTUyBjYXJldE1vdmVkRGF0YSBpcyAiQ2VsbHwyIgorUEFTUyBzdWNjZXNz
ZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKSW5kZXg6IExheW91dFRlc3Rz
L3BsYXRmb3JtL2d0ay9hY2Nlc3NpYmlsaXR5L2NhcmV0LW9mZnNldHMuaHRtbAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9ndGsvYWNjZXNzaWJpbGl0eS9jYXJldC1vZmZzZXRz
Lmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9ndGsvYWNjZXNzaWJp
bGl0eS9jYXJldC1vZmZzZXRzLmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMjAgQEAK
KzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vSUVURi8vRFREIEhUTUwvL0VOIj4KKzxodG1sPgor
PGhlYWQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vLi4vcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48
L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi9yZXNvdXJjZXMvYXRrLWhlbHBlcnMuanMiPjwvc2Ny
aXB0PgorPC9oZWFkPgorCis8Ym9keSBpZD0iYm9keSI+Cis8aDEgaWQ9J2ZpcnN0Q2hpbGQnPkEg
dGV4dCBoZWFkZXI8L2gxPgorCis8cD5BIHBhcmFncmFwaCA8YSBocmVmPSdodHRwOi8vZm9vLmJh
ci5iYXovJz53aXRoIGEgbGluazwvYT4gaW4gdGhlIG1pZGRsZTwvcD4KKworPG9sPgorICA8bGk+
QSBsaXN0IGl0ZW08L2xpPgorICA8bGk+PHNwYW4gc3R5bGU9J2Rpc3BsYXk6YmxvY2s7Jz5CbG9j
ayBzcGFuIGluIGEgbGlzdCBpdGVtPC9zcGFuPjxzcGFuPklubGluZSBzcGFuIGluIGEgbGlzdCBp
dGVtPC9zcGFuPjwvbGk+CisgIDxsaT48YSBocmVmPSdmb28nPjxzcGFuIHN0eWxlPSdkaXNwbGF5
OmJsb2NrOyc+QmxvY2sgc3BhbiBpbiBhIGxpbmsgaW4gYSBsaXN0IGl0ZW08L3NwYW4+PHNwYW4+
SW5saW5lIHNwYW4gaW4gYSBsaW5rIGluIGEgbGlzdCBpdGVtPC9zcGFuPjwvYT48L2xpPgorPC9v
bD4KKworPHNlbGVjdD48b3B0aW9uIHNlbGVjdGVkIHZhbHVlPSdmb28nPkFuIG9wdGlvbiBpbiBh
IGNvbWJvIGJveDwvb3B0aW9uPjwvc2VsZWN0PgorCis8aW5wdXQgdHlwZT0ndGV4dCcgbmFtZT0n
Zm9vJyB2YWx1ZT0nZm9vIGJhciBiYXonIC8+CisKKzx0YWJsZT4KKyAgPHRyPgorICAgIDx0ZD5h
IHRhYmxlIGNlbGw8L3RkPgorICAgIDx0ZD48L3RkPgorICAgIDx0ZD48YSBocmVmPSdmb28nPjxz
cGFuIHN0eWxlPSdkaXNwbGF5OmJsb2NrOyc+QmxvY2sgc3BhbiBpbiBhIGxpbmsgaW4gYSB0YWJs
ZSBjZWxsPC9zcGFuPjxzcGFuPklubGluZSBzcGFuIGluIGEgbGluayBpbiBhIHRhYmxlIGNlbGw8
L3NwYW4+PC9hPjwvdGQ+CisgICAgPHRkPjxzcGFuIHN0eWxlPSdkaXNwbGF5OmJsb2NrOyc+Qmxv
Y2sgc3BhbiBpbiBhIHRhYmxlIGNlbGw8L3NwYW4+PHNwYW4+SW5saW5lIHNwYW4gaW4gYSB0YWJs
ZSBjZWxsPC9zcGFuPjwvdGQ+CisgIDwvdHI+Cis8L3RhYmxlPgorCis8ZGl2IGlkPSJjb25zb2xl
Ij48L2Rpdj4KKworPHNjcmlwdD4KK3ZhciBjYXJldE1vdmVkRGF0YTsKKworZnVuY3Rpb24gZ2xv
YmFsTGlzdGVuZXIob2JqZWN0LCBuYW1lLCBvZmZzZXQpCit7CisgICAgdmFyIHJvbGUgPSBvYmpl
Y3Qucm9sZS5yZXBsYWNlKCdBWFJvbGU6IEFYJywgJycpOworICAgIGlmIChuYW1lID09ICdBWFRl
eHRDYXJldE1vdmVkJykgeworICAgICAgICBjYXJldE1vdmVkRGF0YSArPSByb2xlICsgJ3wnICsg
b2Zmc2V0OworICAgIH0KK30KKworZnVuY3Rpb24gcmVzZXRDYXJldE9mZnNldEZvck9iamVjdChv
YmplY3QsIG9mZnNldCkKK3sKKyAgICBjYXJldE1vdmVkRGF0YSA9ICcnOworICAgIHNldENhcmV0
T2Zmc2V0KG9iamVjdCwgb2Zmc2V0KTsKK30KKworaWYgKHdpbmRvdy50ZXN0UnVubmVyKSB7Cisg
ICAgdGVzdFJ1bm5lci5vdmVycmlkZVByZWZlcmVuY2UoIldlYktpdEVuYWJsZUNhcmV0QnJvd3Np
bmciLCB0cnVlKTsKKyAgICB0ZXN0UnVubmVyLmR1bXBBc1RleHQoKTsKK30KKworaWYgKHdpbmRv
dy5hY2Nlc3NpYmlsaXR5Q29udHJvbGxlcikgeworICAgIGFjY2Vzc2liaWxpdHlDb250cm9sbGVy
LmFkZE5vdGlmaWNhdGlvbkxpc3RlbmVyKGdsb2JhbExpc3RlbmVyKTsKKyAgICByb290ID0gYWNj
ZXNzaWJpbGl0eUNvbnRyb2xsZXIuYWNjZXNzaWJsZUVsZW1lbnRCeUlkKCdmaXJzdENoaWxkJyku
cGFyZW50RWxlbWVudCgpOworICAgIHNob3VsZEJlKCdyb290LmNoaWxkcmVuQ291bnQnLCAnNScp
OworCisgICAgLyogSXQgc2hvdWxkIGJlIHBvc3NpYmxlIHRvIHBsYWNlIHRoZSBjYXJldCBpbnNp
ZGUgYSBoZWFkZXIuICovCisgICAgaDEgPSByb290LmNoaWxkQXRJbmRleCgwKTsKKyAgICBjYXJl
dE1vdmVkRGF0YSA9ICcnOworICAgIHNob3VsZEJlVHJ1ZSgnc2V0Q2FyZXRPZmZzZXQoaDEsIDUp
Jyk7CisgICAgc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCdjYXJldE1vdmVkRGF0YScsICdIZWFkaW5n
fDUnKTsKKworICAgIC8qIEl0IHNob3VsZCBiZSBwb3NzaWJsZSB0byBwbGFjZSB0aGUgY2FyZXQg
aW5zaWRlIGEgcGFyYWdyYXBoIGFuZCBhIGxpbmsuICovCisgICAgcDEgPSByb290LmNoaWxkQXRJ
bmRleCgxKTsKKyAgICByZXNldENhcmV0T2Zmc2V0Rm9yT2JqZWN0KHAxLCA1KTsKKyAgICBzaG91
bGRCZUVxdWFsVG9TdHJpbmcoJ2NhcmV0TW92ZWREYXRhJywgJ1BhcmFncmFwaHw1Jyk7CisgICAg
cmVzZXRDYXJldE9mZnNldEZvck9iamVjdChwMSwgMjApOworICAgIHNob3VsZEJlRXF1YWxUb1N0
cmluZygnY2FyZXRNb3ZlZERhdGEnLCAnUGFyYWdyYXBofDIwJyk7CisgICAgcmVzZXRDYXJldE9m
ZnNldEZvck9iamVjdChwMSwgMzApOworICAgIHNob3VsZEJlRXF1YWxUb1N0cmluZygnY2FyZXRN
b3ZlZERhdGEnLCAnUGFyYWdyYXBofDMwJyk7CisgICAgbGluayA9IHAxLmNoaWxkQXRJbmRleCgw
KTsKKyAgICBjYXJldE1vdmVkRGF0YSA9ICcnOworICAgIHNob3VsZEJlVHJ1ZSgnc2V0Q2FyZXRP
ZmZzZXQobGluaywgNSknKTsKKyAgICAvKiBQb3NpdGlvbnMgaW5zaWRlIGxpbmtzIGFyZSByZXBv
cnRlZCByZWxhdGl2ZSB0byB0aGUgcGFyYWdyYXBoLiAqLworICAgIHNob3VsZEJlRXF1YWxUb1N0
cmluZygnY2FyZXRNb3ZlZERhdGEnLCAnUGFyYWdyYXBofDE3Jyk7CisKKyAgICBsaXN0ID0gcm9v
dC5jaGlsZEF0SW5kZXgoMik7CisgICAgc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCdsaXN0LnJvbGUn
LCAnQVhSb2xlOiBBWExpc3QnKTsKKyAgICBzaG91bGRCZSgnbGlzdC5jaGlsZHJlbkNvdW50Jywg
JzMnKTsKKyAgICBsaXN0SXRlbSA9IGxpc3QuY2hpbGRBdEluZGV4KDIpOworICAgIC8qIEl0J3Mg
bm90IHBvc3NpYmxlIHRvIHBsYWNlIHRoZSBjYXJldCBpbnNpZGUgYW4gaXRlbSdzIG1hcmtlci4g
Ki8KKyAgICBzaG91bGRCZSgnc2V0Q2FyZXRPZmZzZXQobGlzdEl0ZW0sIDEpJywgJ2ZhbHNlJyk7
CisgICAgLyogSXQgc2hvdWxkIGJlIHBvc3NpYmxlIHRvIHBsYWNlIHRoZSBjYXJldCBpbnNpZGUg
YW4gaXRlbSdzIHRleHQuICovCisgICAgY2FyZXRNb3ZlZERhdGEgPSAnJzsKKyAgICBzaG91bGRC
ZSgnc2V0Q2FyZXRPZmZzZXQobGlzdEl0ZW0sIDUpJywgJ3RydWUnKTsKKyAgICBzaG91bGRCZUVx
dWFsVG9TdHJpbmcoJ2NhcmV0TW92ZWREYXRhJywgJ0xpc3RJdGVtfDInKTsKKworICAgIHBhbmVs
ID0gcm9vdC5jaGlsZEF0SW5kZXgoMyk7CisgICAgY29tYm9Cb3ggPSBwYW5lbC5jaGlsZEF0SW5k
ZXgoMCk7CisgICAgc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCdjb21ib0JveC5yb2xlJywgJ0FYUm9s
ZTogQVhDb21ib0JveCcpOworICAgIG1lbnVQb3B1cCA9IGNvbWJvQm94LmNoaWxkQXRJbmRleCgw
KTsKKyAgICBzaG91bGRCZUVxdWFsVG9TdHJpbmcoJ21lbnVQb3B1cC5yb2xlJywgJ0FYUm9sZTog
QVhNZW51Jyk7CisgICAgY29tYm9Cb3hPcHRpb24gPSBtZW51UG9wdXAuY2hpbGRBdEluZGV4KDAp
OworICAgIHNob3VsZEJlRXF1YWxUb1N0cmluZygnY29tYm9Cb3hPcHRpb24ucm9sZScsICdBWFJv
bGU6IEFYTWVudUl0ZW0nKTsKKyAgICAvKiBJdCdzIG5vdCBwb3NzaWJsZSB0byBwbGFjZSB0aGUg
Y2FyZXQgaW5zaWRlIGFuIG9wdGlvbiBmb3IgYSBjb21ib2JveC4gKi8KKyAgICBzaG91bGRCZSgn
c2V0Q2FyZXRPZmZzZXQoY29tYm9Cb3hPcHRpb24sIDEpJywgJ2ZhbHNlJyk7CisgICAgdGV4dEVu
dHJ5ID0gcGFuZWwuY2hpbGRBdEluZGV4KDEpOworICAgIHNob3VsZEJlRXF1YWxUb1N0cmluZygn
dGV4dEVudHJ5LnJvbGUnLCAnQVhSb2xlOiBBWFRleHRGaWVsZCcpOworICAgIHJlc2V0Q2FyZXRP
ZmZzZXRGb3JPYmplY3QodGV4dEVudHJ5LCA1KTsKKyAgICBzaG91bGRCZUVxdWFsVG9TdHJpbmco
J2NhcmV0TW92ZWREYXRhJywgJ1RleHRGaWVsZHw1Jyk7CisKKyAgICB0YWJsZSA9IHJvb3QuY2hp
bGRBdEluZGV4KDQpOworICAgIHNob3VsZEJlRXF1YWxUb1N0cmluZygndGFibGUucm9sZScsICdB
WFJvbGU6IEFYVGFibGUnKTsKKyAgICBzaG91bGRCZSgndGFibGUuY2hpbGRyZW5Db3VudCcsICc0
Jyk7CisgICAgdGFibGVDZWxsID0gdGFibGUuY2hpbGRBdEluZGV4KDApOworICAgIHNob3VsZEJl
RXF1YWxUb1N0cmluZygndGFibGVDZWxsLnJvbGUnLCAnQVhSb2xlOiBBWENlbGwnKTsKKyAgICBy
ZXNldENhcmV0T2Zmc2V0Rm9yT2JqZWN0KHRhYmxlQ2VsbCwgMik7CisgICAgc2hvdWxkQmVFcXVh
bFRvU3RyaW5nKCdjYXJldE1vdmVkRGF0YScsICdDZWxsfDInKTsKK30KKworZGVzY3JpcHRpb24o
IlRoaXMgdGVzdCBpcyByZXBsaWNhdGVkIGZyb20gb2xkIGZpbGUgdGVzdGF0ay5jIGFuZCB0ZXN0
cyB2YXJpb3VzIHNjZW5hcmlvcyBvZiBjYXJldCBtb3ZlbWVudDogc2V0dGluZyBjYXJldCBvZmZz
ZXQgYW5kIHJlY2VpdmluZyB0ZXh0LWNhcmV0LW1vdmVkIHNpZ25hbC4iKTsKKworPC9zY3JpcHQ+
Cis8c2NyaXB0IHNyYz0iLi4vLi4vLi4vcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3Jp
cHQ+Cis8L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9ndGsvcmVz
b3VyY2VzL2F0ay1oZWxwZXJzLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3BsYXRmb3Jt
L2d0ay9yZXNvdXJjZXMvYXRrLWhlbHBlcnMuanMJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0
cy9wbGF0Zm9ybS9ndGsvcmVzb3VyY2VzL2F0ay1oZWxwZXJzLmpzCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsNCBAQAorZnVuY3Rpb24gc2V0Q2FyZXRPZmZzZXQoYWNjZXNzaWJsZVRleHQsIG9m
ZnNldCkKK3sKKyAgICByZXR1cm4gYWNjZXNzaWJsZVRleHQuc2V0U2VsZWN0ZWRUZXh0UmFuZ2Uo
b2Zmc2V0LCAwKTsKK30KSW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29s
cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDE2OTQzMykKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2lu
ZyBjb3B5KQpAQCAtMSwzICsxLDM3IEBACisyMDE0LTA1LTI5ICBKYXJlayBDemVrYWxza2kgIDxq
YXJla2N6ZWtAcG9jenRhLm9uZXQucGw+CisKKyAgICAgICAgW0FUS10gQWRkZWQgbmV3IGFjY2Vz
c2liaWxpdHkgc2lnbmFsOiB0ZXh0LWNhcmV0LW1vdmVkLgorICAgICAgICBNYWtlIEFjY2Vzc2li
aWxpdHlVSUVsZW1lbnQuc2V0U2VsZWN0ZWRUZXh0UmFuZ2Ugd29yaworICAgICAgICBhcyBhdGtf
dGV4dF9zZXRfY2FyZXRfb2Zmc2V0IHdoZW4gZ2l2ZW4gb2Zmc2V0ID09IDAuCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzI1MjcKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICB0ZXh0LWNhcmV0LW1vdmVkIHNp
Z25hbCBpbiBhY2Nlc3NpYmlsaXR5Q29udHJvbGxlciBpcyBuZWVkZWQgdG8KKyAgICAgICAgaW1w
bGVtZW50IHRlc3RzIGZyb20gVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRHdGsvdGVz
dGF0ay5jCisgICAgICAgIGFzIExheW91dFRlc3RzLiBBZGQgdGhlIHNpZ25hbCB0byB0aGUgY29u
dHJvbGxlci4KKworICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvQmlu
ZGluZ3MvQWNjZXNzaWJpbGl0eVVJRWxlbWVudC5pZGw6CisgICAgICAgICogV2ViS2l0VGVzdFJ1
bm5lci9JbmplY3RlZEJ1bmRsZS9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50LmNwcDoKKyAgICAgICAg
KiBXZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnQu
aDoKKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL2lvcy9BY2Nlc3Np
YmlsaXR5VUlFbGVtZW50SU9TLm1tOgorICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvSW5qZWN0
ZWRCdW5kbGUvbWFjL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnRNYWMubW06CisgICAgICAgIChzZXRT
ZWxlY3RlZFRleHRSYW5nZSk6IENoYW5nZSByZXR1cm4gdHlwZSB0byBib29sLgorICAgICAgICAq
IFdlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvYXRrL0FjY2Vzc2liaWxpdHlVSUVsZW1l
bnRBdGsuY3BwOgorICAgICAgICAoc2V0U2VsZWN0ZWRUZXh0UmFuZ2UpOiBDYWxsIGF0a190ZXh0
X3NldF9jYXJldF9vZmZzZXQgYW5kIHJldHVybiBib29sLgorICAgICAgICAqIFdlYktpdFRlc3RS
dW5uZXIvSW5qZWN0ZWRCdW5kbGUvYXRrL0FjY2Vzc2liaWxpdHlOb3RpZmljYXRpb25IYW5kbGVy
QXRrLmNwcDoKKyAgICAgICAgKGF4T2JqZWN0RXZlbnRMaXN0ZW5lcik6IEFkZCBub3RpZmljYXRp
b24gbmFtZSBBWFRleHRDYXJldE1vdmVkLCBhbGxvdworICAgICAgICBmb3IgZXh0cmEgYXJndW1l
bnRzIHBhc3NlZCB0byBoYW5kbGVyIGFuZCB1c2UgaXQgZm9yIHRleHQtY2FyZXQtbW92ZWQgb2Zm
c2V0LgorICAgICAgICAoV1RSOjpBY2Nlc3NpYmlsaXR5Tm90aWZpY2F0aW9uSGFuZGxlcjo6Y29u
bmVjdEFjY2Vzc2liaWxpdHlDYWxsYmFja3MpOgorICAgICAgICBDb25uZWN0IGNhbGxiYWNrIHRv
IG5ldyBsaXN0ZW5lciBmb3IgQVRLOkF0a1RleHQ6dGV4dC1jYXJldC1tb3ZlZC4KKyAgICAgICAg
UmVmYWN0b3Igc28gdGhhdCBmYWlsdXJlcyBiZSByZXBvcnRlZC4KKyAgICAgICAgSW5pdGlhbGl6
ZSBhdGsgaW50ZXJmYWNlcyBiZWZvcmUgdHJ5aW5nIHRvIGNvbm5lY3QgdG8gdGhlbSwgc2VlCisg
ICAgICAgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03Mjk5MjIK
KyAgICAgICAgKFdUUjo6QWNjZXNzaWJpbGl0eU5vdGlmaWNhdGlvbkhhbmRsZXI6OmRpc2Nvbm5l
Y3RBY2Nlc3NpYmlsaXR5Q2FsbGJhY2tzKToKKyAgICAgICAgU2ltcGxpZnkgY29kZSBieSB1c2lu
ZyBhIHZlY3RvciBpbiBwbGFjZSBvZiBkb3plbiB2YXJpYWJsZXMuCisgICAgICAgICogRHVtcFJl
bmRlclRyZWUvYXRrL0FjY2Vzc2liaWxpdHlDYWxsYmFja3NBdGsuY3BwOgorICAgICAgICBDb21t
ZW50IGFib3V0IG5vdCBzeW5jaHJvbml6aW5nIHdpdGggYWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIu
CisKIDIwMTQtMDUtMjcgIEpvbiBIb25leWN1dHQgIDxqaG9uZXljdXR0QGFwcGxlLmNvbT4KIAog
ICAgICAgICBOZWVkIGFuIEFQSSB0ZXN0IGZvciBidWcgIzEzMzE5MyAocjE2OTMxNSkKSW5kZXg6
IFRvb2xzL0R1bXBSZW5kZXJUcmVlL2F0ay9BY2Nlc3NpYmlsaXR5Q2FsbGJhY2tzQXRrLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBUb29scy9EdW1wUmVuZGVyVHJlZS9hdGsvQWNjZXNzaWJpbGl0eUNhbGxi
YWNrc0F0ay5jcHAJKHJldmlzaW9uIDE2OTQzMykKKysrIFRvb2xzL0R1bXBSZW5kZXJUcmVlL2F0
ay9BY2Nlc3NpYmlsaXR5Q2FsbGJhY2tzQXRrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTcsNiAr
NTcsOSBAQAogc3RhdGljIGd1aW50IHByb3BlcnR5Q2hhbmdlZExpc3RlbmVySWQgPSAwOwogc3Rh
dGljIGd1aW50IHZpc2libGVEYXRhQ2hhbmdlZExpc3RlbmVySWQgPSAwOwogc3RhdGljIGd1aW50
IGxvYWRDb21wbGV0ZUxpc3RlbmVySWQgPSAwOworLy8gVXAgdG8gMjAxNCBpdCB3YXMgb2JsaWdh
dG9yeSB0byBtaXJyb3IgdGhlIGNoYW5nZXMgZnJvbQorLy8gV2ViS2l0VGVzdFJ1bm5lci9Jbmpl
Y3RlZEJ1bmRsZS9hdGsvQWNjZXNzaWJpbGl0eU5vdGlmaWNhdGlvbkhhbmRsZXJBdGsuY3BwLAor
Ly8gYnV0IHRoZSBoYWJpdCBoYXMgYmVlbiBkcm9wcGVkOiBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTMyNTI3I2M2CiBzdGF0aWMgTm90aWZpY2F0aW9uSGFuZGxlcnNN
YXAgbm90aWZpY2F0aW9uSGFuZGxlcnM7CiBzdGF0aWMgQWNjZXNzaWJpbGl0eU5vdGlmaWNhdGlv
bkhhbmRsZXIqIGdsb2JhbE5vdGlmaWNhdGlvbkhhbmRsZXIgPSAwOwogCkluZGV4OiBUb29scy9X
ZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvQWNj
ZXNzaWJpbGl0eVVJRWxlbWVudC5jcHAJKHJldmlzaW9uIDE2OTQzMykKKysrIFRvb2xzL1dlYktp
dFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvQWNjZXNzaWJpbGl0eVVJRWxlbWVudC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTE3Miw3ICsxNzIsNyBAQAogSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+
IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnJhbmdlRm9yTGluZShpbnQpIHsgcmV0dXJuIDA7IH0K
IEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpyYW5nZUZv
clBvc2l0aW9uKGludCwgaW50KSB7IHJldHVybiAwOyB9CiBKU1JldGFpblB0cjxKU1N0cmluZ1Jl
Zj4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6Ym91bmRzRm9yUmFuZ2UodW5zaWduZWQsIHVuc2ln
bmVkKSB7IHJldHVybiAwOyB9Ci12b2lkIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnNldFNlbGVj
dGVkVGV4dFJhbmdlKHVuc2lnbmVkLCB1bnNpZ25lZCkgeyB9Citib29sIEFjY2Vzc2liaWxpdHlV
SUVsZW1lbnQ6OnNldFNlbGVjdGVkVGV4dFJhbmdlKHVuc2lnbmVkLCB1bnNpZ25lZCkgeyByZXR1
cm4gZmFsc2U7IH0KIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBBY2Nlc3NpYmlsaXR5VUlFbGVt
ZW50OjpzdHJpbmdGb3JSYW5nZSh1bnNpZ25lZCwgdW5zaWduZWQpIHsgcmV0dXJuIDA7IH0KIEpT
UmV0YWluUHRyPEpTU3RyaW5nUmVmPiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjphdHRyaWJ1dGVk
U3RyaW5nRm9yUmFuZ2UodW5zaWduZWQsIHVuc2lnbmVkKSB7IHJldHVybiAwOyB9CiBib29sIEFj
Y2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmF0dHJpYnV0ZWRTdHJpbmdSYW5nZUlzTWlzc3BlbGxlZCh1
bnNpZ25lZCwgdW5zaWduZWQpIHsgcmV0dXJuIGZhbHNlOyB9CkluZGV4OiBUb29scy9XZWJLaXRU
ZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnQuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBUb29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0FjY2Vzc2liaWxp
dHlVSUVsZW1lbnQuaAkocmV2aXNpb24gMTY5NDMzKQorKysgVG9vbHMvV2ViS2l0VGVzdFJ1bm5l
ci9JbmplY3RlZEJ1bmRsZS9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50LmgJKHdvcmtpbmcgY29weSkK
QEAgLTIwMiw3ICsyMDIsNyBAQAogICAgIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiByYW5nZUZv
ckxpbmUoaW50KTsKICAgICBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gcmFuZ2VGb3JQb3NpdGlv
bihpbnQgeCwgaW50IHkpOwogICAgIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBib3VuZHNGb3JS
YW5nZSh1bnNpZ25lZCBsb2NhdGlvbiwgdW5zaWduZWQgbGVuZ3RoKTsKLSAgICB2b2lkIHNldFNl
bGVjdGVkVGV4dFJhbmdlKHVuc2lnbmVkIGxvY2F0aW9uLCB1bnNpZ25lZCBsZW5ndGgpOworICAg
IGJvb2wgc2V0U2VsZWN0ZWRUZXh0UmFuZ2UodW5zaWduZWQgbG9jYXRpb24sIHVuc2lnbmVkIGxl
bmd0aCk7CiAgICAgSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IHN0cmluZ0ZvclJhbmdlKHVuc2ln
bmVkIGxvY2F0aW9uLCB1bnNpZ25lZCBsZW5ndGgpOwogICAgIEpTUmV0YWluUHRyPEpTU3RyaW5n
UmVmPiBhdHRyaWJ1dGVkU3RyaW5nRm9yUmFuZ2UodW5zaWduZWQgbG9jYXRpb24sIHVuc2lnbmVk
IGxlbmd0aCk7CiAgICAgYm9vbCBhdHRyaWJ1dGVkU3RyaW5nUmFuZ2VJc01pc3NwZWxsZWQodW5z
aWduZWQgbG9jYXRpb24sIHVuc2lnbmVkIGxlbmd0aCk7CkluZGV4OiBUb29scy9XZWJLaXRUZXN0
UnVubmVyL0luamVjdGVkQnVuZGxlL0JpbmRpbmdzL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnQuaWRs
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvQmlu
ZGluZ3MvQWNjZXNzaWJpbGl0eVVJRWxlbWVudC5pZGwJKHJldmlzaW9uIDE2OTQzMykKKysrIFRv
b2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvQmluZGluZ3MvQWNjZXNzaWJpbGl0
eVVJRWxlbWVudC5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTE2MSw3ICsxNjEsNyBAQAogICAgIFtQ
YXNzQ29udGV4dF0gdW5zaWduZWQgaW50IHVpRWxlbWVudENvdW50Rm9yU2VhcmNoUHJlZGljYXRl
KEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQgc3RhcnRFbGVtZW50LCBib29sZWFuIGlzRGlyZWN0aW9u
TmV4dCwgb2JqZWN0IHNlYXJjaEtleSwgRE9NU3RyaW5nIHNlYXJjaFRleHQsIGJvb2xlYW4gdmlz
aWJsZU9ubHksIGJvb2xlYW4gaW1tZWRpYXRlRGVzY2VuZGFudHNPbmx5KTsKICAgICBbUGFzc0Nv
bnRleHRdIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQgdWlFbGVtZW50Rm9yU2VhcmNoUHJlZGljYXRl
KEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQgc3RhcnRFbGVtZW50LCBib29sZWFuIGlzRGlyZWN0aW9u
TmV4dCwgb2JqZWN0IHNlYXJjaEtleSwgRE9NU3RyaW5nIHNlYXJjaFRleHQsIGJvb2xlYW4gdmlz
aWJsZU9ubHksIGJvb2xlYW4gaW1tZWRpYXRlRGVzY2VuZGFudHNPbmx5KTsKICAgICBbUGFzc0Nv
bnRleHRdIERPTVN0cmluZyBzZWxlY3RUZXh0V2l0aENyaXRlcmlhKERPTVN0cmluZyBhbWJpZ3Vp
dHlSZXNvbHV0aW9uLCBvYmplY3Qgc2VhcmNoU3RyaW5ncywgRE9NU3RyaW5nIHJlcGxhY2VtZW50
U3RyaW5nLCBET01TdHJpbmcgYWN0aXZpdHkpOwotICAgIHZvaWQgc2V0U2VsZWN0ZWRUZXh0UmFu
Z2UodW5zaWduZWQgbG9uZyBsb2NhdGlvbiwgdW5zaWduZWQgbG9uZyBsZW5ndGgpOworICAgIGJv
b2xlYW4gc2V0U2VsZWN0ZWRUZXh0UmFuZ2UodW5zaWduZWQgbG9uZyBsb2NhdGlvbiwgdW5zaWdu
ZWQgbG9uZyBsZW5ndGgpOwogCiAgICAgLy8gU2Nyb2xsIGFyZWEgYXR0cmlidXRlcy4KICAgICBy
ZWFkb25seSBhdHRyaWJ1dGUgQWNjZXNzaWJpbGl0eVVJRWxlbWVudCBob3Jpem9udGFsU2Nyb2xs
YmFyOwpJbmRleDogVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9hdGsvQWNj
ZXNzaWJpbGl0eU5vdGlmaWNhdGlvbkhhbmRsZXJBdGsuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xz
L1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvYXRrL0FjY2Vzc2liaWxpdHlOb3RpZmlj
YXRpb25IYW5kbGVyQXRrLmNwcAkocmV2aXNpb24gMTY5NDMzKQorKysgVG9vbHMvV2ViS2l0VGVz
dFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9hdGsvQWNjZXNzaWJpbGl0eU5vdGlmaWNhdGlvbkhhbmRs
ZXJBdGsuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsyOSw3IEBACiAjaW5jbHVkZSA8V2Vi
S2l0L1dLQnVuZGxlUGFnZS5oPgogI2luY2x1ZGUgPFdlYktpdC9XS0J1bmRsZVBhZ2VQcml2YXRl
Lmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAj
aW5jbHVkZSA8d3RmL2dvYmplY3QvR1VuaXF1ZVB0ci5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L0NT
dHJpbmcuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KQEAgLTM5LDEzICs0MCw3
IEBACiAKIHR5cGVkZWYgSGFzaE1hcDxBdGtPYmplY3QqLCBBY2Nlc3NpYmlsaXR5Tm90aWZpY2F0
aW9uSGFuZGxlcio+IE5vdGlmaWNhdGlvbkhhbmRsZXJzTWFwOwogCi11bnNpZ25lZCBzdGF0ZUNo
YW5nZUxpc3RlbmVySWQgPSAwOwotdW5zaWduZWQgZm9jdXNFdmVudExpc3RlbmVySWQgPSAwOwot
dW5zaWduZWQgYWN0aXZlRGVzY2VuZGFudENoYW5nZWRMaXN0ZW5lcklkID0gMDsKLXVuc2lnbmVk
IGNoaWxkcmVuQ2hhbmdlZExpc3RlbmVySWQgPSAwOwotdW5zaWduZWQgcHJvcGVydHlDaGFuZ2Vk
TGlzdGVuZXJJZCA9IDA7Ci11bnNpZ25lZCB2aXNpYmxlRGF0YUNoYW5nZWRMaXN0ZW5lcklkID0g
MDsKLXVuc2lnbmVkIGxvYWRDb21wbGV0ZUxpc3RlbmVySWQgPSAwOworV1RGOjpWZWN0b3I8dW5z
aWduZWQ+IGxpc3RlbmVySWRzOwogTm90aWZpY2F0aW9uSGFuZGxlcnNNYXAgbm90aWZpY2F0aW9u
SGFuZGxlcnM7CiBBY2Nlc3NpYmlsaXR5Tm90aWZpY2F0aW9uSGFuZGxlciogZ2xvYmFsTm90aWZp
Y2F0aW9uSGFuZGxlciA9IG51bGxwdHI7CiBib29sIGxvZ2dpbmdBY2Nlc3NpYmlsaXR5RXZlbnRz
ID0gZmFsc2U7CkBAIC04MiwxMCArNzcsMTkgQEAKICAgICBpZiAoIWFjY2Vzc2libGUgfHwgIUFU
S19JU19PQkpFQ1QoYWNjZXNzaWJsZSkpCiAgICAgICAgIHJldHVybiB0cnVlOwogCisjaWYgUExB
VEZPUk0oR1RLKSB8fCBQTEFURk9STShFRkwpCisgICAgV0tCdW5kbGVQYWdlUmVmIHBhZ2UgPSBJ
bmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkucGFnZSgpLT5wYWdlKCk7CisgICAgV0tCdW5kbGVGcmFt
ZVJlZiBtYWluRnJhbWUgPSBXS0J1bmRsZVBhZ2VHZXRNYWluRnJhbWUocGFnZSk7CisgICAgSlND
b250ZXh0UmVmIGpzQ29udGV4dCA9IFdLQnVuZGxlRnJhbWVHZXRKYXZhU2NyaXB0Q29udGV4dCht
YWluRnJhbWUpOworI2Vsc2UKKyAgICBKU0NvbnRleHRSZWYganNDb250ZXh0ID0gbnVsbHB0cjsK
KyNlbmRpZgorCiAgICAgR1NpZ25hbFF1ZXJ5IHNpZ25hbFF1ZXJ5OwogICAgIEdVbmlxdWVQdHI8
Y2hhcj4gc2lnbmFsTmFtZTsKICAgICBHVW5pcXVlUHRyPGNoYXI+IHNpZ25hbFZhbHVlOwogICAg
IGNvbnN0IGNoYXIqIG5vdGlmaWNhdGlvbk5hbWUgPSBudWxscHRyOworICAgIFZlY3RvcjxKU1Zh
bHVlUmVmPiBleHRyYUFyZ3M7CiAKICAgICBnX3NpZ25hbF9xdWVyeShzaWduYWxIaW50LT5zaWdu
YWxfaWQsICZzaWduYWxRdWVyeSk7CiAKQEAgLTExMiwxOSArMTE2LDE4IEBACiAgICAgICAgICAg
ICBub3RpZmljYXRpb25OYW1lID0gIkFYVmFsdWVDaGFuZ2VkIjsKICAgICB9IGVsc2UgaWYgKCFn
X3N0cmNtcDAoc2lnbmFsUXVlcnkuc2lnbmFsX25hbWUsICJsb2FkLWNvbXBsZXRlIikpCiAgICAg
ICAgIG5vdGlmaWNhdGlvbk5hbWUgPSAiQVhMb2FkQ29tcGxldGUiOwotICAgIGVsc2UKKyAgICBl
bHNlIGlmICghZ19zdHJjbXAwKHNpZ25hbFF1ZXJ5LnNpZ25hbF9uYW1lLCAidGV4dC1jYXJldC1t
b3ZlZCIpKSB7CisgICAgICAgIG5vdGlmaWNhdGlvbk5hbWUgPSAiQVhUZXh0Q2FyZXRNb3ZlZCI7
CiAgICAgICAgIHNpZ25hbE5hbWUucmVzZXQoZ19zdHJkdXAoc2lnbmFsUXVlcnkuc2lnbmFsX25h
bWUpKTsKKyAgICAgICAgc2lnbmFsVmFsdWUucmVzZXQoZ19zdHJkdXBfcHJpbnRmKCIlZCIsIGdf
dmFsdWVfZ2V0X2ludCgmcGFyYW1WYWx1ZXNbMV0pKSk7CisgICAgICAgIEpTUmV0YWluUHRyPEpT
U3RyaW5nUmVmPiBqc1NpZ25hbFZhbHVlKEFkb3B0LCBKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0
cmluZyhzaWduYWxWYWx1ZS5nZXQoKSkpOworICAgICAgICBleHRyYUFyZ3MuYXBwZW5kKEpTVmFs
dWVNYWtlU3RyaW5nKGpzQ29udGV4dCwganNTaWduYWxWYWx1ZS5nZXQoKSkpOworICAgIH0gZWxz
ZQorICAgICAgICBzaWduYWxOYW1lLnJlc2V0KGdfc3RyZHVwKHNpZ25hbFF1ZXJ5LnNpZ25hbF9u
YW1lKSk7CiAKICAgICBpZiAobG9nZ2luZ0FjY2Vzc2liaWxpdHlFdmVudHMpCiAgICAgICAgIHBy
aW50QWNjZXNzaWJpbGl0eUV2ZW50KGFjY2Vzc2libGUsIHNpZ25hbE5hbWUuZ2V0KCksIHNpZ25h
bFZhbHVlLmdldCgpKTsKIAotI2lmIFBMQVRGT1JNKEdUSykgfHwgUExBVEZPUk0oRUZMKQotICAg
IFdLQnVuZGxlUGFnZVJlZiBwYWdlID0gSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnBhZ2UoKS0+
cGFnZSgpOwotICAgIFdLQnVuZGxlRnJhbWVSZWYgbWFpbkZyYW1lID0gV0tCdW5kbGVQYWdlR2V0
TWFpbkZyYW1lKHBhZ2UpOwotICAgIEpTQ29udGV4dFJlZiBqc0NvbnRleHQgPSBXS0J1bmRsZUZy
YW1lR2V0SmF2YVNjcmlwdENvbnRleHQobWFpbkZyYW1lKTsKLSNlbHNlCi0gICAgSlNDb250ZXh0
UmVmIGpzQ29udGV4dCA9IG51bGxwdHI7Ci0jZW5kaWYKICAgICBpZiAoIWpzQ29udGV4dCkKICAg
ICAgICAgcmV0dXJuIHRydWU7CiAKQEAgLTEzMiwxNyArMTM1LDI1IEBACiAgICAgICAgIEpTUmV0
YWluUHRyPEpTU3RyaW5nUmVmPiBqc05vdGlmaWNhdGlvbkV2ZW50TmFtZShBZG9wdCwgSlNTdHJp
bmdDcmVhdGVXaXRoVVRGOENTdHJpbmcobm90aWZpY2F0aW9uTmFtZSkpOwogICAgICAgICBKU1Zh
bHVlUmVmIG5vdGlmaWNhdGlvbk5hbWVBcmd1bWVudCA9IEpTVmFsdWVNYWtlU3RyaW5nKGpzQ29u
dGV4dCwganNOb3RpZmljYXRpb25FdmVudE5hbWUuZ2V0KCkpOwogICAgICAgICBOb3RpZmljYXRp
b25IYW5kbGVyc01hcDo6aXRlcmF0b3IgZWxlbWVudE5vdGlmaWNhdGlvbkhhbmRsZXIgPSBub3Rp
ZmljYXRpb25IYW5kbGVycy5maW5kKGFjY2Vzc2libGUpOworICAgICAgICBKU1ZhbHVlUmVmIGFy
Z3VtZW50c1s1XTsgLy8gdGhpcyBkaW1lbnNpb24gbXVzdCBiZSA+PSAyICsgbWF4KGV4dHJhQXJn
cy5zaXplKCkpCisgICAgICAgIGFyZ3VtZW50c1swXSA9IHRvSlMoanNDb250ZXh0LCBXVEY6Omdl
dFB0cihXVFI6OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmNyZWF0ZShhY2Nlc3NpYmxlKSkpOwor
ICAgICAgICBhcmd1bWVudHNbMV0gPSBub3RpZmljYXRpb25OYW1lQXJndW1lbnQ7CisgICAgICAg
IHNpemVfdCBudW1PZkV4dHJhQXJncyA9IGV4dHJhQXJncy5zaXplKCk7CisgICAgICAgIGZvciAo
aW50IGkgPSAwOyBpIDwgbnVtT2ZFeHRyYUFyZ3M7IGkrKykKKyAgICAgICAgICAgIGFyZ3VtZW50
c1tpICsgMl0gPSBleHRyYUFyZ3NbaV07CiAgICAgICAgIGlmIChlbGVtZW50Tm90aWZpY2F0aW9u
SGFuZGxlciAhPSBub3RpZmljYXRpb25IYW5kbGVycy5lbmQoKSkgewotICAgICAgICAgICAgLy8g
TGlzdGVuZXIgZm9yIG9uZSBlbGVtZW50IGp1c3QgZ2V0cyBvbmUgYXJndW1lbnQsIHRoZSBub3Rp
ZmljYXRpb24gbmFtZS4KLSAgICAgICAgICAgIEpTT2JqZWN0Q2FsbEFzRnVuY3Rpb24oanNDb250
ZXh0LCBjb25zdF9jYXN0PEpTT2JqZWN0UmVmPihlbGVtZW50Tm90aWZpY2F0aW9uSGFuZGxlci0+
dmFsdWUtPm5vdGlmaWNhdGlvbkZ1bmN0aW9uQ2FsbGJhY2soKSksIDAsIDEsICZub3RpZmljYXRp
b25OYW1lQXJndW1lbnQsIDApOworICAgICAgICAgICAgLy8gTGlzdGVuZXIgZm9yIG9uZSBlbGVt
ZW50LiBBcyBhcmd1bWVudHMsIGl0IGdldHMgdGhlIG5vdGlmaWNhdGlvbiBuYW1lCisgICAgICAg
ICAgICAvLyBhbmQgc29tZXRpbWVzIGV4dHJhIGFyZ3VtZW50cy4KKyAgICAgICAgICAgIEpTT2Jq
ZWN0Q2FsbEFzRnVuY3Rpb24oanNDb250ZXh0LAorICAgICAgICAgICAgICAgIGNvbnN0X2Nhc3Q8
SlNPYmplY3RSZWY+KGVsZW1lbnROb3RpZmljYXRpb25IYW5kbGVyLT52YWx1ZS0+bm90aWZpY2F0
aW9uRnVuY3Rpb25DYWxsYmFjaygpKSwKKyAgICAgICAgICAgICAgICAwLCBudW1PZkV4dHJhQXJn
cyArIDEsIGFyZ3VtZW50cyArIDEsIDApOwogICAgICAgICB9CiAKICAgICAgICAgaWYgKGdsb2Jh
bE5vdGlmaWNhdGlvbkhhbmRsZXIpIHsKLSAgICAgICAgICAgIC8vIEEgZ2xvYmFsIGxpc3RlbmVy
IGdldHMgdGhlIGVsZW1lbnQgYW5kIHRoZSBub3RpZmljYXRpb24gbmFtZSBhcyBhcmd1bWVudHMu
Ci0gICAgICAgICAgICBKU1ZhbHVlUmVmIGFyZ3VtZW50c1syXTsKLSAgICAgICAgICAgIGFyZ3Vt
ZW50c1swXSA9IHRvSlMoanNDb250ZXh0LCBXVEY6OmdldFB0cihXVFI6OkFjY2Vzc2liaWxpdHlV
SUVsZW1lbnQ6OmNyZWF0ZShhY2Nlc3NpYmxlKSkpOwotICAgICAgICAgICAgYXJndW1lbnRzWzFd
ID0gbm90aWZpY2F0aW9uTmFtZUFyZ3VtZW50OwotICAgICAgICAgICAgSlNPYmplY3RDYWxsQXNG
dW5jdGlvbihqc0NvbnRleHQsIGNvbnN0X2Nhc3Q8SlNPYmplY3RSZWY+KGdsb2JhbE5vdGlmaWNh
dGlvbkhhbmRsZXItPm5vdGlmaWNhdGlvbkZ1bmN0aW9uQ2FsbGJhY2soKSksIDAsIDIsIGFyZ3Vt
ZW50cywgMCk7CisgICAgICAgICAgICAvLyBBIGdsb2JhbCBsaXN0ZW5lciBnZXRzIGFkZGl0aW9u
YWxseSB0aGUgZWxlbWVudCBhcyB0aGUgZmlyc3QgYXJndW1lbnQuCisgICAgICAgICAgICBKU09i
amVjdENhbGxBc0Z1bmN0aW9uKGpzQ29udGV4dCwKKyAgICAgICAgICAgICAgICBjb25zdF9jYXN0
PEpTT2JqZWN0UmVmPihnbG9iYWxOb3RpZmljYXRpb25IYW5kbGVyLT5ub3RpZmljYXRpb25GdW5j
dGlvbkNhbGxiYWNrKCkpLAorICAgICAgICAgICAgICAgIDAsIG51bU9mRXh0cmFBcmdzICsgMiwg
YXJndW1lbnRzLCAwKTsKICAgICAgICAgfQogICAgIH0KIApAQCAtMjM4LDE0ICsyNDksMzUgQEAK
ICAgICBpZiAoIWRpc2Nvbm5lY3RBY2Nlc3NpYmlsaXR5Q2FsbGJhY2tzKCkpCiAgICAgICAgIHJl
dHVybjsKIAorICAgIGNvbnN0IGNoYXIqIHNpZ25hbE5hbWVzW10gPSB7CisgICAgICAgICJBVEs6
QXRrT2JqZWN0OnN0YXRlLWNoYW5nZSIsCisgICAgICAgICJBVEs6QXRrT2JqZWN0OnN0YXRlLWNo
YW5nZSIsCisgICAgICAgICJBVEs6QXRrT2JqZWN0OmZvY3VzLWV2ZW50IiwKKyAgICAgICAgIkFU
SzpBdGtPYmplY3Q6YWN0aXZlLWRlc2NlbmRhbnQtY2hhbmdlZCIsCisgICAgICAgICJBVEs6QXRr
T2JqZWN0OmNoaWxkcmVuLWNoYW5nZWQiLAorICAgICAgICAiQVRLOkF0a09iamVjdDpwcm9wZXJ0
eS1jaGFuZ2UiLAorICAgICAgICAiQVRLOkF0a09iamVjdDp2aXNpYmxlLWRhdGEtY2hhbmdlZCIs
CisgICAgICAgICJBVEs6QXRrRG9jdW1lbnQ6bG9hZC1jb21wbGV0ZSIsCisgICAgICAgICJBVEs6
QXRrVGV4dDp0ZXh0LWNhcmV0LW1vdmVkIiwKKyAgICAgICAgMAorICAgIH07CisKKyAgICAvLyBS
ZWdpc3RlciBhdGsgaW50ZXJmYWNlcywgb3RoZXJ3aXNlIGFkZF9nbG9iYWwgbWF5IGZhaWwuCisg
ICAgR09iamVjdCogZHVtbXlPYmplY3QgPSAoR09iamVjdCopZ19vYmplY3RfbmV3KEdfVFlQRV9P
QkpFQ1QsIE5VTEwsIE5VTEwpOworICAgIGdfb2JqZWN0X3VucmVmKGF0a19ub19vcF9vYmplY3Rf
bmV3KGR1bW15T2JqZWN0KSk7CisgICAgZ19vYmplY3RfdW5yZWYoZHVtbXlPYmplY3QpOworCiAg
ICAgLy8gQWRkIGdsb2JhbCBsaXN0ZW5lcnMgZm9yIEF0a09iamVjdCdzIHNpZ25hbHMuCi0gICAg
c3RhdGVDaGFuZ2VMaXN0ZW5lcklkID0gYXRrX2FkZF9nbG9iYWxfZXZlbnRfbGlzdGVuZXIoYXhP
YmplY3RFdmVudExpc3RlbmVyLCAiQVRLOkF0a09iamVjdDpzdGF0ZS1jaGFuZ2UiKTsKLSAgICBm
b2N1c0V2ZW50TGlzdGVuZXJJZCA9IGF0a19hZGRfZ2xvYmFsX2V2ZW50X2xpc3RlbmVyKGF4T2Jq
ZWN0RXZlbnRMaXN0ZW5lciwgIkFUSzpBdGtPYmplY3Q6Zm9jdXMtZXZlbnQiKTsKLSAgICBhY3Rp
dmVEZXNjZW5kYW50Q2hhbmdlZExpc3RlbmVySWQgPSBhdGtfYWRkX2dsb2JhbF9ldmVudF9saXN0
ZW5lcihheE9iamVjdEV2ZW50TGlzdGVuZXIsICJBVEs6QXRrT2JqZWN0OmFjdGl2ZS1kZXNjZW5k
YW50LWNoYW5nZWQiKTsKLSAgICBjaGlsZHJlbkNoYW5nZWRMaXN0ZW5lcklkID0gYXRrX2FkZF9n
bG9iYWxfZXZlbnRfbGlzdGVuZXIoYXhPYmplY3RFdmVudExpc3RlbmVyLCAiQVRLOkF0a09iamVj
dDpjaGlsZHJlbi1jaGFuZ2VkIik7Ci0gICAgcHJvcGVydHlDaGFuZ2VkTGlzdGVuZXJJZCA9IGF0
a19hZGRfZ2xvYmFsX2V2ZW50X2xpc3RlbmVyKGF4T2JqZWN0RXZlbnRMaXN0ZW5lciwgIkFUSzpB
dGtPYmplY3Q6cHJvcGVydHktY2hhbmdlIik7Ci0gICAgdmlzaWJsZURhdGFDaGFuZ2VkTGlzdGVu
ZXJJZCA9IGF0a19hZGRfZ2xvYmFsX2V2ZW50X2xpc3RlbmVyKGF4T2JqZWN0RXZlbnRMaXN0ZW5l
ciwgIkFUSzpBdGtPYmplY3Q6dmlzaWJsZS1kYXRhLWNoYW5nZWQiKTsKLSAgICBsb2FkQ29tcGxl
dGVMaXN0ZW5lcklkID0gYXRrX2FkZF9nbG9iYWxfZXZlbnRfbGlzdGVuZXIoYXhPYmplY3RFdmVu
dExpc3RlbmVyLCAiQVRLOkF0a0RvY3VtZW50OmxvYWQtY29tcGxldGUiKTsKKyAgICBmb3IgKGNv
bnN0IGNoYXIqKiBzaWduYWxOYW1lID0gc2lnbmFsTmFtZXM7ICpzaWduYWxOYW1lOyBzaWduYWxO
YW1lKyspIHsKKyAgICAgICAgdW5zaWduZWQgaWQgPSBhdGtfYWRkX2dsb2JhbF9ldmVudF9saXN0
ZW5lcihheE9iamVjdEV2ZW50TGlzdGVuZXIsICpzaWduYWxOYW1lKTsKKyAgICAgICAgaWYgKCFp
ZCkgeworICAgICAgICAgICAgU3RyaW5nIG1lc3NhZ2UgPSBTdHJpbmc6OmZvcm1hdCgiYXRrX2Fk
ZF9nbG9iYWxfZXZlbnRfbGlzdGVuZXIgZmFpbGVkIGZvciBzaWduYWwgJXNcbiIsICpzaWduYWxO
YW1lKTsKKyAgICAgICAgICAgIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5vdXRwdXRUZXh0KG1l
c3NhZ2UpOworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKworICAgICAgICBsaXN0
ZW5lcklkcy5hcHBlbmQoaWQpOworICAgIH0KIH0KIAogYm9vbCBBY2Nlc3NpYmlsaXR5Tm90aWZp
Y2F0aW9uSGFuZGxlcjo6ZGlzY29ubmVjdEFjY2Vzc2liaWxpdHlDYWxsYmFja3MoKQpAQCAtMjU1
LDM0ICsyODcsMTEgQEAKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgLy8gQXRrT2JqZWN0
IHNpZ25hbHMuCi0gICAgaWYgKHN0YXRlQ2hhbmdlTGlzdGVuZXJJZCkgewotICAgICAgICBhdGtf
cmVtb3ZlX2dsb2JhbF9ldmVudF9saXN0ZW5lcihzdGF0ZUNoYW5nZUxpc3RlbmVySWQpOwotICAg
ICAgICBzdGF0ZUNoYW5nZUxpc3RlbmVySWQgPSAwOworICAgIGZvciAoaW50IGkgPSAwOyBpIDwg
bGlzdGVuZXJJZHMuc2l6ZSgpOyBpKyspIHsKKyAgICAgICAgQVNTRVJUKGxpc3RlbmVySWRzW2ld
KTsKKyAgICAgICAgYXRrX3JlbW92ZV9nbG9iYWxfZXZlbnRfbGlzdGVuZXIobGlzdGVuZXJJZHNb
aV0pOwogICAgIH0KLSAgICBpZiAoZm9jdXNFdmVudExpc3RlbmVySWQpIHsKLSAgICAgICAgYXRr
X3JlbW92ZV9nbG9iYWxfZXZlbnRfbGlzdGVuZXIoZm9jdXNFdmVudExpc3RlbmVySWQpOwotICAg
ICAgICBmb2N1c0V2ZW50TGlzdGVuZXJJZCA9IDA7Ci0gICAgfQotICAgIGlmIChhY3RpdmVEZXNj
ZW5kYW50Q2hhbmdlZExpc3RlbmVySWQpIHsKLSAgICAgICAgYXRrX3JlbW92ZV9nbG9iYWxfZXZl
bnRfbGlzdGVuZXIoYWN0aXZlRGVzY2VuZGFudENoYW5nZWRMaXN0ZW5lcklkKTsKLSAgICAgICAg
YWN0aXZlRGVzY2VuZGFudENoYW5nZWRMaXN0ZW5lcklkID0gMDsKLSAgICB9Ci0gICAgaWYgKGNo
aWxkcmVuQ2hhbmdlZExpc3RlbmVySWQpIHsKLSAgICAgICAgYXRrX3JlbW92ZV9nbG9iYWxfZXZl
bnRfbGlzdGVuZXIoY2hpbGRyZW5DaGFuZ2VkTGlzdGVuZXJJZCk7Ci0gICAgICAgIGNoaWxkcmVu
Q2hhbmdlZExpc3RlbmVySWQgPSAwOwotICAgIH0KLSAgICBpZiAocHJvcGVydHlDaGFuZ2VkTGlz
dGVuZXJJZCkgewotICAgICAgICBhdGtfcmVtb3ZlX2dsb2JhbF9ldmVudF9saXN0ZW5lcihwcm9w
ZXJ0eUNoYW5nZWRMaXN0ZW5lcklkKTsKLSAgICAgICAgcHJvcGVydHlDaGFuZ2VkTGlzdGVuZXJJ
ZCA9IDA7Ci0gICAgfQotICAgIGlmICh2aXNpYmxlRGF0YUNoYW5nZWRMaXN0ZW5lcklkKSB7Ci0g
ICAgICAgIGF0a19yZW1vdmVfZ2xvYmFsX2V2ZW50X2xpc3RlbmVyKHZpc2libGVEYXRhQ2hhbmdl
ZExpc3RlbmVySWQpOwotICAgICAgICB2aXNpYmxlRGF0YUNoYW5nZWRMaXN0ZW5lcklkID0gMDsK
LSAgICB9Ci0gICAgaWYgKGxvYWRDb21wbGV0ZUxpc3RlbmVySWQpIHsKLSAgICAgICAgYXRrX3Jl
bW92ZV9nbG9iYWxfZXZlbnRfbGlzdGVuZXIobG9hZENvbXBsZXRlTGlzdGVuZXJJZCk7Ci0gICAg
ICAgIGxvYWRDb21wbGV0ZUxpc3RlbmVySWQgPSAwOwotICAgIH0KKyAgICBsaXN0ZW5lcklkcy5j
bGVhcigpOwogICAgIHJldHVybiB0cnVlOwogfQogCkluZGV4OiBUb29scy9XZWJLaXRUZXN0UnVu
bmVyL0luamVjdGVkQnVuZGxlL2F0ay9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50QXRrLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBUb29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL2F0ay9BY2Nl
c3NpYmlsaXR5VUlFbGVtZW50QXRrLmNwcAkocmV2aXNpb24gMTY5NDMzKQorKysgVG9vbHMvV2Vi
S2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9hdGsvQWNjZXNzaWJpbGl0eVVJRWxlbWVudEF0
ay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1ODAsMTIgKzE1ODAsMTUgQEAKICAgICByZXR1cm4g
SlNTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoc2VsZWN0aW9uLmdldCgpKTsKIH0KIAotdm9p
ZCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpzZXRTZWxlY3RlZFRleHRSYW5nZSh1bnNpZ25lZCBs
b2NhdGlvbiwgdW5zaWduZWQgbGVuZ3RoKQorYm9vbCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojpz
ZXRTZWxlY3RlZFRleHRSYW5nZSh1bnNpZ25lZCBsb2NhdGlvbiwgdW5zaWduZWQgbGVuZ3RoKQog
ewogICAgIGlmICghQVRLX0lTX1RFWFQobV9lbGVtZW50LmdldCgpKSkKLSAgICAgICAgcmV0dXJu
OworICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBhdGtfdGV4dF9zZXRfc2VsZWN0aW9uKEFU
S19URVhUKG1fZWxlbWVudC5nZXQoKSksIDAsIGxvY2F0aW9uLCBsb2NhdGlvbiArIGxlbmd0aCk7
CisgICAgaWYgKGxlbmd0aCkKKyAgICAgICAgcmV0dXJuIGF0a190ZXh0X3NldF9jYXJldF9vZmZz
ZXQoQVRLX1RFWFQobV9lbGVtZW50LmdldCgpKSwgbG9jYXRpb24pOworCisgICAgcmV0dXJuIGF0
a190ZXh0X3NldF9zZWxlY3Rpb24oQVRLX1RFWFQobV9lbGVtZW50LmdldCgpKSwgMCwgbG9jYXRp
b24sIGxvY2F0aW9uICsgbGVuZ3RoKTsKIH0KIAogdm9pZCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50
OjppbmNyZW1lbnQoKQpJbmRleDogVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRs
ZS9pb3MvQWNjZXNzaWJpbGl0eVVJRWxlbWVudElPUy5tbQo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9X
ZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL2lvcy9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50
SU9TLm1tCShyZXZpc2lvbiAxNjk0MzMpCisrKyBUb29scy9XZWJLaXRUZXN0UnVubmVyL0luamVj
dGVkQnVuZGxlL2lvcy9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50SU9TLm1tCSh3b3JraW5nIGNvcHkp
CkBAIC01NjIsOCArNTYyLDkgQEAKICAgICByZXR1cm4gSlNTdHJpbmdDcmVhdGVXaXRoQ2hhcmFj
dGVycygwLCAwKTsKIH0KIAotdm9pZCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpzZXRTZWxlY3Rl
ZFRleHRSYW5nZSh1bnNpZ25lZCBsb2NhdGlvbiwgdW5zaWduZWQgbGVuZ3RoKQorYm9vbCBBY2Nl
c3NpYmlsaXR5VUlFbGVtZW50OjpzZXRTZWxlY3RlZFRleHRSYW5nZSh1bnNpZ25lZCBsb2NhdGlv
biwgdW5zaWduZWQgbGVuZ3RoKQogeworICAgIHJldHVybiBmYWxzZTsKIH0KIAogdm9pZCBBY2Nl
c3NpYmlsaXR5VUlFbGVtZW50OjppbmNyZW1lbnQoKQpJbmRleDogVG9vbHMvV2ViS2l0VGVzdFJ1
bm5lci9JbmplY3RlZEJ1bmRsZS9tYWMvQWNjZXNzaWJpbGl0eVVJRWxlbWVudE1hYy5tbQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBUb29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL21hYy9BY2Nl
c3NpYmlsaXR5VUlFbGVtZW50TWFjLm1tCShyZXZpc2lvbiAxNjk0MzMpCisrKyBUb29scy9XZWJL
aXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL21hYy9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50TWFj
Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xMzY0LDcgKzEzNjQsNyBAQAogICAgIHJldHVybiBudWxs
cHRyOwogfQogCi12b2lkIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnNldFNlbGVjdGVkVGV4dFJh
bmdlKHVuc2lnbmVkIGxvY2F0aW9uLCB1bnNpZ25lZCBsZW5ndGgpCitib29sIEFjY2Vzc2liaWxp
dHlVSUVsZW1lbnQ6OnNldFNlbGVjdGVkVGV4dFJhbmdlKHVuc2lnbmVkIGxvY2F0aW9uLCB1bnNp
Z25lZCBsZW5ndGgpCiB7CiAgICAgTlNSYW5nZSB0ZXh0UmFuZ2UgPSBOU01ha2VSYW5nZShsb2Nh
dGlvbiwgbGVuZ3RoKTsKICAgICBOU1ZhbHVlICp0ZXh0UmFuZ2VWYWx1ZSA9IFtOU1ZhbHVlIHZh
bHVlV2l0aFJhbmdlOnRleHRSYW5nZV07CkBAIC0xMzcxLDYgKzEzNzEsOCBAQAogICAgIEJFR0lO
X0FYX09CSkNfRVhDRVBUSU9OUwogICAgIFttX2VsZW1lbnQgYWNjZXNzaWJpbGl0eVNldFZhbHVl
OnRleHRSYW5nZVZhbHVlIGZvckF0dHJpYnV0ZTpOU0FjY2Vzc2liaWxpdHlTZWxlY3RlZFRleHRS
YW5nZUF0dHJpYnV0ZV07CiAgICAgRU5EX0FYX09CSkNfRVhDRVBUSU9OUworCisgICAgcmV0dXJu
IHRydWU7CiB9CiAKIHZvaWQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aW5jcmVtZW50KCkK
</data>
<flag name="review"
          id="256743"
          type_id="1"
          status="+"
          setter="mario"
    />
    <flag name="commit-queue"
          id="256780"
          type_id="3"
          status="-"
          setter="mario"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>232286</attachid>
            <date>2014-05-30 02:39:39 -0700</date>
            <delta_ts>2014-05-30 03:59:06 -0700</delta_ts>
            <desc>caret-moved signal and caret offset tests v2.06</desc>
            <filename>caretmoved_2_06.patch</filename>
            <type>text/plain</type>
            <size>30173</size>
            <attacher name="Jarek Czekalski">jarekczek</attacher>
            
              <data encoding="base64">SW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9D
aGFuZ2VMb2cJKHJldmlzaW9uIDE2OTQzMykKKysrIExheW91dFRlc3RzL0NoYW5nZUxvZwkod29y
a2luZyBjb3B5KQpAQCAtMSwzICsxLDM2IEBACisyMDE0LTA1LTMwICBKYXJlayBDemVrYWxza2kg
IDxqYXJla2N6ZWtAcG9jenRhLm9uZXQucGw+CisKKyAgICAgICAgW0FUS10gQ29udmVydCBjYXJl
dCBvZmZzZXQgdGVzdHMgZnJvbSB0ZXN0YXRrLmMuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzI1MjcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBUaGUgdGVzdHMgYXJlIHJlcGxpY2F0ZWQgZnJvbSB0ZXN0
YXRrLmMgZmlsZSwgZnVuY3Rpb25zCisgICAgICAgICAgICB0ZXN0V2Via2l0QXRrQ2FyZXRPZmZz
ZXRzKCkKKyAgICAgICAgICAgIHRlc3RXZWJraXRBdGtDYXJldE9mZnNldHNBbmRFeHRyYW5vdXNX
aGl0ZVNwYWNlcygpCisgICAgICAgIFRoZSBmaWxlIHdhcyBwcmVzZW50IGluIHdlYmtpdDEuIFJl
bW92ZWQgZnJvbSB0cnVuayBpbiByMTY2OTc3LCBzbworICAgICAgICB0aGUgbGFzdCB2ZXJzaW9u
IHdhcworICAgICAgICBodHRwczovL3RyYWMud2Via2l0Lm9yZy9icm93c2VyL3RydW5rL1Rvb2xz
L1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0R3RrL3Rlc3RhdGsuYz9yZXY9MTY2OTc2CisgICAg
ICAgIFdoYXQgY291bGQgbm90IGJlIHZlcmlmaWVkIGluIHRoZSBzYW1lIHdheToKKworICAgICAg
ICAxLiBXaGV0aGVyIGVsZW1lbnQgaW1wbGVtZW50cyBBVEtfVEVYVC4gSWYgc2V0Q2FyZXRPZmZz
ZXQKKyAgICAgICAgc3VjY2VlZHMsIGl0IGNvbmZpcm1zIHRoYXQgZWxlbWVudCBpcyB0ZXh0IGFz
IHdlbGwuIEJ1dCBpbiBjYXNlcworICAgICAgICB3aGVuIHNldENhcmV0T2Zmc2V0IG11c3QgZmFp
bCBJIHNlZSBubyB3YXkgdG8gY29uZmlybSBpdCBpcyB0ZXh0CisgICAgICAgIGVsZW1lbnQuCisK
KyAgICAgICAgMi4gV2hldGhlciBwb3NpdGlvbiBpcyBjb3JyZWN0IHRocm91Z2ggYSBjYWxsIHRv
CisgICAgICAgIGF0a190ZXh0X2dldF9jYXJldF9vZmZzZXQuICB0ZXh0LWNhcmV0LW1vdmVkIHNp
Z25hbCB2YWx1ZSBpcworICAgICAgICB0ZXN0ZWQgaW5zdGVhZC4KKworICAgICAgICBBbnl3YXkg
dGhlc2UgY2FzZXMgZG9uJ3QgbG9vayBjcnVjaWFsLCBzbyB0aGV5IGFyZSBza2lwcGVkLgorCisg
ICAgICAgICogcGxhdGZvcm0vZ3RrL3Jlc291cmNlcy9hdGstaGVscGVycy5qczogQWRkZWQuCisg
ICAgICAgIChzZXRDYXJldE9mZnNldCk6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL2d0ay9h
Y2Nlc3NpYmlsaXR5L2NhcmV0LW9mZnNldHMtYW5kLWV4dHJhbmVvdXMtd2hpdGUtc3BhY2VzLWV4
cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3RrL2FjY2Vzc2liaWxpdHkv
Y2FyZXQtb2Zmc2V0cy1hbmQtZXh0cmFuZW91cy13aGl0ZS1zcGFjZXMuaHRtbDogQWRkZWQuCisg
ICAgICAgICogcGxhdGZvcm0vZ3RrL2FjY2Vzc2liaWxpdHkvY2FyZXQtb2Zmc2V0cy1leHBlY3Rl
ZC50eHQ6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL2d0ay9hY2Nlc3NpYmlsaXR5L2NhcmV0
LW9mZnNldHMuaHRtbDogQWRkZWQuCisKIDIwMTQtMDUtMjggIE9saXZlciBIdW50ICA8b2xpdmVy
QGFwcGxlLmNvbT4KIAogICAgICAgICBNYWtlIERPTSBwcm9wZXJ0aWVzIGV4cG9zZWQgYXMgaW5z
dGFuY2UgcHJvcGVydGllcyB1c2UgdGhlIGJhc2Ugb2JqZWN0IGluc3RlYWQgb2YgfHRoaXN8Cklu
ZGV4OiBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9ndGsvYWNjZXNzaWJpbGl0eS9jYXJldC1vZmZzZXRz
LWFuZC1leHRyYW5lb3VzLXdoaXRlLXNwYWNlcy1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
TGF5b3V0VGVzdHMvcGxhdGZvcm0vZ3RrL2FjY2Vzc2liaWxpdHkvY2FyZXQtb2Zmc2V0cy1hbmQt
ZXh0cmFuZW91cy13aGl0ZS1zcGFjZXMtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5
b3V0VGVzdHMvcGxhdGZvcm0vZ3RrL2FjY2Vzc2liaWxpdHkvY2FyZXQtb2Zmc2V0cy1hbmQtZXh0
cmFuZW91cy13aGl0ZS1zcGFjZXMtZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsMTQgQEAKK1RoaXMgcGFyYWdyYXBoIGlzIGJvcmtlZCEKKworVGhpcyB0ZXN0IGlzIHJlcGxp
Y2F0ZWQgZnJvbSBvbGQgZmlsZSB0ZXN0YXRrLmMgYW5kIHRlc3RzIHRleHQgbGVuZ3RoLCBzZXR0
aW5nIGNhcmV0IG9mZnNldCBhbmQgcmVjZWl2aW5nIHRleHQtY2FyZXQtbW92ZWQgc2lnbmFsIG9u
IGEgcGFyYWdyYXBoIHdpdGggbG90cyBvZiB3aGl0ZXNwYWNlLgorCitPbiBzdWNjZXNzLCB5b3Ug
d2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBD
T01QTEVURSIuCisKKworUEFTUyBib3JrZWRUZXh0TGVuZ3RoIGlzIDI1CitQQVNTIGNhcmV0TW92
ZWREYXRhIGlzICJQYXJhZ3JhcGh8MjQiCitQQVNTIGNhcmV0TW92ZWREYXRhIGlzICJQYXJhZ3Jh
cGh8MjUiCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUK
KwpJbmRleDogTGF5b3V0VGVzdHMvcGxhdGZvcm0vZ3RrL2FjY2Vzc2liaWxpdHkvY2FyZXQtb2Zm
c2V0cy1hbmQtZXh0cmFuZW91cy13aGl0ZS1zcGFjZXMuaHRtbAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlv
dXRUZXN0cy9wbGF0Zm9ybS9ndGsvYWNjZXNzaWJpbGl0eS9jYXJldC1vZmZzZXRzLWFuZC1leHRy
YW5lb3VzLXdoaXRlLXNwYWNlcy5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvcGxh
dGZvcm0vZ3RrL2FjY2Vzc2liaWxpdHkvY2FyZXQtb2Zmc2V0cy1hbmQtZXh0cmFuZW91cy13aGl0
ZS1zcGFjZXMuaHRtbAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDU2IEBACis8IURPQ1RZUEUg
SFRNTCBQVUJMSUMgIi0vL0lFVEYvL0RURCBIVE1MLy9FTiI+Cis8aHRtbD4KKzxoZWFkPgorPHNj
cmlwdCBzcmM9Ii4uLy4uLy4uL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8
c2NyaXB0IHNyYz0iLi4vcmVzb3VyY2VzL2F0ay1oZWxwZXJzLmpzIj48L3NjcmlwdD4KKzwvaGVh
ZD4KKworPGJvZHk+Cis8cCBpZD0iYm9ya2VkIj5UaGlzCisgICAgICAgICAgICAgICAgICAgICAg
ICAgIHBhcmFncmFwaAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib3JrZWQhPC9wPgorCis8ZGl2
IGlkPSJjb25zb2xlIj48L2Rpdj4KKworPHNjcmlwdD4KK3ZhciBjYXJldE1vdmVkRGF0YTsKKwor
ZnVuY3Rpb24gZ2xvYmFsTGlzdGVuZXIob2JqZWN0LCBuYW1lLCBvZmZzZXQpCit7CisgICAgdmFy
IHJvbGUgPSBvYmplY3Qucm9sZS5yZXBsYWNlKCdBWFJvbGU6IEFYJywgJycpOworICAgIGlmIChu
YW1lID09ICdBWFRleHRDYXJldE1vdmVkJykgeworICAgICAgICBjYXJldE1vdmVkRGF0YSArPSBy
b2xlICsgJ3wnICsgb2Zmc2V0OworICAgIH0KK30KKworZnVuY3Rpb24gcmVzZXRDYXJldE9mZnNl
dEZvck9iamVjdChvYmplY3QsIG9mZnNldCkKK3sKKyAgICBjYXJldE1vdmVkRGF0YSA9ICcnOwor
ICAgIHNldENhcmV0T2Zmc2V0KG9iamVjdCwgb2Zmc2V0KTsKK30KKworaWYgKHdpbmRvdy50ZXN0
UnVubmVyKSB7CisgICAgdGVzdFJ1bm5lci5vdmVycmlkZVByZWZlcmVuY2UoIldlYktpdEVuYWJs
ZUNhcmV0QnJvd3NpbmciLCB0cnVlKTsKKyAgICB0ZXN0UnVubmVyLmR1bXBBc1RleHQoKTsKK30K
KworaWYgKHdpbmRvdy5hY2Nlc3NpYmlsaXR5Q29udHJvbGxlcikgeworICAgIGFjY2Vzc2liaWxp
dHlDb250cm9sbGVyLmFkZE5vdGlmaWNhdGlvbkxpc3RlbmVyKGdsb2JhbExpc3RlbmVyKTsKKyAg
ICBib3JrZWQgPSBhY2Nlc3NpYmlsaXR5Q29udHJvbGxlci5hY2Nlc3NpYmxlRWxlbWVudEJ5SWQo
J2JvcmtlZCcpOworICAgIHByZWZpeCA9ICdBWFZhbHVlOiAnCisgICAgc2hvdWxkQmVUcnVlUXVp
ZXQoJ2JvcmtlZC5zdHJpbmdWYWx1ZS5zdWJzdHJpbmcoMCwgOSkgPT0gIicgKyBwcmVmaXggKyAn
IicpOworICAgIGJvcmtlZFRleHRMZW5ndGggPSBib3JrZWQuc3RyaW5nVmFsdWUubGVuZ3RoIC0g
cHJlZml4Lmxlbmd0aAorICAgIHNob3VsZEJlKCdib3JrZWRUZXh0TGVuZ3RoJywgJzI1Jyk7Cisg
ICAgcmVzZXRDYXJldE9mZnNldEZvck9iamVjdChib3JrZWQsIGJvcmtlZFRleHRMZW5ndGggLSAx
KTsKKyAgICBzaG91bGRCZUVxdWFsVG9TdHJpbmcoJ2NhcmV0TW92ZWREYXRhJywgJ1BhcmFncmFw
aHwyNCcpOworICAgIHJlc2V0Q2FyZXRPZmZzZXRGb3JPYmplY3QoYm9ya2VkLCBib3JrZWRUZXh0
TGVuZ3RoKTsKKyAgICBzaG91bGRCZUVxdWFsVG9TdHJpbmcoJ2NhcmV0TW92ZWREYXRhJywgJ1Bh
cmFncmFwaHwyNScpOworfQorCitkZXNjcmlwdGlvbigiVGhpcyB0ZXN0IGlzIHJlcGxpY2F0ZWQg
ZnJvbSBvbGQgZmlsZSB0ZXN0YXRrLmMgYW5kIHRlc3RzIHRleHQgbGVuZ3RoLCBzZXR0aW5nIGNh
cmV0IG9mZnNldCBhbmQgcmVjZWl2aW5nIHRleHQtY2FyZXQtbW92ZWQgc2lnbmFsIG9uIGEgcGFy
YWdyYXBoIHdpdGggbG90cyBvZiB3aGl0ZXNwYWNlLiIpOworCis8L3NjcmlwdD4KKzxzY3JpcHQg
c3JjPSIuLi8uLi8uLi9yZXNvdXJjZXMvanMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KKzwvYm9k
eT4KKzwvaHRtbD4KSW5kZXg6IExheW91dFRlc3RzL3BsYXRmb3JtL2d0ay9hY2Nlc3NpYmlsaXR5
L2NhcmV0LW9mZnNldHMtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3Bs
YXRmb3JtL2d0ay9hY2Nlc3NpYmlsaXR5L2NhcmV0LW9mZnNldHMtZXhwZWN0ZWQudHh0CShyZXZp
c2lvbiAwKQorKysgTGF5b3V0VGVzdHMvcGxhdGZvcm0vZ3RrL2FjY2Vzc2liaWxpdHkvY2FyZXQt
b2Zmc2V0cy1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0NyBAQAorQSB0
ZXh0IGhlYWRlcgorCitBIHBhcmFncmFwaCB3aXRoIGEgbGluayBpbiB0aGUgbWlkZGxlCisKK0Eg
bGlzdCBpdGVtCitCbG9jayBzcGFuIGluIGEgbGlzdCBpdGVtCitJbmxpbmUgc3BhbiBpbiBhIGxp
c3QgaXRlbQorQmxvY2sgc3BhbiBpbiBhIGxpbmsgaW4gYSBsaXN0IGl0ZW0KK0lubGluZSBzcGFu
IGluIGEgbGluayBpbiBhIGxpc3QgaXRlbQorICAKK2EgdGFibGUgY2VsbAkJCitCbG9jayBzcGFu
IGluIGEgbGluayBpbiBhIHRhYmxlIGNlbGwKK0lubGluZSBzcGFuIGluIGEgbGluayBpbiBhIHRh
YmxlIGNlbGwJCitCbG9jayBzcGFuIGluIGEgdGFibGUgY2VsbAorSW5saW5lIHNwYW4gaW4gYSB0
YWJsZSBjZWxsCitUaGlzIHRlc3QgaXMgcmVwbGljYXRlZCBmcm9tIG9sZCBmaWxlIHRlc3RhdGsu
YyBhbmQgdGVzdHMgdmFyaW91cyBzY2VuYXJpb3Mgb2YgY2FyZXQgbW92ZW1lbnQ6IHNldHRpbmcg
Y2FyZXQgb2Zmc2V0IGFuZCByZWNlaXZpbmcgdGV4dC1jYXJldC1tb3ZlZCBzaWduYWwuCisKK09u
IHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxv
d2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworCitQQVNTIHJvb3QuY2hpbGRyZW5Db3VudCBpcyA1
CitQQVNTIHNldENhcmV0T2Zmc2V0KGgxLCA1KSBpcyB0cnVlCitQQVNTIGNhcmV0TW92ZWREYXRh
IGlzICJIZWFkaW5nfDUiCitQQVNTIGNhcmV0TW92ZWREYXRhIGlzICJQYXJhZ3JhcGh8NSIKK1BB
U1MgY2FyZXRNb3ZlZERhdGEgaXMgIlBhcmFncmFwaHwyMCIKK1BBU1MgY2FyZXRNb3ZlZERhdGEg
aXMgIlBhcmFncmFwaHwzMCIKK1BBU1Mgc2V0Q2FyZXRPZmZzZXQobGluaywgNSkgaXMgdHJ1ZQor
UEFTUyBjYXJldE1vdmVkRGF0YSBpcyAiUGFyYWdyYXBofDE3IgorUEFTUyBsaXN0LnJvbGUgaXMg
IkFYUm9sZTogQVhMaXN0IgorUEFTUyBsaXN0LmNoaWxkcmVuQ291bnQgaXMgMworUEFTUyBzZXRD
YXJldE9mZnNldChsaXN0SXRlbSwgMSkgaXMgZmFsc2UKK1BBU1Mgc2V0Q2FyZXRPZmZzZXQobGlz
dEl0ZW0sIDUpIGlzIHRydWUKK1BBU1MgY2FyZXRNb3ZlZERhdGEgaXMgIkxpc3RJdGVtfDIiCitQ
QVNTIGNvbWJvQm94LnJvbGUgaXMgIkFYUm9sZTogQVhDb21ib0JveCIKK1BBU1MgbWVudVBvcHVw
LnJvbGUgaXMgIkFYUm9sZTogQVhNZW51IgorUEFTUyBjb21ib0JveE9wdGlvbi5yb2xlIGlzICJB
WFJvbGU6IEFYTWVudUl0ZW0iCitQQVNTIHNldENhcmV0T2Zmc2V0KGNvbWJvQm94T3B0aW9uLCAx
KSBpcyBmYWxzZQorUEFTUyB0ZXh0RW50cnkucm9sZSBpcyAiQVhSb2xlOiBBWFRleHRGaWVsZCIK
K1BBU1MgY2FyZXRNb3ZlZERhdGEgaXMgIlRleHRGaWVsZHw1IgorUEFTUyB0YWJsZS5yb2xlIGlz
ICJBWFJvbGU6IEFYVGFibGUiCitQQVNTIHRhYmxlLmNoaWxkcmVuQ291bnQgaXMgNAorUEFTUyB0
YWJsZUNlbGwucm9sZSBpcyAiQVhSb2xlOiBBWENlbGwiCitQQVNTIGNhcmV0TW92ZWREYXRhIGlz
ICJDZWxsfDIiCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExF
VEUKKwpJbmRleDogTGF5b3V0VGVzdHMvcGxhdGZvcm0vZ3RrL2FjY2Vzc2liaWxpdHkvY2FyZXQt
b2Zmc2V0cy5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3BsYXRmb3JtL2d0ay9hY2Nl
c3NpYmlsaXR5L2NhcmV0LW9mZnNldHMuaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3Rz
L3BsYXRmb3JtL2d0ay9hY2Nlc3NpYmlsaXR5L2NhcmV0LW9mZnNldHMuaHRtbAkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDEyMCBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9JRVRGLy9E
VEQgSFRNTC8vRU4iPgorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSIuLi8uLi8uLi9yZXNv
dXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uL3Jlc291cmNl
cy9hdGstaGVscGVycy5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+CisKKzxib2R5IGlkPSJib2R5Ij4K
KzxoMSBpZD0nZmlyc3RDaGlsZCc+QSB0ZXh0IGhlYWRlcjwvaDE+CisKKzxwPkEgcGFyYWdyYXBo
IDxhIGhyZWY9J2h0dHA6Ly9mb28uYmFyLmJhei8nPndpdGggYSBsaW5rPC9hPiBpbiB0aGUgbWlk
ZGxlPC9wPgorCis8b2w+CisgIDxsaT5BIGxpc3QgaXRlbTwvbGk+CisgIDxsaT48c3BhbiBzdHls
ZT0nZGlzcGxheTpibG9jazsnPkJsb2NrIHNwYW4gaW4gYSBsaXN0IGl0ZW08L3NwYW4+PHNwYW4+
SW5saW5lIHNwYW4gaW4gYSBsaXN0IGl0ZW08L3NwYW4+PC9saT4KKyAgPGxpPjxhIGhyZWY9J2Zv
byc+PHNwYW4gc3R5bGU9J2Rpc3BsYXk6YmxvY2s7Jz5CbG9jayBzcGFuIGluIGEgbGluayBpbiBh
IGxpc3QgaXRlbTwvc3Bhbj48c3Bhbj5JbmxpbmUgc3BhbiBpbiBhIGxpbmsgaW4gYSBsaXN0IGl0
ZW08L3NwYW4+PC9hPjwvbGk+Cis8L29sPgorCis8c2VsZWN0PjxvcHRpb24gc2VsZWN0ZWQgdmFs
dWU9J2Zvbyc+QW4gb3B0aW9uIGluIGEgY29tYm8gYm94PC9vcHRpb24+PC9zZWxlY3Q+CisKKzxp
bnB1dCB0eXBlPSd0ZXh0JyBuYW1lPSdmb28nIHZhbHVlPSdmb28gYmFyIGJheicgLz4KKworPHRh
YmxlPgorICA8dHI+CisgICAgPHRkPmEgdGFibGUgY2VsbDwvdGQ+CisgICAgPHRkPjwvdGQ+Cisg
ICAgPHRkPjxhIGhyZWY9J2Zvbyc+PHNwYW4gc3R5bGU9J2Rpc3BsYXk6YmxvY2s7Jz5CbG9jayBz
cGFuIGluIGEgbGluayBpbiBhIHRhYmxlIGNlbGw8L3NwYW4+PHNwYW4+SW5saW5lIHNwYW4gaW4g
YSBsaW5rIGluIGEgdGFibGUgY2VsbDwvc3Bhbj48L2E+PC90ZD4KKyAgICA8dGQ+PHNwYW4gc3R5
bGU9J2Rpc3BsYXk6YmxvY2s7Jz5CbG9jayBzcGFuIGluIGEgdGFibGUgY2VsbDwvc3Bhbj48c3Bh
bj5JbmxpbmUgc3BhbiBpbiBhIHRhYmxlIGNlbGw8L3NwYW4+PC90ZD4KKyAgPC90cj4KKzwvdGFi
bGU+CisKKzxkaXYgaWQ9ImNvbnNvbGUiPjwvZGl2PgorCis8c2NyaXB0PgordmFyIGNhcmV0TW92
ZWREYXRhOworCitmdW5jdGlvbiBnbG9iYWxMaXN0ZW5lcihvYmplY3QsIG5hbWUsIG9mZnNldCkK
K3sKKyAgICB2YXIgcm9sZSA9IG9iamVjdC5yb2xlLnJlcGxhY2UoJ0FYUm9sZTogQVgnLCAnJyk7
CisgICAgaWYgKG5hbWUgPT0gJ0FYVGV4dENhcmV0TW92ZWQnKSB7CisgICAgICAgIGNhcmV0TW92
ZWREYXRhICs9IHJvbGUgKyAnfCcgKyBvZmZzZXQ7CisgICAgfQorfQorCitmdW5jdGlvbiByZXNl
dENhcmV0T2Zmc2V0Rm9yT2JqZWN0KG9iamVjdCwgb2Zmc2V0KQoreworICAgIGNhcmV0TW92ZWRE
YXRhID0gJyc7CisgICAgc2V0Q2FyZXRPZmZzZXQob2JqZWN0LCBvZmZzZXQpOworfQorCitpZiAo
d2luZG93LnRlc3RSdW5uZXIpIHsKKyAgICB0ZXN0UnVubmVyLm92ZXJyaWRlUHJlZmVyZW5jZSgi
V2ViS2l0RW5hYmxlQ2FyZXRCcm93c2luZyIsIHRydWUpOworICAgIHRlc3RSdW5uZXIuZHVtcEFz
VGV4dCgpOworfQorCitpZiAod2luZG93LmFjY2Vzc2liaWxpdHlDb250cm9sbGVyKSB7CisgICAg
YWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIuYWRkTm90aWZpY2F0aW9uTGlzdGVuZXIoZ2xvYmFsTGlz
dGVuZXIpOworICAgIHJvb3QgPSBhY2Nlc3NpYmlsaXR5Q29udHJvbGxlci5hY2Nlc3NpYmxlRWxl
bWVudEJ5SWQoJ2ZpcnN0Q2hpbGQnKS5wYXJlbnRFbGVtZW50KCk7CisgICAgc2hvdWxkQmUoJ3Jv
b3QuY2hpbGRyZW5Db3VudCcsICc1Jyk7CisKKyAgICAvKiBJdCBzaG91bGQgYmUgcG9zc2libGUg
dG8gcGxhY2UgdGhlIGNhcmV0IGluc2lkZSBhIGhlYWRlci4gKi8KKyAgICBoMSA9IHJvb3QuY2hp
bGRBdEluZGV4KDApOworICAgIGNhcmV0TW92ZWREYXRhID0gJyc7CisgICAgc2hvdWxkQmVUcnVl
KCdzZXRDYXJldE9mZnNldChoMSwgNSknKTsKKyAgICBzaG91bGRCZUVxdWFsVG9TdHJpbmcoJ2Nh
cmV0TW92ZWREYXRhJywgJ0hlYWRpbmd8NScpOworCisgICAgLyogSXQgc2hvdWxkIGJlIHBvc3Np
YmxlIHRvIHBsYWNlIHRoZSBjYXJldCBpbnNpZGUgYSBwYXJhZ3JhcGggYW5kIGEgbGluay4gKi8K
KyAgICBwMSA9IHJvb3QuY2hpbGRBdEluZGV4KDEpOworICAgIHJlc2V0Q2FyZXRPZmZzZXRGb3JP
YmplY3QocDEsIDUpOworICAgIHNob3VsZEJlRXF1YWxUb1N0cmluZygnY2FyZXRNb3ZlZERhdGEn
LCAnUGFyYWdyYXBofDUnKTsKKyAgICByZXNldENhcmV0T2Zmc2V0Rm9yT2JqZWN0KHAxLCAyMCk7
CisgICAgc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCdjYXJldE1vdmVkRGF0YScsICdQYXJhZ3JhcGh8
MjAnKTsKKyAgICByZXNldENhcmV0T2Zmc2V0Rm9yT2JqZWN0KHAxLCAzMCk7CisgICAgc2hvdWxk
QmVFcXVhbFRvU3RyaW5nKCdjYXJldE1vdmVkRGF0YScsICdQYXJhZ3JhcGh8MzAnKTsKKyAgICBs
aW5rID0gcDEuY2hpbGRBdEluZGV4KDApOworICAgIGNhcmV0TW92ZWREYXRhID0gJyc7CisgICAg
c2hvdWxkQmVUcnVlKCdzZXRDYXJldE9mZnNldChsaW5rLCA1KScpOworICAgIC8qIFBvc2l0aW9u
cyBpbnNpZGUgbGlua3MgYXJlIHJlcG9ydGVkIHJlbGF0aXZlIHRvIHRoZSBwYXJhZ3JhcGguICov
CisgICAgc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCdjYXJldE1vdmVkRGF0YScsICdQYXJhZ3JhcGh8
MTcnKTsKKworICAgIGxpc3QgPSByb290LmNoaWxkQXRJbmRleCgyKTsKKyAgICBzaG91bGRCZUVx
dWFsVG9TdHJpbmcoJ2xpc3Qucm9sZScsICdBWFJvbGU6IEFYTGlzdCcpOworICAgIHNob3VsZEJl
KCdsaXN0LmNoaWxkcmVuQ291bnQnLCAnMycpOworICAgIGxpc3RJdGVtID0gbGlzdC5jaGlsZEF0
SW5kZXgoMik7CisgICAgLyogSXQncyBub3QgcG9zc2libGUgdG8gcGxhY2UgdGhlIGNhcmV0IGlu
c2lkZSBhbiBpdGVtJ3MgbWFya2VyLiAqLworICAgIHNob3VsZEJlKCdzZXRDYXJldE9mZnNldChs
aXN0SXRlbSwgMSknLCAnZmFsc2UnKTsKKyAgICAvKiBJdCBzaG91bGQgYmUgcG9zc2libGUgdG8g
cGxhY2UgdGhlIGNhcmV0IGluc2lkZSBhbiBpdGVtJ3MgdGV4dC4gKi8KKyAgICBjYXJldE1vdmVk
RGF0YSA9ICcnOworICAgIHNob3VsZEJlKCdzZXRDYXJldE9mZnNldChsaXN0SXRlbSwgNSknLCAn
dHJ1ZScpOworICAgIHNob3VsZEJlRXF1YWxUb1N0cmluZygnY2FyZXRNb3ZlZERhdGEnLCAnTGlz
dEl0ZW18MicpOworCisgICAgcGFuZWwgPSByb290LmNoaWxkQXRJbmRleCgzKTsKKyAgICBjb21i
b0JveCA9IHBhbmVsLmNoaWxkQXRJbmRleCgwKTsKKyAgICBzaG91bGRCZUVxdWFsVG9TdHJpbmco
J2NvbWJvQm94LnJvbGUnLCAnQVhSb2xlOiBBWENvbWJvQm94Jyk7CisgICAgbWVudVBvcHVwID0g
Y29tYm9Cb3guY2hpbGRBdEluZGV4KDApOworICAgIHNob3VsZEJlRXF1YWxUb1N0cmluZygnbWVu
dVBvcHVwLnJvbGUnLCAnQVhSb2xlOiBBWE1lbnUnKTsKKyAgICBjb21ib0JveE9wdGlvbiA9IG1l
bnVQb3B1cC5jaGlsZEF0SW5kZXgoMCk7CisgICAgc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCdjb21i
b0JveE9wdGlvbi5yb2xlJywgJ0FYUm9sZTogQVhNZW51SXRlbScpOworICAgIC8qIEl0J3Mgbm90
IHBvc3NpYmxlIHRvIHBsYWNlIHRoZSBjYXJldCBpbnNpZGUgYW4gb3B0aW9uIGZvciBhIGNvbWJv
Ym94LiAqLworICAgIHNob3VsZEJlKCdzZXRDYXJldE9mZnNldChjb21ib0JveE9wdGlvbiwgMSkn
LCAnZmFsc2UnKTsKKyAgICB0ZXh0RW50cnkgPSBwYW5lbC5jaGlsZEF0SW5kZXgoMSk7CisgICAg
c2hvdWxkQmVFcXVhbFRvU3RyaW5nKCd0ZXh0RW50cnkucm9sZScsICdBWFJvbGU6IEFYVGV4dEZp
ZWxkJyk7CisgICAgcmVzZXRDYXJldE9mZnNldEZvck9iamVjdCh0ZXh0RW50cnksIDUpOworICAg
IHNob3VsZEJlRXF1YWxUb1N0cmluZygnY2FyZXRNb3ZlZERhdGEnLCAnVGV4dEZpZWxkfDUnKTsK
KworICAgIHRhYmxlID0gcm9vdC5jaGlsZEF0SW5kZXgoNCk7CisgICAgc2hvdWxkQmVFcXVhbFRv
U3RyaW5nKCd0YWJsZS5yb2xlJywgJ0FYUm9sZTogQVhUYWJsZScpOworICAgIHNob3VsZEJlKCd0
YWJsZS5jaGlsZHJlbkNvdW50JywgJzQnKTsKKyAgICB0YWJsZUNlbGwgPSB0YWJsZS5jaGlsZEF0
SW5kZXgoMCk7CisgICAgc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCd0YWJsZUNlbGwucm9sZScsICdB
WFJvbGU6IEFYQ2VsbCcpOworICAgIHJlc2V0Q2FyZXRPZmZzZXRGb3JPYmplY3QodGFibGVDZWxs
LCAyKTsKKyAgICBzaG91bGRCZUVxdWFsVG9TdHJpbmcoJ2NhcmV0TW92ZWREYXRhJywgJ0NlbGx8
MicpOworfQorCitkZXNjcmlwdGlvbigiVGhpcyB0ZXN0IGlzIHJlcGxpY2F0ZWQgZnJvbSBvbGQg
ZmlsZSB0ZXN0YXRrLmMgYW5kIHRlc3RzIHZhcmlvdXMgc2NlbmFyaW9zIG9mIGNhcmV0IG1vdmVt
ZW50OiBzZXR0aW5nIGNhcmV0IG9mZnNldCBhbmQgcmVjZWl2aW5nIHRleHQtY2FyZXQtbW92ZWQg
c2lnbmFsLiIpOworCis8L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8uLi8uLi9yZXNvdXJjZXMv
anMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IExheW91
dFRlc3RzL3BsYXRmb3JtL2d0ay9yZXNvdXJjZXMvYXRrLWhlbHBlcnMuanMKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gTGF5b3V0VGVzdHMvcGxhdGZvcm0vZ3RrL3Jlc291cmNlcy9hdGstaGVscGVycy5qcwkocmV2
aXNpb24gMCkKKysrIExheW91dFRlc3RzL3BsYXRmb3JtL2d0ay9yZXNvdXJjZXMvYXRrLWhlbHBl
cnMuanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0IEBACitmdW5jdGlvbiBzZXRDYXJldE9m
ZnNldChhY2Nlc3NpYmxlVGV4dCwgb2Zmc2V0KQoreworICAgIHJldHVybiBhY2Nlc3NpYmxlVGV4
dC5zZXRTZWxlY3RlZFRleHRSYW5nZShvZmZzZXQsIDApOworfQpJbmRleDogVG9vbHMvQ2hhbmdl
TG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0NoYW5nZUxvZwkocmV2aXNpb24gMTY5NDMzKQorKysg
VG9vbHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzcgQEAKKzIwMTQtMDUt
MzAgIEphcmVrIEN6ZWthbHNraSAgPGphcmVrY3pla0Bwb2N6dGEub25ldC5wbD4KKworICAgICAg
ICBbQVRLXSBBZGRlZCBuZXcgYWNjZXNzaWJpbGl0eSBzaWduYWw6IHRleHQtY2FyZXQtbW92ZWQu
CisgICAgICAgIE1ha2UgQWNjZXNzaWJpbGl0eVVJRWxlbWVudC5zZXRTZWxlY3RlZFRleHRSYW5n
ZSB3b3JrCisgICAgICAgIGFzIGF0a190ZXh0X3NldF9jYXJldF9vZmZzZXQgd2hlbiBnaXZlbiBv
ZmZzZXQgPT0gMC4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTEzMjUyNworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIHRleHQtY2FyZXQtbW92ZWQgc2lnbmFsIGluIGFjY2Vzc2liaWxpdHlDb250cm9sbGVyIGlz
IG5lZWRlZCB0bworICAgICAgICBpbXBsZW1lbnQgdGVzdHMgZnJvbSBUb29scy9UZXN0V2ViS2l0
QVBJL1Rlc3RzL1dlYktpdEd0ay90ZXN0YXRrLmMKKyAgICAgICAgYXMgTGF5b3V0VGVzdHMuIEFk
ZCB0aGUgc2lnbmFsIHRvIHRoZSBjb250cm9sbGVyLgorCisgICAgICAgICogV2ViS2l0VGVzdFJ1
bm5lci9JbmplY3RlZEJ1bmRsZS9CaW5kaW5ncy9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50LmlkbDoK
KyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0FjY2Vzc2liaWxpdHlV
SUVsZW1lbnQuY3BwOgorICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUv
QWNjZXNzaWJpbGl0eVVJRWxlbWVudC5oOgorICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvSW5q
ZWN0ZWRCdW5kbGUvaW9zL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnRJT1MubW06CisgICAgICAgICog
V2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9tYWMvQWNjZXNzaWJpbGl0eVVJRWxlbWVu
dE1hYy5tbToKKyAgICAgICAgKHNldFNlbGVjdGVkVGV4dFJhbmdlKTogQ2hhbmdlIHJldHVybiB0
eXBlIHRvIGJvb2wuCisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9h
dGsvQWNjZXNzaWJpbGl0eVVJRWxlbWVudEF0ay5jcHA6CisgICAgICAgIChzZXRTZWxlY3RlZFRl
eHRSYW5nZSk6IENhbGwgYXRrX3RleHRfc2V0X2NhcmV0X29mZnNldCBhbmQgcmV0dXJuIGJvb2wu
CisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9hdGsvQWNjZXNzaWJp
bGl0eU5vdGlmaWNhdGlvbkhhbmRsZXJBdGsuY3BwOgorICAgICAgICAoYXhPYmplY3RFdmVudExp
c3RlbmVyKTogQWRkIG5vdGlmaWNhdGlvbiBuYW1lIEFYVGV4dENhcmV0TW92ZWQsIGFsbG93Cisg
ICAgICAgIGZvciBleHRyYSBhcmd1bWVudHMgcGFzc2VkIHRvIGhhbmRsZXIgYW5kIHVzZSBpdCBm
b3IgdGV4dC1jYXJldC1tb3ZlZCBvZmZzZXQuCisgICAgICAgIChXVFI6OkFjY2Vzc2liaWxpdHlO
b3RpZmljYXRpb25IYW5kbGVyOjpjb25uZWN0QWNjZXNzaWJpbGl0eUNhbGxiYWNrcyk6CisgICAg
ICAgIENvbm5lY3QgY2FsbGJhY2sgdG8gbmV3IGxpc3RlbmVyIGZvciBBVEs6QXRrVGV4dDp0ZXh0
LWNhcmV0LW1vdmVkLgorICAgICAgICBSZWZhY3RvciBzbyB0aGF0IGZhaWx1cmVzIGJlIHJlcG9y
dGVkLgorICAgICAgICBJbml0aWFsaXplIGF0ayBpbnRlcmZhY2VzIGJlZm9yZSB0cnlpbmcgdG8g
Y29ubmVjdCB0byB0aGVtLCBzZWUKKyAgICAgICAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcv
c2hvd19idWcuY2dpP2lkPTcyOTkyMgorICAgICAgICAoV1RSOjpBY2Nlc3NpYmlsaXR5Tm90aWZp
Y2F0aW9uSGFuZGxlcjo6ZGlzY29ubmVjdEFjY2Vzc2liaWxpdHlDYWxsYmFja3MpOgorICAgICAg
ICBTaW1wbGlmeSBjb2RlIGJ5IHVzaW5nIGEgdmVjdG9yIGluIHBsYWNlIG9mIGRvemVuIHZhcmlh
Ymxlcy4KKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9hdGsvQWNjZXNzaWJpbGl0eUNhbGxiYWNr
c0F0ay5jcHA6CisgICAgICAgIENvbW1lbnQgYWJvdXQgbm90IHN5bmNocm9uaXppbmcgd2l0aCBh
Y2Nlc3NpYmlsaXR5Q29udHJvbGxlci4KKwogMjAxNC0wNS0yNyAgSm9uIEhvbmV5Y3V0dCAgPGpo
b25leWN1dHRAYXBwbGUuY29tPgogCiAgICAgICAgIE5lZWQgYW4gQVBJIHRlc3QgZm9yIGJ1ZyAj
MTMzMTkzIChyMTY5MzE1KQpJbmRleDogVG9vbHMvRHVtcFJlbmRlclRyZWUvYXRrL0FjY2Vzc2li
aWxpdHlDYWxsYmFja3NBdGsuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0R1bXBSZW5kZXJUcmVl
L2F0ay9BY2Nlc3NpYmlsaXR5Q2FsbGJhY2tzQXRrLmNwcAkocmV2aXNpb24gMTY5NDMzKQorKysg
VG9vbHMvRHVtcFJlbmRlclRyZWUvYXRrL0FjY2Vzc2liaWxpdHlDYWxsYmFja3NBdGsuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC01Nyw2ICs1Nyw5IEBACiBzdGF0aWMgZ3VpbnQgcHJvcGVydHlDaGFu
Z2VkTGlzdGVuZXJJZCA9IDA7CiBzdGF0aWMgZ3VpbnQgdmlzaWJsZURhdGFDaGFuZ2VkTGlzdGVu
ZXJJZCA9IDA7CiBzdGF0aWMgZ3VpbnQgbG9hZENvbXBsZXRlTGlzdGVuZXJJZCA9IDA7CisvLyBV
cCB0byAyMDE0IGl0IHdhcyBvYmxpZ2F0b3J5IHRvIG1pcnJvciB0aGUgY2hhbmdlcyBmcm9tCisv
LyBXZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL2F0ay9BY2Nlc3NpYmlsaXR5Tm90aWZp
Y2F0aW9uSGFuZGxlckF0ay5jcHAsCisvLyBidXQgdGhlIGhhYml0IGhhcyBiZWVuIGRyb3BwZWQ6
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzI1MjcjYzYKIHN0YXRp
YyBOb3RpZmljYXRpb25IYW5kbGVyc01hcCBub3RpZmljYXRpb25IYW5kbGVyczsKIHN0YXRpYyBB
Y2Nlc3NpYmlsaXR5Tm90aWZpY2F0aW9uSGFuZGxlciogZ2xvYmFsTm90aWZpY2F0aW9uSGFuZGxl
ciA9IDA7CiAKSW5kZXg6IFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvQWNj
ZXNzaWJpbGl0eVVJRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViS2l0VGVzdFJ1
bm5lci9JbmplY3RlZEJ1bmRsZS9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50LmNwcAkocmV2aXNpb24g
MTY5NDMzKQorKysgVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9BY2Nlc3Np
YmlsaXR5VUlFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTcyLDcgKzE3Miw3IEBACiBK
U1JldGFpblB0cjxKU1N0cmluZ1JlZj4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6cmFuZ2VGb3JM
aW5lKGludCkgeyByZXR1cm4gMDsgfQogSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IEFjY2Vzc2li
aWxpdHlVSUVsZW1lbnQ6OnJhbmdlRm9yUG9zaXRpb24oaW50LCBpbnQpIHsgcmV0dXJuIDA7IH0K
IEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojpib3VuZHNG
b3JSYW5nZSh1bnNpZ25lZCwgdW5zaWduZWQpIHsgcmV0dXJuIDA7IH0KLXZvaWQgQWNjZXNzaWJp
bGl0eVVJRWxlbWVudDo6c2V0U2VsZWN0ZWRUZXh0UmFuZ2UodW5zaWduZWQsIHVuc2lnbmVkKSB7
IH0KK2Jvb2wgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6c2V0U2VsZWN0ZWRUZXh0UmFuZ2UodW5z
aWduZWQsIHVuc2lnbmVkKSB7IHJldHVybiBmYWxzZTsgfQogSlNSZXRhaW5QdHI8SlNTdHJpbmdS
ZWY+IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnN0cmluZ0ZvclJhbmdlKHVuc2lnbmVkLCB1bnNp
Z25lZCkgeyByZXR1cm4gMDsgfQogSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IEFjY2Vzc2liaWxp
dHlVSUVsZW1lbnQ6OmF0dHJpYnV0ZWRTdHJpbmdGb3JSYW5nZSh1bnNpZ25lZCwgdW5zaWduZWQp
IHsgcmV0dXJuIDA7IH0KIGJvb2wgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YXR0cmlidXRlZFN0
cmluZ1JhbmdlSXNNaXNzcGVsbGVkKHVuc2lnbmVkLCB1bnNpZ25lZCkgeyByZXR1cm4gZmFsc2U7
IH0KSW5kZXg6IFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvQWNjZXNzaWJp
bGl0eVVJRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5q
ZWN0ZWRCdW5kbGUvQWNjZXNzaWJpbGl0eVVJRWxlbWVudC5oCShyZXZpc2lvbiAxNjk0MzMpCisr
KyBUb29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0FjY2Vzc2liaWxpdHlVSUVs
ZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMjAyLDcgKzIwMiw3IEBACiAgICAgSlNSZXRhaW5Q
dHI8SlNTdHJpbmdSZWY+IHJhbmdlRm9yTGluZShpbnQpOwogICAgIEpTUmV0YWluUHRyPEpTU3Ry
aW5nUmVmPiByYW5nZUZvclBvc2l0aW9uKGludCB4LCBpbnQgeSk7CiAgICAgSlNSZXRhaW5QdHI8
SlNTdHJpbmdSZWY+IGJvdW5kc0ZvclJhbmdlKHVuc2lnbmVkIGxvY2F0aW9uLCB1bnNpZ25lZCBs
ZW5ndGgpOwotICAgIHZvaWQgc2V0U2VsZWN0ZWRUZXh0UmFuZ2UodW5zaWduZWQgbG9jYXRpb24s
IHVuc2lnbmVkIGxlbmd0aCk7CisgICAgYm9vbCBzZXRTZWxlY3RlZFRleHRSYW5nZSh1bnNpZ25l
ZCBsb2NhdGlvbiwgdW5zaWduZWQgbGVuZ3RoKTsKICAgICBKU1JldGFpblB0cjxKU1N0cmluZ1Jl
Zj4gc3RyaW5nRm9yUmFuZ2UodW5zaWduZWQgbG9jYXRpb24sIHVuc2lnbmVkIGxlbmd0aCk7CiAg
ICAgSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IGF0dHJpYnV0ZWRTdHJpbmdGb3JSYW5nZSh1bnNp
Z25lZCBsb2NhdGlvbiwgdW5zaWduZWQgbGVuZ3RoKTsKICAgICBib29sIGF0dHJpYnV0ZWRTdHJp
bmdSYW5nZUlzTWlzc3BlbGxlZCh1bnNpZ25lZCBsb2NhdGlvbiwgdW5zaWduZWQgbGVuZ3RoKTsK
SW5kZXg6IFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvQmluZGluZ3MvQWNj
ZXNzaWJpbGl0eVVJRWxlbWVudC5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViS2l0VGVzdFJ1
bm5lci9JbmplY3RlZEJ1bmRsZS9CaW5kaW5ncy9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50LmlkbAko
cmV2aXNpb24gMTY5NDMzKQorKysgVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRs
ZS9CaW5kaW5ncy9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50LmlkbAkod29ya2luZyBjb3B5KQpAQCAt
MTYxLDcgKzE2MSw3IEBACiAgICAgW1Bhc3NDb250ZXh0XSB1bnNpZ25lZCBpbnQgdWlFbGVtZW50
Q291bnRGb3JTZWFyY2hQcmVkaWNhdGUoQWNjZXNzaWJpbGl0eVVJRWxlbWVudCBzdGFydEVsZW1l
bnQsIGJvb2xlYW4gaXNEaXJlY3Rpb25OZXh0LCBvYmplY3Qgc2VhcmNoS2V5LCBET01TdHJpbmcg
c2VhcmNoVGV4dCwgYm9vbGVhbiB2aXNpYmxlT25seSwgYm9vbGVhbiBpbW1lZGlhdGVEZXNjZW5k
YW50c09ubHkpOwogICAgIFtQYXNzQ29udGV4dF0gQWNjZXNzaWJpbGl0eVVJRWxlbWVudCB1aUVs
ZW1lbnRGb3JTZWFyY2hQcmVkaWNhdGUoQWNjZXNzaWJpbGl0eVVJRWxlbWVudCBzdGFydEVsZW1l
bnQsIGJvb2xlYW4gaXNEaXJlY3Rpb25OZXh0LCBvYmplY3Qgc2VhcmNoS2V5LCBET01TdHJpbmcg
c2VhcmNoVGV4dCwgYm9vbGVhbiB2aXNpYmxlT25seSwgYm9vbGVhbiBpbW1lZGlhdGVEZXNjZW5k
YW50c09ubHkpOwogICAgIFtQYXNzQ29udGV4dF0gRE9NU3RyaW5nIHNlbGVjdFRleHRXaXRoQ3Jp
dGVyaWEoRE9NU3RyaW5nIGFtYmlndWl0eVJlc29sdXRpb24sIG9iamVjdCBzZWFyY2hTdHJpbmdz
LCBET01TdHJpbmcgcmVwbGFjZW1lbnRTdHJpbmcsIERPTVN0cmluZyBhY3Rpdml0eSk7Ci0gICAg
dm9pZCBzZXRTZWxlY3RlZFRleHRSYW5nZSh1bnNpZ25lZCBsb25nIGxvY2F0aW9uLCB1bnNpZ25l
ZCBsb25nIGxlbmd0aCk7CisgICAgYm9vbGVhbiBzZXRTZWxlY3RlZFRleHRSYW5nZSh1bnNpZ25l
ZCBsb25nIGxvY2F0aW9uLCB1bnNpZ25lZCBsb25nIGxlbmd0aCk7CiAKICAgICAvLyBTY3JvbGwg
YXJlYSBhdHRyaWJ1dGVzLgogICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBBY2Nlc3NpYmlsaXR5VUlF
bGVtZW50IGhvcml6b250YWxTY3JvbGxiYXI7CkluZGV4OiBUb29scy9XZWJLaXRUZXN0UnVubmVy
L0luamVjdGVkQnVuZGxlL2F0ay9BY2Nlc3NpYmlsaXR5Tm90aWZpY2F0aW9uSGFuZGxlckF0ay5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9h
dGsvQWNjZXNzaWJpbGl0eU5vdGlmaWNhdGlvbkhhbmRsZXJBdGsuY3BwCShyZXZpc2lvbiAxNjk0
MzMpCisrKyBUb29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL2F0ay9BY2Nlc3Np
YmlsaXR5Tm90aWZpY2F0aW9uSGFuZGxlckF0ay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5LDYg
KzI5LDcgQEAKICNpbmNsdWRlIDxXZWJLaXQvV0tCdW5kbGVQYWdlLmg+CiAjaW5jbHVkZSA8V2Vi
S2l0L1dLQnVuZGxlUGFnZVByaXZhdGUuaD4KICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2lu
Y2x1ZGUgPHd0Zi9WZWN0b3IuaD4KICNpbmNsdWRlIDx3dGYvZ29iamVjdC9HVW5pcXVlUHRyLmg+
CiAjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0
cmluZy5oPgpAQCAtMzksMTMgKzQwLDcgQEAKIAogdHlwZWRlZiBIYXNoTWFwPEF0a09iamVjdCos
IEFjY2Vzc2liaWxpdHlOb3RpZmljYXRpb25IYW5kbGVyKj4gTm90aWZpY2F0aW9uSGFuZGxlcnNN
YXA7CiAKLXVuc2lnbmVkIHN0YXRlQ2hhbmdlTGlzdGVuZXJJZCA9IDA7Ci11bnNpZ25lZCBmb2N1
c0V2ZW50TGlzdGVuZXJJZCA9IDA7Ci11bnNpZ25lZCBhY3RpdmVEZXNjZW5kYW50Q2hhbmdlZExp
c3RlbmVySWQgPSAwOwotdW5zaWduZWQgY2hpbGRyZW5DaGFuZ2VkTGlzdGVuZXJJZCA9IDA7Ci11
bnNpZ25lZCBwcm9wZXJ0eUNoYW5nZWRMaXN0ZW5lcklkID0gMDsKLXVuc2lnbmVkIHZpc2libGVE
YXRhQ2hhbmdlZExpc3RlbmVySWQgPSAwOwotdW5zaWduZWQgbG9hZENvbXBsZXRlTGlzdGVuZXJJ
ZCA9IDA7CitXVEY6OlZlY3Rvcjx1bnNpZ25lZD4gbGlzdGVuZXJJZHM7CiBOb3RpZmljYXRpb25I
YW5kbGVyc01hcCBub3RpZmljYXRpb25IYW5kbGVyczsKIEFjY2Vzc2liaWxpdHlOb3RpZmljYXRp
b25IYW5kbGVyKiBnbG9iYWxOb3RpZmljYXRpb25IYW5kbGVyID0gbnVsbHB0cjsKIGJvb2wgbG9n
Z2luZ0FjY2Vzc2liaWxpdHlFdmVudHMgPSBmYWxzZTsKQEAgLTgyLDEwICs3NywxOSBAQAogICAg
IGlmICghYWNjZXNzaWJsZSB8fCAhQVRLX0lTX09CSkVDVChhY2Nlc3NpYmxlKSkKICAgICAgICAg
cmV0dXJuIHRydWU7CiAKKyNpZiBQTEFURk9STShHVEspIHx8IFBMQVRGT1JNKEVGTCkKKyAgICBX
S0J1bmRsZVBhZ2VSZWYgcGFnZSA9IEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5wYWdlKCktPnBh
Z2UoKTsKKyAgICBXS0J1bmRsZUZyYW1lUmVmIG1haW5GcmFtZSA9IFdLQnVuZGxlUGFnZUdldE1h
aW5GcmFtZShwYWdlKTsKKyAgICBKU0NvbnRleHRSZWYganNDb250ZXh0ID0gV0tCdW5kbGVGcmFt
ZUdldEphdmFTY3JpcHRDb250ZXh0KG1haW5GcmFtZSk7CisjZWxzZQorICAgIEpTQ29udGV4dFJl
ZiBqc0NvbnRleHQgPSBudWxscHRyOworI2VuZGlmCisKICAgICBHU2lnbmFsUXVlcnkgc2lnbmFs
UXVlcnk7CiAgICAgR1VuaXF1ZVB0cjxjaGFyPiBzaWduYWxOYW1lOwogICAgIEdVbmlxdWVQdHI8
Y2hhcj4gc2lnbmFsVmFsdWU7CiAgICAgY29uc3QgY2hhciogbm90aWZpY2F0aW9uTmFtZSA9IG51
bGxwdHI7CisgICAgVmVjdG9yPEpTVmFsdWVSZWY+IGV4dHJhQXJnczsKIAogICAgIGdfc2lnbmFs
X3F1ZXJ5KHNpZ25hbEhpbnQtPnNpZ25hbF9pZCwgJnNpZ25hbFF1ZXJ5KTsKIApAQCAtMTEyLDE5
ICsxMTYsMTggQEAKICAgICAgICAgICAgIG5vdGlmaWNhdGlvbk5hbWUgPSAiQVhWYWx1ZUNoYW5n
ZWQiOwogICAgIH0gZWxzZSBpZiAoIWdfc3RyY21wMChzaWduYWxRdWVyeS5zaWduYWxfbmFtZSwg
ImxvYWQtY29tcGxldGUiKSkKICAgICAgICAgbm90aWZpY2F0aW9uTmFtZSA9ICJBWExvYWRDb21w
bGV0ZSI7Ci0gICAgZWxzZQorICAgIGVsc2UgaWYgKCFnX3N0cmNtcDAoc2lnbmFsUXVlcnkuc2ln
bmFsX25hbWUsICJ0ZXh0LWNhcmV0LW1vdmVkIikpIHsKKyAgICAgICAgbm90aWZpY2F0aW9uTmFt
ZSA9ICJBWFRleHRDYXJldE1vdmVkIjsKICAgICAgICAgc2lnbmFsTmFtZS5yZXNldChnX3N0cmR1
cChzaWduYWxRdWVyeS5zaWduYWxfbmFtZSkpOworICAgICAgICBzaWduYWxWYWx1ZS5yZXNldChn
X3N0cmR1cF9wcmludGYoIiVkIiwgZ192YWx1ZV9nZXRfaW50KCZwYXJhbVZhbHVlc1sxXSkpKTsK
KyAgICAgICAgSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IGpzU2lnbmFsVmFsdWUoQWRvcHQsIEpT
U3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKHNpZ25hbFZhbHVlLmdldCgpKSk7CisgICAgICAg
IGV4dHJhQXJncy5hcHBlbmQoSlNWYWx1ZU1ha2VTdHJpbmcoanNDb250ZXh0LCBqc1NpZ25hbFZh
bHVlLmdldCgpKSk7CisgICAgfSBlbHNlCisgICAgICAgIHNpZ25hbE5hbWUucmVzZXQoZ19zdHJk
dXAoc2lnbmFsUXVlcnkuc2lnbmFsX25hbWUpKTsKIAogICAgIGlmIChsb2dnaW5nQWNjZXNzaWJp
bGl0eUV2ZW50cykKICAgICAgICAgcHJpbnRBY2Nlc3NpYmlsaXR5RXZlbnQoYWNjZXNzaWJsZSwg
c2lnbmFsTmFtZS5nZXQoKSwgc2lnbmFsVmFsdWUuZ2V0KCkpOwogCi0jaWYgUExBVEZPUk0oR1RL
KSB8fCBQTEFURk9STShFRkwpCi0gICAgV0tCdW5kbGVQYWdlUmVmIHBhZ2UgPSBJbmplY3RlZEJ1
bmRsZTo6c2hhcmVkKCkucGFnZSgpLT5wYWdlKCk7Ci0gICAgV0tCdW5kbGVGcmFtZVJlZiBtYWlu
RnJhbWUgPSBXS0J1bmRsZVBhZ2VHZXRNYWluRnJhbWUocGFnZSk7Ci0gICAgSlNDb250ZXh0UmVm
IGpzQ29udGV4dCA9IFdLQnVuZGxlRnJhbWVHZXRKYXZhU2NyaXB0Q29udGV4dChtYWluRnJhbWUp
OwotI2Vsc2UKLSAgICBKU0NvbnRleHRSZWYganNDb250ZXh0ID0gbnVsbHB0cjsKLSNlbmRpZgog
ICAgIGlmICghanNDb250ZXh0KQogICAgICAgICByZXR1cm4gdHJ1ZTsKIApAQCAtMTMyLDE3ICsx
MzUsMjUgQEAKICAgICAgICAgSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IGpzTm90aWZpY2F0aW9u
RXZlbnROYW1lKEFkb3B0LCBKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZyhub3RpZmljYXRp
b25OYW1lKSk7CiAgICAgICAgIEpTVmFsdWVSZWYgbm90aWZpY2F0aW9uTmFtZUFyZ3VtZW50ID0g
SlNWYWx1ZU1ha2VTdHJpbmcoanNDb250ZXh0LCBqc05vdGlmaWNhdGlvbkV2ZW50TmFtZS5nZXQo
KSk7CiAgICAgICAgIE5vdGlmaWNhdGlvbkhhbmRsZXJzTWFwOjppdGVyYXRvciBlbGVtZW50Tm90
aWZpY2F0aW9uSGFuZGxlciA9IG5vdGlmaWNhdGlvbkhhbmRsZXJzLmZpbmQoYWNjZXNzaWJsZSk7
CisgICAgICAgIEpTVmFsdWVSZWYgYXJndW1lbnRzWzVdOyAvLyB0aGlzIGRpbWVuc2lvbiBtdXN0
IGJlID49IDIgKyBtYXgoZXh0cmFBcmdzLnNpemUoKSkKKyAgICAgICAgYXJndW1lbnRzWzBdID0g
dG9KUyhqc0NvbnRleHQsIFdURjo6Z2V0UHRyKFdUUjo6QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6
Y3JlYXRlKGFjY2Vzc2libGUpKSk7CisgICAgICAgIGFyZ3VtZW50c1sxXSA9IG5vdGlmaWNhdGlv
bk5hbWVBcmd1bWVudDsKKyAgICAgICAgc2l6ZV90IG51bU9mRXh0cmFBcmdzID0gZXh0cmFBcmdz
LnNpemUoKTsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBudW1PZkV4dHJhQXJnczsgaSsr
KQorICAgICAgICAgICAgYXJndW1lbnRzW2kgKyAyXSA9IGV4dHJhQXJnc1tpXTsKICAgICAgICAg
aWYgKGVsZW1lbnROb3RpZmljYXRpb25IYW5kbGVyICE9IG5vdGlmaWNhdGlvbkhhbmRsZXJzLmVu
ZCgpKSB7Ci0gICAgICAgICAgICAvLyBMaXN0ZW5lciBmb3Igb25lIGVsZW1lbnQganVzdCBnZXRz
IG9uZSBhcmd1bWVudCwgdGhlIG5vdGlmaWNhdGlvbiBuYW1lLgotICAgICAgICAgICAgSlNPYmpl
Y3RDYWxsQXNGdW5jdGlvbihqc0NvbnRleHQsIGNvbnN0X2Nhc3Q8SlNPYmplY3RSZWY+KGVsZW1l
bnROb3RpZmljYXRpb25IYW5kbGVyLT52YWx1ZS0+bm90aWZpY2F0aW9uRnVuY3Rpb25DYWxsYmFj
aygpKSwgMCwgMSwgJm5vdGlmaWNhdGlvbk5hbWVBcmd1bWVudCwgMCk7CisgICAgICAgICAgICAv
LyBMaXN0ZW5lciBmb3Igb25lIGVsZW1lbnQuIEFzIGFyZ3VtZW50cywgaXQgZ2V0cyB0aGUgbm90
aWZpY2F0aW9uIG5hbWUKKyAgICAgICAgICAgIC8vIGFuZCBzb21ldGltZXMgZXh0cmEgYXJndW1l
bnRzLgorICAgICAgICAgICAgSlNPYmplY3RDYWxsQXNGdW5jdGlvbihqc0NvbnRleHQsCisgICAg
ICAgICAgICAgICAgY29uc3RfY2FzdDxKU09iamVjdFJlZj4oZWxlbWVudE5vdGlmaWNhdGlvbkhh
bmRsZXItPnZhbHVlLT5ub3RpZmljYXRpb25GdW5jdGlvbkNhbGxiYWNrKCkpLAorICAgICAgICAg
ICAgICAgIDAsIG51bU9mRXh0cmFBcmdzICsgMSwgYXJndW1lbnRzICsgMSwgMCk7CiAgICAgICAg
IH0KIAogICAgICAgICBpZiAoZ2xvYmFsTm90aWZpY2F0aW9uSGFuZGxlcikgewotICAgICAgICAg
ICAgLy8gQSBnbG9iYWwgbGlzdGVuZXIgZ2V0cyB0aGUgZWxlbWVudCBhbmQgdGhlIG5vdGlmaWNh
dGlvbiBuYW1lIGFzIGFyZ3VtZW50cy4KLSAgICAgICAgICAgIEpTVmFsdWVSZWYgYXJndW1lbnRz
WzJdOwotICAgICAgICAgICAgYXJndW1lbnRzWzBdID0gdG9KUyhqc0NvbnRleHQsIFdURjo6Z2V0
UHRyKFdUUjo6QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6Y3JlYXRlKGFjY2Vzc2libGUpKSk7Ci0g
ICAgICAgICAgICBhcmd1bWVudHNbMV0gPSBub3RpZmljYXRpb25OYW1lQXJndW1lbnQ7Ci0gICAg
ICAgICAgICBKU09iamVjdENhbGxBc0Z1bmN0aW9uKGpzQ29udGV4dCwgY29uc3RfY2FzdDxKU09i
amVjdFJlZj4oZ2xvYmFsTm90aWZpY2F0aW9uSGFuZGxlci0+bm90aWZpY2F0aW9uRnVuY3Rpb25D
YWxsYmFjaygpKSwgMCwgMiwgYXJndW1lbnRzLCAwKTsKKyAgICAgICAgICAgIC8vIEEgZ2xvYmFs
IGxpc3RlbmVyIGdldHMgYWRkaXRpb25hbGx5IHRoZSBlbGVtZW50IGFzIHRoZSBmaXJzdCBhcmd1
bWVudC4KKyAgICAgICAgICAgIEpTT2JqZWN0Q2FsbEFzRnVuY3Rpb24oanNDb250ZXh0LAorICAg
ICAgICAgICAgICAgIGNvbnN0X2Nhc3Q8SlNPYmplY3RSZWY+KGdsb2JhbE5vdGlmaWNhdGlvbkhh
bmRsZXItPm5vdGlmaWNhdGlvbkZ1bmN0aW9uQ2FsbGJhY2soKSksCisgICAgICAgICAgICAgICAg
MCwgbnVtT2ZFeHRyYUFyZ3MgKyAyLCBhcmd1bWVudHMsIDApOwogICAgICAgICB9CiAgICAgfQog
CkBAIC0yMzgsMTQgKzI0OSwzNSBAQAogICAgIGlmICghZGlzY29ubmVjdEFjY2Vzc2liaWxpdHlD
YWxsYmFja3MoKSkKICAgICAgICAgcmV0dXJuOwogCisgICAgY29uc3QgY2hhciogc2lnbmFsTmFt
ZXNbXSA9IHsKKyAgICAgICAgIkFUSzpBdGtPYmplY3Q6c3RhdGUtY2hhbmdlIiwKKyAgICAgICAg
IkFUSzpBdGtPYmplY3Q6c3RhdGUtY2hhbmdlIiwKKyAgICAgICAgIkFUSzpBdGtPYmplY3Q6Zm9j
dXMtZXZlbnQiLAorICAgICAgICAiQVRLOkF0a09iamVjdDphY3RpdmUtZGVzY2VuZGFudC1jaGFu
Z2VkIiwKKyAgICAgICAgIkFUSzpBdGtPYmplY3Q6Y2hpbGRyZW4tY2hhbmdlZCIsCisgICAgICAg
ICJBVEs6QXRrT2JqZWN0OnByb3BlcnR5LWNoYW5nZSIsCisgICAgICAgICJBVEs6QXRrT2JqZWN0
OnZpc2libGUtZGF0YS1jaGFuZ2VkIiwKKyAgICAgICAgIkFUSzpBdGtEb2N1bWVudDpsb2FkLWNv
bXBsZXRlIiwKKyAgICAgICAgIkFUSzpBdGtUZXh0OnRleHQtY2FyZXQtbW92ZWQiLAorICAgICAg
ICAwCisgICAgfTsKKworICAgIC8vIFJlZ2lzdGVyIGF0ayBpbnRlcmZhY2VzLCBvdGhlcndpc2Ug
YWRkX2dsb2JhbCBtYXkgZmFpbC4KKyAgICBHT2JqZWN0KiBkdW1teU9iamVjdCA9IChHT2JqZWN0
KilnX29iamVjdF9uZXcoR19UWVBFX09CSkVDVCwgTlVMTCwgTlVMTCk7CisgICAgZ19vYmplY3Rf
dW5yZWYoYXRrX25vX29wX29iamVjdF9uZXcoZHVtbXlPYmplY3QpKTsKKyAgICBnX29iamVjdF91
bnJlZihkdW1teU9iamVjdCk7CisKICAgICAvLyBBZGQgZ2xvYmFsIGxpc3RlbmVycyBmb3IgQXRr
T2JqZWN0J3Mgc2lnbmFscy4KLSAgICBzdGF0ZUNoYW5nZUxpc3RlbmVySWQgPSBhdGtfYWRkX2ds
b2JhbF9ldmVudF9saXN0ZW5lcihheE9iamVjdEV2ZW50TGlzdGVuZXIsICJBVEs6QXRrT2JqZWN0
OnN0YXRlLWNoYW5nZSIpOwotICAgIGZvY3VzRXZlbnRMaXN0ZW5lcklkID0gYXRrX2FkZF9nbG9i
YWxfZXZlbnRfbGlzdGVuZXIoYXhPYmplY3RFdmVudExpc3RlbmVyLCAiQVRLOkF0a09iamVjdDpm
b2N1cy1ldmVudCIpOwotICAgIGFjdGl2ZURlc2NlbmRhbnRDaGFuZ2VkTGlzdGVuZXJJZCA9IGF0
a19hZGRfZ2xvYmFsX2V2ZW50X2xpc3RlbmVyKGF4T2JqZWN0RXZlbnRMaXN0ZW5lciwgIkFUSzpB
dGtPYmplY3Q6YWN0aXZlLWRlc2NlbmRhbnQtY2hhbmdlZCIpOwotICAgIGNoaWxkcmVuQ2hhbmdl
ZExpc3RlbmVySWQgPSBhdGtfYWRkX2dsb2JhbF9ldmVudF9saXN0ZW5lcihheE9iamVjdEV2ZW50
TGlzdGVuZXIsICJBVEs6QXRrT2JqZWN0OmNoaWxkcmVuLWNoYW5nZWQiKTsKLSAgICBwcm9wZXJ0
eUNoYW5nZWRMaXN0ZW5lcklkID0gYXRrX2FkZF9nbG9iYWxfZXZlbnRfbGlzdGVuZXIoYXhPYmpl
Y3RFdmVudExpc3RlbmVyLCAiQVRLOkF0a09iamVjdDpwcm9wZXJ0eS1jaGFuZ2UiKTsKLSAgICB2
aXNpYmxlRGF0YUNoYW5nZWRMaXN0ZW5lcklkID0gYXRrX2FkZF9nbG9iYWxfZXZlbnRfbGlzdGVu
ZXIoYXhPYmplY3RFdmVudExpc3RlbmVyLCAiQVRLOkF0a09iamVjdDp2aXNpYmxlLWRhdGEtY2hh
bmdlZCIpOwotICAgIGxvYWRDb21wbGV0ZUxpc3RlbmVySWQgPSBhdGtfYWRkX2dsb2JhbF9ldmVu
dF9saXN0ZW5lcihheE9iamVjdEV2ZW50TGlzdGVuZXIsICJBVEs6QXRrRG9jdW1lbnQ6bG9hZC1j
b21wbGV0ZSIpOworICAgIGZvciAoY29uc3QgY2hhcioqIHNpZ25hbE5hbWUgPSBzaWduYWxOYW1l
czsgKnNpZ25hbE5hbWU7IHNpZ25hbE5hbWUrKykgeworICAgICAgICB1bnNpZ25lZCBpZCA9IGF0
a19hZGRfZ2xvYmFsX2V2ZW50X2xpc3RlbmVyKGF4T2JqZWN0RXZlbnRMaXN0ZW5lciwgKnNpZ25h
bE5hbWUpOworICAgICAgICBpZiAoIWlkKSB7CisgICAgICAgICAgICBTdHJpbmcgbWVzc2FnZSA9
IFN0cmluZzo6Zm9ybWF0KCJhdGtfYWRkX2dsb2JhbF9ldmVudF9saXN0ZW5lciBmYWlsZWQgZm9y
IHNpZ25hbCAlc1xuIiwgKnNpZ25hbE5hbWUpOworICAgICAgICAgICAgSW5qZWN0ZWRCdW5kbGU6
OnNoYXJlZCgpLm91dHB1dFRleHQobWVzc2FnZSk7CisgICAgICAgICAgICBjb250aW51ZTsKKyAg
ICAgICAgfQorCisgICAgICAgIGxpc3RlbmVySWRzLmFwcGVuZChpZCk7CisgICAgfQogfQogCiBi
b29sIEFjY2Vzc2liaWxpdHlOb3RpZmljYXRpb25IYW5kbGVyOjpkaXNjb25uZWN0QWNjZXNzaWJp
bGl0eUNhbGxiYWNrcygpCkBAIC0yNTUsMzQgKzI4NywxMSBAQAogICAgICAgICByZXR1cm4gZmFs
c2U7CiAKICAgICAvLyBBdGtPYmplY3Qgc2lnbmFscy4KLSAgICBpZiAoc3RhdGVDaGFuZ2VMaXN0
ZW5lcklkKSB7Ci0gICAgICAgIGF0a19yZW1vdmVfZ2xvYmFsX2V2ZW50X2xpc3RlbmVyKHN0YXRl
Q2hhbmdlTGlzdGVuZXJJZCk7Ci0gICAgICAgIHN0YXRlQ2hhbmdlTGlzdGVuZXJJZCA9IDA7Cisg
ICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsaXN0ZW5lcklkcy5zaXplKCk7IGkrKykgeworICAgICAg
ICBBU1NFUlQobGlzdGVuZXJJZHNbaV0pOworICAgICAgICBhdGtfcmVtb3ZlX2dsb2JhbF9ldmVu
dF9saXN0ZW5lcihsaXN0ZW5lcklkc1tpXSk7CiAgICAgfQotICAgIGlmIChmb2N1c0V2ZW50TGlz
dGVuZXJJZCkgewotICAgICAgICBhdGtfcmVtb3ZlX2dsb2JhbF9ldmVudF9saXN0ZW5lcihmb2N1
c0V2ZW50TGlzdGVuZXJJZCk7Ci0gICAgICAgIGZvY3VzRXZlbnRMaXN0ZW5lcklkID0gMDsKLSAg
ICB9Ci0gICAgaWYgKGFjdGl2ZURlc2NlbmRhbnRDaGFuZ2VkTGlzdGVuZXJJZCkgewotICAgICAg
ICBhdGtfcmVtb3ZlX2dsb2JhbF9ldmVudF9saXN0ZW5lcihhY3RpdmVEZXNjZW5kYW50Q2hhbmdl
ZExpc3RlbmVySWQpOwotICAgICAgICBhY3RpdmVEZXNjZW5kYW50Q2hhbmdlZExpc3RlbmVySWQg
PSAwOwotICAgIH0KLSAgICBpZiAoY2hpbGRyZW5DaGFuZ2VkTGlzdGVuZXJJZCkgewotICAgICAg
ICBhdGtfcmVtb3ZlX2dsb2JhbF9ldmVudF9saXN0ZW5lcihjaGlsZHJlbkNoYW5nZWRMaXN0ZW5l
cklkKTsKLSAgICAgICAgY2hpbGRyZW5DaGFuZ2VkTGlzdGVuZXJJZCA9IDA7Ci0gICAgfQotICAg
IGlmIChwcm9wZXJ0eUNoYW5nZWRMaXN0ZW5lcklkKSB7Ci0gICAgICAgIGF0a19yZW1vdmVfZ2xv
YmFsX2V2ZW50X2xpc3RlbmVyKHByb3BlcnR5Q2hhbmdlZExpc3RlbmVySWQpOwotICAgICAgICBw
cm9wZXJ0eUNoYW5nZWRMaXN0ZW5lcklkID0gMDsKLSAgICB9Ci0gICAgaWYgKHZpc2libGVEYXRh
Q2hhbmdlZExpc3RlbmVySWQpIHsKLSAgICAgICAgYXRrX3JlbW92ZV9nbG9iYWxfZXZlbnRfbGlz
dGVuZXIodmlzaWJsZURhdGFDaGFuZ2VkTGlzdGVuZXJJZCk7Ci0gICAgICAgIHZpc2libGVEYXRh
Q2hhbmdlZExpc3RlbmVySWQgPSAwOwotICAgIH0KLSAgICBpZiAobG9hZENvbXBsZXRlTGlzdGVu
ZXJJZCkgewotICAgICAgICBhdGtfcmVtb3ZlX2dsb2JhbF9ldmVudF9saXN0ZW5lcihsb2FkQ29t
cGxldGVMaXN0ZW5lcklkKTsKLSAgICAgICAgbG9hZENvbXBsZXRlTGlzdGVuZXJJZCA9IDA7Ci0g
ICAgfQorICAgIGxpc3RlbmVySWRzLmNsZWFyKCk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKSW5k
ZXg6IFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvYXRrL0FjY2Vzc2liaWxp
dHlVSUVsZW1lbnRBdGsuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIv
SW5qZWN0ZWRCdW5kbGUvYXRrL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnRBdGsuY3BwCShyZXZpc2lv
biAxNjk0MzMpCisrKyBUb29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL2F0ay9B
Y2Nlc3NpYmlsaXR5VUlFbGVtZW50QXRrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTU4MCwxMiAr
MTU4MCwxNSBAQAogICAgIHJldHVybiBKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZyhzZWxl
Y3Rpb24uZ2V0KCkpOwogfQogCi12b2lkIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnNldFNlbGVj
dGVkVGV4dFJhbmdlKHVuc2lnbmVkIGxvY2F0aW9uLCB1bnNpZ25lZCBsZW5ndGgpCitib29sIEFj
Y2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnNldFNlbGVjdGVkVGV4dFJhbmdlKHVuc2lnbmVkIGxvY2F0
aW9uLCB1bnNpZ25lZCBsZW5ndGgpCiB7CiAgICAgaWYgKCFBVEtfSVNfVEVYVChtX2VsZW1lbnQu
Z2V0KCkpKQotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGF0
a190ZXh0X3NldF9zZWxlY3Rpb24oQVRLX1RFWFQobV9lbGVtZW50LmdldCgpKSwgMCwgbG9jYXRp
b24sIGxvY2F0aW9uICsgbGVuZ3RoKTsKKyAgICBpZiAobGVuZ3RoKQorICAgICAgICByZXR1cm4g
YXRrX3RleHRfc2V0X2NhcmV0X29mZnNldChBVEtfVEVYVChtX2VsZW1lbnQuZ2V0KCkpLCBsb2Nh
dGlvbik7CisKKyAgICByZXR1cm4gYXRrX3RleHRfc2V0X3NlbGVjdGlvbihBVEtfVEVYVChtX2Vs
ZW1lbnQuZ2V0KCkpLCAwLCBsb2NhdGlvbiwgbG9jYXRpb24gKyBsZW5ndGgpOwogfQogCiB2b2lk
IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmluY3JlbWVudCgpCkluZGV4OiBUb29scy9XZWJLaXRU
ZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL2lvcy9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50SU9TLm1t
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvaW9z
L0FjY2Vzc2liaWxpdHlVSUVsZW1lbnRJT1MubW0JKHJldmlzaW9uIDE2OTQzMykKKysrIFRvb2xz
L1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvaW9zL0FjY2Vzc2liaWxpdHlVSUVsZW1l
bnRJT1MubW0JKHdvcmtpbmcgY29weSkKQEAgLTU2Miw4ICs1NjIsOSBAQAogICAgIHJldHVybiBK
U1N0cmluZ0NyZWF0ZVdpdGhDaGFyYWN0ZXJzKDAsIDApOwogfQogCi12b2lkIEFjY2Vzc2liaWxp
dHlVSUVsZW1lbnQ6OnNldFNlbGVjdGVkVGV4dFJhbmdlKHVuc2lnbmVkIGxvY2F0aW9uLCB1bnNp
Z25lZCBsZW5ndGgpCitib29sIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnNldFNlbGVjdGVkVGV4
dFJhbmdlKHVuc2lnbmVkIGxvY2F0aW9uLCB1bnNpZ25lZCBsZW5ndGgpCiB7CisgICAgcmV0dXJu
IGZhbHNlOwogfQogCiB2b2lkIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmluY3JlbWVudCgpCklu
ZGV4OiBUb29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL21hYy9BY2Nlc3NpYmls
aXR5VUlFbGVtZW50TWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIv
SW5qZWN0ZWRCdW5kbGUvbWFjL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnRNYWMubW0JKHJldmlzaW9u
IDE2OTQzMykKKysrIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvbWFjL0Fj
Y2Vzc2liaWxpdHlVSUVsZW1lbnRNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTEzNjQsNyArMTM2
NCw3IEBACiAgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKLXZvaWQgQWNjZXNzaWJpbGl0eVVJRWxl
bWVudDo6c2V0U2VsZWN0ZWRUZXh0UmFuZ2UodW5zaWduZWQgbG9jYXRpb24sIHVuc2lnbmVkIGxl
bmd0aCkKK2Jvb2wgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6c2V0U2VsZWN0ZWRUZXh0UmFuZ2Uo
dW5zaWduZWQgbG9jYXRpb24sIHVuc2lnbmVkIGxlbmd0aCkKIHsKICAgICBOU1JhbmdlIHRleHRS
YW5nZSA9IE5TTWFrZVJhbmdlKGxvY2F0aW9uLCBsZW5ndGgpOwogICAgIE5TVmFsdWUgKnRleHRS
YW5nZVZhbHVlID0gW05TVmFsdWUgdmFsdWVXaXRoUmFuZ2U6dGV4dFJhbmdlXTsKQEAgLTEzNzEs
NiArMTM3MSw4IEBACiAgICAgQkVHSU5fQVhfT0JKQ19FWENFUFRJT05TCiAgICAgW21fZWxlbWVu
dCBhY2Nlc3NpYmlsaXR5U2V0VmFsdWU6dGV4dFJhbmdlVmFsdWUgZm9yQXR0cmlidXRlOk5TQWNj
ZXNzaWJpbGl0eVNlbGVjdGVkVGV4dFJhbmdlQXR0cmlidXRlXTsKICAgICBFTkRfQVhfT0JKQ19F
WENFUFRJT05TCisKKyAgICByZXR1cm4gdHJ1ZTsKIH0KIAogdm9pZCBBY2Nlc3NpYmlsaXR5VUlF
bGVtZW50OjppbmNyZW1lbnQoKQo=
</data>

          </attachment>
      

    </bug>

</bugzilla>