<?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>92827</bug_id>
          
          <creation_ts>2012-07-31 19:48:24 -0700</creation_ts>
          <short_desc>[EFL][WK2] Add ewk_security_origin and ewk_storage_manager APIs</short_desc>
          <delta_ts>2012-11-02 02:06:21 -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>WebKit2</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>100925</dependson>
          <blocked>61838</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Jihye Kang">jye.kang</reporter>
          <assigned_to name="Jihye Kang">jye.kang</assigned_to>
          <cc>abarth</cc>
    
    <cc>cdumez</cc>
    
    <cc>eric</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>jiyeon0402.kim</cc>
    
    <cc>kihong.kwon</cc>
    
    <cc>rakuco</cc>
    
    <cc>tmpsantos</cc>
    
    <cc>vimff0</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>683783</commentid>
    <comment_count>0</comment_count>
    <who name="Jihye Kang">jye.kang</who>
    <bug_when>2012-07-31 19:48:24 -0700</bug_when>
    <thetext>Add ewk_security_origin to use SecurityOrigin on webkit2 efl</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>690067</commentid>
    <comment_count>1</comment_count>
      <attachid>157157</attachid>
    <who name="Jihye Kang">jye.kang</who>
    <bug_when>2012-08-08 02:08:11 -0700</bug_when>
    <thetext>Created attachment 157157
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>693124</commentid>
    <comment_count>2</comment_count>
      <attachid>157157</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-08-11 11:43:09 -0700</bug_when>
    <thetext>Comment on attachment 157157
Patch

LGTM.  Is there someone who should approve EFL API changes?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>693126</commentid>
    <comment_count>3</comment_count>
      <attachid>157157</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2012-08-11 11:58:03 -0700</bug_when>
    <thetext>Comment on attachment 157157
Patch

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

You are not adding the ewk_security_origin.cpp to CMake? Also you did not make the new public header installable.

&gt; Source/WebKit2/ChangeLog:9
&gt; +        This new API will allow to pass security origins of WebDatabase, AppCache and LocalStrogage.

LocalStorage

&gt; Source/WebKit2/UIProcess/API/efl/ewk_security_origin.cpp:40
&gt; +    origin-&gt;host = eina_stringshare_add(toImpl(securityOrigin)-&gt;host().utf8().data());

Please move these 3 lines to _Ewk_Security_Origin constructor.

&gt; Source/WebKit2/UIProcess/API/efl/ewk_security_origin.cpp:47
&gt; +void deleteSecurityOrigin(Ewk_Security_Origin* origin)

We usually call this ewe_security_origin_free(). Also, it appears to be missing from the private header.

&gt; Source/WebKit2/UIProcess/API/efl/ewk_security_origin.cpp:49
&gt; +    eina_stringshare_del(origin-&gt;host);

Please move this to _Ewk_Security_Origin destructor.

&gt; Source/WebKit2/UIProcess/API/efl/ewk_security_origin.cpp:50
&gt; +    eina_stringshare_del(origin-&gt;protocol);

Ditto.

&gt; Source/WebKit2/UIProcess/API/efl/ewk_security_origin.h:39
&gt; +typedef struct _Ewk_Security_Origin Ewk_Security_Origin;

Missing doc.

&gt; Source/WebKit2/UIProcess/API/efl/ewk_security_origin.h:44
&gt; + * It returns a internal string which sould not be modified.

&quot;should&quot;

&gt; Source/WebKit2/UIProcess/API/efl/ewk_security_origin.h:51
&gt; +EAPI const char *ewk_security_origin_host_get(const Ewk_Security_Origin* o);

star on wrong side.

&gt; Source/WebKit2/UIProcess/API/efl/ewk_security_origin.h:60
&gt; +EAPI uint32_t ewk_security_origin_port_get(const Ewk_Security_Origin* o);

Star on wrong side.

&gt; Source/WebKit2/UIProcess/API/efl/ewk_security_origin.h:72
&gt; +EAPI const char *ewk_security_origin_protocol_get(const Ewk_Security_Origin* o);

Star on wrong side.

&gt; Source/WebKit2/UIProcess/API/efl/ewk_security_origin_private.h:26
&gt; +Ewk_Security_Origin* createSecurityOrigin(WKSecurityOriginRef securityOrigin);

did we change coding style? We usually use ewk_security_origin_new().</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>693127</commentid>
    <comment_count>4</comment_count>
      <attachid>157157</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2012-08-11 12:04:08 -0700</bug_when>
    <thetext>Comment on attachment 157157
Patch

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

&gt; Source/WebKit2/UIProcess/API/efl/ewk_security_origin.cpp:31
&gt; +    uint32_t port;

Shouldn&apos;t we keep a &quot;WKRetainPtr&lt;WKSecurityOriginRef&gt; securityOrigin&quot; instead? It seems more extensible.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>693140</commentid>
    <comment_count>5</comment_count>
    <who name="Thiago Marcos P. Santos">tmpsantos</who>
    <bug_when>2012-08-11 13:39:54 -0700</bug_when>
    <thetext>LGTM, although is missing unit tests.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>693141</commentid>
    <comment_count>6</comment_count>
      <attachid>157157</attachid>
    <who name="Thiago Marcos P. Santos">tmpsantos</who>
    <bug_when>2012-08-11 13:40:35 -0700</bug_when>
    <thetext>Comment on attachment 157157
Patch

It is missing unit tests.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>693576</commentid>
    <comment_count>7</comment_count>
    <who name="Thiago Marcos P. Santos">tmpsantos</who>
    <bug_when>2012-08-13 05:41:45 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; LGTM, although is missing unit tests.

Let me be more explicit here: LGTM after fixing Christophe&apos;s comments and adding unit tests.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>693583</commentid>
    <comment_count>8</comment_count>
      <attachid>157157</attachid>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2012-08-13 05:54:35 -0700</bug_when>
    <thetext>Comment on attachment 157157
Patch

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

&gt; Source/WebKit2/UIProcess/API/efl/ewk_security_origin.cpp:4
&gt; +    This library is free software; you can redistribute it and/or

Please use same license. I would like to recommend BSD instead of LGPL.

&gt; Source/WebKit2/UIProcess/API/efl/ewk_security_origin_private.h:18
&gt; + *

It looks this is unneeded line.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>694553</commentid>
    <comment_count>9</comment_count>
    <who name="Jihye Kang">jye.kang</who>
    <bug_when>2012-08-13 23:24:42 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; (In reply to comment #5)
&gt; &gt; LGTM, although is missing unit tests.
&gt; 
&gt; Let me be more explicit here: LGTM after fixing Christophe&apos;s comments and adding unit tests.

Can I add unit tests on the other patch? (https://bugs.webkit.org/show_bug.cgi?id=93934)
Currently there&apos;s no way to create ewk_security_origin without WKSecurityOrigin.
So I&apos;d like to add unit test after Adding other APIs using WKSecurityOrigin.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>694563</commentid>
    <comment_count>10</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2012-08-13 23:51:10 -0700</bug_when>
    <thetext>(In reply to comment #9)
&gt; (In reply to comment #7)
&gt; &gt; (In reply to comment #5)
&gt; &gt; &gt; LGTM, although is missing unit tests.
&gt; &gt; 
&gt; &gt; Let me be more explicit here: LGTM after fixing Christophe&apos;s comments and adding unit tests.
&gt; 
&gt; Can I add unit tests on the other patch? (https://bugs.webkit.org/show_bug.cgi?id=93934)
&gt; Currently there&apos;s no way to create ewk_security_origin without WKSecurityOrigin.
&gt; So I&apos;d like to add unit test after Adding other APIs using WKSecurityOrigin.

Exactly, your patch does not bring ANY new functionality. It merely adds new code to maintain that is not being used at all. I personally don&apos;t like such patch. It would be nice if you could you ewk_security_origin in the same patch. Then you would be able to write unit tests too :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>694565</commentid>
    <comment_count>11</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2012-08-13 23:51:56 -0700</bug_when>
    <thetext>(In reply to comment #10)
&gt; (In reply to comment #9)
&gt; &gt; (In reply to comment #7)
&gt; &gt; &gt; (In reply to comment #5)
&gt; &gt; &gt; &gt; LGTM, although is missing unit tests.
&gt; &gt; &gt; 
&gt; &gt; &gt; Let me be more explicit here: LGTM after fixing Christophe&apos;s comments and adding unit tests.
&gt; &gt; 
&gt; &gt; Can I add unit tests on the other patch? (https://bugs.webkit.org/show_bug.cgi?id=93934)
&gt; &gt; Currently there&apos;s no way to create ewk_security_origin without WKSecurityOrigin.
&gt; &gt; So I&apos;d like to add unit test after Adding other APIs using WKSecurityOrigin.
&gt; 
&gt; Exactly, your patch does not bring ANY new functionality. It merely adds new code to maintain that is not being used at all. I personally don&apos;t like such patch. It would be nice if you could you ewk_security_origin in the same patch. Then you would be able to write unit tests too :)

&quot;It would be nice if you could USE ewk_security_origin in the same patch&quot;

Sorry for the typo.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>694568</commentid>
    <comment_count>12</comment_count>
    <who name="Thiago Marcos P. Santos">tmpsantos</who>
    <bug_when>2012-08-13 23:56:10 -0700</bug_when>
    <thetext>(In reply to comment #9)
&gt; (In reply to comment #7)
&gt; &gt; (In reply to comment #5)
&gt; &gt; &gt; LGTM, although is missing unit tests.
&gt; &gt; 
&gt; &gt; Let me be more explicit here: LGTM after fixing Christophe&apos;s comments and adding unit tests.
&gt; 
&gt; Can I add unit tests on the other patch? (https://bugs.webkit.org/show_bug.cgi?id=93934)
&gt; Currently there&apos;s no way to create ewk_security_origin without WKSecurityOrigin.
&gt; So I&apos;d like to add unit test after Adding other APIs using WKSecurityOrigin.

I just realized that this API cannot be used? What value adds something that cannot be used and/or tested?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>694576</commentid>
    <comment_count>13</comment_count>
    <who name="Thiago Marcos P. Santos">tmpsantos</who>
    <bug_when>2012-08-13 23:59:40 -0700</bug_when>
    <thetext>(In reply to comment #10)
&gt; (In reply to comment #9)
&gt; &gt; (In reply to comment #7)
&gt; &gt; &gt; (In reply to comment #5)
&gt; &gt; &gt; &gt; LGTM, although is missing unit tests.
&gt; &gt; &gt; 
&gt; &gt; &gt; Let me be more explicit here: LGTM after fixing Christophe&apos;s comments and adding unit tests.
&gt; &gt; 
&gt; &gt; Can I add unit tests on the other patch? (https://bugs.webkit.org/show_bug.cgi?id=93934)
&gt; &gt; Currently there&apos;s no way to create ewk_security_origin without WKSecurityOrigin.
&gt; &gt; So I&apos;d like to add unit test after Adding other APIs using WKSecurityOrigin.
&gt; 
&gt; Exactly, your patch does not bring ANY new functionality. It merely adds new code to maintain that is not being used at all. I personally don&apos;t like such patch. It would be nice if you could you ewk_security_origin in the same patch. Then you would be able to write unit tests too :)

Agree with Chris. WKSecurityOrigin has to be added first and later this patch (reworked to be function + unit tests).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>694635</commentid>
    <comment_count>14</comment_count>
    <who name="Jihye Kang">jye.kang</who>
    <bug_when>2012-08-14 01:12:12 -0700</bug_when>
    <thetext>(In reply to comment #13)
&gt; (In reply to comment #10)
&gt; &gt; (In reply to comment #9)
&gt; &gt; &gt; (In reply to comment #7)
&gt; &gt; &gt; &gt; (In reply to comment #5)
&gt; &gt; &gt; &gt; &gt; LGTM, although is missing unit tests.
&gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; Let me be more explicit here: LGTM after fixing Christophe&apos;s comments and adding unit tests.
&gt; &gt; &gt; 
&gt; &gt; &gt; Can I add unit tests on the other patch? (https://bugs.webkit.org/show_bug.cgi?id=93934)
&gt; &gt; &gt; Currently there&apos;s no way to create ewk_security_origin without WKSecurityOrigin.
&gt; &gt; &gt; So I&apos;d like to add unit test after Adding other APIs using WKSecurityOrigin.
&gt; &gt; 
&gt; &gt; Exactly, your patch does not bring ANY new functionality. It merely adds new code to maintain that is not being used at all. I personally don&apos;t like such patch. It would be nice if you could you ewk_security_origin in the same patch. Then you would be able to write unit tests too :)
&gt; 
&gt; Agree with Chris. WKSecurityOrigin has to be added first and later this patch (reworked to be function + unit tests).

Ok. As Chris and Thiago said, I&apos;ll add a case of using WKSecurityOrigin.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>694866</commentid>
    <comment_count>15</comment_count>
      <attachid>157157</attachid>
    <who name="Raphael Kubo da Costa (:rakuco)">rakuco</who>
    <bug_when>2012-08-14 05:37:25 -0700</bug_when>
    <thetext>Comment on attachment 157157
Patch

Removing the r? flag meanwhile.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>717886</commentid>
    <comment_count>16</comment_count>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2012-09-11 21:10:25 -0700</bug_when>
    <thetext>Any update ?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>717902</commentid>
    <comment_count>17</comment_count>
    <who name="Jihye Kang">jye.kang</who>
    <bug_when>2012-09-11 21:39:41 -0700</bug_when>
    <thetext>(In reply to comment #16)
&gt; Any update ?

will update soon. maybe next week.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>741761</commentid>
    <comment_count>18</comment_count>
      <attachid>168628</attachid>
    <who name="Jihye Kang">jye.kang</who>
    <bug_when>2012-10-14 23:10:03 -0700</bug_when>
    <thetext>Created attachment 168628
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>741772</commentid>
    <comment_count>19</comment_count>
      <attachid>168628</attachid>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2012-10-14 23:37:45 -0700</bug_when>
    <thetext>Comment on attachment 168628
Patch

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

&gt; Source/WebKit2/UIProcess/API/efl/ewk_security_origin.cpp:39
&gt; +    unsigned __ref; /**&lt; the reference count of the object */

Bug 99174 is refactoring ref/unref structure. Though I&apos;m not sure which one is landed first, IMO, it would be good to follow Bug 99174.

&gt; Source/WebKit2/UIProcess/API/efl/ewk_security_origin.h:55
&gt; +EAPI Ewk_Security_Origin *ewk_security_origin_ref(Ewk_Security_Origin *o);

Missing unit tests for public APIs.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>741788</commentid>
    <comment_count>20</comment_count>
      <attachid>168628</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2012-10-15 00:02:46 -0700</bug_when>
    <thetext>Comment on attachment 168628
Patch

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

Missing unit tests

&gt; Source/WebKit2/UIProcess/API/efl/ewk_security_origin.cpp:63
&gt; +    return new Ewk_Security_Origin(securityOrigin);

Maybe you can add an ASSERT on the argument here, to be safe.

&gt; Source/WebKit2/UIProcess/API/efl/ewk_security_origin.h:74
&gt; + * @return the host domain or @c NULL if there is not a host scheme

The doc should mention that the returned value is guaranteed to be stringshared. Please check other APIs as reference.

&gt; Source/WebKit2/UIProcess/API/efl/ewk_security_origin.h:95
&gt; + * @return the protocol scheme or or @c NULL if there is not a protocol scheme

Ditto.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>741789</commentid>
    <comment_count>21</comment_count>
      <attachid>168628</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2012-10-15 00:03:19 -0700</bug_when>
    <thetext>Comment on attachment 168628
Patch

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

&gt;&gt; Source/WebKit2/UIProcess/API/efl/ewk_security_origin.h:95
&gt;&gt; + * @return the protocol scheme or or @c NULL if there is not a protocol scheme
&gt; 
&gt; Ditto.

&quot;or or&quot; -&gt; &quot;or&quot;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>741815</commentid>
    <comment_count>22</comment_count>
    <who name="Jihye Kang">jye.kang</who>
    <bug_when>2012-10-15 00:34:09 -0700</bug_when>
    <thetext>(In reply to comment #19)
&gt; (From update of attachment 168628 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=168628&amp;action=review
&gt; 
&gt; &gt; Source/WebKit2/UIProcess/API/efl/ewk_security_origin.cpp:39
&gt; &gt; +    unsigned __ref; /**&lt; the reference count of the object */
&gt; 
&gt; Bug 99174 is refactoring ref/unref structure. Though I&apos;m not sure which one is landed first, IMO, it would be good to follow Bug 99174.

OK. I&apos;ll follow Bug 99174.

&gt; 
&gt; &gt; Source/WebKit2/UIProcess/API/efl/ewk_security_origin.h:55
&gt; &gt; +EAPI Ewk_Security_Origin *ewk_security_origin_ref(Ewk_Security_Origin *o);
&gt; 
&gt; Missing unit tests for public APIs.

Because Ewk_Security_Origin is created internally, I&apos;d like to add unit tests for ewk_security_origin on Bug 99291 which is adding API to get origin list.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>741826</commentid>
    <comment_count>23</comment_count>
      <attachid>168628</attachid>
    <who name="Jinwoo Song">jinwoo7.song</who>
    <bug_when>2012-10-15 00:50:10 -0700</bug_when>
    <thetext>Comment on attachment 168628
Patch

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

&gt; Source/WebKit2/ChangeLog:3
&gt; +        [EFL][WK2] Add ewk_security_origin

Add ewk_security_origin APIs?

&gt; Source/WebKit2/UIProcess/API/efl/ewk_security_origin.h:90
&gt; + * It returns a internal string which should not be modified.

a -&gt; an</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>741847</commentid>
    <comment_count>24</comment_count>
    <who name="Jihye Kang">jye.kang</who>
    <bug_when>2012-10-15 01:42:45 -0700</bug_when>
    <thetext>I&apos;ll add implementation of Bug 99292 also here on next patch to add unit test for ewk_security_origin.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>750508</commentid>
    <comment_count>25</comment_count>
      <attachid>170574</attachid>
    <who name="Jihye Kang">jye.kang</who>
    <bug_when>2012-10-25 00:47:23 -0700</bug_when>
    <thetext>Created attachment 170574
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>750520</commentid>
    <comment_count>26</comment_count>
      <attachid>170574</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2012-10-25 01:06:27 -0700</bug_when>
    <thetext>Comment on attachment 170574
Patch

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

&gt; Source/WebKit2/UIProcess/API/efl/ewk_security_origin.cpp:39
&gt; +    , m_port(WKSecurityOriginGetPort(originRef))

We don&apos;t really need to cache the port since we can easily get it from the WKSecurityOriginRef. We only need it from string due to Eina string sharing.

&gt; Source/WebKit2/UIProcess/API/efl/ewk_security_origin_private.h:50
&gt; +    mutable WKEinaSharedString m_host;

Those members don&apos;t need to be mutable.

&gt; Source/WebKit2/UIProcess/API/efl/ewk_storage_manager.cpp:52
&gt; +    for (size_t i = 0; i &lt; WKArrayGetSize(origins); i++) {

Please cache array size before the loop and use preincrement (not postincrement).

&gt; Source/WebKit2/UIProcess/API/efl/ewk_storage_manager.cpp:56
&gt; +            origin =Ewk_Security_Origin::create(wkOriginRef);

missing space after =

&gt; Source/WebKit2/UIProcess/API/efl/ewk_storage_manager.cpp:59
&gt; +        originList = eina_list_append(originList, ewk_security_origin_ref(origin.get()));

ewk_security_origin_ref(origin.get()) -&gt; origin.leakRef() ?

&gt; Source/WebKit2/UIProcess/API/efl/ewk_storage_manager.cpp:65
&gt; +struct _Ewk_Storage_Origins_Async_Get_Context {

We are trying to get rid of these leading underscores: _Ewk_Storage_Origins_Async_Get_Context -&gt; Ewk_Storage_Origins_Async_Get_Context

&gt; Source/WebKit2/UIProcess/API/efl/ewk_storage_manager_private.h:35
&gt; +typedef HashMap&lt;WKSecurityOriginRef, RefPtr&lt;Ewk_Security_Origin&gt; &gt; StorageOriginsMap;

This typedef can be defined inside the class I believe.

&gt; Source/WebKit2/UIProcess/API/efl/tests/test_ewk2_context.cpp:67
&gt; +    Ewk_Storage_Manager* stageManager = ewk_context_storage_manager_get(context);

stageManager -&gt; storageManager</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>750567</commentid>
    <comment_count>27</comment_count>
      <attachid>170574</attachid>
    <who name="Mikhail Pozdnyakov">mikhail.pozdnyakov</who>
    <bug_when>2012-10-25 02:00:59 -0700</bug_when>
    <thetext>Comment on attachment 170574
Patch

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

&gt; Source/WebKit2/UIProcess/API/efl/ewk_storage_manager.cpp:70
&gt; +    _Ewk_Storage_Origins_Async_Get_Context(Ewk_Storage_Manager* _manager, Ewk_Storage_Origins_Get_Cb _callback, void* _userData)

Ewk_Storage_Manager* manager and then manager(manager)

&gt; Source/WebKit2/UIProcess/API/efl/ewk_storage_manager.cpp:87
&gt; +    delete webStorageContext;

can we use OwnPtr instead of manual deleting (do not forget to adopt :-) )

&gt;&gt; Source/WebKit2/UIProcess/API/efl/ewk_storage_manager_private.h:35
&gt;&gt; +typedef HashMap&lt;WKSecurityOriginRef, RefPtr&lt;Ewk_Security_Origin&gt; &gt; StorageOriginsMap;
&gt; 
&gt; This typedef can be defined inside the class I believe.

in private section</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>750611</commentid>
    <comment_count>28</comment_count>
      <attachid>170574</attachid>
    <who name="Thiago Marcos P. Santos">tmpsantos</who>
    <bug_when>2012-10-25 03:22:37 -0700</bug_when>
    <thetext>Comment on attachment 170574
Patch

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

&gt; Source/WebKit2/UIProcess/API/efl/ewk_context.cpp:237
&gt; +    return const_cast&lt;Ewk_Context*&gt;(ewkContext)-&gt;storageManager();

You don&apos;t need this const cast here. You can make Ewk_Context::storageManger() const and m_storageManager mutable.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>750618</commentid>
    <comment_count>29</comment_count>
      <attachid>170574</attachid>
    <who name="Mikhail Pozdnyakov">mikhail.pozdnyakov</who>
    <bug_when>2012-10-25 03:36:26 -0700</bug_when>
    <thetext>Comment on attachment 170574
Patch

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

&gt;&gt; Source/WebKit2/UIProcess/API/efl/ewk_context.cpp:237
&gt;&gt; +    return const_cast&lt;Ewk_Context*&gt;(ewkContext)-&gt;storageManager();
&gt; 
&gt; You don&apos;t need this const cast here. You can make Ewk_Context::storageManger() const and m_storageManager mutable.

can we just return const pointer?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>750651</commentid>
    <comment_count>30</comment_count>
      <attachid>170607</attachid>
    <who name="Jihye Kang">jye.kang</who>
    <bug_when>2012-10-25 04:10:19 -0700</bug_when>
    <thetext>Created attachment 170607
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>750684</commentid>
    <comment_count>31</comment_count>
    <who name="Jihye Kang">jye.kang</who>
    <bug_when>2012-10-25 04:56:36 -0700</bug_when>
    <thetext>(In reply to comment #26)
&gt; (From update of attachment 170574 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=170574&amp;action=review
&gt; 
&gt; &gt; Source/WebKit2/UIProcess/API/efl/ewk_security_origin.cpp:39
&gt; &gt; +    , m_port(WKSecurityOriginGetPort(originRef))
&gt; 
Done.
&gt; We don&apos;t really need to cache the port since we can easily get it from the WKSecurityOriginRef. We only need it from string due to Eina string sharing.
&gt; 
&gt; &gt; Source/WebKit2/UIProcess/API/efl/ewk_security_origin_private.h:50
&gt; &gt; +    mutable WKEinaSharedString m_host;
&gt; 
&gt; Those members don&apos;t need to be mutable.
&gt; 
Done.
&gt; &gt; Source/WebKit2/UIProcess/API/efl/ewk_storage_manager.cpp:52
&gt; &gt; +    for (size_t i = 0; i &lt; WKArrayGetSize(origins); i++) {
&gt; 
&gt; Please cache array size before the loop and use preincrement (not postincrement).
&gt; 
Done.
&gt; &gt; Source/WebKit2/UIProcess/API/efl/ewk_storage_manager.cpp:56
&gt; &gt; +            origin =Ewk_Security_Origin::create(wkOriginRef);
&gt; 
&gt; missing space after =
&gt; 
Done.
&gt; &gt; Source/WebKit2/UIProcess/API/efl/ewk_storage_manager.cpp:59
&gt; &gt; +        originList = eina_list_append(originList, ewk_security_origin_ref(origin.get()));
&gt; 
&gt; ewk_security_origin_ref(origin.get()) -&gt; origin.leakRef() ?
&gt; 
I missed it on my 4th patch. I&apos;ll apply it on next patch. 
&gt; &gt; Source/WebKit2/UIProcess/API/efl/ewk_storage_manager.cpp:65
&gt; &gt; +struct _Ewk_Storage_Origins_Async_Get_Context {
&gt; 
&gt; We are trying to get rid of these leading underscores: _Ewk_Storage_Origins_Async_Get_Context -&gt; Ewk_Storage_Origins_Async_Get_Context
&gt; 
Done.
&gt; &gt; Source/WebKit2/UIProcess/API/efl/ewk_storage_manager_private.h:35
&gt; &gt; +typedef HashMap&lt;WKSecurityOriginRef, RefPtr&lt;Ewk_Security_Origin&gt; &gt; StorageOriginsMap;
&gt; 
&gt; This typedef can be defined inside the class I believe.
&gt; 
Done.
&gt; &gt; Source/WebKit2/UIProcess/API/efl/tests/test_ewk2_context.cpp:67
&gt; &gt; +    Ewk_Storage_Manager* stageManager = ewk_context_storage_manager_get(context);
&gt; 
&gt; stageManager -&gt; storageManager
Done.

Thank you for all those comments.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>750701</commentid>
    <comment_count>32</comment_count>
      <attachid>170607</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2012-10-25 05:11:39 -0700</bug_when>
    <thetext>Comment on attachment 170607
Patch

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

&gt; Source/WebKit2/UIProcess/API/efl/ewk_storage_manager.cpp:61
&gt; +        originList = eina_list_append(originList, ewk_security_origin_ref(origin.get()));

Would avoid manual ref&apos;ing here by using leakRef()</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>750703</commentid>
    <comment_count>33</comment_count>
    <who name="Jihye Kang">jye.kang</who>
    <bug_when>2012-10-25 05:20:42 -0700</bug_when>
    <thetext>(In reply to comment #32)
&gt; (From update of attachment 170607 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=170607&amp;action=review
&gt; 
&gt; &gt; Source/WebKit2/UIProcess/API/efl/ewk_storage_manager.cpp:61
&gt; &gt; +        originList = eina_list_append(originList, ewk_security_origin_ref(origin.get()));
&gt; 
&gt; Would avoid manual ref&apos;ing here by using leakRef()
Will be done on next patch! I missed it as I commented above.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>750704</commentid>
    <comment_count>34</comment_count>
    <who name="Jihye Kang">jye.kang</who>
    <bug_when>2012-10-25 05:22:52 -0700</bug_when>
    <thetext>(In reply to comment #27)
&gt; (From update of attachment 170574 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=170574&amp;action=review
&gt; 
&gt; &gt; Source/WebKit2/UIProcess/API/efl/ewk_storage_manager.cpp:70
&gt; &gt; +    _Ewk_Storage_Origins_Async_Get_Context(Ewk_Storage_Manager* _manager, Ewk_Storage_Origins_Get_Cb _callback, void* _userData)
&gt; 
&gt; Ewk_Storage_Manager* manager and then manager(manager)
&gt; 
Done.
&gt; &gt; Source/WebKit2/UIProcess/API/efl/ewk_storage_manager.cpp:87
&gt; &gt; +    delete webStorageContext;
&gt; 
&gt; can we use OwnPtr instead of manual deleting (do not forget to adopt :-) )
Will be done on next, 5th, patch. I missed it on 4th.
&gt; 
&gt; &gt;&gt; Source/WebKit2/UIProcess/API/efl/ewk_storage_manager_private.h:35
&gt; &gt;&gt; +typedef HashMap&lt;WKSecurityOriginRef, RefPtr&lt;Ewk_Security_Origin&gt; &gt; StorageOriginsMap;
&gt; &gt; 
&gt; &gt; This typedef can be defined inside the class I believe.
&gt; 
&gt; in private section
Done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>750720</commentid>
    <comment_count>35</comment_count>
      <attachid>170607</attachid>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2012-10-25 05:52:10 -0700</bug_when>
    <thetext>Comment on attachment 170607
Patch

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

&gt; Source/WebKit2/ChangeLog:3
&gt; +        [EFL]WK2] Add ewk_security_origin and ewk_storage_manager APIs

Nit : [EFL]WK2] -&gt; [EFL][WK2]

&gt; Source/WebKit2/UIProcess/API/efl/ewk_security_origin.h:53
&gt; + * @return a pointer to the object on success, @c NULL otherwise.

Remove . at the end of this line. We don&apos;t use . @return and @param.

&gt; Source/WebKit2/UIProcess/API/efl/ewk_storage_manager.h:27
&gt; + * @file    ewk_storage_manager.h

Nit : It would be good if you align this line with below line.

&gt; Source/WebKit2/UIProcess/API/efl/ewk_storage_manager.h:63
&gt; + * @param user_data user_data will be passed when result_callback is called

called -&gt; called, ?

&gt; Source/WebKit2/UIProcess/API/efl/ewk_storage_manager.h:64
&gt; + *    -I.e., user data will be kept until callback is called

-I.e., -&gt; i.e. ?

&gt; Source/WebKit2/UIProcess/API/efl/ewk_storage_manager.h:68
&gt; +EAPI Eina_Bool ewk_storage_manager_origins_get(Ewk_Storage_Manager *manager, Ewk_Storage_Origins_Get_Cb callback, void *user_data);

Missing const keyword for _get API.

&gt; Source/WebKit2/UIProcess/API/efl/tests/test_ewk2_storage_manager.cpp:59
&gt; +    waitUntilTitleChangedTo(&quot;Wait until db sync is finished&quot;, 2);

You have to use ASSERT_TRUE or EXPECT_TRUE for waitUntilTitleChangedTo. Because this function might to return false</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>755818</commentid>
    <comment_count>36</comment_count>
      <attachid>171761</attachid>
    <who name="Jihye Kang">jye.kang</who>
    <bug_when>2012-10-31 20:06:41 -0700</bug_when>
    <thetext>Created attachment 171761
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>755820</commentid>
    <comment_count>37</comment_count>
    <who name="Jihye Kang">jye.kang</who>
    <bug_when>2012-10-31 20:09:17 -0700</bug_when>
    <thetext>(In reply to comment #35)
&gt; (From update of attachment 170607 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=170607&amp;action=review
&gt; 
&gt; &gt; Source/WebKit2/ChangeLog:3
&gt; &gt; +        [EFL]WK2] Add ewk_security_origin and ewk_storage_manager APIs
&gt; 
&gt; Nit : [EFL]WK2] -&gt; [EFL][WK2]
&gt; 
Done
&gt; &gt; Source/WebKit2/UIProcess/API/efl/ewk_security_origin.h:53
&gt; &gt; + * @return a pointer to the object on success, @c NULL otherwise.
&gt; 
&gt; Remove . at the end of this line. We don&apos;t use . @return and @param.
&gt; 
Done
&gt; &gt; Source/WebKit2/UIProcess/API/efl/ewk_storage_manager.h:27
&gt; &gt; + * @file    ewk_storage_manager.h
&gt; 
&gt; Nit : It would be good if you align this line with below line.
&gt; 
Done
&gt; &gt; Source/WebKit2/UIProcess/API/efl/ewk_storage_manager.h:63
&gt; &gt; + * @param user_data user_data will be passed when result_callback is called
&gt; 
&gt; called -&gt; called, ?
&gt; 
Done
&gt; &gt; Source/WebKit2/UIProcess/API/efl/ewk_storage_manager.h:64
&gt; &gt; + *    -I.e., user data will be kept until callback is called
&gt; 
&gt; -I.e., -&gt; i.e. ?
&gt; 
Done
&gt; &gt; Source/WebKit2/UIProcess/API/efl/ewk_storage_manager.h:68
&gt; &gt; +EAPI Eina_Bool ewk_storage_manager_origins_get(Ewk_Storage_Manager *manager, Ewk_Storage_Origins_Get_Cb callback, void *user_data);
&gt; 
&gt; Missing const keyword for _get API.
&gt; 
Done
&gt; &gt; Source/WebKit2/UIProcess/API/efl/tests/test_ewk2_storage_manager.cpp:59
&gt; &gt; +    waitUntilTitleChangedTo(&quot;Wait until db sync is finished&quot;, 2);
&gt; 
&gt; You have to use ASSERT_TRUE or EXPECT_TRUE for waitUntilTitleChangedTo. Because this function might to return false
I use ASSERT_FALSE because this is expected return false for waiting the storage tracker is synchronized.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>755821</commentid>
    <comment_count>38</comment_count>
    <who name="Jihye Kang">jye.kang</who>
    <bug_when>2012-10-31 20:10:01 -0700</bug_when>
    <thetext>(In reply to comment #34)
&gt; (In reply to comment #27)
&gt; &gt; (From update of attachment 170574 [details] [details])
&gt; &gt; View in context: https://bugs.webkit.org/attachment.cgi?id=170574&amp;action=review
&gt; &gt; 
&gt; &gt; &gt; Source/WebKit2/UIProcess/API/efl/ewk_storage_manager.cpp:70
&gt; &gt; &gt; +    _Ewk_Storage_Origins_Async_Get_Context(Ewk_Storage_Manager* _manager, Ewk_Storage_Origins_Get_Cb _callback, void* _userData)
&gt; &gt; 
&gt; &gt; Ewk_Storage_Manager* manager and then manager(manager)
&gt; &gt; 
&gt; Done.
&gt; &gt; &gt; Source/WebKit2/UIProcess/API/efl/ewk_storage_manager.cpp:87
&gt; &gt; &gt; +    delete webStorageContext;
&gt; &gt; 
&gt; &gt; can we use OwnPtr instead of manual deleting (do not forget to adopt :-) )
&gt; Will be done on next, 5th, patch. I missed it on 4th.
&gt; &gt; 
Done on 5th.
&gt; &gt; &gt;&gt; Source/WebKit2/UIProcess/API/efl/ewk_storage_manager_private.h:35
&gt; &gt; &gt;&gt; +typedef HashMap&lt;WKSecurityOriginRef, RefPtr&lt;Ewk_Security_Origin&gt; &gt; StorageOriginsMap;
&gt; &gt; &gt; 
&gt; &gt; &gt; This typedef can be defined inside the class I believe.
&gt; &gt; 
&gt; &gt; in private section
&gt; Done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>755822</commentid>
    <comment_count>39</comment_count>
    <who name="Jihye Kang">jye.kang</who>
    <bug_when>2012-10-31 20:10:22 -0700</bug_when>
    <thetext>(In reply to comment #33)
&gt; (In reply to comment #32)
&gt; &gt; (From update of attachment 170607 [details] [details])
&gt; &gt; View in context: https://bugs.webkit.org/attachment.cgi?id=170607&amp;action=review
&gt; &gt; 
&gt; &gt; &gt; Source/WebKit2/UIProcess/API/efl/ewk_storage_manager.cpp:61
&gt; &gt; &gt; +        originList = eina_list_append(originList, ewk_security_origin_ref(origin.get()));
&gt; &gt; 
&gt; &gt; Would avoid manual ref&apos;ing here by using leakRef()
&gt; Will be done on next patch! I missed it as I commented above.

Done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>755840</commentid>
    <comment_count>40</comment_count>
      <attachid>171761</attachid>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2012-10-31 20:46:59 -0700</bug_when>
    <thetext>Comment on attachment 171761
Patch

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

&gt; Source/WebKit2/UIProcess/API/efl/tests/test_ewk2_storage_manager.cpp:35
&gt; +static void getStorageOriginsCallback(Eina_List *origins, Ewk_Error *error, void *user_data)

Wrong * place.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>755866</commentid>
    <comment_count>41</comment_count>
      <attachid>171768</attachid>
    <who name="Jihye Kang">jye.kang</who>
    <bug_when>2012-10-31 21:53:10 -0700</bug_when>
    <thetext>Created attachment 171768
patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>755873</commentid>
    <comment_count>42</comment_count>
      <attachid>171768</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-10-31 22:20:00 -0700</bug_when>
    <thetext>Comment on attachment 171768
patch for landing

Clearing flags on attachment: 171768

Committed r133126: &lt;http://trac.webkit.org/changeset/133126&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>755874</commentid>
    <comment_count>43</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-10-31 22:20:07 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>755876</commentid>
    <comment_count>44</comment_count>
    <who name="Jihye Kang">jye.kang</who>
    <bug_when>2012-10-31 22:20:56 -0700</bug_when>
    <thetext>*** Bug 99292 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>755878</commentid>
    <comment_count>45</comment_count>
    <who name="Jihye Kang">jye.kang</who>
    <bug_when>2012-10-31 22:30:01 -0700</bug_when>
    <thetext>*** Bug 93934 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>755970</commentid>
    <comment_count>46</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-11-01 00:59:27 -0700</bug_when>
    <thetext>Re-opened since this is blocked by bug 100925</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>756817</commentid>
    <comment_count>47</comment_count>
      <attachid>171970</attachid>
    <who name="Jihye Kang">jye.kang</who>
    <bug_when>2012-11-01 19:02:04 -0700</bug_when>
    <thetext>Created attachment 171970
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>756880</commentid>
    <comment_count>48</comment_count>
      <attachid>171970</attachid>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2012-11-01 21:51:05 -0700</bug_when>
    <thetext>Comment on attachment 171970
Patch

There is no API test fail on my debug build.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>756986</commentid>
    <comment_count>49</comment_count>
      <attachid>171970</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-11-02 02:06:12 -0700</bug_when>
    <thetext>Comment on attachment 171970
Patch

Clearing flags on attachment: 171970

Committed r133274: &lt;http://trac.webkit.org/changeset/133274&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>756987</commentid>
    <comment_count>50</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-11-02 02:06:21 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>157157</attachid>
            <date>2012-08-08 02:08:11 -0700</date>
            <delta_ts>2012-10-14 23:09:56 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-92827-20120808180752.patch</filename>
            <type>text/plain</type>
            <size>8807</size>
            <attacher name="Jihye Kang">jye.kang</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTI0Mjg3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggNTgyMmQ3MWYyM2M0MDYx
YTMwZGI5NjBhNjI1OTM2ZmM2YTFhZmJlMy4uMmIzNjg2Yzc1N2MxYzRlODIxOWVkYzQ3OTIyZmIx
YWEwODBlMzZjMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMxIEBACisyMDEyLTA4LTA3ICBKaWh5
ZSBLYW5nICA8anllLmthbmdAc2Ftc3VuZy5jb20+CisKKyAgICAgICAgW0VGTF1bV0syXSBBZGQg
ZXdrX3NlY3VyaXR5X29yaWdpbgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9OTI4MjcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICBBZGQgZXdrX3NlY3VyaXR5X29yaWdpbiBBUElzIHRvIGdldCBzZWN1cml0eSBv
cmlnaW4uCisgICAgICAgIFRoaXMgbmV3IEFQSSB3aWxsIGFsbG93IHRvIHBhc3Mgc2VjdXJpdHkg
b3JpZ2lucyBvZiBXZWJEYXRhYmFzZSwgQXBwQ2FjaGUgYW5kIExvY2FsU3Ryb2dhZ2UuCisKKyAg
ICAgICAgKiBVSVByb2Nlc3MvQVBJL2VmbC9FV2ViS2l0Mi5oOgorICAgICAgICAqIFVJUHJvY2Vz
cy9BUEkvZWZsL2V3a19zZWN1cml0eV9vcmlnaW4uY3BwOiBBZGRlZC4KKyAgICAgICAgKF9Fd2tf
U2VjdXJpdHlfT3JpZ2luKToKKyAgICAgICAgVGhlIHN0cnVjdHVyZSB0byBrZWVwIHNlY3VyaXR5
IG9yaWdpbiBpbmZvcm1hdGlvbiBmb3IgZWZsLgorCisgICAgICAgIChjcmVhdGVTZWN1cml0eU9y
aWdpbik6CisgICAgICAgIChkZWxldGVTZWN1cml0eU9yaWdpbik6CisgICAgICAgIEludGVybmFs
IGZ1bmN0aW9uIGZvciBjcmVhdGluZyBhbmQgZGVsZXRpbmcgZXdrX3NlY3VyaXR5X29yaWdpbi4K
KyAgICAgICAgRXdrX1NlY3VyaXR5X09yaWdpbiBpcyBjcmVhdGVkIGludGVybmFsbHkuCisKKyAg
ICAgICAgKGV3a19zZWN1cml0eV9vcmlnaW5faG9zdF9nZXQpOgorICAgICAgICAoZXdrX3NlY3Vy
aXR5X29yaWdpbl9wcm90b2NvbF9nZXQpOgorICAgICAgICAoZXdrX3NlY3VyaXR5X29yaWdpbl9w
b3J0X2dldCk6CisgICAgICAgIEdldHRlciBmdW5jdGlvbiBvZiBld2tfc2VjdXJpdHlfb3JpZ2lu
IHRvIHVzZSBzZWN1cml0eSBvcmlnaW4gZGF0YS4KKworICAgICAgICAqIFVJUHJvY2Vzcy9BUEkv
ZWZsL2V3a19zZWN1cml0eV9vcmlnaW4uaDogQWRkZWQuCisgICAgICAgICogVUlQcm9jZXNzL0FQ
SS9lZmwvZXdrX3NlY3VyaXR5X29yaWdpbl9wcml2YXRlLmg6IEFkZGVkLgorCiAyMDEyLTA3LTMx
ICBBbmRlcnMgQ2FybHNzb24gIDxhbmRlcnNjYUBhcHBsZS5jb20+CiAKICAgICAgICAgUHJlZmVy
IHRoZSBPcmFjbGUgSmF2YSBwbHVnLWluIG92ZXIgdGhlIEFwcGxlIEphdmEgcGx1Zy1pbgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvRVdlYktpdDIuaCBiL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL0VXZWJLaXQyLmgKaW5kZXggOWEwNTJkYTRi
N2QyZDIwOTdjMjNjZTUyOTNhYTk4YTc0NTUxZWVhYi4uZGFmZDQ0MzdjYmJkY2JkMjM3MzM0YzE0
ZmUyNDM5NWE1YjQzY2E3NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9lZmwvRVdlYktpdDIuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9F
V2ViS2l0Mi5oCkBAIC0zNiw2ICszNiw3IEBACiAjaW5jbHVkZSAiZXdrX2ludGVudF9zZXJ2aWNl
LmgiCiAjaW5jbHVkZSAiZXdrX21haW4uaCIKICNpbmNsdWRlICJld2tfbmF2aWdhdGlvbl9wb2xp
Y3lfZGVjaXNpb24uaCIKKyNpbmNsdWRlICJld2tfc2VjdXJpdHlfb3JpZ2luLmgiCiAjaW5jbHVk
ZSAiZXdrX3VybF9yZXF1ZXN0LmgiCiAjaW5jbHVkZSAiZXdrX3VybF9yZXNwb25zZS5oIgogI2lu
Y2x1ZGUgImV3a191cmxfc2NoZW1lX3JlcXVlc3QuaCIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19zZWN1cml0eV9vcmlnaW4uY3BwIGIvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3NlY3VyaXR5X29yaWdpbi5jcHAKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uZjM2MWU5YzZkOWY1OTUzYTExZjUyMGQ1NjkxY2IxNGNkYWVlYzQ1MQotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19zZWN1cml0eV9vcmln
aW4uY3BwCkBAIC0wLDAgKzEsNzMgQEAKKy8qCisgICBDb3B5cmlnaHQgKEMpIDIwMTIgU2Ftc3Vu
ZyBFbGVjdHJvbmljcworCisgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICAgTGljZW5zZSBhcyBwdWJsaXNo
ZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICAgdmVyc2lvbiAy
IG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgor
CisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2ls
bCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4g
dGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZl
IHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZQorICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIu
ICBJZiBub3QsIHdyaXRlIHRvCisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5j
LiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAgICBCb3N0b24sIE1BIDAyMTEw
LTEzMDEsIFVTQS4KKyovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJld2tfc2Vj
dXJpdHlfb3JpZ2luLmgiCisKKyNpbmNsdWRlICJXS0FQSUNhc3QuaCIKKyNpbmNsdWRlICJXZWJT
ZWN1cml0eU9yaWdpbi5oIgorI2luY2x1ZGUgImV3a192aWV3X3ByaXZhdGUuaCIKKyNpbmNsdWRl
IDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKK3N0cnVjdCBfRXdrX1NlY3VyaXR5X09yaWdpbiB7Cisg
ICAgY29uc3QgY2hhciogaG9zdDsKKyAgICBjb25zdCBjaGFyKiBwcm90b2NvbDsKKyAgICB1aW50
MzJfdCBwb3J0OworfTsKKwordXNpbmcgbmFtZXNwYWNlIFdlYktpdDsKKworRXdrX1NlY3VyaXR5
X09yaWdpbiogY3JlYXRlU2VjdXJpdHlPcmlnaW4oV0tTZWN1cml0eU9yaWdpblJlZiBzZWN1cml0
eU9yaWdpbikKK3sKKyAgICBFd2tfU2VjdXJpdHlfT3JpZ2luKiBvcmlnaW4gPSBuZXcgRXdrX1Nl
Y3VyaXR5X09yaWdpbigpOworCisgICAgb3JpZ2luLT5ob3N0ID0gZWluYV9zdHJpbmdzaGFyZV9h
ZGQodG9JbXBsKHNlY3VyaXR5T3JpZ2luKS0+aG9zdCgpLnV0ZjgoKS5kYXRhKCkpOworICAgIG9y
aWdpbi0+cHJvdG9jb2wgPSBlaW5hX3N0cmluZ3NoYXJlX2FkZCh0b0ltcGwoc2VjdXJpdHlPcmln
aW4pLT5wcm90b2NvbCgpLnV0ZjgoKS5kYXRhKCkpOworICAgIG9yaWdpbi0+cG9ydCA9IHRvSW1w
bChzZWN1cml0eU9yaWdpbiktPnBvcnQoKTsKKworICAgIHJldHVybiBvcmlnaW47Cit9CisKK3Zv
aWQgZGVsZXRlU2VjdXJpdHlPcmlnaW4oRXdrX1NlY3VyaXR5X09yaWdpbiogb3JpZ2luKQorewor
ICAgIGVpbmFfc3RyaW5nc2hhcmVfZGVsKG9yaWdpbi0+aG9zdCk7CisgICAgZWluYV9zdHJpbmdz
aGFyZV9kZWwob3JpZ2luLT5wcm90b2NvbCk7CisgICAgZGVsZXRlIG9yaWdpbjsKK30KKworY29u
c3QgY2hhciogZXdrX3NlY3VyaXR5X29yaWdpbl9ob3N0X2dldChjb25zdCBFd2tfU2VjdXJpdHlf
T3JpZ2luKiBvcmlnaW4pCit7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKG9y
aWdpbiwgMCk7CisKKyAgICByZXR1cm4gb3JpZ2luLT5ob3N0OworfQorCitjb25zdCBjaGFyKiBl
d2tfc2VjdXJpdHlfb3JpZ2luX3Byb3RvY29sX2dldChjb25zdCBFd2tfU2VjdXJpdHlfT3JpZ2lu
KiBvcmlnaW4pCit7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKG9yaWdpbiwg
MCk7CisKKyAgICByZXR1cm4gb3JpZ2luLT5wcm90b2NvbDsKK30KKwordWludDMyX3QgZXdrX3Nl
Y3VyaXR5X29yaWdpbl9wb3J0X2dldChjb25zdCBFd2tfU2VjdXJpdHlfT3JpZ2luKiBvcmlnaW4p
Cit7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKG9yaWdpbiwgMCk7CisKKyAg
ICByZXR1cm4gb3JpZ2luLT5wb3J0OworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9lZmwvZXdrX3NlY3VyaXR5X29yaWdpbi5oIGIvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9lZmwvZXdrX3NlY3VyaXR5X29yaWdpbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjljNDU4MjA2
YzcwNGUzNzMxM2Y5YmEzZGJiN2M2N2Y1YjQ2MTMzODEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfc2VjdXJpdHlfb3JpZ2luLmgKQEAgLTAs
MCArMSw3NyBAQAorLyoKKyAgIENvcHlyaWdodCAoQykgMjAxMiBTYW1zdW5nIEVsZWN0cm9uaWNz
CisgICBDb3B5cmlnaHQgKEMpIDIwMTIgSW50ZWwgQ29ycG9yYXRpb24KKworICAgIFRoaXMgbGli
cmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAg
ICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYworICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb247IGVpdGhlcgorICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIg
b3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmli
dXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VU
IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAg
TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2Vl
IHRoZSBHTlUKKyAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0
YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFy
eTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICAgIHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGgg
Rmxvb3IsCisgICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisqLworCisvKioKKyAqIEBm
aWxlICAgIGV3a19zZWN1cml0eV9vcmlnaW4uaAorICogQGJyaWVmICAgU2VjdXJpdHkgT3JpZ2lu
IEFQSS4KKyAqCisgKiBTZWN1cml0eSBPcmlnaW4gaXMgdGhlIG1lY2hhbmlzbSB0aGF0IGRlZmlu
ZXMgdGhlIGFjY2VzcyBsaW1pdHMgb2YgYSB3ZWJzaXRlLgorICogQmFzZWQgb24gaW5mb3JtYXRp
b24gc3VjaCBhcyBkb21haW4sIHByb3RvY29sIGFuZCBwb3J0LCB5b3UgY2FuIGdyYW50IG9yIG5v
dAorICogYXV0aG9yaXphdGlvbiBmb3IgYWNjZXNzaW5nIGRhdGEgYW5kIHBlcmZvcm1pbmcgY2Vy
dGFpbiB0YXNrcy4KKyAqLworCisjaWZuZGVmIGV3a19zZWN1cml0eV9vcmlnaW5faAorI2RlZmlu
ZSBld2tfc2VjdXJpdHlfb3JpZ2luX2gKKworI2luY2x1ZGUgPEVpbmEuaD4KKworI2lmZGVmIF9f
Y3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCit0eXBlZGVmIHN0cnVjdCBfRXdrX1Nl
Y3VyaXR5X09yaWdpbiBFd2tfU2VjdXJpdHlfT3JpZ2luOworCisvKioKKyAqIFJldHVybnMgdGhl
IGhvc3Qgb2YgdGhlIHNlY3VyaXR5IG9yaWdpbi4KKyAqCisgKiBJdCByZXR1cm5zIGEgaW50ZXJu
YWwgc3RyaW5nIHdoaWNoIHNvdWxkIG5vdCBiZSBtb2RpZmllZC4KKyAqIFRoZSBzdHJpbmcgaXMg
Z3VhcmFudGVlZCB0byBiZSBzdHJpbmdzaGFyZWQuCisgKgorICogQHBhcmFtIG8gc2VjdXJpdHkg
b3JpZ2luIG9iamVjdAorICoKKyAqIEByZXR1cm4gdGhlIGhvc3QgZG9tYWluIG9yIEBjIE5VTEwg
aWYgdGhlcmUgaXMgbm90IGEgaG9zdCBzY2hlbWUKKyAqLworRUFQSSBjb25zdCBjaGFyICpld2tf
c2VjdXJpdHlfb3JpZ2luX2hvc3RfZ2V0KGNvbnN0IEV3a19TZWN1cml0eV9PcmlnaW4qIG8pOwor
CisvKioKKyAqIFJldHVybnMgdGhlIHBvcnQgb2YgdGhlIHNlY3VyaXR5IG9yaWdpbi4KKyAqCisg
KiBAcGFyYW0gbyBzZWN1cml0eSBvcmlnaW4gb2JqZWN0CisgKgorICogQHJldHVybiB0aGUgcG9y
dCBudW1iZXIgb3IgQGMgMCBpZiB0aGVyZSBpcyBub3QgYSBwcm9wZXIgc2VjdXJpdHkgb3JpZ2lu
IHNjaGVtZQorICovCitFQVBJIHVpbnQzMl90IGV3a19zZWN1cml0eV9vcmlnaW5fcG9ydF9nZXQo
Y29uc3QgRXdrX1NlY3VyaXR5X09yaWdpbiogbyk7CisKKy8qKgorICogUmV0dXJucyB0aGUgcHJv
dG9jb2wgb2YgdGhlIHNlY3VyaXR5IG9yaWdpbi4KKyAqCisgKiBJdCByZXR1cm5zIGEgaW50ZXJu
YWwgc3RyaW5nIHdoaWNoIHNob3VsZCBub3QgYmUgbW9kaWZpZWQuCisgKiBUaGUgc3RyaW5nIGlz
IGd1YXJhbnRlZWQgdG8gc3RyaW5nc2hhcmVkLgorICoKKyAqIEBwYXJhbSBvIHNlY3VyaXR5IG9y
aWdpbiBvYmplY3QKKyAqCisgKiBAcmV0dXJuIHRoZSBwcm90b2NvbCBzY2hlbWUgb3Igb3IgQGMg
TlVMTCBpZiB0aGVyZSBpcyBub3QgYSBwcm90b2NvbCBzY2hlbWUKKyAqLworRUFQSSBjb25zdCBj
aGFyICpld2tfc2VjdXJpdHlfb3JpZ2luX3Byb3RvY29sX2dldChjb25zdCBFd2tfU2VjdXJpdHlf
T3JpZ2luKiBvKTsKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKyNlbmRpZiAvLyBl
d2tfc2VjdXJpdHlfb3JpZ2luX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvZWZsL2V3a19zZWN1cml0eV9vcmlnaW5fcHJpdmF0ZS5oIGIvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9lZmwvZXdrX3NlY3VyaXR5X29yaWdpbl9wcml2YXRlLmgKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uMGE4M2Y2NmZjNjAwMGJhMjZkOThmOWI0ZWE1ZDUzMGNhYjNmZWFjNgotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19zZWN1cml0eV9vcmln
aW5fcHJpdmF0ZS5oCkBAIC0wLDAgKzEsMjggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIg
U2Ftc3VuZyBFbGVjdHJvbmljcworICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1
Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNp
b24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lv
bi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp
dCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl
dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBo
YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJ
Qi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIElu
Yy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEw
LTEzMDEsIFVTQS4KKyAqCisgKi8KKworI2lmbmRlZiBld2tfc2VjdXJpdHlfb3JpZ2luX3ByaXZh
dGVfaAorI2RlZmluZSBld2tfc2VjdXJpdHlfb3JpZ2luX3ByaXZhdGVfaAorCisjaW5jbHVkZSA8
V2ViS2l0Mi9XS0Jhc2UuaD4KKworRXdrX1NlY3VyaXR5X09yaWdpbiogY3JlYXRlU2VjdXJpdHlP
cmlnaW4oV0tTZWN1cml0eU9yaWdpblJlZiBzZWN1cml0eU9yaWdpbik7CisKKyNlbmRpZiAvLyBl
d2tfc2VjdXJpdHlfb3JpZ2luX3ByaXZhdGVfaAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>168628</attachid>
            <date>2012-10-14 23:10:03 -0700</date>
            <delta_ts>2012-10-25 00:47:17 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-92827-20121015150857.patch</filename>
            <type>text/plain</type>
            <size>13364</size>
            <attacher name="Jihye Kang">jye.kang</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTMxMjgzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggZjA5ODljM2IzZjEwNDc0
ZmNhN2I0OTZjYTc4MjE3NGRkMjMyNzNjYy4uZjQ5ZWQ4MzY1NmMxNmY0MGE1Mzg3YjgyOTk2ZjU1
ZTZkOGI1Mzg4NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI5IEBACisyMDEyLTEwLTE0ICBKaWh5
ZSBLYW5nICA8anllLmthbmdAc2Ftc3VuZy5jb20+CisKKyAgICAgICAgW0VGTF1bV0syXSBBZGQg
ZXdrX3NlY3VyaXR5X29yaWdpbgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9OTI4MjcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICBBZGQgZXdrX3NlY3VyaXR5X29yaWdpbiBBUElzIHRvIGdldCBzZWN1cml0eSBv
cmlnaW4uCisgICAgICAgIFRoZXNlIEFQSXMgd2lsbCBiZSB1c2VkIHRvIGdldCBob3N0LCBwcm90
b2NvbCBhbmQgcG9ydCBvZiBzZWN1cml0eSBvcmlnaW4uCisKKyAgICAgICAgKiBQbGF0Zm9ybUVm
bC5jbWFrZToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2VmbC9FV2ViS2l0Mi5oOgorICAgICAg
ICAqIFVJUHJvY2Vzcy9BUEkvZWZsL2V3a19zZWN1cml0eV9vcmlnaW4uY3BwOiBBZGRlZC4KKyAg
ICAgICAgKF9Fd2tfU2VjdXJpdHlfT3JpZ2luKToKKyAgICAgICAgKF9Fd2tfU2VjdXJpdHlfT3Jp
Z2luOjpfRXdrX1NlY3VyaXR5X09yaWdpbik6CisgICAgICAgIChfRXdrX1NlY3VyaXR5X09yaWdp
bjo6fl9Fd2tfU2VjdXJpdHlfT3JpZ2luKToKKyAgICAgICAgKGV3a19zZWN1cml0eV9vcmlnaW5f
bmV3KToKKyAgICAgICAgKGV3a19zZWN1cml0eV9vcmlnaW5fcmVmKToKKyAgICAgICAgKGV3a19z
ZWN1cml0eV9vcmlnaW5fdW5yZWYpOgorICAgICAgICAoZXdrX3NlY3VyaXR5X29yaWdpbl9ob3N0
X2dldCk6CisgICAgICAgIChld2tfc2VjdXJpdHlfb3JpZ2luX3Byb3RvY29sX2dldCk6CisgICAg
ICAgIChld2tfc2VjdXJpdHlfb3JpZ2luX3BvcnRfZ2V0KToKKyAgICAgICAgKGV3a19zZWN1cml0
eV9vcmlnaW5fbGlzdF9mcmVlKToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2VmbC9ld2tfc2Vj
dXJpdHlfb3JpZ2luLmg6IEFkZGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZWZsL2V3a19z
ZWN1cml0eV9vcmlnaW5fcHJpdmF0ZS5oOiBBZGRlZC4KKwogMjAxMi0xMC0xNCAgQW5kZXJzIENh
cmxzc29uICA8YW5kZXJzY2FAYXBwbGUuY29tPgogCiAgICAgICAgIFJlLWxhbmQgb2YgIldlYkNv
bnRleHQgc2hvdWxkIGJlIGEgTWVzc2FnZVJlY2VpdmVyIgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdDIvUGxhdGZvcm1FZmwuY21ha2UgYi9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybUVmbC5jbWFr
ZQppbmRleCBhMTJmNDRhYjJmMmJiN2QzZTE5MDViNjYwMGMwMTNjNjc4NDFmZDc2Li5mMDU5MTlj
Y2Y4NTYyOTc0MTBmZTc3ZDI5ZjU1NTk5NDAxZjMxZjFkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0Mi9QbGF0Zm9ybUVmbC5jbWFrZQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybUVmbC5j
bWFrZQpAQCAtNjMsNiArNjMsNyBAQCBMSVNUKEFQUEVORCBXZWJLaXQyX1NPVVJDRVMKICAgICBV
SVByb2Nlc3MvQVBJL2VmbC9ld2tfbmF2aWdhdGlvbl9wb2xpY3lfZGVjaXNpb24uY3BwCiAgICAg
VUlQcm9jZXNzL0FQSS9lZmwvZXdrX3BvcHVwX21lbnVfaXRlbS5jcHAKICAgICBVSVByb2Nlc3Mv
QVBJL2VmbC9ld2tfcmVzb3VyY2UuY3BwCisgICAgVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3NlY3Vy
aXR5X29yaWdpbi5jcHAKICAgICBVSVByb2Nlc3MvQVBJL2VmbC9ld2tfc2V0dGluZ3MuY3BwCiAg
ICAgVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3VybF9yZXF1ZXN0LmNwcAogICAgIFVJUHJvY2Vzcy9B
UEkvZWZsL2V3a191cmxfcmVzcG9uc2UuY3BwCkBAIC0yMzksNiArMjQwLDcgQEAgU0VUIChFV2Vi
S2l0Ml9IRUFERVJTCiAgICAgIiR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS9VSVByb2Nlc3Mv
QVBJL2VmbC9ld2tfbmF2aWdhdGlvbl9wb2xpY3lfZGVjaXNpb24uaCIKICAgICAiJHtDTUFLRV9D
VVJSRU5UX1NPVVJDRV9ESVJ9L1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19wb3B1cF9tZW51X2l0ZW0u
aCIKICAgICAiJHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9L1VJUHJvY2Vzcy9BUEkvZWZsL2V3
a19yZXNvdXJjZS5oIgorICAgICIke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0vVUlQcm9jZXNz
L0FQSS9lZmwvZXdrX3NlY3VyaXR5X29yaWdpbi5oIgogICAgICIke0NNQUtFX0NVUlJFTlRfU09V
UkNFX0RJUn0vVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3NldHRpbmdzLmgiCiAgICAgIiR7Q01BS0Vf
Q1VSUkVOVF9TT1VSQ0VfRElSfS9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfdG91Y2guaCIKICAgICAi
JHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9L1VJUHJvY2Vzcy9BUEkvZWZsL2V3a191cmxfcmVx
dWVzdC5oIgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvRVdl
YktpdDIuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL0VXZWJLaXQyLmgKaW5k
ZXggMDBkZDgxMWE0OGZmYjFkOTY1OTk2YzRkZjg1ZTI3MGQ2ZjE2NjIxMS4uNDlmZjUyZTZkYzZj
N2RlZGU2ODEzZDEwYjNjYjFhMzg0MGNlNzVjMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9lZmwvRVdlYktpdDIuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL2VmbC9FV2ViS2l0Mi5oCkBAIC00Miw2ICs0Miw3IEBACiAjaW5jbHVkZSAiZXdrX25h
dmlnYXRpb25fcG9saWN5X2RlY2lzaW9uLmgiCiAjaW5jbHVkZSAiZXdrX3BvcHVwX21lbnVfaXRl
bS5oIgogI2luY2x1ZGUgImV3a19yZXNvdXJjZS5oIgorI2luY2x1ZGUgImV3a19zZWN1cml0eV9v
cmlnaW4uaCIKICNpbmNsdWRlICJld2tfc2V0dGluZ3MuaCIKICNpbmNsdWRlICJld2tfdG91Y2gu
aCIKICNpbmNsdWRlICJld2tfdXJsX3JlcXVlc3QuaCIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19zZWN1cml0eV9vcmlnaW4uY3BwIGIvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3NlY3VyaXR5X29yaWdpbi5jcHAKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uOWQ4MzM4YTNlZmZhODAyMzU4YTZkMmY5MjFlNGQ5NGFkMzJlMGIyZgotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19zZWN1cml0eV9vcmln
aW4uY3BwCkBAIC0wLDAgKzEsMTE0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIFNhbXN1
bmcgRWxlY3Ryb25pY3MuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRS
SUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhP
TERFUiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HCisgKiBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJld2tfc2VjdXJpdHlfb3JpZ2luLmgi
CisKKyNpbmNsdWRlICJXS0FQSUNhc3QuaCIKKyNpbmNsdWRlICJXS0VpbmFTaGFyZWRTdHJpbmcu
aCIKKyNpbmNsdWRlICJXS1JldGFpblB0ci5oIgorI2luY2x1ZGUgIldLU2VjdXJpdHlPcmlnaW4u
aCIKKyNpbmNsdWRlICJld2tfdmlld19wcml2YXRlLmgiCisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0
cmluZy5oPgorCit1c2luZyBuYW1lc3BhY2UgV2ViS2l0OworCitzdHJ1Y3QgX0V3a19TZWN1cml0
eV9PcmlnaW4geworICAgIHVuc2lnbmVkIF9fcmVmOyAvKio8IHRoZSByZWZlcmVuY2UgY291bnQg
b2YgdGhlIG9iamVjdCAqLworICAgIFdLUmV0YWluUHRyPFdLU2VjdXJpdHlPcmlnaW5SZWY+IHNl
Y3VyaXR5T3JpZ2luOworICAgIFdLRWluYVNoYXJlZFN0cmluZyBob3N0OworICAgIFdLRWluYVNo
YXJlZFN0cmluZyBwcm90b2NvbDsKKworICAgIF9Fd2tfU2VjdXJpdHlfT3JpZ2luKFdLU2VjdXJp
dHlPcmlnaW5SZWYgc2VjdXJpdHlPcmlnaW5SZWYpCisgICAgICAgIDogX19yZWYoMSkKKyAgICAg
ICAgLCBzZWN1cml0eU9yaWdpbihzZWN1cml0eU9yaWdpblJlZikKKyAgICAgICAgLCBob3N0KEFk
b3B0V0ssIFdLU2VjdXJpdHlPcmlnaW5Db3B5SG9zdChzZWN1cml0eU9yaWdpblJlZikpCisgICAg
ICAgICwgcHJvdG9jb2woQWRvcHRXSywgV0tTZWN1cml0eU9yaWdpbkNvcHlQcm90b2NvbChzZWN1
cml0eU9yaWdpblJlZikpCisgICAgeyB9CisKKyAgICB+X0V3a19TZWN1cml0eV9PcmlnaW4oKQor
ICAgIHsKKyAgICAgICAgQVNTRVJUKCFfX3JlZik7CisgICAgfQorfTsKKworLyoqCisgKiBAaW50
ZXJuYWwKKyAqIENyZWF0ZXMgYSBFd2tfU2VjdXJpdHlfT3JpZ2luIHdpdGggV0tTZWN1cml0eU9y
aWdpblJlZi4KKyAqLworRXdrX1NlY3VyaXR5X09yaWdpbiogZXdrX3NlY3VyaXR5X29yaWdpbl9u
ZXcoV0tTZWN1cml0eU9yaWdpblJlZiBzZWN1cml0eU9yaWdpbikKK3sKKyAgICByZXR1cm4gbmV3
IEV3a19TZWN1cml0eV9PcmlnaW4oc2VjdXJpdHlPcmlnaW4pOworfQorCitFd2tfU2VjdXJpdHlf
T3JpZ2luKiBld2tfc2VjdXJpdHlfb3JpZ2luX3JlZihFd2tfU2VjdXJpdHlfT3JpZ2luKiBvcmln
aW4pCit7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKG9yaWdpbiwgMCk7CisK
KyAgICArK29yaWdpbi0+X19yZWY7CisgICAgcmV0dXJuIG9yaWdpbjsKK30KKwordm9pZCBld2tf
c2VjdXJpdHlfb3JpZ2luX3VucmVmKEV3a19TZWN1cml0eV9PcmlnaW4qIG9yaWdpbikKK3sKKyAg
ICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTihvcmlnaW4pOworCisgICAgaWYgKC0tb3JpZ2lu
LT5fX3JlZikKKyAgICAgICAgcmV0dXJuOworCisgICAgZGVsZXRlIG9yaWdpbjsKK30KKworY29u
c3QgY2hhciogZXdrX3NlY3VyaXR5X29yaWdpbl9ob3N0X2dldChjb25zdCBFd2tfU2VjdXJpdHlf
T3JpZ2luKiBvcmlnaW4pCit7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKG9y
aWdpbiwgMCk7CisKKyAgICByZXR1cm4gb3JpZ2luLT5ob3N0OworfQorCitjb25zdCBjaGFyKiBl
d2tfc2VjdXJpdHlfb3JpZ2luX3Byb3RvY29sX2dldChjb25zdCBFd2tfU2VjdXJpdHlfT3JpZ2lu
KiBvcmlnaW4pCit7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKG9yaWdpbiwg
MCk7CisKKyAgICByZXR1cm4gb3JpZ2luLT5wcm90b2NvbDsKK30KKwordWludDMyX3QgZXdrX3Nl
Y3VyaXR5X29yaWdpbl9wb3J0X2dldChjb25zdCBFd2tfU2VjdXJpdHlfT3JpZ2luKiBvcmlnaW4p
Cit7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKG9yaWdpbiwgMCk7CisKKyAg
ICByZXR1cm4gV0tTZWN1cml0eU9yaWdpbkdldFBvcnQob3JpZ2luLT5zZWN1cml0eU9yaWdpbi5n
ZXQoKSk7Cit9CisKK0VpbmFfQm9vbCBld2tfc2VjdXJpdHlfb3JpZ2luX2xpc3RfZnJlZShFaW5h
X0xpc3QqIG9yaWdpbkxpc3QpCit7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFM
KG9yaWdpbkxpc3QsIGZhbHNlKTsKKworICAgIHZvaWQqIGN1cnJlbnRPcmlnaW47CisgICAgRUlO
QV9MSVNUX0ZSRUUob3JpZ2luTGlzdCwgY3VycmVudE9yaWdpbikKKyAgICAgICAgZXdrX3NlY3Vy
aXR5X29yaWdpbl91bnJlZihzdGF0aWNfY2FzdDxFd2tfU2VjdXJpdHlfT3JpZ2luKj4oY3VycmVu
dE9yaWdpbikpOworCisgICAgcmV0dXJuIHRydWU7Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfc2VjdXJpdHlfb3JpZ2luLmggYi9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfc2VjdXJpdHlfb3JpZ2luLmgKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
MDBiZmYzYjRiNDBiYjgyODZlNDJiYjE5YThjYmE0ZjI1YjU4ZWNiNwotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19zZWN1cml0eV9vcmlnaW4u
aApAQCAtMCwwICsxLDExMSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBJbnRlbCBDb3Jw
b3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMiBTYW1z
dW5nIEVsZWN0cm9uaWNzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05U
UklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBI
T0xERVIgT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORworICogTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisvKioKKyAqIEBmaWxlICAgIGV3a19zZWN1cml0eV9vcmlnaW4uaAorICogQGJyaWVmICAg
U2VjdXJpdHkgT3JpZ2luIEFQSS4KKyAqCisgKiBTZWN1cml0eSBPcmlnaW4gaXMgdGhlIG1lY2hh
bmlzbSB0aGF0IGRlZmluZXMgdGhlIGFjY2VzcyBsaW1pdHMgb2YgYSB3ZWJzaXRlLgorICogQmFz
ZWQgb24gaW5mb3JtYXRpb24gc3VjaCBhcyBkb21haW4sIHByb3RvY29sIGFuZCBwb3J0LCB5b3Ug
Y2FuIG9yIGNhbm5vdCBncmFudAorICogYXV0aG9yaXphdGlvbiBmb3IgYWNjZXNzaW5nIGRhdGEg
YW5kIHBlcmZvcm1pbmcgY2VydGFpbiB0YXNrcy4KKyAqLworCisjaWZuZGVmIGV3a19zZWN1cml0
eV9vcmlnaW5faAorI2RlZmluZSBld2tfc2VjdXJpdHlfb3JpZ2luX2gKKworI2luY2x1ZGUgPEVp
bmEuaD4KKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCisvKiog
Q3JlYXRlcyBhIHR5cGUgbmFtZSBmb3IgX0V3a19TZWN1cml0eV9PcmlnaW4uICovCit0eXBlZGVm
IHN0cnVjdCBfRXdrX1NlY3VyaXR5X09yaWdpbiBFd2tfU2VjdXJpdHlfT3JpZ2luOworCisvKioK
KyAqIEluY3JlYXNlcyB0aGUgcmVmZXJlbmNlIGNvdW50IG9mIHRoZSBnaXZlbiBvYmplY3QuCisg
KgorICogQHBhcmFtIG9yaWdpbiB0aGUgb3JpZ2luIG9iamVjdCB0byBpbmNyZWFzZSB0aGUgcmVm
ZXJlbmNlIGNvdW50CisgKgorICogQHJldHVybiBhIHBvaW50ZXIgdG8gdGhlIG9iamVjdCBvbiBz
dWNjZXNzLCBAYyBOVUxMIG90aGVyd2lzZS4KKyAqLworRUFQSSBFd2tfU2VjdXJpdHlfT3JpZ2lu
ICpld2tfc2VjdXJpdHlfb3JpZ2luX3JlZihFd2tfU2VjdXJpdHlfT3JpZ2luICpvKTsKKworLyoq
CisgKiBEZWNyZWFzZXMgdGhlIHJlZmVyZW5jZSBjb3VudCBvZiB0aGUgZ2l2ZW4gb2JqZWN0LCBw
b3NzaWJseSBmcmVlaW5nIGl0LgorICoKKyAqIFdoZW4gdGhlIHJlZmVyZW5jZSBjb3VudCByZWFj
aGVzIDAsIHRoZSBvcmlnaW4gaXMgZnJlZWQuCisgKgorICogQHBhcmFtIG9yaWdpbiB0aGUgb3Jp
Z2luIG9iamVjdCB0byBkZWNyZWFzZSB0aGUgcmVmZXJlbmNlIGNvdW50CisgKi8KK0VBUEkgdm9p
ZCBld2tfc2VjdXJpdHlfb3JpZ2luX3VucmVmKEV3a19TZWN1cml0eV9PcmlnaW4gKm8pOworCisv
KioKKyAqIFJldHVybnMgdGhlIGhvc3Qgb2YgdGhlIHNlY3VyaXR5IG9yaWdpbi4KKyAqCisgKiBJ
dCByZXR1cm5zIGEgaW50ZXJuYWwgc3RyaW5nIHdoaWNoIHNob3VsZCBub3QgYmUgbW9kaWZpZWQu
CisgKiBUaGUgc3RyaW5nIGlzIGd1YXJhbnRlZWQgdG8gYmUgc3RyaW5nc2hhcmVkLgorICoKKyAq
IEBwYXJhbSBvIHNlY3VyaXR5IG9yaWdpbiBvYmplY3QKKyAqCisgKiBAcmV0dXJuIHRoZSBob3N0
IGRvbWFpbiBvciBAYyBOVUxMIGlmIHRoZXJlIGlzIG5vdCBhIGhvc3Qgc2NoZW1lCisgKi8KK0VB
UEkgY29uc3QgY2hhciAqZXdrX3NlY3VyaXR5X29yaWdpbl9ob3N0X2dldChjb25zdCBFd2tfU2Vj
dXJpdHlfT3JpZ2luICpvKTsKKworLyoqCisgKiBSZXR1cm5zIHRoZSBwb3J0IG9mIHRoZSBzZWN1
cml0eSBvcmlnaW4uCisgKgorICogQHBhcmFtIG8gc2VjdXJpdHkgb3JpZ2luIG9iamVjdAorICoK
KyAqIEByZXR1cm4gdGhlIHBvcnQgbnVtYmVyIG9yIEBjIDAgaWYgdGhlcmUgaXMgbm90IGEgcHJv
cGVyIHNlY3VyaXR5IG9yaWdpbiBzY2hlbWUKKyAqLworRUFQSSB1aW50MzJfdCBld2tfc2VjdXJp
dHlfb3JpZ2luX3BvcnRfZ2V0KGNvbnN0IEV3a19TZWN1cml0eV9PcmlnaW4gKm8pOworCisvKioK
KyAqIFJldHVybnMgdGhlIHByb3RvY29sIG9mIHRoZSBzZWN1cml0eSBvcmlnaW4uCisgKgorICog
SXQgcmV0dXJucyBhIGludGVybmFsIHN0cmluZyB3aGljaCBzaG91bGQgbm90IGJlIG1vZGlmaWVk
LgorICogVGhlIHN0cmluZyBpcyBndWFyYW50ZWVkIHRvIGJlIHN0cmluZ3NoYXJlZC4KKyAqCisg
KiBAcGFyYW0gbyBzZWN1cml0eSBvcmlnaW4gb2JqZWN0CisgKgorICogQHJldHVybiB0aGUgcHJv
dG9jb2wgc2NoZW1lIG9yIG9yIEBjIE5VTEwgaWYgdGhlcmUgaXMgbm90IGEgcHJvdG9jb2wgc2No
ZW1lCisgKi8KK0VBUEkgY29uc3QgY2hhciAqZXdrX3NlY3VyaXR5X29yaWdpbl9wcm90b2NvbF9n
ZXQoY29uc3QgRXdrX1NlY3VyaXR5X09yaWdpbiAqbyk7CisKKy8qKgorICogRnJlZXMgbGlzdCBv
ZiBvcmlnaW5zLgorICoKKyAqIEBwYXJhbSBvcmlnaW5zIGxpc3QgdG8gYmUgZnJlZWQKKyAqCisg
KiBAcmV0dXJuIEBjIEVJTkFfVFJVRSBvbiBzdWNjZXNzLCBAYyBFSU5BX0ZBTFNFIG9uIGZhaWx1
cmUKKyAqLworRUFQSSBFaW5hX0Jvb2wgZXdrX3NlY3VyaXR5X29yaWdpbl9saXN0X2ZyZWUoRWlu
YV9MaXN0ICpvcmlnaW5zKTsKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKyNlbmRp
ZiAvLyBld2tfc2VjdXJpdHlfb3JpZ2luX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvZWZsL2V3a19zZWN1cml0eV9vcmlnaW5fcHJpdmF0ZS5oIGIvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3NlY3VyaXR5X29yaWdpbl9wcml2YXRlLmgKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uMGE4YzQzZDU1ZGFhMTY2MTkzMjk5NWNiYjdmNjQ3NGY5YzRjYzIwZgotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19zZWN1cml0
eV9vcmlnaW5fcHJpdmF0ZS5oCkBAIC0wLDAgKzEsMzUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTIgU2Ftc3VuZyBFbGVjdHJvbmljcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVS
UyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBD
T1BZUklHSFQgSE9MREVSIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcKKyAqIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUwor
ICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2lmbmRlZiBld2tfc2VjdXJpdHlfb3JpZ2luX3ByaXZhdGVfaAorI2Rl
ZmluZSBld2tfc2VjdXJpdHlfb3JpZ2luX3ByaXZhdGVfaAorCisjaW5jbHVkZSA8V2ViS2l0Mi9X
S0Jhc2UuaD4KKwordHlwZWRlZiBzdHJ1Y3QgX0V3a19TZWN1cml0eV9PcmlnaW4gRXdrX1NlY3Vy
aXR5X09yaWdpbjsKKworRXdrX1NlY3VyaXR5X09yaWdpbiogZXdrX3NlY3VyaXR5X29yaWdpbl9u
ZXcoV0tTZWN1cml0eU9yaWdpblJlZiBzZWN1cml0eU9yaWdpbik7CisKKyNlbmRpZiAvLyBld2tf
c2VjdXJpdHlfb3JpZ2luX3ByaXZhdGVfaAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>170574</attachid>
            <date>2012-10-25 00:47:23 -0700</date>
            <delta_ts>2012-10-25 04:10:13 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-92827-20121025164600.patch</filename>
            <type>text/plain</type>
            <size>33736</size>
            <attacher name="Jihye Kang">jye.kang</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTMyMzI5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggYTVmZTgzZTJjM2U0NzIx
NTE1NmY5MWMyOGNmZmJmNzY3NjQ3YTYzNC4uM2Y3OTMyZTA4YmRkNzMzMmNhM2RjZjU3ZTY4OWI4
MGU0OTQ2NjQyZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU3IEBACisyMDEyLTEwLTI0ICBKaWh5
ZSBLYW5nICA8anllLmthbmdAc2Ftc3VuZy5jb20+CisKKyAgICAgICAgW0VGTF1XSzJdIEFkZCBl
d2tfc2VjdXJpdHlfb3JpZ2luIGFuZCBld2tfc3RvcmFnZV9tYW5hZ2VyIEFQSXMKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTkyODI3CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkIGV3a19zZWN1cml0eV9v
cmlnaW4gQVBJcyB0byBnZXQgc2VjdXJpdHkgb3JpZ2luLgorICAgICAgICBUaGVzZSBBUElzIHdp
bGwgYmUgdXNlZCB0byBnZXQgaG9zdCwgcHJvdG9jb2wgYW5kIHBvcnQgb2Ygc2VjdXJpdHkKKyAg
ICAgICAgb3JpZ2luLgorICAgICAgICBBZGQgZXdrX3N0b3JhZ2VfbWFuYWdlciB0byBtYW5hZ2Ug
d2ViIHN0b3JhZ2UgYW5kCisgICAgICAgIGV3a19zdG9yYWdlX21hbmFnZXJfb3JpZ2luc19nZXQg
dG8gZ2V0IG9yaWdpbnMgbGlzdCBvZiB3ZWIgc3RvcmFnZS4KKyAgICAgICAgQWRkIFVuaXQgdGVz
dHMgZm9yIGV3a19zdG9yYWdlX21hbmFnZXIgYW5kIGV3a19zZWN1cml0eV9vcmlnaW4gQVBJcy4K
KworICAgICAgICAqIFBsYXRmb3JtRWZsLmNtYWtlOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkv
ZWZsL0VXZWJLaXQyLmg6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2NvbnRleHQu
Y3BwOgorICAgICAgICAoRXdrX0NvbnRleHQ6OnN0b3JhZ2VNYW5hZ2VyKToKKyAgICAgICAgKGV3
a19jb250ZXh0X3N0b3JhZ2VfbWFuYWdlcl9nZXQpOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkv
ZWZsL2V3a19jb250ZXh0Lmg6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2NvbnRl
eHRfcHJpdmF0ZS5oOgorICAgICAgICAoRXdrX0NvbnRleHQpOgorICAgICAgICAqIFVJUHJvY2Vz
cy9BUEkvZWZsL2V3a19zZWN1cml0eV9vcmlnaW4uY3BwOiBBZGRlZC4KKyAgICAgICAgKEV3a19T
ZWN1cml0eV9PcmlnaW46OkV3a19TZWN1cml0eV9PcmlnaW4pOgorICAgICAgICAoRXdrX1NlY3Vy
aXR5X09yaWdpbjo6aG9zdCk6CisgICAgICAgIChFd2tfU2VjdXJpdHlfT3JpZ2luOjpwcm90b2Nv
bCk6CisgICAgICAgIChFd2tfU2VjdXJpdHlfT3JpZ2luOjpwb3J0KToKKyAgICAgICAgKGV3a19z
ZWN1cml0eV9vcmlnaW5fcmVmKToKKyAgICAgICAgKGV3a19zZWN1cml0eV9vcmlnaW5fdW5yZWYp
OgorICAgICAgICAoZXdrX3NlY3VyaXR5X29yaWdpbl9ob3N0X2dldCk6CisgICAgICAgIChld2tf
c2VjdXJpdHlfb3JpZ2luX3Byb3RvY29sX2dldCk6CisgICAgICAgIChld2tfc2VjdXJpdHlfb3Jp
Z2luX3BvcnRfZ2V0KToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2VmbC9ld2tfc2VjdXJpdHlf
b3JpZ2luLmg6IEFkZGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZWZsL2V3a19zZWN1cml0
eV9vcmlnaW5fcHJpdmF0ZS5oOiBBZGRlZC4KKyAgICAgICAgKEV3a19TZWN1cml0eV9PcmlnaW4p
OgorICAgICAgICAoRXdrX1NlY3VyaXR5X09yaWdpbjo6Y3JlYXRlKToKKyAgICAgICAgKiBVSVBy
b2Nlc3MvQVBJL2VmbC9ld2tfc3RvcmFnZV9tYW5hZ2VyLmNwcDogQWRkZWQuCisgICAgICAgIChF
d2tfU3RvcmFnZV9NYW5hZ2VyOjpFd2tfU3RvcmFnZV9NYW5hZ2VyKToKKyAgICAgICAgKEV3a19T
dG9yYWdlX01hbmFnZXI6OmdldFN0b3JhZ2VPcmlnaW5zKToKKyAgICAgICAgKEV3a19TdG9yYWdl
X01hbmFnZXI6OmNyZWF0ZU9yaWdpbkxpc3QpOgorICAgICAgICAoX0V3a19TdG9yYWdlX09yaWdp
bnNfQXN5bmNfR2V0X0NvbnRleHQpOgorICAgICAgICAoX0V3a19TdG9yYWdlX09yaWdpbnNfQXN5
bmNfR2V0X0NvbnRleHQ6Ol9Fd2tfU3RvcmFnZV9PcmlnaW5zX0FzeW5jX0dldF9Db250ZXh0KToK
KyAgICAgICAgKGdldFN0b3JhZ2VPcmlnaW5zQ2FsbGJhY2spOgorICAgICAgICAoZXdrX3N0b3Jh
Z2VfbWFuYWdlcl9vcmlnaW5zX2dldCk6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9lZmwvZXdr
X3N0b3JhZ2VfbWFuYWdlci5oOiBBZGRlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2VmbC9l
d2tfc3RvcmFnZV9tYW5hZ2VyX3ByaXZhdGUuaDogQWRkZWQuCisgICAgICAgIChFd2tfU3RvcmFn
ZV9NYW5hZ2VyKToKKyAgICAgICAgKEV3a19TdG9yYWdlX01hbmFnZXI6OmNyZWF0ZSk6CisgICAg
ICAgICogVUlQcm9jZXNzL0FQSS9lZmwvdGVzdHMvdGVzdF9ld2syX2NvbnRleHQuY3BwOgorICAg
ICAgICAoVEVTVF9GKToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2VmbC90ZXN0cy90ZXN0X2V3
azJfc3RvcmFnZV9tYW5hZ2VyLmNwcDogQWRkZWQuCisgICAgICAgIChnZXRTdG9yYWdlT3JpZ2lu
c0NhbGxiYWNrKToKKyAgICAgICAgKFRFU1RfRik6CisKIDIwMTItMTAtMjQgIFlhZWwgQWhhcm9u
ICA8eWFlbC5haGFyb25AaW50ZWwuY29tPgogCiAgICAgICAgIFtFRkxdW1dLMl1bQUNdIEJsYWNr
IHNjcmVlbiBpbiB3ZWIgaW5zcGVjdG9yIHdpbmRvdyB3aXRoIEFDIG9uCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybUVmbC5jbWFrZSBiL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3Jt
RWZsLmNtYWtlCmluZGV4IGUyYjU5ZTZjOGI4ZGEwZDNjZGQ0M2I2MDY4MTlhYjkxMDBjMzE5YWYu
LmExYjkwZmVmYjQ4ODAxNzExMjhjMTczZTY4YmE4YzIxYjU4NTFkYjcgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQyL1BsYXRmb3JtRWZsLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJLaXQyL1BsYXRm
b3JtRWZsLmNtYWtlCkBAIC02Miw3ICs2Miw5IEBAIExJU1QoQVBQRU5EIFdlYktpdDJfU09VUkNF
UwogICAgIFVJUHJvY2Vzcy9BUEkvZWZsL2V3a19uYXZpZ2F0aW9uX3BvbGljeV9kZWNpc2lvbi5j
cHAKICAgICBVSVByb2Nlc3MvQVBJL2VmbC9ld2tfcG9wdXBfbWVudV9pdGVtLmNwcAogICAgIFVJ
UHJvY2Vzcy9BUEkvZWZsL2V3a19yZXNvdXJjZS5jcHAKKyAgICBVSVByb2Nlc3MvQVBJL2VmbC9l
d2tfc2VjdXJpdHlfb3JpZ2luLmNwcAogICAgIFVJUHJvY2Vzcy9BUEkvZWZsL2V3a19zZXR0aW5n
cy5jcHAKKyAgICBVSVByb2Nlc3MvQVBJL2VmbC9ld2tfc3RvcmFnZV9tYW5hZ2VyLmNwcAogICAg
IFVJUHJvY2Vzcy9BUEkvZWZsL2V3a190ZXh0X2NoZWNrZXIuY3BwCiAgICAgVUlQcm9jZXNzL0FQ
SS9lZmwvZXdrX3VybF9yZXF1ZXN0LmNwcAogICAgIFVJUHJvY2Vzcy9BUEkvZWZsL2V3a191cmxf
cmVzcG9uc2UuY3BwCkBAIC0yNDYsNyArMjQ4LDkgQEAgU0VUIChFV2ViS2l0Ml9IRUFERVJTCiAg
ICAgIiR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfbmF2
aWdhdGlvbl9wb2xpY3lfZGVjaXNpb24uaCIKICAgICAiJHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9E
SVJ9L1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19wb3B1cF9tZW51X2l0ZW0uaCIKICAgICAiJHtDTUFL
RV9DVVJSRU5UX1NPVVJDRV9ESVJ9L1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19yZXNvdXJjZS5oIgor
ICAgICIke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0vVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3Nl
Y3VyaXR5X29yaWdpbi5oIgogICAgICIke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0vVUlQcm9j
ZXNzL0FQSS9lZmwvZXdrX3NldHRpbmdzLmgiCisgICAgIiR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0Vf
RElSfS9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfc3RvcmFnZV9tYW5hZ2VyLmgiCiAgICAgIiR7Q01B
S0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfdGV4dF9jaGVja2Vy
LmgiCiAgICAgIiR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS9VSVByb2Nlc3MvQVBJL2VmbC9l
d2tfdG91Y2guaCIKICAgICAiJHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9L1VJUHJvY2Vzcy9B
UEkvZWZsL2V3a191cmxfcmVxdWVzdC5oIgpAQCAtMzQxLDYgKzM0NSw3IEBAIFNFVChFV0syVW5p
dFRlc3RzX0JJTkFSSUVTCiAgICAgdGVzdF9ld2syX3JlZnB0cl9ldmFzX29iamVjdAogICAgIHRl
c3RfZXdrMl9pbnRlbnRzCiAgICAgdGVzdF9ld2syX3NldHRpbmdzCisgICAgdGVzdF9ld2syX3N0
b3JhZ2VfbWFuYWdlcgogICAgIHRlc3RfZXdrMl90ZXh0X2NoZWNrZXIKICAgICB0ZXN0X2V3azJf
dmlldwogKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvRVdl
YktpdDIuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL0VXZWJLaXQyLmgKaW5k
ZXggMTdhZmIxMTVkZDVlMjhhNDcwMTZjZjY5YTgzYTc2MWMxNjY4OWJhNi4uZGYzYjlmNjM1Mjdh
YjEwNTFjYWY2YmU0ZGRmOTFhY2IyZmY3OWI1MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9lZmwvRVdlYktpdDIuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL2VmbC9FV2ViS2l0Mi5oCkBAIC00Myw3ICs0Myw5IEBACiAjaW5jbHVkZSAiZXdrX25h
dmlnYXRpb25fcG9saWN5X2RlY2lzaW9uLmgiCiAjaW5jbHVkZSAiZXdrX3BvcHVwX21lbnVfaXRl
bS5oIgogI2luY2x1ZGUgImV3a19yZXNvdXJjZS5oIgorI2luY2x1ZGUgImV3a19zZWN1cml0eV9v
cmlnaW4uaCIKICNpbmNsdWRlICJld2tfc2V0dGluZ3MuaCIKKyNpbmNsdWRlICJld2tfc3RvcmFn
ZV9tYW5hZ2VyLmgiCiAjaW5jbHVkZSAiZXdrX3RleHRfY2hlY2tlci5oIgogI2luY2x1ZGUgImV3
a190b3VjaC5oIgogI2luY2x1ZGUgImV3a191cmxfcmVxdWVzdC5oIgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2NvbnRleHQuY3BwIGIvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2NvbnRleHQuY3BwCmluZGV4IDVkMjUxNDMwNzdh
MzUzY2EwNzQ0MzhlZGE0OWNkMTlhMzQ5OGQ2NGMuLmEwOWNmN2QyNjAwNzA1MzQ5MDU5MWE0ZjQz
NzUxODJhY2ZiOGVmZmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
ZWZsL2V3a19jb250ZXh0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2Vm
bC9ld2tfY29udGV4dC5jcHAKQEAgLTM4LDYgKzM4LDcgQEAKICNpbmNsdWRlICJld2tfY29va2ll
X21hbmFnZXJfcHJpdmF0ZS5oIgogI2luY2x1ZGUgImV3a19mYXZpY29uX2RhdGFiYXNlX3ByaXZh
dGUuaCIKICNpbmNsdWRlICJld2tfcHJpdmF0ZS5oIgorI2luY2x1ZGUgImV3a19zdG9yYWdlX21h
bmFnZXJfcHJpdmF0ZS5oIgogI2luY2x1ZGUgImV3a191cmxfc2NoZW1lX3JlcXVlc3RfcHJpdmF0
ZS5oIgogI2luY2x1ZGUgPFdlYkNvcmUvRmlsZVN5c3RlbS5oPgogI2luY2x1ZGUgPFdlYkNvcmUv
SWNvbkRhdGFiYXNlLmg+CkBAIC0xNjQsNiArMTY1LDE0IEBAIEV3a19GYXZpY29uX0RhdGFiYXNl
KiBFd2tfQ29udGV4dDo6ZmF2aWNvbkRhdGFiYXNlKCkKICAgICByZXR1cm4gbV9mYXZpY29uRGF0
YWJhc2UuZ2V0KCk7CiB9CiAKK0V3a19TdG9yYWdlX01hbmFnZXIqIEV3a19Db250ZXh0OjpzdG9y
YWdlTWFuYWdlcigpCit7CisgICAgaWYgKCFtX3N0b3JhZ2VNYW5hZ2VyKQorICAgICAgICBtX3N0
b3JhZ2VNYW5hZ2VyID0gRXdrX1N0b3JhZ2VfTWFuYWdlcjo6Y3JlYXRlKFdLQ29udGV4dEdldEtl
eVZhbHVlU3RvcmFnZU1hbmFnZXIobV9jb250ZXh0LmdldCgpKSk7CisKKyAgICByZXR1cm4gbV9z
dG9yYWdlTWFuYWdlci5nZXQoKTsKK30KKwogUmVxdWVzdE1hbmFnZXJDbGllbnRFZmwqIEV3a19D
b250ZXh0OjpyZXF1ZXN0TWFuYWdlcigpCiB7CiAgICAgcmV0dXJuIG1fcmVxdWVzdE1hbmFnZXJD
bGllbnQuZ2V0KCk7CkBAIC0yMjEsNiArMjMwLDEzIEBAIEV3a19GYXZpY29uX0RhdGFiYXNlKiBl
d2tfY29udGV4dF9mYXZpY29uX2RhdGFiYXNlX2dldChjb25zdCBFd2tfQ29udGV4dCogZXdrQ29u
CiAgICAgcmV0dXJuIGNvbnN0X2Nhc3Q8RXdrX0NvbnRleHQqPihld2tDb250ZXh0KS0+ZmF2aWNv
bkRhdGFiYXNlKCk7CiB9CiAKK0V3a19TdG9yYWdlX01hbmFnZXIqIGV3a19jb250ZXh0X3N0b3Jh
Z2VfbWFuYWdlcl9nZXQoY29uc3QgRXdrX0NvbnRleHQqIGV3a0NvbnRleHQpCit7CisgICAgRUlO
QV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKGV3a0NvbnRleHQsIDApOworCisgICAgcmV0dXJu
IGNvbnN0X2Nhc3Q8RXdrX0NvbnRleHQqPihld2tDb250ZXh0KS0+c3RvcmFnZU1hbmFnZXIoKTsK
K30KKwogV0tDb250ZXh0UmVmIEV3a19Db250ZXh0Ojp3a0NvbnRleHQoKQogewogICAgIHJldHVy
biBtX2NvbnRleHQuZ2V0KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL2VmbC9ld2tfY29udGV4dC5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwv
ZXdrX2NvbnRleHQuaAppbmRleCBmNmI4YmI2N2QyNWQ4N2JhOWQwMzIxZDFhMzc3ZWZiODdmODFm
MzA2Li4wZDZiNzRhYWM5ODUzNDEyNTBmMTlkZDE5YThjYmYyZWU0ZWE5ZTVhIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfY29udGV4dC5oCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19jb250ZXh0LmgKQEAgLTQwLDYgKzQw
LDcgQEAKICNpbmNsdWRlICJld2tfY29va2llX21hbmFnZXIuaCIKICNpbmNsdWRlICJld2tfZmF2
aWNvbl9kYXRhYmFzZS5oIgogI2luY2x1ZGUgImV3a19uYXZpZ2F0aW9uX2RhdGEuaCIKKyNpbmNs
dWRlICJld2tfc3RvcmFnZV9tYW5hZ2VyLmgiCiAjaW5jbHVkZSAiZXdrX3VybF9zY2hlbWVfcmVx
dWVzdC5oIgogI2luY2x1ZGUgPEV2YXMuaD4KIApAQCAtMTkyLDYgKzE5MywxNSBAQCBFQVBJIEV3
a19Db29raWVfTWFuYWdlciAqZXdrX2NvbnRleHRfY29va2llX21hbmFnZXJfZ2V0KGNvbnN0IEV3
a19Db250ZXh0ICpjb250ZQogRUFQSSBFd2tfRmF2aWNvbl9EYXRhYmFzZSAqZXdrX2NvbnRleHRf
ZmF2aWNvbl9kYXRhYmFzZV9nZXQoY29uc3QgRXdrX0NvbnRleHQgKmNvbnRleHQpOwogCiAvKioK
KyAqIEdldHMgdGhlIHN0b3JhZ2UgbWFuYWdlciBpbnN0YW5jZSBmb3IgdGhpcyBAYSBjb250ZXh0
LgorICoKKyAqIEBwYXJhbSBjb250ZXh0IGNvbnRleHQgb2JqZWN0IHRvIHF1ZXJ5LgorICoKKyAq
IEByZXR1cm4gRXdrX1N0b3JhZ2VfTWFuYWdlciBvYmplY3QgaW5zdGFuY2Ugb3IgQGMgTlVMTCBp
biBjYXNlIG9mIGZhaWx1cmUuCisgKi8KK0VBUEkgRXdrX1N0b3JhZ2VfTWFuYWdlciAqZXdrX2Nv
bnRleHRfc3RvcmFnZV9tYW5hZ2VyX2dldChjb25zdCBFd2tfQ29udGV4dCAqY29udGV4dCk7CisK
Ky8qKgogICogUmVnaXN0ZXIgQGEgc2NoZW1lIGluIEBhIGNvbnRleHQuCiAgKgogICogV2hlbiBh
biBVUkwgcmVxdWVzdCB3aXRoIEBhIHNjaGVtZSBpcyBtYWRlIGluIHRoZSAjRXdrX0NvbnRleHQs
IHRoZSBjYWxsYmFjawpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9l
ZmwvZXdrX2NvbnRleHRfcHJpdmF0ZS5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9l
ZmwvZXdrX2NvbnRleHRfcHJpdmF0ZS5oCmluZGV4IGNmMzllYzIzZThhMGUxNDhlNTI3ZDdlZGU0
YWJjYTdkZTUyOWY5OTkuLjU3NWMyMzQ3ZDEzMTg3Y2FkNmVjNTAyZGFjNmRmOWE4NzkwNzM1MTkg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19jb250ZXh0
X3ByaXZhdGUuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfY29u
dGV4dF9wcml2YXRlLmgKQEAgLTI4LDYgKzI4LDcgQEAKIGNsYXNzIEV3a19VcmxfU2NoZW1lX1Jl
cXVlc3Q7CiBjbGFzcyBFd2tfQ29va2llX01hbmFnZXI7CiBjbGFzcyBFd2tfRmF2aWNvbl9EYXRh
YmFzZTsKK2NsYXNzIEV3a19TdG9yYWdlX01hbmFnZXI7CiAjaWYgRU5BQkxFKEJBVFRFUllfU1RB
VFVTKQogY2xhc3MgQmF0dGVyeVByb3ZpZGVyOwogI2VuZGlmCkBAIC01Nyw2ICs1OCw4IEBAIHB1
YmxpYzoKIAogICAgIEV3a19GYXZpY29uX0RhdGFiYXNlKiBmYXZpY29uRGF0YWJhc2UoKTsKIAor
ICAgIEV3a19TdG9yYWdlX01hbmFnZXIqIHN0b3JhZ2VNYW5hZ2VyKCk7CisKICAgICBXZWJLaXQ6
OlJlcXVlc3RNYW5hZ2VyQ2xpZW50RWZsKiByZXF1ZXN0TWFuYWdlcigpOwogCiAjaWYgRU5BQkxF
KFZJQlJBVElPTikKQEAgLTg0LDYgKzg3LDcgQEAgcHJpdmF0ZToKIAogICAgIE93blB0cjxFd2tf
Q29va2llX01hbmFnZXI+IG1fY29va2llTWFuYWdlcjsKICAgICBPd25QdHI8RXdrX0Zhdmljb25f
RGF0YWJhc2U+IG1fZmF2aWNvbkRhdGFiYXNlOworICAgIE93blB0cjxFd2tfU3RvcmFnZV9NYW5h
Z2VyPiBtX3N0b3JhZ2VNYW5hZ2VyOwogI2lmIEVOQUJMRShCQVRURVJZX1NUQVRVUykKICAgICBS
ZWZQdHI8QmF0dGVyeVByb3ZpZGVyPiBtX2JhdHRlcnlQcm92aWRlcjsKICNlbmRpZgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3NlY3VyaXR5X29yaWdp
bi5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfc2VjdXJpdHlfb3Jp
Z2luLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi44MjNhODI4ZTQ5MTEzZTRjY2NjYjYyYjJiZDFjN2MwOTRjYTYw
ZDEzCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwv
ZXdrX3NlY3VyaXR5X29yaWdpbi5jcHAKQEAgLTAsMCArMSw5MSBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMiBTYW1zdW5nIEVsZWN0cm9uaWNzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBI
T0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
VEhFIENPUFlSSUdIVCBIT0xERVIgT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORworICogTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiZXdrX3Nl
Y3VyaXR5X29yaWdpbi5oIgorCisjaW5jbHVkZSAiV0tBUElDYXN0LmgiCisjaW5jbHVkZSAiV0tT
ZWN1cml0eU9yaWdpbi5oIgorI2luY2x1ZGUgImV3a19zZWN1cml0eV9vcmlnaW5fcHJpdmF0ZS5o
IgorCit1c2luZyBuYW1lc3BhY2UgV2ViS2l0OworCitFd2tfU2VjdXJpdHlfT3JpZ2luOjpFd2tf
U2VjdXJpdHlfT3JpZ2luKFdLU2VjdXJpdHlPcmlnaW5SZWYgb3JpZ2luUmVmKQorICAgIDogbV93
a09yaWdpbihvcmlnaW5SZWYpCisgICAgLCBtX2hvc3QoQWRvcHRXSywgV0tTZWN1cml0eU9yaWdp
bkNvcHlIb3N0KG9yaWdpblJlZikpCisgICAgLCBtX3Byb3RvY29sKEFkb3B0V0ssIFdLU2VjdXJp
dHlPcmlnaW5Db3B5UHJvdG9jb2wob3JpZ2luUmVmKSkKKyAgICAsIG1fcG9ydChXS1NlY3VyaXR5
T3JpZ2luR2V0UG9ydChvcmlnaW5SZWYpKQoreyB9CisKK2NvbnN0IGNoYXIqIEV3a19TZWN1cml0
eV9PcmlnaW46Omhvc3QoKSBjb25zdAoreworICAgIHJldHVybiBtX2hvc3Q7Cit9CisKK2NvbnN0
IGNoYXIqIEV3a19TZWN1cml0eV9PcmlnaW46OnByb3RvY29sKCkgY29uc3QKK3sKKyAgICByZXR1
cm4gbV9wcm90b2NvbDsKK30KKwordWludDMyX3QgRXdrX1NlY3VyaXR5X09yaWdpbjo6cG9ydCgp
IGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcG9ydDsKK30KKworRXdrX1NlY3VyaXR5X09yaWdpbiog
ZXdrX3NlY3VyaXR5X29yaWdpbl9yZWYoRXdrX1NlY3VyaXR5X09yaWdpbiogb3JpZ2luKQorewor
ICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChvcmlnaW4sIDApOworCisgICAgb3Jp
Z2luLT5yZWYoKTsKKyAgICByZXR1cm4gb3JpZ2luOworfQorCit2b2lkIGV3a19zZWN1cml0eV9v
cmlnaW5fdW5yZWYoRXdrX1NlY3VyaXR5X09yaWdpbiogb3JpZ2luKQoreworICAgIEVJTkFfU0FG
RVRZX09OX05VTExfUkVUVVJOKG9yaWdpbik7CisKKyAgICBvcmlnaW4tPmRlcmVmKCk7Cit9CisK
K2NvbnN0IGNoYXIqIGV3a19zZWN1cml0eV9vcmlnaW5faG9zdF9nZXQoY29uc3QgRXdrX1NlY3Vy
aXR5X09yaWdpbiogb3JpZ2luKQoreworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZB
TChvcmlnaW4sIDApOworCisgICAgcmV0dXJuIG9yaWdpbi0+aG9zdCgpOworfQorCitjb25zdCBj
aGFyKiBld2tfc2VjdXJpdHlfb3JpZ2luX3Byb3RvY29sX2dldChjb25zdCBFd2tfU2VjdXJpdHlf
T3JpZ2luKiBvcmlnaW4pCit7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKG9y
aWdpbiwgMCk7CisKKyAgICByZXR1cm4gb3JpZ2luLT5wcm90b2NvbCgpOworfQorCit1aW50MzJf
dCBld2tfc2VjdXJpdHlfb3JpZ2luX3BvcnRfZ2V0KGNvbnN0IEV3a19TZWN1cml0eV9PcmlnaW4q
IG9yaWdpbikKK3sKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwob3JpZ2luLCAw
KTsKKworICAgIHJldHVybiBvcmlnaW4tPnBvcnQoKTsKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19zZWN1cml0eV9vcmlnaW4uaCBiL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19zZWN1cml0eV9vcmlnaW4uaApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li45ZWE1NjNhY2I0YjRhNTMyYWRjOTQ4MjQxYWZjMjM1NmY0MTc2NzRiCi0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3NlY3VyaXR5X29yaWdp
bi5oCkBAIC0wLDAgKzEsMTAyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEludGVsIENv
cnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyIFNh
bXN1bmcgRWxlY3Ryb25pY3MuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENP
TlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hU
IEhPTERFUiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HCisgKiBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKy8qKgorICogQGZpbGUgICAgZXdrX3NlY3VyaXR5X29yaWdpbi5oCisgKiBAYnJpZWYg
ICBTZWN1cml0eSBPcmlnaW4gQVBJLgorICoKKyAqIFNlY3VyaXR5IE9yaWdpbiBpcyB0aGUgbWVj
aGFuaXNtIHRoYXQgZGVmaW5lcyB0aGUgYWNjZXNzIGxpbWl0cyBvZiBhIHdlYnNpdGUuCisgKiBC
YXNlZCBvbiBpbmZvcm1hdGlvbiBzdWNoIGFzIGRvbWFpbiwgcHJvdG9jb2wgYW5kIHBvcnQsIHlv
dSBjYW4gb3IgY2Fubm90IGdyYW50CisgKiBhdXRob3JpemF0aW9uIGZvciBhY2Nlc3NpbmcgZGF0
YSBhbmQgcGVyZm9ybWluZyBjZXJ0YWluIHRhc2tzLgorICovCisKKyNpZm5kZWYgZXdrX3NlY3Vy
aXR5X29yaWdpbl9oCisjZGVmaW5lIGV3a19zZWN1cml0eV9vcmlnaW5faAorCisjaW5jbHVkZSA8
RWluYS5oPgorCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCisKKy8q
KiBDcmVhdGVzIGEgdHlwZSBuYW1lIGZvciBFd2tfU2VjdXJpdHlfT3JpZ2luLiAqLwordHlwZWRl
ZiBzdHJ1Y3QgRXdrX1NlY3VyaXR5X09yaWdpbiBFd2tfU2VjdXJpdHlfT3JpZ2luOworCisvKioK
KyAqIEluY3JlYXNlcyB0aGUgcmVmZXJlbmNlIGNvdW50IG9mIHRoZSBnaXZlbiBvYmplY3QuCisg
KgorICogQHBhcmFtIG9yaWdpbiB0aGUgb3JpZ2luIG9iamVjdCB0byBpbmNyZWFzZSB0aGUgcmVm
ZXJlbmNlIGNvdW50CisgKgorICogQHJldHVybiBhIHBvaW50ZXIgdG8gdGhlIG9iamVjdCBvbiBz
dWNjZXNzLCBAYyBOVUxMIG90aGVyd2lzZS4KKyAqLworRUFQSSBFd2tfU2VjdXJpdHlfT3JpZ2lu
ICpld2tfc2VjdXJpdHlfb3JpZ2luX3JlZihFd2tfU2VjdXJpdHlfT3JpZ2luICpvKTsKKworLyoq
CisgKiBEZWNyZWFzZXMgdGhlIHJlZmVyZW5jZSBjb3VudCBvZiB0aGUgZ2l2ZW4gb2JqZWN0LCBw
b3NzaWJseSBmcmVlaW5nIGl0LgorICoKKyAqIFdoZW4gdGhlIHJlZmVyZW5jZSBjb3VudCByZWFj
aGVzIDAsIHRoZSBvcmlnaW4gaXMgZnJlZWQuCisgKgorICogQHBhcmFtIG9yaWdpbiB0aGUgb3Jp
Z2luIG9iamVjdCB0byBkZWNyZWFzZSB0aGUgcmVmZXJlbmNlIGNvdW50CisgKi8KK0VBUEkgdm9p
ZCBld2tfc2VjdXJpdHlfb3JpZ2luX3VucmVmKEV3a19TZWN1cml0eV9PcmlnaW4gKm8pOworCisv
KioKKyAqIFJldHVybnMgdGhlIGhvc3Qgb2YgdGhlIHNlY3VyaXR5IG9yaWdpbi4KKyAqCisgKiBA
cGFyYW0gbyBzZWN1cml0eSBvcmlnaW4gb2JqZWN0CisgKgorICogQHJldHVybiB0aGUgaG9zdCBk
b21haW4gcG9pbnRlciBvciBAYyBOVUxMIGlmIHRoZXJlIGlzIG5vdCBhIGhvc3Qgc2NoZW1lLgor
ICogICAgICAgICBUaGlzIHBvaW50ZXIgaXMgZ3VhcmFudGVlZCB0byBiZSBlaW5hX3N0cmluZ3No
YXJlLCBzbyB3aGVuZXZlciBwb3NzaWJsZQorICogICAgICAgICBzYXZlIHlvdXJzZWxmIGZyb20g
Y3B1IGN5Y2xlcyBhbmQgdXNlIGVpbmFfc3RyaW5nc2hhcmVfcmVmKCkKKyAqICAgICAgICAgaW5z
dGVhZCBvZiBlaW5hX3N0cmluZ3NoYXJlX2FkZCgpIG9yIHN0cmR1cCgpLgorICovCitFQVBJIGNv
bnN0IGNoYXIgKmV3a19zZWN1cml0eV9vcmlnaW5faG9zdF9nZXQoY29uc3QgRXdrX1NlY3VyaXR5
X09yaWdpbiAqbyk7CisKKy8qKgorICogUmV0dXJucyB0aGUgcG9ydCBvZiB0aGUgc2VjdXJpdHkg
b3JpZ2luLgorICoKKyAqIEBwYXJhbSBvIHNlY3VyaXR5IG9yaWdpbiBvYmplY3QKKyAqCisgKiBA
cmV0dXJuIHRoZSBwb3J0IG51bWJlciBvciBAYyAwIGlmIHRoZXJlIGlzIG5vdCBhIHByb3BlciBz
ZWN1cml0eSBvcmlnaW4gc2NoZW1lCisgKi8KK0VBUEkgdWludDMyX3QgZXdrX3NlY3VyaXR5X29y
aWdpbl9wb3J0X2dldChjb25zdCBFd2tfU2VjdXJpdHlfT3JpZ2luICpvKTsKKworLyoqCisgKiBS
ZXR1cm5zIHRoZSBwcm90b2NvbCBvZiB0aGUgc2VjdXJpdHkgb3JpZ2luLgorICoKKyAqIEBwYXJh
bSBvIHNlY3VyaXR5IG9yaWdpbiBvYmplY3QKKyAqCisgKiBAcmV0dXJuIHRoZSBwcm90b2NvbCBz
Y2hlbWUgcG9pbnRlciBvciBAYyBOVUxMIGlmIHRoZXJlIGlzIG5vdCBhIHByb3RvY29sIHNjaGVt
ZS4KKyAqICAgICAgICAgVGhpcyBwb2ludGVyIGlzIGd1YXJhbnRlZWQgdG8gYmUgZWluYV9zdHJp
bmdzaGFyZSwgc28gd2hlbmV2ZXIgcG9zc2libGUKKyAqICAgICAgICAgc2F2ZSB5b3Vyc2VsZiBm
cm9tIGNwdSBjeWNsZXMgYW5kIHVzZSBlaW5hX3N0cmluZ3NoYXJlX3JlZigpCisgKiAgICAgICAg
IGluc3RlYWQgb2YgZWluYV9zdHJpbmdzaGFyZV9hZGQoKSBvciBzdHJkdXAoKS4KKyAqLworRUFQ
SSBjb25zdCBjaGFyICpld2tfc2VjdXJpdHlfb3JpZ2luX3Byb3RvY29sX2dldChjb25zdCBFd2tf
U2VjdXJpdHlfT3JpZ2luICpvKTsKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKyNl
bmRpZiAvLyBld2tfc2VjdXJpdHlfb3JpZ2luX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19zZWN1cml0eV9vcmlnaW5fcHJpdmF0ZS5oIGIvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3NlY3VyaXR5X29yaWdpbl9wcml2YXRlLmgK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uYjMwZWRhMWUwY2MxMThmM2I0NzU1ODZlNzE2NWNmMDJmYzZjNTBhOAotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19zZWN1
cml0eV9vcmlnaW5fcHJpdmF0ZS5oCkBAIC0wLDAgKzEsNTUgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTIgU2Ftc3VuZyBFbGVjdHJvbmljcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9M
REVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRI
RSBDT1BZUklHSFQgSE9MREVSIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcKKyAqIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBld2tfc2VjdXJpdHlfb3JpZ2luX3ByaXZhdGVfaAor
I2RlZmluZSBld2tfc2VjdXJpdHlfb3JpZ2luX3ByaXZhdGVfaAorCisjaW5jbHVkZSAiV0tFaW5h
U2hhcmVkU3RyaW5nLmgiCisjaW5jbHVkZSAiV0tTZWN1cml0eU9yaWdpbi5oIgorI2luY2x1ZGUg
PFdlYktpdDIvV0tCYXNlLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKyNpbmNsdWRl
IDx3dGYvUmVmQ291bnRlZC5oPgorCitjbGFzcyBFd2tfU2VjdXJpdHlfT3JpZ2luIDogcHVibGlj
IFJlZkNvdW50ZWQ8RXdrX1NlY3VyaXR5X09yaWdpbj4geworcHVibGljOgorICAgIHN0YXRpYyBQ
YXNzUmVmUHRyPEV3a19TZWN1cml0eV9PcmlnaW4+IGNyZWF0ZShXS1NlY3VyaXR5T3JpZ2luUmVm
IG9yaWdpblJlZikKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgRXdrX1NlY3Vy
aXR5X09yaWdpbihvcmlnaW5SZWYpKTsKKyAgICB9CisKKyAgICBjb25zdCBjaGFyKiBob3N0KCkg
Y29uc3Q7CisgICAgY29uc3QgY2hhciogcHJvdG9jb2woKSBjb25zdDsKKyAgICB1aW50MzJfdCBw
b3J0KCkgY29uc3Q7CisKK3ByaXZhdGU6CisgICAgZXhwbGljaXQgRXdrX1NlY3VyaXR5X09yaWdp
bihXS1NlY3VyaXR5T3JpZ2luUmVmIG9yaWdpblJlZik7CisKKyAgICBXS1JldGFpblB0cjxXS1Nl
Y3VyaXR5T3JpZ2luUmVmPiBtX3drT3JpZ2luOworICAgIG11dGFibGUgV0tFaW5hU2hhcmVkU3Ry
aW5nIG1faG9zdDsKKyAgICBtdXRhYmxlIFdLRWluYVNoYXJlZFN0cmluZyBtX3Byb3RvY29sOwor
ICAgIG11dGFibGUgdWludDMyX3QgbV9wb3J0OworfTsKKworI2VuZGlmIC8vIGV3a19zZWN1cml0
eV9vcmlnaW5fcHJpdmF0ZV9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL2VmbC9ld2tfc3RvcmFnZV9tYW5hZ2VyLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvZWZsL2V3a19zdG9yYWdlX21hbmFnZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjIyZTc3MDExNjFm
YTAxODQwYmE4ODA4MjFiNmE3NDdmNTljNjdlMDYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfc3RvcmFnZV9tYW5hZ2VyLmNwcApAQCAtMCww
ICsxLDk5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIFNhbXN1bmcgRWxlY3Ryb25pY3Mu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFT
IElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HCisgKiBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpbmNsdWRlICJld2tfc3RvcmFnZV9tYW5hZ2VyLmgiCisKKyNpbmNsdWRlICJX
S0FQSUNhc3QuaCIKKyNpbmNsdWRlICJXS0FycmF5LmgiCisjaW5jbHVkZSAiV0tLZXlWYWx1ZVN0
b3JhZ2VNYW5hZ2VyLmgiCisjaW5jbHVkZSAiZXdrX2Vycm9yX3ByaXZhdGUuaCIKKyNpbmNsdWRl
ICJld2tfc2VjdXJpdHlfb3JpZ2luLmgiCisjaW5jbHVkZSAiZXdrX3NlY3VyaXR5X29yaWdpbl9w
cml2YXRlLmgiCisjaW5jbHVkZSAiZXdrX3N0b3JhZ2VfbWFuYWdlcl9wcml2YXRlLmgiCisKK3Vz
aW5nIG5hbWVzcGFjZSBXZWJLaXQ7CisKK0V3a19TdG9yYWdlX01hbmFnZXI6OkV3a19TdG9yYWdl
X01hbmFnZXIoV0tLZXlWYWx1ZVN0b3JhZ2VNYW5hZ2VyUmVmIHdrU3RvcmFnZU1hbmFnZXJSZWYp
CisgICAgOiBtX3drU3RvcmFnZU1hbmFnZXIod2tTdG9yYWdlTWFuYWdlclJlZikKK3sgfQorCit2
b2lkIEV3a19TdG9yYWdlX01hbmFnZXI6OmdldFN0b3JhZ2VPcmlnaW5zKHZvaWQqIGNvbnRleHQs
IFdLS2V5VmFsdWVTdG9yYWdlTWFuYWdlckdldEtleVZhbHVlU3RvcmFnZU9yaWdpbnNGdW5jdGlv
biBjYWxsYmFjaykgY29uc3QKK3sKKyAgICBXS0tleVZhbHVlU3RvcmFnZU1hbmFnZXJHZXRLZXlW
YWx1ZVN0b3JhZ2VPcmlnaW5zKG1fd2tTdG9yYWdlTWFuYWdlci5nZXQoKSwgY29udGV4dCwgY2Fs
bGJhY2spOworfQorCitFaW5hX0xpc3QqIEV3a19TdG9yYWdlX01hbmFnZXI6OmNyZWF0ZU9yaWdp
bkxpc3QoV0tBcnJheVJlZiBvcmlnaW5zKSBjb25zdAoreworICAgIEVpbmFfTGlzdCogb3JpZ2lu
TGlzdCA9IDA7CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IFdLQXJyYXlHZXRTaXplKG9y
aWdpbnMpOyBpKyspIHsKKyAgICAgICAgV0tTZWN1cml0eU9yaWdpblJlZiB3a09yaWdpblJlZiA9
IHN0YXRpY19jYXN0PFdLU2VjdXJpdHlPcmlnaW5SZWY+KFdLQXJyYXlHZXRJdGVtQXRJbmRleChv
cmlnaW5zLCBpKSk7CisgICAgICAgIFJlZlB0cjxFd2tfU2VjdXJpdHlfT3JpZ2luPiBvcmlnaW4g
PSBtX3dyYXBwZXJDYWNoZS5nZXQod2tPcmlnaW5SZWYpOworICAgICAgICBpZiAoIW9yaWdpbikg
eworICAgICAgICAgICAgb3JpZ2luID1Fd2tfU2VjdXJpdHlfT3JpZ2luOjpjcmVhdGUod2tPcmln
aW5SZWYpOworICAgICAgICAgICAgbV93cmFwcGVyQ2FjaGUuc2V0KHdrT3JpZ2luUmVmLCBvcmln
aW4pOworICAgICAgICB9CisgICAgICAgIG9yaWdpbkxpc3QgPSBlaW5hX2xpc3RfYXBwZW5kKG9y
aWdpbkxpc3QsIGV3a19zZWN1cml0eV9vcmlnaW5fcmVmKG9yaWdpbi5nZXQoKSkpOworICAgIH0K
KworICAgIHJldHVybiBvcmlnaW5MaXN0OworfQorCitzdHJ1Y3QgX0V3a19TdG9yYWdlX09yaWdp
bnNfQXN5bmNfR2V0X0NvbnRleHQgeworICAgIEV3a19TdG9yYWdlX01hbmFnZXIqIG1hbmFnZXI7
CisgICAgRXdrX1N0b3JhZ2VfT3JpZ2luc19HZXRfQ2IgY2FsbGJhY2s7CisgICAgdm9pZCogdXNl
ckRhdGE7CisKKyAgICBfRXdrX1N0b3JhZ2VfT3JpZ2luc19Bc3luY19HZXRfQ29udGV4dChFd2tf
U3RvcmFnZV9NYW5hZ2VyKiBfbWFuYWdlciwgRXdrX1N0b3JhZ2VfT3JpZ2luc19HZXRfQ2IgX2Nh
bGxiYWNrLCB2b2lkKiBfdXNlckRhdGEpCisgICAgICAgIDogbWFuYWdlcihfbWFuYWdlcikKKyAg
ICAgICAgLCBjYWxsYmFjayhfY2FsbGJhY2spCisgICAgICAgICwgdXNlckRhdGEoX3VzZXJEYXRh
KQorICAgIHsgfQorfTsKKworc3RhdGljIHZvaWQgZ2V0U3RvcmFnZU9yaWdpbnNDYWxsYmFjayhX
S0FycmF5UmVmIG9yaWdpbnMsIFdLRXJyb3JSZWYgd2tFcnJvciwgdm9pZCogY29udGV4dCkKK3sK
KyAgICBFaW5hX0xpc3QqIG9yaWdpbkxpc3QgPSAwOworICAgIF9Fd2tfU3RvcmFnZV9PcmlnaW5z
X0FzeW5jX0dldF9Db250ZXh0KiB3ZWJTdG9yYWdlQ29udGV4dCA9IHN0YXRpY19jYXN0PF9Fd2tf
U3RvcmFnZV9PcmlnaW5zX0FzeW5jX0dldF9Db250ZXh0Kj4oY29udGV4dCk7CisKKyAgICBvcmln
aW5MaXN0ID0gd2ViU3RvcmFnZUNvbnRleHQtPm1hbmFnZXItPmNyZWF0ZU9yaWdpbkxpc3Qob3Jp
Z2lucyk7CisKKyAgICBPd25QdHI8RXdrX0Vycm9yPiBld2tFcnJvciA9IEV3a19FcnJvcjo6Y3Jl
YXRlKHdrRXJyb3IpOworICAgIHdlYlN0b3JhZ2VDb250ZXh0LT5jYWxsYmFjayhvcmlnaW5MaXN0
LCBld2tFcnJvci5nZXQoKSwgd2ViU3RvcmFnZUNvbnRleHQtPnVzZXJEYXRhKTsKKworICAgIGRl
bGV0ZSB3ZWJTdG9yYWdlQ29udGV4dDsKK30KKworRWluYV9Cb29sIGV3a19zdG9yYWdlX21hbmFn
ZXJfb3JpZ2luc19nZXQoRXdrX1N0b3JhZ2VfTWFuYWdlciogZXdrU3RvcmFnZU1hbmFnZXIsIEV3
a19TdG9yYWdlX09yaWdpbnNfR2V0X0NiIGNhbGxiYWNrLCB2b2lkKiB1c2VyRGF0YSkKK3sKKyAg
ICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoZXdrU3RvcmFnZU1hbmFnZXIsIGZhbHNl
KTsKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoY2FsbGJhY2ssIGZhbHNlKTsK
KworICAgIF9Fd2tfU3RvcmFnZV9PcmlnaW5zX0FzeW5jX0dldF9Db250ZXh0KiBjb250ZXh0ID0g
bmV3IF9Fd2tfU3RvcmFnZV9PcmlnaW5zX0FzeW5jX0dldF9Db250ZXh0KGV3a1N0b3JhZ2VNYW5h
Z2VyLCBjYWxsYmFjaywgdXNlckRhdGEpOworICAgIGV3a1N0b3JhZ2VNYW5hZ2VyLT5nZXRTdG9y
YWdlT3JpZ2lucyhjb250ZXh0LCBnZXRTdG9yYWdlT3JpZ2luc0NhbGxiYWNrKTsKKworICAgIHJl
dHVybiB0cnVlOworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9l
ZmwvZXdrX3N0b3JhZ2VfbWFuYWdlci5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9l
ZmwvZXdrX3N0b3JhZ2VfbWFuYWdlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjFiMDQ5ZDkyN2Y0YTcyZjRiM2Zh
MDBjNGQ1ZThhMmFkZDVmNTFkNDQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL2VmbC9ld2tfc3RvcmFnZV9tYW5hZ2VyLmgKQEAgLTAsMCArMSw3MyBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBTYW1zdW5nIEVsZWN0cm9uaWNzLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
VEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORworICogTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvKioKKyAqIEBmaWxlICAgIGV3a19z
dG9yYWdlX21hbmFnZXIuaAorICogQGJyaWVmICBEZXNjcmliZXMgdGhlIEV3ayBTdG9yYWdlIE1h
bmFnZXIgQVBJLgorICoKKyAqIEV3ayBTdG9yYWdlIE1hbmFnZXIgbWFuYWdlcyB3ZWIgc3RvcmFn
ZS4KKyAqLworCisjaWZuZGVmIGV3a19zdG9yYWdlX21hbmFnZXJfaAorI2RlZmluZSBld2tfc3Rv
cmFnZV9tYW5hZ2VyX2gKKworI2luY2x1ZGUgImV3a19lcnJvci5oIgorI2luY2x1ZGUgPEVpbmEu
aD4KKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCisvKiogQ3Jl
YXRlcyBhIHR5cGUgbmFtZSBmb3IgRXdrX1N0b3JhZ2VfTWFuYWdlci4gKi8KK3R5cGVkZWYgc3Ry
dWN0IEV3a19TdG9yYWdlX01hbmFnZXIgRXdrX1N0b3JhZ2VfTWFuYWdlcjsKKworLyoqCisgKiBA
dHlwZWRlZiBFd2tfU3RvcmFnZV9PcmlnaW5zX0dldF9DYiBFd2tfU3RvcmFnZV9PcmlnaW5zX0dl
dF9DYgorICogQGJyaWVmIENhbGxiYWNrIHR5cGUgZm9yIHVzZSB3aXRoIGV3a19zdG9yYWdlX21h
bmFnZXJfb3JpZ2luc19nZXQoKS4KKyAqCisgKiBAcGFyYW0gb3JpZ2lucyBAYyBFaW5hX0xpc3Qg
Y29udGFpbmluZyBAYyBFd2tfU2VjdXJpdHlfT3JpZ2luIGVsZW1lbnRzIG9yIEBjIE5VTEwgaW4g
Y2FzZSBvZiBlcnJvciwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgdGhlIEVpbmFfTGlzdCBh
bmQgaXRzIGl0ZW1zIHNob3VsZCBiZSBmcmVlZCBhZnRlciB1c2UuIFVzZSBld2tfc2VjdXJpdHlf
b3JpZ2luX3VucmVmKCkKKyAqICAgICAgICAgICAgICAgICAgICAgICAgdG8gZnJlZSB0aGUgaXRl
bXMKKyAqLwordHlwZWRlZiB2b2lkICgqRXdrX1N0b3JhZ2VfT3JpZ2luc19HZXRfQ2IpKEVpbmFf
TGlzdCAqb3JpZ2lucywgRXdrX0Vycm9yICplcnJvciwgdm9pZCAqdXNlcl9kYXRhKTsKKworLyoq
CisgKiBHZXRzIGxpc3Qgb2Ygb3JpZ2lucyB0aGF0IGFyZSBzdG9yZWQgaW4gc3RvcmFnZSBkYiBh
c3luY2hyb25vdXNseS4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGFsbG9jYXRlcyBtZW1vcnkgZm9y
IGNvbnRleHQgc3RydWN0dXJlIG1hZGUgZnJvbSBjYWxsYmFjayBhbmQgdXNlcl9kYXRhLgorICoK
KyAqIEBwYXJhbSBtYW5hZ2VyIEV3a19TdG9yYWdlX01hbmFnZXIgb2JqZWN0CisgKiBAcGFyYW0g
Y2FsbGJhY2sgY2FsbGJhY2sgdG8gZ2V0IHN0b3JhZ2Ugb3JpZ2lucworICogQHBhcmFtIHVzZXJf
ZGF0YSB1c2VyX2RhdGEgd2lsbCBiZSBwYXNzZWQgd2hlbiByZXN1bHRfY2FsbGJhY2sgaXMgY2Fs
bGVkCisgKiAgICAtSS5lLiwgdXNlciBkYXRhIHdpbGwgYmUga2VwdCB1bnRpbCBjYWxsYmFjayBp
cyBjYWxsZWQKKyAqCisgKiBAcmV0dXJuIEBjIEVJTkFfVFJVRSBvbiBzdWNjZXNzLCBAYyBFSU5B
X0ZBTFNFIG9uIGZhaWx1cmUKKyAqLworRUFQSSBFaW5hX0Jvb2wgZXdrX3N0b3JhZ2VfbWFuYWdl
cl9vcmlnaW5zX2dldChFd2tfU3RvcmFnZV9NYW5hZ2VyICptYW5hZ2VyLCBFd2tfU3RvcmFnZV9P
cmlnaW5zX0dldF9DYiBjYWxsYmFjaywgdm9pZCAqdXNlcl9kYXRhKTsKKworI2lmZGVmIF9fY3Bs
dXNwbHVzCit9CisjZW5kaWYKKyNlbmRpZiAvLyBld2tfc3RvcmFnZV9tYW5hZ2VyX2gKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19zdG9yYWdlX21hbmFn
ZXJfcHJpdmF0ZS5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3N0b3Jh
Z2VfbWFuYWdlcl9wcml2YXRlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZjdmOGIxYTEzZTZmZTVhMzcyMWExN2Fj
YzliOGE0MDkxYjVmYTc0NQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvZWZsL2V3a19zdG9yYWdlX21hbmFnZXJfcHJpdmF0ZS5oCkBAIC0wLDAgKzEsNTQg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgU2Ftc3VuZyBFbGVjdHJvbmljcy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcKKyAqIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBld2tfc3RvcmFn
ZV9tYW5hZ2VyX3ByaXZhdGVfaAorI2RlZmluZSBld2tfc3RvcmFnZV9tYW5hZ2VyX3ByaXZhdGVf
aAorCisjaW5jbHVkZSAiV0tLZXlWYWx1ZVN0b3JhZ2VNYW5hZ2VyLmgiCisjaW5jbHVkZSAiV0tS
ZXRhaW5QdHIuaCIKKyNpbmNsdWRlICJld2tfc2VjdXJpdHlfb3JpZ2luX3ByaXZhdGUuaCIKKyNp
bmNsdWRlIDxXZWJLaXQyL1dLQmFzZS5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CisK
K3R5cGVkZWYgSGFzaE1hcDxXS1NlY3VyaXR5T3JpZ2luUmVmLCBSZWZQdHI8RXdrX1NlY3VyaXR5
X09yaWdpbj4gPiBTdG9yYWdlT3JpZ2luc01hcDsKKworY2xhc3MgRXdrX1N0b3JhZ2VfTWFuYWdl
ciB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NPd25QdHI8RXdrX1N0b3JhZ2VfTWFuYWdlcj4g
Y3JlYXRlKFdLS2V5VmFsdWVTdG9yYWdlTWFuYWdlclJlZiB3a1N0b3JhZ2VNYW5hZ2VyUmVmKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBFd2tfU3RvcmFnZV9NYW5hZ2VyKHdr
U3RvcmFnZU1hbmFnZXJSZWYpKTsKKyAgICB9CisKKyAgICBFaW5hX0xpc3QqIGNyZWF0ZU9yaWdp
bkxpc3QoV0tBcnJheVJlZiB3a0xpc3QpIGNvbnN0OworICAgIHZvaWQgZ2V0U3RvcmFnZU9yaWdp
bnModm9pZCogY29udGV4dCwgV0tLZXlWYWx1ZVN0b3JhZ2VNYW5hZ2VyR2V0S2V5VmFsdWVTdG9y
YWdlT3JpZ2luc0Z1bmN0aW9uIGNhbGxiYWNrKSBjb25zdDsKKworcHJpdmF0ZToKKyAgICBleHBs
aWNpdCBFd2tfU3RvcmFnZV9NYW5hZ2VyKFdLS2V5VmFsdWVTdG9yYWdlTWFuYWdlclJlZiB3a1N0
b3JhZ2VNYW5hZ2VyUmVmKTsKKworICAgIFdLUmV0YWluUHRyPFdLS2V5VmFsdWVTdG9yYWdlTWFu
YWdlclJlZj4gbV93a1N0b3JhZ2VNYW5hZ2VyOworICAgIG11dGFibGUgU3RvcmFnZU9yaWdpbnNN
YXAgbV93cmFwcGVyQ2FjaGU7Cit9OworCisjZW5kaWYgLy8gZXdrX3N0b3JhZ2VfbWFuYWdlcl9w
cml2YXRlX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL3Rl
c3RzL3Rlc3RfZXdrMl9jb250ZXh0LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
ZWZsL3Rlc3RzL3Rlc3RfZXdrMl9jb250ZXh0LmNwcAppbmRleCAyN2U0NmRjMWU3MGY4YjYxYWQw
ZTRmNjc5ZDc1M2E5OGZkYzRkOTJkLi45ZmQzZDE2NGJlN2E0M2M2YjNkYjA3MjJkZTQ4MmIyYjIx
NmM5OTEzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC90ZXN0
cy90ZXN0X2V3azJfY29udGV4dC5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9lZmwvdGVzdHMvdGVzdF9ld2syX2NvbnRleHQuY3BwCkBAIC02MSw2ICs2MSwxNCBAQCBURVNU
X0YoRVdLMlVuaXRUZXN0QmFzZSwgZXdrX2NvbnRleHRfZmF2aWNvbl9kYXRhYmFzZV9nZXQpCiAg
ICAgQVNTRVJUX0VRKGZhdmljb25EYXRhYmFzZSwgZXdrX2NvbnRleHRfZmF2aWNvbl9kYXRhYmFz
ZV9nZXQoY29udGV4dCkpOwogfQogCitURVNUX0YoRVdLMlVuaXRUZXN0QmFzZSwgZXdrX2NvbnRl
eHRfc3RvcmFnZV9tYW5hZ2VyX2dldCkKK3sKKyAgICBFd2tfQ29udGV4dCogY29udGV4dCA9IGV3
a192aWV3X2NvbnRleHRfZ2V0KHdlYlZpZXcoKSk7CisgICAgRXdrX1N0b3JhZ2VfTWFuYWdlciog
c3RhZ2VNYW5hZ2VyID0gZXdrX2NvbnRleHRfc3RvcmFnZV9tYW5hZ2VyX2dldChjb250ZXh0KTsK
KyAgICBBU1NFUlRfVFJVRShzdGFnZU1hbmFnZXIpOworICAgIEFTU0VSVF9FUShzdGFnZU1hbmFn
ZXIsIGV3a19jb250ZXh0X3N0b3JhZ2VfbWFuYWdlcl9nZXQoY29udGV4dCkpOworfQorCiBzdGF0
aWMgdm9pZCBzY2hlbWVSZXF1ZXN0Q2FsbGJhY2soRXdrX1VybF9TY2hlbWVfUmVxdWVzdCogcmVx
dWVzdCwgdm9pZCogdXNlckRhdGEpCiB7CiAgICAgY29uc3QgY2hhciogc2NoZW1lID0gZXdrX3Vy
bF9zY2hlbWVfcmVxdWVzdF9zY2hlbWVfZ2V0KHJlcXVlc3QpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvdGVzdHMvdGVzdF9ld2syX3N0b3JhZ2VfbWFuYWdl
ci5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC90ZXN0cy90ZXN0X2V3azJf
c3RvcmFnZV9tYW5hZ2VyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44OWE5YTNjMmViMjdkNmNmNmI5ZWRlYTlm
MjNlYWIzY2YwMTU3NmU0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9lZmwvdGVzdHMvdGVzdF9ld2syX3N0b3JhZ2VfbWFuYWdlci5jcHAKQEAgLTAsMCAr
MSw3NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBTYW1zdW5nIEVsZWN0cm9uaWNzCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgIlVuaXRUZXN0VXRpbHMv
RVdLMlVuaXRUZXN0QmFzZS5oIgorI2luY2x1ZGUgPEVXZWJLaXQyLmg+CisjaW5jbHVkZSA8RWNv
cmUuaD4KKyNpbmNsdWRlIDxndGVzdC9ndGVzdC5oPgorCit1c2luZyBuYW1lc3BhY2UgRVdLMlVu
aXRUZXN0OworCitzdGF0aWMgdm9pZCBnZXRTdG9yYWdlT3JpZ2luc0NhbGxiYWNrKEVpbmFfTGlz
dCAqb3JpZ2lucywgRXdrX0Vycm9yICplcnJvciwgdm9pZCAqdXNlcl9kYXRhKQoreworICAgIEFT
U0VSVF9GQUxTRShlcnJvcik7CisKKyAgICBFaW5hX0xpc3QqKiByZXQgPSBzdGF0aWNfY2FzdDxF
aW5hX0xpc3QqKj4odXNlcl9kYXRhKTsKKyAgICBFaW5hX0xpc3QqIGw7CisgICAgdm9pZCogZGF0
YTsKKyAgICBFSU5BX0xJU1RfRk9SRUFDSChvcmlnaW5zLCBsLCBkYXRhKQorICAgICAgICAqcmV0
ID0gZWluYV9saXN0X2FwcGVuZCgqcmV0LCBkYXRhKTsKKyAgICBlY29yZV9tYWluX2xvb3BfcXVp
dCgpOworfQorCitURVNUX0YoRVdLMlVuaXRUZXN0QmFzZSwgZXdrX3N0b3JhZ2VfbWFuYWdlcl9v
cmlnaW5zX2dldCkKK3sKKyAgICBjb25zdCBjaGFyKiBzdG9yYWdlSFRNTCA9CisgICAgICAgICI8
aHRtbD48aGVhZD48dGl0bGU+b3JpZ2luYWwgdGl0bGU8L3RpdGxlPjwvaGVhZD4iCisgICAgICAg
ICI8Ym9keT4iCisgICAgICAgICI8c2NyaXB0IHR5cGU9J3RleHQvamF2YXNjcmlwdCc+IgorICAg
ICAgICAiIGxvY2FsU3RvcmFnZS5zZXRJdGVtKCdpdGVtJywgJ3N0b3JhZ2UnKTsiCisgICAgICAg
ICIgZG9jdW1lbnQudGl0bGUgPSAnU2V0JzsiCisgICAgICAgICIgPC9zY3JpcHQ+IgorICAgICAg
ICAiPC9ib2R5PjwvaHRtbD4iOworCisgICAgZXdrX3ZpZXdfaHRtbF9zdHJpbmdfbG9hZCh3ZWJW
aWV3KCksIHN0b3JhZ2VIVE1MLCAiaHR0cDovL3d3dy5zdG9yYWdldGVzdC5jb20iLCAwKTsKKyAg
ICB3YWl0VW50aWxUaXRsZUNoYW5nZWRUbygiV2FpdCB1bnRpbCBkYiBzeW5jIGlzIGZpbmlzaGVk
IiwgMik7CisKKyAgICBFaW5hX0xpc3QqIG9yaWdpbnMgPSAwOworICAgIEFTU0VSVF9UUlVFKGV3
a19zdG9yYWdlX21hbmFnZXJfb3JpZ2luc19nZXQoZXdrX2NvbnRleHRfc3RvcmFnZV9tYW5hZ2Vy
X2dldChld2tfdmlld19jb250ZXh0X2dldCh3ZWJWaWV3KCkpKSwgZ2V0U3RvcmFnZU9yaWdpbnND
YWxsYmFjaywgJm9yaWdpbnMpKTsKKyAgICBlY29yZV9tYWluX2xvb3BfYmVnaW4oKTsKKworICAg
IEFTU0VSVF9MRSgxLCBlaW5hX2xpc3RfY291bnQob3JpZ2lucykpOworCisgICAgRXdrX1NlY3Vy
aXR5X09yaWdpbiogb3JpZ2luID0gc3RhdGljX2Nhc3Q8RXdrX1NlY3VyaXR5X09yaWdpbio+KGVp
bmFfbGlzdF9udGgob3JpZ2lucywgMCkpOworICAgIEVYUEVDVF9TVFJFUSgiaHR0cCIsIGV3a19z
ZWN1cml0eV9vcmlnaW5fcHJvdG9jb2xfZ2V0KG9yaWdpbikpOworICAgIEVYUEVDVF9TVFJFUSgi
d3d3LnN0b3JhZ2V0ZXN0LmNvbSIsIGV3a19zZWN1cml0eV9vcmlnaW5faG9zdF9nZXQob3JpZ2lu
KSk7CisgICAgRVhQRUNUX0VRKDAsIGV3a19zZWN1cml0eV9vcmlnaW5fcG9ydF9nZXQob3JpZ2lu
KSk7CisKKyAgICBFWFBFQ1RfRVEob3JpZ2luLCBld2tfc2VjdXJpdHlfb3JpZ2luX3JlZihvcmln
aW4pKTsKKyAgICBld2tfc2VjdXJpdHlfb3JpZ2luX3VucmVmKG9yaWdpbik7Cit9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>170607</attachid>
            <date>2012-10-25 04:10:19 -0700</date>
            <delta_ts>2012-10-31 20:06:31 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-92827-20121025200856.patch</filename>
            <type>text/plain</type>
            <size>33677</size>
            <attacher name="Jihye Kang">jye.kang</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTMyNDU4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggZmFiZWQ3NzBjOGFjYjJk
MjVkNTM3Njc0MWE3NTQ0M2Q1NDcyYjEzNS4uZjA5MDU5ZjQzMDI5MTdkODgwOWRmNzRiYjNiNjAw
ODc5MDkzMWYzYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU3IEBACisyMDEyLTEwLTI1ICBKaWh5
ZSBLYW5nICA8anllLmthbmdAc2Ftc3VuZy5jb20+CisKKyAgICAgICAgW0VGTF1XSzJdIEFkZCBl
d2tfc2VjdXJpdHlfb3JpZ2luIGFuZCBld2tfc3RvcmFnZV9tYW5hZ2VyIEFQSXMKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTkyODI3CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkIGV3a19zZWN1cml0eV9v
cmlnaW4gQVBJcyB0byBnZXQgc2VjdXJpdHkgb3JpZ2luLgorICAgICAgICBUaGVzZSBBUElzIHdp
bGwgYmUgdXNlZCB0byBnZXQgaG9zdCwgcHJvdG9jb2wgYW5kIHBvcnQgb2Ygc2VjdXJpdHkKKyAg
ICAgICAgb3JpZ2luLgorICAgICAgICBBZGQgZXdrX3N0b3JhZ2VfbWFuYWdlciB0byBtYW5hZ2Ug
d2ViIHN0b3JhZ2UgYW5kCisgICAgICAgIGV3a19zdG9yYWdlX21hbmFnZXJfb3JpZ2luc19nZXQg
dG8gZ2V0IG9yaWdpbnMgbGlzdCBvZiB3ZWIgc3RvcmFnZS4KKyAgICAgICAgQWRkIFVuaXQgdGVz
dHMgZm9yIGV3a19zdG9yYWdlX21hbmFnZXIgYW5kIGV3a19zZWN1cml0eV9vcmlnaW4gQVBJcy4K
KworICAgICAgICAqIFBsYXRmb3JtRWZsLmNtYWtlOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkv
ZWZsL0VXZWJLaXQyLmg6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2NvbnRleHQu
Y3BwOgorICAgICAgICAoRXdrX0NvbnRleHQ6OnN0b3JhZ2VNYW5hZ2VyKToKKyAgICAgICAgKGV3
a19jb250ZXh0X3N0b3JhZ2VfbWFuYWdlcl9nZXQpOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkv
ZWZsL2V3a19jb250ZXh0Lmg6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2NvbnRl
eHRfcHJpdmF0ZS5oOgorICAgICAgICAoRXdrX0NvbnRleHQpOgorICAgICAgICAqIFVJUHJvY2Vz
cy9BUEkvZWZsL2V3a19zZWN1cml0eV9vcmlnaW4uY3BwOiBBZGRlZC4KKyAgICAgICAgKEV3a19T
ZWN1cml0eV9PcmlnaW46OkV3a19TZWN1cml0eV9PcmlnaW4pOgorICAgICAgICAoRXdrX1NlY3Vy
aXR5X09yaWdpbjo6aG9zdCk6CisgICAgICAgIChFd2tfU2VjdXJpdHlfT3JpZ2luOjpwcm90b2Nv
bCk6CisgICAgICAgIChFd2tfU2VjdXJpdHlfT3JpZ2luOjpwb3J0KToKKyAgICAgICAgKGV3a19z
ZWN1cml0eV9vcmlnaW5fcmVmKToKKyAgICAgICAgKGV3a19zZWN1cml0eV9vcmlnaW5fdW5yZWYp
OgorICAgICAgICAoZXdrX3NlY3VyaXR5X29yaWdpbl9ob3N0X2dldCk6CisgICAgICAgIChld2tf
c2VjdXJpdHlfb3JpZ2luX3Byb3RvY29sX2dldCk6CisgICAgICAgIChld2tfc2VjdXJpdHlfb3Jp
Z2luX3BvcnRfZ2V0KToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2VmbC9ld2tfc2VjdXJpdHlf
b3JpZ2luLmg6IEFkZGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZWZsL2V3a19zZWN1cml0
eV9vcmlnaW5fcHJpdmF0ZS5oOiBBZGRlZC4KKyAgICAgICAgKEV3a19TZWN1cml0eV9PcmlnaW4p
OgorICAgICAgICAoRXdrX1NlY3VyaXR5X09yaWdpbjo6Y3JlYXRlKToKKyAgICAgICAgKiBVSVBy
b2Nlc3MvQVBJL2VmbC9ld2tfc3RvcmFnZV9tYW5hZ2VyLmNwcDogQWRkZWQuCisgICAgICAgIChF
d2tfU3RvcmFnZV9NYW5hZ2VyOjpFd2tfU3RvcmFnZV9NYW5hZ2VyKToKKyAgICAgICAgKEV3a19T
dG9yYWdlX01hbmFnZXI6OmdldFN0b3JhZ2VPcmlnaW5zKToKKyAgICAgICAgKEV3a19TdG9yYWdl
X01hbmFnZXI6OmNyZWF0ZU9yaWdpbkxpc3QpOgorICAgICAgICAoX0V3a19TdG9yYWdlX09yaWdp
bnNfQXN5bmNfR2V0X0NvbnRleHQpOgorICAgICAgICAoX0V3a19TdG9yYWdlX09yaWdpbnNfQXN5
bmNfR2V0X0NvbnRleHQ6Ol9Fd2tfU3RvcmFnZV9PcmlnaW5zX0FzeW5jX0dldF9Db250ZXh0KToK
KyAgICAgICAgKGdldFN0b3JhZ2VPcmlnaW5zQ2FsbGJhY2spOgorICAgICAgICAoZXdrX3N0b3Jh
Z2VfbWFuYWdlcl9vcmlnaW5zX2dldCk6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9lZmwvZXdr
X3N0b3JhZ2VfbWFuYWdlci5oOiBBZGRlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2VmbC9l
d2tfc3RvcmFnZV9tYW5hZ2VyX3ByaXZhdGUuaDogQWRkZWQuCisgICAgICAgIChFd2tfU3RvcmFn
ZV9NYW5hZ2VyKToKKyAgICAgICAgKEV3a19TdG9yYWdlX01hbmFnZXI6OmNyZWF0ZSk6CisgICAg
ICAgICogVUlQcm9jZXNzL0FQSS9lZmwvdGVzdHMvdGVzdF9ld2syX2NvbnRleHQuY3BwOgorICAg
ICAgICAoVEVTVF9GKToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2VmbC90ZXN0cy90ZXN0X2V3
azJfc3RvcmFnZV9tYW5hZ2VyLmNwcDogQWRkZWQuCisgICAgICAgIChnZXRTdG9yYWdlT3JpZ2lu
c0NhbGxiYWNrKToKKyAgICAgICAgKFRFU1RfRik6CisKIDIwMTItMTAtMjQgIEpvb25lIEh1ciAg
PGpvb25lLmh1ckBpbnRlbC5jb20+CiAKICAgICAgICAgW0VGTF1bQUNdIFVucmV2aWV3ZWQsIGZp
eCBidWlsZCBicmVhayB3aGVuIEFDIGlzIGVuYWJsZWQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQyL1BsYXRmb3JtRWZsLmNtYWtlIGIvU291cmNlL1dlYktpdDIvUGxhdGZvcm1FZmwuY21ha2UK
aW5kZXggMGIyNmFjMzI4MGExMDI1ZGRjYjY5YWM0NTIxMjhmZjA3MDA2Y2Q1YS4uOTJmZGEwYWJk
ZjAwMzU3ZjdkMjRhOWMxZGY1ZDFiZTYzNjE1MTc3OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dDIvUGxhdGZvcm1FZmwuY21ha2UKKysrIGIvU291cmNlL1dlYktpdDIvUGxhdGZvcm1FZmwuY21h
a2UKQEAgLTYzLDcgKzYzLDkgQEAgTElTVChBUFBFTkQgV2ViS2l0Ml9TT1VSQ0VTCiAgICAgVUlQ
cm9jZXNzL0FQSS9lZmwvZXdrX25hdmlnYXRpb25fcG9saWN5X2RlY2lzaW9uLmNwcAogICAgIFVJ
UHJvY2Vzcy9BUEkvZWZsL2V3a19wb3B1cF9tZW51X2l0ZW0uY3BwCiAgICAgVUlQcm9jZXNzL0FQ
SS9lZmwvZXdrX3Jlc291cmNlLmNwcAorICAgIFVJUHJvY2Vzcy9BUEkvZWZsL2V3a19zZWN1cml0
eV9vcmlnaW4uY3BwCiAgICAgVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3NldHRpbmdzLmNwcAorICAg
IFVJUHJvY2Vzcy9BUEkvZWZsL2V3a19zdG9yYWdlX21hbmFnZXIuY3BwCiAgICAgVUlQcm9jZXNz
L0FQSS9lZmwvZXdrX3RleHRfY2hlY2tlci5jcHAKICAgICBVSVByb2Nlc3MvQVBJL2VmbC9ld2tf
dXJsX3JlcXVlc3QuY3BwCiAgICAgVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3VybF9yZXNwb25zZS5j
cHAKQEAgLTI1Miw3ICsyNTQsOSBAQCBTRVQgKEVXZWJLaXQyX0hFQURFUlMKICAgICAiJHtDTUFL
RV9DVVJSRU5UX1NPVVJDRV9ESVJ9L1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19uYXZpZ2F0aW9uX3Bv
bGljeV9kZWNpc2lvbi5oIgogICAgICIke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0vVUlQcm9j
ZXNzL0FQSS9lZmwvZXdrX3BvcHVwX21lbnVfaXRlbS5oIgogICAgICIke0NNQUtFX0NVUlJFTlRf
U09VUkNFX0RJUn0vVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3Jlc291cmNlLmgiCisgICAgIiR7Q01B
S0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfc2VjdXJpdHlfb3Jp
Z2luLmgiCiAgICAgIiR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS9VSVByb2Nlc3MvQVBJL2Vm
bC9ld2tfc2V0dGluZ3MuaCIKKyAgICAiJHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9L1VJUHJv
Y2Vzcy9BUEkvZWZsL2V3a19zdG9yYWdlX21hbmFnZXIuaCIKICAgICAiJHtDTUFLRV9DVVJSRU5U
X1NPVVJDRV9ESVJ9L1VJUHJvY2Vzcy9BUEkvZWZsL2V3a190ZXh0X2NoZWNrZXIuaCIKICAgICAi
JHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9L1VJUHJvY2Vzcy9BUEkvZWZsL2V3a190b3VjaC5o
IgogICAgICIke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0vVUlQcm9jZXNzL0FQSS9lZmwvZXdr
X3VybF9yZXF1ZXN0LmgiCkBAIC0zNDcsNiArMzUxLDcgQEAgU0VUKEVXSzJVbml0VGVzdHNfQklO
QVJJRVMKICAgICB0ZXN0X2V3azJfcmVmcHRyX2V2YXNfb2JqZWN0CiAgICAgdGVzdF9ld2syX2lu
dGVudHMKICAgICB0ZXN0X2V3azJfc2V0dGluZ3MKKyAgICB0ZXN0X2V3azJfc3RvcmFnZV9tYW5h
Z2VyCiAgICAgdGVzdF9ld2syX3RleHRfY2hlY2tlcgogICAgIHRlc3RfZXdrMl92aWV3CiApCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9FV2ViS2l0Mi5oIGIv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvRVdlYktpdDIuaAppbmRleCAxN2FmYjEx
NWRkNWUyOGE0NzAxNmNmNjlhODNhNzYxYzE2Njg5YmE2Li5kZjNiOWY2MzUyN2FiMTA1MWNhZjZi
ZTRkZGY5MWFjYjJmZjc5YjUwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL2VmbC9FV2ViS2l0Mi5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZs
L0VXZWJLaXQyLmgKQEAgLTQzLDcgKzQzLDkgQEAKICNpbmNsdWRlICJld2tfbmF2aWdhdGlvbl9w
b2xpY3lfZGVjaXNpb24uaCIKICNpbmNsdWRlICJld2tfcG9wdXBfbWVudV9pdGVtLmgiCiAjaW5j
bHVkZSAiZXdrX3Jlc291cmNlLmgiCisjaW5jbHVkZSAiZXdrX3NlY3VyaXR5X29yaWdpbi5oIgog
I2luY2x1ZGUgImV3a19zZXR0aW5ncy5oIgorI2luY2x1ZGUgImV3a19zdG9yYWdlX21hbmFnZXIu
aCIKICNpbmNsdWRlICJld2tfdGV4dF9jaGVja2VyLmgiCiAjaW5jbHVkZSAiZXdrX3RvdWNoLmgi
CiAjaW5jbHVkZSAiZXdrX3VybF9yZXF1ZXN0LmgiCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfY29udGV4dC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL2VmbC9ld2tfY29udGV4dC5jcHAKaW5kZXggNWQyNTE0MzA3N2EzNTNjYTA3NDQz
OGVkYTQ5Y2QxOWEzNDk4ZDY0Yy4uYTA5Y2Y3ZDI2MDA3MDUzNDkwNTkxYTRmNDM3NTE4MmFjZmI4
ZWZmYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2Nv
bnRleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19jb250
ZXh0LmNwcApAQCAtMzgsNiArMzgsNyBAQAogI2luY2x1ZGUgImV3a19jb29raWVfbWFuYWdlcl9w
cml2YXRlLmgiCiAjaW5jbHVkZSAiZXdrX2Zhdmljb25fZGF0YWJhc2VfcHJpdmF0ZS5oIgogI2lu
Y2x1ZGUgImV3a19wcml2YXRlLmgiCisjaW5jbHVkZSAiZXdrX3N0b3JhZ2VfbWFuYWdlcl9wcml2
YXRlLmgiCiAjaW5jbHVkZSAiZXdrX3VybF9zY2hlbWVfcmVxdWVzdF9wcml2YXRlLmgiCiAjaW5j
bHVkZSA8V2ViQ29yZS9GaWxlU3lzdGVtLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9JY29uRGF0YWJh
c2UuaD4KQEAgLTE2NCw2ICsxNjUsMTQgQEAgRXdrX0Zhdmljb25fRGF0YWJhc2UqIEV3a19Db250
ZXh0OjpmYXZpY29uRGF0YWJhc2UoKQogICAgIHJldHVybiBtX2Zhdmljb25EYXRhYmFzZS5nZXQo
KTsKIH0KIAorRXdrX1N0b3JhZ2VfTWFuYWdlciogRXdrX0NvbnRleHQ6OnN0b3JhZ2VNYW5hZ2Vy
KCkKK3sKKyAgICBpZiAoIW1fc3RvcmFnZU1hbmFnZXIpCisgICAgICAgIG1fc3RvcmFnZU1hbmFn
ZXIgPSBFd2tfU3RvcmFnZV9NYW5hZ2VyOjpjcmVhdGUoV0tDb250ZXh0R2V0S2V5VmFsdWVTdG9y
YWdlTWFuYWdlcihtX2NvbnRleHQuZ2V0KCkpKTsKKworICAgIHJldHVybiBtX3N0b3JhZ2VNYW5h
Z2VyLmdldCgpOworfQorCiBSZXF1ZXN0TWFuYWdlckNsaWVudEVmbCogRXdrX0NvbnRleHQ6OnJl
cXVlc3RNYW5hZ2VyKCkKIHsKICAgICByZXR1cm4gbV9yZXF1ZXN0TWFuYWdlckNsaWVudC5nZXQo
KTsKQEAgLTIyMSw2ICsyMzAsMTMgQEAgRXdrX0Zhdmljb25fRGF0YWJhc2UqIGV3a19jb250ZXh0
X2Zhdmljb25fZGF0YWJhc2VfZ2V0KGNvbnN0IEV3a19Db250ZXh0KiBld2tDb24KICAgICByZXR1
cm4gY29uc3RfY2FzdDxFd2tfQ29udGV4dCo+KGV3a0NvbnRleHQpLT5mYXZpY29uRGF0YWJhc2Uo
KTsKIH0KIAorRXdrX1N0b3JhZ2VfTWFuYWdlciogZXdrX2NvbnRleHRfc3RvcmFnZV9tYW5hZ2Vy
X2dldChjb25zdCBFd2tfQ29udGV4dCogZXdrQ29udGV4dCkKK3sKKyAgICBFSU5BX1NBRkVUWV9P
Tl9OVUxMX1JFVFVSTl9WQUwoZXdrQ29udGV4dCwgMCk7CisKKyAgICByZXR1cm4gY29uc3RfY2Fz
dDxFd2tfQ29udGV4dCo+KGV3a0NvbnRleHQpLT5zdG9yYWdlTWFuYWdlcigpOworfQorCiBXS0Nv
bnRleHRSZWYgRXdrX0NvbnRleHQ6OndrQ29udGV4dCgpCiB7CiAgICAgcmV0dXJuIG1fY29udGV4
dC5nZXQoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3
a19jb250ZXh0LmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfY29udGV4
dC5oCmluZGV4IGY2YjhiYjY3ZDI1ZDg3YmE5ZDAzMjFkMWEzNzdlZmI4N2Y4MWYzMDYuLjBkNmI3
NGFhYzk4NTM0MTI1MGYxOWRkMTlhOGNiZjJlZTRlYTllNWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19jb250ZXh0LmgKKysrIGIvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2NvbnRleHQuaApAQCAtNDAsNiArNDAsNyBAQAogI2lu
Y2x1ZGUgImV3a19jb29raWVfbWFuYWdlci5oIgogI2luY2x1ZGUgImV3a19mYXZpY29uX2RhdGFi
YXNlLmgiCiAjaW5jbHVkZSAiZXdrX25hdmlnYXRpb25fZGF0YS5oIgorI2luY2x1ZGUgImV3a19z
dG9yYWdlX21hbmFnZXIuaCIKICNpbmNsdWRlICJld2tfdXJsX3NjaGVtZV9yZXF1ZXN0LmgiCiAj
aW5jbHVkZSA8RXZhcy5oPgogCkBAIC0xOTIsNiArMTkzLDE1IEBAIEVBUEkgRXdrX0Nvb2tpZV9N
YW5hZ2VyICpld2tfY29udGV4dF9jb29raWVfbWFuYWdlcl9nZXQoY29uc3QgRXdrX0NvbnRleHQg
KmNvbnRlCiBFQVBJIEV3a19GYXZpY29uX0RhdGFiYXNlICpld2tfY29udGV4dF9mYXZpY29uX2Rh
dGFiYXNlX2dldChjb25zdCBFd2tfQ29udGV4dCAqY29udGV4dCk7CiAKIC8qKgorICogR2V0cyB0
aGUgc3RvcmFnZSBtYW5hZ2VyIGluc3RhbmNlIGZvciB0aGlzIEBhIGNvbnRleHQuCisgKgorICog
QHBhcmFtIGNvbnRleHQgY29udGV4dCBvYmplY3QgdG8gcXVlcnkuCisgKgorICogQHJldHVybiBF
d2tfU3RvcmFnZV9NYW5hZ2VyIG9iamVjdCBpbnN0YW5jZSBvciBAYyBOVUxMIGluIGNhc2Ugb2Yg
ZmFpbHVyZS4KKyAqLworRUFQSSBFd2tfU3RvcmFnZV9NYW5hZ2VyICpld2tfY29udGV4dF9zdG9y
YWdlX21hbmFnZXJfZ2V0KGNvbnN0IEV3a19Db250ZXh0ICpjb250ZXh0KTsKKworLyoqCiAgKiBS
ZWdpc3RlciBAYSBzY2hlbWUgaW4gQGEgY29udGV4dC4KICAqCiAgKiBXaGVuIGFuIFVSTCByZXF1
ZXN0IHdpdGggQGEgc2NoZW1lIGlzIG1hZGUgaW4gdGhlICNFd2tfQ29udGV4dCwgdGhlIGNhbGxi
YWNrCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfY29u
dGV4dF9wcml2YXRlLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfY29u
dGV4dF9wcml2YXRlLmgKaW5kZXggY2YzOWVjMjNlOGEwZTE0OGU1MjdkN2VkZTRhYmNhN2RlNTI5
Zjk5OS4uNTc1YzIzNDdkMTMxODdjYWQ2ZWM1MDJkYWM2ZGY5YTg3OTA3MzUxOSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2NvbnRleHRfcHJpdmF0ZS5o
CisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19jb250ZXh0X3ByaXZh
dGUuaApAQCAtMjgsNiArMjgsNyBAQAogY2xhc3MgRXdrX1VybF9TY2hlbWVfUmVxdWVzdDsKIGNs
YXNzIEV3a19Db29raWVfTWFuYWdlcjsKIGNsYXNzIEV3a19GYXZpY29uX0RhdGFiYXNlOworY2xh
c3MgRXdrX1N0b3JhZ2VfTWFuYWdlcjsKICNpZiBFTkFCTEUoQkFUVEVSWV9TVEFUVVMpCiBjbGFz
cyBCYXR0ZXJ5UHJvdmlkZXI7CiAjZW5kaWYKQEAgLTU3LDYgKzU4LDggQEAgcHVibGljOgogCiAg
ICAgRXdrX0Zhdmljb25fRGF0YWJhc2UqIGZhdmljb25EYXRhYmFzZSgpOwogCisgICAgRXdrX1N0
b3JhZ2VfTWFuYWdlciogc3RvcmFnZU1hbmFnZXIoKTsKKwogICAgIFdlYktpdDo6UmVxdWVzdE1h
bmFnZXJDbGllbnRFZmwqIHJlcXVlc3RNYW5hZ2VyKCk7CiAKICNpZiBFTkFCTEUoVklCUkFUSU9O
KQpAQCAtODQsNiArODcsNyBAQCBwcml2YXRlOgogCiAgICAgT3duUHRyPEV3a19Db29raWVfTWFu
YWdlcj4gbV9jb29raWVNYW5hZ2VyOwogICAgIE93blB0cjxFd2tfRmF2aWNvbl9EYXRhYmFzZT4g
bV9mYXZpY29uRGF0YWJhc2U7CisgICAgT3duUHRyPEV3a19TdG9yYWdlX01hbmFnZXI+IG1fc3Rv
cmFnZU1hbmFnZXI7CiAjaWYgRU5BQkxFKEJBVFRFUllfU1RBVFVTKQogICAgIFJlZlB0cjxCYXR0
ZXJ5UHJvdmlkZXI+IG1fYmF0dGVyeVByb3ZpZGVyOwogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfc2VjdXJpdHlfb3JpZ2luLmNwcCBiL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19zZWN1cml0eV9vcmlnaW4uY3BwCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLmJjMGY4YzdhZWY3ZWU3YjZhYTcwNTU4Yzc3NjNmNTQwMGRiMTRkMjYKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfc2VjdXJp
dHlfb3JpZ2luLmNwcApAQCAtMCwwICsxLDkwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEy
IFNhbXN1bmcgRWxlY3Ryb25pY3MuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5E
IENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJ
R0hUIEhPTERFUiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HCisgKiBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJld2tfc2VjdXJpdHlfb3Jp
Z2luLmgiCisKKyNpbmNsdWRlICJXS0FQSUNhc3QuaCIKKyNpbmNsdWRlICJXS1NlY3VyaXR5T3Jp
Z2luLmgiCisjaW5jbHVkZSAiZXdrX3NlY3VyaXR5X29yaWdpbl9wcml2YXRlLmgiCisKK3VzaW5n
IG5hbWVzcGFjZSBXZWJLaXQ7CisKK0V3a19TZWN1cml0eV9PcmlnaW46OkV3a19TZWN1cml0eV9P
cmlnaW4oV0tTZWN1cml0eU9yaWdpblJlZiBvcmlnaW5SZWYpCisgICAgOiBtX3drT3JpZ2luKG9y
aWdpblJlZikKKyAgICAsIG1faG9zdChBZG9wdFdLLCBXS1NlY3VyaXR5T3JpZ2luQ29weUhvc3Qo
b3JpZ2luUmVmKSkKKyAgICAsIG1fcHJvdG9jb2woQWRvcHRXSywgV0tTZWN1cml0eU9yaWdpbkNv
cHlQcm90b2NvbChvcmlnaW5SZWYpKQoreyB9CisKK2NvbnN0IGNoYXIqIEV3a19TZWN1cml0eV9P
cmlnaW46Omhvc3QoKSBjb25zdAoreworICAgIHJldHVybiBtX2hvc3Q7Cit9CisKK2NvbnN0IGNo
YXIqIEV3a19TZWN1cml0eV9PcmlnaW46OnByb3RvY29sKCkgY29uc3QKK3sKKyAgICByZXR1cm4g
bV9wcm90b2NvbDsKK30KKwordWludDMyX3QgRXdrX1NlY3VyaXR5X09yaWdpbjo6cG9ydCgpIGNv
bnN0Cit7CisgICAgcmV0dXJuIFdLU2VjdXJpdHlPcmlnaW5HZXRQb3J0KG1fd2tPcmlnaW4uZ2V0
KCkpOworfQorCitFd2tfU2VjdXJpdHlfT3JpZ2luKiBld2tfc2VjdXJpdHlfb3JpZ2luX3JlZihF
d2tfU2VjdXJpdHlfT3JpZ2luKiBvcmlnaW4pCit7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9S
RVRVUk5fVkFMKG9yaWdpbiwgMCk7CisKKyAgICBvcmlnaW4tPnJlZigpOworICAgIHJldHVybiBv
cmlnaW47Cit9CisKK3ZvaWQgZXdrX3NlY3VyaXR5X29yaWdpbl91bnJlZihFd2tfU2VjdXJpdHlf
T3JpZ2luKiBvcmlnaW4pCit7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4ob3JpZ2lu
KTsKKworICAgIG9yaWdpbi0+ZGVyZWYoKTsKK30KKworY29uc3QgY2hhciogZXdrX3NlY3VyaXR5
X29yaWdpbl9ob3N0X2dldChjb25zdCBFd2tfU2VjdXJpdHlfT3JpZ2luKiBvcmlnaW4pCit7Cisg
ICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKG9yaWdpbiwgMCk7CisKKyAgICByZXR1
cm4gb3JpZ2luLT5ob3N0KCk7Cit9CisKK2NvbnN0IGNoYXIqIGV3a19zZWN1cml0eV9vcmlnaW5f
cHJvdG9jb2xfZ2V0KGNvbnN0IEV3a19TZWN1cml0eV9PcmlnaW4qIG9yaWdpbikKK3sKKyAgICBF
SU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwob3JpZ2luLCAwKTsKKworICAgIHJldHVybiBv
cmlnaW4tPnByb3RvY29sKCk7Cit9CisKK3VpbnQzMl90IGV3a19zZWN1cml0eV9vcmlnaW5fcG9y
dF9nZXQoY29uc3QgRXdrX1NlY3VyaXR5X09yaWdpbiogb3JpZ2luKQoreworICAgIEVJTkFfU0FG
RVRZX09OX05VTExfUkVUVVJOX1ZBTChvcmlnaW4sIDApOworCisgICAgcmV0dXJuIG9yaWdpbi0+
cG9ydCgpOworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwv
ZXdrX3NlY3VyaXR5X29yaWdpbi5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwv
ZXdrX3NlY3VyaXR5X29yaWdpbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjllYTU2M2FjYjRiNGE1MzJhZGM5NDgy
NDFhZmMyMzU2ZjQxNzY3NGIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL2VmbC9ld2tfc2VjdXJpdHlfb3JpZ2luLmgKQEAgLTAsMCArMSwxMDIgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgU2Ftc3VuZyBFbGVjdHJvbmljcy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcKKyAqIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLyoqCisgKiBAZmlsZSAgICBl
d2tfc2VjdXJpdHlfb3JpZ2luLmgKKyAqIEBicmllZiAgIFNlY3VyaXR5IE9yaWdpbiBBUEkuCisg
KgorICogU2VjdXJpdHkgT3JpZ2luIGlzIHRoZSBtZWNoYW5pc20gdGhhdCBkZWZpbmVzIHRoZSBh
Y2Nlc3MgbGltaXRzIG9mIGEgd2Vic2l0ZS4KKyAqIEJhc2VkIG9uIGluZm9ybWF0aW9uIHN1Y2gg
YXMgZG9tYWluLCBwcm90b2NvbCBhbmQgcG9ydCwgeW91IGNhbiBvciBjYW5ub3QgZ3JhbnQKKyAq
IGF1dGhvcml6YXRpb24gZm9yIGFjY2Vzc2luZyBkYXRhIGFuZCBwZXJmb3JtaW5nIGNlcnRhaW4g
dGFza3MuCisgKi8KKworI2lmbmRlZiBld2tfc2VjdXJpdHlfb3JpZ2luX2gKKyNkZWZpbmUgZXdr
X3NlY3VyaXR5X29yaWdpbl9oCisKKyNpbmNsdWRlIDxFaW5hLmg+CisKKyNpZmRlZiBfX2NwbHVz
cGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKKworLyoqIENyZWF0ZXMgYSB0eXBlIG5hbWUgZm9y
IEV3a19TZWN1cml0eV9PcmlnaW4uICovCit0eXBlZGVmIHN0cnVjdCBFd2tfU2VjdXJpdHlfT3Jp
Z2luIEV3a19TZWN1cml0eV9PcmlnaW47CisKKy8qKgorICogSW5jcmVhc2VzIHRoZSByZWZlcmVu
Y2UgY291bnQgb2YgdGhlIGdpdmVuIG9iamVjdC4KKyAqCisgKiBAcGFyYW0gb3JpZ2luIHRoZSBv
cmlnaW4gb2JqZWN0IHRvIGluY3JlYXNlIHRoZSByZWZlcmVuY2UgY291bnQKKyAqCisgKiBAcmV0
dXJuIGEgcG9pbnRlciB0byB0aGUgb2JqZWN0IG9uIHN1Y2Nlc3MsIEBjIE5VTEwgb3RoZXJ3aXNl
LgorICovCitFQVBJIEV3a19TZWN1cml0eV9PcmlnaW4gKmV3a19zZWN1cml0eV9vcmlnaW5fcmVm
KEV3a19TZWN1cml0eV9PcmlnaW4gKm8pOworCisvKioKKyAqIERlY3JlYXNlcyB0aGUgcmVmZXJl
bmNlIGNvdW50IG9mIHRoZSBnaXZlbiBvYmplY3QsIHBvc3NpYmx5IGZyZWVpbmcgaXQuCisgKgor
ICogV2hlbiB0aGUgcmVmZXJlbmNlIGNvdW50IHJlYWNoZXMgMCwgdGhlIG9yaWdpbiBpcyBmcmVl
ZC4KKyAqCisgKiBAcGFyYW0gb3JpZ2luIHRoZSBvcmlnaW4gb2JqZWN0IHRvIGRlY3JlYXNlIHRo
ZSByZWZlcmVuY2UgY291bnQKKyAqLworRUFQSSB2b2lkIGV3a19zZWN1cml0eV9vcmlnaW5fdW5y
ZWYoRXdrX1NlY3VyaXR5X09yaWdpbiAqbyk7CisKKy8qKgorICogUmV0dXJucyB0aGUgaG9zdCBv
ZiB0aGUgc2VjdXJpdHkgb3JpZ2luLgorICoKKyAqIEBwYXJhbSBvIHNlY3VyaXR5IG9yaWdpbiBv
YmplY3QKKyAqCisgKiBAcmV0dXJuIHRoZSBob3N0IGRvbWFpbiBwb2ludGVyIG9yIEBjIE5VTEwg
aWYgdGhlcmUgaXMgbm90IGEgaG9zdCBzY2hlbWUuCisgKiAgICAgICAgIFRoaXMgcG9pbnRlciBp
cyBndWFyYW50ZWVkIHRvIGJlIGVpbmFfc3RyaW5nc2hhcmUsIHNvIHdoZW5ldmVyIHBvc3NpYmxl
CisgKiAgICAgICAgIHNhdmUgeW91cnNlbGYgZnJvbSBjcHUgY3ljbGVzIGFuZCB1c2UgZWluYV9z
dHJpbmdzaGFyZV9yZWYoKQorICogICAgICAgICBpbnN0ZWFkIG9mIGVpbmFfc3RyaW5nc2hhcmVf
YWRkKCkgb3Igc3RyZHVwKCkuCisgKi8KK0VBUEkgY29uc3QgY2hhciAqZXdrX3NlY3VyaXR5X29y
aWdpbl9ob3N0X2dldChjb25zdCBFd2tfU2VjdXJpdHlfT3JpZ2luICpvKTsKKworLyoqCisgKiBS
ZXR1cm5zIHRoZSBwb3J0IG9mIHRoZSBzZWN1cml0eSBvcmlnaW4uCisgKgorICogQHBhcmFtIG8g
c2VjdXJpdHkgb3JpZ2luIG9iamVjdAorICoKKyAqIEByZXR1cm4gdGhlIHBvcnQgbnVtYmVyIG9y
IEBjIDAgaWYgdGhlcmUgaXMgbm90IGEgcHJvcGVyIHNlY3VyaXR5IG9yaWdpbiBzY2hlbWUKKyAq
LworRUFQSSB1aW50MzJfdCBld2tfc2VjdXJpdHlfb3JpZ2luX3BvcnRfZ2V0KGNvbnN0IEV3a19T
ZWN1cml0eV9PcmlnaW4gKm8pOworCisvKioKKyAqIFJldHVybnMgdGhlIHByb3RvY29sIG9mIHRo
ZSBzZWN1cml0eSBvcmlnaW4uCisgKgorICogQHBhcmFtIG8gc2VjdXJpdHkgb3JpZ2luIG9iamVj
dAorICoKKyAqIEByZXR1cm4gdGhlIHByb3RvY29sIHNjaGVtZSBwb2ludGVyIG9yIEBjIE5VTEwg
aWYgdGhlcmUgaXMgbm90IGEgcHJvdG9jb2wgc2NoZW1lLgorICogICAgICAgICBUaGlzIHBvaW50
ZXIgaXMgZ3VhcmFudGVlZCB0byBiZSBlaW5hX3N0cmluZ3NoYXJlLCBzbyB3aGVuZXZlciBwb3Nz
aWJsZQorICogICAgICAgICBzYXZlIHlvdXJzZWxmIGZyb20gY3B1IGN5Y2xlcyBhbmQgdXNlIGVp
bmFfc3RyaW5nc2hhcmVfcmVmKCkKKyAqICAgICAgICAgaW5zdGVhZCBvZiBlaW5hX3N0cmluZ3No
YXJlX2FkZCgpIG9yIHN0cmR1cCgpLgorICovCitFQVBJIGNvbnN0IGNoYXIgKmV3a19zZWN1cml0
eV9vcmlnaW5fcHJvdG9jb2xfZ2V0KGNvbnN0IEV3a19TZWN1cml0eV9PcmlnaW4gKm8pOworCisj
aWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorI2VuZGlmIC8vIGV3a19zZWN1cml0eV9vcmln
aW5faApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3Nl
Y3VyaXR5X29yaWdpbl9wcml2YXRlLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2Vm
bC9ld2tfc2VjdXJpdHlfb3JpZ2luX3ByaXZhdGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wNDAxMjQxMGVmNzc2
MWYzZTE1NmZlYjUxOWJkYmQxMDQxNjAzMTNlCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3NlY3VyaXR5X29yaWdpbl9wcml2YXRlLmgKQEAg
LTAsMCArMSw1NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBTYW1zdW5nIEVsZWN0cm9u
aWNzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAq
ICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORworICogTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVm
IGV3a19zZWN1cml0eV9vcmlnaW5fcHJpdmF0ZV9oCisjZGVmaW5lIGV3a19zZWN1cml0eV9vcmln
aW5fcHJpdmF0ZV9oCisKKyNpbmNsdWRlICJXS0VpbmFTaGFyZWRTdHJpbmcuaCIKKyNpbmNsdWRl
ICJXS1NlY3VyaXR5T3JpZ2luLmgiCisjaW5jbHVkZSA8V2ViS2l0Mi9XS0Jhc2UuaD4KKyNpbmNs
dWRlIDx3dGYvUGFzc1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CisKK2Ns
YXNzIEV3a19TZWN1cml0eV9PcmlnaW4gOiBwdWJsaWMgUmVmQ291bnRlZDxFd2tfU2VjdXJpdHlf
T3JpZ2luPiB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8RXdrX1NlY3VyaXR5X09y
aWdpbj4gY3JlYXRlKFdLU2VjdXJpdHlPcmlnaW5SZWYgb3JpZ2luUmVmKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBFd2tfU2VjdXJpdHlfT3JpZ2luKG9yaWdpblJlZikpOwor
ICAgIH0KKworICAgIGNvbnN0IGNoYXIqIGhvc3QoKSBjb25zdDsKKyAgICBjb25zdCBjaGFyKiBw
cm90b2NvbCgpIGNvbnN0OworICAgIHVpbnQzMl90IHBvcnQoKSBjb25zdDsKKworcHJpdmF0ZToK
KyAgICBleHBsaWNpdCBFd2tfU2VjdXJpdHlfT3JpZ2luKFdLU2VjdXJpdHlPcmlnaW5SZWYgb3Jp
Z2luUmVmKTsKKworICAgIFdLUmV0YWluUHRyPFdLU2VjdXJpdHlPcmlnaW5SZWY+IG1fd2tPcmln
aW47CisgICAgV0tFaW5hU2hhcmVkU3RyaW5nIG1faG9zdDsKKyAgICBXS0VpbmFTaGFyZWRTdHJp
bmcgbV9wcm90b2NvbDsKK307CisKKyNlbmRpZiAvLyBld2tfc2VjdXJpdHlfb3JpZ2luX3ByaXZh
dGVfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3N0
b3JhZ2VfbWFuYWdlci5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tf
c3RvcmFnZV9tYW5hZ2VyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5kZWQ2MTJjYzc3N2JkMjk0ZDAxZmU4ZmRh
YjY5OGYyMmQ4NDY2YTFlCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9lZmwvZXdrX3N0b3JhZ2VfbWFuYWdlci5jcHAKQEAgLTAsMCArMSwxMDEgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgU2Ftc3VuZyBFbGVjdHJvbmljcy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRI
RSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcKKyAqIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgImV3a19zdG9yYWdlX21hbmFnZXIuaCIKKworI2luY2x1ZGUgIldLQVBJQ2FzdC5oIgor
I2luY2x1ZGUgIldLQXJyYXkuaCIKKyNpbmNsdWRlICJXS0tleVZhbHVlU3RvcmFnZU1hbmFnZXIu
aCIKKyNpbmNsdWRlICJld2tfZXJyb3JfcHJpdmF0ZS5oIgorI2luY2x1ZGUgImV3a19zZWN1cml0
eV9vcmlnaW4uaCIKKyNpbmNsdWRlICJld2tfc2VjdXJpdHlfb3JpZ2luX3ByaXZhdGUuaCIKKyNp
bmNsdWRlICJld2tfc3RvcmFnZV9tYW5hZ2VyX3ByaXZhdGUuaCIKKyNpbmNsdWRlIDx3dGYvUmVm
Q291bnRlZC5oPgorCit1c2luZyBuYW1lc3BhY2UgV2ViS2l0OworCitFd2tfU3RvcmFnZV9NYW5h
Z2VyOjpFd2tfU3RvcmFnZV9NYW5hZ2VyKFdLS2V5VmFsdWVTdG9yYWdlTWFuYWdlclJlZiB3a1N0
b3JhZ2VNYW5hZ2VyUmVmKQorICAgIDogbV93a1N0b3JhZ2VNYW5hZ2VyKHdrU3RvcmFnZU1hbmFn
ZXJSZWYpCit7IH0KKwordm9pZCBFd2tfU3RvcmFnZV9NYW5hZ2VyOjpnZXRTdG9yYWdlT3JpZ2lu
cyh2b2lkKiBjb250ZXh0LCBXS0tleVZhbHVlU3RvcmFnZU1hbmFnZXJHZXRLZXlWYWx1ZVN0b3Jh
Z2VPcmlnaW5zRnVuY3Rpb24gY2FsbGJhY2spIGNvbnN0Cit7CisgICAgV0tLZXlWYWx1ZVN0b3Jh
Z2VNYW5hZ2VyR2V0S2V5VmFsdWVTdG9yYWdlT3JpZ2lucyhtX3drU3RvcmFnZU1hbmFnZXIuZ2V0
KCksIGNvbnRleHQsIGNhbGxiYWNrKTsKK30KKworRWluYV9MaXN0KiBFd2tfU3RvcmFnZV9NYW5h
Z2VyOjpjcmVhdGVPcmlnaW5MaXN0KFdLQXJyYXlSZWYgb3JpZ2lucykgY29uc3QKK3sKKyAgICBF
aW5hX0xpc3QqIG9yaWdpbkxpc3QgPSAwOworICAgIGNvbnN0IHNpemVfdCBsZW5ndGggPSBXS0Fy
cmF5R2V0U2l6ZShvcmlnaW5zKTsKKworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGVuZ3Ro
OyArK2kpIHsKKyAgICAgICAgV0tTZWN1cml0eU9yaWdpblJlZiB3a09yaWdpblJlZiA9IHN0YXRp
Y19jYXN0PFdLU2VjdXJpdHlPcmlnaW5SZWY+KFdLQXJyYXlHZXRJdGVtQXRJbmRleChvcmlnaW5z
LCBpKSk7CisgICAgICAgIFJlZlB0cjxFd2tfU2VjdXJpdHlfT3JpZ2luPiBvcmlnaW4gPSBtX3dy
YXBwZXJDYWNoZS5nZXQod2tPcmlnaW5SZWYpOworICAgICAgICBpZiAoIW9yaWdpbikgeworICAg
ICAgICAgICAgb3JpZ2luID0gRXdrX1NlY3VyaXR5X09yaWdpbjo6Y3JlYXRlKHdrT3JpZ2luUmVm
KTsKKyAgICAgICAgICAgIG1fd3JhcHBlckNhY2hlLnNldCh3a09yaWdpblJlZiwgb3JpZ2luKTsK
KyAgICAgICAgfQorICAgICAgICBvcmlnaW5MaXN0ID0gZWluYV9saXN0X2FwcGVuZChvcmlnaW5M
aXN0LCBld2tfc2VjdXJpdHlfb3JpZ2luX3JlZihvcmlnaW4uZ2V0KCkpKTsKKyAgICB9CisKKyAg
ICByZXR1cm4gb3JpZ2luTGlzdDsKK30KKworc3RydWN0IEV3a19TdG9yYWdlX09yaWdpbnNfQXN5
bmNfR2V0X0NvbnRleHQgeworICAgIEV3a19TdG9yYWdlX01hbmFnZXIqIG1hbmFnZXI7CisgICAg
RXdrX1N0b3JhZ2VfT3JpZ2luc19HZXRfQ2IgY2FsbGJhY2s7CisgICAgdm9pZCogdXNlckRhdGE7
CisKKyAgICBFd2tfU3RvcmFnZV9PcmlnaW5zX0FzeW5jX0dldF9Db250ZXh0KEV3a19TdG9yYWdl
X01hbmFnZXIqIG1hbmFnZXIsIEV3a19TdG9yYWdlX09yaWdpbnNfR2V0X0NiIGNhbGxiYWNrLCB2
b2lkKiB1c2VyRGF0YSkKKyAgICAgICAgOiBtYW5hZ2VyKG1hbmFnZXIpCisgICAgICAgICwgY2Fs
bGJhY2soY2FsbGJhY2spCisgICAgICAgICwgdXNlckRhdGEodXNlckRhdGEpCisgICAgeyB9Cit9
OworCitzdGF0aWMgdm9pZCBnZXRTdG9yYWdlT3JpZ2luc0NhbGxiYWNrKFdLQXJyYXlSZWYgb3Jp
Z2lucywgV0tFcnJvclJlZiB3a0Vycm9yLCB2b2lkKiBjb250ZXh0KQoreworICAgIEVpbmFfTGlz
dCogb3JpZ2luTGlzdCA9IDA7CisgICAgRXdrX1N0b3JhZ2VfT3JpZ2luc19Bc3luY19HZXRfQ29u
dGV4dCogd2ViU3RvcmFnZUNvbnRleHQgPSBzdGF0aWNfY2FzdDxFd2tfU3RvcmFnZV9PcmlnaW5z
X0FzeW5jX0dldF9Db250ZXh0Kj4oY29udGV4dCk7CisKKyAgICBvcmlnaW5MaXN0ID0gd2ViU3Rv
cmFnZUNvbnRleHQtPm1hbmFnZXItPmNyZWF0ZU9yaWdpbkxpc3Qob3JpZ2lucyk7CisKKyAgICBP
d25QdHI8RXdrX0Vycm9yPiBld2tFcnJvciA9IEV3a19FcnJvcjo6Y3JlYXRlKHdrRXJyb3IpOwor
ICAgIHdlYlN0b3JhZ2VDb250ZXh0LT5jYWxsYmFjayhvcmlnaW5MaXN0LCBld2tFcnJvci5nZXQo
KSwgd2ViU3RvcmFnZUNvbnRleHQtPnVzZXJEYXRhKTsKKworICAgIGRlbGV0ZSB3ZWJTdG9yYWdl
Q29udGV4dDsKK30KKworRWluYV9Cb29sIGV3a19zdG9yYWdlX21hbmFnZXJfb3JpZ2luc19nZXQo
RXdrX1N0b3JhZ2VfTWFuYWdlciogZXdrU3RvcmFnZU1hbmFnZXIsIEV3a19TdG9yYWdlX09yaWdp
bnNfR2V0X0NiIGNhbGxiYWNrLCB2b2lkKiB1c2VyRGF0YSkKK3sKKyAgICBFSU5BX1NBRkVUWV9P
Tl9OVUxMX1JFVFVSTl9WQUwoZXdrU3RvcmFnZU1hbmFnZXIsIGZhbHNlKTsKKyAgICBFSU5BX1NB
RkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoY2FsbGJhY2ssIGZhbHNlKTsKKworICAgIEV3a19TdG9y
YWdlX09yaWdpbnNfQXN5bmNfR2V0X0NvbnRleHQqIGNvbnRleHQgPSBuZXcgRXdrX1N0b3JhZ2Vf
T3JpZ2luc19Bc3luY19HZXRfQ29udGV4dChld2tTdG9yYWdlTWFuYWdlciwgY2FsbGJhY2ssIHVz
ZXJEYXRhKTsKKyAgICBld2tTdG9yYWdlTWFuYWdlci0+Z2V0U3RvcmFnZU9yaWdpbnMoY29udGV4
dCwgZ2V0U3RvcmFnZU9yaWdpbnNDYWxsYmFjayk7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19zdG9yYWdlX21h
bmFnZXIuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19zdG9yYWdlX21h
bmFnZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi4xYjA0OWQ5MjdmNGE3MmY0YjNmYTAwYzRkNWU4YTJhZGQ1ZjUx
ZDQ0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwv
ZXdrX3N0b3JhZ2VfbWFuYWdlci5oCkBAIC0wLDAgKzEsNzMgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTIgU2Ftc3VuZyBFbGVjdHJvbmljcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9M
REVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRI
RSBDT1BZUklHSFQgSE9MREVSIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcKKyAqIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworLyoqCisgKiBAZmlsZSAgICBld2tfc3RvcmFnZV9tYW5hZ2VyLmgK
KyAqIEBicmllZiAgRGVzY3JpYmVzIHRoZSBFd2sgU3RvcmFnZSBNYW5hZ2VyIEFQSS4KKyAqCisg
KiBFd2sgU3RvcmFnZSBNYW5hZ2VyIG1hbmFnZXMgd2ViIHN0b3JhZ2UuCisgKi8KKworI2lmbmRl
ZiBld2tfc3RvcmFnZV9tYW5hZ2VyX2gKKyNkZWZpbmUgZXdrX3N0b3JhZ2VfbWFuYWdlcl9oCisK
KyNpbmNsdWRlICJld2tfZXJyb3IuaCIKKyNpbmNsdWRlIDxFaW5hLmg+CisKKyNpZmRlZiBfX2Nw
bHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKKworLyoqIENyZWF0ZXMgYSB0eXBlIG5hbWUg
Zm9yIEV3a19TdG9yYWdlX01hbmFnZXIuICovCit0eXBlZGVmIHN0cnVjdCBFd2tfU3RvcmFnZV9N
YW5hZ2VyIEV3a19TdG9yYWdlX01hbmFnZXI7CisKKy8qKgorICogQHR5cGVkZWYgRXdrX1N0b3Jh
Z2VfT3JpZ2luc19HZXRfQ2IgRXdrX1N0b3JhZ2VfT3JpZ2luc19HZXRfQ2IKKyAqIEBicmllZiBD
YWxsYmFjayB0eXBlIGZvciB1c2Ugd2l0aCBld2tfc3RvcmFnZV9tYW5hZ2VyX29yaWdpbnNfZ2V0
KCkuCisgKgorICogQHBhcmFtIG9yaWdpbnMgQGMgRWluYV9MaXN0IGNvbnRhaW5pbmcgQGMgRXdr
X1NlY3VyaXR5X09yaWdpbiBlbGVtZW50cyBvciBAYyBOVUxMIGluIGNhc2Ugb2YgZXJyb3IsCisg
KiAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBFaW5hX0xpc3QgYW5kIGl0cyBpdGVtcyBzaG91
bGQgYmUgZnJlZWQgYWZ0ZXIgdXNlLiBVc2UgZXdrX3NlY3VyaXR5X29yaWdpbl91bnJlZigpCisg
KiAgICAgICAgICAgICAgICAgICAgICAgIHRvIGZyZWUgdGhlIGl0ZW1zCisgKi8KK3R5cGVkZWYg
dm9pZCAoKkV3a19TdG9yYWdlX09yaWdpbnNfR2V0X0NiKShFaW5hX0xpc3QgKm9yaWdpbnMsIEV3
a19FcnJvciAqZXJyb3IsIHZvaWQgKnVzZXJfZGF0YSk7CisKKy8qKgorICogR2V0cyBsaXN0IG9m
IG9yaWdpbnMgdGhhdCBhcmUgc3RvcmVkIGluIHN0b3JhZ2UgZGIgYXN5bmNocm9ub3VzbHkuCisg
KgorICogVGhpcyBmdW5jdGlvbiBhbGxvY2F0ZXMgbWVtb3J5IGZvciBjb250ZXh0IHN0cnVjdHVy
ZSBtYWRlIGZyb20gY2FsbGJhY2sgYW5kIHVzZXJfZGF0YS4KKyAqCisgKiBAcGFyYW0gbWFuYWdl
ciBFd2tfU3RvcmFnZV9NYW5hZ2VyIG9iamVjdAorICogQHBhcmFtIGNhbGxiYWNrIGNhbGxiYWNr
IHRvIGdldCBzdG9yYWdlIG9yaWdpbnMKKyAqIEBwYXJhbSB1c2VyX2RhdGEgdXNlcl9kYXRhIHdp
bGwgYmUgcGFzc2VkIHdoZW4gcmVzdWx0X2NhbGxiYWNrIGlzIGNhbGxlZAorICogICAgLUkuZS4s
IHVzZXIgZGF0YSB3aWxsIGJlIGtlcHQgdW50aWwgY2FsbGJhY2sgaXMgY2FsbGVkCisgKgorICog
QHJldHVybiBAYyBFSU5BX1RSVUUgb24gc3VjY2VzcywgQGMgRUlOQV9GQUxTRSBvbiBmYWlsdXJl
CisgKi8KK0VBUEkgRWluYV9Cb29sIGV3a19zdG9yYWdlX21hbmFnZXJfb3JpZ2luc19nZXQoRXdr
X1N0b3JhZ2VfTWFuYWdlciAqbWFuYWdlciwgRXdrX1N0b3JhZ2VfT3JpZ2luc19HZXRfQ2IgY2Fs
bGJhY2ssIHZvaWQgKnVzZXJfZGF0YSk7CisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlm
CisjZW5kaWYgLy8gZXdrX3N0b3JhZ2VfbWFuYWdlcl9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfc3RvcmFnZV9tYW5hZ2VyX3ByaXZhdGUuaCBiL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19zdG9yYWdlX21hbmFnZXJfcHJpdmF0
ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLjVlZWVhNDkxMzc5MTVkNGYyMDA3NTI3N2M4NzRjMTQwYjY5NjliOGQK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tf
c3RvcmFnZV9tYW5hZ2VyX3ByaXZhdGUuaApAQCAtMCwwICsxLDUyIEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEyIFNhbXN1bmcgRWxlY3Ryb25pY3MuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hU
IEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HCisgKiBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgZXdrX3N0b3JhZ2VfbWFuYWdlcl9wcml2YXRl
X2gKKyNkZWZpbmUgZXdrX3N0b3JhZ2VfbWFuYWdlcl9wcml2YXRlX2gKKworI2luY2x1ZGUgIldL
S2V5VmFsdWVTdG9yYWdlTWFuYWdlci5oIgorI2luY2x1ZGUgIldLUmV0YWluUHRyLmgiCisjaW5j
bHVkZSAiZXdrX3NlY3VyaXR5X29yaWdpbl9wcml2YXRlLmgiCisjaW5jbHVkZSA8V2ViS2l0Mi9X
S0Jhc2UuaD4KKyNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgorCitjbGFzcyBFd2tfU3RvcmFn
ZV9NYW5hZ2VyIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc093blB0cjxFd2tfU3RvcmFnZV9N
YW5hZ2VyPiBjcmVhdGUoV0tLZXlWYWx1ZVN0b3JhZ2VNYW5hZ2VyUmVmIHdrU3RvcmFnZU1hbmFn
ZXJSZWYpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3IEV3a19TdG9yYWdlX01h
bmFnZXIod2tTdG9yYWdlTWFuYWdlclJlZikpOworICAgIH0KKworICAgIEVpbmFfTGlzdCogY3Jl
YXRlT3JpZ2luTGlzdChXS0FycmF5UmVmIHdrTGlzdCkgY29uc3Q7CisgICAgdm9pZCBnZXRTdG9y
YWdlT3JpZ2lucyh2b2lkKiBjb250ZXh0LCBXS0tleVZhbHVlU3RvcmFnZU1hbmFnZXJHZXRLZXlW
YWx1ZVN0b3JhZ2VPcmlnaW5zRnVuY3Rpb24gY2FsbGJhY2spIGNvbnN0OworCitwcml2YXRlOgor
ICAgIGV4cGxpY2l0IEV3a19TdG9yYWdlX01hbmFnZXIoV0tLZXlWYWx1ZVN0b3JhZ2VNYW5hZ2Vy
UmVmIHdrU3RvcmFnZU1hbmFnZXJSZWYpOworCisgICAgV0tSZXRhaW5QdHI8V0tLZXlWYWx1ZVN0
b3JhZ2VNYW5hZ2VyUmVmPiBtX3drU3RvcmFnZU1hbmFnZXI7CisgICAgbXV0YWJsZSBIYXNoTWFw
PFdLU2VjdXJpdHlPcmlnaW5SZWYsIFJlZlB0cjxFd2tfU2VjdXJpdHlfT3JpZ2luPiA+IG1fd3Jh
cHBlckNhY2hlOworfTsKKworI2VuZGlmIC8vIGV3a19zdG9yYWdlX21hbmFnZXJfcHJpdmF0ZV9o
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC90ZXN0cy90ZXN0
X2V3azJfY29udGV4dC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC90ZXN0
cy90ZXN0X2V3azJfY29udGV4dC5jcHAKaW5kZXggMjdlNDZkYzFlNzBmOGI2MWFkMGU0ZjY3OWQ3
NTNhOThmZGM0ZDkyZC4uOTcwN2Q3Y2E3NjRjOGI2N2UzYTNiMmY0NThmY2QyMTI5ZjE0MjFlOCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvdGVzdHMvdGVzdF9l
d2syX2NvbnRleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL3Rl
c3RzL3Rlc3RfZXdrMl9jb250ZXh0LmNwcApAQCAtNjEsNiArNjEsMTQgQEAgVEVTVF9GKEVXSzJV
bml0VGVzdEJhc2UsIGV3a19jb250ZXh0X2Zhdmljb25fZGF0YWJhc2VfZ2V0KQogICAgIEFTU0VS
VF9FUShmYXZpY29uRGF0YWJhc2UsIGV3a19jb250ZXh0X2Zhdmljb25fZGF0YWJhc2VfZ2V0KGNv
bnRleHQpKTsKIH0KIAorVEVTVF9GKEVXSzJVbml0VGVzdEJhc2UsIGV3a19jb250ZXh0X3N0b3Jh
Z2VfbWFuYWdlcl9nZXQpCit7CisgICAgRXdrX0NvbnRleHQqIGNvbnRleHQgPSBld2tfdmlld19j
b250ZXh0X2dldCh3ZWJWaWV3KCkpOworICAgIEV3a19TdG9yYWdlX01hbmFnZXIqIHN0b3JhZ2VN
YW5hZ2VyID0gZXdrX2NvbnRleHRfc3RvcmFnZV9tYW5hZ2VyX2dldChjb250ZXh0KTsKKyAgICBB
U1NFUlRfVFJVRShzdG9yYWdlTWFuYWdlcik7CisgICAgQVNTRVJUX0VRKHN0b3JhZ2VNYW5hZ2Vy
LCBld2tfY29udGV4dF9zdG9yYWdlX21hbmFnZXJfZ2V0KGNvbnRleHQpKTsKK30KKwogc3RhdGlj
IHZvaWQgc2NoZW1lUmVxdWVzdENhbGxiYWNrKEV3a19VcmxfU2NoZW1lX1JlcXVlc3QqIHJlcXVl
c3QsIHZvaWQqIHVzZXJEYXRhKQogewogICAgIGNvbnN0IGNoYXIqIHNjaGVtZSA9IGV3a191cmxf
c2NoZW1lX3JlcXVlc3Rfc2NoZW1lX2dldChyZXF1ZXN0KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL3Rlc3RzL3Rlc3RfZXdrMl9zdG9yYWdlX21hbmFnZXIu
Y3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvdGVzdHMvdGVzdF9ld2syX3N0
b3JhZ2VfbWFuYWdlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uODlhOWEzYzJlYjI3ZDZjZjZiOWVkZWE5ZjIz
ZWFiM2NmMDE1NzZlNAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvZWZsL3Rlc3RzL3Rlc3RfZXdrMl9zdG9yYWdlX21hbmFnZXIuY3BwCkBAIC0wLDAgKzEs
NzQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgU2Ftc3VuZyBFbGVjdHJvbmljcworICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlICJVbml0VGVzdFV0aWxzL0VX
SzJVbml0VGVzdEJhc2UuaCIKKyNpbmNsdWRlIDxFV2ViS2l0Mi5oPgorI2luY2x1ZGUgPEVjb3Jl
Lmg+CisjaW5jbHVkZSA8Z3Rlc3QvZ3Rlc3QuaD4KKwordXNpbmcgbmFtZXNwYWNlIEVXSzJVbml0
VGVzdDsKKworc3RhdGljIHZvaWQgZ2V0U3RvcmFnZU9yaWdpbnNDYWxsYmFjayhFaW5hX0xpc3Qg
Km9yaWdpbnMsIEV3a19FcnJvciAqZXJyb3IsIHZvaWQgKnVzZXJfZGF0YSkKK3sKKyAgICBBU1NF
UlRfRkFMU0UoZXJyb3IpOworCisgICAgRWluYV9MaXN0KiogcmV0ID0gc3RhdGljX2Nhc3Q8RWlu
YV9MaXN0Kio+KHVzZXJfZGF0YSk7CisgICAgRWluYV9MaXN0KiBsOworICAgIHZvaWQqIGRhdGE7
CisgICAgRUlOQV9MSVNUX0ZPUkVBQ0gob3JpZ2lucywgbCwgZGF0YSkKKyAgICAgICAgKnJldCA9
IGVpbmFfbGlzdF9hcHBlbmQoKnJldCwgZGF0YSk7CisgICAgZWNvcmVfbWFpbl9sb29wX3F1aXQo
KTsKK30KKworVEVTVF9GKEVXSzJVbml0VGVzdEJhc2UsIGV3a19zdG9yYWdlX21hbmFnZXJfb3Jp
Z2luc19nZXQpCit7CisgICAgY29uc3QgY2hhciogc3RvcmFnZUhUTUwgPQorICAgICAgICAiPGh0
bWw+PGhlYWQ+PHRpdGxlPm9yaWdpbmFsIHRpdGxlPC90aXRsZT48L2hlYWQ+IgorICAgICAgICAi
PGJvZHk+IgorICAgICAgICAiPHNjcmlwdCB0eXBlPSd0ZXh0L2phdmFzY3JpcHQnPiIKKyAgICAg
ICAgIiBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgnaXRlbScsICdzdG9yYWdlJyk7IgorICAgICAgICAi
IGRvY3VtZW50LnRpdGxlID0gJ1NldCc7IgorICAgICAgICAiIDwvc2NyaXB0PiIKKyAgICAgICAg
IjwvYm9keT48L2h0bWw+IjsKKworICAgIGV3a192aWV3X2h0bWxfc3RyaW5nX2xvYWQod2ViVmll
dygpLCBzdG9yYWdlSFRNTCwgImh0dHA6Ly93d3cuc3RvcmFnZXRlc3QuY29tIiwgMCk7CisgICAg
d2FpdFVudGlsVGl0bGVDaGFuZ2VkVG8oIldhaXQgdW50aWwgZGIgc3luYyBpcyBmaW5pc2hlZCIs
IDIpOworCisgICAgRWluYV9MaXN0KiBvcmlnaW5zID0gMDsKKyAgICBBU1NFUlRfVFJVRShld2tf
c3RvcmFnZV9tYW5hZ2VyX29yaWdpbnNfZ2V0KGV3a19jb250ZXh0X3N0b3JhZ2VfbWFuYWdlcl9n
ZXQoZXdrX3ZpZXdfY29udGV4dF9nZXQod2ViVmlldygpKSksIGdldFN0b3JhZ2VPcmlnaW5zQ2Fs
bGJhY2ssICZvcmlnaW5zKSk7CisgICAgZWNvcmVfbWFpbl9sb29wX2JlZ2luKCk7CisKKyAgICBB
U1NFUlRfTEUoMSwgZWluYV9saXN0X2NvdW50KG9yaWdpbnMpKTsKKworICAgIEV3a19TZWN1cml0
eV9PcmlnaW4qIG9yaWdpbiA9IHN0YXRpY19jYXN0PEV3a19TZWN1cml0eV9PcmlnaW4qPihlaW5h
X2xpc3RfbnRoKG9yaWdpbnMsIDApKTsKKyAgICBFWFBFQ1RfU1RSRVEoImh0dHAiLCBld2tfc2Vj
dXJpdHlfb3JpZ2luX3Byb3RvY29sX2dldChvcmlnaW4pKTsKKyAgICBFWFBFQ1RfU1RSRVEoInd3
dy5zdG9yYWdldGVzdC5jb20iLCBld2tfc2VjdXJpdHlfb3JpZ2luX2hvc3RfZ2V0KG9yaWdpbikp
OworICAgIEVYUEVDVF9FUSgwLCBld2tfc2VjdXJpdHlfb3JpZ2luX3BvcnRfZ2V0KG9yaWdpbikp
OworCisgICAgRVhQRUNUX0VRKG9yaWdpbiwgZXdrX3NlY3VyaXR5X29yaWdpbl9yZWYob3JpZ2lu
KSk7CisgICAgZXdrX3NlY3VyaXR5X29yaWdpbl91bnJlZihvcmlnaW4pOworfQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>171761</attachid>
            <date>2012-10-31 20:06:41 -0700</date>
            <delta_ts>2012-10-31 21:53:10 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-92827-20121101120504.patch</filename>
            <type>text/plain</type>
            <size>33807</size>
            <attacher name="Jihye Kang">jye.kang</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTMzMTEyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggZWMyMzg3OTQwZTAwZWQz
ZGNhYmIyNDI3ZTM1MDRkMGFlZGU1NjMwZC4uYTJlYzJmMjYxNzBhMzkzYTJjZjRkZTFiNzkyZjg3
NWMzNDRiOWExOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU3IEBACisyMDEyLTExLTAxICBKaWh5
ZSBLYW5nICA8anllLmthbmdAc2Ftc3VuZy5jb20+CisKKyAgICAgICAgW0VGTF1bV0syXSBBZGQg
ZXdrX3NlY3VyaXR5X29yaWdpbiBhbmQgZXdrX3N0b3JhZ2VfbWFuYWdlciBBUElzCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05MjgyNworCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZCBld2tfc2VjdXJpdHlf
b3JpZ2luIEFQSXMgdG8gZ2V0IHNlY3VyaXR5IG9yaWdpbi4KKyAgICAgICAgVGhlc2UgQVBJcyB3
aWxsIGJlIHVzZWQgdG8gZ2V0IGhvc3QsIHByb3RvY29sIGFuZCBwb3J0IG9mIHNlY3VyaXR5Cisg
ICAgICAgIG9yaWdpbi4KKyAgICAgICAgQWRkIGV3a19zdG9yYWdlX21hbmFnZXIgdG8gbWFuYWdl
IHdlYiBzdG9yYWdlIGFuZAorICAgICAgICBld2tfc3RvcmFnZV9tYW5hZ2VyX29yaWdpbnNfZ2V0
IHRvIGdldCBvcmlnaW5zIGxpc3Qgb2Ygd2ViIHN0b3JhZ2UuCisgICAgICAgIEFkZCBVbml0IHRl
c3RzIGZvciBld2tfc3RvcmFnZV9tYW5hZ2VyIGFuZCBld2tfc2VjdXJpdHlfb3JpZ2luIEFQSXMu
CisKKyAgICAgICAgKiBQbGF0Zm9ybUVmbC5jbWFrZToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJ
L2VmbC9FV2ViS2l0Mi5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZWZsL2V3a19jb250ZXh0
LmNwcDoKKyAgICAgICAgKEV3a19Db250ZXh0OjpzdG9yYWdlTWFuYWdlcik6CisgICAgICAgIChl
d2tfY29udGV4dF9zdG9yYWdlX21hbmFnZXJfZ2V0KToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJ
L2VmbC9ld2tfY29udGV4dC5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZWZsL2V3a19jb250
ZXh0X3ByaXZhdGUuaDoKKyAgICAgICAgKEV3a19Db250ZXh0KToKKyAgICAgICAgKiBVSVByb2Nl
c3MvQVBJL2VmbC9ld2tfc2VjdXJpdHlfb3JpZ2luLmNwcDogQWRkZWQuCisgICAgICAgIChFd2tf
U2VjdXJpdHlfT3JpZ2luOjpFd2tfU2VjdXJpdHlfT3JpZ2luKToKKyAgICAgICAgKEV3a19TZWN1
cml0eV9PcmlnaW46Omhvc3QpOgorICAgICAgICAoRXdrX1NlY3VyaXR5X09yaWdpbjo6cHJvdG9j
b2wpOgorICAgICAgICAoRXdrX1NlY3VyaXR5X09yaWdpbjo6cG9ydCk6CisgICAgICAgIChld2tf
c2VjdXJpdHlfb3JpZ2luX3JlZik6CisgICAgICAgIChld2tfc2VjdXJpdHlfb3JpZ2luX3VucmVm
KToKKyAgICAgICAgKGV3a19zZWN1cml0eV9vcmlnaW5faG9zdF9nZXQpOgorICAgICAgICAoZXdr
X3NlY3VyaXR5X29yaWdpbl9wcm90b2NvbF9nZXQpOgorICAgICAgICAoZXdrX3NlY3VyaXR5X29y
aWdpbl9wb3J0X2dldCk6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3NlY3VyaXR5
X29yaWdpbi5oOiBBZGRlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2VmbC9ld2tfc2VjdXJp
dHlfb3JpZ2luX3ByaXZhdGUuaDogQWRkZWQuCisgICAgICAgIChFd2tfU2VjdXJpdHlfT3JpZ2lu
KToKKyAgICAgICAgKEV3a19TZWN1cml0eV9PcmlnaW46OmNyZWF0ZSk6CisgICAgICAgICogVUlQ
cm9jZXNzL0FQSS9lZmwvZXdrX3N0b3JhZ2VfbWFuYWdlci5jcHA6IEFkZGVkLgorICAgICAgICAo
RXdrX1N0b3JhZ2VfTWFuYWdlcjo6RXdrX1N0b3JhZ2VfTWFuYWdlcik6CisgICAgICAgIChFd2tf
U3RvcmFnZV9NYW5hZ2VyOjpnZXRTdG9yYWdlT3JpZ2lucyk6CisgICAgICAgIChFd2tfU3RvcmFn
ZV9NYW5hZ2VyOjpjcmVhdGVPcmlnaW5MaXN0KToKKyAgICAgICAgKF9Fd2tfU3RvcmFnZV9Pcmln
aW5zX0FzeW5jX0dldF9Db250ZXh0KToKKyAgICAgICAgKF9Fd2tfU3RvcmFnZV9PcmlnaW5zX0Fz
eW5jX0dldF9Db250ZXh0OjpfRXdrX1N0b3JhZ2VfT3JpZ2luc19Bc3luY19HZXRfQ29udGV4dCk6
CisgICAgICAgIChnZXRTdG9yYWdlT3JpZ2luc0NhbGxiYWNrKToKKyAgICAgICAgKGV3a19zdG9y
YWdlX21hbmFnZXJfb3JpZ2luc19nZXQpOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZWZsL2V3
a19zdG9yYWdlX21hbmFnZXIuaDogQWRkZWQuCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9lZmwv
ZXdrX3N0b3JhZ2VfbWFuYWdlcl9wcml2YXRlLmg6IEFkZGVkLgorICAgICAgICAoRXdrX1N0b3Jh
Z2VfTWFuYWdlcik6CisgICAgICAgIChFd2tfU3RvcmFnZV9NYW5hZ2VyOjpjcmVhdGUpOgorICAg
ICAgICAqIFVJUHJvY2Vzcy9BUEkvZWZsL3Rlc3RzL3Rlc3RfZXdrMl9jb250ZXh0LmNwcDoKKyAg
ICAgICAgKFRFU1RfRik6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9lZmwvdGVzdHMvdGVzdF9l
d2syX3N0b3JhZ2VfbWFuYWdlci5jcHA6IEFkZGVkLgorICAgICAgICAoZ2V0U3RvcmFnZU9yaWdp
bnNDYWxsYmFjayk6CisgICAgICAgIChURVNUX0YpOgorCiAyMDEyLTEwLTMxICBBbGV4YW5kcnUg
Q2hpY3VsaXRhICA8YWNoaWN1QGFkb2JlLmNvbT4KIAogICAgICAgICBDdXN0b21GaWx0ZXJPcGVy
YXRpb24gcGFyYW1ldGVycyBsaXN0IGlzIG5vdCBkZWNvZGVkIGNvcnJlY3RseSBpbiBDb29yZGlu
YXRlZEdyYXBoaWNzQXJndW1lbnRDb2RlcnMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1Bs
YXRmb3JtRWZsLmNtYWtlIGIvU291cmNlL1dlYktpdDIvUGxhdGZvcm1FZmwuY21ha2UKaW5kZXgg
NzdiNTQ0MzI5NWMxYmI5YmRhNjg0MDE0YjZiOGI0MzFmMmJkNWI1OS4uZjMyNzEwYzZkN2MyY2Y5
ZmFiY2QyMTdmZTE1NjYxNWUzNDNlYzczOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvUGxh
dGZvcm1FZmwuY21ha2UKKysrIGIvU291cmNlL1dlYktpdDIvUGxhdGZvcm1FZmwuY21ha2UKQEAg
LTYyLDcgKzYyLDkgQEAgTElTVChBUFBFTkQgV2ViS2l0Ml9TT1VSQ0VTCiAgICAgVUlQcm9jZXNz
L0FQSS9lZmwvZXdrX3BvcHVwX21lbnUuY3BwCiAgICAgVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3Bv
cHVwX21lbnVfaXRlbS5jcHAKICAgICBVSVByb2Nlc3MvQVBJL2VmbC9ld2tfcmVzb3VyY2UuY3Bw
CisgICAgVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3NlY3VyaXR5X29yaWdpbi5jcHAKICAgICBVSVBy
b2Nlc3MvQVBJL2VmbC9ld2tfc2V0dGluZ3MuY3BwCisgICAgVUlQcm9jZXNzL0FQSS9lZmwvZXdr
X3N0b3JhZ2VfbWFuYWdlci5jcHAKICAgICBVSVByb2Nlc3MvQVBJL2VmbC9ld2tfdGV4dF9jaGVj
a2VyLmNwcAogICAgIFVJUHJvY2Vzcy9BUEkvZWZsL2V3a191cmxfcmVxdWVzdC5jcHAKICAgICBV
SVByb2Nlc3MvQVBJL2VmbC9ld2tfdXJsX3Jlc3BvbnNlLmNwcApAQCAtMjYwLDcgKzI2Miw5IEBA
IFNFVCAoRVdlYktpdDJfSEVBREVSUwogICAgICIke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0v
VUlQcm9jZXNzL0FQSS9lZmwvZXdrX3BvcHVwX21lbnUuaCIKICAgICAiJHtDTUFLRV9DVVJSRU5U
X1NPVVJDRV9ESVJ9L1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19wb3B1cF9tZW51X2l0ZW0uaCIKICAg
ICAiJHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9L1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19yZXNv
dXJjZS5oIgorICAgICIke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0vVUlQcm9jZXNzL0FQSS9l
ZmwvZXdrX3NlY3VyaXR5X29yaWdpbi5oIgogICAgICIke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJ
Un0vVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3NldHRpbmdzLmgiCisgICAgIiR7Q01BS0VfQ1VSUkVO
VF9TT1VSQ0VfRElSfS9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfc3RvcmFnZV9tYW5hZ2VyLmgiCiAg
ICAgIiR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfdGV4
dF9jaGVja2VyLmgiCiAgICAgIiR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS9VSVByb2Nlc3Mv
QVBJL2VmbC9ld2tfdG91Y2guaCIKICAgICAiJHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9L1VJ
UHJvY2Vzcy9BUEkvZWZsL2V3a191cmxfcmVxdWVzdC5oIgpAQCAtMzU4LDYgKzM2Miw3IEBAIFNF
VChFV0syVW5pdFRlc3RzX0JJTkFSSUVTCiAgICAgdGVzdF9ld2syX2ludGVudHMKICAgICB0ZXN0
X2V3azJfcG9wdXBfbWVudQogICAgIHRlc3RfZXdrMl9zZXR0aW5ncworICAgIHRlc3RfZXdrMl9z
dG9yYWdlX21hbmFnZXIKICAgICB0ZXN0X2V3azJfdGV4dF9jaGVja2VyCiAgICAgdGVzdF9ld2sy
X3ZpZXcKICkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL0VX
ZWJLaXQyLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9FV2ViS2l0Mi5oCmlu
ZGV4IGY5N2ViZDhiNDU4ZmM3MTgyMThkMmQ2MGM4ODNhOGY1ZjViNWU2MTAuLmZjN2JhYzExYjE1
NGMxNGE4NGYxMzljOWUzOTNkOGE0NTM3YjBkYzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvZWZsL0VXZWJLaXQyLmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9lZmwvRVdlYktpdDIuaApAQCAtNDYsNyArNDYsOSBAQAogI2luY2x1ZGUgImV3a19w
b3B1cF9tZW51LmgiCiAjaW5jbHVkZSAiZXdrX3BvcHVwX21lbnVfaXRlbS5oIgogI2luY2x1ZGUg
ImV3a19yZXNvdXJjZS5oIgorI2luY2x1ZGUgImV3a19zZWN1cml0eV9vcmlnaW4uaCIKICNpbmNs
dWRlICJld2tfc2V0dGluZ3MuaCIKKyNpbmNsdWRlICJld2tfc3RvcmFnZV9tYW5hZ2VyLmgiCiAj
aW5jbHVkZSAiZXdrX3RleHRfY2hlY2tlci5oIgogI2luY2x1ZGUgImV3a190b3VjaC5oIgogI2lu
Y2x1ZGUgImV3a191cmxfcmVxdWVzdC5oIgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9lZmwvZXdrX2NvbnRleHQuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9lZmwvZXdrX2NvbnRleHQuY3BwCmluZGV4IGY5Yjg3M2NjNzliYjE0NWU1MjhmODliYmRk
Mzc3ZTU3YmU5OTRmMjcuLjkzNzk0NTE2OTQ5MWNiNzcxZjcyOGFjMjFmYjc4ZmM1ODMxY2U2YzMg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19jb250ZXh0
LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfY29udGV4dC5j
cHAKQEAgLTM4LDYgKzM4LDcgQEAKICNpbmNsdWRlICJld2tfY29va2llX21hbmFnZXJfcHJpdmF0
ZS5oIgogI2luY2x1ZGUgImV3a19mYXZpY29uX2RhdGFiYXNlX3ByaXZhdGUuaCIKICNpbmNsdWRl
ICJld2tfcHJpdmF0ZS5oIgorI2luY2x1ZGUgImV3a19zdG9yYWdlX21hbmFnZXJfcHJpdmF0ZS5o
IgogI2luY2x1ZGUgImV3a191cmxfc2NoZW1lX3JlcXVlc3RfcHJpdmF0ZS5oIgogI2luY2x1ZGUg
PFdlYkNvcmUvRmlsZVN5c3RlbS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvSWNvbkRhdGFiYXNlLmg+
CkBAIC02Miw2ICs2Myw3IEBAIHN0YXRpYyBpbmxpbmUgQ29udGV4dE1hcCYgY29udGV4dE1hcCgp
CiAKIEV3a19Db250ZXh0OjpFd2tfQ29udGV4dChXS0NvbnRleHRSZWYgY29udGV4dCkKICAgICA6
IG1fY29udGV4dChjb250ZXh0KQorICAgICwgbV9zdG9yYWdlTWFuYWdlcihFd2tfU3RvcmFnZV9N
YW5hZ2VyOjpjcmVhdGUoV0tDb250ZXh0R2V0S2V5VmFsdWVTdG9yYWdlTWFuYWdlcihtX2NvbnRl
eHQuZ2V0KCkpKSkKICNpZiBFTkFCTEUoQkFUVEVSWV9TVEFUVVMpCiAgICAgLCBtX2JhdHRlcnlQ
cm92aWRlcihCYXR0ZXJ5UHJvdmlkZXI6OmNyZWF0ZShjb250ZXh0KSkKICNlbmRpZgpAQCAtMTU4
LDYgKzE2MCwxMSBAQCBFd2tfRmF2aWNvbl9EYXRhYmFzZSogRXdrX0NvbnRleHQ6OmZhdmljb25E
YXRhYmFzZSgpCiAgICAgcmV0dXJuIG1fZmF2aWNvbkRhdGFiYXNlLmdldCgpOwogfQogCitFd2tf
U3RvcmFnZV9NYW5hZ2VyKiBFd2tfQ29udGV4dDo6c3RvcmFnZU1hbmFnZXIoKSBjb25zdAorewor
ICAgIHJldHVybiBtX3N0b3JhZ2VNYW5hZ2VyLmdldCgpOworfQorCiBSZXF1ZXN0TWFuYWdlckNs
aWVudEVmbCogRXdrX0NvbnRleHQ6OnJlcXVlc3RNYW5hZ2VyKCkKIHsKICAgICByZXR1cm4gbV9y
ZXF1ZXN0TWFuYWdlckNsaWVudC5nZXQoKTsKQEAgLTIxNSw2ICsyMjIsMTMgQEAgRXdrX0Zhdmlj
b25fRGF0YWJhc2UqIGV3a19jb250ZXh0X2Zhdmljb25fZGF0YWJhc2VfZ2V0KGNvbnN0IEV3a19D
b250ZXh0KiBld2tDb24KICAgICByZXR1cm4gY29uc3RfY2FzdDxFd2tfQ29udGV4dCo+KGV3a0Nv
bnRleHQpLT5mYXZpY29uRGF0YWJhc2UoKTsKIH0KIAorRXdrX1N0b3JhZ2VfTWFuYWdlciogZXdr
X2NvbnRleHRfc3RvcmFnZV9tYW5hZ2VyX2dldChjb25zdCBFd2tfQ29udGV4dCogZXdrQ29udGV4
dCkKK3sKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoZXdrQ29udGV4dCwgMCk7
CisKKyAgICByZXR1cm4gZXdrQ29udGV4dC0+c3RvcmFnZU1hbmFnZXIoKTsKK30KKwogV0tDb250
ZXh0UmVmIEV3a19Db250ZXh0Ojp3a0NvbnRleHQoKQogewogICAgIHJldHVybiBtX2NvbnRleHQu
Z2V0KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tf
Y29udGV4dC5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2NvbnRleHQu
aAppbmRleCBmNmI4YmI2N2QyNWQ4N2JhOWQwMzIxZDFhMzc3ZWZiODdmODFmMzA2Li4wZDZiNzRh
YWM5ODUzNDEyNTBmMTlkZDE5YThjYmYyZWU0ZWE5ZTVhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfY29udGV4dC5oCisrKyBiL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19jb250ZXh0LmgKQEAgLTQwLDYgKzQwLDcgQEAKICNpbmNs
dWRlICJld2tfY29va2llX21hbmFnZXIuaCIKICNpbmNsdWRlICJld2tfZmF2aWNvbl9kYXRhYmFz
ZS5oIgogI2luY2x1ZGUgImV3a19uYXZpZ2F0aW9uX2RhdGEuaCIKKyNpbmNsdWRlICJld2tfc3Rv
cmFnZV9tYW5hZ2VyLmgiCiAjaW5jbHVkZSAiZXdrX3VybF9zY2hlbWVfcmVxdWVzdC5oIgogI2lu
Y2x1ZGUgPEV2YXMuaD4KIApAQCAtMTkyLDYgKzE5MywxNSBAQCBFQVBJIEV3a19Db29raWVfTWFu
YWdlciAqZXdrX2NvbnRleHRfY29va2llX21hbmFnZXJfZ2V0KGNvbnN0IEV3a19Db250ZXh0ICpj
b250ZQogRUFQSSBFd2tfRmF2aWNvbl9EYXRhYmFzZSAqZXdrX2NvbnRleHRfZmF2aWNvbl9kYXRh
YmFzZV9nZXQoY29uc3QgRXdrX0NvbnRleHQgKmNvbnRleHQpOwogCiAvKioKKyAqIEdldHMgdGhl
IHN0b3JhZ2UgbWFuYWdlciBpbnN0YW5jZSBmb3IgdGhpcyBAYSBjb250ZXh0LgorICoKKyAqIEBw
YXJhbSBjb250ZXh0IGNvbnRleHQgb2JqZWN0IHRvIHF1ZXJ5LgorICoKKyAqIEByZXR1cm4gRXdr
X1N0b3JhZ2VfTWFuYWdlciBvYmplY3QgaW5zdGFuY2Ugb3IgQGMgTlVMTCBpbiBjYXNlIG9mIGZh
aWx1cmUuCisgKi8KK0VBUEkgRXdrX1N0b3JhZ2VfTWFuYWdlciAqZXdrX2NvbnRleHRfc3RvcmFn
ZV9tYW5hZ2VyX2dldChjb25zdCBFd2tfQ29udGV4dCAqY29udGV4dCk7CisKKy8qKgogICogUmVn
aXN0ZXIgQGEgc2NoZW1lIGluIEBhIGNvbnRleHQuCiAgKgogICogV2hlbiBhbiBVUkwgcmVxdWVz
dCB3aXRoIEBhIHNjaGVtZSBpcyBtYWRlIGluIHRoZSAjRXdrX0NvbnRleHQsIHRoZSBjYWxsYmFj
awpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2NvbnRl
eHRfcHJpdmF0ZS5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2NvbnRl
eHRfcHJpdmF0ZS5oCmluZGV4IGJhNDYzMjRmNWIwYzVlY2FmNGUzMjZmZjMzMTJiYzA1ODc1MjUz
MzAuLmY0MzY0OGM3ZTdkNDEwYjI5NTZiNmQ4ODUzZjZmNGM4MTRhZmVhODggMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19jb250ZXh0X3ByaXZhdGUuaAor
KysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfY29udGV4dF9wcml2YXRl
LmgKQEAgLTU3LDYgKzU3LDggQEAgcHVibGljOgogCiAgICAgRXdrX0Zhdmljb25fRGF0YWJhc2Uq
IGZhdmljb25EYXRhYmFzZSgpOwogCisgICAgRXdrX1N0b3JhZ2VfTWFuYWdlciogc3RvcmFnZU1h
bmFnZXIoKSBjb25zdDsKKwogICAgIFdlYktpdDo6UmVxdWVzdE1hbmFnZXJDbGllbnRFZmwqIHJl
cXVlc3RNYW5hZ2VyKCk7CiAKICNpZiBFTkFCTEUoVklCUkFUSU9OKQpAQCAtODQsNiArODYsNyBA
QCBwcml2YXRlOgogCiAgICAgT3duUHRyPEV3a19Db29raWVfTWFuYWdlcj4gbV9jb29raWVNYW5h
Z2VyOwogICAgIE93blB0cjxFd2tfRmF2aWNvbl9EYXRhYmFzZT4gbV9mYXZpY29uRGF0YWJhc2U7
CisgICAgT3duUHRyPEV3a19TdG9yYWdlX01hbmFnZXI+IG1fc3RvcmFnZU1hbmFnZXI7CiAjaWYg
RU5BQkxFKEJBVFRFUllfU1RBVFVTKQogICAgIFJlZlB0cjxXZWJLaXQ6OkJhdHRlcnlQcm92aWRl
cj4gbV9iYXR0ZXJ5UHJvdmlkZXI7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19zZWN1cml0eV9vcmlnaW4uY3BwIGIvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3NlY3VyaXR5X29yaWdpbi5jcHAKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
YmMwZjhjN2FlZjdlZTdiNmFhNzA1NThjNzc2M2Y1NDAwZGIxNGQyNgotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19zZWN1cml0eV9vcmlnaW4u
Y3BwCkBAIC0wLDAgKzEsOTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgU2Ftc3VuZyBF
bGVjdHJvbmljcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVU
T1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVS
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcKKyAqIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgImV3a19zZWN1cml0eV9vcmlnaW4uaCIKKwor
I2luY2x1ZGUgIldLQVBJQ2FzdC5oIgorI2luY2x1ZGUgIldLU2VjdXJpdHlPcmlnaW4uaCIKKyNp
bmNsdWRlICJld2tfc2VjdXJpdHlfb3JpZ2luX3ByaXZhdGUuaCIKKwordXNpbmcgbmFtZXNwYWNl
IFdlYktpdDsKKworRXdrX1NlY3VyaXR5X09yaWdpbjo6RXdrX1NlY3VyaXR5X09yaWdpbihXS1Nl
Y3VyaXR5T3JpZ2luUmVmIG9yaWdpblJlZikKKyAgICA6IG1fd2tPcmlnaW4ob3JpZ2luUmVmKQor
ICAgICwgbV9ob3N0KEFkb3B0V0ssIFdLU2VjdXJpdHlPcmlnaW5Db3B5SG9zdChvcmlnaW5SZWYp
KQorICAgICwgbV9wcm90b2NvbChBZG9wdFdLLCBXS1NlY3VyaXR5T3JpZ2luQ29weVByb3RvY29s
KG9yaWdpblJlZikpCit7IH0KKworY29uc3QgY2hhciogRXdrX1NlY3VyaXR5X09yaWdpbjo6aG9z
dCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1faG9zdDsKK30KKworY29uc3QgY2hhciogRXdrX1Nl
Y3VyaXR5X09yaWdpbjo6cHJvdG9jb2woKSBjb25zdAoreworICAgIHJldHVybiBtX3Byb3RvY29s
OworfQorCit1aW50MzJfdCBFd2tfU2VjdXJpdHlfT3JpZ2luOjpwb3J0KCkgY29uc3QKK3sKKyAg
ICByZXR1cm4gV0tTZWN1cml0eU9yaWdpbkdldFBvcnQobV93a09yaWdpbi5nZXQoKSk7Cit9CisK
K0V3a19TZWN1cml0eV9PcmlnaW4qIGV3a19zZWN1cml0eV9vcmlnaW5fcmVmKEV3a19TZWN1cml0
eV9PcmlnaW4qIG9yaWdpbikKK3sKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwo
b3JpZ2luLCAwKTsKKworICAgIG9yaWdpbi0+cmVmKCk7CisgICAgcmV0dXJuIG9yaWdpbjsKK30K
Kwordm9pZCBld2tfc2VjdXJpdHlfb3JpZ2luX3VucmVmKEV3a19TZWN1cml0eV9PcmlnaW4qIG9y
aWdpbikKK3sKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTihvcmlnaW4pOworCisgICAg
b3JpZ2luLT5kZXJlZigpOworfQorCitjb25zdCBjaGFyKiBld2tfc2VjdXJpdHlfb3JpZ2luX2hv
c3RfZ2V0KGNvbnN0IEV3a19TZWN1cml0eV9PcmlnaW4qIG9yaWdpbikKK3sKKyAgICBFSU5BX1NB
RkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwob3JpZ2luLCAwKTsKKworICAgIHJldHVybiBvcmlnaW4t
Pmhvc3QoKTsKK30KKworY29uc3QgY2hhciogZXdrX3NlY3VyaXR5X29yaWdpbl9wcm90b2NvbF9n
ZXQoY29uc3QgRXdrX1NlY3VyaXR5X09yaWdpbiogb3JpZ2luKQoreworICAgIEVJTkFfU0FGRVRZ
X09OX05VTExfUkVUVVJOX1ZBTChvcmlnaW4sIDApOworCisgICAgcmV0dXJuIG9yaWdpbi0+cHJv
dG9jb2woKTsKK30KKwordWludDMyX3QgZXdrX3NlY3VyaXR5X29yaWdpbl9wb3J0X2dldChjb25z
dCBFd2tfU2VjdXJpdHlfT3JpZ2luKiBvcmlnaW4pCit7CisgICAgRUlOQV9TQUZFVFlfT05fTlVM
TF9SRVRVUk5fVkFMKG9yaWdpbiwgMCk7CisKKyAgICByZXR1cm4gb3JpZ2luLT5wb3J0KCk7Cit9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfc2VjdXJp
dHlfb3JpZ2luLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfc2VjdXJp
dHlfb3JpZ2luLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNWJlODQxNjViOWQwN2ViYTY5YjlkZjk2YjhmZDhhY2E5
YjhlYzk4YwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
ZWZsL2V3a19zZWN1cml0eV9vcmlnaW4uaApAQCAtMCwwICsxLDEwMiBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMiBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxMiBTYW1zdW5nIEVsZWN0cm9uaWNzLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENP
UFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORwor
ICogTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvKioKKyAqIEBmaWxlICAgIGV3a19zZWN1cml0
eV9vcmlnaW4uaAorICogQGJyaWVmICAgU2VjdXJpdHkgT3JpZ2luIEFQSS4KKyAqCisgKiBTZWN1
cml0eSBPcmlnaW4gaXMgdGhlIG1lY2hhbmlzbSB0aGF0IGRlZmluZXMgdGhlIGFjY2VzcyBsaW1p
dHMgb2YgYSB3ZWJzaXRlLgorICogQmFzZWQgb24gaW5mb3JtYXRpb24gc3VjaCBhcyBkb21haW4s
IHByb3RvY29sIGFuZCBwb3J0LCB5b3UgY2FuIG9yIGNhbm5vdCBncmFudAorICogYXV0aG9yaXph
dGlvbiBmb3IgYWNjZXNzaW5nIGRhdGEgYW5kIHBlcmZvcm1pbmcgY2VydGFpbiB0YXNrcy4KKyAq
LworCisjaWZuZGVmIGV3a19zZWN1cml0eV9vcmlnaW5faAorI2RlZmluZSBld2tfc2VjdXJpdHlf
b3JpZ2luX2gKKworI2luY2x1ZGUgPEVpbmEuaD4KKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRl
cm4gIkMiIHsKKyNlbmRpZgorCisvKiogQ3JlYXRlcyBhIHR5cGUgbmFtZSBmb3IgRXdrX1NlY3Vy
aXR5X09yaWdpbi4gKi8KK3R5cGVkZWYgc3RydWN0IEV3a19TZWN1cml0eV9PcmlnaW4gRXdrX1Nl
Y3VyaXR5X09yaWdpbjsKKworLyoqCisgKiBJbmNyZWFzZXMgdGhlIHJlZmVyZW5jZSBjb3VudCBv
ZiB0aGUgZ2l2ZW4gb2JqZWN0LgorICoKKyAqIEBwYXJhbSBvcmlnaW4gdGhlIG9yaWdpbiBvYmpl
Y3QgdG8gaW5jcmVhc2UgdGhlIHJlZmVyZW5jZSBjb3VudAorICoKKyAqIEByZXR1cm4gYSBwb2lu
dGVyIHRvIHRoZSBvYmplY3Qgb24gc3VjY2VzcywgQGMgTlVMTCBvdGhlcndpc2UKKyAqLworRUFQ
SSBFd2tfU2VjdXJpdHlfT3JpZ2luICpld2tfc2VjdXJpdHlfb3JpZ2luX3JlZihFd2tfU2VjdXJp
dHlfT3JpZ2luICpvKTsKKworLyoqCisgKiBEZWNyZWFzZXMgdGhlIHJlZmVyZW5jZSBjb3VudCBv
ZiB0aGUgZ2l2ZW4gb2JqZWN0LCBwb3NzaWJseSBmcmVlaW5nIGl0LgorICoKKyAqIFdoZW4gdGhl
IHJlZmVyZW5jZSBjb3VudCByZWFjaGVzIDAsIHRoZSBvcmlnaW4gaXMgZnJlZWQuCisgKgorICog
QHBhcmFtIG9yaWdpbiB0aGUgb3JpZ2luIG9iamVjdCB0byBkZWNyZWFzZSB0aGUgcmVmZXJlbmNl
IGNvdW50CisgKi8KK0VBUEkgdm9pZCBld2tfc2VjdXJpdHlfb3JpZ2luX3VucmVmKEV3a19TZWN1
cml0eV9PcmlnaW4gKm8pOworCisvKioKKyAqIFJldHVybnMgdGhlIGhvc3Qgb2YgdGhlIHNlY3Vy
aXR5IG9yaWdpbi4KKyAqCisgKiBAcGFyYW0gbyBzZWN1cml0eSBvcmlnaW4gb2JqZWN0CisgKgor
ICogQHJldHVybiB0aGUgaG9zdCBkb21haW4gcG9pbnRlciBvciBAYyBOVUxMIGlmIHRoZXJlIGlz
IG5vdCBhIGhvc3Qgc2NoZW1lLgorICogICAgICAgICBUaGlzIHBvaW50ZXIgaXMgZ3VhcmFudGVl
ZCB0byBiZSBlaW5hX3N0cmluZ3NoYXJlLCBzbyB3aGVuZXZlciBwb3NzaWJsZQorICogICAgICAg
ICBzYXZlIHlvdXJzZWxmIGZyb20gY3B1IGN5Y2xlcyBhbmQgdXNlIGVpbmFfc3RyaW5nc2hhcmVf
cmVmKCkKKyAqICAgICAgICAgaW5zdGVhZCBvZiBlaW5hX3N0cmluZ3NoYXJlX2FkZCgpIG9yIHN0
cmR1cCgpLgorICovCitFQVBJIGNvbnN0IGNoYXIgKmV3a19zZWN1cml0eV9vcmlnaW5faG9zdF9n
ZXQoY29uc3QgRXdrX1NlY3VyaXR5X09yaWdpbiAqbyk7CisKKy8qKgorICogUmV0dXJucyB0aGUg
cG9ydCBvZiB0aGUgc2VjdXJpdHkgb3JpZ2luLgorICoKKyAqIEBwYXJhbSBvIHNlY3VyaXR5IG9y
aWdpbiBvYmplY3QKKyAqCisgKiBAcmV0dXJuIHRoZSBwb3J0IG51bWJlciBvciBAYyAwIGlmIHRo
ZXJlIGlzIG5vdCBhIHByb3BlciBzZWN1cml0eSBvcmlnaW4gc2NoZW1lCisgKi8KK0VBUEkgdWlu
dDMyX3QgZXdrX3NlY3VyaXR5X29yaWdpbl9wb3J0X2dldChjb25zdCBFd2tfU2VjdXJpdHlfT3Jp
Z2luICpvKTsKKworLyoqCisgKiBSZXR1cm5zIHRoZSBwcm90b2NvbCBvZiB0aGUgc2VjdXJpdHkg
b3JpZ2luLgorICoKKyAqIEBwYXJhbSBvIHNlY3VyaXR5IG9yaWdpbiBvYmplY3QKKyAqCisgKiBA
cmV0dXJuIHRoZSBwcm90b2NvbCBzY2hlbWUgcG9pbnRlciBvciBAYyBOVUxMIGlmIHRoZXJlIGlz
IG5vdCBhIHByb3RvY29sIHNjaGVtZS4KKyAqICAgICAgICAgVGhpcyBwb2ludGVyIGlzIGd1YXJh
bnRlZWQgdG8gYmUgZWluYV9zdHJpbmdzaGFyZSwgc28gd2hlbmV2ZXIgcG9zc2libGUKKyAqICAg
ICAgICAgc2F2ZSB5b3Vyc2VsZiBmcm9tIGNwdSBjeWNsZXMgYW5kIHVzZSBlaW5hX3N0cmluZ3No
YXJlX3JlZigpCisgKiAgICAgICAgIGluc3RlYWQgb2YgZWluYV9zdHJpbmdzaGFyZV9hZGQoKSBv
ciBzdHJkdXAoKS4KKyAqLworRUFQSSBjb25zdCBjaGFyICpld2tfc2VjdXJpdHlfb3JpZ2luX3By
b3RvY29sX2dldChjb25zdCBFd2tfU2VjdXJpdHlfT3JpZ2luICpvKTsKKworI2lmZGVmIF9fY3Bs
dXNwbHVzCit9CisjZW5kaWYKKyNlbmRpZiAvLyBld2tfc2VjdXJpdHlfb3JpZ2luX2gKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19zZWN1cml0eV9vcmln
aW5fcHJpdmF0ZS5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3NlY3Vy
aXR5X29yaWdpbl9wcml2YXRlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMDQwMTI0MTBlZjc3NjFmM2UxNTZmZWI1
MTliZGJkMTA0MTYwMzEzZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvZWZsL2V3a19zZWN1cml0eV9vcmlnaW5fcHJpdmF0ZS5oCkBAIC0wLDAgKzEsNTQg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgU2Ftc3VuZyBFbGVjdHJvbmljcy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcKKyAqIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBld2tfc2VjdXJp
dHlfb3JpZ2luX3ByaXZhdGVfaAorI2RlZmluZSBld2tfc2VjdXJpdHlfb3JpZ2luX3ByaXZhdGVf
aAorCisjaW5jbHVkZSAiV0tFaW5hU2hhcmVkU3RyaW5nLmgiCisjaW5jbHVkZSAiV0tTZWN1cml0
eU9yaWdpbi5oIgorI2luY2x1ZGUgPFdlYktpdDIvV0tCYXNlLmg+CisjaW5jbHVkZSA8d3RmL1Bh
c3NSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgorCitjbGFzcyBFd2tfU2Vj
dXJpdHlfT3JpZ2luIDogcHVibGljIFJlZkNvdW50ZWQ8RXdrX1NlY3VyaXR5X09yaWdpbj4gewor
cHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPEV3a19TZWN1cml0eV9PcmlnaW4+IGNyZWF0
ZShXS1NlY3VyaXR5T3JpZ2luUmVmIG9yaWdpblJlZikKKyAgICB7CisgICAgICAgIHJldHVybiBh
ZG9wdFJlZihuZXcgRXdrX1NlY3VyaXR5X09yaWdpbihvcmlnaW5SZWYpKTsKKyAgICB9CisKKyAg
ICBjb25zdCBjaGFyKiBob3N0KCkgY29uc3Q7CisgICAgY29uc3QgY2hhciogcHJvdG9jb2woKSBj
b25zdDsKKyAgICB1aW50MzJfdCBwb3J0KCkgY29uc3Q7CisKK3ByaXZhdGU6CisgICAgZXhwbGlj
aXQgRXdrX1NlY3VyaXR5X09yaWdpbihXS1NlY3VyaXR5T3JpZ2luUmVmIG9yaWdpblJlZik7CisK
KyAgICBXS1JldGFpblB0cjxXS1NlY3VyaXR5T3JpZ2luUmVmPiBtX3drT3JpZ2luOworICAgIFdL
RWluYVNoYXJlZFN0cmluZyBtX2hvc3Q7CisgICAgV0tFaW5hU2hhcmVkU3RyaW5nIG1fcHJvdG9j
b2w7Cit9OworCisjZW5kaWYgLy8gZXdrX3NlY3VyaXR5X29yaWdpbl9wcml2YXRlX2gKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19zdG9yYWdlX21hbmFn
ZXIuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3N0b3JhZ2VfbWFu
YWdlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uMTYzMmIyZTZiMzc3ZGEzNGI5YjllYmJlYjQ0Y2UxZDM5YjIz
OTIzOQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZs
L2V3a19zdG9yYWdlX21hbmFnZXIuY3BwCkBAIC0wLDAgKzEsOTkgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTIgU2Ftc3VuZyBFbGVjdHJvbmljcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQg
SE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IFRIRSBDT1BZUklHSFQgSE9MREVSIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcKKyAqIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgImV3a19z
dG9yYWdlX21hbmFnZXIuaCIKKworI2luY2x1ZGUgIldLQVBJQ2FzdC5oIgorI2luY2x1ZGUgIldL
QXJyYXkuaCIKKyNpbmNsdWRlICJXS0tleVZhbHVlU3RvcmFnZU1hbmFnZXIuaCIKKyNpbmNsdWRl
ICJld2tfZXJyb3JfcHJpdmF0ZS5oIgorI2luY2x1ZGUgImV3a19zZWN1cml0eV9vcmlnaW4uaCIK
KyNpbmNsdWRlICJld2tfc2VjdXJpdHlfb3JpZ2luX3ByaXZhdGUuaCIKKyNpbmNsdWRlICJld2tf
c3RvcmFnZV9tYW5hZ2VyX3ByaXZhdGUuaCIKKyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgor
Cit1c2luZyBuYW1lc3BhY2UgV2ViS2l0OworCitFd2tfU3RvcmFnZV9NYW5hZ2VyOjpFd2tfU3Rv
cmFnZV9NYW5hZ2VyKFdLS2V5VmFsdWVTdG9yYWdlTWFuYWdlclJlZiB3a1N0b3JhZ2VNYW5hZ2Vy
UmVmKQorICAgIDogbV93a1N0b3JhZ2VNYW5hZ2VyKHdrU3RvcmFnZU1hbmFnZXJSZWYpCit7IH0K
Kwordm9pZCBFd2tfU3RvcmFnZV9NYW5hZ2VyOjpnZXRTdG9yYWdlT3JpZ2lucyh2b2lkKiBjb250
ZXh0LCBXS0tleVZhbHVlU3RvcmFnZU1hbmFnZXJHZXRLZXlWYWx1ZVN0b3JhZ2VPcmlnaW5zRnVu
Y3Rpb24gY2FsbGJhY2spIGNvbnN0Cit7CisgICAgV0tLZXlWYWx1ZVN0b3JhZ2VNYW5hZ2VyR2V0
S2V5VmFsdWVTdG9yYWdlT3JpZ2lucyhtX3drU3RvcmFnZU1hbmFnZXIuZ2V0KCksIGNvbnRleHQs
IGNhbGxiYWNrKTsKK30KKworRWluYV9MaXN0KiBFd2tfU3RvcmFnZV9NYW5hZ2VyOjpjcmVhdGVP
cmlnaW5MaXN0KFdLQXJyYXlSZWYgb3JpZ2lucykgY29uc3QKK3sKKyAgICBFaW5hX0xpc3QqIG9y
aWdpbkxpc3QgPSAwOworICAgIGNvbnN0IHNpemVfdCBsZW5ndGggPSBXS0FycmF5R2V0U2l6ZShv
cmlnaW5zKTsKKworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsKKyAg
ICAgICAgV0tTZWN1cml0eU9yaWdpblJlZiB3a09yaWdpblJlZiA9IHN0YXRpY19jYXN0PFdLU2Vj
dXJpdHlPcmlnaW5SZWY+KFdLQXJyYXlHZXRJdGVtQXRJbmRleChvcmlnaW5zLCBpKSk7CisgICAg
ICAgIFJlZlB0cjxFd2tfU2VjdXJpdHlfT3JpZ2luPiBvcmlnaW4gPSBtX3dyYXBwZXJDYWNoZS5n
ZXQod2tPcmlnaW5SZWYpOworICAgICAgICBpZiAoIW9yaWdpbikgeworICAgICAgICAgICAgb3Jp
Z2luID0gRXdrX1NlY3VyaXR5X09yaWdpbjo6Y3JlYXRlKHdrT3JpZ2luUmVmKTsKKyAgICAgICAg
ICAgIG1fd3JhcHBlckNhY2hlLnNldCh3a09yaWdpblJlZiwgb3JpZ2luKTsKKyAgICAgICAgfQor
ICAgICAgICBvcmlnaW5MaXN0ID0gZWluYV9saXN0X2FwcGVuZChvcmlnaW5MaXN0LCBvcmlnaW4u
cmVsZWFzZSgpLmxlYWtSZWYoKSk7CisgICAgfQorCisgICAgcmV0dXJuIG9yaWdpbkxpc3Q7Cit9
CisKK3N0cnVjdCBFd2tfU3RvcmFnZV9PcmlnaW5zX0FzeW5jX0dldF9Db250ZXh0IHsKKyAgICBj
b25zdCBFd2tfU3RvcmFnZV9NYW5hZ2VyKiBtYW5hZ2VyOworICAgIEV3a19TdG9yYWdlX09yaWdp
bnNfR2V0X0NiIGNhbGxiYWNrOworICAgIHZvaWQqIHVzZXJEYXRhOworCisgICAgRXdrX1N0b3Jh
Z2VfT3JpZ2luc19Bc3luY19HZXRfQ29udGV4dChjb25zdCBFd2tfU3RvcmFnZV9NYW5hZ2VyKiBt
YW5hZ2VyLCBFd2tfU3RvcmFnZV9PcmlnaW5zX0dldF9DYiBjYWxsYmFjaywgdm9pZCogdXNlckRh
dGEpCisgICAgICAgIDogbWFuYWdlcihtYW5hZ2VyKQorICAgICAgICAsIGNhbGxiYWNrKGNhbGxi
YWNrKQorICAgICAgICAsIHVzZXJEYXRhKHVzZXJEYXRhKQorICAgIHsgfQorfTsKKworc3RhdGlj
IHZvaWQgZ2V0U3RvcmFnZU9yaWdpbnNDYWxsYmFjayhXS0FycmF5UmVmIG9yaWdpbnMsIFdLRXJy
b3JSZWYgd2tFcnJvciwgdm9pZCogY29udGV4dCkKK3sKKyAgICBFaW5hX0xpc3QqIG9yaWdpbkxp
c3QgPSAwOworICAgIE93blB0cjxFd2tfU3RvcmFnZV9PcmlnaW5zX0FzeW5jX0dldF9Db250ZXh0
Kj4gd2ViU3RvcmFnZUNvbnRleHQgPSBhZG9wdFB0cihzdGF0aWNfY2FzdDxFd2tfU3RvcmFnZV9P
cmlnaW5zX0FzeW5jX0dldF9Db250ZXh0Kj4oY29udGV4dCkpOworCisgICAgb3JpZ2luTGlzdCA9
IHdlYlN0b3JhZ2VDb250ZXh0LT5tYW5hZ2VyLT5jcmVhdGVPcmlnaW5MaXN0KG9yaWdpbnMpOwor
CisgICAgT3duUHRyPEV3a19FcnJvcj4gZXdrRXJyb3IgPSBFd2tfRXJyb3I6OmNyZWF0ZSh3a0Vy
cm9yKTsKKyAgICB3ZWJTdG9yYWdlQ29udGV4dC0+Y2FsbGJhY2sob3JpZ2luTGlzdCwgZXdrRXJy
b3IuZ2V0KCksIHdlYlN0b3JhZ2VDb250ZXh0LT51c2VyRGF0YSk7Cit9CisKK0VpbmFfQm9vbCBl
d2tfc3RvcmFnZV9tYW5hZ2VyX29yaWdpbnNfZ2V0KGNvbnN0IEV3a19TdG9yYWdlX01hbmFnZXIq
IGV3a1N0b3JhZ2VNYW5hZ2VyLCBFd2tfU3RvcmFnZV9PcmlnaW5zX0dldF9DYiBjYWxsYmFjaywg
dm9pZCogdXNlckRhdGEpCit7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKGV3
a1N0b3JhZ2VNYW5hZ2VyLCBmYWxzZSk7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5f
VkFMKGNhbGxiYWNrLCBmYWxzZSk7CisKKyAgICBFd2tfU3RvcmFnZV9PcmlnaW5zX0FzeW5jX0dl
dF9Db250ZXh0KiBjb250ZXh0ID0gbmV3IEV3a19TdG9yYWdlX09yaWdpbnNfQXN5bmNfR2V0X0Nv
bnRleHQoZXdrU3RvcmFnZU1hbmFnZXIsIGNhbGxiYWNrLCB1c2VyRGF0YSk7CisgICAgZXdrU3Rv
cmFnZU1hbmFnZXItPmdldFN0b3JhZ2VPcmlnaW5zKGNvbnRleHQsIGdldFN0b3JhZ2VPcmlnaW5z
Q2FsbGJhY2spOworCisgICAgcmV0dXJuIHRydWU7Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfc3RvcmFnZV9tYW5hZ2VyLmggYi9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfc3RvcmFnZV9tYW5hZ2VyLmgKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
ZDk0YTU1NmI2NzM1MDBlNjE2YWUyMzMzODkwMzgwZDk2NWQyYzdkZQotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19zdG9yYWdlX21hbmFnZXIu
aApAQCAtMCwwICsxLDczIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIFNhbXN1bmcgRWxl
Y3Ryb25pY3MuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9S
UworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HCisgKiBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8q
KgorICogQGZpbGUgICBld2tfc3RvcmFnZV9tYW5hZ2VyLmgKKyAqIEBicmllZiAgRGVzY3JpYmVz
IHRoZSBFd2sgU3RvcmFnZSBNYW5hZ2VyIEFQSS4KKyAqCisgKiBFd2sgU3RvcmFnZSBNYW5hZ2Vy
IG1hbmFnZXMgd2ViIHN0b3JhZ2UuCisgKi8KKworI2lmbmRlZiBld2tfc3RvcmFnZV9tYW5hZ2Vy
X2gKKyNkZWZpbmUgZXdrX3N0b3JhZ2VfbWFuYWdlcl9oCisKKyNpbmNsdWRlICJld2tfZXJyb3Iu
aCIKKyNpbmNsdWRlIDxFaW5hLmg+CisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7
CisjZW5kaWYKKworLyoqIENyZWF0ZXMgYSB0eXBlIG5hbWUgZm9yIEV3a19TdG9yYWdlX01hbmFn
ZXIuICovCit0eXBlZGVmIHN0cnVjdCBFd2tfU3RvcmFnZV9NYW5hZ2VyIEV3a19TdG9yYWdlX01h
bmFnZXI7CisKKy8qKgorICogQHR5cGVkZWYgRXdrX1N0b3JhZ2VfT3JpZ2luc19HZXRfQ2IgRXdr
X1N0b3JhZ2VfT3JpZ2luc19HZXRfQ2IKKyAqIEBicmllZiBDYWxsYmFjayB0eXBlIGZvciB1c2Ug
d2l0aCBld2tfc3RvcmFnZV9tYW5hZ2VyX29yaWdpbnNfZ2V0KCkuCisgKgorICogQHBhcmFtIG9y
aWdpbnMgQGMgRWluYV9MaXN0IGNvbnRhaW5pbmcgQGMgRXdrX1NlY3VyaXR5X09yaWdpbiBlbGVt
ZW50cyBvciBAYyBOVUxMIGluIGNhc2Ugb2YgZXJyb3IsCisgKiAgICAgICAgICAgICAgICAgICAg
ICAgIHRoZSBFaW5hX0xpc3QgYW5kIGl0cyBpdGVtcyBzaG91bGQgYmUgZnJlZWQgYWZ0ZXIgdXNl
LiBVc2UgZXdrX3NlY3VyaXR5X29yaWdpbl91bnJlZigpCisgKiAgICAgICAgICAgICAgICAgICAg
ICAgIHRvIGZyZWUgdGhlIGl0ZW1zCisgKi8KK3R5cGVkZWYgdm9pZCAoKkV3a19TdG9yYWdlX09y
aWdpbnNfR2V0X0NiKShFaW5hX0xpc3QgKm9yaWdpbnMsIEV3a19FcnJvciAqZXJyb3IsIHZvaWQg
KnVzZXJfZGF0YSk7CisKKy8qKgorICogR2V0cyBsaXN0IG9mIG9yaWdpbnMgdGhhdCBhcmUgc3Rv
cmVkIGluIHN0b3JhZ2UgZGIgYXN5bmNocm9ub3VzbHkuCisgKgorICogVGhpcyBmdW5jdGlvbiBh
bGxvY2F0ZXMgbWVtb3J5IGZvciBjb250ZXh0IHN0cnVjdHVyZSBtYWRlIGZyb20gY2FsbGJhY2sg
YW5kIHVzZXJfZGF0YS4KKyAqCisgKiBAcGFyYW0gbWFuYWdlciBFd2tfU3RvcmFnZV9NYW5hZ2Vy
IG9iamVjdAorICogQHBhcmFtIGNhbGxiYWNrIGNhbGxiYWNrIHRvIGdldCBzdG9yYWdlIG9yaWdp
bnMKKyAqIEBwYXJhbSB1c2VyX2RhdGEgdXNlcl9kYXRhIHdpbGwgYmUgcGFzc2VkIHdoZW4gcmVz
dWx0X2NhbGxiYWNrIGlzIGNhbGxlZCwKKyAqICAgIC1pLmUuLCB1c2VyIGRhdGEgd2lsbCBiZSBr
ZXB0IHVudGlsIGNhbGxiYWNrIGlzIGNhbGxlZAorICoKKyAqIEByZXR1cm4gQGMgRUlOQV9UUlVF
IG9uIHN1Y2Nlc3MsIEBjIEVJTkFfRkFMU0Ugb24gZmFpbHVyZQorICovCitFQVBJIEVpbmFfQm9v
bCBld2tfc3RvcmFnZV9tYW5hZ2VyX29yaWdpbnNfZ2V0KGNvbnN0IEV3a19TdG9yYWdlX01hbmFn
ZXIgKm1hbmFnZXIsIEV3a19TdG9yYWdlX09yaWdpbnNfR2V0X0NiIGNhbGxiYWNrLCB2b2lkICp1
c2VyX2RhdGEpOworCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorI2VuZGlmIC8vIGV3
a19zdG9yYWdlX21hbmFnZXJfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9lZmwvZXdrX3N0b3JhZ2VfbWFuYWdlcl9wcml2YXRlLmggYi9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL2VmbC9ld2tfc3RvcmFnZV9tYW5hZ2VyX3ByaXZhdGUuaApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li41ZWVlYTQ5MTM3OTE1ZDRmMjAwNzUyNzdjODc0YzE0MGI2OTY5YjhkCi0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3N0b3JhZ2VfbWFuYWdl
cl9wcml2YXRlLmgKQEAgLTAsMCArMSw1MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBT
YW1zdW5nIEVsZWN0cm9uaWNzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBD
T05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdI
VCBIT0xERVIgT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORworICogTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjaWZuZGVmIGV3a19zdG9yYWdlX21hbmFnZXJfcHJpdmF0ZV9oCisjZGVmaW5lIGV3
a19zdG9yYWdlX21hbmFnZXJfcHJpdmF0ZV9oCisKKyNpbmNsdWRlICJXS0tleVZhbHVlU3RvcmFn
ZU1hbmFnZXIuaCIKKyNpbmNsdWRlICJXS1JldGFpblB0ci5oIgorI2luY2x1ZGUgImV3a19zZWN1
cml0eV9vcmlnaW5fcHJpdmF0ZS5oIgorI2luY2x1ZGUgPFdlYktpdDIvV0tCYXNlLmg+CisjaW5j
bHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KKworY2xhc3MgRXdrX1N0b3JhZ2VfTWFuYWdlciB7Citw
dWJsaWM6CisgICAgc3RhdGljIFBhc3NPd25QdHI8RXdrX1N0b3JhZ2VfTWFuYWdlcj4gY3JlYXRl
KFdLS2V5VmFsdWVTdG9yYWdlTWFuYWdlclJlZiB3a1N0b3JhZ2VNYW5hZ2VyUmVmKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBFd2tfU3RvcmFnZV9NYW5hZ2VyKHdrU3RvcmFn
ZU1hbmFnZXJSZWYpKTsKKyAgICB9CisKKyAgICBFaW5hX0xpc3QqIGNyZWF0ZU9yaWdpbkxpc3Qo
V0tBcnJheVJlZiB3a0xpc3QpIGNvbnN0OworICAgIHZvaWQgZ2V0U3RvcmFnZU9yaWdpbnModm9p
ZCogY29udGV4dCwgV0tLZXlWYWx1ZVN0b3JhZ2VNYW5hZ2VyR2V0S2V5VmFsdWVTdG9yYWdlT3Jp
Z2luc0Z1bmN0aW9uIGNhbGxiYWNrKSBjb25zdDsKKworcHJpdmF0ZToKKyAgICBleHBsaWNpdCBF
d2tfU3RvcmFnZV9NYW5hZ2VyKFdLS2V5VmFsdWVTdG9yYWdlTWFuYWdlclJlZiB3a1N0b3JhZ2VN
YW5hZ2VyUmVmKTsKKworICAgIFdLUmV0YWluUHRyPFdLS2V5VmFsdWVTdG9yYWdlTWFuYWdlclJl
Zj4gbV93a1N0b3JhZ2VNYW5hZ2VyOworICAgIG11dGFibGUgSGFzaE1hcDxXS1NlY3VyaXR5T3Jp
Z2luUmVmLCBSZWZQdHI8RXdrX1NlY3VyaXR5X09yaWdpbj4gPiBtX3dyYXBwZXJDYWNoZTsKK307
CisKKyNlbmRpZiAvLyBld2tfc3RvcmFnZV9tYW5hZ2VyX3ByaXZhdGVfaApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvdGVzdHMvdGVzdF9ld2syX2NvbnRleHQu
Y3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvdGVzdHMvdGVzdF9ld2syX2Nv
bnRleHQuY3BwCmluZGV4IDg2NzQ2ZGNmMTk3MGMxYjJmOGRkOGViZWQ1MWM1MTE3ZjZmYzE5Y2Eu
LjFkNDRhY2JmY2RhMzdkYjlkOWU5NDg1MDdlNzZiMzY0OWM0ZmE5YjQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL3Rlc3RzL3Rlc3RfZXdrMl9jb250ZXh0LmNw
cAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC90ZXN0cy90ZXN0X2V3azJf
Y29udGV4dC5jcHAKQEAgLTYxLDYgKzYxLDE0IEBAIFRFU1RfRihFV0syVW5pdFRlc3RCYXNlLCBl
d2tfY29udGV4dF9mYXZpY29uX2RhdGFiYXNlX2dldCkKICAgICBBU1NFUlRfRVEoZmF2aWNvbkRh
dGFiYXNlLCBld2tfY29udGV4dF9mYXZpY29uX2RhdGFiYXNlX2dldChjb250ZXh0KSk7CiB9CiAK
K1RFU1RfRihFV0syVW5pdFRlc3RCYXNlLCBld2tfY29udGV4dF9zdG9yYWdlX21hbmFnZXJfZ2V0
KQoreworICAgIEV3a19Db250ZXh0KiBjb250ZXh0ID0gZXdrX3ZpZXdfY29udGV4dF9nZXQod2Vi
VmlldygpKTsKKyAgICBFd2tfU3RvcmFnZV9NYW5hZ2VyKiBzdG9yYWdlTWFuYWdlciA9IGV3a19j
b250ZXh0X3N0b3JhZ2VfbWFuYWdlcl9nZXQoY29udGV4dCk7CisgICAgQVNTRVJUX1RSVUUoc3Rv
cmFnZU1hbmFnZXIpOworICAgIEFTU0VSVF9FUShzdG9yYWdlTWFuYWdlciwgZXdrX2NvbnRleHRf
c3RvcmFnZV9tYW5hZ2VyX2dldChjb250ZXh0KSk7Cit9CisKIHN0YXRpYyB2b2lkIHNjaGVtZVJl
cXVlc3RDYWxsYmFjayhFd2tfVXJsX1NjaGVtZV9SZXF1ZXN0KiByZXF1ZXN0LCB2b2lkKiB1c2Vy
RGF0YSkKIHsKICAgICBjb25zdCBjaGFyKiBzY2hlbWUgPSBld2tfdXJsX3NjaGVtZV9yZXF1ZXN0
X3NjaGVtZV9nZXQocmVxdWVzdCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL2VmbC90ZXN0cy90ZXN0X2V3azJfc3RvcmFnZV9tYW5hZ2VyLmNwcCBiL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL3Rlc3RzL3Rlc3RfZXdrMl9zdG9yYWdlX21hbmFnZXIu
Y3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLjI4NDdkNzQyMGE3M2U4ZmE0ZThjODQzZWMxMzJjMWQ4OWVjYmMxMzQK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC90ZXN0
cy90ZXN0X2V3azJfc3RvcmFnZV9tYW5hZ2VyLmNwcApAQCAtMCwwICsxLDc2IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDEyIFNhbXN1bmcgRWxlY3Ryb25pY3MKKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSAiVW5pdFRlc3RVdGlscy9FV0syVW5pdFRlc3RCYXNl
LmgiCisjaW5jbHVkZSA8RVdlYktpdDIuaD4KKyNpbmNsdWRlIDxFY29yZS5oPgorI2luY2x1ZGUg
PGd0ZXN0L2d0ZXN0Lmg+CisKK3VzaW5nIG5hbWVzcGFjZSBFV0syVW5pdFRlc3Q7CisKK3N0YXRp
YyB2b2lkIGdldFN0b3JhZ2VPcmlnaW5zQ2FsbGJhY2soRWluYV9MaXN0ICpvcmlnaW5zLCBFd2tf
RXJyb3IgKmVycm9yLCB2b2lkICp1c2VyX2RhdGEpCit7CisgICAgQVNTRVJUX0ZBTFNFKGVycm9y
KTsKKworICAgIEVpbmFfTGlzdCoqIHJldCA9IHN0YXRpY19jYXN0PEVpbmFfTGlzdCoqPih1c2Vy
X2RhdGEpOworICAgIEVpbmFfTGlzdCogbDsKKyAgICB2b2lkKiBkYXRhOworICAgIEVJTkFfTElT
VF9GT1JFQUNIKG9yaWdpbnMsIGwsIGRhdGEpCisgICAgICAgICpyZXQgPSBlaW5hX2xpc3RfYXBw
ZW5kKCpyZXQsIGRhdGEpOworCisgICAgZWNvcmVfbWFpbl9sb29wX3F1aXQoKTsKK30KKworVEVT
VF9GKEVXSzJVbml0VGVzdEJhc2UsIGV3a19zdG9yYWdlX21hbmFnZXJfb3JpZ2luc19nZXQpCit7
CisgICAgY29uc3QgY2hhciogc3RvcmFnZUhUTUwgPQorICAgICAgICAiPGh0bWw+PGhlYWQ+PHRp
dGxlPm9yaWdpbmFsIHRpdGxlPC90aXRsZT48L2hlYWQ+IgorICAgICAgICAiPGJvZHk+IgorICAg
ICAgICAiPHNjcmlwdCB0eXBlPSd0ZXh0L2phdmFzY3JpcHQnPiIKKyAgICAgICAgIiBsb2NhbFN0
b3JhZ2Uuc2V0SXRlbSgnaXRlbScsICdzdG9yYWdlJyk7IgorICAgICAgICAiIGRvY3VtZW50LnRp
dGxlID0gJ1NldCc7IgorICAgICAgICAiIDwvc2NyaXB0PiIKKyAgICAgICAgIjwvYm9keT48L2h0
bWw+IjsKKworICAgIC8vIFdhaXQgdW50aWwgc3RvcmFnZSB0cmFja2VyIGlzIG1hZGUgYW5kIHN5
bmNocm9uaXplZCBzbyB0aGF0IHdlIGNhbiBnZXQgdGhlIG9yaWdpbnMgb2Ygd2ViIHN0b3JhZ2Ug
Zm9ybSBzdG9yYWdlIHRyYWNrZXIuCisgICAgZXdrX3ZpZXdfaHRtbF9zdHJpbmdfbG9hZCh3ZWJW
aWV3KCksIHN0b3JhZ2VIVE1MLCAiaHR0cDovL3d3dy5zdG9yYWdldGVzdC5jb20iLCAwKTsKKyAg
ICBBU1NFUlRfRkFMU0Uod2FpdFVudGlsVGl0bGVDaGFuZ2VkVG8oIldhaXQgdW50aWwgZGIgc3lu
YyBpcyBmaW5pc2hlZCIsIDIpKTsKKworICAgIEVpbmFfTGlzdCogb3JpZ2lucyA9IDA7CisgICAg
QVNTRVJUX1RSVUUoZXdrX3N0b3JhZ2VfbWFuYWdlcl9vcmlnaW5zX2dldChld2tfY29udGV4dF9z
dG9yYWdlX21hbmFnZXJfZ2V0KGV3a192aWV3X2NvbnRleHRfZ2V0KHdlYlZpZXcoKSkpLCBnZXRT
dG9yYWdlT3JpZ2luc0NhbGxiYWNrLCAmb3JpZ2lucykpOworICAgIGVjb3JlX21haW5fbG9vcF9i
ZWdpbigpOworCisgICAgQVNTRVJUX0xFKDEsIGVpbmFfbGlzdF9jb3VudChvcmlnaW5zKSk7CisK
KyAgICBFd2tfU2VjdXJpdHlfT3JpZ2luKiBvcmlnaW4gPSBzdGF0aWNfY2FzdDxFd2tfU2VjdXJp
dHlfT3JpZ2luKj4oZWluYV9saXN0X250aChvcmlnaW5zLCAwKSk7CisgICAgRVhQRUNUX1NUUkVR
KCJodHRwIiwgZXdrX3NlY3VyaXR5X29yaWdpbl9wcm90b2NvbF9nZXQob3JpZ2luKSk7CisgICAg
RVhQRUNUX1NUUkVRKCJ3d3cuc3RvcmFnZXRlc3QuY29tIiwgZXdrX3NlY3VyaXR5X29yaWdpbl9o
b3N0X2dldChvcmlnaW4pKTsKKyAgICBFWFBFQ1RfRVEoMCwgZXdrX3NlY3VyaXR5X29yaWdpbl9w
b3J0X2dldChvcmlnaW4pKTsKKworICAgIEVYUEVDVF9FUShvcmlnaW4sIGV3a19zZWN1cml0eV9v
cmlnaW5fcmVmKG9yaWdpbikpOworICAgIGV3a19zZWN1cml0eV9vcmlnaW5fdW5yZWYob3JpZ2lu
KTsKK30K
</data>
<flag name="review"
          id="185794"
          type_id="1"
          status="+"
          setter="gyuyoung.kim"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>171768</attachid>
            <date>2012-10-31 21:53:10 -0700</date>
            <delta_ts>2012-11-01 19:01:52 -0700</delta_ts>
            <desc>patch for landing</desc>
            <filename>security_origin.patch</filename>
            <type>text/plain</type>
            <size>32853</size>
            <attacher name="Jihye Kang">jye.kang</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZwppbmRleCBlYzIzODc5Li5lM2M1NDZiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNTcg
QEAKKzIwMTItMTAtMzEgIEppaHllIEthbmcgIDxqeWUua2FuZ0BzYW1zdW5nLmNvbT4KKworICAg
ICAgICBbRUZMXVtXSzJdIEFkZCBld2tfc2VjdXJpdHlfb3JpZ2luIGFuZCBld2tfc3RvcmFnZV9t
YW5hZ2VyIEFQSXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTkyODI3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgR3l1eW91bmcgS2ltLgorCisgICAgICAg
IEFkZCBld2tfc2VjdXJpdHlfb3JpZ2luIEFQSXMgdG8gZ2V0IHNlY3VyaXR5IG9yaWdpbi4KKyAg
ICAgICAgVGhlc2UgQVBJcyB3aWxsIGJlIHVzZWQgdG8gZ2V0IGhvc3QsIHByb3RvY29sIGFuZCBw
b3J0IG9mIHNlY3VyaXR5CisgICAgICAgIG9yaWdpbi4KKyAgICAgICAgQWRkIGV3a19zdG9yYWdl
X21hbmFnZXIgdG8gbWFuYWdlIHdlYiBzdG9yYWdlIGFuZAorICAgICAgICBld2tfc3RvcmFnZV9t
YW5hZ2VyX29yaWdpbnNfZ2V0IHRvIGdldCBvcmlnaW5zIGxpc3Qgb2Ygd2ViIHN0b3JhZ2UuCisg
ICAgICAgIEFkZCBVbml0IHRlc3RzIGZvciBld2tfc3RvcmFnZV9tYW5hZ2VyIGFuZCBld2tfc2Vj
dXJpdHlfb3JpZ2luIEFQSXMuCisKKyAgICAgICAgKiBQbGF0Zm9ybUVmbC5jbWFrZToKKyAgICAg
ICAgKiBVSVByb2Nlc3MvQVBJL2VmbC9FV2ViS2l0Mi5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9B
UEkvZWZsL2V3a19jb250ZXh0LmNwcDoKKyAgICAgICAgKEV3a19Db250ZXh0OjpzdG9yYWdlTWFu
YWdlcik6CisgICAgICAgIChld2tfY29udGV4dF9zdG9yYWdlX21hbmFnZXJfZ2V0KToKKyAgICAg
ICAgKiBVSVByb2Nlc3MvQVBJL2VmbC9ld2tfY29udGV4dC5oOgorICAgICAgICAqIFVJUHJvY2Vz
cy9BUEkvZWZsL2V3a19jb250ZXh0X3ByaXZhdGUuaDoKKyAgICAgICAgKEV3a19Db250ZXh0KToK
KyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2VmbC9ld2tfc2VjdXJpdHlfb3JpZ2luLmNwcDogQWRk
ZWQuCisgICAgICAgIChFd2tfU2VjdXJpdHlfT3JpZ2luOjpFd2tfU2VjdXJpdHlfT3JpZ2luKToK
KyAgICAgICAgKEV3a19TZWN1cml0eV9PcmlnaW46Omhvc3QpOgorICAgICAgICAoRXdrX1NlY3Vy
aXR5X09yaWdpbjo6cHJvdG9jb2wpOgorICAgICAgICAoRXdrX1NlY3VyaXR5X09yaWdpbjo6cG9y
dCk6CisgICAgICAgIChld2tfc2VjdXJpdHlfb3JpZ2luX3JlZik6CisgICAgICAgIChld2tfc2Vj
dXJpdHlfb3JpZ2luX3VucmVmKToKKyAgICAgICAgKGV3a19zZWN1cml0eV9vcmlnaW5faG9zdF9n
ZXQpOgorICAgICAgICAoZXdrX3NlY3VyaXR5X29yaWdpbl9wcm90b2NvbF9nZXQpOgorICAgICAg
ICAoZXdrX3NlY3VyaXR5X29yaWdpbl9wb3J0X2dldCk6CisgICAgICAgICogVUlQcm9jZXNzL0FQ
SS9lZmwvZXdrX3NlY3VyaXR5X29yaWdpbi5oOiBBZGRlZC4KKyAgICAgICAgKiBVSVByb2Nlc3Mv
QVBJL2VmbC9ld2tfc2VjdXJpdHlfb3JpZ2luX3ByaXZhdGUuaDogQWRkZWQuCisgICAgICAgIChF
d2tfU2VjdXJpdHlfT3JpZ2luKToKKyAgICAgICAgKEV3a19TZWN1cml0eV9PcmlnaW46OmNyZWF0
ZSk6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3N0b3JhZ2VfbWFuYWdlci5jcHA6
IEFkZGVkLgorICAgICAgICAoRXdrX1N0b3JhZ2VfTWFuYWdlcjo6RXdrX1N0b3JhZ2VfTWFuYWdl
cik6CisgICAgICAgIChFd2tfU3RvcmFnZV9NYW5hZ2VyOjpnZXRTdG9yYWdlT3JpZ2lucyk6Cisg
ICAgICAgIChFd2tfU3RvcmFnZV9NYW5hZ2VyOjpjcmVhdGVPcmlnaW5MaXN0KToKKyAgICAgICAg
KF9Fd2tfU3RvcmFnZV9PcmlnaW5zX0FzeW5jX0dldF9Db250ZXh0KToKKyAgICAgICAgKF9Fd2tf
U3RvcmFnZV9PcmlnaW5zX0FzeW5jX0dldF9Db250ZXh0OjpfRXdrX1N0b3JhZ2VfT3JpZ2luc19B
c3luY19HZXRfQ29udGV4dCk6CisgICAgICAgIChnZXRTdG9yYWdlT3JpZ2luc0NhbGxiYWNrKToK
KyAgICAgICAgKGV3a19zdG9yYWdlX21hbmFnZXJfb3JpZ2luc19nZXQpOgorICAgICAgICAqIFVJ
UHJvY2Vzcy9BUEkvZWZsL2V3a19zdG9yYWdlX21hbmFnZXIuaDogQWRkZWQuCisgICAgICAgICog
VUlQcm9jZXNzL0FQSS9lZmwvZXdrX3N0b3JhZ2VfbWFuYWdlcl9wcml2YXRlLmg6IEFkZGVkLgor
ICAgICAgICAoRXdrX1N0b3JhZ2VfTWFuYWdlcik6CisgICAgICAgIChFd2tfU3RvcmFnZV9NYW5h
Z2VyOjpjcmVhdGUpOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZWZsL3Rlc3RzL3Rlc3RfZXdr
Ml9jb250ZXh0LmNwcDoKKyAgICAgICAgKFRFU1RfRik6CisgICAgICAgICogVUlQcm9jZXNzL0FQ
SS9lZmwvdGVzdHMvdGVzdF9ld2syX3N0b3JhZ2VfbWFuYWdlci5jcHA6IEFkZGVkLgorICAgICAg
ICAoZ2V0U3RvcmFnZU9yaWdpbnNDYWxsYmFjayk6CisgICAgICAgIChURVNUX0YpOgorCiAyMDEy
LTEwLTMxICBBbGV4YW5kcnUgQ2hpY3VsaXRhICA8YWNoaWN1QGFkb2JlLmNvbT4KIAogICAgICAg
ICBDdXN0b21GaWx0ZXJPcGVyYXRpb24gcGFyYW1ldGVycyBsaXN0IGlzIG5vdCBkZWNvZGVkIGNv
cnJlY3RseSBpbiBDb29yZGluYXRlZEdyYXBoaWNzQXJndW1lbnRDb2RlcnMKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtRWZsLmNtYWtlIGIvU291cmNlL1dlYktpdDIvUGxhdGZv
cm1FZmwuY21ha2UKaW5kZXggNzdiNTQ0My4uZjMyNzEwYyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdDIvUGxhdGZvcm1FZmwuY21ha2UKKysrIGIvU291cmNlL1dlYktpdDIvUGxhdGZvcm1FZmwu
Y21ha2UKQEAgLTYyLDcgKzYyLDkgQEAgTElTVChBUFBFTkQgV2ViS2l0Ml9TT1VSQ0VTCiAgICAg
VUlQcm9jZXNzL0FQSS9lZmwvZXdrX3BvcHVwX21lbnUuY3BwCiAgICAgVUlQcm9jZXNzL0FQSS9l
ZmwvZXdrX3BvcHVwX21lbnVfaXRlbS5jcHAKICAgICBVSVByb2Nlc3MvQVBJL2VmbC9ld2tfcmVz
b3VyY2UuY3BwCisgICAgVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3NlY3VyaXR5X29yaWdpbi5jcHAK
ICAgICBVSVByb2Nlc3MvQVBJL2VmbC9ld2tfc2V0dGluZ3MuY3BwCisgICAgVUlQcm9jZXNzL0FQ
SS9lZmwvZXdrX3N0b3JhZ2VfbWFuYWdlci5jcHAKICAgICBVSVByb2Nlc3MvQVBJL2VmbC9ld2tf
dGV4dF9jaGVja2VyLmNwcAogICAgIFVJUHJvY2Vzcy9BUEkvZWZsL2V3a191cmxfcmVxdWVzdC5j
cHAKICAgICBVSVByb2Nlc3MvQVBJL2VmbC9ld2tfdXJsX3Jlc3BvbnNlLmNwcApAQCAtMjYwLDcg
KzI2Miw5IEBAIFNFVCAoRVdlYktpdDJfSEVBREVSUwogICAgICIke0NNQUtFX0NVUlJFTlRfU09V
UkNFX0RJUn0vVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3BvcHVwX21lbnUuaCIKICAgICAiJHtDTUFL
RV9DVVJSRU5UX1NPVVJDRV9ESVJ9L1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19wb3B1cF9tZW51X2l0
ZW0uaCIKICAgICAiJHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9L1VJUHJvY2Vzcy9BUEkvZWZs
L2V3a19yZXNvdXJjZS5oIgorICAgICIke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0vVUlQcm9j
ZXNzL0FQSS9lZmwvZXdrX3NlY3VyaXR5X29yaWdpbi5oIgogICAgICIke0NNQUtFX0NVUlJFTlRf
U09VUkNFX0RJUn0vVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3NldHRpbmdzLmgiCisgICAgIiR7Q01B
S0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfc3RvcmFnZV9tYW5h
Z2VyLmgiCiAgICAgIiR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS9VSVByb2Nlc3MvQVBJL2Vm
bC9ld2tfdGV4dF9jaGVja2VyLmgiCiAgICAgIiR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS9V
SVByb2Nlc3MvQVBJL2VmbC9ld2tfdG91Y2guaCIKICAgICAiJHtDTUFLRV9DVVJSRU5UX1NPVVJD
RV9ESVJ9L1VJUHJvY2Vzcy9BUEkvZWZsL2V3a191cmxfcmVxdWVzdC5oIgpAQCAtMzU4LDYgKzM2
Miw3IEBAIFNFVChFV0syVW5pdFRlc3RzX0JJTkFSSUVTCiAgICAgdGVzdF9ld2syX2ludGVudHMK
ICAgICB0ZXN0X2V3azJfcG9wdXBfbWVudQogICAgIHRlc3RfZXdrMl9zZXR0aW5ncworICAgIHRl
c3RfZXdrMl9zdG9yYWdlX21hbmFnZXIKICAgICB0ZXN0X2V3azJfdGV4dF9jaGVja2VyCiAgICAg
dGVzdF9ld2syX3ZpZXcKICkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvZWZsL0VXZWJLaXQyLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9FV2Vi
S2l0Mi5oCmluZGV4IGY5N2ViZDguLmZjN2JhYzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvZWZsL0VXZWJLaXQyLmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9lZmwvRVdlYktpdDIuaApAQCAtNDYsNyArNDYsOSBAQAogI2luY2x1ZGUgImV3a19w
b3B1cF9tZW51LmgiCiAjaW5jbHVkZSAiZXdrX3BvcHVwX21lbnVfaXRlbS5oIgogI2luY2x1ZGUg
ImV3a19yZXNvdXJjZS5oIgorI2luY2x1ZGUgImV3a19zZWN1cml0eV9vcmlnaW4uaCIKICNpbmNs
dWRlICJld2tfc2V0dGluZ3MuaCIKKyNpbmNsdWRlICJld2tfc3RvcmFnZV9tYW5hZ2VyLmgiCiAj
aW5jbHVkZSAiZXdrX3RleHRfY2hlY2tlci5oIgogI2luY2x1ZGUgImV3a190b3VjaC5oIgogI2lu
Y2x1ZGUgImV3a191cmxfcmVxdWVzdC5oIgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9lZmwvZXdrX2NvbnRleHQuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9lZmwvZXdrX2NvbnRleHQuY3BwCmluZGV4IGY5Yjg3M2MuLjkzNzk0NTEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19jb250ZXh0LmNwcAorKysg
Yi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfY29udGV4dC5jcHAKQEAgLTM4
LDYgKzM4LDcgQEAKICNpbmNsdWRlICJld2tfY29va2llX21hbmFnZXJfcHJpdmF0ZS5oIgogI2lu
Y2x1ZGUgImV3a19mYXZpY29uX2RhdGFiYXNlX3ByaXZhdGUuaCIKICNpbmNsdWRlICJld2tfcHJp
dmF0ZS5oIgorI2luY2x1ZGUgImV3a19zdG9yYWdlX21hbmFnZXJfcHJpdmF0ZS5oIgogI2luY2x1
ZGUgImV3a191cmxfc2NoZW1lX3JlcXVlc3RfcHJpdmF0ZS5oIgogI2luY2x1ZGUgPFdlYkNvcmUv
RmlsZVN5c3RlbS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvSWNvbkRhdGFiYXNlLmg+CkBAIC02Miw2
ICs2Myw3IEBAIHN0YXRpYyBpbmxpbmUgQ29udGV4dE1hcCYgY29udGV4dE1hcCgpCiAKIEV3a19D
b250ZXh0OjpFd2tfQ29udGV4dChXS0NvbnRleHRSZWYgY29udGV4dCkKICAgICA6IG1fY29udGV4
dChjb250ZXh0KQorICAgICwgbV9zdG9yYWdlTWFuYWdlcihFd2tfU3RvcmFnZV9NYW5hZ2VyOjpj
cmVhdGUoV0tDb250ZXh0R2V0S2V5VmFsdWVTdG9yYWdlTWFuYWdlcihtX2NvbnRleHQuZ2V0KCkp
KSkKICNpZiBFTkFCTEUoQkFUVEVSWV9TVEFUVVMpCiAgICAgLCBtX2JhdHRlcnlQcm92aWRlcihC
YXR0ZXJ5UHJvdmlkZXI6OmNyZWF0ZShjb250ZXh0KSkKICNlbmRpZgpAQCAtMTU4LDYgKzE2MCwx
MSBAQCBFd2tfRmF2aWNvbl9EYXRhYmFzZSogRXdrX0NvbnRleHQ6OmZhdmljb25EYXRhYmFzZSgp
CiAgICAgcmV0dXJuIG1fZmF2aWNvbkRhdGFiYXNlLmdldCgpOwogfQogCitFd2tfU3RvcmFnZV9N
YW5hZ2VyKiBFd2tfQ29udGV4dDo6c3RvcmFnZU1hbmFnZXIoKSBjb25zdAoreworICAgIHJldHVy
biBtX3N0b3JhZ2VNYW5hZ2VyLmdldCgpOworfQorCiBSZXF1ZXN0TWFuYWdlckNsaWVudEVmbCog
RXdrX0NvbnRleHQ6OnJlcXVlc3RNYW5hZ2VyKCkKIHsKICAgICByZXR1cm4gbV9yZXF1ZXN0TWFu
YWdlckNsaWVudC5nZXQoKTsKQEAgLTIxNSw2ICsyMjIsMTMgQEAgRXdrX0Zhdmljb25fRGF0YWJh
c2UqIGV3a19jb250ZXh0X2Zhdmljb25fZGF0YWJhc2VfZ2V0KGNvbnN0IEV3a19Db250ZXh0KiBl
d2tDb24KICAgICByZXR1cm4gY29uc3RfY2FzdDxFd2tfQ29udGV4dCo+KGV3a0NvbnRleHQpLT5m
YXZpY29uRGF0YWJhc2UoKTsKIH0KIAorRXdrX1N0b3JhZ2VfTWFuYWdlciogZXdrX2NvbnRleHRf
c3RvcmFnZV9tYW5hZ2VyX2dldChjb25zdCBFd2tfQ29udGV4dCogZXdrQ29udGV4dCkKK3sKKyAg
ICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoZXdrQ29udGV4dCwgMCk7CisKKyAgICBy
ZXR1cm4gZXdrQ29udGV4dC0+c3RvcmFnZU1hbmFnZXIoKTsKK30KKwogV0tDb250ZXh0UmVmIEV3
a19Db250ZXh0Ojp3a0NvbnRleHQoKQogewogICAgIHJldHVybiBtX2NvbnRleHQuZ2V0KCk7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfY29udGV4dC5o
IGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2NvbnRleHQuaAppbmRleCBm
NmI4YmI2Li4wZDZiNzRhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L2VmbC9ld2tfY29udGV4dC5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZs
L2V3a19jb250ZXh0LmgKQEAgLTQwLDYgKzQwLDcgQEAKICNpbmNsdWRlICJld2tfY29va2llX21h
bmFnZXIuaCIKICNpbmNsdWRlICJld2tfZmF2aWNvbl9kYXRhYmFzZS5oIgogI2luY2x1ZGUgImV3
a19uYXZpZ2F0aW9uX2RhdGEuaCIKKyNpbmNsdWRlICJld2tfc3RvcmFnZV9tYW5hZ2VyLmgiCiAj
aW5jbHVkZSAiZXdrX3VybF9zY2hlbWVfcmVxdWVzdC5oIgogI2luY2x1ZGUgPEV2YXMuaD4KIApA
QCAtMTkyLDYgKzE5MywxNSBAQCBFQVBJIEV3a19Db29raWVfTWFuYWdlciAqZXdrX2NvbnRleHRf
Y29va2llX21hbmFnZXJfZ2V0KGNvbnN0IEV3a19Db250ZXh0ICpjb250ZQogRUFQSSBFd2tfRmF2
aWNvbl9EYXRhYmFzZSAqZXdrX2NvbnRleHRfZmF2aWNvbl9kYXRhYmFzZV9nZXQoY29uc3QgRXdr
X0NvbnRleHQgKmNvbnRleHQpOwogCiAvKioKKyAqIEdldHMgdGhlIHN0b3JhZ2UgbWFuYWdlciBp
bnN0YW5jZSBmb3IgdGhpcyBAYSBjb250ZXh0LgorICoKKyAqIEBwYXJhbSBjb250ZXh0IGNvbnRl
eHQgb2JqZWN0IHRvIHF1ZXJ5LgorICoKKyAqIEByZXR1cm4gRXdrX1N0b3JhZ2VfTWFuYWdlciBv
YmplY3QgaW5zdGFuY2Ugb3IgQGMgTlVMTCBpbiBjYXNlIG9mIGZhaWx1cmUuCisgKi8KK0VBUEkg
RXdrX1N0b3JhZ2VfTWFuYWdlciAqZXdrX2NvbnRleHRfc3RvcmFnZV9tYW5hZ2VyX2dldChjb25z
dCBFd2tfQ29udGV4dCAqY29udGV4dCk7CisKKy8qKgogICogUmVnaXN0ZXIgQGEgc2NoZW1lIGlu
IEBhIGNvbnRleHQuCiAgKgogICogV2hlbiBhbiBVUkwgcmVxdWVzdCB3aXRoIEBhIHNjaGVtZSBp
cyBtYWRlIGluIHRoZSAjRXdrX0NvbnRleHQsIHRoZSBjYWxsYmFjawpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2NvbnRleHRfcHJpdmF0ZS5oIGIvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2NvbnRleHRfcHJpdmF0ZS5oCmluZGV4
IGJhNDYzMjQuLmY0MzY0OGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvZWZsL2V3a19jb250ZXh0X3ByaXZhdGUuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL2VmbC9ld2tfY29udGV4dF9wcml2YXRlLmgKQEAgLTU3LDYgKzU3LDggQEAgcHVibGlj
OgogCiAgICAgRXdrX0Zhdmljb25fRGF0YWJhc2UqIGZhdmljb25EYXRhYmFzZSgpOwogCisgICAg
RXdrX1N0b3JhZ2VfTWFuYWdlciogc3RvcmFnZU1hbmFnZXIoKSBjb25zdDsKKwogICAgIFdlYktp
dDo6UmVxdWVzdE1hbmFnZXJDbGllbnRFZmwqIHJlcXVlc3RNYW5hZ2VyKCk7CiAKICNpZiBFTkFC
TEUoVklCUkFUSU9OKQpAQCAtODQsNiArODYsNyBAQCBwcml2YXRlOgogCiAgICAgT3duUHRyPEV3
a19Db29raWVfTWFuYWdlcj4gbV9jb29raWVNYW5hZ2VyOwogICAgIE93blB0cjxFd2tfRmF2aWNv
bl9EYXRhYmFzZT4gbV9mYXZpY29uRGF0YWJhc2U7CisgICAgT3duUHRyPEV3a19TdG9yYWdlX01h
bmFnZXI+IG1fc3RvcmFnZU1hbmFnZXI7CiAjaWYgRU5BQkxFKEJBVFRFUllfU1RBVFVTKQogICAg
IFJlZlB0cjxXZWJLaXQ6OkJhdHRlcnlQcm92aWRlcj4gbV9iYXR0ZXJ5UHJvdmlkZXI7CiAjZW5k
aWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19zZWN1
cml0eV9vcmlnaW4uY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3Nl
Y3VyaXR5X29yaWdpbi5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmMw
ZjhjNwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZs
L2V3a19zZWN1cml0eV9vcmlnaW4uY3BwCkBAIC0wLDAgKzEsOTAgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTIgU2Ftc3VuZyBFbGVjdHJvbmljcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQg
SE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IFRIRSBDT1BZUklHSFQgSE9MREVSIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcKKyAqIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgImV3a19z
ZWN1cml0eV9vcmlnaW4uaCIKKworI2luY2x1ZGUgIldLQVBJQ2FzdC5oIgorI2luY2x1ZGUgIldL
U2VjdXJpdHlPcmlnaW4uaCIKKyNpbmNsdWRlICJld2tfc2VjdXJpdHlfb3JpZ2luX3ByaXZhdGUu
aCIKKwordXNpbmcgbmFtZXNwYWNlIFdlYktpdDsKKworRXdrX1NlY3VyaXR5X09yaWdpbjo6RXdr
X1NlY3VyaXR5X09yaWdpbihXS1NlY3VyaXR5T3JpZ2luUmVmIG9yaWdpblJlZikKKyAgICA6IG1f
d2tPcmlnaW4ob3JpZ2luUmVmKQorICAgICwgbV9ob3N0KEFkb3B0V0ssIFdLU2VjdXJpdHlPcmln
aW5Db3B5SG9zdChvcmlnaW5SZWYpKQorICAgICwgbV9wcm90b2NvbChBZG9wdFdLLCBXS1NlY3Vy
aXR5T3JpZ2luQ29weVByb3RvY29sKG9yaWdpblJlZikpCit7IH0KKworY29uc3QgY2hhciogRXdr
X1NlY3VyaXR5X09yaWdpbjo6aG9zdCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1faG9zdDsKK30K
KworY29uc3QgY2hhciogRXdrX1NlY3VyaXR5X09yaWdpbjo6cHJvdG9jb2woKSBjb25zdAorewor
ICAgIHJldHVybiBtX3Byb3RvY29sOworfQorCit1aW50MzJfdCBFd2tfU2VjdXJpdHlfT3JpZ2lu
Ojpwb3J0KCkgY29uc3QKK3sKKyAgICByZXR1cm4gV0tTZWN1cml0eU9yaWdpbkdldFBvcnQobV93
a09yaWdpbi5nZXQoKSk7Cit9CisKK0V3a19TZWN1cml0eV9PcmlnaW4qIGV3a19zZWN1cml0eV9v
cmlnaW5fcmVmKEV3a19TZWN1cml0eV9PcmlnaW4qIG9yaWdpbikKK3sKKyAgICBFSU5BX1NBRkVU
WV9PTl9OVUxMX1JFVFVSTl9WQUwob3JpZ2luLCAwKTsKKworICAgIG9yaWdpbi0+cmVmKCk7Cisg
ICAgcmV0dXJuIG9yaWdpbjsKK30KKwordm9pZCBld2tfc2VjdXJpdHlfb3JpZ2luX3VucmVmKEV3
a19TZWN1cml0eV9PcmlnaW4qIG9yaWdpbikKK3sKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JF
VFVSTihvcmlnaW4pOworCisgICAgb3JpZ2luLT5kZXJlZigpOworfQorCitjb25zdCBjaGFyKiBl
d2tfc2VjdXJpdHlfb3JpZ2luX2hvc3RfZ2V0KGNvbnN0IEV3a19TZWN1cml0eV9PcmlnaW4qIG9y
aWdpbikKK3sKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwob3JpZ2luLCAwKTsK
KworICAgIHJldHVybiBvcmlnaW4tPmhvc3QoKTsKK30KKworY29uc3QgY2hhciogZXdrX3NlY3Vy
aXR5X29yaWdpbl9wcm90b2NvbF9nZXQoY29uc3QgRXdrX1NlY3VyaXR5X09yaWdpbiogb3JpZ2lu
KQoreworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChvcmlnaW4sIDApOworCisg
ICAgcmV0dXJuIG9yaWdpbi0+cHJvdG9jb2woKTsKK30KKwordWludDMyX3QgZXdrX3NlY3VyaXR5
X29yaWdpbl9wb3J0X2dldChjb25zdCBFd2tfU2VjdXJpdHlfT3JpZ2luKiBvcmlnaW4pCit7Cisg
ICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKG9yaWdpbiwgMCk7CisKKyAgICByZXR1
cm4gb3JpZ2luLT5wb3J0KCk7Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL2VmbC9ld2tfc2VjdXJpdHlfb3JpZ2luLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL2VmbC9ld2tfc2VjdXJpdHlfb3JpZ2luLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMC4uNWJlODQxNgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvZWZsL2V3a19zZWN1cml0eV9vcmlnaW4uaApAQCAtMCwwICsxLDEwMiBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMiBTYW1zdW5nIEVsZWN0cm9uaWNzLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIg
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORworICogTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvKioKKyAqIEBmaWxlICAg
IGV3a19zZWN1cml0eV9vcmlnaW4uaAorICogQGJyaWVmICAgU2VjdXJpdHkgT3JpZ2luIEFQSS4K
KyAqCisgKiBTZWN1cml0eSBPcmlnaW4gaXMgdGhlIG1lY2hhbmlzbSB0aGF0IGRlZmluZXMgdGhl
IGFjY2VzcyBsaW1pdHMgb2YgYSB3ZWJzaXRlLgorICogQmFzZWQgb24gaW5mb3JtYXRpb24gc3Vj
aCBhcyBkb21haW4sIHByb3RvY29sIGFuZCBwb3J0LCB5b3UgY2FuIG9yIGNhbm5vdCBncmFudAor
ICogYXV0aG9yaXphdGlvbiBmb3IgYWNjZXNzaW5nIGRhdGEgYW5kIHBlcmZvcm1pbmcgY2VydGFp
biB0YXNrcy4KKyAqLworCisjaWZuZGVmIGV3a19zZWN1cml0eV9vcmlnaW5faAorI2RlZmluZSBl
d2tfc2VjdXJpdHlfb3JpZ2luX2gKKworI2luY2x1ZGUgPEVpbmEuaD4KKworI2lmZGVmIF9fY3Bs
dXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCisvKiogQ3JlYXRlcyBhIHR5cGUgbmFtZSBm
b3IgRXdrX1NlY3VyaXR5X09yaWdpbi4gKi8KK3R5cGVkZWYgc3RydWN0IEV3a19TZWN1cml0eV9P
cmlnaW4gRXdrX1NlY3VyaXR5X09yaWdpbjsKKworLyoqCisgKiBJbmNyZWFzZXMgdGhlIHJlZmVy
ZW5jZSBjb3VudCBvZiB0aGUgZ2l2ZW4gb2JqZWN0LgorICoKKyAqIEBwYXJhbSBvcmlnaW4gdGhl
IG9yaWdpbiBvYmplY3QgdG8gaW5jcmVhc2UgdGhlIHJlZmVyZW5jZSBjb3VudAorICoKKyAqIEBy
ZXR1cm4gYSBwb2ludGVyIHRvIHRoZSBvYmplY3Qgb24gc3VjY2VzcywgQGMgTlVMTCBvdGhlcndp
c2UKKyAqLworRUFQSSBFd2tfU2VjdXJpdHlfT3JpZ2luICpld2tfc2VjdXJpdHlfb3JpZ2luX3Jl
ZihFd2tfU2VjdXJpdHlfT3JpZ2luICpvKTsKKworLyoqCisgKiBEZWNyZWFzZXMgdGhlIHJlZmVy
ZW5jZSBjb3VudCBvZiB0aGUgZ2l2ZW4gb2JqZWN0LCBwb3NzaWJseSBmcmVlaW5nIGl0LgorICoK
KyAqIFdoZW4gdGhlIHJlZmVyZW5jZSBjb3VudCByZWFjaGVzIDAsIHRoZSBvcmlnaW4gaXMgZnJl
ZWQuCisgKgorICogQHBhcmFtIG9yaWdpbiB0aGUgb3JpZ2luIG9iamVjdCB0byBkZWNyZWFzZSB0
aGUgcmVmZXJlbmNlIGNvdW50CisgKi8KK0VBUEkgdm9pZCBld2tfc2VjdXJpdHlfb3JpZ2luX3Vu
cmVmKEV3a19TZWN1cml0eV9PcmlnaW4gKm8pOworCisvKioKKyAqIFJldHVybnMgdGhlIGhvc3Qg
b2YgdGhlIHNlY3VyaXR5IG9yaWdpbi4KKyAqCisgKiBAcGFyYW0gbyBzZWN1cml0eSBvcmlnaW4g
b2JqZWN0CisgKgorICogQHJldHVybiB0aGUgaG9zdCBkb21haW4gcG9pbnRlciBvciBAYyBOVUxM
IGlmIHRoZXJlIGlzIG5vdCBhIGhvc3Qgc2NoZW1lLgorICogICAgICAgICBUaGlzIHBvaW50ZXIg
aXMgZ3VhcmFudGVlZCB0byBiZSBlaW5hX3N0cmluZ3NoYXJlLCBzbyB3aGVuZXZlciBwb3NzaWJs
ZQorICogICAgICAgICBzYXZlIHlvdXJzZWxmIGZyb20gY3B1IGN5Y2xlcyBhbmQgdXNlIGVpbmFf
c3RyaW5nc2hhcmVfcmVmKCkKKyAqICAgICAgICAgaW5zdGVhZCBvZiBlaW5hX3N0cmluZ3NoYXJl
X2FkZCgpIG9yIHN0cmR1cCgpLgorICovCitFQVBJIGNvbnN0IGNoYXIgKmV3a19zZWN1cml0eV9v
cmlnaW5faG9zdF9nZXQoY29uc3QgRXdrX1NlY3VyaXR5X09yaWdpbiAqbyk7CisKKy8qKgorICog
UmV0dXJucyB0aGUgcG9ydCBvZiB0aGUgc2VjdXJpdHkgb3JpZ2luLgorICoKKyAqIEBwYXJhbSBv
IHNlY3VyaXR5IG9yaWdpbiBvYmplY3QKKyAqCisgKiBAcmV0dXJuIHRoZSBwb3J0IG51bWJlciBv
ciBAYyAwIGlmIHRoZXJlIGlzIG5vdCBhIHByb3BlciBzZWN1cml0eSBvcmlnaW4gc2NoZW1lCisg
Ki8KK0VBUEkgdWludDMyX3QgZXdrX3NlY3VyaXR5X29yaWdpbl9wb3J0X2dldChjb25zdCBFd2tf
U2VjdXJpdHlfT3JpZ2luICpvKTsKKworLyoqCisgKiBSZXR1cm5zIHRoZSBwcm90b2NvbCBvZiB0
aGUgc2VjdXJpdHkgb3JpZ2luLgorICoKKyAqIEBwYXJhbSBvIHNlY3VyaXR5IG9yaWdpbiBvYmpl
Y3QKKyAqCisgKiBAcmV0dXJuIHRoZSBwcm90b2NvbCBzY2hlbWUgcG9pbnRlciBvciBAYyBOVUxM
IGlmIHRoZXJlIGlzIG5vdCBhIHByb3RvY29sIHNjaGVtZS4KKyAqICAgICAgICAgVGhpcyBwb2lu
dGVyIGlzIGd1YXJhbnRlZWQgdG8gYmUgZWluYV9zdHJpbmdzaGFyZSwgc28gd2hlbmV2ZXIgcG9z
c2libGUKKyAqICAgICAgICAgc2F2ZSB5b3Vyc2VsZiBmcm9tIGNwdSBjeWNsZXMgYW5kIHVzZSBl
aW5hX3N0cmluZ3NoYXJlX3JlZigpCisgKiAgICAgICAgIGluc3RlYWQgb2YgZWluYV9zdHJpbmdz
aGFyZV9hZGQoKSBvciBzdHJkdXAoKS4KKyAqLworRUFQSSBjb25zdCBjaGFyICpld2tfc2VjdXJp
dHlfb3JpZ2luX3Byb3RvY29sX2dldChjb25zdCBFd2tfU2VjdXJpdHlfT3JpZ2luICpvKTsKKwor
I2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKyNlbmRpZiAvLyBld2tfc2VjdXJpdHlfb3Jp
Z2luX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19z
ZWN1cml0eV9vcmlnaW5fcHJpdmF0ZS5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9l
ZmwvZXdrX3NlY3VyaXR5X29yaWdpbl9wcml2YXRlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMC4uMDQwMTI0MQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvZWZsL2V3a19zZWN1cml0eV9vcmlnaW5fcHJpdmF0ZS5oCkBAIC0wLDAgKzEs
NTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgU2Ftc3VuZyBFbGVjdHJvbmljcy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMi
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcKKyAqIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBld2tfc2Vj
dXJpdHlfb3JpZ2luX3ByaXZhdGVfaAorI2RlZmluZSBld2tfc2VjdXJpdHlfb3JpZ2luX3ByaXZh
dGVfaAorCisjaW5jbHVkZSAiV0tFaW5hU2hhcmVkU3RyaW5nLmgiCisjaW5jbHVkZSAiV0tTZWN1
cml0eU9yaWdpbi5oIgorI2luY2x1ZGUgPFdlYktpdDIvV0tCYXNlLmg+CisjaW5jbHVkZSA8d3Rm
L1Bhc3NSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgorCitjbGFzcyBFd2tf
U2VjdXJpdHlfT3JpZ2luIDogcHVibGljIFJlZkNvdW50ZWQ8RXdrX1NlY3VyaXR5X09yaWdpbj4g
eworcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPEV3a19TZWN1cml0eV9PcmlnaW4+IGNy
ZWF0ZShXS1NlY3VyaXR5T3JpZ2luUmVmIG9yaWdpblJlZikKKyAgICB7CisgICAgICAgIHJldHVy
biBhZG9wdFJlZihuZXcgRXdrX1NlY3VyaXR5X09yaWdpbihvcmlnaW5SZWYpKTsKKyAgICB9CisK
KyAgICBjb25zdCBjaGFyKiBob3N0KCkgY29uc3Q7CisgICAgY29uc3QgY2hhciogcHJvdG9jb2wo
KSBjb25zdDsKKyAgICB1aW50MzJfdCBwb3J0KCkgY29uc3Q7CisKK3ByaXZhdGU6CisgICAgZXhw
bGljaXQgRXdrX1NlY3VyaXR5X09yaWdpbihXS1NlY3VyaXR5T3JpZ2luUmVmIG9yaWdpblJlZik7
CisKKyAgICBXS1JldGFpblB0cjxXS1NlY3VyaXR5T3JpZ2luUmVmPiBtX3drT3JpZ2luOworICAg
IFdLRWluYVNoYXJlZFN0cmluZyBtX2hvc3Q7CisgICAgV0tFaW5hU2hhcmVkU3RyaW5nIG1fcHJv
dG9jb2w7Cit9OworCisjZW5kaWYgLy8gZXdrX3NlY3VyaXR5X29yaWdpbl9wcml2YXRlX2gKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19zdG9yYWdlX21h
bmFnZXIuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3N0b3JhZ2Vf
bWFuYWdlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTYzMmIyZQot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19z
dG9yYWdlX21hbmFnZXIuY3BwCkBAIC0wLDAgKzEsOTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTIgU2Ftc3VuZyBFbGVjdHJvbmljcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVS
UyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBD
T1BZUklHSFQgSE9MREVSIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcKKyAqIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUwor
ICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgImV3a19zdG9yYWdl
X21hbmFnZXIuaCIKKworI2luY2x1ZGUgIldLQVBJQ2FzdC5oIgorI2luY2x1ZGUgIldLQXJyYXku
aCIKKyNpbmNsdWRlICJXS0tleVZhbHVlU3RvcmFnZU1hbmFnZXIuaCIKKyNpbmNsdWRlICJld2tf
ZXJyb3JfcHJpdmF0ZS5oIgorI2luY2x1ZGUgImV3a19zZWN1cml0eV9vcmlnaW4uaCIKKyNpbmNs
dWRlICJld2tfc2VjdXJpdHlfb3JpZ2luX3ByaXZhdGUuaCIKKyNpbmNsdWRlICJld2tfc3RvcmFn
ZV9tYW5hZ2VyX3ByaXZhdGUuaCIKKyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgorCit1c2lu
ZyBuYW1lc3BhY2UgV2ViS2l0OworCitFd2tfU3RvcmFnZV9NYW5hZ2VyOjpFd2tfU3RvcmFnZV9N
YW5hZ2VyKFdLS2V5VmFsdWVTdG9yYWdlTWFuYWdlclJlZiB3a1N0b3JhZ2VNYW5hZ2VyUmVmKQor
ICAgIDogbV93a1N0b3JhZ2VNYW5hZ2VyKHdrU3RvcmFnZU1hbmFnZXJSZWYpCit7IH0KKwordm9p
ZCBFd2tfU3RvcmFnZV9NYW5hZ2VyOjpnZXRTdG9yYWdlT3JpZ2lucyh2b2lkKiBjb250ZXh0LCBX
S0tleVZhbHVlU3RvcmFnZU1hbmFnZXJHZXRLZXlWYWx1ZVN0b3JhZ2VPcmlnaW5zRnVuY3Rpb24g
Y2FsbGJhY2spIGNvbnN0Cit7CisgICAgV0tLZXlWYWx1ZVN0b3JhZ2VNYW5hZ2VyR2V0S2V5VmFs
dWVTdG9yYWdlT3JpZ2lucyhtX3drU3RvcmFnZU1hbmFnZXIuZ2V0KCksIGNvbnRleHQsIGNhbGxi
YWNrKTsKK30KKworRWluYV9MaXN0KiBFd2tfU3RvcmFnZV9NYW5hZ2VyOjpjcmVhdGVPcmlnaW5M
aXN0KFdLQXJyYXlSZWYgb3JpZ2lucykgY29uc3QKK3sKKyAgICBFaW5hX0xpc3QqIG9yaWdpbkxp
c3QgPSAwOworICAgIGNvbnN0IHNpemVfdCBsZW5ndGggPSBXS0FycmF5R2V0U2l6ZShvcmlnaW5z
KTsKKworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsKKyAgICAgICAg
V0tTZWN1cml0eU9yaWdpblJlZiB3a09yaWdpblJlZiA9IHN0YXRpY19jYXN0PFdLU2VjdXJpdHlP
cmlnaW5SZWY+KFdLQXJyYXlHZXRJdGVtQXRJbmRleChvcmlnaW5zLCBpKSk7CisgICAgICAgIFJl
ZlB0cjxFd2tfU2VjdXJpdHlfT3JpZ2luPiBvcmlnaW4gPSBtX3dyYXBwZXJDYWNoZS5nZXQod2tP
cmlnaW5SZWYpOworICAgICAgICBpZiAoIW9yaWdpbikgeworICAgICAgICAgICAgb3JpZ2luID0g
RXdrX1NlY3VyaXR5X09yaWdpbjo6Y3JlYXRlKHdrT3JpZ2luUmVmKTsKKyAgICAgICAgICAgIG1f
d3JhcHBlckNhY2hlLnNldCh3a09yaWdpblJlZiwgb3JpZ2luKTsKKyAgICAgICAgfQorICAgICAg
ICBvcmlnaW5MaXN0ID0gZWluYV9saXN0X2FwcGVuZChvcmlnaW5MaXN0LCBvcmlnaW4ucmVsZWFz
ZSgpLmxlYWtSZWYoKSk7CisgICAgfQorCisgICAgcmV0dXJuIG9yaWdpbkxpc3Q7Cit9CisKK3N0
cnVjdCBFd2tfU3RvcmFnZV9PcmlnaW5zX0FzeW5jX0dldF9Db250ZXh0IHsKKyAgICBjb25zdCBF
d2tfU3RvcmFnZV9NYW5hZ2VyKiBtYW5hZ2VyOworICAgIEV3a19TdG9yYWdlX09yaWdpbnNfR2V0
X0NiIGNhbGxiYWNrOworICAgIHZvaWQqIHVzZXJEYXRhOworCisgICAgRXdrX1N0b3JhZ2VfT3Jp
Z2luc19Bc3luY19HZXRfQ29udGV4dChjb25zdCBFd2tfU3RvcmFnZV9NYW5hZ2VyKiBtYW5hZ2Vy
LCBFd2tfU3RvcmFnZV9PcmlnaW5zX0dldF9DYiBjYWxsYmFjaywgdm9pZCogdXNlckRhdGEpCisg
ICAgICAgIDogbWFuYWdlcihtYW5hZ2VyKQorICAgICAgICAsIGNhbGxiYWNrKGNhbGxiYWNrKQor
ICAgICAgICAsIHVzZXJEYXRhKHVzZXJEYXRhKQorICAgIHsgfQorfTsKKworc3RhdGljIHZvaWQg
Z2V0U3RvcmFnZU9yaWdpbnNDYWxsYmFjayhXS0FycmF5UmVmIG9yaWdpbnMsIFdLRXJyb3JSZWYg
d2tFcnJvciwgdm9pZCogY29udGV4dCkKK3sKKyAgICBFaW5hX0xpc3QqIG9yaWdpbkxpc3QgPSAw
OworICAgIE93blB0cjxFd2tfU3RvcmFnZV9PcmlnaW5zX0FzeW5jX0dldF9Db250ZXh0Kj4gd2Vi
U3RvcmFnZUNvbnRleHQgPSBhZG9wdFB0cihzdGF0aWNfY2FzdDxFd2tfU3RvcmFnZV9PcmlnaW5z
X0FzeW5jX0dldF9Db250ZXh0Kj4oY29udGV4dCkpOworCisgICAgb3JpZ2luTGlzdCA9IHdlYlN0
b3JhZ2VDb250ZXh0LT5tYW5hZ2VyLT5jcmVhdGVPcmlnaW5MaXN0KG9yaWdpbnMpOworCisgICAg
T3duUHRyPEV3a19FcnJvcj4gZXdrRXJyb3IgPSBFd2tfRXJyb3I6OmNyZWF0ZSh3a0Vycm9yKTsK
KyAgICB3ZWJTdG9yYWdlQ29udGV4dC0+Y2FsbGJhY2sob3JpZ2luTGlzdCwgZXdrRXJyb3IuZ2V0
KCksIHdlYlN0b3JhZ2VDb250ZXh0LT51c2VyRGF0YSk7Cit9CisKK0VpbmFfQm9vbCBld2tfc3Rv
cmFnZV9tYW5hZ2VyX29yaWdpbnNfZ2V0KGNvbnN0IEV3a19TdG9yYWdlX01hbmFnZXIqIGV3a1N0
b3JhZ2VNYW5hZ2VyLCBFd2tfU3RvcmFnZV9PcmlnaW5zX0dldF9DYiBjYWxsYmFjaywgdm9pZCog
dXNlckRhdGEpCit7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKGV3a1N0b3Jh
Z2VNYW5hZ2VyLCBmYWxzZSk7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKGNh
bGxiYWNrLCBmYWxzZSk7CisKKyAgICBFd2tfU3RvcmFnZV9PcmlnaW5zX0FzeW5jX0dldF9Db250
ZXh0KiBjb250ZXh0ID0gbmV3IEV3a19TdG9yYWdlX09yaWdpbnNfQXN5bmNfR2V0X0NvbnRleHQo
ZXdrU3RvcmFnZU1hbmFnZXIsIGNhbGxiYWNrLCB1c2VyRGF0YSk7CisgICAgZXdrU3RvcmFnZU1h
bmFnZXItPmdldFN0b3JhZ2VPcmlnaW5zKGNvbnRleHQsIGdldFN0b3JhZ2VPcmlnaW5zQ2FsbGJh
Y2spOworCisgICAgcmV0dXJuIHRydWU7Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL2VmbC9ld2tfc3RvcmFnZV9tYW5hZ2VyLmggYi9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL2VmbC9ld2tfc3RvcmFnZV9tYW5hZ2VyLmgKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMC4uZDk0YTU1NgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19zdG9yYWdlX21hbmFnZXIuaApAQCAtMCwwICsxLDcz
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIFNhbXN1bmcgRWxlY3Ryb25pY3MuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HCisgKiBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8qKgorICogQGZpbGUgICBl
d2tfc3RvcmFnZV9tYW5hZ2VyLmgKKyAqIEBicmllZiAgRGVzY3JpYmVzIHRoZSBFd2sgU3RvcmFn
ZSBNYW5hZ2VyIEFQSS4KKyAqCisgKiBFd2sgU3RvcmFnZSBNYW5hZ2VyIG1hbmFnZXMgd2ViIHN0
b3JhZ2UuCisgKi8KKworI2lmbmRlZiBld2tfc3RvcmFnZV9tYW5hZ2VyX2gKKyNkZWZpbmUgZXdr
X3N0b3JhZ2VfbWFuYWdlcl9oCisKKyNpbmNsdWRlICJld2tfZXJyb3IuaCIKKyNpbmNsdWRlIDxF
aW5hLmg+CisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKKworLyoq
IENyZWF0ZXMgYSB0eXBlIG5hbWUgZm9yIEV3a19TdG9yYWdlX01hbmFnZXIuICovCit0eXBlZGVm
IHN0cnVjdCBFd2tfU3RvcmFnZV9NYW5hZ2VyIEV3a19TdG9yYWdlX01hbmFnZXI7CisKKy8qKgor
ICogQHR5cGVkZWYgRXdrX1N0b3JhZ2VfT3JpZ2luc19HZXRfQ2IgRXdrX1N0b3JhZ2VfT3JpZ2lu
c19HZXRfQ2IKKyAqIEBicmllZiBDYWxsYmFjayB0eXBlIGZvciB1c2Ugd2l0aCBld2tfc3RvcmFn
ZV9tYW5hZ2VyX29yaWdpbnNfZ2V0KCkuCisgKgorICogQHBhcmFtIG9yaWdpbnMgQGMgRWluYV9M
aXN0IGNvbnRhaW5pbmcgQGMgRXdrX1NlY3VyaXR5X09yaWdpbiBlbGVtZW50cyBvciBAYyBOVUxM
IGluIGNhc2Ugb2YgZXJyb3IsCisgKiAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBFaW5hX0xp
c3QgYW5kIGl0cyBpdGVtcyBzaG91bGQgYmUgZnJlZWQgYWZ0ZXIgdXNlLiBVc2UgZXdrX3NlY3Vy
aXR5X29yaWdpbl91bnJlZigpCisgKiAgICAgICAgICAgICAgICAgICAgICAgIHRvIGZyZWUgdGhl
IGl0ZW1zCisgKi8KK3R5cGVkZWYgdm9pZCAoKkV3a19TdG9yYWdlX09yaWdpbnNfR2V0X0NiKShF
aW5hX0xpc3QgKm9yaWdpbnMsIEV3a19FcnJvciAqZXJyb3IsIHZvaWQgKnVzZXJfZGF0YSk7CisK
Ky8qKgorICogR2V0cyBsaXN0IG9mIG9yaWdpbnMgdGhhdCBhcmUgc3RvcmVkIGluIHN0b3JhZ2Ug
ZGIgYXN5bmNocm9ub3VzbHkuCisgKgorICogVGhpcyBmdW5jdGlvbiBhbGxvY2F0ZXMgbWVtb3J5
IGZvciBjb250ZXh0IHN0cnVjdHVyZSBtYWRlIGZyb20gY2FsbGJhY2sgYW5kIHVzZXJfZGF0YS4K
KyAqCisgKiBAcGFyYW0gbWFuYWdlciBFd2tfU3RvcmFnZV9NYW5hZ2VyIG9iamVjdAorICogQHBh
cmFtIGNhbGxiYWNrIGNhbGxiYWNrIHRvIGdldCBzdG9yYWdlIG9yaWdpbnMKKyAqIEBwYXJhbSB1
c2VyX2RhdGEgdXNlcl9kYXRhIHdpbGwgYmUgcGFzc2VkIHdoZW4gcmVzdWx0X2NhbGxiYWNrIGlz
IGNhbGxlZCwKKyAqICAgIC1pLmUuLCB1c2VyIGRhdGEgd2lsbCBiZSBrZXB0IHVudGlsIGNhbGxi
YWNrIGlzIGNhbGxlZAorICoKKyAqIEByZXR1cm4gQGMgRUlOQV9UUlVFIG9uIHN1Y2Nlc3MsIEBj
IEVJTkFfRkFMU0Ugb24gZmFpbHVyZQorICovCitFQVBJIEVpbmFfQm9vbCBld2tfc3RvcmFnZV9t
YW5hZ2VyX29yaWdpbnNfZ2V0KGNvbnN0IEV3a19TdG9yYWdlX01hbmFnZXIgKm1hbmFnZXIsIEV3
a19TdG9yYWdlX09yaWdpbnNfR2V0X0NiIGNhbGxiYWNrLCB2b2lkICp1c2VyX2RhdGEpOworCisj
aWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorI2VuZGlmIC8vIGV3a19zdG9yYWdlX21hbmFn
ZXJfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3N0
b3JhZ2VfbWFuYWdlcl9wcml2YXRlLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2Vm
bC9ld2tfc3RvcmFnZV9tYW5hZ2VyX3ByaXZhdGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwLi41ZWVlYTQ5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9lZmwvZXdrX3N0b3JhZ2VfbWFuYWdlcl9wcml2YXRlLmgKQEAgLTAsMCArMSw1
MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBTYW1zdW5nIEVsZWN0cm9uaWNzLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIg
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORworICogTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIGV3a19zdG9y
YWdlX21hbmFnZXJfcHJpdmF0ZV9oCisjZGVmaW5lIGV3a19zdG9yYWdlX21hbmFnZXJfcHJpdmF0
ZV9oCisKKyNpbmNsdWRlICJXS0tleVZhbHVlU3RvcmFnZU1hbmFnZXIuaCIKKyNpbmNsdWRlICJX
S1JldGFpblB0ci5oIgorI2luY2x1ZGUgImV3a19zZWN1cml0eV9vcmlnaW5fcHJpdmF0ZS5oIgor
I2luY2x1ZGUgPFdlYktpdDIvV0tCYXNlLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4K
KworY2xhc3MgRXdrX1N0b3JhZ2VfTWFuYWdlciB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NP
d25QdHI8RXdrX1N0b3JhZ2VfTWFuYWdlcj4gY3JlYXRlKFdLS2V5VmFsdWVTdG9yYWdlTWFuYWdl
clJlZiB3a1N0b3JhZ2VNYW5hZ2VyUmVmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UHRy
KG5ldyBFd2tfU3RvcmFnZV9NYW5hZ2VyKHdrU3RvcmFnZU1hbmFnZXJSZWYpKTsKKyAgICB9CisK
KyAgICBFaW5hX0xpc3QqIGNyZWF0ZU9yaWdpbkxpc3QoV0tBcnJheVJlZiB3a0xpc3QpIGNvbnN0
OworICAgIHZvaWQgZ2V0U3RvcmFnZU9yaWdpbnModm9pZCogY29udGV4dCwgV0tLZXlWYWx1ZVN0
b3JhZ2VNYW5hZ2VyR2V0S2V5VmFsdWVTdG9yYWdlT3JpZ2luc0Z1bmN0aW9uIGNhbGxiYWNrKSBj
b25zdDsKKworcHJpdmF0ZToKKyAgICBleHBsaWNpdCBFd2tfU3RvcmFnZV9NYW5hZ2VyKFdLS2V5
VmFsdWVTdG9yYWdlTWFuYWdlclJlZiB3a1N0b3JhZ2VNYW5hZ2VyUmVmKTsKKworICAgIFdLUmV0
YWluUHRyPFdLS2V5VmFsdWVTdG9yYWdlTWFuYWdlclJlZj4gbV93a1N0b3JhZ2VNYW5hZ2VyOwor
ICAgIG11dGFibGUgSGFzaE1hcDxXS1NlY3VyaXR5T3JpZ2luUmVmLCBSZWZQdHI8RXdrX1NlY3Vy
aXR5X09yaWdpbj4gPiBtX3dyYXBwZXJDYWNoZTsKK307CisKKyNlbmRpZiAvLyBld2tfc3RvcmFn
ZV9tYW5hZ2VyX3ByaXZhdGVfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9lZmwvdGVzdHMvdGVzdF9ld2syX2NvbnRleHQuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9lZmwvdGVzdHMvdGVzdF9ld2syX2NvbnRleHQuY3BwCmluZGV4IDg2NzQ2ZGMu
LjFkNDRhY2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL3Rl
c3RzL3Rlc3RfZXdrMl9jb250ZXh0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL2VmbC90ZXN0cy90ZXN0X2V3azJfY29udGV4dC5jcHAKQEAgLTYxLDYgKzYxLDE0IEBAIFRF
U1RfRihFV0syVW5pdFRlc3RCYXNlLCBld2tfY29udGV4dF9mYXZpY29uX2RhdGFiYXNlX2dldCkK
ICAgICBBU1NFUlRfRVEoZmF2aWNvbkRhdGFiYXNlLCBld2tfY29udGV4dF9mYXZpY29uX2RhdGFi
YXNlX2dldChjb250ZXh0KSk7CiB9CiAKK1RFU1RfRihFV0syVW5pdFRlc3RCYXNlLCBld2tfY29u
dGV4dF9zdG9yYWdlX21hbmFnZXJfZ2V0KQoreworICAgIEV3a19Db250ZXh0KiBjb250ZXh0ID0g
ZXdrX3ZpZXdfY29udGV4dF9nZXQod2ViVmlldygpKTsKKyAgICBFd2tfU3RvcmFnZV9NYW5hZ2Vy
KiBzdG9yYWdlTWFuYWdlciA9IGV3a19jb250ZXh0X3N0b3JhZ2VfbWFuYWdlcl9nZXQoY29udGV4
dCk7CisgICAgQVNTRVJUX1RSVUUoc3RvcmFnZU1hbmFnZXIpOworICAgIEFTU0VSVF9FUShzdG9y
YWdlTWFuYWdlciwgZXdrX2NvbnRleHRfc3RvcmFnZV9tYW5hZ2VyX2dldChjb250ZXh0KSk7Cit9
CisKIHN0YXRpYyB2b2lkIHNjaGVtZVJlcXVlc3RDYWxsYmFjayhFd2tfVXJsX1NjaGVtZV9SZXF1
ZXN0KiByZXF1ZXN0LCB2b2lkKiB1c2VyRGF0YSkKIHsKICAgICBjb25zdCBjaGFyKiBzY2hlbWUg
PSBld2tfdXJsX3NjaGVtZV9yZXF1ZXN0X3NjaGVtZV9nZXQocmVxdWVzdCk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC90ZXN0cy90ZXN0X2V3azJfc3RvcmFn
ZV9tYW5hZ2VyLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL3Rlc3RzL3Rl
c3RfZXdrMl9zdG9yYWdlX21hbmFnZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAuLjRkNzQyOTkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL2VmbC90ZXN0cy90ZXN0X2V3azJfc3RvcmFnZV9tYW5hZ2VyLmNwcApAQCAtMCwwICsx
LDc2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIFNhbXN1bmcgRWxlY3Ryb25pY3MKKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSAiVW5pdFRlc3RVdGlscy9F
V0syVW5pdFRlc3RCYXNlLmgiCisjaW5jbHVkZSA8RVdlYktpdDIuaD4KKyNpbmNsdWRlIDxFY29y
ZS5oPgorI2luY2x1ZGUgPGd0ZXN0L2d0ZXN0Lmg+CisKK3VzaW5nIG5hbWVzcGFjZSBFV0syVW5p
dFRlc3Q7CisKK3N0YXRpYyB2b2lkIGdldFN0b3JhZ2VPcmlnaW5zQ2FsbGJhY2soRWluYV9MaXN0
KiBvcmlnaW5zLCBFd2tfRXJyb3IqIGVycm9yLCB2b2lkKiB1c2VyX2RhdGEpCit7CisgICAgQVNT
RVJUX0ZBTFNFKGVycm9yKTsKKworICAgIEVpbmFfTGlzdCoqIHJldCA9IHN0YXRpY19jYXN0PEVp
bmFfTGlzdCoqPih1c2VyX2RhdGEpOworICAgIEVpbmFfTGlzdCogbDsKKyAgICB2b2lkKiBkYXRh
OworICAgIEVJTkFfTElTVF9GT1JFQUNIKG9yaWdpbnMsIGwsIGRhdGEpCisgICAgICAgICpyZXQg
PSBlaW5hX2xpc3RfYXBwZW5kKCpyZXQsIGRhdGEpOworCisgICAgZWNvcmVfbWFpbl9sb29wX3F1
aXQoKTsKK30KKworVEVTVF9GKEVXSzJVbml0VGVzdEJhc2UsIGV3a19zdG9yYWdlX21hbmFnZXJf
b3JpZ2luc19nZXQpCit7CisgICAgY29uc3QgY2hhciogc3RvcmFnZUhUTUwgPQorICAgICAgICAi
PGh0bWw+PGhlYWQ+PHRpdGxlPm9yaWdpbmFsIHRpdGxlPC90aXRsZT48L2hlYWQ+IgorICAgICAg
ICAiPGJvZHk+IgorICAgICAgICAiPHNjcmlwdCB0eXBlPSd0ZXh0L2phdmFzY3JpcHQnPiIKKyAg
ICAgICAgIiBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgnaXRlbScsICdzdG9yYWdlJyk7IgorICAgICAg
ICAiIGRvY3VtZW50LnRpdGxlID0gJ1NldCc7IgorICAgICAgICAiIDwvc2NyaXB0PiIKKyAgICAg
ICAgIjwvYm9keT48L2h0bWw+IjsKKworICAgIC8vIFdhaXQgdW50aWwgc3RvcmFnZSB0cmFja2Vy
IGlzIG1hZGUgYW5kIHN5bmNocm9uaXplZCBzbyB0aGF0IHdlIGNhbiBnZXQgdGhlIG9yaWdpbnMg
b2Ygd2ViIHN0b3JhZ2UgZm9ybSBzdG9yYWdlIHRyYWNrZXIuCisgICAgZXdrX3ZpZXdfaHRtbF9z
dHJpbmdfbG9hZCh3ZWJWaWV3KCksIHN0b3JhZ2VIVE1MLCAiaHR0cDovL3d3dy5zdG9yYWdldGVz
dC5jb20iLCAwKTsKKyAgICBBU1NFUlRfRkFMU0Uod2FpdFVudGlsVGl0bGVDaGFuZ2VkVG8oIldh
aXQgdW50aWwgZGIgc3luYyBpcyBmaW5pc2hlZCIsIDIpKTsKKworICAgIEVpbmFfTGlzdCogb3Jp
Z2lucyA9IDA7CisgICAgQVNTRVJUX1RSVUUoZXdrX3N0b3JhZ2VfbWFuYWdlcl9vcmlnaW5zX2dl
dChld2tfY29udGV4dF9zdG9yYWdlX21hbmFnZXJfZ2V0KGV3a192aWV3X2NvbnRleHRfZ2V0KHdl
YlZpZXcoKSkpLCBnZXRTdG9yYWdlT3JpZ2luc0NhbGxiYWNrLCAmb3JpZ2lucykpOworICAgIGVj
b3JlX21haW5fbG9vcF9iZWdpbigpOworCisgICAgQVNTRVJUX0xFKDEsIGVpbmFfbGlzdF9jb3Vu
dChvcmlnaW5zKSk7CisKKyAgICBFd2tfU2VjdXJpdHlfT3JpZ2luKiBvcmlnaW4gPSBzdGF0aWNf
Y2FzdDxFd2tfU2VjdXJpdHlfT3JpZ2luKj4oZWluYV9saXN0X250aChvcmlnaW5zLCAwKSk7Cisg
ICAgRVhQRUNUX1NUUkVRKCJodHRwIiwgZXdrX3NlY3VyaXR5X29yaWdpbl9wcm90b2NvbF9nZXQo
b3JpZ2luKSk7CisgICAgRVhQRUNUX1NUUkVRKCJ3d3cuc3RvcmFnZXRlc3QuY29tIiwgZXdrX3Nl
Y3VyaXR5X29yaWdpbl9ob3N0X2dldChvcmlnaW4pKTsKKyAgICBFWFBFQ1RfRVEoMCwgZXdrX3Nl
Y3VyaXR5X29yaWdpbl9wb3J0X2dldChvcmlnaW4pKTsKKworICAgIEVYUEVDVF9FUShvcmlnaW4s
IGV3a19zZWN1cml0eV9vcmlnaW5fcmVmKG9yaWdpbikpOworICAgIGV3a19zZWN1cml0eV9vcmln
aW5fdW5yZWYob3JpZ2luKTsKK30K
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>171970</attachid>
            <date>2012-11-01 19:02:04 -0700</date>
            <delta_ts>2012-11-02 02:06:12 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-92827-20121102110025.patch</filename>
            <type>text/plain</type>
            <size>35499</size>
            <attacher name="Jihye Kang">jye.kang</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTMzMjUwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggMDA0ODZiY2NjMDczMGU4
MWZhNDY2YTM2NDA5ODM1YzBhYmM1MGZmOC4uNjZmYzJmZWZjYTUyN2NiNWJiODg5MzcyNTk3N2Y2
YWFmMTYxMjdmZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU3IEBACisyMDEyLTExLTAxICBKaWh5
ZSBLYW5nICA8anllLmthbmdAc2Ftc3VuZy5jb20+CisKKyAgICAgICAgW0VGTF1bV0syXSBBZGQg
ZXdrX3NlY3VyaXR5X29yaWdpbiBhbmQgZXdrX3N0b3JhZ2VfbWFuYWdlciBBUElzCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05MjgyNworCisgICAgICAg
IFJldmlld2VkIGJ5IEd5dXlvdW5nIEtpbS4KKworICAgICAgICBBZGQgZXdrX3NlY3VyaXR5X29y
aWdpbiBBUElzIHRvIGdldCBzZWN1cml0eSBvcmlnaW4uCisgICAgICAgIFRoZXNlIEFQSXMgd2ls
bCBiZSB1c2VkIHRvIGdldCBob3N0LCBwcm90b2NvbCBhbmQgcG9ydCBvZiBzZWN1cml0eQorICAg
ICAgICBvcmlnaW4uCisgICAgICAgIEFkZCBld2tfc3RvcmFnZV9tYW5hZ2VyIHRvIG1hbmFnZSB3
ZWIgc3RvcmFnZSBhbmQKKyAgICAgICAgZXdrX3N0b3JhZ2VfbWFuYWdlcl9vcmlnaW5zX2dldCB0
byBnZXQgb3JpZ2lucyBsaXN0IG9mIHdlYiBzdG9yYWdlLgorICAgICAgICBBZGQgVW5pdCB0ZXN0
cyBmb3IgZXdrX3N0b3JhZ2VfbWFuYWdlciBhbmQgZXdrX3NlY3VyaXR5X29yaWdpbiBBUElzLgor
CisgICAgICAgICogUGxhdGZvcm1FZmwuY21ha2U6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9l
ZmwvRVdlYktpdDIuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2VmbC9ld2tfY29udGV4dC5j
cHA6CisgICAgICAgIChFd2tfQ29udGV4dDo6c3RvcmFnZU1hbmFnZXIpOgorICAgICAgICAoZXdr
X2NvbnRleHRfc3RvcmFnZV9tYW5hZ2VyX2dldCk6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9l
ZmwvZXdrX2NvbnRleHQuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2VmbC9ld2tfY29udGV4
dF9wcml2YXRlLmg6CisgICAgICAgIChFd2tfQ29udGV4dCk6CisgICAgICAgICogVUlQcm9jZXNz
L0FQSS9lZmwvZXdrX3NlY3VyaXR5X29yaWdpbi5jcHA6IEFkZGVkLgorICAgICAgICAoRXdrX1Nl
Y3VyaXR5X09yaWdpbjo6RXdrX1NlY3VyaXR5X09yaWdpbik6CisgICAgICAgIChFd2tfU2VjdXJp
dHlfT3JpZ2luOjpob3N0KToKKyAgICAgICAgKEV3a19TZWN1cml0eV9PcmlnaW46OnByb3RvY29s
KToKKyAgICAgICAgKEV3a19TZWN1cml0eV9PcmlnaW46OnBvcnQpOgorICAgICAgICAoZXdrX3Nl
Y3VyaXR5X29yaWdpbl9yZWYpOgorICAgICAgICAoZXdrX3NlY3VyaXR5X29yaWdpbl91bnJlZik6
CisgICAgICAgIChld2tfc2VjdXJpdHlfb3JpZ2luX2hvc3RfZ2V0KToKKyAgICAgICAgKGV3a19z
ZWN1cml0eV9vcmlnaW5fcHJvdG9jb2xfZ2V0KToKKyAgICAgICAgKGV3a19zZWN1cml0eV9vcmln
aW5fcG9ydF9nZXQpOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZWZsL2V3a19zZWN1cml0eV9v
cmlnaW4uaDogQWRkZWQuCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3NlY3VyaXR5
X29yaWdpbl9wcml2YXRlLmg6IEFkZGVkLgorICAgICAgICAoRXdrX1NlY3VyaXR5X09yaWdpbik6
CisgICAgICAgIChFd2tfU2VjdXJpdHlfT3JpZ2luOjpjcmVhdGUpOgorICAgICAgICAqIFVJUHJv
Y2Vzcy9BUEkvZWZsL2V3a19zdG9yYWdlX21hbmFnZXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKEV3
a19TdG9yYWdlX01hbmFnZXI6OkV3a19TdG9yYWdlX01hbmFnZXIpOgorICAgICAgICAoRXdrX1N0
b3JhZ2VfTWFuYWdlcjo6Z2V0U3RvcmFnZU9yaWdpbnMpOgorICAgICAgICAoRXdrX1N0b3JhZ2Vf
TWFuYWdlcjo6Y3JlYXRlT3JpZ2luTGlzdCk6CisgICAgICAgIChfRXdrX1N0b3JhZ2VfT3JpZ2lu
c19Bc3luY19HZXRfQ29udGV4dCk6CisgICAgICAgIChfRXdrX1N0b3JhZ2VfT3JpZ2luc19Bc3lu
Y19HZXRfQ29udGV4dDo6X0V3a19TdG9yYWdlX09yaWdpbnNfQXN5bmNfR2V0X0NvbnRleHQpOgor
ICAgICAgICAoZ2V0U3RvcmFnZU9yaWdpbnNDYWxsYmFjayk6CisgICAgICAgIChld2tfc3RvcmFn
ZV9tYW5hZ2VyX29yaWdpbnNfZ2V0KToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2VmbC9ld2tf
c3RvcmFnZV9tYW5hZ2VyLmg6IEFkZGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZWZsL2V3
a19zdG9yYWdlX21hbmFnZXJfcHJpdmF0ZS5oOiBBZGRlZC4KKyAgICAgICAgKEV3a19TdG9yYWdl
X01hbmFnZXIpOgorICAgICAgICAoRXdrX1N0b3JhZ2VfTWFuYWdlcjo6Y3JlYXRlKToKKyAgICAg
ICAgKiBVSVByb2Nlc3MvQVBJL2VmbC90ZXN0cy90ZXN0X2V3azJfY29udGV4dC5jcHA6CisgICAg
ICAgIChURVNUX0YpOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZWZsL3Rlc3RzL3Rlc3RfZXdr
Ml9zdG9yYWdlX21hbmFnZXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKGdldFN0b3JhZ2VPcmlnaW5z
Q2FsbGJhY2spOgorICAgICAgICAoVEVTVF9GKToKKwogMjAxMi0xMS0wMSAgQW5kZXJzIENhcmxz
c29uICA8YW5kZXJzY2FAYXBwbGUuY29tPgogCiAgICAgICAgIFJlZm9ybWF0IHRoZSBhbm5vdGF0
aW9uU3R5bGUgaW5pdGlhbGl6ZXIgdG8gYXBwZWFzZSB1cGRhdGUtd2Via2l0LWxvY2FsaXphYmxl
LXN0cmluZ3MuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybUVmbC5jbWFrZSBi
L1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtRWZsLmNtYWtlCmluZGV4IGVkNmQ3ZjE1MTg2NDBlZWYy
YzA0MTU2ZTNlYjM4YTlhNDcyMDdiNGEuLmYxYWU4NTE5ZmU3YmIyYjVhMTAwZjU3ODQ1ZjMzYmVl
NjdmODFkNTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtRWZsLmNtYWtlCisr
KyBiL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtRWZsLmNtYWtlCkBAIC02Myw3ICs2Myw5IEBAIExJ
U1QoQVBQRU5EIFdlYktpdDJfU09VUkNFUwogICAgIFVJUHJvY2Vzcy9BUEkvZWZsL2V3a19wb3B1
cF9tZW51LmNwcAogICAgIFVJUHJvY2Vzcy9BUEkvZWZsL2V3a19wb3B1cF9tZW51X2l0ZW0uY3Bw
CiAgICAgVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3Jlc291cmNlLmNwcAorICAgIFVJUHJvY2Vzcy9B
UEkvZWZsL2V3a19zZWN1cml0eV9vcmlnaW4uY3BwCiAgICAgVUlQcm9jZXNzL0FQSS9lZmwvZXdr
X3NldHRpbmdzLmNwcAorICAgIFVJUHJvY2Vzcy9BUEkvZWZsL2V3a19zdG9yYWdlX21hbmFnZXIu
Y3BwCiAgICAgVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3RleHRfY2hlY2tlci5jcHAKICAgICBVSVBy
b2Nlc3MvQVBJL2VmbC9ld2tfdXJsX3JlcXVlc3QuY3BwCiAgICAgVUlQcm9jZXNzL0FQSS9lZmwv
ZXdrX3VybF9yZXNwb25zZS5jcHAKQEAgLTI2Miw3ICsyNjQsOSBAQCBTRVQgKEVXZWJLaXQyX0hF
QURFUlMKICAgICAiJHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9L1VJUHJvY2Vzcy9BUEkvZWZs
L2V3a19wb3B1cF9tZW51LmgiCiAgICAgIiR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS9VSVBy
b2Nlc3MvQVBJL2VmbC9ld2tfcG9wdXBfbWVudV9pdGVtLmgiCiAgICAgIiR7Q01BS0VfQ1VSUkVO
VF9TT1VSQ0VfRElSfS9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfcmVzb3VyY2UuaCIKKyAgICAiJHtD
TUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9L1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19zZWN1cml0eV9v
cmlnaW4uaCIKICAgICAiJHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9L1VJUHJvY2Vzcy9BUEkv
ZWZsL2V3a19zZXR0aW5ncy5oIgorICAgICIke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0vVUlQ
cm9jZXNzL0FQSS9lZmwvZXdrX3N0b3JhZ2VfbWFuYWdlci5oIgogICAgICIke0NNQUtFX0NVUlJF
TlRfU09VUkNFX0RJUn0vVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3RleHRfY2hlY2tlci5oIgogICAg
ICIke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0vVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3RvdWNo
LmgiCiAgICAgIiR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS9VSVByb2Nlc3MvQVBJL2VmbC9l
d2tfdXJsX3JlcXVlc3QuaCIKQEAgLTM2MSw2ICszNjUsNyBAQCBTRVQoRVdLMlVuaXRUZXN0c19C
SU5BUklFUwogICAgIHRlc3RfZXdrMl9pbnRlbnRzCiAgICAgdGVzdF9ld2syX3BvcHVwX21lbnUK
ICAgICB0ZXN0X2V3azJfc2V0dGluZ3MKKyAgICB0ZXN0X2V3azJfc3RvcmFnZV9tYW5hZ2VyCiAg
ICAgdGVzdF9ld2syX3RleHRfY2hlY2tlcgogICAgIHRlc3RfZXdrMl92aWV3CiApCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9FV2ViS2l0Mi5oIGIvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvRVdlYktpdDIuaAppbmRleCBiNjY2NmE0YmE0MTVi
ZTYyNDA2Y2E3NjJhNDU0NTRmNmVhOWE0MDIzLi4zZjc2Y2Y4NTE1MWQ3MTZiZWE0NjAyYTNhZTU3
NjI0ZDIwOTgyMmFhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2Vm
bC9FV2ViS2l0Mi5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL0VXZWJL
aXQyLmgKQEAgLTQ3LDcgKzQ3LDkgQEAKICNpbmNsdWRlICJld2tfcG9wdXBfbWVudS5oIgogI2lu
Y2x1ZGUgImV3a19wb3B1cF9tZW51X2l0ZW0uaCIKICNpbmNsdWRlICJld2tfcmVzb3VyY2UuaCIK
KyNpbmNsdWRlICJld2tfc2VjdXJpdHlfb3JpZ2luLmgiCiAjaW5jbHVkZSAiZXdrX3NldHRpbmdz
LmgiCisjaW5jbHVkZSAiZXdrX3N0b3JhZ2VfbWFuYWdlci5oIgogI2luY2x1ZGUgImV3a190ZXh0
X2NoZWNrZXIuaCIKICNpbmNsdWRlICJld2tfdG91Y2guaCIKICNpbmNsdWRlICJld2tfdXJsX3Jl
cXVlc3QuaCIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3
a19jb250ZXh0LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19jb250
ZXh0LmNwcAppbmRleCBmOWI4NzNjYzc5YmIxNDVlNTI4Zjg5YmJkZDM3N2U1N2JlOTk0ZjI3Li45
Mzc5NDUxNjk0OTFjYjc3MWY3MjhhYzIxZmI3OGZjNTgzMWNlNmMzIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfY29udGV4dC5jcHAKKysrIGIvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2NvbnRleHQuY3BwCkBAIC0zOCw2ICszOCw3
IEBACiAjaW5jbHVkZSAiZXdrX2Nvb2tpZV9tYW5hZ2VyX3ByaXZhdGUuaCIKICNpbmNsdWRlICJl
d2tfZmF2aWNvbl9kYXRhYmFzZV9wcml2YXRlLmgiCiAjaW5jbHVkZSAiZXdrX3ByaXZhdGUuaCIK
KyNpbmNsdWRlICJld2tfc3RvcmFnZV9tYW5hZ2VyX3ByaXZhdGUuaCIKICNpbmNsdWRlICJld2tf
dXJsX3NjaGVtZV9yZXF1ZXN0X3ByaXZhdGUuaCIKICNpbmNsdWRlIDxXZWJDb3JlL0ZpbGVTeXN0
ZW0uaD4KICNpbmNsdWRlIDxXZWJDb3JlL0ljb25EYXRhYmFzZS5oPgpAQCAtNjIsNiArNjMsNyBA
QCBzdGF0aWMgaW5saW5lIENvbnRleHRNYXAmIGNvbnRleHRNYXAoKQogCiBFd2tfQ29udGV4dDo6
RXdrX0NvbnRleHQoV0tDb250ZXh0UmVmIGNvbnRleHQpCiAgICAgOiBtX2NvbnRleHQoY29udGV4
dCkKKyAgICAsIG1fc3RvcmFnZU1hbmFnZXIoRXdrX1N0b3JhZ2VfTWFuYWdlcjo6Y3JlYXRlKFdL
Q29udGV4dEdldEtleVZhbHVlU3RvcmFnZU1hbmFnZXIobV9jb250ZXh0LmdldCgpKSkpCiAjaWYg
RU5BQkxFKEJBVFRFUllfU1RBVFVTKQogICAgICwgbV9iYXR0ZXJ5UHJvdmlkZXIoQmF0dGVyeVBy
b3ZpZGVyOjpjcmVhdGUoY29udGV4dCkpCiAjZW5kaWYKQEAgLTE1OCw2ICsxNjAsMTEgQEAgRXdr
X0Zhdmljb25fRGF0YWJhc2UqIEV3a19Db250ZXh0OjpmYXZpY29uRGF0YWJhc2UoKQogICAgIHJl
dHVybiBtX2Zhdmljb25EYXRhYmFzZS5nZXQoKTsKIH0KIAorRXdrX1N0b3JhZ2VfTWFuYWdlciog
RXdrX0NvbnRleHQ6OnN0b3JhZ2VNYW5hZ2VyKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9zdG9y
YWdlTWFuYWdlci5nZXQoKTsKK30KKwogUmVxdWVzdE1hbmFnZXJDbGllbnRFZmwqIEV3a19Db250
ZXh0OjpyZXF1ZXN0TWFuYWdlcigpCiB7CiAgICAgcmV0dXJuIG1fcmVxdWVzdE1hbmFnZXJDbGll
bnQuZ2V0KCk7CkBAIC0yMTUsNiArMjIyLDEzIEBAIEV3a19GYXZpY29uX0RhdGFiYXNlKiBld2tf
Y29udGV4dF9mYXZpY29uX2RhdGFiYXNlX2dldChjb25zdCBFd2tfQ29udGV4dCogZXdrQ29uCiAg
ICAgcmV0dXJuIGNvbnN0X2Nhc3Q8RXdrX0NvbnRleHQqPihld2tDb250ZXh0KS0+ZmF2aWNvbkRh
dGFiYXNlKCk7CiB9CiAKK0V3a19TdG9yYWdlX01hbmFnZXIqIGV3a19jb250ZXh0X3N0b3JhZ2Vf
bWFuYWdlcl9nZXQoY29uc3QgRXdrX0NvbnRleHQqIGV3a0NvbnRleHQpCit7CisgICAgRUlOQV9T
QUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKGV3a0NvbnRleHQsIDApOworCisgICAgcmV0dXJuIGV3
a0NvbnRleHQtPnN0b3JhZ2VNYW5hZ2VyKCk7Cit9CisKIFdLQ29udGV4dFJlZiBFd2tfQ29udGV4
dDo6d2tDb250ZXh0KCkKIHsKICAgICByZXR1cm4gbV9jb250ZXh0LmdldCgpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2NvbnRleHQuaCBiL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19jb250ZXh0LmgKaW5kZXggZjZiOGJiNjdk
MjVkODdiYTlkMDMyMWQxYTM3N2VmYjg3ZjgxZjMwNi4uMGQ2Yjc0YWFjOTg1MzQxMjUwZjE5ZGQx
OWE4Y2JmMmVlNGVhOWU1YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9lZmwvZXdrX2NvbnRleHQuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2Vm
bC9ld2tfY29udGV4dC5oCkBAIC00MCw2ICs0MCw3IEBACiAjaW5jbHVkZSAiZXdrX2Nvb2tpZV9t
YW5hZ2VyLmgiCiAjaW5jbHVkZSAiZXdrX2Zhdmljb25fZGF0YWJhc2UuaCIKICNpbmNsdWRlICJl
d2tfbmF2aWdhdGlvbl9kYXRhLmgiCisjaW5jbHVkZSAiZXdrX3N0b3JhZ2VfbWFuYWdlci5oIgog
I2luY2x1ZGUgImV3a191cmxfc2NoZW1lX3JlcXVlc3QuaCIKICNpbmNsdWRlIDxFdmFzLmg+CiAK
QEAgLTE5Miw2ICsxOTMsMTUgQEAgRUFQSSBFd2tfQ29va2llX01hbmFnZXIgKmV3a19jb250ZXh0
X2Nvb2tpZV9tYW5hZ2VyX2dldChjb25zdCBFd2tfQ29udGV4dCAqY29udGUKIEVBUEkgRXdrX0Zh
dmljb25fRGF0YWJhc2UgKmV3a19jb250ZXh0X2Zhdmljb25fZGF0YWJhc2VfZ2V0KGNvbnN0IEV3
a19Db250ZXh0ICpjb250ZXh0KTsKIAogLyoqCisgKiBHZXRzIHRoZSBzdG9yYWdlIG1hbmFnZXIg
aW5zdGFuY2UgZm9yIHRoaXMgQGEgY29udGV4dC4KKyAqCisgKiBAcGFyYW0gY29udGV4dCBjb250
ZXh0IG9iamVjdCB0byBxdWVyeS4KKyAqCisgKiBAcmV0dXJuIEV3a19TdG9yYWdlX01hbmFnZXIg
b2JqZWN0IGluc3RhbmNlIG9yIEBjIE5VTEwgaW4gY2FzZSBvZiBmYWlsdXJlLgorICovCitFQVBJ
IEV3a19TdG9yYWdlX01hbmFnZXIgKmV3a19jb250ZXh0X3N0b3JhZ2VfbWFuYWdlcl9nZXQoY29u
c3QgRXdrX0NvbnRleHQgKmNvbnRleHQpOworCisvKioKICAqIFJlZ2lzdGVyIEBhIHNjaGVtZSBp
biBAYSBjb250ZXh0LgogICoKICAqIFdoZW4gYW4gVVJMIHJlcXVlc3Qgd2l0aCBAYSBzY2hlbWUg
aXMgbWFkZSBpbiB0aGUgI0V3a19Db250ZXh0LCB0aGUgY2FsbGJhY2sKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19jb250ZXh0X3ByaXZhdGUuaCBiL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19jb250ZXh0X3ByaXZhdGUuaAppbmRl
eCBiYTQ2MzI0ZjViMGM1ZWNhZjRlMzI2ZmYzMzEyYmMwNTg3NTI1MzMwLi5mNDM2NDhjN2U3ZDQx
MGIyOTU2YjZkODg1M2Y2ZjRjODE0YWZlYTg4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL2VmbC9ld2tfY29udGV4dF9wcml2YXRlLmgKKysrIGIvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2NvbnRleHRfcHJpdmF0ZS5oCkBAIC01Nyw2ICs1Nyw4
IEBAIHB1YmxpYzoKIAogICAgIEV3a19GYXZpY29uX0RhdGFiYXNlKiBmYXZpY29uRGF0YWJhc2Uo
KTsKIAorICAgIEV3a19TdG9yYWdlX01hbmFnZXIqIHN0b3JhZ2VNYW5hZ2VyKCkgY29uc3Q7CisK
ICAgICBXZWJLaXQ6OlJlcXVlc3RNYW5hZ2VyQ2xpZW50RWZsKiByZXF1ZXN0TWFuYWdlcigpOwog
CiAjaWYgRU5BQkxFKFZJQlJBVElPTikKQEAgLTg0LDYgKzg2LDcgQEAgcHJpdmF0ZToKIAogICAg
IE93blB0cjxFd2tfQ29va2llX01hbmFnZXI+IG1fY29va2llTWFuYWdlcjsKICAgICBPd25QdHI8
RXdrX0Zhdmljb25fRGF0YWJhc2U+IG1fZmF2aWNvbkRhdGFiYXNlOworICAgIE93blB0cjxFd2tf
U3RvcmFnZV9NYW5hZ2VyPiBtX3N0b3JhZ2VNYW5hZ2VyOwogI2lmIEVOQUJMRShCQVRURVJZX1NU
QVRVUykKICAgICBSZWZQdHI8V2ViS2l0OjpCYXR0ZXJ5UHJvdmlkZXI+IG1fYmF0dGVyeVByb3Zp
ZGVyOwogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2Vm
bC9ld2tfc2VjdXJpdHlfb3JpZ2luLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
ZWZsL2V3a19zZWN1cml0eV9vcmlnaW4uY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmJjMGY4YzdhZWY3ZWU3YjZh
YTcwNTU4Yzc3NjNmNTQwMGRiMTRkMjYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfc2VjdXJpdHlfb3JpZ2luLmNwcApAQCAtMCwwICsxLDkw
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIFNhbXN1bmcgRWxlY3Ryb25pY3MuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HCisgKiBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlICJld2tfc2VjdXJpdHlfb3JpZ2luLmgiCisKKyNpbmNsdWRlICJXS0FQSUNh
c3QuaCIKKyNpbmNsdWRlICJXS1NlY3VyaXR5T3JpZ2luLmgiCisjaW5jbHVkZSAiZXdrX3NlY3Vy
aXR5X29yaWdpbl9wcml2YXRlLmgiCisKK3VzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7CisKK0V3a19T
ZWN1cml0eV9PcmlnaW46OkV3a19TZWN1cml0eV9PcmlnaW4oV0tTZWN1cml0eU9yaWdpblJlZiBv
cmlnaW5SZWYpCisgICAgOiBtX3drT3JpZ2luKG9yaWdpblJlZikKKyAgICAsIG1faG9zdChBZG9w
dFdLLCBXS1NlY3VyaXR5T3JpZ2luQ29weUhvc3Qob3JpZ2luUmVmKSkKKyAgICAsIG1fcHJvdG9j
b2woQWRvcHRXSywgV0tTZWN1cml0eU9yaWdpbkNvcHlQcm90b2NvbChvcmlnaW5SZWYpKQoreyB9
CisKK2NvbnN0IGNoYXIqIEV3a19TZWN1cml0eV9PcmlnaW46Omhvc3QoKSBjb25zdAoreworICAg
IHJldHVybiBtX2hvc3Q7Cit9CisKK2NvbnN0IGNoYXIqIEV3a19TZWN1cml0eV9PcmlnaW46OnBy
b3RvY29sKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9wcm90b2NvbDsKK30KKwordWludDMyX3Qg
RXdrX1NlY3VyaXR5X09yaWdpbjo6cG9ydCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIFdLU2VjdXJp
dHlPcmlnaW5HZXRQb3J0KG1fd2tPcmlnaW4uZ2V0KCkpOworfQorCitFd2tfU2VjdXJpdHlfT3Jp
Z2luKiBld2tfc2VjdXJpdHlfb3JpZ2luX3JlZihFd2tfU2VjdXJpdHlfT3JpZ2luKiBvcmlnaW4p
Cit7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKG9yaWdpbiwgMCk7CisKKyAg
ICBvcmlnaW4tPnJlZigpOworICAgIHJldHVybiBvcmlnaW47Cit9CisKK3ZvaWQgZXdrX3NlY3Vy
aXR5X29yaWdpbl91bnJlZihFd2tfU2VjdXJpdHlfT3JpZ2luKiBvcmlnaW4pCit7CisgICAgRUlO
QV9TQUZFVFlfT05fTlVMTF9SRVRVUk4ob3JpZ2luKTsKKworICAgIG9yaWdpbi0+ZGVyZWYoKTsK
K30KKworY29uc3QgY2hhciogZXdrX3NlY3VyaXR5X29yaWdpbl9ob3N0X2dldChjb25zdCBFd2tf
U2VjdXJpdHlfT3JpZ2luKiBvcmlnaW4pCit7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRV
Uk5fVkFMKG9yaWdpbiwgMCk7CisKKyAgICByZXR1cm4gb3JpZ2luLT5ob3N0KCk7Cit9CisKK2Nv
bnN0IGNoYXIqIGV3a19zZWN1cml0eV9vcmlnaW5fcHJvdG9jb2xfZ2V0KGNvbnN0IEV3a19TZWN1
cml0eV9PcmlnaW4qIG9yaWdpbikKK3sKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9W
QUwob3JpZ2luLCAwKTsKKworICAgIHJldHVybiBvcmlnaW4tPnByb3RvY29sKCk7Cit9CisKK3Vp
bnQzMl90IGV3a19zZWN1cml0eV9vcmlnaW5fcG9ydF9nZXQoY29uc3QgRXdrX1NlY3VyaXR5X09y
aWdpbiogb3JpZ2luKQoreworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChvcmln
aW4sIDApOworCisgICAgcmV0dXJuIG9yaWdpbi0+cG9ydCgpOworfQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3NlY3VyaXR5X29yaWdpbi5oIGIvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3NlY3VyaXR5X29yaWdpbi5oCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLjViZTg0MTY1YjlkMDdlYmE2OWI5ZGY5NmI4ZmQ4YWNhOWI4ZWM5OGMKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfc2VjdXJpdHlf
b3JpZ2luLmgKQEAgLTAsMCArMSwxMDIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgSW50
ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTIgU2Ftc3VuZyBFbGVjdHJvbmljcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBB
TkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZ
UklHSFQgSE9MREVSIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcKKyAqIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICog
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworLyoqCisgKiBAZmlsZSAgICBld2tfc2VjdXJpdHlfb3JpZ2luLmgKKyAqIEBi
cmllZiAgIFNlY3VyaXR5IE9yaWdpbiBBUEkuCisgKgorICogU2VjdXJpdHkgT3JpZ2luIGlzIHRo
ZSBtZWNoYW5pc20gdGhhdCBkZWZpbmVzIHRoZSBhY2Nlc3MgbGltaXRzIG9mIGEgd2Vic2l0ZS4K
KyAqIEJhc2VkIG9uIGluZm9ybWF0aW9uIHN1Y2ggYXMgZG9tYWluLCBwcm90b2NvbCBhbmQgcG9y
dCwgeW91IGNhbiBvciBjYW5ub3QgZ3JhbnQKKyAqIGF1dGhvcml6YXRpb24gZm9yIGFjY2Vzc2lu
ZyBkYXRhIGFuZCBwZXJmb3JtaW5nIGNlcnRhaW4gdGFza3MuCisgKi8KKworI2lmbmRlZiBld2tf
c2VjdXJpdHlfb3JpZ2luX2gKKyNkZWZpbmUgZXdrX3NlY3VyaXR5X29yaWdpbl9oCisKKyNpbmNs
dWRlIDxFaW5hLmg+CisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYK
KworLyoqIENyZWF0ZXMgYSB0eXBlIG5hbWUgZm9yIEV3a19TZWN1cml0eV9PcmlnaW4uICovCit0
eXBlZGVmIHN0cnVjdCBFd2tfU2VjdXJpdHlfT3JpZ2luIEV3a19TZWN1cml0eV9PcmlnaW47CisK
Ky8qKgorICogSW5jcmVhc2VzIHRoZSByZWZlcmVuY2UgY291bnQgb2YgdGhlIGdpdmVuIG9iamVj
dC4KKyAqCisgKiBAcGFyYW0gb3JpZ2luIHRoZSBvcmlnaW4gb2JqZWN0IHRvIGluY3JlYXNlIHRo
ZSByZWZlcmVuY2UgY291bnQKKyAqCisgKiBAcmV0dXJuIGEgcG9pbnRlciB0byB0aGUgb2JqZWN0
IG9uIHN1Y2Nlc3MsIEBjIE5VTEwgb3RoZXJ3aXNlCisgKi8KK0VBUEkgRXdrX1NlY3VyaXR5X09y
aWdpbiAqZXdrX3NlY3VyaXR5X29yaWdpbl9yZWYoRXdrX1NlY3VyaXR5X09yaWdpbiAqbyk7CisK
Ky8qKgorICogRGVjcmVhc2VzIHRoZSByZWZlcmVuY2UgY291bnQgb2YgdGhlIGdpdmVuIG9iamVj
dCwgcG9zc2libHkgZnJlZWluZyBpdC4KKyAqCisgKiBXaGVuIHRoZSByZWZlcmVuY2UgY291bnQg
cmVhY2hlcyAwLCB0aGUgb3JpZ2luIGlzIGZyZWVkLgorICoKKyAqIEBwYXJhbSBvcmlnaW4gdGhl
IG9yaWdpbiBvYmplY3QgdG8gZGVjcmVhc2UgdGhlIHJlZmVyZW5jZSBjb3VudAorICovCitFQVBJ
IHZvaWQgZXdrX3NlY3VyaXR5X29yaWdpbl91bnJlZihFd2tfU2VjdXJpdHlfT3JpZ2luICpvKTsK
KworLyoqCisgKiBSZXR1cm5zIHRoZSBob3N0IG9mIHRoZSBzZWN1cml0eSBvcmlnaW4uCisgKgor
ICogQHBhcmFtIG8gc2VjdXJpdHkgb3JpZ2luIG9iamVjdAorICoKKyAqIEByZXR1cm4gdGhlIGhv
c3QgZG9tYWluIHBvaW50ZXIgb3IgQGMgTlVMTCBpZiB0aGVyZSBpcyBub3QgYSBob3N0IHNjaGVt
ZS4KKyAqICAgICAgICAgVGhpcyBwb2ludGVyIGlzIGd1YXJhbnRlZWQgdG8gYmUgZWluYV9zdHJp
bmdzaGFyZSwgc28gd2hlbmV2ZXIgcG9zc2libGUKKyAqICAgICAgICAgc2F2ZSB5b3Vyc2VsZiBm
cm9tIGNwdSBjeWNsZXMgYW5kIHVzZSBlaW5hX3N0cmluZ3NoYXJlX3JlZigpCisgKiAgICAgICAg
IGluc3RlYWQgb2YgZWluYV9zdHJpbmdzaGFyZV9hZGQoKSBvciBzdHJkdXAoKS4KKyAqLworRUFQ
SSBjb25zdCBjaGFyICpld2tfc2VjdXJpdHlfb3JpZ2luX2hvc3RfZ2V0KGNvbnN0IEV3a19TZWN1
cml0eV9PcmlnaW4gKm8pOworCisvKioKKyAqIFJldHVybnMgdGhlIHBvcnQgb2YgdGhlIHNlY3Vy
aXR5IG9yaWdpbi4KKyAqCisgKiBAcGFyYW0gbyBzZWN1cml0eSBvcmlnaW4gb2JqZWN0CisgKgor
ICogQHJldHVybiB0aGUgcG9ydCBudW1iZXIgb3IgQGMgMCBpZiB0aGVyZSBpcyBub3QgYSBwcm9w
ZXIgc2VjdXJpdHkgb3JpZ2luIHNjaGVtZQorICovCitFQVBJIHVpbnQzMl90IGV3a19zZWN1cml0
eV9vcmlnaW5fcG9ydF9nZXQoY29uc3QgRXdrX1NlY3VyaXR5X09yaWdpbiAqbyk7CisKKy8qKgor
ICogUmV0dXJucyB0aGUgcHJvdG9jb2wgb2YgdGhlIHNlY3VyaXR5IG9yaWdpbi4KKyAqCisgKiBA
cGFyYW0gbyBzZWN1cml0eSBvcmlnaW4gb2JqZWN0CisgKgorICogQHJldHVybiB0aGUgcHJvdG9j
b2wgc2NoZW1lIHBvaW50ZXIgb3IgQGMgTlVMTCBpZiB0aGVyZSBpcyBub3QgYSBwcm90b2NvbCBz
Y2hlbWUuCisgKiAgICAgICAgIFRoaXMgcG9pbnRlciBpcyBndWFyYW50ZWVkIHRvIGJlIGVpbmFf
c3RyaW5nc2hhcmUsIHNvIHdoZW5ldmVyIHBvc3NpYmxlCisgKiAgICAgICAgIHNhdmUgeW91cnNl
bGYgZnJvbSBjcHUgY3ljbGVzIGFuZCB1c2UgZWluYV9zdHJpbmdzaGFyZV9yZWYoKQorICogICAg
ICAgICBpbnN0ZWFkIG9mIGVpbmFfc3RyaW5nc2hhcmVfYWRkKCkgb3Igc3RyZHVwKCkuCisgKi8K
K0VBUEkgY29uc3QgY2hhciAqZXdrX3NlY3VyaXR5X29yaWdpbl9wcm90b2NvbF9nZXQoY29uc3Qg
RXdrX1NlY3VyaXR5X09yaWdpbiAqbyk7CisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlm
CisjZW5kaWYgLy8gZXdrX3NlY3VyaXR5X29yaWdpbl9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfc2VjdXJpdHlfb3JpZ2luX3ByaXZhdGUuaCBiL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19zZWN1cml0eV9vcmlnaW5fcHJpdmF0
ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLjA0MDEyNDEwZWY3NzYxZjNlMTU2ZmViNTE5YmRiZDEwNDE2MDMxM2UK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tf
c2VjdXJpdHlfb3JpZ2luX3ByaXZhdGUuaApAQCAtMCwwICsxLDU0IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEyIFNhbXN1bmcgRWxlY3Ryb25pY3MuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hU
IEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HCisgKiBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgZXdrX3NlY3VyaXR5X29yaWdpbl9wcml2YXRl
X2gKKyNkZWZpbmUgZXdrX3NlY3VyaXR5X29yaWdpbl9wcml2YXRlX2gKKworI2luY2x1ZGUgIldL
RWluYVNoYXJlZFN0cmluZy5oIgorI2luY2x1ZGUgIldLU2VjdXJpdHlPcmlnaW4uaCIKKyNpbmNs
dWRlIDxXZWJLaXQyL1dLQmFzZS5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisjaW5j
bHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKworY2xhc3MgRXdrX1NlY3VyaXR5X09yaWdpbiA6IHB1
YmxpYyBSZWZDb3VudGVkPEV3a19TZWN1cml0eV9PcmlnaW4+IHsKK3B1YmxpYzoKKyAgICBzdGF0
aWMgUGFzc1JlZlB0cjxFd2tfU2VjdXJpdHlfT3JpZ2luPiBjcmVhdGUoV0tTZWN1cml0eU9yaWdp
blJlZiBvcmlnaW5SZWYpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEV3a19T
ZWN1cml0eV9PcmlnaW4ob3JpZ2luUmVmKSk7CisgICAgfQorCisgICAgY29uc3QgY2hhciogaG9z
dCgpIGNvbnN0OworICAgIGNvbnN0IGNoYXIqIHByb3RvY29sKCkgY29uc3Q7CisgICAgdWludDMy
X3QgcG9ydCgpIGNvbnN0OworCitwcml2YXRlOgorICAgIGV4cGxpY2l0IEV3a19TZWN1cml0eV9P
cmlnaW4oV0tTZWN1cml0eU9yaWdpblJlZiBvcmlnaW5SZWYpOworCisgICAgV0tSZXRhaW5QdHI8
V0tTZWN1cml0eU9yaWdpblJlZj4gbV93a09yaWdpbjsKKyAgICBXS0VpbmFTaGFyZWRTdHJpbmcg
bV9ob3N0OworICAgIFdLRWluYVNoYXJlZFN0cmluZyBtX3Byb3RvY29sOworfTsKKworI2VuZGlm
IC8vIGV3a19zZWN1cml0eV9vcmlnaW5fcHJpdmF0ZV9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfc3RvcmFnZV9tYW5hZ2VyLmNwcCBiL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19zdG9yYWdlX21hbmFnZXIuY3BwCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLjE2MzJiMmU2YjM3N2RhMzRiOWI5ZWJiZWI0NGNlMWQzOWIyMzkyMzkKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfc3RvcmFnZV9tYW5h
Z2VyLmNwcApAQCAtMCwwICsxLDk5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIFNhbXN1
bmcgRWxlY3Ryb25pY3MuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRS
SUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhP
TERFUiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HCisgKiBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJld2tfc3RvcmFnZV9tYW5hZ2VyLmgi
CisKKyNpbmNsdWRlICJXS0FQSUNhc3QuaCIKKyNpbmNsdWRlICJXS0FycmF5LmgiCisjaW5jbHVk
ZSAiV0tLZXlWYWx1ZVN0b3JhZ2VNYW5hZ2VyLmgiCisjaW5jbHVkZSAiZXdrX2Vycm9yX3ByaXZh
dGUuaCIKKyNpbmNsdWRlICJld2tfc2VjdXJpdHlfb3JpZ2luLmgiCisjaW5jbHVkZSAiZXdrX3Nl
Y3VyaXR5X29yaWdpbl9wcml2YXRlLmgiCisjaW5jbHVkZSAiZXdrX3N0b3JhZ2VfbWFuYWdlcl9w
cml2YXRlLmgiCisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKwordXNpbmcgbmFtZXNwYWNl
IFdlYktpdDsKKworRXdrX1N0b3JhZ2VfTWFuYWdlcjo6RXdrX1N0b3JhZ2VfTWFuYWdlcihXS0tl
eVZhbHVlU3RvcmFnZU1hbmFnZXJSZWYgd2tTdG9yYWdlTWFuYWdlclJlZikKKyAgICA6IG1fd2tT
dG9yYWdlTWFuYWdlcih3a1N0b3JhZ2VNYW5hZ2VyUmVmKQoreyB9CisKK3ZvaWQgRXdrX1N0b3Jh
Z2VfTWFuYWdlcjo6Z2V0U3RvcmFnZU9yaWdpbnModm9pZCogY29udGV4dCwgV0tLZXlWYWx1ZVN0
b3JhZ2VNYW5hZ2VyR2V0S2V5VmFsdWVTdG9yYWdlT3JpZ2luc0Z1bmN0aW9uIGNhbGxiYWNrKSBj
b25zdAoreworICAgIFdLS2V5VmFsdWVTdG9yYWdlTWFuYWdlckdldEtleVZhbHVlU3RvcmFnZU9y
aWdpbnMobV93a1N0b3JhZ2VNYW5hZ2VyLmdldCgpLCBjb250ZXh0LCBjYWxsYmFjayk7Cit9CisK
K0VpbmFfTGlzdCogRXdrX1N0b3JhZ2VfTWFuYWdlcjo6Y3JlYXRlT3JpZ2luTGlzdChXS0FycmF5
UmVmIG9yaWdpbnMpIGNvbnN0Cit7CisgICAgRWluYV9MaXN0KiBvcmlnaW5MaXN0ID0gMDsKKyAg
ICBjb25zdCBzaXplX3QgbGVuZ3RoID0gV0tBcnJheUdldFNpemUob3JpZ2lucyk7CisKKyAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7CisgICAgICAgIFdLU2VjdXJpdHlP
cmlnaW5SZWYgd2tPcmlnaW5SZWYgPSBzdGF0aWNfY2FzdDxXS1NlY3VyaXR5T3JpZ2luUmVmPihX
S0FycmF5R2V0SXRlbUF0SW5kZXgob3JpZ2lucywgaSkpOworICAgICAgICBSZWZQdHI8RXdrX1Nl
Y3VyaXR5X09yaWdpbj4gb3JpZ2luID0gbV93cmFwcGVyQ2FjaGUuZ2V0KHdrT3JpZ2luUmVmKTsK
KyAgICAgICAgaWYgKCFvcmlnaW4pIHsKKyAgICAgICAgICAgIG9yaWdpbiA9IEV3a19TZWN1cml0
eV9PcmlnaW46OmNyZWF0ZSh3a09yaWdpblJlZik7CisgICAgICAgICAgICBtX3dyYXBwZXJDYWNo
ZS5zZXQod2tPcmlnaW5SZWYsIG9yaWdpbik7CisgICAgICAgIH0KKyAgICAgICAgb3JpZ2luTGlz
dCA9IGVpbmFfbGlzdF9hcHBlbmQob3JpZ2luTGlzdCwgb3JpZ2luLnJlbGVhc2UoKS5sZWFrUmVm
KCkpOworICAgIH0KKworICAgIHJldHVybiBvcmlnaW5MaXN0OworfQorCitzdHJ1Y3QgRXdrX1N0
b3JhZ2VfT3JpZ2luc19Bc3luY19HZXRfQ29udGV4dCB7CisgICAgY29uc3QgRXdrX1N0b3JhZ2Vf
TWFuYWdlciogbWFuYWdlcjsKKyAgICBFd2tfU3RvcmFnZV9PcmlnaW5zX0dldF9DYiBjYWxsYmFj
azsKKyAgICB2b2lkKiB1c2VyRGF0YTsKKworICAgIEV3a19TdG9yYWdlX09yaWdpbnNfQXN5bmNf
R2V0X0NvbnRleHQoY29uc3QgRXdrX1N0b3JhZ2VfTWFuYWdlciogbWFuYWdlciwgRXdrX1N0b3Jh
Z2VfT3JpZ2luc19HZXRfQ2IgY2FsbGJhY2ssIHZvaWQqIHVzZXJEYXRhKQorICAgICAgICA6IG1h
bmFnZXIobWFuYWdlcikKKyAgICAgICAgLCBjYWxsYmFjayhjYWxsYmFjaykKKyAgICAgICAgLCB1
c2VyRGF0YSh1c2VyRGF0YSkKKyAgICB7IH0KK307CisKK3N0YXRpYyB2b2lkIGdldFN0b3JhZ2VP
cmlnaW5zQ2FsbGJhY2soV0tBcnJheVJlZiBvcmlnaW5zLCBXS0Vycm9yUmVmIHdrRXJyb3IsIHZv
aWQqIGNvbnRleHQpCit7CisgICAgRWluYV9MaXN0KiBvcmlnaW5MaXN0ID0gMDsKKyAgICBPd25Q
dHI8RXdrX1N0b3JhZ2VfT3JpZ2luc19Bc3luY19HZXRfQ29udGV4dCo+IHdlYlN0b3JhZ2VDb250
ZXh0ID0gYWRvcHRQdHIoc3RhdGljX2Nhc3Q8RXdrX1N0b3JhZ2VfT3JpZ2luc19Bc3luY19HZXRf
Q29udGV4dCo+KGNvbnRleHQpKTsKKworICAgIG9yaWdpbkxpc3QgPSB3ZWJTdG9yYWdlQ29udGV4
dC0+bWFuYWdlci0+Y3JlYXRlT3JpZ2luTGlzdChvcmlnaW5zKTsKKworICAgIE93blB0cjxFd2tf
RXJyb3I+IGV3a0Vycm9yID0gRXdrX0Vycm9yOjpjcmVhdGUod2tFcnJvcik7CisgICAgd2ViU3Rv
cmFnZUNvbnRleHQtPmNhbGxiYWNrKG9yaWdpbkxpc3QsIGV3a0Vycm9yLmdldCgpLCB3ZWJTdG9y
YWdlQ29udGV4dC0+dXNlckRhdGEpOworfQorCitFaW5hX0Jvb2wgZXdrX3N0b3JhZ2VfbWFuYWdl
cl9vcmlnaW5zX2dldChjb25zdCBFd2tfU3RvcmFnZV9NYW5hZ2VyKiBld2tTdG9yYWdlTWFuYWdl
ciwgRXdrX1N0b3JhZ2VfT3JpZ2luc19HZXRfQ2IgY2FsbGJhY2ssIHZvaWQqIHVzZXJEYXRhKQor
eworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChld2tTdG9yYWdlTWFuYWdlciwg
ZmFsc2UpOworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChjYWxsYmFjaywgZmFs
c2UpOworCisgICAgRXdrX1N0b3JhZ2VfT3JpZ2luc19Bc3luY19HZXRfQ29udGV4dCogY29udGV4
dCA9IG5ldyBFd2tfU3RvcmFnZV9PcmlnaW5zX0FzeW5jX0dldF9Db250ZXh0KGV3a1N0b3JhZ2VN
YW5hZ2VyLCBjYWxsYmFjaywgdXNlckRhdGEpOworICAgIGV3a1N0b3JhZ2VNYW5hZ2VyLT5nZXRT
dG9yYWdlT3JpZ2lucyhjb250ZXh0LCBnZXRTdG9yYWdlT3JpZ2luc0NhbGxiYWNrKTsKKworICAg
IHJldHVybiB0cnVlOworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9lZmwvZXdrX3N0b3JhZ2VfbWFuYWdlci5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9lZmwvZXdrX3N0b3JhZ2VfbWFuYWdlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmQ5NGE1NTZiNjczNTAwZTYx
NmFlMjMzMzg5MDM4MGQ5NjVkMmM3ZGUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfc3RvcmFnZV9tYW5hZ2VyLmgKQEAgLTAsMCArMSw3MyBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBTYW1zdW5nIEVsZWN0cm9uaWNzLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORworICogTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvKioKKyAqIEBmaWxlICAgZXdr
X3N0b3JhZ2VfbWFuYWdlci5oCisgKiBAYnJpZWYgIERlc2NyaWJlcyB0aGUgRXdrIFN0b3JhZ2Ug
TWFuYWdlciBBUEkuCisgKgorICogRXdrIFN0b3JhZ2UgTWFuYWdlciBtYW5hZ2VzIHdlYiBzdG9y
YWdlLgorICovCisKKyNpZm5kZWYgZXdrX3N0b3JhZ2VfbWFuYWdlcl9oCisjZGVmaW5lIGV3a19z
dG9yYWdlX21hbmFnZXJfaAorCisjaW5jbHVkZSAiZXdrX2Vycm9yLmgiCisjaW5jbHVkZSA8RWlu
YS5oPgorCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCisKKy8qKiBD
cmVhdGVzIGEgdHlwZSBuYW1lIGZvciBFd2tfU3RvcmFnZV9NYW5hZ2VyLiAqLwordHlwZWRlZiBz
dHJ1Y3QgRXdrX1N0b3JhZ2VfTWFuYWdlciBFd2tfU3RvcmFnZV9NYW5hZ2VyOworCisvKioKKyAq
IEB0eXBlZGVmIEV3a19TdG9yYWdlX09yaWdpbnNfR2V0X0NiIEV3a19TdG9yYWdlX09yaWdpbnNf
R2V0X0NiCisgKiBAYnJpZWYgQ2FsbGJhY2sgdHlwZSBmb3IgdXNlIHdpdGggZXdrX3N0b3JhZ2Vf
bWFuYWdlcl9vcmlnaW5zX2dldCgpLgorICoKKyAqIEBwYXJhbSBvcmlnaW5zIEBjIEVpbmFfTGlz
dCBjb250YWluaW5nIEBjIEV3a19TZWN1cml0eV9PcmlnaW4gZWxlbWVudHMgb3IgQGMgTlVMTCBp
biBjYXNlIG9mIGVycm9yLAorICogICAgICAgICAgICAgICAgICAgICAgICB0aGUgRWluYV9MaXN0
IGFuZCBpdHMgaXRlbXMgc2hvdWxkIGJlIGZyZWVkIGFmdGVyIHVzZS4gVXNlIGV3a19zZWN1cml0
eV9vcmlnaW5fdW5yZWYoKQorICogICAgICAgICAgICAgICAgICAgICAgICB0byBmcmVlIHRoZSBp
dGVtcworICovCit0eXBlZGVmIHZvaWQgKCpFd2tfU3RvcmFnZV9PcmlnaW5zX0dldF9DYikoRWlu
YV9MaXN0ICpvcmlnaW5zLCBFd2tfRXJyb3IgKmVycm9yLCB2b2lkICp1c2VyX2RhdGEpOworCisv
KioKKyAqIEdldHMgbGlzdCBvZiBvcmlnaW5zIHRoYXQgYXJlIHN0b3JlZCBpbiBzdG9yYWdlIGRi
IGFzeW5jaHJvbm91c2x5LgorICoKKyAqIFRoaXMgZnVuY3Rpb24gYWxsb2NhdGVzIG1lbW9yeSBm
b3IgY29udGV4dCBzdHJ1Y3R1cmUgbWFkZSBmcm9tIGNhbGxiYWNrIGFuZCB1c2VyX2RhdGEuCisg
KgorICogQHBhcmFtIG1hbmFnZXIgRXdrX1N0b3JhZ2VfTWFuYWdlciBvYmplY3QKKyAqIEBwYXJh
bSBjYWxsYmFjayBjYWxsYmFjayB0byBnZXQgc3RvcmFnZSBvcmlnaW5zCisgKiBAcGFyYW0gdXNl
cl9kYXRhIHVzZXJfZGF0YSB3aWxsIGJlIHBhc3NlZCB3aGVuIHJlc3VsdF9jYWxsYmFjayBpcyBj
YWxsZWQsCisgKiAgICAtaS5lLiwgdXNlciBkYXRhIHdpbGwgYmUga2VwdCB1bnRpbCBjYWxsYmFj
ayBpcyBjYWxsZWQKKyAqCisgKiBAcmV0dXJuIEBjIEVJTkFfVFJVRSBvbiBzdWNjZXNzLCBAYyBF
SU5BX0ZBTFNFIG9uIGZhaWx1cmUKKyAqLworRUFQSSBFaW5hX0Jvb2wgZXdrX3N0b3JhZ2VfbWFu
YWdlcl9vcmlnaW5zX2dldChjb25zdCBFd2tfU3RvcmFnZV9NYW5hZ2VyICptYW5hZ2VyLCBFd2tf
U3RvcmFnZV9PcmlnaW5zX0dldF9DYiBjYWxsYmFjaywgdm9pZCAqdXNlcl9kYXRhKTsKKworI2lm
ZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKyNlbmRpZiAvLyBld2tfc3RvcmFnZV9tYW5hZ2Vy
X2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19zdG9y
YWdlX21hbmFnZXJfcHJpdmF0ZS5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwv
ZXdrX3N0b3JhZ2VfbWFuYWdlcl9wcml2YXRlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNWVlZWE0OTEzNzkxNWQ0
ZjIwMDc1Mjc3Yzg3NGMxNDBiNjk2OWI4ZAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19zdG9yYWdlX21hbmFnZXJfcHJpdmF0ZS5oCkBAIC0w
LDAgKzEsNTIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgU2Ftc3VuZyBFbGVjdHJvbmlj
cy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAi
QVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcKKyAqIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBl
d2tfc3RvcmFnZV9tYW5hZ2VyX3ByaXZhdGVfaAorI2RlZmluZSBld2tfc3RvcmFnZV9tYW5hZ2Vy
X3ByaXZhdGVfaAorCisjaW5jbHVkZSAiV0tLZXlWYWx1ZVN0b3JhZ2VNYW5hZ2VyLmgiCisjaW5j
bHVkZSAiV0tSZXRhaW5QdHIuaCIKKyNpbmNsdWRlICJld2tfc2VjdXJpdHlfb3JpZ2luX3ByaXZh
dGUuaCIKKyNpbmNsdWRlIDxXZWJLaXQyL1dLQmFzZS5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzT3du
UHRyLmg+CisKK2NsYXNzIEV3a19TdG9yYWdlX01hbmFnZXIgeworcHVibGljOgorICAgIHN0YXRp
YyBQYXNzT3duUHRyPEV3a19TdG9yYWdlX01hbmFnZXI+IGNyZWF0ZShXS0tleVZhbHVlU3RvcmFn
ZU1hbmFnZXJSZWYgd2tTdG9yYWdlTWFuYWdlclJlZikKKyAgICB7CisgICAgICAgIHJldHVybiBh
ZG9wdFB0cihuZXcgRXdrX1N0b3JhZ2VfTWFuYWdlcih3a1N0b3JhZ2VNYW5hZ2VyUmVmKSk7Cisg
ICAgfQorCisgICAgRWluYV9MaXN0KiBjcmVhdGVPcmlnaW5MaXN0KFdLQXJyYXlSZWYgd2tMaXN0
KSBjb25zdDsKKyAgICB2b2lkIGdldFN0b3JhZ2VPcmlnaW5zKHZvaWQqIGNvbnRleHQsIFdLS2V5
VmFsdWVTdG9yYWdlTWFuYWdlckdldEtleVZhbHVlU3RvcmFnZU9yaWdpbnNGdW5jdGlvbiBjYWxs
YmFjaykgY29uc3Q7CisKK3ByaXZhdGU6CisgICAgZXhwbGljaXQgRXdrX1N0b3JhZ2VfTWFuYWdl
cihXS0tleVZhbHVlU3RvcmFnZU1hbmFnZXJSZWYgd2tTdG9yYWdlTWFuYWdlclJlZik7CisKKyAg
ICBXS1JldGFpblB0cjxXS0tleVZhbHVlU3RvcmFnZU1hbmFnZXJSZWY+IG1fd2tTdG9yYWdlTWFu
YWdlcjsKKyAgICBtdXRhYmxlIEhhc2hNYXA8V0tTZWN1cml0eU9yaWdpblJlZiwgUmVmUHRyPEV3
a19TZWN1cml0eV9PcmlnaW4+ID4gbV93cmFwcGVyQ2FjaGU7Cit9OworCisjZW5kaWYgLy8gZXdr
X3N0b3JhZ2VfbWFuYWdlcl9wcml2YXRlX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvZWZsL3Rlc3RzL3Rlc3RfZXdrMl9jb250ZXh0LmNwcCBiL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvZWZsL3Rlc3RzL3Rlc3RfZXdrMl9jb250ZXh0LmNwcAppbmRleCA4
Njc0NmRjZjE5NzBjMWIyZjhkZDhlYmVkNTFjNTExN2Y2ZmMxOWNhLi4xZDQ0YWNiZmNkYTM3ZGI5
ZDllOTQ4NTA3ZTc2YjM2NDljNGZhOWI0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL2VmbC90ZXN0cy90ZXN0X2V3azJfY29udGV4dC5jcHAKKysrIGIvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvdGVzdHMvdGVzdF9ld2syX2NvbnRleHQuY3BwCkBAIC02
MSw2ICs2MSwxNCBAQCBURVNUX0YoRVdLMlVuaXRUZXN0QmFzZSwgZXdrX2NvbnRleHRfZmF2aWNv
bl9kYXRhYmFzZV9nZXQpCiAgICAgQVNTRVJUX0VRKGZhdmljb25EYXRhYmFzZSwgZXdrX2NvbnRl
eHRfZmF2aWNvbl9kYXRhYmFzZV9nZXQoY29udGV4dCkpOwogfQogCitURVNUX0YoRVdLMlVuaXRU
ZXN0QmFzZSwgZXdrX2NvbnRleHRfc3RvcmFnZV9tYW5hZ2VyX2dldCkKK3sKKyAgICBFd2tfQ29u
dGV4dCogY29udGV4dCA9IGV3a192aWV3X2NvbnRleHRfZ2V0KHdlYlZpZXcoKSk7CisgICAgRXdr
X1N0b3JhZ2VfTWFuYWdlciogc3RvcmFnZU1hbmFnZXIgPSBld2tfY29udGV4dF9zdG9yYWdlX21h
bmFnZXJfZ2V0KGNvbnRleHQpOworICAgIEFTU0VSVF9UUlVFKHN0b3JhZ2VNYW5hZ2VyKTsKKyAg
ICBBU1NFUlRfRVEoc3RvcmFnZU1hbmFnZXIsIGV3a19jb250ZXh0X3N0b3JhZ2VfbWFuYWdlcl9n
ZXQoY29udGV4dCkpOworfQorCiBzdGF0aWMgdm9pZCBzY2hlbWVSZXF1ZXN0Q2FsbGJhY2soRXdr
X1VybF9TY2hlbWVfUmVxdWVzdCogcmVxdWVzdCwgdm9pZCogdXNlckRhdGEpCiB7CiAgICAgY29u
c3QgY2hhciogc2NoZW1lID0gZXdrX3VybF9zY2hlbWVfcmVxdWVzdF9zY2hlbWVfZ2V0KHJlcXVl
c3QpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvdGVzdHMv
dGVzdF9ld2syX3N0b3JhZ2VfbWFuYWdlci5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL2VmbC90ZXN0cy90ZXN0X2V3azJfc3RvcmFnZV9tYW5hZ2VyLmNwcApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5i
NWQ5NjJhOWEyOGMwNzIyNDc3ZmVhZjM3NzVmZWM5YWNmMGNhYzMxCi0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvdGVzdHMvdGVzdF9ld2syX3N0b3Jh
Z2VfbWFuYWdlci5jcHAKQEAgLTAsMCArMSwxMzQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTIgU2Ftc3VuZyBFbGVjdHJvbmljcworICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisK
KyNpbmNsdWRlICJVbml0VGVzdFV0aWxzL0VXSzJVbml0VGVzdEJhc2UuaCIKKyNpbmNsdWRlIDxF
V2ViS2l0Mi5oPgorI2luY2x1ZGUgPEVjb3JlLmg+CisjaW5jbHVkZSA8Z3Rlc3QvZ3Rlc3QuaD4K
KwordXNpbmcgbmFtZXNwYWNlIEVXSzJVbml0VGVzdDsKKworc3RydWN0IE9yaWdpbkRhdGEgewor
ICAgIEVpbmFfTGlzdCogb3JpZ2luTGlzdDsKKyAgICBFd2tfU3RvcmFnZV9NYW5hZ2VyKiBtYW5h
Z2VyOworICAgIGJvb2wgZGlkUmVjZWl2ZU9yaWdpbnNDYWxsYmFjazsKKyAgICBib29sIGlzU3lu
Y2hyb25pemVkOworICAgIHVuc2lnbmVkIHRpbWVUb0NoZWNrOworCisgICAgT3JpZ2luRGF0YSgp
CisgICAgICAgIDogb3JpZ2luTGlzdCgwKQorICAgICAgICAsIG1hbmFnZXIoMCkKKyAgICAgICAg
LCBkaWRSZWNlaXZlT3JpZ2luc0NhbGxiYWNrKGZhbHNlKQorICAgICAgICAsIGlzU3luY2hyb25p
emVkKGZhbHNlKQorICAgICAgICAsIHRpbWVUb0NoZWNrKDEwKQorICAgIHsgfQorfTsKKworc3Rh
dGljIHZvaWQgZ2V0U3RvcmFnZU9yaWdpbnNDYWxsYmFjayhFaW5hX0xpc3QqIG9yaWdpbnMsIEV3
a19FcnJvciogZXJyb3IsIHZvaWQqIHVzZXJEYXRhKQoreworICAgIEFTU0VSVF9GQUxTRShlcnJv
cik7CisKKyAgICBPcmlnaW5EYXRhKiBvcmlnaW5EYXRhID0gc3RhdGljX2Nhc3Q8T3JpZ2luRGF0
YSo+KHVzZXJEYXRhKTsKKyAgICBvcmlnaW5EYXRhLT5kaWRSZWNlaXZlT3JpZ2luc0NhbGxiYWNr
ID0gdHJ1ZTsKKworICAgIEVpbmFfTGlzdCogbDsKKyAgICB2b2lkKiBkYXRhOworICAgIEVJTkFf
TElTVF9GT1JFQUNIKG9yaWdpbnMsIGwsIGRhdGEpIHsKKyAgICAgICAgb3JpZ2luRGF0YS0+b3Jp
Z2luTGlzdCA9IGVpbmFfbGlzdF9hcHBlbmQob3JpZ2luRGF0YS0+b3JpZ2luTGlzdCwgZGF0YSk7
CisgICAgICAgIEV3a19TZWN1cml0eV9PcmlnaW4qIG9yaWdpbiA9IHN0YXRpY19jYXN0PEV3a19T
ZWN1cml0eV9PcmlnaW4qPihkYXRhKTsKKyAgICAgICAgaWYgKCFzdHJjbXAoZXdrX3NlY3VyaXR5
X29yaWdpbl9wcm90b2NvbF9nZXQob3JpZ2luKSwgImh0dHAiKQorICAgICAgICAgICAgJiYgIXN0
cmNtcChld2tfc2VjdXJpdHlfb3JpZ2luX2hvc3RfZ2V0KG9yaWdpbiksICJ3d3cuc3RvcmFnZXRl
c3QuY29tIikKKyAgICAgICAgICAgICYmICFld2tfc2VjdXJpdHlfb3JpZ2luX3BvcnRfZ2V0KG9y
aWdpbikpIHsKKyAgICAgICAgICAgICAgICBvcmlnaW5EYXRhLT5pc1N5bmNocm9uaXplZCA9IHRy
dWU7CisgICAgICAgICAgICAgICAgZWNvcmVfbWFpbl9sb29wX3F1aXQoKTsKKyAgICAgICAgfQor
ICAgIH0KK30KKworc3RhdGljIGJvb2wgdGltZXJDYWxsYmFjayh2b2lkKiB1c2VyRGF0YSkKK3sK
KyAgICBPcmlnaW5EYXRhKiBvcmlnaW5EYXRhID0gc3RhdGljX2Nhc3Q8T3JpZ2luRGF0YSo+KHVz
ZXJEYXRhKTsKKworICAgIGlmIChvcmlnaW5EYXRhLT5pc1N5bmNocm9uaXplZCB8fCAhLS0ob3Jp
Z2luRGF0YS0+dGltZVRvQ2hlY2spKSB7CisgICAgICAgIGVjb3JlX21haW5fbG9vcF9xdWl0KCk7
CisgICAgICAgIHJldHVybiBFQ09SRV9DQUxMQkFDS19DQU5DRUw7CisgICAgfQorCisgICAgaWYg
KG9yaWdpbkRhdGEtPmRpZFJlY2VpdmVPcmlnaW5zQ2FsbGJhY2spIHsKKyAgICAgICAgb3JpZ2lu
RGF0YS0+ZGlkUmVjZWl2ZU9yaWdpbnNDYWxsYmFjayA9IGZhbHNlOworICAgICAgICBld2tfc3Rv
cmFnZV9tYW5hZ2VyX29yaWdpbnNfZ2V0KG9yaWdpbkRhdGEtPm1hbmFnZXIsIGdldFN0b3JhZ2VP
cmlnaW5zQ2FsbGJhY2ssIG9yaWdpbkRhdGEpOworICAgIH0KKworICAgIHJldHVybiBFQ09SRV9D
QUxMQkFDS19SRU5FVzsKK30KKworc3RhdGljIGJvb2wgY2hlY2tPcmlnaW4oRWluYV9MaXN0KiBv
cmlnaW5zLCBFd2tfU2VjdXJpdHlfT3JpZ2luKiogb3JpZ2luKQoreworICAgIEVpbmFfTGlzdCog
bDsKKyAgICB2b2lkKiBkYXRhOworICAgIEVJTkFfTElTVF9GT1JFQUNIKG9yaWdpbnMsIGwsIGRh
dGEpIHsKKyAgICAgICAgKm9yaWdpbiA9IHN0YXRpY19jYXN0PEV3a19TZWN1cml0eV9PcmlnaW4q
PihkYXRhKTsKKyAgICAgICAgaWYgKCFzdHJjbXAoZXdrX3NlY3VyaXR5X29yaWdpbl9wcm90b2Nv
bF9nZXQoKm9yaWdpbiksICJodHRwIikKKyAgICAgICAgICAgICYmICFzdHJjbXAoZXdrX3NlY3Vy
aXR5X29yaWdpbl9ob3N0X2dldCgqb3JpZ2luKSwgInd3dy5zdG9yYWdldGVzdC5jb20iKQorICAg
ICAgICAgICAgJiYgIWV3a19zZWN1cml0eV9vcmlnaW5fcG9ydF9nZXQoKm9yaWdpbikpCisgICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK1RF
U1RfRihFV0syVW5pdFRlc3RCYXNlLCBld2tfc3RvcmFnZV9tYW5hZ2VyX29yaWdpbnNfZ2V0KQor
eworICAgIEV2YXNfT2JqZWN0KiB2aWV3ID0gd2ViVmlldygpOworICAgIGNvbnN0IGNoYXIqIHN0
b3JhZ2VIVE1MID0KKyAgICAgICAgIjxodG1sPjxoZWFkPjx0aXRsZT5vcmlnaW5hbCB0aXRsZTwv
dGl0bGU+PC9oZWFkPiIKKyAgICAgICAgIjxib2R5PiIKKyAgICAgICAgIjxzY3JpcHQgdHlwZT0n
dGV4dC9qYXZhc2NyaXB0Jz4iCisgICAgICAgICIgbG9jYWxTdG9yYWdlLnNldEl0ZW0oJ2l0ZW0n
LCAnc3RvcmFnZScpOyIKKyAgICAgICAgIjwvc2NyaXB0PiIKKyAgICAgICAgIjwvYm9keT48L2h0
bWw+IjsKKworICAgIGV3a192aWV3X2h0bWxfc3RyaW5nX2xvYWQodmlldywgc3RvcmFnZUhUTUws
ICJodHRwOi8vd3d3LnN0b3JhZ2V0ZXN0LmNvbSIsIDApOworCisgICAgT3JpZ2luRGF0YSBvcmln
aW5EYXRhOworICAgIG9yaWdpbkRhdGEubWFuYWdlciA9IGV3a19jb250ZXh0X3N0b3JhZ2VfbWFu
YWdlcl9nZXQoZXdrX3ZpZXdfY29udGV4dF9nZXQodmlldykpOworICAgIEFTU0VSVF9UUlVFKGV3
a19zdG9yYWdlX21hbmFnZXJfb3JpZ2luc19nZXQob3JpZ2luRGF0YS5tYW5hZ2VyLCBnZXRTdG9y
YWdlT3JpZ2luc0NhbGxiYWNrLCAmb3JpZ2luRGF0YSkpOworICAgIEVjb3JlX1RpbWVyKiBzdG9y
YWdlX3RpbWVyID0gZWNvcmVfdGltZXJfYWRkKDEsIHJlaW50ZXJwcmV0X2Nhc3Q8RWNvcmVfVGFz
a19DYj4odGltZXJDYWxsYmFjayksICZvcmlnaW5EYXRhKTsKKworICAgIGVjb3JlX21haW5fbG9v
cF9iZWdpbigpOworICAgIGlmIChzdG9yYWdlX3RpbWVyKQorICAgICAgICBlY29yZV90aW1lcl9k
ZWwoc3RvcmFnZV90aW1lcik7CisKKyAgICBBU1NFUlRfVFJVRShvcmlnaW5EYXRhLmlzU3luY2hy
b25pemVkKTsKKyAgICBBU1NFUlRfTEUoMSwgZWluYV9saXN0X2NvdW50KG9yaWdpbkRhdGEub3Jp
Z2luTGlzdCkpOworCisgICAgRXdrX1NlY3VyaXR5X09yaWdpbiogb3JpZ2luID0gMDsKKyAgICBF
WFBFQ1RfVFJVRShjaGVja09yaWdpbihvcmlnaW5EYXRhLm9yaWdpbkxpc3QsICZvcmlnaW4pKTsK
KworICAgIEVYUEVDVF9FUShvcmlnaW4sIGV3a19zZWN1cml0eV9vcmlnaW5fcmVmKG9yaWdpbikp
OworICAgIGV3a19zZWN1cml0eV9vcmlnaW5fdW5yZWYob3JpZ2luKTsKK30K
</data>

          </attachment>
      

    </bug>

</bugzilla>