<?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>66052</bug_id>
          
          <creation_ts>2011-08-11 06:24:33 -0700</creation_ts>
          <short_desc>Add support of setPasswordEchoEnabled and setPasswordEchoDuration for password echo feature</short_desc>
          <delta_ts>2011-08-18 07:17:52 -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>Forms</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>66307</dependson>
          <blocked>32509</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Chang Shu">cshu</reporter>
          <assigned_to name="Chang Shu">cshu</assigned_to>
          <cc>ademar</cc>
    
    <cc>ap</cc>
    
    <cc>dglazkov</cc>
    
    <cc>mifenton</cc>
    
    <cc>tonikitoo</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>449730</commentid>
    <comment_count>0</comment_count>
    <who name="Chang Shu">cshu</who>
    <bug_when>2011-08-11 06:24:33 -0700</bug_when>
    <thetext>Add the above support in page/Settings and LayoutTestController so user can enable/disable password echo feature and control the echo duration.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>449765</commentid>
    <comment_count>1</comment_count>
      <attachid>103621</attachid>
    <who name="Chang Shu">cshu</who>
    <bug_when>2011-08-11 07:45:24 -0700</bug_when>
    <thetext>Created attachment 103621
fix patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>449824</commentid>
    <comment_count>2</comment_count>
      <attachid>103621</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2011-08-11 09:30:11 -0700</bug_when>
    <thetext>Comment on attachment 103621
fix patch

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

Most of the comments are not mandatory to address, but I think that you&apos;ll want to use either overridePreference or window.internals.

&gt; Source/WebCore/page/Settings.cpp:111
&gt; +    , m_passwordEchoDuration(1.0)

I think that it&apos;s just &quot;1&quot; per coding style.

I like to have &quot;Seconds&quot; in variables that measure time in seconds to avoid potential confusion.

&gt; Source/WebCore/page/Settings.cpp:213
&gt; +    , m_isPasswordEchoEnabled(false)

There is lots of precedent in this class already, but it is grammatically incorrect to say &quot;if is password data enabled&quot;. We try to name boolean flags in a way that would make such checks more readable.

&gt; Source/WebKit/mac/WebView/WebPreferences.mm:383
&gt; +        [NSNumber numberWithDouble:2.0],   WebKitPasswordEchoDurationPreferenceKey,

Why is this different from WebCore default?

&gt; Tools/DumpRenderTree/LayoutTestController.cpp:2442
&gt; +        { &quot;setPasswordEchoEnabled&quot;, setPasswordEchoEnabledCallback, kJSPropertyAttributeReadOnly | kJSPropertyAttributeDontDelete },
&gt; +        { &quot;setPasswordEchoDuration&quot;, setPasswordEchoDurationCallback, kJSPropertyAttributeReadOnly | kJSPropertyAttributeDontDelete },

There is a bunch of considerations here, and I&apos;m not sure what the best practice is now:
1. As there is a preference key for this, you could/should use overridePreference instead of implementing a custom method.
2. But I&apos;m not sure if preferences set with overridePreference are correctly reset between tests.
3. Hacking into WebCore is now done via window.internals, not layoutTestController. Layout test controller is better in that it goes through WebKit APIs and thus tests those, but this API is trivial, and supporting internals on all platforms is much easier.

&gt; LayoutTests/editing/input/password-echo-settings.html:10
&gt; +&lt;p&gt; Test enable password echo and set echo duration.

This does not really test any functionality. If you intend to a real test, why not do it now?

&gt; LayoutTests/platform/wk2/Skipped:1870
&gt; +# WebKitTestRunner needs layoutTestController.setPasswordEchoEnabled
&gt; +# WebKitTestRunner needs layoutTestController.setPasswordEchoDuration
&gt; +editing/input/password-echo-settings.html

WebKit2 is the main WebKit, I think that it&apos;s important to support it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>449875</commentid>
    <comment_count>3</comment_count>
    <who name="Chang Shu">cshu</who>
    <bug_when>2011-08-11 10:50:40 -0700</bug_when>
    <thetext>Thanks for the review, ap. I added my comments below.

&gt; &gt; Source/WebKit/mac/WebView/WebPreferences.mm:383
&gt; &gt; +        [NSNumber numberWithDouble:2.0],   WebKitPasswordEchoDurationPreferenceKey,
&gt; 
&gt; Why is this different from WebCore default?

I noticed that the default value on Nokia phones has been 1 second but on iOS it&apos;s 2 seconds.
&gt; 
&gt; &gt; Tools/DumpRenderTree/LayoutTestController.cpp:2442
&gt; &gt; +        { &quot;setPasswordEchoEnabled&quot;, setPasswordEchoEnabledCallback, kJSPropertyAttributeReadOnly | kJSPropertyAttributeDontDelete },
&gt; &gt; +        { &quot;setPasswordEchoDuration&quot;, setPasswordEchoDurationCallback, kJSPropertyAttributeReadOnly | kJSPropertyAttributeDontDelete },
&gt; 
&gt; There is a bunch of considerations here, and I&apos;m not sure what the best practice is now:
&gt; 1. As there is a preference key for this, you could/should use overridePreference instead of implementing a custom method.
&gt; 2. But I&apos;m not sure if preferences set with overridePreference are correctly reset between tests.
&gt; 3. Hacking into WebCore is now done via window.internals, not layoutTestController. Layout test controller is better in that it goes through WebKit APIs and thus tests those, but this API is trivial, and supporting internals on all platforms is much easier.

It&apos;s great to have window.internals. It&apos;s easy to implement and it&apos;s cross-platform. But on the second thought, I think we need WebKit API for this. The user needs to enable the feature in their cpp code, right?

&gt; 
&gt; &gt; LayoutTests/editing/input/password-echo-settings.html:10
&gt; &gt; +&lt;p&gt; Test enable password echo and set echo duration.
&gt; 
&gt; This does not really test any functionality. If you intend to a real test, why not do it now?

Do you suggest I move my original password echo tests in 32509 here and leave them failed? Sounds good to me.
&gt; 
&gt; &gt; LayoutTests/platform/wk2/Skipped:1870
&gt; &gt; +# WebKitTestRunner needs layoutTestController.setPasswordEchoEnabled
&gt; &gt; +# WebKitTestRunner needs layoutTestController.setPasswordEchoDuration
&gt; &gt; +editing/input/password-echo-settings.html
&gt; 
&gt; WebKit2 is the main WebKit, I think that it&apos;s important to support it.

I will do this in a separate patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>449910</commentid>
    <comment_count>4</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2011-08-11 11:49:27 -0700</bug_when>
    <thetext>&gt; It&apos;s great to have window.internals. It&apos;s easy to implement and it&apos;s cross-platform. 
&gt; But on the second thought, I think we need WebKit API for this. The user needs to 
&gt; enable the feature in their cpp code, right?

Perhaps I&apos;m confused, but I thought that platform specific code in WebKit would do that (e.g. always on on iOS). Do applications embedding WebKit need control over this?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>449930</commentid>
    <comment_count>5</comment_count>
    <who name="Chang Shu">cshu</who>
    <bug_when>2011-08-11 12:27:12 -0700</bug_when>
    <thetext>&gt; Perhaps I&apos;m confused, but I thought that platform specific code in WebKit would do that (e.g. always on on iOS). Do applications embedding WebKit need control over this?

The platform itself does not necessarily determine if password echo should be enabled or not. E.g., the qt port may work on desktops and mobile devices with various hardware configurations. This is why I was thinking leaving the choice to the application code.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>449963</commentid>
    <comment_count>6</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2011-08-11 13:07:01 -0700</bug_when>
    <thetext>I understand that Qt port works on multiple platforms, but it seems that it&apos;s still in a good position to make the choice. It&apos;s a platform standard, so applications shouldn&apos;t be able to change it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>450419</commentid>
    <comment_count>7</comment_count>
      <attachid>103769</attachid>
    <who name="Chang Shu">cshu</who>
    <bug_when>2011-08-12 07:23:23 -0700</bug_when>
    <thetext>Created attachment 103769
fix patch 2</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>450444</commentid>
    <comment_count>8</comment_count>
      <attachid>103769</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2011-08-12 08:52:01 -0700</bug_when>
    <thetext>Comment on attachment 103769
fix patch 2

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

I&apos;m not saying r=me because I don&apos;t understand what will reset the setting back to default after a test is finished. Is there some code that just resets all settings?

&gt; Source/WebCore/page/Settings.h:464
&gt; +        void setPasswordEchoEnabled(bool flag) { m_passwordEchoEnabled = flag; };

Unneeded semicolon at the end.

&gt; Source/WebCore/page/Settings.h:467
&gt; +        void setPasswordEchoDuration(double durationInSeconds) { m_passwordEchoDurationInSeconds = durationInSeconds; };

Ditto.

&gt; Source/WebCore/testing/Internals.cpp:207
&gt; +    if (!document || !document-&gt;settings()) {
&gt; +        ec = INVALID_ACCESS_ERR;
&gt; +        return;
&gt; +    }

I don&apos;t think that there is a point in making these checks and raising an exception. But that seems to match common pattern in this file.

&gt; Source/WebCore/testing/Internals.idl:49
&gt; +        void setPasswordEchoEnabled(in Document document, in boolean enabled) raises(DOMException);
&gt; +        void setPasswordEchoDuration(in Document document, in double durationInSeconds) raises(DOMException);

What&apos;s the reason to pass in a document? Can&apos;t we just get a page pointer from the window object this Internals instance lives on?

&gt; Source/WebKit/qt/Api/qwebsettings.cpp:290
&gt; +        settings-&gt;setPasswordEchoDuration(1);

You didn&apos;t put &quot;InSeconds&quot; in function names, so call sites like this one are less obvious than they could be.

&gt; LayoutTests/editing/input/resources/password-echo.js:83
&gt; +            window.internals.setPasswordEchoDuration(document, 0.1);

Again, not having &quot;InSeconds&quot; in API name makes this slightly more confusing than it could be.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>451054</commentid>
    <comment_count>9</comment_count>
    <who name="Chang Shu">cshu</who>
    <bug_when>2011-08-15 07:07:54 -0700</bug_when>
    <thetext>&gt; &gt; Source/WebCore/testing/Internals.cpp:207
&gt; &gt; +    if (!document || !document-&gt;settings()) {
&gt; &gt; +        ec = INVALID_ACCESS_ERR;
&gt; &gt; +        return;
&gt; &gt; +    }
&gt; 
&gt; I don&apos;t think that there is a point in making these checks and raising an exception. But that seems to match common pattern in this file.

Yeah, it seems all functions do this. It&apos;s a bit over-engineered but it&apos;s probably good to keep the pattern.

&gt; &gt; +        void setPasswordEchoDuration(in Document document, in double durationInSeconds) raises(DOMException);
&gt; 
&gt; What&apos;s the reason to pass in a document? Can&apos;t we just get a page pointer from the window object this Internals instance lives on?

I don&apos;t see the current implementation passes window object to Internals. So from Internals, no way we can figure out which page it belongs to. Again, it seems all functions are doing this.

WRT the resetting issue we discussed on IRC, I think it&apos;s better to let Internals automatically backs up values during the 1st set call than resetting the values to a hardcoded defaults in the reset function. The original value could be set by WebCore, WebKit, or even application (DRT). What do you think?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>451081</commentid>
    <comment_count>10</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2011-08-15 08:55:25 -0700</bug_when>
    <thetext>JSInternals inherits from JSObjectWithGlobalObject, so it has a pointer to window.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>451148</commentid>
    <comment_count>11</comment_count>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2011-08-15 11:03:43 -0700</bug_when>
    <thetext>&gt; WRT the resetting issue we discussed on IRC, I think it&apos;s better to let Internals automatically backs up values during the 1st set call than resetting the values to a hardcoded defaults in the reset function. The original value could be set by WebCore, WebKit, or even application (DRT). What do you think?

Sounds good.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>452565</commentid>
    <comment_count>12</comment_count>
      <attachid>104240</attachid>
    <who name="Chang Shu">cshu</who>
    <bug_when>2011-08-17 14:16:25 -0700</bug_when>
    <thetext>Created attachment 104240
patch 3</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>452600</commentid>
    <comment_count>13</comment_count>
      <attachid>104240</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2011-08-17 14:38:28 -0700</bug_when>
    <thetext>Comment on attachment 104240
patch 3

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

&gt; LayoutTests/platform/wk2/Skipped:1854
&gt; +# WebKitTestRunner needs layoutTestController.setPasswordEchoEnabled
&gt; +# WebKitTestRunner needs layoutTestController.setPasswordEchoDuration

s/layoutTestController/internals/, and I don&apos;t understand why it doesn&apos;t just work.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>452693</commentid>
    <comment_count>14</comment_count>
    <who name="Chang Shu">cshu</who>
    <bug_when>2011-08-17 16:22:08 -0700</bug_when>
    <thetext>&gt; &gt; LayoutTests/platform/wk2/Skipped:1854
&gt; &gt; +# WebKitTestRunner needs layoutTestController.setPasswordEchoEnabled
&gt; &gt; +# WebKitTestRunner needs layoutTestController.setPasswordEchoDuration
&gt; 
&gt; s/layoutTestController/internals/, and I don&apos;t understand why it doesn&apos;t just work.

The reset support hasn&apos;t been implemented yet. I will take care of wk2 later.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>452929</commentid>
    <comment_count>15</comment_count>
      <attachid>104240</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-08-18 03:20:03 -0700</bug_when>
    <thetext>Comment on attachment 104240
patch 3

Clearing flags on attachment: 104240

Committed r93291: &lt;http://trac.webkit.org/changeset/93291&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>452930</commentid>
    <comment_count>16</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-08-18 03:20:09 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>453022</commentid>
    <comment_count>17</comment_count>
    <who name="Chang Shu">cshu</who>
    <bug_when>2011-08-18 07:17:52 -0700</bug_when>
    <thetext>A note for people have cherry-picked the previous passwordecho patch:
The feature is now under a build flag on Qt. It is no longer tied automatically with composite input mode.
On other platforms, the feature is always disabled since no code is implemented in WebKit.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>103621</attachid>
            <date>2011-08-11 07:45:24 -0700</date>
            <delta_ts>2011-08-12 07:23:23 -0700</delta_ts>
            <desc>fix patch</desc>
            <filename>66052_1.patch</filename>
            <type>text/plain</type>
            <size>27449</size>
            <attacher name="Chang Shu">cshu</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDkyODQ1KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjIgQEAKKzIwMTEtMDgtMTEgIENoYW5nIFNo
dSAgPGNzaHVAd2Via2l0Lm9yZz4KKworICAgICAgICBBZGQgc3VwcG9ydCBvZiBzZXRQYXNzd29y
ZEVjaG9FbmFibGVkIGFuZCBzZXRQYXNzd29yZEVjaG9EdXJhdGlvbiBmb3IgcGFzc3dvcmQgZWNo
byBmZWF0dXJlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD02NjA1MgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IEFkZGVkIHN1cHBvcnQgaW4gV2ViQ29yZS4KKworICAgICAgICBUZXN0OiBlZGl0aW5nL2lucHV0
L3Bhc3N3b3JkLWVjaG8tc2V0dGluZ3MuaHRtbAorCisgICAgICAgICogcGFnZS9TZXR0aW5ncy5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpTZXR0aW5nczo6U2V0dGluZ3MpOgorICAgICAgICAqIHBh
Z2UvU2V0dGluZ3MuaDoKKyAgICAgICAgKFdlYkNvcmU6OlNldHRpbmdzOjpzZXRQYXNzd29yZEVj
aG9FbmFibGVkKToKKyAgICAgICAgKFdlYkNvcmU6OlNldHRpbmdzOjppc1Bhc3N3b3JkRWNob0Vu
YWJsZWQpOgorICAgICAgICAoV2ViQ29yZTo6U2V0dGluZ3M6OnNldFBhc3N3b3JkRWNob0R1cmF0
aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlNldHRpbmdzOjpwYXNzd29yZEVjaG9EdXJhdGlvbik6
CisKIDIwMTEtMDgtMTEgIFl1dGEgS2l0YW11cmEgIDx5dXRha0BjaHJvbWl1bS5vcmc+CiAKICAg
ICAgICAgV2ViU29ja2V0OiBVc2UgUGFzc1JlZlB0cjw+IGluIGZ1bmN0aW9uIGFyZ3VtZW50cyBp
biBXb3JrZXJUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbC5jcHAKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BhZ2UvU2V0dGluZ3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2Uv
U2V0dGluZ3MuY3BwCShyZXZpc2lvbiA5Mjc2OCkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvU2V0
dGluZ3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDgsNiArMTA4LDcgQEAgU2V0dGluZ3M6OlNl
dHRpbmdzKFBhZ2UqIHBhZ2UpCiAgICAgOiBtX3BhZ2UocGFnZSkKICAgICAsIG1fZWRpdGFibGVM
aW5rQmVoYXZpb3IoRWRpdGFibGVMaW5rRGVmYXVsdEJlaGF2aW9yKQogICAgICwgbV90ZXh0RGly
ZWN0aW9uU3VibWVudUluY2x1c2lvbkJlaGF2aW9yKFRleHREaXJlY3Rpb25TdWJtZW51QXV0b21h
dGljYWxseUluY2x1ZGVkKQorICAgICwgbV9wYXNzd29yZEVjaG9EdXJhdGlvbigxLjApCiAgICAg
LCBtX21pbmltdW1Gb250U2l6ZSgwKQogICAgICwgbV9taW5pbXVtTG9naWNhbEZvbnRTaXplKDAp
CiAgICAgLCBtX2RlZmF1bHRGb250U2l6ZSgwKQpAQCAtMjA5LDYgKzIxMCw3IEBAIFNldHRpbmdz
OjpTZXR0aW5ncyhQYWdlKiBwYWdlKQogI2VuZGlmCiAgICAgLCBtX21lZGlhUGxheWJhY2tSZXF1
aXJlc1VzZXJHZXN0dXJlKGZhbHNlKQogICAgICwgbV9tZWRpYVBsYXliYWNrQWxsb3dzSW5saW5l
KHRydWUpCisgICAgLCBtX2lzUGFzc3dvcmRFY2hvRW5hYmxlZChmYWxzZSkKICAgICAsIG1fbG9h
ZHNJbWFnZXNBdXRvbWF0aWNhbGx5VGltZXIodGhpcywgJlNldHRpbmdzOjpsb2Fkc0ltYWdlc0F1
dG9tYXRpY2FsbHlUaW1lckZpcmVkKQogewogICAgIC8vIEEgRnJhbWUgbWF5IG5vdCBoYXZlIGJl
ZW4gY3JlYXRlZCB5ZXQsIHNvIHdlIGluaXRpYWxpemUgdGhlIEF0b21pY1N0cmluZyAKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BhZ2UvU2V0dGluZ3MuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9wYWdlL1NldHRpbmdzLmgJKHJldmlzaW9uIDkyNzY4KQorKysgU291cmNlL1dlYkNvcmUv
cGFnZS9TZXR0aW5ncy5oCSh3b3JraW5nIGNvcHkpCkBAIC00NDksNiArNDQ5LDEyIEBAIG5hbWVz
cGFjZSBXZWJDb3JlIHsKICAgICAgICAgdm9pZCBzZXRNZWRpYVBsYXliYWNrQWxsb3dzSW5saW5l
KGJvb2wgZmxhZykgeyBtX21lZGlhUGxheWJhY2tBbGxvd3NJbmxpbmUgPSBmbGFnOyB9OwogICAg
ICAgICBib29sIG1lZGlhUGxheWJhY2tBbGxvd3NJbmxpbmUoKSBjb25zdCB7IHJldHVybiBtX21l
ZGlhUGxheWJhY2tBbGxvd3NJbmxpbmU7IH0KIAorICAgICAgICB2b2lkIHNldFBhc3N3b3JkRWNo
b0VuYWJsZWQoYm9vbCBmbGFnKSB7IG1faXNQYXNzd29yZEVjaG9FbmFibGVkID0gZmxhZzsgfTsK
KyAgICAgICAgYm9vbCBpc1Bhc3N3b3JkRWNob0VuYWJsZWQoKSBjb25zdCB7IHJldHVybiBtX2lz
UGFzc3dvcmRFY2hvRW5hYmxlZDsgfQorCisgICAgICAgIHZvaWQgc2V0UGFzc3dvcmRFY2hvRHVy
YXRpb24oZG91YmxlIGR1cmF0aW9uKSB7IG1fcGFzc3dvcmRFY2hvRHVyYXRpb24gPSBkdXJhdGlv
bjsgfTsKKyAgICAgICAgZG91YmxlIHBhc3N3b3JkRWNob0R1cmF0aW9uKCkgY29uc3QgeyByZXR1
cm4gbV9wYXNzd29yZEVjaG9EdXJhdGlvbjsgfQorCiAgICAgcHJpdmF0ZToKICAgICAgICAgUGFn
ZSogbV9wYWdlOwogCkBAIC00NjUsNiArNDcxLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAg
ICAgICBTY3JpcHRGb250RmFtaWx5TWFwIG1fcGljdG9ncmFwaEZvbnRGYW1pbHlNYXA7CiAgICAg
ICAgIEVkaXRhYmxlTGlua0JlaGF2aW9yIG1fZWRpdGFibGVMaW5rQmVoYXZpb3I7CiAgICAgICAg
IFRleHREaXJlY3Rpb25TdWJtZW51SW5jbHVzaW9uQmVoYXZpb3IgbV90ZXh0RGlyZWN0aW9uU3Vi
bWVudUluY2x1c2lvbkJlaGF2aW9yOworICAgICAgICBkb3VibGUgbV9wYXNzd29yZEVjaG9EdXJh
dGlvbjsKICAgICAgICAgaW50IG1fbWluaW11bUZvbnRTaXplOwogICAgICAgICBpbnQgbV9taW5p
bXVtTG9naWNhbEZvbnRTaXplOwogICAgICAgICBpbnQgbV9kZWZhdWx0Rm9udFNpemU7CkBAIC01
NjQsNiArNTcxLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogI2VuZGlmCiAgICAgICAgIGJvb2wg
bV9tZWRpYVBsYXliYWNrUmVxdWlyZXNVc2VyR2VzdHVyZSA6IDE7CiAgICAgICAgIGJvb2wgbV9t
ZWRpYVBsYXliYWNrQWxsb3dzSW5saW5lIDogMTsKKyAgICAgICAgYm9vbCBtX2lzUGFzc3dvcmRF
Y2hvRW5hYmxlZCA6IDE7CiAKICAgICAgICAgVGltZXI8U2V0dGluZ3M+IG1fbG9hZHNJbWFnZXNB
dXRvbWF0aWNhbGx5VGltZXI7CiAgICAgICAgIHZvaWQgbG9hZHNJbWFnZXNBdXRvbWF0aWNhbGx5
VGltZXJGaXJlZChUaW1lcjxTZXR0aW5ncz4qKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvbWFjL0No
YW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L21hYy9DaGFuZ2VMb2cJKHJldmlz
aW9uIDkyODQ1KQorKysgU291cmNlL1dlYktpdC9tYWMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDMgKzEsMjEgQEAKKzIwMTEtMDgtMTEgIENoYW5nIFNodSAgPGNzaHVAd2Via2l0Lm9y
Zz4KKworICAgICAgICBBZGQgc3VwcG9ydCBvZiBzZXRQYXNzd29yZEVjaG9FbmFibGVkIGFuZCBz
ZXRQYXNzd29yZEVjaG9EdXJhdGlvbiBmb3IgcGFzc3dvcmQgZWNobyBmZWF0dXJlCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02NjA1MgorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogV2ViVmlldy9XZWJQcmVm
ZXJlbmNlS2V5c1ByaXZhdGUuaDoKKyAgICAgICAgKiBXZWJWaWV3L1dlYlByZWZlcmVuY2VzLm1t
OgorICAgICAgICAoK1tXZWJQcmVmZXJlbmNlcyBpbml0aWFsaXplXSk6CisgICAgICAgICgtW1dl
YlByZWZlcmVuY2VzIGlzUGFzc3dvcmRFY2hvRW5hYmxlZF0pOgorICAgICAgICAoLVtXZWJQcmVm
ZXJlbmNlcyBzZXRQYXNzd29yZEVjaG9FbmFibGVkOl0pOgorICAgICAgICAoLVtXZWJQcmVmZXJl
bmNlcyBwYXNzd29yZEVjaG9EdXJhdGlvbl0pOgorICAgICAgICAoLVtXZWJQcmVmZXJlbmNlcyBz
ZXRQYXNzd29yZEVjaG9EdXJhdGlvbjpdKToKKyAgICAgICAgKiBXZWJWaWV3L1dlYlByZWZlcmVu
Y2VzUHJpdmF0ZS5oOgorICAgICAgICAqIFdlYlZpZXcvV2ViVmlldy5tbToKKyAgICAgICAgKC1b
V2ViVmlldyBfcHJlZmVyZW5jZXNDaGFuZ2VkOl0pOgorCiAyMDExLTA4LTEwICBEYXZpZCBIeWF0
dCAgPGh5YXR0QGFwcGxlLmNvbT4KIAogICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9NjYwMDQKSW5kZXg6IFNvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2Vi
UHJlZmVyZW5jZUtleXNQcml2YXRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9tYWMv
V2ViVmlldy9XZWJQcmVmZXJlbmNlS2V5c1ByaXZhdGUuaAkocmV2aXNpb24gOTI3NjgpCisrKyBT
b3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYlByZWZlcmVuY2VLZXlzUHJpdmF0ZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMTAsNiArMTEwLDggQEAKICNkZWZpbmUgV2ViS2l0SGl4aWU3NldlYlNv
Y2tldFByb3RvY29sRW5hYmxlZEtleSBAIldlYktpdEhpeGllNzZXZWJTb2NrZXRQcm90b2NvbEVu
YWJsZWQiCiAjZGVmaW5lIFdlYktpdE1lZGlhUGxheWJhY2tSZXF1aXJlc1VzZXJHZXN0dXJlUHJl
ZmVyZW5jZUtleSBAIldlYktpdE1lZGlhUGxheWJhY2tSZXF1aXJlc1VzZXJHZXN0dXJlIgogI2Rl
ZmluZSBXZWJLaXRNZWRpYVBsYXliYWNrQWxsb3dzSW5saW5lUHJlZmVyZW5jZUtleSBAIldlYktp
dE1lZGlhUGxheWJhY2tBbGxvd3NJbmxpbmUiCisjZGVmaW5lIFdlYktpdFBhc3N3b3JkRWNob0Vu
YWJsZWRQcmVmZXJlbmNlS2V5IEAiV2ViS2l0UGFzc3dvcmRFY2hvRW5hYmxlZCIKKyNkZWZpbmUg
V2ViS2l0UGFzc3dvcmRFY2hvRHVyYXRpb25QcmVmZXJlbmNlS2V5IEAiV2ViS2l0UGFzc3dvcmRF
Y2hvRHVyYXRpb24iCiAKIC8vIFRoZXNlIGFyZSBwcml2YXRlIGJvdGggYmVjYXVzZSBjYWxsZXJz
IHNob3VsZCBiZSB1c2luZyB0aGUgY292ZXIgbWV0aG9kcyBhbmQgYmVjYXVzZSB0aGUKIC8vIGNv
dmVyIG1ldGhvZHMgdGhlbXNlbHZlcyBhcmUgcHJpdmF0ZS4KSW5kZXg6IFNvdXJjZS9XZWJLaXQv
bWFjL1dlYlZpZXcvV2ViUHJlZmVyZW5jZXMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktp
dC9tYWMvV2ViVmlldy9XZWJQcmVmZXJlbmNlcy5tbQkocmV2aXNpb24gOTI3NjgpCisrKyBTb3Vy
Y2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYlByZWZlcmVuY2VzLm1tCSh3b3JraW5nIGNvcHkpCkBA
IC0zNzksNiArMzc5LDggQEAgKyAodm9pZClpbml0aWFsaXplCiAgICAgICAgIFtOU051bWJlciBu
dW1iZXJXaXRoQm9vbDpZRVNdLCAgV2ViS2l0SGl4aWU3NldlYlNvY2tldFByb3RvY29sRW5hYmxl
ZEtleSwKICAgICAgICAgW05TTnVtYmVyIG51bWJlcldpdGhCb29sOk5PXSwgICBXZWJLaXRNZWRp
YVBsYXliYWNrUmVxdWlyZXNVc2VyR2VzdHVyZVByZWZlcmVuY2VLZXksCiAgICAgICAgIFtOU051
bWJlciBudW1iZXJXaXRoQm9vbDpZRVNdLCAgV2ViS2l0TWVkaWFQbGF5YmFja0FsbG93c0lubGlu
ZVByZWZlcmVuY2VLZXksCisgICAgICAgIFtOU051bWJlciBudW1iZXJXaXRoQm9vbDpOT10sICAg
V2ViS2l0UGFzc3dvcmRFY2hvRW5hYmxlZFByZWZlcmVuY2VLZXksCisgICAgICAgIFtOU051bWJl
ciBudW1iZXJXaXRoRG91YmxlOjIuMF0sICAgV2ViS2l0UGFzc3dvcmRFY2hvRHVyYXRpb25QcmVm
ZXJlbmNlS2V5LAogCiAgICAgICAgIFtOU051bWJlciBudW1iZXJXaXRoTG9uZ0xvbmc6V2ViQ29y
ZTo6QXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6Om5vUXVvdGEoKV0sIFdlYktpdEFwcGxpY2F0aW9u
Q2FjaGVUb3RhbFF1b3RhLAogICAgICAgICBbTlNOdW1iZXIgbnVtYmVyV2l0aExvbmdMb25nOldl
YkNvcmU6OkFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjpub1F1b3RhKCldLCBXZWJLaXRBcHBsaWNh
dGlvbkNhY2hlRGVmYXVsdE9yaWdpblF1b3RhLApAQCAtMTUwNyw2ICsxNTA5LDI2IEBAIC0gKHZv
aWQpc2V0UGljdG9ncmFwaEZvbnRGYW1pbHk6KE5TU3RyaW4KICAgICBbc2VsZiBfc2V0U3RyaW5n
VmFsdWU6IGZhbWlseSBmb3JLZXk6IFdlYktpdFBpY3RvZ3JhcGhGb250UHJlZmVyZW5jZUtleV07
CiB9CiAKKy0gKEJPT0wpaXNQYXNzd29yZEVjaG9FbmFibGVkCit7CisgICAgcmV0dXJuIFtzZWxm
IF9ib29sVmFsdWVGb3JLZXk6V2ViS2l0UGFzc3dvcmRFY2hvRW5hYmxlZFByZWZlcmVuY2VLZXld
OworfQorCistICh2b2lkKXNldFBhc3N3b3JkRWNob0VuYWJsZWQ6KEJPT0wpZmxhZworeworICAg
IFtzZWxmIF9zZXRCb29sVmFsdWU6ZmxhZyBmb3JLZXk6V2ViS2l0UGFzc3dvcmRFY2hvRW5hYmxl
ZFByZWZlcmVuY2VLZXldOworfQorCistIChkb3VibGUpcGFzc3dvcmRFY2hvRHVyYXRpb24KK3sK
KyAgICByZXR1cm4gW3NlbGYgX2Zsb2F0VmFsdWVGb3JLZXk6V2ViS2l0UGFzc3dvcmRFY2hvRHVy
YXRpb25QcmVmZXJlbmNlS2V5XTsKK30KKworLSAodm9pZClzZXRQYXNzd29yZEVjaG9EdXJhdGlv
bjooZG91YmxlKWR1cmF0aW9uCit7CisgICAgW3NlbGYgX3NldEZsb2F0VmFsdWU6ZHVyYXRpb24g
Zm9yS2V5OldlYktpdFBhc3N3b3JkRWNob0R1cmF0aW9uUHJlZmVyZW5jZUtleV07Cit9CisKIEBl
bmQKIAogQGltcGxlbWVudGF0aW9uIFdlYlByZWZlcmVuY2VzIChXZWJJbnRlcm5hbCkKSW5kZXg6
IFNvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViUHJlZmVyZW5jZXNQcml2YXRlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJQcmVmZXJlbmNlc1ByaXZhdGUu
aAkocmV2aXNpb24gOTI3NjgpCisrKyBTb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYlByZWZl
cmVuY2VzUHJpdmF0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMTYsNiArMjE2LDEyIEBAIEBpbnRl
cmZhY2UgV2ViUHJlZmVyZW5jZXMgKFdlYlByaXZhdGUpCiAtIChOU1N0cmluZyAqKXBpY3RvZ3Jh
cGhGb250RmFtaWx5OwogLSAodm9pZClzZXRQaWN0b2dyYXBoRm9udEZhbWlseTooTlNTdHJpbmcg
KilmYW1pbHk7CiAKKy0gKEJPT0wpaXNQYXNzd29yZEVjaG9FbmFibGVkOworLSAodm9pZClzZXRQ
YXNzd29yZEVjaG9FbmFibGVkOihCT09MKWZsYWc7CisKKy0gKGRvdWJsZSlwYXNzd29yZEVjaG9E
dXJhdGlvbjsKKy0gKHZvaWQpc2V0UGFzc3dvcmRFY2hvRHVyYXRpb246KGRvdWJsZSlkdXJhdGlv
bjsKKwogLy8gT3RoZXIgcHJpdmF0ZSBtZXRob2RzCiAtICh2b2lkKV9wb3N0UHJlZmVyZW5jZXND
aGFuZ2VkTm90aWZpY2F0aW9uOwogLSAodm9pZClfcG9zdFByZWZlcmVuY2VzQ2hhbmdlZEFQSU5v
dGlmaWNhdGlvbjsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViVmlldy5tbQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYlZpZXcubW0JKHJldmlz
aW9uIDkyNzY4KQorKysgU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJWaWV3Lm1tCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xNTkzLDYgKzE1OTMsOCBAQCAtICh2b2lkKV9wcmVmZXJlbmNlc0NoYW5n
ZWQ6KFdlYlByZWZlcmVuCiAjZW5kaWYKICAgICBzZXR0aW5ncy0+c2V0TWVkaWFQbGF5YmFja1Jl
cXVpcmVzVXNlckdlc3R1cmUoW3ByZWZlcmVuY2VzIG1lZGlhUGxheWJhY2tSZXF1aXJlc1VzZXJH
ZXN0dXJlXSk7CiAgICAgc2V0dGluZ3MtPnNldE1lZGlhUGxheWJhY2tBbGxvd3NJbmxpbmUoW3By
ZWZlcmVuY2VzIG1lZGlhUGxheWJhY2tBbGxvd3NJbmxpbmVdKTsKKyAgICBzZXR0aW5ncy0+c2V0
UGFzc3dvcmRFY2hvRW5hYmxlZChbcHJlZmVyZW5jZXMgaXNQYXNzd29yZEVjaG9FbmFibGVkXSk7
CisgICAgc2V0dGluZ3MtPnNldFBhc3N3b3JkRWNob0R1cmF0aW9uKFtwcmVmZXJlbmNlcyBwYXNz
d29yZEVjaG9EdXJhdGlvbl0pOwogCiAgICAgLy8gQXBwbGljYXRpb24gQ2FjaGUgUHJlZmVyZW5j
ZXMgYXJlIHN0b3JlZCBvbiB0aGUgZ2xvYmFsIGNhY2hlIHN0b3JhZ2UgbWFuYWdlciwgbm90IGlu
IFNldHRpbmdzLgogICAgIFtXZWJBcHBsaWNhdGlvbkNhY2hlIHNldERlZmF1bHRPcmlnaW5RdW90
YTpbcHJlZmVyZW5jZXMgYXBwbGljYXRpb25DYWNoZURlZmF1bHRPcmlnaW5RdW90YV1dOwpJbmRl
eDogU291cmNlL1dlYktpdC9xdC9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktp
dC9xdC9DaGFuZ2VMb2cJKHJldmlzaW9uIDkyODQ1KQorKysgU291cmNlL1dlYktpdC9xdC9DaGFu
Z2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNiBAQAorMjAxMS0wOC0xMSAgQ2hhbmcg
U2h1ICA8Y3NodUB3ZWJraXQub3JnPgorCisgICAgICAgIEFkZCBzdXBwb3J0IG9mIHNldFBhc3N3
b3JkRWNob0VuYWJsZWQgYW5kIHNldFBhc3N3b3JkRWNob0R1cmF0aW9uIGZvciBwYXNzd29yZCBl
Y2hvIGZlYXR1cmUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTY2MDUyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgKiBBcGkvcXdlYnNldHRpbmdzLmNwcDoKKyAgICAgICAgKFFXZWJTZXR0aW5nc1ByaXZhdGU6
OmFwcGx5KToKKyAgICAgICAgKFFXZWJTZXR0aW5nczo6UVdlYlNldHRpbmdzKToKKyAgICAgICAg
KFFXZWJTZXR0aW5nczo6c2V0UGFzc3dvcmRFY2hvRHVyYXRpb24pOgorICAgICAgICAqIEFwaS9x
d2Vic2V0dGluZ3MuaDoKKwogMjAxMS0wOC0wOSAgU2hlcmlmZiBCb3QgIDx3ZWJraXQucmV2aWV3
LmJvdEBnbWFpbC5jb20+CiAKICAgICAgICAgVW5yZXZpZXdlZCwgcm9sbGluZyBvdXQgcjkyNjgz
LgpJbmRleDogU291cmNlL1dlYktpdC9xdC9BcGkvcXdlYnNldHRpbmdzLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViS2l0L3F0L0FwaS9xd2Vic2V0dGluZ3MuY3BwCShyZXZpc2lvbiA5Mjc2
OCkKKysrIFNvdXJjZS9XZWJLaXQvcXQvQXBpL3F3ZWJzZXR0aW5ncy5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTgwLDYgKzgwLDggQEAgcHVibGljOgogI2lmIFFUX1ZFUlNJT04gPj0gUVRfVkVSU0lP
Tl9DSEVDSyg0LCA4LCAwKQogICAgIFFXZWJTZXR0aW5nczo6VGhpcmRQYXJ0eUNvb2tpZVBvbGlj
eSB0aGlyZFBhcnR5Q29va2llUG9saWN5OwogI2VuZGlmCisgICAgZG91YmxlIHBhc3N3b3JkRWNo
b0R1cmF0aW9uOworCiAgICAgdm9pZCBhcHBseSgpOwogICAgIFdlYkNvcmU6OlNldHRpbmdzKiBz
ZXR0aW5nczsKIH07CkBAIC0yODQsNiArMjg2LDEyIEBAIHZvaWQgUVdlYlNldHRpbmdzUHJpdmF0
ZTo6YXBwbHkoKQogICAgICAgICBzZXR0aW5ncy0+c2V0TmVlZHNTaXRlU3BlY2lmaWNRdWlya3Mo
dmFsdWUpOwogCiAgICAgICAgIHNldHRpbmdzLT5zZXRVc2VzUGFnZUNhY2hlKFdlYkNvcmU6OnBh
Z2VDYWNoZSgpLT5jYXBhY2l0eSgpKTsKKworICAgICAgICB2YWx1ZSA9IGF0dHJpYnV0ZXMudmFs
dWUoUVdlYlNldHRpbmdzOjpQYXNzd29yZEVjaG9FbmFibGVkLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBnbG9iYWwtPmF0dHJpYnV0ZXMudmFsdWUoUVdlYlNldHRpbmdz
OjpQYXNzd29yZEVjaG9FbmFibGVkKSk7CisgICAgICAgIHNldHRpbmdzLT5zZXRQYXNzd29yZEVj
aG9FbmFibGVkKHZhbHVlKTsKKworICAgICAgICBzZXR0aW5ncy0+c2V0UGFzc3dvcmRFY2hvRHVy
YXRpb24ocGFzc3dvcmRFY2hvRHVyYXRpb24pOwogICAgIH0gZWxzZSB7CiAgICAgICAgIFFMaXN0
PFFXZWJTZXR0aW5nc1ByaXZhdGUqPiBzZXR0aW5ncyA9ICo6OmFsbFNldHRpbmdzKCk7CiAgICAg
ICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc2V0dGluZ3MuY291bnQoKTsgKytpKQpAQCAtNDg5LDYg
KzQ5Nyw4IEBAIFFXZWJTZXR0aW5ncyogUVdlYlNldHRpbmdzOjpnbG9iYWxTZXR0aW4KICAgICAg
ICAgVGhpcyBpcyBkaXNhYmxlZCBieSBkZWZhdWx0LgogICAgIFx2YWx1ZSBTaXRlU3BlY2lmaWNR
dWlya3NFbmFibGVkIFRoaXMgc2V0dGluZyBlbmFibGVzIFdlYktpdCdzIHdvcmthcm91bmQgZm9y
IGJyb2tlbiBzaXRlcy4gSXQgaXMKICAgICAgICAgZW5hYmxlZCBieSBkZWZhdWx0LgorICAgIFx2
YWx1ZSBQYXNzd29yZEVjaG9FbmFibGVkIEVuYWJsZXMgb3IgZGlzYWJsZXMgdGhlIGNoYXJhY3Rl
ciBlY2hvIGZvciBwYXNzd29yZCBpbnB1dC4KKyAgICAgICAgVGhpcyBpcyBkaXNhYmxlZCBieSBk
ZWZhdWx0LgogKi8KIAogLyohCkBAIC01MzgsMTEgKzU0OCwxMyBAQCBRV2ViU2V0dGluZ3M6OlFX
ZWJTZXR0aW5ncygpCiAgICAgZC0+YXR0cmlidXRlcy5pbnNlcnQoUVdlYlNldHRpbmdzOjpUaWxl
ZEJhY2tpbmdTdG9yZUVuYWJsZWQsIGZhbHNlKTsKICAgICBkLT5hdHRyaWJ1dGVzLmluc2VydChR
V2ViU2V0dGluZ3M6OkZyYW1lRmxhdHRlbmluZ0VuYWJsZWQsIGZhbHNlKTsKICAgICBkLT5hdHRy
aWJ1dGVzLmluc2VydChRV2ViU2V0dGluZ3M6OlNpdGVTcGVjaWZpY1F1aXJrc0VuYWJsZWQsIHRy
dWUpOworICAgIGQtPmF0dHJpYnV0ZXMuaW5zZXJ0KFFXZWJTZXR0aW5nczo6UGFzc3dvcmRFY2hv
RW5hYmxlZCwgZmFsc2UpOwogICAgIGQtPm9mZmxpbmVTdG9yYWdlRGVmYXVsdFF1b3RhID0gNSAq
IDEwMjQgKiAxMDI0OwogICAgIGQtPmRlZmF1bHRUZXh0RW5jb2RpbmcgPSBRTGF0aW4xU3RyaW5n
KCJpc28tODg1OS0xIik7CiAjaWYgUVRfVkVSU0lPTiA+PSBRVF9WRVJTSU9OX0NIRUNLKDQsIDgs
IDApCiAgICAgZC0+dGhpcmRQYXJ0eUNvb2tpZVBvbGljeSA9IEFsd2F5c0FsbG93VGhpcmRQYXJ0
eUNvb2tpZXM7CiAjZW5kaWYKKyAgICBkLT5wYXNzd29yZEVjaG9EdXJhdGlvbiA9IDEuMDsKIH0K
IAogLyohCkBAIC0xMTczLDYgKzExODUsMjAgQEAgdm9pZCBRV2ViU2V0dGluZ3M6OmVuYWJsZVBl
cnNpc3RlbnRTdG9yYQogfQogCiAvKiEKKyAgICBcc2luY2UgNC44CisKKyAgICBDb250cm9scyB0
aGUgZHVyYXRpb24gb2YgdGhlIGNoYXJhY3RlciBlY2hvIGZvciBwYXNzd29yZCBpbnB1dC4KKyAg
ICBUaGUgZGVmYXVsdCB2YWx1ZSBpcyAyLjAgc2Vjb25kcy4KKworICAgIFxzYSBzZXRQYXNzd29y
ZEVjaG9FbmFibGVkKCkKKyovCit2b2lkIFFXZWJTZXR0aW5nczo6c2V0UGFzc3dvcmRFY2hvRHVy
YXRpb24oZG91YmxlIGR1cmF0aW9uKQoreworICAgIGQtPnBhc3N3b3JkRWNob0R1cmF0aW9uID0g
ZHVyYXRpb247CisgICAgZC0+YXBwbHkoKTsKK30KKworLyohCiAgICAgXGZuIFFXZWJTZXR0aW5n
c1ByaXZhdGUqIFFXZWJTZXR0aW5nczo6aGFuZGxlKCkgY29uc3QKICAgICBcaW50ZXJuYWwKICov
CkluZGV4OiBTb3VyY2UvV2ViS2l0L3F0L0FwaS9xd2Vic2V0dGluZ3MuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViS2l0L3F0L0FwaS9xd2Vic2V0dGluZ3MuaAkocmV2aXNpb24gOTI3NjgpCisr
KyBTb3VyY2UvV2ViS2l0L3F0L0FwaS9xd2Vic2V0dGluZ3MuaAkod29ya2luZyBjb3B5KQpAQCAt
NzcsNyArNzcsOCBAQCBwdWJsaWM6CiAgICAgICAgIFNpdGVTcGVjaWZpY1F1aXJrc0VuYWJsZWQs
CiAgICAgICAgIEphdmFzY3JpcHRDYW5DbG9zZVdpbmRvd3MsCiAgICAgICAgIFdlYkdMRW5hYmxl
ZCwKLSAgICAgICAgSHlwZXJsaW5rQXVkaXRpbmdFbmFibGVkCisgICAgICAgIEh5cGVybGlua0F1
ZGl0aW5nRW5hYmxlZCwKKyAgICAgICAgUGFzc3dvcmRFY2hvRW5hYmxlZAogICAgIH07CiAgICAg
ZW51bSBXZWJHcmFwaGljIHsKICAgICAgICAgTWlzc2luZ0ltYWdlR3JhcGhpYywKQEAgLTE1OSw2
ICsxNjAsOCBAQCBwdWJsaWM6CiAgICAgUVdlYlNldHRpbmdzOjpUaGlyZFBhcnR5Q29va2llUG9s
aWN5IHRoaXJkUGFydHlDb29raWVQb2xpY3koKSBjb25zdDsKICNlbmRpZgogCisgICAgdm9pZCBz
ZXRQYXNzd29yZEVjaG9EdXJhdGlvbihkb3VibGUpOworCiAgICAgaW5saW5lIFFXZWJTZXR0aW5n
c1ByaXZhdGUqIGhhbmRsZSgpIGNvbnN0IHsgcmV0dXJuIGQ7IH0KIAogcHJpdmF0ZToKSW5kZXg6
IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJldmlzaW9u
IDkyODQ1KQorKysgVG9vbHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzYg
QEAKKzIwMTEtMDgtMTEgIENoYW5nIFNodSAgPGNzaHVAd2Via2l0Lm9yZz4KKworICAgICAgICBB
ZGQgc3VwcG9ydCBvZiBzZXRQYXNzd29yZEVjaG9FbmFibGVkIGFuZCBzZXRQYXNzd29yZEVjaG9E
dXJhdGlvbiBmb3IgcGFzc3dvcmQgZWNobyBmZWF0dXJlCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02NjA1MgorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZGVkIHN1cHBvcnQgb2YgTGF5b3V0VGVzdENvbnRy
b2xsZXIuc2V0UGFzc3dvcmRFY2hvRW5hYmxlZCBhbmQKKyAgICAgICAgTGF5b3V0VGVzdENvbnRy
b2xsZXIuc2V0UGFzc3dvcmRFY2hvRHVyYXRpb24gZm9yIG1hYyBhbmQgcXQgcGxhdGZvcm0uCisg
ICAgICAgIEFsc28gYWRkZWQgUXRUZXN0QnJvd3NlciBVSSB0byB0b2dnbGUgUGFzc3dvcmRFY2hv
RW5hYmxlZC4KKworICAgICAgICAqIER1bXBSZW5kZXJUcmVlL0xheW91dFRlc3RDb250cm9sbGVy
LmNwcDoKKyAgICAgICAgKHNldFBhc3N3b3JkRWNob0VuYWJsZWRDYWxsYmFjayk6CisgICAgICAg
IChzZXRQYXNzd29yZEVjaG9EdXJhdGlvbkNhbGxiYWNrKToKKyAgICAgICAgKExheW91dFRlc3RD
b250cm9sbGVyOjpzdGF0aWNGdW5jdGlvbnMpOgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL0xh
eW91dFRlc3RDb250cm9sbGVyLmg6CisgICAgICAgICogRHVtcFJlbmRlclRyZWUvbWFjL0R1bXBS
ZW5kZXJUcmVlLm1tOgorICAgICAgICAocmVzZXREZWZhdWx0c1RvQ29uc2lzdGVudFZhbHVlcyk6
CisgICAgICAgICogRHVtcFJlbmRlclRyZWUvbWFjL0xheW91dFRlc3RDb250cm9sbGVyTWFjLm1t
OgorICAgICAgICAoTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFBhc3N3b3JkRWNob0VuYWJsZWQp
OgorICAgICAgICAoTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFBhc3N3b3JkRWNob0R1cmF0aW9u
KToKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9xdC9EdW1wUmVuZGVyVHJlZVF0LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OldlYlBhZ2U6OldlYlBhZ2UpOgorICAgICAgICAoV2ViQ29yZTo6V2Vi
UGFnZTo6cmVzZXRTZXR0aW5ncyk6CisgICAgICAgICogRHVtcFJlbmRlclRyZWUvcXQvTGF5b3V0
VGVzdENvbnRyb2xsZXJRdC5jcHA6CisgICAgICAgIChMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0
UGFzc3dvcmRFY2hvRW5hYmxlZCk6CisgICAgICAgIChMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0
UGFzc3dvcmRFY2hvRHVyYXRpb24pOgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL3F0L0xheW91
dFRlc3RDb250cm9sbGVyUXQuaDoKKyAgICAgICAgKiBRdFRlc3RCcm93c2VyL2xhdW5jaGVyd2lu
ZG93LmNwcDoKKyAgICAgICAgKExhdW5jaGVyV2luZG93OjpjcmVhdGVDaHJvbWUpOgorICAgICAg
ICAoTGF1bmNoZXJXaW5kb3c6OnRvZ2dsZVBhc3N3b3JkRWNobyk6CisgICAgICAgICogUXRUZXN0
QnJvd3Nlci9sYXVuY2hlcndpbmRvdy5oOgorCiAyMDExLTA4LTExICBac29sdCBGZWjDqXIgIDxo
NDkwMjY3QHN0dWQudS1zemVnZWQuaHU+CiAKICAgICAgICAgW1dLMl0gSW1wbGVtZW50IHdhaXRG
b3JQb2xpY3lEZWxlZ2F0ZQpJbmRleDogVG9vbHMvRHVtcFJlbmRlclRyZWUvTGF5b3V0VGVzdENv
bnRyb2xsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0R1bXBSZW5kZXJUcmVlL0xheW91dFRl
c3RDb250cm9sbGVyLmNwcAkocmV2aXNpb24gOTI3NjgpCisrKyBUb29scy9EdW1wUmVuZGVyVHJl
ZS9MYXlvdXRUZXN0Q29udHJvbGxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyMDksNiArMjIw
OSwzMCBAQCBzdGF0aWMgdm9pZCBsYXlvdXRUZXN0Q29udHJvbGxlck9iamVjdEZpCiAgICAgY29u
dHJvbGxlci0+ZGVyZWYoKTsKIH0KIAorc3RhdGljIEpTVmFsdWVSZWYgc2V0UGFzc3dvcmRFY2hv
RW5hYmxlZENhbGxiYWNrKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiBmdW5jdGlv
biwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpT
VmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKK3sKKyAgICAvLyBI
YXMgbWFjIGltcGxlbWVudGF0aW9uLgorICAgIGlmIChhcmd1bWVudENvdW50IDwgMSkKKyAgICAg
ICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOworCisgICAgTGF5b3V0VGVz
dENvbnRyb2xsZXIqIGNvbnRyb2xsZXIgPSBzdGF0aWNfY2FzdDxMYXlvdXRUZXN0Q29udHJvbGxl
cio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7CisgICAgY29udHJvbGxlci0+c2V0
UGFzc3dvcmRFY2hvRW5hYmxlZChKU1ZhbHVlVG9Cb29sZWFuKGNvbnRleHQsIGFyZ3VtZW50c1sw
XSkpOworCisgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOworfQorCitz
dGF0aWMgSlNWYWx1ZVJlZiBzZXRQYXNzd29yZEVjaG9EdXJhdGlvbkNhbGxiYWNrKEpTQ29udGV4
dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiBmdW5jdGlvbiwgSlNPYmplY3RSZWYgdGhpc09iamVj
dCwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpT
VmFsdWVSZWYqIGV4Y2VwdGlvbikKK3sKKyAgICAvLyBIYXMgbWFjIGltcGxlbWVudGF0aW9uLgor
ICAgIGlmIChhcmd1bWVudENvdW50IDwgMSkKKyAgICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5k
ZWZpbmVkKGNvbnRleHQpOworCisgICAgTGF5b3V0VGVzdENvbnRyb2xsZXIqIGNvbnRyb2xsZXIg
PSBzdGF0aWNfY2FzdDxMYXlvdXRUZXN0Q29udHJvbGxlcio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0
aGlzT2JqZWN0KSk7CisgICAgY29udHJvbGxlci0+c2V0UGFzc3dvcmRFY2hvRHVyYXRpb24oSlNW
YWx1ZVRvTnVtYmVyKGNvbnRleHQsIGFyZ3VtZW50c1swXSwgMCkpOworCisgICAgcmV0dXJuIEpT
VmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOworfQorCiAvLyBPYmplY3QgQ3JlYXRpb24KIAog
dm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6bWFrZVdpbmRvd09iamVjdChKU0NvbnRleHRSZWYg
Y29udGV4dCwgSlNPYmplY3RSZWYgd2luZG93T2JqZWN0LCBKU1ZhbHVlUmVmKiBleGNlcHRpb24p
CkBAIC0yNDE0LDYgKzI0MzgsOCBAQCBKU1N0YXRpY0Z1bmN0aW9uKiBMYXlvdXRUZXN0Q29udHJv
bGxlcjo6CiAgICAgICAgIHsgInNldFNob3VsZFBhaW50QnJva2VuSW1hZ2UiLCBzZXRTaG91bGRQ
YWludEJyb2tlbkltYWdlQ2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBr
SlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKICAgICAgICAgeyAic2V0VGV4dERpcmVj
dGlvbiIsIHNldFRleHREaXJlY3Rpb25DYWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFk
T25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAogICAgICAgICB7ICJhbGxv
d1JvdW5kaW5nSGFja3MiLCBhbGxvd1JvdW5kaW5nSGFja3NDYWxsYmFjaywga0pTUHJvcGVydHlB
dHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAorICAg
ICAgICB7ICJzZXRQYXNzd29yZEVjaG9FbmFibGVkIiwgc2V0UGFzc3dvcmRFY2hvRW5hYmxlZENh
bGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1
dGVEb250RGVsZXRlIH0sCisgICAgICAgIHsgInNldFBhc3N3b3JkRWNob0R1cmF0aW9uIiwgc2V0
UGFzc3dvcmRFY2hvRHVyYXRpb25DYWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25s
eSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAogICAgICAgICB7IDAsIDAsIDAg
fQogICAgIH07CiAKSW5kZXg6IFRvb2xzL0R1bXBSZW5kZXJUcmVlL0xheW91dFRlc3RDb250cm9s
bGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvRHVtcFJlbmRlclRyZWUvTGF5b3V0VGVzdENvbnRy
b2xsZXIuaAkocmV2aXNpb24gOTI3NjgpCisrKyBUb29scy9EdW1wUmVuZGVyVHJlZS9MYXlvdXRU
ZXN0Q29udHJvbGxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMjUsNiArMTI1LDggQEAgcHVibGlj
OgogICAgIHZvaWQgc2V0U3BhdGlhbE5hdmlnYXRpb25FbmFibGVkKGJvb2wgZW5hYmxlKTsKICAg
ICB2b2lkIHNldFNjcm9sbGJhclBvbGljeShKU1N0cmluZ1JlZiBvcmllbnRhdGlvbiwgSlNTdHJp
bmdSZWYgcG9saWN5KTsKICAgICB2b2lkIHNldEVkaXRpbmdCZWhhdmlvcihjb25zdCBjaGFyKiBl
ZGl0aW5nQmVoYXZpb3IpOworICAgIHZvaWQgc2V0UGFzc3dvcmRFY2hvRW5hYmxlZChib29sKTsK
KyAgICB2b2lkIHNldFBhc3N3b3JkRWNob0R1cmF0aW9uKGRvdWJsZSk7CiAKICAgICB2b2lkIHNl
dFBhZ2VWaXNpYmlsaXR5KGNvbnN0IGNoYXIqIHZpc2liaWxpdHkpIHsgfQogICAgIHZvaWQgcmVz
ZXRQYWdlVmlzaWJpbGl0eSgpIHsgfQpJbmRleDogVG9vbHMvRHVtcFJlbmRlclRyZWUvbWFjL0R1
bXBSZW5kZXJUcmVlLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0R1bXBSZW5kZXJUcmVlL21hYy9E
dW1wUmVuZGVyVHJlZS5tbQkocmV2aXNpb24gOTI3NjgpCisrKyBUb29scy9EdW1wUmVuZGVyVHJl
ZS9tYWMvRHVtcFJlbmRlclRyZWUubW0JKHdvcmtpbmcgY29weSkKQEAgLTQ3OCw2ICs0NzgsOCBA
QCBzdGF0aWMgdm9pZCByZXNldERlZmF1bHRzVG9Db25zaXN0ZW50VmFsCiAgICAgW3ByZWZlcmVu
Y2VzIHNldFVzZVByZUhUTUw1UGFyc2VyUXVpcmtzOk5PXTsKICAgICBbcHJlZmVyZW5jZXMgc2V0
QXN5bmNocm9ub3VzU3BlbGxDaGVja2luZ0VuYWJsZWQ6Tk9dOwogICAgIFtwcmVmZXJlbmNlcyBz
ZXRIaXhpZTc2V2ViU29ja2V0UHJvdG9jb2xFbmFibGVkOllFU107CisgICAgW3ByZWZlcmVuY2Vz
IHNldFBhc3N3b3JkRWNob0VuYWJsZWQ6Tk9dOworICAgIFtwcmVmZXJlbmNlcyBzZXRQYXNzd29y
ZEVjaG9EdXJhdGlvbjoyLjBdOwogCiAgICAgW1tOU0hUVFBDb29raWVTdG9yYWdlIHNoYXJlZEhU
VFBDb29raWVTdG9yYWdlXSBzZXRDb29raWVBY2NlcHRQb2xpY3k6TlNIVFRQQ29va2llQWNjZXB0
UG9saWN5T25seUZyb21NYWluRG9jdW1lbnREb21haW5dOwogICAgIApJbmRleDogVG9vbHMvRHVt
cFJlbmRlclRyZWUvbWFjL0xheW91dFRlc3RDb250cm9sbGVyTWFjLm1tCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFRvb2xzL0R1bXBSZW5kZXJUcmVlL21hYy9MYXlvdXRUZXN0Q29udHJvbGxlck1hYy5tbQkocmV2
aXNpb24gOTI3NjgpCisrKyBUb29scy9EdW1wUmVuZGVyVHJlZS9tYWMvTGF5b3V0VGVzdENvbnRy
b2xsZXJNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTk5NSw2ICs5OTUsMTYgQEAgdm9pZCBMYXlv
dXRUZXN0Q29udHJvbGxlcjo6c2V0V2ViVmlld0VkaQogICAgIFt2aWV3IHNldEVkaXRhYmxlOmVk
aXRhYmxlXTsKIH0KIAordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0UGFzc3dvcmRFY2hv
RW5hYmxlZChib29sIGVuYWJsZWQpCit7CisgICAgW1tbbWFpbkZyYW1lIHdlYlZpZXddIHByZWZl
cmVuY2VzXSBzZXRQYXNzd29yZEVjaG9FbmFibGVkOmVuYWJsZWRdOworfQorCit2b2lkIExheW91
dFRlc3RDb250cm9sbGVyOjpzZXRQYXNzd29yZEVjaG9EdXJhdGlvbihkb3VibGUgZHVyYXRpb24p
Cit7CisgICAgW1tbbWFpbkZyYW1lIHdlYlZpZXddIHByZWZlcmVuY2VzXSBzZXRQYXNzd29yZEVj
aG9EdXJhdGlvbjpkdXJhdGlvbl07Cit9CisKIHN0YXRpYyBOU1N0cmluZyAqU3luY2hyb25vdXNM
b2FkZXJSdW5Mb29wTW9kZSA9IEAiRHVtcFJlbmRlclRyZWVTeW5jaHJvbm91c0xvYWRlclJ1bkxv
b3BNb2RlIjsKIAogI2lmIGRlZmluZWQoQlVJTERJTkdfT05fTEVPUEFSRCkgfHwgZGVmaW5lZChC
VUlMRElOR19PTl9TTk9XX0xFT1BBUkQpCkluZGV4OiBUb29scy9EdW1wUmVuZGVyVHJlZS9xdC9E
dW1wUmVuZGVyVHJlZVF0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9EdW1wUmVuZGVyVHJlZS9x
dC9EdW1wUmVuZGVyVHJlZVF0LmNwcAkocmV2aXNpb24gOTI3NjgpCisrKyBUb29scy9EdW1wUmVu
ZGVyVHJlZS9xdC9EdW1wUmVuZGVyVHJlZVF0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTUzLDYg
KzE1Myw3IEBAIFdlYlBhZ2U6OldlYlBhZ2UoUU9iamVjdCogcGFyZW50LCBEdW1wUmUKICAgICBn
bG9iYWxTZXR0aW5ncy0+c2V0QXR0cmlidXRlKFFXZWJTZXR0aW5nczo6SmF2YXNjcmlwdEVuYWJs
ZWQsIHRydWUpOwogICAgIGdsb2JhbFNldHRpbmdzLT5zZXRBdHRyaWJ1dGUoUVdlYlNldHRpbmdz
OjpQcml2YXRlQnJvd3NpbmdFbmFibGVkLCBmYWxzZSk7CiAgICAgZ2xvYmFsU2V0dGluZ3MtPnNl
dEF0dHJpYnV0ZShRV2ViU2V0dGluZ3M6OlNwYXRpYWxOYXZpZ2F0aW9uRW5hYmxlZCwgZmFsc2Up
OworICAgIGdsb2JhbFNldHRpbmdzLT5zZXRBdHRyaWJ1dGUoUVdlYlNldHRpbmdzOjpQYXNzd29y
ZEVjaG9FbmFibGVkLCBmYWxzZSk7CiAKICAgICBjb25uZWN0KHRoaXMsIFNJR05BTChnZW9tZXRy
eUNoYW5nZVJlcXVlc3RlZChjb25zdCBRUmVjdCAmKSksCiAgICAgICAgICAgICB0aGlzLCBTTE9U
KHNldFZpZXdHZW9tZXRyeShjb25zdCBRUmVjdCAmICkpKTsKQEAgLTE5NSw2ICsxOTYsNyBAQCB2
b2lkIFdlYlBhZ2U6OnJlc2V0U2V0dGluZ3MoKQogICAgIHNldHRpbmdzKCktPnJlc2V0QXR0cmli
dXRlKFFXZWJTZXR0aW5nczo6SmF2YXNjcmlwdENhbkFjY2Vzc0NsaXBib2FyZCk7CiAgICAgc2V0
dGluZ3MoKS0+cmVzZXRBdHRyaWJ1dGUoUVdlYlNldHRpbmdzOjpBdXRvTG9hZEltYWdlcyk7CiAg
ICAgc2V0dGluZ3MoKS0+cmVzZXRBdHRyaWJ1dGUoUVdlYlNldHRpbmdzOjpab29tVGV4dE9ubHkp
OworICAgIHNldHRpbmdzKCktPnJlc2V0QXR0cmlidXRlKFFXZWJTZXR0aW5nczo6UGFzc3dvcmRF
Y2hvRW5hYmxlZCk7CiAKICAgICBtX2RydC0+bGF5b3V0VGVzdENvbnRyb2xsZXIoKS0+c2V0Q2Fy
ZXRCcm93c2luZ0VuYWJsZWQoZmFsc2UpOwogICAgIG1fZHJ0LT5sYXlvdXRUZXN0Q29udHJvbGxl
cigpLT5zZXRBdXRob3JBbmRVc2VyU3R5bGVzRW5hYmxlZCh0cnVlKTsKSW5kZXg6IFRvb2xzL0R1
bXBSZW5kZXJUcmVlL3F0L0xheW91dFRlc3RDb250cm9sbGVyUXQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFRvb2xzL0R1bXBSZW5kZXJUcmVlL3F0L0xheW91dFRlc3RDb250cm9sbGVyUXQuY3BwCShyZXZp
c2lvbiA5Mjc2OCkKKysrIFRvb2xzL0R1bXBSZW5kZXJUcmVlL3F0L0xheW91dFRlc3RDb250cm9s
bGVyUXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05ODUsNSArOTg1LDE1IEBAIHZvaWQgTGF5b3V0
VGVzdENvbnRyb2xsZXI6OnNldEFsd2F5c0Jsb2MKIH0KICNlbmRpZgogCit2b2lkIExheW91dFRl
c3RDb250cm9sbGVyOjpzZXRQYXNzd29yZEVjaG9FbmFibGVkKGJvb2wgZW5hYmxlKQoreworICAg
IG1fZHJ0LT53ZWJQYWdlKCktPnNldHRpbmdzKCktPnNldEF0dHJpYnV0ZShRV2ViU2V0dGluZ3M6
OlBhc3N3b3JkRWNob0VuYWJsZWQsIGVuYWJsZSk7Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRy
b2xsZXI6OnNldFBhc3N3b3JkRWNob0R1cmF0aW9uKGRvdWJsZSBkdXJhdGlvbikKK3sKKyAgICBt
X2RydC0+d2ViUGFnZSgpLT5zZXR0aW5ncygpLT5zZXRQYXNzd29yZEVjaG9EdXJhdGlvbihkdXJh
dGlvbik7Cit9CisKIGNvbnN0IHVuc2lnbmVkIExheW91dFRlc3RDb250cm9sbGVyOjptYXhWaWV3
V2lkdGggPSA4MDA7CiBjb25zdCB1bnNpZ25lZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6bWF4Vmll
d0hlaWdodCA9IDYwMDsKSW5kZXg6IFRvb2xzL0R1bXBSZW5kZXJUcmVlL3F0L0xheW91dFRlc3RD
b250cm9sbGVyUXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9EdW1wUmVuZGVyVHJlZS9xdC9MYXlv
dXRUZXN0Q29udHJvbGxlclF0LmgJKHJldmlzaW9uIDkyNzY4KQorKysgVG9vbHMvRHVtcFJlbmRl
clRyZWUvcXQvTGF5b3V0VGVzdENvbnRyb2xsZXJRdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNzcs
NiArMjc3LDggQEAgcHVibGljIHNsb3RzOgogICAgIHZvaWQgc2V0QWx3YXlzQWNjZXB0Q29va2ll
cyhib29sKTsKICAgICB2b2lkIHNldEFsd2F5c0Jsb2NrQ29va2llcyhib29sKTsKICNlbmRpZgor
ICAgIHZvaWQgc2V0UGFzc3dvcmRFY2hvRW5hYmxlZChib29sKTsKKyAgICB2b2lkIHNldFBhc3N3
b3JkRWNob0R1cmF0aW9uKGRvdWJsZSk7CiAKIHByaXZhdGUgc2xvdHM6CiAgICAgdm9pZCBwcm9j
ZXNzV29yaygpOwpJbmRleDogVG9vbHMvUXRUZXN0QnJvd3Nlci9sYXVuY2hlcndpbmRvdy5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gVG9vbHMvUXRUZXN0QnJvd3Nlci9sYXVuY2hlcndpbmRvdy5jcHAJKHJl
dmlzaW9uIDkyNzY4KQorKysgVG9vbHMvUXRUZXN0QnJvd3Nlci9sYXVuY2hlcndpbmRvdy5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTMwNSw2ICszMDUsMTAgQEAgdm9pZCBMYXVuY2hlcldpbmRvdzo6
Y3JlYXRlQ2hyb21lKCkKICAgICB0b3VjaE1vY2tBY3Rpb24tPnNldENoZWNrYWJsZSh0cnVlKTsK
ICAgICB0b3VjaE1vY2tBY3Rpb24tPnNldFNob3J0Y3V0KFFLZXlTZXF1ZW5jZShRdDo6Q1RSTCB8
IFF0OjpBTFQgfCBRdDo6S2V5X1QpKTsKIAorICAgIFFBY3Rpb24qIHBhc3N3b3JkRWNob0FjdGlv
biA9IHRvb2xzTWVudS0+YWRkQWN0aW9uKCJUb2dnbGUgUGFzc3dvcmQgRWNobyIsIHRoaXMsIFNM
T1QodG9nZ2xlUGFzc3dvcmRFY2hvKGJvb2wpKSk7CisgICAgcGFzc3dvcmRFY2hvQWN0aW9uLT5z
ZXRDaGVja2FibGUodHJ1ZSk7CisgICAgcGFzc3dvcmRFY2hvQWN0aW9uLT5zZXRDaGVja2VkKHNl
dHRpbmdzLT50ZXN0QXR0cmlidXRlKFFXZWJTZXR0aW5nczo6UGFzc3dvcmRFY2hvRW5hYmxlZCkp
OworCiAgICAgdG9vbHNNZW51LT5hZGRTZXBhcmF0b3IoKTsKIAogICAgIFFBY3Rpb24qIHRvZ2ds
ZUxvY2FsU3RvcmFnZSA9IHRvb2xzTWVudS0+YWRkQWN0aW9uKCJFbmFibGUgTG9jYWwgU3RvcmFn
ZSIsIHRoaXMsIFNMT1QodG9nZ2xlTG9jYWxTdG9yYWdlKGJvb2wpKSk7CkBAIC04OTcsNiArOTAx
LDExIEBAIHZvaWQgTGF1bmNoZXJXaW5kb3c6OnRvZ2dsZUZyYW1lRmxhdHRlbmkKICAgICBwYWdl
KCktPnNldHRpbmdzKCktPnNldEF0dHJpYnV0ZShRV2ViU2V0dGluZ3M6OkZyYW1lRmxhdHRlbmlu
Z0VuYWJsZWQsIHRvZ2dsZSk7CiB9CiAKK3ZvaWQgTGF1bmNoZXJXaW5kb3c6OnRvZ2dsZVBhc3N3
b3JkRWNobyhib29sIGIpCit7CisgICAgcGFnZSgpLT5zZXR0aW5ncygpLT5zZXRBdHRyaWJ1dGUo
UVdlYlNldHRpbmdzOjpQYXNzd29yZEVjaG9FbmFibGVkLCBiKTsKK30KKwogdm9pZCBMYXVuY2hl
cldpbmRvdzo6dG9nZ2xlSW50ZXJydXB0aW5nSmF2YVNjcmlwdEVuYWJsZWQoYm9vbCBlbmFibGUp
CiB7CiAgICAgcGFnZSgpLT5zZXRJbnRlcnJ1cHRpbmdKYXZhU2NyaXB0RW5hYmxlZChlbmFibGUp
OwpJbmRleDogVG9vbHMvUXRUZXN0QnJvd3Nlci9sYXVuY2hlcndpbmRvdy5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFRvb2xzL1F0VGVzdEJyb3dzZXIvbGF1bmNoZXJ3aW5kb3cuaAkocmV2aXNpb24gOTI3Njgp
CisrKyBUb29scy9RdFRlc3RCcm93c2VyL2xhdW5jaGVyd2luZG93LmgJKHdvcmtpbmcgY29weSkK
QEAgLTE4Nyw2ICsxODcsNyBAQCBwcm90ZWN0ZWQgc2xvdHM6CiAgICAgdm9pZCB0b2dnbGVTcGF0
aWFsTmF2aWdhdGlvbihib29sIGIpOwogICAgIHZvaWQgdG9nZ2xlRnVsbFNjcmVlbk1vZGUoYm9v
bCBlbmFibGUpOwogICAgIHZvaWQgdG9nZ2xlRnJhbWVGbGF0dGVuaW5nKGJvb2wgdG9nZ2xlKTsK
KyAgICB2b2lkIHRvZ2dsZVBhc3N3b3JkRWNobyhib29sKTsKICAgICB2b2lkIHRvZ2dsZUludGVy
cnVwdGluZ0phdmFTY3JpcHRFbmFibGVkKGJvb2wgZW5hYmxlKTsKICAgICB2b2lkIHRvZ2dsZUph
dmFzY3JpcHRDYW5PcGVuV2luZG93cyhib29sIGVuYWJsZSk7CiAgICAgdm9pZCB0b2dnbGVBdXRv
TG9hZEltYWdlcyhib29sIGVuYWJsZSk7CkluZGV4OiBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lvbiA5Mjg0NSkKKysrIExh
eW91dFRlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE5IEBACisyMDEx
LTA4LTExICBDaGFuZyBTaHUgIDxjc2h1QHdlYmtpdC5vcmc+CisKKyAgICAgICAgQWRkIHN1cHBv
cnQgb2Ygc2V0UGFzc3dvcmRFY2hvRW5hYmxlZCBhbmQgc2V0UGFzc3dvcmRFY2hvRHVyYXRpb24g
Zm9yIHBhc3N3b3JkIGVjaG8gZmVhdHVyZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9NjYwNTIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBUaGUgc3VwcG9ydCBpcyBpbXBsZW1lbnRlZCBub3cgZm9yIG1hYyBh
bmQgcXQgYnV0IG5vdCBvbiBvdGhlciBwbGF0Zm9ybXMgb3IgV0syLgorCisgICAgICAgICogZWRp
dGluZy9pbnB1dC9wYXNzd29yZC1lY2hvLXNldHRpbmdzLWV4cGVjdGVkLnR4dDogQWRkZWQuCisg
ICAgICAgICogZWRpdGluZy9pbnB1dC9wYXNzd29yZC1lY2hvLXNldHRpbmdzLmh0bWw6IEFkZGVk
LgorICAgICAgICAqIHBsYXRmb3JtL2Nocm9taXVtL3Rlc3RfZXhwZWN0YXRpb25zLnR4dDoKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ndGsvU2tpcHBlZDoKKyAgICAgICAgKiBwbGF0Zm9ybS93aW4vU2tp
cHBlZDoKKyAgICAgICAgKiBwbGF0Zm9ybS93azIvU2tpcHBlZDoKKwogMjAxMS0wOC0xMSAgQW5k
cmVpIFBvcGVzY3UgIDxhbmRyZWlwQGdvb2dsZS5jb20+CiAKICAgICAgICAgW0Nocm9taXVtXSBS
ZWJhc2VsaW5lIHRoZXNlIHRlc3RzIG9uIExlb3BhcmQuCkluZGV4OiBMYXlvdXRUZXN0cy9lZGl0
aW5nL2lucHV0L3Bhc3N3b3JkLWVjaG8tc2V0dGluZ3MtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIExheW91dFRlc3RzL2VkaXRpbmcvaW5wdXQvcGFzc3dvcmQtZWNoby1zZXR0aW5ncy1leHBl
Y3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9lZGl0aW5nL2lucHV0L3Bhc3N3
b3JkLWVjaG8tc2V0dGluZ3MtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxIEBA
CitUZXN0IGVuYWJsZSBwYXNzd29yZCBlY2hvIGFuZCBzZXQgZWNobyBkdXJhdGlvbi4KSW5kZXg6
IExheW91dFRlc3RzL2VkaXRpbmcvaW5wdXQvcGFzc3dvcmQtZWNoby1zZXR0aW5ncy5odG1sCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIExheW91dFRlc3RzL2VkaXRpbmcvaW5wdXQvcGFzc3dvcmQtZWNoby1zZXR0
aW5ncy5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZWRpdGluZy9pbnB1dC9wYXNz
d29yZC1lY2hvLXNldHRpbmdzLmh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTMgQEAKKzxo
dG1sPgorPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCIgdHlwZT0idGV4dC9qYXZhc2NyaXB0
Ij4KKyAgICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKSB7CisgICAgICAgIGxheW91
dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQoKTsKKyAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xs
ZXIuc2V0UGFzc3dvcmRFY2hvRW5hYmxlZCh0cnVlKTsKKyAgICAgICAgbGF5b3V0VGVzdENvbnRy
b2xsZXIuc2V0UGFzc3dvcmRFY2hvRHVyYXRpb24oMi4wKTsKKyAgICB9Cis8L3NjcmlwdD4KKzxi
b2R5PgorPHA+IFRlc3QgZW5hYmxlIHBhc3N3b3JkIGVjaG8gYW5kIHNldCBlY2hvIGR1cmF0aW9u
LgorPC9ib2R5PgorPC9odG1sPgorCkluZGV4OiBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9jaHJvbWl1
bS90ZXN0X2V4cGVjdGF0aW9ucy50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvcGxhdGZv
cm0vY2hyb21pdW0vdGVzdF9leHBlY3RhdGlvbnMudHh0CShyZXZpc2lvbiA5Mjc2OCkKKysrIExh
eW91dFRlc3RzL3BsYXRmb3JtL2Nocm9taXVtL3Rlc3RfZXhwZWN0YXRpb25zLnR4dAkod29ya2lu
ZyBjb3B5KQpAQCAtMzcwNiwzICszNzA2LDUgQEAgQlVHV0s2NTg3NCA6IGZhc3QvanMvcHJldmVu
dEV4dGVuc2lvbnMuaAogLy8gQ2F1c2VkIGJ5IHI5MjcwNAogQlVHV0s2NTk1MSBXSU4gREVCVUcg
OiB3ZWJhdWRpby9hdWRpb2J1ZmZlcnNvdXJjZS5odG1sID0gQ1JBU0gKIEJVR1dLNjU5NTEgV0lO
IERFQlVHIDogd2ViYXVkaW8vbWl4aW5nLmh0bWwgPSBDUkFTSAorCitCVUdXSzY2MDUyIDogZWRp
dGluZy9pbnB1dC9wYXNzd29yZC1lY2hvLXNldHRpbmdzLmh0bWwgPSBURVhUCkluZGV4OiBMYXlv
dXRUZXN0cy9wbGF0Zm9ybS9ndGsvU2tpcHBlZAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9w
bGF0Zm9ybS9ndGsvU2tpcHBlZAkocmV2aXNpb24gOTI3NjgpCisrKyBMYXlvdXRUZXN0cy9wbGF0
Zm9ybS9ndGsvU2tpcHBlZAkod29ya2luZyBjb3B5KQpAQCAtMTYwOCwzICsxNjA4LDcgQEAgd2Vi
YXVkaW8vCiAjIFRleHQgc2hhZG93IGV4dGVudHMgYXJlIGNhbGN1bGF0ZWQgaW5jb3JyZWN0bHkK
ICMgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY1MDM1CiBmYXN0L2Nh
bnZhcy9maWxsVGV4dC1zaGFkb3cuaHRtbAorCisjIEFkZCBzdXBwb3J0IG9mIHNldFBhc3N3b3Jk
RWNob0VuYWJsZWQgYW5kIHNldFBhc3N3b3JkRWNob0R1cmF0aW9uIGZvciBwYXNzd29yZCBlY2hv
IGZlYXR1cmUKKyMgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY2MDUy
CitlZGl0aW5nL2lucHV0L3Bhc3N3b3JkLWVjaG8tc2V0dGluZ3MuaHRtbApJbmRleDogTGF5b3V0
VGVzdHMvcGxhdGZvcm0vd2luL1NraXBwZWQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvcGxh
dGZvcm0vd2luL1NraXBwZWQJKHJldmlzaW9uIDkyNzY4KQorKysgTGF5b3V0VGVzdHMvcGxhdGZv
cm0vd2luL1NraXBwZWQJKHdvcmtpbmcgY29weSkKQEAgLTEzNzQsMyArMTM3NCw3IEBAIHdlYmF1
ZGlvLwogIyBUZXN0cyBmb3IgV2ViVlRUIHBhcnNlciBmb3IgPHRyYWNrPi4gIEZlYXR1cmUgaXMg
bm90IHlldCBmdW5jdGlvbmFsLgogIyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9NDM2NjgKIG1lZGlhL3RyYWNrLworCisjIEFkZCBzdXBwb3J0IG9mIHNldFBhc3N3b3Jk
RWNob0VuYWJsZWQgYW5kIHNldFBhc3N3b3JkRWNob0R1cmF0aW9uIGZvciBwYXNzd29yZCBlY2hv
IGZlYXR1cmUKKyMgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY2MDUy
CitlZGl0aW5nL2lucHV0L3Bhc3N3b3JkLWVjaG8tc2V0dGluZ3MuaHRtbApJbmRleDogTGF5b3V0
VGVzdHMvcGxhdGZvcm0vd2syL1NraXBwZWQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvcGxh
dGZvcm0vd2syL1NraXBwZWQJKHJldmlzaW9uIDkyNzY4KQorKysgTGF5b3V0VGVzdHMvcGxhdGZv
cm0vd2syL1NraXBwZWQJKHdvcmtpbmcgY29weSkKQEAgLTE4NjUsNiArMTg2NSwxMCBAQCBlZGl0
aW5nL3NwZWxsaW5nL3NwZWxsY2hlY2staW5wdXQtc2VhcmNoCiAjIG1pc3Npbmcgd2luZG93Lmlu
dGVybmFscy5jcmVhdGVTaGFkb3dDb250ZW50RWxlbWVudAogZmFzdC9kb20vc2hhZG93L2NyZWF0
ZS1jb250ZW50LWVsZW1lbnQuaHRtbAogCisjIFdlYktpdFRlc3RSdW5uZXIgbmVlZHMgbGF5b3V0
VGVzdENvbnRyb2xsZXIuc2V0UGFzc3dvcmRFY2hvRW5hYmxlZAorIyBXZWJLaXRUZXN0UnVubmVy
IG5lZWRzIGxheW91dFRlc3RDb250cm9sbGVyLnNldFBhc3N3b3JkRWNob0R1cmF0aW9uCitlZGl0
aW5nL2lucHV0L3Bhc3N3b3JkLWVjaG8tc2V0dGluZ3MuaHRtbAorCiAjIyMgRU5EIE9GICgyKSBD
bGFzc2lmaWVkIGZhaWx1cmVzIHdpdGhvdXQgYnVnIHJlcG9ydHMgKHlldCkKICMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIAo=
</data>
<flag name="review"
          id="99287"
          type_id="1"
          status="-"
          setter="ap"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>103769</attachid>
            <date>2011-08-12 07:23:23 -0700</date>
            <delta_ts>2011-08-17 14:16:25 -0700</delta_ts>
            <desc>fix patch 2</desc>
            <filename>66052_2.patch</filename>
            <type>text/plain</type>
            <size>18856</size>
            <attacher name="Chang Shu">cshu</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDkyOTU4KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzEgQEAKKzIwMTEtMDgtMTIgIENoYW5nIFNo
dSAgPGNzaHVAd2Via2l0Lm9yZz4KKworICAgICAgICBBZGQgc3VwcG9ydCBvZiBzZXRQYXNzd29y
ZEVjaG9FbmFibGVkIGFuZCBzZXRQYXNzd29yZEVjaG9EdXJhdGlvbiBmb3IgcGFzc3dvcmQgZWNo
byBmZWF0dXJlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD02NjA1MgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IEFkZGVkIHJ1bnRpbWUgc2V0dGluZ3MgaW4gV2ViQ29yZS4KKyAgICAgICAgQWRkZWQgc3VwcG9y
dCBpbiB3aW5kb3cuaW50ZXJuYWxzIGZvciB0ZXN0aW5nLgorCisgICAgICAgIFRlc3RzOiBlZGl0
aW5nL2lucHV0L3Bhc3N3b3JkLWVjaG8tcGFzc25vZGUuaHRtbAorICAgICAgICAgICAgICAgZWRp
dGluZy9pbnB1dC9wYXNzd29yZC1lY2hvLXBhc3Nub2RlMi5odG1sCisgICAgICAgICAgICAgICBl
ZGl0aW5nL2lucHV0L3Bhc3N3b3JkLWVjaG8tcGFzc25vZGUzLmh0bWwKKyAgICAgICAgICAgICAg
IGVkaXRpbmcvaW5wdXQvcGFzc3dvcmQtZWNoby10ZXh0bm9kZS5odG1sCisKKyAgICAgICAgKiBw
YWdlL1NldHRpbmdzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNldHRpbmdzOjpTZXR0aW5ncyk6
CisgICAgICAgICogcGFnZS9TZXR0aW5ncy5oOgorICAgICAgICAoV2ViQ29yZTo6U2V0dGluZ3M6
OnNldFBhc3N3b3JkRWNob0VuYWJsZWQpOgorICAgICAgICAoV2ViQ29yZTo6U2V0dGluZ3M6Omlz
UGFzc3dvcmRFY2hvRW5hYmxlZCk6CisgICAgICAgIChXZWJDb3JlOjpTZXR0aW5nczo6c2V0UGFz
c3dvcmRFY2hvRHVyYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6U2V0dGluZ3M6OnBhc3N3b3Jk
RWNob0R1cmF0aW9uKToKKyAgICAgICAgKiB0ZXN0aW5nL0ludGVybmFscy5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpJbnRlcm5hbHM6OnNldFBhc3N3b3JkRWNob0VuYWJsZWQpOgorICAgICAgICAo
V2ViQ29yZTo6SW50ZXJuYWxzOjpzZXRQYXNzd29yZEVjaG9EdXJhdGlvbik6CisgICAgICAgICog
dGVzdGluZy9JbnRlcm5hbHMuaDoKKyAgICAgICAgKiB0ZXN0aW5nL0ludGVybmFscy5pZGw6CisK
IDIwMTEtMDgtMTIgIFBhdmVsIEZlbGRtYW4gIDxwZmVsZG1hbkBnb29nbGUuY29tPgogCiAgICAg
ICAgIFdlYiBJbnNwZWN0b3I6IG1ha2UgZm9sZGVycyBvcHRpb25hbCBpbiB0aGUgU2NyaXB0cycg
cGFuZWwgZmlsZSBzZWxlY3Rvci4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvU2V0dGluZ3Mu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvU2V0dGluZ3MuY3BwCShyZXZp
c2lvbiA5Mjk1NikKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvU2V0dGluZ3MuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xMDgsNiArMTA4LDcgQEAgU2V0dGluZ3M6OlNldHRpbmdzKFBhZ2UqIHBhZ2Up
CiAgICAgOiBtX3BhZ2UocGFnZSkKICAgICAsIG1fZWRpdGFibGVMaW5rQmVoYXZpb3IoRWRpdGFi
bGVMaW5rRGVmYXVsdEJlaGF2aW9yKQogICAgICwgbV90ZXh0RGlyZWN0aW9uU3VibWVudUluY2x1
c2lvbkJlaGF2aW9yKFRleHREaXJlY3Rpb25TdWJtZW51QXV0b21hdGljYWxseUluY2x1ZGVkKQor
ICAgICwgbV9wYXNzd29yZEVjaG9EdXJhdGlvbkluU2Vjb25kcygxKQogICAgICwgbV9taW5pbXVt
Rm9udFNpemUoMCkKICAgICAsIG1fbWluaW11bUxvZ2ljYWxGb250U2l6ZSgwKQogICAgICwgbV9k
ZWZhdWx0Rm9udFNpemUoMCkKQEAgLTIxMyw2ICsyMTQsNyBAQCBTZXR0aW5nczo6U2V0dGluZ3Mo
UGFnZSogcGFnZSkKICNlbmRpZgogICAgICwgbV9tZWRpYVBsYXliYWNrUmVxdWlyZXNVc2VyR2Vz
dHVyZShmYWxzZSkKICAgICAsIG1fbWVkaWFQbGF5YmFja0FsbG93c0lubGluZSh0cnVlKQorICAg
ICwgbV9wYXNzd29yZEVjaG9FbmFibGVkKGZhbHNlKQogICAgICwgbV9sb2Fkc0ltYWdlc0F1dG9t
YXRpY2FsbHlUaW1lcih0aGlzLCAmU2V0dGluZ3M6OmxvYWRzSW1hZ2VzQXV0b21hdGljYWxseVRp
bWVyRmlyZWQpCiB7CiAgICAgLy8gQSBGcmFtZSBtYXkgbm90IGhhdmUgYmVlbiBjcmVhdGVkIHll
dCwgc28gd2UgaW5pdGlhbGl6ZSB0aGUgQXRvbWljU3RyaW5nIApJbmRleDogU291cmNlL1dlYkNv
cmUvcGFnZS9TZXR0aW5ncy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvU2V0
dGluZ3MuaAkocmV2aXNpb24gOTI5NTYpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL1NldHRpbmdz
LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ2MSw2ICs0NjEsMTIgQEAgbmFtZXNwYWNlIFdlYkNvcmUg
ewogICAgICAgICB2b2lkIHNldE1lZGlhUGxheWJhY2tBbGxvd3NJbmxpbmUoYm9vbCBmbGFnKSB7
IG1fbWVkaWFQbGF5YmFja0FsbG93c0lubGluZSA9IGZsYWc7IH07CiAgICAgICAgIGJvb2wgbWVk
aWFQbGF5YmFja0FsbG93c0lubGluZSgpIGNvbnN0IHsgcmV0dXJuIG1fbWVkaWFQbGF5YmFja0Fs
bG93c0lubGluZTsgfQogCisgICAgICAgIHZvaWQgc2V0UGFzc3dvcmRFY2hvRW5hYmxlZChib29s
IGZsYWcpIHsgbV9wYXNzd29yZEVjaG9FbmFibGVkID0gZmxhZzsgfTsKKyAgICAgICAgYm9vbCBw
YXNzd29yZEVjaG9FbmFibGVkKCkgY29uc3QgeyByZXR1cm4gbV9wYXNzd29yZEVjaG9FbmFibGVk
OyB9CisKKyAgICAgICAgdm9pZCBzZXRQYXNzd29yZEVjaG9EdXJhdGlvbihkb3VibGUgZHVyYXRp
b25JblNlY29uZHMpIHsgbV9wYXNzd29yZEVjaG9EdXJhdGlvbkluU2Vjb25kcyA9IGR1cmF0aW9u
SW5TZWNvbmRzOyB9OworICAgICAgICBkb3VibGUgcGFzc3dvcmRFY2hvRHVyYXRpb24oKSBjb25z
dCB7IHJldHVybiBtX3Bhc3N3b3JkRWNob0R1cmF0aW9uSW5TZWNvbmRzOyB9CisKICAgICBwcml2
YXRlOgogICAgICAgICBQYWdlKiBtX3BhZ2U7CiAKQEAgLTQ3Nyw2ICs0ODMsNyBAQCBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAgICAgICAgIFNjcmlwdEZvbnRGYW1pbHlNYXAgbV9waWN0b2dyYXBoRm9u
dEZhbWlseU1hcDsKICAgICAgICAgRWRpdGFibGVMaW5rQmVoYXZpb3IgbV9lZGl0YWJsZUxpbmtC
ZWhhdmlvcjsKICAgICAgICAgVGV4dERpcmVjdGlvblN1Ym1lbnVJbmNsdXNpb25CZWhhdmlvciBt
X3RleHREaXJlY3Rpb25TdWJtZW51SW5jbHVzaW9uQmVoYXZpb3I7CisgICAgICAgIGRvdWJsZSBt
X3Bhc3N3b3JkRWNob0R1cmF0aW9uSW5TZWNvbmRzOwogICAgICAgICBpbnQgbV9taW5pbXVtRm9u
dFNpemU7CiAgICAgICAgIGludCBtX21pbmltdW1Mb2dpY2FsRm9udFNpemU7CiAgICAgICAgIGlu
dCBtX2RlZmF1bHRGb250U2l6ZTsKQEAgLTU4MCw2ICs1ODcsNyBAQCBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAjZW5kaWYKICAgICAgICAgYm9vbCBtX21lZGlhUGxheWJhY2tSZXF1aXJlc1VzZXJHZXN0
dXJlIDogMTsKICAgICAgICAgYm9vbCBtX21lZGlhUGxheWJhY2tBbGxvd3NJbmxpbmUgOiAxOwor
ICAgICAgICBib29sIG1fcGFzc3dvcmRFY2hvRW5hYmxlZCA6IDE7CiAKICAgICAgICAgVGltZXI8
U2V0dGluZ3M+IG1fbG9hZHNJbWFnZXNBdXRvbWF0aWNhbGx5VGltZXI7CiAgICAgICAgIHZvaWQg
bG9hZHNJbWFnZXNBdXRvbWF0aWNhbGx5VGltZXJGaXJlZChUaW1lcjxTZXR0aW5ncz4qKTsKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5jcHAJKHJldmlzaW9uIDkyOTU2KQorKysg
U291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
ODksNCArMTg5LDI0IEBAIHZvaWQgSW50ZXJuYWxzOjpzZXRGb3JjZUNvbXBvc2l0aW5nTW9kZSgK
ICAgICBkb2N1bWVudC0+c2V0dGluZ3MoKS0+c2V0Rm9yY2VDb21wb3NpdGluZ01vZGUoZW5hYmxl
ZCk7CiB9CiAKK3ZvaWQgSW50ZXJuYWxzOjpzZXRQYXNzd29yZEVjaG9FbmFibGVkKERvY3VtZW50
KiBkb2N1bWVudCwgYm9vbCBlbmFibGVkLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBpZiAo
IWRvY3VtZW50IHx8ICFkb2N1bWVudC0+c2V0dGluZ3MoKSkgeworICAgICAgICBlYyA9IElOVkFM
SURfQUNDRVNTX0VSUjsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGRvY3VtZW50LT5z
ZXR0aW5ncygpLT5zZXRQYXNzd29yZEVjaG9FbmFibGVkKGVuYWJsZWQpOworfQorCit2b2lkIElu
dGVybmFsczo6c2V0UGFzc3dvcmRFY2hvRHVyYXRpb24oRG9jdW1lbnQqIGRvY3VtZW50LCBkb3Vi
bGUgZHVyYXRpb25JblNlY29uZHMsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIGlmICghZG9j
dW1lbnQgfHwgIWRvY3VtZW50LT5zZXR0aW5ncygpKSB7CisgICAgICAgIGVjID0gSU5WQUxJRF9B
Q0NFU1NfRVJSOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgZG9jdW1lbnQtPnNldHRp
bmdzKCktPnNldFBhc3N3b3JkRWNob0R1cmF0aW9uKGR1cmF0aW9uSW5TZWNvbmRzKTsKK30KKwog
fQpJbmRleDogU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5oCShyZXZpc2lvbiA5Mjk1NikKKysr
IFNvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmgJKHdvcmtpbmcgY29weSkKQEAgLTY3
LDYgKzY3LDkgQEAgcHVibGljOgogCiAgICAgdm9pZCBzZXRGb3JjZUNvbXBvc2l0aW5nTW9kZShE
b2N1bWVudCosIGJvb2wgZW5hYmxlZCwgRXhjZXB0aW9uQ29kZSYpOwogCisgICAgdm9pZCBzZXRQ
YXNzd29yZEVjaG9FbmFibGVkKERvY3VtZW50KiwgYm9vbCBlbmFibGVkLCBFeGNlcHRpb25Db2Rl
Jik7CisgICAgdm9pZCBzZXRQYXNzd29yZEVjaG9EdXJhdGlvbihEb2N1bWVudCosIGRvdWJsZSBk
dXJhdGlvbkluU2Vjb25kcywgRXhjZXB0aW9uQ29kZSYpOworCiBwcml2YXRlOgogICAgIEludGVy
bmFscygpOwogfTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmlkbAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5pZGwJKHJldmlz
aW9uIDkyOTU2KQorKysgU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuaWRsCSh3b3Jr
aW5nIGNvcHkpCkBAIC00NCw2ICs0NCw5IEBAIG1vZHVsZSB3aW5kb3cgewogICAgICAgICBDbGll
bnRSZWN0IGJvdW5kaW5nQm94KGluIEVsZW1lbnQgZWxlbWVudCkgcmFpc2VzKERPTUV4Y2VwdGlv
bik7CiAKICAgICAgICAgdm9pZCBzZXRGb3JjZUNvbXBvc2l0aW5nTW9kZShpbiBEb2N1bWVudCBk
b2N1bWVudCwgaW4gYm9vbGVhbiBlbmFibGVkKSByYWlzZXMoRE9NRXhjZXB0aW9uKTsKKworICAg
ICAgICB2b2lkIHNldFBhc3N3b3JkRWNob0VuYWJsZWQoaW4gRG9jdW1lbnQgZG9jdW1lbnQsIGlu
IGJvb2xlYW4gZW5hYmxlZCkgcmFpc2VzKERPTUV4Y2VwdGlvbik7CisgICAgICAgIHZvaWQgc2V0
UGFzc3dvcmRFY2hvRHVyYXRpb24oaW4gRG9jdW1lbnQgZG9jdW1lbnQsIGluIGRvdWJsZSBkdXJh
dGlvbkluU2Vjb25kcykgcmFpc2VzKERPTUV4Y2VwdGlvbik7CiAgICAgfTsKIH0KIApJbmRleDog
U291cmNlL1dlYktpdC9xdC9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9x
dC9DaGFuZ2VMb2cJKHJldmlzaW9uIDkyOTU4KQorKysgU291cmNlL1dlYktpdC9xdC9DaGFuZ2VM
b2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNSBAQAorMjAxMS0wOC0xMiAgQ2hhbmcgU2h1
ICA8Y3NodUB3ZWJraXQub3JnPgorCisgICAgICAgIEFkZCBzdXBwb3J0IG9mIHNldFBhc3N3b3Jk
RWNob0VuYWJsZWQgYW5kIHNldFBhc3N3b3JkRWNob0R1cmF0aW9uIGZvciBwYXNzd29yZCBlY2hv
IGZlYXR1cmUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTY2MDUyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
RW5hYmxlIHBhc3N3b3JkIGVjaG8gdW5kZXIgdGhlIGJ1aWxkIGZsYWcuCisKKyAgICAgICAgKiBB
cGkvcXdlYnNldHRpbmdzLmNwcDoKKyAgICAgICAgKFFXZWJTZXR0aW5nc1ByaXZhdGU6OmFwcGx5
KToKKwogMjAxMS0wOC0xMSAgQW5kcmV3IFdhc29uICA8cmVjdGFsb2dpY0ByZWN0YWxvZ2ljLmNv
bT4KIAogICAgICAgICBSRUdSRVNTSU9OOiBRdCBKYXZhU2NyaXB0IGJyaWRnZSBzaWduYWwgY29u
bmVjdGlvbiBmYWlscwpJbmRleDogU291cmNlL1dlYktpdC9xdC9BcGkvcXdlYnNldHRpbmdzLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L3F0L0FwaS9xd2Vic2V0dGluZ3MuY3BwCShy
ZXZpc2lvbiA5Mjk1NikKKysrIFNvdXJjZS9XZWJLaXQvcXQvQXBpL3F3ZWJzZXR0aW5ncy5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTI4NCw2ICsyODQsMTEgQEAgdm9pZCBRV2ViU2V0dGluZ3NQcml2
YXRlOjphcHBseSgpCiAgICAgICAgIHNldHRpbmdzLT5zZXROZWVkc1NpdGVTcGVjaWZpY1F1aXJr
cyh2YWx1ZSk7CiAKICAgICAgICAgc2V0dGluZ3MtPnNldFVzZXNQYWdlQ2FjaGUoV2ViQ29yZTo6
cGFnZUNhY2hlKCktPmNhcGFjaXR5KCkpOworCisjaWYgRU5BQkxFKFBBU1NXT1JEX0VDSE8pCisg
ICAgICAgIHNldHRpbmdzLT5zZXRQYXNzd29yZEVjaG9FbmFibGVkKHRydWUpOworICAgICAgICBz
ZXR0aW5ncy0+c2V0UGFzc3dvcmRFY2hvRHVyYXRpb24oMSk7CisjZW5kaWYKICAgICB9IGVsc2Ug
ewogICAgICAgICBRTGlzdDxRV2ViU2V0dGluZ3NQcml2YXRlKj4gc2V0dGluZ3MgPSAqOjphbGxT
ZXR0aW5ncygpOwogICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHNldHRpbmdzLmNvdW50KCk7
ICsraSkKSW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRU
ZXN0cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDkyOTU4KQorKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9n
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjkgQEAKKzIwMTEtMDgtMTIgIENoYW5nIFNodSAg
PGNzaHVAd2Via2l0Lm9yZz4KKworICAgICAgICBBZGQgc3VwcG9ydCBvZiBzZXRQYXNzd29yZEVj
aG9FbmFibGVkIGFuZCBzZXRQYXNzd29yZEVjaG9EdXJhdGlvbiBmb3IgcGFzc3dvcmQgZWNobyBm
ZWF0dXJlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02
NjA1MgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICog
ZWRpdGluZy9pbnB1dC9wYXNzd29yZC1lY2hvLXBhc3Nub2RlLWV4cGVjdGVkLnR4dDogQWRkZWQu
CisgICAgICAgICogZWRpdGluZy9pbnB1dC9wYXNzd29yZC1lY2hvLXBhc3Nub2RlLmh0bWw6IEFk
ZGVkLgorICAgICAgICAqIGVkaXRpbmcvaW5wdXQvcGFzc3dvcmQtZWNoby1wYXNzbm9kZTItZXhw
ZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBlZGl0aW5nL2lucHV0L3Bhc3N3b3JkLWVjaG8t
cGFzc25vZGUyLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGVkaXRpbmcvaW5wdXQvcGFzc3dvcmQt
ZWNoby1wYXNzbm9kZTMtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBlZGl0aW5nL2lu
cHV0L3Bhc3N3b3JkLWVjaG8tcGFzc25vZGUzLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGVkaXRp
bmcvaW5wdXQvcGFzc3dvcmQtZWNoby10ZXh0bm9kZS1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAg
ICAgICAqIGVkaXRpbmcvaW5wdXQvcGFzc3dvcmQtZWNoby10ZXh0bm9kZS5odG1sOiBBZGRlZC4K
KyAgICAgICAgKiBlZGl0aW5nL2lucHV0L3Jlc291cmNlczogQWRkZWQuCisgICAgICAgICogZWRp
dGluZy9pbnB1dC9yZXNvdXJjZXMvcGFzc3dvcmQtZWNoby5qczogQWRkZWQuCisgICAgICAgIChz
ZWN1cmVDaGFyKToKKyAgICAgICAgKHNlY3VyZVRleHQpOgorICAgICAgICAobG9nKToKKyAgICAg
ICAgKGFzc2VydCk6CisgICAgICAgIChydW4uZWxzZSk6CisgICAgICAgIChydW4pOgorICAgICAg
ICAoaW5pdCk6CisgICAgICAgICogcGxhdGZvcm0vd2syL1NraXBwZWQ6IE5vIHN1cHBvcnQgeWV0
LgorCiAyMDExLTA4LTEyICBQYXZlbCBGZWxkbWFuICA8cGZlbGRtYW5AZ29vZ2xlLmNvbT4KIAog
ICAgICAgICBXZWIgSW5zcGVjdG9yOiBtYWtlIGZvbGRlcnMgb3B0aW9uYWwgaW4gdGhlIFNjcmlw
dHMnIHBhbmVsIGZpbGUgc2VsZWN0b3IuCkluZGV4OiBMYXlvdXRUZXN0cy9lZGl0aW5nL2lucHV0
L3Bhc3N3b3JkLWVjaG8tcGFzc25vZGUyLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlv
dXRUZXN0cy9lZGl0aW5nL2lucHV0L3Bhc3N3b3JkLWVjaG8tcGFzc25vZGUyLWV4cGVjdGVkLnR4
dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2VkaXRpbmcvaW5wdXQvcGFzc3dvcmQtZWNo
by1wYXNzbm9kZTItZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDYgQEAKK1Rl
c3RzIGlmIGlucHV0IGNoYXJzIGFyZSBzZWN1cmVkIGNvcnJlY3RseSAKKworRXJyb3I6IHNlY3Vy
ZWQgcmlnaHQgYWZ0ZXIuIGV4cGVjdGVkPWZhbHNlLCBhY3R1YWw9dHJ1ZQorU3VjY2Vzczogc2Vj
dXJlZCBhZnRlciBkZWxheS4gZXhwZWN0ZWQ9dHJ1ZSwgYWN0dWFsPXRydWUKK0Vycm9yOiBzZWN1
cmVkIHJpZ2h0IGFmdGVyLiBleHBlY3RlZD1mYWxzZSwgYWN0dWFsPXRydWUKK1N1Y2Nlc3M6IHNl
Y3VyZWQgYWZ0ZXIgZGVsYXkuIGV4cGVjdGVkPXRydWUsIGFjdHVhbD10cnVlCkluZGV4OiBMYXlv
dXRUZXN0cy9lZGl0aW5nL2lucHV0L3Bhc3N3b3JkLWVjaG8tcGFzc25vZGUyLmh0bWwKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gTGF5b3V0VGVzdHMvZWRpdGluZy9pbnB1dC9wYXNzd29yZC1lY2hvLXBhc3Nub2Rl
Mi5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZWRpdGluZy9pbnB1dC9wYXNzd29y
ZC1lY2hvLXBhc3Nub2RlMi5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE4IEBACis8aHRt
bD4KKzxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvcGFzc3dvcmQtZWNoby5qcyIgbGFuZ3VhZ2U9Ikph
dmFTY3JpcHQiIHR5cGU9InRleHQvSmF2YVNjcmlwdCIgPjwvc2NyaXB0PgorPHNjcmlwdCBsYW5n
dWFnZT0iamF2YXNjcmlwdCIgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KK3ZhciBteXRlc3RzID0g
WworICAgICAgICAvL2Zvcm1hdDogW3ByZWVkaXQxLCBwcmVlZGl0MiwuLi4sY29tbWl0X3RleHRd
LCBzZWN1cmVkX3JpZ2h0X2FmdGVyPywgc2VjdXJlZF9hZnRlcl9kZWxheT8gY2hlY2s/CisgICAg
ICAgIFtbJ2EnXSwgZmFsc2UsIHRydWUsIGZhbHNlXSwKKyAgICAgICAgW1snZiddLCBmYWxzZSwg
dHJ1ZSwgdHJ1ZV0sICAgICAgICAgICAgIC8vIHRlc3QgcGFzc3dvcmQgKHdoZW4gbW9yZSB0aGFu
IDEgY2hhcikgaXMgb25seSBzZWN1cmVkIGFmdGVyIGEgZGVsYXkocmVndWxhcikuCisgICAgICAg
IFtbJzMnLCczJywnMycsJ2YnXSwgZmFsc2UsIHRydWUsIHRydWVdLCAgLy8gdGVzdCBwYXNzd29y
ZCAod2hlbiBtb3JlIHRoYW4gMSBjaGFyKSBpcyBvbmx5IHNlY3VyZWQgYWZ0ZXIgYSBkZWxheShp
bWUpLgorICAgIF07Cis8L3NjcmlwdD4KKzxib2R5IG9ubG9hZD1pbml0KG15dGVzdHMpPgorCis8
cD5UZXN0cyBpZiBpbnB1dCBjaGFycyBhcmUgc2VjdXJlZCBjb3JyZWN0bHkKKzxpbnB1dCB0eXBl
PSdwYXNzd29yZCcgaWQ9J3Rlc3Rub2RlJyAvPgorPHVsIGlkPSJjb25zb2xlIj48L3VsPgorPC9i
b2R5PgorPC9odG1sPgorCkluZGV4OiBMYXlvdXRUZXN0cy9lZGl0aW5nL2lucHV0L3Bhc3N3b3Jk
LWVjaG8tcGFzc25vZGUzLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9l
ZGl0aW5nL2lucHV0L3Bhc3N3b3JkLWVjaG8tcGFzc25vZGUzLWV4cGVjdGVkLnR4dAkocmV2aXNp
b24gMCkKKysrIExheW91dFRlc3RzL2VkaXRpbmcvaW5wdXQvcGFzc3dvcmQtZWNoby1wYXNzbm9k
ZTMtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQgQEAKK1Rlc3RzIGlmIGlu
cHV0IGNoYXJzIGFyZSBzZWN1cmVkIGNvcnJlY3RseSAKKworU3VjY2Vzczogc2VjdXJlZCByaWdo
dCBhZnRlci4gZXhwZWN0ZWQ9dHJ1ZSwgYWN0dWFsPXRydWUKK1N1Y2Nlc3M6IHNlY3VyZWQgYWZ0
ZXIgZGVsYXkuIGV4cGVjdGVkPXRydWUsIGFjdHVhbD10cnVlCkluZGV4OiBMYXlvdXRUZXN0cy9l
ZGl0aW5nL2lucHV0L3Bhc3N3b3JkLWVjaG8tcGFzc25vZGUzLmh0bWwKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
TGF5b3V0VGVzdHMvZWRpdGluZy9pbnB1dC9wYXNzd29yZC1lY2hvLXBhc3Nub2RlMy5odG1sCShy
ZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZWRpdGluZy9pbnB1dC9wYXNzd29yZC1lY2hvLXBh
c3Nub2RlMy5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE3IEBACis8aHRtbD4KKzxzY3Jp
cHQgc3JjPSJyZXNvdXJjZXMvcGFzc3dvcmQtZWNoby5qcyIgbGFuZ3VhZ2U9IkphdmFTY3JpcHQi
IHR5cGU9InRleHQvSmF2YVNjcmlwdCIgPjwvc2NyaXB0PgorPHNjcmlwdCBsYW5ndWFnZT0iamF2
YXNjcmlwdCIgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KK3ZhciBteXRlc3RzID0gWworICAgICAg
ICAvL2Zvcm1hdDogW3ByZWVkaXQxLCBwcmVlZGl0MiwuLi4sY29tbWl0X3RleHRdLCBzZWN1cmVk
X3JpZ2h0X2FmdGVyPywgc2VjdXJlZF9hZnRlcl9kZWxheT8gY2hlY2s/CisgICAgICAgIFtbJ2En
XSwgZmFsc2UsIHRydWUsIGZhbHNlXSwKKyAgICAgICAgW1snMycsJzMnLCczJywnZiddLCBmYWxz
ZSwgdHJ1ZSwgZmFsc2VdLAorICAgICAgICBbWydiYWNrc3BhY2UnXSwgdHJ1ZSwgdHJ1ZSwgdHJ1
ZV0sICAgICAgIC8vIHRlc3QgcGFzc3dvcmQgaXMgc2VjdXJlZCBhbGwgdGhlIHRpbWUgd2hlbiBk
ZWxldGluZy4KKyAgICBdOworPC9zY3JpcHQ+Cis8Ym9keSBvbmxvYWQ9aW5pdChteXRlc3RzKT4K
KworPHA+VGVzdHMgaWYgaW5wdXQgY2hhcnMgYXJlIHNlY3VyZWQgY29ycmVjdGx5Cis8aW5wdXQg
dHlwZT0ncGFzc3dvcmQnIGlkPSd0ZXN0bm9kZScgLz4KKzx1bCBpZD0iY29uc29sZSI+PC91bD4K
KzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IExheW91dFRlc3RzL2VkaXRpbmcvaW5wdXQvcGFzc3dv
cmQtZWNoby1wYXNzbm9kZS1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMv
ZWRpdGluZy9pbnB1dC9wYXNzd29yZC1lY2hvLXBhc3Nub2RlLWV4cGVjdGVkLnR4dAkocmV2aXNp
b24gMCkKKysrIExheW91dFRlc3RzL2VkaXRpbmcvaW5wdXQvcGFzc3dvcmQtZWNoby1wYXNzbm9k
ZS1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNiBAQAorVGVzdHMgaWYgaW5w
dXQgY2hhcnMgYXJlIHNlY3VyZWQgY29ycmVjdGx5IAorCitFcnJvcjogc2VjdXJlZCByaWdodCBh
ZnRlci4gZXhwZWN0ZWQ9ZmFsc2UsIGFjdHVhbD10cnVlCitTdWNjZXNzOiBzZWN1cmVkIGFmdGVy
IGRlbGF5LiBleHBlY3RlZD10cnVlLCBhY3R1YWw9dHJ1ZQorRXJyb3I6IHNlY3VyZWQgcmlnaHQg
YWZ0ZXIuIGV4cGVjdGVkPWZhbHNlLCBhY3R1YWw9dHJ1ZQorU3VjY2Vzczogc2VjdXJlZCBhZnRl
ciBkZWxheS4gZXhwZWN0ZWQ9dHJ1ZSwgYWN0dWFsPXRydWUKSW5kZXg6IExheW91dFRlc3RzL2Vk
aXRpbmcvaW5wdXQvcGFzc3dvcmQtZWNoby1wYXNzbm9kZS5odG1sCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExh
eW91dFRlc3RzL2VkaXRpbmcvaW5wdXQvcGFzc3dvcmQtZWNoby1wYXNzbm9kZS5odG1sCShyZXZp
c2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZWRpdGluZy9pbnB1dC9wYXNzd29yZC1lY2hvLXBhc3Nu
b2RlLmh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTcgQEAKKzxodG1sPgorPHNjcmlwdCBz
cmM9InJlc291cmNlcy9wYXNzd29yZC1lY2hvLmpzIiBsYW5ndWFnZT0iSmF2YVNjcmlwdCIgdHlw
ZT0idGV4dC9KYXZhU2NyaXB0IiA+PC9zY3JpcHQ+Cis8c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2Ny
aXB0IiB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgordmFyIG15dGVzdHMgPSBbCisgICAgICAgIC8v
Zm9ybWF0OiBbcHJlZWRpdDEsIHByZWVkaXQyLC4uLixjb21taXRfdGV4dF0sIHNlY3VyZWRfcmln
aHRfYWZ0ZXI/LCBzZWN1cmVkX2FmdGVyX2RlbGF5PyBjaGVjaz8KKyAgICAgICAgW1snYSddLCBm
YWxzZSwgdHJ1ZSwgdHJ1ZV0sICAgICAgICAgLy8gdGVzdCBwYXNzd29yZCAod2hlbiBvbmx5IDEg
Y2hhcikgaXMgb25seSBzZWN1cmVkIGFmdGVyIGEgZGVsYXkocmVndWxhcikuCisgICAgICAgIFtb
JzInLCcyJywnYiddLCBmYWxzZSwgdHJ1ZSwgdHJ1ZV0sIC8vIHRlc3QgcGFzc3dvcmQgKHdoZW4g
b25seSAxIGNoYXIpIGlzIG9ubHkgc2VjdXJlZCBhZnRlciBhIGRlbGF5KGltZSkuCisgICAgXTsK
Kzwvc2NyaXB0PgorPGJvZHkgb25sb2FkPWluaXQobXl0ZXN0cyk+CisKKzxwPlRlc3RzIGlmIGlu
cHV0IGNoYXJzIGFyZSBzZWN1cmVkIGNvcnJlY3RseQorPGlucHV0IHR5cGU9J3Bhc3N3b3JkJyBp
ZD0ndGVzdG5vZGUnIC8+Cis8dWwgaWQ9ImNvbnNvbGUiPjwvdWw+Cis8L2JvZHk+Cis8L2h0bWw+
CisKSW5kZXg6IExheW91dFRlc3RzL2VkaXRpbmcvaW5wdXQvcGFzc3dvcmQtZWNoby10ZXh0bm9k
ZS1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZWRpdGluZy9pbnB1dC9w
YXNzd29yZC1lY2hvLXRleHRub2RlLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91
dFRlc3RzL2VkaXRpbmcvaW5wdXQvcGFzc3dvcmQtZWNoby10ZXh0bm9kZS1leHBlY3RlZC50eHQJ
KHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNiBAQAorVGVzdCB0ZXh0IGlucHV0IGlzIG5ldmVyIHNl
Y3VyZWQuIAorCitTdWNjZXNzOiBzZWN1cmVkIHJpZ2h0IGFmdGVyLiBleHBlY3RlZD1mYWxzZSwg
YWN0dWFsPWZhbHNlCitTdWNjZXNzOiBzZWN1cmVkIGFmdGVyIGRlbGF5LiBleHBlY3RlZD1mYWxz
ZSwgYWN0dWFsPWZhbHNlCitTdWNjZXNzOiBzZWN1cmVkIHJpZ2h0IGFmdGVyLiBleHBlY3RlZD1m
YWxzZSwgYWN0dWFsPWZhbHNlCitTdWNjZXNzOiBzZWN1cmVkIGFmdGVyIGRlbGF5LiBleHBlY3Rl
ZD1mYWxzZSwgYWN0dWFsPWZhbHNlCkluZGV4OiBMYXlvdXRUZXN0cy9lZGl0aW5nL2lucHV0L3Bh
c3N3b3JkLWVjaG8tdGV4dG5vZGUuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9lZGl0
aW5nL2lucHV0L3Bhc3N3b3JkLWVjaG8tdGV4dG5vZGUuaHRtbAkocmV2aXNpb24gMCkKKysrIExh
eW91dFRlc3RzL2VkaXRpbmcvaW5wdXQvcGFzc3dvcmQtZWNoby10ZXh0bm9kZS5odG1sCShyZXZp
c2lvbiAwKQpAQCAtMCwwICsxLDE3IEBACis8aHRtbD4KKzxzY3JpcHQgc3JjPSJyZXNvdXJjZXMv
cGFzc3dvcmQtZWNoby5qcyIgbGFuZ3VhZ2U9IkphdmFTY3JpcHQiIHR5cGU9InRleHQvSmF2YVNj
cmlwdCIgPjwvc2NyaXB0PgorPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCIgdHlwZT0idGV4
dC9qYXZhc2NyaXB0Ij4KK3ZhciBteXRlc3RzID0gWworICAgICAgICAvL2Zvcm1hdDogW3ByZWVk
aXQxLCBwcmVlZGl0MiwuLi4sY29tbWl0X3RleHRdLCBzZWN1cmVkX3JpZ2h0X2FmdGVyPywgc2Vj
dXJlZF9hZnRlcl9kZWxheT8gY2hlY2s/CisgICAgICAgIFtbJ2EnXSwgZmFsc2UsIGZhbHNlLCB0
cnVlXSwgICAgICAgICAgICAvLyB0ZXN0IHRleHQgaW5wdXQgaXMgbmV2ZXIgc2VjdXJlZCwgKHJl
Z3VsYXIgaW5wdXQpLgorICAgICAgICBbWycyJywnMicsJ2InXSwgZmFsc2UsIGZhbHNlLCB0cnVl
XSwgICAgLy8gdGVzdCB0ZXh0IGlucHV0IGlzIG5ldmVyIHNlY3VyZWQgKGltZSBpbnB1dCkuCisg
ICAgXTsKKzwvc2NyaXB0PgorPGJvZHkgb25sb2FkPWluaXQobXl0ZXN0cyk+CisKKzxwPlRlc3Qg
dGV4dCBpbnB1dCBpcyBuZXZlciBzZWN1cmVkLgorPGlucHV0IHR5cGU9J3RleHQnIGlkPSd0ZXN0
bm9kZScgLz4KKzx1bCBpZD0iY29uc29sZSI+PC91bD4KKzwvYm9keT4KKzwvaHRtbD4KKwpJbmRl
eDogTGF5b3V0VGVzdHMvZWRpdGluZy9pbnB1dC9yZXNvdXJjZXMvcGFzc3dvcmQtZWNoby5qcwo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9lZGl0aW5nL2lucHV0L3Jlc291cmNlcy9wYXNzd29y
ZC1lY2hvLmpzCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZWRpdGluZy9pbnB1dC9yZXNv
dXJjZXMvcGFzc3dvcmQtZWNoby5qcwkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw4OSBAQAordmFy
IHRlc3Rub2RlOworCitmdW5jdGlvbiBzZWN1cmVDaGFyKCkKK3sKKyAgICB2YXIgZWxlbWVudCA9
IHRlc3Rub2RlOworICAgIHZhciBzZWN1cmVjaGFyID0gZG9jdW1lbnQuZGVmYXVsdFZpZXcuZ2V0
Q29tcHV0ZWRTdHlsZShlbGVtZW50LCAiIikuZ2V0UHJvcGVydHlWYWx1ZSgiLXdlYmtpdC10ZXh0
LXNlY3VyaXR5Iik7CisgICAgc3dpdGNoKHNlY3VyZWNoYXIpIHsKKyAgICBjYXNlICJzcXVhcmUi
OgorICAgICAgICByZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZSgweDI1QTApOworICAgIGNhc2Ug
ImRpc2MiOgorICAgICAgICByZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZSgweDIwMjIpOworICAg
IGNhc2UgImNpcmNsZSI6CisgICAgICAgIHJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKDB4MjVF
Nik7CisgICAgfQorfQorCitmdW5jdGlvbiBzZWN1cmVUZXh0KHRleHRMZW5ndGgpCit7CisgICAg
dmFyIHRleHQgPSAiIjsKKyAgICBmb3IgKHZhciBjb3VudGVyID0gMDsgY291bnRlciA8IHRleHRM
ZW5ndGg7IGNvdW50ZXIrKykKKyAgICAgICAgdGV4dCArPSBzZWN1cmVDaGFyKCk7CisgICAgcmV0
dXJuIHRleHQ7Cit9CisKK2Z1bmN0aW9uIGxvZyhtc2cpCit7CisgICAgdmFyIGNvbnNvbGUgPSBk
b2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY29uc29sZSIpOworICAgIHZhciBsaSA9IGRvY3VtZW50
LmNyZWF0ZUVsZW1lbnQoImxpIik7CisgICAgbGkuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRl
VGV4dE5vZGUobXNnKSk7CisgICAgY29uc29sZS5hcHBlbmRDaGlsZChsaSk7Cit9CisKK2Z1bmN0
aW9uIGFzc2VydChleHBlY3RlZCwgYWN0dWFsLCBtc2cpCit7CisgICAgaWYgKGV4cGVjdGVkICE9
IGFjdHVhbCkKKyAgICAgICAgbG9nKCJFcnJvcjogIiArIG1zZyArICIgZXhwZWN0ZWQ9IiArIGV4
cGVjdGVkICsgIiwgYWN0dWFsPSIgKyBhY3R1YWwpOworICAgIGVsc2UKKyAgICAgICAgbG9nKCJT
dWNjZXNzOiAiICsgbXNnICsgIiBleHBlY3RlZD0iICsgZXhwZWN0ZWQgKyAiLCBhY3R1YWw9IiAr
IGFjdHVhbCk7Cit9CisKK2Z1bmN0aW9uIHJ1bih0ZXN0cywgdGVzdElkeCkKK3sKKyAgICB2YXIg
ZXhwZWN0ZWRTZWN1cmVUZXh0TGVuOworICAgIGlmICh0ZXN0SWR4ID49IDApIHsKKyAgICAgICAg
dGV4dElucHV0Q29udHJvbGxlci5kb0NvbW1hbmQoIm1vdmVGb3J3YXJkOiIpOworICAgICAgICBp
Zih0ZXN0c1t0ZXN0SWR4XVszXSkKKyAgICAgICAgICAgIGFzc2VydCh0ZXN0c1t0ZXN0SWR4XVsy
XSwgd2luZG93LmZpbmQoc2VjdXJlVGV4dCh0ZXN0bm9kZS52YWx1ZS5sZW5ndGgpLCBmYWxzZSwg
dHJ1ZSksICJzZWN1cmVkIGFmdGVyIGRlbGF5LiIpOworICAgIH0KKyAgICB0ZXN0SWR4Kys7Cisg
ICAgaWYgKHRlc3RJZHggPj0gdGVzdHMubGVuZ3RoKSB7CisgICAgICAgIGxheW91dFRlc3RDb250
cm9sbGVyLm5vdGlmeURvbmUoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHRlc3Ru
b2RlLmZvY3VzKCk7CisgICAgdGV4dElucHV0Q29udHJvbGxlci5kb0NvbW1hbmQoIm1vdmVGb3J3
YXJkOiIpOworCisgICAgdmFyIGNoYXJTZXF1ZW5jZSA9IHRlc3RzW3Rlc3RJZHhdWzBdOworICAg
IGZvciAodmFyIGkgPSAwOyBpIDwgY2hhclNlcXVlbmNlLmxlbmd0aCAtIDE7IGkrKykgeworICAg
ICAgICB0ZXh0SW5wdXRDb250cm9sbGVyLnNldE1hcmtlZFRleHQoY2hhclNlcXVlbmNlW2ldLCB0
ZXN0bm9kZS52YWx1ZS5sZW5ndGgsIHRlc3Rub2RlLnZhbHVlLmxlbmd0aCk7CisgICAgfQorICAg
IGlmIChjaGFyU2VxdWVuY2VbY2hhclNlcXVlbmNlLmxlbmd0aCAtIDFdID09ICJiYWNrc3BhY2Ui
KQorICAgICAgICB0ZXh0SW5wdXRDb250cm9sbGVyLmRvQ29tbWFuZCgiZGVsZXRlQmFja3dhcmQ6
Iik7CisgICAgZWxzZQorICAgICAgICB0ZXh0SW5wdXRDb250cm9sbGVyLmluc2VydFRleHQoY2hh
clNlcXVlbmNlW2NoYXJTZXF1ZW5jZS5sZW5ndGggLSAxXSk7CisKKyAgICBpZih0ZXN0c1t0ZXN0
SWR4XVszXSkKKyAgICAgICAgYXNzZXJ0KHRlc3RzW3Rlc3RJZHhdWzFdLCB3aW5kb3cuZmluZChz
ZWN1cmVUZXh0KHRlc3Rub2RlLnZhbHVlLmxlbmd0aCksIGZhbHNlLCB0cnVlKSwgInNlY3VyZWQg
cmlnaHQgYWZ0ZXIuIik7CisKKyAgICBpZih0ZXN0c1t0ZXN0SWR4XVszXSkKKyAgICAgICAgd2lu
ZG93LnNldFRpbWVvdXQoZnVuY3Rpb24oKXsgcnVuKHRlc3RzLCB0ZXN0SWR4KTsgfSwgNjAwKTsK
KyAgICBlbHNlCisgICAgICAgIHdpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7IHJ1bih0ZXN0
cywgdGVzdElkeCk7IH0sIDApOworfQorCitmdW5jdGlvbiBpbml0KHRlc3RzKQoreworICAgIGlm
ICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIgJiYgd2luZG93LnRleHRJbnB1dENvbnRyb2xs
ZXIpIHsKKyAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4dCgpOworICAgICAg
ICBsYXlvdXRUZXN0Q29udHJvbGxlci53YWl0VW50aWxEb25lKCk7CisgICAgICAgIGlmICh3aW5k
b3cuaW50ZXJuYWxzKSB7CisgICAgICAgICAgICB3aW5kb3cuaW50ZXJuYWxzLnNldFBhc3N3b3Jk
RWNob0VuYWJsZWQoZG9jdW1lbnQsIHRydWUpOworICAgICAgICAgICAgd2luZG93LmludGVybmFs
cy5zZXRQYXNzd29yZEVjaG9EdXJhdGlvbihkb2N1bWVudCwgMC4xKTsKKyAgICAgICAgICAgIHRl
c3Rub2RlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rlc3Rub2RlJyk7CisgICAgICAgICAg
ICBydW4odGVzdHMsIC0xKTsKKyAgICAgICAgfQorICAgIH0KK30KKwpJbmRleDogTGF5b3V0VGVz
dHMvcGxhdGZvcm0vd2syL1NraXBwZWQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvcGxhdGZv
cm0vd2syL1NraXBwZWQJKHJldmlzaW9uIDkyOTU2KQorKysgTGF5b3V0VGVzdHMvcGxhdGZvcm0v
d2syL1NraXBwZWQJKHdvcmtpbmcgY29weSkKQEAgLTE4NDYsNiArMTg0NiwxMyBAQCBlZGl0aW5n
L3NwZWxsaW5nL3NwZWxsY2hlY2staW5wdXQtc2VhcmNoCiAjIG1pc3Npbmcgd2luZG93LmludGVy
bmFscy5jcmVhdGVTaGFkb3dDb250ZW50RWxlbWVudAogZmFzdC9kb20vc2hhZG93L2NyZWF0ZS1j
b250ZW50LWVsZW1lbnQuaHRtbAogCisjIFdlYktpdFRlc3RSdW5uZXIgbmVlZHMgbGF5b3V0VGVz
dENvbnRyb2xsZXIuc2V0UGFzc3dvcmRFY2hvRW5hYmxlZAorIyBXZWJLaXRUZXN0UnVubmVyIG5l
ZWRzIGxheW91dFRlc3RDb250cm9sbGVyLnNldFBhc3N3b3JkRWNob0R1cmF0aW9uCitlZGl0aW5n
L2lucHV0L3Bhc3N3b3JkLWVjaG8tcGFzc25vZGUuaHRtbAorZWRpdGluZy9pbnB1dC9wYXNzd29y
ZC1lY2hvLXBhc3Nub2RlMi5odG1sCitlZGl0aW5nL2lucHV0L3Bhc3N3b3JkLWVjaG8tcGFzc25v
ZGUzLmh0bWwKK2VkaXRpbmcvaW5wdXQvcGFzc3dvcmQtZWNoby10ZXh0bm9kZS5odG1sCisKICMj
IyBFTkQgT0YgKDIpIENsYXNzaWZpZWQgZmFpbHVyZXMgd2l0aG91dCBidWcgcmVwb3J0cyAoeWV0
KQogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>104240</attachid>
            <date>2011-08-17 14:16:25 -0700</date>
            <delta_ts>2011-08-18 03:20:03 -0700</delta_ts>
            <desc>patch 3</desc>
            <filename>66052_3.patch</filename>
            <type>text/plain</type>
            <size>20215</size>
            <attacher name="Chang Shu">cshu</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDkzMjM5KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzMgQEAKKzIwMTEtMDgtMTcgIENoYW5nIFNo
dSAgPGNzaHVAd2Via2l0Lm9yZz4KKworICAgICAgICBBZGQgc3VwcG9ydCBvZiBzZXRQYXNzd29y
ZEVjaG9FbmFibGVkIGFuZCBzZXRQYXNzd29yZEVjaG9EdXJhdGlvbiBmb3IgcGFzc3dvcmQgZWNo
byBmZWF0dXJlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD02NjA1MgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IEFkZGVkIHJ1bnRpbWUgc2V0dGluZ3MgaW4gV2ViQ29yZS4KKyAgICAgICAgQWRkZWQgc3VwcG9y
dCBpbiB3aW5kb3cuaW50ZXJuYWxzIGZvciB0ZXN0aW5nLgorCisgICAgICAgIFRlc3RzOiBlZGl0
aW5nL2lucHV0L3Bhc3N3b3JkLWVjaG8tcGFzc25vZGUuaHRtbAorICAgICAgICAgICAgICAgZWRp
dGluZy9pbnB1dC9wYXNzd29yZC1lY2hvLXBhc3Nub2RlMi5odG1sCisgICAgICAgICAgICAgICBl
ZGl0aW5nL2lucHV0L3Bhc3N3b3JkLWVjaG8tcGFzc25vZGUzLmh0bWwKKyAgICAgICAgICAgICAg
IGVkaXRpbmcvaW5wdXQvcGFzc3dvcmQtZWNoby10ZXh0bm9kZS5odG1sCisKKyAgICAgICAgKiBw
YWdlL1NldHRpbmdzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNldHRpbmdzOjpTZXR0aW5ncyk6
CisgICAgICAgICogcGFnZS9TZXR0aW5ncy5oOgorICAgICAgICAoV2ViQ29yZTo6U2V0dGluZ3M6
OnNldFBhc3N3b3JkRWNob0VuYWJsZWQpOgorICAgICAgICAoV2ViQ29yZTo6U2V0dGluZ3M6OnBh
c3N3b3JkRWNob0VuYWJsZWQpOgorICAgICAgICAoV2ViQ29yZTo6U2V0dGluZ3M6OnNldFBhc3N3
b3JkRWNob0R1cmF0aW9uSW5TZWNvbmRzKToKKyAgICAgICAgKFdlYkNvcmU6OlNldHRpbmdzOjpw
YXNzd29yZEVjaG9EdXJhdGlvbkluU2Vjb25kcyk6CisgICAgICAgICogdGVzdGluZy9JbnRlcm5h
bHMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW50ZXJuYWxzOjpJbnRlcm5hbHMpOgorICAgICAg
ICAoV2ViQ29yZTo6SW50ZXJuYWxzOjpzZXRQYXNzd29yZEVjaG9FbmFibGVkKToKKyAgICAgICAg
KFdlYkNvcmU6OkludGVybmFsczo6c2V0UGFzc3dvcmRFY2hvRHVyYXRpb25JblNlY29uZHMpOgor
ICAgICAgICAoV2ViQ29yZTo6SW50ZXJuYWxzOjpyZXNldCk6CisgICAgICAgICogdGVzdGluZy9J
bnRlcm5hbHMuaDoKKyAgICAgICAgKiB0ZXN0aW5nL0ludGVybmFscy5pZGw6CisKIDIwMTEtMDgt
MTcgIEphbWVzIFJvYmluc29uICA8amFtZXNyQGNocm9taXVtLm9yZz4KIAogICAgICAgICBbY2hy
b21pdW1dIENyYXNoIGlmIGNvbXBvc2l0aW5nIGlzIGRpc2FibGVkIGR1cmluZyB1cGRhdGVMYXll
cnMoKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9TZXR0aW5ncy5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcGFnZS9TZXR0aW5ncy5jcHAJKHJldmlzaW9uIDkzMjM1KQorKysg
U291cmNlL1dlYkNvcmUvcGFnZS9TZXR0aW5ncy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwOCw2
ICsxMDgsNyBAQCBTZXR0aW5nczo6U2V0dGluZ3MoUGFnZSogcGFnZSkKICAgICA6IG1fcGFnZShw
YWdlKQogICAgICwgbV9lZGl0YWJsZUxpbmtCZWhhdmlvcihFZGl0YWJsZUxpbmtEZWZhdWx0QmVo
YXZpb3IpCiAgICAgLCBtX3RleHREaXJlY3Rpb25TdWJtZW51SW5jbHVzaW9uQmVoYXZpb3IoVGV4
dERpcmVjdGlvblN1Ym1lbnVBdXRvbWF0aWNhbGx5SW5jbHVkZWQpCisgICAgLCBtX3Bhc3N3b3Jk
RWNob0R1cmF0aW9uSW5TZWNvbmRzKDEpCiAgICAgLCBtX21pbmltdW1Gb250U2l6ZSgwKQogICAg
ICwgbV9taW5pbXVtTG9naWNhbEZvbnRTaXplKDApCiAgICAgLCBtX2RlZmF1bHRGb250U2l6ZSgw
KQpAQCAtMjE0LDYgKzIxNSw3IEBAIFNldHRpbmdzOjpTZXR0aW5ncyhQYWdlKiBwYWdlKQogI2Vu
ZGlmCiAgICAgLCBtX21lZGlhUGxheWJhY2tSZXF1aXJlc1VzZXJHZXN0dXJlKGZhbHNlKQogICAg
ICwgbV9tZWRpYVBsYXliYWNrQWxsb3dzSW5saW5lKHRydWUpCisgICAgLCBtX3Bhc3N3b3JkRWNo
b0VuYWJsZWQoZmFsc2UpCiAgICAgLCBtX2xvYWRzSW1hZ2VzQXV0b21hdGljYWxseVRpbWVyKHRo
aXMsICZTZXR0aW5nczo6bG9hZHNJbWFnZXNBdXRvbWF0aWNhbGx5VGltZXJGaXJlZCkKIHsKICAg
ICAvLyBBIEZyYW1lIG1heSBub3QgaGF2ZSBiZWVuIGNyZWF0ZWQgeWV0LCBzbyB3ZSBpbml0aWFs
aXplIHRoZSBBdG9taWNTdHJpbmcgCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL1NldHRpbmdz
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9TZXR0aW5ncy5oCShyZXZpc2lv
biA5MzIzNSkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvU2V0dGluZ3MuaAkod29ya2luZyBjb3B5
KQpAQCAtNDY0LDYgKzQ2NCwxMiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHZvaWQg
c2V0TWVkaWFQbGF5YmFja0FsbG93c0lubGluZShib29sIGZsYWcpIHsgbV9tZWRpYVBsYXliYWNr
QWxsb3dzSW5saW5lID0gZmxhZzsgfTsKICAgICAgICAgYm9vbCBtZWRpYVBsYXliYWNrQWxsb3dz
SW5saW5lKCkgY29uc3QgeyByZXR1cm4gbV9tZWRpYVBsYXliYWNrQWxsb3dzSW5saW5lOyB9CiAK
KyAgICAgICAgdm9pZCBzZXRQYXNzd29yZEVjaG9FbmFibGVkKGJvb2wgZmxhZykgeyBtX3Bhc3N3
b3JkRWNob0VuYWJsZWQgPSBmbGFnOyB9CisgICAgICAgIGJvb2wgcGFzc3dvcmRFY2hvRW5hYmxl
ZCgpIGNvbnN0IHsgcmV0dXJuIG1fcGFzc3dvcmRFY2hvRW5hYmxlZDsgfQorCisgICAgICAgIHZv
aWQgc2V0UGFzc3dvcmRFY2hvRHVyYXRpb25JblNlY29uZHMoZG91YmxlIGR1cmF0aW9uSW5TZWNv
bmRzKSB7IG1fcGFzc3dvcmRFY2hvRHVyYXRpb25JblNlY29uZHMgPSBkdXJhdGlvbkluU2Vjb25k
czsgfQorICAgICAgICBkb3VibGUgcGFzc3dvcmRFY2hvRHVyYXRpb25JblNlY29uZHMoKSBjb25z
dCB7IHJldHVybiBtX3Bhc3N3b3JkRWNob0R1cmF0aW9uSW5TZWNvbmRzOyB9CisKICAgICBwcml2
YXRlOgogICAgICAgICBQYWdlKiBtX3BhZ2U7CiAKQEAgLTQ4MCw2ICs0ODYsNyBAQCBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAgICAgICAgIFNjcmlwdEZvbnRGYW1pbHlNYXAgbV9waWN0b2dyYXBoRm9u
dEZhbWlseU1hcDsKICAgICAgICAgRWRpdGFibGVMaW5rQmVoYXZpb3IgbV9lZGl0YWJsZUxpbmtC
ZWhhdmlvcjsKICAgICAgICAgVGV4dERpcmVjdGlvblN1Ym1lbnVJbmNsdXNpb25CZWhhdmlvciBt
X3RleHREaXJlY3Rpb25TdWJtZW51SW5jbHVzaW9uQmVoYXZpb3I7CisgICAgICAgIGRvdWJsZSBt
X3Bhc3N3b3JkRWNob0R1cmF0aW9uSW5TZWNvbmRzOwogICAgICAgICBpbnQgbV9taW5pbXVtRm9u
dFNpemU7CiAgICAgICAgIGludCBtX21pbmltdW1Mb2dpY2FsRm9udFNpemU7CiAgICAgICAgIGlu
dCBtX2RlZmF1bHRGb250U2l6ZTsKQEAgLTU4NCw2ICs1OTEsNyBAQCBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAjZW5kaWYKICAgICAgICAgYm9vbCBtX21lZGlhUGxheWJhY2tSZXF1aXJlc1VzZXJHZXN0
dXJlIDogMTsKICAgICAgICAgYm9vbCBtX21lZGlhUGxheWJhY2tBbGxvd3NJbmxpbmUgOiAxOwor
ICAgICAgICBib29sIG1fcGFzc3dvcmRFY2hvRW5hYmxlZCA6IDE7CiAKICAgICAgICAgVGltZXI8
U2V0dGluZ3M+IG1fbG9hZHNJbWFnZXNBdXRvbWF0aWNhbGx5VGltZXI7CiAgICAgICAgIHZvaWQg
bG9hZHNJbWFnZXNBdXRvbWF0aWNhbGx5VGltZXJGaXJlZChUaW1lcjxTZXR0aW5ncz4qKTsKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5jcHAJKHJldmlzaW9uIDkzMjM1KQorKysg
U291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01
NSw2ICs1NSw4IEBAIEludGVybmFsczo6fkludGVybmFscygpCiB9CiAKIEludGVybmFsczo6SW50
ZXJuYWxzKCkKKyAgICA6IHBhc3N3b3JkRWNob0R1cmF0aW9uSW5TZWNvbmRzQmFja2VkVXAoZmFs
c2UpCisgICAgLCBwYXNzd29yZEVjaG9FbmFibGVkQmFja2VkVXAoZmFsc2UpCiB7CiB9CiAKQEAg
LTE5MSw5ICsxOTMsNDQgQEAgdm9pZCBJbnRlcm5hbHM6OnNldEZvcmNlQ29tcG9zaXRpbmdNb2Rl
KAogICAgIGRvY3VtZW50LT5zZXR0aW5ncygpLT5zZXRGb3JjZUNvbXBvc2l0aW5nTW9kZShlbmFi
bGVkKTsKIH0KIAotdm9pZCBJbnRlcm5hbHM6OnJlc2V0KERvY3VtZW50KikKK3ZvaWQgSW50ZXJu
YWxzOjpzZXRQYXNzd29yZEVjaG9FbmFibGVkKERvY3VtZW50KiBkb2N1bWVudCwgYm9vbCBlbmFi
bGVkLCBFeGNlcHRpb25Db2RlJiBlYykKIHsKLS8vIEZJWE1FOiBJbXBsZW1lbnQKKyAgICBpZiAo
IWRvY3VtZW50IHx8ICFkb2N1bWVudC0+c2V0dGluZ3MoKSkgeworICAgICAgICBlYyA9IElOVkFM
SURfQUNDRVNTX0VSUjsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmICghcGFzc3dv
cmRFY2hvRW5hYmxlZEJhY2tlZFVwKSB7CisgICAgICAgIHBhc3N3b3JkRWNob0VuYWJsZWRCYWNr
dXAgPSBlbmFibGVkOworICAgICAgICBwYXNzd29yZEVjaG9FbmFibGVkQmFja2VkVXAgPSB0cnVl
OworICAgIH0KKyAgICBkb2N1bWVudC0+c2V0dGluZ3MoKS0+c2V0UGFzc3dvcmRFY2hvRW5hYmxl
ZChlbmFibGVkKTsKK30KKwordm9pZCBJbnRlcm5hbHM6OnNldFBhc3N3b3JkRWNob0R1cmF0aW9u
SW5TZWNvbmRzKERvY3VtZW50KiBkb2N1bWVudCwgZG91YmxlIGR1cmF0aW9uSW5TZWNvbmRzLCBF
eGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBpZiAoIWRvY3VtZW50IHx8ICFkb2N1bWVudC0+c2V0
dGluZ3MoKSkgeworICAgICAgICBlYyA9IElOVkFMSURfQUNDRVNTX0VSUjsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKworICAgIGlmICghcGFzc3dvcmRFY2hvRHVyYXRpb25JblNlY29uZHNCYWNr
ZWRVcCkgeworICAgICAgICBwYXNzd29yZEVjaG9EdXJhdGlvbkluU2Vjb25kc0JhY2t1cCA9IGR1
cmF0aW9uSW5TZWNvbmRzOworICAgICAgICBwYXNzd29yZEVjaG9EdXJhdGlvbkluU2Vjb25kc0Jh
Y2tlZFVwID0gdHJ1ZTsKKyAgICB9CisgICAgZG9jdW1lbnQtPnNldHRpbmdzKCktPnNldFBhc3N3
b3JkRWNob0R1cmF0aW9uSW5TZWNvbmRzKGR1cmF0aW9uSW5TZWNvbmRzKTsKK30KKwordm9pZCBJ
bnRlcm5hbHM6OnJlc2V0KERvY3VtZW50KiBkb2N1bWVudCkKK3sKKyAgICBpZiAoIWRvY3VtZW50
IHx8ICFkb2N1bWVudC0+c2V0dGluZ3MoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKHBh
c3N3b3JkRWNob0R1cmF0aW9uSW5TZWNvbmRzQmFja2VkVXApCisgICAgICAgIGRvY3VtZW50LT5z
ZXR0aW5ncygpLT5zZXRQYXNzd29yZEVjaG9EdXJhdGlvbkluU2Vjb25kcyhwYXNzd29yZEVjaG9E
dXJhdGlvbkluU2Vjb25kc0JhY2t1cCk7CisKKyAgICBpZiAocGFzc3dvcmRFY2hvRW5hYmxlZEJh
Y2tlZFVwKQorICAgICAgICBkb2N1bWVudC0+c2V0dGluZ3MoKS0+c2V0UGFzc3dvcmRFY2hvRHVy
YXRpb25JblNlY29uZHMocGFzc3dvcmRFY2hvRW5hYmxlZEJhY2t1cCk7CiB9CiAKIH0KSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuaAkocmV2aXNpb24gOTMyMzUpCisrKyBTb3VyY2Uv
V2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5oCSh3b3JraW5nIGNvcHkpCkBAIC02OSw5ICs2OSwx
OCBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHNldEZvcmNlQ29tcG9zaXRpbmdNb2RlKERvY3VtZW50
KiwgYm9vbCBlbmFibGVkLCBFeGNlcHRpb25Db2RlJik7CiAKKyAgICB2b2lkIHNldFBhc3N3b3Jk
RWNob0VuYWJsZWQoRG9jdW1lbnQqLCBib29sIGVuYWJsZWQsIEV4Y2VwdGlvbkNvZGUmKTsKKyAg
ICB2b2lkIHNldFBhc3N3b3JkRWNob0R1cmF0aW9uSW5TZWNvbmRzKERvY3VtZW50KiwgZG91Ymxl
IGR1cmF0aW9uSW5TZWNvbmRzLCBFeGNlcHRpb25Db2RlJik7CisKICAgICBzdGF0aWMgY29uc3Qg
Y2hhciogaW50ZXJuYWxzSWQ7CisKIHByaXZhdGU6CiAgICAgSW50ZXJuYWxzKCk7CisKKyAgICBk
b3VibGUgcGFzc3dvcmRFY2hvRHVyYXRpb25JblNlY29uZHNCYWNrdXA7CisgICAgYm9vbCBwYXNz
d29yZEVjaG9FbmFibGVkQmFja3VwIDogMTsKKyAgICBib29sIHBhc3N3b3JkRWNob0R1cmF0aW9u
SW5TZWNvbmRzQmFja2VkVXAgOiAxOworICAgIGJvb2wgcGFzc3dvcmRFY2hvRW5hYmxlZEJhY2tl
ZFVwIDogMTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmlkbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS90
ZXN0aW5nL0ludGVybmFscy5pZGwJKHJldmlzaW9uIDkzMjM1KQorKysgU291cmNlL1dlYkNvcmUv
dGVzdGluZy9JbnRlcm5hbHMuaWRsCSh3b3JraW5nIGNvcHkpCkBAIC00NCw2ICs0NCw5IEBAIG1v
ZHVsZSB3aW5kb3cgewogICAgICAgICBDbGllbnRSZWN0IGJvdW5kaW5nQm94KGluIEVsZW1lbnQg
ZWxlbWVudCkgcmFpc2VzKERPTUV4Y2VwdGlvbik7CiAKICAgICAgICAgdm9pZCBzZXRGb3JjZUNv
bXBvc2l0aW5nTW9kZShpbiBEb2N1bWVudCBkb2N1bWVudCwgaW4gYm9vbGVhbiBlbmFibGVkKSBy
YWlzZXMoRE9NRXhjZXB0aW9uKTsKKworICAgICAgICB2b2lkIHNldFBhc3N3b3JkRWNob0VuYWJs
ZWQoaW4gRG9jdW1lbnQgZG9jdW1lbnQsIGluIGJvb2xlYW4gZW5hYmxlZCkgcmFpc2VzKERPTUV4
Y2VwdGlvbik7CisgICAgICAgIHZvaWQgc2V0UGFzc3dvcmRFY2hvRHVyYXRpb25JblNlY29uZHMo
aW4gRG9jdW1lbnQgZG9jdW1lbnQsIGluIGRvdWJsZSBkdXJhdGlvbkluU2Vjb25kcykgcmFpc2Vz
KERPTUV4Y2VwdGlvbik7CiAgICAgfTsKIH0KIApJbmRleDogU291cmNlL1dlYktpdC9xdC9DaGFu
Z2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9xdC9DaGFuZ2VMb2cJKHJldmlzaW9u
IDkzMjM5KQorKysgU291cmNlL1dlYktpdC9xdC9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAg
LTEsMyArMSwxNSBAQAorMjAxMS0wOC0xNyAgQ2hhbmcgU2h1ICA8Y3NodUB3ZWJraXQub3JnPgor
CisgICAgICAgIEFkZCBzdXBwb3J0IG9mIHNldFBhc3N3b3JkRWNob0VuYWJsZWQgYW5kIHNldFBh
c3N3b3JkRWNob0R1cmF0aW9uIGZvciBwYXNzd29yZCBlY2hvIGZlYXR1cmUKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY2MDUyCisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgRW5hYmxlIHBhc3N3b3JkIGVjaG8g
dW5kZXIgdGhlIGJ1aWxkIGZsYWcuCisKKyAgICAgICAgKiBBcGkvcXdlYnNldHRpbmdzLmNwcDoK
KyAgICAgICAgKFFXZWJTZXR0aW5nc1ByaXZhdGU6OmFwcGx5KToKKwogMjAxMS0wOC0xNiAgQ2hh
bmcgU2h1ICA8Y3NodUB3ZWJraXQub3JnPgogCiAgICAgICAgIFN1cHBvcnQgcmVzZXQgaW4gV2Vi
Q29yZTo6SW50ZXJuYWxzCkluZGV4OiBTb3VyY2UvV2ViS2l0L3F0L0FwaS9xd2Vic2V0dGluZ3Mu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvcXQvQXBpL3F3ZWJzZXR0aW5ncy5jcHAJ
KHJldmlzaW9uIDkzMjM1KQorKysgU291cmNlL1dlYktpdC9xdC9BcGkvcXdlYnNldHRpbmdzLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjg0LDYgKzI4NCwxMSBAQCB2b2lkIFFXZWJTZXR0aW5nc1By
aXZhdGU6OmFwcGx5KCkKICAgICAgICAgc2V0dGluZ3MtPnNldE5lZWRzU2l0ZVNwZWNpZmljUXVp
cmtzKHZhbHVlKTsKIAogICAgICAgICBzZXR0aW5ncy0+c2V0VXNlc1BhZ2VDYWNoZShXZWJDb3Jl
OjpwYWdlQ2FjaGUoKS0+Y2FwYWNpdHkoKSk7CisKKyNpZiBFTkFCTEUoUEFTU1dPUkRfRUNITykK
KyAgICAgICAgc2V0dGluZ3MtPnNldFBhc3N3b3JkRWNob0VuYWJsZWQodHJ1ZSk7CisgICAgICAg
IHNldHRpbmdzLT5zZXRQYXNzd29yZEVjaG9EdXJhdGlvbkluU2Vjb25kcygxKTsKKyNlbmRpZgog
ICAgIH0gZWxzZSB7CiAgICAgICAgIFFMaXN0PFFXZWJTZXR0aW5nc1ByaXZhdGUqPiBzZXR0aW5n
cyA9ICo6OmFsbFNldHRpbmdzKCk7CiAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc2V0dGlu
Z3MuY291bnQoKTsgKytpKQpJbmRleDogTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIExheW91dFRlc3RzL0NoYW5nZUxvZwkocmV2aXNpb24gOTMyMzkpCisrKyBMYXlvdXRUZXN0
cy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwzMSBAQAorMjAxMS0wOC0xNyAg
Q2hhbmcgU2h1ICA8Y3NodUB3ZWJraXQub3JnPgorCisgICAgICAgIEFkZCBzdXBwb3J0IG9mIHNl
dFBhc3N3b3JkRWNob0VuYWJsZWQgYW5kIHNldFBhc3N3b3JkRWNob0R1cmF0aW9uIGZvciBwYXNz
d29yZCBlY2hvIGZlYXR1cmUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTY2MDUyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgQWRkZWQgdGVzdHMuCisKKyAgICAgICAgKiBlZGl0aW5nL2lucHV0L3Bhc3N3b3Jk
LWVjaG8tcGFzc25vZGUtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBlZGl0aW5nL2lu
cHV0L3Bhc3N3b3JkLWVjaG8tcGFzc25vZGUuaHRtbDogQWRkZWQuCisgICAgICAgICogZWRpdGlu
Zy9pbnB1dC9wYXNzd29yZC1lY2hvLXBhc3Nub2RlMi1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAg
ICAgICAqIGVkaXRpbmcvaW5wdXQvcGFzc3dvcmQtZWNoby1wYXNzbm9kZTIuaHRtbDogQWRkZWQu
CisgICAgICAgICogZWRpdGluZy9pbnB1dC9wYXNzd29yZC1lY2hvLXBhc3Nub2RlMy1leHBlY3Rl
ZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGVkaXRpbmcvaW5wdXQvcGFzc3dvcmQtZWNoby1wYXNz
bm9kZTMuaHRtbDogQWRkZWQuCisgICAgICAgICogZWRpdGluZy9pbnB1dC9wYXNzd29yZC1lY2hv
LXRleHRub2RlLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogZWRpdGluZy9pbnB1dC9w
YXNzd29yZC1lY2hvLXRleHRub2RlLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGVkaXRpbmcvaW5w
dXQvcmVzb3VyY2VzOiBBZGRlZC4KKyAgICAgICAgKiBlZGl0aW5nL2lucHV0L3Jlc291cmNlcy9w
YXNzd29yZC1lY2hvLmpzOiBBZGRlZC4KKyAgICAgICAgKHNlY3VyZUNoYXIpOgorICAgICAgICAo
c2VjdXJlVGV4dCk6CisgICAgICAgIChsb2cpOgorICAgICAgICAoYXNzZXJ0KToKKyAgICAgICAg
KHJ1bi5lbHNlKToKKyAgICAgICAgKHJ1bik6CisgICAgICAgIChpbml0KToKKyAgICAgICAgKiBw
bGF0Zm9ybS93azIvU2tpcHBlZDogTm8gc3VwcG9ydCB5ZXQuCisKIDIwMTEtMDgtMTcgIERhbiBC
ZXJuc3RlaW4gIDxtaXR6QGFwcGxlLmNvbT4KIAogICAgICAgICA8cmRhcjovL3Byb2JsZW0vOTk3
MTI5Mz4gTWlkLXdvcmQgYnJlYWtzIGNhbiBvY2N1ciBpbiB0aGUgbWlkZGxlIG9mIGEgc3Vycm9n
YXRlIHBhaXIKSW5kZXg6IExheW91dFRlc3RzL2VkaXRpbmcvaW5wdXQvcGFzc3dvcmQtZWNoby1w
YXNzbm9kZTItZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2VkaXRpbmcv
aW5wdXQvcGFzc3dvcmQtZWNoby1wYXNzbm9kZTItZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQor
KysgTGF5b3V0VGVzdHMvZWRpdGluZy9pbnB1dC9wYXNzd29yZC1lY2hvLXBhc3Nub2RlMi1leHBl
Y3RlZC50eHQJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNiBAQAorVGVzdHMgaWYgaW5wdXQgY2hh
cnMgYXJlIHNlY3VyZWQgY29ycmVjdGx5IAorCitFcnJvcjogc2VjdXJlZCByaWdodCBhZnRlci4g
ZXhwZWN0ZWQ9ZmFsc2UsIGFjdHVhbD10cnVlCitTdWNjZXNzOiBzZWN1cmVkIGFmdGVyIGRlbGF5
LiBleHBlY3RlZD10cnVlLCBhY3R1YWw9dHJ1ZQorRXJyb3I6IHNlY3VyZWQgcmlnaHQgYWZ0ZXIu
IGV4cGVjdGVkPWZhbHNlLCBhY3R1YWw9dHJ1ZQorU3VjY2Vzczogc2VjdXJlZCBhZnRlciBkZWxh
eS4gZXhwZWN0ZWQ9dHJ1ZSwgYWN0dWFsPXRydWUKSW5kZXg6IExheW91dFRlc3RzL2VkaXRpbmcv
aW5wdXQvcGFzc3dvcmQtZWNoby1wYXNzbm9kZTIuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRU
ZXN0cy9lZGl0aW5nL2lucHV0L3Bhc3N3b3JkLWVjaG8tcGFzc25vZGUyLmh0bWwJKHJldmlzaW9u
IDApCisrKyBMYXlvdXRUZXN0cy9lZGl0aW5nL2lucHV0L3Bhc3N3b3JkLWVjaG8tcGFzc25vZGUy
Lmh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTggQEAKKzxodG1sPgorPHNjcmlwdCBzcmM9
InJlc291cmNlcy9wYXNzd29yZC1lY2hvLmpzIiBsYW5ndWFnZT0iSmF2YVNjcmlwdCIgdHlwZT0i
dGV4dC9KYXZhU2NyaXB0IiA+PC9zY3JpcHQ+Cis8c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0
IiB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgordmFyIG15dGVzdHMgPSBbCisgICAgICAgIC8vZm9y
bWF0OiBbcHJlZWRpdDEsIHByZWVkaXQyLC4uLixjb21taXRfdGV4dF0sIHNlY3VyZWRfcmlnaHRf
YWZ0ZXI/LCBzZWN1cmVkX2FmdGVyX2RlbGF5PyBjaGVjaz8KKyAgICAgICAgW1snYSddLCBmYWxz
ZSwgdHJ1ZSwgZmFsc2VdLAorICAgICAgICBbWydmJ10sIGZhbHNlLCB0cnVlLCB0cnVlXSwgICAg
ICAgICAgICAgLy8gdGVzdCBwYXNzd29yZCAod2hlbiBtb3JlIHRoYW4gMSBjaGFyKSBpcyBvbmx5
IHNlY3VyZWQgYWZ0ZXIgYSBkZWxheShyZWd1bGFyKS4KKyAgICAgICAgW1snMycsJzMnLCczJywn
ZiddLCBmYWxzZSwgdHJ1ZSwgdHJ1ZV0sICAvLyB0ZXN0IHBhc3N3b3JkICh3aGVuIG1vcmUgdGhh
biAxIGNoYXIpIGlzIG9ubHkgc2VjdXJlZCBhZnRlciBhIGRlbGF5KGltZSkuCisgICAgXTsKKzwv
c2NyaXB0PgorPGJvZHkgb25sb2FkPWluaXQobXl0ZXN0cyk+CisKKzxwPlRlc3RzIGlmIGlucHV0
IGNoYXJzIGFyZSBzZWN1cmVkIGNvcnJlY3RseQorPGlucHV0IHR5cGU9J3Bhc3N3b3JkJyBpZD0n
dGVzdG5vZGUnIC8+Cis8dWwgaWQ9ImNvbnNvbGUiPjwvdWw+Cis8L2JvZHk+Cis8L2h0bWw+CisK
SW5kZXg6IExheW91dFRlc3RzL2VkaXRpbmcvaW5wdXQvcGFzc3dvcmQtZWNoby1wYXNzbm9kZTMt
ZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2VkaXRpbmcvaW5wdXQvcGFz
c3dvcmQtZWNoby1wYXNzbm9kZTMtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0
VGVzdHMvZWRpdGluZy9pbnB1dC9wYXNzd29yZC1lY2hvLXBhc3Nub2RlMy1leHBlY3RlZC50eHQJ
KHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNCBAQAorVGVzdHMgaWYgaW5wdXQgY2hhcnMgYXJlIHNl
Y3VyZWQgY29ycmVjdGx5IAorCitTdWNjZXNzOiBzZWN1cmVkIHJpZ2h0IGFmdGVyLiBleHBlY3Rl
ZD10cnVlLCBhY3R1YWw9dHJ1ZQorU3VjY2Vzczogc2VjdXJlZCBhZnRlciBkZWxheS4gZXhwZWN0
ZWQ9dHJ1ZSwgYWN0dWFsPXRydWUKSW5kZXg6IExheW91dFRlc3RzL2VkaXRpbmcvaW5wdXQvcGFz
c3dvcmQtZWNoby1wYXNzbm9kZTMuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9lZGl0
aW5nL2lucHV0L3Bhc3N3b3JkLWVjaG8tcGFzc25vZGUzLmh0bWwJKHJldmlzaW9uIDApCisrKyBM
YXlvdXRUZXN0cy9lZGl0aW5nL2lucHV0L3Bhc3N3b3JkLWVjaG8tcGFzc25vZGUzLmh0bWwJKHJl
dmlzaW9uIDApCkBAIC0wLDAgKzEsMTcgQEAKKzxodG1sPgorPHNjcmlwdCBzcmM9InJlc291cmNl
cy9wYXNzd29yZC1lY2hvLmpzIiBsYW5ndWFnZT0iSmF2YVNjcmlwdCIgdHlwZT0idGV4dC9KYXZh
U2NyaXB0IiA+PC9zY3JpcHQ+Cis8c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0IiB0eXBlPSJ0
ZXh0L2phdmFzY3JpcHQiPgordmFyIG15dGVzdHMgPSBbCisgICAgICAgIC8vZm9ybWF0OiBbcHJl
ZWRpdDEsIHByZWVkaXQyLC4uLixjb21taXRfdGV4dF0sIHNlY3VyZWRfcmlnaHRfYWZ0ZXI/LCBz
ZWN1cmVkX2FmdGVyX2RlbGF5PyBjaGVjaz8KKyAgICAgICAgW1snYSddLCBmYWxzZSwgdHJ1ZSwg
ZmFsc2VdLAorICAgICAgICBbWyczJywnMycsJzMnLCdmJ10sIGZhbHNlLCB0cnVlLCBmYWxzZV0s
CisgICAgICAgIFtbJ2JhY2tzcGFjZSddLCB0cnVlLCB0cnVlLCB0cnVlXSwgICAgICAgLy8gdGVz
dCBwYXNzd29yZCBpcyBzZWN1cmVkIGFsbCB0aGUgdGltZSB3aGVuIGRlbGV0aW5nLgorICAgIF07
Cis8L3NjcmlwdD4KKzxib2R5IG9ubG9hZD1pbml0KG15dGVzdHMpPgorCis8cD5UZXN0cyBpZiBp
bnB1dCBjaGFycyBhcmUgc2VjdXJlZCBjb3JyZWN0bHkKKzxpbnB1dCB0eXBlPSdwYXNzd29yZCcg
aWQ9J3Rlc3Rub2RlJyAvPgorPHVsIGlkPSJjb25zb2xlIj48L3VsPgorPC9ib2R5PgorPC9odG1s
PgpJbmRleDogTGF5b3V0VGVzdHMvZWRpdGluZy9pbnB1dC9wYXNzd29yZC1lY2hvLXBhc3Nub2Rl
LWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9lZGl0aW5nL2lucHV0L3Bh
c3N3b3JkLWVjaG8tcGFzc25vZGUtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0
VGVzdHMvZWRpdGluZy9pbnB1dC9wYXNzd29yZC1lY2hvLXBhc3Nub2RlLWV4cGVjdGVkLnR4dAko
cmV2aXNpb24gMCkKQEAgLTAsMCArMSw2IEBACitUZXN0cyBpZiBpbnB1dCBjaGFycyBhcmUgc2Vj
dXJlZCBjb3JyZWN0bHkgCisKK0Vycm9yOiBzZWN1cmVkIHJpZ2h0IGFmdGVyLiBleHBlY3RlZD1m
YWxzZSwgYWN0dWFsPXRydWUKK1N1Y2Nlc3M6IHNlY3VyZWQgYWZ0ZXIgZGVsYXkuIGV4cGVjdGVk
PXRydWUsIGFjdHVhbD10cnVlCitFcnJvcjogc2VjdXJlZCByaWdodCBhZnRlci4gZXhwZWN0ZWQ9
ZmFsc2UsIGFjdHVhbD10cnVlCitTdWNjZXNzOiBzZWN1cmVkIGFmdGVyIGRlbGF5LiBleHBlY3Rl
ZD10cnVlLCBhY3R1YWw9dHJ1ZQpJbmRleDogTGF5b3V0VGVzdHMvZWRpdGluZy9pbnB1dC9wYXNz
d29yZC1lY2hvLXBhc3Nub2RlLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZWRpdGlu
Zy9pbnB1dC9wYXNzd29yZC1lY2hvLXBhc3Nub2RlLmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlv
dXRUZXN0cy9lZGl0aW5nL2lucHV0L3Bhc3N3b3JkLWVjaG8tcGFzc25vZGUuaHRtbAkocmV2aXNp
b24gMCkKQEAgLTAsMCArMSwxNiBAQAorPGh0bWw+Cis8c2NyaXB0IHNyYz0icmVzb3VyY2VzL3Bh
c3N3b3JkLWVjaG8uanMiIGxhbmd1YWdlPSJKYXZhU2NyaXB0IiB0eXBlPSJ0ZXh0L0phdmFTY3Jp
cHQiID48L3NjcmlwdD4KKzxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiIHR5cGU9InRleHQv
amF2YXNjcmlwdCI+Cit2YXIgbXl0ZXN0cyA9IFsKKyAgICAgICAgLy9mb3JtYXQ6IFtwcmVlZGl0
MSwgcHJlZWRpdDIsLi4uLGNvbW1pdF90ZXh0XSwgc2VjdXJlZF9yaWdodF9hZnRlcj8sIHNlY3Vy
ZWRfYWZ0ZXJfZGVsYXk/IGNoZWNrPworICAgICAgICBbWydhJ10sIGZhbHNlLCB0cnVlLCB0cnVl
XSwgICAgICAgICAvLyB0ZXN0IHBhc3N3b3JkICh3aGVuIG9ubHkgMSBjaGFyKSBpcyBvbmx5IHNl
Y3VyZWQgYWZ0ZXIgYSBkZWxheShyZWd1bGFyKS4KKyAgICAgICAgW1snMicsJzInLCdiJ10sIGZh
bHNlLCB0cnVlLCB0cnVlXSwgLy8gdGVzdCBwYXNzd29yZCAod2hlbiBvbmx5IDEgY2hhcikgaXMg
b25seSBzZWN1cmVkIGFmdGVyIGEgZGVsYXkoaW1lKS4KKyAgICBdOworPC9zY3JpcHQ+Cis8Ym9k
eSBvbmxvYWQ9aW5pdChteXRlc3RzKT4KKworPHA+VGVzdHMgaWYgaW5wdXQgY2hhcnMgYXJlIHNl
Y3VyZWQgY29ycmVjdGx5Cis8aW5wdXQgdHlwZT0ncGFzc3dvcmQnIGlkPSd0ZXN0bm9kZScgLz4K
Kzx1bCBpZD0iY29uc29sZSI+PC91bD4KKzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IExheW91dFRl
c3RzL2VkaXRpbmcvaW5wdXQvcGFzc3dvcmQtZWNoby10ZXh0bm9kZS1leHBlY3RlZC50eHQKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZWRpdGluZy9pbnB1dC9wYXNzd29yZC1lY2hvLXRleHRu
b2RlLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2VkaXRpbmcvaW5w
dXQvcGFzc3dvcmQtZWNoby10ZXh0bm9kZS1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCkBAIC0w
LDAgKzEsNiBAQAorVGVzdCB0ZXh0IGlucHV0IGlzIG5ldmVyIHNlY3VyZWQuIAorCitTdWNjZXNz
OiBzZWN1cmVkIHJpZ2h0IGFmdGVyLiBleHBlY3RlZD1mYWxzZSwgYWN0dWFsPWZhbHNlCitTdWNj
ZXNzOiBzZWN1cmVkIGFmdGVyIGRlbGF5LiBleHBlY3RlZD1mYWxzZSwgYWN0dWFsPWZhbHNlCitT
dWNjZXNzOiBzZWN1cmVkIHJpZ2h0IGFmdGVyLiBleHBlY3RlZD1mYWxzZSwgYWN0dWFsPWZhbHNl
CitTdWNjZXNzOiBzZWN1cmVkIGFmdGVyIGRlbGF5LiBleHBlY3RlZD1mYWxzZSwgYWN0dWFsPWZh
bHNlCkluZGV4OiBMYXlvdXRUZXN0cy9lZGl0aW5nL2lucHV0L3Bhc3N3b3JkLWVjaG8tdGV4dG5v
ZGUuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9lZGl0aW5nL2lucHV0L3Bhc3N3b3Jk
LWVjaG8tdGV4dG5vZGUuaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2VkaXRpbmcv
aW5wdXQvcGFzc3dvcmQtZWNoby10ZXh0bm9kZS5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsx
LDE3IEBACis8aHRtbD4KKzxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvcGFzc3dvcmQtZWNoby5qcyIg
bGFuZ3VhZ2U9IkphdmFTY3JpcHQiIHR5cGU9InRleHQvSmF2YVNjcmlwdCIgPjwvc2NyaXB0Pgor
PHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCIgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KK3Zh
ciBteXRlc3RzID0gWworICAgICAgICAvL2Zvcm1hdDogW3ByZWVkaXQxLCBwcmVlZGl0MiwuLi4s
Y29tbWl0X3RleHRdLCBzZWN1cmVkX3JpZ2h0X2FmdGVyPywgc2VjdXJlZF9hZnRlcl9kZWxheT8g
Y2hlY2s/CisgICAgICAgIFtbJ2EnXSwgZmFsc2UsIGZhbHNlLCB0cnVlXSwgICAgICAgICAgICAv
LyB0ZXN0IHRleHQgaW5wdXQgaXMgbmV2ZXIgc2VjdXJlZCwgKHJlZ3VsYXIgaW5wdXQpLgorICAg
ICAgICBbWycyJywnMicsJ2InXSwgZmFsc2UsIGZhbHNlLCB0cnVlXSwgICAgLy8gdGVzdCB0ZXh0
IGlucHV0IGlzIG5ldmVyIHNlY3VyZWQgKGltZSBpbnB1dCkuCisgICAgXTsKKzwvc2NyaXB0Pgor
PGJvZHkgb25sb2FkPWluaXQobXl0ZXN0cyk+CisKKzxwPlRlc3QgdGV4dCBpbnB1dCBpcyBuZXZl
ciBzZWN1cmVkLgorPGlucHV0IHR5cGU9J3RleHQnIGlkPSd0ZXN0bm9kZScgLz4KKzx1bCBpZD0i
Y29uc29sZSI+PC91bD4KKzwvYm9keT4KKzwvaHRtbD4KKwpJbmRleDogTGF5b3V0VGVzdHMvZWRp
dGluZy9pbnB1dC9yZXNvdXJjZXMvcGFzc3dvcmQtZWNoby5qcwo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlv
dXRUZXN0cy9lZGl0aW5nL2lucHV0L3Jlc291cmNlcy9wYXNzd29yZC1lY2hvLmpzCShyZXZpc2lv
biAwKQorKysgTGF5b3V0VGVzdHMvZWRpdGluZy9pbnB1dC9yZXNvdXJjZXMvcGFzc3dvcmQtZWNo
by5qcwkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw4OSBAQAordmFyIHRlc3Rub2RlOworCitmdW5j
dGlvbiBzZWN1cmVDaGFyKCkKK3sKKyAgICB2YXIgZWxlbWVudCA9IHRlc3Rub2RlOworICAgIHZh
ciBzZWN1cmVjaGFyID0gZG9jdW1lbnQuZGVmYXVsdFZpZXcuZ2V0Q29tcHV0ZWRTdHlsZShlbGVt
ZW50LCAiIikuZ2V0UHJvcGVydHlWYWx1ZSgiLXdlYmtpdC10ZXh0LXNlY3VyaXR5Iik7CisgICAg
c3dpdGNoKHNlY3VyZWNoYXIpIHsKKyAgICBjYXNlICJzcXVhcmUiOgorICAgICAgICByZXR1cm4g
U3RyaW5nLmZyb21DaGFyQ29kZSgweDI1QTApOworICAgIGNhc2UgImRpc2MiOgorICAgICAgICBy
ZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZSgweDIwMjIpOworICAgIGNhc2UgImNpcmNsZSI6Cisg
ICAgICAgIHJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKDB4MjVFNik7CisgICAgfQorfQorCitm
dW5jdGlvbiBzZWN1cmVUZXh0KHRleHRMZW5ndGgpCit7CisgICAgdmFyIHRleHQgPSAiIjsKKyAg
ICBmb3IgKHZhciBjb3VudGVyID0gMDsgY291bnRlciA8IHRleHRMZW5ndGg7IGNvdW50ZXIrKykK
KyAgICAgICAgdGV4dCArPSBzZWN1cmVDaGFyKCk7CisgICAgcmV0dXJuIHRleHQ7Cit9CisKK2Z1
bmN0aW9uIGxvZyhtc2cpCit7CisgICAgdmFyIGNvbnNvbGUgPSBkb2N1bWVudC5nZXRFbGVtZW50
QnlJZCgiY29uc29sZSIpOworICAgIHZhciBsaSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImxp
Iik7CisgICAgbGkuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUobXNnKSk7Cisg
ICAgY29uc29sZS5hcHBlbmRDaGlsZChsaSk7Cit9CisKK2Z1bmN0aW9uIGFzc2VydChleHBlY3Rl
ZCwgYWN0dWFsLCBtc2cpCit7CisgICAgaWYgKGV4cGVjdGVkICE9IGFjdHVhbCkKKyAgICAgICAg
bG9nKCJFcnJvcjogIiArIG1zZyArICIgZXhwZWN0ZWQ9IiArIGV4cGVjdGVkICsgIiwgYWN0dWFs
PSIgKyBhY3R1YWwpOworICAgIGVsc2UKKyAgICAgICAgbG9nKCJTdWNjZXNzOiAiICsgbXNnICsg
IiBleHBlY3RlZD0iICsgZXhwZWN0ZWQgKyAiLCBhY3R1YWw9IiArIGFjdHVhbCk7Cit9CisKK2Z1
bmN0aW9uIHJ1bih0ZXN0cywgdGVzdElkeCkKK3sKKyAgICB2YXIgZXhwZWN0ZWRTZWN1cmVUZXh0
TGVuOworICAgIGlmICh0ZXN0SWR4ID49IDApIHsKKyAgICAgICAgdGV4dElucHV0Q29udHJvbGxl
ci5kb0NvbW1hbmQoIm1vdmVGb3J3YXJkOiIpOworICAgICAgICBpZih0ZXN0c1t0ZXN0SWR4XVsz
XSkKKyAgICAgICAgICAgIGFzc2VydCh0ZXN0c1t0ZXN0SWR4XVsyXSwgd2luZG93LmZpbmQoc2Vj
dXJlVGV4dCh0ZXN0bm9kZS52YWx1ZS5sZW5ndGgpLCBmYWxzZSwgdHJ1ZSksICJzZWN1cmVkIGFm
dGVyIGRlbGF5LiIpOworICAgIH0KKyAgICB0ZXN0SWR4Kys7CisgICAgaWYgKHRlc3RJZHggPj0g
dGVzdHMubGVuZ3RoKSB7CisgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLm5vdGlmeURvbmUo
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHRlc3Rub2RlLmZvY3VzKCk7CisgICAg
dGV4dElucHV0Q29udHJvbGxlci5kb0NvbW1hbmQoIm1vdmVGb3J3YXJkOiIpOworCisgICAgdmFy
IGNoYXJTZXF1ZW5jZSA9IHRlc3RzW3Rlc3RJZHhdWzBdOworICAgIGZvciAodmFyIGkgPSAwOyBp
IDwgY2hhclNlcXVlbmNlLmxlbmd0aCAtIDE7IGkrKykgeworICAgICAgICB0ZXh0SW5wdXRDb250
cm9sbGVyLnNldE1hcmtlZFRleHQoY2hhclNlcXVlbmNlW2ldLCB0ZXN0bm9kZS52YWx1ZS5sZW5n
dGgsIHRlc3Rub2RlLnZhbHVlLmxlbmd0aCk7CisgICAgfQorICAgIGlmIChjaGFyU2VxdWVuY2Vb
Y2hhclNlcXVlbmNlLmxlbmd0aCAtIDFdID09ICJiYWNrc3BhY2UiKQorICAgICAgICB0ZXh0SW5w
dXRDb250cm9sbGVyLmRvQ29tbWFuZCgiZGVsZXRlQmFja3dhcmQ6Iik7CisgICAgZWxzZQorICAg
ICAgICB0ZXh0SW5wdXRDb250cm9sbGVyLmluc2VydFRleHQoY2hhclNlcXVlbmNlW2NoYXJTZXF1
ZW5jZS5sZW5ndGggLSAxXSk7CisKKyAgICBpZih0ZXN0c1t0ZXN0SWR4XVszXSkKKyAgICAgICAg
YXNzZXJ0KHRlc3RzW3Rlc3RJZHhdWzFdLCB3aW5kb3cuZmluZChzZWN1cmVUZXh0KHRlc3Rub2Rl
LnZhbHVlLmxlbmd0aCksIGZhbHNlLCB0cnVlKSwgInNlY3VyZWQgcmlnaHQgYWZ0ZXIuIik7CisK
KyAgICBpZih0ZXN0c1t0ZXN0SWR4XVszXSkKKyAgICAgICAgd2luZG93LnNldFRpbWVvdXQoZnVu
Y3Rpb24oKXsgcnVuKHRlc3RzLCB0ZXN0SWR4KTsgfSwgNjAwKTsKKyAgICBlbHNlCisgICAgICAg
IHdpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7IHJ1bih0ZXN0cywgdGVzdElkeCk7IH0sIDAp
OworfQorCitmdW5jdGlvbiBpbml0KHRlc3RzKQoreworICAgIGlmICh3aW5kb3cubGF5b3V0VGVz
dENvbnRyb2xsZXIgJiYgd2luZG93LnRleHRJbnB1dENvbnRyb2xsZXIpIHsKKyAgICAgICAgbGF5
b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4dCgpOworICAgICAgICBsYXlvdXRUZXN0Q29udHJv
bGxlci53YWl0VW50aWxEb25lKCk7CisgICAgICAgIGlmICh3aW5kb3cuaW50ZXJuYWxzKSB7Cisg
ICAgICAgICAgICB3aW5kb3cuaW50ZXJuYWxzLnNldFBhc3N3b3JkRWNob0VuYWJsZWQoZG9jdW1l
bnQsIHRydWUpOworICAgICAgICAgICAgd2luZG93LmludGVybmFscy5zZXRQYXNzd29yZEVjaG9E
dXJhdGlvbkluU2Vjb25kcyhkb2N1bWVudCwgMC4xKTsKKyAgICAgICAgICAgIHRlc3Rub2RlID0g
ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rlc3Rub2RlJyk7CisgICAgICAgICAgICBydW4odGVz
dHMsIC0xKTsKKyAgICAgICAgfQorICAgIH0KK30KKwpJbmRleDogTGF5b3V0VGVzdHMvcGxhdGZv
cm0vd2syL1NraXBwZWQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvcGxhdGZvcm0vd2syL1Nr
aXBwZWQJKHJldmlzaW9uIDkzMjM1KQorKysgTGF5b3V0VGVzdHMvcGxhdGZvcm0vd2syL1NraXBw
ZWQJKHdvcmtpbmcgY29weSkKQEAgLTE4NTAsNiArMTg1MCwxMyBAQCBlZGl0aW5nL3NwZWxsaW5n
L3NwZWxsY2hlY2staW5wdXQtc2VhcmNoCiAjIG1pc3Npbmcgd2luZG93LmludGVybmFscy5jcmVh
dGVTaGFkb3dDb250ZW50RWxlbWVudAogZmFzdC9kb20vc2hhZG93L2NyZWF0ZS1jb250ZW50LWVs
ZW1lbnQuaHRtbAogCisjIFdlYktpdFRlc3RSdW5uZXIgbmVlZHMgbGF5b3V0VGVzdENvbnRyb2xs
ZXIuc2V0UGFzc3dvcmRFY2hvRW5hYmxlZAorIyBXZWJLaXRUZXN0UnVubmVyIG5lZWRzIGxheW91
dFRlc3RDb250cm9sbGVyLnNldFBhc3N3b3JkRWNob0R1cmF0aW9uCitlZGl0aW5nL2lucHV0L3Bh
c3N3b3JkLWVjaG8tcGFzc25vZGUuaHRtbAorZWRpdGluZy9pbnB1dC9wYXNzd29yZC1lY2hvLXBh
c3Nub2RlMi5odG1sCitlZGl0aW5nL2lucHV0L3Bhc3N3b3JkLWVjaG8tcGFzc25vZGUzLmh0bWwK
K2VkaXRpbmcvaW5wdXQvcGFzc3dvcmQtZWNoby10ZXh0bm9kZS5odG1sCisKICMjIyBFTkQgT0Yg
KDIpIENsYXNzaWZpZWQgZmFpbHVyZXMgd2l0aG91dCBidWcgcmVwb3J0cyAoeWV0KQogIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>