<?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>50606</bug_id>
          
          <creation_ts>2010-12-06 17:38:52 -0800</creation_ts>
          <short_desc>WebKit2: Need a WebKit2 equivalent of the WebKit1 WebDatabaseManager</short_desc>
          <delta_ts>2010-12-10 15:45:54 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKit2</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Jessie Berlin">jberlin</reporter>
          <assigned_to name="Jessie Berlin">jberlin</assigned_to>
          <cc>abarth</cc>
    
    <cc>aroben</cc>
    
    <cc>beidson</cc>
    
    <cc>eric</cc>
    
    <cc>jberlin</cc>
    
    <cc>sam</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>317971</commentid>
    <comment_count>0</comment_count>
    <who name="Jessie Berlin">jberlin</who>
    <bug_when>2010-12-06 17:38:52 -0800</bug_when>
    <thetext>WebKit2 needs to expose methods to get a list of origins for which there are databases, delete the databases for a given origin, and delete all the databases.

In WebKit1, these methods are exposed on WebDatabaseManager.

&lt;rdar://problem/8706731&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>319833</commentid>
    <comment_count>1</comment_count>
      <attachid>76147</attachid>
    <who name="Jessie Berlin">jberlin</who>
    <bug_when>2010-12-09 17:54:01 -0800</bug_when>
    <thetext>Created attachment 76147
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>320112</commentid>
    <comment_count>2</comment_count>
      <attachid>76147</attachid>
    <who name="Adam Roben (:aroben)">aroben</who>
    <bug_when>2010-12-10 06:23:35 -0800</bug_when>
    <thetext>Comment on attachment 76147
Patch

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

Is it possible to add some API tests for this?

You should probably have Sam give the new API a once-over.

&gt; WebKit2/DerivedSources.make:28
&gt; +    $(WebKit2)/WebProcess/WebCoreSupport \

Is this really needed? We don&apos;t have any .messages.in files in WebCoreSupport, do we?

&gt; WebKit2/UIProcess/WebDatabaseManagerProxy.cpp:64
&gt; +    m_databaseOriginsCallbacks.set(callbackID, callback.get());

You can use callback.release() here to save a ref/deref.

&gt; WebKit2/UIProcess/WebDatabaseManagerProxy.cpp:81
&gt; +        securityOrigins-&gt;append(WebSecurityOrigin::create(originIdentifiers[i]).leakRef());

Who is in charge of dereffing these objects?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>320247</commentid>
    <comment_count>3</comment_count>
    <who name="Jessie Berlin">jberlin</who>
    <bug_when>2010-12-10 10:52:04 -0800</bug_when>
    <thetext>(In reply to comment #2)
&gt; (From update of attachment 76147 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=76147&amp;action=review
&gt; 
&gt; Is it possible to add some API tests for this?

Probably, is it ok to do that in a subsequent patch?

&gt; 
&gt; You should probably have Sam give the new API a once-over.

We talked about it earlier, but I think he is giving it another look now.

&gt; 
&gt; &gt; WebKit2/DerivedSources.make:28
&gt; &gt; +    $(WebKit2)/WebProcess/WebCoreSupport \
&gt; 
&gt; Is this really needed? We don&apos;t have any .messages.in files in WebCoreSupport, do we?

The WebDatabaseManager.messages.in is in WebCoreSupport. Do you think I should make a separate directory / filter for Databases  and move all of the WebDatabaseManager stuff in there?

&gt; 
&gt; &gt; WebKit2/UIProcess/WebDatabaseManagerProxy.cpp:64
&gt; &gt; +    m_databaseOriginsCallbacks.set(callbackID, callback.get());
&gt; 
&gt; You can use callback.release() here to save a ref/deref.

Done.

&gt; 
&gt; &gt; WebKit2/UIProcess/WebDatabaseManagerProxy.cpp:81
&gt; &gt; +        securityOrigins-&gt;append(WebSecurityOrigin::create(originIdentifiers[i]).leakRef());
&gt; 
&gt; Who is in charge of dereffing these objects?

Changed to:

    size_t originIdentifiersCount = originIdentifiers.size();
    Vector&lt;RefPtr&lt;APIObject&gt; &gt; securityOrigins(originIdentifiersCount);

    for (size_t i = 0; i &lt; originIdentifiersCount; ++i)
        securityOrigins[i] = WebSecurityOrigin::create(originIdentifiers[i]);

    callback-&gt;performCallbackWithReturnValue(ImmutableArray::adopt(securityOrigins).get());</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>320250</commentid>
    <comment_count>4</comment_count>
      <attachid>76147</attachid>
    <who name="Adam Roben (:aroben)">aroben</who>
    <bug_when>2010-12-10 10:54:28 -0800</bug_when>
    <thetext>Comment on attachment 76147
Patch

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

&gt;&gt;&gt; WebKit2/DerivedSources.make:28
&gt;&gt;&gt; +    $(WebKit2)/WebProcess/WebCoreSupport \
&gt;&gt; 
&gt;&gt; Is this really needed? We don&apos;t have any .messages.in files in WebCoreSupport, do we?
&gt; 
&gt; The WebDatabaseManager.messages.in is in WebCoreSupport. Do you think I should make a separate directory / filter for Databases  and move all of the WebDatabaseManager stuff in there?

It probably doesn&apos;t matter very much. I don&apos;t feel bothered enough by it to have you change it.

&gt;&gt;&gt; WebKit2/UIProcess/WebDatabaseManagerProxy.cpp:81
&gt;&gt;&gt; +        securityOrigins-&gt;append(WebSecurityOrigin::create(originIdentifiers[i]).leakRef());
&gt;&gt; 
&gt;&gt; Who is in charge of dereffing these objects?
&gt; 
&gt; Changed to:
&gt; 
&gt;     size_t originIdentifiersCount = originIdentifiers.size();
&gt;     Vector&lt;RefPtr&lt;APIObject&gt; &gt; securityOrigins(originIdentifiersCount);
&gt; 
&gt;     for (size_t i = 0; i &lt; originIdentifiersCount; ++i)
&gt;         securityOrigins[i] = WebSecurityOrigin::create(originIdentifiers[i]);
&gt; 
&gt;     callback-&gt;performCallbackWithReturnValue(ImmutableArray::adopt(securityOrigins).get());

Beautiful!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>320389</commentid>
    <comment_count>5</comment_count>
      <attachid>76147</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2010-12-10 13:57:31 -0800</bug_when>
    <thetext>Comment on attachment 76147
Patch

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

&gt; WebKit2/UIProcess/WebDatabaseManagerProxy.h:47
&gt; +typedef GenericCallback&lt;WKArrayRef, ImmutableArray*&gt; DatabaseOriginsCallback;

I don&apos;t think the ImmutableArray* type is needed here. It should be inferred.

&gt; WebKit2/UIProcess/WebDatabaseManagerProxy.h:76
&gt; +    HashMap&lt;uint64_t, RefPtr&lt;DatabaseOriginsCallback&gt; &gt; m_databaseOriginsCallbacks;
&gt; +
&gt; +};
&gt; +

Extra newline.

&gt; WebKit2/UIProcess/WebPageProxy.h:467
&gt; +template&lt;typename T&gt;
&gt; +void invalidateCallbackMap(HashMap&lt;uint64_t, T&gt;&amp; map)
&gt; +{
&gt; +    Vector&lt;T&gt; callbacksVector;
&gt; +    copyValuesToVector(map, callbacksVector);
&gt; +    for (size_t i = 0, size = callbacksVector.size(); i &lt; size; ++i)
&gt; +        callbacksVector[i]-&gt;invalidate();
&gt; +    map.clear();
&gt; +}
&gt; +
&gt;  } // namespace WebKit
&gt;  

Let&apos;s move this to GenericCallback.h</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>320427</commentid>
    <comment_count>6</comment_count>
    <who name="Jessie Berlin">jberlin</who>
    <bug_when>2010-12-10 14:39:04 -0800</bug_when>
    <thetext>(In reply to comment #5)
&gt; (From update of attachment 76147 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=76147&amp;action=review
&gt; 
&gt; &gt; WebKit2/UIProcess/WebDatabaseManagerProxy.h:47
&gt; &gt; +typedef GenericCallback&lt;WKArrayRef, ImmutableArray*&gt; DatabaseOriginsCallback;
&gt; 
&gt; I don&apos;t think the ImmutableArray* type is needed here. It should be inferred.

Removed.

&gt; 
&gt; &gt; WebKit2/UIProcess/WebDatabaseManagerProxy.h:76
&gt; &gt; +    HashMap&lt;uint64_t, RefPtr&lt;DatabaseOriginsCallback&gt; &gt; m_databaseOriginsCallbacks;
&gt; &gt; +
&gt; &gt; +};
&gt; &gt; +
&gt; 
&gt; Extra newline.

Removed.

&gt; 
&gt; &gt; WebKit2/UIProcess/WebPageProxy.h:467
&gt; &gt; +template&lt;typename T&gt;
&gt; &gt; +void invalidateCallbackMap(HashMap&lt;uint64_t, T&gt;&amp; map)
&gt; &gt; +{
&gt; &gt; +    Vector&lt;T&gt; callbacksVector;
&gt; &gt; +    copyValuesToVector(map, callbacksVector);
&gt; &gt; +    for (size_t i = 0, size = callbacksVector.size(); i &lt; size; ++i)
&gt; &gt; +        callbacksVector[i]-&gt;invalidate();
&gt; &gt; +    map.clear();
&gt; &gt; +}
&gt; &gt; +
&gt; &gt;  } // namespace WebKit
&gt; &gt;  
&gt; 
&gt; Let&apos;s move this to GenericCallback.h

Done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>320448</commentid>
    <comment_count>7</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-12-10 15:23:54 -0800</bug_when>
    <thetext>http://trac.webkit.org/changeset/73808 might have broken Qt Linux Release</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>320452</commentid>
    <comment_count>8</comment_count>
    <who name="Jessie Berlin">jberlin</who>
    <bug_when>2010-12-10 15:31:04 -0800</bug_when>
    <thetext>(In reply to comment #7)
&gt; http://trac.webkit.org/changeset/73808 might have broken Qt Linux Release

Attempting to fix now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>320463</commentid>
    <comment_count>9</comment_count>
      <attachid>76147</attachid>
    <who name="Jessie Berlin">jberlin</who>
    <bug_when>2010-12-10 15:44:19 -0800</bug_when>
    <thetext>Comment on attachment 76147
Patch

Committed in r73808
http://trac.webkit.org/changeset/73808
Qt build fix landed in r73814
http://trac.webkit.org/changeset/73814</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>320464</commentid>
    <comment_count>10</comment_count>
    <who name="Jessie Berlin">jberlin</who>
    <bug_when>2010-12-10 15:45:54 -0800</bug_when>
    <thetext>I will add tests in a subsequent patch. There needs to be some work done so that deleteAllDatabases in the tests does not delete all the databases for the person running the tests.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>76147</attachid>
            <date>2010-12-09 17:54:01 -0800</date>
            <delta_ts>2010-12-10 15:44:19 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>wk2DatabasesAPIDraft2.patch</filename>
            <type>text/plain</type>
            <size>48294</size>
            <attacher name="Jessie Berlin">jberlin</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYktpdDIvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdDIvQ2hhbmdlTG9n
CShyZXZpc2lvbiA3MzY2MCkKKysrIFdlYktpdDIvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTAyIEBACisyMDEwLTEyLTA5ICBKZXNzaWUgQmVybGluICA8amJlcmxpbkBhcHBs
ZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
V2ViS2l0MjogTmVlZCBhIFdlYktpdDIgZXF1aXZhbGVudCBvZiB0aGUgV2ViS2l0MSBXZWJEYXRh
YmFzZU1hbmFnZXIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTUwNjA2CisKKyAgICAgICAgQWRkIGEgV2ViRGF0YWJhc2VNYW5hZ2VyUHJveHkgb3duZWQg
YnkgdGhlIFdlYkNvbnRleHQuCisKKyAgICAgICAgRXhwb3NlIEFQSSAoc2ltaWxhciB0byB0aGUg
V2ViS2l0MSBBUEkpIHRvIGdldCBhIGxpc3Qgb2Ygb3JpZ2lucyBmb3Igd2hpY2ggdGhlcmUgYXJl
CisgICAgICAgIERhdGFiYXNlcywgZGVsZXRlIGFsbCB0aGUgZGF0YWJhc2VzIGZvciBhIGdpdmVu
IG9yaWdpbiwgYW5kIGRlbGV0ZSBhbGwgdGhlIGRhdGFiYXNlcy4KKworICAgICAgICBBZGQgV2Vi
RGF0YWJhc2VNYW5hZ2VyIGFuZCBXZWJEYXRhYmFzZU1hbmFnZXJQcm94eSBhcyBtZXNzYWdlcyBy
ZWNlaXZlcnMuCisgICAgICAgICogRGVyaXZlZFNvdXJjZXMubWFrZToKKyAgICAgICAgKiBQbGF0
Zm9ybS9Db3JlSVBDL01lc3NhZ2VJRC5oOgorCisgICAgICAgIEFkZCB0aGUgV2ViRGF0YWJhc2VN
YW5hZ2VyUHJveHkgYXMgYSBVSVByb2Nlc3MgdHlwZSAoRGF0YWJhc2VNYW5hZ2VyKS4KKyAgICAg
ICAgKiBTaGFyZWQvQVBJL2MvV0tCYXNlLmg6CisgICAgICAgICogU2hhcmVkL0FQSU9iamVjdC5o
OgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQy9XS0FQSUNhc3QuaDoKKworICAgICAgICAqIFVJ
UHJvY2Vzcy9BUEkvQy9XS0NvbnRleHQuY3BwOgorICAgICAgICAoV0tDb250ZXh0R2V0RGF0YWJh
c2VNYW5hZ2VyKToKKyAgICAgICAgRXhwb3NlIEFQSSB0byBnZXQgdGhlIERhdGFiYXNlTWFuYWdl
ci4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0MvV0tDb250ZXh0Lmg6CisKKyAgICAgICAgKiBV
SVByb2Nlc3MvQVBJL0MvV0tEYXRhYmFzZU1hbmFnZXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdL
RGF0YWJhc2VNYW5hZ2VyR2V0VHlwZUlEKToKKyAgICAgICAgKFdLRGF0YWJhc2VNYW5hZ2VyR2V0
RGF0YWJhc2VPcmlnaW5zKToKKyAgICAgICAgKGNhbGxHZXREYXRhYmFzZU9yaWdpbnNCbG9ja0Js
b2NrQW5kRGlzcG9zZSk6CisgICAgICAgIChXS0RhdGFiYXNlTWFuYWdlckdldERhdGFiYXNlT3Jp
Z2luc19iKToKKyAgICAgICAgKFdLRGF0YWJhc2VNYW5hZ2VyRGVsZXRlRGF0YWJhc2VzRm9yT3Jp
Z2luKToKKyAgICAgICAgKFdLRGF0YWJhc2VNYW5hZ2VyRGVsZXRlQWxsRGF0YWJhc2VzKToKKyAg
ICAgICAgKiBVSVByb2Nlc3MvQVBJL0MvV0tEYXRhYmFzZU1hbmFnZXIuaDogQWRkZWQuCisKKyAg
ICAgICAgKiBVSVByb2Nlc3MvV2ViQ29udGV4dC5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYkNv
bnRleHQ6OldlYkNvbnRleHQpOgorICAgICAgICBDcmVhdGUgdGhlIFdlYkRhdGFiYXNlTWFuYWdl
clByb3h5LgorICAgICAgICAoV2ViS2l0OjpXZWJDb250ZXh0Ojpwcm9jZXNzRGlkQ2xvc2UpOgor
ICAgICAgICBJbnZhbGlkYXRlIHRoZSBXZWJEYXRhYmFzZU1hbmFnZXJQcm94eS4KKyAgICAgICAg
KFdlYktpdDo6V2ViQ29udGV4dDo6ZGlkUmVjZWl2ZU1lc3NhZ2UpOgorICAgICAgICBGb3J3YXJk
IG1lc3NhZ2VzIHRvIHRoZSBXZWJEYXRhYmFzZU1hbmFnZXJQcm94eS4KKyAgICAgICAgKiBVSVBy
b2Nlc3MvV2ViQ29udGV4dC5oOgorICAgICAgICAoV2ViS2l0OjpXZWJDb250ZXh0OjpkYXRhYmFz
ZU1hbmFnZXJQcm94eSk6CisKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViRGF0YWJhc2VNYW5hZ2Vy
UHJveHkuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdDo6V2ViRGF0YWJhc2VNYW5hZ2VyUHJv
eHk6OmNyZWF0ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYkRhdGFiYXNlTWFuYWdlclByb3h5OjpX
ZWJEYXRhYmFzZU1hbmFnZXJQcm94eSk6CisgICAgICAgIChXZWJLaXQ6OldlYkRhdGFiYXNlTWFu
YWdlclByb3h5Ojp+V2ViRGF0YWJhc2VNYW5hZ2VyUHJveHkpOgorICAgICAgICAoV2ViS2l0OjpX
ZWJEYXRhYmFzZU1hbmFnZXJQcm94eTo6aW52YWxpZGF0ZSk6CisgICAgICAgIEludmFsaWRhdGUg
dGhlIG1hcCBvZiBjYWxsYmFja3MgZm9yIGdldERhdGFiYXNlT3JpZ2lucy4KKyAgICAgICAgKFdl
YktpdDo6V2ViRGF0YWJhc2VNYW5hZ2VyUHJveHk6OmdldERhdGFiYXNlT3JpZ2lucyk6CisgICAg
ICAgIFN0b3JlIHRoZSBjYWxsYmFjayBhbmQgc2VuZCB0aGUgcmVxdWVzdCBmb3IgdGhlIG9yaWdp
bnMgd2hpY2ggaGF2ZSBkYXRhYmFzZXMgdG8gdGhlCisgICAgICAgIFdlYlByb2Nlc3MuCisgICAg
ICAgIChXZWJLaXQ6OldlYkRhdGFiYXNlTWFuYWdlclByb3h5OjpkaWRHZXREYXRhYmFzZU9yaWdp
bnMpOgorICAgICAgICBDYWxsIHRoZSBjYWxsYmFjayBmdW5jdGlvbiB3aXRoIHRoZSBTZWN1cml0
eU9yaWdpbnMgY3JlYXRlZCBmcm9tIHRoZSBpZGVudGlmaWVycyByZWNlaXZlZC4KKyAgICAgICAg
KFdlYktpdDo6V2ViRGF0YWJhc2VNYW5hZ2VyUHJveHk6OmRlbGV0ZURhdGFiYXNlc0Zvck9yaWdp
bik6CisgICAgICAgIElmIHRoZSBvcmlnaW4gZXhpc3RzLCBzZW5kIHRoZSBtZXNzYWdlIG9uIHRv
IHRoZSBXZWJQcm9jZXNzIHRvIGRlbGV0ZSB0aGUgZGF0YWJhc2VzCisgICAgICAgIGFzc29jaWF0
ZWQgd2l0aCB0aGF0IG9yaWdpbi4KKyAgICAgICAgKFdlYktpdDo6V2ViRGF0YWJhc2VNYW5hZ2Vy
UHJveHk6OmRlbGV0ZUFsbERhdGFiYXNlcyk6CisgICAgICAgIFNlbmQgdGhlIG1lc3NhZ2UgdG8g
dGhlIFdlYlByb2Nlc3MgdG8gZGVsZXRlIGFsbCB0aGUgZGF0YWJhc2VzLgorICAgICAgICAqIFVJ
UHJvY2Vzcy9XZWJEYXRhYmFzZU1hbmFnZXJQcm94eS5oOiBBZGRlZC4KKyAgICAgICAgKFdlYktp
dDo6V2ViRGF0YWJhc2VNYW5hZ2VyUHJveHk6OnR5cGUpOgorICAgICAgICAqIFVJUHJvY2Vzcy9X
ZWJEYXRhYmFzZU1hbmFnZXJQcm94eS5tZXNzYWdlcy5pbjogQWRkZWQuCisKKyAgICAgICAgKiBV
SVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcDoKKyAgICAgICAgTW92ZSBpbnZhbGlkYXRlQ2FsbGJh
Y2tNYXAgZnJvbSBoZXJlIC4uLgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaDoK
KyAgICAgICAgKFdlYktpdDo6aW52YWxpZGF0ZUNhbGxiYWNrTWFwKToKKyAgICAgICAgLi4gdG8g
aGVyZSBzbyB0aGF0IGl0IGNhbiBiZSB1c2VkIGVsc2V3aGVyZSAoZS5nLiBieSBXZWJEYXRhYmFz
ZU1hbmFnZXJQcm94eSkuCisKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUHJvY2Vzc1Byb3h5LmNw
cDoKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Byb3h5OjpkaWRSZWNlaXZlTWVzc2FnZSk6
CisgICAgICAgIEZvcndhcmQgb24gYWxsIG1lc3NhZ2VzIGRlc3RpbmVkIGZvciB0aGUgV2ViRGF0
YWJhc2VNYW5hZ2VyUHJveHkgdG8gdGhlIFdlYkNvbnRleHQuCisKKyAgICAgICAgKiBXZWJQcm9j
ZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkRhdGFiYXNlTWFuYWdlci5jcHA6CisgICAgICAgIChXZWJL
aXQ6OldlYkRhdGFiYXNlTWFuYWdlcjo6ZGlkUmVjZWl2ZU1lc3NhZ2UpOgorICAgICAgICAoV2Vi
S2l0OjpXZWJEYXRhYmFzZU1hbmFnZXI6OmdldERhdGFiYXNlT3JpZ2lucyk6CisgICAgICAgIFNl
bmQgYW4gYXJyYXkgb2YgdGhlIGlkZW50aWZpZXJzIGZvciB0aGUgU2VjdXJpdHlPcmlnaW5zIGZv
ciB3aGljaCB0aGVyZSBhcmUgZGF0YWJhc2VzIHRvCisgICAgICAgIHRoZSBVSVByb2Nlc3MuCisg
ICAgICAgIChXZWJLaXQ6OldlYkRhdGFiYXNlTWFuYWdlcjo6ZGVsZXRlRGF0YWJhc2VzRm9yT3Jp
Z2luKToKKyAgICAgICAgSWYgdGhlIFNlY3VyaXR5T3JpZ2luIHdpdGggdGhhdCBpZGVudGlmaWVy
IGV4aXN0cywgdGVsbCB0aGUgRGF0YWJhc2VUcmFja2VyIHRvIGRlbGV0ZSB0aGUKKyAgICAgICAg
ZGF0YWJhc2VzIGZvciB0aGF0IG9yaWdpbi4KKyAgICAgICAgKFdlYktpdDo6V2ViRGF0YWJhc2VN
YW5hZ2VyOjpkZWxldGVBbGxEYXRhYmFzZXMpOgorICAgICAgICBUZWxsIHRoZSBEYXRhYmFzZVRy
YWNrZXIgdG8gZGVsZXRlIHRoZSBkYXRhYmFzZXMgZm9yIHRoYXQgb3JpZ2luLgorICAgICAgICAq
IFdlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViRGF0YWJhc2VNYW5hZ2VyLmg6CisgICAgICAg
ICogV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJEYXRhYmFzZU1hbmFnZXIubWVzc2FnZXMu
aW46IEFkZGVkLgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUHJvY2Vzcy5jcHA6CisgICAgICAg
IChXZWJLaXQ6OldlYlByb2Nlc3M6OmRpZFJlY2VpdmVNZXNzYWdlKToKKworICAgICAgICAqIFdl
YktpdDIucHJvOgorICAgICAgICBBZGQgV0tEYXRhYmFzZU1hbmFnZXIuY3BwLy5oIGFuZCBXZWJE
YXRhYmFzZU1hbmFnZXJQcm94eS5jcHAvLmgKKyAgICAgICAgKiBXZWJLaXQyLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2o6CisgICAgICAgIERpdHRvLCBhbHNvIGFkZCBXZWJEYXRhYmFzZU1hbmFn
ZXJQcm94eS5tZXNzYWdlcy5pbiBhbmQgV2ViRGF0YWJhc2VNYW5hZ2VyLm1lc3NhZ2VzLmluLgor
ICAgICAgICAqIHdpbi9XZWJLaXQyLnZjcHJvajoKKyAgICAgICAgRGl0dG8uCisgICAgICAgICog
d2luL1dlYktpdDJHZW5lcmF0ZWQubWFrZToKKyAgICAgICAgTWFrZSBzdXJlIFdLRGF0YWJhc2VN
YW5hZ2VyLmggaXMgY29waWVkIGludG8gV2ViS2l0QnVpbGQgb24gV2luZG93cy4KKwogMjAxMC0x
Mi0wOSAgQnJhZHkgRWlkc29uICA8YmVpZHNvbkBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3
ZWQgYnkgU2FtIFdlaW5pZy4KSW5kZXg6IFdlYktpdDIvRGVyaXZlZFNvdXJjZXMubWFrZQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJLaXQyL0Rlcml2ZWRTb3VyY2VzLm1ha2UJKHJldmlzaW9uIDczNjU2KQor
KysgV2ViS2l0Mi9EZXJpdmVkU291cmNlcy5tYWtlCSh3b3JraW5nIGNvcHkpCkBAIC0yNSw2ICsy
NSw3IEBAIFZQQVRIID0gXAogICAgICQoV2ViS2l0MikvU2hhcmVkL1BsdWdpbnMgXAogICAgICQo
V2ViS2l0MikvV2ViUHJvY2Vzcy9BdXRoZW50aWNhdGlvbiBcCiAgICAgJChXZWJLaXQyKS9XZWJQ
cm9jZXNzL1BsdWdpbnMgXAorICAgICQoV2ViS2l0MikvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9y
dCBcCiAgICAgJChXZWJLaXQyKS9XZWJQcm9jZXNzL1dlYlBhZ2UgXAogICAgICQoV2ViS2l0Mikv
V2ViUHJvY2VzcyBcCiAgICAgJChXZWJLaXQyKS9VSVByb2Nlc3MgXApAQCAtNDEsNiArNDIsOCBA
QCBNRVNTQUdFX1JFQ0VJVkVSUyA9IFwKICAgICBQbHVnaW5Qcm9jZXNzUHJveHkgXAogICAgIFBs
dWdpblByb3h5IFwKICAgICBXZWJDb250ZXh0IFwKKyAgICBXZWJEYXRhYmFzZU1hbmFnZXIgXAor
ICAgIFdlYkRhdGFiYXNlTWFuYWdlclByb3h5IFwKICAgICBXZWJJbnNwZWN0b3IgXAogICAgIFdl
Ykluc3BlY3RvclByb3h5IFwKICAgICBXZWJQYWdlIFwKSW5kZXg6IFdlYktpdDIvV2ViS2l0Mi5w
cm8KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViS2l0Mi9XZWJLaXQyLnBybwkocmV2aXNpb24gNzM2NTYpCisr
KyBXZWJLaXQyL1dlYktpdDIucHJvCSh3b3JraW5nIGNvcHkpCkBAIC0yNzYsNiArMjc2LDcgQEAg
SEVBREVSUyArPSBcCiAgICAgVUlQcm9jZXNzL0FQSS9DL1dLQ29udGV4dFByaXZhdGUuaCBcCiAg
ICAgVUlQcm9jZXNzL0FQSS9DL1dLQ3JlZGVudGlhbC5oIFwKICAgICBVSVByb2Nlc3MvQVBJL0Mv
V0tDcmVkZW50aWFsVHlwZXMuaCBcCisgICAgVUlQcm9jZXNzL0FQSS9DL1dLRGF0YWJhc2VNYW5h
Z2VyLmggXAogICAgIFVJUHJvY2Vzcy9BUEkvQy9XS0Rvd25sb2FkLmggXAogICAgIFVJUHJvY2Vz
cy9BUEkvQy9XS0ZyYW1lLmggXAogICAgIFVJUHJvY2Vzcy9BUEkvQy9XS0ZyYW1lUG9saWN5TGlz
dGVuZXIuaCBcCkBAIC0zMjIsNiArMzIzLDcgQEAgSEVBREVSUyArPSBcCiAgICAgVUlQcm9jZXNz
L1dlYkNvbnRleHRJbmplY3RlZEJ1bmRsZUNsaWVudC5oIFwKICAgICBVSVByb2Nlc3MvV2ViQ29u
dGV4dE1lbnVQcm94eS5oIFwKICAgICBVSVByb2Nlc3MvV2ViQ29udGV4dFVzZXJNZXNzYWdlQ29k
ZXJzLmggXAorICAgIFVJUHJvY2Vzcy9XZWJEYXRhYmFzZU1hbmFnZXJQcm94eS5oIFwKICAgICBV
SVByb2Nlc3MvV2ViRG93bmxvYWRDbGllbnQuaCBcCiAgICAgVUlQcm9jZXNzL1dlYkVkaXRDb21t
YW5kUHJveHkuaCBcCiAgICAgVUlQcm9jZXNzL1dlYkZpbmRDbGllbnQuaCBcCkBAIC00NzIsNiAr
NDc0LDcgQEAgU09VUkNFUyArPSBcCiAgICAgVUlQcm9jZXNzL0FQSS9DL1dLQmFja0ZvcndhcmRM
aXN0SXRlbS5jcHAgXAogICAgIFVJUHJvY2Vzcy9BUEkvQy9XS0NvbnRleHQuY3BwIFwKICAgICBV
SVByb2Nlc3MvQVBJL0MvV0tDcmVkZW50aWFsLmNwcCBcCisgICAgVUlQcm9jZXNzL0FQSS9DL1dL
RGF0YWJhc2VNYW5hZ2VyLmNwcCBcCiAgICAgVUlQcm9jZXNzL0FQSS9DL1dLRG93bmxvYWQuY3Bw
IFwKICAgICBVSVByb2Nlc3MvQVBJL0MvV0tGcmFtZS5jcHAgXAogICAgIFVJUHJvY2Vzcy9BUEkv
Qy9XS0ZyYW1lUG9saWN5TGlzdGVuZXIuY3BwIFwKQEAgLTUxMSw2ICs1MTQsNyBAQCBTT1VSQ0VT
ICs9IFwKICAgICBVSVByb2Nlc3MvV2ViQ29udGV4dC5jcHAgXAogICAgIFVJUHJvY2Vzcy9XZWJD
b250ZXh0SW5qZWN0ZWRCdW5kbGVDbGllbnQuY3BwIFwKICAgICBVSVByb2Nlc3MvV2ViQ29udGV4
dE1lbnVQcm94eS5jcHAgXAorICAgIFVJUHJvY2Vzcy9XZWJEYXRhYmFzZU1hbmFnZXJQcm94eS5j
cHAgXAogICAgIFVJUHJvY2Vzcy9XZWJEb3dubG9hZENsaWVudC5jcHAgXAogICAgIFVJUHJvY2Vz
cy9XZWJFZGl0Q29tbWFuZFByb3h5LmNwcCBcCiAgICAgVUlQcm9jZXNzL1dlYkZpbmRDbGllbnQu
Y3BwIFwKSW5kZXg6IFdlYktpdDIvUGxhdGZvcm0vQ29yZUlQQy9NZXNzYWdlSUQuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJLaXQyL1BsYXRmb3JtL0NvcmVJUEMvTWVzc2FnZUlELmgJKHJldmlzaW9uIDcz
NjU2KQorKysgV2ViS2l0Mi9QbGF0Zm9ybS9Db3JlSVBDL01lc3NhZ2VJRC5oCSh3b3JraW5nIGNv
cHkpCkBAIC0zOCw2ICszOCw3IEBAIGVudW0gTWVzc2FnZUNsYXNzIHsKICAgICBNZXNzYWdlQ2xh
c3NBdXRoZW50aWNhdGlvbk1hbmFnZXIsCiAgICAgTWVzc2FnZUNsYXNzRHJhd2luZ0FyZWEsCiAg
ICAgTWVzc2FnZUNsYXNzSW5qZWN0ZWRCdW5kbGUsCisgICAgTWVzc2FnZUNsYXNzV2ViRGF0YWJh
c2VNYW5hZ2VyLAogICAgIE1lc3NhZ2VDbGFzc1dlYkluc3BlY3RvciwKICAgICBNZXNzYWdlQ2xh
c3NXZWJQYWdlLAogICAgIE1lc3NhZ2VDbGFzc1dlYlByb2Nlc3MsCkBAIC00Nyw2ICs0OCw3IEBA
IGVudW0gTWVzc2FnZUNsYXNzIHsKICAgICBNZXNzYWdlQ2xhc3NEb3dubG9hZFByb3h5LAogICAg
IE1lc3NhZ2VDbGFzc1dlYkNvbnRleHQsCiAgICAgTWVzc2FnZUNsYXNzV2ViQ29udGV4dExlZ2Fj
eSwKKyAgICBNZXNzYWdlQ2xhc3NXZWJEYXRhYmFzZU1hbmFnZXJQcm94eSwKICAgICBNZXNzYWdl
Q2xhc3NXZWJJbnNwZWN0b3JQcm94eSwKICAgICBNZXNzYWdlQ2xhc3NXZWJQYWdlUHJveHksCiAg
ICAgTWVzc2FnZUNsYXNzV2ViUHJvY2Vzc1Byb3h5LApJbmRleDogV2ViS2l0Mi9TaGFyZWQvQVBJ
T2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0Mi9TaGFyZWQvQVBJT2JqZWN0LmgJKHJldmlz
aW9uIDczNjU2KQorKysgV2ViS2l0Mi9TaGFyZWQvQVBJT2JqZWN0LmgJKHdvcmtpbmcgY29weSkK
QEAgLTYyLDYgKzYyLDcgQEAgcHVibGljOgogICAgICAgICBUeXBlQmFja0ZvcndhcmRMaXN0LAog
ICAgICAgICBUeXBlQmFja0ZvcndhcmRMaXN0SXRlbSwKICAgICAgICAgVHlwZUNvbnRleHQsCisg
ICAgICAgIFR5cGVEYXRhYmFzZU1hbmFnZXIsCiAgICAgICAgIFR5cGVEb3dubG9hZCwKICAgICAg
ICAgVHlwZUZvcm1TdWJtaXNzaW9uTGlzdGVuZXIsCiAgICAgICAgIFR5cGVGcmFtZSwKSW5kZXg6
IFdlYktpdDIvU2hhcmVkL0FQSS9jL1dLQmFzZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdDIvU2hh
cmVkL0FQSS9jL1dLQmFzZS5oCShyZXZpc2lvbiA3MzY1NikKKysrIFdlYktpdDIvU2hhcmVkL0FQ
SS9jL1dLQmFzZS5oCSh3b3JraW5nIGNvcHkpCkBAIC02Niw2ICs2Niw3IEBAIHR5cGVkZWYgY29u
c3Qgc3RydWN0IE9wYXF1ZVdLQmFja0ZvcndhcmQKIHR5cGVkZWYgY29uc3Qgc3RydWN0IE9wYXF1
ZVdLQmFja0ZvcndhcmRMaXN0SXRlbSogV0tCYWNrRm9yd2FyZExpc3RJdGVtUmVmOwogdHlwZWRl
ZiBjb25zdCBzdHJ1Y3QgT3BhcXVlV0tDb250ZXh0KiBXS0NvbnRleHRSZWY7CiB0eXBlZGVmIGNv
bnN0IHN0cnVjdCBPcGFxdWVXS0NyZWRlbnRpYWwqIFdLQ3JlZGVudGlhbFJlZjsKK3R5cGVkZWYg
Y29uc3Qgc3RydWN0IE9wYXF1ZVdLRGF0YWJhc2VNYW5hZ2VyKiBXS0RhdGFiYXNlTWFuYWdlclJl
ZjsKIHR5cGVkZWYgY29uc3Qgc3RydWN0IE9wYXF1ZVdLRG93bmxvYWQqIFdLRG93bmxvYWRSZWY7
CiB0eXBlZGVmIGNvbnN0IHN0cnVjdCBPcGFxdWVXS0Zvcm1TdWJtaXNzaW9uTGlzdGVuZXIqIFdL
Rm9ybVN1Ym1pc3Npb25MaXN0ZW5lclJlZjsKIHR5cGVkZWYgY29uc3Qgc3RydWN0IE9wYXF1ZVdL
RnJhbWUqIFdLRnJhbWVSZWY7CkluZGV4OiBXZWJLaXQyL1VJUHJvY2Vzcy9XZWJDb250ZXh0LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJLaXQyL1VJUHJvY2Vzcy9XZWJDb250ZXh0LmNwcAkocmV2aXNp
b24gNzM2NTYpCisrKyBXZWJLaXQyL1VJUHJvY2Vzcy9XZWJDb250ZXh0LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMzMsNiArMzMsNyBAQAogI2luY2x1ZGUgIldlYkNvbnRleHRNZXNzYWdlS2luZHMu
aCIKICNpbmNsdWRlICJXZWJDb250ZXh0VXNlck1lc3NhZ2VDb2RlcnMuaCIKICNpbmNsdWRlICJX
ZWJDb3JlQXJndW1lbnRDb2RlcnMuaCIKKyNpbmNsdWRlICJXZWJEYXRhYmFzZU1hbmFnZXJQcm94
eS5oIgogI2luY2x1ZGUgIldlYlBhZ2VHcm91cC5oIgogI2luY2x1ZGUgIldlYlBhZ2VOYW1lc3Bh
Y2UuaCIKICNpbmNsdWRlICJXZWJQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzLmgiCkBAIC04NCw2
ICs4NSw3IEBAIFdlYkNvbnRleHQ6OldlYkNvbnRleHQoUHJvY2Vzc01vZGVsIHByb2MKICAgICAs
IG1fY2FjaGVNb2RlbChDYWNoZU1vZGVsRG9jdW1lbnRWaWV3ZXIpCiAgICAgLCBtX2NsZWFyUmVz
b3VyY2VDYWNoZXNGb3JOZXdXZWJQcm9jZXNzKGZhbHNlKQogICAgICwgbV9jbGVhckFwcGxpY2F0
aW9uQ2FjaGVGb3JOZXdXZWJQcm9jZXNzKGZhbHNlKQorICAgICwgbV9kYXRhYmFzZU1hbmFnZXJQ
cm94eShXZWJEYXRhYmFzZU1hbmFnZXJQcm94eTo6Y3JlYXRlKHRoaXMpKQogI2lmIFBMQVRGT1JN
KFdJTikKICAgICAsIG1fc2hvdWxkUGFpbnROYXRpdmVDb250cm9scyh0cnVlKQogI2VuZGlmCkBA
IC0yMDYsNiArMjA4LDggQEAgdm9pZCBXZWJDb250ZXh0Ojpwcm9jZXNzRGlkQ2xvc2UoV2ViUHJv
YwogCiAgICAgbV9kb3dubG9hZHMuY2xlYXIoKTsKIAorICAgIG1fZGF0YWJhc2VNYW5hZ2VyUHJv
eHktPmludmFsaWRhdGUoKTsKKwogICAgIG1fcHJvY2VzcyA9IDA7CiB9CiAKQEAgLTQzNyw2ICs0
NDEsMTEgQEAgdm9pZCBXZWJDb250ZXh0OjpkaWRSZWNlaXZlTWVzc2FnZShDb3JlSQogICAgICAg
ICByZXR1cm47CiAgICAgfQogCisgICAgaWYgKG1lc3NhZ2VJRC5pczxDb3JlSVBDOjpNZXNzYWdl
Q2xhc3NXZWJEYXRhYmFzZU1hbmFnZXJQcm94eT4oKSkgeworICAgICAgICBtX2RhdGFiYXNlTWFu
YWdlclByb3h5LT5kaWRSZWNlaXZlV2ViRGF0YWJhc2VNYW5hZ2VyUHJveHlNZXNzYWdlKGNvbm5l
Y3Rpb24sIG1lc3NhZ2VJRCwgYXJndW1lbnRzKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwog
ICAgIHN3aXRjaCAobWVzc2FnZUlELmdldDxXZWJDb250ZXh0TGVnYWN5TWVzc2FnZTo6S2luZD4o
KSkgewogICAgICAgICBjYXNlIFdlYkNvbnRleHRMZWdhY3lNZXNzYWdlOjpQb3N0TWVzc2FnZTog
ewogICAgICAgICAgICAgU3RyaW5nIG1lc3NhZ2VOYW1lOwpJbmRleDogV2ViS2l0Mi9VSVByb2Nl
c3MvV2ViQ29udGV4dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdDIvVUlQcm9jZXNzL1dlYkNvbnRl
eHQuaAkocmV2aXNpb24gNzM2NTYpCisrKyBXZWJLaXQyL1VJUHJvY2Vzcy9XZWJDb250ZXh0LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTQ3LDYgKzQ3LDcgQEAgc3RydWN0IFdLQ29udGV4dFN0YXRpc3Rp
Y3M7CiBuYW1lc3BhY2UgV2ViS2l0IHsKIAogY2xhc3MgRG93bmxvYWRQcm94eTsKK2NsYXNzIFdl
YkRhdGFiYXNlTWFuYWdlclByb3h5OwogY2xhc3MgV2ViUGFnZUdyb3VwOwogY2xhc3MgV2ViUGFn
ZU5hbWVzcGFjZTsKIGNsYXNzIFdlYlBhZ2VQcm94eTsKQEAgLTEyNCw2ICsxMjUsOCBAQCBwdWJs
aWM6CiAKICAgICBzdGF0aWMgSGFzaFNldDxTdHJpbmcsIENhc2VGb2xkaW5nSGFzaD4gcGRmQW5k
UG9zdFNjcmlwdE1JTUVUeXBlcygpOwogCisgICAgV2ViRGF0YWJhc2VNYW5hZ2VyUHJveHkqIGRh
dGFiYXNlTWFuYWdlclByb3h5KCkgY29uc3QgeyByZXR1cm4gbV9kYXRhYmFzZU1hbmFnZXJQcm94
eS5nZXQoKTsgfQorCiBwcml2YXRlOgogICAgIFdlYkNvbnRleHQoUHJvY2Vzc01vZGVsLCBjb25z
dCBTdHJpbmcmIGluamVjdGVkQnVuZGxlUGF0aCk7CiAKQEAgLTE4MSw3ICsxODQsOSBAQCBwcml2
YXRlOgogCiAgICAgYm9vbCBtX2NsZWFyUmVzb3VyY2VDYWNoZXNGb3JOZXdXZWJQcm9jZXNzOwog
ICAgIGJvb2wgbV9jbGVhckFwcGxpY2F0aW9uQ2FjaGVGb3JOZXdXZWJQcm9jZXNzOwotICAgIAor
CisgICAgUmVmUHRyPFdlYkRhdGFiYXNlTWFuYWdlclByb3h5PiBtX2RhdGFiYXNlTWFuYWdlclBy
b3h5OworCiAjaWYgUExBVEZPUk0oV0lOKQogICAgIGJvb2wgbV9zaG91bGRQYWludE5hdGl2ZUNv
bnRyb2xzOwogI2VuZGlmCkluZGV4OiBXZWJLaXQyL1VJUHJvY2Vzcy9XZWJEYXRhYmFzZU1hbmFn
ZXJQcm94eS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0Mi9VSVByb2Nlc3MvV2ViRGF0YWJhc2VN
YW5hZ2VyUHJveHkuY3BwCShyZXZpc2lvbiAwKQorKysgV2ViS2l0Mi9VSVByb2Nlc3MvV2ViRGF0
YWJhc2VNYW5hZ2VyUHJveHkuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEwMCBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNpbmNsdWRlICJXZWJEYXRhYmFzZU1hbmFnZXJQcm94eS5oIgorCisjaW5jbHVk
ZSAiTXV0YWJsZUFycmF5LmgiCisjaW5jbHVkZSAiV2ViRGF0YWJhc2VNYW5hZ2VyTWVzc2FnZXMu
aCIKKyNpbmNsdWRlICJXZWJDb250ZXh0LmgiCisjaW5jbHVkZSAiV2ViUGFnZVByb3h5LmgiCisj
aW5jbHVkZSAiV2ViU2VjdXJpdHlPcmlnaW4uaCIKKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7
CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitQYXNzUmVmUHRyPFdlYkRhdGFiYXNlTWFuYWdlclBy
b3h5PiBXZWJEYXRhYmFzZU1hbmFnZXJQcm94eTo6Y3JlYXRlKFdlYkNvbnRleHQqIHdlYkNvbnRl
eHQpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBXZWJEYXRhYmFzZU1hbmFnZXJQcm94eSh3
ZWJDb250ZXh0KSk7Cit9CisKK1dlYkRhdGFiYXNlTWFuYWdlclByb3h5OjpXZWJEYXRhYmFzZU1h
bmFnZXJQcm94eShXZWJDb250ZXh0KiB3ZWJDb250ZXh0KQorICAgIDogbV93ZWJDb250ZXh0KHdl
YkNvbnRleHQpCit7Cit9CisKK1dlYkRhdGFiYXNlTWFuYWdlclByb3h5Ojp+V2ViRGF0YWJhc2VN
YW5hZ2VyUHJveHkoKQoreworICAgIEFTU0VSVCghbV93ZWJDb250ZXh0KTsKK30KKwordm9pZCBX
ZWJEYXRhYmFzZU1hbmFnZXJQcm94eTo6aW52YWxpZGF0ZSgpCit7CisgICAgaW52YWxpZGF0ZUNh
bGxiYWNrTWFwKG1fZGF0YWJhc2VPcmlnaW5zQ2FsbGJhY2tzKTsKKworICAgIG1fd2ViQ29udGV4
dCA9IDA7Cit9CisKK3ZvaWQgV2ViRGF0YWJhc2VNYW5hZ2VyUHJveHk6OmdldERhdGFiYXNlT3Jp
Z2lucyhQYXNzUmVmUHRyPERhdGFiYXNlT3JpZ2luc0NhbGxiYWNrPiBwcnBDYWxsYmFjaykKK3sK
KyAgICBSZWZQdHI8RGF0YWJhc2VPcmlnaW5zQ2FsbGJhY2s+IGNhbGxiYWNrID0gcHJwQ2FsbGJh
Y2s7CisgICAgdWludDY0X3QgY2FsbGJhY2tJRCA9IGNhbGxiYWNrLT5jYWxsYmFja0lEKCk7Cisg
ICAgbV9kYXRhYmFzZU9yaWdpbnNDYWxsYmFja3Muc2V0KGNhbGxiYWNrSUQsIGNhbGxiYWNrLmdl
dCgpKTsKKyAgICBtX3dlYkNvbnRleHQtPnByb2Nlc3MoKS0+c2VuZChNZXNzYWdlczo6V2ViRGF0
YWJhc2VNYW5hZ2VyOjpHZXREYXRhYmFzZU9yaWdpbnMoY2FsbGJhY2tJRCksIDApOworfQorCit2
b2lkIFdlYkRhdGFiYXNlTWFuYWdlclByb3h5OjpkaWRHZXREYXRhYmFzZU9yaWdpbnMoY29uc3Qg
VmVjdG9yPFN0cmluZz4mIG9yaWdpbklkZW50aWZpZXJzLCB1aW50NjRfdCBjYWxsYmFja0lEKQor
eworICAgIFJlZlB0cjxEYXRhYmFzZU9yaWdpbnNDYWxsYmFjaz4gY2FsbGJhY2sgPSBtX2RhdGFi
YXNlT3JpZ2luc0NhbGxiYWNrcy50YWtlKGNhbGxiYWNrSUQpOworICAgIGlmICghY2FsbGJhY2sp
IHsKKyAgICAgICAgLy8gRklYTUU6IExvZyBlcnJvciBvciBhc3NlcnQuCisgICAgICAgIHJldHVy
bjsKKyAgICB9CisKKyAgICBSZWZQdHI8TXV0YWJsZUFycmF5PiBzZWN1cml0eU9yaWdpbnMgPSBN
dXRhYmxlQXJyYXk6OmNyZWF0ZSgpOworCisgICAgc2l6ZV90IG9yaWdpbklkZW50aWZpZXJzQ291
bnQgPSBvcmlnaW5JZGVudGlmaWVycy5zaXplKCk7CisgICAgc2VjdXJpdHlPcmlnaW5zLT5yZXNl
cnZlQ2FwYWNpdHkob3JpZ2luSWRlbnRpZmllcnNDb3VudCk7CisgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBvcmlnaW5JZGVudGlmaWVyc0NvdW50OyArK2kpCisgICAgICAgIHNlY3VyaXR5T3Jp
Z2lucy0+YXBwZW5kKFdlYlNlY3VyaXR5T3JpZ2luOjpjcmVhdGUob3JpZ2luSWRlbnRpZmllcnNb
aV0pLmxlYWtSZWYoKSk7CisKKyAgICBjYWxsYmFjay0+cGVyZm9ybUNhbGxiYWNrV2l0aFJldHVy
blZhbHVlKHNlY3VyaXR5T3JpZ2lucy5nZXQoKSk7Cit9CisKK3ZvaWQgV2ViRGF0YWJhc2VNYW5h
Z2VyUHJveHk6OmRlbGV0ZURhdGFiYXNlc0Zvck9yaWdpbihXZWJTZWN1cml0eU9yaWdpbiogb3Jp
Z2luKQoreworICAgIGlmICghb3JpZ2luKQorICAgICAgICByZXR1cm47CisKKyAgICBtX3dlYkNv
bnRleHQtPnByb2Nlc3MoKS0+c2VuZChNZXNzYWdlczo6V2ViRGF0YWJhc2VNYW5hZ2VyOjpEZWxl
dGVEYXRhYmFzZXNGb3JPcmlnaW4ob3JpZ2luLT5kYXRhYmFzZUlkZW50aWZpZXIoKSksIDApOwor
fQorCit2b2lkIFdlYkRhdGFiYXNlTWFuYWdlclByb3h5OjpkZWxldGVBbGxEYXRhYmFzZXMoKQor
eworICAgIG1fd2ViQ29udGV4dC0+cHJvY2VzcygpLT5zZW5kKE1lc3NhZ2VzOjpXZWJEYXRhYmFz
ZU1hbmFnZXI6OkRlbGV0ZUFsbERhdGFiYXNlcygpLCAwKTsKK30KKworfSAvLyBuYW1lc3BhY2Ug
V2ViS2l0CisKSW5kZXg6IFdlYktpdDIvVUlQcm9jZXNzL1dlYkRhdGFiYXNlTWFuYWdlclByb3h5
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViS2l0Mi9VSVByb2Nlc3MvV2ViRGF0YWJhc2VNYW5hZ2VyUHJv
eHkuaAkocmV2aXNpb24gMCkKKysrIFdlYktpdDIvVUlQcm9jZXNzL1dlYkRhdGFiYXNlTWFuYWdl
clByb3h5LmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNzkgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZu
ZGVmIFdlYkRhdGFiYXNlTWFuYWdlclByb3h5X2gKKyNkZWZpbmUgV2ViRGF0YWJhc2VNYW5hZ2Vy
UHJveHlfaAorCisjaW5jbHVkZSAiQVBJT2JqZWN0LmgiCisjaW5jbHVkZSAiQXJndW1lbnRzLmgi
CisjaW5jbHVkZSAiR2VuZXJpY0NhbGxiYWNrLmgiCisjaW5jbHVkZSAiV0tCYXNlLmgiCisjaW5j
bHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgorCituYW1l
c3BhY2UgQ29yZUlQQyB7CitjbGFzcyBBcmd1bWVudERlY29kZXI7CitjbGFzcyBDb25uZWN0aW9u
OworY2xhc3MgTWVzc2FnZUlEOworfQorCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgV2Vi
Q29udGV4dDsKK2NsYXNzIFdlYlNlY3VyaXR5T3JpZ2luOworCit0eXBlZGVmIEdlbmVyaWNDYWxs
YmFjazxXS0FycmF5UmVmLCBJbW11dGFibGVBcnJheSo+IERhdGFiYXNlT3JpZ2luc0NhbGxiYWNr
OworCitjbGFzcyBXZWJEYXRhYmFzZU1hbmFnZXJQcm94eSA6IHB1YmxpYyBBUElPYmplY3Qgewor
cHVibGljOgorICAgIHN0YXRpYyBjb25zdCBUeXBlIEFQSVR5cGUgPSBUeXBlRGF0YWJhc2VNYW5h
Z2VyOworCisgICAgc3RhdGljIFBhc3NSZWZQdHI8V2ViRGF0YWJhc2VNYW5hZ2VyUHJveHk+IGNy
ZWF0ZShXZWJDb250ZXh0Kik7CisgICAgdmlydHVhbCB+V2ViRGF0YWJhc2VNYW5hZ2VyUHJveHko
KTsKKworICAgIHZvaWQgaW52YWxpZGF0ZSgpOworCisgICAgdm9pZCBnZXREYXRhYmFzZU9yaWdp
bnMoUGFzc1JlZlB0cjxEYXRhYmFzZU9yaWdpbnNDYWxsYmFjaz4pOworICAgIHZvaWQgZGVsZXRl
RGF0YWJhc2VzRm9yT3JpZ2luKFdlYlNlY3VyaXR5T3JpZ2luKik7CisgICAgdm9pZCBkZWxldGVB
bGxEYXRhYmFzZXMoKTsKKworICAgIHZvaWQgZGlkUmVjZWl2ZVdlYkRhdGFiYXNlTWFuYWdlclBy
b3h5TWVzc2FnZShDb3JlSVBDOjpDb25uZWN0aW9uKiwgQ29yZUlQQzo6TWVzc2FnZUlELCBDb3Jl
SVBDOjpBcmd1bWVudERlY29kZXIqKTsKKworcHJpdmF0ZToKKyAgICBleHBsaWNpdCBXZWJEYXRh
YmFzZU1hbmFnZXJQcm94eShXZWJDb250ZXh0Kik7CisKKyAgICB2aXJ0dWFsIFR5cGUgdHlwZSgp
IGNvbnN0IHsgcmV0dXJuIEFQSVR5cGU7IH0KKworICAgIC8vIE1lc3NhZ2UgaGFuZGxlcnMuCisg
ICAgdm9pZCBkaWRHZXREYXRhYmFzZU9yaWdpbnMoY29uc3QgVmVjdG9yPFN0cmluZz4mIG9yaWdp
bklkZW50aWZpZXJzLCB1aW50NjRfdCBjYWxsYmFja0lEKTsKKworICAgIFdlYkNvbnRleHQqIG1f
d2ViQ29udGV4dDsKKyAgICBIYXNoTWFwPHVpbnQ2NF90LCBSZWZQdHI8RGF0YWJhc2VPcmlnaW5z
Q2FsbGJhY2s+ID4gbV9kYXRhYmFzZU9yaWdpbnNDYWxsYmFja3M7CisKK307CisKK30gLy8gbmFt
ZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gRGF0YWJhc2VNYW5hZ2VyUHJveHlfaApJbmRleDog
V2ViS2l0Mi9VSVByb2Nlc3MvV2ViRGF0YWJhc2VNYW5hZ2VyUHJveHkubWVzc2FnZXMuaW4KPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViS2l0Mi9VSVByb2Nlc3MvV2ViRGF0YWJhc2VNYW5hZ2VyUHJveHkubWVz
c2FnZXMuaW4JKHJldmlzaW9uIDApCisrKyBXZWJLaXQyL1VJUHJvY2Vzcy9XZWJEYXRhYmFzZU1h
bmFnZXJQcm94eS5tZXNzYWdlcy5pbgkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwyNSBAQAorIyBD
b3B5cmlnaHQgKEMpIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisjIGFyZSBtZXQ6CisjIDEuICBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorIyAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisj
CisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycgQU5ECisjIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisjIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RSBBUkUKKyMgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IKKyMgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorIyBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUgorIyBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUgorIyBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorIyBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCittZXNzYWdlcyAtPiBXZWJEYXRh
YmFzZU1hbmFnZXJQcm94eSB7CisgICAgRGlkR2V0RGF0YWJhc2VPcmlnaW5zKFZlY3RvcjxXVEY6
OlN0cmluZz4gb3JpZ2luSWRlbnRpZmllcnMsIHVpbnQ2NF90IGNhbGxiYWNrSUQpCit9CkluZGV4
OiBXZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktp
dDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAJKHJldmlzaW9uIDczNjU2KQorKysgV2ViS2l0
Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzgsMTYgKzc4
LDYgQEAgbmFtZXNwYWNlIFdlYktpdCB7CiBzdGF0aWMgV1RGOjpSZWZDb3VudGVkTGVha0NvdW50
ZXIgd2ViUGFnZVByb3h5Q291bnRlcigiV2ViUGFnZVByb3h5Iik7CiAjZW5kaWYKIAotdGVtcGxh
dGU8dHlwZW5hbWUgVD4KLXZvaWQgaW52YWxpZGF0ZUNhbGxiYWNrTWFwKEhhc2hNYXA8dWludDY0
X3QsIFQ+JiBtYXApCi17Ci0gICAgVmVjdG9yPFQ+IGNhbGxiYWNrc1ZlY3RvcjsKLSAgICBjb3B5
VmFsdWVzVG9WZWN0b3IobWFwLCBjYWxsYmFja3NWZWN0b3IpOwotICAgIGZvciAoc2l6ZV90IGkg
PSAwLCBzaXplID0gY2FsbGJhY2tzVmVjdG9yLnNpemUoKTsgaSA8IHNpemU7ICsraSkKLSAgICAg
ICAgY2FsbGJhY2tzVmVjdG9yW2ldLT5pbnZhbGlkYXRlKCk7Ci0gICAgbWFwLmNsZWFyKCk7Ci19
Ci0KIFBhc3NSZWZQdHI8V2ViUGFnZVByb3h5PiBXZWJQYWdlUHJveHk6OmNyZWF0ZShXZWJQYWdl
TmFtZXNwYWNlKiBwYWdlTmFtZXNwYWNlLCBXZWJQYWdlR3JvdXAqIHBhZ2VHcm91cCwgdWludDY0
X3QgcGFnZUlEKQogewogICAgIHJldHVybiBhZG9wdFJlZihuZXcgV2ViUGFnZVByb3h5KHBhZ2VO
YW1lc3BhY2UsIHBhZ2VHcm91cCwgcGFnZUlEKSk7CkluZGV4OiBXZWJLaXQyL1VJUHJvY2Vzcy9X
ZWJQYWdlUHJveHkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJv
eHkuaAkocmV2aXNpb24gNzM2NTYpCisrKyBXZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHku
aAkod29ya2luZyBjb3B5KQpAQCAtNDUzLDYgKzQ1MywxNiBAQCBwcml2YXRlOgogICAgIERlcXVl
PE5hdGl2ZVdlYktleWJvYXJkRXZlbnQ+IG1fa2V5RXZlbnRRdWV1ZTsKIH07CiAKK3RlbXBsYXRl
PHR5cGVuYW1lIFQ+Cit2b2lkIGludmFsaWRhdGVDYWxsYmFja01hcChIYXNoTWFwPHVpbnQ2NF90
LCBUPiYgbWFwKQoreworICAgIFZlY3RvcjxUPiBjYWxsYmFja3NWZWN0b3I7CisgICAgY29weVZh
bHVlc1RvVmVjdG9yKG1hcCwgY2FsbGJhY2tzVmVjdG9yKTsKKyAgICBmb3IgKHNpemVfdCBpID0g
MCwgc2l6ZSA9IGNhbGxiYWNrc1ZlY3Rvci5zaXplKCk7IGkgPCBzaXplOyArK2kpCisgICAgICAg
IGNhbGxiYWNrc1ZlY3RvcltpXS0+aW52YWxpZGF0ZSgpOworICAgIG1hcC5jbGVhcigpOworfQor
CiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKIAogI2VuZGlmIC8vIFdlYlBhZ2VQcm94eV9oCkluZGV4
OiBXZWJLaXQyL1VJUHJvY2Vzcy9XZWJQcm9jZXNzUHJveHkuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YktpdDIvVUlQcm9jZXNzL1dlYlByb2Nlc3NQcm94eS5jcHAJKHJldmlzaW9uIDczNjU2KQorKysg
V2ViS2l0Mi9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Byb3h5LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MjA1LDcgKzIwNSwxMCBAQCB2b2lkIFdlYlByb2Nlc3NQcm94eTo6ZGlkUmVjZWl2ZU1lc3NhZ2Uo
CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBpZiAobWVzc2FnZUlELmlzPENvcmVJUEM6
Ok1lc3NhZ2VDbGFzc1dlYkNvbnRleHQ+KCkgfHwgbWVzc2FnZUlELmlzPENvcmVJUEM6Ok1lc3Nh
Z2VDbGFzc1dlYkNvbnRleHRMZWdhY3k+KCkgfHwgbWVzc2FnZUlELmlzPENvcmVJUEM6Ok1lc3Nh
Z2VDbGFzc0Rvd25sb2FkUHJveHk+KCkpIHsKKyAgICBpZiAobWVzc2FnZUlELmlzPENvcmVJUEM6
Ok1lc3NhZ2VDbGFzc1dlYkNvbnRleHQ+KCkKKyAgICAgICAgfHwgbWVzc2FnZUlELmlzPENvcmVJ
UEM6Ok1lc3NhZ2VDbGFzc1dlYkNvbnRleHRMZWdhY3k+KCkKKyAgICAgICAgfHwgbWVzc2FnZUlE
LmlzPENvcmVJUEM6Ok1lc3NhZ2VDbGFzc0Rvd25sb2FkUHJveHk+KCkKKyAgICAgICAgfHwgbWVz
c2FnZUlELmlzPENvcmVJUEM6Ok1lc3NhZ2VDbGFzc1dlYkRhdGFiYXNlTWFuYWdlclByb3h5Pigp
KSB7CiAgICAgICAgIG1fY29udGV4dC0+ZGlkUmVjZWl2ZU1lc3NhZ2UoY29ubmVjdGlvbiwgbWVz
c2FnZUlELCBhcmd1bWVudHMpOwogICAgICAgICByZXR1cm47CiAgICAgfQpJbmRleDogV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL0MvV0tBUElDYXN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL0MvV0tBUElDYXN0LmgJKHJldmlzaW9uIDczNjU2KQorKysgV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL0MvV0tBUElDYXN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ3LDYgKzQ3LDcgQEAg
Y2xhc3MgV2ViQmFja0ZvcndhcmRMaXN0OwogY2xhc3MgV2ViQmFja0ZvcndhcmRMaXN0SXRlbTsK
IGNsYXNzIFdlYkNvbnRleHQ7CiBjbGFzcyBXZWJDcmVkZW50aWFsOworY2xhc3MgV2ViRGF0YWJh
c2VNYW5hZ2VyUHJveHk7CiBjbGFzcyBXZWJGb3JtU3VibWlzc2lvbkxpc3RlbmVyUHJveHk7CiBj
bGFzcyBXZWJGcmFtZVBvbGljeUxpc3RlbmVyUHJveHk7CiBjbGFzcyBXZWJGcmFtZVByb3h5OwpA
QCAtNjQsNiArNjUsNyBAQCBXS19BRERfQVBJX01BUFBJTkcoV0tCYWNrRm9yd2FyZExpc3RJdGVt
CiBXS19BRERfQVBJX01BUFBJTkcoV0tCYWNrRm9yd2FyZExpc3RSZWYsIFdlYkJhY2tGb3J3YXJk
TGlzdCkKIFdLX0FERF9BUElfTUFQUElORyhXS0NvbnRleHRSZWYsIFdlYkNvbnRleHQpCiBXS19B
RERfQVBJX01BUFBJTkcoV0tDcmVkZW50aWFsUmVmLCBXZWJDcmVkZW50aWFsKQorV0tfQUREX0FQ
SV9NQVBQSU5HKFdLRGF0YWJhc2VNYW5hZ2VyUmVmLCBXZWJEYXRhYmFzZU1hbmFnZXJQcm94eSkK
IFdLX0FERF9BUElfTUFQUElORyhXS0Rvd25sb2FkUmVmLCBEb3dubG9hZFByb3h5KQogV0tfQURE
X0FQSV9NQVBQSU5HKFdLRm9ybVN1Ym1pc3Npb25MaXN0ZW5lclJlZiwgV2ViRm9ybVN1Ym1pc3Np
b25MaXN0ZW5lclByb3h5KQogV0tfQUREX0FQSV9NQVBQSU5HKFdLRnJhbWVQb2xpY3lMaXN0ZW5l
clJlZiwgV2ViRnJhbWVQb2xpY3lMaXN0ZW5lclByb3h5KQpJbmRleDogV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL0MvV0tDb250ZXh0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvQy9XS0NvbnRleHQuY3BwCShyZXZpc2lvbiA3MzY1NikKKysrIFdlYktpdDIvVUlQcm9jZXNz
L0FQSS9DL1dLQ29udGV4dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0MSwzICsxNDEsOCBAQCB2
b2lkIFdLQ29udGV4dENsZWFyQXBwbGljYXRpb25DYWNoZShXS0NvCiB7CiAgICAgdG9JbXBsKGNv
bnRleHRSZWYpLT5jbGVhckFwcGxpY2F0aW9uQ2FjaGUoKTsKIH0KKworV0tEYXRhYmFzZU1hbmFn
ZXJSZWYgV0tDb250ZXh0R2V0RGF0YWJhc2VNYW5hZ2VyKFdLQ29udGV4dFJlZiBjb250ZXh0UmVm
KQoreworICAgIHJldHVybiB0b0FQSSh0b0ltcGwoY29udGV4dFJlZiktPmRhdGFiYXNlTWFuYWdl
clByb3h5KCkpOworfQpJbmRleDogV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0MvV0tDb250ZXh0LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0MvV0tDb250ZXh0LmgJKHJldmlz
aW9uIDczNjU2KQorKysgV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0MvV0tDb250ZXh0LmgJKHdvcmtp
bmcgY29weSkKQEAgLTExOCw2ICsxMTgsOCBAQCBXS19FWFBPUlQgV0tDYWNoZU1vZGVsIFdLQ29u
dGV4dEdldENhY2hlCiBXS19FWFBPUlQgdm9pZCBXS0NvbnRleHRDbGVhclJlc291cmNlQ2FjaGVz
KFdLQ29udGV4dFJlZiBjb250ZXh0KTsKIFdLX0VYUE9SVCB2b2lkIFdLQ29udGV4dENsZWFyQXBw
bGljYXRpb25DYWNoZShXS0NvbnRleHRSZWYgY29udGV4dCk7CiAKK1dLX0VYUE9SVCBXS0RhdGFi
YXNlTWFuYWdlclJlZiBXS0NvbnRleHRHZXREYXRhYmFzZU1hbmFnZXIoV0tDb250ZXh0UmVmIGNv
bnRleHQpOworCiAjaWZkZWYgX19jcGx1c3BsdXMKIH0KICNlbmRpZgpJbmRleDogV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL0MvV0tEYXRhYmFzZU1hbmFnZXIuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktp
dDIvVUlQcm9jZXNzL0FQSS9DL1dLRGF0YWJhc2VNYW5hZ2VyLmNwcAkocmV2aXNpb24gMCkKKysr
IFdlYktpdDIvVUlQcm9jZXNzL0FQSS9DL1dLRGF0YWJhc2VNYW5hZ2VyLmNwcAkocmV2aXNpb24g
MCkKQEAgLTAsMCArMSw3MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJXS0RhdGFiYXNlTWFu
YWdlci5oIgorCisjaW5jbHVkZSAiV2ViRGF0YWJhc2VNYW5hZ2VyUHJveHkuaCIKKyNpbmNsdWRl
ICJXS0FQSUNhc3QuaCIKKworI2lmZGVmIF9fQkxPQ0tTX18KKyNpbmNsdWRlIDxCbG9jay5oPgor
I2VuZGlmCisKK3VzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7CisKK1dLVHlwZUlEIFdLRGF0YWJhc2VN
YW5hZ2VyR2V0VHlwZUlEKCkKK3sKKyAgICByZXR1cm4gdG9BUEkoV2ViRGF0YWJhc2VNYW5hZ2Vy
UHJveHk6OkFQSVR5cGUpOworfQorCit2b2lkIFdLRGF0YWJhc2VNYW5hZ2VyR2V0RGF0YWJhc2VP
cmlnaW5zKFdLRGF0YWJhc2VNYW5hZ2VyUmVmIGRhdGFiYXNlTWFuYWdlciwgdm9pZCogY29udGV4
dCwgV0tEYXRhYmFzZU1hbmFnZXJHZXREYXRhYmFzZU9yaWdpbnNGdW5jdGlvbiBjYWxsYmFjaykK
K3sKKyAgICB0b0ltcGwoZGF0YWJhc2VNYW5hZ2VyKS0+Z2V0RGF0YWJhc2VPcmlnaW5zKERhdGFi
YXNlT3JpZ2luc0NhbGxiYWNrOjpjcmVhdGUoY29udGV4dCwgY2FsbGJhY2spKTsKK30KKworI2lm
ZGVmIF9fQkxPQ0tTX18KK3N0YXRpYyB2b2lkIGNhbGxHZXREYXRhYmFzZU9yaWdpbnNCbG9ja0Js
b2NrQW5kRGlzcG9zZShXS0FycmF5UmVmIHJlc3VsdFZhbHVlLCBXS0Vycm9yUmVmIGVycm9yLCB2
b2lkKiBjb250ZXh0KQoreworICAgIFdLRGF0YWJhc2VNYW5hZ2VyR2V0RGF0YWJhc2VPcmlnaW5z
QmxvY2sgYmxvY2sgPSAoV0tEYXRhYmFzZU1hbmFnZXJHZXREYXRhYmFzZU9yaWdpbnNCbG9jaylj
b250ZXh0OworICAgIGJsb2NrKHJlc3VsdFZhbHVlLCBlcnJvcik7CisgICAgQmxvY2tfcmVsZWFz
ZShibG9jayk7Cit9CisKK3ZvaWQgV0tEYXRhYmFzZU1hbmFnZXJHZXREYXRhYmFzZU9yaWdpbnNf
YihXS0RhdGFiYXNlTWFuYWdlclJlZiBkYXRhYmFzZU1hbmFnZXIsIFdLRGF0YWJhc2VNYW5hZ2Vy
R2V0RGF0YWJhc2VPcmlnaW5zQmxvY2sgYmxvY2spCit7CisgICAgV0tEYXRhYmFzZU1hbmFnZXJH
ZXREYXRhYmFzZU9yaWdpbnMoZGF0YWJhc2VNYW5hZ2VyLCBCbG9ja19jb3B5KGJsb2NrKSwgY2Fs
bEdldERhdGFiYXNlT3JpZ2luc0Jsb2NrQmxvY2tBbmREaXNwb3NlKTsKK30KKyNlbmRpZgorCit2
b2lkIFdLRGF0YWJhc2VNYW5hZ2VyRGVsZXRlRGF0YWJhc2VzRm9yT3JpZ2luKFdLRGF0YWJhc2VN
YW5hZ2VyUmVmIGRhdGFiYXNlTWFuYWdlciwgV0tTZWN1cml0eU9yaWdpblJlZiBvcmlnaW4pCit7
CisgICAgdG9JbXBsKGRhdGFiYXNlTWFuYWdlciktPmRlbGV0ZURhdGFiYXNlc0Zvck9yaWdpbih0
b0ltcGwob3JpZ2luKSk7Cit9CisKK3ZvaWQgV0tEYXRhYmFzZU1hbmFnZXJEZWxldGVBbGxEYXRh
YmFzZXMoV0tEYXRhYmFzZU1hbmFnZXJSZWYgZGF0YWJhc2VNYW5hZ2VyKQoreworICAgIHRvSW1w
bChkYXRhYmFzZU1hbmFnZXIpLT5kZWxldGVBbGxEYXRhYmFzZXMoKTsKK30KKwpJbmRleDogV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL0MvV0tEYXRhYmFzZU1hbmFnZXIuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9XS0RhdGFiYXNlTWFuYWdlci5oCShyZXZpc2lvbiAwKQor
KysgV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0MvV0tEYXRhYmFzZU1hbmFnZXIuaAkocmV2aXNpb24g
MCkKQEAgLTAsMCArMSw1MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgV0tEYXRhYmFzZU1hbmFn
ZXJfaAorI2RlZmluZSBXS0RhdGFiYXNlTWFuYWdlcl9oCisKKyNpbmNsdWRlIDxXZWJLaXQyL1dL
QmFzZS5oPgorCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCisKK1dL
X0VYUE9SVCBXS1R5cGVJRCBXS0RhdGFiYXNlTWFuYWdlckdldFR5cGVJRCgpOworCit0eXBlZGVm
IHZvaWQgKCpXS0RhdGFiYXNlTWFuYWdlckdldERhdGFiYXNlT3JpZ2luc0Z1bmN0aW9uKShXS0Fy
cmF5UmVmLCBXS0Vycm9yUmVmLCB2b2lkKik7CitXS19FWFBPUlQgdm9pZCBXS0RhdGFiYXNlTWFu
YWdlckdldERhdGFiYXNlT3JpZ2lucyhXS0RhdGFiYXNlTWFuYWdlclJlZiBjb250ZXh0UmVmLCB2
b2lkKiBjb250ZXh0LCBXS0RhdGFiYXNlTWFuYWdlckdldERhdGFiYXNlT3JpZ2luc0Z1bmN0aW9u
IGZ1bmN0aW9uKTsKKyNpZmRlZiBfX0JMT0NLU19fCit0eXBlZGVmIHZvaWQgKF5XS0RhdGFiYXNl
TWFuYWdlckdldERhdGFiYXNlT3JpZ2luc0Jsb2NrKShXS0FycmF5UmVmLCBXS0Vycm9yUmVmKTsK
K1dLX0VYUE9SVCB2b2lkIFdLRGF0YWJhc2VNYW5hZ2VyR2V0RGF0YWJhc2VPcmlnaW5zX2IoV0tE
YXRhYmFzZU1hbmFnZXJSZWYgZGF0YWJhc2VNYW5hZ2VyLCBXS0RhdGFiYXNlTWFuYWdlckdldERh
dGFiYXNlT3JpZ2luc0Jsb2NrIGJsb2NrKTsKKyNlbmRpZgorV0tfRVhQT1JUIHZvaWQgV0tEYXRh
YmFzZU1hbmFnZXJEZWxldGVEYXRhYmFzZXNGb3JPcmlnaW4oV0tEYXRhYmFzZU1hbmFnZXJSZWYg
ZGF0YWJhc2VNYW5hZ2VyLCBXS1NlY3VyaXR5T3JpZ2luUmVmIG9yaWdpbik7CitXS19FWFBPUlQg
dm9pZCBXS0RhdGFiYXNlTWFuYWdlckRlbGV0ZUFsbERhdGFiYXNlcyhXS0RhdGFiYXNlTWFuYWdl
clJlZiBkYXRhYmFzZU1hbmFnZXIpOworCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgor
CisjZW5kaWYgLy8gV0tEYXRhYmFzZU1hbmFnZXJfaApJbmRleDogV2ViS2l0Mi9XZWJLaXQyLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0Mi9XZWJLaXQyLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDczNjU2KQorKysgV2ViS2l0Mi9XZWJL
aXQyLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTU4NSw2ICs1
ODUsMTQgQEAKIAkJRjYxMTNFMjUxMjZDRTE4MjAwNTdEMEE3IC8qIFdlYlVzZXJDb250ZW50VVJM
UGF0dGVybi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
RjYxMTNFMjQxMjZDRTE4MjAwNTdEMEE3IC8qIFdlYlVzZXJDb250ZW50VVJMUGF0dGVybi5oICov
OyB9OwogCQlGNjExM0UyODEyNkNFMTlCMDA1N0QwQTcgLyogV0tVc2VyQ29udGVudFVSTFBhdHRl
cm4uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjYx
MTNFMjYxMjZDRTE5QjAwNTdEMEE3IC8qIFdLVXNlckNvbnRlbnRVUkxQYXR0ZXJuLmNwcCAqLzsg
fTsKIAkJRjYxMTNFMjkxMjZDRTE5QjAwNTdEMEE3IC8qIFdLVXNlckNvbnRlbnRVUkxQYXR0ZXJu
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGNjExM0Uy
NzEyNkNFMTlCMDA1N0QwQTcgLyogV0tVc2VyQ29udGVudFVSTFBhdHRlcm4uaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQdWJsaWMsICk7IH07IH07CisJCUY2MkE3NjVDMTJCMUFCQzMw
MDA1RjFCNiAvKiBXZWJEYXRhYmFzZU1hbmFnZXJQcm94eS5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGNjJBNzY1OTEyQjFBQkMzMDAwNUYxQjYgLyog
V2ViRGF0YWJhc2VNYW5hZ2VyUHJveHkuY3BwICovOyB9OworCQlGNjJBNzY1RDEyQjFBQkMzMDAw
NUYxQjYgLyogV2ViRGF0YWJhc2VNYW5hZ2VyUHJveHkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY2MkE3NjVBMTJCMUFCQzMwMDA1RjFCNiAvKiBXZWJE
YXRhYmFzZU1hbmFnZXJQcm94eS5oICovOyB9OworCQlGNjJBNzY2MTEyQjFBQkVEMDAwNUYxQjYg
LyogV0tEYXRhYmFzZU1hbmFnZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gRjYyQTc2NUYxMkIxQUJFRDAwMDVGMUI2IC8qIFdLRGF0YWJhc2VNYW5h
Z2VyLmNwcCAqLzsgfTsKKwkJRjYyQTc2NjIxMkIxQUJFRDAwMDVGMUI2IC8qIFdLRGF0YWJhc2VN
YW5hZ2VyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBG
NjJBNzY2MDEyQjFBQkVEMDAwNUYxQjYgLyogV0tEYXRhYmFzZU1hbmFnZXIuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQdWJsaWMsICk7IH07IH07CisJCUY2MkE3NkI2MTJCMUIyNUYw
MDA1RjFCNiAvKiBXZWJEYXRhYmFzZU1hbmFnZXJNZXNzYWdlUmVjZWl2ZXIuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjYyQTc2QjIxMkIxQjI1RjAw
MDVGMUI2IC8qIFdlYkRhdGFiYXNlTWFuYWdlck1lc3NhZ2VSZWNlaXZlci5jcHAgKi87IH07CisJ
CUY2MkE3NkI3MTJCMUIyNUYwMDA1RjFCNiAvKiBXZWJEYXRhYmFzZU1hbmFnZXJNZXNzYWdlcy5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjYyQTc2QjMx
MkIxQjI1RjAwMDVGMUI2IC8qIFdlYkRhdGFiYXNlTWFuYWdlck1lc3NhZ2VzLmggKi87IH07CisJ
CUY2MkE3NkI4MTJCMUIyNUYwMDA1RjFCNiAvKiBXZWJEYXRhYmFzZU1hbmFnZXJQcm94eU1lc3Nh
Z2VSZWNlaXZlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBGNjJBNzZCNDEyQjFCMjVGMDAwNUYxQjYgLyogV2ViRGF0YWJhc2VNYW5hZ2VyUHJveHlN
ZXNzYWdlUmVjZWl2ZXIuY3BwICovOyB9OworCQlGNjJBNzZCOTEyQjFCMjVGMDAwNUYxQjYgLyog
V2ViRGF0YWJhc2VNYW5hZ2VyUHJveHlNZXNzYWdlcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjYyQTc2QjUxMkIxQjI1RjAwMDVGMUI2IC8qIFdlYkRh
dGFiYXNlTWFuYWdlclByb3h5TWVzc2FnZXMuaCAqLzsgfTsKIAkJRjYzNDQ0NTYxMkE4ODVDODAw
MDYxMkQ4IC8qIFdlYlNlY3VyaXR5T3JpZ2luLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBGNjM0NDQ1NTEyQTg4NUM4MDAwNjEyRDggLyogV2ViU2VjdXJp
dHlPcmlnaW4uaCAqLzsgfTsKIAkJRjYzNDQ0NUMxMkE4ODVFOTAwMDYxMkQ4IC8qIFdLU2VjdXJp
dHlPcmlnaW4uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gRjYzNDQ0NUExMkE4ODVFOTAwMDYxMkQ4IC8qIFdLU2VjdXJpdHlPcmlnaW4uY3BwICovOyB9
OwogCQlGNjM0NDQ1RDEyQTg4NUU5MDAwNjEyRDggLyogV0tTZWN1cml0eU9yaWdpbi5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjYzNDQ0NUIxMkE4ODVF
OTAwMDYxMkQ4IC8qIFdLU2VjdXJpdHlPcmlnaW4uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQdWJsaWMsICk7IH07IH07CkBAIC0xMjM5LDYgKzEyNDcsMTYgQEAKIAkJRjYxMTNFMjQx
MjZDRTE4MjAwNTdEMEE3IC8qIFdlYlVzZXJDb250ZW50VVJMUGF0dGVybi5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJVc2VyQ29udGVudFVSTFBhdHRlcm4uaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRjYxMTNFMjYxMjZDRTE5QjAwNTdEMEE3IC8qIFdLVXNl
ckNvbnRlbnRVUkxQYXR0ZXJuLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IFdLVXNlckNvbnRlbnRVUkxQYXR0ZXJuLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJRjYxMTNFMjcxMjZDRTE5QjAwNTdEMEE3IC8qIFdLVXNlckNvbnRlbnRVUkxQYXR0ZXJu
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdLVXNlckNvbnRlbnRVUkxQYXR0
ZXJuLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUY2MkE3NjU3MTJCMUFCN0QwMDA1
RjFCNiAvKiBXZWJEYXRhYmFzZU1hbmFnZXIubWVzc2FnZXMuaW4gKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBw
YXRoID0gV2ViRGF0YWJhc2VNYW5hZ2VyLm1lc3NhZ2VzLmluOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQlGNjJBNzY1OTEyQjFBQkMzMDAwNUYxQjYgLyogV2ViRGF0YWJhc2VNYW5hZ2Vy
UHJveHkuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV2ViRGF0YWJh
c2VNYW5hZ2VyUHJveHkuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGNjJBNzY1
QTEyQjFBQkMzMDAwNUYxQjYgLyogV2ViRGF0YWJhc2VNYW5hZ2VyUHJveHkuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViRGF0YWJhc2VNYW5hZ2VyUHJveHkuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRjYyQTc2NUIxMkIxQUJDMzAwMDVGMUI2IC8qIFdlYkRh
dGFiYXNlTWFuYWdlclByb3h5Lm1lc3NhZ2VzLmluICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IFdl
YkRhdGFiYXNlTWFuYWdlclByb3h5Lm1lc3NhZ2VzLmluOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQlGNjJBNzY1RjEyQjFBQkVEMDAwNUYxQjYgLyogV0tEYXRhYmFzZU1hbmFnZXIuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV0tEYXRhYmFzZU1hbmFnZXIu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGNjJBNzY2MDEyQjFBQkVEMDAwNUYx
QjYgLyogV0tEYXRhYmFzZU1hbmFnZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gV0tEYXRhYmFzZU1hbmFnZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRjYy
QTc2QjIxMkIxQjI1RjAwMDVGMUI2IC8qIFdlYkRhdGFiYXNlTWFuYWdlck1lc3NhZ2VSZWNlaXZl
ci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXZWJEYXRhYmFzZU1h
bmFnZXJNZXNzYWdlUmVjZWl2ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlG
NjJBNzZCMzEyQjFCMjVGMDAwNUYxQjYgLyogV2ViRGF0YWJhc2VNYW5hZ2VyTWVzc2FnZXMuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViRGF0YWJhc2VNYW5hZ2VyTWVzc2Fn
ZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRjYyQTc2QjQxMkIxQjI1RjAwMDVG
MUI2IC8qIFdlYkRhdGFiYXNlTWFuYWdlclByb3h5TWVzc2FnZVJlY2VpdmVyLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdlYkRhdGFiYXNlTWFuYWdlclByb3h5TWVz
c2FnZVJlY2VpdmVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRjYyQTc2QjUx
MkIxQjI1RjAwMDVGMUI2IC8qIFdlYkRhdGFiYXNlTWFuYWdlclByb3h5TWVzc2FnZXMuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViRGF0YWJhc2VNYW5hZ2VyUHJveHlNZXNz
YWdlcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGNjM0NDQ1NTEyQTg4NUM4MDAw
NjEyRDggLyogV2ViU2VjdXJpdHlPcmlnaW4uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gV2ViU2VjdXJpdHlPcmlnaW4uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
RjYzNDQ0NUExMkE4ODVFOTAwMDYxMkQ4IC8qIFdLU2VjdXJpdHlPcmlnaW4uY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV0tTZWN1cml0eU9yaWdpbi5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUY2MzQ0NDVCMTJBODg1RTkwMDA2MTJEOCAvKiBXS1Nl
Y3VyaXR5T3JpZ2luLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdLU2VjdXJp
dHlPcmlnaW4uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE3NDIsNiArMTc2MCw3
IEBACiAJCQkJQkMwMzJENjIxMEY0Mzc4RDAwNThDMTVBIC8qIFdlYkNvbnRleHRNZW51Q2xpZW50
LmggKi8sCiAJCQkJRjZBMjVGREExMkFEQzZDQzAwREM0MENDIC8qIFdlYkRhdGFiYXNlTWFuYWdl
ci5jcHAgKi8sCiAJCQkJRjZBMjVGREIxMkFEQzZDQzAwREM0MENDIC8qIFdlYkRhdGFiYXNlTWFu
YWdlci5oICovLAorCQkJCUY2MkE3NjU3MTJCMUFCN0QwMDA1RjFCNiAvKiBXZWJEYXRhYmFzZU1h
bmFnZXIubWVzc2FnZXMuaW4gKi8sCiAJCQkJQkMxMTFBNTYxMTJGNEZCQjAwMzM3QkFCIC8qIFdl
YkRyYWdDbGllbnQuY3BwICovLAogCQkJCUJDMDMyRDY2MTBGNDM3OEQwMDU4QzE1QSAvKiBXZWJE
cmFnQ2xpZW50LmggKi8sCiAJCQkJQkMxMTFBNTcxMTJGNEZCQjAwMzM3QkFCIC8qIFdlYkVkaXRv
ckNsaWVudC5jcHAgKi8sCkBAIC0xODM0LDYgKzE4NTMsOSBAQAogCQkJCUJDREUwNTlBMTFDREE4
QUUwMEU0MUFGMSAvKiBXZWJDb250ZXh0SW5qZWN0ZWRCdW5kbGVDbGllbnQuY3BwICovLAogCQkJ
CUJDREUwNTk5MTFDREE4QUUwMEU0MUFGMSAvKiBXZWJDb250ZXh0SW5qZWN0ZWRCdW5kbGVDbGll
bnQuaCAqLywKIAkJCQlCQ0IwQjBEQjEyMzA1QTI1MDBCMTM0MUUgLyogV2ViQ29udGV4dFVzZXJN
ZXNzYWdlQ29kZXJzLmggKi8sCisJCQkJRjYyQTc2NTkxMkIxQUJDMzAwMDVGMUI2IC8qIFdlYkRh
dGFiYXNlTWFuYWdlclByb3h5LmNwcCAqLywKKwkJCQlGNjJBNzY1QTEyQjFBQkMzMDAwNUYxQjYg
LyogV2ViRGF0YWJhc2VNYW5hZ2VyUHJveHkuaCAqLywKKwkJCQlGNjJBNzY1QjEyQjFBQkMzMDAw
NUYxQjYgLyogV2ViRGF0YWJhc2VNYW5hZ2VyUHJveHkubWVzc2FnZXMuaW4gKi8sCiAJCQkJMUFC
N0Q3MkIxMjg4Q0FBRDAwQ0ZEMDhDIC8qIFdlYkRvd25sb2FkQ2xpZW50LmNwcCAqLywKIAkJCQkx
QUI3RDcyQTEyODhDQUFEMDBDRkQwOEMgLyogV2ViRG93bmxvYWRDbGllbnQuaCAqLywKIAkJCQlC
Q0EwRUY5RTEyMzMyNjQyMDA3RDNDRkIgLyogV2ViRWRpdENvbW1hbmRQcm94eS5jcHAgKi8sCkBA
IC0xOTE1LDYgKzE5MzcsOCBAQAogCQkJCTUxMkY1OEYxMTJBODhBNTQwMDYyOTUzMCAvKiBXS0Ny
ZWRlbnRpYWwuY3BwICovLAogCQkJCTUxMkY1OEYyMTJBODhBNTQwMDYyOTUzMCAvKiBXS0NyZWRl
bnRpYWwuaCAqLywKIAkJCQk1MThBQ0YxMDEyQjAxNUY4MDBCMDRCODMgLyogV0tDcmVkZW50aWFs
VHlwZXMuaCAqLywKKwkJCQlGNjJBNzY1RjEyQjFBQkVEMDAwNUYxQjYgLyogV0tEYXRhYmFzZU1h
bmFnZXIuY3BwICovLAorCQkJCUY2MkE3NjYwMTJCMUFCRUQwMDA1RjFCNiAvKiBXS0RhdGFiYXNl
TWFuYWdlci5oICovLAogCQkJCTFBQjdENzhDMTI4OENEOUEwMENGRDA4QyAvKiBXS0Rvd25sb2Fk
LmNwcCAqLywKIAkJCQkxQUI3RDc4QjEyODhDRDlBMDBDRkQwOEMgLyogV0tEb3dubG9hZC5oICov
LAogCQkJCUJDRTQ2OTU3MTIxNEVERjQwMDBCOThFQiAvKiBXS0Zvcm1TdWJtaXNzaW9uTGlzdGVu
ZXIuY3BwICovLApAQCAtMjMxOCw2ICsyMzQyLDEwIEBACiAJCQkJMUE4RUZBNkYxMjUyQjg0MTAw
RjcwNjdGIC8qIFBsdWdpblByb3h5TWVzc2FnZXMuaCAqLywKIAkJCQlCQ0VFN0QwQjEyODQ2RjY5
MDA5ODI3REEgLyogV2ViQ29udGV4dE1lc3NhZ2VSZWNlaXZlci5jcHAgKi8sCiAJCQkJQkNFRTdE
MEMxMjg0NkY2OTAwOTgyN0RBIC8qIFdlYkNvbnRleHRNZXNzYWdlcy5oICovLAorCQkJCUY2MkE3
NkIyMTJCMUIyNUYwMDA1RjFCNiAvKiBXZWJEYXRhYmFzZU1hbmFnZXJNZXNzYWdlUmVjZWl2ZXIu
Y3BwICovLAorCQkJCUY2MkE3NkIzMTJCMUIyNUYwMDA1RjFCNiAvKiBXZWJEYXRhYmFzZU1hbmFn
ZXJNZXNzYWdlcy5oICovLAorCQkJCUY2MkE3NkI0MTJCMUIyNUYwMDA1RjFCNiAvKiBXZWJEYXRh
YmFzZU1hbmFnZXJQcm94eU1lc3NhZ2VSZWNlaXZlci5jcHAgKi8sCisJCQkJRjYyQTc2QjUxMkIx
QjI1RjAwMDVGMUI2IC8qIFdlYkRhdGFiYXNlTWFuYWdlclByb3h5TWVzc2FnZXMuaCAqLywKIAkJ
CQkxQzhFMkEzMTEyNzc4NTI0MDBCQzdCRDAgLyogV2ViSW5zcGVjdG9yTWVzc2FnZVJlY2VpdmVy
LmNwcCAqLywKIAkJCQkxQzhFMkEzMjEyNzc4NTI0MDBCQzdCRDAgLyogV2ViSW5zcGVjdG9yTWVz
c2FnZXMuaCAqLywKIAkJCQkxQ0E4Qjk0MzEyN0M4ODJBMDA1NzZDMkIgLyogV2ViSW5zcGVjdG9y
UHJveHlNZXNzYWdlUmVjZWl2ZXIuY3BwICovLApAQCAtMjY1NSw2ICsyNjgzLDEwIEBACiAJCQkJ
QkMyRDAyMTkxMkFDNDI2QzAwRTczMkEzIC8qIFdLUGFnZUxvYWRUeXBlcy5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJRjZBMjVGREQxMkFEQzZDQzAwREM0MENDIC8qIFdlYkRhdGFiYXNlTWFuYWdlci5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMUFBRjA2MTQxMkIwMTEzMTAwOEU0OUUyIC8qIFBERlZpZXdD
b250cm9sbGVyLmggaW4gSGVhZGVycyAqLywKKwkJCQlGNjJBNzY1RDEyQjFBQkMzMDAwNUYxQjYg
LyogV2ViRGF0YWJhc2VNYW5hZ2VyUHJveHkuaCBpbiBIZWFkZXJzICovLAorCQkJCUY2MkE3NjYy
MTJCMUFCRUQwMDA1RjFCNiAvKiBXS0RhdGFiYXNlTWFuYWdlci5oIGluIEhlYWRlcnMgKi8sCisJ
CQkJRjYyQTc2QjcxMkIxQjI1RjAwMDVGMUI2IC8qIFdlYkRhdGFiYXNlTWFuYWdlck1lc3NhZ2Vz
LmggaW4gSGVhZGVycyAqLywKKwkJCQlGNjJBNzZCOTEyQjFCMjVGMDAwNUYxQjYgLyogV2ViRGF0
YWJhc2VNYW5hZ2VyUHJveHlNZXNzYWdlcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkpOwogCQkJcnVu
T25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkBAIC0zMDY2LDYgKzMw
OTgsMTAgQEAKIAkJCQlGNkEyNUZEQzEyQURDNkNDMDBEQzQwQ0MgLyogV2ViRGF0YWJhc2VNYW5h
Z2VyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTUxMDIxRTlDMTJCMTY3ODgwMDVDMDMzQyAvKiBX
ZWJDb250ZXh0TWVudUNsaWVudE1hYy5tbSBpbiBTb3VyY2VzICovLAogCQkJCTFBQUYwNjE1MTJC
MDExMzEwMDhFNDlFMiAvKiBQREZWaWV3Q29udHJvbGxlci5tbSBpbiBTb3VyY2VzICovLAorCQkJ
CUY2MkE3NjVDMTJCMUFCQzMwMDA1RjFCNiAvKiBXZWJEYXRhYmFzZU1hbmFnZXJQcm94eS5jcHAg
aW4gU291cmNlcyAqLywKKwkJCQlGNjJBNzY2MTEyQjFBQkVEMDAwNUYxQjYgLyogV0tEYXRhYmFz
ZU1hbmFnZXIuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJRjYyQTc2QjYxMkIxQjI1RjAwMDVGMUI2
IC8qIFdlYkRhdGFiYXNlTWFuYWdlck1lc3NhZ2VSZWNlaXZlci5jcHAgaW4gU291cmNlcyAqLywK
KwkJCQlGNjJBNzZCODEyQjFCMjVGMDAwNUYxQjYgLyogV2ViRGF0YWJhc2VNYW5hZ2VyUHJveHlN
ZXNzYWdlUmVjZWl2ZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRl
cGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkluZGV4OiBXZWJLaXQyL1dlYlByb2Nl
c3MvV2ViUHJvY2Vzcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBy
b2Nlc3MuY3BwCShyZXZpc2lvbiA3MzY1NikKKysrIFdlYktpdDIvV2ViUHJvY2Vzcy9XZWJQcm9j
ZXNzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDc4LDYgKzQ3OCwxMSBAQCB2b2lkIFdlYlByb2Nl
c3M6OmRpZFJlY2VpdmVNZXNzYWdlKENvcmVJCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKKyAg
ICBpZiAobWVzc2FnZUlELmlzPENvcmVJUEM6Ok1lc3NhZ2VDbGFzc1dlYkRhdGFiYXNlTWFuYWdl
cj4oKSkgeworICAgICAgICBXZWJEYXRhYmFzZU1hbmFnZXI6OnNoYXJlZCgpLmRpZFJlY2VpdmVN
ZXNzYWdlKGNvbm5lY3Rpb24sIG1lc3NhZ2VJRCwgYXJndW1lbnRzKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKwogICAgIGlmIChtZXNzYWdlSUQuaXM8Q29yZUlQQzo6TWVzc2FnZUNsYXNzSW5q
ZWN0ZWRCdW5kbGU+KCkpIHsKICAgICAgICAgaWYgKCFtX2luamVjdGVkQnVuZGxlKQogICAgICAg
ICAgICAgcmV0dXJuOwpJbmRleDogV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dl
YkRhdGFiYXNlTWFuYWdlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0Mi9XZWJQcm9jZXNzL1dl
YkNvcmVTdXBwb3J0L1dlYkRhdGFiYXNlTWFuYWdlci5jcHAJKHJldmlzaW9uIDczNjU2KQorKysg
V2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkRhdGFiYXNlTWFuYWdlci5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTI1LDcgKzI1LDEzIEBACiAKICNpbmNsdWRlICJXZWJEYXRhYmFz
ZU1hbmFnZXIuaCIKIAorI2luY2x1ZGUgIkNvbm5lY3Rpb24uaCIKKyNpbmNsdWRlICJNZXNzYWdl
SUQuaCIKKyNpbmNsdWRlICJXZWJDb3JlQXJndW1lbnRDb2RlcnMuaCIKKyNpbmNsdWRlICJXZWJE
YXRhYmFzZU1hbmFnZXJQcm94eU1lc3NhZ2VzLmgiCisjaW5jbHVkZSAiV2ViUHJvY2Vzcy5oIgog
I2luY2x1ZGUgPFdlYkNvcmUvRGF0YWJhc2VUcmFja2VyLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9T
ZWN1cml0eU9yaWdpbi5oPgogCiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIApAQCAtNDIsNCAr
NDgsMzYgQEAgV2ViRGF0YWJhc2VNYW5hZ2VyOjpXZWJEYXRhYmFzZU1hbmFnZXIoKQogICAgIERh
dGFiYXNlVHJhY2tlcjo6aW5pdGlhbGl6ZVRyYWNrZXIoZGF0YWJhc2VEaXJlY3RvcnkoKSk7CiB9
CiAKK3ZvaWQgV2ViRGF0YWJhc2VNYW5hZ2VyOjpkaWRSZWNlaXZlTWVzc2FnZShDb3JlSVBDOjpD
b25uZWN0aW9uKiBjb25uZWN0aW9uLCBDb3JlSVBDOjpNZXNzYWdlSUQgbWVzc2FnZUlELCBDb3Jl
SVBDOjpBcmd1bWVudERlY29kZXIqIGFyZ3VtZW50cykKK3sKKyAgICBkaWRSZWNlaXZlV2ViRGF0
YWJhc2VNYW5hZ2VyTWVzc2FnZShjb25uZWN0aW9uLCBtZXNzYWdlSUQsIGFyZ3VtZW50cyk7Cit9
CisKK3ZvaWQgV2ViRGF0YWJhc2VNYW5hZ2VyOjpnZXREYXRhYmFzZU9yaWdpbnModWludDY0X3Qg
Y2FsbGJhY2tJRCkgY29uc3QKK3sKKyAgICBWZWN0b3I8UmVmUHRyPFNlY3VyaXR5T3JpZ2luPiA+
IG9yaWdpbnM7CisgICAgRGF0YWJhc2VUcmFja2VyOjp0cmFja2VyKCkub3JpZ2lucyhvcmlnaW5z
KTsKKworICAgIHNpemVfdCBudW1PcmlnaW5zID0gb3JpZ2lucy5zaXplKCk7CisKKyAgICBWZWN0
b3I8U3RyaW5nPiBpZGVudGlmaWVycyhudW1PcmlnaW5zKTsKKyAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IG51bU9yaWdpbnM7ICsraSkKKyAgICAgICAgaWRlbnRpZmllcnNbaV0gPSBvcmlnaW5z
W2ldLT5kYXRhYmFzZUlkZW50aWZpZXIoKTsKKyAgICBXZWJQcm9jZXNzOjpzaGFyZWQoKS5jb25u
ZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6OldlYkRhdGFiYXNlTWFuYWdlclByb3h5OjpEaWRHZXRE
YXRhYmFzZU9yaWdpbnMoaWRlbnRpZmllcnMsIGNhbGxiYWNrSUQpLCAwKTsKK30KKwordm9pZCBX
ZWJEYXRhYmFzZU1hbmFnZXI6OmRlbGV0ZURhdGFiYXNlc0Zvck9yaWdpbihjb25zdCBTdHJpbmcm
IG9yaWdpbklkZW50aWZpZXIpIGNvbnN0Cit7CisgICAgUmVmUHRyPFNlY3VyaXR5T3JpZ2luPiBv
cmlnaW4gPSBTZWN1cml0eU9yaWdpbjo6Y3JlYXRlRnJvbURhdGFiYXNlSWRlbnRpZmllcihvcmln
aW5JZGVudGlmaWVyKTsKKyAgICBpZiAoIW9yaWdpbikKKyAgICAgICAgcmV0dXJuOworCisgICAg
RGF0YWJhc2VUcmFja2VyOjp0cmFja2VyKCkuZGVsZXRlT3JpZ2luKG9yaWdpbi5nZXQoKSk7Cit9
CisKK3ZvaWQgV2ViRGF0YWJhc2VNYW5hZ2VyOjpkZWxldGVBbGxEYXRhYmFzZXMoKSBjb25zdAor
eworICAgIERhdGFiYXNlVHJhY2tlcjo6dHJhY2tlcigpLmRlbGV0ZUFsbERhdGFiYXNlcygpOwor
fQorCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKSW5kZXg6IFdlYktpdDIvV2ViUHJvY2Vzcy9XZWJD
b3JlU3VwcG9ydC9XZWJEYXRhYmFzZU1hbmFnZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQyL1dl
YlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViRGF0YWJhc2VNYW5hZ2VyLmgJKHJldmlzaW9uIDcz
NjU2KQorKysgV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkRhdGFiYXNlTWFu
YWdlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNiwyMiArMjYsMzMgQEAKICNpZm5kZWYgV2ViRGF0
YWJhc2VNYW5hZ2VyX2gKICNkZWZpbmUgV2ViRGF0YWJhc2VNYW5hZ2VyX2gKIAorI2luY2x1ZGUg
IkFyZ3VtZW50cy5oIgogI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgogI2luY2x1ZGUgPHd0
Zi90ZXh0L1dURlN0cmluZy5oPgogCituYW1lc3BhY2UgQ29yZUlQQyB7CitjbGFzcyBBcmd1bWVu
dERlY29kZXI7CitjbGFzcyBDb25uZWN0aW9uOworY2xhc3MgTWVzc2FnZUlEOworfQorCiBuYW1l
c3BhY2UgV2ViS2l0IHsKIAogY2xhc3MgV2ViRGF0YWJhc2VNYW5hZ2VyIDogcHVibGljIE5vbmNv
cHlhYmxlIHsKIHB1YmxpYzoKICAgICBzdGF0aWMgV2ViRGF0YWJhc2VNYW5hZ2VyJiBzaGFyZWQo
KTsKIAotICAgIC8vIEZJWE1FOiBBZGQgbWV0aG9kcyB0byBnZXQgdGhlIG9yaWdpbnMgZm9yIHdo
aWNoIHRoZXJlIGFyZSBkYXRhYmFzZXMsIGRlbGV0ZSB0aGUgZGF0YWJhc2VzCi0gICAgLy8gZm9y
IGFuIG9yaWdpbiwgYW5kIGRlbGV0ZSBhbGwgdGhlIGRhdGFiYXNlcy4KLSAgICAvLyBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTA2MDYKKyAgICB2b2lkIGdldERhdGFi
YXNlT3JpZ2lucyh1aW50NjRfdCBjYWxsYmFja0lEKSBjb25zdDsKKyAgICB2b2lkIGRlbGV0ZURh
dGFiYXNlc0Zvck9yaWdpbihjb25zdCBTdHJpbmcmIG9yaWdpbklkZW50aWZpZXIpIGNvbnN0Owor
ICAgIHZvaWQgZGVsZXRlQWxsRGF0YWJhc2VzKCkgY29uc3Q7CisKKyAgICB2b2lkIGRpZFJlY2Vp
dmVNZXNzYWdlKENvcmVJUEM6OkNvbm5lY3Rpb24qLCBDb3JlSVBDOjpNZXNzYWdlSUQsIENvcmVJ
UEM6OkFyZ3VtZW50RGVjb2RlciopOwogCiBwcml2YXRlOgogICAgIFdlYkRhdGFiYXNlTWFuYWdl
cigpOwogCisgICAgdm9pZCBkaWRSZWNlaXZlV2ViRGF0YWJhc2VNYW5hZ2VyTWVzc2FnZShDb3Jl
SVBDOjpDb25uZWN0aW9uKiwgQ29yZUlQQzo6TWVzc2FnZUlELCBDb3JlSVBDOjpBcmd1bWVudERl
Y29kZXIqKTsKKwogICAgIFN0cmluZyBkYXRhYmFzZURpcmVjdG9yeSgpIGNvbnN0OwogfTsKIApJ
bmRleDogV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkRhdGFiYXNlTWFuYWdl
ci5tZXNzYWdlcy5pbgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1
cHBvcnQvV2ViRGF0YWJhc2VNYW5hZ2VyLm1lc3NhZ2VzLmluCShyZXZpc2lvbiAwKQorKysgV2Vi
S2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkRhdGFiYXNlTWFuYWdlci5tZXNzYWdl
cy5pbgkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwyNyBAQAorIyBDb3B5cmlnaHQgKEMpIDIwMTAg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisjIGFyZSBtZXQ6CisjIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAyLiAgUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjCisjIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycg
QU5ECisjIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisjIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyMgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IKKyMgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorIyBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgorIyBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUgorIyBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorIyBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorCittZXNzYWdlcyAtPiBXZWJEYXRhYmFzZU1hbmFnZXIgeworICAg
IHZvaWQgR2V0RGF0YWJhc2VPcmlnaW5zKHVpbnQ2NF90IGNhbGxiYWNrSUQpCisgICAgdm9pZCBE
ZWxldGVEYXRhYmFzZXNGb3JPcmlnaW4oV1RGOjpTdHJpbmcgb3JpZ2luSWRlbnRpZmllcikKKyAg
ICB2b2lkIERlbGV0ZUFsbERhdGFiYXNlcygpCit9CkluZGV4OiBXZWJLaXQyL3dpbi9XZWJLaXQy
LnZjcHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQyL3dpbi9XZWJLaXQyLnZjcHJvagkocmV2aXNp
b24gNzM2NTYpCisrKyBXZWJLaXQyL3dpbi9XZWJLaXQyLnZjcHJvagkod29ya2luZyBjb3B5KQpA
QCAtMTE1MCw2ICsxMTUwLDEwIEBACiAJCQkJCT4KIAkJCQk8L0ZpbGU+CiAJCQkJPEZpbGUKKwkJ
CQkJUmVsYXRpdmVQYXRoPSIuLlxXZWJQcm9jZXNzXFdlYkNvcmVTdXBwb3J0XFdlYkRhdGFiYXNl
TWFuYWdlci5tZXNzYWdlcy5pbiIKKwkJCQkJPgorCQkJCTwvRmlsZT4KKwkJCQk8RmlsZQogCQkJ
CQlSZWxhdGl2ZVBhdGg9Ii4uXFdlYlByb2Nlc3NcV2ViQ29yZVN1cHBvcnRcV2ViRHJhZ0NsaWVu
dC5jcHAiCiAJCQkJCT4KIAkJCQk8L0ZpbGU+CkBAIC0xODc5LDYgKzE4ODMsMTggQEAKIAkJCQk+
CiAJCQk8L0ZpbGU+CiAJCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cVUlQcm9jZXNzXFdl
YkRhdGFiYXNlTWFuYWdlclByb3h5LmNwcCIKKwkJCQk+CisJCQk8L0ZpbGU+CisJCQk8RmlsZQor
CQkJCVJlbGF0aXZlUGF0aD0iLi5cVUlQcm9jZXNzXFdlYkRhdGFiYXNlTWFuYWdlclByb3h5Lmgi
CisJCQkJPgorCQkJPC9GaWxlPgorCQkJPEZpbGUKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXFVJUHJv
Y2Vzc1xXZWJEYXRhYmFzZU1hbmFnZXJQcm94eS5tZXNzYWdlcy5pbiIKKwkJCQk+CisJCQk8L0Zp
bGU+CisJCQk8RmlsZQogCQkJCVJlbGF0aXZlUGF0aD0iLi5cVUlQcm9jZXNzXFdlYkRvd25sb2Fk
Q2xpZW50LmNwcCIKIAkJCQk+CiAJCQk8L0ZpbGU+CkBAIC0yMDU3LDYgKzIwNzMsMTAgQEAKIAkJ
CTxGaWx0ZXIKIAkJCQlOYW1lPSJBUEkiCiAJCQkJPgorCQkJCTxGaWxlCisJCQkJCVJlbGF0aXZl
UGF0aD0iLi5cVUlQcm9jZXNzXEFQSVxDXFdLRGF0YWJhc2VNYW5hZ2VyLmNwcCIKKwkJCQkJPgor
CQkJCTwvRmlsZT4KIAkJCQk8RmlsdGVyCiAJCQkJCU5hbWU9IkMiCiAJCQkJCT4KQEAgLTIxMzMs
NiArMjE1MywxMCBAQAogCQkJCQkJPgogCQkJCQk8L0ZpbGU+CiAJCQkJCTxGaWxlCisJCQkJCQlS
ZWxhdGl2ZVBhdGg9Ii4uXFVJUHJvY2Vzc1xBUElcQ1xXS0RhdGFiYXNlTWFuYWdlci5oIgorCQkJ
CQkJPgorCQkJCQk8L0ZpbGU+CisJCQkJCTxGaWxlCiAJCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXFVJ
UHJvY2Vzc1xBUElcQ1xXS0Rvd25sb2FkLmNwcCIKIAkJCQkJCT4KIAkJCQkJPC9GaWxlPgpAQCAt
MjcyNyw2ICsyNzUxLDIyIEBACiAJCQkJPgogCQkJPC9GaWxlPgogCQkJPEZpbGUKKwkJCQlSZWxh
dGl2ZVBhdGg9IiQoV2ViS2l0T3V0cHV0RGlyKVxvYmpcJChQcm9qZWN0TmFtZSlcRGVyaXZlZFNv
dXJjZXNcV2ViRGF0YWJhc2VNYW5hZ2VyTWVzc2FnZVJlY2VpdmVyLmNwcCIKKwkJCQk+CisJCQk8
L0ZpbGU+CisJCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iJChXZWJLaXRPdXRwdXREaXIpXG9i
alwkKFByb2plY3ROYW1lKVxEZXJpdmVkU291cmNlc1xXZWJEYXRhYmFzZU1hbmFnZXJNZXNzYWdl
cy5oIgorCQkJCT4KKwkJCTwvRmlsZT4KKwkJCTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIkKFdl
YktpdE91dHB1dERpcilcb2JqXCQoUHJvamVjdE5hbWUpXERlcml2ZWRTb3VyY2VzXFdlYkRhdGFi
YXNlTWFuYWdlclByb3h5TWVzc2FnZVJlY2VpdmVyLmNwcCIKKwkJCQk+CisJCQk8L0ZpbGU+CisJ
CQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iJChXZWJLaXRPdXRwdXREaXIpXG9ialwkKFByb2pl
Y3ROYW1lKVxEZXJpdmVkU291cmNlc1xXZWJEYXRhYmFzZU1hbmFnZXJQcm94eU1lc3NhZ2VzLmgi
CisJCQkJPgorCQkJPC9GaWxlPgorCQkJPEZpbGUKIAkJCQlSZWxhdGl2ZVBhdGg9IiQoV2ViS2l0
T3V0cHV0RGlyKVxvYmpcJChQcm9qZWN0TmFtZSlcRGVyaXZlZFNvdXJjZXNcV2ViQ29udGV4dE1l
c3NhZ2VSZWNlaXZlci5jcHAiCiAJCQkJPgogCQkJPC9GaWxlPgpJbmRleDogV2ViS2l0Mi93aW4v
V2ViS2l0MkdlbmVyYXRlZC5tYWtlCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdDIvd2luL1dlYktpdDJH
ZW5lcmF0ZWQubWFrZQkocmV2aXNpb24gNzM2NTYpCisrKyBXZWJLaXQyL3dpbi9XZWJLaXQyR2Vu
ZXJhdGVkLm1ha2UJKHdvcmtpbmcgY29weSkKQEAgLTQxLDYgKzQxLDcgQEAgYWxsOgogICAgIHhj
b3B5IC95IC9kICIuLlxVSVByb2Nlc3NcQVBJXENcV0tDb250ZXh0UHJpdmF0ZS5oIiAiJChXRUJL
SVRPVVRQVVRESVIpXGluY2x1ZGVcV2ViS2l0MiIKICAgICB4Y29weSAveSAvZCAiLi5cVUlQcm9j
ZXNzXEFQSVxDXFdLQ3JlZGVudGlhbC5oIiAiJChXRUJLSVRPVVRQVVRESVIpXGluY2x1ZGVcV2Vi
S2l0MiIKICAgICB4Y29weSAveSAvZCAiLi5cVUlQcm9jZXNzXEFQSVxDXFdLQ3JlZGVudGlhbFR5
cGVzLmgiICIkKFdFQktJVE9VVFBVVERJUilcaW5jbHVkZVxXZWJLaXQyIgorICAgIHhjb3B5IC95
IC9kICIuLlxVSVByb2Nlc3NcQVBJXENcV0tEYXRhYmFzZU1hbmFnZXIuaCIgIiQoV0VCS0lUT1VU
UFVURElSKVxpbmNsdWRlXFdlYktpdDIiCiAgICAgeGNvcHkgL3kgL2QgIi4uXFVJUHJvY2Vzc1xB
UElcQ1xXS0Rvd25sb2FkLmgiICIkKFdFQktJVE9VVFBVVERJUilcaW5jbHVkZVxXZWJLaXQyIgog
ICAgIHhjb3B5IC95IC9kICIuLlxVSVByb2Nlc3NcQVBJXENcV0tGb3JtU3VibWlzc2lvbkxpc3Rl
bmVyLmgiICIkKFdFQktJVE9VVFBVVERJUilcaW5jbHVkZVxXZWJLaXQyIgogICAgIHhjb3B5IC95
IC9kICIuLlxVSVByb2Nlc3NcQVBJXENcV0tGcmFtZS5oIiAiJChXRUJLSVRPVVRQVVRESVIpXGlu
Y2x1ZGVcV2ViS2l0MiIK
</data>

          </attachment>
      

    </bug>

</bugzilla>