<?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>41413</bug_id>
          
          <creation_ts>2010-06-30 09:30:52 -0700</creation_ts>
          <short_desc>[Qt] QtWebKit needs public API for Notifications.</short_desc>
          <delta_ts>2010-08-24 07:18:01 -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>WebKit Qt</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</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>Qt, QtTriaged</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>41783</dependson>
          <blocked>31552</blocked>
    
    <blocked>39995</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Yael">yael</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>diegohcg</cc>
    
    <cc>hausmann</cc>
    
    <cc>laszlo.gombos</cc>
    
    <cc>maheshk</cc>
    
    <cc>raine.makelainen</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>244807</commentid>
    <comment_count>0</comment_count>
    <who name="Yael">yael</who>
    <bug_when>2010-06-30 09:30:52 -0700</bug_when>
    <thetext>Current implementation of Notifications in QtWebKit uses a private API. Clients of QtWebKit need a public API to avoid hacks/workarounds.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>244817</commentid>
    <comment_count>1</comment_count>
      <attachid>60128</attachid>
    <who name="Yael">yael</who>
    <bug_when>2010-06-30 09:48:20 -0700</bug_when>
    <thetext>Created attachment 60128
Patch.

This patch introduces a new QWebPage API to replace the private DumpRenderTree API.
The same API can be reused for other features that require user consent, such as GeoLocation API.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>244851</commentid>
    <comment_count>2</comment_count>
      <attachid>60128</attachid>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2010-06-30 11:13:59 -0700</bug_when>
    <thetext>Comment on attachment 60128
Patch.

WebKit/qt/Api/qwebpage.h:204
 +      enum UserPermissionType {
Isn&apos;t that more domain than type? PermissionDomain ?

WebKit/qt/Api/qwebpage.h:198
 +      enum UserPermission {
PermissionPolicy ?

WebKit/qt/Api/qwebpage.h:303
 +      void setUserPermission(UserPermissionType, const QString&amp;, UserPermission);
void setUserPermission(PermissionDomain domain, const QString&amp;, PermissionPolicy policy) ?

WebKit/qt/Api/qwebpage.h:199
 +          UserPermissionAllowed,
maybe Granded. You grand permission I believe.


Are all these other changes really related to the public API?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>244858</commentid>
    <comment_count>3</comment_count>
    <who name="Yael">yael</who>
    <bug_when>2010-06-30 11:25:35 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; (From update of attachment 60128 [details])
&gt; WebKit/qt/Api/qwebpage.h:204
&gt;  +      enum UserPermissionType {
&gt; Isn&apos;t that more domain than type? PermissionDomain ?
&gt; 
&gt; WebKit/qt/Api/qwebpage.h:198
&gt;  +      enum UserPermission {
&gt; PermissionPolicy ?
&gt; 
&gt; WebKit/qt/Api/qwebpage.h:303
&gt;  +      void setUserPermission(UserPermissionType, const QString&amp;, UserPermission);
&gt; void setUserPermission(PermissionDomain domain, const QString&amp;, PermissionPolicy policy) ?
&gt; 
&gt; WebKit/qt/Api/qwebpage.h:199
&gt;  +          UserPermissionAllowed,
&gt; maybe Granded. You grand permission I believe.
&gt; 
&gt; 
&gt; Are all these other changes really related to the public API?

Kenneth, thanks for reviewing the API proposal. Unfortunately, all the changes are related to the new API, including WebKit/chromium changes. The current NotificationPresenter interface does not give us enough information to know which page initiated the notification, so if we wanted to show a UI, we would not know which tab/window should show that UI.
In Chromium this is not a problem because they know which process initiated the IPC.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>244941</commentid>
    <comment_count>4</comment_count>
      <attachid>60152</attachid>
    <who name="Yael">yael</who>
    <bug_when>2010-06-30 14:22:16 -0700</bug_when>
    <thetext>Created attachment 60152
Patch

Rename parameters as suggested by Kenneth in comment #2.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>245884</commentid>
    <comment_count>5</comment_count>
      <attachid>60152</attachid>
    <who name="Simon Hausmann">hausmann</who>
    <bug_when>2010-07-02 05:28:54 -0700</bug_when>
    <thetext>Comment on attachment 60152
Patch

Some comments:

WebKit/qt/Api/qwebpage.h:303
 +      void setUserPermission(PermissionDomain, const QString&amp;, PermissionPolicy);
In the Qt API we tend to always give names to the parameters.

WebKit/qt/Api/qwebpage.h:386
 +      void requestPermissionFromUser(QWebPage::PermissionDomain domain, const QString&amp; origin);
I think in this API the origin parameter is significant and should come first. The same applies to the other functions.

The use of the origin as string is nice, that&apos;s nice. But is it very descriptive? Does it allow the UI on top of QtWebKit to provide enough information to the user? I wonder if these permissions can always be tied to a QWebFrame instead (as first parameter)?


Conceptually I think it would be nice if the API allowed the developer to react immediately if he wants to but he also
has the option of reacting later. Immediate reaction is useful for programmatic setups, like the DRT.

I like the approach of emitting a signal and I think it would be nice if in the slot all the parameters are in place
to make granting or denying the permissions a simple task. So an object as parameter that allows setting the permission
would achieve that, such as QWebFrame or a more specialized object.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>245951</commentid>
    <comment_count>6</comment_count>
    <who name="Laszlo Gombos">laszlo.gombos</who>
    <bug_when>2010-07-02 10:22:14 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; (From update of attachment 60152 [details])
&gt; Some comments:

&gt; The use of the origin as string is nice, that&apos;s nice. But is it very descriptive? Does it allow the UI on top of QtWebKit to provide enough information to the user? I wonder if these permissions can always be tied to a QWebFrame instead (as first parameter)?
&gt; 

I agree as well the QWebFrame could be more useful; we do not to be careful with the life cycle of the objects:
 - notification itself could outlive the frame by design, but the permission request should be invalidated if the originating frame dies.

 - in general if the context for the permission is a Worker than we have a URL but not a frame, but so far we do not support this case.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>245971</commentid>
    <comment_count>7</comment_count>
      <attachid>60152</attachid>
    <who name="Yael">yael</who>
    <bug_when>2010-07-02 10:57:41 -0700</bug_when>
    <thetext>Comment on attachment 60152
Patch

Thank you, Simon and Laszlo, for reviewing the patch. I will update it with your comments after the (4th of July) holiday weekend.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>246032</commentid>
    <comment_count>8</comment_count>
    <who name="Yael">yael</who>
    <bug_when>2010-07-02 12:37:38 -0700</bug_when>
    <thetext>Simon, I tested Chromium and FIreFox&apos;s behavior of prompts for permission, and both browsers show only the origin when they prompt the user for permission, regardless of what kind of permission they need (GeoLocation, appcache, notifications and so on). 

The biggest problem I see with passing QWebFrame in the API is the following test that I did using Chromium browser:

1) Load this page:

&lt;html&gt;
&lt;script&gt;
function remove() {
document.getElementById(&quot;par&quot;).innerHTML=&quot;Do not crash&quot;;
}
&lt;/script&gt;
Click this button to remove the iframe &lt;button onclick=&quot;remove();&quot;&gt;click me&lt;/button&gt;&lt;br&gt;
&lt;div id=&quot;par&quot;&gt;&lt;iframe src=&quot;http://slides.html5rocks.com/#slide12&quot; width=800 height=800&gt;&lt;/iframe&gt;&lt;/div&gt;
&lt;/html&gt;

2) click on &quot;Set notification premissions ...&quot;
3) click on &quot;click me&quot;.

With the proposed change, the client is now left with a deleted QWebFrame .</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>246388</commentid>
    <comment_count>9</comment_count>
    <who name="Mahesh Kulkarni">maheshk</who>
    <bug_when>2010-07-03 22:31:36 -0700</bug_when>
    <thetext>(In reply to comment #8)
&gt; Simon, I tested Chromium and FIreFox&apos;s behavior of prompts for permission, and both browsers show only the origin when they prompt the user for permission, regardless of what kind of permission they need (GeoLocation, appcache, notifications and so on). 
&gt; 
&gt; The biggest problem I see with passing QWebFrame in the API is the following test that I did using Chromium browser:
&gt; 
&gt; 1) Load this page:
&gt; 
&gt; &lt;html&gt;
&gt; &lt;script&gt;
&gt; function remove() {
&gt; document.getElementById(&quot;par&quot;).innerHTML=&quot;Do not crash&quot;;
&gt; }
&gt; &lt;/script&gt;
&gt; Click this button to remove the iframe &lt;button onclick=&quot;remove();&quot;&gt;click me&lt;/button&gt;&lt;br&gt;
&gt; &lt;div id=&quot;par&quot;&gt;&lt;iframe src=&quot;http://slides.html5rocks.com/#slide12&quot; width=800 height=800&gt;&lt;/iframe&gt;&lt;/div&gt;
&gt; &lt;/html&gt;
&gt; 
&gt; 2) click on &quot;Set notification premissions ...&quot;
&gt; 3) click on &quot;click me&quot;.
&gt; 
&gt; With the proposed change, the client is now left withwith a deleted QWebFrame .

I think we would need one more api something like, QwebPage::cancelRequestForPermission() so that client can discard any UI pending for user request. 

Incase of geolocation, ChromeClient::cancelGeolocationPermissionRequestForFrame is triggered on disconnectFrame(). This still needs to be redirected to client. 

We would still end up with deleted QwebFrame client in above case until cancel request arrives and handled from client side itself</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>249626</commentid>
    <comment_count>10</comment_count>
      <attachid>61178</attachid>
    <who name="Yael">yael</who>
    <bug_when>2010-07-11 09:03:22 -0700</bug_when>
    <thetext>Created attachment 61178
Patch

This patch removed DumpRenderTree private API and introduced new public API.
It also implements the cancel API for notifications permission requests.

A follow-up patch should move some of the printf code out of NotificationsPresenterClientQt and into DumpRenderTreeQt.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>250164</commentid>
    <comment_count>11</comment_count>
      <attachid>61296</attachid>
    <who name="Yael">yael</who>
    <bug_when>2010-07-12 17:09:46 -0700</bug_when>
    <thetext>Created attachment 61296
Patch

As suggested by Kenneth on IRC, make enum names more inline with Qt naming conventions.
Kenneth, sorry for the choppy IRC connection, we had multiple power failures today due to the heat wave.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>250180</commentid>
    <comment_count>12</comment_count>
      <attachid>61296</attachid>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2010-07-12 17:30:33 -0700</bug_when>
    <thetext>Comment on attachment 61296
Patch

WebKit/qt/WebCoreSupport/NotificationPresenterClientQt.h:113
 +      QWebPage* page(ScriptExecutionContext*);
Is this like a cast? if so call it toPage, that seems to be the standard in WebKit. In Qt we often use that for methods doing for instance conversion.

WebKitTools/DumpRenderTree/qt/DumpRenderTreeQt.h:196
 +      void cancelRequestsForPermission(QWebFrame* frame, QWebPage::PermissionDomain domain);
Looks OK to me, but I would like to know what Simon thinks, especially about the API part.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>250241</commentid>
    <comment_count>13</comment_count>
      <attachid>61313</attachid>
    <who name="Yael">yael</who>
    <bug_when>2010-07-12 19:11:22 -0700</bug_when>
    <thetext>Created attachment 61313
Patch

Changed page() and frame() to toPage() and toFrame() as suggested in comment #12.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>250909</commentid>
    <comment_count>14</comment_count>
      <attachid>61313</attachid>
    <who name="Laszlo Gombos">laszlo.gombos</who>
    <bug_when>2010-07-13 18:50:42 -0700</bug_when>
    <thetext>Comment on attachment 61313
Patch

&gt; Index: WebKit/qt/Api/qwebpage.h
&gt; ===================================================================
&gt; --- WebKit/qt/Api/qwebpage.h	(revision 63134)
&gt; +++ WebKit/qt/Api/qwebpage.h	(working copy)
&gt; @@ -195,6 +195,16 @@ public:
&gt;          WebModalDialog
&gt;      };
&gt;  
&gt; +    enum PermissionPolicy {
&gt; +        PermissionGranted,
&gt; +        PermissionIgnored,
&gt; +        PermissionDenied
&gt; +    };
&gt; +

I think it is important to find a more descriptive name than PermissionIgnored. I suggest PermissionUnknown instead of PermissionIgnored. This is also inline with a recent discussion about a generic Permission API discussed in public-webapps.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>254750</commentid>
    <comment_count>15</comment_count>
      <attachid>62289</attachid>
    <who name="Yael">yael</who>
    <bug_when>2010-07-22 06:06:01 -0700</bug_when>
    <thetext>Created attachment 62289
Patch

Updated the patch to latest trunk, and modified PermissionIgnored to PermissionUnknown, per comment 14.
Also added https://bugs.webkit.org/show_bug.cgi?id=42798 to Chromium&apos;s test expectations file, as suggested by Tor Arne on IRC.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>254753</commentid>
    <comment_count>16</comment_count>
      <attachid>62289</attachid>
    <who name="Simon Hausmann">hausmann</who>
    <bug_when>2010-07-22 06:17:46 -0700</bug_when>
    <thetext>Comment on attachment 62289
Patch

WebKit/qt/Api/qwebpage.h:387
 +      void checkPermissionFromUser(QWebFrame* frame, QWebPage::PermissionDomain domain, QWebPage::PermissionPolicy&amp; policy);
We usually don&apos;t use synchronous signals with out values in the Qt API.

Is this needed in places where a synchronous response is needed from the user and we can&apos;t fall back to the requestPermission -&gt; setUserPermission flow?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>254775</commentid>
    <comment_count>17</comment_count>
    <who name="Yael">yael</who>
    <bug_when>2010-07-22 07:26:21 -0700</bug_when>
    <thetext>(In reply to comment #16)
&gt; (From update of attachment 62289 [details])
Thanks for the review, Simon!
&gt; WebKit/qt/Api/qwebpage.h:387
&gt;  +      void checkPermissionFromUser(QWebFrame* frame, QWebPage::PermissionDomain domain, QWebPage::PermissionPolicy&amp; policy);
&gt; We usually don&apos;t use synchronous signals with out values in the Qt API.
&gt; 
&quot;policy&quot; is the return value of this signal. Ideally, this would be a virtual function, but since we cannot add virtual functions to QWebPage, I made it a signal.
&gt; Is this needed in places where a synchronous response is needed from the user and we can&apos;t fall back to the requestPermission -&gt; setUserPermission flow?
yes.
Notifications have 2 types of checks. One is synchronous and one is asynchronous. The asynchronous check is expected to show a UI and the synchronous is not expected to show a UI. We cannot call the asynchronous API when the synchronous API is expected. 

I will create a new bug for the documentation of this new API and hope that with the documentation it will become more clear.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>254918</commentid>
    <comment_count>18</comment_count>
      <attachid>62289</attachid>
    <who name="Laszlo Gombos">laszlo.gombos</who>
    <bug_when>2010-07-22 12:15:35 -0700</bug_when>
    <thetext>Comment on attachment 62289
Patch

This looks good to me; r+.

I expect some more discussion about the exposed API but in order to do that I&apos;d like to see if we can make some progress of hooking up Geolocation support behind the same permission API.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>255069</commentid>
    <comment_count>19</comment_count>
      <attachid>62289</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-07-22 16:52:30 -0700</bug_when>
    <thetext>Comment on attachment 62289
Patch

Clearing flags on attachment: 62289

Committed r63921: &lt;http://trac.webkit.org/changeset/63921&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>255070</commentid>
    <comment_count>20</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-07-22 16:52:36 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>259473</commentid>
    <comment_count>21</comment_count>
    <who name="Simon Hausmann">hausmann</who>
    <bug_when>2010-08-03 08:38:01 -0700</bug_when>
    <thetext>Revision r63921 cherry-picked into qtwebkit-2.1 with commit 235046a1fbe4cae2938ffe6538e324035a4297e4</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>60128</attachid>
            <date>2010-06-30 09:48:20 -0700</date>
            <delta_ts>2010-06-30 14:22:16 -0700</delta_ts>
            <desc>Patch.</desc>
            <filename>41413.patch</filename>
            <type>text/plain</type>
            <size>28212</size>
            <attacher name="Yael">yael</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2MjE4NykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjAgQEAKKzIwMTAtMDYtMzAgIFlhZWwgQWhhcm9uICA8eWFlbC5haGFyb25Abm9r
aWEuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IFtRdF0gUXRXZWJLaXQgbmVlZHMgcHVibGljIEFQSSBmb3IgTm90aWZpY2F0aW9ucy4KKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQxNDEzCisKKyAgICAg
ICAgVXBkYXRlIE5vdGlmaWNhdGlvblByZXNlbnRlciBBUEksIHRvIHByb3ZpZGUgYWRkaXRpb25h
bCBuZWVkZWQgaW5mb3JtYXRpb24uCisgICAgICAgIE5vIG5ldyB0ZXN0cyBzaW5jZSBubyBuZXcg
ZnVuY3Rpb25hbGl0eSB3YXMgaW50cm9kdWNlZC4KKworICAgICAgICAqIG5vdGlmaWNhdGlvbnMv
Tm90aWZpY2F0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok5vdGlmaWNhdGlvbjo6Tm90aWZp
Y2F0aW9uKToKKyAgICAgICAgKiBub3RpZmljYXRpb25zL05vdGlmaWNhdGlvbkNlbnRlci5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpOb3RpZmljYXRpb25DZW50ZXI6OmNoZWNrUGVybWlzc2lvbik6
CisgICAgICAgIChXZWJDb3JlOjpOb3RpZmljYXRpb25DZW50ZXI6OnJlcXVlc3RQZXJtaXNzaW9u
KToKKyAgICAgICAgKiBub3RpZmljYXRpb25zL05vdGlmaWNhdGlvblByZXNlbnRlci5oOgorCiAy
MDEwLTA2LTMwICBKZXJlbXkgTW9za292aWNoICA8amVyZW15QGNocm9taXVtLm9yZz4KIAogICAg
ICAgICBSZXZpZXdlZCBieSBEaW1pdHJpIEdsYXprb3YuCkluZGV4OiBXZWJDb3JlL25vdGlmaWNh
dGlvbnMvTm90aWZpY2F0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL25vdGlmaWNhdGlv
bnMvTm90aWZpY2F0aW9uLmNwcAkocmV2aXNpb24gNjIxNDApCisrKyBXZWJDb3JlL25vdGlmaWNh
dGlvbnMvTm90aWZpY2F0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTIsNyArNTIsNyBAQCBO
b3RpZmljYXRpb246Ok5vdGlmaWNhdGlvbihjb25zdCBLVVJMJiB1CiAgICAgLCBtX3ByZXNlbnRl
cihwcm92aWRlcikKIHsKICAgICBBU1NFUlQobV9wcmVzZW50ZXIpOwotICAgIGlmIChtX3ByZXNl
bnRlci0+Y2hlY2tQZXJtaXNzaW9uKGNvbnRleHQtPnVybCgpKSAhPSBOb3RpZmljYXRpb25QcmVz
ZW50ZXI6OlBlcm1pc3Npb25BbGxvd2VkKSB7CisgICAgaWYgKG1fcHJlc2VudGVyLT5jaGVja1Bl
cm1pc3Npb24oY29udGV4dCkgIT0gTm90aWZpY2F0aW9uUHJlc2VudGVyOjpQZXJtaXNzaW9uQWxs
b3dlZCkgewogICAgICAgICBlYyA9IFNFQ1VSSVRZX0VSUjsKICAgICAgICAgcmV0dXJuOwogICAg
IH0KQEAgLTczLDcgKzczLDcgQEAgTm90aWZpY2F0aW9uOjpOb3RpZmljYXRpb24oY29uc3QgTm90
aWZpYwogICAgICwgbV9wcmVzZW50ZXIocHJvdmlkZXIpCiB7CiAgICAgQVNTRVJUKG1fcHJlc2Vu
dGVyKTsKLSAgICBpZiAobV9wcmVzZW50ZXItPmNoZWNrUGVybWlzc2lvbihjb250ZXh0LT51cmwo
KSkgIT0gTm90aWZpY2F0aW9uUHJlc2VudGVyOjpQZXJtaXNzaW9uQWxsb3dlZCkgeworICAgIGlm
IChtX3ByZXNlbnRlci0+Y2hlY2tQZXJtaXNzaW9uKGNvbnRleHQpICE9IE5vdGlmaWNhdGlvblBy
ZXNlbnRlcjo6UGVybWlzc2lvbkFsbG93ZWQpIHsKICAgICAgICAgZWMgPSBTRUNVUklUWV9FUlI7
CiAgICAgICAgIHJldHVybjsKICAgICB9CkluZGV4OiBXZWJDb3JlL25vdGlmaWNhdGlvbnMvTm90
aWZpY2F0aW9uQ2VudGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL25vdGlmaWNhdGlvbnMv
Tm90aWZpY2F0aW9uQ2VudGVyLmNwcAkocmV2aXNpb24gNjIxNDApCisrKyBXZWJDb3JlL25vdGlm
aWNhdGlvbnMvTm90aWZpY2F0aW9uQ2VudGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDksMTQg
KzQ5LDE0IEBAIGludCBOb3RpZmljYXRpb25DZW50ZXI6OmNoZWNrUGVybWlzc2lvbigKIHsKICAg
ICBpZiAoIXByZXNlbnRlcigpKQogICAgICAgICByZXR1cm4gTm90aWZpY2F0aW9uUHJlc2VudGVy
OjpQZXJtaXNzaW9uRGVuaWVkOwotICAgIHJldHVybiBtX25vdGlmaWNhdGlvblByZXNlbnRlci0+
Y2hlY2tQZXJtaXNzaW9uKG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dC0+dXJsKCkpOworICAgIHJl
dHVybiBtX25vdGlmaWNhdGlvblByZXNlbnRlci0+Y2hlY2tQZXJtaXNzaW9uKG1fc2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCk7CiB9CiAKIHZvaWQgTm90aWZpY2F0aW9uQ2VudGVyOjpyZXF1ZXN0UGVy
bWlzc2lvbihQYXNzUmVmUHRyPFZvaWRDYWxsYmFjaz4gY2FsbGJhY2spCiB7CiAgICAgaWYgKCFw
cmVzZW50ZXIoKSkKICAgICAgICAgcmV0dXJuOwotICAgIG1fbm90aWZpY2F0aW9uUHJlc2VudGVy
LT5yZXF1ZXN0UGVybWlzc2lvbihtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQtPnNlY3VyaXR5T3Jp
Z2luKCksIGNhbGxiYWNrKTsKKyAgICBtX25vdGlmaWNhdGlvblByZXNlbnRlci0+cmVxdWVzdFBl
cm1pc3Npb24obV9zY3JpcHRFeGVjdXRpb25Db250ZXh0LCBjYWxsYmFjayk7CiB9CiAKIH0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvbm90aWZpY2F0aW9ucy9Ob3RpZmljYXRp
b25QcmVzZW50ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL25vdGlmaWNhdGlvbnMvTm90aWZp
Y2F0aW9uUHJlc2VudGVyLmgJKHJldmlzaW9uIDYyMTQwKQorKysgV2ViQ29yZS9ub3RpZmljYXRp
b25zL05vdGlmaWNhdGlvblByZXNlbnRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC00MSw3ICs0MSw3
IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICBjbGFzcyBEb2N1bWVudDsKICAgICBjbGFzcyBO
b3RpZmljYXRpb247CiAgICAgY2xhc3MgS1VSTDsKLSAgICBjbGFzcyBTZWN1cml0eU9yaWdpbjsK
KyAgICBjbGFzcyBTY3JpcHRFeGVjdXRpb25Db250ZXh0OwogICAgIGNsYXNzIFN0cmluZzsKIAog
ICAgIGNsYXNzIE5vdGlmaWNhdGlvblByZXNlbnRlciB7CkBAIC02NywxMiArNjcsMTIgQEAgbmFt
ZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB2aXJ0dWFsIHZvaWQgbm90aWZpY2F0aW9uT2JqZWN0
RGVzdHJveWVkKE5vdGlmaWNhdGlvbiopID0gMDsKIAogICAgICAgICAvLyBSZXF1ZXN0cyB1c2Vy
IHBlcm1pc3Npb24gdG8gc2hvdyBkZXNrdG9wIG5vdGlmaWNhdGlvbnMgZnJvbSBhIHBhcnRpY3Vs
YXIKLSAgICAgICAgLy8gb3JpZ2luLiBUaGUgY2FsbGJhY2sgcGFyYW1ldGVyIHNob3VsZCBiZSBy
dW4gd2hlbiB0aGUgdXNlciBoYXMKKyAgICAgICAgLy8gc2NyaXB0IGNvbnRleHQuIFRoZSBjYWxs
YmFjayBwYXJhbWV0ZXIgc2hvdWxkIGJlIHJ1biB3aGVuIHRoZSB1c2VyIGhhcwogICAgICAgICAv
LyBtYWRlIGEgZGVjaXNpb24uCi0gICAgICAgIHZpcnR1YWwgdm9pZCByZXF1ZXN0UGVybWlzc2lv
bihTZWN1cml0eU9yaWdpbiosIFBhc3NSZWZQdHI8Vm9pZENhbGxiYWNrPikgPSAwOworICAgICAg
ICB2aXJ0dWFsIHZvaWQgcmVxdWVzdFBlcm1pc3Npb24oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCos
IFBhc3NSZWZQdHI8Vm9pZENhbGxiYWNrPikgPSAwOwogCiAgICAgICAgIC8vIENoZWNrcyB0aGUg
Y3VycmVudCBsZXZlbCBvZiBwZXJtaXNzaW9uLgotICAgICAgICB2aXJ0dWFsIFBlcm1pc3Npb24g
Y2hlY2tQZXJtaXNzaW9uKGNvbnN0IEtVUkwmKSA9IDA7CisgICAgICAgIHZpcnR1YWwgUGVybWlz
c2lvbiBjaGVja1Blcm1pc3Npb24oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCopID0gMDsKICAgICB9
OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJLaXQvY2hyb21pdW0vQ2hhbmdl
TG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cJKHJldmlzaW9uIDYy
MTg3KQorKysgV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDE3IEBACisyMDEwLTA2LTMwICBZYWVsIEFoYXJvbiAgPHlhZWwuYWhhcm9uQG5va2lhLmNv
bT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBbUXRd
IFF0V2ViS2l0IG5lZWRzIHB1YmxpYyBBUEkgZm9yIE5vdGlmaWNhdGlvbnMuCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00MTQxMworCisgICAgICAgIFVw
ZGF0ZWQgTm90aWZpY2F0aW9uUHJlc2VudGVyIEFQSS4KKworICAgICAgICAqIHNyYy9Ob3RpZmlj
YXRpb25QcmVzZW50ZXJJbXBsLmNwcDoKKyAgICAgICAgKFdlYktpdDo6Tm90aWZpY2F0aW9uUHJl
c2VudGVySW1wbDo6Y2hlY2tQZXJtaXNzaW9uKToKKyAgICAgICAgKFdlYktpdDo6Tm90aWZpY2F0
aW9uUHJlc2VudGVySW1wbDo6cmVxdWVzdFBlcm1pc3Npb24pOgorICAgICAgICAqIHNyYy9Ob3Rp
ZmljYXRpb25QcmVzZW50ZXJJbXBsLmg6CisKIDIwMTAtMDYtMjUgIFBhdmVsIEZlbGRtYW4gIDxw
ZmVsZG1hbkBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgWXVyeSBTZW1pa2hh
dHNreS4KSW5kZXg6IFdlYktpdC9jaHJvbWl1bS9zcmMvTm90aWZpY2F0aW9uUHJlc2VudGVySW1w
bC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L2Nocm9taXVtL3NyYy9Ob3RpZmljYXRpb25QcmVz
ZW50ZXJJbXBsLmNwcAkocmV2aXNpb24gNjIxNDApCisrKyBXZWJLaXQvY2hyb21pdW0vc3JjL05v
dGlmaWNhdGlvblByZXNlbnRlckltcGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw2ICszNSw3
IEBACiAKICNpbmNsdWRlICJLVVJMLmgiCiAjaW5jbHVkZSAiTm90aWZpY2F0aW9uLmgiCisjaW5j
bHVkZSAiU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oIgogI2luY2x1ZGUgIlNlY3VyaXR5T3JpZ2lu
LmgiCiAKICNpbmNsdWRlICJXZWJOb3RpZmljYXRpb24uaCIKQEAgLTkxLDE1ICs5MiwxNSBAQCB2
b2lkIE5vdGlmaWNhdGlvblByZXNlbnRlckltcGw6Om5vdGlmaWNhCiAgICAgbV9wcmVzZW50ZXIt
Pm9iamVjdERlc3Ryb3llZChQYXNzUmVmUHRyPE5vdGlmaWNhdGlvbj4obm90aWZpY2F0aW9uKSk7
CiB9CiAKLU5vdGlmaWNhdGlvblByZXNlbnRlcjo6UGVybWlzc2lvbiBOb3RpZmljYXRpb25QcmVz
ZW50ZXJJbXBsOjpjaGVja1Blcm1pc3Npb24oY29uc3QgS1VSTCYgc291cmNlVVJMKQorTm90aWZp
Y2F0aW9uUHJlc2VudGVyOjpQZXJtaXNzaW9uIE5vdGlmaWNhdGlvblByZXNlbnRlckltcGw6OmNo
ZWNrUGVybWlzc2lvbihTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0KQogewotICAgIGlu
dCByZXN1bHQgPSBtX3ByZXNlbnRlci0+Y2hlY2tQZXJtaXNzaW9uKHNvdXJjZVVSTCk7CisgICAg
aW50IHJlc3VsdCA9IG1fcHJlc2VudGVyLT5jaGVja1Blcm1pc3Npb24oY29udGV4dC0+dXJsKCkp
OwogICAgIHJldHVybiBzdGF0aWNfY2FzdDxOb3RpZmljYXRpb25QcmVzZW50ZXI6OlBlcm1pc3Np
b24+KHJlc3VsdCk7CiB9CiAKLXZvaWQgTm90aWZpY2F0aW9uUHJlc2VudGVySW1wbDo6cmVxdWVz
dFBlcm1pc3Npb24oU2VjdXJpdHlPcmlnaW4qIG9yaWdpbiwgUGFzc1JlZlB0cjxWb2lkQ2FsbGJh
Y2s+IGNhbGxiYWNrKQordm9pZCBOb3RpZmljYXRpb25QcmVzZW50ZXJJbXBsOjpyZXF1ZXN0UGVy
bWlzc2lvbihTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBQYXNzUmVmUHRyPFZvaWRD
YWxsYmFjaz4gY2FsbGJhY2spCiB7Ci0gICAgbV9wcmVzZW50ZXItPnJlcXVlc3RQZXJtaXNzaW9u
KFdlYlNlY3VyaXR5T3JpZ2luKG9yaWdpbiksIG5ldyBWb2lkQ2FsbGJhY2tDbGllbnQoY2FsbGJh
Y2spKTsKKyAgICBtX3ByZXNlbnRlci0+cmVxdWVzdFBlcm1pc3Npb24oV2ViU2VjdXJpdHlPcmln
aW4oY29udGV4dC0+c2VjdXJpdHlPcmlnaW4oKSksIG5ldyBWb2lkQ2FsbGJhY2tDbGllbnQoY2Fs
bGJhY2spKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CkluZGV4OiBXZWJLaXQvY2hyb21p
dW0vc3JjL05vdGlmaWNhdGlvblByZXNlbnRlckltcGwuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQv
Y2hyb21pdW0vc3JjL05vdGlmaWNhdGlvblByZXNlbnRlckltcGwuaAkocmV2aXNpb24gNjIxNDAp
CisrKyBXZWJLaXQvY2hyb21pdW0vc3JjL05vdGlmaWNhdGlvblByZXNlbnRlckltcGwuaAkod29y
a2luZyBjb3B5KQpAQCAtNTQsOCArNTQsOCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBib29sIHNo
b3coV2ViQ29yZTo6Tm90aWZpY2F0aW9uKiBvYmplY3QpOwogICAgIHZpcnR1YWwgdm9pZCBjYW5j
ZWwoV2ViQ29yZTo6Tm90aWZpY2F0aW9uKiBvYmplY3QpOwogICAgIHZpcnR1YWwgdm9pZCBub3Rp
ZmljYXRpb25PYmplY3REZXN0cm95ZWQoV2ViQ29yZTo6Tm90aWZpY2F0aW9uKiBvYmplY3QpOwot
ICAgIHZpcnR1YWwgV2ViQ29yZTo6Tm90aWZpY2F0aW9uUHJlc2VudGVyOjpQZXJtaXNzaW9uIGNo
ZWNrUGVybWlzc2lvbihjb25zdCBXZWJDb3JlOjpLVVJMJiBzb3VyY2VVUkwpOwotICAgIHZpcnR1
YWwgdm9pZCByZXF1ZXN0UGVybWlzc2lvbihXZWJDb3JlOjpTZWN1cml0eU9yaWdpbiogb3JpZ2lu
LCBXVEY6OlBhc3NSZWZQdHI8V2ViQ29yZTo6Vm9pZENhbGxiYWNrPiBjYWxsYmFjayk7CisgICAg
dmlydHVhbCBXZWJDb3JlOjpOb3RpZmljYXRpb25QcmVzZW50ZXI6OlBlcm1pc3Npb24gY2hlY2tQ
ZXJtaXNzaW9uKFdlYkNvcmU6OlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqKTsKKyAgICB2aXJ0dWFs
IHZvaWQgcmVxdWVzdFBlcm1pc3Npb24oV2ViQ29yZTo6U2NyaXB0RXhlY3V0aW9uQ29udGV4dCog
LCBXVEY6OlBhc3NSZWZQdHI8V2ViQ29yZTo6Vm9pZENhbGxiYWNrPiBjYWxsYmFjayk7CiAKIHBy
aXZhdGU6CiAgICAgLy8gV2ViTm90aWZpY2F0aW9uUHJlc2VudGVyIHRoYXQgdGhpcyBvYmplY3Qg
ZGVsZWdhdGVzIHRvLgpJbmRleDogV2ViS2l0L3F0L0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJLaXQvcXQvQ2hhbmdlTG9nCShyZXZpc2lvbiA2MjE4NykKKysrIFdlYktpdC9xdC9DaGFuZ2VM
b2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwyMyBAQAorMjAxMC0wNi0zMCAgWWFlbCBBaGFy
b24gIDx5YWVsLmFoYXJvbkBub2tpYS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgW1F0XSBRdFdlYktpdCBuZWVkcyBwdWJsaWMgQVBJIGZvciBO
b3RpZmljYXRpb25zLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9NDE0MTMKKworICAgICAgICBSZW1vdmUgdGhlIHByaXZhdGUgRHVtcFJlbmRlclRyZWVT
dXBwb3J0UXQgQVBJIGFuZCBpbnRyb2R1Y2UgbmV3IFFXZWJQYWdlIEFQSS4KKworICAgICAgICAq
IEFwaS9xd2VicGFnZS5jcHA6CisgICAgICAgIChRV2ViUGFnZTo6c2V0VXNlclBlcm1pc3Npb24p
OgorICAgICAgICAqIEFwaS9xd2VicGFnZS5oOgorICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0R1
bXBSZW5kZXJUcmVlU3VwcG9ydFF0LmNwcDoKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9EdW1w
UmVuZGVyVHJlZVN1cHBvcnRRdC5oOgorICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L05vdGlmaWNh
dGlvblByZXNlbnRlckNsaWVudFF0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok5vdGlmaWNhdGlv
blByZXNlbnRlckNsaWVudFF0OjpyZXF1ZXN0UGVybWlzc2lvbik6CisgICAgICAgIChXZWJDb3Jl
OjpOb3RpZmljYXRpb25QcmVzZW50ZXJDbGllbnRRdDo6Y2hlY2tQZXJtaXNzaW9uKToKKyAgICAg
ICAgKFdlYkNvcmU6Ok5vdGlmaWNhdGlvblByZXNlbnRlckNsaWVudFF0OjpwYWdlKToKKyAgICAg
ICAgKiBXZWJDb3JlU3VwcG9ydC9Ob3RpZmljYXRpb25QcmVzZW50ZXJDbGllbnRRdC5oOgorCiAy
MDEwLTA2LTMwICBTaW1vbiBIYXVzbWFubiAgPHNpbW9uLmhhdXNtYW5uQG5va2lhLmNvbT4KIAog
ICAgICAgICBVbnJldmlld2VkIFN5bWJpYW4gYnVpbGQgZml4LgpJbmRleDogV2ViS2l0L3F0L0Fw
aS9xd2VicGFnZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L3F0L0FwaS9xd2VicGFnZS5jcHAJ
KHJldmlzaW9uIDYyMTQwKQorKysgV2ViS2l0L3F0L0FwaS9xd2VicGFnZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTIxMTAsNiArMjExMCwyMCBAQCBib29sIFFXZWJQYWdlOjphbGxvd0dlb2xvY2F0
aW9uUmVxdWVzdChRCiAjZW5kaWYKIH0KIAordm9pZCBRV2ViUGFnZTo6c2V0VXNlclBlcm1pc3Np
b24oVXNlclBlcm1pc3Npb25UeXBlIHR5cGUsIGNvbnN0IFFTdHJpbmcmIG9yaWdpbiwgVXNlclBl
cm1pc3Npb24gcGVybWlzc2lvbikKK3sKKyAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICBjYXNlIFVz
ZXJQZXJtaXNzaW9uTm90aWZpY2F0aW9uczoKKyNpZiBFTkFCTEUoTk9USUZJQ0FUSU9OUykKKyAg
ICAgICAgaWYgKHBlcm1pc3Npb24gPT0gVXNlclBlcm1pc3Npb25BbGxvd2VkKQorICAgICAgICBO
b3RpZmljYXRpb25QcmVzZW50ZXJDbGllbnRRdDo6bm90aWZpY2F0aW9uUHJlc2VudGVyKCktPmFs
bG93Tm90aWZpY2F0aW9uRm9yT3JpZ2luKG9yaWdpbik7CisjZW5kaWYKKyAgICAgICAgYnJlYWs7
CisgICAgZGVmYXVsdDoKKyAgICAgICAgYnJlYWs7CisgICAgfQorfQorCiAvKiEKICAgICBUaGlz
IGZ1bmN0aW9uIGlzIGNhbGxlZCB3aGVuZXZlciBXZWJLaXQgd2FudHMgdG8gY3JlYXRlIGEgbmV3
IHdpbmRvdyBvZiB0aGUgZ2l2ZW4gXGEgdHlwZSwgZm9yCiAgICAgZXhhbXBsZSB3aGVuIGEgSmF2
YVNjcmlwdCBwcm9ncmFtIHJlcXVlc3RzIHRvIG9wZW4gYSBkb2N1bWVudCBpbiBhIG5ldyB3aW5k
b3cuCkluZGV4OiBXZWJLaXQvcXQvQXBpL3F3ZWJwYWdlLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0
L3F0L0FwaS9xd2VicGFnZS5oCShyZXZpc2lvbiA2MjE0MCkKKysrIFdlYktpdC9xdC9BcGkvcXdl
YnBhZ2UuaAkod29ya2luZyBjb3B5KQpAQCAtMTk1LDYgKzE5NSwxNiBAQCBwdWJsaWM6CiAgICAg
ICAgIFdlYk1vZGFsRGlhbG9nCiAgICAgfTsKIAorICAgIGVudW0gVXNlclBlcm1pc3Npb24gewor
ICAgICAgICBVc2VyUGVybWlzc2lvbkFsbG93ZWQsCisgICAgICAgIFVzZXJQZXJtaXNzaW9uSWdu
b3JlZCwKKyAgICAgICAgVXNlclBlcm1pc3Npb25EZW5pZWQKKyAgICB9OworCisgICAgZW51bSBV
c2VyUGVybWlzc2lvblR5cGUgeworICAgICAgICBVc2VyUGVybWlzc2lvbk5vdGlmaWNhdGlvbnMK
KyAgICB9OworCiAgICAgY2xhc3MgVmlld3BvcnRIaW50cyB7CiAgICAgcHVibGljOgogICAgICAg
ICBWaWV3cG9ydEhpbnRzKCk7CkBAIC0yOTAsNiArMzAwLDggQEAgcHVibGljOgogCiAgICAgUU1l
bnUgKmNyZWF0ZVN0YW5kYXJkQ29udGV4dE1lbnUoKTsKIAorICAgIHZvaWQgc2V0VXNlclBlcm1p
c3Npb24oVXNlclBlcm1pc3Npb25UeXBlLCBjb25zdCBRU3RyaW5nJiwgVXNlclBlcm1pc3Npb24p
OworCiAgICAgZW51bSBFeHRlbnNpb24gewogICAgICAgICBDaG9vc2VNdWx0aXBsZUZpbGVzRXh0
ZW5zaW9uLAogICAgICAgICBFcnJvclBhZ2VFeHRlbnNpb24KQEAgLTM3MSw2ICszODMsOSBAQCBR
X1NJR05BTFM6CiAKICAgICB2b2lkIHZpZXdwb3J0Q2hhbmdlUmVxdWVzdGVkKGNvbnN0IFFXZWJQ
YWdlOjpWaWV3cG9ydEhpbnRzJiBoaW50cyk7CiAKKyAgICB2b2lkIHJlcXVlc3RQZXJtaXNzaW9u
RnJvbVVzZXIoUVdlYlBhZ2U6OlVzZXJQZXJtaXNzaW9uVHlwZSB0eXBlLCBjb25zdCBRU3RyaW5n
JiBvcmlnaW4pOworICAgIHZvaWQgY2hlY2tQZXJtaXNzaW9uRnJvbVVzZXIoUVdlYlBhZ2U6OlVz
ZXJQZXJtaXNzaW9uVHlwZSB0eXBlLCBjb25zdCBRU3RyaW5nJiBvcmlnaW4sIFFXZWJQYWdlOjpV
c2VyUGVybWlzc2lvbiYgcGVybWlzc2lvbik7CisKIHByb3RlY3RlZDoKICAgICB2aXJ0dWFsIFFX
ZWJQYWdlICpjcmVhdGVXaW5kb3coV2ViV2luZG93VHlwZSB0eXBlKTsKICAgICB2aXJ0dWFsIFFP
YmplY3QgKmNyZWF0ZVBsdWdpbihjb25zdCBRU3RyaW5nICZjbGFzc2lkLCBjb25zdCBRVXJsICZ1
cmwsIGNvbnN0IFFTdHJpbmdMaXN0ICZwYXJhbU5hbWVzLCBjb25zdCBRU3RyaW5nTGlzdCAmcGFy
YW1WYWx1ZXMpOwpJbmRleDogV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L0R1bXBSZW5kZXJUcmVl
U3VwcG9ydFF0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvRHVt
cFJlbmRlclRyZWVTdXBwb3J0UXQuY3BwCShyZXZpc2lvbiA2MjE0MCkKKysrIFdlYktpdC9xdC9X
ZWJDb3JlU3VwcG9ydC9EdW1wUmVuZGVyVHJlZVN1cHBvcnRRdC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTcwLDggKzcwLDYgQEAKIAogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKLUNoZWNrUGVy
bWlzc2lvbkZ1bmN0aW9uVHlwZSogY2hlY2tQZXJtaXNzaW9uRnVuY3Rpb24gPSAwOwotUmVxdWVz
dFBlcm1pc3Npb25GdW5jdGlvblR5cGUqIHJlcXVlc3RQZXJtaXNzaW9uRnVuY3Rpb24gPSAwOwog
UU1hcDxpbnQsIFFXZWJTY3JpcHRXb3JsZCo+IG1fd29ybGRNYXA7CiAKIER1bXBSZW5kZXJUcmVl
U3VwcG9ydFF0OjpEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdCgpCkBAIC01NTYsMjAgKzU1NCw2IEBA
IHZvaWQgRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OmR1bXBOb3RpZmkKICNlbmRpZgogfQogCi12
b2lkIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjpzZXROb3RpZmljYXRpb25zUmVjZWl2ZXIoUU9i
amVjdCogcmVjZWl2ZXIpCi17Ci0jaWYgRU5BQkxFKE5PVElGSUNBVElPTlMpCi0gICAgTm90aWZp
Y2F0aW9uUHJlc2VudGVyQ2xpZW50UXQ6Om5vdGlmaWNhdGlvblByZXNlbnRlcigpLT5zZXRSZWNl
aXZlcihyZWNlaXZlcik7Ci0jZW5kaWYKLX0KLQotdm9pZCBEdW1wUmVuZGVyVHJlZVN1cHBvcnRR
dDo6YWxsb3dOb3RpZmljYXRpb25Gb3JPcmlnaW4oY29uc3QgUVN0cmluZyYgb3JpZ2luKQotewot
I2lmIEVOQUJMRShOT1RJRklDQVRJT05TKQotICAgIE5vdGlmaWNhdGlvblByZXNlbnRlckNsaWVu
dFF0Ojpub3RpZmljYXRpb25QcmVzZW50ZXIoKS0+YWxsb3dOb3RpZmljYXRpb25Gb3JPcmlnaW4o
b3JpZ2luKTsKLSNlbmRpZgotfQotCiB2b2lkIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjpzZXRN
b2NrR2VvbG9jYXRpb25Qb3NpdGlvbihkb3VibGUgbGF0aXR1ZGUsIGRvdWJsZSBsb25naXR1ZGUs
IGRvdWJsZSBhY2N1cmFjeSkKIHsKICNpZiBFTkFCTEUoR0VPTE9DQVRJT04pCkBAIC01ODYsMTYg
KzU3MCw2IEBAIHZvaWQgRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OnNldE1vY2tHZW8KICNlbmRp
ZgogfQogCi12b2lkIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjpzZXRDaGVja1Blcm1pc3Npb25G
dW5jdGlvbihDaGVja1Blcm1pc3Npb25GdW5jdGlvblR5cGUqIGYpCi17Ci0gICAgY2hlY2tQZXJt
aXNzaW9uRnVuY3Rpb24gPSBmOwotfQotCi12b2lkIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0Ojpz
ZXRSZXF1ZXN0UGVybWlzc2lvbkZ1bmN0aW9uKFJlcXVlc3RQZXJtaXNzaW9uRnVuY3Rpb25UeXBl
KiBmKQotewotICAgIHJlcXVlc3RQZXJtaXNzaW9uRnVuY3Rpb24gPSBmOwotfQotCiBib29sIER1
bXBSZW5kZXJUcmVlU3VwcG9ydFF0Ojppc1RhcmdldEl0ZW0oY29uc3QgUVdlYkhpc3RvcnlJdGVt
JiBoaXN0b3J5SXRlbSkKIHsKICAgICBRV2ViSGlzdG9yeUl0ZW0gaXQgPSBoaXN0b3J5SXRlbTsK
SW5kZXg6IFdlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9EdW1wUmVuZGVyVHJlZVN1cHBvcnRRdC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9EdW1wUmVuZGVyVHJlZVN1
cHBvcnRRdC5oCShyZXZpc2lvbiA2MjE0MCkKKysrIFdlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9E
dW1wUmVuZGVyVHJlZVN1cHBvcnRRdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMiwxNyArMzIsNiBA
QCBjbGFzcyBRV2ViUGFnZTsKIGNsYXNzIFFXZWJIaXN0b3J5SXRlbTsKIGNsYXNzIFFXZWJTY3Jp
cHRXb3JsZDsKIAotZW51bSBOb3RpZmljYXRpb25QZXJtaXNzaW9uIHsKLSAgICBOb3RpZmljYXRp
b25BbGxvd2VkLAotICAgIE5vdGlmaWNhdGlvbk5vdEFsbG93ZWQsCi0gICAgTm90aWZpY2F0aW9u
RGVuaWVkCi19OwotCi10eXBlZGVmIHZvaWQgKENoZWNrUGVybWlzc2lvbkZ1bmN0aW9uVHlwZSkg
KFFPYmplY3QqIHJlY2VpdmVyLCBjb25zdCBRVXJsJiwgTm90aWZpY2F0aW9uUGVybWlzc2lvbiYp
OwotdHlwZWRlZiB2b2lkIChSZXF1ZXN0UGVybWlzc2lvbkZ1bmN0aW9uVHlwZSkgKFFPYmplY3Qq
IHJlY2VpdmVyLCBjb25zdCBRU3RyaW5nJik7Ci0KLWV4dGVybiBDaGVja1Blcm1pc3Npb25GdW5j
dGlvblR5cGUqIGNoZWNrUGVybWlzc2lvbkZ1bmN0aW9uOwotZXh0ZXJuIFJlcXVlc3RQZXJtaXNz
aW9uRnVuY3Rpb25UeXBlKiByZXF1ZXN0UGVybWlzc2lvbkZ1bmN0aW9uOwogZXh0ZXJuIFFNYXA8
aW50LCBRV2ViU2NyaXB0V29ybGQqPiBtX3dvcmxkTWFwOwogCiBjbGFzcyBRV0VCS0lUX0VYUE9S
VCBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdCB7CkBAIC0xMjEsMTMgKzExMCw2IEBAIHB1YmxpYzoK
IAogICAgIHN0YXRpYyB2b2lkIGR1bXBOb3RpZmljYXRpb24oYm9vbCBiKTsKIAotICAgIC8vIFRo
ZXNlIGZ1bmN0aW9ucyBzaG91bGQgZXZlbnR1YWxseSB0dXJuIGludG8gcHVibGljIEFQSQotICAg
IC8vIGFuZCB0aGUgInJlY2VpdmVyIiBjb25jZXB0IHdvdWxkIGdvIGF3YXkKLSAgICBzdGF0aWMg
dm9pZCBzZXROb3RpZmljYXRpb25zUmVjZWl2ZXIoUU9iamVjdCogcmVjZWl2ZXIpOwotICAgIHN0
YXRpYyB2b2lkIGFsbG93Tm90aWZpY2F0aW9uRm9yT3JpZ2luKGNvbnN0IFFTdHJpbmcmIG9yaWdp
bik7Ci0gICAgc3RhdGljIHZvaWQgc2V0Q2hlY2tQZXJtaXNzaW9uRnVuY3Rpb24oQ2hlY2tQZXJt
aXNzaW9uRnVuY3Rpb25UeXBlKik7Ci0gICAgc3RhdGljIHZvaWQgc2V0UmVxdWVzdFBlcm1pc3Np
b25GdW5jdGlvbihSZXF1ZXN0UGVybWlzc2lvbkZ1bmN0aW9uVHlwZSopOwotCiAgICAgc3RhdGlj
IFFMaXN0PFFXZWJIaXN0b3J5SXRlbT4gZ2V0Q2hpbGRIaXN0b3J5SXRlbXMoY29uc3QgUVdlYkhp
c3RvcnlJdGVtJiBoaXN0b3J5SXRlbSk7CiAgICAgc3RhdGljIGJvb2wgaXNUYXJnZXRJdGVtKGNv
bnN0IFFXZWJIaXN0b3J5SXRlbSYgaGlzdG9yeUl0ZW0pOwogICAgIHN0YXRpYyBRU3RyaW5nIGhp
c3RvcnlJdGVtVGFyZ2V0KGNvbnN0IFFXZWJIaXN0b3J5SXRlbSYgaGlzdG9yeUl0ZW0pOwpJbmRl
eDogV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L05vdGlmaWNhdGlvblByZXNlbnRlckNsaWVudFF0
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvTm90aWZpY2F0aW9u
UHJlc2VudGVyQ2xpZW50UXQuY3BwCShyZXZpc2lvbiA2MjE0MCkKKysrIFdlYktpdC9xdC9XZWJD
b3JlU3VwcG9ydC9Ob3RpZmljYXRpb25QcmVzZW50ZXJDbGllbnRRdC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTM2LDEwICszNiwxNCBAQAogI2luY2x1ZGUgIkR1bXBSZW5kZXJUcmVlU3VwcG9ydFF0
LmgiCiAjaW5jbHVkZSAiRXZlbnROYW1lcy5oIgogI2luY2x1ZGUgIktVUkwuaCIKKyNpbmNsdWRl
ICJQYWdlLmgiCiAjaW5jbHVkZSAiUXRQbGF0Zm9ybVBsdWdpbi5oIgorI2luY2x1ZGUgIlNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQuaCIKICNpbmNsdWRlICJTZWN1cml0eU9yaWdpbi5oIgogCisjaW5j
bHVkZSAicXdlYmZyYW1lX3AuaCIKICNpbmNsdWRlICJxd2Via2l0Z2xvYmFsLmgiCisjaW5jbHVk
ZSAicXdlYnBhZ2UuaCIKICNpbmNsdWRlIDxRdEd1aT4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpA
QCAtMjUyLDEyICsyNTYsMTIgQEAgdm9pZCBOb3RpZmljYXRpb25QcmVzZW50ZXJDbGllbnRRdDo6
bm90aQogICAgICAgICBkZWxldGUgbV9ub3RpZmljYXRpb25zLnRha2Uobm90aWZpY2F0aW9uKTsK
IH0KIAotdm9pZCBOb3RpZmljYXRpb25QcmVzZW50ZXJDbGllbnRRdDo6cmVxdWVzdFBlcm1pc3Np
b24oU2VjdXJpdHlPcmlnaW4qIG9yaWdpbiwgUGFzc1JlZlB0cjxWb2lkQ2FsbGJhY2s+IGNhbGxi
YWNrKQordm9pZCBOb3RpZmljYXRpb25QcmVzZW50ZXJDbGllbnRRdDo6cmVxdWVzdFBlcm1pc3Np
b24oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgUGFzc1JlZlB0cjxWb2lkQ2FsbGJh
Y2s+IGNhbGxiYWNrKQogeyAgCiAgICAgaWYgKGR1bXBOb3RpZmljYXRpb24pCi0gICAgICAgIHBy
aW50ZigiREVTS1RPUCBOT1RJRklDQVRJT04gUEVSTUlTU0lPTiBSRVFVRVNURUQ6ICVzXG4iLCBR
U3RyaW5nKG9yaWdpbi0+dG9TdHJpbmcoKSkudG9VdGY4KCkuY29uc3REYXRhKCkpOworICAgICAg
ICBwcmludGYoIkRFU0tUT1AgTk9USUZJQ0FUSU9OIFBFUk1JU1NJT04gUkVRVUVTVEVEOiAlc1xu
IiwgUVN0cmluZyhjb250ZXh0LT5zZWN1cml0eU9yaWdpbigpLT50b1N0cmluZygpKS50b1V0Zjgo
KS5jb25zdERhdGEoKSk7CiAKLSAgICBRU3RyaW5nIG9yaWdpblN0cmluZyA9IG9yaWdpbi0+dG9T
dHJpbmcoKTsKKyAgICBRU3RyaW5nIG9yaWdpblN0cmluZyA9IGNvbnRleHQtPnNlY3VyaXR5T3Jp
Z2luKCktPnRvU3RyaW5nKCk7CiAgICAgUUhhc2g8UVN0cmluZywgUUxpc3Q8UmVmUHRyPFZvaWRD
YWxsYmFjaz4gPiA+OjppdGVyYXRvciBpdGVyID0gbV9wZW5kaW5nUGVybWlzc2lvblJlcXVlc3Rz
LmZpbmQob3JpZ2luU3RyaW5nKTsKICAgICBpZiAoaXRlciAhPSBtX3BlbmRpbmdQZXJtaXNzaW9u
UmVxdWVzdHMuZW5kKCkpCiAgICAgICAgIGl0ZXIudmFsdWUoKS5hcHBlbmQoY2FsbGJhY2spOwpA
QCAtMjY2LDIzICsyNzAsMjQgQEAgdm9pZCBOb3RpZmljYXRpb25QcmVzZW50ZXJDbGllbnRRdDo6
cmVxdQogICAgICAgICBSZWZQdHI8Vm9pZENhbGxiYWNrPiBjYiA9IGNhbGxiYWNrOwogICAgICAg
ICBjYWxsYmFja3MuYXBwZW5kKGNiKTsKICAgICAgICAgbV9wZW5kaW5nUGVybWlzc2lvblJlcXVl
c3RzLmluc2VydChvcmlnaW5TdHJpbmcsIGNhbGxiYWNrcyk7Ci0gICAgICAgIGlmIChyZXF1ZXN0
UGVybWlzc2lvbkZ1bmN0aW9uKQotICAgICAgICAgICAgcmVxdWVzdFBlcm1pc3Npb25GdW5jdGlv
bihtX3JlY2VpdmVyLCBvcmlnaW5TdHJpbmcpOworICAgICAgICBpZiAocGFnZShjb250ZXh0KSkK
KyAgICAgICAgICAgIGVtaXQgcGFnZShjb250ZXh0KS0+cmVxdWVzdFBlcm1pc3Npb25Gcm9tVXNl
cihRV2ViUGFnZTo6VXNlclBlcm1pc3Npb25Ob3RpZmljYXRpb25zLCBvcmlnaW5TdHJpbmcpOwog
ICAgIH0KIH0KIAotTm90aWZpY2F0aW9uUHJlc2VudGVyOjpQZXJtaXNzaW9uIE5vdGlmaWNhdGlv
blByZXNlbnRlckNsaWVudFF0OjpjaGVja1Blcm1pc3Npb24oY29uc3QgS1VSTCYgdXJsKQorTm90
aWZpY2F0aW9uUHJlc2VudGVyOjpQZXJtaXNzaW9uIE5vdGlmaWNhdGlvblByZXNlbnRlckNsaWVu
dFF0OjpjaGVja1Blcm1pc3Npb24oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCkKIHsK
LSAgICBOb3RpZmljYXRpb25QZXJtaXNzaW9uIHBlcm1pc3Npb24gPSBOb3RpZmljYXRpb25Ob3RB
bGxvd2VkOwotICAgIFFTdHJpbmcgb3JpZ2luID0gdXJsLnN0cmluZygpOwotICAgIGlmIChjaGVj
a1Blcm1pc3Npb25GdW5jdGlvbikKLSAgICAgICAgY2hlY2tQZXJtaXNzaW9uRnVuY3Rpb24obV9y
ZWNlaXZlciwgb3JpZ2luLCBwZXJtaXNzaW9uKTsKKyAgICBRV2ViUGFnZTo6VXNlclBlcm1pc3Np
b24gcGVybWlzc2lvbiA9IFFXZWJQYWdlOjpVc2VyUGVybWlzc2lvbklnbm9yZWQ7CisgICAgUVN0
cmluZyBvcmlnaW4gPSBjb250ZXh0LT51cmwoKS5zdHJpbmcoKTsKKyAgICBpZiAocGFnZShjb250
ZXh0KSkKKyAgICAgICAgZW1pdCBwYWdlKGNvbnRleHQpLT5jaGVja1Blcm1pc3Npb25Gcm9tVXNl
cihRV2ViUGFnZTo6VXNlclBlcm1pc3Npb25Ob3RpZmljYXRpb25zLCBvcmlnaW4sIHBlcm1pc3Np
b24pOworCiAgICAgc3dpdGNoIChwZXJtaXNzaW9uKSB7Ci0gICAgY2FzZSBOb3RpZmljYXRpb25B
bGxvd2VkOgorICAgIGNhc2UgUVdlYlBhZ2U6OlVzZXJQZXJtaXNzaW9uQWxsb3dlZDoKICAgICAg
ICAgcmV0dXJuIE5vdGlmaWNhdGlvblByZXNlbnRlcjo6UGVybWlzc2lvbkFsbG93ZWQ7Ci0gICAg
Y2FzZSBOb3RpZmljYXRpb25Ob3RBbGxvd2VkOgorICAgIGNhc2UgUVdlYlBhZ2U6OlVzZXJQZXJt
aXNzaW9uSWdub3JlZDoKICAgICAgICAgcmV0dXJuIE5vdGlmaWNhdGlvblByZXNlbnRlcjo6UGVy
bWlzc2lvbk5vdEFsbG93ZWQ7Ci0gICAgY2FzZSBOb3RpZmljYXRpb25EZW5pZWQ6CisgICAgY2Fz
ZSBRV2ViUGFnZTo6VXNlclBlcm1pc3Npb25EZW5pZWQ6CiAgICAgICAgIHJldHVybiBOb3RpZmlj
YXRpb25QcmVzZW50ZXI6OlBlcm1pc3Npb25EZW5pZWQ7CiAgICAgfQogICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwpAQCAtMzU0LDYgKzM1OSwyMiBAQCB2b2lkIE5vdGlmaWNhdGlvblByZXNlbnRl
ckNsaWVudFF0OjpkdW1wCiAgICAgfQogfQogCitRV2ViUGFnZSogTm90aWZpY2F0aW9uUHJlc2Vu
dGVyQ2xpZW50UXQ6OnBhZ2UoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCkKK3sKKyAg
ICBpZiAoIWNvbnRleHQgfHwgY29udGV4dC0+aXNXb3JrZXJDb250ZXh0KCkpCisgICAgICAgIHJl
dHVybiAwOworCisgICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gc3RhdGljX2Nhc3Q8RG9jdW1lbnQq
Pihjb250ZXh0KTsKKyAgICBpZiAoIWRvY3VtZW50KQorICAgICAgICByZXR1cm4gMDsKKworICAg
IFBhZ2UqIHBhZ2UgPSBkb2N1bWVudC0+cGFnZSgpOworICAgIGlmICghcGFnZSkKKyAgICAgICAg
cmV0dXJuIDA7CisKKyAgICByZXR1cm4gUVdlYkZyYW1lUHJpdmF0ZTo6a2l0KHBhZ2UtPm1haW5G
cmFtZSgpKS0+cGFnZSgpOworfQorCiAjZW5kaWYgLy8gRU5BQkxFKE5PVElGSUNBVElPTlMpCiB9
CiAKSW5kZXg6IFdlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9Ob3RpZmljYXRpb25QcmVzZW50ZXJD
bGllbnRRdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9Ob3RpZmlj
YXRpb25QcmVzZW50ZXJDbGllbnRRdC5oCShyZXZpc2lvbiA2MjE0MCkKKysrIFdlYktpdC9xdC9X
ZWJDb3JlU3VwcG9ydC9Ob3RpZmljYXRpb25QcmVzZW50ZXJDbGllbnRRdC5oCSh3b3JraW5nIGNv
cHkpCkBAIC00MiwxMCArNDIsMTIgQEAKICNpbmNsdWRlIDxRTXVsdGlIYXNoPgogI2luY2x1ZGUg
PFFTeXN0ZW1UcmF5SWNvbj4KIAorY2xhc3MgUVdlYlBhZ2U7CisKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAogY2xhc3MgRG9jdW1lbnQ7Ci1jbGFzcyBLVVJMOworY2xhc3MgU2NyaXB0RXhlY3V0aW9u
Q29udGV4dDsKIAogY2xhc3MgTm90aWZpY2F0aW9uV3JhcHBlciA6IHB1YmxpYyBRT2JqZWN0LCBw
dWJsaWMgUVdlYk5vdGlmaWNhdGlvbkRhdGEgewogICAgIFFfT0JKRUNUCkBAIC04NCw4ICs4Niw4
IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGJvb2wgc2hvdyhOb3RpZmljYXRpb24qKTsKICAgICB2
aXJ0dWFsIHZvaWQgY2FuY2VsKE5vdGlmaWNhdGlvbiopOwogICAgIHZpcnR1YWwgdm9pZCBub3Rp
ZmljYXRpb25PYmplY3REZXN0cm95ZWQoTm90aWZpY2F0aW9uKik7Ci0gICAgdmlydHVhbCB2b2lk
IHJlcXVlc3RQZXJtaXNzaW9uKFNlY3VyaXR5T3JpZ2luKiwgUGFzc1JlZlB0cjxWb2lkQ2FsbGJh
Y2s+KTsKLSAgICB2aXJ0dWFsIE5vdGlmaWNhdGlvblByZXNlbnRlcjo6UGVybWlzc2lvbiBjaGVj
a1Blcm1pc3Npb24oY29uc3QgS1VSTCYpOworICAgIHZpcnR1YWwgdm9pZCByZXF1ZXN0UGVybWlz
c2lvbihTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxWb2lkQ2FsbGJhY2s+KTsK
KyAgICB2aXJ0dWFsIE5vdGlmaWNhdGlvblByZXNlbnRlcjo6UGVybWlzc2lvbiBjaGVja1Blcm1p
c3Npb24oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCopOwogCiAgICAgdm9pZCBjYW5jZWwoTm90aWZp
Y2F0aW9uV3JhcHBlciopOwogCkBAIC05Myw4ICs5NSw2IEBAIHB1YmxpYzoKIAogICAgIHN0YXRp
YyBib29sIGR1bXBOb3RpZmljYXRpb247CiAKLSAgICB2b2lkIHNldFJlY2VpdmVyKFFPYmplY3Qq
IHJlY2VpdmVyKSB7IG1fcmVjZWl2ZXIgPSByZWNlaXZlcjsgfQotCiAgICAgdm9pZCBhZGRDbGll
bnQoKSB7IG1fY2xpZW50Q291bnQrKzsgfQogICAgIHZvaWQgcmVtb3ZlQ2xpZW50KCk7CiAgICAg
c3RhdGljIE5vdGlmaWNhdGlvblByZXNlbnRlckNsaWVudFF0KiBub3RpZmljYXRpb25QcmVzZW50
ZXIoKTsKQEAgLTEwOCwxMSArMTA4LDExIEBAIHByaXZhdGU6CiAgICAgdm9pZCBkZXRhY2hOb3Rp
ZmljYXRpb24oTm90aWZpY2F0aW9uKik7CiAgICAgdm9pZCBkdW1wUmVwbGFjZWRJZFRleHQoTm90
aWZpY2F0aW9uKik7CiAgICAgdm9pZCBkdW1wU2hvd1RleHQoTm90aWZpY2F0aW9uKik7CisgICAg
UVdlYlBhZ2UqIHBhZ2UoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCopOwogCiAgICAgaW50IG1fY2xp
ZW50Q291bnQ7CiAgICAgUUhhc2g8UVN0cmluZywgIFFMaXN0PFJlZlB0cjxWb2lkQ2FsbGJhY2s+
ID4gPiBtX3BlbmRpbmdQZXJtaXNzaW9uUmVxdWVzdHM7CiAgICAgTm90aWZpY2F0aW9uc1F1ZXVl
IG1fbm90aWZpY2F0aW9uczsKLSAgICBRT2JqZWN0KiBtX3JlY2VpdmVyOwogICAgIFF0UGxhdGZv
cm1QbHVnaW4gbV9wbGF0Zm9ybVBsdWdpbjsKIH07CiAKSW5kZXg6IFdlYktpdFRvb2xzL0NoYW5n
ZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXRUb29scy9DaGFuZ2VMb2cJKHJldmlzaW9uIDYyMTg3
KQorKysgV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjUg
QEAKKzIwMTAtMDYtMzAgIFlhZWwgQWhhcm9uICA8eWFlbC5haGFyb25Abm9raWEuY29tPgorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFtRdF0gUXRXZWJL
aXQgbmVlZHMgcHVibGljIEFQSSBmb3IgTm90aWZpY2F0aW9ucy4KKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQxNDEzCisKKyAgICAgICAgVXBkYXRlIER1
bXBSZW5kZXJUcmVlIGFuZCBRdFRlc3RCcm93c2VyIHRvIHVzZSB0aGUgbmV3IEFQSS4KKworICAg
ICAgICAqIER1bXBSZW5kZXJUcmVlL3F0L0R1bXBSZW5kZXJUcmVlUXQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6V2ViUGFnZTo6V2ViUGFnZSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJQYWdlOjpy
ZXF1ZXN0UGVybWlzc2lvbik6CisgICAgICAgIChXZWJDb3JlOjpXZWJQYWdlOjpjaGVja1Blcm1p
c3Npb24pOgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL3F0L0R1bXBSZW5kZXJUcmVlUXQuaDoK
KyAgICAgICAgKiBRdFRlc3RCcm93c2VyL21haW4uY3BwOgorICAgICAgICAoTGF1bmNoZXJXaW5k
b3c6OkxhdW5jaGVyV2luZG93KToKKyAgICAgICAgKiBRdFRlc3RCcm93c2VyL3dlYnBhZ2UuY3Bw
OgorICAgICAgICAoV2ViUGFnZTo6V2ViUGFnZSk6CisgICAgICAgIChXZWJQYWdlOjpyZXF1ZXN0
UGVybWlzc2lvbik6CisgICAgICAgIChXZWJQYWdlOjpjaGVja1Blcm1pc3Npb24pOgorICAgICAg
ICAqIFF0VGVzdEJyb3dzZXIvd2VicGFnZS5oOgorCiAyMDEwLTA2LTMwICBTaW1vbiBIYXVzbWFu
biAgPHNpbW9uLmhhdXNtYW5uQG5va2lhLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBMYXN6
bG8gR29tYm9zLgpJbmRleDogV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvcXQvRHVtcFJlbmRl
clRyZWVRdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvcXQv
RHVtcFJlbmRlclRyZWVRdC5jcHAJKHJldmlzaW9uIDYyMTQwKQorKysgV2ViS2l0VG9vbHMvRHVt
cFJlbmRlclRyZWUvcXQvRHVtcFJlbmRlclRyZWVRdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEz
MCwxNiArMTMwLDYgQEAgcHVibGljOgogfTsKICNlbmRpZgogCi12b2lkIGNoZWNrUGVybWlzc2lv
bkNhbGxiYWNrKFFPYmplY3QqIHJlY2VpdmVyLCBjb25zdCBRVXJsJiB1cmwsIE5vdGlmaWNhdGlv
blBlcm1pc3Npb24mIHBlcm1pc3Npb24pCi17Ci0gICAgcW9iamVjdF9jYXN0PER1bXBSZW5kZXJU
cmVlKj4ocmVjZWl2ZXIpLT5jaGVja1Blcm1pc3Npb24odXJsLCBwZXJtaXNzaW9uKTsKLX0KLQot
dm9pZCByZXF1ZXN0UGVybWlzc2lvbkNhbGxiYWNrKFFPYmplY3QqIHJlY2VpdmVyLCBjb25zdCBR
U3RyaW5nJiBvcmlnaW4pCi17Ci0gICAgcW9iamVjdF9jYXN0PER1bXBSZW5kZXJUcmVlKj4ocmVj
ZWl2ZXIpLT5yZXF1ZXN0UGVybWlzc2lvbihvcmlnaW4pOwotfQotCiBXZWJQYWdlOjpXZWJQYWdl
KFFPYmplY3QqIHBhcmVudCwgRHVtcFJlbmRlclRyZWUqIGRydCkKICAgICA6IFFXZWJQYWdlKHBh
cmVudCkKICAgICAsIG1fd2ViSW5zcGVjdG9yKDApCkBAIC0xNjcsMTAgKzE1Nyw4IEBAIFdlYlBh
Z2U6OldlYlBhZ2UoUU9iamVjdCogcGFyZW50LCBEdW1wUmUKICAgICBzZXROZXR3b3JrQWNjZXNz
TWFuYWdlcihtX2RydC0+bmV0d29ya0FjY2Vzc01hbmFnZXIoKSk7CiAgICAgc2V0UGx1Z2luRmFj
dG9yeShuZXcgVGVzdFBsdWdpbih0aGlzKSk7CiAKLSAgICBEdW1wUmVuZGVyVHJlZVN1cHBvcnRR
dDo6c2V0Tm90aWZpY2F0aW9uc1JlY2VpdmVyKG1fZHJ0KTsKLSAgICBEdW1wUmVuZGVyVHJlZVN1
cHBvcnRRdDo6c2V0Q2hlY2tQZXJtaXNzaW9uRnVuY3Rpb24oY2hlY2tQZXJtaXNzaW9uQ2FsbGJh
Y2spOwotICAgIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjpzZXRSZXF1ZXN0UGVybWlzc2lvbkZ1
bmN0aW9uKHJlcXVlc3RQZXJtaXNzaW9uQ2FsbGJhY2spOwotCisgICAgY29ubmVjdCh0aGlzLCBT
SUdOQUwocmVxdWVzdFBlcm1pc3Npb25Gcm9tVXNlcihRV2ViUGFnZTo6VXNlclBlcm1pc3Npb25U
eXBlLCBjb25zdCBRU3RyaW5nJikpLCB0aGlzLCBTTE9UKHJlcXVlc3RQZXJtaXNzaW9uKFFXZWJQ
YWdlOjpVc2VyUGVybWlzc2lvblR5cGUsIGNvbnN0IFFTdHJpbmcmKSkpOworICAgIGNvbm5lY3Qo
dGhpcywgU0lHTkFMKGNoZWNrUGVybWlzc2lvbkZyb21Vc2VyKFFXZWJQYWdlOjpVc2VyUGVybWlz
c2lvblR5cGUsIGNvbnN0IFFTdHJpbmcmLCBRV2ViUGFnZTo6VXNlclBlcm1pc3Npb24mKSksIHRo
aXMsIFNMT1QoY2hlY2tQZXJtaXNzaW9uKFFXZWJQYWdlOjpVc2VyUGVybWlzc2lvblR5cGUsIGNv
bnN0IFFTdHJpbmcmLCBRV2ViUGFnZTo6VXNlclBlcm1pc3Npb24mKSkpOwogfQogCiBXZWJQYWdl
Ojp+V2ViUGFnZSgpCkBAIC0yMjgsNiArMjE2LDMxIEBAIHZvaWQgV2ViUGFnZTo6amF2YVNjcmlw
dEFsZXJ0KFFXZWJGcmFtZSoKICAgICBmcHJpbnRmKHN0ZG91dCwgIkFMRVJUOiAlc1xuIiwgbWVz
c2FnZS50b1V0ZjgoKS5jb25zdERhdGEoKSk7CiB9CiAKK3ZvaWQgV2ViUGFnZTo6cmVxdWVzdFBl
cm1pc3Npb24oUVdlYlBhZ2U6OlVzZXJQZXJtaXNzaW9uVHlwZSB0eXBlLCBjb25zdCBRU3RyaW5n
JiBvcmlnaW4pCit7CisgICAgc3dpdGNoICh0eXBlKSB7CisgICAgY2FzZSBVc2VyUGVybWlzc2lv
bk5vdGlmaWNhdGlvbnM6CisgICAgICAgIHNldFVzZXJQZXJtaXNzaW9uKHR5cGUsIG9yaWdpbiwg
VXNlclBlcm1pc3Npb25BbGxvd2VkKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAg
ICAgICAgYnJlYWs7CisgICAgfQorfQorCit2b2lkIFdlYlBhZ2U6OmNoZWNrUGVybWlzc2lvbihR
V2ViUGFnZTo6VXNlclBlcm1pc3Npb25UeXBlIHR5cGUsIGNvbnN0IFFTdHJpbmcmIG9yaWdpbiwg
UVdlYlBhZ2U6OlVzZXJQZXJtaXNzaW9uJiBwZXJtaXNzaW9uKQoreworICAgIHN3aXRjaCAodHlw
ZSkgeworICAgIGNhc2UgVXNlclBlcm1pc3Npb25Ob3RpZmljYXRpb25zOgorICAgICAgICB7Cisg
ICAgICAgIFFVcmwgdXJsKG9yaWdpbik7CisgICAgICAgIHBlcm1pc3Npb24gPSBtX2RydC0+bGF5
b3V0VGVzdENvbnRyb2xsZXIoKS0+Y2hlY2tEZXNrdG9wTm90aWZpY2F0aW9uUGVybWlzc2lvbih1
cmwuc2NoZW1lKCkgKyAiOi8vIiArIHVybC5ob3N0KCkpID8gVXNlclBlcm1pc3Npb25BbGxvd2Vk
IDogVXNlclBlcm1pc3Npb25EZW5pZWQ7CisgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAg
ZGVmYXVsdDoKKyAgICAgICAgYnJlYWs7CisgICAgfQorfQorCiBzdGF0aWMgUVN0cmluZyB1cmxT
dWl0YWJsZUZvclRlc3RSZXN1bHQoY29uc3QgUVN0cmluZyYgdXJsKQogewogICAgIGlmICh1cmwu
aXNFbXB0eSgpIHx8ICF1cmwuc3RhcnRzV2l0aChRTGF0aW4xU3RyaW5nKCJmaWxlOi8vIikpKQpA
QCAtOTY4LDE2ICs5ODEsNiBAQCB2b2lkIER1bXBSZW5kZXJUcmVlOjpzd2l0Y2hGb2N1cyhib29s
IGZvCiAKIH0KIAotdm9pZCBEdW1wUmVuZGVyVHJlZTo6Y2hlY2tQZXJtaXNzaW9uKGNvbnN0IFFV
cmwmIHVybCwgTm90aWZpY2F0aW9uUGVybWlzc2lvbiYgcGVybWlzc2lvbikKLXsKLSAgICBwZXJt
aXNzaW9uID0gbV9jb250cm9sbGVyLT5jaGVja0Rlc2t0b3BOb3RpZmljYXRpb25QZXJtaXNzaW9u
KHVybC5zY2hlbWUoKSArICI6Ly8iICsgdXJsLmhvc3QoKSkgPyBOb3RpZmljYXRpb25BbGxvd2Vk
IDogTm90aWZpY2F0aW9uRGVuaWVkOwotfQotCi12b2lkIER1bXBSZW5kZXJUcmVlOjpyZXF1ZXN0
UGVybWlzc2lvbihjb25zdCBRU3RyaW5nJiBvcmlnaW4pCi17Ci0gICAgRHVtcFJlbmRlclRyZWVT
dXBwb3J0UXQ6OmFsbG93Tm90aWZpY2F0aW9uRm9yT3JpZ2luKG9yaWdpbik7Ci19Ci0KICNpZiBk
ZWZpbmVkKFFfV1NfWDExKQogdm9pZCBEdW1wUmVuZGVyVHJlZTo6aW5pdGlhbGl6ZUZvbnRzKCkK
IHsKSW5kZXg6IFdlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL3F0L0R1bXBSZW5kZXJUcmVlUXQu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS9xdC9EdW1wUmVuZGVy
VHJlZVF0LmgJKHJldmlzaW9uIDYyMTQwKQorKysgV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUv
cXQvRHVtcFJlbmRlclRyZWVRdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMTksOCArMTE5LDYgQEAg
cHVibGljIFFfU0xPVFM6CiAgICAgdm9pZCBkdW1wRGF0YWJhc2VRdW90YShRV2ViRnJhbWUqIGZy
YW1lLCBjb25zdCBRU3RyaW5nJiBkYk5hbWUpOwogICAgIHZvaWQgc3RhdHVzQmFyTWVzc2FnZShj
b25zdCBRU3RyaW5nJiBtZXNzYWdlKTsKICAgICB2b2lkIHdpbmRvd0Nsb3NlUmVxdWVzdGVkKCk7
Ci0gICAgdm9pZCBjaGVja1Blcm1pc3Npb24oY29uc3QgUVVybCYsIE5vdGlmaWNhdGlvblBlcm1p
c3Npb24mKTsKLSAgICB2b2lkIHJlcXVlc3RQZXJtaXNzaW9uKGNvbnN0IFFTdHJpbmcmKTsKIAog
UV9TSUdOQUxTOgogICAgIHZvaWQgcXVpdCgpOwpAQCAtMTkyLDYgKzE5MCw4IEBAIHB1YmxpYzoK
IHB1YmxpYyBzbG90czoKICAgICBib29sIHNob3VsZEludGVycnVwdEphdmFTY3JpcHQoKSB7IHJl
dHVybiBmYWxzZTsgfQogICAgIGJvb2wgYWxsb3dHZW9sb2NhdGlvblJlcXVlc3QoUVdlYkZyYW1l
ICpmcmFtZSk7CisgICAgdm9pZCByZXF1ZXN0UGVybWlzc2lvbihRV2ViUGFnZTo6VXNlclBlcm1p
c3Npb25UeXBlIHR5cGUsIGNvbnN0IFFTdHJpbmcmIG9yaWdpbik7CisgICAgdm9pZCBjaGVja1Bl
cm1pc3Npb24oUVdlYlBhZ2U6OlVzZXJQZXJtaXNzaW9uVHlwZSB0eXBlLCBjb25zdCBRU3RyaW5n
JiBvcmlnaW4sIFFXZWJQYWdlOjpVc2VyUGVybWlzc2lvbiYgcGVybWlzc2lvbik7CiAKIHByb3Rl
Y3RlZDoKICAgICBib29sIGFjY2VwdE5hdmlnYXRpb25SZXF1ZXN0KFFXZWJGcmFtZSogZnJhbWUs
IGNvbnN0IFFOZXR3b3JrUmVxdWVzdCYgcmVxdWVzdCwgTmF2aWdhdGlvblR5cGUgdHlwZSk7Cklu
ZGV4OiBXZWJLaXRUb29scy9RdFRlc3RCcm93c2VyL21haW4uY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YktpdFRvb2xzL1F0VGVzdEJyb3dzZXIvbWFpbi5jcHAJKHJldmlzaW9uIDYyMTQwKQorKysgV2Vi
S2l0VG9vbHMvUXRUZXN0QnJvd3Nlci9tYWluLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTIsMjkg
KzkyLDYgQEAgc3RhdGljIGJvb2wgZ1VzZUZyYW1lRmxhdHRlbmluZyA9IGZhbHNlOwogc3RhdGlj
IGJvb2wgZ1VzZVFHTFdpZGdldFZpZXdwb3J0ID0gZmFsc2U7CiAjZW5kaWYKIAotY2xhc3MgTm90
aWZpY2F0aW9uc1Blcm1pc3Npb25Db250cm9sbGVyIDogcHVibGljIFFPYmplY3QgewotICAgIFFf
T0JKRUNUCi1wdWJsaWM6Ci0gICAgTm90aWZpY2F0aW9uc1Blcm1pc3Npb25Db250cm9sbGVyKFFP
YmplY3QqIHBhcmVudCkgOiBRT2JqZWN0KHBhcmVudCkgCi0gICAgewotICAgICAgICBEdW1wUmVu
ZGVyVHJlZVN1cHBvcnRRdDo6c2V0Tm90aWZpY2F0aW9uc1JlY2VpdmVyKHRoaXMpOwotICAgICAg
ICBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6c2V0Q2hlY2tQZXJtaXNzaW9uRnVuY3Rpb24oY2hl
Y2tQZXJtaXNzaW9uKTsKLSAgICAgICAgRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OnNldFJlcXVl
c3RQZXJtaXNzaW9uRnVuY3Rpb24ocmVxdWVzdFBlcm1pc3Npb24pOwotICAgIH0KLQotICAgIHN0
YXRpYyB2b2lkIGNoZWNrUGVybWlzc2lvbihRT2JqZWN0KiwgY29uc3QgUVVybCYsIE5vdGlmaWNh
dGlvblBlcm1pc3Npb24mIHBlcm1pc3Npb24pCi0gICAgewotICAgICAgICBwZXJtaXNzaW9uID0g
Tm90aWZpY2F0aW9uQWxsb3dlZDsKLSAgICB9Ci0KLSAgICBzdGF0aWMgdm9pZCByZXF1ZXN0UGVy
bWlzc2lvbihRT2JqZWN0KiwgY29uc3QgUVN0cmluZyYgb3JpZ2luKQotICAgIHsKLSAgICAgICAg
RHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OmFsbG93Tm90aWZpY2F0aW9uRm9yT3JpZ2luKG9yaWdp
bik7Ci0gICAgfQotfTsKLQotTm90aWZpY2F0aW9uc1Blcm1pc3Npb25Db250cm9sbGVyKiBub3Rp
ZmljYXRpb25zUGVybWlzc2lvbkNvbnRyb2xsZXIgPSAwOwotCiBjbGFzcyBMYXVuY2hlcldpbmRv
dyA6IHB1YmxpYyBNYWluV2luZG93IHsKICAgICBRX09CSkVDVAogCkBAIC0yMzMsOCArMjEwLDYg
QEAgTGF1bmNoZXJXaW5kb3c6OkxhdW5jaGVyV2luZG93KExhdW5jaGVyVwogICAgIH0KIAogICAg
IGNyZWF0ZUNocm9tZSgpOwotICAgIGlmICghbm90aWZpY2F0aW9uc1Blcm1pc3Npb25Db250cm9s
bGVyKQotICAgICAgICBub3RpZmljYXRpb25zUGVybWlzc2lvbkNvbnRyb2xsZXIgPSBuZXcgTm90
aWZpY2F0aW9uc1Blcm1pc3Npb25Db250cm9sbGVyKFFDb3JlQXBwbGljYXRpb246Omluc3RhbmNl
KCkpOwogfQogCiBMYXVuY2hlcldpbmRvdzo6fkxhdW5jaGVyV2luZG93KCkKSW5kZXg6IFdlYktp
dFRvb2xzL1F0VGVzdEJyb3dzZXIvd2VicGFnZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0VG9v
bHMvUXRUZXN0QnJvd3Nlci93ZWJwYWdlLmNwcAkocmV2aXNpb24gNjIxNDApCisrKyBXZWJLaXRU
b29scy9RdFRlc3RCcm93c2VyL3dlYnBhZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OCw2ICs0
OCw4IEBAIFdlYlBhZ2U6OldlYlBhZ2UoUU9iamVjdCogcGFyZW50KQogCiAgICAgY29ubmVjdChu
ZXR3b3JrQWNjZXNzTWFuYWdlcigpLCBTSUdOQUwoYXV0aGVudGljYXRpb25SZXF1aXJlZChRTmV0
d29ya1JlcGx5KiwgUUF1dGhlbnRpY2F0b3IqKSksCiAgICAgICAgICAgICB0aGlzLCBTTE9UKGF1
dGhlbnRpY2F0aW9uUmVxdWlyZWQoUU5ldHdvcmtSZXBseSosIFFBdXRoZW50aWNhdG9yKikpKTsK
KyAgICBjb25uZWN0KHRoaXMsIFNJR05BTChyZXF1ZXN0UGVybWlzc2lvbkZyb21Vc2VyKFFXZWJQ
YWdlOjpVc2VyUGVybWlzc2lvblR5cGUsIGNvbnN0IFFTdHJpbmcmKSksIHRoaXMsIFNMT1QocmVx
dWVzdFBlcm1pc3Npb24oUVdlYlBhZ2U6OlVzZXJQZXJtaXNzaW9uVHlwZSwgY29uc3QgUVN0cmlu
ZyYpKSk7CisgICAgY29ubmVjdCh0aGlzLCBTSUdOQUwoY2hlY2tQZXJtaXNzaW9uRnJvbVVzZXIo
UVdlYlBhZ2U6OlVzZXJQZXJtaXNzaW9uVHlwZSwgY29uc3QgUVN0cmluZyYsIFFXZWJQYWdlOjpV
c2VyUGVybWlzc2lvbiYpKSwgdGhpcywgU0xPVChjaGVja1Blcm1pc3Npb24oUVdlYlBhZ2U6OlVz
ZXJQZXJtaXNzaW9uVHlwZSwgY29uc3QgUVN0cmluZyYsIFFXZWJQYWdlOjpVc2VyUGVybWlzc2lv
biYpKSk7CiB9CiAKIHZvaWQgV2ViUGFnZTo6YXBwbHlQcm94eSgpCkBAIC0xNjIsMyArMTY0LDE5
IEBAIHZvaWQgV2ViUGFnZTo6YXV0aGVudGljYXRpb25SZXF1aXJlZChRTmUKIAogICAgIGRlbGV0
ZSBkaWFsb2c7CiB9CisKK3ZvaWQgV2ViUGFnZTo6cmVxdWVzdFBlcm1pc3Npb24oUVdlYlBhZ2U6
OlVzZXJQZXJtaXNzaW9uVHlwZSB0eXBlLCBjb25zdCBRU3RyaW5nJiBvcmlnaW4pCit7CisgICAg
c2V0VXNlclBlcm1pc3Npb24odHlwZSwgb3JpZ2luLCBVc2VyUGVybWlzc2lvbkFsbG93ZWQpOwor
fQorCit2b2lkIFdlYlBhZ2U6OmNoZWNrUGVybWlzc2lvbihRV2ViUGFnZTo6VXNlclBlcm1pc3Np
b25UeXBlIHR5cGUsIGNvbnN0IFFTdHJpbmcmIG9yaWdpbiwgUVdlYlBhZ2U6OlVzZXJQZXJtaXNz
aW9uJiBwZXJtaXNzaW9uKQoreworICAgIHN3aXRjaCAodHlwZSkgeworICAgIGNhc2UgVXNlclBl
cm1pc3Npb25Ob3RpZmljYXRpb25zOgorICAgICAgICBwZXJtaXNzaW9uID0gVXNlclBlcm1pc3Np
b25BbGxvd2VkOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBicmVhazsK
KyAgICB9Cit9CkluZGV4OiBXZWJLaXRUb29scy9RdFRlc3RCcm93c2VyL3dlYnBhZ2UuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJLaXRUb29scy9RdFRlc3RCcm93c2VyL3dlYnBhZ2UuaAkocmV2aXNpb24g
NjIxNDApCisrKyBXZWJLaXRUb29scy9RdFRlc3RCcm93c2VyL3dlYnBhZ2UuaAkod29ya2luZyBj
b3B5KQpAQCAtNTcsNiArNTcsOCBAQCBwdWJsaWMgc2xvdHM6CiAgICAgdm9pZCBzZXRVc2VyQWdl
bnQoY29uc3QgUVN0cmluZyYgdWEpIHsgbV91c2VyQWdlbnQgPSB1YTsgfQogICAgIGJvb2wgc2hv
dWxkSW50ZXJydXB0SmF2YVNjcmlwdCgpOwogICAgIHZvaWQgYXV0aGVudGljYXRpb25SZXF1aXJl
ZChRTmV0d29ya1JlcGx5KiwgUUF1dGhlbnRpY2F0b3IqKTsKKyAgICB2b2lkIHJlcXVlc3RQZXJt
aXNzaW9uKFFXZWJQYWdlOjpVc2VyUGVybWlzc2lvblR5cGUgdHlwZSwgY29uc3QgUVN0cmluZyYg
b3JpZ2luKTsKKyAgICB2b2lkIGNoZWNrUGVybWlzc2lvbihRV2ViUGFnZTo6VXNlclBlcm1pc3Np
b25UeXBlIHR5cGUsIGNvbnN0IFFTdHJpbmcmIG9yaWdpbiwgUVdlYlBhZ2U6OlVzZXJQZXJtaXNz
aW9uJiBwZXJtaXNzaW9uKTsKIAogcHJpdmF0ZToKICAgICB2b2lkIGFwcGx5UHJveHkoKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>60152</attachid>
            <date>2010-06-30 14:22:16 -0700</date>
            <delta_ts>2010-07-11 09:03:22 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>41413.patch</filename>
            <type>text/plain</type>
            <size>28253</size>
            <attacher name="Yael">yael</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2MjE4NykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjAgQEAKKzIwMTAtMDYtMzAgIFlhZWwgQWhhcm9uICA8eWFlbC5haGFyb25Abm9r
aWEuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IFtRdF0gUXRXZWJLaXQgbmVlZHMgcHVibGljIEFQSSBmb3IgTm90aWZpY2F0aW9ucy4KKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQxNDEzCisKKyAgICAg
ICAgVXBkYXRlIE5vdGlmaWNhdGlvblByZXNlbnRlciBBUEksIHRvIHByb3ZpZGUgYWRkaXRpb25h
bCBuZWVkZWQgaW5mb3JtYXRpb24uCisgICAgICAgIE5vIG5ldyB0ZXN0cyBzaW5jZSBubyBuZXcg
ZnVuY3Rpb25hbGl0eSB3YXMgaW50cm9kdWNlZC4KKworICAgICAgICAqIG5vdGlmaWNhdGlvbnMv
Tm90aWZpY2F0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok5vdGlmaWNhdGlvbjo6Tm90aWZp
Y2F0aW9uKToKKyAgICAgICAgKiBub3RpZmljYXRpb25zL05vdGlmaWNhdGlvbkNlbnRlci5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpOb3RpZmljYXRpb25DZW50ZXI6OmNoZWNrUGVybWlzc2lvbik6
CisgICAgICAgIChXZWJDb3JlOjpOb3RpZmljYXRpb25DZW50ZXI6OnJlcXVlc3RQZXJtaXNzaW9u
KToKKyAgICAgICAgKiBub3RpZmljYXRpb25zL05vdGlmaWNhdGlvblByZXNlbnRlci5oOgorCiAy
MDEwLTA2LTMwICBKZXJlbXkgTW9za292aWNoICA8amVyZW15QGNocm9taXVtLm9yZz4KIAogICAg
ICAgICBSZXZpZXdlZCBieSBEaW1pdHJpIEdsYXprb3YuCkluZGV4OiBXZWJDb3JlL25vdGlmaWNh
dGlvbnMvTm90aWZpY2F0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL25vdGlmaWNhdGlv
bnMvTm90aWZpY2F0aW9uLmNwcAkocmV2aXNpb24gNjIxNDApCisrKyBXZWJDb3JlL25vdGlmaWNh
dGlvbnMvTm90aWZpY2F0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTIsNyArNTIsNyBAQCBO
b3RpZmljYXRpb246Ok5vdGlmaWNhdGlvbihjb25zdCBLVVJMJiB1CiAgICAgLCBtX3ByZXNlbnRl
cihwcm92aWRlcikKIHsKICAgICBBU1NFUlQobV9wcmVzZW50ZXIpOwotICAgIGlmIChtX3ByZXNl
bnRlci0+Y2hlY2tQZXJtaXNzaW9uKGNvbnRleHQtPnVybCgpKSAhPSBOb3RpZmljYXRpb25QcmVz
ZW50ZXI6OlBlcm1pc3Npb25BbGxvd2VkKSB7CisgICAgaWYgKG1fcHJlc2VudGVyLT5jaGVja1Bl
cm1pc3Npb24oY29udGV4dCkgIT0gTm90aWZpY2F0aW9uUHJlc2VudGVyOjpQZXJtaXNzaW9uQWxs
b3dlZCkgewogICAgICAgICBlYyA9IFNFQ1VSSVRZX0VSUjsKICAgICAgICAgcmV0dXJuOwogICAg
IH0KQEAgLTczLDcgKzczLDcgQEAgTm90aWZpY2F0aW9uOjpOb3RpZmljYXRpb24oY29uc3QgTm90
aWZpYwogICAgICwgbV9wcmVzZW50ZXIocHJvdmlkZXIpCiB7CiAgICAgQVNTRVJUKG1fcHJlc2Vu
dGVyKTsKLSAgICBpZiAobV9wcmVzZW50ZXItPmNoZWNrUGVybWlzc2lvbihjb250ZXh0LT51cmwo
KSkgIT0gTm90aWZpY2F0aW9uUHJlc2VudGVyOjpQZXJtaXNzaW9uQWxsb3dlZCkgeworICAgIGlm
IChtX3ByZXNlbnRlci0+Y2hlY2tQZXJtaXNzaW9uKGNvbnRleHQpICE9IE5vdGlmaWNhdGlvblBy
ZXNlbnRlcjo6UGVybWlzc2lvbkFsbG93ZWQpIHsKICAgICAgICAgZWMgPSBTRUNVUklUWV9FUlI7
CiAgICAgICAgIHJldHVybjsKICAgICB9CkluZGV4OiBXZWJDb3JlL25vdGlmaWNhdGlvbnMvTm90
aWZpY2F0aW9uQ2VudGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL25vdGlmaWNhdGlvbnMv
Tm90aWZpY2F0aW9uQ2VudGVyLmNwcAkocmV2aXNpb24gNjIxNDApCisrKyBXZWJDb3JlL25vdGlm
aWNhdGlvbnMvTm90aWZpY2F0aW9uQ2VudGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDksMTQg
KzQ5LDE0IEBAIGludCBOb3RpZmljYXRpb25DZW50ZXI6OmNoZWNrUGVybWlzc2lvbigKIHsKICAg
ICBpZiAoIXByZXNlbnRlcigpKQogICAgICAgICByZXR1cm4gTm90aWZpY2F0aW9uUHJlc2VudGVy
OjpQZXJtaXNzaW9uRGVuaWVkOwotICAgIHJldHVybiBtX25vdGlmaWNhdGlvblByZXNlbnRlci0+
Y2hlY2tQZXJtaXNzaW9uKG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dC0+dXJsKCkpOworICAgIHJl
dHVybiBtX25vdGlmaWNhdGlvblByZXNlbnRlci0+Y2hlY2tQZXJtaXNzaW9uKG1fc2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCk7CiB9CiAKIHZvaWQgTm90aWZpY2F0aW9uQ2VudGVyOjpyZXF1ZXN0UGVy
bWlzc2lvbihQYXNzUmVmUHRyPFZvaWRDYWxsYmFjaz4gY2FsbGJhY2spCiB7CiAgICAgaWYgKCFw
cmVzZW50ZXIoKSkKICAgICAgICAgcmV0dXJuOwotICAgIG1fbm90aWZpY2F0aW9uUHJlc2VudGVy
LT5yZXF1ZXN0UGVybWlzc2lvbihtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQtPnNlY3VyaXR5T3Jp
Z2luKCksIGNhbGxiYWNrKTsKKyAgICBtX25vdGlmaWNhdGlvblByZXNlbnRlci0+cmVxdWVzdFBl
cm1pc3Npb24obV9zY3JpcHRFeGVjdXRpb25Db250ZXh0LCBjYWxsYmFjayk7CiB9CiAKIH0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvbm90aWZpY2F0aW9ucy9Ob3RpZmljYXRp
b25QcmVzZW50ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL25vdGlmaWNhdGlvbnMvTm90aWZp
Y2F0aW9uUHJlc2VudGVyLmgJKHJldmlzaW9uIDYyMTQwKQorKysgV2ViQ29yZS9ub3RpZmljYXRp
b25zL05vdGlmaWNhdGlvblByZXNlbnRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC00MSw3ICs0MSw3
IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICBjbGFzcyBEb2N1bWVudDsKICAgICBjbGFzcyBO
b3RpZmljYXRpb247CiAgICAgY2xhc3MgS1VSTDsKLSAgICBjbGFzcyBTZWN1cml0eU9yaWdpbjsK
KyAgICBjbGFzcyBTY3JpcHRFeGVjdXRpb25Db250ZXh0OwogICAgIGNsYXNzIFN0cmluZzsKIAog
ICAgIGNsYXNzIE5vdGlmaWNhdGlvblByZXNlbnRlciB7CkBAIC02NywxMiArNjcsMTIgQEAgbmFt
ZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB2aXJ0dWFsIHZvaWQgbm90aWZpY2F0aW9uT2JqZWN0
RGVzdHJveWVkKE5vdGlmaWNhdGlvbiopID0gMDsKIAogICAgICAgICAvLyBSZXF1ZXN0cyB1c2Vy
IHBlcm1pc3Npb24gdG8gc2hvdyBkZXNrdG9wIG5vdGlmaWNhdGlvbnMgZnJvbSBhIHBhcnRpY3Vs
YXIKLSAgICAgICAgLy8gb3JpZ2luLiBUaGUgY2FsbGJhY2sgcGFyYW1ldGVyIHNob3VsZCBiZSBy
dW4gd2hlbiB0aGUgdXNlciBoYXMKKyAgICAgICAgLy8gc2NyaXB0IGNvbnRleHQuIFRoZSBjYWxs
YmFjayBwYXJhbWV0ZXIgc2hvdWxkIGJlIHJ1biB3aGVuIHRoZSB1c2VyIGhhcwogICAgICAgICAv
LyBtYWRlIGEgZGVjaXNpb24uCi0gICAgICAgIHZpcnR1YWwgdm9pZCByZXF1ZXN0UGVybWlzc2lv
bihTZWN1cml0eU9yaWdpbiosIFBhc3NSZWZQdHI8Vm9pZENhbGxiYWNrPikgPSAwOworICAgICAg
ICB2aXJ0dWFsIHZvaWQgcmVxdWVzdFBlcm1pc3Npb24oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCos
IFBhc3NSZWZQdHI8Vm9pZENhbGxiYWNrPikgPSAwOwogCiAgICAgICAgIC8vIENoZWNrcyB0aGUg
Y3VycmVudCBsZXZlbCBvZiBwZXJtaXNzaW9uLgotICAgICAgICB2aXJ0dWFsIFBlcm1pc3Npb24g
Y2hlY2tQZXJtaXNzaW9uKGNvbnN0IEtVUkwmKSA9IDA7CisgICAgICAgIHZpcnR1YWwgUGVybWlz
c2lvbiBjaGVja1Blcm1pc3Npb24oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCopID0gMDsKICAgICB9
OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJLaXQvY2hyb21pdW0vQ2hhbmdl
TG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cJKHJldmlzaW9uIDYy
MTg3KQorKysgV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDE3IEBACisyMDEwLTA2LTMwICBZYWVsIEFoYXJvbiAgPHlhZWwuYWhhcm9uQG5va2lhLmNv
bT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBbUXRd
IFF0V2ViS2l0IG5lZWRzIHB1YmxpYyBBUEkgZm9yIE5vdGlmaWNhdGlvbnMuCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00MTQxMworCisgICAgICAgIFVw
ZGF0ZWQgTm90aWZpY2F0aW9uUHJlc2VudGVyIEFQSS4KKworICAgICAgICAqIHNyYy9Ob3RpZmlj
YXRpb25QcmVzZW50ZXJJbXBsLmNwcDoKKyAgICAgICAgKFdlYktpdDo6Tm90aWZpY2F0aW9uUHJl
c2VudGVySW1wbDo6Y2hlY2tQZXJtaXNzaW9uKToKKyAgICAgICAgKFdlYktpdDo6Tm90aWZpY2F0
aW9uUHJlc2VudGVySW1wbDo6cmVxdWVzdFBlcm1pc3Npb24pOgorICAgICAgICAqIHNyYy9Ob3Rp
ZmljYXRpb25QcmVzZW50ZXJJbXBsLmg6CisKIDIwMTAtMDYtMjUgIFBhdmVsIEZlbGRtYW4gIDxw
ZmVsZG1hbkBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgWXVyeSBTZW1pa2hh
dHNreS4KSW5kZXg6IFdlYktpdC9jaHJvbWl1bS9zcmMvTm90aWZpY2F0aW9uUHJlc2VudGVySW1w
bC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L2Nocm9taXVtL3NyYy9Ob3RpZmljYXRpb25QcmVz
ZW50ZXJJbXBsLmNwcAkocmV2aXNpb24gNjIxNDApCisrKyBXZWJLaXQvY2hyb21pdW0vc3JjL05v
dGlmaWNhdGlvblByZXNlbnRlckltcGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw2ICszNSw3
IEBACiAKICNpbmNsdWRlICJLVVJMLmgiCiAjaW5jbHVkZSAiTm90aWZpY2F0aW9uLmgiCisjaW5j
bHVkZSAiU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oIgogI2luY2x1ZGUgIlNlY3VyaXR5T3JpZ2lu
LmgiCiAKICNpbmNsdWRlICJXZWJOb3RpZmljYXRpb24uaCIKQEAgLTkxLDE1ICs5MiwxNSBAQCB2
b2lkIE5vdGlmaWNhdGlvblByZXNlbnRlckltcGw6Om5vdGlmaWNhCiAgICAgbV9wcmVzZW50ZXIt
Pm9iamVjdERlc3Ryb3llZChQYXNzUmVmUHRyPE5vdGlmaWNhdGlvbj4obm90aWZpY2F0aW9uKSk7
CiB9CiAKLU5vdGlmaWNhdGlvblByZXNlbnRlcjo6UGVybWlzc2lvbiBOb3RpZmljYXRpb25QcmVz
ZW50ZXJJbXBsOjpjaGVja1Blcm1pc3Npb24oY29uc3QgS1VSTCYgc291cmNlVVJMKQorTm90aWZp
Y2F0aW9uUHJlc2VudGVyOjpQZXJtaXNzaW9uIE5vdGlmaWNhdGlvblByZXNlbnRlckltcGw6OmNo
ZWNrUGVybWlzc2lvbihTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0KQogewotICAgIGlu
dCByZXN1bHQgPSBtX3ByZXNlbnRlci0+Y2hlY2tQZXJtaXNzaW9uKHNvdXJjZVVSTCk7CisgICAg
aW50IHJlc3VsdCA9IG1fcHJlc2VudGVyLT5jaGVja1Blcm1pc3Npb24oY29udGV4dC0+dXJsKCkp
OwogICAgIHJldHVybiBzdGF0aWNfY2FzdDxOb3RpZmljYXRpb25QcmVzZW50ZXI6OlBlcm1pc3Np
b24+KHJlc3VsdCk7CiB9CiAKLXZvaWQgTm90aWZpY2F0aW9uUHJlc2VudGVySW1wbDo6cmVxdWVz
dFBlcm1pc3Npb24oU2VjdXJpdHlPcmlnaW4qIG9yaWdpbiwgUGFzc1JlZlB0cjxWb2lkQ2FsbGJh
Y2s+IGNhbGxiYWNrKQordm9pZCBOb3RpZmljYXRpb25QcmVzZW50ZXJJbXBsOjpyZXF1ZXN0UGVy
bWlzc2lvbihTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBQYXNzUmVmUHRyPFZvaWRD
YWxsYmFjaz4gY2FsbGJhY2spCiB7Ci0gICAgbV9wcmVzZW50ZXItPnJlcXVlc3RQZXJtaXNzaW9u
KFdlYlNlY3VyaXR5T3JpZ2luKG9yaWdpbiksIG5ldyBWb2lkQ2FsbGJhY2tDbGllbnQoY2FsbGJh
Y2spKTsKKyAgICBtX3ByZXNlbnRlci0+cmVxdWVzdFBlcm1pc3Npb24oV2ViU2VjdXJpdHlPcmln
aW4oY29udGV4dC0+c2VjdXJpdHlPcmlnaW4oKSksIG5ldyBWb2lkQ2FsbGJhY2tDbGllbnQoY2Fs
bGJhY2spKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CkluZGV4OiBXZWJLaXQvY2hyb21p
dW0vc3JjL05vdGlmaWNhdGlvblByZXNlbnRlckltcGwuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQv
Y2hyb21pdW0vc3JjL05vdGlmaWNhdGlvblByZXNlbnRlckltcGwuaAkocmV2aXNpb24gNjIxNDAp
CisrKyBXZWJLaXQvY2hyb21pdW0vc3JjL05vdGlmaWNhdGlvblByZXNlbnRlckltcGwuaAkod29y
a2luZyBjb3B5KQpAQCAtNTQsOCArNTQsOCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBib29sIHNo
b3coV2ViQ29yZTo6Tm90aWZpY2F0aW9uKiBvYmplY3QpOwogICAgIHZpcnR1YWwgdm9pZCBjYW5j
ZWwoV2ViQ29yZTo6Tm90aWZpY2F0aW9uKiBvYmplY3QpOwogICAgIHZpcnR1YWwgdm9pZCBub3Rp
ZmljYXRpb25PYmplY3REZXN0cm95ZWQoV2ViQ29yZTo6Tm90aWZpY2F0aW9uKiBvYmplY3QpOwot
ICAgIHZpcnR1YWwgV2ViQ29yZTo6Tm90aWZpY2F0aW9uUHJlc2VudGVyOjpQZXJtaXNzaW9uIGNo
ZWNrUGVybWlzc2lvbihjb25zdCBXZWJDb3JlOjpLVVJMJiBzb3VyY2VVUkwpOwotICAgIHZpcnR1
YWwgdm9pZCByZXF1ZXN0UGVybWlzc2lvbihXZWJDb3JlOjpTZWN1cml0eU9yaWdpbiogb3JpZ2lu
LCBXVEY6OlBhc3NSZWZQdHI8V2ViQ29yZTo6Vm9pZENhbGxiYWNrPiBjYWxsYmFjayk7CisgICAg
dmlydHVhbCBXZWJDb3JlOjpOb3RpZmljYXRpb25QcmVzZW50ZXI6OlBlcm1pc3Npb24gY2hlY2tQ
ZXJtaXNzaW9uKFdlYkNvcmU6OlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqKTsKKyAgICB2aXJ0dWFs
IHZvaWQgcmVxdWVzdFBlcm1pc3Npb24oV2ViQ29yZTo6U2NyaXB0RXhlY3V0aW9uQ29udGV4dCog
LCBXVEY6OlBhc3NSZWZQdHI8V2ViQ29yZTo6Vm9pZENhbGxiYWNrPiBjYWxsYmFjayk7CiAKIHBy
aXZhdGU6CiAgICAgLy8gV2ViTm90aWZpY2F0aW9uUHJlc2VudGVyIHRoYXQgdGhpcyBvYmplY3Qg
ZGVsZWdhdGVzIHRvLgpJbmRleDogV2ViS2l0L3F0L0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJLaXQvcXQvQ2hhbmdlTG9nCShyZXZpc2lvbiA2MjE4NykKKysrIFdlYktpdC9xdC9DaGFuZ2VM
b2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwyMyBAQAorMjAxMC0wNi0zMCAgWWFlbCBBaGFy
b24gIDx5YWVsLmFoYXJvbkBub2tpYS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgW1F0XSBRdFdlYktpdCBuZWVkcyBwdWJsaWMgQVBJIGZvciBO
b3RpZmljYXRpb25zLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9NDE0MTMKKworICAgICAgICBSZW1vdmUgdGhlIHByaXZhdGUgRHVtcFJlbmRlclRyZWVT
dXBwb3J0UXQgQVBJIGFuZCBpbnRyb2R1Y2UgbmV3IFFXZWJQYWdlIEFQSS4KKworICAgICAgICAq
IEFwaS9xd2VicGFnZS5jcHA6CisgICAgICAgIChRV2ViUGFnZTo6c2V0VXNlclBlcm1pc3Npb24p
OgorICAgICAgICAqIEFwaS9xd2VicGFnZS5oOgorICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0R1
bXBSZW5kZXJUcmVlU3VwcG9ydFF0LmNwcDoKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9EdW1w
UmVuZGVyVHJlZVN1cHBvcnRRdC5oOgorICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L05vdGlmaWNh
dGlvblByZXNlbnRlckNsaWVudFF0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok5vdGlmaWNhdGlv
blByZXNlbnRlckNsaWVudFF0OjpyZXF1ZXN0UGVybWlzc2lvbik6CisgICAgICAgIChXZWJDb3Jl
OjpOb3RpZmljYXRpb25QcmVzZW50ZXJDbGllbnRRdDo6Y2hlY2tQZXJtaXNzaW9uKToKKyAgICAg
ICAgKFdlYkNvcmU6Ok5vdGlmaWNhdGlvblByZXNlbnRlckNsaWVudFF0OjpwYWdlKToKKyAgICAg
ICAgKiBXZWJDb3JlU3VwcG9ydC9Ob3RpZmljYXRpb25QcmVzZW50ZXJDbGllbnRRdC5oOgorCiAy
MDEwLTA2LTMwICBTaW1vbiBIYXVzbWFubiAgPHNpbW9uLmhhdXNtYW5uQG5va2lhLmNvbT4KIAog
ICAgICAgICBVbnJldmlld2VkIFN5bWJpYW4gYnVpbGQgZml4LgpJbmRleDogV2ViS2l0L3F0L0Fw
aS9xd2VicGFnZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L3F0L0FwaS9xd2VicGFnZS5jcHAJ
KHJldmlzaW9uIDYyMTQwKQorKysgV2ViS2l0L3F0L0FwaS9xd2VicGFnZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTIxMTAsNiArMjExMCwyMCBAQCBib29sIFFXZWJQYWdlOjphbGxvd0dlb2xvY2F0
aW9uUmVxdWVzdChRCiAjZW5kaWYKIH0KIAordm9pZCBRV2ViUGFnZTo6c2V0VXNlclBlcm1pc3Np
b24oUGVybWlzc2lvbkRvbWFpbiBkb21haW4sIGNvbnN0IFFTdHJpbmcmIG9yaWdpbiwgUGVybWlz
c2lvblBvbGljeSBwb2xpY3kpCit7CisgICAgc3dpdGNoIChkb21haW4pIHsKKyAgICBjYXNlIFBl
cm1pc3Npb25Eb21haW5Ob3RpZmljYXRpb25zOgorI2lmIEVOQUJMRShOT1RJRklDQVRJT05TKQor
ICAgICAgICBpZiAocG9saWN5ID09IFBlcm1pc3Npb25Qb2xpY3lHcmFudGVkKQorICAgICAgICAg
ICAgTm90aWZpY2F0aW9uUHJlc2VudGVyQ2xpZW50UXQ6Om5vdGlmaWNhdGlvblByZXNlbnRlcigp
LT5hbGxvd05vdGlmaWNhdGlvbkZvck9yaWdpbihvcmlnaW4pOworI2VuZGlmCisgICAgICAgIGJy
ZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIGJyZWFrOworICAgIH0KK30KKwogLyohCiAgICAg
VGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgd2hlbmV2ZXIgV2ViS2l0IHdhbnRzIHRvIGNyZWF0ZSBh
IG5ldyB3aW5kb3cgb2YgdGhlIGdpdmVuIFxhIHR5cGUsIGZvcgogICAgIGV4YW1wbGUgd2hlbiBh
IEphdmFTY3JpcHQgcHJvZ3JhbSByZXF1ZXN0cyB0byBvcGVuIGEgZG9jdW1lbnQgaW4gYSBuZXcg
d2luZG93LgpJbmRleDogV2ViS2l0L3F0L0FwaS9xd2VicGFnZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YktpdC9xdC9BcGkvcXdlYnBhZ2UuaAkocmV2aXNpb24gNjIxNDApCisrKyBXZWJLaXQvcXQvQXBp
L3F3ZWJwYWdlLmgJKHdvcmtpbmcgY29weSkKQEAgLTE5NSw2ICsxOTUsMTYgQEAgcHVibGljOgog
ICAgICAgICBXZWJNb2RhbERpYWxvZwogICAgIH07CiAKKyAgICBlbnVtIFBlcm1pc3Npb25Qb2xp
Y3kgeworICAgICAgICBQZXJtaXNzaW9uUG9saWN5R3JhbnRlZCwKKyAgICAgICAgUGVybWlzc2lv
blBvbGljeUlnbm9yZWQsCisgICAgICAgIFBlcm1pc3Npb25Qb2xpY3lEZW5pZWQKKyAgICB9Owor
CisgICAgZW51bSBQZXJtaXNzaW9uRG9tYWluIHsKKyAgICAgICAgUGVybWlzc2lvbkRvbWFpbk5v
dGlmaWNhdGlvbnMKKyAgICB9OworCiAgICAgY2xhc3MgVmlld3BvcnRIaW50cyB7CiAgICAgcHVi
bGljOgogICAgICAgICBWaWV3cG9ydEhpbnRzKCk7CkBAIC0yOTAsNiArMzAwLDggQEAgcHVibGlj
OgogCiAgICAgUU1lbnUgKmNyZWF0ZVN0YW5kYXJkQ29udGV4dE1lbnUoKTsKIAorICAgIHZvaWQg
c2V0VXNlclBlcm1pc3Npb24oUGVybWlzc2lvbkRvbWFpbiwgY29uc3QgUVN0cmluZyYsIFBlcm1p
c3Npb25Qb2xpY3kpOworCiAgICAgZW51bSBFeHRlbnNpb24gewogICAgICAgICBDaG9vc2VNdWx0
aXBsZUZpbGVzRXh0ZW5zaW9uLAogICAgICAgICBFcnJvclBhZ2VFeHRlbnNpb24KQEAgLTM3MSw2
ICszODMsOSBAQCBRX1NJR05BTFM6CiAKICAgICB2b2lkIHZpZXdwb3J0Q2hhbmdlUmVxdWVzdGVk
KGNvbnN0IFFXZWJQYWdlOjpWaWV3cG9ydEhpbnRzJiBoaW50cyk7CiAKKyAgICB2b2lkIHJlcXVl
c3RQZXJtaXNzaW9uRnJvbVVzZXIoUVdlYlBhZ2U6OlBlcm1pc3Npb25Eb21haW4gZG9tYWluLCBj
b25zdCBRU3RyaW5nJiBvcmlnaW4pOworICAgIHZvaWQgY2hlY2tQZXJtaXNzaW9uRnJvbVVzZXIo
UVdlYlBhZ2U6OlBlcm1pc3Npb25Eb21haW4gZG9tYWluLCBjb25zdCBRU3RyaW5nJiBvcmlnaW4s
IFFXZWJQYWdlOjpQZXJtaXNzaW9uUG9saWN5JiBwb2xpY3kpOworCiBwcm90ZWN0ZWQ6CiAgICAg
dmlydHVhbCBRV2ViUGFnZSAqY3JlYXRlV2luZG93KFdlYldpbmRvd1R5cGUgdHlwZSk7CiAgICAg
dmlydHVhbCBRT2JqZWN0ICpjcmVhdGVQbHVnaW4oY29uc3QgUVN0cmluZyAmY2xhc3NpZCwgY29u
c3QgUVVybCAmdXJsLCBjb25zdCBRU3RyaW5nTGlzdCAmcGFyYW1OYW1lcywgY29uc3QgUVN0cmlu
Z0xpc3QgJnBhcmFtVmFsdWVzKTsKSW5kZXg6IFdlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9EdW1w
UmVuZGVyVHJlZVN1cHBvcnRRdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L3F0L1dlYkNvcmVT
dXBwb3J0L0R1bXBSZW5kZXJUcmVlU3VwcG9ydFF0LmNwcAkocmV2aXNpb24gNjIxNDApCisrKyBX
ZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC03MCw4ICs3MCw2IEBACiAKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwog
Ci1DaGVja1Blcm1pc3Npb25GdW5jdGlvblR5cGUqIGNoZWNrUGVybWlzc2lvbkZ1bmN0aW9uID0g
MDsKLVJlcXVlc3RQZXJtaXNzaW9uRnVuY3Rpb25UeXBlKiByZXF1ZXN0UGVybWlzc2lvbkZ1bmN0
aW9uID0gMDsKIFFNYXA8aW50LCBRV2ViU2NyaXB0V29ybGQqPiBtX3dvcmxkTWFwOwogCiBEdW1w
UmVuZGVyVHJlZVN1cHBvcnRRdDo6RHVtcFJlbmRlclRyZWVTdXBwb3J0UXQoKQpAQCAtNTU2LDIw
ICs1NTQsNiBAQCB2b2lkIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjpkdW1wTm90aWZpCiAjZW5k
aWYKIH0KIAotdm9pZCBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6c2V0Tm90aWZpY2F0aW9uc1Jl
Y2VpdmVyKFFPYmplY3QqIHJlY2VpdmVyKQotewotI2lmIEVOQUJMRShOT1RJRklDQVRJT05TKQot
ICAgIE5vdGlmaWNhdGlvblByZXNlbnRlckNsaWVudFF0Ojpub3RpZmljYXRpb25QcmVzZW50ZXIo
KS0+c2V0UmVjZWl2ZXIocmVjZWl2ZXIpOwotI2VuZGlmCi19Ci0KLXZvaWQgRHVtcFJlbmRlclRy
ZWVTdXBwb3J0UXQ6OmFsbG93Tm90aWZpY2F0aW9uRm9yT3JpZ2luKGNvbnN0IFFTdHJpbmcmIG9y
aWdpbikKLXsKLSNpZiBFTkFCTEUoTk9USUZJQ0FUSU9OUykKLSAgICBOb3RpZmljYXRpb25QcmVz
ZW50ZXJDbGllbnRRdDo6bm90aWZpY2F0aW9uUHJlc2VudGVyKCktPmFsbG93Tm90aWZpY2F0aW9u
Rm9yT3JpZ2luKG9yaWdpbik7Ci0jZW5kaWYKLX0KLQogdm9pZCBEdW1wUmVuZGVyVHJlZVN1cHBv
cnRRdDo6c2V0TW9ja0dlb2xvY2F0aW9uUG9zaXRpb24oZG91YmxlIGxhdGl0dWRlLCBkb3VibGUg
bG9uZ2l0dWRlLCBkb3VibGUgYWNjdXJhY3kpCiB7CiAjaWYgRU5BQkxFKEdFT0xPQ0FUSU9OKQpA
QCAtNTg2LDE2ICs1NzAsNiBAQCB2b2lkIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjpzZXRNb2Nr
R2VvCiAjZW5kaWYKIH0KIAotdm9pZCBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6c2V0Q2hlY2tQ
ZXJtaXNzaW9uRnVuY3Rpb24oQ2hlY2tQZXJtaXNzaW9uRnVuY3Rpb25UeXBlKiBmKQotewotICAg
IGNoZWNrUGVybWlzc2lvbkZ1bmN0aW9uID0gZjsKLX0KLQotdm9pZCBEdW1wUmVuZGVyVHJlZVN1
cHBvcnRRdDo6c2V0UmVxdWVzdFBlcm1pc3Npb25GdW5jdGlvbihSZXF1ZXN0UGVybWlzc2lvbkZ1
bmN0aW9uVHlwZSogZikKLXsKLSAgICByZXF1ZXN0UGVybWlzc2lvbkZ1bmN0aW9uID0gZjsKLX0K
LQogYm9vbCBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6aXNUYXJnZXRJdGVtKGNvbnN0IFFXZWJI
aXN0b3J5SXRlbSYgaGlzdG9yeUl0ZW0pCiB7CiAgICAgUVdlYkhpc3RvcnlJdGVtIGl0ID0gaGlz
dG9yeUl0ZW07CkluZGV4OiBXZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvRHVtcFJlbmRlclRyZWVT
dXBwb3J0UXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvRHVtcFJl
bmRlclRyZWVTdXBwb3J0UXQuaAkocmV2aXNpb24gNjIxNDApCisrKyBXZWJLaXQvcXQvV2ViQ29y
ZVN1cHBvcnQvRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQuaAkod29ya2luZyBjb3B5KQpAQCAtMzIs
MTcgKzMyLDYgQEAgY2xhc3MgUVdlYlBhZ2U7CiBjbGFzcyBRV2ViSGlzdG9yeUl0ZW07CiBjbGFz
cyBRV2ViU2NyaXB0V29ybGQ7CiAKLWVudW0gTm90aWZpY2F0aW9uUGVybWlzc2lvbiB7Ci0gICAg
Tm90aWZpY2F0aW9uQWxsb3dlZCwKLSAgICBOb3RpZmljYXRpb25Ob3RBbGxvd2VkLAotICAgIE5v
dGlmaWNhdGlvbkRlbmllZAotfTsKLQotdHlwZWRlZiB2b2lkIChDaGVja1Blcm1pc3Npb25GdW5j
dGlvblR5cGUpIChRT2JqZWN0KiByZWNlaXZlciwgY29uc3QgUVVybCYsIE5vdGlmaWNhdGlvblBl
cm1pc3Npb24mKTsKLXR5cGVkZWYgdm9pZCAoUmVxdWVzdFBlcm1pc3Npb25GdW5jdGlvblR5cGUp
IChRT2JqZWN0KiByZWNlaXZlciwgY29uc3QgUVN0cmluZyYpOwotCi1leHRlcm4gQ2hlY2tQZXJt
aXNzaW9uRnVuY3Rpb25UeXBlKiBjaGVja1Blcm1pc3Npb25GdW5jdGlvbjsKLWV4dGVybiBSZXF1
ZXN0UGVybWlzc2lvbkZ1bmN0aW9uVHlwZSogcmVxdWVzdFBlcm1pc3Npb25GdW5jdGlvbjsKIGV4
dGVybiBRTWFwPGludCwgUVdlYlNjcmlwdFdvcmxkKj4gbV93b3JsZE1hcDsKIAogY2xhc3MgUVdF
QktJVF9FWFBPUlQgRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQgewpAQCAtMTIxLDEzICsxMTAsNiBA
QCBwdWJsaWM6CiAKICAgICBzdGF0aWMgdm9pZCBkdW1wTm90aWZpY2F0aW9uKGJvb2wgYik7CiAK
LSAgICAvLyBUaGVzZSBmdW5jdGlvbnMgc2hvdWxkIGV2ZW50dWFsbHkgdHVybiBpbnRvIHB1Ymxp
YyBBUEkKLSAgICAvLyBhbmQgdGhlICJyZWNlaXZlciIgY29uY2VwdCB3b3VsZCBnbyBhd2F5Ci0g
ICAgc3RhdGljIHZvaWQgc2V0Tm90aWZpY2F0aW9uc1JlY2VpdmVyKFFPYmplY3QqIHJlY2VpdmVy
KTsKLSAgICBzdGF0aWMgdm9pZCBhbGxvd05vdGlmaWNhdGlvbkZvck9yaWdpbihjb25zdCBRU3Ry
aW5nJiBvcmlnaW4pOwotICAgIHN0YXRpYyB2b2lkIHNldENoZWNrUGVybWlzc2lvbkZ1bmN0aW9u
KENoZWNrUGVybWlzc2lvbkZ1bmN0aW9uVHlwZSopOwotICAgIHN0YXRpYyB2b2lkIHNldFJlcXVl
c3RQZXJtaXNzaW9uRnVuY3Rpb24oUmVxdWVzdFBlcm1pc3Npb25GdW5jdGlvblR5cGUqKTsKLQog
ICAgIHN0YXRpYyBRTGlzdDxRV2ViSGlzdG9yeUl0ZW0+IGdldENoaWxkSGlzdG9yeUl0ZW1zKGNv
bnN0IFFXZWJIaXN0b3J5SXRlbSYgaGlzdG9yeUl0ZW0pOwogICAgIHN0YXRpYyBib29sIGlzVGFy
Z2V0SXRlbShjb25zdCBRV2ViSGlzdG9yeUl0ZW0mIGhpc3RvcnlJdGVtKTsKICAgICBzdGF0aWMg
UVN0cmluZyBoaXN0b3J5SXRlbVRhcmdldChjb25zdCBRV2ViSGlzdG9yeUl0ZW0mIGhpc3RvcnlJ
dGVtKTsKSW5kZXg6IFdlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9Ob3RpZmljYXRpb25QcmVzZW50
ZXJDbGllbnRRdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L05v
dGlmaWNhdGlvblByZXNlbnRlckNsaWVudFF0LmNwcAkocmV2aXNpb24gNjIxNDApCisrKyBXZWJL
aXQvcXQvV2ViQ29yZVN1cHBvcnQvTm90aWZpY2F0aW9uUHJlc2VudGVyQ2xpZW50UXQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0zNiwxMCArMzYsMTQgQEAKICNpbmNsdWRlICJEdW1wUmVuZGVyVHJl
ZVN1cHBvcnRRdC5oIgogI2luY2x1ZGUgIkV2ZW50TmFtZXMuaCIKICNpbmNsdWRlICJLVVJMLmgi
CisjaW5jbHVkZSAiUGFnZS5oIgogI2luY2x1ZGUgIlF0UGxhdGZvcm1QbHVnaW4uaCIKKyNpbmNs
dWRlICJTY3JpcHRFeGVjdXRpb25Db250ZXh0LmgiCiAjaW5jbHVkZSAiU2VjdXJpdHlPcmlnaW4u
aCIKIAorI2luY2x1ZGUgInF3ZWJmcmFtZV9wLmgiCiAjaW5jbHVkZSAicXdlYmtpdGdsb2JhbC5o
IgorI2luY2x1ZGUgInF3ZWJwYWdlLmgiCiAjaW5jbHVkZSA8UXRHdWk+CiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKQEAgLTI1MiwxMiArMjU2LDEyIEBAIHZvaWQgTm90aWZpY2F0aW9uUHJlc2VudGVy
Q2xpZW50UXQ6Om5vdGkKICAgICAgICAgZGVsZXRlIG1fbm90aWZpY2F0aW9ucy50YWtlKG5vdGlm
aWNhdGlvbik7CiB9CiAKLXZvaWQgTm90aWZpY2F0aW9uUHJlc2VudGVyQ2xpZW50UXQ6OnJlcXVl
c3RQZXJtaXNzaW9uKFNlY3VyaXR5T3JpZ2luKiBvcmlnaW4sIFBhc3NSZWZQdHI8Vm9pZENhbGxi
YWNrPiBjYWxsYmFjaykKK3ZvaWQgTm90aWZpY2F0aW9uUHJlc2VudGVyQ2xpZW50UXQ6OnJlcXVl
c3RQZXJtaXNzaW9uKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIFBhc3NSZWZQdHI8
Vm9pZENhbGxiYWNrPiBjYWxsYmFjaykKIHsgIAogICAgIGlmIChkdW1wTm90aWZpY2F0aW9uKQot
ICAgICAgICBwcmludGYoIkRFU0tUT1AgTk9USUZJQ0FUSU9OIFBFUk1JU1NJT04gUkVRVUVTVEVE
OiAlc1xuIiwgUVN0cmluZyhvcmlnaW4tPnRvU3RyaW5nKCkpLnRvVXRmOCgpLmNvbnN0RGF0YSgp
KTsKKyAgICAgICAgcHJpbnRmKCJERVNLVE9QIE5PVElGSUNBVElPTiBQRVJNSVNTSU9OIFJFUVVF
U1RFRDogJXNcbiIsIFFTdHJpbmcoY29udGV4dC0+c2VjdXJpdHlPcmlnaW4oKS0+dG9TdHJpbmco
KSkudG9VdGY4KCkuY29uc3REYXRhKCkpOwogCi0gICAgUVN0cmluZyBvcmlnaW5TdHJpbmcgPSBv
cmlnaW4tPnRvU3RyaW5nKCk7CisgICAgUVN0cmluZyBvcmlnaW5TdHJpbmcgPSBjb250ZXh0LT5z
ZWN1cml0eU9yaWdpbigpLT50b1N0cmluZygpOwogICAgIFFIYXNoPFFTdHJpbmcsIFFMaXN0PFJl
ZlB0cjxWb2lkQ2FsbGJhY2s+ID4gPjo6aXRlcmF0b3IgaXRlciA9IG1fcGVuZGluZ1Blcm1pc3Np
b25SZXF1ZXN0cy5maW5kKG9yaWdpblN0cmluZyk7CiAgICAgaWYgKGl0ZXIgIT0gbV9wZW5kaW5n
UGVybWlzc2lvblJlcXVlc3RzLmVuZCgpKQogICAgICAgICBpdGVyLnZhbHVlKCkuYXBwZW5kKGNh
bGxiYWNrKTsKQEAgLTI2NiwyMyArMjcwLDI0IEBAIHZvaWQgTm90aWZpY2F0aW9uUHJlc2VudGVy
Q2xpZW50UXQ6OnJlcXUKICAgICAgICAgUmVmUHRyPFZvaWRDYWxsYmFjaz4gY2IgPSBjYWxsYmFj
azsKICAgICAgICAgY2FsbGJhY2tzLmFwcGVuZChjYik7CiAgICAgICAgIG1fcGVuZGluZ1Blcm1p
c3Npb25SZXF1ZXN0cy5pbnNlcnQob3JpZ2luU3RyaW5nLCBjYWxsYmFja3MpOwotICAgICAgICBp
ZiAocmVxdWVzdFBlcm1pc3Npb25GdW5jdGlvbikKLSAgICAgICAgICAgIHJlcXVlc3RQZXJtaXNz
aW9uRnVuY3Rpb24obV9yZWNlaXZlciwgb3JpZ2luU3RyaW5nKTsKKyAgICAgICAgaWYgKHBhZ2Uo
Y29udGV4dCkpCisgICAgICAgICAgICBlbWl0IHBhZ2UoY29udGV4dCktPnJlcXVlc3RQZXJtaXNz
aW9uRnJvbVVzZXIoUVdlYlBhZ2U6OlBlcm1pc3Npb25Eb21haW5Ob3RpZmljYXRpb25zLCBvcmln
aW5TdHJpbmcpOwogICAgIH0KIH0KIAotTm90aWZpY2F0aW9uUHJlc2VudGVyOjpQZXJtaXNzaW9u
IE5vdGlmaWNhdGlvblByZXNlbnRlckNsaWVudFF0OjpjaGVja1Blcm1pc3Npb24oY29uc3QgS1VS
TCYgdXJsKQorTm90aWZpY2F0aW9uUHJlc2VudGVyOjpQZXJtaXNzaW9uIE5vdGlmaWNhdGlvblBy
ZXNlbnRlckNsaWVudFF0OjpjaGVja1Blcm1pc3Npb24oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCog
Y29udGV4dCkKIHsKLSAgICBOb3RpZmljYXRpb25QZXJtaXNzaW9uIHBlcm1pc3Npb24gPSBOb3Rp
ZmljYXRpb25Ob3RBbGxvd2VkOwotICAgIFFTdHJpbmcgb3JpZ2luID0gdXJsLnN0cmluZygpOwot
ICAgIGlmIChjaGVja1Blcm1pc3Npb25GdW5jdGlvbikKLSAgICAgICAgY2hlY2tQZXJtaXNzaW9u
RnVuY3Rpb24obV9yZWNlaXZlciwgb3JpZ2luLCBwZXJtaXNzaW9uKTsKLSAgICBzd2l0Y2ggKHBl
cm1pc3Npb24pIHsKLSAgICBjYXNlIE5vdGlmaWNhdGlvbkFsbG93ZWQ6CisgICAgUVdlYlBhZ2U6
OlBlcm1pc3Npb25Qb2xpY3kgcG9saWN5ID0gUVdlYlBhZ2U6OlBlcm1pc3Npb25Qb2xpY3lJZ25v
cmVkOworICAgIFFTdHJpbmcgb3JpZ2luID0gY29udGV4dC0+dXJsKCkuc3RyaW5nKCk7CisgICAg
aWYgKHBhZ2UoY29udGV4dCkpCisgICAgICAgIGVtaXQgcGFnZShjb250ZXh0KS0+Y2hlY2tQZXJt
aXNzaW9uRnJvbVVzZXIoUVdlYlBhZ2U6OlBlcm1pc3Npb25Eb21haW5Ob3RpZmljYXRpb25zLCBv
cmlnaW4sIHBvbGljeSk7CisKKyAgICBzd2l0Y2ggKHBvbGljeSkgeworICAgIGNhc2UgUVdlYlBh
Z2U6OlBlcm1pc3Npb25Qb2xpY3lHcmFudGVkOgogICAgICAgICByZXR1cm4gTm90aWZpY2F0aW9u
UHJlc2VudGVyOjpQZXJtaXNzaW9uQWxsb3dlZDsKLSAgICBjYXNlIE5vdGlmaWNhdGlvbk5vdEFs
bG93ZWQ6CisgICAgY2FzZSBRV2ViUGFnZTo6UGVybWlzc2lvblBvbGljeUlnbm9yZWQ6CiAgICAg
ICAgIHJldHVybiBOb3RpZmljYXRpb25QcmVzZW50ZXI6OlBlcm1pc3Npb25Ob3RBbGxvd2VkOwot
ICAgIGNhc2UgTm90aWZpY2F0aW9uRGVuaWVkOgorICAgIGNhc2UgUVdlYlBhZ2U6OlBlcm1pc3Np
b25Qb2xpY3lEZW5pZWQ6CiAgICAgICAgIHJldHVybiBOb3RpZmljYXRpb25QcmVzZW50ZXI6OlBl
cm1pc3Npb25EZW5pZWQ7CiAgICAgfQogICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwpAQCAtMzU0
LDYgKzM1OSwyMiBAQCB2b2lkIE5vdGlmaWNhdGlvblByZXNlbnRlckNsaWVudFF0OjpkdW1wCiAg
ICAgfQogfQogCitRV2ViUGFnZSogTm90aWZpY2F0aW9uUHJlc2VudGVyQ2xpZW50UXQ6OnBhZ2Uo
U2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCkKK3sKKyAgICBpZiAoIWNvbnRleHQgfHwg
Y29udGV4dC0+aXNXb3JrZXJDb250ZXh0KCkpCisgICAgICAgIHJldHVybiAwOworCisgICAgRG9j
dW1lbnQqIGRvY3VtZW50ID0gc3RhdGljX2Nhc3Q8RG9jdW1lbnQqPihjb250ZXh0KTsKKyAgICBp
ZiAoIWRvY3VtZW50KQorICAgICAgICByZXR1cm4gMDsKKworICAgIFBhZ2UqIHBhZ2UgPSBkb2N1
bWVudC0+cGFnZSgpOworICAgIGlmICghcGFnZSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBy
ZXR1cm4gUVdlYkZyYW1lUHJpdmF0ZTo6a2l0KHBhZ2UtPm1haW5GcmFtZSgpKS0+cGFnZSgpOwor
fQorCiAjZW5kaWYgLy8gRU5BQkxFKE5PVElGSUNBVElPTlMpCiB9CiAKSW5kZXg6IFdlYktpdC9x
dC9XZWJDb3JlU3VwcG9ydC9Ob3RpZmljYXRpb25QcmVzZW50ZXJDbGllbnRRdC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9Ob3RpZmljYXRpb25QcmVzZW50ZXJDbGll
bnRRdC5oCShyZXZpc2lvbiA2MjE0MCkKKysrIFdlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9Ob3Rp
ZmljYXRpb25QcmVzZW50ZXJDbGllbnRRdC5oCSh3b3JraW5nIGNvcHkpCkBAIC00MiwxMCArNDIs
MTIgQEAKICNpbmNsdWRlIDxRTXVsdGlIYXNoPgogI2luY2x1ZGUgPFFTeXN0ZW1UcmF5SWNvbj4K
IAorY2xhc3MgUVdlYlBhZ2U7CisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgRG9jdW1l
bnQ7Ci1jbGFzcyBLVVJMOworY2xhc3MgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDsKIAogY2xhc3Mg
Tm90aWZpY2F0aW9uV3JhcHBlciA6IHB1YmxpYyBRT2JqZWN0LCBwdWJsaWMgUVdlYk5vdGlmaWNh
dGlvbkRhdGEgewogICAgIFFfT0JKRUNUCkBAIC04NCw4ICs4Niw4IEBAIHB1YmxpYzoKICAgICB2
aXJ0dWFsIGJvb2wgc2hvdyhOb3RpZmljYXRpb24qKTsKICAgICB2aXJ0dWFsIHZvaWQgY2FuY2Vs
KE5vdGlmaWNhdGlvbiopOwogICAgIHZpcnR1YWwgdm9pZCBub3RpZmljYXRpb25PYmplY3REZXN0
cm95ZWQoTm90aWZpY2F0aW9uKik7Ci0gICAgdmlydHVhbCB2b2lkIHJlcXVlc3RQZXJtaXNzaW9u
KFNlY3VyaXR5T3JpZ2luKiwgUGFzc1JlZlB0cjxWb2lkQ2FsbGJhY2s+KTsKLSAgICB2aXJ0dWFs
IE5vdGlmaWNhdGlvblByZXNlbnRlcjo6UGVybWlzc2lvbiBjaGVja1Blcm1pc3Npb24oY29uc3Qg
S1VSTCYpOworICAgIHZpcnR1YWwgdm9pZCByZXF1ZXN0UGVybWlzc2lvbihTY3JpcHRFeGVjdXRp
b25Db250ZXh0KiwgUGFzc1JlZlB0cjxWb2lkQ2FsbGJhY2s+KTsKKyAgICB2aXJ0dWFsIE5vdGlm
aWNhdGlvblByZXNlbnRlcjo6UGVybWlzc2lvbiBjaGVja1Blcm1pc3Npb24oU2NyaXB0RXhlY3V0
aW9uQ29udGV4dCopOwogCiAgICAgdm9pZCBjYW5jZWwoTm90aWZpY2F0aW9uV3JhcHBlciopOwog
CkBAIC05Myw4ICs5NSw2IEBAIHB1YmxpYzoKIAogICAgIHN0YXRpYyBib29sIGR1bXBOb3RpZmlj
YXRpb247CiAKLSAgICB2b2lkIHNldFJlY2VpdmVyKFFPYmplY3QqIHJlY2VpdmVyKSB7IG1fcmVj
ZWl2ZXIgPSByZWNlaXZlcjsgfQotCiAgICAgdm9pZCBhZGRDbGllbnQoKSB7IG1fY2xpZW50Q291
bnQrKzsgfQogICAgIHZvaWQgcmVtb3ZlQ2xpZW50KCk7CiAgICAgc3RhdGljIE5vdGlmaWNhdGlv
blByZXNlbnRlckNsaWVudFF0KiBub3RpZmljYXRpb25QcmVzZW50ZXIoKTsKQEAgLTEwOCwxMSAr
MTA4LDExIEBAIHByaXZhdGU6CiAgICAgdm9pZCBkZXRhY2hOb3RpZmljYXRpb24oTm90aWZpY2F0
aW9uKik7CiAgICAgdm9pZCBkdW1wUmVwbGFjZWRJZFRleHQoTm90aWZpY2F0aW9uKik7CiAgICAg
dm9pZCBkdW1wU2hvd1RleHQoTm90aWZpY2F0aW9uKik7CisgICAgUVdlYlBhZ2UqIHBhZ2UoU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCopOwogCiAgICAgaW50IG1fY2xpZW50Q291bnQ7CiAgICAgUUhh
c2g8UVN0cmluZywgIFFMaXN0PFJlZlB0cjxWb2lkQ2FsbGJhY2s+ID4gPiBtX3BlbmRpbmdQZXJt
aXNzaW9uUmVxdWVzdHM7CiAgICAgTm90aWZpY2F0aW9uc1F1ZXVlIG1fbm90aWZpY2F0aW9uczsK
LSAgICBRT2JqZWN0KiBtX3JlY2VpdmVyOwogICAgIFF0UGxhdGZvcm1QbHVnaW4gbV9wbGF0Zm9y
bVBsdWdpbjsKIH07CiAKSW5kZXg6IFdlYktpdFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJLaXRUb29scy9DaGFuZ2VMb2cJKHJldmlzaW9uIDYyMTg3KQorKysgV2ViS2l0VG9vbHMv
Q2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjUgQEAKKzIwMTAtMDYtMzAgIFlh
ZWwgQWhhcm9uICA8eWFlbC5haGFyb25Abm9raWEuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFtRdF0gUXRXZWJLaXQgbmVlZHMgcHVibGljIEFQ
SSBmb3IgTm90aWZpY2F0aW9ucy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTQxNDEzCisKKyAgICAgICAgVXBkYXRlIER1bXBSZW5kZXJUcmVlIGFuZCBR
dFRlc3RCcm93c2VyIHRvIHVzZSB0aGUgbmV3IEFQSS4KKworICAgICAgICAqIER1bXBSZW5kZXJU
cmVlL3F0L0R1bXBSZW5kZXJUcmVlUXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V2ViUGFnZTo6
V2ViUGFnZSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJQYWdlOjpyZXF1ZXN0UGVybWlzc2lvbik6
CisgICAgICAgIChXZWJDb3JlOjpXZWJQYWdlOjpjaGVja1Blcm1pc3Npb24pOgorICAgICAgICAq
IER1bXBSZW5kZXJUcmVlL3F0L0R1bXBSZW5kZXJUcmVlUXQuaDoKKyAgICAgICAgKiBRdFRlc3RC
cm93c2VyL21haW4uY3BwOgorICAgICAgICAoTGF1bmNoZXJXaW5kb3c6OkxhdW5jaGVyV2luZG93
KToKKyAgICAgICAgKiBRdFRlc3RCcm93c2VyL3dlYnBhZ2UuY3BwOgorICAgICAgICAoV2ViUGFn
ZTo6V2ViUGFnZSk6CisgICAgICAgIChXZWJQYWdlOjpyZXF1ZXN0UGVybWlzc2lvbik6CisgICAg
ICAgIChXZWJQYWdlOjpjaGVja1Blcm1pc3Npb24pOgorICAgICAgICAqIFF0VGVzdEJyb3dzZXIv
d2VicGFnZS5oOgorCiAyMDEwLTA2LTMwICBTaW1vbiBIYXVzbWFubiAgPHNpbW9uLmhhdXNtYW5u
QG5va2lhLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBMYXN6bG8gR29tYm9zLgpJbmRleDog
V2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvcXQvRHVtcFJlbmRlclRyZWVRdC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvcXQvRHVtcFJlbmRlclRyZWVRdC5j
cHAJKHJldmlzaW9uIDYyMTQwKQorKysgV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvcXQvRHVt
cFJlbmRlclRyZWVRdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzMCwxNiArMTMwLDYgQEAgcHVi
bGljOgogfTsKICNlbmRpZgogCi12b2lkIGNoZWNrUGVybWlzc2lvbkNhbGxiYWNrKFFPYmplY3Qq
IHJlY2VpdmVyLCBjb25zdCBRVXJsJiB1cmwsIE5vdGlmaWNhdGlvblBlcm1pc3Npb24mIHBlcm1p
c3Npb24pCi17Ci0gICAgcW9iamVjdF9jYXN0PER1bXBSZW5kZXJUcmVlKj4ocmVjZWl2ZXIpLT5j
aGVja1Blcm1pc3Npb24odXJsLCBwZXJtaXNzaW9uKTsKLX0KLQotdm9pZCByZXF1ZXN0UGVybWlz
c2lvbkNhbGxiYWNrKFFPYmplY3QqIHJlY2VpdmVyLCBjb25zdCBRU3RyaW5nJiBvcmlnaW4pCi17
Ci0gICAgcW9iamVjdF9jYXN0PER1bXBSZW5kZXJUcmVlKj4ocmVjZWl2ZXIpLT5yZXF1ZXN0UGVy
bWlzc2lvbihvcmlnaW4pOwotfQotCiBXZWJQYWdlOjpXZWJQYWdlKFFPYmplY3QqIHBhcmVudCwg
RHVtcFJlbmRlclRyZWUqIGRydCkKICAgICA6IFFXZWJQYWdlKHBhcmVudCkKICAgICAsIG1fd2Vi
SW5zcGVjdG9yKDApCkBAIC0xNjcsMTAgKzE1Nyw4IEBAIFdlYlBhZ2U6OldlYlBhZ2UoUU9iamVj
dCogcGFyZW50LCBEdW1wUmUKICAgICBzZXROZXR3b3JrQWNjZXNzTWFuYWdlcihtX2RydC0+bmV0
d29ya0FjY2Vzc01hbmFnZXIoKSk7CiAgICAgc2V0UGx1Z2luRmFjdG9yeShuZXcgVGVzdFBsdWdp
bih0aGlzKSk7CiAKLSAgICBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6c2V0Tm90aWZpY2F0aW9u
c1JlY2VpdmVyKG1fZHJ0KTsKLSAgICBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6c2V0Q2hlY2tQ
ZXJtaXNzaW9uRnVuY3Rpb24oY2hlY2tQZXJtaXNzaW9uQ2FsbGJhY2spOwotICAgIER1bXBSZW5k
ZXJUcmVlU3VwcG9ydFF0OjpzZXRSZXF1ZXN0UGVybWlzc2lvbkZ1bmN0aW9uKHJlcXVlc3RQZXJt
aXNzaW9uQ2FsbGJhY2spOwotCisgICAgY29ubmVjdCh0aGlzLCBTSUdOQUwocmVxdWVzdFBlcm1p
c3Npb25Gcm9tVXNlcihRV2ViUGFnZTo6UGVybWlzc2lvbkRvbWFpbiwgY29uc3QgUVN0cmluZyYp
KSwgdGhpcywgU0xPVChyZXF1ZXN0UGVybWlzc2lvbihRV2ViUGFnZTo6UGVybWlzc2lvbkRvbWFp
biwgY29uc3QgUVN0cmluZyYpKSk7CisgICAgY29ubmVjdCh0aGlzLCBTSUdOQUwoY2hlY2tQZXJt
aXNzaW9uRnJvbVVzZXIoUVdlYlBhZ2U6OlBlcm1pc3Npb25Eb21haW4sIGNvbnN0IFFTdHJpbmcm
LCBRV2ViUGFnZTo6UGVybWlzc2lvblBvbGljeSYpKSwgdGhpcywgU0xPVChjaGVja1Blcm1pc3Np
b24oUVdlYlBhZ2U6OlBlcm1pc3Npb25Eb21haW4sIGNvbnN0IFFTdHJpbmcmLCBRV2ViUGFnZTo6
UGVybWlzc2lvblBvbGljeSYpKSk7CiB9CiAKIFdlYlBhZ2U6On5XZWJQYWdlKCkKQEAgLTIyOCw2
ICsyMTYsMzEgQEAgdm9pZCBXZWJQYWdlOjpqYXZhU2NyaXB0QWxlcnQoUVdlYkZyYW1lKgogICAg
IGZwcmludGYoc3Rkb3V0LCAiQUxFUlQ6ICVzXG4iLCBtZXNzYWdlLnRvVXRmOCgpLmNvbnN0RGF0
YSgpKTsKIH0KIAordm9pZCBXZWJQYWdlOjpyZXF1ZXN0UGVybWlzc2lvbihRV2ViUGFnZTo6UGVy
bWlzc2lvbkRvbWFpbiBkb21haW4sIGNvbnN0IFFTdHJpbmcmIG9yaWdpbikKK3sKKyAgICBzd2l0
Y2ggKGRvbWFpbikgeworICAgIGNhc2UgUGVybWlzc2lvbkRvbWFpbk5vdGlmaWNhdGlvbnM6Cisg
ICAgICAgIHNldFVzZXJQZXJtaXNzaW9uKGRvbWFpbiwgb3JpZ2luLCBQZXJtaXNzaW9uUG9saWN5
R3JhbnRlZCk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIGJyZWFrOwor
ICAgIH0KK30KKwordm9pZCBXZWJQYWdlOjpjaGVja1Blcm1pc3Npb24oUVdlYlBhZ2U6OlBlcm1p
c3Npb25Eb21haW4gZG9tYWluLCBjb25zdCBRU3RyaW5nJiBvcmlnaW4sIFFXZWJQYWdlOjpQZXJt
aXNzaW9uUG9saWN5JiBwb2xpY3kpCit7CisgICAgc3dpdGNoIChkb21haW4pIHsKKyAgICBjYXNl
IFBlcm1pc3Npb25Eb21haW5Ob3RpZmljYXRpb25zOgorICAgICAgICB7CisgICAgICAgIFFVcmwg
dXJsKG9yaWdpbik7CisgICAgICAgIHBvbGljeSA9IG1fZHJ0LT5sYXlvdXRUZXN0Q29udHJvbGxl
cigpLT5jaGVja0Rlc2t0b3BOb3RpZmljYXRpb25QZXJtaXNzaW9uKHVybC5zY2hlbWUoKSArICI6
Ly8iICsgdXJsLmhvc3QoKSkgPyBQZXJtaXNzaW9uUG9saWN5R3JhbnRlZCA6IFBlcm1pc3Npb25Q
b2xpY3lEZW5pZWQ7CisgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgZGVmYXVsdDoKKyAg
ICAgICAgYnJlYWs7CisgICAgfQorfQorCiBzdGF0aWMgUVN0cmluZyB1cmxTdWl0YWJsZUZvclRl
c3RSZXN1bHQoY29uc3QgUVN0cmluZyYgdXJsKQogewogICAgIGlmICh1cmwuaXNFbXB0eSgpIHx8
ICF1cmwuc3RhcnRzV2l0aChRTGF0aW4xU3RyaW5nKCJmaWxlOi8vIikpKQpAQCAtOTY4LDE2ICs5
ODEsNiBAQCB2b2lkIER1bXBSZW5kZXJUcmVlOjpzd2l0Y2hGb2N1cyhib29sIGZvCiAKIH0KIAot
dm9pZCBEdW1wUmVuZGVyVHJlZTo6Y2hlY2tQZXJtaXNzaW9uKGNvbnN0IFFVcmwmIHVybCwgTm90
aWZpY2F0aW9uUGVybWlzc2lvbiYgcGVybWlzc2lvbikKLXsKLSAgICBwZXJtaXNzaW9uID0gbV9j
b250cm9sbGVyLT5jaGVja0Rlc2t0b3BOb3RpZmljYXRpb25QZXJtaXNzaW9uKHVybC5zY2hlbWUo
KSArICI6Ly8iICsgdXJsLmhvc3QoKSkgPyBOb3RpZmljYXRpb25BbGxvd2VkIDogTm90aWZpY2F0
aW9uRGVuaWVkOwotfQotCi12b2lkIER1bXBSZW5kZXJUcmVlOjpyZXF1ZXN0UGVybWlzc2lvbihj
b25zdCBRU3RyaW5nJiBvcmlnaW4pCi17Ci0gICAgRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OmFs
bG93Tm90aWZpY2F0aW9uRm9yT3JpZ2luKG9yaWdpbik7Ci19Ci0KICNpZiBkZWZpbmVkKFFfV1Nf
WDExKQogdm9pZCBEdW1wUmVuZGVyVHJlZTo6aW5pdGlhbGl6ZUZvbnRzKCkKIHsKSW5kZXg6IFdl
YktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL3F0L0R1bXBSZW5kZXJUcmVlUXQuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS9xdC9EdW1wUmVuZGVyVHJlZVF0LmgJKHJl
dmlzaW9uIDYyMTQwKQorKysgV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvcXQvRHVtcFJlbmRl
clRyZWVRdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMTksOCArMTE5LDYgQEAgcHVibGljIFFfU0xP
VFM6CiAgICAgdm9pZCBkdW1wRGF0YWJhc2VRdW90YShRV2ViRnJhbWUqIGZyYW1lLCBjb25zdCBR
U3RyaW5nJiBkYk5hbWUpOwogICAgIHZvaWQgc3RhdHVzQmFyTWVzc2FnZShjb25zdCBRU3RyaW5n
JiBtZXNzYWdlKTsKICAgICB2b2lkIHdpbmRvd0Nsb3NlUmVxdWVzdGVkKCk7Ci0gICAgdm9pZCBj
aGVja1Blcm1pc3Npb24oY29uc3QgUVVybCYsIE5vdGlmaWNhdGlvblBlcm1pc3Npb24mKTsKLSAg
ICB2b2lkIHJlcXVlc3RQZXJtaXNzaW9uKGNvbnN0IFFTdHJpbmcmKTsKIAogUV9TSUdOQUxTOgog
ICAgIHZvaWQgcXVpdCgpOwpAQCAtMTkyLDYgKzE5MCw4IEBAIHB1YmxpYzoKIHB1YmxpYyBzbG90
czoKICAgICBib29sIHNob3VsZEludGVycnVwdEphdmFTY3JpcHQoKSB7IHJldHVybiBmYWxzZTsg
fQogICAgIGJvb2wgYWxsb3dHZW9sb2NhdGlvblJlcXVlc3QoUVdlYkZyYW1lICpmcmFtZSk7Cisg
ICAgdm9pZCByZXF1ZXN0UGVybWlzc2lvbihRV2ViUGFnZTo6UGVybWlzc2lvbkRvbWFpbiBkb21h
aW4sIGNvbnN0IFFTdHJpbmcmIG9yaWdpbik7CisgICAgdm9pZCBjaGVja1Blcm1pc3Npb24oUVdl
YlBhZ2U6OlBlcm1pc3Npb25Eb21haW4gZG9tYWluLCBjb25zdCBRU3RyaW5nJiBvcmlnaW4sIFFX
ZWJQYWdlOjpQZXJtaXNzaW9uUG9saWN5JiBwb2xpY3kpOwogCiBwcm90ZWN0ZWQ6CiAgICAgYm9v
bCBhY2NlcHROYXZpZ2F0aW9uUmVxdWVzdChRV2ViRnJhbWUqIGZyYW1lLCBjb25zdCBRTmV0d29y
a1JlcXVlc3QmIHJlcXVlc3QsIE5hdmlnYXRpb25UeXBlIHR5cGUpOwpJbmRleDogV2ViS2l0VG9v
bHMvUXRUZXN0QnJvd3Nlci9tYWluLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXRUb29scy9RdFRl
c3RCcm93c2VyL21haW4uY3BwCShyZXZpc2lvbiA2MjE0MCkKKysrIFdlYktpdFRvb2xzL1F0VGVz
dEJyb3dzZXIvbWFpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTkyLDI5ICs5Miw2IEBAIHN0YXRp
YyBib29sIGdVc2VGcmFtZUZsYXR0ZW5pbmcgPSBmYWxzZTsKIHN0YXRpYyBib29sIGdVc2VRR0xX
aWRnZXRWaWV3cG9ydCA9IGZhbHNlOwogI2VuZGlmCiAKLWNsYXNzIE5vdGlmaWNhdGlvbnNQZXJt
aXNzaW9uQ29udHJvbGxlciA6IHB1YmxpYyBRT2JqZWN0IHsKLSAgICBRX09CSkVDVAotcHVibGlj
OgotICAgIE5vdGlmaWNhdGlvbnNQZXJtaXNzaW9uQ29udHJvbGxlcihRT2JqZWN0KiBwYXJlbnQp
IDogUU9iamVjdChwYXJlbnQpIAotICAgIHsKLSAgICAgICAgRHVtcFJlbmRlclRyZWVTdXBwb3J0
UXQ6OnNldE5vdGlmaWNhdGlvbnNSZWNlaXZlcih0aGlzKTsKLSAgICAgICAgRHVtcFJlbmRlclRy
ZWVTdXBwb3J0UXQ6OnNldENoZWNrUGVybWlzc2lvbkZ1bmN0aW9uKGNoZWNrUGVybWlzc2lvbik7
Ci0gICAgICAgIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjpzZXRSZXF1ZXN0UGVybWlzc2lvbkZ1
bmN0aW9uKHJlcXVlc3RQZXJtaXNzaW9uKTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgdm9pZCBjaGVj
a1Blcm1pc3Npb24oUU9iamVjdCosIGNvbnN0IFFVcmwmLCBOb3RpZmljYXRpb25QZXJtaXNzaW9u
JiBwZXJtaXNzaW9uKQotICAgIHsKLSAgICAgICAgcGVybWlzc2lvbiA9IE5vdGlmaWNhdGlvbkFs
bG93ZWQ7Ci0gICAgfQotCi0gICAgc3RhdGljIHZvaWQgcmVxdWVzdFBlcm1pc3Npb24oUU9iamVj
dCosIGNvbnN0IFFTdHJpbmcmIG9yaWdpbikKLSAgICB7Ci0gICAgICAgIER1bXBSZW5kZXJUcmVl
U3VwcG9ydFF0OjphbGxvd05vdGlmaWNhdGlvbkZvck9yaWdpbihvcmlnaW4pOwotICAgIH0KLX07
Ci0KLU5vdGlmaWNhdGlvbnNQZXJtaXNzaW9uQ29udHJvbGxlciogbm90aWZpY2F0aW9uc1Blcm1p
c3Npb25Db250cm9sbGVyID0gMDsKLQogY2xhc3MgTGF1bmNoZXJXaW5kb3cgOiBwdWJsaWMgTWFp
bldpbmRvdyB7CiAgICAgUV9PQkpFQ1QKIApAQCAtMjMzLDggKzIxMCw2IEBAIExhdW5jaGVyV2lu
ZG93OjpMYXVuY2hlcldpbmRvdyhMYXVuY2hlclcKICAgICB9CiAKICAgICBjcmVhdGVDaHJvbWUo
KTsKLSAgICBpZiAoIW5vdGlmaWNhdGlvbnNQZXJtaXNzaW9uQ29udHJvbGxlcikKLSAgICAgICAg
bm90aWZpY2F0aW9uc1Blcm1pc3Npb25Db250cm9sbGVyID0gbmV3IE5vdGlmaWNhdGlvbnNQZXJt
aXNzaW9uQ29udHJvbGxlcihRQ29yZUFwcGxpY2F0aW9uOjppbnN0YW5jZSgpKTsKIH0KIAogTGF1
bmNoZXJXaW5kb3c6On5MYXVuY2hlcldpbmRvdygpCkluZGV4OiBXZWJLaXRUb29scy9RdFRlc3RC
cm93c2VyL3dlYnBhZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdFRvb2xzL1F0VGVzdEJyb3dz
ZXIvd2VicGFnZS5jcHAJKHJldmlzaW9uIDYyMTQwKQorKysgV2ViS2l0VG9vbHMvUXRUZXN0QnJv
d3Nlci93ZWJwYWdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDgsNiArNDgsOCBAQCBXZWJQYWdl
OjpXZWJQYWdlKFFPYmplY3QqIHBhcmVudCkKIAogICAgIGNvbm5lY3QobmV0d29ya0FjY2Vzc01h
bmFnZXIoKSwgU0lHTkFMKGF1dGhlbnRpY2F0aW9uUmVxdWlyZWQoUU5ldHdvcmtSZXBseSosIFFB
dXRoZW50aWNhdG9yKikpLAogICAgICAgICAgICAgdGhpcywgU0xPVChhdXRoZW50aWNhdGlvblJl
cXVpcmVkKFFOZXR3b3JrUmVwbHkqLCBRQXV0aGVudGljYXRvciopKSk7CisgICAgY29ubmVjdCh0
aGlzLCBTSUdOQUwocmVxdWVzdFBlcm1pc3Npb25Gcm9tVXNlcihRV2ViUGFnZTo6UGVybWlzc2lv
bkRvbWFpbiwgY29uc3QgUVN0cmluZyYpKSwgdGhpcywgU0xPVChyZXF1ZXN0UGVybWlzc2lvbihR
V2ViUGFnZTo6UGVybWlzc2lvbkRvbWFpbiwgY29uc3QgUVN0cmluZyYpKSk7CisgICAgY29ubmVj
dCh0aGlzLCBTSUdOQUwoY2hlY2tQZXJtaXNzaW9uRnJvbVVzZXIoUVdlYlBhZ2U6OlBlcm1pc3Np
b25Eb21haW4sIGNvbnN0IFFTdHJpbmcmLCBRV2ViUGFnZTo6UGVybWlzc2lvblBvbGljeSYpKSwg
dGhpcywgU0xPVChjaGVja1Blcm1pc3Npb24oUVdlYlBhZ2U6OlBlcm1pc3Npb25Eb21haW4sIGNv
bnN0IFFTdHJpbmcmLCBRV2ViUGFnZTo6UGVybWlzc2lvblBvbGljeSYpKSk7CiB9CiAKIHZvaWQg
V2ViUGFnZTo6YXBwbHlQcm94eSgpCkBAIC0xNjIsMyArMTY0LDE5IEBAIHZvaWQgV2ViUGFnZTo6
YXV0aGVudGljYXRpb25SZXF1aXJlZChRTmUKIAogICAgIGRlbGV0ZSBkaWFsb2c7CiB9CisKK3Zv
aWQgV2ViUGFnZTo6cmVxdWVzdFBlcm1pc3Npb24oUVdlYlBhZ2U6OlBlcm1pc3Npb25Eb21haW4g
ZG9tYWluLCBjb25zdCBRU3RyaW5nJiBvcmlnaW4pCit7CisgICAgc2V0VXNlclBlcm1pc3Npb24o
ZG9tYWluLCBvcmlnaW4sIFBlcm1pc3Npb25Qb2xpY3lHcmFudGVkKTsKK30KKwordm9pZCBXZWJQ
YWdlOjpjaGVja1Blcm1pc3Npb24oUVdlYlBhZ2U6OlBlcm1pc3Npb25Eb21haW4gZG9tYWluLCBj
b25zdCBRU3RyaW5nJiBvcmlnaW4sIFFXZWJQYWdlOjpQZXJtaXNzaW9uUG9saWN5JiBwb2xpY3kp
Cit7CisgICAgc3dpdGNoIChkb21haW4pIHsKKyAgICBjYXNlIFBlcm1pc3Npb25Eb21haW5Ob3Rp
ZmljYXRpb25zOgorICAgICAgICBwb2xpY3kgPSBQZXJtaXNzaW9uUG9saWN5R3JhbnRlZDsKKyAg
ICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgYnJlYWs7CisgICAgfQorfQpJbmRl
eDogV2ViS2l0VG9vbHMvUXRUZXN0QnJvd3Nlci93ZWJwYWdlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
S2l0VG9vbHMvUXRUZXN0QnJvd3Nlci93ZWJwYWdlLmgJKHJldmlzaW9uIDYyMTQwKQorKysgV2Vi
S2l0VG9vbHMvUXRUZXN0QnJvd3Nlci93ZWJwYWdlLmgJKHdvcmtpbmcgY29weSkKQEAgLTU3LDYg
KzU3LDggQEAgcHVibGljIHNsb3RzOgogICAgIHZvaWQgc2V0VXNlckFnZW50KGNvbnN0IFFTdHJp
bmcmIHVhKSB7IG1fdXNlckFnZW50ID0gdWE7IH0KICAgICBib29sIHNob3VsZEludGVycnVwdEph
dmFTY3JpcHQoKTsKICAgICB2b2lkIGF1dGhlbnRpY2F0aW9uUmVxdWlyZWQoUU5ldHdvcmtSZXBs
eSosIFFBdXRoZW50aWNhdG9yKik7CisgICAgdm9pZCByZXF1ZXN0UGVybWlzc2lvbihRV2ViUGFn
ZTo6UGVybWlzc2lvbkRvbWFpbiBkb21haW4sIGNvbnN0IFFTdHJpbmcmIG9yaWdpbik7CisgICAg
dm9pZCBjaGVja1Blcm1pc3Npb24oUVdlYlBhZ2U6OlBlcm1pc3Npb25Eb21haW4gZG9tYWluLCBj
b25zdCBRU3RyaW5nJiBvcmlnaW4sIFFXZWJQYWdlOjpQZXJtaXNzaW9uUG9saWN5JiBwb2xpY3kp
OwogCiBwcml2YXRlOgogICAgIHZvaWQgYXBwbHlQcm94eSgpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>61178</attachid>
            <date>2010-07-11 09:03:22 -0700</date>
            <delta_ts>2010-07-12 17:09:46 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>41413.patch</filename>
            <type>text/plain</type>
            <size>32275</size>
            <attacher name="Yael">yael</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYktpdC9xdC9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L3F0L0NoYW5n
ZUxvZwkocmV2aXNpb24gNjMwNTcpCisrKyBXZWJLaXQvcXQvQ2hhbmdlTG9nCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDMgKzEsMjcgQEAKKzIwMTAtMDctMTEgIFlhZWwgQWhhcm9uICA8eWFlbC5haGFy
b25Abm9raWEuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIFtRdF0gUXRXZWJLaXQgbmVlZHMgcHVibGljIEFQSSBmb3IgTm90aWZpY2F0aW9ucy4K
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQxNDEzCisK
KyAgICAgICAgUmVtb3ZlIER1bXBSZW5kZXJUcmVlIHByaXZhdGUgQVBJIGFuZCBpbnRyb2R1Y2Ug
bmV3IEFQSS4KKyAgICAgICAgQWxzbyBhZGQgc3VwcG9ydCBmb3IgaW5mb3JtaW5nIHRoZSBVSSB3
aGVuIGEgbm90aWZpY2F0aW9uIHJlcXVlc3QgaXMgY2FuY2VsbGVkLgorIAorICAgICAgICAqIEFw
aS9xd2VicGFnZS5jcHA6CisgICAgICAgIChRV2ViUGFnZTo6c2V0VXNlclBlcm1pc3Npb24pOgor
ICAgICAgICAqIEFwaS9xd2VicGFnZS5oOgorICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0R1bXBS
ZW5kZXJUcmVlU3VwcG9ydFF0LmNwcDoKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9EdW1wUmVu
ZGVyVHJlZVN1cHBvcnRRdC5oOgorICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L05vdGlmaWNhdGlv
blByZXNlbnRlckNsaWVudFF0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok5vdGlmaWNhdGlvblBy
ZXNlbnRlckNsaWVudFF0OjpyZXF1ZXN0UGVybWlzc2lvbik6CisgICAgICAgIChXZWJDb3JlOjpO
b3RpZmljYXRpb25QcmVzZW50ZXJDbGllbnRRdDo6Y2hlY2tQZXJtaXNzaW9uKToKKyAgICAgICAg
KFdlYkNvcmU6Ok5vdGlmaWNhdGlvblByZXNlbnRlckNsaWVudFF0OjpjYW5jZWxSZXF1ZXN0c0Zv
clBlcm1pc3Npb24pOgorICAgICAgICAoV2ViQ29yZTo6Tm90aWZpY2F0aW9uUHJlc2VudGVyQ2xp
ZW50UXQ6OmFsbG93Tm90aWZpY2F0aW9uRm9yRnJhbWUpOgorICAgICAgICAoV2ViQ29yZTo6Tm90
aWZpY2F0aW9uUHJlc2VudGVyQ2xpZW50UXQ6OnBhZ2UpOgorICAgICAgICAoV2ViQ29yZTo6Tm90
aWZpY2F0aW9uUHJlc2VudGVyQ2xpZW50UXQ6OmZyYW1lKToKKyAgICAgICAgKiBXZWJDb3JlU3Vw
cG9ydC9Ob3RpZmljYXRpb25QcmVzZW50ZXJDbGllbnRRdC5oOgorCiAyMDEwLTA3LTA5ICBZYWVs
IEFoYXJvbiAgPHlhZWwuYWhhcm9uQG5va2lhLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBM
YXN6bG8gR29tYm9zLgpJbmRleDogV2ViS2l0L3F0L0FwaS9xd2VicGFnZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViS2l0L3F0L0FwaS9xd2VicGFnZS5jcHAJKHJldmlzaW9uIDYyOTc2KQorKysgV2Vi
S2l0L3F0L0FwaS9xd2VicGFnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIxMDcsNiArMjEwNywy
MCBAQCBib29sIFFXZWJQYWdlOjphbGxvd0dlb2xvY2F0aW9uUmVxdWVzdChRCiAjZW5kaWYKIH0K
IAordm9pZCBRV2ViUGFnZTo6c2V0VXNlclBlcm1pc3Npb24oUVdlYkZyYW1lKiBmcmFtZSwgUGVy
bWlzc2lvbkRvbWFpbiBkb21haW4sIFBlcm1pc3Npb25Qb2xpY3kgcG9saWN5KQoreworICAgIHN3
aXRjaCAoZG9tYWluKSB7CisgICAgY2FzZSBQZXJtaXNzaW9uRG9tYWluTm90aWZpY2F0aW9uczoK
KyNpZiBFTkFCTEUoTk9USUZJQ0FUSU9OUykKKyAgICAgICAgaWYgKHBvbGljeSA9PSBQZXJtaXNz
aW9uUG9saWN5R3JhbnRlZCkKKyAgICAgICAgICAgIE5vdGlmaWNhdGlvblByZXNlbnRlckNsaWVu
dFF0Ojpub3RpZmljYXRpb25QcmVzZW50ZXIoKS0+YWxsb3dOb3RpZmljYXRpb25Gb3JGcmFtZShm
cmFtZSk7CisjZW5kaWYKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgYnJl
YWs7CisgICAgfQorfQorCiAvKiEKICAgICBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aGVuZXZl
ciBXZWJLaXQgd2FudHMgdG8gY3JlYXRlIGEgbmV3IHdpbmRvdyBvZiB0aGUgZ2l2ZW4gXGEgdHlw
ZSwgZm9yCiAgICAgZXhhbXBsZSB3aGVuIGEgSmF2YVNjcmlwdCBwcm9ncmFtIHJlcXVlc3RzIHRv
IG9wZW4gYSBkb2N1bWVudCBpbiBhIG5ldyB3aW5kb3cuCkluZGV4OiBXZWJLaXQvcXQvQXBpL3F3
ZWJwYWdlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L3F0L0FwaS9xd2VicGFnZS5oCShyZXZpc2lv
biA2Mjk3NikKKysrIFdlYktpdC9xdC9BcGkvcXdlYnBhZ2UuaAkod29ya2luZyBjb3B5KQpAQCAt
MTk1LDYgKzE5NSwxNiBAQCBwdWJsaWM6CiAgICAgICAgIFdlYk1vZGFsRGlhbG9nCiAgICAgfTsK
IAorICAgIGVudW0gUGVybWlzc2lvblBvbGljeSB7CisgICAgICAgIFBlcm1pc3Npb25Qb2xpY3lH
cmFudGVkLAorICAgICAgICBQZXJtaXNzaW9uUG9saWN5SWdub3JlZCwKKyAgICAgICAgUGVybWlz
c2lvblBvbGljeURlbmllZAorICAgIH07CisKKyAgICBlbnVtIFBlcm1pc3Npb25Eb21haW4gewor
ICAgICAgICBQZXJtaXNzaW9uRG9tYWluTm90aWZpY2F0aW9ucworICAgIH07CisKICAgICBjbGFz
cyBWaWV3cG9ydEhpbnRzIHsKICAgICBwdWJsaWM6CiAgICAgICAgIFZpZXdwb3J0SGludHMoKTsK
QEAgLTI5MCw2ICszMDAsOCBAQCBwdWJsaWM6CiAKICAgICBRTWVudSAqY3JlYXRlU3RhbmRhcmRD
b250ZXh0TWVudSgpOwogCisgICAgdm9pZCBzZXRVc2VyUGVybWlzc2lvbihRV2ViRnJhbWUqIGZy
YW1lLCBQZXJtaXNzaW9uRG9tYWluIGRvbWFpbiwgUGVybWlzc2lvblBvbGljeSBwb2xpY3kpOwor
CiAgICAgZW51bSBFeHRlbnNpb24gewogICAgICAgICBDaG9vc2VNdWx0aXBsZUZpbGVzRXh0ZW5z
aW9uLAogICAgICAgICBFcnJvclBhZ2VFeHRlbnNpb24KQEAgLTM3MSw2ICszODMsMTAgQEAgUV9T
SUdOQUxTOgogCiAgICAgdm9pZCB2aWV3cG9ydENoYW5nZVJlcXVlc3RlZChjb25zdCBRV2ViUGFn
ZTo6Vmlld3BvcnRIaW50cyYgaGludHMpOwogCisgICAgdm9pZCByZXF1ZXN0UGVybWlzc2lvbkZy
b21Vc2VyKFFXZWJGcmFtZSogZnJhbWUsIFFXZWJQYWdlOjpQZXJtaXNzaW9uRG9tYWluIGRvbWFp
bik7CisgICAgdm9pZCBjaGVja1Blcm1pc3Npb25Gcm9tVXNlcihRV2ViRnJhbWUqIGZyYW1lLCBR
V2ViUGFnZTo6UGVybWlzc2lvbkRvbWFpbiBkb21haW4sIFFXZWJQYWdlOjpQZXJtaXNzaW9uUG9s
aWN5JiBwb2xpY3kpOworICAgIHZvaWQgY2FuY2VsUmVxdWVzdHNGb3JQZXJtaXNzaW9uKFFXZWJG
cmFtZSogZnJhbWUsIFFXZWJQYWdlOjpQZXJtaXNzaW9uRG9tYWluIGRvbWFpbik7CisKIHByb3Rl
Y3RlZDoKICAgICB2aXJ0dWFsIFFXZWJQYWdlICpjcmVhdGVXaW5kb3coV2ViV2luZG93VHlwZSB0
eXBlKTsKICAgICB2aXJ0dWFsIFFPYmplY3QgKmNyZWF0ZVBsdWdpbihjb25zdCBRU3RyaW5nICZj
bGFzc2lkLCBjb25zdCBRVXJsICZ1cmwsIGNvbnN0IFFTdHJpbmdMaXN0ICZwYXJhbU5hbWVzLCBj
b25zdCBRU3RyaW5nTGlzdCAmcGFyYW1WYWx1ZXMpOwpJbmRleDogV2ViS2l0L3F0L1dlYkNvcmVT
dXBwb3J0L0R1bXBSZW5kZXJUcmVlU3VwcG9ydFF0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQv
cXQvV2ViQ29yZVN1cHBvcnQvRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQuY3BwCShyZXZpc2lvbiA2
Mjk3NikKKysrIFdlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9EdW1wUmVuZGVyVHJlZVN1cHBvcnRR
dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTcwLDggKzcwLDYgQEAKIAogdXNpbmcgbmFtZXNwYWNl
IFdlYkNvcmU7CiAKLUNoZWNrUGVybWlzc2lvbkZ1bmN0aW9uVHlwZSogY2hlY2tQZXJtaXNzaW9u
RnVuY3Rpb24gPSAwOwotUmVxdWVzdFBlcm1pc3Npb25GdW5jdGlvblR5cGUqIHJlcXVlc3RQZXJt
aXNzaW9uRnVuY3Rpb24gPSAwOwogUU1hcDxpbnQsIFFXZWJTY3JpcHRXb3JsZCo+IG1fd29ybGRN
YXA7CiAKIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjpEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdCgp
CkBAIC01NzAsMjAgKzU2OCw2IEBAIHZvaWQgRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OmR1bXBO
b3RpZmkKICNlbmRpZgogfQogCi12b2lkIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjpzZXROb3Rp
ZmljYXRpb25zUmVjZWl2ZXIoUU9iamVjdCogcmVjZWl2ZXIpCi17Ci0jaWYgRU5BQkxFKE5PVElG
SUNBVElPTlMpCi0gICAgTm90aWZpY2F0aW9uUHJlc2VudGVyQ2xpZW50UXQ6Om5vdGlmaWNhdGlv
blByZXNlbnRlcigpLT5zZXRSZWNlaXZlcihyZWNlaXZlcik7Ci0jZW5kaWYKLX0KLQotdm9pZCBE
dW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6YWxsb3dOb3RpZmljYXRpb25Gb3JPcmlnaW4oY29uc3Qg
UVN0cmluZyYgb3JpZ2luKQotewotI2lmIEVOQUJMRShOT1RJRklDQVRJT05TKQotICAgIE5vdGlm
aWNhdGlvblByZXNlbnRlckNsaWVudFF0Ojpub3RpZmljYXRpb25QcmVzZW50ZXIoKS0+YWxsb3dO
b3RpZmljYXRpb25Gb3JPcmlnaW4ob3JpZ2luKTsKLSNlbmRpZgotfQotCiB2b2lkIER1bXBSZW5k
ZXJUcmVlU3VwcG9ydFF0OjpzZXRNb2NrR2VvbG9jYXRpb25Qb3NpdGlvbihkb3VibGUgbGF0aXR1
ZGUsIGRvdWJsZSBsb25naXR1ZGUsIGRvdWJsZSBhY2N1cmFjeSkKIHsKICNpZiBFTkFCTEUoR0VP
TE9DQVRJT04pCkBAIC02MDAsMTYgKzU4NCw2IEBAIHZvaWQgRHVtcFJlbmRlclRyZWVTdXBwb3J0
UXQ6OnNldE1vY2tHZW8KICNlbmRpZgogfQogCi12b2lkIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0
OjpzZXRDaGVja1Blcm1pc3Npb25GdW5jdGlvbihDaGVja1Blcm1pc3Npb25GdW5jdGlvblR5cGUq
IGYpCi17Ci0gICAgY2hlY2tQZXJtaXNzaW9uRnVuY3Rpb24gPSBmOwotfQotCi12b2lkIER1bXBS
ZW5kZXJUcmVlU3VwcG9ydFF0OjpzZXRSZXF1ZXN0UGVybWlzc2lvbkZ1bmN0aW9uKFJlcXVlc3RQ
ZXJtaXNzaW9uRnVuY3Rpb25UeXBlKiBmKQotewotICAgIHJlcXVlc3RQZXJtaXNzaW9uRnVuY3Rp
b24gPSBmOwotfQotCiBib29sIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0Ojppc1RhcmdldEl0ZW0o
Y29uc3QgUVdlYkhpc3RvcnlJdGVtJiBoaXN0b3J5SXRlbSkKIHsKICAgICBRV2ViSGlzdG9yeUl0
ZW0gaXQgPSBoaXN0b3J5SXRlbTsKSW5kZXg6IFdlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9EdW1w
UmVuZGVyVHJlZVN1cHBvcnRRdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9xdC9XZWJDb3JlU3Vw
cG9ydC9EdW1wUmVuZGVyVHJlZVN1cHBvcnRRdC5oCShyZXZpc2lvbiA2Mjk3NikKKysrIFdlYktp
dC9xdC9XZWJDb3JlU3VwcG9ydC9EdW1wUmVuZGVyVHJlZVN1cHBvcnRRdC5oCSh3b3JraW5nIGNv
cHkpCkBAIC0zMiwxNyArMzIsNiBAQCBjbGFzcyBRV2ViUGFnZTsKIGNsYXNzIFFXZWJIaXN0b3J5
SXRlbTsKIGNsYXNzIFFXZWJTY3JpcHRXb3JsZDsKIAotZW51bSBOb3RpZmljYXRpb25QZXJtaXNz
aW9uIHsKLSAgICBOb3RpZmljYXRpb25BbGxvd2VkLAotICAgIE5vdGlmaWNhdGlvbk5vdEFsbG93
ZWQsCi0gICAgTm90aWZpY2F0aW9uRGVuaWVkCi19OwotCi10eXBlZGVmIHZvaWQgKENoZWNrUGVy
bWlzc2lvbkZ1bmN0aW9uVHlwZSkgKFFPYmplY3QqIHJlY2VpdmVyLCBjb25zdCBRVXJsJiwgTm90
aWZpY2F0aW9uUGVybWlzc2lvbiYpOwotdHlwZWRlZiB2b2lkIChSZXF1ZXN0UGVybWlzc2lvbkZ1
bmN0aW9uVHlwZSkgKFFPYmplY3QqIHJlY2VpdmVyLCBjb25zdCBRU3RyaW5nJik7Ci0KLWV4dGVy
biBDaGVja1Blcm1pc3Npb25GdW5jdGlvblR5cGUqIGNoZWNrUGVybWlzc2lvbkZ1bmN0aW9uOwot
ZXh0ZXJuIFJlcXVlc3RQZXJtaXNzaW9uRnVuY3Rpb25UeXBlKiByZXF1ZXN0UGVybWlzc2lvbkZ1
bmN0aW9uOwogZXh0ZXJuIFFNYXA8aW50LCBRV2ViU2NyaXB0V29ybGQqPiBtX3dvcmxkTWFwOwog
CiBjbGFzcyBRV0VCS0lUX0VYUE9SVCBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdCB7CkBAIC0xMjEs
MTMgKzExMCw2IEBAIHB1YmxpYzoKIAogICAgIHN0YXRpYyB2b2lkIGR1bXBOb3RpZmljYXRpb24o
Ym9vbCBiKTsKIAotICAgIC8vIFRoZXNlIGZ1bmN0aW9ucyBzaG91bGQgZXZlbnR1YWxseSB0dXJu
IGludG8gcHVibGljIEFQSQotICAgIC8vIGFuZCB0aGUgInJlY2VpdmVyIiBjb25jZXB0IHdvdWxk
IGdvIGF3YXkKLSAgICBzdGF0aWMgdm9pZCBzZXROb3RpZmljYXRpb25zUmVjZWl2ZXIoUU9iamVj
dCogcmVjZWl2ZXIpOwotICAgIHN0YXRpYyB2b2lkIGFsbG93Tm90aWZpY2F0aW9uRm9yT3JpZ2lu
KGNvbnN0IFFTdHJpbmcmIG9yaWdpbik7Ci0gICAgc3RhdGljIHZvaWQgc2V0Q2hlY2tQZXJtaXNz
aW9uRnVuY3Rpb24oQ2hlY2tQZXJtaXNzaW9uRnVuY3Rpb25UeXBlKik7Ci0gICAgc3RhdGljIHZv
aWQgc2V0UmVxdWVzdFBlcm1pc3Npb25GdW5jdGlvbihSZXF1ZXN0UGVybWlzc2lvbkZ1bmN0aW9u
VHlwZSopOwotCiAgICAgc3RhdGljIFFNYXA8UVN0cmluZywgUVdlYkhpc3RvcnlJdGVtPiBnZXRD
aGlsZEhpc3RvcnlJdGVtcyhjb25zdCBRV2ViSGlzdG9yeUl0ZW0mIGhpc3RvcnlJdGVtKTsKICAg
ICBzdGF0aWMgYm9vbCBpc1RhcmdldEl0ZW0oY29uc3QgUVdlYkhpc3RvcnlJdGVtJiBoaXN0b3J5
SXRlbSk7CiAgICAgc3RhdGljIFFTdHJpbmcgaGlzdG9yeUl0ZW1UYXJnZXQoY29uc3QgUVdlYkhp
c3RvcnlJdGVtJiBoaXN0b3J5SXRlbSk7CkluZGV4OiBXZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQv
Tm90aWZpY2F0aW9uUHJlc2VudGVyQ2xpZW50UXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9x
dC9XZWJDb3JlU3VwcG9ydC9Ob3RpZmljYXRpb25QcmVzZW50ZXJDbGllbnRRdC5jcHAJKHJldmlz
aW9uIDYyOTc2KQorKysgV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L05vdGlmaWNhdGlvblByZXNl
bnRlckNsaWVudFF0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzYsMTEgKzM2LDE0IEBACiAjaW5j
bHVkZSAiRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQuaCIKICNpbmNsdWRlICJFdmVudE5hbWVzLmgi
CiAjaW5jbHVkZSAiS1VSTC5oIgorI2luY2x1ZGUgIlBhZ2UuaCIKICNpbmNsdWRlICJRdFBsYXRm
b3JtUGx1Z2luLmgiCiAjaW5jbHVkZSAiU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oIgogI2luY2x1
ZGUgIlNlY3VyaXR5T3JpZ2luLmgiCiAKKyNpbmNsdWRlICJxd2ViZnJhbWVfcC5oIgogI2luY2x1
ZGUgInF3ZWJraXRnbG9iYWwuaCIKKyNpbmNsdWRlICJxd2VicGFnZS5oIgogI2luY2x1ZGUgPFF0
R3VpPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC0yNTksNTIgKzI2Miw3MiBAQCB2b2lkIE5v
dGlmaWNhdGlvblByZXNlbnRlckNsaWVudFF0OjpyZXF1CiAgICAgICAgIHByaW50ZigiREVTS1RP
UCBOT1RJRklDQVRJT04gUEVSTUlTU0lPTiBSRVFVRVNURUQ6ICVzXG4iLCBRU3RyaW5nKGNvbnRl
eHQtPnNlY3VyaXR5T3JpZ2luKCktPnRvU3RyaW5nKCkpLnRvVXRmOCgpLmNvbnN0RGF0YSgpKTsK
IAogICAgIFFTdHJpbmcgb3JpZ2luU3RyaW5nID0gY29udGV4dC0+c2VjdXJpdHlPcmlnaW4oKS0+
dG9TdHJpbmcoKTsKLSAgICBRSGFzaDxRU3RyaW5nLCBRTGlzdDxSZWZQdHI8Vm9pZENhbGxiYWNr
PiA+ID46Oml0ZXJhdG9yIGl0ZXIgPSBtX3BlbmRpbmdQZXJtaXNzaW9uUmVxdWVzdHMuZmluZChv
cmlnaW5TdHJpbmcpOworICAgIFFIYXNoPFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBDYWxsYmFj
a3NJbmZvID46Oml0ZXJhdG9yIGl0ZXIgPSBtX3BlbmRpbmdQZXJtaXNzaW9uUmVxdWVzdHMuZmlu
ZChjb250ZXh0KTsKKwogICAgIGlmIChpdGVyICE9IG1fcGVuZGluZ1Blcm1pc3Npb25SZXF1ZXN0
cy5lbmQoKSkKLSAgICAgICAgaXRlci52YWx1ZSgpLmFwcGVuZChjYWxsYmFjayk7CisgICAgICAg
IGl0ZXIudmFsdWUoKS5tX2NhbGxiYWNrcy5hcHBlbmQoY2FsbGJhY2spOwogICAgIGVsc2Ugewot
ICAgICAgICBRTGlzdDxSZWZQdHI8Vm9pZENhbGxiYWNrPiA+IGNhbGxiYWNrczsKICAgICAgICAg
UmVmUHRyPFZvaWRDYWxsYmFjaz4gY2IgPSBjYWxsYmFjazsKLSAgICAgICAgY2FsbGJhY2tzLmFw
cGVuZChjYik7Ci0gICAgICAgIG1fcGVuZGluZ1Blcm1pc3Npb25SZXF1ZXN0cy5pbnNlcnQob3Jp
Z2luU3RyaW5nLCBjYWxsYmFja3MpOwotICAgICAgICBpZiAocmVxdWVzdFBlcm1pc3Npb25GdW5j
dGlvbikKLSAgICAgICAgICAgIHJlcXVlc3RQZXJtaXNzaW9uRnVuY3Rpb24obV9yZWNlaXZlciwg
b3JpZ2luU3RyaW5nKTsKKyAgICAgICAgQ2FsbGJhY2tzSW5mbyBpbmZvOworICAgICAgICBpbmZv
Lm1fZnJhbWUgPSBmcmFtZShjb250ZXh0KTsKKyAgICAgICAgaW5mby5tX2NhbGxiYWNrcy5hcHBl
bmQoY2IpOworICAgICAgICBtX3BlbmRpbmdQZXJtaXNzaW9uUmVxdWVzdHMuaW5zZXJ0KGNvbnRl
eHQsIGluZm8pOworICAgICAgICBpZiAocGFnZShjb250ZXh0KSAmJiBmcmFtZShjb250ZXh0KSkK
KyAgICAgICAgICAgIGVtaXQgcGFnZShjb250ZXh0KS0+cmVxdWVzdFBlcm1pc3Npb25Gcm9tVXNl
cihmcmFtZShjb250ZXh0KSwgUVdlYlBhZ2U6OlBlcm1pc3Npb25Eb21haW5Ob3RpZmljYXRpb25z
KTsKICAgICB9CiB9CiAKIE5vdGlmaWNhdGlvblByZXNlbnRlcjo6UGVybWlzc2lvbiBOb3RpZmlj
YXRpb25QcmVzZW50ZXJDbGllbnRRdDo6Y2hlY2tQZXJtaXNzaW9uKFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQqIGNvbnRleHQpCiB7Ci0gICAgTm90aWZpY2F0aW9uUGVybWlzc2lvbiBwZXJtaXNzaW9u
ID0gTm90aWZpY2F0aW9uTm90QWxsb3dlZDsKLSAgICBRU3RyaW5nIG9yaWdpbiA9IGNvbnRleHQt
PnVybCgpLnN0cmluZygpOwotICAgIGlmIChjaGVja1Blcm1pc3Npb25GdW5jdGlvbikKLSAgICAg
ICAgY2hlY2tQZXJtaXNzaW9uRnVuY3Rpb24obV9yZWNlaXZlciwgb3JpZ2luLCBwZXJtaXNzaW9u
KTsKLSAgICBzd2l0Y2ggKHBlcm1pc3Npb24pIHsKLSAgICBjYXNlIE5vdGlmaWNhdGlvbkFsbG93
ZWQ6CisgICAgUVdlYlBhZ2U6OlBlcm1pc3Npb25Qb2xpY3kgcG9saWN5ID0gUVdlYlBhZ2U6OlBl
cm1pc3Npb25Qb2xpY3lJZ25vcmVkOworICAgIGlmIChwYWdlKGNvbnRleHQpICYmIGZyYW1lKGNv
bnRleHQpKQorICAgICAgICBlbWl0IHBhZ2UoY29udGV4dCktPmNoZWNrUGVybWlzc2lvbkZyb21V
c2VyKGZyYW1lKGNvbnRleHQpLCBRV2ViUGFnZTo6UGVybWlzc2lvbkRvbWFpbk5vdGlmaWNhdGlv
bnMsIHBvbGljeSk7CisKKyAgICBzd2l0Y2ggKHBvbGljeSkgeworICAgIGNhc2UgUVdlYlBhZ2U6
OlBlcm1pc3Npb25Qb2xpY3lHcmFudGVkOgogICAgICAgICByZXR1cm4gTm90aWZpY2F0aW9uUHJl
c2VudGVyOjpQZXJtaXNzaW9uQWxsb3dlZDsKLSAgICBjYXNlIE5vdGlmaWNhdGlvbk5vdEFsbG93
ZWQ6CisgICAgY2FzZSBRV2ViUGFnZTo6UGVybWlzc2lvblBvbGljeUlnbm9yZWQ6CiAgICAgICAg
IHJldHVybiBOb3RpZmljYXRpb25QcmVzZW50ZXI6OlBlcm1pc3Npb25Ob3RBbGxvd2VkOwotICAg
IGNhc2UgTm90aWZpY2F0aW9uRGVuaWVkOgorICAgIGNhc2UgUVdlYlBhZ2U6OlBlcm1pc3Npb25Q
b2xpY3lEZW5pZWQ6CiAgICAgICAgIHJldHVybiBOb3RpZmljYXRpb25QcmVzZW50ZXI6OlBlcm1p
c3Npb25EZW5pZWQ7CiAgICAgfQogICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgIHJldHVy
biBOb3RpZmljYXRpb25QcmVzZW50ZXI6OlBlcm1pc3Npb25Ob3RBbGxvd2VkOwogfQogCi12b2lk
IE5vdGlmaWNhdGlvblByZXNlbnRlckNsaWVudFF0OjpjYW5jZWxSZXF1ZXN0c0ZvclBlcm1pc3Np
b24oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCopCit2b2lkIE5vdGlmaWNhdGlvblByZXNlbnRlckNs
aWVudFF0OjpjYW5jZWxSZXF1ZXN0c0ZvclBlcm1pc3Npb24oU2NyaXB0RXhlY3V0aW9uQ29udGV4
dCogY29udGV4dCkKIHsKLSAgICAvLyBGSVhNRTogVGhpcyB3aWxsIGJlIGltcGxlbWVudGVkIGZv
ciBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDE0MTMKLSAgICAvLyB0
byBhdm9pZCBhZGRpbmcgYW5kIHJlbW92aW5nIG5ldyBwcml2YXRlIEFQSQorICAgIFFIYXNoPFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQqLCAgQ2FsbGJhY2tzSW5mbyA+OjppdGVyYXRvciBpdGVyID0g
bV9wZW5kaW5nUGVybWlzc2lvblJlcXVlc3RzLmZpbmQoY29udGV4dCk7CisgICAgaWYgKGl0ZXIg
PT0gbV9wZW5kaW5nUGVybWlzc2lvblJlcXVlc3RzLmVuZCgpKQorICAgICAgICByZXR1cm47CisK
KyAgICBpZiAoZHVtcE5vdGlmaWNhdGlvbikKKyAgICAgICAgcHJpbnRmKCJERVNLVE9QIE5PVElG
SUNBVElPTiBQRVJNSVNTSU9OIFJFUVVFU1QgQ0FOQ0VMTEVEOiAlc1xuIiwgUVN0cmluZyhjb250
ZXh0LT5zZWN1cml0eU9yaWdpbigpLT50b1N0cmluZygpKS50b1V0ZjgoKS5jb25zdERhdGEoKSk7
CisKKyAgICAvLyBUaGUgZnJhbWUgY291bGQgYWxyZWFkeSBiZSBkaXNjb25uZWN0ZWQsIHNvIGRv
IG5vdCB1c2UgZnJhbWUoY29udGV4dCkgb3IgcGFnZShjb250ZXh0KQorICAgIFFXZWJGcmFtZSog
ZnJhbWVUb1JlbW92ZSA9IGl0ZXIudmFsdWUoKS5tX2ZyYW1lOworICAgIFFXZWJQYWdlKiBwYWdl
VG9SZW1vdmUgPSBmcmFtZVRvUmVtb3ZlLT5wYWdlKCk7CisgICAgbV9wZW5kaW5nUGVybWlzc2lv
blJlcXVlc3RzLmVyYXNlKGl0ZXIpOworCisgICAgaWYgKHBhZ2VUb1JlbW92ZSAmJiBmcmFtZVRv
UmVtb3ZlKQorICAgICAgICBlbWl0IHBhZ2VUb1JlbW92ZS0+Y2FuY2VsUmVxdWVzdHNGb3JQZXJt
aXNzaW9uKGZyYW1lVG9SZW1vdmUsIFFXZWJQYWdlOjpQZXJtaXNzaW9uRG9tYWluTm90aWZpY2F0
aW9ucyk7CiB9CiAKLXZvaWQgTm90aWZpY2F0aW9uUHJlc2VudGVyQ2xpZW50UXQ6OmFsbG93Tm90
aWZpY2F0aW9uRm9yT3JpZ2luKGNvbnN0IFFTdHJpbmcmIG9yaWdpbikKK3ZvaWQgTm90aWZpY2F0
aW9uUHJlc2VudGVyQ2xpZW50UXQ6OmFsbG93Tm90aWZpY2F0aW9uRm9yRnJhbWUoUVdlYkZyYW1l
KiBmcmFtZSkKIHsKLSAgICBRSGFzaDxRU3RyaW5nLCBRTGlzdDxSZWZQdHI8Vm9pZENhbGxiYWNr
PiA+ID46Oml0ZXJhdG9yIGl0ZXIgPSBtX3BlbmRpbmdQZXJtaXNzaW9uUmVxdWVzdHMuZmluZChv
cmlnaW4pOwotICAgIGlmIChpdGVyICE9IG1fcGVuZGluZ1Blcm1pc3Npb25SZXF1ZXN0cy5lbmQo
KSkgewotICAgICAgICBRTGlzdDxSZWZQdHI8Vm9pZENhbGxiYWNrPiA+JiBjYWxsYmFja3MgPSBp
dGVyLnZhbHVlKCk7Ci0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY2FsbGJhY2tzLnNpemUo
KTsgaSsrKQotICAgICAgICAgICAgY2FsbGJhY2tzLmF0KGkpLT5oYW5kbGVFdmVudCgpOwotICAg
ICAgICBtX3BlbmRpbmdQZXJtaXNzaW9uUmVxdWVzdHMucmVtb3ZlKG9yaWdpbik7CisgICAgUUhh
c2g8U2NyaXB0RXhlY3V0aW9uQ29udGV4dCosICBDYWxsYmFja3NJbmZvID46Oml0ZXJhdG9yIGl0
ZXIgPSBtX3BlbmRpbmdQZXJtaXNzaW9uUmVxdWVzdHMuYmVnaW4oKTsKKyAgICB3aGlsZSAoaXRl
ciAhPSBtX3BlbmRpbmdQZXJtaXNzaW9uUmVxdWVzdHMuZW5kKCkpIHsKKyAgICAgICAgaWYgKGl0
ZXIudmFsdWUoKS5tX2ZyYW1lID09IGZyYW1lKQorICAgICAgICAgICAgYnJlYWs7CiAgICAgfQor
CisgICAgaWYgKGl0ZXIgPT0gbV9wZW5kaW5nUGVybWlzc2lvblJlcXVlc3RzLmVuZCgpKQorICAg
ICAgICByZXR1cm47CisKKyAgICBRTGlzdDxSZWZQdHI8Vm9pZENhbGxiYWNrPiA+JiBjYWxsYmFj
a3MgPSBpdGVyLnZhbHVlKCkubV9jYWxsYmFja3M7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBj
YWxsYmFja3Muc2l6ZSgpOyBpKyspCisgICAgICAgIGNhbGxiYWNrcy5hdChpKS0+aGFuZGxlRXZl
bnQoKTsKKyAgICBtX3BlbmRpbmdQZXJtaXNzaW9uUmVxdWVzdHMucmVtb3ZlKGl0ZXIua2V5KCkp
OwogfQogCiB2b2lkIE5vdGlmaWNhdGlvblByZXNlbnRlckNsaWVudFF0OjpzZW5kRXZlbnQoTm90
aWZpY2F0aW9uKiBub3RpZmljYXRpb24sIGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnROYW1lKQpA
QCAtMzYxLDYgKzM4NCwzNCBAQCB2b2lkIE5vdGlmaWNhdGlvblByZXNlbnRlckNsaWVudFF0Ojpk
dW1wCiAgICAgfQogfQogCitRV2ViUGFnZSogTm90aWZpY2F0aW9uUHJlc2VudGVyQ2xpZW50UXQ6
OnBhZ2UoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCkKK3sKKyAgICBpZiAoIWNvbnRl
eHQgfHwgY29udGV4dC0+aXNXb3JrZXJDb250ZXh0KCkpCisgICAgICAgIHJldHVybiAwOworCisg
ICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gc3RhdGljX2Nhc3Q8RG9jdW1lbnQqPihjb250ZXh0KTsK
KyAgICBpZiAoIWRvY3VtZW50KQorICAgICAgICByZXR1cm4gMDsKKworICAgIFBhZ2UqIHBhZ2Ug
PSBkb2N1bWVudC0+cGFnZSgpOworICAgIGlmICghcGFnZSB8fCAhcGFnZS0+bWFpbkZyYW1lKCkp
CisgICAgICAgIHJldHVybiAwOworCisgICAgcmV0dXJuIFFXZWJGcmFtZVByaXZhdGU6OmtpdChw
YWdlLT5tYWluRnJhbWUoKSktPnBhZ2UoKTsKK30KKworUVdlYkZyYW1lKiBOb3RpZmljYXRpb25Q
cmVzZW50ZXJDbGllbnRRdDo6ZnJhbWUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCkK
K3sKKyAgICBpZiAoIWNvbnRleHQgfHwgY29udGV4dC0+aXNXb3JrZXJDb250ZXh0KCkpCisgICAg
ICAgIHJldHVybiAwOworCisgICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gc3RhdGljX2Nhc3Q8RG9j
dW1lbnQqPihjb250ZXh0KTsKKyAgICBpZiAoIWRvY3VtZW50IHx8ICFkb2N1bWVudC0+ZnJhbWUo
KSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICByZXR1cm4gUVdlYkZyYW1lUHJpdmF0ZTo6a2l0
KGRvY3VtZW50LT5mcmFtZSgpKTsKK30KKwogI2VuZGlmIC8vIEVOQUJMRShOT1RJRklDQVRJT05T
KQogfQogCkluZGV4OiBXZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvTm90aWZpY2F0aW9uUHJlc2Vu
dGVyQ2xpZW50UXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvTm90
aWZpY2F0aW9uUHJlc2VudGVyQ2xpZW50UXQuaAkocmV2aXNpb24gNjI5NzYpCisrKyBXZWJLaXQv
cXQvV2ViQ29yZVN1cHBvcnQvTm90aWZpY2F0aW9uUHJlc2VudGVyQ2xpZW50UXQuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNDIsNiArNDIsOSBAQAogI2luY2x1ZGUgPFFNdWx0aUhhc2g+CiAjaW5jbHVk
ZSA8UVN5c3RlbVRyYXlJY29uPgogCitjbGFzcyBRV2ViRnJhbWU7CitjbGFzcyBRV2ViUGFnZTsK
KwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBEb2N1bWVudDsKQEAgLTkwLDEyICs5Mywx
MCBAQCBwdWJsaWM6CiAKICAgICB2b2lkIGNhbmNlbChOb3RpZmljYXRpb25XcmFwcGVyKik7CiAK
LSAgICB2b2lkIGFsbG93Tm90aWZpY2F0aW9uRm9yT3JpZ2luKGNvbnN0IFFTdHJpbmcmIG9yaWdp
bik7CisgICAgdm9pZCBhbGxvd05vdGlmaWNhdGlvbkZvckZyYW1lKFFXZWJGcmFtZSopOwogCiAg
ICAgc3RhdGljIGJvb2wgZHVtcE5vdGlmaWNhdGlvbjsKIAotICAgIHZvaWQgc2V0UmVjZWl2ZXIo
UU9iamVjdCogcmVjZWl2ZXIpIHsgbV9yZWNlaXZlciA9IHJlY2VpdmVyOyB9Ci0KICAgICB2b2lk
IGFkZENsaWVudCgpIHsgbV9jbGllbnRDb3VudCsrOyB9CiAgICAgdm9pZCByZW1vdmVDbGllbnQo
KTsKICAgICBzdGF0aWMgTm90aWZpY2F0aW9uUHJlc2VudGVyQ2xpZW50UXQqIG5vdGlmaWNhdGlv
blByZXNlbnRlcigpOwpAQCAtMTA5LDExICsxMTAsMTYgQEAgcHJpdmF0ZToKICAgICB2b2lkIGRl
dGFjaE5vdGlmaWNhdGlvbihOb3RpZmljYXRpb24qKTsKICAgICB2b2lkIGR1bXBSZXBsYWNlZElk
VGV4dChOb3RpZmljYXRpb24qKTsKICAgICB2b2lkIGR1bXBTaG93VGV4dChOb3RpZmljYXRpb24q
KTsKKyAgICBRV2ViUGFnZSogcGFnZShTY3JpcHRFeGVjdXRpb25Db250ZXh0Kik7CisgICAgUVdl
YkZyYW1lKiBmcmFtZShTY3JpcHRFeGVjdXRpb25Db250ZXh0Kik7CiAKICAgICBpbnQgbV9jbGll
bnRDb3VudDsKLSAgICBRSGFzaDxRU3RyaW5nLCAgUUxpc3Q8UmVmUHRyPFZvaWRDYWxsYmFjaz4g
PiA+IG1fcGVuZGluZ1Blcm1pc3Npb25SZXF1ZXN0czsKKyAgICBzdHJ1Y3QgQ2FsbGJhY2tzSW5m
byB7CisgICAgICAgIFFXZWJGcmFtZSogbV9mcmFtZTsKKyAgICAgICAgUUxpc3Q8UmVmUHRyPFZv
aWRDYWxsYmFjaz4gPiBtX2NhbGxiYWNrczsKKyAgICB9OworICAgIFFIYXNoPFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQqLCAgQ2FsbGJhY2tzSW5mbyA+IG1fcGVuZGluZ1Blcm1pc3Npb25SZXF1ZXN0
czsKICAgICBOb3RpZmljYXRpb25zUXVldWUgbV9ub3RpZmljYXRpb25zOwotICAgIFFPYmplY3Qq
IG1fcmVjZWl2ZXI7CiAgICAgUXRQbGF0Zm9ybVBsdWdpbiBtX3BsYXRmb3JtUGx1Z2luOwogfTsK
IApJbmRleDogV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdFRvb2xz
L0NoYW5nZUxvZwkocmV2aXNpb24gNjMwNTcpCisrKyBXZWJLaXRUb29scy9DaGFuZ2VMb2cJKHdv
cmtpbmcgY29weSkKQEAgLTEsMyArMSwzNCBAQAorMjAxMC0wNy0xMSAgWWFlbCBBaGFyb24gIDx5
YWVsLmFoYXJvbkBub2tpYS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgW1F0XSBRdFdlYktpdCBuZWVkcyBwdWJsaWMgQVBJIGZvciBOb3RpZmlj
YXRpb25zLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
NDE0MTMKKworICAgICAgICBVcGRhdGUgRHVtcFJlbmRlclRyZWUgYW5kIFF0VGVzdEJyb3dzZXIg
dG8gdXNlIHRoZSBuZXcgQVBJLgorICAgICAgICBBZGQgbmV3IERSVCBBUEkgdG8gZmxhZyB0aGF0
IG5vdGlmaWNhdGlvbnMgcGVybWlzc2lvbiByZXF1ZXN0cyBzaG91bGQgYmUgaWdub3JlZC4KKwor
ICAgICAgICAqIER1bXBSZW5kZXJUcmVlL3F0L0R1bXBSZW5kZXJUcmVlUXQuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6V2ViUGFnZTo6V2ViUGFnZSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJQYWdl
OjpyZXF1ZXN0UGVybWlzc2lvbik6CisgICAgICAgIChXZWJDb3JlOjpXZWJQYWdlOjpjaGVja1Bl
cm1pc3Npb24pOgorICAgICAgICAoV2ViQ29yZTo6V2ViUGFnZTo6Y2FuY2VsUmVxdWVzdHNGb3JQ
ZXJtaXNzaW9uKToKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9xdC9EdW1wUmVuZGVyVHJlZVF0
Lmg6CisgICAgICAgICogRHVtcFJlbmRlclRyZWUvcXQvTGF5b3V0VGVzdENvbnRyb2xsZXJRdC5j
cHA6CisgICAgICAgIChMYXlvdXRUZXN0Q29udHJvbGxlcjo6cmVzZXQpOgorICAgICAgICAoTGF5
b3V0VGVzdENvbnRyb2xsZXI6Omlnbm9yZURlc2t0b3BOb3RpZmljYXRpb25QZXJtaXNzaW9uUmVx
dWVzdHMpOgorICAgICAgICAoTGF5b3V0VGVzdENvbnRyb2xsZXI6OmNoZWNrRGVza3RvcE5vdGlm
aWNhdGlvblBlcm1pc3Npb24pOgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL3F0L0xheW91dFRl
c3RDb250cm9sbGVyUXQuaDoKKyAgICAgICAgKExheW91dFRlc3RDb250cm9sbGVyOjppZ25vcmVS
ZXFlc3RGb3JQZXJtaXNzaW9uKToKKyAgICAgICAgKiBRdFRlc3RCcm93c2VyL21haW4uY3BwOgor
ICAgICAgICAoTGF1bmNoZXJXaW5kb3c6OkxhdW5jaGVyV2luZG93KToKKyAgICAgICAgKiBRdFRl
c3RCcm93c2VyL3dlYnBhZ2UuY3BwOgorICAgICAgICAoV2ViUGFnZTo6V2ViUGFnZSk6CisgICAg
ICAgIChXZWJQYWdlOjpyZXF1ZXN0UGVybWlzc2lvbik6CisgICAgICAgIChXZWJQYWdlOjpjaGVj
a1Blcm1pc3Npb24pOgorICAgICAgICAoV2ViUGFnZTo6Y2FuY2VsUmVxdWVzdHNGb3JQZXJtaXNz
aW9uKToKKyAgICAgICAgKiBRdFRlc3RCcm93c2VyL3dlYnBhZ2UuaDoKKwogMjAxMC0wNy0wOSAg
QnJpYW4gV2VpbnN0ZWluICA8YndlaW5zdGVpbkBhcHBsZS5jb20+CiAKICAgICAgICAgUnViYmVy
LXN0YW1wZWQgYnkgRGFuIEJlcm5zdGVpbi4KSW5kZXg6IFdlYktpdFRvb2xzL0R1bXBSZW5kZXJU
cmVlL3F0L0R1bXBSZW5kZXJUcmVlUXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdFRvb2xzL0R1
bXBSZW5kZXJUcmVlL3F0L0R1bXBSZW5kZXJUcmVlUXQuY3BwCShyZXZpc2lvbiA2Mjk3NikKKysr
IFdlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL3F0L0R1bXBSZW5kZXJUcmVlUXQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMzAsMTYgKzEzMCw2IEBAIHB1YmxpYzoKIH07CiAjZW5kaWYKIAotdm9p
ZCBjaGVja1Blcm1pc3Npb25DYWxsYmFjayhRT2JqZWN0KiByZWNlaXZlciwgY29uc3QgUVVybCYg
dXJsLCBOb3RpZmljYXRpb25QZXJtaXNzaW9uJiBwZXJtaXNzaW9uKQotewotICAgIHFvYmplY3Rf
Y2FzdDxEdW1wUmVuZGVyVHJlZSo+KHJlY2VpdmVyKS0+Y2hlY2tQZXJtaXNzaW9uKHVybCwgcGVy
bWlzc2lvbik7Ci19Ci0KLXZvaWQgcmVxdWVzdFBlcm1pc3Npb25DYWxsYmFjayhRT2JqZWN0KiBy
ZWNlaXZlciwgY29uc3QgUVN0cmluZyYgb3JpZ2luKQotewotICAgIHFvYmplY3RfY2FzdDxEdW1w
UmVuZGVyVHJlZSo+KHJlY2VpdmVyKS0+cmVxdWVzdFBlcm1pc3Npb24ob3JpZ2luKTsKLX0KLQog
V2ViUGFnZTo6V2ViUGFnZShRT2JqZWN0KiBwYXJlbnQsIER1bXBSZW5kZXJUcmVlKiBkcnQpCiAg
ICAgOiBRV2ViUGFnZShwYXJlbnQpCiAgICAgLCBtX3dlYkluc3BlY3RvcigwKQpAQCAtMTY3LDEw
ICsxNTcsOSBAQCBXZWJQYWdlOjpXZWJQYWdlKFFPYmplY3QqIHBhcmVudCwgRHVtcFJlCiAgICAg
c2V0TmV0d29ya0FjY2Vzc01hbmFnZXIobV9kcnQtPm5ldHdvcmtBY2Nlc3NNYW5hZ2VyKCkpOwog
ICAgIHNldFBsdWdpbkZhY3RvcnkobmV3IFRlc3RQbHVnaW4odGhpcykpOwogCi0gICAgRHVtcFJl
bmRlclRyZWVTdXBwb3J0UXQ6OnNldE5vdGlmaWNhdGlvbnNSZWNlaXZlcihtX2RydCk7Ci0gICAg
RHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OnNldENoZWNrUGVybWlzc2lvbkZ1bmN0aW9uKGNoZWNr
UGVybWlzc2lvbkNhbGxiYWNrKTsKLSAgICBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6c2V0UmVx
dWVzdFBlcm1pc3Npb25GdW5jdGlvbihyZXF1ZXN0UGVybWlzc2lvbkNhbGxiYWNrKTsKLQorICAg
IGNvbm5lY3QodGhpcywgU0lHTkFMKHJlcXVlc3RQZXJtaXNzaW9uRnJvbVVzZXIoUVdlYkZyYW1l
KiwgUVdlYlBhZ2U6OlBlcm1pc3Npb25Eb21haW4pKSwgdGhpcywgU0xPVChyZXF1ZXN0UGVybWlz
c2lvbihRV2ViRnJhbWUqLCBRV2ViUGFnZTo6UGVybWlzc2lvbkRvbWFpbikpKTsKKyAgICBjb25u
ZWN0KHRoaXMsIFNJR05BTChjaGVja1Blcm1pc3Npb25Gcm9tVXNlcihRV2ViRnJhbWUqLCBRV2Vi
UGFnZTo6UGVybWlzc2lvbkRvbWFpbiwgUVdlYlBhZ2U6OlBlcm1pc3Npb25Qb2xpY3kmKSksIHRo
aXMsIFNMT1QoY2hlY2tQZXJtaXNzaW9uKFFXZWJGcmFtZSosIFFXZWJQYWdlOjpQZXJtaXNzaW9u
RG9tYWluLCBRV2ViUGFnZTo6UGVybWlzc2lvblBvbGljeSYpKSk7CisgICAgY29ubmVjdCh0aGlz
LCBTSUdOQUwoY2FuY2VsUmVxdWVzdHNGb3JQZXJtaXNzaW9uRnJvbVVzZXIoUVdlYkZyYW1lKiwg
UVdlYlBhZ2U6OlBlcm1pc3Npb25Eb21haW4pKSwgdGhpcywgU0xPVChjYW5jZWxSZXF1ZXN0c0Zv
clBlcm1pc3Npb25Gcm9tVXNlcihRV2ViRnJhbWUqLCBRV2ViUGFnZTo6UGVybWlzc2lvbkRvbWFp
bikpKTsKIH0KIAogV2ViUGFnZTo6fldlYlBhZ2UoKQpAQCAtMjI4LDYgKzIxNywzNiBAQCB2b2lk
IFdlYlBhZ2U6OmphdmFTY3JpcHRBbGVydChRV2ViRnJhbWUqCiAgICAgZnByaW50ZihzdGRvdXQs
ICJBTEVSVDogJXNcbiIsIG1lc3NhZ2UudG9VdGY4KCkuY29uc3REYXRhKCkpOwogfQogCit2b2lk
IFdlYlBhZ2U6OnJlcXVlc3RQZXJtaXNzaW9uKFFXZWJGcmFtZSogZnJhbWUsIFFXZWJQYWdlOjpQ
ZXJtaXNzaW9uRG9tYWluIGRvbWFpbikKK3sKKyAgICBzd2l0Y2ggKGRvbWFpbikgeworICAgIGNh
c2UgUGVybWlzc2lvbkRvbWFpbk5vdGlmaWNhdGlvbnM6CisgICAgICAgIGlmICghbV9kcnQtPmxh
eW91dFRlc3RDb250cm9sbGVyKCktPmlnbm9yZVJlcWVzdEZvclBlcm1pc3Npb24oKSkKKyAgICAg
ICAgICAgIHNldFVzZXJQZXJtaXNzaW9uKGZyYW1lLCBkb21haW4sIFBlcm1pc3Npb25Qb2xpY3lH
cmFudGVkKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgYnJlYWs7Cisg
ICAgfQorfQorCit2b2lkIFdlYlBhZ2U6OmNoZWNrUGVybWlzc2lvbihRV2ViRnJhbWUqIGZyYW1l
LCBRV2ViUGFnZTo6UGVybWlzc2lvbkRvbWFpbiBkb21haW4sIFFXZWJQYWdlOjpQZXJtaXNzaW9u
UG9saWN5JiBwb2xpY3kpCit7CisgICAgc3dpdGNoIChkb21haW4pIHsKKyAgICBjYXNlIFBlcm1p
c3Npb25Eb21haW5Ob3RpZmljYXRpb25zOgorICAgICAgICB7CisgICAgICAgIFFVcmwgdXJsID0g
ZnJhbWUtPnVybCgpOworICAgICAgICBwb2xpY3kgPSBtX2RydC0+bGF5b3V0VGVzdENvbnRyb2xs
ZXIoKS0+Y2hlY2tEZXNrdG9wTm90aWZpY2F0aW9uUGVybWlzc2lvbih1cmwuc2NoZW1lKCkgKyAi
Oi8vIiArIHVybC5ob3N0KCkpID8gUGVybWlzc2lvblBvbGljeUdyYW50ZWQgOiBQZXJtaXNzaW9u
UG9saWN5RGVuaWVkOworICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIGRlZmF1bHQ6Cisg
ICAgICAgIGJyZWFrOworICAgIH0KK30KKwordm9pZCBXZWJQYWdlOjpjYW5jZWxSZXF1ZXN0c0Zv
clBlcm1pc3Npb24oUVdlYkZyYW1lKiwgUVdlYlBhZ2U6OlBlcm1pc3Npb25Eb21haW4pCit7Cit9
CisKIHN0YXRpYyBRU3RyaW5nIHVybFN1aXRhYmxlRm9yVGVzdFJlc3VsdChjb25zdCBRU3RyaW5n
JiB1cmwpCiB7CiAgICAgaWYgKHVybC5pc0VtcHR5KCkgfHwgIXVybC5zdGFydHNXaXRoKFFMYXRp
bjFTdHJpbmcoImZpbGU6Ly8iKSkpCkBAIC05OTEsMTYgKzEwMTAsNiBAQCB2b2lkIER1bXBSZW5k
ZXJUcmVlOjpzd2l0Y2hGb2N1cyhib29sIGZvCiAKIH0KIAotdm9pZCBEdW1wUmVuZGVyVHJlZTo6
Y2hlY2tQZXJtaXNzaW9uKGNvbnN0IFFVcmwmIHVybCwgTm90aWZpY2F0aW9uUGVybWlzc2lvbiYg
cGVybWlzc2lvbikKLXsKLSAgICBwZXJtaXNzaW9uID0gbV9jb250cm9sbGVyLT5jaGVja0Rlc2t0
b3BOb3RpZmljYXRpb25QZXJtaXNzaW9uKHVybC5zY2hlbWUoKSArICI6Ly8iICsgdXJsLmhvc3Qo
KSkgPyBOb3RpZmljYXRpb25BbGxvd2VkIDogTm90aWZpY2F0aW9uRGVuaWVkOwotfQotCi12b2lk
IER1bXBSZW5kZXJUcmVlOjpyZXF1ZXN0UGVybWlzc2lvbihjb25zdCBRU3RyaW5nJiBvcmlnaW4p
Ci17Ci0gICAgRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OmFsbG93Tm90aWZpY2F0aW9uRm9yT3Jp
Z2luKG9yaWdpbik7Ci19Ci0KICNpZiBkZWZpbmVkKFFfV1NfWDExKQogdm9pZCBEdW1wUmVuZGVy
VHJlZTo6aW5pdGlhbGl6ZUZvbnRzKCkKIHsKSW5kZXg6IFdlYktpdFRvb2xzL0R1bXBSZW5kZXJU
cmVlL3F0L0R1bXBSZW5kZXJUcmVlUXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXRUb29scy9EdW1w
UmVuZGVyVHJlZS9xdC9EdW1wUmVuZGVyVHJlZVF0LmgJKHJldmlzaW9uIDYyOTc2KQorKysgV2Vi
S2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvcXQvRHVtcFJlbmRlclRyZWVRdC5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xMTksOCArMTE5LDYgQEAgcHVibGljIFFfU0xPVFM6CiAgICAgdm9pZCBkdW1wRGF0
YWJhc2VRdW90YShRV2ViRnJhbWUqIGZyYW1lLCBjb25zdCBRU3RyaW5nJiBkYk5hbWUpOwogICAg
IHZvaWQgc3RhdHVzQmFyTWVzc2FnZShjb25zdCBRU3RyaW5nJiBtZXNzYWdlKTsKICAgICB2b2lk
IHdpbmRvd0Nsb3NlUmVxdWVzdGVkKCk7Ci0gICAgdm9pZCBjaGVja1Blcm1pc3Npb24oY29uc3Qg
UVVybCYsIE5vdGlmaWNhdGlvblBlcm1pc3Npb24mKTsKLSAgICB2b2lkIHJlcXVlc3RQZXJtaXNz
aW9uKGNvbnN0IFFTdHJpbmcmKTsKIAogUV9TSUdOQUxTOgogICAgIHZvaWQgcXVpdCgpOwpAQCAt
MTkzLDYgKzE5MSw5IEBAIHB1YmxpYzoKIHB1YmxpYyBzbG90czoKICAgICBib29sIHNob3VsZElu
dGVycnVwdEphdmFTY3JpcHQoKSB7IHJldHVybiBmYWxzZTsgfQogICAgIGJvb2wgYWxsb3dHZW9s
b2NhdGlvblJlcXVlc3QoUVdlYkZyYW1lICpmcmFtZSk7CisgICAgdm9pZCByZXF1ZXN0UGVybWlz
c2lvbihRV2ViRnJhbWUqIGZyYW1lLCBRV2ViUGFnZTo6UGVybWlzc2lvbkRvbWFpbiBkb21haW4p
OworICAgIHZvaWQgY2hlY2tQZXJtaXNzaW9uKFFXZWJGcmFtZSogZnJhbWUsIFFXZWJQYWdlOjpQ
ZXJtaXNzaW9uRG9tYWluIGRvbWFpbiwgUVdlYlBhZ2U6OlBlcm1pc3Npb25Qb2xpY3kmIHBvbGlj
eSk7CisgICAgdm9pZCBjYW5jZWxSZXF1ZXN0c0ZvclBlcm1pc3Npb24oUVdlYkZyYW1lKiBmcmFt
ZSwgUVdlYlBhZ2U6OlBlcm1pc3Npb25Eb21haW4gZG9tYWluKTsKIAogcHJvdGVjdGVkOgogICAg
IGJvb2wgYWNjZXB0TmF2aWdhdGlvblJlcXVlc3QoUVdlYkZyYW1lKiBmcmFtZSwgY29uc3QgUU5l
dHdvcmtSZXF1ZXN0JiByZXF1ZXN0LCBOYXZpZ2F0aW9uVHlwZSB0eXBlKTsKSW5kZXg6IFdlYktp
dFRvb2xzL0R1bXBSZW5kZXJUcmVlL3F0L0xheW91dFRlc3RDb250cm9sbGVyUXQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL3F0L0xheW91dFRlc3RDb250cm9s
bGVyUXQuY3BwCShyZXZpc2lvbiA2Mjk3NikKKysrIFdlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVl
L3F0L0xheW91dFRlc3RDb250cm9sbGVyUXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02Nyw2ICs2
Nyw3IEBAIHZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnJlc2V0KCkKICAgICBtX2dsb2JhbEZs
YWcgPSBmYWxzZTsKICAgICBtX3VzZXJTdHlsZVNoZWV0RW5hYmxlZCA9IGZhbHNlOwogICAgIG1f
ZGVza3RvcE5vdGlmaWNhdGlvbkFsbG93ZWRPcmlnaW5zLmNsZWFyKCk7CisgICAgbV9pZ25vcmVE
ZXNrdG9wTm90aWZpY2F0aW9uID0gZmFsc2U7CiAKICAgICBEdW1wUmVuZGVyVHJlZVN1cHBvcnRR
dDo6ZHVtcEVkaXRpbmdDYWxsYmFja3MoZmFsc2UpOwogICAgIER1bXBSZW5kZXJUcmVlU3VwcG9y
dFF0OjpkdW1wRnJhbWVMb2FkZXIoZmFsc2UpOwpAQCAtMTkyLDkgKzE5MywxNCBAQCB2b2lkIExh
eW91dFRlc3RDb250cm9sbGVyOjpncmFudERlc2t0b3BOCiAgICAgbV9kZXNrdG9wTm90aWZpY2F0
aW9uQWxsb3dlZE9yaWdpbnMuYXBwZW5kKG9yaWdpbik7CiB9CiAKK3ZvaWQgTGF5b3V0VGVzdENv
bnRyb2xsZXI6Omlnbm9yZURlc2t0b3BOb3RpZmljYXRpb25QZXJtaXNzaW9uUmVxdWVzdHMoKQor
eworICAgIG1faWdub3JlRGVza3RvcE5vdGlmaWNhdGlvbiA9IHRydWU7Cit9CisKIGJvb2wgTGF5
b3V0VGVzdENvbnRyb2xsZXI6OmNoZWNrRGVza3RvcE5vdGlmaWNhdGlvblBlcm1pc3Npb24oY29u
c3QgUVN0cmluZyYgb3JpZ2luKQogewotICAgIHJldHVybiBtX2Rlc2t0b3BOb3RpZmljYXRpb25B
bGxvd2VkT3JpZ2lucy5jb250YWlucyhvcmlnaW4pOworICAgIHJldHVybiAhbV9pZ25vcmVEZXNr
dG9wTm90aWZpY2F0aW9uICYmIG1fZGVza3RvcE5vdGlmaWNhdGlvbkFsbG93ZWRPcmlnaW5zLmNv
bnRhaW5zKG9yaWdpbik7CiB9CiAKIHZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmRpc3BsYXko
KQpJbmRleDogV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvcXQvTGF5b3V0VGVzdENvbnRyb2xs
ZXJRdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL3F0L0xheW91
dFRlc3RDb250cm9sbGVyUXQuaAkocmV2aXNpb24gNjI5NzYpCisrKyBXZWJLaXRUb29scy9EdW1w
UmVuZGVyVHJlZS9xdC9MYXlvdXRUZXN0Q29udHJvbGxlclF0LmgJKHdvcmtpbmcgY29weSkKQEAg
LTcwLDYgKzcwLDcgQEAgcHVibGljOgogICAgIGJvb2wgY2FuT3BlbldpbmRvd3MoKSBjb25zdCB7
IHJldHVybiBtX2Nhbk9wZW5XaW5kb3dzOyB9CiAgICAgYm9vbCBzaG91bGREdW1wVGl0bGVDaGFu
Z2VzKCkgY29uc3QgeyByZXR1cm4gbV9kdW1wVGl0bGVDaGFuZ2VzOyB9CiAgICAgYm9vbCB3YWl0
Rm9yUG9saWN5KCkgY29uc3QgeyByZXR1cm4gbV93YWl0Rm9yUG9saWN5OyB9CisgICAgYm9vbCBp
Z25vcmVSZXFlc3RGb3JQZXJtaXNzaW9uKCkgY29uc3QgeyByZXR1cm4gbV9pZ25vcmVEZXNrdG9w
Tm90aWZpY2F0aW9uOyB9CiAKICAgICB2b2lkIHJlc2V0KCk7CiAKQEAgLTExOSw2ICsxMjAsNyBA
QCBwdWJsaWMgc2xvdHM6CiAgICAgdm9pZCBzZXRDbG9zZVJlbWFpbmluZ1dpbmRvd3NXaGVuQ29t
cGxldGUoYm9vbCA9IGZhbHNlKSB7fQogICAgIGludCB3aW5kb3dDb3VudCgpOwogICAgIHZvaWQg
Z3JhbnREZXNrdG9wTm90aWZpY2F0aW9uUGVybWlzc2lvbihjb25zdCBRU3RyaW5nJiBvcmlnaW4p
OworICAgIHZvaWQgaWdub3JlRGVza3RvcE5vdGlmaWNhdGlvblBlcm1pc3Npb25SZXF1ZXN0cygp
OwogICAgIGJvb2wgY2hlY2tEZXNrdG9wTm90aWZpY2F0aW9uUGVybWlzc2lvbihjb25zdCBRU3Ry
aW5nJiBvcmlnaW4pOwogICAgIHZvaWQgZGlzcGxheSgpOwogICAgIHZvaWQgY2xlYXJCYWNrRm9y
d2FyZExpc3QoKTsKQEAgLTI1MCw2ICsyNTIsNyBAQCBwcml2YXRlOgogICAgIFdlYkNvcmU6OkR1
bXBSZW5kZXJUcmVlKiBtX2RydDsKICAgICBRV2ViSGlzdG9yeSogbV93ZWJIaXN0b3J5OwogICAg
IFFTdHJpbmdMaXN0IG1fZGVza3RvcE5vdGlmaWNhdGlvbkFsbG93ZWRPcmlnaW5zOworICAgIGJv
b2wgbV9pZ25vcmVEZXNrdG9wTm90aWZpY2F0aW9uOwogfTsKIAogI2VuZGlmIC8vIExheW91dFRl
c3RDb250cm9sbGVyUXRfaApJbmRleDogV2ViS2l0VG9vbHMvUXRUZXN0QnJvd3Nlci9tYWluLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJLaXRUb29scy9RdFRlc3RCcm93c2VyL21haW4uY3BwCShyZXZp
c2lvbiA2Mjk3NikKKysrIFdlYktpdFRvb2xzL1F0VGVzdEJyb3dzZXIvbWFpbi5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTkyLDI5ICs5Miw2IEBAIHN0YXRpYyBib29sIGdVc2VGcmFtZUZsYXR0ZW5p
bmcgPSBmYWxzZTsKIHN0YXRpYyBib29sIGdVc2VRR0xXaWRnZXRWaWV3cG9ydCA9IGZhbHNlOwog
I2VuZGlmCiAKLWNsYXNzIE5vdGlmaWNhdGlvbnNQZXJtaXNzaW9uQ29udHJvbGxlciA6IHB1Ymxp
YyBRT2JqZWN0IHsKLSAgICBRX09CSkVDVAotcHVibGljOgotICAgIE5vdGlmaWNhdGlvbnNQZXJt
aXNzaW9uQ29udHJvbGxlcihRT2JqZWN0KiBwYXJlbnQpIDogUU9iamVjdChwYXJlbnQpIAotICAg
IHsKLSAgICAgICAgRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OnNldE5vdGlmaWNhdGlvbnNSZWNl
aXZlcih0aGlzKTsKLSAgICAgICAgRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OnNldENoZWNrUGVy
bWlzc2lvbkZ1bmN0aW9uKGNoZWNrUGVybWlzc2lvbik7Ci0gICAgICAgIER1bXBSZW5kZXJUcmVl
U3VwcG9ydFF0OjpzZXRSZXF1ZXN0UGVybWlzc2lvbkZ1bmN0aW9uKHJlcXVlc3RQZXJtaXNzaW9u
KTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgdm9pZCBjaGVja1Blcm1pc3Npb24oUU9iamVjdCosIGNv
bnN0IFFVcmwmLCBOb3RpZmljYXRpb25QZXJtaXNzaW9uJiBwZXJtaXNzaW9uKQotICAgIHsKLSAg
ICAgICAgcGVybWlzc2lvbiA9IE5vdGlmaWNhdGlvbkFsbG93ZWQ7Ci0gICAgfQotCi0gICAgc3Rh
dGljIHZvaWQgcmVxdWVzdFBlcm1pc3Npb24oUU9iamVjdCosIGNvbnN0IFFTdHJpbmcmIG9yaWdp
bikKLSAgICB7Ci0gICAgICAgIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjphbGxvd05vdGlmaWNh
dGlvbkZvck9yaWdpbihvcmlnaW4pOwotICAgIH0KLX07Ci0KLU5vdGlmaWNhdGlvbnNQZXJtaXNz
aW9uQ29udHJvbGxlciogbm90aWZpY2F0aW9uc1Blcm1pc3Npb25Db250cm9sbGVyID0gMDsKLQog
Y2xhc3MgTGF1bmNoZXJXaW5kb3cgOiBwdWJsaWMgTWFpbldpbmRvdyB7CiAgICAgUV9PQkpFQ1QK
IApAQCAtMjMzLDggKzIxMCw2IEBAIExhdW5jaGVyV2luZG93OjpMYXVuY2hlcldpbmRvdyhMYXVu
Y2hlclcKICAgICB9CiAKICAgICBjcmVhdGVDaHJvbWUoKTsKLSAgICBpZiAoIW5vdGlmaWNhdGlv
bnNQZXJtaXNzaW9uQ29udHJvbGxlcikKLSAgICAgICAgbm90aWZpY2F0aW9uc1Blcm1pc3Npb25D
b250cm9sbGVyID0gbmV3IE5vdGlmaWNhdGlvbnNQZXJtaXNzaW9uQ29udHJvbGxlcihRQ29yZUFw
cGxpY2F0aW9uOjppbnN0YW5jZSgpKTsKIH0KIAogTGF1bmNoZXJXaW5kb3c6On5MYXVuY2hlcldp
bmRvdygpCkluZGV4OiBXZWJLaXRUb29scy9RdFRlc3RCcm93c2VyL3dlYnBhZ2UuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYktpdFRvb2xzL1F0VGVzdEJyb3dzZXIvd2VicGFnZS5jcHAJKHJldmlzaW9u
IDYyOTc2KQorKysgV2ViS2l0VG9vbHMvUXRUZXN0QnJvd3Nlci93ZWJwYWdlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNDgsNiArNDgsOSBAQCBXZWJQYWdlOjpXZWJQYWdlKFFPYmplY3QqIHBhcmVu
dCkKIAogICAgIGNvbm5lY3QobmV0d29ya0FjY2Vzc01hbmFnZXIoKSwgU0lHTkFMKGF1dGhlbnRp
Y2F0aW9uUmVxdWlyZWQoUU5ldHdvcmtSZXBseSosIFFBdXRoZW50aWNhdG9yKikpLAogICAgICAg
ICAgICAgdGhpcywgU0xPVChhdXRoZW50aWNhdGlvblJlcXVpcmVkKFFOZXR3b3JrUmVwbHkqLCBR
QXV0aGVudGljYXRvciopKSk7CisgICAgY29ubmVjdCh0aGlzLCBTSUdOQUwocmVxdWVzdFBlcm1p
c3Npb25Gcm9tVXNlcihRV2ViRnJhbWUqLCBRV2ViUGFnZTo6UGVybWlzc2lvbkRvbWFpbikpLCB0
aGlzLCBTTE9UKHJlcXVlc3RQZXJtaXNzaW9uKFFXZWJGcmFtZSosIFFXZWJQYWdlOjpQZXJtaXNz
aW9uRG9tYWluKSkpOworICAgIGNvbm5lY3QodGhpcywgU0lHTkFMKGNoZWNrUGVybWlzc2lvbkZy
b21Vc2VyKFFXZWJGcmFtZSosIFFXZWJQYWdlOjpQZXJtaXNzaW9uRG9tYWluLCBRV2ViUGFnZTo6
UGVybWlzc2lvblBvbGljeSYpKSwgdGhpcywgU0xPVChjaGVja1Blcm1pc3Npb24oUVdlYkZyYW1l
KiwgUVdlYlBhZ2U6OlBlcm1pc3Npb25Eb21haW4sIFFXZWJQYWdlOjpQZXJtaXNzaW9uUG9saWN5
JikpKTsKKyAgICBjb25uZWN0KHRoaXMsIFNJR05BTChjYW5jZWxSZXF1ZXN0c0ZvclBlcm1pc3Np
b24oUVdlYkZyYW1lKiwgUVdlYlBhZ2U6OlBlcm1pc3Npb25Eb21haW4pKSwgdGhpcywgU0xPVChj
YW5jZWxSZXF1ZXN0c0ZvclBlcm1pc3Npb24oUVdlYkZyYW1lKiwgUVdlYlBhZ2U6OlBlcm1pc3Np
b25Eb21haW4pKSk7CiB9CiAKIHZvaWQgV2ViUGFnZTo6YXBwbHlQcm94eSgpCkBAIC0xNjIsMyAr
MTY1LDIzIEBAIHZvaWQgV2ViUGFnZTo6YXV0aGVudGljYXRpb25SZXF1aXJlZChRTmUKIAogICAg
IGRlbGV0ZSBkaWFsb2c7CiB9CisKK3ZvaWQgV2ViUGFnZTo6cmVxdWVzdFBlcm1pc3Npb24oUVdl
YkZyYW1lKiBmcmFtZSwgUVdlYlBhZ2U6OlBlcm1pc3Npb25Eb21haW4gZG9tYWluKQoreworICAg
IHNldFVzZXJQZXJtaXNzaW9uKGZyYW1lLCBkb21haW4sIFBlcm1pc3Npb25Qb2xpY3lHcmFudGVk
KTsKK30KKwordm9pZCBXZWJQYWdlOjpjaGVja1Blcm1pc3Npb24oUVdlYkZyYW1lKiBmcmFtZSwg
UVdlYlBhZ2U6OlBlcm1pc3Npb25Eb21haW4gZG9tYWluLCBRV2ViUGFnZTo6UGVybWlzc2lvblBv
bGljeSYgcG9saWN5KQoreworICAgIHN3aXRjaCAoZG9tYWluKSB7CisgICAgY2FzZSBQZXJtaXNz
aW9uRG9tYWluTm90aWZpY2F0aW9uczoKKyAgICAgICAgcG9saWN5ID0gUGVybWlzc2lvblBvbGlj
eUdyYW50ZWQ7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIGJyZWFrOwor
ICAgIH0KK30KKwordm9pZCBXZWJQYWdlOjpjYW5jZWxSZXF1ZXN0c0ZvclBlcm1pc3Npb24oUVdl
YkZyYW1lKiwgUVdlYlBhZ2U6OlBlcm1pc3Npb25Eb21haW4pCit7Cit9CkluZGV4OiBXZWJLaXRU
b29scy9RdFRlc3RCcm93c2VyL3dlYnBhZ2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXRUb29scy9R
dFRlc3RCcm93c2VyL3dlYnBhZ2UuaAkocmV2aXNpb24gNjI5NzYpCisrKyBXZWJLaXRUb29scy9R
dFRlc3RCcm93c2VyL3dlYnBhZ2UuaAkod29ya2luZyBjb3B5KQpAQCAtNTcsNiArNTcsOSBAQCBw
dWJsaWMgc2xvdHM6CiAgICAgdm9pZCBzZXRVc2VyQWdlbnQoY29uc3QgUVN0cmluZyYgdWEpIHsg
bV91c2VyQWdlbnQgPSB1YTsgfQogICAgIGJvb2wgc2hvdWxkSW50ZXJydXB0SmF2YVNjcmlwdCgp
OwogICAgIHZvaWQgYXV0aGVudGljYXRpb25SZXF1aXJlZChRTmV0d29ya1JlcGx5KiwgUUF1dGhl
bnRpY2F0b3IqKTsKKyAgICB2b2lkIHJlcXVlc3RQZXJtaXNzaW9uKFFXZWJGcmFtZSogZnJhbWUs
IFFXZWJQYWdlOjpQZXJtaXNzaW9uRG9tYWluIGRvbWFpbik7CisgICAgdm9pZCBjaGVja1Blcm1p
c3Npb24oUVdlYkZyYW1lKiBmcmFtZSwgUVdlYlBhZ2U6OlBlcm1pc3Npb25Eb21haW4gZG9tYWlu
LCBRV2ViUGFnZTo6UGVybWlzc2lvblBvbGljeSYgcG9saWN5KTsKKyAgICB2b2lkIGNhbmNlbFJl
cXVlc3RzRm9yUGVybWlzc2lvbihRV2ViRnJhbWUqIGZyYW1lLCBRV2ViUGFnZTo6UGVybWlzc2lv
bkRvbWFpbiBkb21haW4pOwogCiBwcml2YXRlOgogICAgIHZvaWQgYXBwbHlQcm94eSgpOwpJbmRl
eDogTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL0NoYW5n
ZUxvZwkocmV2aXNpb24gNjMwNTcpCisrKyBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHdvcmtpbmcg
Y29weSkKQEAgLTEsMyArMSwyMCBAQAorMjAxMC0wNy0xMSAgWWFlbCBBaGFyb24gIDx5YWVsLmFo
YXJvbkBub2tpYS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgW1F0XSBRdFdlYktpdCBuZWVkcyBwdWJsaWMgQVBJIGZvciBOb3RpZmljYXRpb25z
LgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDE0MTMK
KworICAgICAgICBBZGQgYSBEUlQgQVBJIHRvIHNldCBhIGZsYWcgc28gdGhhdCBub3RpZmljYXRp
b24gcmVxdWVzdHMgYXJlIGlnbm9yZWQsCisgICAgICAgIGFuZCBhZGQgYSB0ZXN0IGZvciBjYW5j
ZWxsaW5nIGEgcGVuZGluZyBub3RpZmljYXRpb24gcmVxdWVzdC4KKyAgICAgICAgTmV3IEFQSSBh
bmQgdGVzdCBhcmUgZGlzYWJsZWQgZm9yIENocm9taXVtIHBvcnQuCisKKyAgICAgICAgKiBmYXN0
L25vdGlmaWNhdGlvbnMvbm90aWZpY2F0aW9ucy1jYW5jZWwtcmVxdWVzdC1wZXJtaXNzaW9uLWV4
cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogZmFzdC9ub3RpZmljYXRpb25zL25vdGlmaWNh
dGlvbnMtY2FuY2VsLXJlcXVlc3QtcGVybWlzc2lvbi5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBm
YXN0L25vdGlmaWNhdGlvbnMvcmVzb3VyY2VzOiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L25vdGlm
aWNhdGlvbnMvcmVzb3VyY2VzL25vdGlmaWNhdGlvbnMtY2FuY2VsLXJlcXVlc3QtcGVybWlzc2lv
bi5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9jaHJvbWl1bS90ZXN0X2V4cGVjdGF0
aW9ucy50eHQ6CisKIDIwMTAtMDctMTAgIERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29tPgog
CiAgICAgICAgIFJldmlld2VkIGJ5IEFuZGVycyBDYXJsc3Nvbi4KSW5kZXg6IExheW91dFRlc3Rz
L2Zhc3Qvbm90aWZpY2F0aW9ucy9ub3RpZmljYXRpb25zLWNhbmNlbC1yZXF1ZXN0LXBlcm1pc3Np
b24tZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3Qvbm90aWZpY2F0
aW9ucy9ub3RpZmljYXRpb25zLWNhbmNlbC1yZXF1ZXN0LXBlcm1pc3Npb24tZXhwZWN0ZWQudHh0
CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9ub3RpZmljYXRpb25zL25vdGlmaWNh
dGlvbnMtY2FuY2VsLXJlcXVlc3QtcGVybWlzc2lvbi1leHBlY3RlZC50eHQJKHJldmlzaW9uIDAp
CkBAIC0wLDAgKzEsNSBAQAorREVTS1RPUCBOT1RJRklDQVRJT04gUEVSTUlTU0lPTiBSRVFVRVNU
RUQ6IGZpbGU6Ly8KK0RFU0tUT1AgTk9USUZJQ0FUSU9OIFBFUk1JU1NJT04gUkVRVUVTVCBDQU5D
RUxMRUQ6IGZpbGU6Ly8KK1JlcXVlc3RpbmcgYW5kIGNhbmNlbGxpbmcgbm90aWZpY2F0aW9uIHBl
cm1pc3Npb24uLi4KKworUGFzcyBpZiBub3RpZmljYXRpb24gaXMgY2FuY2VsbGVkCkluZGV4OiBM
YXlvdXRUZXN0cy9mYXN0L25vdGlmaWNhdGlvbnMvbm90aWZpY2F0aW9ucy1jYW5jZWwtcmVxdWVz
dC1wZXJtaXNzaW9uLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9ub3RpZmlj
YXRpb25zL25vdGlmaWNhdGlvbnMtY2FuY2VsLXJlcXVlc3QtcGVybWlzc2lvbi5odG1sCShyZXZp
c2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9ub3RpZmljYXRpb25zL25vdGlmaWNhdGlvbnMt
Y2FuY2VsLXJlcXVlc3QtcGVybWlzc2lvbi5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQ0
IEBACis8aHRtbD4KKzxoZWFkPgorICAgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4K
KworICAgICAgICAvLyBUaW1lb3V0IGlzIHRvIGVuc3VyZSB0aGF0IHRoZSBpZnJhbWUgd2FzIHJl
bW92ZWQuCisgICAgICAgIHNldFRpbWVvdXQoaXNEb25lLDUwMCk7CisKKyAgICAgICAgZnVuY3Rp
b24gbG9nKG1lc3NhZ2UpCisgICAgICAgIHsKKyAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1l
bnRCeUlkKCJyZXN1bHQiKS5pbm5lckhUTUwgKz0gbWVzc2FnZSArICI8YnI+IjsKKyAgICAgICAg
fQorICAgICAgICAKKyAgICAgICAgZnVuY3Rpb24gcnVuVGVzdHMoKQorICAgICAgICB7CisgICAg
ICAgICAgICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKSB7CisgICAgICAgICAgICAg
ICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4dCgpOworICAgICAgICAgICAgICAgIGxh
eW91dFRlc3RDb250cm9sbGVyLndhaXRVbnRpbERvbmUoKTsKKyAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgaWYgKCF3aW5kb3cud2Via2l0Tm90aWZpY2F0aW9ucykgeworICAgICAgICAgICAg
ICAgIGxvZygiRkFJTDogTm8gd2Via2l0Tm90aWZpY2F0aW9ucyBpbnRlcmZhY2UhIik7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRC
eUlkKCJ0ZXN0IikuaW5uZXJIVE1MPSJQYXNzIGlmIG5vdGlmaWNhdGlvbiBpcyBjYW5jZWxsZWQi
OworICAgICAgICB9CisKKyAgICAgICAgZnVuY3Rpb24gaXNEb25lKCkKKyAgICAgICAgeworICAg
ICAgICAgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikgeworICAgICAgICAgICAg
ICAgIGxheW91dFRlc3RDb250cm9sbGVyLm5vdGlmeURvbmUoKTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorCisgICAgPC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keSBvbmxvYWQ9InJ1blRlc3Rz
KCk7Ij4KKyAgICA8cD5SZXF1ZXN0aW5nIGFuZCBjYW5jZWxsaW5nIG5vdGlmaWNhdGlvbiBwZXJt
aXNzaW9uLi4uPC9wPgorICAgIAorPGRpdiBpZD0icmVzdWx0Ij48L2Rpdj4KKzxkaXYgaWQ9InRl
c3QiPgorPGlmcmFtZSBzcmM9InJlc291cmNlcy9ub3RpZmljYXRpb25zLWNhbmNlbC1yZXF1ZXN0
LXBlcm1pc3Npb24uaHRtbCIgd2lkdGg9ODAwIGhlaWdodD04MDA+PC9pZnJhbWU+Cis8L2Rpdj4K
KzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IExheW91dFRlc3RzL2Zhc3Qvbm90aWZpY2F0aW9ucy9y
ZXNvdXJjZXMvbm90aWZpY2F0aW9ucy1jYW5jZWwtcmVxdWVzdC1wZXJtaXNzaW9uLmh0bWwKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9ub3RpZmljYXRpb25zL3Jlc291cmNlcy9ub3Rp
ZmljYXRpb25zLWNhbmNlbC1yZXF1ZXN0LXBlcm1pc3Npb24uaHRtbAkocmV2aXNpb24gMCkKKysr
IExheW91dFRlc3RzL2Zhc3Qvbm90aWZpY2F0aW9ucy9yZXNvdXJjZXMvbm90aWZpY2F0aW9ucy1j
YW5jZWwtcmVxdWVzdC1wZXJtaXNzaW9uLmh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMjgg
QEAKKzxodG1sPgorPGhlYWQ+CisgICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgor
ICAgICAgICBmdW5jdGlvbiBsb2cobWVzc2FnZSkKKyAgICAgICAgeworICAgICAgICAgICAgcGFy
ZW50LmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJyZXN1bHQiKS5pbm5lckhUTUwgKz0gbWVzc2Fn
ZSArICI8YnI+IjsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgZnVuY3Rpb24gcnVuVGVz
dHMoKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9s
bGVyKSB7CisgICAgICAgICAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4dCgp
OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAod2luZG93LmxheW91dFRlc3RDb250
cm9sbGVyKSB7CisgICAgICAgICAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuaWdub3JlRGVz
a3RvcE5vdGlmaWNhdGlvblBlcm1pc3Npb25SZXF1ZXN0cygpOworICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICB3aW5kb3cud2Via2l0Tm90aWZpY2F0aW9ucy5yZXF1ZXN0UGVybWlzc2lvbigK
KyAgICAgICAgICAgICAgICBmdW5jdGlvbigpIHsgbG9nKCJGQUlMOiBQZXJtaXNzaW9uIGNhbGxi
YWNrIGludm9rZWQuIik7IH0KKyAgICAgICAgICAgICk7CisKKyAgICAgICAgfQorICAgIDwvc2Ny
aXB0PgorPC9oZWFkPgorPGJvZHkgb25sb2FkPSJydW5UZXN0cygpOyI+Cis8L2JvZHk+Cis8L2h0
bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9jaHJvbWl1bS90ZXN0X2V4cGVjdGF0aW9u
cy50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvcGxhdGZvcm0vY2hyb21pdW0vdGVzdF9l
eHBlY3RhdGlvbnMudHh0CShyZXZpc2lvbiA2Mjk3NikKKysrIExheW91dFRlc3RzL3BsYXRmb3Jt
L2Nocm9taXVtL3Rlc3RfZXhwZWN0YXRpb25zLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMjgyOCw2
ICsyODI4LDkgQEAgQlVHNDYxNTcgV0lOIFJFTEVBU0UgOiB0cmFuc2Zvcm1zLzJkL3RyYQogLy8g
Q2hyb21pdW0gZG9lcyBub3QgdXNlIHRoZSBpY29uIGxvYWRlciBpbiBXZWJDb3JlIGZvciBsb2Fk
aW5nIG5vdGlmaWNhdGlvbnMuCiBXT05URklYIFNLSVAgOiBodHRwL3Rlc3RzL25vdGlmaWNhdGlv
bnMgPSBGQUlMCiAKKy8vIENocm9taXVtIGRvZXMgbm90IHN1cHBvcnQgY2FuY2VsIGZvciBub3Rp
ZmljYXRpb25zLgorV09OVEZJWCBTS0lQIDogZmFzdC9ub3RpZmljYXRpb25zL25vdGlmaWNhdGlv
bnMtY2FuY2VsLXJlcXVlc3QtcGVybWlzc2lvbi5odG1sID0gRkFJTAorCiBCVUc0NjI3NiBXSU4g
OiBmYXN0L3RleHQvaW50ZXJuYXRpb25hbC9raG1lci1zZWxlY3Rpb24uaHRtbCA9IElNQUdFK1RF
WFQKIAogLy8gSFRNTDUgR2VvbG9jYXRpb24gQVBJIGRvZXMgbm90IHVzZSB3aW5kb3cuY2xpZW50
SW5mb3JtYXRpb24uCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>61296</attachid>
            <date>2010-07-12 17:09:46 -0700</date>
            <delta_ts>2010-07-12 19:11:22 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>41413.patch</filename>
            <type>text/plain</type>
            <size>32185</size>
            <attacher name="Yael">yael</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYktpdC9xdC9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L3F0L0NoYW5n
ZUxvZwkocmV2aXNpb24gNjMxMzQpCisrKyBXZWJLaXQvcXQvQ2hhbmdlTG9nCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDMgKzEsMjcgQEAKKzIwMTAtMDctMTEgIFlhZWwgQWhhcm9uICA8eWFlbC5haGFy
b25Abm9raWEuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIFtRdF0gUXRXZWJLaXQgbmVlZHMgcHVibGljIEFQSSBmb3IgTm90aWZpY2F0aW9ucy4K
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQxNDEzCisK
KyAgICAgICAgUmVtb3ZlIER1bXBSZW5kZXJUcmVlIHByaXZhdGUgQVBJIGFuZCBpbnRyb2R1Y2Ug
bmV3IEFQSS4KKyAgICAgICAgQWxzbyBhZGQgc3VwcG9ydCBmb3IgaW5mb3JtaW5nIHRoZSBVSSB3
aGVuIGEgbm90aWZpY2F0aW9uIHJlcXVlc3QgaXMgY2FuY2VsbGVkLgorIAorICAgICAgICAqIEFw
aS9xd2VicGFnZS5jcHA6CisgICAgICAgIChRV2ViUGFnZTo6c2V0VXNlclBlcm1pc3Npb24pOgor
ICAgICAgICAqIEFwaS9xd2VicGFnZS5oOgorICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0R1bXBS
ZW5kZXJUcmVlU3VwcG9ydFF0LmNwcDoKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9EdW1wUmVu
ZGVyVHJlZVN1cHBvcnRRdC5oOgorICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L05vdGlmaWNhdGlv
blByZXNlbnRlckNsaWVudFF0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok5vdGlmaWNhdGlvblBy
ZXNlbnRlckNsaWVudFF0OjpyZXF1ZXN0UGVybWlzc2lvbik6CisgICAgICAgIChXZWJDb3JlOjpO
b3RpZmljYXRpb25QcmVzZW50ZXJDbGllbnRRdDo6Y2hlY2tQZXJtaXNzaW9uKToKKyAgICAgICAg
KFdlYkNvcmU6Ok5vdGlmaWNhdGlvblByZXNlbnRlckNsaWVudFF0OjpjYW5jZWxSZXF1ZXN0c0Zv
clBlcm1pc3Npb24pOgorICAgICAgICAoV2ViQ29yZTo6Tm90aWZpY2F0aW9uUHJlc2VudGVyQ2xp
ZW50UXQ6OmFsbG93Tm90aWZpY2F0aW9uRm9yRnJhbWUpOgorICAgICAgICAoV2ViQ29yZTo6Tm90
aWZpY2F0aW9uUHJlc2VudGVyQ2xpZW50UXQ6OnBhZ2UpOgorICAgICAgICAoV2ViQ29yZTo6Tm90
aWZpY2F0aW9uUHJlc2VudGVyQ2xpZW50UXQ6OmZyYW1lKToKKyAgICAgICAgKiBXZWJDb3JlU3Vw
cG9ydC9Ob3RpZmljYXRpb25QcmVzZW50ZXJDbGllbnRRdC5oOgorCiAyMDEwLTA3LTA5ICBZYWVs
IEFoYXJvbiAgPHlhZWwuYWhhcm9uQG5va2lhLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBM
YXN6bG8gR29tYm9zLgpJbmRleDogV2ViS2l0L3F0L0FwaS9xd2VicGFnZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViS2l0L3F0L0FwaS9xd2VicGFnZS5jcHAJKHJldmlzaW9uIDYzMTM0KQorKysgV2Vi
S2l0L3F0L0FwaS9xd2VicGFnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIxMDcsNiArMjEwNywy
MCBAQCBib29sIFFXZWJQYWdlOjphbGxvd0dlb2xvY2F0aW9uUmVxdWVzdChRCiAjZW5kaWYKIH0K
IAordm9pZCBRV2ViUGFnZTo6c2V0VXNlclBlcm1pc3Npb24oUVdlYkZyYW1lKiBmcmFtZSwgUGVy
bWlzc2lvbkRvbWFpbiBkb21haW4sIFBlcm1pc3Npb25Qb2xpY3kgcG9saWN5KQoreworICAgIHN3
aXRjaCAoZG9tYWluKSB7CisgICAgY2FzZSBOb3RpZmljYXRpb25zUGVybWlzc2lvbkRvbWFpbjoK
KyNpZiBFTkFCTEUoTk9USUZJQ0FUSU9OUykKKyAgICAgICAgaWYgKHBvbGljeSA9PSBQZXJtaXNz
aW9uR3JhbnRlZCkKKyAgICAgICAgICAgIE5vdGlmaWNhdGlvblByZXNlbnRlckNsaWVudFF0Ojpu
b3RpZmljYXRpb25QcmVzZW50ZXIoKS0+YWxsb3dOb3RpZmljYXRpb25Gb3JGcmFtZShmcmFtZSk7
CisjZW5kaWYKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgYnJlYWs7Cisg
ICAgfQorfQorCiAvKiEKICAgICBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aGVuZXZlciBXZWJL
aXQgd2FudHMgdG8gY3JlYXRlIGEgbmV3IHdpbmRvdyBvZiB0aGUgZ2l2ZW4gXGEgdHlwZSwgZm9y
CiAgICAgZXhhbXBsZSB3aGVuIGEgSmF2YVNjcmlwdCBwcm9ncmFtIHJlcXVlc3RzIHRvIG9wZW4g
YSBkb2N1bWVudCBpbiBhIG5ldyB3aW5kb3cuCkluZGV4OiBXZWJLaXQvcXQvQXBpL3F3ZWJwYWdl
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViS2l0L3F0L0FwaS9xd2VicGFnZS5oCShyZXZpc2lvbiA2MzEz
NCkKKysrIFdlYktpdC9xdC9BcGkvcXdlYnBhZ2UuaAkod29ya2luZyBjb3B5KQpAQCAtMTk1LDYg
KzE5NSwxNiBAQCBwdWJsaWM6CiAgICAgICAgIFdlYk1vZGFsRGlhbG9nCiAgICAgfTsKIAorICAg
IGVudW0gUGVybWlzc2lvblBvbGljeSB7CisgICAgICAgIFBlcm1pc3Npb25HcmFudGVkLAorICAg
ICAgICBQZXJtaXNzaW9uSWdub3JlZCwKKyAgICAgICAgUGVybWlzc2lvbkRlbmllZAorICAgIH07
CisKKyAgICBlbnVtIFBlcm1pc3Npb25Eb21haW4geworICAgICAgICBOb3RpZmljYXRpb25zUGVy
bWlzc2lvbkRvbWFpbgorICAgIH07CisKICAgICBjbGFzcyBWaWV3cG9ydEhpbnRzIHsKICAgICBw
dWJsaWM6CiAgICAgICAgIFZpZXdwb3J0SGludHMoKTsKQEAgLTI5MCw2ICszMDAsOCBAQCBwdWJs
aWM6CiAKICAgICBRTWVudSAqY3JlYXRlU3RhbmRhcmRDb250ZXh0TWVudSgpOwogCisgICAgdm9p
ZCBzZXRVc2VyUGVybWlzc2lvbihRV2ViRnJhbWUqIGZyYW1lLCBQZXJtaXNzaW9uRG9tYWluIGRv
bWFpbiwgUGVybWlzc2lvblBvbGljeSBwb2xpY3kpOworCiAgICAgZW51bSBFeHRlbnNpb24gewog
ICAgICAgICBDaG9vc2VNdWx0aXBsZUZpbGVzRXh0ZW5zaW9uLAogICAgICAgICBFcnJvclBhZ2VF
eHRlbnNpb24KQEAgLTM3MSw2ICszODMsMTAgQEAgUV9TSUdOQUxTOgogCiAgICAgdm9pZCB2aWV3
cG9ydENoYW5nZVJlcXVlc3RlZChjb25zdCBRV2ViUGFnZTo6Vmlld3BvcnRIaW50cyYgaGludHMp
OwogCisgICAgdm9pZCByZXF1ZXN0UGVybWlzc2lvbkZyb21Vc2VyKFFXZWJGcmFtZSogZnJhbWUs
IFFXZWJQYWdlOjpQZXJtaXNzaW9uRG9tYWluIGRvbWFpbik7CisgICAgdm9pZCBjaGVja1Blcm1p
c3Npb25Gcm9tVXNlcihRV2ViRnJhbWUqIGZyYW1lLCBRV2ViUGFnZTo6UGVybWlzc2lvbkRvbWFp
biBkb21haW4sIFFXZWJQYWdlOjpQZXJtaXNzaW9uUG9saWN5JiBwb2xpY3kpOworICAgIHZvaWQg
Y2FuY2VsUmVxdWVzdHNGb3JQZXJtaXNzaW9uKFFXZWJGcmFtZSogZnJhbWUsIFFXZWJQYWdlOjpQ
ZXJtaXNzaW9uRG9tYWluIGRvbWFpbik7CisKIHByb3RlY3RlZDoKICAgICB2aXJ0dWFsIFFXZWJQ
YWdlICpjcmVhdGVXaW5kb3coV2ViV2luZG93VHlwZSB0eXBlKTsKICAgICB2aXJ0dWFsIFFPYmpl
Y3QgKmNyZWF0ZVBsdWdpbihjb25zdCBRU3RyaW5nICZjbGFzc2lkLCBjb25zdCBRVXJsICZ1cmws
IGNvbnN0IFFTdHJpbmdMaXN0ICZwYXJhbU5hbWVzLCBjb25zdCBRU3RyaW5nTGlzdCAmcGFyYW1W
YWx1ZXMpOwpJbmRleDogV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L0R1bXBSZW5kZXJUcmVlU3Vw
cG9ydFF0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvRHVtcFJl
bmRlclRyZWVTdXBwb3J0UXQuY3BwCShyZXZpc2lvbiA2MzEzNCkKKysrIFdlYktpdC9xdC9XZWJD
b3JlU3VwcG9ydC9EdW1wUmVuZGVyVHJlZVN1cHBvcnRRdC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTcwLDggKzcwLDYgQEAKIAogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKLUNoZWNrUGVybWlz
c2lvbkZ1bmN0aW9uVHlwZSogY2hlY2tQZXJtaXNzaW9uRnVuY3Rpb24gPSAwOwotUmVxdWVzdFBl
cm1pc3Npb25GdW5jdGlvblR5cGUqIHJlcXVlc3RQZXJtaXNzaW9uRnVuY3Rpb24gPSAwOwogUU1h
cDxpbnQsIFFXZWJTY3JpcHRXb3JsZCo+IG1fd29ybGRNYXA7CiAKIER1bXBSZW5kZXJUcmVlU3Vw
cG9ydFF0OjpEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdCgpCkBAIC01NzAsMjAgKzU2OCw2IEBAIHZv
aWQgRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OmR1bXBOb3RpZmkKICNlbmRpZgogfQogCi12b2lk
IER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjpzZXROb3RpZmljYXRpb25zUmVjZWl2ZXIoUU9iamVj
dCogcmVjZWl2ZXIpCi17Ci0jaWYgRU5BQkxFKE5PVElGSUNBVElPTlMpCi0gICAgTm90aWZpY2F0
aW9uUHJlc2VudGVyQ2xpZW50UXQ6Om5vdGlmaWNhdGlvblByZXNlbnRlcigpLT5zZXRSZWNlaXZl
cihyZWNlaXZlcik7Ci0jZW5kaWYKLX0KLQotdm9pZCBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6
YWxsb3dOb3RpZmljYXRpb25Gb3JPcmlnaW4oY29uc3QgUVN0cmluZyYgb3JpZ2luKQotewotI2lm
IEVOQUJMRShOT1RJRklDQVRJT05TKQotICAgIE5vdGlmaWNhdGlvblByZXNlbnRlckNsaWVudFF0
Ojpub3RpZmljYXRpb25QcmVzZW50ZXIoKS0+YWxsb3dOb3RpZmljYXRpb25Gb3JPcmlnaW4ob3Jp
Z2luKTsKLSNlbmRpZgotfQotCiB2b2lkIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjpzZXRNb2Nr
R2VvbG9jYXRpb25Qb3NpdGlvbihkb3VibGUgbGF0aXR1ZGUsIGRvdWJsZSBsb25naXR1ZGUsIGRv
dWJsZSBhY2N1cmFjeSkKIHsKICNpZiBFTkFCTEUoR0VPTE9DQVRJT04pCkBAIC02MDAsMTYgKzU4
NCw2IEBAIHZvaWQgRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OnNldE1vY2tHZW8KICNlbmRpZgog
fQogCi12b2lkIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjpzZXRDaGVja1Blcm1pc3Npb25GdW5j
dGlvbihDaGVja1Blcm1pc3Npb25GdW5jdGlvblR5cGUqIGYpCi17Ci0gICAgY2hlY2tQZXJtaXNz
aW9uRnVuY3Rpb24gPSBmOwotfQotCi12b2lkIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjpzZXRS
ZXF1ZXN0UGVybWlzc2lvbkZ1bmN0aW9uKFJlcXVlc3RQZXJtaXNzaW9uRnVuY3Rpb25UeXBlKiBm
KQotewotICAgIHJlcXVlc3RQZXJtaXNzaW9uRnVuY3Rpb24gPSBmOwotfQotCiBib29sIER1bXBS
ZW5kZXJUcmVlU3VwcG9ydFF0Ojppc1RhcmdldEl0ZW0oY29uc3QgUVdlYkhpc3RvcnlJdGVtJiBo
aXN0b3J5SXRlbSkKIHsKICAgICBRV2ViSGlzdG9yeUl0ZW0gaXQgPSBoaXN0b3J5SXRlbTsKSW5k
ZXg6IFdlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9EdW1wUmVuZGVyVHJlZVN1cHBvcnRRdC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9EdW1wUmVuZGVyVHJlZVN1cHBv
cnRRdC5oCShyZXZpc2lvbiA2MzEzNCkKKysrIFdlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9EdW1w
UmVuZGVyVHJlZVN1cHBvcnRRdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMiwxNyArMzIsNiBAQCBj
bGFzcyBRV2ViUGFnZTsKIGNsYXNzIFFXZWJIaXN0b3J5SXRlbTsKIGNsYXNzIFFXZWJTY3JpcHRX
b3JsZDsKIAotZW51bSBOb3RpZmljYXRpb25QZXJtaXNzaW9uIHsKLSAgICBOb3RpZmljYXRpb25B
bGxvd2VkLAotICAgIE5vdGlmaWNhdGlvbk5vdEFsbG93ZWQsCi0gICAgTm90aWZpY2F0aW9uRGVu
aWVkCi19OwotCi10eXBlZGVmIHZvaWQgKENoZWNrUGVybWlzc2lvbkZ1bmN0aW9uVHlwZSkgKFFP
YmplY3QqIHJlY2VpdmVyLCBjb25zdCBRVXJsJiwgTm90aWZpY2F0aW9uUGVybWlzc2lvbiYpOwot
dHlwZWRlZiB2b2lkIChSZXF1ZXN0UGVybWlzc2lvbkZ1bmN0aW9uVHlwZSkgKFFPYmplY3QqIHJl
Y2VpdmVyLCBjb25zdCBRU3RyaW5nJik7Ci0KLWV4dGVybiBDaGVja1Blcm1pc3Npb25GdW5jdGlv
blR5cGUqIGNoZWNrUGVybWlzc2lvbkZ1bmN0aW9uOwotZXh0ZXJuIFJlcXVlc3RQZXJtaXNzaW9u
RnVuY3Rpb25UeXBlKiByZXF1ZXN0UGVybWlzc2lvbkZ1bmN0aW9uOwogZXh0ZXJuIFFNYXA8aW50
LCBRV2ViU2NyaXB0V29ybGQqPiBtX3dvcmxkTWFwOwogCiBjbGFzcyBRV0VCS0lUX0VYUE9SVCBE
dW1wUmVuZGVyVHJlZVN1cHBvcnRRdCB7CkBAIC0xMjEsMTMgKzExMCw2IEBAIHB1YmxpYzoKIAog
ICAgIHN0YXRpYyB2b2lkIGR1bXBOb3RpZmljYXRpb24oYm9vbCBiKTsKIAotICAgIC8vIFRoZXNl
IGZ1bmN0aW9ucyBzaG91bGQgZXZlbnR1YWxseSB0dXJuIGludG8gcHVibGljIEFQSQotICAgIC8v
IGFuZCB0aGUgInJlY2VpdmVyIiBjb25jZXB0IHdvdWxkIGdvIGF3YXkKLSAgICBzdGF0aWMgdm9p
ZCBzZXROb3RpZmljYXRpb25zUmVjZWl2ZXIoUU9iamVjdCogcmVjZWl2ZXIpOwotICAgIHN0YXRp
YyB2b2lkIGFsbG93Tm90aWZpY2F0aW9uRm9yT3JpZ2luKGNvbnN0IFFTdHJpbmcmIG9yaWdpbik7
Ci0gICAgc3RhdGljIHZvaWQgc2V0Q2hlY2tQZXJtaXNzaW9uRnVuY3Rpb24oQ2hlY2tQZXJtaXNz
aW9uRnVuY3Rpb25UeXBlKik7Ci0gICAgc3RhdGljIHZvaWQgc2V0UmVxdWVzdFBlcm1pc3Npb25G
dW5jdGlvbihSZXF1ZXN0UGVybWlzc2lvbkZ1bmN0aW9uVHlwZSopOwotCiAgICAgc3RhdGljIFFN
YXA8UVN0cmluZywgUVdlYkhpc3RvcnlJdGVtPiBnZXRDaGlsZEhpc3RvcnlJdGVtcyhjb25zdCBR
V2ViSGlzdG9yeUl0ZW0mIGhpc3RvcnlJdGVtKTsKICAgICBzdGF0aWMgYm9vbCBpc1RhcmdldEl0
ZW0oY29uc3QgUVdlYkhpc3RvcnlJdGVtJiBoaXN0b3J5SXRlbSk7CiAgICAgc3RhdGljIFFTdHJp
bmcgaGlzdG9yeUl0ZW1UYXJnZXQoY29uc3QgUVdlYkhpc3RvcnlJdGVtJiBoaXN0b3J5SXRlbSk7
CkluZGV4OiBXZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvTm90aWZpY2F0aW9uUHJlc2VudGVyQ2xp
ZW50UXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9Ob3RpZmlj
YXRpb25QcmVzZW50ZXJDbGllbnRRdC5jcHAJKHJldmlzaW9uIDYzMTM0KQorKysgV2ViS2l0L3F0
L1dlYkNvcmVTdXBwb3J0L05vdGlmaWNhdGlvblByZXNlbnRlckNsaWVudFF0LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMzYsMTEgKzM2LDE0IEBACiAjaW5jbHVkZSAiRHVtcFJlbmRlclRyZWVTdXBw
b3J0UXQuaCIKICNpbmNsdWRlICJFdmVudE5hbWVzLmgiCiAjaW5jbHVkZSAiS1VSTC5oIgorI2lu
Y2x1ZGUgIlBhZ2UuaCIKICNpbmNsdWRlICJRdFBsYXRmb3JtUGx1Z2luLmgiCiAjaW5jbHVkZSAi
U2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oIgogI2luY2x1ZGUgIlNlY3VyaXR5T3JpZ2luLmgiCiAK
KyNpbmNsdWRlICJxd2ViZnJhbWVfcC5oIgogI2luY2x1ZGUgInF3ZWJraXRnbG9iYWwuaCIKKyNp
bmNsdWRlICJxd2VicGFnZS5oIgogI2luY2x1ZGUgPFF0R3VpPgogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CkBAIC0yNTksNTIgKzI2Miw3MiBAQCB2b2lkIE5vdGlmaWNhdGlvblByZXNlbnRlckNsaWVu
dFF0OjpyZXF1CiAgICAgICAgIHByaW50ZigiREVTS1RPUCBOT1RJRklDQVRJT04gUEVSTUlTU0lP
TiBSRVFVRVNURUQ6ICVzXG4iLCBRU3RyaW5nKGNvbnRleHQtPnNlY3VyaXR5T3JpZ2luKCktPnRv
U3RyaW5nKCkpLnRvVXRmOCgpLmNvbnN0RGF0YSgpKTsKIAogICAgIFFTdHJpbmcgb3JpZ2luU3Ry
aW5nID0gY29udGV4dC0+c2VjdXJpdHlPcmlnaW4oKS0+dG9TdHJpbmcoKTsKLSAgICBRSGFzaDxR
U3RyaW5nLCBRTGlzdDxSZWZQdHI8Vm9pZENhbGxiYWNrPiA+ID46Oml0ZXJhdG9yIGl0ZXIgPSBt
X3BlbmRpbmdQZXJtaXNzaW9uUmVxdWVzdHMuZmluZChvcmlnaW5TdHJpbmcpOworICAgIFFIYXNo
PFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBDYWxsYmFja3NJbmZvID46Oml0ZXJhdG9yIGl0ZXIg
PSBtX3BlbmRpbmdQZXJtaXNzaW9uUmVxdWVzdHMuZmluZChjb250ZXh0KTsKKwogICAgIGlmIChp
dGVyICE9IG1fcGVuZGluZ1Blcm1pc3Npb25SZXF1ZXN0cy5lbmQoKSkKLSAgICAgICAgaXRlci52
YWx1ZSgpLmFwcGVuZChjYWxsYmFjayk7CisgICAgICAgIGl0ZXIudmFsdWUoKS5tX2NhbGxiYWNr
cy5hcHBlbmQoY2FsbGJhY2spOwogICAgIGVsc2UgewotICAgICAgICBRTGlzdDxSZWZQdHI8Vm9p
ZENhbGxiYWNrPiA+IGNhbGxiYWNrczsKICAgICAgICAgUmVmUHRyPFZvaWRDYWxsYmFjaz4gY2Ig
PSBjYWxsYmFjazsKLSAgICAgICAgY2FsbGJhY2tzLmFwcGVuZChjYik7Ci0gICAgICAgIG1fcGVu
ZGluZ1Blcm1pc3Npb25SZXF1ZXN0cy5pbnNlcnQob3JpZ2luU3RyaW5nLCBjYWxsYmFja3MpOwot
ICAgICAgICBpZiAocmVxdWVzdFBlcm1pc3Npb25GdW5jdGlvbikKLSAgICAgICAgICAgIHJlcXVl
c3RQZXJtaXNzaW9uRnVuY3Rpb24obV9yZWNlaXZlciwgb3JpZ2luU3RyaW5nKTsKKyAgICAgICAg
Q2FsbGJhY2tzSW5mbyBpbmZvOworICAgICAgICBpbmZvLm1fZnJhbWUgPSBmcmFtZShjb250ZXh0
KTsKKyAgICAgICAgaW5mby5tX2NhbGxiYWNrcy5hcHBlbmQoY2IpOworICAgICAgICBtX3BlbmRp
bmdQZXJtaXNzaW9uUmVxdWVzdHMuaW5zZXJ0KGNvbnRleHQsIGluZm8pOworICAgICAgICBpZiAo
cGFnZShjb250ZXh0KSAmJiBmcmFtZShjb250ZXh0KSkKKyAgICAgICAgICAgIGVtaXQgcGFnZShj
b250ZXh0KS0+cmVxdWVzdFBlcm1pc3Npb25Gcm9tVXNlcihmcmFtZShjb250ZXh0KSwgUVdlYlBh
Z2U6Ok5vdGlmaWNhdGlvbnNQZXJtaXNzaW9uRG9tYWluKTsKICAgICB9CiB9CiAKIE5vdGlmaWNh
dGlvblByZXNlbnRlcjo6UGVybWlzc2lvbiBOb3RpZmljYXRpb25QcmVzZW50ZXJDbGllbnRRdDo6
Y2hlY2tQZXJtaXNzaW9uKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQpCiB7Ci0gICAg
Tm90aWZpY2F0aW9uUGVybWlzc2lvbiBwZXJtaXNzaW9uID0gTm90aWZpY2F0aW9uTm90QWxsb3dl
ZDsKLSAgICBRU3RyaW5nIG9yaWdpbiA9IGNvbnRleHQtPnVybCgpLnN0cmluZygpOwotICAgIGlm
IChjaGVja1Blcm1pc3Npb25GdW5jdGlvbikKLSAgICAgICAgY2hlY2tQZXJtaXNzaW9uRnVuY3Rp
b24obV9yZWNlaXZlciwgb3JpZ2luLCBwZXJtaXNzaW9uKTsKLSAgICBzd2l0Y2ggKHBlcm1pc3Np
b24pIHsKLSAgICBjYXNlIE5vdGlmaWNhdGlvbkFsbG93ZWQ6CisgICAgUVdlYlBhZ2U6OlBlcm1p
c3Npb25Qb2xpY3kgcG9saWN5ID0gUVdlYlBhZ2U6OlBlcm1pc3Npb25JZ25vcmVkOworICAgIGlm
IChwYWdlKGNvbnRleHQpICYmIGZyYW1lKGNvbnRleHQpKQorICAgICAgICBlbWl0IHBhZ2UoY29u
dGV4dCktPmNoZWNrUGVybWlzc2lvbkZyb21Vc2VyKGZyYW1lKGNvbnRleHQpLCBRV2ViUGFnZTo6
Tm90aWZpY2F0aW9uc1Blcm1pc3Npb25Eb21haW4sIHBvbGljeSk7CisKKyAgICBzd2l0Y2ggKHBv
bGljeSkgeworICAgIGNhc2UgUVdlYlBhZ2U6OlBlcm1pc3Npb25HcmFudGVkOgogICAgICAgICBy
ZXR1cm4gTm90aWZpY2F0aW9uUHJlc2VudGVyOjpQZXJtaXNzaW9uQWxsb3dlZDsKLSAgICBjYXNl
IE5vdGlmaWNhdGlvbk5vdEFsbG93ZWQ6CisgICAgY2FzZSBRV2ViUGFnZTo6UGVybWlzc2lvbkln
bm9yZWQ6CiAgICAgICAgIHJldHVybiBOb3RpZmljYXRpb25QcmVzZW50ZXI6OlBlcm1pc3Npb25O
b3RBbGxvd2VkOwotICAgIGNhc2UgTm90aWZpY2F0aW9uRGVuaWVkOgorICAgIGNhc2UgUVdlYlBh
Z2U6OlBlcm1pc3Npb25EZW5pZWQ6CiAgICAgICAgIHJldHVybiBOb3RpZmljYXRpb25QcmVzZW50
ZXI6OlBlcm1pc3Npb25EZW5pZWQ7CiAgICAgfQogICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwog
ICAgIHJldHVybiBOb3RpZmljYXRpb25QcmVzZW50ZXI6OlBlcm1pc3Npb25Ob3RBbGxvd2VkOwog
fQogCi12b2lkIE5vdGlmaWNhdGlvblByZXNlbnRlckNsaWVudFF0OjpjYW5jZWxSZXF1ZXN0c0Zv
clBlcm1pc3Npb24oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCopCit2b2lkIE5vdGlmaWNhdGlvblBy
ZXNlbnRlckNsaWVudFF0OjpjYW5jZWxSZXF1ZXN0c0ZvclBlcm1pc3Npb24oU2NyaXB0RXhlY3V0
aW9uQ29udGV4dCogY29udGV4dCkKIHsKLSAgICAvLyBGSVhNRTogVGhpcyB3aWxsIGJlIGltcGxl
bWVudGVkIGZvciBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDE0MTMK
LSAgICAvLyB0byBhdm9pZCBhZGRpbmcgYW5kIHJlbW92aW5nIG5ldyBwcml2YXRlIEFQSQorICAg
IFFIYXNoPFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCAgQ2FsbGJhY2tzSW5mbyA+OjppdGVyYXRv
ciBpdGVyID0gbV9wZW5kaW5nUGVybWlzc2lvblJlcXVlc3RzLmZpbmQoY29udGV4dCk7CisgICAg
aWYgKGl0ZXIgPT0gbV9wZW5kaW5nUGVybWlzc2lvblJlcXVlc3RzLmVuZCgpKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBpZiAoZHVtcE5vdGlmaWNhdGlvbikKKyAgICAgICAgcHJpbnRmKCJERVNL
VE9QIE5PVElGSUNBVElPTiBQRVJNSVNTSU9OIFJFUVVFU1QgQ0FOQ0VMTEVEOiAlc1xuIiwgUVN0
cmluZyhjb250ZXh0LT5zZWN1cml0eU9yaWdpbigpLT50b1N0cmluZygpKS50b1V0ZjgoKS5jb25z
dERhdGEoKSk7CisKKyAgICAvLyBUaGUgZnJhbWUgY291bGQgYWxyZWFkeSBiZSBkaXNjb25uZWN0
ZWQsIHNvIGRvIG5vdCB1c2UgZnJhbWUoY29udGV4dCkgb3IgcGFnZShjb250ZXh0KQorICAgIFFX
ZWJGcmFtZSogZnJhbWVUb1JlbW92ZSA9IGl0ZXIudmFsdWUoKS5tX2ZyYW1lOworICAgIFFXZWJQ
YWdlKiBwYWdlVG9SZW1vdmUgPSBmcmFtZVRvUmVtb3ZlLT5wYWdlKCk7CisgICAgbV9wZW5kaW5n
UGVybWlzc2lvblJlcXVlc3RzLmVyYXNlKGl0ZXIpOworCisgICAgaWYgKHBhZ2VUb1JlbW92ZSAm
JiBmcmFtZVRvUmVtb3ZlKQorICAgICAgICBlbWl0IHBhZ2VUb1JlbW92ZS0+Y2FuY2VsUmVxdWVz
dHNGb3JQZXJtaXNzaW9uKGZyYW1lVG9SZW1vdmUsIFFXZWJQYWdlOjpOb3RpZmljYXRpb25zUGVy
bWlzc2lvbkRvbWFpbik7CiB9CiAKLXZvaWQgTm90aWZpY2F0aW9uUHJlc2VudGVyQ2xpZW50UXQ6
OmFsbG93Tm90aWZpY2F0aW9uRm9yT3JpZ2luKGNvbnN0IFFTdHJpbmcmIG9yaWdpbikKK3ZvaWQg
Tm90aWZpY2F0aW9uUHJlc2VudGVyQ2xpZW50UXQ6OmFsbG93Tm90aWZpY2F0aW9uRm9yRnJhbWUo
UVdlYkZyYW1lKiBmcmFtZSkKIHsKLSAgICBRSGFzaDxRU3RyaW5nLCBRTGlzdDxSZWZQdHI8Vm9p
ZENhbGxiYWNrPiA+ID46Oml0ZXJhdG9yIGl0ZXIgPSBtX3BlbmRpbmdQZXJtaXNzaW9uUmVxdWVz
dHMuZmluZChvcmlnaW4pOwotICAgIGlmIChpdGVyICE9IG1fcGVuZGluZ1Blcm1pc3Npb25SZXF1
ZXN0cy5lbmQoKSkgewotICAgICAgICBRTGlzdDxSZWZQdHI8Vm9pZENhbGxiYWNrPiA+JiBjYWxs
YmFja3MgPSBpdGVyLnZhbHVlKCk7Ci0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY2FsbGJh
Y2tzLnNpemUoKTsgaSsrKQotICAgICAgICAgICAgY2FsbGJhY2tzLmF0KGkpLT5oYW5kbGVFdmVu
dCgpOwotICAgICAgICBtX3BlbmRpbmdQZXJtaXNzaW9uUmVxdWVzdHMucmVtb3ZlKG9yaWdpbik7
CisgICAgUUhhc2g8U2NyaXB0RXhlY3V0aW9uQ29udGV4dCosICBDYWxsYmFja3NJbmZvID46Oml0
ZXJhdG9yIGl0ZXIgPSBtX3BlbmRpbmdQZXJtaXNzaW9uUmVxdWVzdHMuYmVnaW4oKTsKKyAgICB3
aGlsZSAoaXRlciAhPSBtX3BlbmRpbmdQZXJtaXNzaW9uUmVxdWVzdHMuZW5kKCkpIHsKKyAgICAg
ICAgaWYgKGl0ZXIudmFsdWUoKS5tX2ZyYW1lID09IGZyYW1lKQorICAgICAgICAgICAgYnJlYWs7
CiAgICAgfQorCisgICAgaWYgKGl0ZXIgPT0gbV9wZW5kaW5nUGVybWlzc2lvblJlcXVlc3RzLmVu
ZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBRTGlzdDxSZWZQdHI8Vm9pZENhbGxiYWNrPiA+
JiBjYWxsYmFja3MgPSBpdGVyLnZhbHVlKCkubV9jYWxsYmFja3M7CisgICAgZm9yIChpbnQgaSA9
IDA7IGkgPCBjYWxsYmFja3Muc2l6ZSgpOyBpKyspCisgICAgICAgIGNhbGxiYWNrcy5hdChpKS0+
aGFuZGxlRXZlbnQoKTsKKyAgICBtX3BlbmRpbmdQZXJtaXNzaW9uUmVxdWVzdHMucmVtb3ZlKGl0
ZXIua2V5KCkpOwogfQogCiB2b2lkIE5vdGlmaWNhdGlvblByZXNlbnRlckNsaWVudFF0OjpzZW5k
RXZlbnQoTm90aWZpY2F0aW9uKiBub3RpZmljYXRpb24sIGNvbnN0IEF0b21pY1N0cmluZyYgZXZl
bnROYW1lKQpAQCAtMzYxLDYgKzM4NCwzNCBAQCB2b2lkIE5vdGlmaWNhdGlvblByZXNlbnRlckNs
aWVudFF0OjpkdW1wCiAgICAgfQogfQogCitRV2ViUGFnZSogTm90aWZpY2F0aW9uUHJlc2VudGVy
Q2xpZW50UXQ6OnBhZ2UoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCkKK3sKKyAgICBp
ZiAoIWNvbnRleHQgfHwgY29udGV4dC0+aXNXb3JrZXJDb250ZXh0KCkpCisgICAgICAgIHJldHVy
biAwOworCisgICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gc3RhdGljX2Nhc3Q8RG9jdW1lbnQqPihj
b250ZXh0KTsKKyAgICBpZiAoIWRvY3VtZW50KQorICAgICAgICByZXR1cm4gMDsKKworICAgIFBh
Z2UqIHBhZ2UgPSBkb2N1bWVudC0+cGFnZSgpOworICAgIGlmICghcGFnZSB8fCAhcGFnZS0+bWFp
bkZyYW1lKCkpCisgICAgICAgIHJldHVybiAwOworCisgICAgcmV0dXJuIFFXZWJGcmFtZVByaXZh
dGU6OmtpdChwYWdlLT5tYWluRnJhbWUoKSktPnBhZ2UoKTsKK30KKworUVdlYkZyYW1lKiBOb3Rp
ZmljYXRpb25QcmVzZW50ZXJDbGllbnRRdDo6ZnJhbWUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCog
Y29udGV4dCkKK3sKKyAgICBpZiAoIWNvbnRleHQgfHwgY29udGV4dC0+aXNXb3JrZXJDb250ZXh0
KCkpCisgICAgICAgIHJldHVybiAwOworCisgICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gc3RhdGlj
X2Nhc3Q8RG9jdW1lbnQqPihjb250ZXh0KTsKKyAgICBpZiAoIWRvY3VtZW50IHx8ICFkb2N1bWVu
dC0+ZnJhbWUoKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICByZXR1cm4gUVdlYkZyYW1lUHJp
dmF0ZTo6a2l0KGRvY3VtZW50LT5mcmFtZSgpKTsKK30KKwogI2VuZGlmIC8vIEVOQUJMRShOT1RJ
RklDQVRJT05TKQogfQogCkluZGV4OiBXZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvTm90aWZpY2F0
aW9uUHJlc2VudGVyQ2xpZW50UXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvcXQvV2ViQ29yZVN1
cHBvcnQvTm90aWZpY2F0aW9uUHJlc2VudGVyQ2xpZW50UXQuaAkocmV2aXNpb24gNjMxMzQpCisr
KyBXZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvTm90aWZpY2F0aW9uUHJlc2VudGVyQ2xpZW50UXQu
aAkod29ya2luZyBjb3B5KQpAQCAtNDIsNiArNDIsOSBAQAogI2luY2x1ZGUgPFFNdWx0aUhhc2g+
CiAjaW5jbHVkZSA8UVN5c3RlbVRyYXlJY29uPgogCitjbGFzcyBRV2ViRnJhbWU7CitjbGFzcyBR
V2ViUGFnZTsKKwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBEb2N1bWVudDsKQEAgLTkw
LDEyICs5MywxMCBAQCBwdWJsaWM6CiAKICAgICB2b2lkIGNhbmNlbChOb3RpZmljYXRpb25XcmFw
cGVyKik7CiAKLSAgICB2b2lkIGFsbG93Tm90aWZpY2F0aW9uRm9yT3JpZ2luKGNvbnN0IFFTdHJp
bmcmIG9yaWdpbik7CisgICAgdm9pZCBhbGxvd05vdGlmaWNhdGlvbkZvckZyYW1lKFFXZWJGcmFt
ZSopOwogCiAgICAgc3RhdGljIGJvb2wgZHVtcE5vdGlmaWNhdGlvbjsKIAotICAgIHZvaWQgc2V0
UmVjZWl2ZXIoUU9iamVjdCogcmVjZWl2ZXIpIHsgbV9yZWNlaXZlciA9IHJlY2VpdmVyOyB9Ci0K
ICAgICB2b2lkIGFkZENsaWVudCgpIHsgbV9jbGllbnRDb3VudCsrOyB9CiAgICAgdm9pZCByZW1v
dmVDbGllbnQoKTsKICAgICBzdGF0aWMgTm90aWZpY2F0aW9uUHJlc2VudGVyQ2xpZW50UXQqIG5v
dGlmaWNhdGlvblByZXNlbnRlcigpOwpAQCAtMTA5LDExICsxMTAsMTYgQEAgcHJpdmF0ZToKICAg
ICB2b2lkIGRldGFjaE5vdGlmaWNhdGlvbihOb3RpZmljYXRpb24qKTsKICAgICB2b2lkIGR1bXBS
ZXBsYWNlZElkVGV4dChOb3RpZmljYXRpb24qKTsKICAgICB2b2lkIGR1bXBTaG93VGV4dChOb3Rp
ZmljYXRpb24qKTsKKyAgICBRV2ViUGFnZSogcGFnZShTY3JpcHRFeGVjdXRpb25Db250ZXh0Kik7
CisgICAgUVdlYkZyYW1lKiBmcmFtZShTY3JpcHRFeGVjdXRpb25Db250ZXh0Kik7CiAKICAgICBp
bnQgbV9jbGllbnRDb3VudDsKLSAgICBRSGFzaDxRU3RyaW5nLCAgUUxpc3Q8UmVmUHRyPFZvaWRD
YWxsYmFjaz4gPiA+IG1fcGVuZGluZ1Blcm1pc3Npb25SZXF1ZXN0czsKKyAgICBzdHJ1Y3QgQ2Fs
bGJhY2tzSW5mbyB7CisgICAgICAgIFFXZWJGcmFtZSogbV9mcmFtZTsKKyAgICAgICAgUUxpc3Q8
UmVmUHRyPFZvaWRDYWxsYmFjaz4gPiBtX2NhbGxiYWNrczsKKyAgICB9OworICAgIFFIYXNoPFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQqLCAgQ2FsbGJhY2tzSW5mbyA+IG1fcGVuZGluZ1Blcm1pc3Np
b25SZXF1ZXN0czsKICAgICBOb3RpZmljYXRpb25zUXVldWUgbV9ub3RpZmljYXRpb25zOwotICAg
IFFPYmplY3QqIG1fcmVjZWl2ZXI7CiAgICAgUXRQbGF0Zm9ybVBsdWdpbiBtX3BsYXRmb3JtUGx1
Z2luOwogfTsKIApJbmRleDogV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YktpdFRvb2xzL0NoYW5nZUxvZwkocmV2aXNpb24gNjMxMzQpCisrKyBXZWJLaXRUb29scy9DaGFu
Z2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwzNCBAQAorMjAxMC0wNy0xMSAgWWFlbCBB
aGFyb24gIDx5YWVsLmFoYXJvbkBub2tpYS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgW1F0XSBRdFdlYktpdCBuZWVkcyBwdWJsaWMgQVBJIGZv
ciBOb3RpZmljYXRpb25zLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9NDE0MTMKKworICAgICAgICBVcGRhdGUgRHVtcFJlbmRlclRyZWUgYW5kIFF0VGVz
dEJyb3dzZXIgdG8gdXNlIHRoZSBuZXcgQVBJLgorICAgICAgICBBZGQgbmV3IERSVCBBUEkgdG8g
ZmxhZyB0aGF0IG5vdGlmaWNhdGlvbnMgcGVybWlzc2lvbiByZXF1ZXN0cyBzaG91bGQgYmUgaWdu
b3JlZC4KKworICAgICAgICAqIER1bXBSZW5kZXJUcmVlL3F0L0R1bXBSZW5kZXJUcmVlUXQuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6V2ViUGFnZTo6V2ViUGFnZSk6CisgICAgICAgIChXZWJDb3Jl
OjpXZWJQYWdlOjpyZXF1ZXN0UGVybWlzc2lvbik6CisgICAgICAgIChXZWJDb3JlOjpXZWJQYWdl
OjpjaGVja1Blcm1pc3Npb24pOgorICAgICAgICAoV2ViQ29yZTo6V2ViUGFnZTo6Y2FuY2VsUmVx
dWVzdHNGb3JQZXJtaXNzaW9uKToKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9xdC9EdW1wUmVu
ZGVyVHJlZVF0Lmg6CisgICAgICAgICogRHVtcFJlbmRlclRyZWUvcXQvTGF5b3V0VGVzdENvbnRy
b2xsZXJRdC5jcHA6CisgICAgICAgIChMYXlvdXRUZXN0Q29udHJvbGxlcjo6cmVzZXQpOgorICAg
ICAgICAoTGF5b3V0VGVzdENvbnRyb2xsZXI6Omlnbm9yZURlc2t0b3BOb3RpZmljYXRpb25QZXJt
aXNzaW9uUmVxdWVzdHMpOgorICAgICAgICAoTGF5b3V0VGVzdENvbnRyb2xsZXI6OmNoZWNrRGVz
a3RvcE5vdGlmaWNhdGlvblBlcm1pc3Npb24pOgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL3F0
L0xheW91dFRlc3RDb250cm9sbGVyUXQuaDoKKyAgICAgICAgKExheW91dFRlc3RDb250cm9sbGVy
OjppZ25vcmVSZXFlc3RGb3JQZXJtaXNzaW9uKToKKyAgICAgICAgKiBRdFRlc3RCcm93c2VyL21h
aW4uY3BwOgorICAgICAgICAoTGF1bmNoZXJXaW5kb3c6OkxhdW5jaGVyV2luZG93KToKKyAgICAg
ICAgKiBRdFRlc3RCcm93c2VyL3dlYnBhZ2UuY3BwOgorICAgICAgICAoV2ViUGFnZTo6V2ViUGFn
ZSk6CisgICAgICAgIChXZWJQYWdlOjpyZXF1ZXN0UGVybWlzc2lvbik6CisgICAgICAgIChXZWJQ
YWdlOjpjaGVja1Blcm1pc3Npb24pOgorICAgICAgICAoV2ViUGFnZTo6Y2FuY2VsUmVxdWVzdHNG
b3JQZXJtaXNzaW9uKToKKyAgICAgICAgKiBRdFRlc3RCcm93c2VyL3dlYnBhZ2UuaDoKKwogMjAx
MC0wNy0xMiAgTWFyaW8gU2FuY2hleiBQcmFkYSAgPG1zYW5jaGV6QGlnYWxpYS5jb20+CiAKICAg
ICAgICAgUmV2aWV3ZWQgYnkgWGFuIExvcGV6LgpJbmRleDogV2ViS2l0VG9vbHMvRHVtcFJlbmRl
clRyZWUvcXQvRHVtcFJlbmRlclRyZWVRdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0VG9vbHMv
RHVtcFJlbmRlclRyZWUvcXQvRHVtcFJlbmRlclRyZWVRdC5jcHAJKHJldmlzaW9uIDYzMTM0KQor
KysgV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvcXQvRHVtcFJlbmRlclRyZWVRdC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEzMCwxNiArMTMwLDYgQEAgcHVibGljOgogfTsKICNlbmRpZgogCi12
b2lkIGNoZWNrUGVybWlzc2lvbkNhbGxiYWNrKFFPYmplY3QqIHJlY2VpdmVyLCBjb25zdCBRVXJs
JiB1cmwsIE5vdGlmaWNhdGlvblBlcm1pc3Npb24mIHBlcm1pc3Npb24pCi17Ci0gICAgcW9iamVj
dF9jYXN0PER1bXBSZW5kZXJUcmVlKj4ocmVjZWl2ZXIpLT5jaGVja1Blcm1pc3Npb24odXJsLCBw
ZXJtaXNzaW9uKTsKLX0KLQotdm9pZCByZXF1ZXN0UGVybWlzc2lvbkNhbGxiYWNrKFFPYmplY3Qq
IHJlY2VpdmVyLCBjb25zdCBRU3RyaW5nJiBvcmlnaW4pCi17Ci0gICAgcW9iamVjdF9jYXN0PER1
bXBSZW5kZXJUcmVlKj4ocmVjZWl2ZXIpLT5yZXF1ZXN0UGVybWlzc2lvbihvcmlnaW4pOwotfQot
CiBXZWJQYWdlOjpXZWJQYWdlKFFPYmplY3QqIHBhcmVudCwgRHVtcFJlbmRlclRyZWUqIGRydCkK
ICAgICA6IFFXZWJQYWdlKHBhcmVudCkKICAgICAsIG1fd2ViSW5zcGVjdG9yKDApCkBAIC0xNjcs
MTAgKzE1Nyw5IEBAIFdlYlBhZ2U6OldlYlBhZ2UoUU9iamVjdCogcGFyZW50LCBEdW1wUmUKICAg
ICBzZXROZXR3b3JrQWNjZXNzTWFuYWdlcihtX2RydC0+bmV0d29ya0FjY2Vzc01hbmFnZXIoKSk7
CiAgICAgc2V0UGx1Z2luRmFjdG9yeShuZXcgVGVzdFBsdWdpbih0aGlzKSk7CiAKLSAgICBEdW1w
UmVuZGVyVHJlZVN1cHBvcnRRdDo6c2V0Tm90aWZpY2F0aW9uc1JlY2VpdmVyKG1fZHJ0KTsKLSAg
ICBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6c2V0Q2hlY2tQZXJtaXNzaW9uRnVuY3Rpb24oY2hl
Y2tQZXJtaXNzaW9uQ2FsbGJhY2spOwotICAgIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjpzZXRS
ZXF1ZXN0UGVybWlzc2lvbkZ1bmN0aW9uKHJlcXVlc3RQZXJtaXNzaW9uQ2FsbGJhY2spOwotCisg
ICAgY29ubmVjdCh0aGlzLCBTSUdOQUwocmVxdWVzdFBlcm1pc3Npb25Gcm9tVXNlcihRV2ViRnJh
bWUqLCBRV2ViUGFnZTo6UGVybWlzc2lvbkRvbWFpbikpLCB0aGlzLCBTTE9UKHJlcXVlc3RQZXJt
aXNzaW9uKFFXZWJGcmFtZSosIFFXZWJQYWdlOjpQZXJtaXNzaW9uRG9tYWluKSkpOworICAgIGNv
bm5lY3QodGhpcywgU0lHTkFMKGNoZWNrUGVybWlzc2lvbkZyb21Vc2VyKFFXZWJGcmFtZSosIFFX
ZWJQYWdlOjpQZXJtaXNzaW9uRG9tYWluLCBRV2ViUGFnZTo6UGVybWlzc2lvblBvbGljeSYpKSwg
dGhpcywgU0xPVChjaGVja1Blcm1pc3Npb24oUVdlYkZyYW1lKiwgUVdlYlBhZ2U6OlBlcm1pc3Np
b25Eb21haW4sIFFXZWJQYWdlOjpQZXJtaXNzaW9uUG9saWN5JikpKTsKKyAgICBjb25uZWN0KHRo
aXMsIFNJR05BTChjYW5jZWxSZXF1ZXN0c0ZvclBlcm1pc3Npb25Gcm9tVXNlcihRV2ViRnJhbWUq
LCBRV2ViUGFnZTo6UGVybWlzc2lvbkRvbWFpbikpLCB0aGlzLCBTTE9UKGNhbmNlbFJlcXVlc3Rz
Rm9yUGVybWlzc2lvbkZyb21Vc2VyKFFXZWJGcmFtZSosIFFXZWJQYWdlOjpQZXJtaXNzaW9uRG9t
YWluKSkpOwogfQogCiBXZWJQYWdlOjp+V2ViUGFnZSgpCkBAIC0yMjgsNiArMjE3LDM2IEBAIHZv
aWQgV2ViUGFnZTo6amF2YVNjcmlwdEFsZXJ0KFFXZWJGcmFtZSoKICAgICBmcHJpbnRmKHN0ZG91
dCwgIkFMRVJUOiAlc1xuIiwgbWVzc2FnZS50b1V0ZjgoKS5jb25zdERhdGEoKSk7CiB9CiAKK3Zv
aWQgV2ViUGFnZTo6cmVxdWVzdFBlcm1pc3Npb24oUVdlYkZyYW1lKiBmcmFtZSwgUVdlYlBhZ2U6
OlBlcm1pc3Npb25Eb21haW4gZG9tYWluKQoreworICAgIHN3aXRjaCAoZG9tYWluKSB7CisgICAg
Y2FzZSBOb3RpZmljYXRpb25zUGVybWlzc2lvbkRvbWFpbjoKKyAgICAgICAgaWYgKCFtX2RydC0+
bGF5b3V0VGVzdENvbnRyb2xsZXIoKS0+aWdub3JlUmVxZXN0Rm9yUGVybWlzc2lvbigpKQorICAg
ICAgICAgICAgc2V0VXNlclBlcm1pc3Npb24oZnJhbWUsIGRvbWFpbiwgUGVybWlzc2lvbkdyYW50
ZWQpOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBicmVhazsKKyAgICB9
Cit9CisKK3ZvaWQgV2ViUGFnZTo6Y2hlY2tQZXJtaXNzaW9uKFFXZWJGcmFtZSogZnJhbWUsIFFX
ZWJQYWdlOjpQZXJtaXNzaW9uRG9tYWluIGRvbWFpbiwgUVdlYlBhZ2U6OlBlcm1pc3Npb25Qb2xp
Y3kmIHBvbGljeSkKK3sKKyAgICBzd2l0Y2ggKGRvbWFpbikgeworICAgIGNhc2UgTm90aWZpY2F0
aW9uc1Blcm1pc3Npb25Eb21haW46CisgICAgICAgIHsKKyAgICAgICAgUVVybCB1cmwgPSBmcmFt
ZS0+dXJsKCk7CisgICAgICAgIHBvbGljeSA9IG1fZHJ0LT5sYXlvdXRUZXN0Q29udHJvbGxlcigp
LT5jaGVja0Rlc2t0b3BOb3RpZmljYXRpb25QZXJtaXNzaW9uKHVybC5zY2hlbWUoKSArICI6Ly8i
ICsgdXJsLmhvc3QoKSkgPyBQZXJtaXNzaW9uR3JhbnRlZCA6IFBlcm1pc3Npb25EZW5pZWQ7Cisg
ICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgZGVmYXVsdDoKKyAgICAgICAgYnJlYWs7Cisg
ICAgfQorfQorCit2b2lkIFdlYlBhZ2U6OmNhbmNlbFJlcXVlc3RzRm9yUGVybWlzc2lvbihRV2Vi
RnJhbWUqLCBRV2ViUGFnZTo6UGVybWlzc2lvbkRvbWFpbikKK3sKK30KKwogc3RhdGljIFFTdHJp
bmcgdXJsU3VpdGFibGVGb3JUZXN0UmVzdWx0KGNvbnN0IFFTdHJpbmcmIHVybCkKIHsKICAgICBp
ZiAodXJsLmlzRW1wdHkoKSB8fCAhdXJsLnN0YXJ0c1dpdGgoUUxhdGluMVN0cmluZygiZmlsZTov
LyIpKSkKQEAgLTk5MSwxNiArMTAxMCw2IEBAIHZvaWQgRHVtcFJlbmRlclRyZWU6OnN3aXRjaEZv
Y3VzKGJvb2wgZm8KIAogfQogCi12b2lkIER1bXBSZW5kZXJUcmVlOjpjaGVja1Blcm1pc3Npb24o
Y29uc3QgUVVybCYgdXJsLCBOb3RpZmljYXRpb25QZXJtaXNzaW9uJiBwZXJtaXNzaW9uKQotewot
ICAgIHBlcm1pc3Npb24gPSBtX2NvbnRyb2xsZXItPmNoZWNrRGVza3RvcE5vdGlmaWNhdGlvblBl
cm1pc3Npb24odXJsLnNjaGVtZSgpICsgIjovLyIgKyB1cmwuaG9zdCgpKSA/IE5vdGlmaWNhdGlv
bkFsbG93ZWQgOiBOb3RpZmljYXRpb25EZW5pZWQ7Ci19Ci0KLXZvaWQgRHVtcFJlbmRlclRyZWU6
OnJlcXVlc3RQZXJtaXNzaW9uKGNvbnN0IFFTdHJpbmcmIG9yaWdpbikKLXsKLSAgICBEdW1wUmVu
ZGVyVHJlZVN1cHBvcnRRdDo6YWxsb3dOb3RpZmljYXRpb25Gb3JPcmlnaW4ob3JpZ2luKTsKLX0K
LQogI2lmIGRlZmluZWQoUV9XU19YMTEpCiB2b2lkIER1bXBSZW5kZXJUcmVlOjppbml0aWFsaXpl
Rm9udHMoKQogewpJbmRleDogV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvcXQvRHVtcFJlbmRl
clRyZWVRdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL3F0L0R1
bXBSZW5kZXJUcmVlUXQuaAkocmV2aXNpb24gNjMxMzQpCisrKyBXZWJLaXRUb29scy9EdW1wUmVu
ZGVyVHJlZS9xdC9EdW1wUmVuZGVyVHJlZVF0LmgJKHdvcmtpbmcgY29weSkKQEAgLTExOSw4ICsx
MTksNiBAQCBwdWJsaWMgUV9TTE9UUzoKICAgICB2b2lkIGR1bXBEYXRhYmFzZVF1b3RhKFFXZWJG
cmFtZSogZnJhbWUsIGNvbnN0IFFTdHJpbmcmIGRiTmFtZSk7CiAgICAgdm9pZCBzdGF0dXNCYXJN
ZXNzYWdlKGNvbnN0IFFTdHJpbmcmIG1lc3NhZ2UpOwogICAgIHZvaWQgd2luZG93Q2xvc2VSZXF1
ZXN0ZWQoKTsKLSAgICB2b2lkIGNoZWNrUGVybWlzc2lvbihjb25zdCBRVXJsJiwgTm90aWZpY2F0
aW9uUGVybWlzc2lvbiYpOwotICAgIHZvaWQgcmVxdWVzdFBlcm1pc3Npb24oY29uc3QgUVN0cmlu
ZyYpOwogCiBRX1NJR05BTFM6CiAgICAgdm9pZCBxdWl0KCk7CkBAIC0xOTMsNiArMTkxLDkgQEAg
cHVibGljOgogcHVibGljIHNsb3RzOgogICAgIGJvb2wgc2hvdWxkSW50ZXJydXB0SmF2YVNjcmlw
dCgpIHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgYm9vbCBhbGxvd0dlb2xvY2F0aW9uUmVxdWVzdChR
V2ViRnJhbWUgKmZyYW1lKTsKKyAgICB2b2lkIHJlcXVlc3RQZXJtaXNzaW9uKFFXZWJGcmFtZSog
ZnJhbWUsIFFXZWJQYWdlOjpQZXJtaXNzaW9uRG9tYWluIGRvbWFpbik7CisgICAgdm9pZCBjaGVj
a1Blcm1pc3Npb24oUVdlYkZyYW1lKiBmcmFtZSwgUVdlYlBhZ2U6OlBlcm1pc3Npb25Eb21haW4g
ZG9tYWluLCBRV2ViUGFnZTo6UGVybWlzc2lvblBvbGljeSYgcG9saWN5KTsKKyAgICB2b2lkIGNh
bmNlbFJlcXVlc3RzRm9yUGVybWlzc2lvbihRV2ViRnJhbWUqIGZyYW1lLCBRV2ViUGFnZTo6UGVy
bWlzc2lvbkRvbWFpbiBkb21haW4pOwogCiBwcm90ZWN0ZWQ6CiAgICAgYm9vbCBhY2NlcHROYXZp
Z2F0aW9uUmVxdWVzdChRV2ViRnJhbWUqIGZyYW1lLCBjb25zdCBRTmV0d29ya1JlcXVlc3QmIHJl
cXVlc3QsIE5hdmlnYXRpb25UeXBlIHR5cGUpOwpJbmRleDogV2ViS2l0VG9vbHMvRHVtcFJlbmRl
clRyZWUvcXQvTGF5b3V0VGVzdENvbnRyb2xsZXJRdC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0
VG9vbHMvRHVtcFJlbmRlclRyZWUvcXQvTGF5b3V0VGVzdENvbnRyb2xsZXJRdC5jcHAJKHJldmlz
aW9uIDYzMTM0KQorKysgV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvcXQvTGF5b3V0VGVzdENv
bnRyb2xsZXJRdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY3LDYgKzY3LDcgQEAgdm9pZCBMYXlv
dXRUZXN0Q29udHJvbGxlcjo6cmVzZXQoKQogICAgIG1fZ2xvYmFsRmxhZyA9IGZhbHNlOwogICAg
IG1fdXNlclN0eWxlU2hlZXRFbmFibGVkID0gZmFsc2U7CiAgICAgbV9kZXNrdG9wTm90aWZpY2F0
aW9uQWxsb3dlZE9yaWdpbnMuY2xlYXIoKTsKKyAgICBtX2lnbm9yZURlc2t0b3BOb3RpZmljYXRp
b24gPSBmYWxzZTsKIAogICAgIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjpkdW1wRWRpdGluZ0Nh
bGxiYWNrcyhmYWxzZSk7CiAgICAgRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OmR1bXBGcmFtZUxv
YWRlcihmYWxzZSk7CkBAIC0xOTIsOSArMTkzLDE0IEBAIHZvaWQgTGF5b3V0VGVzdENvbnRyb2xs
ZXI6OmdyYW50RGVza3RvcE4KICAgICBtX2Rlc2t0b3BOb3RpZmljYXRpb25BbGxvd2VkT3JpZ2lu
cy5hcHBlbmQob3JpZ2luKTsKIH0KIAordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6aWdub3Jl
RGVza3RvcE5vdGlmaWNhdGlvblBlcm1pc3Npb25SZXF1ZXN0cygpCit7CisgICAgbV9pZ25vcmVE
ZXNrdG9wTm90aWZpY2F0aW9uID0gdHJ1ZTsKK30KKwogYm9vbCBMYXlvdXRUZXN0Q29udHJvbGxl
cjo6Y2hlY2tEZXNrdG9wTm90aWZpY2F0aW9uUGVybWlzc2lvbihjb25zdCBRU3RyaW5nJiBvcmln
aW4pCiB7Ci0gICAgcmV0dXJuIG1fZGVza3RvcE5vdGlmaWNhdGlvbkFsbG93ZWRPcmlnaW5zLmNv
bnRhaW5zKG9yaWdpbik7CisgICAgcmV0dXJuICFtX2lnbm9yZURlc2t0b3BOb3RpZmljYXRpb24g
JiYgbV9kZXNrdG9wTm90aWZpY2F0aW9uQWxsb3dlZE9yaWdpbnMuY29udGFpbnMob3JpZ2luKTsK
IH0KIAogdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6ZGlzcGxheSgpCkluZGV4OiBXZWJLaXRU
b29scy9EdW1wUmVuZGVyVHJlZS9xdC9MYXlvdXRUZXN0Q29udHJvbGxlclF0LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvcXQvTGF5b3V0VGVzdENvbnRyb2xsZXJR
dC5oCShyZXZpc2lvbiA2MzEzNCkKKysrIFdlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL3F0L0xh
eW91dFRlc3RDb250cm9sbGVyUXQuaAkod29ya2luZyBjb3B5KQpAQCAtNzAsNiArNzAsNyBAQCBw
dWJsaWM6CiAgICAgYm9vbCBjYW5PcGVuV2luZG93cygpIGNvbnN0IHsgcmV0dXJuIG1fY2FuT3Bl
bldpbmRvd3M7IH0KICAgICBib29sIHNob3VsZER1bXBUaXRsZUNoYW5nZXMoKSBjb25zdCB7IHJl
dHVybiBtX2R1bXBUaXRsZUNoYW5nZXM7IH0KICAgICBib29sIHdhaXRGb3JQb2xpY3koKSBjb25z
dCB7IHJldHVybiBtX3dhaXRGb3JQb2xpY3k7IH0KKyAgICBib29sIGlnbm9yZVJlcWVzdEZvclBl
cm1pc3Npb24oKSBjb25zdCB7IHJldHVybiBtX2lnbm9yZURlc2t0b3BOb3RpZmljYXRpb247IH0K
IAogICAgIHZvaWQgcmVzZXQoKTsKIApAQCAtMTE5LDYgKzEyMCw3IEBAIHB1YmxpYyBzbG90czoK
ICAgICB2b2lkIHNldENsb3NlUmVtYWluaW5nV2luZG93c1doZW5Db21wbGV0ZShib29sID0gZmFs
c2UpIHt9CiAgICAgaW50IHdpbmRvd0NvdW50KCk7CiAgICAgdm9pZCBncmFudERlc2t0b3BOb3Rp
ZmljYXRpb25QZXJtaXNzaW9uKGNvbnN0IFFTdHJpbmcmIG9yaWdpbik7CisgICAgdm9pZCBpZ25v
cmVEZXNrdG9wTm90aWZpY2F0aW9uUGVybWlzc2lvblJlcXVlc3RzKCk7CiAgICAgYm9vbCBjaGVj
a0Rlc2t0b3BOb3RpZmljYXRpb25QZXJtaXNzaW9uKGNvbnN0IFFTdHJpbmcmIG9yaWdpbik7CiAg
ICAgdm9pZCBkaXNwbGF5KCk7CiAgICAgdm9pZCBjbGVhckJhY2tGb3J3YXJkTGlzdCgpOwpAQCAt
MjUwLDYgKzI1Miw3IEBAIHByaXZhdGU6CiAgICAgV2ViQ29yZTo6RHVtcFJlbmRlclRyZWUqIG1f
ZHJ0OwogICAgIFFXZWJIaXN0b3J5KiBtX3dlYkhpc3Rvcnk7CiAgICAgUVN0cmluZ0xpc3QgbV9k
ZXNrdG9wTm90aWZpY2F0aW9uQWxsb3dlZE9yaWdpbnM7CisgICAgYm9vbCBtX2lnbm9yZURlc2t0
b3BOb3RpZmljYXRpb247CiB9OwogCiAjZW5kaWYgLy8gTGF5b3V0VGVzdENvbnRyb2xsZXJRdF9o
CkluZGV4OiBXZWJLaXRUb29scy9RdFRlc3RCcm93c2VyL21haW4uY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYktpdFRvb2xzL1F0VGVzdEJyb3dzZXIvbWFpbi5jcHAJKHJldmlzaW9uIDYzMTM0KQorKysg
V2ViS2l0VG9vbHMvUXRUZXN0QnJvd3Nlci9tYWluLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTIs
MjkgKzkyLDYgQEAgc3RhdGljIGJvb2wgZ1VzZUZyYW1lRmxhdHRlbmluZyA9IGZhbHNlOwogc3Rh
dGljIGJvb2wgZ1VzZVFHTFdpZGdldFZpZXdwb3J0ID0gZmFsc2U7CiAjZW5kaWYKIAotY2xhc3Mg
Tm90aWZpY2F0aW9uc1Blcm1pc3Npb25Db250cm9sbGVyIDogcHVibGljIFFPYmplY3QgewotICAg
IFFfT0JKRUNUCi1wdWJsaWM6Ci0gICAgTm90aWZpY2F0aW9uc1Blcm1pc3Npb25Db250cm9sbGVy
KFFPYmplY3QqIHBhcmVudCkgOiBRT2JqZWN0KHBhcmVudCkgCi0gICAgewotICAgICAgICBEdW1w
UmVuZGVyVHJlZVN1cHBvcnRRdDo6c2V0Tm90aWZpY2F0aW9uc1JlY2VpdmVyKHRoaXMpOwotICAg
ICAgICBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6c2V0Q2hlY2tQZXJtaXNzaW9uRnVuY3Rpb24o
Y2hlY2tQZXJtaXNzaW9uKTsKLSAgICAgICAgRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OnNldFJl
cXVlc3RQZXJtaXNzaW9uRnVuY3Rpb24ocmVxdWVzdFBlcm1pc3Npb24pOwotICAgIH0KLQotICAg
IHN0YXRpYyB2b2lkIGNoZWNrUGVybWlzc2lvbihRT2JqZWN0KiwgY29uc3QgUVVybCYsIE5vdGlm
aWNhdGlvblBlcm1pc3Npb24mIHBlcm1pc3Npb24pCi0gICAgewotICAgICAgICBwZXJtaXNzaW9u
ID0gTm90aWZpY2F0aW9uQWxsb3dlZDsKLSAgICB9Ci0KLSAgICBzdGF0aWMgdm9pZCByZXF1ZXN0
UGVybWlzc2lvbihRT2JqZWN0KiwgY29uc3QgUVN0cmluZyYgb3JpZ2luKQotICAgIHsKLSAgICAg
ICAgRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OmFsbG93Tm90aWZpY2F0aW9uRm9yT3JpZ2luKG9y
aWdpbik7Ci0gICAgfQotfTsKLQotTm90aWZpY2F0aW9uc1Blcm1pc3Npb25Db250cm9sbGVyKiBu
b3RpZmljYXRpb25zUGVybWlzc2lvbkNvbnRyb2xsZXIgPSAwOwotCiBjbGFzcyBMYXVuY2hlcldp
bmRvdyA6IHB1YmxpYyBNYWluV2luZG93IHsKICAgICBRX09CSkVDVAogCkBAIC0yMzMsOCArMjEw
LDYgQEAgTGF1bmNoZXJXaW5kb3c6OkxhdW5jaGVyV2luZG93KExhdW5jaGVyVwogICAgIH0KIAog
ICAgIGNyZWF0ZUNocm9tZSgpOwotICAgIGlmICghbm90aWZpY2F0aW9uc1Blcm1pc3Npb25Db250
cm9sbGVyKQotICAgICAgICBub3RpZmljYXRpb25zUGVybWlzc2lvbkNvbnRyb2xsZXIgPSBuZXcg
Tm90aWZpY2F0aW9uc1Blcm1pc3Npb25Db250cm9sbGVyKFFDb3JlQXBwbGljYXRpb246Omluc3Rh
bmNlKCkpOwogfQogCiBMYXVuY2hlcldpbmRvdzo6fkxhdW5jaGVyV2luZG93KCkKSW5kZXg6IFdl
YktpdFRvb2xzL1F0VGVzdEJyb3dzZXIvd2VicGFnZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0
VG9vbHMvUXRUZXN0QnJvd3Nlci93ZWJwYWdlLmNwcAkocmV2aXNpb24gNjMxMzQpCisrKyBXZWJL
aXRUb29scy9RdFRlc3RCcm93c2VyL3dlYnBhZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OCw2
ICs0OCw5IEBAIFdlYlBhZ2U6OldlYlBhZ2UoUU9iamVjdCogcGFyZW50KQogCiAgICAgY29ubmVj
dChuZXR3b3JrQWNjZXNzTWFuYWdlcigpLCBTSUdOQUwoYXV0aGVudGljYXRpb25SZXF1aXJlZChR
TmV0d29ya1JlcGx5KiwgUUF1dGhlbnRpY2F0b3IqKSksCiAgICAgICAgICAgICB0aGlzLCBTTE9U
KGF1dGhlbnRpY2F0aW9uUmVxdWlyZWQoUU5ldHdvcmtSZXBseSosIFFBdXRoZW50aWNhdG9yKikp
KTsKKyAgICBjb25uZWN0KHRoaXMsIFNJR05BTChyZXF1ZXN0UGVybWlzc2lvbkZyb21Vc2VyKFFX
ZWJGcmFtZSosIFFXZWJQYWdlOjpQZXJtaXNzaW9uRG9tYWluKSksIHRoaXMsIFNMT1QocmVxdWVz
dFBlcm1pc3Npb24oUVdlYkZyYW1lKiwgUVdlYlBhZ2U6OlBlcm1pc3Npb25Eb21haW4pKSk7Cisg
ICAgY29ubmVjdCh0aGlzLCBTSUdOQUwoY2hlY2tQZXJtaXNzaW9uRnJvbVVzZXIoUVdlYkZyYW1l
KiwgUVdlYlBhZ2U6OlBlcm1pc3Npb25Eb21haW4sIFFXZWJQYWdlOjpQZXJtaXNzaW9uUG9saWN5
JikpLCB0aGlzLCBTTE9UKGNoZWNrUGVybWlzc2lvbihRV2ViRnJhbWUqLCBRV2ViUGFnZTo6UGVy
bWlzc2lvbkRvbWFpbiwgUVdlYlBhZ2U6OlBlcm1pc3Npb25Qb2xpY3kmKSkpOworICAgIGNvbm5l
Y3QodGhpcywgU0lHTkFMKGNhbmNlbFJlcXVlc3RzRm9yUGVybWlzc2lvbihRV2ViRnJhbWUqLCBR
V2ViUGFnZTo6UGVybWlzc2lvbkRvbWFpbikpLCB0aGlzLCBTTE9UKGNhbmNlbFJlcXVlc3RzRm9y
UGVybWlzc2lvbihRV2ViRnJhbWUqLCBRV2ViUGFnZTo6UGVybWlzc2lvbkRvbWFpbikpKTsKIH0K
IAogdm9pZCBXZWJQYWdlOjphcHBseVByb3h5KCkKQEAgLTE2MiwzICsxNjUsMjMgQEAgdm9pZCBX
ZWJQYWdlOjphdXRoZW50aWNhdGlvblJlcXVpcmVkKFFOZQogCiAgICAgZGVsZXRlIGRpYWxvZzsK
IH0KKwordm9pZCBXZWJQYWdlOjpyZXF1ZXN0UGVybWlzc2lvbihRV2ViRnJhbWUqIGZyYW1lLCBR
V2ViUGFnZTo6UGVybWlzc2lvbkRvbWFpbiBkb21haW4pCit7CisgICAgc2V0VXNlclBlcm1pc3Np
b24oZnJhbWUsIGRvbWFpbiwgUGVybWlzc2lvbkdyYW50ZWQpOworfQorCit2b2lkIFdlYlBhZ2U6
OmNoZWNrUGVybWlzc2lvbihRV2ViRnJhbWUqIGZyYW1lLCBRV2ViUGFnZTo6UGVybWlzc2lvbkRv
bWFpbiBkb21haW4sIFFXZWJQYWdlOjpQZXJtaXNzaW9uUG9saWN5JiBwb2xpY3kpCit7CisgICAg
c3dpdGNoIChkb21haW4pIHsKKyAgICBjYXNlIE5vdGlmaWNhdGlvbnNQZXJtaXNzaW9uRG9tYWlu
OgorICAgICAgICBwb2xpY3kgPSBQZXJtaXNzaW9uR3JhbnRlZDsKKyAgICAgICAgYnJlYWs7Cisg
ICAgZGVmYXVsdDoKKyAgICAgICAgYnJlYWs7CisgICAgfQorfQorCit2b2lkIFdlYlBhZ2U6OmNh
bmNlbFJlcXVlc3RzRm9yUGVybWlzc2lvbihRV2ViRnJhbWUqLCBRV2ViUGFnZTo6UGVybWlzc2lv
bkRvbWFpbikKK3sKK30KSW5kZXg6IFdlYktpdFRvb2xzL1F0VGVzdEJyb3dzZXIvd2VicGFnZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYktpdFRvb2xzL1F0VGVzdEJyb3dzZXIvd2VicGFnZS5oCShyZXZp
c2lvbiA2MzEzNCkKKysrIFdlYktpdFRvb2xzL1F0VGVzdEJyb3dzZXIvd2VicGFnZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC01Nyw2ICs1Nyw5IEBAIHB1YmxpYyBzbG90czoKICAgICB2b2lkIHNldFVz
ZXJBZ2VudChjb25zdCBRU3RyaW5nJiB1YSkgeyBtX3VzZXJBZ2VudCA9IHVhOyB9CiAgICAgYm9v
bCBzaG91bGRJbnRlcnJ1cHRKYXZhU2NyaXB0KCk7CiAgICAgdm9pZCBhdXRoZW50aWNhdGlvblJl
cXVpcmVkKFFOZXR3b3JrUmVwbHkqLCBRQXV0aGVudGljYXRvciopOworICAgIHZvaWQgcmVxdWVz
dFBlcm1pc3Npb24oUVdlYkZyYW1lKiBmcmFtZSwgUVdlYlBhZ2U6OlBlcm1pc3Npb25Eb21haW4g
ZG9tYWluKTsKKyAgICB2b2lkIGNoZWNrUGVybWlzc2lvbihRV2ViRnJhbWUqIGZyYW1lLCBRV2Vi
UGFnZTo6UGVybWlzc2lvbkRvbWFpbiBkb21haW4sIFFXZWJQYWdlOjpQZXJtaXNzaW9uUG9saWN5
JiBwb2xpY3kpOworICAgIHZvaWQgY2FuY2VsUmVxdWVzdHNGb3JQZXJtaXNzaW9uKFFXZWJGcmFt
ZSogZnJhbWUsIFFXZWJQYWdlOjpQZXJtaXNzaW9uRG9tYWluIGRvbWFpbik7CiAKIHByaXZhdGU6
CiAgICAgdm9pZCBhcHBseVByb3h5KCk7CkluZGV4OiBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lvbiA2MzEzNCkKKysrIExh
eW91dFRlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIwIEBACisyMDEw
LTA3LTExICBZYWVsIEFoYXJvbiAgPHlhZWwuYWhhcm9uQG5va2lhLmNvbT4KKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBbUXRdIFF0V2ViS2l0IG5lZWRz
IHB1YmxpYyBBUEkgZm9yIE5vdGlmaWNhdGlvbnMuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD00MTQxMworCisgICAgICAgIEFkZCBhIERSVCBBUEkgdG8g
c2V0IGEgZmxhZyBzbyB0aGF0IG5vdGlmaWNhdGlvbiByZXF1ZXN0cyBhcmUgaWdub3JlZCwKKyAg
ICAgICAgYW5kIGFkZCBhIHRlc3QgZm9yIGNhbmNlbGxpbmcgYSBwZW5kaW5nIG5vdGlmaWNhdGlv
biByZXF1ZXN0LgorICAgICAgICBOZXcgQVBJIGFuZCB0ZXN0IGFyZSBkaXNhYmxlZCBmb3IgQ2hy
b21pdW0gcG9ydC4KKworICAgICAgICAqIGZhc3Qvbm90aWZpY2F0aW9ucy9ub3RpZmljYXRpb25z
LWNhbmNlbC1yZXF1ZXN0LXBlcm1pc3Npb24tZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAg
KiBmYXN0L25vdGlmaWNhdGlvbnMvbm90aWZpY2F0aW9ucy1jYW5jZWwtcmVxdWVzdC1wZXJtaXNz
aW9uLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGZhc3Qvbm90aWZpY2F0aW9ucy9yZXNvdXJjZXM6
IEFkZGVkLgorICAgICAgICAqIGZhc3Qvbm90aWZpY2F0aW9ucy9yZXNvdXJjZXMvbm90aWZpY2F0
aW9ucy1jYW5jZWwtcmVxdWVzdC1wZXJtaXNzaW9uLmh0bWw6IEFkZGVkLgorICAgICAgICAqIHBs
YXRmb3JtL2Nocm9taXVtL3Rlc3RfZXhwZWN0YXRpb25zLnR4dDoKKwogMjAxMC0wNy0xMiAgWmhl
bnlhbyBNbyAgPHptb0Bnb29nbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERhcmluIEZp
c2hlci4KSW5kZXg6IExheW91dFRlc3RzL2Zhc3Qvbm90aWZpY2F0aW9ucy9ub3RpZmljYXRpb25z
LWNhbmNlbC1yZXF1ZXN0LXBlcm1pc3Npb24tZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExh
eW91dFRlc3RzL2Zhc3Qvbm90aWZpY2F0aW9ucy9ub3RpZmljYXRpb25zLWNhbmNlbC1yZXF1ZXN0
LXBlcm1pc3Npb24tZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFz
dC9ub3RpZmljYXRpb25zL25vdGlmaWNhdGlvbnMtY2FuY2VsLXJlcXVlc3QtcGVybWlzc2lvbi1l
eHBlY3RlZC50eHQJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNSBAQAorREVTS1RPUCBOT1RJRklD
QVRJT04gUEVSTUlTU0lPTiBSRVFVRVNURUQ6IGZpbGU6Ly8KK0RFU0tUT1AgTk9USUZJQ0FUSU9O
IFBFUk1JU1NJT04gUkVRVUVTVCBDQU5DRUxMRUQ6IGZpbGU6Ly8KK1JlcXVlc3RpbmcgYW5kIGNh
bmNlbGxpbmcgbm90aWZpY2F0aW9uIHBlcm1pc3Npb24uLi4KKworUGFzcyBpZiBub3RpZmljYXRp
b24gaXMgY2FuY2VsbGVkCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L25vdGlmaWNhdGlvbnMvbm90
aWZpY2F0aW9ucy1jYW5jZWwtcmVxdWVzdC1wZXJtaXNzaW9uLmh0bWwKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
TGF5b3V0VGVzdHMvZmFzdC9ub3RpZmljYXRpb25zL25vdGlmaWNhdGlvbnMtY2FuY2VsLXJlcXVl
c3QtcGVybWlzc2lvbi5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9ub3Rp
ZmljYXRpb25zL25vdGlmaWNhdGlvbnMtY2FuY2VsLXJlcXVlc3QtcGVybWlzc2lvbi5odG1sCShy
ZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQ0IEBACis8aHRtbD4KKzxoZWFkPgorICAgIDxzY3JpcHQg
dHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KKworICAgICAgICAvLyBUaW1lb3V0IGlzIHRvIGVuc3Vy
ZSB0aGF0IHRoZSBpZnJhbWUgd2FzIHJlbW92ZWQuCisgICAgICAgIHNldFRpbWVvdXQoaXNEb25l
LDUwMCk7CisKKyAgICAgICAgZnVuY3Rpb24gbG9nKG1lc3NhZ2UpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJyZXN1bHQiKS5pbm5lckhUTUwgKz0gbWVz
c2FnZSArICI8YnI+IjsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgZnVuY3Rpb24gcnVu
VGVzdHMoKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAod2luZG93LmxheW91dFRlc3RDb250
cm9sbGVyKSB7CisgICAgICAgICAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4
dCgpOworICAgICAgICAgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLndhaXRVbnRpbERvbmUo
KTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKCF3aW5kb3cud2Via2l0Tm90aWZp
Y2F0aW9ucykgeworICAgICAgICAgICAgICAgIGxvZygiRkFJTDogTm8gd2Via2l0Tm90aWZpY2F0
aW9ucyBpbnRlcmZhY2UhIik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAg
ICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJ0ZXN0IikuaW5uZXJIVE1MPSJQYXNzIGlmIG5v
dGlmaWNhdGlvbiBpcyBjYW5jZWxsZWQiOworICAgICAgICB9CisKKyAgICAgICAgZnVuY3Rpb24g
aXNEb25lKCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29u
dHJvbGxlcikgeworICAgICAgICAgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLm5vdGlmeURv
bmUoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgPC9zY3JpcHQ+Cis8L2hlYWQ+
Cis8Ym9keSBvbmxvYWQ9InJ1blRlc3RzKCk7Ij4KKyAgICA8cD5SZXF1ZXN0aW5nIGFuZCBjYW5j
ZWxsaW5nIG5vdGlmaWNhdGlvbiBwZXJtaXNzaW9uLi4uPC9wPgorICAgIAorPGRpdiBpZD0icmVz
dWx0Ij48L2Rpdj4KKzxkaXYgaWQ9InRlc3QiPgorPGlmcmFtZSBzcmM9InJlc291cmNlcy9ub3Rp
ZmljYXRpb25zLWNhbmNlbC1yZXF1ZXN0LXBlcm1pc3Npb24uaHRtbCIgd2lkdGg9ODAwIGhlaWdo
dD04MDA+PC9pZnJhbWU+Cis8L2Rpdj4KKzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IExheW91dFRl
c3RzL2Zhc3Qvbm90aWZpY2F0aW9ucy9yZXNvdXJjZXMvbm90aWZpY2F0aW9ucy1jYW5jZWwtcmVx
dWVzdC1wZXJtaXNzaW9uLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9ub3Rp
ZmljYXRpb25zL3Jlc291cmNlcy9ub3RpZmljYXRpb25zLWNhbmNlbC1yZXF1ZXN0LXBlcm1pc3Np
b24uaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3Qvbm90aWZpY2F0aW9ucy9y
ZXNvdXJjZXMvbm90aWZpY2F0aW9ucy1jYW5jZWwtcmVxdWVzdC1wZXJtaXNzaW9uLmh0bWwJKHJl
dmlzaW9uIDApCkBAIC0wLDAgKzEsMjggQEAKKzxodG1sPgorPGhlYWQ+CisgICAgPHNjcmlwdCB0
eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgorICAgICAgICBmdW5jdGlvbiBsb2cobWVzc2FnZSkKKyAg
ICAgICAgeworICAgICAgICAgICAgcGFyZW50LmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJyZXN1
bHQiKS5pbm5lckhUTUwgKz0gbWVzc2FnZSArICI8YnI+IjsKKyAgICAgICAgfQorICAgICAgICAK
KyAgICAgICAgZnVuY3Rpb24gcnVuVGVzdHMoKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAo
d2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKSB7CisgICAgICAgICAgICAgICAgbGF5b3V0VGVz
dENvbnRyb2xsZXIuZHVtcEFzVGV4dCgpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBp
ZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKSB7CisgICAgICAgICAgICAgICAgbGF5b3V0
VGVzdENvbnRyb2xsZXIuaWdub3JlRGVza3RvcE5vdGlmaWNhdGlvblBlcm1pc3Npb25SZXF1ZXN0
cygpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICB3aW5kb3cud2Via2l0Tm90aWZpY2F0
aW9ucy5yZXF1ZXN0UGVybWlzc2lvbigKKyAgICAgICAgICAgICAgICBmdW5jdGlvbigpIHsgbG9n
KCJGQUlMOiBQZXJtaXNzaW9uIGNhbGxiYWNrIGludm9rZWQuIik7IH0KKyAgICAgICAgICAgICk7
CisKKyAgICAgICAgfQorICAgIDwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHkgb25sb2FkPSJydW5U
ZXN0cygpOyI+Cis8L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9j
aHJvbWl1bS90ZXN0X2V4cGVjdGF0aW9ucy50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMv
cGxhdGZvcm0vY2hyb21pdW0vdGVzdF9leHBlY3RhdGlvbnMudHh0CShyZXZpc2lvbiA2MzEzNCkK
KysrIExheW91dFRlc3RzL3BsYXRmb3JtL2Nocm9taXVtL3Rlc3RfZXhwZWN0YXRpb25zLnR4dAko
d29ya2luZyBjb3B5KQpAQCAtMjgyOCw2ICsyODI4LDkgQEAgQlVHNDYxNTcgV0lOIFJFTEVBU0Ug
OiB0cmFuc2Zvcm1zLzJkL3RyYQogLy8gQ2hyb21pdW0gZG9lcyBub3QgdXNlIHRoZSBpY29uIGxv
YWRlciBpbiBXZWJDb3JlIGZvciBsb2FkaW5nIG5vdGlmaWNhdGlvbnMuCiBXT05URklYIFNLSVAg
OiBodHRwL3Rlc3RzL25vdGlmaWNhdGlvbnMgPSBGQUlMCiAKKy8vIENocm9taXVtIGRvZXMgbm90
IHN1cHBvcnQgY2FuY2VsIGZvciBub3RpZmljYXRpb25zLgorV09OVEZJWCBTS0lQIDogZmFzdC9u
b3RpZmljYXRpb25zL25vdGlmaWNhdGlvbnMtY2FuY2VsLXJlcXVlc3QtcGVybWlzc2lvbi5odG1s
ID0gRkFJTAorCiBCVUc0NjI3NiBXSU4gOiBmYXN0L3RleHQvaW50ZXJuYXRpb25hbC9raG1lci1z
ZWxlY3Rpb24uaHRtbCA9IElNQUdFK1RFWFQKIAogLy8gSFRNTDUgR2VvbG9jYXRpb24gQVBJIGRv
ZXMgbm90IHVzZSB3aW5kb3cuY2xpZW50SW5mb3JtYXRpb24uCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>61313</attachid>
            <date>2010-07-12 19:11:22 -0700</date>
            <delta_ts>2010-07-22 06:06:01 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>41413.patch</filename>
            <type>text/plain</type>
            <size>32215</size>
            <attacher name="Yael">yael</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYktpdC9xdC9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L3F0L0NoYW5n
ZUxvZwkocmV2aXNpb24gNjMxMzQpCisrKyBXZWJLaXQvcXQvQ2hhbmdlTG9nCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDMgKzEsMjcgQEAKKzIwMTAtMDctMTEgIFlhZWwgQWhhcm9uICA8eWFlbC5haGFy
b25Abm9raWEuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIFtRdF0gUXRXZWJLaXQgbmVlZHMgcHVibGljIEFQSSBmb3IgTm90aWZpY2F0aW9ucy4K
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQxNDEzCisK
KyAgICAgICAgUmVtb3ZlIER1bXBSZW5kZXJUcmVlIHByaXZhdGUgQVBJIGFuZCBpbnRyb2R1Y2Ug
bmV3IEFQSS4KKyAgICAgICAgQWxzbyBhZGQgc3VwcG9ydCBmb3IgaW5mb3JtaW5nIHRoZSBVSSB3
aGVuIGEgbm90aWZpY2F0aW9uIHJlcXVlc3QgaXMgY2FuY2VsbGVkLgorIAorICAgICAgICAqIEFw
aS9xd2VicGFnZS5jcHA6CisgICAgICAgIChRV2ViUGFnZTo6c2V0VXNlclBlcm1pc3Npb24pOgor
ICAgICAgICAqIEFwaS9xd2VicGFnZS5oOgorICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0R1bXBS
ZW5kZXJUcmVlU3VwcG9ydFF0LmNwcDoKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9EdW1wUmVu
ZGVyVHJlZVN1cHBvcnRRdC5oOgorICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L05vdGlmaWNhdGlv
blByZXNlbnRlckNsaWVudFF0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok5vdGlmaWNhdGlvblBy
ZXNlbnRlckNsaWVudFF0OjpyZXF1ZXN0UGVybWlzc2lvbik6CisgICAgICAgIChXZWJDb3JlOjpO
b3RpZmljYXRpb25QcmVzZW50ZXJDbGllbnRRdDo6Y2hlY2tQZXJtaXNzaW9uKToKKyAgICAgICAg
KFdlYkNvcmU6Ok5vdGlmaWNhdGlvblByZXNlbnRlckNsaWVudFF0OjpjYW5jZWxSZXF1ZXN0c0Zv
clBlcm1pc3Npb24pOgorICAgICAgICAoV2ViQ29yZTo6Tm90aWZpY2F0aW9uUHJlc2VudGVyQ2xp
ZW50UXQ6OmFsbG93Tm90aWZpY2F0aW9uRm9yRnJhbWUpOgorICAgICAgICAoV2ViQ29yZTo6Tm90
aWZpY2F0aW9uUHJlc2VudGVyQ2xpZW50UXQ6OnBhZ2UpOgorICAgICAgICAoV2ViQ29yZTo6Tm90
aWZpY2F0aW9uUHJlc2VudGVyQ2xpZW50UXQ6OmZyYW1lKToKKyAgICAgICAgKiBXZWJDb3JlU3Vw
cG9ydC9Ob3RpZmljYXRpb25QcmVzZW50ZXJDbGllbnRRdC5oOgorCiAyMDEwLTA3LTA5ICBZYWVs
IEFoYXJvbiAgPHlhZWwuYWhhcm9uQG5va2lhLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBM
YXN6bG8gR29tYm9zLgpJbmRleDogV2ViS2l0L3F0L0FwaS9xd2VicGFnZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViS2l0L3F0L0FwaS9xd2VicGFnZS5jcHAJKHJldmlzaW9uIDYzMTM0KQorKysgV2Vi
S2l0L3F0L0FwaS9xd2VicGFnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIxMDcsNiArMjEwNywy
MCBAQCBib29sIFFXZWJQYWdlOjphbGxvd0dlb2xvY2F0aW9uUmVxdWVzdChRCiAjZW5kaWYKIH0K
IAordm9pZCBRV2ViUGFnZTo6c2V0VXNlclBlcm1pc3Npb24oUVdlYkZyYW1lKiBmcmFtZSwgUGVy
bWlzc2lvbkRvbWFpbiBkb21haW4sIFBlcm1pc3Npb25Qb2xpY3kgcG9saWN5KQoreworICAgIHN3
aXRjaCAoZG9tYWluKSB7CisgICAgY2FzZSBOb3RpZmljYXRpb25zUGVybWlzc2lvbkRvbWFpbjoK
KyNpZiBFTkFCTEUoTk9USUZJQ0FUSU9OUykKKyAgICAgICAgaWYgKHBvbGljeSA9PSBQZXJtaXNz
aW9uR3JhbnRlZCkKKyAgICAgICAgICAgIE5vdGlmaWNhdGlvblByZXNlbnRlckNsaWVudFF0Ojpu
b3RpZmljYXRpb25QcmVzZW50ZXIoKS0+YWxsb3dOb3RpZmljYXRpb25Gb3JGcmFtZShmcmFtZSk7
CisjZW5kaWYKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgYnJlYWs7Cisg
ICAgfQorfQorCiAvKiEKICAgICBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aGVuZXZlciBXZWJL
aXQgd2FudHMgdG8gY3JlYXRlIGEgbmV3IHdpbmRvdyBvZiB0aGUgZ2l2ZW4gXGEgdHlwZSwgZm9y
CiAgICAgZXhhbXBsZSB3aGVuIGEgSmF2YVNjcmlwdCBwcm9ncmFtIHJlcXVlc3RzIHRvIG9wZW4g
YSBkb2N1bWVudCBpbiBhIG5ldyB3aW5kb3cuCkluZGV4OiBXZWJLaXQvcXQvQXBpL3F3ZWJwYWdl
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViS2l0L3F0L0FwaS9xd2VicGFnZS5oCShyZXZpc2lvbiA2MzEz
NCkKKysrIFdlYktpdC9xdC9BcGkvcXdlYnBhZ2UuaAkod29ya2luZyBjb3B5KQpAQCAtMTk1LDYg
KzE5NSwxNiBAQCBwdWJsaWM6CiAgICAgICAgIFdlYk1vZGFsRGlhbG9nCiAgICAgfTsKIAorICAg
IGVudW0gUGVybWlzc2lvblBvbGljeSB7CisgICAgICAgIFBlcm1pc3Npb25HcmFudGVkLAorICAg
ICAgICBQZXJtaXNzaW9uSWdub3JlZCwKKyAgICAgICAgUGVybWlzc2lvbkRlbmllZAorICAgIH07
CisKKyAgICBlbnVtIFBlcm1pc3Npb25Eb21haW4geworICAgICAgICBOb3RpZmljYXRpb25zUGVy
bWlzc2lvbkRvbWFpbgorICAgIH07CisKICAgICBjbGFzcyBWaWV3cG9ydEhpbnRzIHsKICAgICBw
dWJsaWM6CiAgICAgICAgIFZpZXdwb3J0SGludHMoKTsKQEAgLTI5MCw2ICszMDAsOCBAQCBwdWJs
aWM6CiAKICAgICBRTWVudSAqY3JlYXRlU3RhbmRhcmRDb250ZXh0TWVudSgpOwogCisgICAgdm9p
ZCBzZXRVc2VyUGVybWlzc2lvbihRV2ViRnJhbWUqIGZyYW1lLCBQZXJtaXNzaW9uRG9tYWluIGRv
bWFpbiwgUGVybWlzc2lvblBvbGljeSBwb2xpY3kpOworCiAgICAgZW51bSBFeHRlbnNpb24gewog
ICAgICAgICBDaG9vc2VNdWx0aXBsZUZpbGVzRXh0ZW5zaW9uLAogICAgICAgICBFcnJvclBhZ2VF
eHRlbnNpb24KQEAgLTM3MSw2ICszODMsMTAgQEAgUV9TSUdOQUxTOgogCiAgICAgdm9pZCB2aWV3
cG9ydENoYW5nZVJlcXVlc3RlZChjb25zdCBRV2ViUGFnZTo6Vmlld3BvcnRIaW50cyYgaGludHMp
OwogCisgICAgdm9pZCByZXF1ZXN0UGVybWlzc2lvbkZyb21Vc2VyKFFXZWJGcmFtZSogZnJhbWUs
IFFXZWJQYWdlOjpQZXJtaXNzaW9uRG9tYWluIGRvbWFpbik7CisgICAgdm9pZCBjaGVja1Blcm1p
c3Npb25Gcm9tVXNlcihRV2ViRnJhbWUqIGZyYW1lLCBRV2ViUGFnZTo6UGVybWlzc2lvbkRvbWFp
biBkb21haW4sIFFXZWJQYWdlOjpQZXJtaXNzaW9uUG9saWN5JiBwb2xpY3kpOworICAgIHZvaWQg
Y2FuY2VsUmVxdWVzdHNGb3JQZXJtaXNzaW9uKFFXZWJGcmFtZSogZnJhbWUsIFFXZWJQYWdlOjpQ
ZXJtaXNzaW9uRG9tYWluIGRvbWFpbik7CisKIHByb3RlY3RlZDoKICAgICB2aXJ0dWFsIFFXZWJQ
YWdlICpjcmVhdGVXaW5kb3coV2ViV2luZG93VHlwZSB0eXBlKTsKICAgICB2aXJ0dWFsIFFPYmpl
Y3QgKmNyZWF0ZVBsdWdpbihjb25zdCBRU3RyaW5nICZjbGFzc2lkLCBjb25zdCBRVXJsICZ1cmws
IGNvbnN0IFFTdHJpbmdMaXN0ICZwYXJhbU5hbWVzLCBjb25zdCBRU3RyaW5nTGlzdCAmcGFyYW1W
YWx1ZXMpOwpJbmRleDogV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L0R1bXBSZW5kZXJUcmVlU3Vw
cG9ydFF0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvRHVtcFJl
bmRlclRyZWVTdXBwb3J0UXQuY3BwCShyZXZpc2lvbiA2MzEzNCkKKysrIFdlYktpdC9xdC9XZWJD
b3JlU3VwcG9ydC9EdW1wUmVuZGVyVHJlZVN1cHBvcnRRdC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTcwLDggKzcwLDYgQEAKIAogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKLUNoZWNrUGVybWlz
c2lvbkZ1bmN0aW9uVHlwZSogY2hlY2tQZXJtaXNzaW9uRnVuY3Rpb24gPSAwOwotUmVxdWVzdFBl
cm1pc3Npb25GdW5jdGlvblR5cGUqIHJlcXVlc3RQZXJtaXNzaW9uRnVuY3Rpb24gPSAwOwogUU1h
cDxpbnQsIFFXZWJTY3JpcHRXb3JsZCo+IG1fd29ybGRNYXA7CiAKIER1bXBSZW5kZXJUcmVlU3Vw
cG9ydFF0OjpEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdCgpCkBAIC01NzAsMjAgKzU2OCw2IEBAIHZv
aWQgRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OmR1bXBOb3RpZmkKICNlbmRpZgogfQogCi12b2lk
IER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjpzZXROb3RpZmljYXRpb25zUmVjZWl2ZXIoUU9iamVj
dCogcmVjZWl2ZXIpCi17Ci0jaWYgRU5BQkxFKE5PVElGSUNBVElPTlMpCi0gICAgTm90aWZpY2F0
aW9uUHJlc2VudGVyQ2xpZW50UXQ6Om5vdGlmaWNhdGlvblByZXNlbnRlcigpLT5zZXRSZWNlaXZl
cihyZWNlaXZlcik7Ci0jZW5kaWYKLX0KLQotdm9pZCBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6
YWxsb3dOb3RpZmljYXRpb25Gb3JPcmlnaW4oY29uc3QgUVN0cmluZyYgb3JpZ2luKQotewotI2lm
IEVOQUJMRShOT1RJRklDQVRJT05TKQotICAgIE5vdGlmaWNhdGlvblByZXNlbnRlckNsaWVudFF0
Ojpub3RpZmljYXRpb25QcmVzZW50ZXIoKS0+YWxsb3dOb3RpZmljYXRpb25Gb3JPcmlnaW4ob3Jp
Z2luKTsKLSNlbmRpZgotfQotCiB2b2lkIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjpzZXRNb2Nr
R2VvbG9jYXRpb25Qb3NpdGlvbihkb3VibGUgbGF0aXR1ZGUsIGRvdWJsZSBsb25naXR1ZGUsIGRv
dWJsZSBhY2N1cmFjeSkKIHsKICNpZiBFTkFCTEUoR0VPTE9DQVRJT04pCkBAIC02MDAsMTYgKzU4
NCw2IEBAIHZvaWQgRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OnNldE1vY2tHZW8KICNlbmRpZgog
fQogCi12b2lkIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjpzZXRDaGVja1Blcm1pc3Npb25GdW5j
dGlvbihDaGVja1Blcm1pc3Npb25GdW5jdGlvblR5cGUqIGYpCi17Ci0gICAgY2hlY2tQZXJtaXNz
aW9uRnVuY3Rpb24gPSBmOwotfQotCi12b2lkIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjpzZXRS
ZXF1ZXN0UGVybWlzc2lvbkZ1bmN0aW9uKFJlcXVlc3RQZXJtaXNzaW9uRnVuY3Rpb25UeXBlKiBm
KQotewotICAgIHJlcXVlc3RQZXJtaXNzaW9uRnVuY3Rpb24gPSBmOwotfQotCiBib29sIER1bXBS
ZW5kZXJUcmVlU3VwcG9ydFF0Ojppc1RhcmdldEl0ZW0oY29uc3QgUVdlYkhpc3RvcnlJdGVtJiBo
aXN0b3J5SXRlbSkKIHsKICAgICBRV2ViSGlzdG9yeUl0ZW0gaXQgPSBoaXN0b3J5SXRlbTsKSW5k
ZXg6IFdlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9EdW1wUmVuZGVyVHJlZVN1cHBvcnRRdC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9EdW1wUmVuZGVyVHJlZVN1cHBv
cnRRdC5oCShyZXZpc2lvbiA2MzEzNCkKKysrIFdlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9EdW1w
UmVuZGVyVHJlZVN1cHBvcnRRdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMiwxNyArMzIsNiBAQCBj
bGFzcyBRV2ViUGFnZTsKIGNsYXNzIFFXZWJIaXN0b3J5SXRlbTsKIGNsYXNzIFFXZWJTY3JpcHRX
b3JsZDsKIAotZW51bSBOb3RpZmljYXRpb25QZXJtaXNzaW9uIHsKLSAgICBOb3RpZmljYXRpb25B
bGxvd2VkLAotICAgIE5vdGlmaWNhdGlvbk5vdEFsbG93ZWQsCi0gICAgTm90aWZpY2F0aW9uRGVu
aWVkCi19OwotCi10eXBlZGVmIHZvaWQgKENoZWNrUGVybWlzc2lvbkZ1bmN0aW9uVHlwZSkgKFFP
YmplY3QqIHJlY2VpdmVyLCBjb25zdCBRVXJsJiwgTm90aWZpY2F0aW9uUGVybWlzc2lvbiYpOwot
dHlwZWRlZiB2b2lkIChSZXF1ZXN0UGVybWlzc2lvbkZ1bmN0aW9uVHlwZSkgKFFPYmplY3QqIHJl
Y2VpdmVyLCBjb25zdCBRU3RyaW5nJik7Ci0KLWV4dGVybiBDaGVja1Blcm1pc3Npb25GdW5jdGlv
blR5cGUqIGNoZWNrUGVybWlzc2lvbkZ1bmN0aW9uOwotZXh0ZXJuIFJlcXVlc3RQZXJtaXNzaW9u
RnVuY3Rpb25UeXBlKiByZXF1ZXN0UGVybWlzc2lvbkZ1bmN0aW9uOwogZXh0ZXJuIFFNYXA8aW50
LCBRV2ViU2NyaXB0V29ybGQqPiBtX3dvcmxkTWFwOwogCiBjbGFzcyBRV0VCS0lUX0VYUE9SVCBE
dW1wUmVuZGVyVHJlZVN1cHBvcnRRdCB7CkBAIC0xMjEsMTMgKzExMCw2IEBAIHB1YmxpYzoKIAog
ICAgIHN0YXRpYyB2b2lkIGR1bXBOb3RpZmljYXRpb24oYm9vbCBiKTsKIAotICAgIC8vIFRoZXNl
IGZ1bmN0aW9ucyBzaG91bGQgZXZlbnR1YWxseSB0dXJuIGludG8gcHVibGljIEFQSQotICAgIC8v
IGFuZCB0aGUgInJlY2VpdmVyIiBjb25jZXB0IHdvdWxkIGdvIGF3YXkKLSAgICBzdGF0aWMgdm9p
ZCBzZXROb3RpZmljYXRpb25zUmVjZWl2ZXIoUU9iamVjdCogcmVjZWl2ZXIpOwotICAgIHN0YXRp
YyB2b2lkIGFsbG93Tm90aWZpY2F0aW9uRm9yT3JpZ2luKGNvbnN0IFFTdHJpbmcmIG9yaWdpbik7
Ci0gICAgc3RhdGljIHZvaWQgc2V0Q2hlY2tQZXJtaXNzaW9uRnVuY3Rpb24oQ2hlY2tQZXJtaXNz
aW9uRnVuY3Rpb25UeXBlKik7Ci0gICAgc3RhdGljIHZvaWQgc2V0UmVxdWVzdFBlcm1pc3Npb25G
dW5jdGlvbihSZXF1ZXN0UGVybWlzc2lvbkZ1bmN0aW9uVHlwZSopOwotCiAgICAgc3RhdGljIFFN
YXA8UVN0cmluZywgUVdlYkhpc3RvcnlJdGVtPiBnZXRDaGlsZEhpc3RvcnlJdGVtcyhjb25zdCBR
V2ViSGlzdG9yeUl0ZW0mIGhpc3RvcnlJdGVtKTsKICAgICBzdGF0aWMgYm9vbCBpc1RhcmdldEl0
ZW0oY29uc3QgUVdlYkhpc3RvcnlJdGVtJiBoaXN0b3J5SXRlbSk7CiAgICAgc3RhdGljIFFTdHJp
bmcgaGlzdG9yeUl0ZW1UYXJnZXQoY29uc3QgUVdlYkhpc3RvcnlJdGVtJiBoaXN0b3J5SXRlbSk7
CkluZGV4OiBXZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvTm90aWZpY2F0aW9uUHJlc2VudGVyQ2xp
ZW50UXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9Ob3RpZmlj
YXRpb25QcmVzZW50ZXJDbGllbnRRdC5jcHAJKHJldmlzaW9uIDYzMTM0KQorKysgV2ViS2l0L3F0
L1dlYkNvcmVTdXBwb3J0L05vdGlmaWNhdGlvblByZXNlbnRlckNsaWVudFF0LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMzYsMTEgKzM2LDE0IEBACiAjaW5jbHVkZSAiRHVtcFJlbmRlclRyZWVTdXBw
b3J0UXQuaCIKICNpbmNsdWRlICJFdmVudE5hbWVzLmgiCiAjaW5jbHVkZSAiS1VSTC5oIgorI2lu
Y2x1ZGUgIlBhZ2UuaCIKICNpbmNsdWRlICJRdFBsYXRmb3JtUGx1Z2luLmgiCiAjaW5jbHVkZSAi
U2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oIgogI2luY2x1ZGUgIlNlY3VyaXR5T3JpZ2luLmgiCiAK
KyNpbmNsdWRlICJxd2ViZnJhbWVfcC5oIgogI2luY2x1ZGUgInF3ZWJraXRnbG9iYWwuaCIKKyNp
bmNsdWRlICJxd2VicGFnZS5oIgogI2luY2x1ZGUgPFF0R3VpPgogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CkBAIC0yNTksNTIgKzI2Miw3MiBAQCB2b2lkIE5vdGlmaWNhdGlvblByZXNlbnRlckNsaWVu
dFF0OjpyZXF1CiAgICAgICAgIHByaW50ZigiREVTS1RPUCBOT1RJRklDQVRJT04gUEVSTUlTU0lP
TiBSRVFVRVNURUQ6ICVzXG4iLCBRU3RyaW5nKGNvbnRleHQtPnNlY3VyaXR5T3JpZ2luKCktPnRv
U3RyaW5nKCkpLnRvVXRmOCgpLmNvbnN0RGF0YSgpKTsKIAogICAgIFFTdHJpbmcgb3JpZ2luU3Ry
aW5nID0gY29udGV4dC0+c2VjdXJpdHlPcmlnaW4oKS0+dG9TdHJpbmcoKTsKLSAgICBRSGFzaDxR
U3RyaW5nLCBRTGlzdDxSZWZQdHI8Vm9pZENhbGxiYWNrPiA+ID46Oml0ZXJhdG9yIGl0ZXIgPSBt
X3BlbmRpbmdQZXJtaXNzaW9uUmVxdWVzdHMuZmluZChvcmlnaW5TdHJpbmcpOworICAgIFFIYXNo
PFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBDYWxsYmFja3NJbmZvID46Oml0ZXJhdG9yIGl0ZXIg
PSBtX3BlbmRpbmdQZXJtaXNzaW9uUmVxdWVzdHMuZmluZChjb250ZXh0KTsKKwogICAgIGlmIChp
dGVyICE9IG1fcGVuZGluZ1Blcm1pc3Npb25SZXF1ZXN0cy5lbmQoKSkKLSAgICAgICAgaXRlci52
YWx1ZSgpLmFwcGVuZChjYWxsYmFjayk7CisgICAgICAgIGl0ZXIudmFsdWUoKS5tX2NhbGxiYWNr
cy5hcHBlbmQoY2FsbGJhY2spOwogICAgIGVsc2UgewotICAgICAgICBRTGlzdDxSZWZQdHI8Vm9p
ZENhbGxiYWNrPiA+IGNhbGxiYWNrczsKICAgICAgICAgUmVmUHRyPFZvaWRDYWxsYmFjaz4gY2Ig
PSBjYWxsYmFjazsKLSAgICAgICAgY2FsbGJhY2tzLmFwcGVuZChjYik7Ci0gICAgICAgIG1fcGVu
ZGluZ1Blcm1pc3Npb25SZXF1ZXN0cy5pbnNlcnQob3JpZ2luU3RyaW5nLCBjYWxsYmFja3MpOwot
ICAgICAgICBpZiAocmVxdWVzdFBlcm1pc3Npb25GdW5jdGlvbikKLSAgICAgICAgICAgIHJlcXVl
c3RQZXJtaXNzaW9uRnVuY3Rpb24obV9yZWNlaXZlciwgb3JpZ2luU3RyaW5nKTsKKyAgICAgICAg
Q2FsbGJhY2tzSW5mbyBpbmZvOworICAgICAgICBpbmZvLm1fZnJhbWUgPSB0b0ZyYW1lKGNvbnRl
eHQpOworICAgICAgICBpbmZvLm1fY2FsbGJhY2tzLmFwcGVuZChjYik7CisgICAgICAgIG1fcGVu
ZGluZ1Blcm1pc3Npb25SZXF1ZXN0cy5pbnNlcnQoY29udGV4dCwgaW5mbyk7CisgICAgICAgIGlm
ICh0b1BhZ2UoY29udGV4dCkgJiYgdG9GcmFtZShjb250ZXh0KSkKKyAgICAgICAgICAgIGVtaXQg
dG9QYWdlKGNvbnRleHQpLT5yZXF1ZXN0UGVybWlzc2lvbkZyb21Vc2VyKHRvRnJhbWUoY29udGV4
dCksIFFXZWJQYWdlOjpOb3RpZmljYXRpb25zUGVybWlzc2lvbkRvbWFpbik7CiAgICAgfQogfQog
CiBOb3RpZmljYXRpb25QcmVzZW50ZXI6OlBlcm1pc3Npb24gTm90aWZpY2F0aW9uUHJlc2VudGVy
Q2xpZW50UXQ6OmNoZWNrUGVybWlzc2lvbihTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0
KQogewotICAgIE5vdGlmaWNhdGlvblBlcm1pc3Npb24gcGVybWlzc2lvbiA9IE5vdGlmaWNhdGlv
bk5vdEFsbG93ZWQ7Ci0gICAgUVN0cmluZyBvcmlnaW4gPSBjb250ZXh0LT51cmwoKS5zdHJpbmco
KTsKLSAgICBpZiAoY2hlY2tQZXJtaXNzaW9uRnVuY3Rpb24pCi0gICAgICAgIGNoZWNrUGVybWlz
c2lvbkZ1bmN0aW9uKG1fcmVjZWl2ZXIsIG9yaWdpbiwgcGVybWlzc2lvbik7Ci0gICAgc3dpdGNo
IChwZXJtaXNzaW9uKSB7Ci0gICAgY2FzZSBOb3RpZmljYXRpb25BbGxvd2VkOgorICAgIFFXZWJQ
YWdlOjpQZXJtaXNzaW9uUG9saWN5IHBvbGljeSA9IFFXZWJQYWdlOjpQZXJtaXNzaW9uSWdub3Jl
ZDsKKyAgICBpZiAodG9QYWdlKGNvbnRleHQpICYmIHRvRnJhbWUoY29udGV4dCkpCisgICAgICAg
IGVtaXQgdG9QYWdlKGNvbnRleHQpLT5jaGVja1Blcm1pc3Npb25Gcm9tVXNlcih0b0ZyYW1lKGNv
bnRleHQpLCBRV2ViUGFnZTo6Tm90aWZpY2F0aW9uc1Blcm1pc3Npb25Eb21haW4sIHBvbGljeSk7
CisKKyAgICBzd2l0Y2ggKHBvbGljeSkgeworICAgIGNhc2UgUVdlYlBhZ2U6OlBlcm1pc3Npb25H
cmFudGVkOgogICAgICAgICByZXR1cm4gTm90aWZpY2F0aW9uUHJlc2VudGVyOjpQZXJtaXNzaW9u
QWxsb3dlZDsKLSAgICBjYXNlIE5vdGlmaWNhdGlvbk5vdEFsbG93ZWQ6CisgICAgY2FzZSBRV2Vi
UGFnZTo6UGVybWlzc2lvbklnbm9yZWQ6CiAgICAgICAgIHJldHVybiBOb3RpZmljYXRpb25QcmVz
ZW50ZXI6OlBlcm1pc3Npb25Ob3RBbGxvd2VkOwotICAgIGNhc2UgTm90aWZpY2F0aW9uRGVuaWVk
OgorICAgIGNhc2UgUVdlYlBhZ2U6OlBlcm1pc3Npb25EZW5pZWQ6CiAgICAgICAgIHJldHVybiBO
b3RpZmljYXRpb25QcmVzZW50ZXI6OlBlcm1pc3Npb25EZW5pZWQ7CiAgICAgfQogICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOwogICAgIHJldHVybiBOb3RpZmljYXRpb25QcmVzZW50ZXI6OlBlcm1p
c3Npb25Ob3RBbGxvd2VkOwogfQogCi12b2lkIE5vdGlmaWNhdGlvblByZXNlbnRlckNsaWVudFF0
OjpjYW5jZWxSZXF1ZXN0c0ZvclBlcm1pc3Npb24oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCopCit2
b2lkIE5vdGlmaWNhdGlvblByZXNlbnRlckNsaWVudFF0OjpjYW5jZWxSZXF1ZXN0c0ZvclBlcm1p
c3Npb24oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCkKIHsKLSAgICAvLyBGSVhNRTog
VGhpcyB3aWxsIGJlIGltcGxlbWVudGVkIGZvciBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9NDE0MTMKLSAgICAvLyB0byBhdm9pZCBhZGRpbmcgYW5kIHJlbW92aW5nIG5l
dyBwcml2YXRlIEFQSQorICAgIFFIYXNoPFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCAgQ2FsbGJh
Y2tzSW5mbyA+OjppdGVyYXRvciBpdGVyID0gbV9wZW5kaW5nUGVybWlzc2lvblJlcXVlc3RzLmZp
bmQoY29udGV4dCk7CisgICAgaWYgKGl0ZXIgPT0gbV9wZW5kaW5nUGVybWlzc2lvblJlcXVlc3Rz
LmVuZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoZHVtcE5vdGlmaWNhdGlvbikKKyAg
ICAgICAgcHJpbnRmKCJERVNLVE9QIE5PVElGSUNBVElPTiBQRVJNSVNTSU9OIFJFUVVFU1QgQ0FO
Q0VMTEVEOiAlc1xuIiwgUVN0cmluZyhjb250ZXh0LT5zZWN1cml0eU9yaWdpbigpLT50b1N0cmlu
ZygpKS50b1V0ZjgoKS5jb25zdERhdGEoKSk7CisKKyAgICAvLyBUaGUgZnJhbWUgY291bGQgYWxy
ZWFkeSBiZSBkaXNjb25uZWN0ZWQsIHNvIGRvIG5vdCB1c2UgdG9GcmFtZShjb250ZXh0KSBvciB0
b1BhZ2UoY29udGV4dCkKKyAgICBRV2ViRnJhbWUqIGZyYW1lVG9SZW1vdmUgPSBpdGVyLnZhbHVl
KCkubV9mcmFtZTsKKyAgICBRV2ViUGFnZSogcGFnZVRvUmVtb3ZlID0gZnJhbWVUb1JlbW92ZS0+
cGFnZSgpOworICAgIG1fcGVuZGluZ1Blcm1pc3Npb25SZXF1ZXN0cy5lcmFzZShpdGVyKTsKKwor
ICAgIGlmIChwYWdlVG9SZW1vdmUgJiYgZnJhbWVUb1JlbW92ZSkKKyAgICAgICAgZW1pdCBwYWdl
VG9SZW1vdmUtPmNhbmNlbFJlcXVlc3RzRm9yUGVybWlzc2lvbihmcmFtZVRvUmVtb3ZlLCBRV2Vi
UGFnZTo6Tm90aWZpY2F0aW9uc1Blcm1pc3Npb25Eb21haW4pOwogfQogCi12b2lkIE5vdGlmaWNh
dGlvblByZXNlbnRlckNsaWVudFF0OjphbGxvd05vdGlmaWNhdGlvbkZvck9yaWdpbihjb25zdCBR
U3RyaW5nJiBvcmlnaW4pCit2b2lkIE5vdGlmaWNhdGlvblByZXNlbnRlckNsaWVudFF0OjphbGxv
d05vdGlmaWNhdGlvbkZvckZyYW1lKFFXZWJGcmFtZSogZnJhbWUpCiB7Ci0gICAgUUhhc2g8UVN0
cmluZywgUUxpc3Q8UmVmUHRyPFZvaWRDYWxsYmFjaz4gPiA+OjppdGVyYXRvciBpdGVyID0gbV9w
ZW5kaW5nUGVybWlzc2lvblJlcXVlc3RzLmZpbmQob3JpZ2luKTsKLSAgICBpZiAoaXRlciAhPSBt
X3BlbmRpbmdQZXJtaXNzaW9uUmVxdWVzdHMuZW5kKCkpIHsKLSAgICAgICAgUUxpc3Q8UmVmUHRy
PFZvaWRDYWxsYmFjaz4gPiYgY2FsbGJhY2tzID0gaXRlci52YWx1ZSgpOwotICAgICAgICBmb3Ig
KGludCBpID0gMDsgaSA8IGNhbGxiYWNrcy5zaXplKCk7IGkrKykKLSAgICAgICAgICAgIGNhbGxi
YWNrcy5hdChpKS0+aGFuZGxlRXZlbnQoKTsKLSAgICAgICAgbV9wZW5kaW5nUGVybWlzc2lvblJl
cXVlc3RzLnJlbW92ZShvcmlnaW4pOworICAgIFFIYXNoPFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQq
LCAgQ2FsbGJhY2tzSW5mbyA+OjppdGVyYXRvciBpdGVyID0gbV9wZW5kaW5nUGVybWlzc2lvblJl
cXVlc3RzLmJlZ2luKCk7CisgICAgd2hpbGUgKGl0ZXIgIT0gbV9wZW5kaW5nUGVybWlzc2lvblJl
cXVlc3RzLmVuZCgpKSB7CisgICAgICAgIGlmIChpdGVyLnZhbHVlKCkubV9mcmFtZSA9PSBmcmFt
ZSkKKyAgICAgICAgICAgIGJyZWFrOwogICAgIH0KKworICAgIGlmIChpdGVyID09IG1fcGVuZGlu
Z1Blcm1pc3Npb25SZXF1ZXN0cy5lbmQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgUUxpc3Q8
UmVmUHRyPFZvaWRDYWxsYmFjaz4gPiYgY2FsbGJhY2tzID0gaXRlci52YWx1ZSgpLm1fY2FsbGJh
Y2tzOworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY2FsbGJhY2tzLnNpemUoKTsgaSsrKQorICAg
ICAgICBjYWxsYmFja3MuYXQoaSktPmhhbmRsZUV2ZW50KCk7CisgICAgbV9wZW5kaW5nUGVybWlz
c2lvblJlcXVlc3RzLnJlbW92ZShpdGVyLmtleSgpKTsKIH0KIAogdm9pZCBOb3RpZmljYXRpb25Q
cmVzZW50ZXJDbGllbnRRdDo6c2VuZEV2ZW50KE5vdGlmaWNhdGlvbiogbm90aWZpY2F0aW9uLCBj
b25zdCBBdG9taWNTdHJpbmcmIGV2ZW50TmFtZSkKQEAgLTM2MSw2ICszODQsMzQgQEAgdm9pZCBO
b3RpZmljYXRpb25QcmVzZW50ZXJDbGllbnRRdDo6ZHVtcAogICAgIH0KIH0KIAorUVdlYlBhZ2Uq
IE5vdGlmaWNhdGlvblByZXNlbnRlckNsaWVudFF0Ojp0b1BhZ2UoU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCogY29udGV4dCkKK3sKKyAgICBpZiAoIWNvbnRleHQgfHwgY29udGV4dC0+aXNXb3JrZXJD
b250ZXh0KCkpCisgICAgICAgIHJldHVybiAwOworCisgICAgRG9jdW1lbnQqIGRvY3VtZW50ID0g
c3RhdGljX2Nhc3Q8RG9jdW1lbnQqPihjb250ZXh0KTsKKyAgICBpZiAoIWRvY3VtZW50KQorICAg
ICAgICByZXR1cm4gMDsKKworICAgIFBhZ2UqIHBhZ2UgPSBkb2N1bWVudC0+cGFnZSgpOworICAg
IGlmICghcGFnZSB8fCAhcGFnZS0+bWFpbkZyYW1lKCkpCisgICAgICAgIHJldHVybiAwOworCisg
ICAgcmV0dXJuIFFXZWJGcmFtZVByaXZhdGU6OmtpdChwYWdlLT5tYWluRnJhbWUoKSktPnBhZ2Uo
KTsKK30KKworUVdlYkZyYW1lKiBOb3RpZmljYXRpb25QcmVzZW50ZXJDbGllbnRRdDo6dG9GcmFt
ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0KQoreworICAgIGlmICghY29udGV4dCB8
fCBjb250ZXh0LT5pc1dvcmtlckNvbnRleHQoKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBE
b2N1bWVudCogZG9jdW1lbnQgPSBzdGF0aWNfY2FzdDxEb2N1bWVudCo+KGNvbnRleHQpOworICAg
IGlmICghZG9jdW1lbnQgfHwgIWRvY3VtZW50LT5mcmFtZSgpKQorICAgICAgICByZXR1cm4gMDsK
KworICAgIHJldHVybiBRV2ViRnJhbWVQcml2YXRlOjpraXQoZG9jdW1lbnQtPmZyYW1lKCkpOwor
fQorCiAjZW5kaWYgLy8gRU5BQkxFKE5PVElGSUNBVElPTlMpCiB9CiAKSW5kZXg6IFdlYktpdC9x
dC9XZWJDb3JlU3VwcG9ydC9Ob3RpZmljYXRpb25QcmVzZW50ZXJDbGllbnRRdC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9Ob3RpZmljYXRpb25QcmVzZW50ZXJDbGll
bnRRdC5oCShyZXZpc2lvbiA2MzEzNCkKKysrIFdlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9Ob3Rp
ZmljYXRpb25QcmVzZW50ZXJDbGllbnRRdC5oCSh3b3JraW5nIGNvcHkpCkBAIC00Miw2ICs0Miw5
IEBACiAjaW5jbHVkZSA8UU11bHRpSGFzaD4KICNpbmNsdWRlIDxRU3lzdGVtVHJheUljb24+CiAK
K2NsYXNzIFFXZWJGcmFtZTsKK2NsYXNzIFFXZWJQYWdlOworCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKIGNsYXNzIERvY3VtZW50OwpAQCAtOTAsMTIgKzkzLDEwIEBAIHB1YmxpYzoKIAogICAgIHZv
aWQgY2FuY2VsKE5vdGlmaWNhdGlvbldyYXBwZXIqKTsKIAotICAgIHZvaWQgYWxsb3dOb3RpZmlj
YXRpb25Gb3JPcmlnaW4oY29uc3QgUVN0cmluZyYgb3JpZ2luKTsKKyAgICB2b2lkIGFsbG93Tm90
aWZpY2F0aW9uRm9yRnJhbWUoUVdlYkZyYW1lKik7CiAKICAgICBzdGF0aWMgYm9vbCBkdW1wTm90
aWZpY2F0aW9uOwogCi0gICAgdm9pZCBzZXRSZWNlaXZlcihRT2JqZWN0KiByZWNlaXZlcikgeyBt
X3JlY2VpdmVyID0gcmVjZWl2ZXI7IH0KLQogICAgIHZvaWQgYWRkQ2xpZW50KCkgeyBtX2NsaWVu
dENvdW50Kys7IH0KICAgICB2b2lkIHJlbW92ZUNsaWVudCgpOwogICAgIHN0YXRpYyBOb3RpZmlj
YXRpb25QcmVzZW50ZXJDbGllbnRRdCogbm90aWZpY2F0aW9uUHJlc2VudGVyKCk7CkBAIC0xMDks
MTEgKzExMCwxNiBAQCBwcml2YXRlOgogICAgIHZvaWQgZGV0YWNoTm90aWZpY2F0aW9uKE5vdGlm
aWNhdGlvbiopOwogICAgIHZvaWQgZHVtcFJlcGxhY2VkSWRUZXh0KE5vdGlmaWNhdGlvbiopOwog
ICAgIHZvaWQgZHVtcFNob3dUZXh0KE5vdGlmaWNhdGlvbiopOworICAgIFFXZWJQYWdlKiB0b1Bh
Z2UoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCopOworICAgIFFXZWJGcmFtZSogdG9GcmFtZShTY3Jp
cHRFeGVjdXRpb25Db250ZXh0Kik7CiAKICAgICBpbnQgbV9jbGllbnRDb3VudDsKLSAgICBRSGFz
aDxRU3RyaW5nLCAgUUxpc3Q8UmVmUHRyPFZvaWRDYWxsYmFjaz4gPiA+IG1fcGVuZGluZ1Blcm1p
c3Npb25SZXF1ZXN0czsKKyAgICBzdHJ1Y3QgQ2FsbGJhY2tzSW5mbyB7CisgICAgICAgIFFXZWJG
cmFtZSogbV9mcmFtZTsKKyAgICAgICAgUUxpc3Q8UmVmUHRyPFZvaWRDYWxsYmFjaz4gPiBtX2Nh
bGxiYWNrczsKKyAgICB9OworICAgIFFIYXNoPFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCAgQ2Fs
bGJhY2tzSW5mbyA+IG1fcGVuZGluZ1Blcm1pc3Npb25SZXF1ZXN0czsKICAgICBOb3RpZmljYXRp
b25zUXVldWUgbV9ub3RpZmljYXRpb25zOwotICAgIFFPYmplY3QqIG1fcmVjZWl2ZXI7CiAgICAg
UXRQbGF0Zm9ybVBsdWdpbiBtX3BsYXRmb3JtUGx1Z2luOwogfTsKIApJbmRleDogV2ViS2l0VG9v
bHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdFRvb2xzL0NoYW5nZUxvZwkocmV2aXNp
b24gNjMxMzQpCisrKyBXZWJLaXRUb29scy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEs
MyArMSwzNCBAQAorMjAxMC0wNy0xMSAgWWFlbCBBaGFyb24gIDx5YWVsLmFoYXJvbkBub2tpYS5j
b20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgW1F0
XSBRdFdlYktpdCBuZWVkcyBwdWJsaWMgQVBJIGZvciBOb3RpZmljYXRpb25zLgorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDE0MTMKKworICAgICAgICBV
cGRhdGUgRHVtcFJlbmRlclRyZWUgYW5kIFF0VGVzdEJyb3dzZXIgdG8gdXNlIHRoZSBuZXcgQVBJ
LgorICAgICAgICBBZGQgbmV3IERSVCBBUEkgdG8gZmxhZyB0aGF0IG5vdGlmaWNhdGlvbnMgcGVy
bWlzc2lvbiByZXF1ZXN0cyBzaG91bGQgYmUgaWdub3JlZC4KKworICAgICAgICAqIER1bXBSZW5k
ZXJUcmVlL3F0L0R1bXBSZW5kZXJUcmVlUXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V2ViUGFn
ZTo6V2ViUGFnZSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJQYWdlOjpyZXF1ZXN0UGVybWlzc2lv
bik6CisgICAgICAgIChXZWJDb3JlOjpXZWJQYWdlOjpjaGVja1Blcm1pc3Npb24pOgorICAgICAg
ICAoV2ViQ29yZTo6V2ViUGFnZTo6Y2FuY2VsUmVxdWVzdHNGb3JQZXJtaXNzaW9uKToKKyAgICAg
ICAgKiBEdW1wUmVuZGVyVHJlZS9xdC9EdW1wUmVuZGVyVHJlZVF0Lmg6CisgICAgICAgICogRHVt
cFJlbmRlclRyZWUvcXQvTGF5b3V0VGVzdENvbnRyb2xsZXJRdC5jcHA6CisgICAgICAgIChMYXlv
dXRUZXN0Q29udHJvbGxlcjo6cmVzZXQpOgorICAgICAgICAoTGF5b3V0VGVzdENvbnRyb2xsZXI6
Omlnbm9yZURlc2t0b3BOb3RpZmljYXRpb25QZXJtaXNzaW9uUmVxdWVzdHMpOgorICAgICAgICAo
TGF5b3V0VGVzdENvbnRyb2xsZXI6OmNoZWNrRGVza3RvcE5vdGlmaWNhdGlvblBlcm1pc3Npb24p
OgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL3F0L0xheW91dFRlc3RDb250cm9sbGVyUXQuaDoK
KyAgICAgICAgKExheW91dFRlc3RDb250cm9sbGVyOjppZ25vcmVSZXFlc3RGb3JQZXJtaXNzaW9u
KToKKyAgICAgICAgKiBRdFRlc3RCcm93c2VyL21haW4uY3BwOgorICAgICAgICAoTGF1bmNoZXJX
aW5kb3c6OkxhdW5jaGVyV2luZG93KToKKyAgICAgICAgKiBRdFRlc3RCcm93c2VyL3dlYnBhZ2Uu
Y3BwOgorICAgICAgICAoV2ViUGFnZTo6V2ViUGFnZSk6CisgICAgICAgIChXZWJQYWdlOjpyZXF1
ZXN0UGVybWlzc2lvbik6CisgICAgICAgIChXZWJQYWdlOjpjaGVja1Blcm1pc3Npb24pOgorICAg
ICAgICAoV2ViUGFnZTo6Y2FuY2VsUmVxdWVzdHNGb3JQZXJtaXNzaW9uKToKKyAgICAgICAgKiBR
dFRlc3RCcm93c2VyL3dlYnBhZ2UuaDoKKwogMjAxMC0wNy0xMiAgTWFyaW8gU2FuY2hleiBQcmFk
YSAgPG1zYW5jaGV6QGlnYWxpYS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgWGFuIExvcGV6
LgpJbmRleDogV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvcXQvRHVtcFJlbmRlclRyZWVRdC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvcXQvRHVtcFJlbmRl
clRyZWVRdC5jcHAJKHJldmlzaW9uIDYzMTM0KQorKysgV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRy
ZWUvcXQvRHVtcFJlbmRlclRyZWVRdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzMCwxNiArMTMw
LDYgQEAgcHVibGljOgogfTsKICNlbmRpZgogCi12b2lkIGNoZWNrUGVybWlzc2lvbkNhbGxiYWNr
KFFPYmplY3QqIHJlY2VpdmVyLCBjb25zdCBRVXJsJiB1cmwsIE5vdGlmaWNhdGlvblBlcm1pc3Np
b24mIHBlcm1pc3Npb24pCi17Ci0gICAgcW9iamVjdF9jYXN0PER1bXBSZW5kZXJUcmVlKj4ocmVj
ZWl2ZXIpLT5jaGVja1Blcm1pc3Npb24odXJsLCBwZXJtaXNzaW9uKTsKLX0KLQotdm9pZCByZXF1
ZXN0UGVybWlzc2lvbkNhbGxiYWNrKFFPYmplY3QqIHJlY2VpdmVyLCBjb25zdCBRU3RyaW5nJiBv
cmlnaW4pCi17Ci0gICAgcW9iamVjdF9jYXN0PER1bXBSZW5kZXJUcmVlKj4ocmVjZWl2ZXIpLT5y
ZXF1ZXN0UGVybWlzc2lvbihvcmlnaW4pOwotfQotCiBXZWJQYWdlOjpXZWJQYWdlKFFPYmplY3Qq
IHBhcmVudCwgRHVtcFJlbmRlclRyZWUqIGRydCkKICAgICA6IFFXZWJQYWdlKHBhcmVudCkKICAg
ICAsIG1fd2ViSW5zcGVjdG9yKDApCkBAIC0xNjcsMTAgKzE1Nyw5IEBAIFdlYlBhZ2U6OldlYlBh
Z2UoUU9iamVjdCogcGFyZW50LCBEdW1wUmUKICAgICBzZXROZXR3b3JrQWNjZXNzTWFuYWdlciht
X2RydC0+bmV0d29ya0FjY2Vzc01hbmFnZXIoKSk7CiAgICAgc2V0UGx1Z2luRmFjdG9yeShuZXcg
VGVzdFBsdWdpbih0aGlzKSk7CiAKLSAgICBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6c2V0Tm90
aWZpY2F0aW9uc1JlY2VpdmVyKG1fZHJ0KTsKLSAgICBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6
c2V0Q2hlY2tQZXJtaXNzaW9uRnVuY3Rpb24oY2hlY2tQZXJtaXNzaW9uQ2FsbGJhY2spOwotICAg
IER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjpzZXRSZXF1ZXN0UGVybWlzc2lvbkZ1bmN0aW9uKHJl
cXVlc3RQZXJtaXNzaW9uQ2FsbGJhY2spOwotCisgICAgY29ubmVjdCh0aGlzLCBTSUdOQUwocmVx
dWVzdFBlcm1pc3Npb25Gcm9tVXNlcihRV2ViRnJhbWUqLCBRV2ViUGFnZTo6UGVybWlzc2lvbkRv
bWFpbikpLCB0aGlzLCBTTE9UKHJlcXVlc3RQZXJtaXNzaW9uKFFXZWJGcmFtZSosIFFXZWJQYWdl
OjpQZXJtaXNzaW9uRG9tYWluKSkpOworICAgIGNvbm5lY3QodGhpcywgU0lHTkFMKGNoZWNrUGVy
bWlzc2lvbkZyb21Vc2VyKFFXZWJGcmFtZSosIFFXZWJQYWdlOjpQZXJtaXNzaW9uRG9tYWluLCBR
V2ViUGFnZTo6UGVybWlzc2lvblBvbGljeSYpKSwgdGhpcywgU0xPVChjaGVja1Blcm1pc3Npb24o
UVdlYkZyYW1lKiwgUVdlYlBhZ2U6OlBlcm1pc3Npb25Eb21haW4sIFFXZWJQYWdlOjpQZXJtaXNz
aW9uUG9saWN5JikpKTsKKyAgICBjb25uZWN0KHRoaXMsIFNJR05BTChjYW5jZWxSZXF1ZXN0c0Zv
clBlcm1pc3Npb25Gcm9tVXNlcihRV2ViRnJhbWUqLCBRV2ViUGFnZTo6UGVybWlzc2lvbkRvbWFp
bikpLCB0aGlzLCBTTE9UKGNhbmNlbFJlcXVlc3RzRm9yUGVybWlzc2lvbkZyb21Vc2VyKFFXZWJG
cmFtZSosIFFXZWJQYWdlOjpQZXJtaXNzaW9uRG9tYWluKSkpOwogfQogCiBXZWJQYWdlOjp+V2Vi
UGFnZSgpCkBAIC0yMjgsNiArMjE3LDM2IEBAIHZvaWQgV2ViUGFnZTo6amF2YVNjcmlwdEFsZXJ0
KFFXZWJGcmFtZSoKICAgICBmcHJpbnRmKHN0ZG91dCwgIkFMRVJUOiAlc1xuIiwgbWVzc2FnZS50
b1V0ZjgoKS5jb25zdERhdGEoKSk7CiB9CiAKK3ZvaWQgV2ViUGFnZTo6cmVxdWVzdFBlcm1pc3Np
b24oUVdlYkZyYW1lKiBmcmFtZSwgUVdlYlBhZ2U6OlBlcm1pc3Npb25Eb21haW4gZG9tYWluKQor
eworICAgIHN3aXRjaCAoZG9tYWluKSB7CisgICAgY2FzZSBOb3RpZmljYXRpb25zUGVybWlzc2lv
bkRvbWFpbjoKKyAgICAgICAgaWYgKCFtX2RydC0+bGF5b3V0VGVzdENvbnRyb2xsZXIoKS0+aWdu
b3JlUmVxZXN0Rm9yUGVybWlzc2lvbigpKQorICAgICAgICAgICAgc2V0VXNlclBlcm1pc3Npb24o
ZnJhbWUsIGRvbWFpbiwgUGVybWlzc2lvbkdyYW50ZWQpOworICAgICAgICBicmVhazsKKyAgICBk
ZWZhdWx0OgorICAgICAgICBicmVhazsKKyAgICB9Cit9CisKK3ZvaWQgV2ViUGFnZTo6Y2hlY2tQ
ZXJtaXNzaW9uKFFXZWJGcmFtZSogZnJhbWUsIFFXZWJQYWdlOjpQZXJtaXNzaW9uRG9tYWluIGRv
bWFpbiwgUVdlYlBhZ2U6OlBlcm1pc3Npb25Qb2xpY3kmIHBvbGljeSkKK3sKKyAgICBzd2l0Y2gg
KGRvbWFpbikgeworICAgIGNhc2UgTm90aWZpY2F0aW9uc1Blcm1pc3Npb25Eb21haW46CisgICAg
ICAgIHsKKyAgICAgICAgUVVybCB1cmwgPSBmcmFtZS0+dXJsKCk7CisgICAgICAgIHBvbGljeSA9
IG1fZHJ0LT5sYXlvdXRUZXN0Q29udHJvbGxlcigpLT5jaGVja0Rlc2t0b3BOb3RpZmljYXRpb25Q
ZXJtaXNzaW9uKHVybC5zY2hlbWUoKSArICI6Ly8iICsgdXJsLmhvc3QoKSkgPyBQZXJtaXNzaW9u
R3JhbnRlZCA6IFBlcm1pc3Npb25EZW5pZWQ7CisgICAgICAgIGJyZWFrOworICAgICAgICB9Cisg
ICAgZGVmYXVsdDoKKyAgICAgICAgYnJlYWs7CisgICAgfQorfQorCit2b2lkIFdlYlBhZ2U6OmNh
bmNlbFJlcXVlc3RzRm9yUGVybWlzc2lvbihRV2ViRnJhbWUqLCBRV2ViUGFnZTo6UGVybWlzc2lv
bkRvbWFpbikKK3sKK30KKwogc3RhdGljIFFTdHJpbmcgdXJsU3VpdGFibGVGb3JUZXN0UmVzdWx0
KGNvbnN0IFFTdHJpbmcmIHVybCkKIHsKICAgICBpZiAodXJsLmlzRW1wdHkoKSB8fCAhdXJsLnN0
YXJ0c1dpdGgoUUxhdGluMVN0cmluZygiZmlsZTovLyIpKSkKQEAgLTk5MSwxNiArMTAxMCw2IEBA
IHZvaWQgRHVtcFJlbmRlclRyZWU6OnN3aXRjaEZvY3VzKGJvb2wgZm8KIAogfQogCi12b2lkIER1
bXBSZW5kZXJUcmVlOjpjaGVja1Blcm1pc3Npb24oY29uc3QgUVVybCYgdXJsLCBOb3RpZmljYXRp
b25QZXJtaXNzaW9uJiBwZXJtaXNzaW9uKQotewotICAgIHBlcm1pc3Npb24gPSBtX2NvbnRyb2xs
ZXItPmNoZWNrRGVza3RvcE5vdGlmaWNhdGlvblBlcm1pc3Npb24odXJsLnNjaGVtZSgpICsgIjov
LyIgKyB1cmwuaG9zdCgpKSA/IE5vdGlmaWNhdGlvbkFsbG93ZWQgOiBOb3RpZmljYXRpb25EZW5p
ZWQ7Ci19Ci0KLXZvaWQgRHVtcFJlbmRlclRyZWU6OnJlcXVlc3RQZXJtaXNzaW9uKGNvbnN0IFFT
dHJpbmcmIG9yaWdpbikKLXsKLSAgICBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6YWxsb3dOb3Rp
ZmljYXRpb25Gb3JPcmlnaW4ob3JpZ2luKTsKLX0KLQogI2lmIGRlZmluZWQoUV9XU19YMTEpCiB2
b2lkIER1bXBSZW5kZXJUcmVlOjppbml0aWFsaXplRm9udHMoKQogewpJbmRleDogV2ViS2l0VG9v
bHMvRHVtcFJlbmRlclRyZWUvcXQvRHVtcFJlbmRlclRyZWVRdC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL3F0L0R1bXBSZW5kZXJUcmVlUXQuaAkocmV2aXNpb24g
NjMxMzQpCisrKyBXZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS9xdC9EdW1wUmVuZGVyVHJlZVF0
LmgJKHdvcmtpbmcgY29weSkKQEAgLTExOSw4ICsxMTksNiBAQCBwdWJsaWMgUV9TTE9UUzoKICAg
ICB2b2lkIGR1bXBEYXRhYmFzZVF1b3RhKFFXZWJGcmFtZSogZnJhbWUsIGNvbnN0IFFTdHJpbmcm
IGRiTmFtZSk7CiAgICAgdm9pZCBzdGF0dXNCYXJNZXNzYWdlKGNvbnN0IFFTdHJpbmcmIG1lc3Nh
Z2UpOwogICAgIHZvaWQgd2luZG93Q2xvc2VSZXF1ZXN0ZWQoKTsKLSAgICB2b2lkIGNoZWNrUGVy
bWlzc2lvbihjb25zdCBRVXJsJiwgTm90aWZpY2F0aW9uUGVybWlzc2lvbiYpOwotICAgIHZvaWQg
cmVxdWVzdFBlcm1pc3Npb24oY29uc3QgUVN0cmluZyYpOwogCiBRX1NJR05BTFM6CiAgICAgdm9p
ZCBxdWl0KCk7CkBAIC0xOTMsNiArMTkxLDkgQEAgcHVibGljOgogcHVibGljIHNsb3RzOgogICAg
IGJvb2wgc2hvdWxkSW50ZXJydXB0SmF2YVNjcmlwdCgpIHsgcmV0dXJuIGZhbHNlOyB9CiAgICAg
Ym9vbCBhbGxvd0dlb2xvY2F0aW9uUmVxdWVzdChRV2ViRnJhbWUgKmZyYW1lKTsKKyAgICB2b2lk
IHJlcXVlc3RQZXJtaXNzaW9uKFFXZWJGcmFtZSogZnJhbWUsIFFXZWJQYWdlOjpQZXJtaXNzaW9u
RG9tYWluIGRvbWFpbik7CisgICAgdm9pZCBjaGVja1Blcm1pc3Npb24oUVdlYkZyYW1lKiBmcmFt
ZSwgUVdlYlBhZ2U6OlBlcm1pc3Npb25Eb21haW4gZG9tYWluLCBRV2ViUGFnZTo6UGVybWlzc2lv
blBvbGljeSYgcG9saWN5KTsKKyAgICB2b2lkIGNhbmNlbFJlcXVlc3RzRm9yUGVybWlzc2lvbihR
V2ViRnJhbWUqIGZyYW1lLCBRV2ViUGFnZTo6UGVybWlzc2lvbkRvbWFpbiBkb21haW4pOwogCiBw
cm90ZWN0ZWQ6CiAgICAgYm9vbCBhY2NlcHROYXZpZ2F0aW9uUmVxdWVzdChRV2ViRnJhbWUqIGZy
YW1lLCBjb25zdCBRTmV0d29ya1JlcXVlc3QmIHJlcXVlc3QsIE5hdmlnYXRpb25UeXBlIHR5cGUp
OwpJbmRleDogV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvcXQvTGF5b3V0VGVzdENvbnRyb2xs
ZXJRdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvcXQvTGF5
b3V0VGVzdENvbnRyb2xsZXJRdC5jcHAJKHJldmlzaW9uIDYzMTM0KQorKysgV2ViS2l0VG9vbHMv
RHVtcFJlbmRlclRyZWUvcXQvTGF5b3V0VGVzdENvbnRyb2xsZXJRdC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTY3LDYgKzY3LDcgQEAgdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6cmVzZXQoKQog
ICAgIG1fZ2xvYmFsRmxhZyA9IGZhbHNlOwogICAgIG1fdXNlclN0eWxlU2hlZXRFbmFibGVkID0g
ZmFsc2U7CiAgICAgbV9kZXNrdG9wTm90aWZpY2F0aW9uQWxsb3dlZE9yaWdpbnMuY2xlYXIoKTsK
KyAgICBtX2lnbm9yZURlc2t0b3BOb3RpZmljYXRpb24gPSBmYWxzZTsKIAogICAgIER1bXBSZW5k
ZXJUcmVlU3VwcG9ydFF0OjpkdW1wRWRpdGluZ0NhbGxiYWNrcyhmYWxzZSk7CiAgICAgRHVtcFJl
bmRlclRyZWVTdXBwb3J0UXQ6OmR1bXBGcmFtZUxvYWRlcihmYWxzZSk7CkBAIC0xOTIsOSArMTkz
LDE0IEBAIHZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmdyYW50RGVza3RvcE4KICAgICBtX2Rl
c2t0b3BOb3RpZmljYXRpb25BbGxvd2VkT3JpZ2lucy5hcHBlbmQob3JpZ2luKTsKIH0KIAordm9p
ZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6aWdub3JlRGVza3RvcE5vdGlmaWNhdGlvblBlcm1pc3Np
b25SZXF1ZXN0cygpCit7CisgICAgbV9pZ25vcmVEZXNrdG9wTm90aWZpY2F0aW9uID0gdHJ1ZTsK
K30KKwogYm9vbCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6Y2hlY2tEZXNrdG9wTm90aWZpY2F0aW9u
UGVybWlzc2lvbihjb25zdCBRU3RyaW5nJiBvcmlnaW4pCiB7Ci0gICAgcmV0dXJuIG1fZGVza3Rv
cE5vdGlmaWNhdGlvbkFsbG93ZWRPcmlnaW5zLmNvbnRhaW5zKG9yaWdpbik7CisgICAgcmV0dXJu
ICFtX2lnbm9yZURlc2t0b3BOb3RpZmljYXRpb24gJiYgbV9kZXNrdG9wTm90aWZpY2F0aW9uQWxs
b3dlZE9yaWdpbnMuY29udGFpbnMob3JpZ2luKTsKIH0KIAogdm9pZCBMYXlvdXRUZXN0Q29udHJv
bGxlcjo6ZGlzcGxheSgpCkluZGV4OiBXZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS9xdC9MYXlv
dXRUZXN0Q29udHJvbGxlclF0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0VG9vbHMvRHVtcFJlbmRl
clRyZWUvcXQvTGF5b3V0VGVzdENvbnRyb2xsZXJRdC5oCShyZXZpc2lvbiA2MzEzNCkKKysrIFdl
YktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL3F0L0xheW91dFRlc3RDb250cm9sbGVyUXQuaAkod29y
a2luZyBjb3B5KQpAQCAtNzAsNiArNzAsNyBAQCBwdWJsaWM6CiAgICAgYm9vbCBjYW5PcGVuV2lu
ZG93cygpIGNvbnN0IHsgcmV0dXJuIG1fY2FuT3BlbldpbmRvd3M7IH0KICAgICBib29sIHNob3Vs
ZER1bXBUaXRsZUNoYW5nZXMoKSBjb25zdCB7IHJldHVybiBtX2R1bXBUaXRsZUNoYW5nZXM7IH0K
ICAgICBib29sIHdhaXRGb3JQb2xpY3koKSBjb25zdCB7IHJldHVybiBtX3dhaXRGb3JQb2xpY3k7
IH0KKyAgICBib29sIGlnbm9yZVJlcWVzdEZvclBlcm1pc3Npb24oKSBjb25zdCB7IHJldHVybiBt
X2lnbm9yZURlc2t0b3BOb3RpZmljYXRpb247IH0KIAogICAgIHZvaWQgcmVzZXQoKTsKIApAQCAt
MTE5LDYgKzEyMCw3IEBAIHB1YmxpYyBzbG90czoKICAgICB2b2lkIHNldENsb3NlUmVtYWluaW5n
V2luZG93c1doZW5Db21wbGV0ZShib29sID0gZmFsc2UpIHt9CiAgICAgaW50IHdpbmRvd0NvdW50
KCk7CiAgICAgdm9pZCBncmFudERlc2t0b3BOb3RpZmljYXRpb25QZXJtaXNzaW9uKGNvbnN0IFFT
dHJpbmcmIG9yaWdpbik7CisgICAgdm9pZCBpZ25vcmVEZXNrdG9wTm90aWZpY2F0aW9uUGVybWlz
c2lvblJlcXVlc3RzKCk7CiAgICAgYm9vbCBjaGVja0Rlc2t0b3BOb3RpZmljYXRpb25QZXJtaXNz
aW9uKGNvbnN0IFFTdHJpbmcmIG9yaWdpbik7CiAgICAgdm9pZCBkaXNwbGF5KCk7CiAgICAgdm9p
ZCBjbGVhckJhY2tGb3J3YXJkTGlzdCgpOwpAQCAtMjUwLDYgKzI1Miw3IEBAIHByaXZhdGU6CiAg
ICAgV2ViQ29yZTo6RHVtcFJlbmRlclRyZWUqIG1fZHJ0OwogICAgIFFXZWJIaXN0b3J5KiBtX3dl
Ykhpc3Rvcnk7CiAgICAgUVN0cmluZ0xpc3QgbV9kZXNrdG9wTm90aWZpY2F0aW9uQWxsb3dlZE9y
aWdpbnM7CisgICAgYm9vbCBtX2lnbm9yZURlc2t0b3BOb3RpZmljYXRpb247CiB9OwogCiAjZW5k
aWYgLy8gTGF5b3V0VGVzdENvbnRyb2xsZXJRdF9oCkluZGV4OiBXZWJLaXRUb29scy9RdFRlc3RC
cm93c2VyL21haW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdFRvb2xzL1F0VGVzdEJyb3dzZXIv
bWFpbi5jcHAJKHJldmlzaW9uIDYzMTM0KQorKysgV2ViS2l0VG9vbHMvUXRUZXN0QnJvd3Nlci9t
YWluLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTIsMjkgKzkyLDYgQEAgc3RhdGljIGJvb2wgZ1Vz
ZUZyYW1lRmxhdHRlbmluZyA9IGZhbHNlOwogc3RhdGljIGJvb2wgZ1VzZVFHTFdpZGdldFZpZXdw
b3J0ID0gZmFsc2U7CiAjZW5kaWYKIAotY2xhc3MgTm90aWZpY2F0aW9uc1Blcm1pc3Npb25Db250
cm9sbGVyIDogcHVibGljIFFPYmplY3QgewotICAgIFFfT0JKRUNUCi1wdWJsaWM6Ci0gICAgTm90
aWZpY2F0aW9uc1Blcm1pc3Npb25Db250cm9sbGVyKFFPYmplY3QqIHBhcmVudCkgOiBRT2JqZWN0
KHBhcmVudCkgCi0gICAgewotICAgICAgICBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6c2V0Tm90
aWZpY2F0aW9uc1JlY2VpdmVyKHRoaXMpOwotICAgICAgICBEdW1wUmVuZGVyVHJlZVN1cHBvcnRR
dDo6c2V0Q2hlY2tQZXJtaXNzaW9uRnVuY3Rpb24oY2hlY2tQZXJtaXNzaW9uKTsKLSAgICAgICAg
RHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OnNldFJlcXVlc3RQZXJtaXNzaW9uRnVuY3Rpb24ocmVx
dWVzdFBlcm1pc3Npb24pOwotICAgIH0KLQotICAgIHN0YXRpYyB2b2lkIGNoZWNrUGVybWlzc2lv
bihRT2JqZWN0KiwgY29uc3QgUVVybCYsIE5vdGlmaWNhdGlvblBlcm1pc3Npb24mIHBlcm1pc3Np
b24pCi0gICAgewotICAgICAgICBwZXJtaXNzaW9uID0gTm90aWZpY2F0aW9uQWxsb3dlZDsKLSAg
ICB9Ci0KLSAgICBzdGF0aWMgdm9pZCByZXF1ZXN0UGVybWlzc2lvbihRT2JqZWN0KiwgY29uc3Qg
UVN0cmluZyYgb3JpZ2luKQotICAgIHsKLSAgICAgICAgRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6
OmFsbG93Tm90aWZpY2F0aW9uRm9yT3JpZ2luKG9yaWdpbik7Ci0gICAgfQotfTsKLQotTm90aWZp
Y2F0aW9uc1Blcm1pc3Npb25Db250cm9sbGVyKiBub3RpZmljYXRpb25zUGVybWlzc2lvbkNvbnRy
b2xsZXIgPSAwOwotCiBjbGFzcyBMYXVuY2hlcldpbmRvdyA6IHB1YmxpYyBNYWluV2luZG93IHsK
ICAgICBRX09CSkVDVAogCkBAIC0yMzMsOCArMjEwLDYgQEAgTGF1bmNoZXJXaW5kb3c6OkxhdW5j
aGVyV2luZG93KExhdW5jaGVyVwogICAgIH0KIAogICAgIGNyZWF0ZUNocm9tZSgpOwotICAgIGlm
ICghbm90aWZpY2F0aW9uc1Blcm1pc3Npb25Db250cm9sbGVyKQotICAgICAgICBub3RpZmljYXRp
b25zUGVybWlzc2lvbkNvbnRyb2xsZXIgPSBuZXcgTm90aWZpY2F0aW9uc1Blcm1pc3Npb25Db250
cm9sbGVyKFFDb3JlQXBwbGljYXRpb246Omluc3RhbmNlKCkpOwogfQogCiBMYXVuY2hlcldpbmRv
dzo6fkxhdW5jaGVyV2luZG93KCkKSW5kZXg6IFdlYktpdFRvb2xzL1F0VGVzdEJyb3dzZXIvd2Vi
cGFnZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0VG9vbHMvUXRUZXN0QnJvd3Nlci93ZWJwYWdl
LmNwcAkocmV2aXNpb24gNjMxMzQpCisrKyBXZWJLaXRUb29scy9RdFRlc3RCcm93c2VyL3dlYnBh
Z2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OCw2ICs0OCw5IEBAIFdlYlBhZ2U6OldlYlBhZ2Uo
UU9iamVjdCogcGFyZW50KQogCiAgICAgY29ubmVjdChuZXR3b3JrQWNjZXNzTWFuYWdlcigpLCBT
SUdOQUwoYXV0aGVudGljYXRpb25SZXF1aXJlZChRTmV0d29ya1JlcGx5KiwgUUF1dGhlbnRpY2F0
b3IqKSksCiAgICAgICAgICAgICB0aGlzLCBTTE9UKGF1dGhlbnRpY2F0aW9uUmVxdWlyZWQoUU5l
dHdvcmtSZXBseSosIFFBdXRoZW50aWNhdG9yKikpKTsKKyAgICBjb25uZWN0KHRoaXMsIFNJR05B
TChyZXF1ZXN0UGVybWlzc2lvbkZyb21Vc2VyKFFXZWJGcmFtZSosIFFXZWJQYWdlOjpQZXJtaXNz
aW9uRG9tYWluKSksIHRoaXMsIFNMT1QocmVxdWVzdFBlcm1pc3Npb24oUVdlYkZyYW1lKiwgUVdl
YlBhZ2U6OlBlcm1pc3Npb25Eb21haW4pKSk7CisgICAgY29ubmVjdCh0aGlzLCBTSUdOQUwoY2hl
Y2tQZXJtaXNzaW9uRnJvbVVzZXIoUVdlYkZyYW1lKiwgUVdlYlBhZ2U6OlBlcm1pc3Npb25Eb21h
aW4sIFFXZWJQYWdlOjpQZXJtaXNzaW9uUG9saWN5JikpLCB0aGlzLCBTTE9UKGNoZWNrUGVybWlz
c2lvbihRV2ViRnJhbWUqLCBRV2ViUGFnZTo6UGVybWlzc2lvbkRvbWFpbiwgUVdlYlBhZ2U6OlBl
cm1pc3Npb25Qb2xpY3kmKSkpOworICAgIGNvbm5lY3QodGhpcywgU0lHTkFMKGNhbmNlbFJlcXVl
c3RzRm9yUGVybWlzc2lvbihRV2ViRnJhbWUqLCBRV2ViUGFnZTo6UGVybWlzc2lvbkRvbWFpbikp
LCB0aGlzLCBTTE9UKGNhbmNlbFJlcXVlc3RzRm9yUGVybWlzc2lvbihRV2ViRnJhbWUqLCBRV2Vi
UGFnZTo6UGVybWlzc2lvbkRvbWFpbikpKTsKIH0KIAogdm9pZCBXZWJQYWdlOjphcHBseVByb3h5
KCkKQEAgLTE2MiwzICsxNjUsMjMgQEAgdm9pZCBXZWJQYWdlOjphdXRoZW50aWNhdGlvblJlcXVp
cmVkKFFOZQogCiAgICAgZGVsZXRlIGRpYWxvZzsKIH0KKwordm9pZCBXZWJQYWdlOjpyZXF1ZXN0
UGVybWlzc2lvbihRV2ViRnJhbWUqIGZyYW1lLCBRV2ViUGFnZTo6UGVybWlzc2lvbkRvbWFpbiBk
b21haW4pCit7CisgICAgc2V0VXNlclBlcm1pc3Npb24oZnJhbWUsIGRvbWFpbiwgUGVybWlzc2lv
bkdyYW50ZWQpOworfQorCit2b2lkIFdlYlBhZ2U6OmNoZWNrUGVybWlzc2lvbihRV2ViRnJhbWUq
IGZyYW1lLCBRV2ViUGFnZTo6UGVybWlzc2lvbkRvbWFpbiBkb21haW4sIFFXZWJQYWdlOjpQZXJt
aXNzaW9uUG9saWN5JiBwb2xpY3kpCit7CisgICAgc3dpdGNoIChkb21haW4pIHsKKyAgICBjYXNl
IE5vdGlmaWNhdGlvbnNQZXJtaXNzaW9uRG9tYWluOgorICAgICAgICBwb2xpY3kgPSBQZXJtaXNz
aW9uR3JhbnRlZDsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgYnJlYWs7
CisgICAgfQorfQorCit2b2lkIFdlYlBhZ2U6OmNhbmNlbFJlcXVlc3RzRm9yUGVybWlzc2lvbihR
V2ViRnJhbWUqLCBRV2ViUGFnZTo6UGVybWlzc2lvbkRvbWFpbikKK3sKK30KSW5kZXg6IFdlYktp
dFRvb2xzL1F0VGVzdEJyb3dzZXIvd2VicGFnZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdFRvb2xz
L1F0VGVzdEJyb3dzZXIvd2VicGFnZS5oCShyZXZpc2lvbiA2MzEzNCkKKysrIFdlYktpdFRvb2xz
L1F0VGVzdEJyb3dzZXIvd2VicGFnZS5oCSh3b3JraW5nIGNvcHkpCkBAIC01Nyw2ICs1Nyw5IEBA
IHB1YmxpYyBzbG90czoKICAgICB2b2lkIHNldFVzZXJBZ2VudChjb25zdCBRU3RyaW5nJiB1YSkg
eyBtX3VzZXJBZ2VudCA9IHVhOyB9CiAgICAgYm9vbCBzaG91bGRJbnRlcnJ1cHRKYXZhU2NyaXB0
KCk7CiAgICAgdm9pZCBhdXRoZW50aWNhdGlvblJlcXVpcmVkKFFOZXR3b3JrUmVwbHkqLCBRQXV0
aGVudGljYXRvciopOworICAgIHZvaWQgcmVxdWVzdFBlcm1pc3Npb24oUVdlYkZyYW1lKiBmcmFt
ZSwgUVdlYlBhZ2U6OlBlcm1pc3Npb25Eb21haW4gZG9tYWluKTsKKyAgICB2b2lkIGNoZWNrUGVy
bWlzc2lvbihRV2ViRnJhbWUqIGZyYW1lLCBRV2ViUGFnZTo6UGVybWlzc2lvbkRvbWFpbiBkb21h
aW4sIFFXZWJQYWdlOjpQZXJtaXNzaW9uUG9saWN5JiBwb2xpY3kpOworICAgIHZvaWQgY2FuY2Vs
UmVxdWVzdHNGb3JQZXJtaXNzaW9uKFFXZWJGcmFtZSogZnJhbWUsIFFXZWJQYWdlOjpQZXJtaXNz
aW9uRG9tYWluIGRvbWFpbik7CiAKIHByaXZhdGU6CiAgICAgdm9pZCBhcHBseVByb3h5KCk7Cklu
ZGV4OiBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvQ2hh
bmdlTG9nCShyZXZpc2lvbiA2MzEzNCkKKysrIExheW91dFRlc3RzL0NoYW5nZUxvZwkod29ya2lu
ZyBjb3B5KQpAQCAtMSwzICsxLDIwIEBACisyMDEwLTA3LTExICBZYWVsIEFoYXJvbiAgPHlhZWwu
YWhhcm9uQG5va2lhLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICBbUXRdIFF0V2ViS2l0IG5lZWRzIHB1YmxpYyBBUEkgZm9yIE5vdGlmaWNhdGlv
bnMuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00MTQx
MworCisgICAgICAgIEFkZCBhIERSVCBBUEkgdG8gc2V0IGEgZmxhZyBzbyB0aGF0IG5vdGlmaWNh
dGlvbiByZXF1ZXN0cyBhcmUgaWdub3JlZCwKKyAgICAgICAgYW5kIGFkZCBhIHRlc3QgZm9yIGNh
bmNlbGxpbmcgYSBwZW5kaW5nIG5vdGlmaWNhdGlvbiByZXF1ZXN0LgorICAgICAgICBOZXcgQVBJ
IGFuZCB0ZXN0IGFyZSBkaXNhYmxlZCBmb3IgQ2hyb21pdW0gcG9ydC4KKworICAgICAgICAqIGZh
c3Qvbm90aWZpY2F0aW9ucy9ub3RpZmljYXRpb25zLWNhbmNlbC1yZXF1ZXN0LXBlcm1pc3Npb24t
ZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L25vdGlmaWNhdGlvbnMvbm90aWZp
Y2F0aW9ucy1jYW5jZWwtcmVxdWVzdC1wZXJtaXNzaW9uLmh0bWw6IEFkZGVkLgorICAgICAgICAq
IGZhc3Qvbm90aWZpY2F0aW9ucy9yZXNvdXJjZXM6IEFkZGVkLgorICAgICAgICAqIGZhc3Qvbm90
aWZpY2F0aW9ucy9yZXNvdXJjZXMvbm90aWZpY2F0aW9ucy1jYW5jZWwtcmVxdWVzdC1wZXJtaXNz
aW9uLmh0bWw6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL2Nocm9taXVtL3Rlc3RfZXhwZWN0
YXRpb25zLnR4dDoKKwogMjAxMC0wNy0xMiAgWmhlbnlhbyBNbyAgPHptb0Bnb29nbGUuY29tPgog
CiAgICAgICAgIFJldmlld2VkIGJ5IERhcmluIEZpc2hlci4KSW5kZXg6IExheW91dFRlc3RzL2Zh
c3Qvbm90aWZpY2F0aW9ucy9ub3RpZmljYXRpb25zLWNhbmNlbC1yZXF1ZXN0LXBlcm1pc3Npb24t
ZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3Qvbm90aWZpY2F0aW9u
cy9ub3RpZmljYXRpb25zLWNhbmNlbC1yZXF1ZXN0LXBlcm1pc3Npb24tZXhwZWN0ZWQudHh0CShy
ZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9ub3RpZmljYXRpb25zL25vdGlmaWNhdGlv
bnMtY2FuY2VsLXJlcXVlc3QtcGVybWlzc2lvbi1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCkBA
IC0wLDAgKzEsNSBAQAorREVTS1RPUCBOT1RJRklDQVRJT04gUEVSTUlTU0lPTiBSRVFVRVNURUQ6
IGZpbGU6Ly8KK0RFU0tUT1AgTk9USUZJQ0FUSU9OIFBFUk1JU1NJT04gUkVRVUVTVCBDQU5DRUxM
RUQ6IGZpbGU6Ly8KK1JlcXVlc3RpbmcgYW5kIGNhbmNlbGxpbmcgbm90aWZpY2F0aW9uIHBlcm1p
c3Npb24uLi4KKworUGFzcyBpZiBub3RpZmljYXRpb24gaXMgY2FuY2VsbGVkCkluZGV4OiBMYXlv
dXRUZXN0cy9mYXN0L25vdGlmaWNhdGlvbnMvbm90aWZpY2F0aW9ucy1jYW5jZWwtcmVxdWVzdC1w
ZXJtaXNzaW9uLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9ub3RpZmljYXRp
b25zL25vdGlmaWNhdGlvbnMtY2FuY2VsLXJlcXVlc3QtcGVybWlzc2lvbi5odG1sCShyZXZpc2lv
biAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9ub3RpZmljYXRpb25zL25vdGlmaWNhdGlvbnMtY2Fu
Y2VsLXJlcXVlc3QtcGVybWlzc2lvbi5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQ0IEBA
Cis8aHRtbD4KKzxoZWFkPgorICAgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KKwor
ICAgICAgICAvLyBUaW1lb3V0IGlzIHRvIGVuc3VyZSB0aGF0IHRoZSBpZnJhbWUgd2FzIHJlbW92
ZWQuCisgICAgICAgIHNldFRpbWVvdXQoaXNEb25lLDUwMCk7CisKKyAgICAgICAgZnVuY3Rpb24g
bG9nKG1lc3NhZ2UpCisgICAgICAgIHsKKyAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRC
eUlkKCJyZXN1bHQiKS5pbm5lckhUTUwgKz0gbWVzc2FnZSArICI8YnI+IjsKKyAgICAgICAgfQor
ICAgICAgICAKKyAgICAgICAgZnVuY3Rpb24gcnVuVGVzdHMoKQorICAgICAgICB7CisgICAgICAg
ICAgICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKSB7CisgICAgICAgICAgICAgICAg
bGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4dCgpOworICAgICAgICAgICAgICAgIGxheW91
dFRlc3RDb250cm9sbGVyLndhaXRVbnRpbERvbmUoKTsKKyAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgaWYgKCF3aW5kb3cud2Via2l0Tm90aWZpY2F0aW9ucykgeworICAgICAgICAgICAgICAg
IGxvZygiRkFJTDogTm8gd2Via2l0Tm90aWZpY2F0aW9ucyBpbnRlcmZhY2UhIik7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlk
KCJ0ZXN0IikuaW5uZXJIVE1MPSJQYXNzIGlmIG5vdGlmaWNhdGlvbiBpcyBjYW5jZWxsZWQiOwor
ICAgICAgICB9CisKKyAgICAgICAgZnVuY3Rpb24gaXNEb25lKCkKKyAgICAgICAgeworICAgICAg
ICAgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikgeworICAgICAgICAgICAgICAg
IGxheW91dFRlc3RDb250cm9sbGVyLm5vdGlmeURvbmUoKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorCisgICAgPC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keSBvbmxvYWQ9InJ1blRlc3RzKCk7
Ij4KKyAgICA8cD5SZXF1ZXN0aW5nIGFuZCBjYW5jZWxsaW5nIG5vdGlmaWNhdGlvbiBwZXJtaXNz
aW9uLi4uPC9wPgorICAgIAorPGRpdiBpZD0icmVzdWx0Ij48L2Rpdj4KKzxkaXYgaWQ9InRlc3Qi
PgorPGlmcmFtZSBzcmM9InJlc291cmNlcy9ub3RpZmljYXRpb25zLWNhbmNlbC1yZXF1ZXN0LXBl
cm1pc3Npb24uaHRtbCIgd2lkdGg9ODAwIGhlaWdodD04MDA+PC9pZnJhbWU+Cis8L2Rpdj4KKzwv
Ym9keT4KKzwvaHRtbD4KSW5kZXg6IExheW91dFRlc3RzL2Zhc3Qvbm90aWZpY2F0aW9ucy9yZXNv
dXJjZXMvbm90aWZpY2F0aW9ucy1jYW5jZWwtcmVxdWVzdC1wZXJtaXNzaW9uLmh0bWwKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9ub3RpZmljYXRpb25zL3Jlc291cmNlcy9ub3RpZmlj
YXRpb25zLWNhbmNlbC1yZXF1ZXN0LXBlcm1pc3Npb24uaHRtbAkocmV2aXNpb24gMCkKKysrIExh
eW91dFRlc3RzL2Zhc3Qvbm90aWZpY2F0aW9ucy9yZXNvdXJjZXMvbm90aWZpY2F0aW9ucy1jYW5j
ZWwtcmVxdWVzdC1wZXJtaXNzaW9uLmh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMjggQEAK
KzxodG1sPgorPGhlYWQ+CisgICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgorICAg
ICAgICBmdW5jdGlvbiBsb2cobWVzc2FnZSkKKyAgICAgICAgeworICAgICAgICAgICAgcGFyZW50
LmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJyZXN1bHQiKS5pbm5lckhUTUwgKz0gbWVzc2FnZSAr
ICI8YnI+IjsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgZnVuY3Rpb24gcnVuVGVzdHMo
KQorICAgICAgICB7CisgICAgICAgICAgICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVy
KSB7CisgICAgICAgICAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4dCgpOwor
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9s
bGVyKSB7CisgICAgICAgICAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuaWdub3JlRGVza3Rv
cE5vdGlmaWNhdGlvblBlcm1pc3Npb25SZXF1ZXN0cygpOworICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICB3aW5kb3cud2Via2l0Tm90aWZpY2F0aW9ucy5yZXF1ZXN0UGVybWlzc2lvbigKKyAg
ICAgICAgICAgICAgICBmdW5jdGlvbigpIHsgbG9nKCJGQUlMOiBQZXJtaXNzaW9uIGNhbGxiYWNr
IGludm9rZWQuIik7IH0KKyAgICAgICAgICAgICk7CisKKyAgICAgICAgfQorICAgIDwvc2NyaXB0
PgorPC9oZWFkPgorPGJvZHkgb25sb2FkPSJydW5UZXN0cygpOyI+Cis8L2JvZHk+Cis8L2h0bWw+
CkluZGV4OiBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9jaHJvbWl1bS90ZXN0X2V4cGVjdGF0aW9ucy50
eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvcGxhdGZvcm0vY2hyb21pdW0vdGVzdF9leHBl
Y3RhdGlvbnMudHh0CShyZXZpc2lvbiA2MzEzNCkKKysrIExheW91dFRlc3RzL3BsYXRmb3JtL2No
cm9taXVtL3Rlc3RfZXhwZWN0YXRpb25zLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMjgyOCw2ICsy
ODI4LDkgQEAgQlVHNDYxNTcgV0lOIFJFTEVBU0UgOiB0cmFuc2Zvcm1zLzJkL3RyYQogLy8gQ2hy
b21pdW0gZG9lcyBub3QgdXNlIHRoZSBpY29uIGxvYWRlciBpbiBXZWJDb3JlIGZvciBsb2FkaW5n
IG5vdGlmaWNhdGlvbnMuCiBXT05URklYIFNLSVAgOiBodHRwL3Rlc3RzL25vdGlmaWNhdGlvbnMg
PSBGQUlMCiAKKy8vIENocm9taXVtIGRvZXMgbm90IHN1cHBvcnQgY2FuY2VsIGZvciBub3RpZmlj
YXRpb25zLgorV09OVEZJWCBTS0lQIDogZmFzdC9ub3RpZmljYXRpb25zL25vdGlmaWNhdGlvbnMt
Y2FuY2VsLXJlcXVlc3QtcGVybWlzc2lvbi5odG1sID0gRkFJTAorCiBCVUc0NjI3NiBXSU4gOiBm
YXN0L3RleHQvaW50ZXJuYXRpb25hbC9raG1lci1zZWxlY3Rpb24uaHRtbCA9IElNQUdFK1RFWFQK
IAogLy8gSFRNTDUgR2VvbG9jYXRpb24gQVBJIGRvZXMgbm90IHVzZSB3aW5kb3cuY2xpZW50SW5m
b3JtYXRpb24uCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>62289</attachid>
            <date>2010-07-22 06:06:01 -0700</date>
            <delta_ts>2010-07-22 16:52:30 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>41413.patch</filename>
            <type>text/plain</type>
            <size>32224</size>
            <attacher name="Yael">yael</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYktpdC9xdC9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L3F0L0NoYW5n
ZUxvZwkocmV2aXNpb24gNjM4ODMpCisrKyBXZWJLaXQvcXQvQ2hhbmdlTG9nCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDMgKzEsMjcgQEAKKzIwMTAtMDctMjIgIFlhZWwgQWhhcm9uICA8eWFlbC5haGFy
b25Abm9raWEuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIFtRdF0gUXRXZWJLaXQgbmVlZHMgcHVibGljIEFQSSBmb3IgTm90aWZpY2F0aW9ucy4K
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQxNDEzCisK
KyAgICAgICAgUmVtb3ZlIER1bXBSZW5kZXJUcmVlIHByaXZhdGUgQVBJIGFuZCBpbnRyb2R1Y2Ug
bmV3IEFQSS4KKyAgICAgICAgQWxzbyBhZGQgc3VwcG9ydCBmb3IgaW5mb3JtaW5nIHRoZSBVSSB3
aGVuIGEgbm90aWZpY2F0aW9uIHJlcXVlc3QgaXMgY2FuY2VsbGVkLgorCisgICAgICAgICogQXBp
L3F3ZWJwYWdlLmNwcDoKKyAgICAgICAgKFFXZWJQYWdlOjpzZXRVc2VyUGVybWlzc2lvbik6Cisg
ICAgICAgICogQXBpL3F3ZWJwYWdlLmg6CisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvRHVtcFJl
bmRlclRyZWVTdXBwb3J0UXQuY3BwOgorICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0R1bXBSZW5k
ZXJUcmVlU3VwcG9ydFF0Lmg6CisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvTm90aWZpY2F0aW9u
UHJlc2VudGVyQ2xpZW50UXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Tm90aWZpY2F0aW9uUHJl
c2VudGVyQ2xpZW50UXQ6OnJlcXVlc3RQZXJtaXNzaW9uKToKKyAgICAgICAgKFdlYkNvcmU6Ok5v
dGlmaWNhdGlvblByZXNlbnRlckNsaWVudFF0OjpjaGVja1Blcm1pc3Npb24pOgorICAgICAgICAo
V2ViQ29yZTo6Tm90aWZpY2F0aW9uUHJlc2VudGVyQ2xpZW50UXQ6OmNhbmNlbFJlcXVlc3RzRm9y
UGVybWlzc2lvbik6CisgICAgICAgIChXZWJDb3JlOjpOb3RpZmljYXRpb25QcmVzZW50ZXJDbGll
bnRRdDo6YWxsb3dOb3RpZmljYXRpb25Gb3JGcmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpOb3Rp
ZmljYXRpb25QcmVzZW50ZXJDbGllbnRRdDo6dG9QYWdlKToKKyAgICAgICAgKFdlYkNvcmU6Ok5v
dGlmaWNhdGlvblByZXNlbnRlckNsaWVudFF0Ojp0b0ZyYW1lKToKKyAgICAgICAgKiBXZWJDb3Jl
U3VwcG9ydC9Ob3RpZmljYXRpb25QcmVzZW50ZXJDbGllbnRRdC5oOgorCiAyMDEwLTA3LTIxICBC
cmFkeSBFaWRzb24gIDxiZWlkc29uQGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBH
ZW9mZnJleSBHYXJlbi4KSW5kZXg6IFdlYktpdC9xdC9BcGkvcXdlYnBhZ2UuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYktpdC9xdC9BcGkvcXdlYnBhZ2UuY3BwCShyZXZpc2lvbiA2Mzg2MykKKysrIFdl
YktpdC9xdC9BcGkvcXdlYnBhZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMTA4LDYgKzIxMDgs
MjAgQEAgYm9vbCBRV2ViUGFnZTo6YWxsb3dHZW9sb2NhdGlvblJlcXVlc3QoUQogI2VuZGlmCiB9
CiAKK3ZvaWQgUVdlYlBhZ2U6OnNldFVzZXJQZXJtaXNzaW9uKFFXZWJGcmFtZSogZnJhbWUsIFBl
cm1pc3Npb25Eb21haW4gZG9tYWluLCBQZXJtaXNzaW9uUG9saWN5IHBvbGljeSkKK3sKKyAgICBz
d2l0Y2ggKGRvbWFpbikgeworICAgIGNhc2UgTm90aWZpY2F0aW9uc1Blcm1pc3Npb25Eb21haW46
CisjaWYgRU5BQkxFKE5PVElGSUNBVElPTlMpCisgICAgICAgIGlmIChwb2xpY3kgPT0gUGVybWlz
c2lvbkdyYW50ZWQpCisgICAgICAgICAgICBOb3RpZmljYXRpb25QcmVzZW50ZXJDbGllbnRRdDo6
bm90aWZpY2F0aW9uUHJlc2VudGVyKCktPmFsbG93Tm90aWZpY2F0aW9uRm9yRnJhbWUoZnJhbWUp
OworI2VuZGlmCisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIGJyZWFrOwor
ICAgIH0KK30KKwogLyohCiAgICAgVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgd2hlbmV2ZXIgV2Vi
S2l0IHdhbnRzIHRvIGNyZWF0ZSBhIG5ldyB3aW5kb3cgb2YgdGhlIGdpdmVuIFxhIHR5cGUsIGZv
cgogICAgIGV4YW1wbGUgd2hlbiBhIEphdmFTY3JpcHQgcHJvZ3JhbSByZXF1ZXN0cyB0byBvcGVu
IGEgZG9jdW1lbnQgaW4gYSBuZXcgd2luZG93LgpJbmRleDogV2ViS2l0L3F0L0FwaS9xd2VicGFn
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9xdC9BcGkvcXdlYnBhZ2UuaAkocmV2aXNpb24gNjM4
NjMpCisrKyBXZWJLaXQvcXQvQXBpL3F3ZWJwYWdlLmgJKHdvcmtpbmcgY29weSkKQEAgLTE5NSw2
ICsxOTUsMTYgQEAgcHVibGljOgogICAgICAgICBXZWJNb2RhbERpYWxvZwogICAgIH07CiAKKyAg
ICBlbnVtIFBlcm1pc3Npb25Qb2xpY3kgeworICAgICAgICBQZXJtaXNzaW9uR3JhbnRlZCwKKyAg
ICAgICAgUGVybWlzc2lvblVua25vd24sCisgICAgICAgIFBlcm1pc3Npb25EZW5pZWQKKyAgICB9
OworCisgICAgZW51bSBQZXJtaXNzaW9uRG9tYWluIHsKKyAgICAgICAgTm90aWZpY2F0aW9uc1Bl
cm1pc3Npb25Eb21haW4KKyAgICB9OworCiAgICAgY2xhc3MgVmlld3BvcnRIaW50cyB7CiAgICAg
cHVibGljOgogICAgICAgICBWaWV3cG9ydEhpbnRzKCk7CkBAIC0yOTAsNiArMzAwLDggQEAgcHVi
bGljOgogCiAgICAgUU1lbnUgKmNyZWF0ZVN0YW5kYXJkQ29udGV4dE1lbnUoKTsKIAorICAgIHZv
aWQgc2V0VXNlclBlcm1pc3Npb24oUVdlYkZyYW1lKiBmcmFtZSwgUGVybWlzc2lvbkRvbWFpbiBk
b21haW4sIFBlcm1pc3Npb25Qb2xpY3kgcG9saWN5KTsKKwogICAgIGVudW0gRXh0ZW5zaW9uIHsK
ICAgICAgICAgQ2hvb3NlTXVsdGlwbGVGaWxlc0V4dGVuc2lvbiwKICAgICAgICAgRXJyb3JQYWdl
RXh0ZW5zaW9uCkBAIC0zNzEsNiArMzgzLDEwIEBAIFFfU0lHTkFMUzoKIAogICAgIHZvaWQgdmll
d3BvcnRDaGFuZ2VSZXF1ZXN0ZWQoY29uc3QgUVdlYlBhZ2U6OlZpZXdwb3J0SGludHMmIGhpbnRz
KTsKIAorICAgIHZvaWQgcmVxdWVzdFBlcm1pc3Npb25Gcm9tVXNlcihRV2ViRnJhbWUqIGZyYW1l
LCBRV2ViUGFnZTo6UGVybWlzc2lvbkRvbWFpbiBkb21haW4pOworICAgIHZvaWQgY2hlY2tQZXJt
aXNzaW9uRnJvbVVzZXIoUVdlYkZyYW1lKiBmcmFtZSwgUVdlYlBhZ2U6OlBlcm1pc3Npb25Eb21h
aW4gZG9tYWluLCBRV2ViUGFnZTo6UGVybWlzc2lvblBvbGljeSYgcG9saWN5KTsKKyAgICB2b2lk
IGNhbmNlbFJlcXVlc3RzRm9yUGVybWlzc2lvbihRV2ViRnJhbWUqIGZyYW1lLCBRV2ViUGFnZTo6
UGVybWlzc2lvbkRvbWFpbiBkb21haW4pOworCiBwcm90ZWN0ZWQ6CiAgICAgdmlydHVhbCBRV2Vi
UGFnZSAqY3JlYXRlV2luZG93KFdlYldpbmRvd1R5cGUgdHlwZSk7CiAgICAgdmlydHVhbCBRT2Jq
ZWN0ICpjcmVhdGVQbHVnaW4oY29uc3QgUVN0cmluZyAmY2xhc3NpZCwgY29uc3QgUVVybCAmdXJs
LCBjb25zdCBRU3RyaW5nTGlzdCAmcGFyYW1OYW1lcywgY29uc3QgUVN0cmluZ0xpc3QgJnBhcmFt
VmFsdWVzKTsKSW5kZXg6IFdlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9EdW1wUmVuZGVyVHJlZVN1
cHBvcnRRdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L0R1bXBS
ZW5kZXJUcmVlU3VwcG9ydFF0LmNwcAkocmV2aXNpb24gNjM4NjMpCisrKyBXZWJLaXQvcXQvV2Vi
Q29yZVN1cHBvcnQvRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC03MCw4ICs3MCw2IEBACiAKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCi1DaGVja1Blcm1p
c3Npb25GdW5jdGlvblR5cGUqIGNoZWNrUGVybWlzc2lvbkZ1bmN0aW9uID0gMDsKLVJlcXVlc3RQ
ZXJtaXNzaW9uRnVuY3Rpb25UeXBlKiByZXF1ZXN0UGVybWlzc2lvbkZ1bmN0aW9uID0gMDsKIFFN
YXA8aW50LCBRV2ViU2NyaXB0V29ybGQqPiBtX3dvcmxkTWFwOwogCiBEdW1wUmVuZGVyVHJlZVN1
cHBvcnRRdDo6RHVtcFJlbmRlclRyZWVTdXBwb3J0UXQoKQpAQCAtNTc1LDIwICs1NzMsNiBAQCB2
b2lkIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjpkdW1wTm90aWZpCiAjZW5kaWYKIH0KIAotdm9p
ZCBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6c2V0Tm90aWZpY2F0aW9uc1JlY2VpdmVyKFFPYmpl
Y3QqIHJlY2VpdmVyKQotewotI2lmIEVOQUJMRShOT1RJRklDQVRJT05TKQotICAgIE5vdGlmaWNh
dGlvblByZXNlbnRlckNsaWVudFF0Ojpub3RpZmljYXRpb25QcmVzZW50ZXIoKS0+c2V0UmVjZWl2
ZXIocmVjZWl2ZXIpOwotI2VuZGlmCi19Ci0KLXZvaWQgRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6
OmFsbG93Tm90aWZpY2F0aW9uRm9yT3JpZ2luKGNvbnN0IFFTdHJpbmcmIG9yaWdpbikKLXsKLSNp
ZiBFTkFCTEUoTk9USUZJQ0FUSU9OUykKLSAgICBOb3RpZmljYXRpb25QcmVzZW50ZXJDbGllbnRR
dDo6bm90aWZpY2F0aW9uUHJlc2VudGVyKCktPmFsbG93Tm90aWZpY2F0aW9uRm9yT3JpZ2luKG9y
aWdpbik7Ci0jZW5kaWYKLX0KLQogdm9pZCBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6c2V0TW9j
a0dlb2xvY2F0aW9uUG9zaXRpb24oZG91YmxlIGxhdGl0dWRlLCBkb3VibGUgbG9uZ2l0dWRlLCBk
b3VibGUgYWNjdXJhY3kpCiB7CiAjaWYgRU5BQkxFKEdFT0xPQ0FUSU9OKQpAQCAtNjA1LDE2ICs1
ODksNiBAQCB2b2lkIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjpzZXRNb2NrR2VvCiAjZW5kaWYK
IH0KIAotdm9pZCBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6c2V0Q2hlY2tQZXJtaXNzaW9uRnVu
Y3Rpb24oQ2hlY2tQZXJtaXNzaW9uRnVuY3Rpb25UeXBlKiBmKQotewotICAgIGNoZWNrUGVybWlz
c2lvbkZ1bmN0aW9uID0gZjsKLX0KLQotdm9pZCBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6c2V0
UmVxdWVzdFBlcm1pc3Npb25GdW5jdGlvbihSZXF1ZXN0UGVybWlzc2lvbkZ1bmN0aW9uVHlwZSog
ZikKLXsKLSAgICByZXF1ZXN0UGVybWlzc2lvbkZ1bmN0aW9uID0gZjsKLX0KLQogYm9vbCBEdW1w
UmVuZGVyVHJlZVN1cHBvcnRRdDo6aXNUYXJnZXRJdGVtKGNvbnN0IFFXZWJIaXN0b3J5SXRlbSYg
aGlzdG9yeUl0ZW0pCiB7CiAgICAgUVdlYkhpc3RvcnlJdGVtIGl0ID0gaGlzdG9yeUl0ZW07Cklu
ZGV4OiBXZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvRHVtcFJlbmRlclRyZWVTdXBw
b3J0UXQuaAkocmV2aXNpb24gNjM4NjMpCisrKyBXZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvRHVt
cFJlbmRlclRyZWVTdXBwb3J0UXQuaAkod29ya2luZyBjb3B5KQpAQCAtMzIsMTcgKzMyLDYgQEAg
Y2xhc3MgUVdlYlBhZ2U7CiBjbGFzcyBRV2ViSGlzdG9yeUl0ZW07CiBjbGFzcyBRV2ViU2NyaXB0
V29ybGQ7CiAKLWVudW0gTm90aWZpY2F0aW9uUGVybWlzc2lvbiB7Ci0gICAgTm90aWZpY2F0aW9u
QWxsb3dlZCwKLSAgICBOb3RpZmljYXRpb25Ob3RBbGxvd2VkLAotICAgIE5vdGlmaWNhdGlvbkRl
bmllZAotfTsKLQotdHlwZWRlZiB2b2lkIChDaGVja1Blcm1pc3Npb25GdW5jdGlvblR5cGUpIChR
T2JqZWN0KiByZWNlaXZlciwgY29uc3QgUVVybCYsIE5vdGlmaWNhdGlvblBlcm1pc3Npb24mKTsK
LXR5cGVkZWYgdm9pZCAoUmVxdWVzdFBlcm1pc3Npb25GdW5jdGlvblR5cGUpIChRT2JqZWN0KiBy
ZWNlaXZlciwgY29uc3QgUVN0cmluZyYpOwotCi1leHRlcm4gQ2hlY2tQZXJtaXNzaW9uRnVuY3Rp
b25UeXBlKiBjaGVja1Blcm1pc3Npb25GdW5jdGlvbjsKLWV4dGVybiBSZXF1ZXN0UGVybWlzc2lv
bkZ1bmN0aW9uVHlwZSogcmVxdWVzdFBlcm1pc3Npb25GdW5jdGlvbjsKIGV4dGVybiBRTWFwPGlu
dCwgUVdlYlNjcmlwdFdvcmxkKj4gbV93b3JsZE1hcDsKIAogY2xhc3MgUVdFQktJVF9FWFBPUlQg
RHVtcFJlbmRlclRyZWVTdXBwb3J0UXQgewpAQCAtMTIzLDEzICsxMTIsNiBAQCBwdWJsaWM6CiAK
ICAgICBzdGF0aWMgdm9pZCBkdW1wTm90aWZpY2F0aW9uKGJvb2wgYik7CiAKLSAgICAvLyBUaGVz
ZSBmdW5jdGlvbnMgc2hvdWxkIGV2ZW50dWFsbHkgdHVybiBpbnRvIHB1YmxpYyBBUEkKLSAgICAv
LyBhbmQgdGhlICJyZWNlaXZlciIgY29uY2VwdCB3b3VsZCBnbyBhd2F5Ci0gICAgc3RhdGljIHZv
aWQgc2V0Tm90aWZpY2F0aW9uc1JlY2VpdmVyKFFPYmplY3QqIHJlY2VpdmVyKTsKLSAgICBzdGF0
aWMgdm9pZCBhbGxvd05vdGlmaWNhdGlvbkZvck9yaWdpbihjb25zdCBRU3RyaW5nJiBvcmlnaW4p
OwotICAgIHN0YXRpYyB2b2lkIHNldENoZWNrUGVybWlzc2lvbkZ1bmN0aW9uKENoZWNrUGVybWlz
c2lvbkZ1bmN0aW9uVHlwZSopOwotICAgIHN0YXRpYyB2b2lkIHNldFJlcXVlc3RQZXJtaXNzaW9u
RnVuY3Rpb24oUmVxdWVzdFBlcm1pc3Npb25GdW5jdGlvblR5cGUqKTsKLQogICAgIHN0YXRpYyBR
TWFwPFFTdHJpbmcsIFFXZWJIaXN0b3J5SXRlbT4gZ2V0Q2hpbGRIaXN0b3J5SXRlbXMoY29uc3Qg
UVdlYkhpc3RvcnlJdGVtJiBoaXN0b3J5SXRlbSk7CiAgICAgc3RhdGljIGJvb2wgaXNUYXJnZXRJ
dGVtKGNvbnN0IFFXZWJIaXN0b3J5SXRlbSYgaGlzdG9yeUl0ZW0pOwogICAgIHN0YXRpYyBRU3Ry
aW5nIGhpc3RvcnlJdGVtVGFyZ2V0KGNvbnN0IFFXZWJIaXN0b3J5SXRlbSYgaGlzdG9yeUl0ZW0p
OwpJbmRleDogV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L05vdGlmaWNhdGlvblByZXNlbnRlckNs
aWVudFF0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvTm90aWZp
Y2F0aW9uUHJlc2VudGVyQ2xpZW50UXQuY3BwCShyZXZpc2lvbiA2Mzg2MykKKysrIFdlYktpdC9x
dC9XZWJDb3JlU3VwcG9ydC9Ob3RpZmljYXRpb25QcmVzZW50ZXJDbGllbnRRdC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTM2LDExICszNiwxNCBAQAogI2luY2x1ZGUgIkR1bXBSZW5kZXJUcmVlU3Vw
cG9ydFF0LmgiCiAjaW5jbHVkZSAiRXZlbnROYW1lcy5oIgogI2luY2x1ZGUgIktVUkwuaCIKKyNp
bmNsdWRlICJQYWdlLmgiCiAjaW5jbHVkZSAiUXRQbGF0Zm9ybVBsdWdpbi5oIgogI2luY2x1ZGUg
IlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaCIKICNpbmNsdWRlICJTZWN1cml0eU9yaWdpbi5oIgog
CisjaW5jbHVkZSAicXdlYmZyYW1lX3AuaCIKICNpbmNsdWRlICJxd2Via2l0Z2xvYmFsLmgiCisj
aW5jbHVkZSAicXdlYnBhZ2UuaCIKICNpbmNsdWRlIDxRdEd1aT4KIAogbmFtZXNwYWNlIFdlYkNv
cmUgewpAQCAtMjU5LDUzICsyNjIsNzcgQEAgdm9pZCBOb3RpZmljYXRpb25QcmVzZW50ZXJDbGll
bnRRdDo6cmVxdQogICAgIGlmIChkdW1wTm90aWZpY2F0aW9uKQogICAgICAgICBwcmludGYoIkRF
U0tUT1AgTk9USUZJQ0FUSU9OIFBFUk1JU1NJT04gUkVRVUVTVEVEOiAlc1xuIiwgUVN0cmluZyhj
b250ZXh0LT5zZWN1cml0eU9yaWdpbigpLT50b1N0cmluZygpKS50b1V0ZjgoKS5jb25zdERhdGEo
KSk7CiAKLSAgICBRU3RyaW5nIG9yaWdpblN0cmluZyA9IGNvbnRleHQtPnNlY3VyaXR5T3JpZ2lu
KCktPnRvU3RyaW5nKCk7Ci0gICAgUUhhc2g8UVN0cmluZywgUUxpc3Q8UmVmUHRyPFZvaWRDYWxs
YmFjaz4gPiA+OjppdGVyYXRvciBpdGVyID0gbV9wZW5kaW5nUGVybWlzc2lvblJlcXVlc3RzLmZp
bmQob3JpZ2luU3RyaW5nKTsKKyAgICBRSGFzaDxTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgQ2Fs
bGJhY2tzSW5mbyA+OjppdGVyYXRvciBpdGVyID0gbV9wZW5kaW5nUGVybWlzc2lvblJlcXVlc3Rz
LmZpbmQoY29udGV4dCk7CiAgICAgaWYgKGl0ZXIgIT0gbV9wZW5kaW5nUGVybWlzc2lvblJlcXVl
c3RzLmVuZCgpKQotICAgICAgICBpdGVyLnZhbHVlKCkuYXBwZW5kKGNhbGxiYWNrKTsKKyAgICAg
ICAgaXRlci52YWx1ZSgpLm1fY2FsbGJhY2tzLmFwcGVuZChjYWxsYmFjayk7CiAgICAgZWxzZSB7
Ci0gICAgICAgIFFMaXN0PFJlZlB0cjxWb2lkQ2FsbGJhY2s+ID4gY2FsbGJhY2tzOwogICAgICAg
ICBSZWZQdHI8Vm9pZENhbGxiYWNrPiBjYiA9IGNhbGxiYWNrOwotICAgICAgICBjYWxsYmFja3Mu
YXBwZW5kKGNiKTsKLSAgICAgICAgbV9wZW5kaW5nUGVybWlzc2lvblJlcXVlc3RzLmluc2VydChv
cmlnaW5TdHJpbmcsIGNhbGxiYWNrcyk7Ci0gICAgICAgIGlmIChyZXF1ZXN0UGVybWlzc2lvbkZ1
bmN0aW9uKQotICAgICAgICAgICAgcmVxdWVzdFBlcm1pc3Npb25GdW5jdGlvbihtX3JlY2VpdmVy
LCBvcmlnaW5TdHJpbmcpOworICAgICAgICBDYWxsYmFja3NJbmZvIGluZm87CisgICAgICAgIGlu
Zm8ubV9mcmFtZSA9IHRvRnJhbWUoY29udGV4dCk7CisgICAgICAgIGluZm8ubV9jYWxsYmFja3Mu
YXBwZW5kKGNiKTsKKyAgICAgICAgbV9wZW5kaW5nUGVybWlzc2lvblJlcXVlc3RzLmluc2VydChj
b250ZXh0LCBpbmZvKTsKKworICAgICAgICBpZiAodG9QYWdlKGNvbnRleHQpICYmIHRvRnJhbWUo
Y29udGV4dCkpIHsKKyAgICAgICAgICAgIG1fcGVuZGluZ1Blcm1pc3Npb25SZXF1ZXN0cy5pbnNl
cnQoY29udGV4dCwgaW5mbyk7CisgICAgICAgICAgICBlbWl0IHRvUGFnZShjb250ZXh0KS0+cmVx
dWVzdFBlcm1pc3Npb25Gcm9tVXNlcih0b0ZyYW1lKGNvbnRleHQpLCBRV2ViUGFnZTo6Tm90aWZp
Y2F0aW9uc1Blcm1pc3Npb25Eb21haW4pOworICAgICAgICB9CiAgICAgfQogfQogCiBOb3RpZmlj
YXRpb25QcmVzZW50ZXI6OlBlcm1pc3Npb24gTm90aWZpY2F0aW9uUHJlc2VudGVyQ2xpZW50UXQ6
OmNoZWNrUGVybWlzc2lvbihTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0KQogewotICAg
IE5vdGlmaWNhdGlvblBlcm1pc3Npb24gcGVybWlzc2lvbiA9IE5vdGlmaWNhdGlvbk5vdEFsbG93
ZWQ7Ci0gICAgUVN0cmluZyBvcmlnaW4gPSBjb250ZXh0LT51cmwoKS5zdHJpbmcoKTsKLSAgICBp
ZiAoY2hlY2tQZXJtaXNzaW9uRnVuY3Rpb24pCi0gICAgICAgIGNoZWNrUGVybWlzc2lvbkZ1bmN0
aW9uKG1fcmVjZWl2ZXIsIG9yaWdpbiwgcGVybWlzc2lvbik7Ci0gICAgc3dpdGNoIChwZXJtaXNz
aW9uKSB7Ci0gICAgY2FzZSBOb3RpZmljYXRpb25BbGxvd2VkOgorICAgIFFXZWJQYWdlOjpQZXJt
aXNzaW9uUG9saWN5IHBvbGljeSA9IFFXZWJQYWdlOjpQZXJtaXNzaW9uVW5rbm93bjsKKyAgICBp
ZiAodG9QYWdlKGNvbnRleHQpICYmIHRvRnJhbWUoY29udGV4dCkpCisgICAgICAgIGVtaXQgdG9Q
YWdlKGNvbnRleHQpLT5jaGVja1Blcm1pc3Npb25Gcm9tVXNlcih0b0ZyYW1lKGNvbnRleHQpLCBR
V2ViUGFnZTo6Tm90aWZpY2F0aW9uc1Blcm1pc3Npb25Eb21haW4sIHBvbGljeSk7CisKKyAgICBz
d2l0Y2ggKHBvbGljeSkgeworICAgIGNhc2UgUVdlYlBhZ2U6OlBlcm1pc3Npb25HcmFudGVkOgog
ICAgICAgICByZXR1cm4gTm90aWZpY2F0aW9uUHJlc2VudGVyOjpQZXJtaXNzaW9uQWxsb3dlZDsK
LSAgICBjYXNlIE5vdGlmaWNhdGlvbk5vdEFsbG93ZWQ6CisgICAgY2FzZSBRV2ViUGFnZTo6UGVy
bWlzc2lvblVua25vd246CiAgICAgICAgIHJldHVybiBOb3RpZmljYXRpb25QcmVzZW50ZXI6OlBl
cm1pc3Npb25Ob3RBbGxvd2VkOwotICAgIGNhc2UgTm90aWZpY2F0aW9uRGVuaWVkOgorICAgIGNh
c2UgUVdlYlBhZ2U6OlBlcm1pc3Npb25EZW5pZWQ6CiAgICAgICAgIHJldHVybiBOb3RpZmljYXRp
b25QcmVzZW50ZXI6OlBlcm1pc3Npb25EZW5pZWQ7CiAgICAgfQogICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOwogICAgIHJldHVybiBOb3RpZmljYXRpb25QcmVzZW50ZXI6OlBlcm1pc3Npb25Ob3RB
bGxvd2VkOwogfQogCi12b2lkIE5vdGlmaWNhdGlvblByZXNlbnRlckNsaWVudFF0OjpjYW5jZWxS
ZXF1ZXN0c0ZvclBlcm1pc3Npb24oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCopCit2b2lkIE5vdGlm
aWNhdGlvblByZXNlbnRlckNsaWVudFF0OjpjYW5jZWxSZXF1ZXN0c0ZvclBlcm1pc3Npb24oU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCkKIHsKLSAgICAvLyBGSVhNRTogVGhpcyB3aWxs
IGJlIGltcGxlbWVudGVkIGZvciBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9NDE0MTMKLSAgICAvLyB0byBhdm9pZCBhZGRpbmcgYW5kIHJlbW92aW5nIG5ldyBwcml2YXRl
IEFQSQorICAgIFFIYXNoPFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBDYWxsYmFja3NJbmZvID46
Oml0ZXJhdG9yIGl0ZXIgPSBtX3BlbmRpbmdQZXJtaXNzaW9uUmVxdWVzdHMuZmluZChjb250ZXh0
KTsKKyAgICBpZiAoaXRlciA9PSBtX3BlbmRpbmdQZXJtaXNzaW9uUmVxdWVzdHMuZW5kKCkpCisg
ICAgICAgIHJldHVybjsKKworICAgIFFXZWJGcmFtZSogZnJhbWUgPSBpdGVyLnZhbHVlKCkubV9m
cmFtZTsKKyAgICBpZiAoIWZyYW1lKQorICAgICAgICByZXR1cm47CisgICAgUVdlYlBhZ2UqIHBh
Z2UgPSBmcmFtZS0+cGFnZSgpOworICAgIG1fcGVuZGluZ1Blcm1pc3Npb25SZXF1ZXN0cy5lcmFz
ZShpdGVyKTsKKworICAgIGlmICghcGFnZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKGR1
bXBOb3RpZmljYXRpb24pCisgICAgICAgIHByaW50ZigiREVTS1RPUCBOT1RJRklDQVRJT04gUEVS
TUlTU0lPTiBSRVFVRVNUIENBTkNFTExFRDogJXNcbiIsIFFTdHJpbmcoY29udGV4dC0+c2VjdXJp
dHlPcmlnaW4oKS0+dG9TdHJpbmcoKSkudG9VdGY4KCkuY29uc3REYXRhKCkpOworCisgICAgZW1p
dCBwYWdlLT5jYW5jZWxSZXF1ZXN0c0ZvclBlcm1pc3Npb24oZnJhbWUsIFFXZWJQYWdlOjpOb3Rp
ZmljYXRpb25zUGVybWlzc2lvbkRvbWFpbik7CiB9CiAKLXZvaWQgTm90aWZpY2F0aW9uUHJlc2Vu
dGVyQ2xpZW50UXQ6OmFsbG93Tm90aWZpY2F0aW9uRm9yT3JpZ2luKGNvbnN0IFFTdHJpbmcmIG9y
aWdpbikKK3ZvaWQgTm90aWZpY2F0aW9uUHJlc2VudGVyQ2xpZW50UXQ6OmFsbG93Tm90aWZpY2F0
aW9uRm9yRnJhbWUoUVdlYkZyYW1lKiBmcmFtZSkKIHsKLSAgICBRSGFzaDxRU3RyaW5nLCBRTGlz
dDxSZWZQdHI8Vm9pZENhbGxiYWNrPiA+ID46Oml0ZXJhdG9yIGl0ZXIgPSBtX3BlbmRpbmdQZXJt
aXNzaW9uUmVxdWVzdHMuZmluZChvcmlnaW4pOwotICAgIGlmIChpdGVyICE9IG1fcGVuZGluZ1Bl
cm1pc3Npb25SZXF1ZXN0cy5lbmQoKSkgewotICAgICAgICBRTGlzdDxSZWZQdHI8Vm9pZENhbGxi
YWNrPiA+JiBjYWxsYmFja3MgPSBpdGVyLnZhbHVlKCk7Ci0gICAgICAgIGZvciAoaW50IGkgPSAw
OyBpIDwgY2FsbGJhY2tzLnNpemUoKTsgaSsrKQotICAgICAgICAgICAgY2FsbGJhY2tzLmF0KGkp
LT5oYW5kbGVFdmVudCgpOwotICAgICAgICBtX3BlbmRpbmdQZXJtaXNzaW9uUmVxdWVzdHMucmVt
b3ZlKG9yaWdpbik7CisgICAgUUhhc2g8U2NyaXB0RXhlY3V0aW9uQ29udGV4dCosICBDYWxsYmFj
a3NJbmZvPjo6aXRlcmF0b3IgaXRlciA9IG1fcGVuZGluZ1Blcm1pc3Npb25SZXF1ZXN0cy5iZWdp
bigpOworICAgIHdoaWxlIChpdGVyICE9IG1fcGVuZGluZ1Blcm1pc3Npb25SZXF1ZXN0cy5lbmQo
KSkgeworICAgICAgICBpZiAodG9GcmFtZShpdGVyLmtleSgpKSA9PSBmcmFtZSkKKyAgICAgICAg
ICAgIGJyZWFrOwogICAgIH0KKworICAgIGlmIChpdGVyID09IG1fcGVuZGluZ1Blcm1pc3Npb25S
ZXF1ZXN0cy5lbmQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgUUxpc3Q8UmVmUHRyPFZvaWRD
YWxsYmFjaz4gPiYgY2FsbGJhY2tzID0gaXRlci52YWx1ZSgpLm1fY2FsbGJhY2tzOworICAgIGZv
ciAoaW50IGkgPSAwOyBpIDwgY2FsbGJhY2tzLnNpemUoKTsgaSsrKQorICAgICAgICBjYWxsYmFj
a3MuYXQoaSktPmhhbmRsZUV2ZW50KCk7CisgICAgbV9wZW5kaW5nUGVybWlzc2lvblJlcXVlc3Rz
LnJlbW92ZShpdGVyLmtleSgpKTsKIH0KIAogdm9pZCBOb3RpZmljYXRpb25QcmVzZW50ZXJDbGll
bnRRdDo6c2VuZEV2ZW50KE5vdGlmaWNhdGlvbiogbm90aWZpY2F0aW9uLCBjb25zdCBBdG9taWNT
dHJpbmcmIGV2ZW50TmFtZSkKQEAgLTM2Miw2ICszODksMzQgQEAgdm9pZCBOb3RpZmljYXRpb25Q
cmVzZW50ZXJDbGllbnRRdDo6ZHVtcAogICAgIH0KIH0KIAorUVdlYlBhZ2UqIE5vdGlmaWNhdGlv
blByZXNlbnRlckNsaWVudFF0Ojp0b1BhZ2UoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4
dCkKK3sKKyAgICBpZiAoIWNvbnRleHQgfHwgY29udGV4dC0+aXNXb3JrZXJDb250ZXh0KCkpCisg
ICAgICAgIHJldHVybiAwOworCisgICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gc3RhdGljX2Nhc3Q8
RG9jdW1lbnQqPihjb250ZXh0KTsKKyAgICBpZiAoIWRvY3VtZW50KQorICAgICAgICByZXR1cm4g
MDsKKworICAgIFBhZ2UqIHBhZ2UgPSBkb2N1bWVudC0+cGFnZSgpOworICAgIGlmICghcGFnZSB8
fCAhcGFnZS0+bWFpbkZyYW1lKCkpCisgICAgICAgIHJldHVybiAwOworCisgICAgcmV0dXJuIFFX
ZWJGcmFtZVByaXZhdGU6OmtpdChwYWdlLT5tYWluRnJhbWUoKSktPnBhZ2UoKTsKK30KKworUVdl
YkZyYW1lKiBOb3RpZmljYXRpb25QcmVzZW50ZXJDbGllbnRRdDo6dG9GcmFtZShTY3JpcHRFeGVj
dXRpb25Db250ZXh0KiBjb250ZXh0KQoreworICAgIGlmICghY29udGV4dCB8fCBjb250ZXh0LT5p
c1dvcmtlckNvbnRleHQoKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBEb2N1bWVudCogZG9j
dW1lbnQgPSBzdGF0aWNfY2FzdDxEb2N1bWVudCo+KGNvbnRleHQpOworICAgIGlmICghZG9jdW1l
bnQgfHwgIWRvY3VtZW50LT5mcmFtZSgpKQorICAgICAgICByZXR1cm4gMDsKKworICAgIHJldHVy
biBRV2ViRnJhbWVQcml2YXRlOjpraXQoZG9jdW1lbnQtPmZyYW1lKCkpOworfQorCiAjZW5kaWYg
Ly8gRU5BQkxFKE5PVElGSUNBVElPTlMpCiB9CiAKSW5kZXg6IFdlYktpdC9xdC9XZWJDb3JlU3Vw
cG9ydC9Ob3RpZmljYXRpb25QcmVzZW50ZXJDbGllbnRRdC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktp
dC9xdC9XZWJDb3JlU3VwcG9ydC9Ob3RpZmljYXRpb25QcmVzZW50ZXJDbGllbnRRdC5oCShyZXZp
c2lvbiA2Mzg2MykKKysrIFdlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9Ob3RpZmljYXRpb25QcmVz
ZW50ZXJDbGllbnRRdC5oCSh3b3JraW5nIGNvcHkpCkBAIC00Miw2ICs0Miw5IEBACiAjaW5jbHVk
ZSA8UU11bHRpSGFzaD4KICNpbmNsdWRlIDxRU3lzdGVtVHJheUljb24+CiAKK2NsYXNzIFFXZWJG
cmFtZTsKK2NsYXNzIFFXZWJQYWdlOworCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIERv
Y3VtZW50OwpAQCAtOTAsMTIgKzkzLDEwIEBAIHB1YmxpYzoKIAogICAgIHZvaWQgY2FuY2VsKE5v
dGlmaWNhdGlvbldyYXBwZXIqKTsKIAotICAgIHZvaWQgYWxsb3dOb3RpZmljYXRpb25Gb3JPcmln
aW4oY29uc3QgUVN0cmluZyYgb3JpZ2luKTsKKyAgICB2b2lkIGFsbG93Tm90aWZpY2F0aW9uRm9y
RnJhbWUoUVdlYkZyYW1lKik7CiAKICAgICBzdGF0aWMgYm9vbCBkdW1wTm90aWZpY2F0aW9uOwog
Ci0gICAgdm9pZCBzZXRSZWNlaXZlcihRT2JqZWN0KiByZWNlaXZlcikgeyBtX3JlY2VpdmVyID0g
cmVjZWl2ZXI7IH0KLQogICAgIHZvaWQgYWRkQ2xpZW50KCkgeyBtX2NsaWVudENvdW50Kys7IH0K
ICAgICB2b2lkIHJlbW92ZUNsaWVudCgpOwogICAgIHN0YXRpYyBOb3RpZmljYXRpb25QcmVzZW50
ZXJDbGllbnRRdCogbm90aWZpY2F0aW9uUHJlc2VudGVyKCk7CkBAIC0xMDksMTEgKzExMCwxNyBA
QCBwcml2YXRlOgogICAgIHZvaWQgZGV0YWNoTm90aWZpY2F0aW9uKE5vdGlmaWNhdGlvbiopOwog
ICAgIHZvaWQgZHVtcFJlcGxhY2VkSWRUZXh0KE5vdGlmaWNhdGlvbiopOwogICAgIHZvaWQgZHVt
cFNob3dUZXh0KE5vdGlmaWNhdGlvbiopOworICAgIFFXZWJQYWdlKiB0b1BhZ2UoU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCopOworICAgIFFXZWJGcmFtZSogdG9GcmFtZShTY3JpcHRFeGVjdXRpb25D
b250ZXh0Kik7CiAKICAgICBpbnQgbV9jbGllbnRDb3VudDsKLSAgICBRSGFzaDxRU3RyaW5nLCAg
UUxpc3Q8UmVmUHRyPFZvaWRDYWxsYmFjaz4gPiA+IG1fcGVuZGluZ1Blcm1pc3Npb25SZXF1ZXN0
czsKKyAgICBzdHJ1Y3QgQ2FsbGJhY2tzSW5mbyB7CisgICAgICAgIFFXZWJGcmFtZSogbV9mcmFt
ZTsKKyAgICAgICAgUUxpc3Q8UmVmUHRyPFZvaWRDYWxsYmFjaz4gPiBtX2NhbGxiYWNrczsKKyAg
ICB9OworICAgIFFIYXNoPFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCAgQ2FsbGJhY2tzSW5mbyA+
IG1fcGVuZGluZ1Blcm1pc3Npb25SZXF1ZXN0czsKKwogICAgIE5vdGlmaWNhdGlvbnNRdWV1ZSBt
X25vdGlmaWNhdGlvbnM7Ci0gICAgUU9iamVjdCogbV9yZWNlaXZlcjsKICAgICBRdFBsYXRmb3Jt
UGx1Z2luIG1fcGxhdGZvcm1QbHVnaW47CiB9OwogCkluZGV4OiBXZWJLaXRUb29scy9DaGFuZ2VM
b2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCShyZXZpc2lvbiA2Mzg4MykK
KysrIFdlYktpdFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM0IEBA
CisyMDEwLTA3LTIyICBZYWVsIEFoYXJvbiAgPHlhZWwuYWhhcm9uQG5va2lhLmNvbT4KKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBbUXRdIFF0V2ViS2l0
IG5lZWRzIHB1YmxpYyBBUEkgZm9yIE5vdGlmaWNhdGlvbnMuCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00MTQxMworCisgICAgICAgIFVwZGF0ZSBEdW1w
UmVuZGVyVHJlZSBhbmQgUXRUZXN0QnJvd3NlciB0byB1c2UgdGhlIG5ldyBBUEkuCisgICAgICAg
IEFkZCBuZXcgRFJUIEFQSSB0byBmbGFnIHRoYXQgbm90aWZpY2F0aW9ucyBwZXJtaXNzaW9uIHJl
cXVlc3RzIHNob3VsZCBiZSBpZ25vcmVkLgorCisgICAgICAgICogRHVtcFJlbmRlclRyZWUvcXQv
RHVtcFJlbmRlclRyZWVRdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXZWJQYWdlOjpXZWJQYWdl
KToKKyAgICAgICAgKFdlYkNvcmU6OldlYlBhZ2U6OnJlcXVlc3RQZXJtaXNzaW9uKToKKyAgICAg
ICAgKFdlYkNvcmU6OldlYlBhZ2U6OmNoZWNrUGVybWlzc2lvbik6CisgICAgICAgIChXZWJDb3Jl
OjpXZWJQYWdlOjpjYW5jZWxSZXF1ZXN0c0ZvclBlcm1pc3Npb24pOgorICAgICAgICAqIER1bXBS
ZW5kZXJUcmVlL3F0L0R1bXBSZW5kZXJUcmVlUXQuaDoKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJl
ZS9xdC9MYXlvdXRUZXN0Q29udHJvbGxlclF0LmNwcDoKKyAgICAgICAgKExheW91dFRlc3RDb250
cm9sbGVyOjpyZXNldCk6CisgICAgICAgIChMYXlvdXRUZXN0Q29udHJvbGxlcjo6aWdub3JlRGVz
a3RvcE5vdGlmaWNhdGlvblBlcm1pc3Npb25SZXF1ZXN0cyk6CisgICAgICAgIChMYXlvdXRUZXN0
Q29udHJvbGxlcjo6Y2hlY2tEZXNrdG9wTm90aWZpY2F0aW9uUGVybWlzc2lvbik6CisgICAgICAg
ICogRHVtcFJlbmRlclRyZWUvcXQvTGF5b3V0VGVzdENvbnRyb2xsZXJRdC5oOgorICAgICAgICAo
TGF5b3V0VGVzdENvbnRyb2xsZXI6Omlnbm9yZVJlcWVzdEZvclBlcm1pc3Npb24pOgorICAgICAg
ICAqIFF0VGVzdEJyb3dzZXIvbWFpbi5jcHA6CisgICAgICAgIChMYXVuY2hlcldpbmRvdzo6TGF1
bmNoZXJXaW5kb3cpOgorICAgICAgICAqIFF0VGVzdEJyb3dzZXIvd2VicGFnZS5jcHA6CisgICAg
ICAgIChXZWJQYWdlOjpXZWJQYWdlKToKKyAgICAgICAgKFdlYlBhZ2U6OnJlcXVlc3RQZXJtaXNz
aW9uKToKKyAgICAgICAgKFdlYlBhZ2U6OmNoZWNrUGVybWlzc2lvbik6CisgICAgICAgIChXZWJQ
YWdlOjpjYW5jZWxSZXF1ZXN0c0ZvclBlcm1pc3Npb24pOgorICAgICAgICAqIFF0VGVzdEJyb3dz
ZXIvd2VicGFnZS5oOgorCiAyMDEwLTA3LTIxICBEYXJpbiBBZGxlciAgPGRhcmluQGFwcGxlLmNv
bT4KIAogICAgICAgICBSZXZpZXdlZCBieSBTYW0gV2VpbmlnLgpJbmRleDogV2ViS2l0VG9vbHMv
RHVtcFJlbmRlclRyZWUvcXQvRHVtcFJlbmRlclRyZWVRdC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
S2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvcXQvRHVtcFJlbmRlclRyZWVRdC5jcHAJKHJldmlzaW9u
IDYzODYzKQorKysgV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvcXQvRHVtcFJlbmRlclRyZWVR
dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzMCwxNiArMTMwLDYgQEAgcHVibGljOgogfTsKICNl
bmRpZgogCi12b2lkIGNoZWNrUGVybWlzc2lvbkNhbGxiYWNrKFFPYmplY3QqIHJlY2VpdmVyLCBj
b25zdCBRVXJsJiB1cmwsIE5vdGlmaWNhdGlvblBlcm1pc3Npb24mIHBlcm1pc3Npb24pCi17Ci0g
ICAgcW9iamVjdF9jYXN0PER1bXBSZW5kZXJUcmVlKj4ocmVjZWl2ZXIpLT5jaGVja1Blcm1pc3Np
b24odXJsLCBwZXJtaXNzaW9uKTsKLX0KLQotdm9pZCByZXF1ZXN0UGVybWlzc2lvbkNhbGxiYWNr
KFFPYmplY3QqIHJlY2VpdmVyLCBjb25zdCBRU3RyaW5nJiBvcmlnaW4pCi17Ci0gICAgcW9iamVj
dF9jYXN0PER1bXBSZW5kZXJUcmVlKj4ocmVjZWl2ZXIpLT5yZXF1ZXN0UGVybWlzc2lvbihvcmln
aW4pOwotfQotCiBXZWJQYWdlOjpXZWJQYWdlKFFPYmplY3QqIHBhcmVudCwgRHVtcFJlbmRlclRy
ZWUqIGRydCkKICAgICA6IFFXZWJQYWdlKHBhcmVudCkKICAgICAsIG1fd2ViSW5zcGVjdG9yKDAp
CkBAIC0xNjcsMTAgKzE1Nyw5IEBAIFdlYlBhZ2U6OldlYlBhZ2UoUU9iamVjdCogcGFyZW50LCBE
dW1wUmUKICAgICBzZXROZXR3b3JrQWNjZXNzTWFuYWdlcihtX2RydC0+bmV0d29ya0FjY2Vzc01h
bmFnZXIoKSk7CiAgICAgc2V0UGx1Z2luRmFjdG9yeShuZXcgVGVzdFBsdWdpbih0aGlzKSk7CiAK
LSAgICBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6c2V0Tm90aWZpY2F0aW9uc1JlY2VpdmVyKG1f
ZHJ0KTsKLSAgICBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6c2V0Q2hlY2tQZXJtaXNzaW9uRnVu
Y3Rpb24oY2hlY2tQZXJtaXNzaW9uQ2FsbGJhY2spOwotICAgIER1bXBSZW5kZXJUcmVlU3VwcG9y
dFF0OjpzZXRSZXF1ZXN0UGVybWlzc2lvbkZ1bmN0aW9uKHJlcXVlc3RQZXJtaXNzaW9uQ2FsbGJh
Y2spOwotCisgICAgY29ubmVjdCh0aGlzLCBTSUdOQUwocmVxdWVzdFBlcm1pc3Npb25Gcm9tVXNl
cihRV2ViRnJhbWUqLCBRV2ViUGFnZTo6UGVybWlzc2lvbkRvbWFpbikpLCB0aGlzLCBTTE9UKHJl
cXVlc3RQZXJtaXNzaW9uKFFXZWJGcmFtZSosIFFXZWJQYWdlOjpQZXJtaXNzaW9uRG9tYWluKSkp
OworICAgIGNvbm5lY3QodGhpcywgU0lHTkFMKGNoZWNrUGVybWlzc2lvbkZyb21Vc2VyKFFXZWJG
cmFtZSosIFFXZWJQYWdlOjpQZXJtaXNzaW9uRG9tYWluLCBRV2ViUGFnZTo6UGVybWlzc2lvblBv
bGljeSYpKSwgdGhpcywgU0xPVChjaGVja1Blcm1pc3Npb24oUVdlYkZyYW1lKiwgUVdlYlBhZ2U6
OlBlcm1pc3Npb25Eb21haW4sIFFXZWJQYWdlOjpQZXJtaXNzaW9uUG9saWN5JikpKTsKKyAgICBj
b25uZWN0KHRoaXMsIFNJR05BTChjYW5jZWxSZXF1ZXN0c0ZvclBlcm1pc3Npb25Gcm9tVXNlcihR
V2ViRnJhbWUqLCBRV2ViUGFnZTo6UGVybWlzc2lvbkRvbWFpbikpLCB0aGlzLCBTTE9UKGNhbmNl
bFJlcXVlc3RzRm9yUGVybWlzc2lvbkZyb21Vc2VyKFFXZWJGcmFtZSosIFFXZWJQYWdlOjpQZXJt
aXNzaW9uRG9tYWluKSkpOwogfQogCiBXZWJQYWdlOjp+V2ViUGFnZSgpCkBAIC0yMjgsNiArMjE3
LDM2IEBAIHZvaWQgV2ViUGFnZTo6amF2YVNjcmlwdEFsZXJ0KFFXZWJGcmFtZSoKICAgICBmcHJp
bnRmKHN0ZG91dCwgIkFMRVJUOiAlc1xuIiwgbWVzc2FnZS50b1V0ZjgoKS5jb25zdERhdGEoKSk7
CiB9CiAKK3ZvaWQgV2ViUGFnZTo6cmVxdWVzdFBlcm1pc3Npb24oUVdlYkZyYW1lKiBmcmFtZSwg
UVdlYlBhZ2U6OlBlcm1pc3Npb25Eb21haW4gZG9tYWluKQoreworICAgIHN3aXRjaCAoZG9tYWlu
KSB7CisgICAgY2FzZSBOb3RpZmljYXRpb25zUGVybWlzc2lvbkRvbWFpbjoKKyAgICAgICAgaWYg
KCFtX2RydC0+bGF5b3V0VGVzdENvbnRyb2xsZXIoKS0+aWdub3JlUmVxZXN0Rm9yUGVybWlzc2lv
bigpKQorICAgICAgICAgICAgc2V0VXNlclBlcm1pc3Npb24oZnJhbWUsIGRvbWFpbiwgUGVybWlz
c2lvbkdyYW50ZWQpOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBicmVh
azsKKyAgICB9Cit9CisKK3ZvaWQgV2ViUGFnZTo6Y2hlY2tQZXJtaXNzaW9uKFFXZWJGcmFtZSog
ZnJhbWUsIFFXZWJQYWdlOjpQZXJtaXNzaW9uRG9tYWluIGRvbWFpbiwgUVdlYlBhZ2U6OlBlcm1p
c3Npb25Qb2xpY3kmIHBvbGljeSkKK3sKKyAgICBzd2l0Y2ggKGRvbWFpbikgeworICAgIGNhc2Ug
Tm90aWZpY2F0aW9uc1Blcm1pc3Npb25Eb21haW46CisgICAgICAgIHsKKyAgICAgICAgUVVybCB1
cmwgPSBmcmFtZS0+dXJsKCk7CisgICAgICAgIHBvbGljeSA9IG1fZHJ0LT5sYXlvdXRUZXN0Q29u
dHJvbGxlcigpLT5jaGVja0Rlc2t0b3BOb3RpZmljYXRpb25QZXJtaXNzaW9uKHVybC5zY2hlbWUo
KSArICI6Ly8iICsgdXJsLmhvc3QoKSkgPyBQZXJtaXNzaW9uR3JhbnRlZCA6IFBlcm1pc3Npb25E
ZW5pZWQ7CisgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgZGVmYXVsdDoKKyAgICAgICAg
YnJlYWs7CisgICAgfQorfQorCit2b2lkIFdlYlBhZ2U6OmNhbmNlbFJlcXVlc3RzRm9yUGVybWlz
c2lvbihRV2ViRnJhbWUqLCBRV2ViUGFnZTo6UGVybWlzc2lvbkRvbWFpbikKK3sKK30KKwogc3Rh
dGljIFFTdHJpbmcgdXJsU3VpdGFibGVGb3JUZXN0UmVzdWx0KGNvbnN0IFFTdHJpbmcmIHVybCkK
IHsKICAgICBpZiAodXJsLmlzRW1wdHkoKSB8fCAhdXJsLnN0YXJ0c1dpdGgoUUxhdGluMVN0cmlu
ZygiZmlsZTovLyIpKSkKQEAgLTk5MiwxNiArMTAxMSw2IEBAIHZvaWQgRHVtcFJlbmRlclRyZWU6
OnN3aXRjaEZvY3VzKGJvb2wgZm8KIAogfQogCi12b2lkIER1bXBSZW5kZXJUcmVlOjpjaGVja1Bl
cm1pc3Npb24oY29uc3QgUVVybCYgdXJsLCBOb3RpZmljYXRpb25QZXJtaXNzaW9uJiBwZXJtaXNz
aW9uKQotewotICAgIHBlcm1pc3Npb24gPSBtX2NvbnRyb2xsZXItPmNoZWNrRGVza3RvcE5vdGlm
aWNhdGlvblBlcm1pc3Npb24odXJsLnNjaGVtZSgpICsgIjovLyIgKyB1cmwuaG9zdCgpKSA/IE5v
dGlmaWNhdGlvbkFsbG93ZWQgOiBOb3RpZmljYXRpb25EZW5pZWQ7Ci19Ci0KLXZvaWQgRHVtcFJl
bmRlclRyZWU6OnJlcXVlc3RQZXJtaXNzaW9uKGNvbnN0IFFTdHJpbmcmIG9yaWdpbikKLXsKLSAg
ICBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6YWxsb3dOb3RpZmljYXRpb25Gb3JPcmlnaW4ob3Jp
Z2luKTsKLX0KLQogI2lmIGRlZmluZWQoUV9XU19YMTEpCiB2b2lkIER1bXBSZW5kZXJUcmVlOjpp
bml0aWFsaXplRm9udHMoKQogewpJbmRleDogV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvcXQv
RHVtcFJlbmRlclRyZWVRdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdFRvb2xzL0R1bXBSZW5kZXJU
cmVlL3F0L0R1bXBSZW5kZXJUcmVlUXQuaAkocmV2aXNpb24gNjM4NjMpCisrKyBXZWJLaXRUb29s
cy9EdW1wUmVuZGVyVHJlZS9xdC9EdW1wUmVuZGVyVHJlZVF0LmgJKHdvcmtpbmcgY29weSkKQEAg
LTExOSw4ICsxMTksNiBAQCBwdWJsaWMgUV9TTE9UUzoKICAgICB2b2lkIGR1bXBEYXRhYmFzZVF1
b3RhKFFXZWJGcmFtZSogZnJhbWUsIGNvbnN0IFFTdHJpbmcmIGRiTmFtZSk7CiAgICAgdm9pZCBz
dGF0dXNCYXJNZXNzYWdlKGNvbnN0IFFTdHJpbmcmIG1lc3NhZ2UpOwogICAgIHZvaWQgd2luZG93
Q2xvc2VSZXF1ZXN0ZWQoKTsKLSAgICB2b2lkIGNoZWNrUGVybWlzc2lvbihjb25zdCBRVXJsJiwg
Tm90aWZpY2F0aW9uUGVybWlzc2lvbiYpOwotICAgIHZvaWQgcmVxdWVzdFBlcm1pc3Npb24oY29u
c3QgUVN0cmluZyYpOwogCiBRX1NJR05BTFM6CiAgICAgdm9pZCBxdWl0KCk7CkBAIC0xOTMsNiAr
MTkxLDkgQEAgcHVibGljOgogcHVibGljIHNsb3RzOgogICAgIGJvb2wgc2hvdWxkSW50ZXJydXB0
SmF2YVNjcmlwdCgpIHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgYm9vbCBhbGxvd0dlb2xvY2F0aW9u
UmVxdWVzdChRV2ViRnJhbWUgKmZyYW1lKTsKKyAgICB2b2lkIHJlcXVlc3RQZXJtaXNzaW9uKFFX
ZWJGcmFtZSogZnJhbWUsIFFXZWJQYWdlOjpQZXJtaXNzaW9uRG9tYWluIGRvbWFpbik7CisgICAg
dm9pZCBjaGVja1Blcm1pc3Npb24oUVdlYkZyYW1lKiBmcmFtZSwgUVdlYlBhZ2U6OlBlcm1pc3Np
b25Eb21haW4gZG9tYWluLCBRV2ViUGFnZTo6UGVybWlzc2lvblBvbGljeSYgcG9saWN5KTsKKyAg
ICB2b2lkIGNhbmNlbFJlcXVlc3RzRm9yUGVybWlzc2lvbihRV2ViRnJhbWUqIGZyYW1lLCBRV2Vi
UGFnZTo6UGVybWlzc2lvbkRvbWFpbiBkb21haW4pOwogCiBwcm90ZWN0ZWQ6CiAgICAgYm9vbCBh
Y2NlcHROYXZpZ2F0aW9uUmVxdWVzdChRV2ViRnJhbWUqIGZyYW1lLCBjb25zdCBRTmV0d29ya1Jl
cXVlc3QmIHJlcXVlc3QsIE5hdmlnYXRpb25UeXBlIHR5cGUpOwpJbmRleDogV2ViS2l0VG9vbHMv
RHVtcFJlbmRlclRyZWUvcXQvTGF5b3V0VGVzdENvbnRyb2xsZXJRdC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvcXQvTGF5b3V0VGVzdENvbnRyb2xsZXJRdC5j
cHAJKHJldmlzaW9uIDYzODYzKQorKysgV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvcXQvTGF5
b3V0VGVzdENvbnRyb2xsZXJRdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY3LDYgKzY3LDcgQEAg
dm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6cmVzZXQoKQogICAgIG1fZ2xvYmFsRmxhZyA9IGZh
bHNlOwogICAgIG1fdXNlclN0eWxlU2hlZXRFbmFibGVkID0gZmFsc2U7CiAgICAgbV9kZXNrdG9w
Tm90aWZpY2F0aW9uQWxsb3dlZE9yaWdpbnMuY2xlYXIoKTsKKyAgICBtX2lnbm9yZURlc2t0b3BO
b3RpZmljYXRpb24gPSBmYWxzZTsKIAogICAgIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjpkdW1w
RWRpdGluZ0NhbGxiYWNrcyhmYWxzZSk7CiAgICAgRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OmR1
bXBGcmFtZUxvYWRlcihmYWxzZSk7CkBAIC0xOTMsOSArMTk0LDE0IEBAIHZvaWQgTGF5b3V0VGVz
dENvbnRyb2xsZXI6OmdyYW50RGVza3RvcE4KICAgICBtX2Rlc2t0b3BOb3RpZmljYXRpb25BbGxv
d2VkT3JpZ2lucy5hcHBlbmQob3JpZ2luKTsKIH0KIAordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxl
cjo6aWdub3JlRGVza3RvcE5vdGlmaWNhdGlvblBlcm1pc3Npb25SZXF1ZXN0cygpCit7CisgICAg
bV9pZ25vcmVEZXNrdG9wTm90aWZpY2F0aW9uID0gdHJ1ZTsKK30KKwogYm9vbCBMYXlvdXRUZXN0
Q29udHJvbGxlcjo6Y2hlY2tEZXNrdG9wTm90aWZpY2F0aW9uUGVybWlzc2lvbihjb25zdCBRU3Ry
aW5nJiBvcmlnaW4pCiB7Ci0gICAgcmV0dXJuIG1fZGVza3RvcE5vdGlmaWNhdGlvbkFsbG93ZWRP
cmlnaW5zLmNvbnRhaW5zKG9yaWdpbik7CisgICAgcmV0dXJuICFtX2lnbm9yZURlc2t0b3BOb3Rp
ZmljYXRpb24gJiYgbV9kZXNrdG9wTm90aWZpY2F0aW9uQWxsb3dlZE9yaWdpbnMuY29udGFpbnMo
b3JpZ2luKTsKIH0KIAogdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6ZGlzcGxheSgpCkluZGV4
OiBXZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS9xdC9MYXlvdXRUZXN0Q29udHJvbGxlclF0LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvcXQvTGF5b3V0VGVzdENv
bnRyb2xsZXJRdC5oCShyZXZpc2lvbiA2Mzg2MykKKysrIFdlYktpdFRvb2xzL0R1bXBSZW5kZXJU
cmVlL3F0L0xheW91dFRlc3RDb250cm9sbGVyUXQuaAkod29ya2luZyBjb3B5KQpAQCAtNzAsNiAr
NzAsNyBAQCBwdWJsaWM6CiAgICAgYm9vbCBjYW5PcGVuV2luZG93cygpIGNvbnN0IHsgcmV0dXJu
IG1fY2FuT3BlbldpbmRvd3M7IH0KICAgICBib29sIHNob3VsZER1bXBUaXRsZUNoYW5nZXMoKSBj
b25zdCB7IHJldHVybiBtX2R1bXBUaXRsZUNoYW5nZXM7IH0KICAgICBib29sIHdhaXRGb3JQb2xp
Y3koKSBjb25zdCB7IHJldHVybiBtX3dhaXRGb3JQb2xpY3k7IH0KKyAgICBib29sIGlnbm9yZVJl
cWVzdEZvclBlcm1pc3Npb24oKSBjb25zdCB7IHJldHVybiBtX2lnbm9yZURlc2t0b3BOb3RpZmlj
YXRpb247IH0KIAogICAgIHZvaWQgcmVzZXQoKTsKIApAQCAtMTIwLDYgKzEyMSw3IEBAIHB1Ymxp
YyBzbG90czoKICAgICB2b2lkIHNldENsb3NlUmVtYWluaW5nV2luZG93c1doZW5Db21wbGV0ZShi
b29sID0gZmFsc2UpIHt9CiAgICAgaW50IHdpbmRvd0NvdW50KCk7CiAgICAgdm9pZCBncmFudERl
c2t0b3BOb3RpZmljYXRpb25QZXJtaXNzaW9uKGNvbnN0IFFTdHJpbmcmIG9yaWdpbik7CisgICAg
dm9pZCBpZ25vcmVEZXNrdG9wTm90aWZpY2F0aW9uUGVybWlzc2lvblJlcXVlc3RzKCk7CiAgICAg
Ym9vbCBjaGVja0Rlc2t0b3BOb3RpZmljYXRpb25QZXJtaXNzaW9uKGNvbnN0IFFTdHJpbmcmIG9y
aWdpbik7CiAgICAgdm9pZCBkaXNwbGF5KCk7CiAgICAgdm9pZCBjbGVhckJhY2tGb3J3YXJkTGlz
dCgpOwpAQCAtMjUyLDYgKzI1NCw3IEBAIHByaXZhdGU6CiAgICAgV2ViQ29yZTo6RHVtcFJlbmRl
clRyZWUqIG1fZHJ0OwogICAgIFFXZWJIaXN0b3J5KiBtX3dlYkhpc3Rvcnk7CiAgICAgUVN0cmlu
Z0xpc3QgbV9kZXNrdG9wTm90aWZpY2F0aW9uQWxsb3dlZE9yaWdpbnM7CisgICAgYm9vbCBtX2ln
bm9yZURlc2t0b3BOb3RpZmljYXRpb247CiB9OwogCiAjZW5kaWYgLy8gTGF5b3V0VGVzdENvbnRy
b2xsZXJRdF9oCkluZGV4OiBXZWJLaXRUb29scy9RdFRlc3RCcm93c2VyL21haW4uY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYktpdFRvb2xzL1F0VGVzdEJyb3dzZXIvbWFpbi5jcHAJKHJldmlzaW9uIDYz
ODYzKQorKysgV2ViS2l0VG9vbHMvUXRUZXN0QnJvd3Nlci9tYWluLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtOTIsMjkgKzkyLDYgQEAgc3RhdGljIGJvb2wgZ1VzZUZyYW1lRmxhdHRlbmluZyA9IGZh
bHNlOwogc3RhdGljIGJvb2wgZ1VzZVFHTFdpZGdldFZpZXdwb3J0ID0gZmFsc2U7CiAjZW5kaWYK
IAotY2xhc3MgTm90aWZpY2F0aW9uc1Blcm1pc3Npb25Db250cm9sbGVyIDogcHVibGljIFFPYmpl
Y3QgewotICAgIFFfT0JKRUNUCi1wdWJsaWM6Ci0gICAgTm90aWZpY2F0aW9uc1Blcm1pc3Npb25D
b250cm9sbGVyKFFPYmplY3QqIHBhcmVudCkgOiBRT2JqZWN0KHBhcmVudCkgCi0gICAgewotICAg
ICAgICBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6c2V0Tm90aWZpY2F0aW9uc1JlY2VpdmVyKHRo
aXMpOwotICAgICAgICBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6c2V0Q2hlY2tQZXJtaXNzaW9u
RnVuY3Rpb24oY2hlY2tQZXJtaXNzaW9uKTsKLSAgICAgICAgRHVtcFJlbmRlclRyZWVTdXBwb3J0
UXQ6OnNldFJlcXVlc3RQZXJtaXNzaW9uRnVuY3Rpb24ocmVxdWVzdFBlcm1pc3Npb24pOwotICAg
IH0KLQotICAgIHN0YXRpYyB2b2lkIGNoZWNrUGVybWlzc2lvbihRT2JqZWN0KiwgY29uc3QgUVVy
bCYsIE5vdGlmaWNhdGlvblBlcm1pc3Npb24mIHBlcm1pc3Npb24pCi0gICAgewotICAgICAgICBw
ZXJtaXNzaW9uID0gTm90aWZpY2F0aW9uQWxsb3dlZDsKLSAgICB9Ci0KLSAgICBzdGF0aWMgdm9p
ZCByZXF1ZXN0UGVybWlzc2lvbihRT2JqZWN0KiwgY29uc3QgUVN0cmluZyYgb3JpZ2luKQotICAg
IHsKLSAgICAgICAgRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OmFsbG93Tm90aWZpY2F0aW9uRm9y
T3JpZ2luKG9yaWdpbik7Ci0gICAgfQotfTsKLQotTm90aWZpY2F0aW9uc1Blcm1pc3Npb25Db250
cm9sbGVyKiBub3RpZmljYXRpb25zUGVybWlzc2lvbkNvbnRyb2xsZXIgPSAwOwotCiBjbGFzcyBM
YXVuY2hlcldpbmRvdyA6IHB1YmxpYyBNYWluV2luZG93IHsKICAgICBRX09CSkVDVAogCkBAIC0y
MzMsOCArMjEwLDYgQEAgTGF1bmNoZXJXaW5kb3c6OkxhdW5jaGVyV2luZG93KExhdW5jaGVyVwog
ICAgIH0KIAogICAgIGNyZWF0ZUNocm9tZSgpOwotICAgIGlmICghbm90aWZpY2F0aW9uc1Blcm1p
c3Npb25Db250cm9sbGVyKQotICAgICAgICBub3RpZmljYXRpb25zUGVybWlzc2lvbkNvbnRyb2xs
ZXIgPSBuZXcgTm90aWZpY2F0aW9uc1Blcm1pc3Npb25Db250cm9sbGVyKFFDb3JlQXBwbGljYXRp
b246Omluc3RhbmNlKCkpOwogfQogCiBMYXVuY2hlcldpbmRvdzo6fkxhdW5jaGVyV2luZG93KCkK
SW5kZXg6IFdlYktpdFRvb2xzL1F0VGVzdEJyb3dzZXIvd2VicGFnZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViS2l0VG9vbHMvUXRUZXN0QnJvd3Nlci93ZWJwYWdlLmNwcAkocmV2aXNpb24gNjM4NjMp
CisrKyBXZWJLaXRUb29scy9RdFRlc3RCcm93c2VyL3dlYnBhZ2UuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC00OCw2ICs0OCw5IEBAIFdlYlBhZ2U6OldlYlBhZ2UoUU9iamVjdCogcGFyZW50KQogCiAg
ICAgY29ubmVjdChuZXR3b3JrQWNjZXNzTWFuYWdlcigpLCBTSUdOQUwoYXV0aGVudGljYXRpb25S
ZXF1aXJlZChRTmV0d29ya1JlcGx5KiwgUUF1dGhlbnRpY2F0b3IqKSksCiAgICAgICAgICAgICB0
aGlzLCBTTE9UKGF1dGhlbnRpY2F0aW9uUmVxdWlyZWQoUU5ldHdvcmtSZXBseSosIFFBdXRoZW50
aWNhdG9yKikpKTsKKyAgICBjb25uZWN0KHRoaXMsIFNJR05BTChyZXF1ZXN0UGVybWlzc2lvbkZy
b21Vc2VyKFFXZWJGcmFtZSosIFFXZWJQYWdlOjpQZXJtaXNzaW9uRG9tYWluKSksIHRoaXMsIFNM
T1QocmVxdWVzdFBlcm1pc3Npb24oUVdlYkZyYW1lKiwgUVdlYlBhZ2U6OlBlcm1pc3Npb25Eb21h
aW4pKSk7CisgICAgY29ubmVjdCh0aGlzLCBTSUdOQUwoY2hlY2tQZXJtaXNzaW9uRnJvbVVzZXIo
UVdlYkZyYW1lKiwgUVdlYlBhZ2U6OlBlcm1pc3Npb25Eb21haW4sIFFXZWJQYWdlOjpQZXJtaXNz
aW9uUG9saWN5JikpLCB0aGlzLCBTTE9UKGNoZWNrUGVybWlzc2lvbihRV2ViRnJhbWUqLCBRV2Vi
UGFnZTo6UGVybWlzc2lvbkRvbWFpbiwgUVdlYlBhZ2U6OlBlcm1pc3Npb25Qb2xpY3kmKSkpOwor
ICAgIGNvbm5lY3QodGhpcywgU0lHTkFMKGNhbmNlbFJlcXVlc3RzRm9yUGVybWlzc2lvbihRV2Vi
RnJhbWUqLCBRV2ViUGFnZTo6UGVybWlzc2lvbkRvbWFpbikpLCB0aGlzLCBTTE9UKGNhbmNlbFJl
cXVlc3RzRm9yUGVybWlzc2lvbihRV2ViRnJhbWUqLCBRV2ViUGFnZTo6UGVybWlzc2lvbkRvbWFp
bikpKTsKIH0KIAogdm9pZCBXZWJQYWdlOjphcHBseVByb3h5KCkKQEAgLTE2MiwzICsxNjUsMjMg
QEAgdm9pZCBXZWJQYWdlOjphdXRoZW50aWNhdGlvblJlcXVpcmVkKFFOZQogCiAgICAgZGVsZXRl
IGRpYWxvZzsKIH0KKwordm9pZCBXZWJQYWdlOjpyZXF1ZXN0UGVybWlzc2lvbihRV2ViRnJhbWUq
IGZyYW1lLCBRV2ViUGFnZTo6UGVybWlzc2lvbkRvbWFpbiBkb21haW4pCit7CisgICAgc2V0VXNl
clBlcm1pc3Npb24oZnJhbWUsIGRvbWFpbiwgUGVybWlzc2lvbkdyYW50ZWQpOworfQorCit2b2lk
IFdlYlBhZ2U6OmNoZWNrUGVybWlzc2lvbihRV2ViRnJhbWUqIGZyYW1lLCBRV2ViUGFnZTo6UGVy
bWlzc2lvbkRvbWFpbiBkb21haW4sIFFXZWJQYWdlOjpQZXJtaXNzaW9uUG9saWN5JiBwb2xpY3kp
Cit7CisgICAgc3dpdGNoIChkb21haW4pIHsKKyAgICBjYXNlIE5vdGlmaWNhdGlvbnNQZXJtaXNz
aW9uRG9tYWluOgorICAgICAgICBwb2xpY3kgPSBQZXJtaXNzaW9uR3JhbnRlZDsKKyAgICAgICAg
YnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgYnJlYWs7CisgICAgfQorfQorCit2b2lkIFdl
YlBhZ2U6OmNhbmNlbFJlcXVlc3RzRm9yUGVybWlzc2lvbihRV2ViRnJhbWUqLCBRV2ViUGFnZTo6
UGVybWlzc2lvbkRvbWFpbikKK3sKK30KSW5kZXg6IFdlYktpdFRvb2xzL1F0VGVzdEJyb3dzZXIv
d2VicGFnZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdFRvb2xzL1F0VGVzdEJyb3dzZXIvd2VicGFn
ZS5oCShyZXZpc2lvbiA2Mzg2MykKKysrIFdlYktpdFRvb2xzL1F0VGVzdEJyb3dzZXIvd2VicGFn
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC01Nyw2ICs1Nyw5IEBAIHB1YmxpYyBzbG90czoKICAgICB2
b2lkIHNldFVzZXJBZ2VudChjb25zdCBRU3RyaW5nJiB1YSkgeyBtX3VzZXJBZ2VudCA9IHVhOyB9
CiAgICAgYm9vbCBzaG91bGRJbnRlcnJ1cHRKYXZhU2NyaXB0KCk7CiAgICAgdm9pZCBhdXRoZW50
aWNhdGlvblJlcXVpcmVkKFFOZXR3b3JrUmVwbHkqLCBRQXV0aGVudGljYXRvciopOworICAgIHZv
aWQgcmVxdWVzdFBlcm1pc3Npb24oUVdlYkZyYW1lKiBmcmFtZSwgUVdlYlBhZ2U6OlBlcm1pc3Np
b25Eb21haW4gZG9tYWluKTsKKyAgICB2b2lkIGNoZWNrUGVybWlzc2lvbihRV2ViRnJhbWUqIGZy
YW1lLCBRV2ViUGFnZTo6UGVybWlzc2lvbkRvbWFpbiBkb21haW4sIFFXZWJQYWdlOjpQZXJtaXNz
aW9uUG9saWN5JiBwb2xpY3kpOworICAgIHZvaWQgY2FuY2VsUmVxdWVzdHNGb3JQZXJtaXNzaW9u
KFFXZWJGcmFtZSogZnJhbWUsIFFXZWJQYWdlOjpQZXJtaXNzaW9uRG9tYWluIGRvbWFpbik7CiAK
IHByaXZhdGU6CiAgICAgdm9pZCBhcHBseVByb3h5KCk7CkluZGV4OiBMYXlvdXRUZXN0cy9DaGFu
Z2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lvbiA2Mzg4
MykKKysrIExheW91dFRlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIw
IEBACisyMDEwLTA3LTIyICBZYWVsIEFoYXJvbiAgPHlhZWwuYWhhcm9uQG5va2lhLmNvbT4KKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBbUXRdIFF0V2Vi
S2l0IG5lZWRzIHB1YmxpYyBBUEkgZm9yIE5vdGlmaWNhdGlvbnMuCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00MTQxMworCisgICAgICAgIEFkZCBhIERS
VCBBUEkgdG8gc2V0IGEgZmxhZyBzbyB0aGF0IG5vdGlmaWNhdGlvbiByZXF1ZXN0cyBhcmUgaWdu
b3JlZCwKKyAgICAgICAgYW5kIGFkZCBhIHRlc3QgZm9yIGNhbmNlbGxpbmcgYSBwZW5kaW5nIG5v
dGlmaWNhdGlvbiByZXF1ZXN0LgorICAgICAgICBOZXcgQVBJIGFuZCB0ZXN0IGFyZSBkaXNhYmxl
ZCBmb3IgQ2hyb21pdW0gcG9ydC4KKworICAgICAgICAqIGZhc3Qvbm90aWZpY2F0aW9ucy9ub3Rp
ZmljYXRpb25zLWNhbmNlbC1yZXF1ZXN0LXBlcm1pc3Npb24tZXhwZWN0ZWQudHh0OiBBZGRlZC4K
KyAgICAgICAgKiBmYXN0L25vdGlmaWNhdGlvbnMvbm90aWZpY2F0aW9ucy1jYW5jZWwtcmVxdWVz
dC1wZXJtaXNzaW9uLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGZhc3Qvbm90aWZpY2F0aW9ucy9y
ZXNvdXJjZXM6IEFkZGVkLgorICAgICAgICAqIGZhc3Qvbm90aWZpY2F0aW9ucy9yZXNvdXJjZXMv
bm90aWZpY2F0aW9ucy1jYW5jZWwtcmVxdWVzdC1wZXJtaXNzaW9uLmh0bWw6IEFkZGVkLgorICAg
ICAgICAqIHBsYXRmb3JtL2Nocm9taXVtL3Rlc3RfZXhwZWN0YXRpb25zLnR4dDoKKwogMjAxMC0w
Ny0yMiAgWm9sdGFuIEhlcmN6ZWcgIDx6aGVyY3plZ0B3ZWJraXQub3JnPgogCiAgICAgICAgIFJl
dmlld2VkIGJ5IE5pa29sYXMgWmltbWVybWFubi4KSW5kZXg6IExheW91dFRlc3RzL2Zhc3Qvbm90
aWZpY2F0aW9ucy9ub3RpZmljYXRpb25zLWNhbmNlbC1yZXF1ZXN0LXBlcm1pc3Npb24tZXhwZWN0
ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3Qvbm90aWZpY2F0aW9ucy9ub3Rp
ZmljYXRpb25zLWNhbmNlbC1yZXF1ZXN0LXBlcm1pc3Npb24tZXhwZWN0ZWQudHh0CShyZXZpc2lv
biAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9ub3RpZmljYXRpb25zL25vdGlmaWNhdGlvbnMtY2Fu
Y2VsLXJlcXVlc3QtcGVybWlzc2lvbi1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCkBAIC0wLDAg
KzEsNSBAQAorREVTS1RPUCBOT1RJRklDQVRJT04gUEVSTUlTU0lPTiBSRVFVRVNURUQ6IGZpbGU6
Ly8KK0RFU0tUT1AgTk9USUZJQ0FUSU9OIFBFUk1JU1NJT04gUkVRVUVTVCBDQU5DRUxMRUQ6IGZp
bGU6Ly8KK1JlcXVlc3RpbmcgYW5kIGNhbmNlbGxpbmcgbm90aWZpY2F0aW9uIHBlcm1pc3Npb24u
Li4KKworUGFzcyBpZiBub3RpZmljYXRpb24gaXMgY2FuY2VsbGVkCkluZGV4OiBMYXlvdXRUZXN0
cy9mYXN0L25vdGlmaWNhdGlvbnMvbm90aWZpY2F0aW9ucy1jYW5jZWwtcmVxdWVzdC1wZXJtaXNz
aW9uLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9ub3RpZmljYXRpb25zL25v
dGlmaWNhdGlvbnMtY2FuY2VsLXJlcXVlc3QtcGVybWlzc2lvbi5odG1sCShyZXZpc2lvbiAwKQor
KysgTGF5b3V0VGVzdHMvZmFzdC9ub3RpZmljYXRpb25zL25vdGlmaWNhdGlvbnMtY2FuY2VsLXJl
cXVlc3QtcGVybWlzc2lvbi5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQ0IEBACis8aHRt
bD4KKzxoZWFkPgorICAgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KKworICAgICAg
ICAvLyBUaW1lb3V0IGlzIHRvIGVuc3VyZSB0aGF0IHRoZSBpZnJhbWUgd2FzIHJlbW92ZWQuCisg
ICAgICAgIHNldFRpbWVvdXQoaXNEb25lLDUwMCk7CisKKyAgICAgICAgZnVuY3Rpb24gbG9nKG1l
c3NhZ2UpCisgICAgICAgIHsKKyAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJy
ZXN1bHQiKS5pbm5lckhUTUwgKz0gbWVzc2FnZSArICI8YnI+IjsKKyAgICAgICAgfQorICAgICAg
ICAKKyAgICAgICAgZnVuY3Rpb24gcnVuVGVzdHMoKQorICAgICAgICB7CisgICAgICAgICAgICBp
ZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKSB7CisgICAgICAgICAgICAgICAgbGF5b3V0
VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4dCgpOworICAgICAgICAgICAgICAgIGxheW91dFRlc3RD
b250cm9sbGVyLndhaXRVbnRpbERvbmUoKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
aWYgKCF3aW5kb3cud2Via2l0Tm90aWZpY2F0aW9ucykgeworICAgICAgICAgICAgICAgIGxvZygi
RkFJTDogTm8gd2Via2l0Tm90aWZpY2F0aW9ucyBpbnRlcmZhY2UhIik7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJ0ZXN0
IikuaW5uZXJIVE1MPSJQYXNzIGlmIG5vdGlmaWNhdGlvbiBpcyBjYW5jZWxsZWQiOworICAgICAg
ICB9CisKKyAgICAgICAgZnVuY3Rpb24gaXNEb25lKCkKKyAgICAgICAgeworICAgICAgICAgICAg
aWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikgeworICAgICAgICAgICAgICAgIGxheW91
dFRlc3RDb250cm9sbGVyLm5vdGlmeURvbmUoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
CisgICAgPC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keSBvbmxvYWQ9InJ1blRlc3RzKCk7Ij4KKyAg
ICA8cD5SZXF1ZXN0aW5nIGFuZCBjYW5jZWxsaW5nIG5vdGlmaWNhdGlvbiBwZXJtaXNzaW9uLi4u
PC9wPgorICAgIAorPGRpdiBpZD0icmVzdWx0Ij48L2Rpdj4KKzxkaXYgaWQ9InRlc3QiPgorPGlm
cmFtZSBzcmM9InJlc291cmNlcy9ub3RpZmljYXRpb25zLWNhbmNlbC1yZXF1ZXN0LXBlcm1pc3Np
b24uaHRtbCIgd2lkdGg9ODAwIGhlaWdodD04MDA+PC9pZnJhbWU+Cis8L2Rpdj4KKzwvYm9keT4K
KzwvaHRtbD4KSW5kZXg6IExheW91dFRlc3RzL2Zhc3Qvbm90aWZpY2F0aW9ucy9yZXNvdXJjZXMv
bm90aWZpY2F0aW9ucy1jYW5jZWwtcmVxdWVzdC1wZXJtaXNzaW9uLmh0bWwKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gTGF5b3V0VGVzdHMvZmFzdC9ub3RpZmljYXRpb25zL3Jlc291cmNlcy9ub3RpZmljYXRpb25z
LWNhbmNlbC1yZXF1ZXN0LXBlcm1pc3Npb24uaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRl
c3RzL2Zhc3Qvbm90aWZpY2F0aW9ucy9yZXNvdXJjZXMvbm90aWZpY2F0aW9ucy1jYW5jZWwtcmVx
dWVzdC1wZXJtaXNzaW9uLmh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMjggQEAKKzxodG1s
PgorPGhlYWQ+CisgICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgorICAgICAgICBm
dW5jdGlvbiBsb2cobWVzc2FnZSkKKyAgICAgICAgeworICAgICAgICAgICAgcGFyZW50LmRvY3Vt
ZW50LmdldEVsZW1lbnRCeUlkKCJyZXN1bHQiKS5pbm5lckhUTUwgKz0gbWVzc2FnZSArICI8YnI+
IjsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgZnVuY3Rpb24gcnVuVGVzdHMoKQorICAg
ICAgICB7CisgICAgICAgICAgICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKSB7Cisg
ICAgICAgICAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4dCgpOworICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKSB7
CisgICAgICAgICAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuaWdub3JlRGVza3RvcE5vdGlm
aWNhdGlvblBlcm1pc3Npb25SZXF1ZXN0cygpOworICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICB3aW5kb3cud2Via2l0Tm90aWZpY2F0aW9ucy5yZXF1ZXN0UGVybWlzc2lvbigKKyAgICAgICAg
ICAgICAgICBmdW5jdGlvbigpIHsgbG9nKCJGQUlMOiBQZXJtaXNzaW9uIGNhbGxiYWNrIGludm9r
ZWQuIik7IH0KKyAgICAgICAgICAgICk7CisKKyAgICAgICAgfQorICAgIDwvc2NyaXB0PgorPC9o
ZWFkPgorPGJvZHkgb25sb2FkPSJydW5UZXN0cygpOyI+Cis8L2JvZHk+Cis8L2h0bWw+CkluZGV4
OiBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9jaHJvbWl1bS90ZXN0X2V4cGVjdGF0aW9ucy50eHQKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gTGF5b3V0VGVzdHMvcGxhdGZvcm0vY2hyb21pdW0vdGVzdF9leHBlY3RhdGlv
bnMudHh0CShyZXZpc2lvbiA2Mzg2MykKKysrIExheW91dFRlc3RzL3BsYXRmb3JtL2Nocm9taXVt
L3Rlc3RfZXhwZWN0YXRpb25zLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMjgyOCw2ICsyODI4LDkg
QEAgQlVHNDYxNTcgV0lOIFJFTEVBU0UgOiB0cmFuc2Zvcm1zLzJkL3RyYQogLy8gQ2hyb21pdW0g
ZG9lcyBub3QgdXNlIHRoZSBpY29uIGxvYWRlciBpbiBXZWJDb3JlIGZvciBsb2FkaW5nIG5vdGlm
aWNhdGlvbnMuCiBXT05URklYIFNLSVAgOiBodHRwL3Rlc3RzL25vdGlmaWNhdGlvbnMgPSBGQUlM
CiAKKy8vIENocm9taXVtIGRvZXMgbm90IHN1cHBvcnQgY2FuY2VsIGZvciBub3RpZmljYXRpb25z
IHBlcm1pc3Npb25zLgorQlVHV0s0Mjc5OCBTS0lQIDogZmFzdC9ub3RpZmljYXRpb25zL25vdGlm
aWNhdGlvbnMtY2FuY2VsLXJlcXVlc3QtcGVybWlzc2lvbi5odG1sID0gRkFJTAorCiBCVUc0NjI3
NiBXSU4gOiBmYXN0L3RleHQvaW50ZXJuYXRpb25hbC9raG1lci1zZWxlY3Rpb24uaHRtbCA9IElN
QUdFK1RFWFQKIAogLy8gSFRNTDUgR2VvbG9jYXRpb24gQVBJIGRvZXMgbm90IHVzZSB3aW5kb3cu
Y2xpZW50SW5mb3JtYXRpb24uCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>