<?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>40302</bug_id>
          
          <creation_ts>2010-06-08 08:09:31 -0700</creation_ts>
          <short_desc>[GTK] Memory managament for DOM GObject wrappers</short_desc>
          <delta_ts>2010-11-20 22:12:29 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKitGTK</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>OS X 10.5</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>
          
          <blocked>38576</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Xan Lopez">xan.lopez</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>mrobinson</cc>
    
    <cc>wk.censorship.bypass.0006</cc>
    
    <cc>xan.lopez</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>235259</commentid>
    <comment_count>0</comment_count>
    <who name="Xan Lopez">xan.lopez</who>
    <bug_when>2010-06-08 08:09:31 -0700</bug_when>
    <thetext>When a GObject DOM object is created we wrap the core DOM object (say, WebCore::Node) with a native GObject, add a manual C++ ref to the core object, and place the matching deref in the finalize method (note to self, this should probably be done in dispose). So far, this seems sane.

Problem is, before returning the object we do the following: we place the object in a hash map, indexed by the core object, and if a wrapper for this core object is requested again we&apos;ll just return the corresponding GObject as-is. This entry in the hash map is, also, cleared on finalize. Since we do not add extra references in this process, you can get into a situation where you have two pointers to a GObject DOM binding that are actually the same object, with only one total reference; if you do g_object_unref on objects you don&apos;t need, tragedy will ensue when you try to use the second pointer (even if it&apos;s only to also unref it).

The hash map concept seems very reasonable to me in general, so I think what we should do is to always add a new reference when we return an object, even if we are only getting it from the map. This way the rule &quot;always unref DOM objects when you are done with them&quot; will work.

The only remaining problem would be the huge pain in the ass that this kind of API is for C programmers, of course...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>236780</commentid>
    <comment_count>1</comment_count>
    <who name="webkit censorship bypass 0006">wk.censorship.bypass.0006</who>
    <bug_when>2010-06-11 04:53:05 -0700</bug_when>
    <thetext>(In reply to comment #0)

&gt; The hash map concept seems very reasonable to me in general, so I think what we should do is to always add a new reference when we return an object, even if we are only getting it from the map. This way the rule &quot;always unref DOM objects when you are done with them&quot; will work.

 the description of the problem is somewhat ambiguous, so here are some possible answers:

 if the intent is to create multiple gobjects which point to the same underlying webkit DOM object, this will be a complete disaster from a programming perspective by the time it gets up to high-level language bindings.

 many high-level applications rely on being able to do tests to see if a node is equal (isSameNode).

 removing such functionality can result in total project failure as, when using high-level languages, there is no other non-intrusive method for correctly identifying/comparing DOM objects.  intrusive methods include adding unique IDs to DOM Nodes, using the Node &quot;id&quot; field which then of course interferes with other uses (such as from javascript being executed in parallel with high-level language DOM manipulation).

 surely the problem is solved by simply increasing the refcount when returning the corresponding GObject as-is?  this seems to be the implied course of action recommended, by xan, and, if so, it is a good one.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>297753</commentid>
    <comment_count>2</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2010-10-21 17:44:46 -0700</bug_when>
    <thetext>Any updates on this issue? I know we&apos;ve discussed it multiple times since the last comment, but I can&apos;t recall if there was any resolution.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>298291</commentid>
    <comment_count>3</comment_count>
    <who name="Xan Lopez">xan.lopez</who>
    <bug_when>2010-10-22 18:19:04 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; Any updates on this issue? I know we&apos;ve discussed it multiple times since the last comment, but I can&apos;t recall if there was any resolution.

We are basically stuck in finding a reasonable place to collect all the GObject wrappers created for the DOM objects in a page.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>298294</commentid>
    <comment_count>4</comment_count>
    <who name="Xan Lopez">xan.lopez</who>
    <bug_when>2010-10-22 18:20:21 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; (In reply to comment #2)
&gt; &gt; Any updates on this issue? I know we&apos;ve discussed it multiple times since the last comment, but I can&apos;t recall if there was any resolution.
&gt; 
&gt; We are basically stuck in finding a reasonable place to collect all the GObject wrappers created for the DOM objects in a page.

This of course assumes we want some sort of automatic collection, as opposed to the manual approach suggested in the first comment (which is still trivial to do but still makes the API cumbersome).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>298299</commentid>
    <comment_count>5</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2010-10-22 18:40:14 -0700</bug_when>
    <thetext>Warning: ugly solution follows. One approach would be to cache the DOM objects and then clean the cache on a timer. This relieves the user from having to worry about memory management (unless they wanted the objects to stick around) and it doesn&apos;t break the current API.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>311106</commentid>
    <comment_count>6</comment_count>
      <attachid>74295</attachid>
    <who name="Xan Lopez">xan.lopez</who>
    <bug_when>2010-11-18 15:03:22 -0800</bug_when>
    <thetext>Created attachment 74295
domcache.diff</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>311173</commentid>
    <comment_count>7</comment_count>
      <attachid>74295</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2010-11-18 16:46:12 -0800</bug_when>
    <thetext>Comment on attachment 74295
domcache.diff

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

Looks good, though I have a few nagging concerns (some of which I&apos;ve outlined below). Another issue is what happens when a developer uses a DOM object to change the frame location. Isn&apos;t there the possibility that it will unref the DOM wrapper out from under them?

&gt; WebCore/bindings/gobject/DOMObjectCache.cpp:72
&gt; +    // Unrefing the objects removes them from the cache in their

Should be &quot;Unreffing&quot; here.

&gt; WebCore/bindings/gobject/DOMObjectCache.cpp:77
&gt; +        DOMObjectCacheData* data = static_cast&lt;DOMObjectCacheData*&gt;(iter-&gt;second);

I don&apos;t think this static_cast is necessary.

&gt; WebCore/bindings/gobject/DOMObjectCache.cpp:78
&gt; +        if (data &amp;&amp; (!view || data-&gt;view == view))

Would ASSERT(data) be more appropriate, or are there cases where the data can, in fact, be NULL?

&gt; WebCore/bindings/gobject/DOMObjectCache.cpp:101
&gt; +    return g_object_ref(data-&gt;object);

Won&apos;t this lead to leaks, since the cache only does one unref when cleared and DOMObjectCache::get can be called multiple times before that?

&gt; WebCore/bindings/gobject/DOMObjectCache.cpp:119
&gt; +    put(static_cast&lt;void*&gt;(objectHandle), wrapper);

I don&apos;t think the cast is necessary to get void*.

&gt; WebCore/bindings/gobject/DOMObjectCache.h:22
&gt; +#include &lt;glib-object.h&gt;

Using void* instead of gpointer would prevent the need for this include, which would be a win for compile time.

&gt; WebKit/gtk/WebCoreSupport/FrameLoaderClientGtk.cpp:703
&gt; -    // this is only interesting once we provide an external API for the DOM
&gt; +    if (!ready)
&gt; +        DOMObjectCache::clearByView(getViewFromFrame(m_frame));

Doesn&apos;t this mean that when an iframe reloads, all cached DOM objects will be removed for the entire view? I think it would be better to track per-frame.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>311736</commentid>
    <comment_count>8</comment_count>
      <attachid>74436</attachid>
    <who name="Xan Lopez">xan.lopez</who>
    <bug_when>2010-11-19 16:00:11 -0800</bug_when>
    <thetext>Created attachment 74436
domcache.diff

This should address the previous review.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>311831</commentid>
    <comment_count>9</comment_count>
      <attachid>74460</attachid>
    <who name="Xan Lopez">xan.lopez</who>
    <bug_when>2010-11-19 19:42:26 -0800</bug_when>
    <thetext>Created attachment 74460
domcache.diff</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>311835</commentid>
    <comment_count>10</comment_count>
      <attachid>74462</attachid>
    <who name="Xan Lopez">xan.lopez</who>
    <bug_when>2010-11-19 19:49:18 -0800</bug_when>
    <thetext>Created attachment 74462
domcache.diff

Make the refCount check more explicit.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>311954</commentid>
    <comment_count>11</comment_count>
      <attachid>74462</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2010-11-20 10:21:10 -0800</bug_when>
    <thetext>Comment on attachment 74462
domcache.diff

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

&gt; WebCore/bindings/gobject/DOMObjectCache.cpp:32
&gt; +    gint refCount;

Kind of a nit, but I think I&apos;d prefer this to be named something like timesReturned, since it isn&apos;t technically the reference count of the GObject. Also, this could be size_t.

&gt; WebCore/bindings/gobject/DOMObjectCache.cpp:82
&gt; +    Vector&lt;DOMObjectCacheData*&gt;::iterator last = toUnref.end();
&gt; +    for (Vector&lt;DOMObjectCacheData*&gt;::iterator it = toUnref.begin(); it != last; ++it) {
&gt; +        DOMObjectCacheData* data = *it;
&gt; +        while (data-&gt;refCount-- &gt; 0)
&gt; +            g_object_unref(data-&gt;object);
&gt; +    }

There&apos;s some chance here that the object might die before you finish unreffing it, right? Say the user has unreffed only some of the return values. :/ Since there doesn&apos;t appear to be a way to peak at the reference count, maybe you should install a weak reference here and stop unreffing when you detect death. Another approach would be to keep information about dead objects in the cache and clear them at some later point. Wow, this is hairy.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>311991</commentid>
    <comment_count>12</comment_count>
    <who name="Xan Lopez">xan.lopez</who>
    <bug_when>2010-11-20 14:37:04 -0800</bug_when>
    <thetext>(In reply to comment #11)
&gt; Kind of a nit, but I think I&apos;d prefer this to be named something like timesReturned, since it isn&apos;t technically the reference count of the GObject. Also, this could be size_t.

Why size_t?

&gt; 
&gt; &gt; WebCore/bindings/gobject/DOMObjectCache.cpp:82
&gt; &gt; +    Vector&lt;DOMObjectCacheData*&gt;::iterator last = toUnref.end();
&gt; &gt; +    for (Vector&lt;DOMObjectCacheData*&gt;::iterator it = toUnref.begin(); it != last; ++it) {
&gt; &gt; +        DOMObjectCacheData* data = *it;
&gt; &gt; +        while (data-&gt;refCount-- &gt; 0)
&gt; &gt; +            g_object_unref(data-&gt;object);
&gt; &gt; +    }
&gt; 
&gt; There&apos;s some chance here that the object might die before you finish unreffing it, right? Say the user has unreffed only some of the return values. :/ Since there doesn&apos;t appear to be a way to peak at the reference count, maybe you should install a weak reference here and stop unreffing when you detect death. Another approach would be to keep information about dead objects in the cache and clear them at some later point. Wow, this is hairy.

I think adding a weak ref at the beginning of the process and stopping if it&apos;s triggered makes sense.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>312020</commentid>
    <comment_count>13</comment_count>
      <attachid>74490</attachid>
    <who name="Xan Lopez">xan.lopez</who>
    <bug_when>2010-11-20 18:15:00 -0800</bug_when>
    <thetext>Created attachment 74490
domcache.diff

Added the weak_ref trick and renamed refCount to timesReturned. I changed timesReturned to a &apos;guint&apos; since I&apos;m unsure why it should be a size_t.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>312036</commentid>
    <comment_count>14</comment_count>
      <attachid>74490</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2010-11-20 21:04:35 -0800</bug_when>
    <thetext>Comment on attachment 74490
domcache.diff

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

Very nice! This was tricky. Only change I think you should make (other than the two ultra nits below) is to use Frame* instead of void* for all things that deal with frames.

&gt; WebCore/bindings/gobject/DOMObjectCache.cpp:103
&gt; +        ASSERT(data-&gt;timesReturned == 0);

I think this has to be ASSERT(!data-&gt;timesReturned); to make the style gods happy.

&gt; WebKit/gtk/webkit/webkithittestresult.cpp:81
&gt; +    WebKitHitTestResultPrivate* priv = WEBKIT_HIT_TEST_RESULT(object)-&gt;priv;
&gt; +
&gt; +    g_object_unref(priv-&gt;innerNode);
&gt; +
&gt; +    G_OBJECT_CLASS(webkit_hit_test_result_parent_class)-&gt;dispose(object);
&gt; +}

I think this should be two lines to preserve vertical space:

g_object_unref(WEBKIT_HIT_TEST_RESULT(object)-&gt;priv-&gt;innerNode);
G_OBJECT_CLASS(webkit_hit_test_result_parent_class)-&gt;dispose(object);</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>312051</commentid>
    <comment_count>15</comment_count>
      <attachid>74490</attachid>
    <who name="Xan Lopez">xan.lopez</who>
    <bug_when>2010-11-20 22:12:16 -0800</bug_when>
    <thetext>Comment on attachment 74490
domcache.diff

Landed as r72492 with some minor adjustments.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>312052</commentid>
    <comment_count>16</comment_count>
    <who name="Xan Lopez">xan.lopez</who>
    <bug_when>2010-11-20 22:12:29 -0800</bug_when>
    <thetext>Closing.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>74295</attachid>
            <date>2010-11-18 15:03:22 -0800</date>
            <delta_ts>2010-11-19 16:00:11 -0800</delta_ts>
            <desc>domcache.diff</desc>
            <filename>domcache.diff</filename>
            <type>text/plain</type>
            <size>24447</size>
            <attacher name="Xan Lopez">xan.lopez</attacher>
            
              <data encoding="base64">RnJvbSBlMDExZTU3OTQyYTNjNmNjYTcxNmI1M2NmZGMyODcyZWMwMGIyN2I0IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBYYW4gTG9wZXogPHhsb3BlekBpZ2FsaWEuY29tPgpEYXRlOiBU
dWUsIDE2IE5vdiAyMDEwIDIwOjMxOjMzIC0wNTAwClN1YmplY3Q6IFtQQVRDSF0gV2ViQ29yZToK
CjIwMTAtMTEtMTggIFhhbiBMb3BleiAgPHhsb3BlekBpZ2FsaWEuY29tPgoKICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KCiAgICAgICAgW0dUS10gTWVtb3J5IG1hbmFnYW1lbnQg
Zm9yIERPTSBHT2JqZWN0IHdyYXBwZXJzCiAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTQwMzAyCgogICAgICAgIEluaXRpYWwgYXR0ZW1wdCB0byBoYXZlIGEg
a2luZCBvZiBwb29yIG1hbidzIGdhcmJhZ2UgY29sbGVjdGlvbgogICAgICAgIGZvciBHT2JqZWN0
IERPTSBvYmplY3RzLiBXZSB0aWUgdGhlIG9iamVjdCdzIGxpZmVjeWNsZSB0byB0aGVpcgogICAg
ICAgIHBhcmVudCBXZWJWaWV3ICphbmQqIGRvY3VtZW50OyB0aGF0IGlzLCBhbGwgb2JqZWN0cyB3
aWxsIGJlCiAgICAgICAgY29sbGVjdGVkIHdoZW4gdGhlaXIgdmlldyBpcyBkZXN0cm95ZWQgb3Ig
d2hlbiB0aGF0IHZpZXcKICAgICAgICB0cmFuc2l0aW9ucyB0byBhIG5ldyBkb2N1bWVudC4gTWFu
dWFsIG1hbmFnZW1lbnQgKGNhbGxpbmcKICAgICAgICBnX29iamVjdF91bnJlZiBvbiB0aGVtKSBp
cyBhbHNvIGFsbG93ZWQsIGFuZCBpcyByZXF1aXJlZCBmb3IKICAgICAgICBvYmplY3RzIHRoYXQg
YXJlIG5vdCBpbiB0aGUgRE9NIHRyZWUgKGVnIE5vZGVMaXN0cykuCgogICAgICAgICogR05VbWFr
ZWZpbGUuYW06CiAgICAgICAgKiBiaW5kaW5ncy9nb2JqZWN0L0RPTU9iamVjdENhY2hlLmNwcDog
QWRkZWQuCiAgICAgICAgKiBiaW5kaW5ncy9nb2JqZWN0L0RPTU9iamVjdENhY2hlLmg6IENvcGll
ZCBmcm9tIFdlYkNvcmUvYmluZGluZ3MvZ29iamVjdC9XZWJLaXRET01CaW5kaW5nLmguCiAgICAg
ICAgKiBiaW5kaW5ncy9nb2JqZWN0L1dlYktpdERPTUJpbmRpbmcuY3BwOiBSZW1vdmUgdGhlIG9s
ZCBjYWNoZSBjb2RlLgogICAgICAgICogYmluZGluZ3MvZ29iamVjdC9XZWJLaXRET01CaW5kaW5n
Lmg6IGRpdHRvLgogICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yR09iamVj
dC5wbTogaW5jbHVkZSB0aGUgbmV3IERPTU9iamVjdENhY2hlIGhlYWRlci4KCldlYktpdC9ndGs6
CgoyMDEwLTExLTE4ICBYYW4gTG9wZXogIDx4bG9wZXpAaWdhbGlhLmNvbT4KCiAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCgogICAgICAgIFtHVEtdIE1lbW9yeSBtYW5hZ2FtZW50
IGZvciBET00gR09iamVjdCB3cmFwcGVycwogICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD00MDMwMgoKICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0ZyYW1lTG9h
ZGVyQ2xpZW50R3RrLmNwcDoKICAgICAgICAoV2ViS2l0OjpGcmFtZUxvYWRlckNsaWVudDo6c2V0
TWFpbkZyYW1lRG9jdW1lbnRSZWFkeSk6IGNsZWFuIGFsbAogICAgICAgIHRoZSBET00gb2JqZWN0
cyBhdHRhY2hlZCB0byB0aGlzIHZpZXcgd2hlbiB3ZSB0cmFuc2l0aW9uIHRvIGEgbmV3CiAgICAg
ICAgZG9jdW1lbnQuCiAgICAgICAgKiB0ZXN0cy90ZXN0ZG9tZG9jdW1lbnQuYzoKICAgICAgICAo
ZG9tX2RvY3VtZW50X2ZpeHR1cmVfdGVhcmRvd24pOiBvbmx5IGRlc3Ryb3kgdGhlIHZpZXcgaWYg
d2UgaGF2ZQogICAgICAgIG9uZSwgc2luY2Ugc29tZSB0ZXN0cyB3aWxsIG5vdyBkZXN0cm95IGl0
IHRoZW1zZWx2ZXMuCiAgICAgICAgKHRlc3RfZG9tX2RvY3VtZW50X2dldF9lbGVtZW50c19ieV90
YWdfbmFtZSk6IG1hbnVhbGx5IHVucmVmIG5vZGUgbGlzdHMuCiAgICAgICAgKHRlc3RfZG9tX2Rv
Y3VtZW50X2dldF9lbGVtZW50c19ieV9jbGFzc19uYW1lKTogZGl0dG8uCiAgICAgICAgKHRlc3Rf
ZG9tX2RvY3VtZW50X2dldF9saW5rcyk6IGRpdHRvLgogICAgICAgICh3ZWFrX25vdGlmeSk6CiAg
ICAgICAgKHRlc3RfZG9tX2RvY3VtZW50X2dhcmJhZ2VfY29sbGVjdGlvbik6IHRlc3QgYWxsIHBv
c3NpYmxlCiAgICAgICAgc2NlbmFyaW9zIG9mIERPTSBvYmplY3QncyBtZW1vcnkgbWFuYWdlbWVu
dC4KICAgICAgICAobWFpbik6IGFkZCBuZXcgdGVzdC4KICAgICAgICAqIHRlc3RzL3Rlc3Rkb21u
b2RlLmM6CiAgICAgICAgKHRlc3RfZG9tX25vZGVfaGllcmFyY2h5X25hdmlnYXRpb24pOiBtYW51
YWxseSB1bnJlZiBub2RlIGxpc3RzLgogICAgICAgICh0ZXN0X2RvbV9ub2RlX2luc2VydGlvbik6
IGRpdHRvLgogICAgICAgICogd2Via2l0L3dlYmtpdHdlYnZpZXcuY3BwOgogICAgICAgICh3ZWJr
aXRfd2ViX3ZpZXdfZGlzcG9zZSk6IGNsZWFuIGFsbCB0aGUgRE9NIG9iamVjdHMgYXR0YWNoZWQg
dG8KICAgICAgICB0aGlzIHZpZXcuCi0tLQogV2ViQ29yZS9DaGFuZ2VMb2cgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgfCAgIDIyICsrKysKIFdlYkNvcmUvR05VbWFrZWZpbGUuYW0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgMiArCiBXZWJDb3JlL2JpbmRpbmdzL2dv
YmplY3QvRE9NT2JqZWN0Q2FjaGUuY3BwICAgICAgICB8ICAxMzEgKysrKysrKysrKysrKysrKysr
KysKIFdlYkNvcmUvYmluZGluZ3MvZ29iamVjdC9ET01PYmplY3RDYWNoZS5oICAgICAgICAgIHwg
ICA0MCArKysrKysKIFdlYkNvcmUvYmluZGluZ3MvZ29iamVjdC9XZWJLaXRET01CaW5kaW5nLmNw
cCAgICAgIHwgICAyNyArLS0tLQogV2ViQ29yZS9iaW5kaW5ncy9nb2JqZWN0L1dlYktpdERPTUJp
bmRpbmcuaCAgICAgICAgfCAgICA3IC0KIFdlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2Vu
ZXJhdG9yR09iamVjdC5wbSAgIHwgICAgMSArCiBXZWJLaXQvZ3RrL0NoYW5nZUxvZyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB8ICAgMjggKysrKwogV2ViS2l0L2d0ay9XZWJDb3JlU3Vw
cG9ydC9GcmFtZUxvYWRlckNsaWVudEd0ay5jcHAgfCAgICA2ICstCiBXZWJLaXQvZ3RrL3Rlc3Rz
L3Rlc3Rkb21kb2N1bWVudC5jICAgICAgICAgICAgICAgICB8ICAxMDMgKysrKysrKysrKysrKysr
LQogV2ViS2l0L2d0ay90ZXN0cy90ZXN0ZG9tbm9kZS5jICAgICAgICAgICAgICAgICAgICAgfCAg
ICA1ICsKIFdlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYnZpZXcuY3BwICAgICAgICAgICAgICAg
IHwgICAgMyArCiAxMiBmaWxlcyBjaGFuZ2VkLCAzMzggaW5zZXJ0aW9ucygrKSwgMzcgZGVsZXRp
b25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgV2ViQ29yZS9iaW5kaW5ncy9nb2JqZWN0L0RPTU9i
amVjdENhY2hlLmNwcAogY3JlYXRlIG1vZGUgMTAwNjQ0IFdlYkNvcmUvYmluZGluZ3MvZ29iamVj
dC9ET01PYmplY3RDYWNoZS5oCgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9DaGFuZ2VMb2cgYi9XZWJD
b3JlL0NoYW5nZUxvZwppbmRleCBiOGU5YTMyLi44ODJlYzg1IDEwMDY0NAotLS0gYS9XZWJDb3Jl
L0NoYW5nZUxvZworKysgYi9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI1IEBACisyMDEw
LTExLTE4ICBYYW4gTG9wZXogIDx4bG9wZXpAaWdhbGlhLmNvbT4KKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBbR1RLXSBNZW1vcnkgbWFuYWdhbWVudCBm
b3IgRE9NIEdPYmplY3Qgd3JhcHBlcnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTQwMzAyCisKKyAgICAgICAgSW5pdGlhbCBhdHRlbXB0IHRvIGhhdmUg
YSBraW5kIG9mIHBvb3IgbWFuJ3MgZ2FyYmFnZSBjb2xsZWN0aW9uCisgICAgICAgIGZvciBHT2Jq
ZWN0IERPTSBvYmplY3RzLiBXZSB0aWUgdGhlIG9iamVjdCdzIGxpZmVjeWNsZSB0byB0aGVpcgor
ICAgICAgICBwYXJlbnQgV2ViVmlldyAqYW5kKiBkb2N1bWVudDsgdGhhdCBpcywgYWxsIG9iamVj
dHMgd2lsbCBiZQorICAgICAgICBjb2xsZWN0ZWQgd2hlbiB0aGVpciB2aWV3IGlzIGRlc3Ryb3ll
ZCBvciB3aGVuIHRoYXQgdmlldworICAgICAgICB0cmFuc2l0aW9ucyB0byBhIG5ldyBkb2N1bWVu
dC4gTWFudWFsIG1hbmFnZW1lbnQgKGNhbGxpbmcKKyAgICAgICAgZ19vYmplY3RfdW5yZWYgb24g
dGhlbSkgaXMgYWxzbyBhbGxvd2VkLCBhbmQgaXMgcmVxdWlyZWQgZm9yCisgICAgICAgIG9iamVj
dHMgdGhhdCBhcmUgbm90IGluIHRoZSBET00gdHJlZSAoZWcgTm9kZUxpc3RzKS4KKworICAgICAg
ICAqIEdOVW1ha2VmaWxlLmFtOgorICAgICAgICAqIGJpbmRpbmdzL2dvYmplY3QvRE9NT2JqZWN0
Q2FjaGUuY3BwOiBBZGRlZC4KKyAgICAgICAgKiBiaW5kaW5ncy9nb2JqZWN0L0RPTU9iamVjdENh
Y2hlLmg6IENvcGllZCBmcm9tIFdlYkNvcmUvYmluZGluZ3MvZ29iamVjdC9XZWJLaXRET01CaW5k
aW5nLmguCisgICAgICAgICogYmluZGluZ3MvZ29iamVjdC9XZWJLaXRET01CaW5kaW5nLmNwcDog
UmVtb3ZlIHRoZSBvbGQgY2FjaGUgY29kZS4KKyAgICAgICAgKiBiaW5kaW5ncy9nb2JqZWN0L1dl
YktpdERPTUJpbmRpbmcuaDogZGl0dG8uCisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy9Db2Rl
R2VuZXJhdG9yR09iamVjdC5wbTogaW5jbHVkZSB0aGUgbmV3IERPTU9iamVjdENhY2hlIGhlYWRl
ci4KKwogMjAxMC0xMS0xOCAgSmFtZXMgUm9iaW5zb24gIDxqYW1lc3JAY2hyb21pdW0ub3JnPgog
CiAgICAgICAgIFJldmlld2VkIGJ5IERhcmluIEZpc2hlci4KZGlmZiAtLWdpdCBhL1dlYkNvcmUv
R05VbWFrZWZpbGUuYW0gYi9XZWJDb3JlL0dOVW1ha2VmaWxlLmFtCmluZGV4IDVkY2M0NjguLjlm
MzljZGQgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvR05VbWFrZWZpbGUuYW0KKysrIGIvV2ViQ29yZS9H
TlVtYWtlZmlsZS5hbQpAQCAtNjM5LDYgKzYzOSw4IEBAIHdlYmNvcmVfc291cmNlcyArPSBcCiAJ
V2ViQ29yZS9iaW5kaW5ncy9nZW5lcmljL1J1bnRpbWVFbmFibGVkRmVhdHVyZXMuaCBcCiAJV2Vi
Q29yZS9iaW5kaW5ncy9nb2JqZWN0L0NvbnZlcnRUb1VURjhTdHJpbmcuY3BwIFwKIAlXZWJDb3Jl
L2JpbmRpbmdzL2dvYmplY3QvQ29udmVydFRvVVRGOFN0cmluZy5oIFwKKwlXZWJDb3JlL2JpbmRp
bmdzL2dvYmplY3QvRE9NT2JqZWN0Q2FjaGUuY3BwIFwKKwlXZWJDb3JlL2JpbmRpbmdzL2dvYmpl
Y3QvRE9NT2JqZWN0Q2FjaGUuaCBcCiAJV2ViQ29yZS9iaW5kaW5ncy9nb2JqZWN0L0dPYmplY3RF
dmVudExpc3RlbmVyLmNwcCBcCiAJV2ViQ29yZS9iaW5kaW5ncy9nb2JqZWN0L0dPYmplY3RFdmVu
dExpc3RlbmVyLmggXAogCVdlYkNvcmUvYmluZGluZ3MvZ29iamVjdC9XZWJLaXRET01CaW5kaW5n
LmNwcCBcCmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL2dvYmplY3QvRE9NT2JqZWN0Q2Fj
aGUuY3BwIGIvV2ViQ29yZS9iaW5kaW5ncy9nb2JqZWN0L0RPTU9iamVjdENhY2hlLmNwcApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NWNlMGUxCi0tLSAvZGV2L251bGwKKysr
IGIvV2ViQ29yZS9iaW5kaW5ncy9nb2JqZWN0L0RPTU9iamVjdENhY2hlLmNwcApAQCAtMCwwICsx
LDEzMSBAQAorLyoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMTAgSWdhbGlhIFMuTC4KKyAqCisgKiAg
VGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2Vu
ZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChh
dCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBp
cyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1
dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5
IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig
bW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9m
IHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhbG9uZyB3aXRoIHRo
aXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5k
YXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEg
IDAyMTEwLTEzMDEgIFVTQQorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJE
T01PYmplY3RDYWNoZS5oIgorCisjaW5jbHVkZSAiRG9jdW1lbnQuaCIKKyNpbmNsdWRlICJGcmFt
ZVZpZXcuaCIKKyNpbmNsdWRlICJIb3N0V2luZG93LmgiCisjaW5jbHVkZSAiTm9kZS5oIgorI2lu
Y2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCit0eXBlZGVmIHN0
cnVjdCB7CisgICAgR09iamVjdCogb2JqZWN0OworICAgIFBsYXRmb3JtUGFnZUNsaWVudCB2aWV3
OworfSBET01PYmplY3RDYWNoZURhdGE7CisKK3R5cGVkZWYgSGFzaE1hcDx2b2lkKiwgRE9NT2Jq
ZWN0Q2FjaGVEYXRhKj4gRE9NT2JqZWN0TWFwOworCitzdGF0aWMgRE9NT2JqZWN0TWFwJiBkb21P
YmplY3RzKCkKK3sKKyAgICBzdGF0aWMgRE9NT2JqZWN0TWFwIHN0YXRpY0RPTU9iamVjdHM7Cisg
ICAgcmV0dXJuIHN0YXRpY0RPTU9iamVjdHM7Cit9CisKK3N0YXRpYyBQbGF0Zm9ybVBhZ2VDbGll
bnQgZ2V0Vmlld0Zyb21IYW5kbGUoZ3BvaW50ZXIgb2JqZWN0SGFuZGxlKQoreworICAgIFdlYkNv
cmU6Ok5vZGUqIG5vZGUgPSBzdGF0aWNfY2FzdDxXZWJDb3JlOjpOb2RlKj4ob2JqZWN0SGFuZGxl
KTsKKyAgICBpZiAoIW5vZGUtPmluRG9jdW1lbnQoKSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAg
V2ViQ29yZTo6RG9jdW1lbnQqIGRvY3VtZW50ID0gbm9kZS0+ZG9jdW1lbnQoKTsKKyAgICBpZiAo
IWRvY3VtZW50KQorICAgICAgICByZXR1cm4gMDsKKyAgICBXZWJDb3JlOjpGcmFtZVZpZXcqIGZy
YW1lVmlldyA9IGRvY3VtZW50LT52aWV3KCk7CisgICAgaWYgKCFmcmFtZVZpZXcpCisgICAgICAg
IHJldHVybiAwOworICAgIFdlYkNvcmU6Okhvc3RXaW5kb3cqIGhvc3RXaW5kb3cgPSBmcmFtZVZp
ZXctPmhvc3RXaW5kb3coKTsKKyAgICBpZiAoIWhvc3RXaW5kb3cpCisgICAgICAgIHJldHVybiAw
OworICAgIHJldHVybiBob3N0V2luZG93LT5wbGF0Zm9ybVBhZ2VDbGllbnQoKTsKK30KKwordm9p
ZCBET01PYmplY3RDYWNoZTo6Zm9yZ2V0KHZvaWQqIG9iamVjdEhhbmRsZSkKK3sKKyAgICBET01P
YmplY3RDYWNoZURhdGEqIGNhY2hlRGF0YSA9IGRvbU9iamVjdHMoKS5nZXQob2JqZWN0SGFuZGxl
KTsKKyAgICBBU1NFUlQoY2FjaGVEYXRhKTsKKyAgICBnX3NsaWNlX2ZyZWUoRE9NT2JqZWN0Q2Fj
aGVEYXRhLCBjYWNoZURhdGEpOworICAgIGRvbU9iamVjdHMoKS50YWtlKG9iamVjdEhhbmRsZSk7
Cit9CisKK3ZvaWQgRE9NT2JqZWN0Q2FjaGU6OmNsZWFyQnlWaWV3KGdwb2ludGVyIHZpZXcpCit7
CisgICAgVmVjdG9yPEdPYmplY3QqPiB0b1VucmVmOworCisgICAgLy8gVW5yZWZpbmcgdGhlIG9i
amVjdHMgcmVtb3ZlcyB0aGVtIGZyb20gdGhlIGNhY2hlIGluIHRoZWlyCisgICAgLy8gZmluYWxp
emUgbWV0aG9kLCBzbyBqdXN0IHNhdmUgdGhlbSB0byBkbyB0aGF0IHdoaWxlIHdlIGFyZSBub3QK
KyAgICAvLyBpdGVyYXRpbmcgdGhlIGNhY2hlIGl0c2VsZi4KKyAgICBET01PYmplY3RNYXA6Oml0
ZXJhdG9yIGVuZCA9IGRvbU9iamVjdHMoKS5lbmQoKTsKKyAgICBmb3IgKERPTU9iamVjdE1hcDo6
aXRlcmF0b3IgaXRlciA9IGRvbU9iamVjdHMoKS5iZWdpbigpOyBpdGVyICE9IGVuZDsgKytpdGVy
KSB7CisgICAgICAgIERPTU9iamVjdENhY2hlRGF0YSogZGF0YSA9IHN0YXRpY19jYXN0PERPTU9i
amVjdENhY2hlRGF0YSo+KGl0ZXItPnNlY29uZCk7CisgICAgICAgIGlmIChkYXRhICYmICghdmll
dyB8fCBkYXRhLT52aWV3ID09IHZpZXcpKQorICAgICAgICAgICAgdG9VbnJlZi5hcHBlbmQoZGF0
YS0+b2JqZWN0KTsKKyAgICB9CisKKyAgICBWZWN0b3I8R09iamVjdCo+OjppdGVyYXRvciBsYXN0
ID0gdG9VbnJlZi5lbmQoKTsKKyAgICBmb3IgKFZlY3RvcjxHT2JqZWN0Kj46Oml0ZXJhdG9yIGl0
ID0gdG9VbnJlZi5iZWdpbigpOyBpdCAhPSBsYXN0OyArK2l0KQorICAgICAgICBnX29iamVjdF91
bnJlZigqaXQpOworfQorCitET01PYmplY3RDYWNoZTo6fkRPTU9iamVjdENhY2hlKCkKK3sKKyAg
ICBjbGVhckJ5VmlldygpOworfQorCitncG9pbnRlciBET01PYmplY3RDYWNoZTo6Z2V0KHZvaWQq
IG9iamVjdEhhbmRsZSkKK3sKKyAgICBET01PYmplY3RDYWNoZURhdGEqIGRhdGEgPSBkb21PYmpl
Y3RzKCkuZ2V0KG9iamVjdEhhbmRsZSk7CisgICAgaWYgKCFkYXRhKQorICAgICAgICByZXR1cm4g
MDsKKworICAgIC8vIFdlIHdhbnQgdG8gYWRkIG9uZSByZWYgZWFjaCB0aW1lIGEgd3JhcHBlciBp
cyByZXR1cm5lZCwgc28gdGhhdAorICAgIC8vIHRoZSB1c2VyIGNhbiBtYW51YWxseSB1bnJlZiB0
aGVtIGlmIGhlIGNob29zZXMgdG8uCisgICAgQVNTRVJUKGRhdGEtPm9iamVjdCk7CisgICAgcmV0
dXJuIGdfb2JqZWN0X3JlZihkYXRhLT5vYmplY3QpOworfQorCitncG9pbnRlciBET01PYmplY3RD
YWNoZTo6cHV0KHZvaWQqIG9iamVjdEhhbmRsZSwgZ3BvaW50ZXIgd3JhcHBlcikKK3sKKyAgICBp
ZiAoZG9tT2JqZWN0cygpLmdldChvYmplY3RIYW5kbGUpKQorICAgICAgICByZXR1cm4gd3JhcHBl
cjsKKworICAgIERPTU9iamVjdENhY2hlRGF0YSogZGF0YSA9IGdfc2xpY2VfbmV3KERPTU9iamVj
dENhY2hlRGF0YSk7CisgICAgZGF0YS0+b2JqZWN0ID0gc3RhdGljX2Nhc3Q8R09iamVjdCo+KHdy
YXBwZXIpOworICAgIGRhdGEtPnZpZXcgPSAwOworCisgICAgZG9tT2JqZWN0cygpLnNldChvYmpl
Y3RIYW5kbGUsIGRhdGEpOworICAgIHJldHVybiB3cmFwcGVyOworfQorCitncG9pbnRlciBET01P
YmplY3RDYWNoZTo6cHV0KFdlYkNvcmU6Ok5vZGUqIG9iamVjdEhhbmRsZSwgZ3BvaW50ZXIgd3Jh
cHBlcikKK3sKKyAgICBwdXQoc3RhdGljX2Nhc3Q8dm9pZCo+KG9iamVjdEhhbmRsZSksIHdyYXBw
ZXIpOworCisgICAgRE9NT2JqZWN0Q2FjaGVEYXRhKiBkYXRhID0gZG9tT2JqZWN0cygpLmdldChv
YmplY3RIYW5kbGUpOworICAgIEFTU0VSVChkYXRhKTsKKworICAgIFBsYXRmb3JtUGFnZUNsaWVu
dCB2aWV3ID0gZ2V0Vmlld0Zyb21IYW5kbGUob2JqZWN0SGFuZGxlKTsKKyAgICBpZiAodmlldykK
KyAgICAgICAgZGF0YS0+dmlldyA9IHZpZXc7CisKKyAgICByZXR1cm4gd3JhcHBlcjsKK30KKwor
fQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy9nb2JqZWN0L0RPTU9iamVjdENhY2hlLmgg
Yi9XZWJDb3JlL2JpbmRpbmdzL2dvYmplY3QvRE9NT2JqZWN0Q2FjaGUuaApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwLi4xODg1OWRmCi0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29y
ZS9iaW5kaW5ncy9nb2JqZWN0L0RPTU9iamVjdENhY2hlLmgKQEAgLTAsMCArMSw0MCBAQAorLyoK
KyAqICBDb3B5cmlnaHQgKEMpIDIwMTAgSWdhbGlhIFMuTC4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMK
KyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
OyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlv
bikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRl
ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFO
WSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVS
Q0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRo
ZSBHTlUKKyAqICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxz
LgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVz
c2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsg
aWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4s
IDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEg
IFVTQQorICovCisKKyNpZm5kZWYgRE9NT2JqZWN0Q2FjaGVfaAorI2RlZmluZSBET01PYmplY3RD
YWNoZV9oCisKKyNpbmNsdWRlIDxnbGliLW9iamVjdC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7
CitjbGFzcyBOb2RlOworfTsKKworbmFtZXNwYWNlIFdlYktpdCB7CitjbGFzcyBET01PYmplY3RD
YWNoZSB7CitwdWJsaWM6CisgICAgc3RhdGljIGdwb2ludGVyIGdldCh2b2lkKiBvYmplY3RIYW5k
bGUpOworICAgIHN0YXRpYyBncG9pbnRlciBwdXQodm9pZCogb2JqZWN0SGFuZGxlLCBncG9pbnRl
ciB3cmFwcGVyKTsKKyAgICBzdGF0aWMgZ3BvaW50ZXIgcHV0KFdlYkNvcmU6Ok5vZGUqIG9iamVj
dEhhbmRsZSwgZ3BvaW50ZXIgd3JhcHBlcik7CisgICAgc3RhdGljIHZvaWQgY2xlYXJCeVZpZXco
Z3BvaW50ZXIgdmlldyA9IDApOworICAgIHN0YXRpYyB2b2lkIGZvcmdldCh2b2lkKiBvYmplY3RI
YW5kbGUpOworICAgIH5ET01PYmplY3RDYWNoZSgpOworfTsKK30gLy8gbmFtZXNwYWNlIFdlYktp
dAorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3MvZ29iamVjdC9XZWJLaXRE
T01CaW5kaW5nLmNwcCBiL1dlYkNvcmUvYmluZGluZ3MvZ29iamVjdC9XZWJLaXRET01CaW5kaW5n
LmNwcAppbmRleCAzYzA2NmUzLi5hOGE4OTU2IDEwMDY0NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdz
L2dvYmplY3QvV2ViS2l0RE9NQmluZGluZy5jcHAKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy9nb2Jq
ZWN0L1dlYktpdERPTUJpbmRpbmcuY3BwCkBAIC0yNCw2ICsyNCw3IEBACiAjaW5jbHVkZSAiY29u
ZmlnLmgiCiAjaW5jbHVkZSAiV2ViS2l0RE9NQmluZGluZy5oIgogCisjaW5jbHVkZSAiRE9NT2Jq
ZWN0Q2FjaGUuaCIKICNpbmNsdWRlICJFbGVtZW50LmgiCiAjaW5jbHVkZSAiRXZlbnQuaCIKICNp
bmNsdWRlICJFdmVudEV4Y2VwdGlvbi5oIgpAQCAtNDQsMzIgKzQ1LDYgQEAgbmFtZXNwYWNlIFdl
YktpdCB7CiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3Jl
OjpIVE1MTmFtZXM7CiAKLS8vIERPTU9iamVjdENhY2hlCi0KLXR5cGVkZWYgSGFzaE1hcDx2b2lk
KiwgZ3BvaW50ZXI+IERPTU9iamVjdE1hcDsKLQotc3RhdGljIERPTU9iamVjdE1hcCYgZG9tT2Jq
ZWN0cygpCi17Ci0gICAgc3RhdGljIERPTU9iamVjdE1hcCBzdGF0aWNET01PYmplY3RzOwotICAg
IHJldHVybiBzdGF0aWNET01PYmplY3RzOwotfQotCi1ncG9pbnRlciBET01PYmplY3RDYWNoZTo6
Z2V0KHZvaWQqIG9iamVjdEhhbmRsZSkKLXsKLSAgICByZXR1cm4gZG9tT2JqZWN0cygpLmdldChv
YmplY3RIYW5kbGUpOwotfQotCi1ncG9pbnRlciBET01PYmplY3RDYWNoZTo6cHV0KHZvaWQqIG9i
amVjdEhhbmRsZSwgZ3BvaW50ZXIgd3JhcHBlcikKLXsKLSAgICBkb21PYmplY3RzKCkuc2V0KG9i
amVjdEhhbmRsZSwgd3JhcHBlcik7Ci0gICAgcmV0dXJuIHdyYXBwZXI7Ci19Ci0KLXZvaWQgRE9N
T2JqZWN0Q2FjaGU6OmZvcmdldCh2b2lkKiBvYmplY3RIYW5kbGUpCi17Ci0gICAgZG9tT2JqZWN0
cygpLnRha2Uob2JqZWN0SGFuZGxlKTsKLX0KLQogLy8ga2l0IG1ldGhvZHMKIAogc3RhdGljIGdw
b2ludGVyIGNyZWF0ZVdyYXBwZXIoTm9kZSogbm9kZSkKZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmlu
ZGluZ3MvZ29iamVjdC9XZWJLaXRET01CaW5kaW5nLmggYi9XZWJDb3JlL2JpbmRpbmdzL2dvYmpl
Y3QvV2ViS2l0RE9NQmluZGluZy5oCmluZGV4IDIyNDhmNzguLjQ3NTk0YTYgMTAwNjQ0Ci0tLSBh
L1dlYkNvcmUvYmluZGluZ3MvZ29iamVjdC9XZWJLaXRET01CaW5kaW5nLmgKKysrIGIvV2ViQ29y
ZS9iaW5kaW5ncy9nb2JqZWN0L1dlYktpdERPTUJpbmRpbmcuaApAQCAtMzgsMTMgKzM4LDYgQEAg
Z3BvaW50ZXIga2l0KFdlYkNvcmU6Ok5vZGUqIG5vZGUpOwogZ3BvaW50ZXIga2l0KFdlYkNvcmU6
OkVsZW1lbnQqIGVsZW1lbnQpOwogZ3BvaW50ZXIga2l0KFdlYkNvcmU6OkV2ZW50KiBldmVudCk7
CiBncG9pbnRlciBraXQoV2ViQ29yZTo6RXZlbnRUYXJnZXQqIHRhcmdldCk7Ci0KLWNsYXNzIERP
TU9iamVjdENhY2hlIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgZ3BvaW50ZXIgZ2V0KHZvaWQqIG9i
amVjdEhhbmRsZSk7Ci0gICAgc3RhdGljIGdwb2ludGVyIHB1dCh2b2lkKiBvYmplY3RIYW5kbGUs
IGdwb2ludGVyIHdyYXBwZXIpOwotICAgIHN0YXRpYyB2b2lkIGZvcmdldCh2b2lkKiBvYmplY3RI
YW5kbGUpOwotfTsKIH0gLy8gbmFtZXNwYWNlIFdlYktpdAogCiAjZW5kaWYgLy8gV2ViS2l0RE9N
QmluZGluZ19oCmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVy
YXRvckdPYmplY3QucG0gYi9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckdP
YmplY3QucG0KaW5kZXggNmM0NTBhZC4uY2EyYmQ5YyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JHT2JqZWN0LnBtCisrKyBiL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yR09iamVjdC5wbQpAQCAtMTMyMiw2ICsxMzIyLDcgQEAg
c3ViIEdlbmVyYXRlIHsKIAogICAgICRpbXBsSW5jbHVkZXN7IndlYmtpdG1hcnNoYWwuaCJ9ID0g
MTsKICAgICAkaW1wbEluY2x1ZGVzeyJ3ZWJraXRwcml2YXRlLmgifSA9IDE7CisgICAgJGltcGxJ
bmNsdWRlc3siRE9NT2JqZWN0Q2FjaGUuaCJ9ID0gMTsKICAgICAkaW1wbEluY2x1ZGVzeyJXZWJL
aXRET01CaW5kaW5nLmgifSA9IDE7CiAgICAgJGltcGxJbmNsdWRlc3siZ29iamVjdC9Db252ZXJ0
VG9VVEY4U3RyaW5nLmgifSA9IDE7CiAgICAgJGltcGxJbmNsdWRlc3sid2Via2l0LyRjbGFzc05h
bWUuaCJ9ID0gMTsKZGlmZiAtLWdpdCBhL1dlYktpdC9ndGsvQ2hhbmdlTG9nIGIvV2ViS2l0L2d0
ay9DaGFuZ2VMb2cKaW5kZXggYmMwMGI4NS4uMjU1MGQyMyAxMDA2NDQKLS0tIGEvV2ViS2l0L2d0
ay9DaGFuZ2VMb2cKKysrIGIvV2ViS2l0L2d0ay9DaGFuZ2VMb2cKQEAgLTEsNSArMSwzMyBAQAog
MjAxMC0xMS0xOCAgWGFuIExvcGV6ICA8eGxvcGV6QGlnYWxpYS5jb20+CiAKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgW0dUS10gTWVtb3J5IG1hbmFnYW1l
bnQgZm9yIERPTSBHT2JqZWN0IHdyYXBwZXJzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD00MDMwMgorCisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvRnJh
bWVMb2FkZXJDbGllbnRHdGsuY3BwOgorICAgICAgICAoV2ViS2l0OjpGcmFtZUxvYWRlckNsaWVu
dDo6c2V0TWFpbkZyYW1lRG9jdW1lbnRSZWFkeSk6IGNsZWFuIGFsbAorICAgICAgICB0aGUgRE9N
IG9iamVjdHMgYXR0YWNoZWQgdG8gdGhpcyB2aWV3IHdoZW4gd2UgdHJhbnNpdGlvbiB0byBhIG5l
dworICAgICAgICBkb2N1bWVudC4KKyAgICAgICAgKiB0ZXN0cy90ZXN0ZG9tZG9jdW1lbnQuYzoK
KyAgICAgICAgKGRvbV9kb2N1bWVudF9maXh0dXJlX3RlYXJkb3duKTogb25seSBkZXN0cm95IHRo
ZSB2aWV3IGlmIHdlIGhhdmUKKyAgICAgICAgb25lLCBzaW5jZSBzb21lIHRlc3RzIHdpbGwgbm93
IGRlc3Ryb3kgaXQgdGhlbXNlbHZlcy4KKyAgICAgICAgKHRlc3RfZG9tX2RvY3VtZW50X2dldF9l
bGVtZW50c19ieV90YWdfbmFtZSk6IG1hbnVhbGx5IHVucmVmIG5vZGUgbGlzdHMuCisgICAgICAg
ICh0ZXN0X2RvbV9kb2N1bWVudF9nZXRfZWxlbWVudHNfYnlfY2xhc3NfbmFtZSk6IGRpdHRvLgor
ICAgICAgICAodGVzdF9kb21fZG9jdW1lbnRfZ2V0X2xpbmtzKTogZGl0dG8uCisgICAgICAgICh3
ZWFrX25vdGlmeSk6CisgICAgICAgICh0ZXN0X2RvbV9kb2N1bWVudF9nYXJiYWdlX2NvbGxlY3Rp
b24pOiB0ZXN0IGFsbCBwb3NzaWJsZQorICAgICAgICBzY2VuYXJpb3Mgb2YgRE9NIG9iamVjdCdz
IG1lbW9yeSBtYW5hZ2VtZW50LgorICAgICAgICAobWFpbik6IGFkZCBuZXcgdGVzdC4KKyAgICAg
ICAgKiB0ZXN0cy90ZXN0ZG9tbm9kZS5jOgorICAgICAgICAodGVzdF9kb21fbm9kZV9oaWVyYXJj
aHlfbmF2aWdhdGlvbik6IG1hbnVhbGx5IHVucmVmIG5vZGUgbGlzdHMuCisgICAgICAgICh0ZXN0
X2RvbV9ub2RlX2luc2VydGlvbik6IGRpdHRvLgorICAgICAgICAqIHdlYmtpdC93ZWJraXR3ZWJ2
aWV3LmNwcDoKKyAgICAgICAgKHdlYmtpdF93ZWJfdmlld19kaXNwb3NlKTogY2xlYW4gYWxsIHRo
ZSBET00gb2JqZWN0cyBhdHRhY2hlZCB0bworICAgICAgICB0aGlzIHZpZXcuCisKKzIwMTAtMTEt
MTggIFhhbiBMb3BleiAgPHhsb3BlekBpZ2FsaWEuY29tPgorCiAgICAgICAgIFJldmlld2VkIGJ5
IE1hcnRpbiBSb2JpbnNvbi4KIAogICAgICAgICBGaXggaW50cm9zcGVjdGlvbiBidWlsZCwgd2Ug
d2VyZSBtaXNzaW5nIGEgLUkgZmxhZy4KZGlmZiAtLWdpdCBhL1dlYktpdC9ndGsvV2ViQ29yZVN1
cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRHdGsuY3BwIGIvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9y
dC9GcmFtZUxvYWRlckNsaWVudEd0ay5jcHAKaW5kZXggYjIzYmQ3MC4uNTY0YTQzNSAxMDA2NDQK
LS0tIGEvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudEd0ay5jcHAK
KysrIGIvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudEd0ay5jcHAK
QEAgLTI4LDYgKzI4LDcgQEAKICNpbmNsdWRlICJBcmNoaXZlUmVzb3VyY2UuaCIKICNpbmNsdWRl
ICJDYWNoZWRGcmFtZS5oIgogI2luY2x1ZGUgIkNvbG9yLmgiCisjaW5jbHVkZSAiRE9NT2JqZWN0
Q2FjaGUuaCIKICNpbmNsdWRlICJEb2N1bWVudExvYWRlci5oIgogI2luY2x1ZGUgIkRvY3VtZW50
TG9hZGVyR3RrLmgiCiAjaW5jbHVkZSAiRm9ybVN0YXRlLmgiCkBAIC02OTYsOSArNjk3LDEwIEBA
IHZvaWQgRnJhbWVMb2FkZXJDbGllbnQ6OnJlZ2lzdGVyRm9ySWNvbk5vdGlmaWNhdGlvbihib29s
IHNob3VsZFJlZ2lzdGVyKQogICAgIG5vdEltcGxlbWVudGVkKCk7CiB9CiAKLXZvaWQgRnJhbWVM
b2FkZXJDbGllbnQ6OnNldE1haW5GcmFtZURvY3VtZW50UmVhZHkoYm9vbCkKK3ZvaWQgRnJhbWVM
b2FkZXJDbGllbnQ6OnNldE1haW5GcmFtZURvY3VtZW50UmVhZHkoYm9vbCByZWFkeSkKIHsKLSAg
ICAvLyB0aGlzIGlzIG9ubHkgaW50ZXJlc3Rpbmcgb25jZSB3ZSBwcm92aWRlIGFuIGV4dGVybmFs
IEFQSSBmb3IgdGhlIERPTQorICAgIGlmICghcmVhZHkpCisgICAgICAgIERPTU9iamVjdENhY2hl
OjpjbGVhckJ5VmlldyhnZXRWaWV3RnJvbUZyYW1lKG1fZnJhbWUpKTsKIH0KIAogYm9vbCBGcmFt
ZUxvYWRlckNsaWVudDo6aGFzV2ViVmlldygpIGNvbnN0CmRpZmYgLS1naXQgYS9XZWJLaXQvZ3Rr
L3Rlc3RzL3Rlc3Rkb21kb2N1bWVudC5jIGIvV2ViS2l0L2d0ay90ZXN0cy90ZXN0ZG9tZG9jdW1l
bnQuYwppbmRleCBlYzJmNTc5Li4wMzc0M2I1IDEwMDY0NAotLS0gYS9XZWJLaXQvZ3RrL3Rlc3Rz
L3Rlc3Rkb21kb2N1bWVudC5jCisrKyBiL1dlYktpdC9ndGsvdGVzdHMvdGVzdGRvbWRvY3VtZW50
LmMKQEAgLTMwLDcgKzMwLDcgQEAKICNkZWZpbmUgSFRNTF9ET0NVTUVOVF9FTEVNRU5UUyAiPGh0
bWw+PGJvZHk+PHVsPjxsaT4xPC9saT48bGk+MjwvbGk+PGxpPjM8L2xpPjwvdWw+PC9ib2R5Pjwv
aHRtbD4iCiAjZGVmaW5lIEhUTUxfRE9DVU1FTlRfRUxFTUVOVFNfQ0xBU1MgIjxodG1sPjxib2R5
PjxkaXYgY2xhc3M9XCJ0ZXN0XCI+PC9kaXY+PGRpdiBjbGFzcz1cInN0cmFuZ2VcIj48L2Rpdj48
ZGl2IGNsYXNzPVwidGVzdFwiPjwvZGl2PjwvYm9keT48L2h0bWw+IgogI2RlZmluZSBIVE1MX0RP
Q1VNRU5UX0VMRU1FTlRTX0lEICI8aHRtbD48Ym9keT48ZGl2IGlkPVwidGVzdG9rXCI+PC9kaXY+
PGRpdiBpZD1cInRlc3RiYWRcIj5maXJzdDwvZGl2PjxkaXYgaWQ9XCJ0ZXN0YmFkXCI+c2Vjb25k
PC9kaXY+PC9ib2R5PjwvaHRtbD4iCi0jZGVmaW5lIEhUTUxfRE9DVU1FTlRfTElOS1MgIjxodG1s
Pjxib2R5PjxhIGhyZWY9XCJhYm91dDpibGFua1wiPmJsYW5rPC9hPjxhIGhyZWY9XCJodHRwOi8v
d3d3Lmdvb2dsZS5jb21cIj5nb29nbGU8L2E+PGEgaHJlZj1cImh0dHA6Ly93d3cud2Via2l0Lm9y
Z1wiPndlYmtpdDwvYT48L2JvZHk+PC9odG1sPiIKKyNkZWZpbmUgSFRNTF9ET0NVTUVOVF9MSU5L
UyAiPGh0bWw+PGhlYWQ+PHRpdGxlPlRpdGxlPC90aXRsZT48L2hlYWQ+PGJvZHk+PGEgaHJlZj1c
ImFib3V0OmJsYW5rXCI+Ymxhbms8L2E+PGEgaHJlZj1cImh0dHA6Ly93d3cuZ29vZ2xlLmNvbVwi
Pmdvb2dsZTwvYT48YSBocmVmPVwiaHR0cDovL3d3dy53ZWJraXQub3JnXCI+d2Via2l0PC9hPjwv
Ym9keT48L2h0bWw+IgogCiB0eXBlZGVmIHN0cnVjdCB7CiAgICAgR3RrV2lkZ2V0KiB3ZWJWaWV3
OwpAQCAtNjAsNyArNjAsOCBAQCBzdGF0aWMgdm9pZCBkb21fZG9jdW1lbnRfZml4dHVyZV9zZXR1
cChEb21Eb2N1bWVudEZpeHR1cmUqIGZpeHR1cmUsIGdjb25zdHBvaW50ZQogCiBzdGF0aWMgdm9p
ZCBkb21fZG9jdW1lbnRfZml4dHVyZV90ZWFyZG93bihEb21Eb2N1bWVudEZpeHR1cmUqIGZpeHR1
cmUsIGdjb25zdHBvaW50ZXIgZGF0YSkKIHsKLSAgICBnX29iamVjdF91bnJlZihmaXh0dXJlLT53
ZWJWaWV3KTsKKyAgICBpZiAoZml4dHVyZS0+d2ViVmlldykKKyAgICAgICAgZ19vYmplY3RfdW5y
ZWYoZml4dHVyZS0+d2ViVmlldyk7CiAgICAgZ19tYWluX2xvb3BfdW5yZWYoZml4dHVyZS0+bG9v
cCk7CiB9CiAKQEAgLTEwNyw2ICsxMDgsOCBAQCBzdGF0aWMgdm9pZCB0ZXN0X2RvbV9kb2N1bWVu
dF9nZXRfZWxlbWVudHNfYnlfdGFnX25hbWUoRG9tRG9jdW1lbnRGaXh0dXJlKiBmaXh0dQogICAg
ICAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X2RvbV9odG1sX2VsZW1lbnRfZ2V0X2lubmVyX3Rl
eHQoaHRtbEVsZW1lbnQpLCA9PSwgbik7CiAgICAgICAgIGdfZnJlZShuKTsKICAgICB9CisKKyAg
ICBnX29iamVjdF91bnJlZihsaXN0KTsKIH0KIAogc3RhdGljIHZvaWQgdGVzdF9kb21fZG9jdW1l
bnRfZ2V0X2VsZW1lbnRzX2J5X2NsYXNzX25hbWUoRG9tRG9jdW1lbnRGaXh0dXJlKiBmaXh0dXJl
LCBnY29uc3Rwb2ludGVyIGRhdGEpCkBAIC0xMzAsNiArMTMzLDggQEAgc3RhdGljIHZvaWQgdGVz
dF9kb21fZG9jdW1lbnRfZ2V0X2VsZW1lbnRzX2J5X2NsYXNzX25hbWUoRG9tRG9jdW1lbnRGaXh0
dXJlKiBmaXgKICAgICAgICAgZ19hc3NlcnQoZWxlbWVudCk7CiAgICAgICAgIGdfYXNzZXJ0X2Nt
cHN0cih3ZWJraXRfZG9tX2VsZW1lbnRfZ2V0X3RhZ19uYW1lKGVsZW1lbnQpLCA9PSwgIkRJViIp
OwogICAgIH0KKworICAgIGdfb2JqZWN0X3VucmVmKGxpc3QpOwogfQogCiBzdGF0aWMgdm9pZCB0
ZXN0X2RvbV9kb2N1bWVudF9nZXRfZWxlbWVudF9ieV9pZChEb21Eb2N1bWVudEZpeHR1cmUqIGZp
eHR1cmUsIGdjb25zdHBvaW50ZXIgZGF0YSkKQEAgLTE3OCw2ICsxODMsOTQgQEAgc3RhdGljIHZv
aWQgdGVzdF9kb21fZG9jdW1lbnRfZ2V0X2xpbmtzKERvbURvY3VtZW50Rml4dHVyZSogZml4dHVy
ZSwgZ2NvbnN0cG9pbnQKICAgICAgICAgV2ViS2l0RE9NSFRNTEFuY2hvckVsZW1lbnQgKmFuY2hv
ciA9IChXZWJLaXRET01IVE1MQW5jaG9yRWxlbWVudCopZWxlbWVudDsKICAgICAgICAgZ19hc3Nl
cnRfY21wc3RyKHdlYmtpdF9kb21faHRtbF9hbmNob3JfZWxlbWVudF9nZXRfaHJlZihhbmNob3Ip
LCA9PSwgdXJpc1tpXSk7CiAgICAgfQorICAgIGdfb2JqZWN0X3VucmVmKGNvbGxlY3Rpb24pOwor
fQorCitzdGF0aWMgdm9pZCB3ZWFrX25vdGlmeShncG9pbnRlciBkYXRhLCBHT2JqZWN0KiB6b21i
aWUpCit7CisgICAgZ3VpbnQqIGNvdW50ID0gKGd1aW50KilkYXRhOworICAgICgqY291bnQpKys7
Cit9CisKK3N0YXRpYyB2b2lkIHRlc3RfZG9tX2RvY3VtZW50X2dhcmJhZ2VfY29sbGVjdGlvbihE
b21Eb2N1bWVudEZpeHR1cmUqIGZpeHR1cmUsIGdjb25zdHBvaW50ZXIgZGF0YSkKK3sKKyAgICBn
dWludCBjb3VudCA9IDA7CisgICAgZ19hc3NlcnQoZml4dHVyZSk7CisgICAgV2ViS2l0V2ViVmll
dyogdmlldyA9IChXZWJLaXRXZWJWaWV3KilmaXh0dXJlLT53ZWJWaWV3OworICAgIGdfYXNzZXJ0
KHZpZXcpOworICAgIFdlYktpdERPTURvY3VtZW50KiBkb2N1bWVudCA9IHdlYmtpdF93ZWJfdmll
d19nZXRfZG9tX2RvY3VtZW50KHZpZXcpOworICAgIGdfYXNzZXJ0KGRvY3VtZW50KTsKKyAgICBn
X29iamVjdF93ZWFrX3JlZihHX09CSkVDVChkb2N1bWVudCksIChHV2Vha05vdGlmeSl3ZWFrX25v
dGlmeSwgJmNvdW50KTsKKyAgICBXZWJLaXRET01IVE1MSGVhZEVsZW1lbnQqIGhlYWQgPSB3ZWJr
aXRfZG9tX2RvY3VtZW50X2dldF9oZWFkKGRvY3VtZW50KTsKKyAgICBnX2Fzc2VydChoZWFkKTsK
KyAgICBnX29iamVjdF93ZWFrX3JlZihHX09CSkVDVChoZWFkKSwgKEdXZWFrTm90aWZ5KXdlYWtf
bm90aWZ5LCAmY291bnQpOworICAgIFdlYktpdERPTUhUTUxFbGVtZW50KiBib2R5ID0gd2Via2l0
X2RvbV9kb2N1bWVudF9nZXRfYm9keShkb2N1bWVudCk7CisgICAgZ19hc3NlcnQoYm9keSk7Cisg
ICAgZ19vYmplY3Rfd2Vha19yZWYoR19PQkpFQ1QoYm9keSksIChHV2Vha05vdGlmeSl3ZWFrX25v
dGlmeSwgJmNvdW50KTsKKyAgICBXZWJLaXRET01IVE1MQ29sbGVjdGlvbiAqY29sbGVjdGlvbiA9
IHdlYmtpdF9kb21fZG9jdW1lbnRfZ2V0X2xpbmtzKGRvY3VtZW50KTsKKyAgICBnX2Fzc2VydChj
b2xsZWN0aW9uKTsKKyAgICBnX29iamVjdF93ZWFrX3JlZihHX09CSkVDVChjb2xsZWN0aW9uKSwg
KEdXZWFrTm90aWZ5KXdlYWtfbm90aWZ5LCAmY291bnQpOworCisgICAgd2Via2l0X3dlYl92aWV3
X2xvYWRfc3RyaW5nKFdFQktJVF9XRUJfVklFVyh2aWV3KSwgSFRNTF9ET0NVTUVOVF9MSU5LUywg
TlVMTCwgTlVMTCwgTlVMTCk7CisKKyAgICB3aGlsZSAoZ19tYWluX2NvbnRleHRfcGVuZGluZyhO
VUxMKSkKKyAgICAgICAgZ19tYWluX2NvbnRleHRfaXRlcmF0aW9uKE5VTEwsIEZBTFNFKTsKKwor
ICAgIGdfYXNzZXJ0X2NtcHVpbnQoY291bnQsID09LCAzKTsKKworICAgIGdfb2JqZWN0X3VucmVm
KGNvbGxlY3Rpb24pOworICAgIGdfYXNzZXJ0X2NtcHVpbnQoY291bnQsID09LCA0KTsKKworICAg
IGNvdW50ID0gMDsKKworICAgIGRvY3VtZW50ID0gd2Via2l0X3dlYl92aWV3X2dldF9kb21fZG9j
dW1lbnQodmlldyk7CisgICAgZ19hc3NlcnQoZG9jdW1lbnQpOworICAgIGdfb2JqZWN0X3dlYWtf
cmVmKEdfT0JKRUNUKGRvY3VtZW50KSwgKEdXZWFrTm90aWZ5KXdlYWtfbm90aWZ5LCAmY291bnQp
OworICAgIGhlYWQgPSB3ZWJraXRfZG9tX2RvY3VtZW50X2dldF9oZWFkKGRvY3VtZW50KTsKKyAg
ICBnX2Fzc2VydChoZWFkKTsKKyAgICBnX29iamVjdF93ZWFrX3JlZihHX09CSkVDVChoZWFkKSwg
KEdXZWFrTm90aWZ5KXdlYWtfbm90aWZ5LCAmY291bnQpOworICAgIGJvZHkgPSB3ZWJraXRfZG9t
X2RvY3VtZW50X2dldF9ib2R5KGRvY3VtZW50KTsKKyAgICBnX2Fzc2VydChib2R5KTsKKyAgICBn
X29iamVjdF93ZWFrX3JlZihHX09CSkVDVChib2R5KSwgKEdXZWFrTm90aWZ5KXdlYWtfbm90aWZ5
LCAmY291bnQpOworICAgIGNvbGxlY3Rpb24gPSB3ZWJraXRfZG9tX2RvY3VtZW50X2dldF9saW5r
cyhkb2N1bWVudCk7CisgICAgZ19hc3NlcnQoY29sbGVjdGlvbik7CisgICAgZ19vYmplY3Rfd2Vh
a19yZWYoR19PQkpFQ1QoY29sbGVjdGlvbiksIChHV2Vha05vdGlmeSl3ZWFrX25vdGlmeSwgJmNv
dW50KTsKKworICAgIGdfb2JqZWN0X3VucmVmKGRvY3VtZW50KTsKKyAgICBnX29iamVjdF91bnJl
ZihoZWFkKTsKKyAgICBnX29iamVjdF91bnJlZihib2R5KTsKKyAgICBnX29iamVjdF91bnJlZihj
b2xsZWN0aW9uKTsKKworICAgIGdfYXNzZXJ0X2NtcHVpbnQoY291bnQsID09LCA0KTsKKworICAg
IHdlYmtpdF93ZWJfdmlld19sb2FkX3N0cmluZyhXRUJLSVRfV0VCX1ZJRVcodmlldyksIEhUTUxf
RE9DVU1FTlRfTElOS1MsIE5VTEwsIE5VTEwsIE5VTEwpOworCisgICAgd2hpbGUgKGdfbWFpbl9j
b250ZXh0X3BlbmRpbmcoTlVMTCkpCisgICAgICAgIGdfbWFpbl9jb250ZXh0X2l0ZXJhdGlvbihO
VUxMLCBGQUxTRSk7CisKKyAgICBjb3VudCA9IDA7CisKKyAgICBkb2N1bWVudCA9IHdlYmtpdF93
ZWJfdmlld19nZXRfZG9tX2RvY3VtZW50KHZpZXcpOworICAgIGdfYXNzZXJ0KGRvY3VtZW50KTsK
KyAgICBnX29iamVjdF93ZWFrX3JlZihHX09CSkVDVChkb2N1bWVudCksIChHV2Vha05vdGlmeSl3
ZWFrX25vdGlmeSwgJmNvdW50KTsKKyAgICBoZWFkID0gd2Via2l0X2RvbV9kb2N1bWVudF9nZXRf
aGVhZChkb2N1bWVudCk7CisgICAgZ19hc3NlcnQoaGVhZCk7CisgICAgZ19vYmplY3Rfd2Vha19y
ZWYoR19PQkpFQ1QoaGVhZCksIChHV2Vha05vdGlmeSl3ZWFrX25vdGlmeSwgJmNvdW50KTsKKyAg
ICBib2R5ID0gd2Via2l0X2RvbV9kb2N1bWVudF9nZXRfYm9keShkb2N1bWVudCk7CisgICAgZ19h
c3NlcnQoYm9keSk7CisgICAgZ19vYmplY3Rfd2Vha19yZWYoR19PQkpFQ1QoYm9keSksIChHV2Vh
a05vdGlmeSl3ZWFrX25vdGlmeSwgJmNvdW50KTsKKyAgICBjb2xsZWN0aW9uID0gd2Via2l0X2Rv
bV9kb2N1bWVudF9nZXRfbGlua3MoZG9jdW1lbnQpOworICAgIGdfYXNzZXJ0KGNvbGxlY3Rpb24p
OworICAgIGdfb2JqZWN0X3dlYWtfcmVmKEdfT0JKRUNUKGNvbGxlY3Rpb24pLCAoR1dlYWtOb3Rp
Znkpd2Vha19ub3RpZnksICZjb3VudCk7CisKKyAgICBndGtfd2lkZ2V0X2Rlc3Ryb3koZml4dHVy
ZS0+d2ViVmlldyk7CisgICAgZml4dHVyZS0+d2ViVmlldyA9IE5VTEw7CisKKyAgICBnX2Fzc2Vy
dF9jbXB1aW50KGNvdW50LCA9PSwgMyk7CisKKyAgICBnX29iamVjdF91bnJlZihjb2xsZWN0aW9u
KTsKKworICAgIGdfYXNzZXJ0X2NtcHVpbnQoY291bnQsID09LCA0KTsKIH0KIAogaW50IG1haW4o
aW50IGFyZ2MsIGNoYXIqKiBhcmd2KQpAQCAtMjE5LDYgKzMxMiwxMiBAQCBpbnQgbWFpbihpbnQg
YXJnYywgY2hhcioqIGFyZ3YpCiAgICAgICAgICAgICAgICB0ZXN0X2RvbV9kb2N1bWVudF9nZXRf
bGlua3MsCiAgICAgICAgICAgICAgICBkb21fZG9jdW1lbnRfZml4dHVyZV90ZWFyZG93bik7CiAK
KyAgICBnX3Rlc3RfYWRkKCIvd2Via2l0L2RvbWRvY3VtZW50L3Rlc3RfZ2FyYmFnZV9jb2xsZWN0
aW9uIiwKKyAgICAgICAgICAgICAgIERvbURvY3VtZW50Rml4dHVyZSwgSFRNTF9ET0NVTUVOVF9M
SU5LUywKKyAgICAgICAgICAgICAgIGRvbV9kb2N1bWVudF9maXh0dXJlX3NldHVwLAorICAgICAg
ICAgICAgICAgdGVzdF9kb21fZG9jdW1lbnRfZ2FyYmFnZV9jb2xsZWN0aW9uLAorICAgICAgICAg
ICAgICAgZG9tX2RvY3VtZW50X2ZpeHR1cmVfdGVhcmRvd24pOworCiAgICAgcmV0dXJuIGdfdGVz
dF9ydW4oKTsKIH0KIApkaWZmIC0tZ2l0IGEvV2ViS2l0L2d0ay90ZXN0cy90ZXN0ZG9tbm9kZS5j
IGIvV2ViS2l0L2d0ay90ZXN0cy90ZXN0ZG9tbm9kZS5jCmluZGV4IGM2MDU2ZDYuLjdkNjI3MjAg
MTAwNjQ0Ci0tLSBhL1dlYktpdC9ndGsvdGVzdHMvdGVzdGRvbW5vZGUuYworKysgYi9XZWJLaXQv
Z3RrL3Rlc3RzL3Rlc3Rkb21ub2RlLmMKQEAgLTg0LDYgKzg0LDcgQEAgc3RhdGljIHZvaWQgdGVz
dF9kb21fbm9kZV9oaWVyYXJjaHlfbmF2aWdhdGlvbihEb21Ob2RlRml4dHVyZSogZml4dHVyZSwg
Z2NvbnN0cG8KICAgICBwdHIgPSB3ZWJraXRfZG9tX25vZGVfbGlzdF9pdGVtKGxpc3QsIDApOwog
ICAgIGdfYXNzZXJ0KHB0cik7CiAgICAgZ19hc3NlcnQoV0VCS0lUX0RPTV9JU19IVE1MX1RJVExF
X0VMRU1FTlQocHRyKSk7CisgICAgZ19vYmplY3RfdW5yZWYobGlzdCk7CiAKICAgICAvKiBCb2R5
LCBIZWFkIHNpYmxpbmcgKi8KICAgICBwdHIgPSB3ZWJraXRfZG9tX25vZGVfZ2V0X25leHRfc2li
bGluZyhXRUJLSVRfRE9NX05PREUoaGVhZCkpOwpAQCAtMTE4LDYgKzExOSw3IEBAIHN0YXRpYyB2
b2lkIHRlc3RfZG9tX25vZGVfaGllcmFyY2h5X25hdmlnYXRpb24oRG9tTm9kZUZpeHR1cmUqIGZp
eHR1cmUsIGdjb25zdHBvCiAgICAgICAgIC8qIE5vdGhpbmcgKi87CiAKICAgICBnX2Fzc2VydF9j
bXBpbnQoaSwgPT0sIDMpOworICAgIGdfb2JqZWN0X3VucmVmKGxpc3QpOwogfQogCiBzdGF0aWMg
dm9pZCB0ZXN0X2RvbV9ub2RlX2luc2VydGlvbihEb21Ob2RlRml4dHVyZSogZml4dHVyZSwgZ2Nv
bnN0cG9pbnRlciBkYXRhKQpAQCAtMTQ4LDYgKzE1MCw3IEBAIHN0YXRpYyB2b2lkIHRlc3RfZG9t
X25vZGVfaW5zZXJ0aW9uKERvbU5vZGVGaXh0dXJlKiBmaXh0dXJlLCBnY29uc3Rwb2ludGVyIGRh
dGEpCiAgICAgbm9kZSA9IHdlYmtpdF9kb21fbm9kZV9saXN0X2l0ZW0obGlzdCwgMCk7CiAgICAg
Z19hc3NlcnQobm9kZSk7CiAgICAgZ19hc3NlcnQod2Via2l0X2RvbV9ub2RlX2lzX3NhbWVfbm9k
ZShXRUJLSVRfRE9NX05PREUocCksIG5vZGUpKTsKKyAgICBnX29iamVjdF91bnJlZihsaXN0KTsK
IAogICAgIC8qIFJlcGxhY2UgdGhlIFAgdGFnIHdpdGggYSBESVYgdGFnICovCiAgICAgZGl2ID0g
d2Via2l0X2RvbV9kb2N1bWVudF9jcmVhdGVfZWxlbWVudChkb2N1bWVudCwgIkRJViIsIE5VTEwp
OwpAQCAtMTU4LDExICsxNjEsMTMgQEAgc3RhdGljIHZvaWQgdGVzdF9kb21fbm9kZV9pbnNlcnRp
b24oRG9tTm9kZUZpeHR1cmUqIGZpeHR1cmUsIGdjb25zdHBvaW50ZXIgZGF0YSkKICAgICBub2Rl
ID0gd2Via2l0X2RvbV9ub2RlX2xpc3RfaXRlbShsaXN0LCAwKTsKICAgICBnX2Fzc2VydChub2Rl
KTsKICAgICBnX2Fzc2VydCh3ZWJraXRfZG9tX25vZGVfaXNfc2FtZV9ub2RlKFdFQktJVF9ET01f
Tk9ERShkaXYpLCBub2RlKSk7CisgICAgZ19vYmplY3RfdW5yZWYobGlzdCk7CiAKICAgICAvKiBO
b3cgcmVtb3ZlIHRoZSB0YWcgKi8KICAgICB3ZWJraXRfZG9tX25vZGVfcmVtb3ZlX2NoaWxkKFdF
QktJVF9ET01fTk9ERShib2R5KSwgbm9kZSwgTlVMTCk7CiAgICAgbGlzdCA9IHdlYmtpdF9kb21f
bm9kZV9nZXRfY2hpbGRfbm9kZXMoV0VCS0lUX0RPTV9OT0RFKGJvZHkpKTsKICAgICBnX2Fzc2Vy
dF9jbXBpbnQod2Via2l0X2RvbV9ub2RlX2xpc3RfZ2V0X2xlbmd0aChsaXN0KSwgPT0sIDApOwor
ICAgIGdfb2JqZWN0X3VucmVmKGxpc3QpOwogCiAgICAgLyogVE9ETzogaW5zZXJ0X2JlZm9yZSwg
d2hpY2ggZG9lcyBub3Qgc2VlbSB0byBiZSB3b3JraW5nIGNvcnJlY3RseSAqLwogfQpkaWZmIC0t
Z2l0IGEvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2Vidmlldy5jcHAgYi9XZWJLaXQvZ3RrL3dl
YmtpdC93ZWJraXR3ZWJ2aWV3LmNwcAppbmRleCAwZGMxOWYzLi43MDg0MDdmIDEwMDY0NAotLS0g
YS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJ2aWV3LmNwcAorKysgYi9XZWJLaXQvZ3RrL3dl
YmtpdC93ZWJraXR3ZWJ2aWV3LmNwcApAQCAtNTAsNiArNTAsNyBAQAogI2luY2x1ZGUgIkNvbnRl
eHRNZW51Q29udHJvbGxlci5oIgogI2luY2x1ZGUgIkNvbnRleHRNZW51LmgiCiAjaW5jbHVkZSAi
Q3Vyc29yLmgiCisjaW5jbHVkZSAiRE9NT2JqZWN0Q2FjaGUuaCIKICNpbmNsdWRlICJEb2N1bWVu
dC5oIgogI2luY2x1ZGUgIkRvY3VtZW50TG9hZGVyLmgiCiAjaW5jbHVkZSAiRHJhZ0FjdGlvbnMu
aCIKQEAgLTEzNDYsNiArMTM0Nyw4IEBAIHN0YXRpYyB2b2lkIHdlYmtpdF93ZWJfdmlld19kaXNw
b3NlKEdPYmplY3QqIG9iamVjdCkKICAgICAgICAgZGVsZXRlIChpdGVyLT5zZWNvbmQpOwogICAg
IHByaXYtPmRyb3BwaW5nQ29udGV4dHMuY2xlYXIoKTsKIAorICAgIERPTU9iamVjdENhY2hlOjpj
bGVhckJ5VmlldyhvYmplY3QpOworCiAgICAgR19PQkpFQ1RfQ0xBU1Mod2Via2l0X3dlYl92aWV3
X3BhcmVudF9jbGFzcyktPmRpc3Bvc2Uob2JqZWN0KTsKIH0KIAotLSAKMS43LjIuMwoK
</data>
<flag name="review"
          id="64864"
          type_id="1"
          status="-"
          setter="mrobinson"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>74436</attachid>
            <date>2010-11-19 16:00:11 -0800</date>
            <delta_ts>2010-11-19 19:49:18 -0800</delta_ts>
            <desc>domcache.diff</desc>
            <filename>domcache.diff</filename>
            <type>text/plain</type>
            <size>30750</size>
            <attacher name="Xan Lopez">xan.lopez</attacher>
            
              <data encoding="base64">RnJvbSAzZGFhZWIzYzI5OWVjZGJhZjNiM2FmYzkwM2FiMGE5NzdhYjI1NjYxIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBYYW4gTG9wZXogPHhsb3BlekBpZ2FsaWEuY29tPgpEYXRlOiBU
dWUsIDE2IE5vdiAyMDEwIDIwOjMxOjMzIC0wNTAwClN1YmplY3Q6IFtQQVRDSF0gV2ViQ29yZToK
CjIwMTAtMTEtMTkgIFhhbiBMb3BleiAgPHhsb3BlekBpZ2FsaWEuY29tPgoKICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KCiAgICAgICAgW0dUS10gTWVtb3J5IG1hbmFnYW1lbnQg
Zm9yIERPTSBHT2JqZWN0IHdyYXBwZXJzCiAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTQwMzAyCgogICAgICAgIEluaXRpYWwgYXR0ZW1wdCB0byBoYXZlIGEg
a2luZCBvZiBwb29yIG1hbidzIGdhcmJhZ2UgY29sbGVjdGlvbgogICAgICAgIGZvciBHT2JqZWN0
IERPTSBvYmplY3RzLiBXZSB0aWUgdGhlIG9iamVjdCdzIGxpZmVjeWNsZSB0byB0aGVpcgogICAg
ICAgIHBhcmVudCBXZWJWaWV3ICphbmQqIGRvY3VtZW50OyB0aGF0IGlzLCBhbGwgb2JqZWN0cyB3
aWxsIGJlCiAgICAgICAgY29sbGVjdGVkIHdoZW4gdGhlaXIgdmlldyBpcyBkZXN0cm95ZWQgb3Ig
d2hlbiB0aGF0IHZpZXcKICAgICAgICB0cmFuc2l0aW9ucyB0byBhIG5ldyBkb2N1bWVudC4gTWFu
dWFsIG1hbmFnZW1lbnQgKGNhbGxpbmcKICAgICAgICBnX29iamVjdF91bnJlZiBvbiB0aGVtKSBp
cyBhbHNvIGFsbG93ZWQsIGFuZCBpcyByZXF1aXJlZCBmb3IKICAgICAgICBvYmplY3RzIHRoYXQg
YXJlIG5vdCBpbiB0aGUgRE9NIHRyZWUgKGVnIE5vZGVMaXN0cykuCgogICAgICAgICogR05VbWFr
ZWZpbGUuYW06CiAgICAgICAgKiBiaW5kaW5ncy9nb2JqZWN0L0RPTU9iamVjdENhY2hlLmNwcDog
QWRkZWQuCiAgICAgICAgKiBiaW5kaW5ncy9nb2JqZWN0L0RPTU9iamVjdENhY2hlLmg6IENvcGll
ZCBmcm9tIFdlYkNvcmUvYmluZGluZ3MvZ29iamVjdC9XZWJLaXRET01CaW5kaW5nLmguCiAgICAg
ICAgKiBiaW5kaW5ncy9nb2JqZWN0L1dlYktpdERPTUJpbmRpbmcuY3BwOiBSZW1vdmUgdGhlIG9s
ZCBjYWNoZSBjb2RlLgogICAgICAgICogYmluZGluZ3MvZ29iamVjdC9XZWJLaXRET01CaW5kaW5n
Lmg6IGRpdHRvLgogICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yR09iamVj
dC5wbTogaW5jbHVkZSB0aGUgbmV3IERPTU9iamVjdENhY2hlIGhlYWRlci4KCldlYktpdC9ndGs6
CgoyMDEwLTExLTE5ICBYYW4gTG9wZXogIDx4bG9wZXpAaWdhbGlhLmNvbT4KCiAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCgogICAgICAgIFtHVEtdIE1lbW9yeSBtYW5hZ2FtZW50
IGZvciBET00gR09iamVjdCB3cmFwcGVycwogICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD00MDMwMgoKICAgICAgICBJbml0aWFsIGF0dGVtcHQgdG8gaGF2ZSBh
IGtpbmQgb2YgcG9vciBtYW4ncyBnYXJiYWdlIGNvbGxlY3Rpb24KICAgICAgICBmb3IgR09iamVj
dCBET00gb2JqZWN0cy4gV2UgdGllIHRoZSBvYmplY3QncyBsaWZlY3ljbGUgdG8gdGhlaXIKICAg
ICAgICBwYXJlbnQgRnJhbWUgYW5kL29yIGl0cyBkb2N1bWVudDsgdGhhdCBpcywgYWxsIG9iamVj
dHMgd2lsbCBiZQogICAgICAgIGNvbGxlY3RlZCB3aGVuIHRoZWlyIHBhcmVudCBmcmFtZSBpcyBk
ZXN0cm95ZWQgb3Igd2hlbiB0aGF0IGZyYW1lCiAgICAgICAgdHJhbnNpdGlvbnMgdG8gYSBuZXcg
ZG9jdW1lbnQuIE1hbnVhbCBtYW5hZ2VtZW50IChjYWxsaW5nCiAgICAgICAgZ19vYmplY3RfdW5y
ZWYgb24gdGhlbSkgaXMgYWxzbyBhbGxvd2VkLCBhbmQgaXMgcmVxdWlyZWQgZm9yCiAgICAgICAg
b2JqZWN0cyB0aGF0IGFyZSBub3QgaW4gdGhlIERPTSB0cmVlIChlZyBOb2RlTGlzdHMpLgoKICAg
ICAgICAqIEdOVW1ha2VmaWxlLmFtOiBhZGQgdGVzdHV0aWxzIGZpbGUgdG8gdGVzdGRvbWRvY3Vt
ZW50LmMKICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50R3RrLmNwcDoK
ICAgICAgICAoV2ViS2l0OjpGcmFtZUxvYWRlckNsaWVudDo6c2V0TWFpbkZyYW1lRG9jdW1lbnRS
ZWFkeSk6IGNvbGxlY3QKICAgICAgICBET00gb2JqZWN0cyBvbiBkb2N1bWVudCB0cmFuc2l0aW9u
LgogICAgICAgICogdGVzdHMvdGVzdGRvbWRvY3VtZW50LmM6CiAgICAgICAgKGRvbV9kb2N1bWVu
dF9maXh0dXJlX3RlYXJkb3duKTogb25seSBkZXN0cm95IHRoZSB2aWV3IGlmIGl0J3Mgbm90CiAg
ICAgICAgYWxyZWFkeSBkZXN0cm95ZWQsIHNpbmNlIHRoZSBuZXcgdGVzdCBkZXRyb3lzIGl0IG9u
IGl0cyBvd24uCiAgICAgICAgKHRlc3RfZG9tX2RvY3VtZW50X2dldF9lbGVtZW50c19ieV90YWdf
bmFtZSk6IG1hbnVhbGx5IHVucmVmIG5vZGUgbGlzdC4KICAgICAgICAodGVzdF9kb21fZG9jdW1l
bnRfZ2V0X2VsZW1lbnRzX2J5X2NsYXNzX25hbWUpOiBkaXR0by4KICAgICAgICAodGVzdF9kb21f
ZG9jdW1lbnRfZ2V0X2xpbmtzKTogZGl0dG8uCiAgICAgICAgKHRlc3RfZG9tX2RvY3VtZW50X2dh
cmJhZ2VfY29sbGVjdGlvbik6IHRlc3QgYWxsIHBvc3NpYmxlCiAgICAgICAgc2NlbmFyaW9zIGZv
ciBET00gb2JqZWN0ICJnYXJiYWdlIGNvbGxlY3Rpb24iLgogICAgICAgIChtYWluKTogYWRkIG5l
dyB0ZXN0LgogICAgICAgICogdGVzdHMvdGVzdGRvbW5vZGUuYzoKICAgICAgICAodGVzdF9kb21f
bm9kZV9oaWVyYXJjaHlfbmF2aWdhdGlvbik6IG1hbnVhbGx5IHVucmVmIG5vZGUgbGlzdC4KICAg
ICAgICAodGVzdF9kb21fbm9kZV9pbnNlcnRpb24pOiBkaXR0by4KICAgICAgICAqIHdlYmtpdC93
ZWJraXRoaXR0ZXN0cmVzdWx0LmNwcDoKICAgICAgICAod2Via2l0X2hpdF90ZXN0X3Jlc3VsdF9k
aXNwb3NlKTogdW5yZWYgdGhlIGlubmVyIG5vZGUgb24gZGlzcG9zZQogICAgICAgIG5vdyB0aGF0
IHRoZSBtZW1vcnkgbWFuYWdlbWVudCBtb2RlbCBpcyBjbGFyaWZpZWQuCiAgICAgICAgKHdlYmtp
dF9oaXRfdGVzdF9yZXN1bHRfY2xhc3NfaW5pdCk6IGhvb2sgZGlzcG9zZS4KICAgICAgICAqIHdl
YmtpdC93ZWJraXR3ZWJmcmFtZS5jcHA6CiAgICAgICAgKHdlYmtpdF93ZWJfZnJhbWVfY29yZV9m
cmFtZV9nb25lKTogY2xlYXIgRE9NIG9iamVjdHMgYXR0YWNoZWQgdG8gdGhpcyBmcmFtZS4KICAg
ICAgICAod2Via2l0X3dlYl9mcmFtZV9maW5hbGl6ZSk6IGRpdHRvLgotLS0KIFdlYkNvcmUvQ2hh
bmdlTG9nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAyMiArKysKIFdlYkNv
cmUvR05VbWFrZWZpbGUuYW0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgMiArCiBX
ZWJDb3JlL2JpbmRpbmdzL2dvYmplY3QvRE9NT2JqZWN0Q2FjaGUuY3BwICAgICAgICB8ICAxMzEg
KysrKysrKysrKysrKysrKysKIFdlYkNvcmUvYmluZGluZ3MvZ29iamVjdC9ET01PYmplY3RDYWNo
ZS5oICAgICAgICAgIHwgICAzOCArKysrKwogV2ViQ29yZS9iaW5kaW5ncy9nb2JqZWN0L1dlYktp
dERPTUJpbmRpbmcuY3BwICAgICAgfCAgIDI3ICstLS0tCiBXZWJDb3JlL2JpbmRpbmdzL2dvYmpl
Y3QvV2ViS2l0RE9NQmluZGluZy5oICAgICAgICB8ICAgIDcgLQogV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL0NvZGVHZW5lcmF0b3JHT2JqZWN0LnBtICAgfCAgICAxICsKIFdlYktpdC9ndGsvQ2hh
bmdlTG9nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAzOSArKysrKwogV2ViS2l0
L2d0ay9HTlVtYWtlZmlsZS5hbSAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAyICstCiBX
ZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50R3RrLmNwcCB8ICAgIDYg
Ky0KIFdlYktpdC9ndGsvdGVzdHMvdGVzdGRvbWRvY3VtZW50LmMgICAgICAgICAgICAgICAgIHwg
IDE1MCArKysrKysrKysrKysrKysrKysrLQogV2ViS2l0L2d0ay90ZXN0cy90ZXN0ZG9tbm9kZS5j
ICAgICAgICAgICAgICAgICAgICAgfCAgICA1ICsKIFdlYktpdC9ndGsvd2Via2l0L3dlYmtpdGhp
dHRlc3RyZXN1bHQuY3BwICAgICAgICAgIHwgICAxMCArKwogV2ViS2l0L2d0ay93ZWJraXQvd2Vi
a2l0d2ViZnJhbWUuY3BwICAgICAgICAgICAgICAgfCAgICA3ICstCiAxNCBmaWxlcyBjaGFuZ2Vk
LCA0MDggaW5zZXJ0aW9ucygrKSwgMzkgZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQg
V2ViQ29yZS9iaW5kaW5ncy9nb2JqZWN0L0RPTU9iamVjdENhY2hlLmNwcAogY3JlYXRlIG1vZGUg
MTAwNjQ0IFdlYkNvcmUvYmluZGluZ3MvZ29iamVjdC9ET01PYmplY3RDYWNoZS5oCgpkaWZmIC0t
Z2l0IGEvV2ViQ29yZS9DaGFuZ2VMb2cgYi9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCBmZDg3NDc2
Li5kNWY0Y2UzIDEwMDY0NAotLS0gYS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9XZWJDb3JlL0No
YW5nZUxvZwpAQCAtMSwzICsxLDI1IEBACisyMDEwLTExLTE5ICBYYW4gTG9wZXogIDx4bG9wZXpA
aWdhbGlhLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBbR1RLXSBNZW1vcnkgbWFuYWdhbWVudCBmb3IgRE9NIEdPYmplY3Qgd3JhcHBlcnMKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQwMzAyCisKKyAg
ICAgICAgSW5pdGlhbCBhdHRlbXB0IHRvIGhhdmUgYSBraW5kIG9mIHBvb3IgbWFuJ3MgZ2FyYmFn
ZSBjb2xsZWN0aW9uCisgICAgICAgIGZvciBHT2JqZWN0IERPTSBvYmplY3RzLiBXZSB0aWUgdGhl
IG9iamVjdCdzIGxpZmVjeWNsZSB0byB0aGVpcgorICAgICAgICBwYXJlbnQgV2ViVmlldyAqYW5k
KiBkb2N1bWVudDsgdGhhdCBpcywgYWxsIG9iamVjdHMgd2lsbCBiZQorICAgICAgICBjb2xsZWN0
ZWQgd2hlbiB0aGVpciB2aWV3IGlzIGRlc3Ryb3llZCBvciB3aGVuIHRoYXQgdmlldworICAgICAg
ICB0cmFuc2l0aW9ucyB0byBhIG5ldyBkb2N1bWVudC4gTWFudWFsIG1hbmFnZW1lbnQgKGNhbGxp
bmcKKyAgICAgICAgZ19vYmplY3RfdW5yZWYgb24gdGhlbSkgaXMgYWxzbyBhbGxvd2VkLCBhbmQg
aXMgcmVxdWlyZWQgZm9yCisgICAgICAgIG9iamVjdHMgdGhhdCBhcmUgbm90IGluIHRoZSBET00g
dHJlZSAoZWcgTm9kZUxpc3RzKS4KKworICAgICAgICAqIEdOVW1ha2VmaWxlLmFtOgorICAgICAg
ICAqIGJpbmRpbmdzL2dvYmplY3QvRE9NT2JqZWN0Q2FjaGUuY3BwOiBBZGRlZC4KKyAgICAgICAg
KiBiaW5kaW5ncy9nb2JqZWN0L0RPTU9iamVjdENhY2hlLmg6IENvcGllZCBmcm9tIFdlYkNvcmUv
YmluZGluZ3MvZ29iamVjdC9XZWJLaXRET01CaW5kaW5nLmguCisgICAgICAgICogYmluZGluZ3Mv
Z29iamVjdC9XZWJLaXRET01CaW5kaW5nLmNwcDogUmVtb3ZlIHRoZSBvbGQgY2FjaGUgY29kZS4K
KyAgICAgICAgKiBiaW5kaW5ncy9nb2JqZWN0L1dlYktpdERPTUJpbmRpbmcuaDogZGl0dG8uCisg
ICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yR09iamVjdC5wbTogaW5jbHVk
ZSB0aGUgbmV3IERPTU9iamVjdENhY2hlIGhlYWRlci4KKwogMjAxMC0xMS0xOSAgSmF5IENpdmVs
bGkgIDxqY2l2ZWxsaUBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGF2aWQg
TGV2aW4uCmRpZmYgLS1naXQgYS9XZWJDb3JlL0dOVW1ha2VmaWxlLmFtIGIvV2ViQ29yZS9HTlVt
YWtlZmlsZS5hbQppbmRleCBlOGViMzg2Li5lNWZlMmE3IDEwMDY0NAotLS0gYS9XZWJDb3JlL0dO
VW1ha2VmaWxlLmFtCisrKyBiL1dlYkNvcmUvR05VbWFrZWZpbGUuYW0KQEAgLTYzOSw2ICs2Mzks
OCBAQCB3ZWJjb3JlX3NvdXJjZXMgKz0gXAogCVdlYkNvcmUvYmluZGluZ3MvZ2VuZXJpYy9SdW50
aW1lRW5hYmxlZEZlYXR1cmVzLmggXAogCVdlYkNvcmUvYmluZGluZ3MvZ29iamVjdC9Db252ZXJ0
VG9VVEY4U3RyaW5nLmNwcCBcCiAJV2ViQ29yZS9iaW5kaW5ncy9nb2JqZWN0L0NvbnZlcnRUb1VU
RjhTdHJpbmcuaCBcCisJV2ViQ29yZS9iaW5kaW5ncy9nb2JqZWN0L0RPTU9iamVjdENhY2hlLmNw
cCBcCisJV2ViQ29yZS9iaW5kaW5ncy9nb2JqZWN0L0RPTU9iamVjdENhY2hlLmggXAogCVdlYkNv
cmUvYmluZGluZ3MvZ29iamVjdC9HT2JqZWN0RXZlbnRMaXN0ZW5lci5jcHAgXAogCVdlYkNvcmUv
YmluZGluZ3MvZ29iamVjdC9HT2JqZWN0RXZlbnRMaXN0ZW5lci5oIFwKIAlXZWJDb3JlL2JpbmRp
bmdzL2dvYmplY3QvV2ViS2l0RE9NQmluZGluZy5jcHAgXApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9i
aW5kaW5ncy9nb2JqZWN0L0RPTU9iamVjdENhY2hlLmNwcCBiL1dlYkNvcmUvYmluZGluZ3MvZ29i
amVjdC9ET01PYmplY3RDYWNoZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MC4uNGFmNmRjMAotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvYmluZGluZ3MvZ29iamVjdC9E
T01PYmplY3RDYWNoZS5jcHAKQEAgLTAsMCArMSwxMzEgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChD
KSAyMDEwIElnYWxpYSBTLkwuCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBw
dWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVy
c2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJz
aW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh
dCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv
dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGVzc2Vy
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNo
b3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1Ymxp
YworICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8g
dGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJl
ZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqLworCisjaW5j
bHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRE9NT2JqZWN0Q2FjaGUuaCIKKworI2luY2x1ZGUg
IkRvY3VtZW50LmgiCisjaW5jbHVkZSAiRnJhbWUuaCIKKyNpbmNsdWRlICJOb2RlLmgiCisjaW5j
bHVkZSA8d3RmL0hhc2hNYXAuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK3R5cGVkZWYgc3Ry
dWN0IHsKKyAgICBHT2JqZWN0KiBvYmplY3Q7CisgICAgdm9pZCogZnJhbWU7CisgICAgZ3VpbnQg
cmVmQ291bnQ7Cit9IERPTU9iamVjdENhY2hlRGF0YTsKKwordHlwZWRlZiBIYXNoTWFwPHZvaWQq
LCBET01PYmplY3RDYWNoZURhdGEqPiBET01PYmplY3RNYXA7CisKK3N0YXRpYyBET01PYmplY3RN
YXAmIGRvbU9iamVjdHMoKQoreworICAgIHN0YXRpYyBET01PYmplY3RNYXAgc3RhdGljRE9NT2Jq
ZWN0czsKKyAgICByZXR1cm4gc3RhdGljRE9NT2JqZWN0czsKK30KKworc3RhdGljIHZvaWQqIGdl
dEZyYW1lRnJvbUhhbmRsZSh2b2lkKiBvYmplY3RIYW5kbGUpCit7CisgICAgV2ViQ29yZTo6Tm9k
ZSogbm9kZSA9IHN0YXRpY19jYXN0PFdlYkNvcmU6Ok5vZGUqPihvYmplY3RIYW5kbGUpOworICAg
IGlmICghbm9kZS0+aW5Eb2N1bWVudCgpKQorICAgICAgICByZXR1cm4gMDsKKyAgICBXZWJDb3Jl
OjpEb2N1bWVudCogZG9jdW1lbnQgPSBub2RlLT5kb2N1bWVudCgpOworICAgIGlmICghZG9jdW1l
bnQpCisgICAgICAgIHJldHVybiAwOworICAgIHJldHVybiBkb2N1bWVudC0+ZnJhbWUoKTsKK30K
Kwordm9pZCBET01PYmplY3RDYWNoZTo6Zm9yZ2V0KHZvaWQqIG9iamVjdEhhbmRsZSkKK3sKKyAg
ICBET01PYmplY3RDYWNoZURhdGEqIGNhY2hlRGF0YSA9IGRvbU9iamVjdHMoKS5nZXQob2JqZWN0
SGFuZGxlKTsKKyAgICBBU1NFUlQoY2FjaGVEYXRhKTsKKyAgICBnX3NsaWNlX2ZyZWUoRE9NT2Jq
ZWN0Q2FjaGVEYXRhLCBjYWNoZURhdGEpOworICAgIGRvbU9iamVjdHMoKS50YWtlKG9iamVjdEhh
bmRsZSk7Cit9CisKK3ZvaWQgRE9NT2JqZWN0Q2FjaGU6OmNsZWFyQnlGcmFtZSh2b2lkKiBmcmFt
ZSkKK3sKKyAgICBWZWN0b3I8RE9NT2JqZWN0Q2FjaGVEYXRhKj4gdG9VbnJlZjsKKworICAgIC8v
IFVucmVmZmluZyB0aGUgb2JqZWN0cyByZW1vdmVzIHRoZW0gZnJvbSB0aGUgY2FjaGUgaW4gdGhl
aXIKKyAgICAvLyBmaW5hbGl6ZSBtZXRob2QsIHNvIGp1c3Qgc2F2ZSB0aGVtIHRvIGRvIHRoYXQg
d2hpbGUgd2UgYXJlIG5vdAorICAgIC8vIGl0ZXJhdGluZyB0aGUgY2FjaGUgaXRzZWxmLgorICAg
IERPTU9iamVjdE1hcDo6aXRlcmF0b3IgZW5kID0gZG9tT2JqZWN0cygpLmVuZCgpOworICAgIGZv
ciAoRE9NT2JqZWN0TWFwOjppdGVyYXRvciBpdGVyID0gZG9tT2JqZWN0cygpLmJlZ2luKCk7IGl0
ZXIgIT0gZW5kOyArK2l0ZXIpIHsKKyAgICAgICAgRE9NT2JqZWN0Q2FjaGVEYXRhKiBkYXRhID0g
aXRlci0+c2Vjb25kOworICAgICAgICBBU1NFUlQoZGF0YSk7CisgICAgICAgIGlmICghZnJhbWUg
fHwgZGF0YS0+ZnJhbWUgPT0gZnJhbWUpCisgICAgICAgICAgICB0b1VucmVmLmFwcGVuZChkYXRh
KTsKKyAgICB9CisKKyAgICBWZWN0b3I8RE9NT2JqZWN0Q2FjaGVEYXRhKj46Oml0ZXJhdG9yIGxh
c3QgPSB0b1VucmVmLmVuZCgpOworICAgIGZvciAoVmVjdG9yPERPTU9iamVjdENhY2hlRGF0YSo+
OjppdGVyYXRvciBpdCA9IHRvVW5yZWYuYmVnaW4oKTsgaXQgIT0gbGFzdDsgKytpdCkgeworICAg
ICAgICBET01PYmplY3RDYWNoZURhdGEqIGRhdGEgPSAqaXQ7CisgICAgICAgIHdoaWxlIChkYXRh
LT5yZWZDb3VudC0tKQorICAgICAgICAgICAgZ19vYmplY3RfdW5yZWYoZGF0YS0+b2JqZWN0KTsK
KyAgICB9Cit9CisKK0RPTU9iamVjdENhY2hlOjp+RE9NT2JqZWN0Q2FjaGUoKQoreworICAgIGNs
ZWFyQnlGcmFtZSgpOworfQorCit2b2lkKiBET01PYmplY3RDYWNoZTo6Z2V0KHZvaWQqIG9iamVj
dEhhbmRsZSkKK3sKKyAgICBET01PYmplY3RDYWNoZURhdGEqIGRhdGEgPSBkb21PYmplY3RzKCku
Z2V0KG9iamVjdEhhbmRsZSk7CisgICAgaWYgKCFkYXRhKQorICAgICAgICByZXR1cm4gMDsKKwor
ICAgIC8vIFdlIHdhbnQgdG8gYWRkIG9uZSByZWYgZWFjaCB0aW1lIGEgd3JhcHBlciBpcyByZXR1
cm5lZCwgc28gdGhhdAorICAgIC8vIHRoZSB1c2VyIGNhbiBtYW51YWxseSB1bnJlZiB0aGVtIGlm
IGhlIGNob29zZXMgdG8uCisgICAgQVNTRVJUKGRhdGEtPm9iamVjdCk7CisgICAgZGF0YS0+cmVm
Q291bnQrKzsKKyAgICByZXR1cm4gZ19vYmplY3RfcmVmKGRhdGEtPm9iamVjdCk7Cit9CisKK3Zv
aWQqIERPTU9iamVjdENhY2hlOjpwdXQodm9pZCogb2JqZWN0SGFuZGxlLCB2b2lkKiB3cmFwcGVy
KQoreworICAgIGlmIChkb21PYmplY3RzKCkuZ2V0KG9iamVjdEhhbmRsZSkpCisgICAgICAgIHJl
dHVybiB3cmFwcGVyOworCisgICAgRE9NT2JqZWN0Q2FjaGVEYXRhKiBkYXRhID0gZ19zbGljZV9u
ZXcoRE9NT2JqZWN0Q2FjaGVEYXRhKTsKKyAgICBkYXRhLT5vYmplY3QgPSBzdGF0aWNfY2FzdDxH
T2JqZWN0Kj4od3JhcHBlcik7CisgICAgZGF0YS0+ZnJhbWUgPSAwOworICAgIGRhdGEtPnJlZkNv
dW50ID0gMTsKKworICAgIGRvbU9iamVjdHMoKS5zZXQob2JqZWN0SGFuZGxlLCBkYXRhKTsKKyAg
ICByZXR1cm4gd3JhcHBlcjsKK30KKwordm9pZCogRE9NT2JqZWN0Q2FjaGU6OnB1dChXZWJDb3Jl
OjpOb2RlKiBvYmplY3RIYW5kbGUsIHZvaWQqIHdyYXBwZXIpCit7CisgICAgLy8gY2FsbCB0aGUg
OjpwdXQgdmVyc2lvbiB0aGF0IHRha2VzIHZvaWQqIHRvIGRvIHRoZSBiYXNpYyBjYWNoZQorICAg
IC8vIGluc2VydGlvbiB3b3JrCisgICAgcHV0KHN0YXRpY19jYXN0PHZvaWQqPihvYmplY3RIYW5k
bGUpLCB3cmFwcGVyKTsKKworICAgIERPTU9iamVjdENhY2hlRGF0YSogZGF0YSA9IGRvbU9iamVj
dHMoKS5nZXQob2JqZWN0SGFuZGxlKTsKKyAgICBBU1NFUlQoZGF0YSk7CisKKyAgICBkYXRhLT5m
cmFtZSA9IGdldEZyYW1lRnJvbUhhbmRsZShvYmplY3RIYW5kbGUpOworCisgICAgcmV0dXJuIHdy
YXBwZXI7Cit9CisKK30KZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3MvZ29iamVjdC9ET01P
YmplY3RDYWNoZS5oIGIvV2ViQ29yZS9iaW5kaW5ncy9nb2JqZWN0L0RPTU9iamVjdENhY2hlLmgK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDVmNzJmMQotLS0gL2Rldi9udWxs
CisrKyBiL1dlYkNvcmUvYmluZGluZ3MvZ29iamVjdC9ET01PYmplY3RDYWNoZS5oCkBAIC0wLDAg
KzEsMzggQEAKKy8qCisgKiAgQ29weXJpZ2h0IChDKSAyMDEwIElnYWxpYSBTLkwuCisgKgorICog
IFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdl
bmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAo
YXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkg
aXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBi
dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50
eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9y
IG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBv
ZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0
aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3Vu
ZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1B
ICAwMjExMC0xMzAxICBVU0EKKyAqLworCisjaWZuZGVmIERPTU9iamVjdENhY2hlX2gKKyNkZWZp
bmUgRE9NT2JqZWN0Q2FjaGVfaAorCituYW1lc3BhY2UgV2ViQ29yZSB7CitjbGFzcyBOb2RlOwor
fTsKKworbmFtZXNwYWNlIFdlYktpdCB7CitjbGFzcyBET01PYmplY3RDYWNoZSB7CitwdWJsaWM6
CisgICAgc3RhdGljIHZvaWQqIGdldCh2b2lkKiBvYmplY3RIYW5kbGUpOworICAgIHN0YXRpYyB2
b2lkKiBwdXQodm9pZCogb2JqZWN0SGFuZGxlLCB2b2lkKiB3cmFwcGVyKTsKKyAgICBzdGF0aWMg
dm9pZCogcHV0KFdlYkNvcmU6Ok5vZGUqIG9iamVjdEhhbmRsZSwgdm9pZCogd3JhcHBlcik7Cisg
ICAgc3RhdGljIHZvaWQgY2xlYXJCeUZyYW1lKHZvaWQqIGZyYW1lID0gMCk7CisgICAgc3RhdGlj
IHZvaWQgZm9yZ2V0KHZvaWQqIG9iamVjdEhhbmRsZSk7CisgICAgfkRPTU9iamVjdENhY2hlKCk7
Cit9OworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvV2ViQ29y
ZS9iaW5kaW5ncy9nb2JqZWN0L1dlYktpdERPTUJpbmRpbmcuY3BwIGIvV2ViQ29yZS9iaW5kaW5n
cy9nb2JqZWN0L1dlYktpdERPTUJpbmRpbmcuY3BwCmluZGV4IDNjMDY2ZTMuLmE4YTg5NTYgMTAw
NjQ0Ci0tLSBhL1dlYkNvcmUvYmluZGluZ3MvZ29iamVjdC9XZWJLaXRET01CaW5kaW5nLmNwcAor
KysgYi9XZWJDb3JlL2JpbmRpbmdzL2dvYmplY3QvV2ViS2l0RE9NQmluZGluZy5jcHAKQEAgLTI0
LDYgKzI0LDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJXZWJLaXRET01CaW5k
aW5nLmgiCiAKKyNpbmNsdWRlICJET01PYmplY3RDYWNoZS5oIgogI2luY2x1ZGUgIkVsZW1lbnQu
aCIKICNpbmNsdWRlICJFdmVudC5oIgogI2luY2x1ZGUgIkV2ZW50RXhjZXB0aW9uLmgiCkBAIC00
NCwzMiArNDUsNiBAQCBuYW1lc3BhY2UgV2ViS2l0IHsKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3Jl
OwogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU6OkhUTUxOYW1lczsKIAotLy8gRE9NT2JqZWN0Q2Fj
aGUKLQotdHlwZWRlZiBIYXNoTWFwPHZvaWQqLCBncG9pbnRlcj4gRE9NT2JqZWN0TWFwOwotCi1z
dGF0aWMgRE9NT2JqZWN0TWFwJiBkb21PYmplY3RzKCkKLXsKLSAgICBzdGF0aWMgRE9NT2JqZWN0
TWFwIHN0YXRpY0RPTU9iamVjdHM7Ci0gICAgcmV0dXJuIHN0YXRpY0RPTU9iamVjdHM7Ci19Ci0K
LWdwb2ludGVyIERPTU9iamVjdENhY2hlOjpnZXQodm9pZCogb2JqZWN0SGFuZGxlKQotewotICAg
IHJldHVybiBkb21PYmplY3RzKCkuZ2V0KG9iamVjdEhhbmRsZSk7Ci19Ci0KLWdwb2ludGVyIERP
TU9iamVjdENhY2hlOjpwdXQodm9pZCogb2JqZWN0SGFuZGxlLCBncG9pbnRlciB3cmFwcGVyKQot
ewotICAgIGRvbU9iamVjdHMoKS5zZXQob2JqZWN0SGFuZGxlLCB3cmFwcGVyKTsKLSAgICByZXR1
cm4gd3JhcHBlcjsKLX0KLQotdm9pZCBET01PYmplY3RDYWNoZTo6Zm9yZ2V0KHZvaWQqIG9iamVj
dEhhbmRsZSkKLXsKLSAgICBkb21PYmplY3RzKCkudGFrZShvYmplY3RIYW5kbGUpOwotfQotCiAv
LyBraXQgbWV0aG9kcwogCiBzdGF0aWMgZ3BvaW50ZXIgY3JlYXRlV3JhcHBlcihOb2RlKiBub2Rl
KQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy9nb2JqZWN0L1dlYktpdERPTUJpbmRpbmcu
aCBiL1dlYkNvcmUvYmluZGluZ3MvZ29iamVjdC9XZWJLaXRET01CaW5kaW5nLmgKaW5kZXggMjI0
OGY3OC4uNDc1OTRhNiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5ncy9nb2JqZWN0L1dlYktp
dERPTUJpbmRpbmcuaAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL2dvYmplY3QvV2ViS2l0RE9NQmlu
ZGluZy5oCkBAIC0zOCwxMyArMzgsNiBAQCBncG9pbnRlciBraXQoV2ViQ29yZTo6Tm9kZSogbm9k
ZSk7CiBncG9pbnRlciBraXQoV2ViQ29yZTo6RWxlbWVudCogZWxlbWVudCk7CiBncG9pbnRlciBr
aXQoV2ViQ29yZTo6RXZlbnQqIGV2ZW50KTsKIGdwb2ludGVyIGtpdChXZWJDb3JlOjpFdmVudFRh
cmdldCogdGFyZ2V0KTsKLQotY2xhc3MgRE9NT2JqZWN0Q2FjaGUgewotcHVibGljOgotICAgIHN0
YXRpYyBncG9pbnRlciBnZXQodm9pZCogb2JqZWN0SGFuZGxlKTsKLSAgICBzdGF0aWMgZ3BvaW50
ZXIgcHV0KHZvaWQqIG9iamVjdEhhbmRsZSwgZ3BvaW50ZXIgd3JhcHBlcik7Ci0gICAgc3RhdGlj
IHZvaWQgZm9yZ2V0KHZvaWQqIG9iamVjdEhhbmRsZSk7Ci19OwogfSAvLyBuYW1lc3BhY2UgV2Vi
S2l0CiAKICNlbmRpZiAvLyBXZWJLaXRET01CaW5kaW5nX2gKZGlmZiAtLWdpdCBhL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yR09iamVjdC5wbSBiL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yR09iamVjdC5wbQppbmRleCA2YzQ1MGFkLi5jYTJiZDlj
IDEwMDY0NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckdPYmpl
Y3QucG0KKysrIGIvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JHT2JqZWN0
LnBtCkBAIC0xMzIyLDYgKzEzMjIsNyBAQCBzdWIgR2VuZXJhdGUgewogCiAgICAgJGltcGxJbmNs
dWRlc3sid2Via2l0bWFyc2hhbC5oIn0gPSAxOwogICAgICRpbXBsSW5jbHVkZXN7IndlYmtpdHBy
aXZhdGUuaCJ9ID0gMTsKKyAgICAkaW1wbEluY2x1ZGVzeyJET01PYmplY3RDYWNoZS5oIn0gPSAx
OwogICAgICRpbXBsSW5jbHVkZXN7IldlYktpdERPTUJpbmRpbmcuaCJ9ID0gMTsKICAgICAkaW1w
bEluY2x1ZGVzeyJnb2JqZWN0L0NvbnZlcnRUb1VURjhTdHJpbmcuaCJ9ID0gMTsKICAgICAkaW1w
bEluY2x1ZGVzeyJ3ZWJraXQvJGNsYXNzTmFtZS5oIn0gPSAxOwpkaWZmIC0tZ2l0IGEvV2ViS2l0
L2d0ay9DaGFuZ2VMb2cgYi9XZWJLaXQvZ3RrL0NoYW5nZUxvZwppbmRleCBiYzAwYjg1Li5iYjVj
ZmM1IDEwMDY0NAotLS0gYS9XZWJLaXQvZ3RrL0NoYW5nZUxvZworKysgYi9XZWJLaXQvZ3RrL0No
YW5nZUxvZwpAQCAtMSwzICsxLDQyIEBACisyMDEwLTExLTE5ICBYYW4gTG9wZXogIDx4bG9wZXpA
aWdhbGlhLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBbR1RLXSBNZW1vcnkgbWFuYWdhbWVudCBmb3IgRE9NIEdPYmplY3Qgd3JhcHBlcnMKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQwMzAyCisKKyAg
ICAgICAgSW5pdGlhbCBhdHRlbXB0IHRvIGhhdmUgYSBraW5kIG9mIHBvb3IgbWFuJ3MgZ2FyYmFn
ZSBjb2xsZWN0aW9uCisgICAgICAgIGZvciBHT2JqZWN0IERPTSBvYmplY3RzLiBXZSB0aWUgdGhl
IG9iamVjdCdzIGxpZmVjeWNsZSB0byB0aGVpcgorICAgICAgICBwYXJlbnQgRnJhbWUgYW5kL29y
IGl0cyBkb2N1bWVudDsgdGhhdCBpcywgYWxsIG9iamVjdHMgd2lsbCBiZQorICAgICAgICBjb2xs
ZWN0ZWQgd2hlbiB0aGVpciBwYXJlbnQgZnJhbWUgaXMgZGVzdHJveWVkIG9yIHdoZW4gdGhhdCBm
cmFtZQorICAgICAgICB0cmFuc2l0aW9ucyB0byBhIG5ldyBkb2N1bWVudC4gTWFudWFsIG1hbmFn
ZW1lbnQgKGNhbGxpbmcKKyAgICAgICAgZ19vYmplY3RfdW5yZWYgb24gdGhlbSkgaXMgYWxzbyBh
bGxvd2VkLCBhbmQgaXMgcmVxdWlyZWQgZm9yCisgICAgICAgIG9iamVjdHMgdGhhdCBhcmUgbm90
IGluIHRoZSBET00gdHJlZSAoZWcgTm9kZUxpc3RzKS4KKworICAgICAgICAqIEdOVW1ha2VmaWxl
LmFtOiBhZGQgdGVzdHV0aWxzIGZpbGUgdG8gdGVzdGRvbWRvY3VtZW50LmMKKyAgICAgICAgKiBX
ZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudEd0ay5jcHA6CisgICAgICAgIChXZWJLaXQ6
OkZyYW1lTG9hZGVyQ2xpZW50OjpzZXRNYWluRnJhbWVEb2N1bWVudFJlYWR5KTogY29sbGVjdAor
ICAgICAgICBET00gb2JqZWN0cyBvbiBkb2N1bWVudCB0cmFuc2l0aW9uLgorICAgICAgICAqIHRl
c3RzL3Rlc3Rkb21kb2N1bWVudC5jOgorICAgICAgICAoZG9tX2RvY3VtZW50X2ZpeHR1cmVfdGVh
cmRvd24pOiBvbmx5IGRlc3Ryb3kgdGhlIHZpZXcgaWYgaXQncyBub3QKKyAgICAgICAgYWxyZWFk
eSBkZXN0cm95ZWQsIHNpbmNlIHRoZSBuZXcgdGVzdCBkZXRyb3lzIGl0IG9uIGl0cyBvd24uCisg
ICAgICAgICh0ZXN0X2RvbV9kb2N1bWVudF9nZXRfZWxlbWVudHNfYnlfdGFnX25hbWUpOiBtYW51
YWxseSB1bnJlZiBub2RlIGxpc3QuCisgICAgICAgICh0ZXN0X2RvbV9kb2N1bWVudF9nZXRfZWxl
bWVudHNfYnlfY2xhc3NfbmFtZSk6IGRpdHRvLgorICAgICAgICAodGVzdF9kb21fZG9jdW1lbnRf
Z2V0X2xpbmtzKTogZGl0dG8uCisgICAgICAgICh0ZXN0X2RvbV9kb2N1bWVudF9nYXJiYWdlX2Nv
bGxlY3Rpb24pOiB0ZXN0IGFsbCBwb3NzaWJsZQorICAgICAgICBzY2VuYXJpb3MgZm9yIERPTSBv
YmplY3QgImdhcmJhZ2UgY29sbGVjdGlvbiIuCisgICAgICAgIChtYWluKTogYWRkIG5ldyB0ZXN0
LgorICAgICAgICAqIHRlc3RzL3Rlc3Rkb21ub2RlLmM6CisgICAgICAgICh0ZXN0X2RvbV9ub2Rl
X2hpZXJhcmNoeV9uYXZpZ2F0aW9uKTogbWFudWFsbHkgdW5yZWYgbm9kZSBsaXN0LgorICAgICAg
ICAodGVzdF9kb21fbm9kZV9pbnNlcnRpb24pOiBkaXR0by4KKyAgICAgICAgKiB3ZWJraXQvd2Vi
a2l0aGl0dGVzdHJlc3VsdC5jcHA6CisgICAgICAgICh3ZWJraXRfaGl0X3Rlc3RfcmVzdWx0X2Rp
c3Bvc2UpOiB1bnJlZiB0aGUgaW5uZXIgbm9kZSBvbiBkaXNwb3NlCisgICAgICAgIG5vdyB0aGF0
IHRoZSBtZW1vcnkgbWFuYWdlbWVudCBtb2RlbCBpcyBjbGFyaWZpZWQuCisgICAgICAgICh3ZWJr
aXRfaGl0X3Rlc3RfcmVzdWx0X2NsYXNzX2luaXQpOiBob29rIGRpc3Bvc2UuCisgICAgICAgICog
d2Via2l0L3dlYmtpdHdlYmZyYW1lLmNwcDoKKyAgICAgICAgKHdlYmtpdF93ZWJfZnJhbWVfY29y
ZV9mcmFtZV9nb25lKTogY2xlYXIgRE9NIG9iamVjdHMgYXR0YWNoZWQgdG8gdGhpcyBmcmFtZS4K
KyAgICAgICAgKHdlYmtpdF93ZWJfZnJhbWVfZmluYWxpemUpOiBkaXR0by4KKwogMjAxMC0xMS0x
OCAgWGFuIExvcGV6ICA8eGxvcGV6QGlnYWxpYS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkg
TWFydGluIFJvYmluc29uLgpkaWZmIC0tZ2l0IGEvV2ViS2l0L2d0ay9HTlVtYWtlZmlsZS5hbSBi
L1dlYktpdC9ndGsvR05VbWFrZWZpbGUuYW0KaW5kZXggYTNiZTgxNi4uMzI1MjcwZSAxMDA2NDQK
LS0tIGEvV2ViS2l0L2d0ay9HTlVtYWtlZmlsZS5hbQorKysgYi9XZWJLaXQvZ3RrL0dOVW1ha2Vm
aWxlLmFtCkBAIC0zOTEsNyArMzkxLDcgQEAgVEVTVF9QUk9HUyArPSBcCiAJUHJvZ3JhbXMvdW5p
dHRlc3RzL3Rlc3Rjb3B5YW5kcGFzdGUKIAogIyBBZGQgYWRkaXRpb25hbCB0ZXN0cyBoZXJlCi1Q
cm9ncmFtc191bml0dGVzdHNfdGVzdGRvbWRvY3VtZW50X1NPVVJDRVMgPSBXZWJLaXQvZ3RrL3Rl
c3RzL3Rlc3Rkb21kb2N1bWVudC5jCitQcm9ncmFtc191bml0dGVzdHNfdGVzdGRvbWRvY3VtZW50
X1NPVVJDRVMgPSBXZWJLaXQvZ3RrL3Rlc3RzL3Rlc3Rkb21kb2N1bWVudC5jIFdlYktpdC9ndGsv
dGVzdHMvdGVzdF91dGlscy5jCiBQcm9ncmFtc191bml0dGVzdHNfdGVzdGRvbWRvY3VtZW50X0NG
TEFHUyA9ICQod2Via2l0X3Rlc3RzX2NmbGFncykKIFByb2dyYW1zX3VuaXR0ZXN0c190ZXN0ZG9t
ZG9jdW1lbnRfTERBREQgPSAkKHdlYmtpdF90ZXN0c19sZGFkZCkKIFByb2dyYW1zX3VuaXR0ZXN0
c190ZXN0ZG9tZG9jdW1lbnRfTERGTEFHUyA9ICQod2Via2l0X3Rlc3RzX2xkZmxhZ3MpCmRpZmYg
LS1naXQgYS9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50R3RrLmNw
cCBiL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRHdGsuY3BwCmlu
ZGV4IGIyM2JkNzAuLmZkZWY5ZGMgMTAwNjQ0Ci0tLSBhL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBv
cnQvRnJhbWVMb2FkZXJDbGllbnRHdGsuY3BwCisrKyBiL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBv
cnQvRnJhbWVMb2FkZXJDbGllbnRHdGsuY3BwCkBAIC0yOCw2ICsyOCw3IEBACiAjaW5jbHVkZSAi
QXJjaGl2ZVJlc291cmNlLmgiCiAjaW5jbHVkZSAiQ2FjaGVkRnJhbWUuaCIKICNpbmNsdWRlICJD
b2xvci5oIgorI2luY2x1ZGUgIkRPTU9iamVjdENhY2hlLmgiCiAjaW5jbHVkZSAiRG9jdW1lbnRM
b2FkZXIuaCIKICNpbmNsdWRlICJEb2N1bWVudExvYWRlckd0ay5oIgogI2luY2x1ZGUgIkZvcm1T
dGF0ZS5oIgpAQCAtNjk2LDkgKzY5NywxMCBAQCB2b2lkIEZyYW1lTG9hZGVyQ2xpZW50OjpyZWdp
c3RlckZvckljb25Ob3RpZmljYXRpb24oYm9vbCBzaG91bGRSZWdpc3RlcikKICAgICBub3RJbXBs
ZW1lbnRlZCgpOwogfQogCi12b2lkIEZyYW1lTG9hZGVyQ2xpZW50OjpzZXRNYWluRnJhbWVEb2N1
bWVudFJlYWR5KGJvb2wpCit2b2lkIEZyYW1lTG9hZGVyQ2xpZW50OjpzZXRNYWluRnJhbWVEb2N1
bWVudFJlYWR5KGJvb2wgcmVhZHkpCiB7Ci0gICAgLy8gdGhpcyBpcyBvbmx5IGludGVyZXN0aW5n
IG9uY2Ugd2UgcHJvdmlkZSBhbiBleHRlcm5hbCBBUEkgZm9yIHRoZSBET00KKyAgICBpZiAoIXJl
YWR5KQorICAgICAgICBET01PYmplY3RDYWNoZTo6Y2xlYXJCeUZyYW1lKGNvcmUobV9mcmFtZSkp
OwogfQogCiBib29sIEZyYW1lTG9hZGVyQ2xpZW50OjpoYXNXZWJWaWV3KCkgY29uc3QKZGlmZiAt
LWdpdCBhL1dlYktpdC9ndGsvdGVzdHMvdGVzdGRvbWRvY3VtZW50LmMgYi9XZWJLaXQvZ3RrL3Rl
c3RzL3Rlc3Rkb21kb2N1bWVudC5jCmluZGV4IGVjMmY1NzkuLmIyNTFiOTYgMTAwNjQ0Ci0tLSBh
L1dlYktpdC9ndGsvdGVzdHMvdGVzdGRvbWRvY3VtZW50LmMKKysrIGIvV2ViS2l0L2d0ay90ZXN0
cy90ZXN0ZG9tZG9jdW1lbnQuYwpAQCAtMzAsNyArMzAsOCBAQAogI2RlZmluZSBIVE1MX0RPQ1VN
RU5UX0VMRU1FTlRTICI8aHRtbD48Ym9keT48dWw+PGxpPjE8L2xpPjxsaT4yPC9saT48bGk+Mzwv
bGk+PC91bD48L2JvZHk+PC9odG1sPiIKICNkZWZpbmUgSFRNTF9ET0NVTUVOVF9FTEVNRU5UU19D
TEFTUyAiPGh0bWw+PGJvZHk+PGRpdiBjbGFzcz1cInRlc3RcIj48L2Rpdj48ZGl2IGNsYXNzPVwi
c3RyYW5nZVwiPjwvZGl2PjxkaXYgY2xhc3M9XCJ0ZXN0XCI+PC9kaXY+PC9ib2R5PjwvaHRtbD4i
CiAjZGVmaW5lIEhUTUxfRE9DVU1FTlRfRUxFTUVOVFNfSUQgIjxodG1sPjxib2R5PjxkaXYgaWQ9
XCJ0ZXN0b2tcIj48L2Rpdj48ZGl2IGlkPVwidGVzdGJhZFwiPmZpcnN0PC9kaXY+PGRpdiBpZD1c
InRlc3RiYWRcIj5zZWNvbmQ8L2Rpdj48L2JvZHk+PC9odG1sPiIKLSNkZWZpbmUgSFRNTF9ET0NV
TUVOVF9MSU5LUyAiPGh0bWw+PGJvZHk+PGEgaHJlZj1cImFib3V0OmJsYW5rXCI+Ymxhbms8L2E+
PGEgaHJlZj1cImh0dHA6Ly93d3cuZ29vZ2xlLmNvbVwiPmdvb2dsZTwvYT48YSBocmVmPVwiaHR0
cDovL3d3dy53ZWJraXQub3JnXCI+d2Via2l0PC9hPjwvYm9keT48L2h0bWw+IgorI2RlZmluZSBI
VE1MX0RPQ1VNRU5UX0xJTktTICI8aHRtbD48aGVhZD48dGl0bGU+VGl0bGU8L3RpdGxlPjwvaGVh
ZD48Ym9keT48YSBocmVmPVwiYWJvdXQ6YmxhbmtcIj5ibGFuazwvYT48YSBocmVmPVwiaHR0cDov
L3d3dy5nb29nbGUuY29tXCI+Z29vZ2xlPC9hPjxhIGhyZWY9XCJodHRwOi8vd3d3LndlYmtpdC5v
cmdcIj53ZWJraXQ8L2E+PC9ib2R5PjwvaHRtbD4iCisjZGVmaW5lIEhUTUxfRE9DVU1FTlRfSUZS
QU1FICI8aHRtbD48aGVhZD48dGl0bGU+SUZyYW1lPC90aXRsZT48L2hlYWQ+PGJvZHk+PGlmcmFt
ZSBpZD0naWZyYW1lJz48L2lmcmFtZT48ZGl2IGlkPSd0ZXN0Jz48L2Rpdj48L2JvZHk+PC9odG1s
PiIKIAogdHlwZWRlZiBzdHJ1Y3QgewogICAgIEd0a1dpZGdldCogd2ViVmlldzsKQEAgLTYwLDcg
KzYxLDggQEAgc3RhdGljIHZvaWQgZG9tX2RvY3VtZW50X2ZpeHR1cmVfc2V0dXAoRG9tRG9jdW1l
bnRGaXh0dXJlKiBmaXh0dXJlLCBnY29uc3Rwb2ludGUKIAogc3RhdGljIHZvaWQgZG9tX2RvY3Vt
ZW50X2ZpeHR1cmVfdGVhcmRvd24oRG9tRG9jdW1lbnRGaXh0dXJlKiBmaXh0dXJlLCBnY29uc3Rw
b2ludGVyIGRhdGEpCiB7Ci0gICAgZ19vYmplY3RfdW5yZWYoZml4dHVyZS0+d2ViVmlldyk7Cisg
ICAgaWYgKGZpeHR1cmUtPndlYlZpZXcpCisgICAgICAgIGdfb2JqZWN0X3VucmVmKGZpeHR1cmUt
PndlYlZpZXcpOwogICAgIGdfbWFpbl9sb29wX3VucmVmKGZpeHR1cmUtPmxvb3ApOwogfQogCkBA
IC0xMDcsNiArMTA5LDggQEAgc3RhdGljIHZvaWQgdGVzdF9kb21fZG9jdW1lbnRfZ2V0X2VsZW1l
bnRzX2J5X3RhZ19uYW1lKERvbURvY3VtZW50Rml4dHVyZSogZml4dHUKICAgICAgICAgZ19hc3Nl
cnRfY21wc3RyKHdlYmtpdF9kb21faHRtbF9lbGVtZW50X2dldF9pbm5lcl90ZXh0KGh0bWxFbGVt
ZW50KSwgPT0sIG4pOwogICAgICAgICBnX2ZyZWUobik7CiAgICAgfQorCisgICAgZ19vYmplY3Rf
dW5yZWYobGlzdCk7CiB9CiAKIHN0YXRpYyB2b2lkIHRlc3RfZG9tX2RvY3VtZW50X2dldF9lbGVt
ZW50c19ieV9jbGFzc19uYW1lKERvbURvY3VtZW50Rml4dHVyZSogZml4dHVyZSwgZ2NvbnN0cG9p
bnRlciBkYXRhKQpAQCAtMTMwLDYgKzEzNCw4IEBAIHN0YXRpYyB2b2lkIHRlc3RfZG9tX2RvY3Vt
ZW50X2dldF9lbGVtZW50c19ieV9jbGFzc19uYW1lKERvbURvY3VtZW50Rml4dHVyZSogZml4CiAg
ICAgICAgIGdfYXNzZXJ0KGVsZW1lbnQpOwogICAgICAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0
X2RvbV9lbGVtZW50X2dldF90YWdfbmFtZShlbGVtZW50KSwgPT0sICJESVYiKTsKICAgICB9CisK
KyAgICBnX29iamVjdF91bnJlZihsaXN0KTsKIH0KIAogc3RhdGljIHZvaWQgdGVzdF9kb21fZG9j
dW1lbnRfZ2V0X2VsZW1lbnRfYnlfaWQoRG9tRG9jdW1lbnRGaXh0dXJlKiBmaXh0dXJlLCBnY29u
c3Rwb2ludGVyIGRhdGEpCkBAIC0xNzgsNiArMTg0LDEzOCBAQCBzdGF0aWMgdm9pZCB0ZXN0X2Rv
bV9kb2N1bWVudF9nZXRfbGlua3MoRG9tRG9jdW1lbnRGaXh0dXJlKiBmaXh0dXJlLCBnY29uc3Rw
b2ludAogICAgICAgICBXZWJLaXRET01IVE1MQW5jaG9yRWxlbWVudCAqYW5jaG9yID0gKFdlYktp
dERPTUhUTUxBbmNob3JFbGVtZW50KillbGVtZW50OwogICAgICAgICBnX2Fzc2VydF9jbXBzdHIo
d2Via2l0X2RvbV9odG1sX2FuY2hvcl9lbGVtZW50X2dldF9ocmVmKGFuY2hvciksID09LCB1cmlz
W2ldKTsKICAgICB9CisgICAgZ19vYmplY3RfdW5yZWYoY29sbGVjdGlvbik7Cit9CisKK3N0YXRp
YyB2b2lkIHdlYWtfbm90aWZ5KGdwb2ludGVyIGRhdGEsIEdPYmplY3QqIHpvbWJpZSkKK3sKKyAg
ICBndWludCogY291bnQgPSAoZ3VpbnQqKWRhdGE7CisgICAgKCpjb3VudCkrKzsKK30KKworc3Rh
dGljIHZvaWQgdGVzdF9kb21fZG9jdW1lbnRfZ2FyYmFnZV9jb2xsZWN0aW9uKERvbURvY3VtZW50
Rml4dHVyZSogZml4dHVyZSwgZ2NvbnN0cG9pbnRlciBkYXRhKQoreworICAgIGd1aW50IGNvdW50
ID0gMDsKKyAgICBnX2Fzc2VydChmaXh0dXJlKTsKKyAgICBXZWJLaXRXZWJWaWV3KiB2aWV3ID0g
KFdlYktpdFdlYlZpZXcqKWZpeHR1cmUtPndlYlZpZXc7CisgICAgZ19hc3NlcnQodmlldyk7Cisg
ICAgV2ViS2l0RE9NRG9jdW1lbnQqIGRvY3VtZW50ID0gd2Via2l0X3dlYl92aWV3X2dldF9kb21f
ZG9jdW1lbnQodmlldyk7CisgICAgZ19hc3NlcnQoZG9jdW1lbnQpOworICAgIGdfb2JqZWN0X3dl
YWtfcmVmKEdfT0JKRUNUKGRvY3VtZW50KSwgKEdXZWFrTm90aWZ5KXdlYWtfbm90aWZ5LCAmY291
bnQpOworICAgIFdlYktpdERPTUhUTUxIZWFkRWxlbWVudCogaGVhZCA9IHdlYmtpdF9kb21fZG9j
dW1lbnRfZ2V0X2hlYWQoZG9jdW1lbnQpOworICAgIGdfYXNzZXJ0KGhlYWQpOworICAgIGdfb2Jq
ZWN0X3dlYWtfcmVmKEdfT0JKRUNUKGhlYWQpLCAoR1dlYWtOb3RpZnkpd2Vha19ub3RpZnksICZj
b3VudCk7CisgICAgV2ViS2l0RE9NSFRNTEVsZW1lbnQqIGJvZHkgPSB3ZWJraXRfZG9tX2RvY3Vt
ZW50X2dldF9ib2R5KGRvY3VtZW50KTsKKyAgICBnX2Fzc2VydChib2R5KTsKKyAgICBnX29iamVj
dF93ZWFrX3JlZihHX09CSkVDVChib2R5KSwgKEdXZWFrTm90aWZ5KXdlYWtfbm90aWZ5LCAmY291
bnQpOworICAgIFdlYktpdERPTUhUTUxDb2xsZWN0aW9uICpjb2xsZWN0aW9uID0gd2Via2l0X2Rv
bV9kb2N1bWVudF9nZXRfbGlua3MoZG9jdW1lbnQpOworICAgIGdfYXNzZXJ0KGNvbGxlY3Rpb24p
OworICAgIGdfb2JqZWN0X3dlYWtfcmVmKEdfT0JKRUNUKGNvbGxlY3Rpb24pLCAoR1dlYWtOb3Rp
Znkpd2Vha19ub3RpZnksICZjb3VudCk7CisKKyAgICB3ZWJraXRfd2ViX3ZpZXdfbG9hZF9zdHJp
bmcoV0VCS0lUX1dFQl9WSUVXKHZpZXcpLCBIVE1MX0RPQ1VNRU5UX0xJTktTLCBOVUxMLCBOVUxM
LCBOVUxMKTsKKworICAgIHdoaWxlIChnX21haW5fY29udGV4dF9wZW5kaW5nKE5VTEwpKQorICAg
ICAgICBnX21haW5fY29udGV4dF9pdGVyYXRpb24oTlVMTCwgRkFMU0UpOworCisgICAgZ19hc3Nl
cnRfY21wdWludChjb3VudCwgPT0sIDMpOworCisgICAgZ19vYmplY3RfdW5yZWYoY29sbGVjdGlv
bik7CisgICAgZ19hc3NlcnRfY21wdWludChjb3VudCwgPT0sIDQpOworCisgICAgY291bnQgPSAw
OworCisgICAgZG9jdW1lbnQgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X2RvbV9kb2N1bWVudCh2aWV3
KTsKKyAgICBnX2Fzc2VydChkb2N1bWVudCk7CisgICAgZ19vYmplY3Rfd2Vha19yZWYoR19PQkpF
Q1QoZG9jdW1lbnQpLCAoR1dlYWtOb3RpZnkpd2Vha19ub3RpZnksICZjb3VudCk7CisgICAgaGVh
ZCA9IHdlYmtpdF9kb21fZG9jdW1lbnRfZ2V0X2hlYWQoZG9jdW1lbnQpOworICAgIGdfYXNzZXJ0
KGhlYWQpOworICAgIGdfb2JqZWN0X3dlYWtfcmVmKEdfT0JKRUNUKGhlYWQpLCAoR1dlYWtOb3Rp
Znkpd2Vha19ub3RpZnksICZjb3VudCk7CisgICAgYm9keSA9IHdlYmtpdF9kb21fZG9jdW1lbnRf
Z2V0X2JvZHkoZG9jdW1lbnQpOworICAgIGdfYXNzZXJ0KGJvZHkpOworICAgIGdfb2JqZWN0X3dl
YWtfcmVmKEdfT0JKRUNUKGJvZHkpLCAoR1dlYWtOb3RpZnkpd2Vha19ub3RpZnksICZjb3VudCk7
CisgICAgY29sbGVjdGlvbiA9IHdlYmtpdF9kb21fZG9jdW1lbnRfZ2V0X2xpbmtzKGRvY3VtZW50
KTsKKyAgICBnX2Fzc2VydChjb2xsZWN0aW9uKTsKKyAgICBnX29iamVjdF93ZWFrX3JlZihHX09C
SkVDVChjb2xsZWN0aW9uKSwgKEdXZWFrTm90aWZ5KXdlYWtfbm90aWZ5LCAmY291bnQpOworICAg
IC8qIEFzayB0d2ljZSBmb3IgdGhlIHNhbWUgb2JqZWN0ICovCisgICAgV2ViS2l0RE9NSFRNTENv
bGxlY3Rpb24qIGNvbGxlY3Rpb24yID0gd2Via2l0X2RvbV9kb2N1bWVudF9nZXRfbGlua3MoZG9j
dW1lbnQpOworICAgIGdfYXNzZXJ0KGNvbGxlY3Rpb24yKTsKKyAgICBnX29iamVjdF93ZWFrX3Jl
ZihHX09CSkVDVChjb2xsZWN0aW9uMiksIChHV2Vha05vdGlmeSl3ZWFrX25vdGlmeSwgJmNvdW50
KTsKKworICAgIGdfb2JqZWN0X3VucmVmKGRvY3VtZW50KTsKKyAgICBnX29iamVjdF91bnJlZiho
ZWFkKTsKKyAgICBnX29iamVjdF91bnJlZihib2R5KTsKKyAgICBnX29iamVjdF91bnJlZihjb2xs
ZWN0aW9uKTsKKyAgICBnX29iamVjdF91bnJlZihjb2xsZWN0aW9uMik7CisKKyAgICBnX2Fzc2Vy
dF9jbXB1aW50KGNvdW50LCA9PSwgNSk7CisKKyAgICB3ZWJraXRfd2ViX3ZpZXdfbG9hZF9zdHJp
bmcoV0VCS0lUX1dFQl9WSUVXKHZpZXcpLCBIVE1MX0RPQ1VNRU5UX0lGUkFNRSwgTlVMTCwgTlVM
TCwgTlVMTCk7CisKKyAgICB3aGlsZSAoZ19tYWluX2NvbnRleHRfcGVuZGluZyhOVUxMKSkKKyAg
ICAgICAgZ19tYWluX2NvbnRleHRfaXRlcmF0aW9uKE5VTEwsIEZBTFNFKTsKKworICAgIGNvdW50
ID0gMDsKKworICAgIGRvY3VtZW50ID0gd2Via2l0X3dlYl92aWV3X2dldF9kb21fZG9jdW1lbnQo
dmlldyk7CisgICAgV2ViS2l0RE9NRWxlbWVudCogZGl2ID0gd2Via2l0X2RvbV9kb2N1bWVudF9n
ZXRfZWxlbWVudF9ieV9pZChkb2N1bWVudCwgInRlc3QiKTsKKyAgICBnX2Fzc2VydChkaXYpOwor
ICAgIGdfb2JqZWN0X3dlYWtfcmVmKEdfT0JKRUNUKGRpdiksIChHV2Vha05vdGlmeSl3ZWFrX25v
dGlmeSwgJmNvdW50KTsKKyAgICBXZWJLaXRET01FbGVtZW50KiBpZnJhbWUgPSB3ZWJraXRfZG9t
X2RvY3VtZW50X2dldF9lbGVtZW50X2J5X2lkKGRvY3VtZW50LCAiaWZyYW1lIik7CisgICAgZ19h
c3NlcnQoaWZyYW1lKTsKKworICAgIC8qIEZJWE1FOiBJRnJhbWUgQVBJcyBoYXZlIHRoZSAnaScg
aW4gdGhlIHdyb25nIHBsYWNlICovCisgICAgd2Via2l0X2RvbV9lbGVtZW50X3NldF9hdHRyaWJ1
dGUoaWZyYW1lLCAic3JjIiwgImRhdGE6PGh0bWw+PGhlYWQ+PC9oZWFkPjwvaHRtbD4iLCBOVUxM
KTsKKworICAgIHdoaWxlIChnX21haW5fY29udGV4dF9wZW5kaW5nKE5VTEwpKQorICAgICAgICBn
X21haW5fY29udGV4dF9pdGVyYXRpb24oTlVMTCwgRkFMU0UpOworCisgICAgV2ViS2l0RE9NRG9j
dW1lbnQqIGlmcmFtZURvY3VtZW50ID0gd2Via2l0X2RvbV9odG1saV9mcmFtZV9lbGVtZW50X2dl
dF9jb250ZW50X2RvY3VtZW50KFdFQktJVF9ET01fSFRNTElfRlJBTUVfRUxFTUVOVChpZnJhbWUp
KTsKKyAgICBnX2Fzc2VydChpZnJhbWVEb2N1bWVudCk7CisgICAgaGVhZCA9IHdlYmtpdF9kb21f
ZG9jdW1lbnRfZ2V0X2hlYWQoaWZyYW1lRG9jdW1lbnQpOworICAgIGdfYXNzZXJ0KGhlYWQpOwor
ICAgIGdfb2JqZWN0X3dlYWtfcmVmKEdfT0JKRUNUKGhlYWQpLCAoR1dlYWtOb3RpZnkpd2Vha19u
b3RpZnksICZjb3VudCk7CisKKyAgICB3ZWJraXRfZG9tX2VsZW1lbnRfc2V0X2F0dHJpYnV0ZShp
ZnJhbWUsICJzcmMiLCAiYWJvdXQ6YmxhbmsiLCBOVUxMKTsKKworICAgIHdoaWxlIChnX21haW5f
Y29udGV4dF9wZW5kaW5nKE5VTEwpKQorICAgICAgICBnX21haW5fY29udGV4dF9pdGVyYXRpb24o
TlVMTCwgRkFMU0UpOworCisgICAgZ19hc3NlcnRfY21wdWludChjb3VudCwgPT0sIDEpOworCisg
ICAgd2Via2l0X3dlYl92aWV3X2xvYWRfc3RyaW5nKFdFQktJVF9XRUJfVklFVyh2aWV3KSwgSFRN
TF9ET0NVTUVOVF9MSU5LUywgTlVMTCwgTlVMTCwgTlVMTCk7CisKKyAgICB3aGlsZSAoZ19tYWlu
X2NvbnRleHRfcGVuZGluZyhOVUxMKSkKKyAgICAgICAgZ19tYWluX2NvbnRleHRfaXRlcmF0aW9u
KE5VTEwsIEZBTFNFKTsKKworICAgIGdfYXNzZXJ0X2NtcHVpbnQoY291bnQsID09LCAyKTsKKwor
ICAgIGNvdW50ID0gMDsKKworICAgIGRvY3VtZW50ID0gd2Via2l0X3dlYl92aWV3X2dldF9kb21f
ZG9jdW1lbnQodmlldyk7CisgICAgZ19hc3NlcnQoZG9jdW1lbnQpOworICAgIGdfb2JqZWN0X3dl
YWtfcmVmKEdfT0JKRUNUKGRvY3VtZW50KSwgKEdXZWFrTm90aWZ5KXdlYWtfbm90aWZ5LCAmY291
bnQpOworICAgIC8qIEFzayB0d2ljZSBmb3IgdGhlIERvY3VtZW50ICovCisgICAgV2ViS2l0RE9N
RG9jdW1lbnQqIGRvY3VtZW50MiA9IHdlYmtpdF93ZWJfdmlld19nZXRfZG9tX2RvY3VtZW50KHZp
ZXcpOworICAgIGdfYXNzZXJ0KGRvY3VtZW50Mik7CisgICAgZ19vYmplY3Rfd2Vha19yZWYoR19P
QkpFQ1QoZG9jdW1lbnQyKSwgKEdXZWFrTm90aWZ5KXdlYWtfbm90aWZ5LCAmY291bnQpOworICAg
IGhlYWQgPSB3ZWJraXRfZG9tX2RvY3VtZW50X2dldF9oZWFkKGRvY3VtZW50KTsKKyAgICBnX2Fz
c2VydChoZWFkKTsKKyAgICBnX29iamVjdF93ZWFrX3JlZihHX09CSkVDVChoZWFkKSwgKEdXZWFr
Tm90aWZ5KXdlYWtfbm90aWZ5LCAmY291bnQpOworICAgIGJvZHkgPSB3ZWJraXRfZG9tX2RvY3Vt
ZW50X2dldF9ib2R5KGRvY3VtZW50KTsKKyAgICBnX2Fzc2VydChib2R5KTsKKyAgICBnX29iamVj
dF93ZWFrX3JlZihHX09CSkVDVChib2R5KSwgKEdXZWFrTm90aWZ5KXdlYWtfbm90aWZ5LCAmY291
bnQpOworICAgIGNvbGxlY3Rpb24gPSB3ZWJraXRfZG9tX2RvY3VtZW50X2dldF9saW5rcyhkb2N1
bWVudCk7CisgICAgZ19hc3NlcnQoY29sbGVjdGlvbik7CisgICAgZ19vYmplY3Rfd2Vha19yZWYo
R19PQkpFQ1QoY29sbGVjdGlvbiksIChHV2Vha05vdGlmeSl3ZWFrX25vdGlmeSwgJmNvdW50KTsK
KworICAgIGd0a193aWRnZXRfZGVzdHJveShmaXh0dXJlLT53ZWJWaWV3KTsKKyAgICBmaXh0dXJl
LT53ZWJWaWV3ID0gTlVMTDsKKworICAgIGdfYXNzZXJ0X2NtcHVpbnQoY291bnQsID09LCA0KTsK
KworICAgIGdfb2JqZWN0X3VucmVmKGNvbGxlY3Rpb24pOworCisgICAgZ19hc3NlcnRfY21wdWlu
dChjb3VudCwgPT0sIDUpOwogfQogCiBpbnQgbWFpbihpbnQgYXJnYywgY2hhcioqIGFyZ3YpCkBA
IC0xODcsNiArMzI1LDggQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIqKiBhcmd2KQogCiAgICAg
Z3RrX3Rlc3RfaW5pdCgmYXJnYywgJmFyZ3YsIE5VTEwpOwogCisgICAgdGVzdHV0aWxzX3JlbGF0
aXZlX2NoZGlyKCJXZWJLaXQvZ3RrL3Rlc3RzL3Jlc291cmNlcy9pZnJhbWVkb2N1bWVudC5odG1s
IiwgYXJndlswXSk7CisKICAgICBnX3Rlc3RfYnVnX2Jhc2UoImh0dHBzOi8vYnVncy53ZWJraXQu
b3JnLyIpOwogCiAgICAgZ190ZXN0X2FkZCgiL3dlYmtpdC9kb21kb2N1bWVudC90ZXN0X3RpdGxl
IiwKQEAgLTIxOSw2ICszNTksMTIgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIqKiBhcmd2KQog
ICAgICAgICAgICAgICAgdGVzdF9kb21fZG9jdW1lbnRfZ2V0X2xpbmtzLAogICAgICAgICAgICAg
ICAgZG9tX2RvY3VtZW50X2ZpeHR1cmVfdGVhcmRvd24pOwogCisgICAgZ190ZXN0X2FkZCgiL3dl
YmtpdC9kb21kb2N1bWVudC90ZXN0X2dhcmJhZ2VfY29sbGVjdGlvbiIsCisgICAgICAgICAgICAg
ICBEb21Eb2N1bWVudEZpeHR1cmUsIEhUTUxfRE9DVU1FTlRfTElOS1MsCisgICAgICAgICAgICAg
ICBkb21fZG9jdW1lbnRfZml4dHVyZV9zZXR1cCwKKyAgICAgICAgICAgICAgIHRlc3RfZG9tX2Rv
Y3VtZW50X2dhcmJhZ2VfY29sbGVjdGlvbiwKKyAgICAgICAgICAgICAgIGRvbV9kb2N1bWVudF9m
aXh0dXJlX3RlYXJkb3duKTsKKwogICAgIHJldHVybiBnX3Rlc3RfcnVuKCk7CiB9CiAKZGlmZiAt
LWdpdCBhL1dlYktpdC9ndGsvdGVzdHMvdGVzdGRvbW5vZGUuYyBiL1dlYktpdC9ndGsvdGVzdHMv
dGVzdGRvbW5vZGUuYwppbmRleCBjNjA1NmQ2Li43ZDYyNzIwIDEwMDY0NAotLS0gYS9XZWJLaXQv
Z3RrL3Rlc3RzL3Rlc3Rkb21ub2RlLmMKKysrIGIvV2ViS2l0L2d0ay90ZXN0cy90ZXN0ZG9tbm9k
ZS5jCkBAIC04NCw2ICs4NCw3IEBAIHN0YXRpYyB2b2lkIHRlc3RfZG9tX25vZGVfaGllcmFyY2h5
X25hdmlnYXRpb24oRG9tTm9kZUZpeHR1cmUqIGZpeHR1cmUsIGdjb25zdHBvCiAgICAgcHRyID0g
d2Via2l0X2RvbV9ub2RlX2xpc3RfaXRlbShsaXN0LCAwKTsKICAgICBnX2Fzc2VydChwdHIpOwog
ICAgIGdfYXNzZXJ0KFdFQktJVF9ET01fSVNfSFRNTF9USVRMRV9FTEVNRU5UKHB0cikpOworICAg
IGdfb2JqZWN0X3VucmVmKGxpc3QpOwogCiAgICAgLyogQm9keSwgSGVhZCBzaWJsaW5nICovCiAg
ICAgcHRyID0gd2Via2l0X2RvbV9ub2RlX2dldF9uZXh0X3NpYmxpbmcoV0VCS0lUX0RPTV9OT0RF
KGhlYWQpKTsKQEAgLTExOCw2ICsxMTksNyBAQCBzdGF0aWMgdm9pZCB0ZXN0X2RvbV9ub2RlX2hp
ZXJhcmNoeV9uYXZpZ2F0aW9uKERvbU5vZGVGaXh0dXJlKiBmaXh0dXJlLCBnY29uc3RwbwogICAg
ICAgICAvKiBOb3RoaW5nICovOwogCiAgICAgZ19hc3NlcnRfY21waW50KGksID09LCAzKTsKKyAg
ICBnX29iamVjdF91bnJlZihsaXN0KTsKIH0KIAogc3RhdGljIHZvaWQgdGVzdF9kb21fbm9kZV9p
bnNlcnRpb24oRG9tTm9kZUZpeHR1cmUqIGZpeHR1cmUsIGdjb25zdHBvaW50ZXIgZGF0YSkKQEAg
LTE0OCw2ICsxNTAsNyBAQCBzdGF0aWMgdm9pZCB0ZXN0X2RvbV9ub2RlX2luc2VydGlvbihEb21O
b2RlRml4dHVyZSogZml4dHVyZSwgZ2NvbnN0cG9pbnRlciBkYXRhKQogICAgIG5vZGUgPSB3ZWJr
aXRfZG9tX25vZGVfbGlzdF9pdGVtKGxpc3QsIDApOwogICAgIGdfYXNzZXJ0KG5vZGUpOwogICAg
IGdfYXNzZXJ0KHdlYmtpdF9kb21fbm9kZV9pc19zYW1lX25vZGUoV0VCS0lUX0RPTV9OT0RFKHAp
LCBub2RlKSk7CisgICAgZ19vYmplY3RfdW5yZWYobGlzdCk7CiAKICAgICAvKiBSZXBsYWNlIHRo
ZSBQIHRhZyB3aXRoIGEgRElWIHRhZyAqLwogICAgIGRpdiA9IHdlYmtpdF9kb21fZG9jdW1lbnRf
Y3JlYXRlX2VsZW1lbnQoZG9jdW1lbnQsICJESVYiLCBOVUxMKTsKQEAgLTE1OCwxMSArMTYxLDEz
IEBAIHN0YXRpYyB2b2lkIHRlc3RfZG9tX25vZGVfaW5zZXJ0aW9uKERvbU5vZGVGaXh0dXJlKiBm
aXh0dXJlLCBnY29uc3Rwb2ludGVyIGRhdGEpCiAgICAgbm9kZSA9IHdlYmtpdF9kb21fbm9kZV9s
aXN0X2l0ZW0obGlzdCwgMCk7CiAgICAgZ19hc3NlcnQobm9kZSk7CiAgICAgZ19hc3NlcnQod2Vi
a2l0X2RvbV9ub2RlX2lzX3NhbWVfbm9kZShXRUJLSVRfRE9NX05PREUoZGl2KSwgbm9kZSkpOwor
ICAgIGdfb2JqZWN0X3VucmVmKGxpc3QpOwogCiAgICAgLyogTm93IHJlbW92ZSB0aGUgdGFnICov
CiAgICAgd2Via2l0X2RvbV9ub2RlX3JlbW92ZV9jaGlsZChXRUJLSVRfRE9NX05PREUoYm9keSks
IG5vZGUsIE5VTEwpOwogICAgIGxpc3QgPSB3ZWJraXRfZG9tX25vZGVfZ2V0X2NoaWxkX25vZGVz
KFdFQktJVF9ET01fTk9ERShib2R5KSk7CiAgICAgZ19hc3NlcnRfY21waW50KHdlYmtpdF9kb21f
bm9kZV9saXN0X2dldF9sZW5ndGgobGlzdCksID09LCAwKTsKKyAgICBnX29iamVjdF91bnJlZihs
aXN0KTsKIAogICAgIC8qIFRPRE86IGluc2VydF9iZWZvcmUsIHdoaWNoIGRvZXMgbm90IHNlZW0g
dG8gYmUgd29ya2luZyBjb3JyZWN0bHkgKi8KIH0KZGlmZiAtLWdpdCBhL1dlYktpdC9ndGsvd2Vi
a2l0L3dlYmtpdGhpdHRlc3RyZXN1bHQuY3BwIGIvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0aGl0
dGVzdHJlc3VsdC5jcHAKaW5kZXggODYyZDk0YS4uMWU2ZmUzMyAxMDA2NDQKLS0tIGEvV2ViS2l0
L2d0ay93ZWJraXQvd2Via2l0aGl0dGVzdHJlc3VsdC5jcHAKKysrIGIvV2ViS2l0L2d0ay93ZWJr
aXQvd2Via2l0aGl0dGVzdHJlc3VsdC5jcHAKQEAgLTcxLDYgKzcxLDE1IEBAIHN0YXRpYyB2b2lk
IHdlYmtpdF9oaXRfdGVzdF9yZXN1bHRfZmluYWxpemUoR09iamVjdCogb2JqZWN0KQogICAgIEdf
T0JKRUNUX0NMQVNTKHdlYmtpdF9oaXRfdGVzdF9yZXN1bHRfcGFyZW50X2NsYXNzKS0+ZmluYWxp
emUob2JqZWN0KTsKIH0KIAorc3RhdGljIHZvaWQgd2Via2l0X2hpdF90ZXN0X3Jlc3VsdF9kaXNw
b3NlKEdPYmplY3QqIG9iamVjdCkKK3sKKyAgICBXZWJLaXRIaXRUZXN0UmVzdWx0UHJpdmF0ZSog
cHJpdiA9IFdFQktJVF9ISVRfVEVTVF9SRVNVTFQob2JqZWN0KS0+cHJpdjsKKworICAgIGdfb2Jq
ZWN0X3VucmVmKHByaXYtPmlubmVyTm9kZSk7CisKKyAgICBHX09CSkVDVF9DTEFTUyh3ZWJraXRf
aGl0X3Rlc3RfcmVzdWx0X3BhcmVudF9jbGFzcyktPmRpc3Bvc2Uob2JqZWN0KTsKK30KKwogc3Rh
dGljIHZvaWQgd2Via2l0X2hpdF90ZXN0X3Jlc3VsdF9nZXRfcHJvcGVydHkoR09iamVjdCogb2Jq
ZWN0LCBndWludCBwcm9wZXJ0eUlELCBHVmFsdWUqIHZhbHVlLCBHUGFyYW1TcGVjKiBwc3BlYykK
IHsKICAgICBXZWJLaXRIaXRUZXN0UmVzdWx0KiB3ZWJfaGl0X3Rlc3RfcmVzdWx0ID0gV0VCS0lU
X0hJVF9URVNUX1JFU1VMVChvYmplY3QpOwpAQCAtMTMxLDYgKzE0MCw3IEBAIHN0YXRpYyB2b2lk
IHdlYmtpdF9oaXRfdGVzdF9yZXN1bHRfY2xhc3NfaW5pdChXZWJLaXRIaXRUZXN0UmVzdWx0Q2xh
c3MqIHdlYkhpdFRlCiAgICAgR09iamVjdENsYXNzKiBvYmplY3RDbGFzcyA9IEdfT0JKRUNUX0NM
QVNTKHdlYkhpdFRlc3RSZXN1bHRDbGFzcyk7CiAKICAgICBvYmplY3RDbGFzcy0+ZmluYWxpemUg
PSB3ZWJraXRfaGl0X3Rlc3RfcmVzdWx0X2ZpbmFsaXplOworICAgIG9iamVjdENsYXNzLT5kaXNw
b3NlID0gd2Via2l0X2hpdF90ZXN0X3Jlc3VsdF9kaXNwb3NlOwogICAgIG9iamVjdENsYXNzLT5n
ZXRfcHJvcGVydHkgPSB3ZWJraXRfaGl0X3Rlc3RfcmVzdWx0X2dldF9wcm9wZXJ0eTsKICAgICBv
YmplY3RDbGFzcy0+c2V0X3Byb3BlcnR5ID0gd2Via2l0X2hpdF90ZXN0X3Jlc3VsdF9zZXRfcHJv
cGVydHk7CiAKZGlmZiAtLWdpdCBhL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYmZyYW1lLmNw
cCBiL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYmZyYW1lLmNwcAppbmRleCA2M2EyNDEzLi5m
Y2I1MTk3IDEwMDY0NAotLS0gYS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJmcmFtZS5jcHAK
KysrIGIvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2ViZnJhbWUuY3BwCkBAIC0zNSw2ICszNSw3
IEBACiAjaW5jbHVkZSAiQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJBdGsuaCIKICNpbmNsdWRl
ICJBbmltYXRpb25Db250cm9sbGVyLmgiCiAjaW5jbHVkZSAiQVhPYmplY3RDYWNoZS5oIgorI2lu
Y2x1ZGUgIkRPTU9iamVjdENhY2hlLmgiCiAjaW5jbHVkZSAiRG9jdW1lbnRMb2FkZXIuaCIKICNp
bmNsdWRlICJEb2N1bWVudExvYWRlckd0ay5oIgogI2luY2x1ZGUgIkZyYW1lTG9hZGVyLmgiCkBA
IC0xNDYsNyArMTQ3LDEwIEBAIHN0YXRpYyB2b2lkIHdlYmtpdF93ZWJfZnJhbWVfZ2V0X3Byb3Bl
cnR5KEdPYmplY3QqIG9iamVjdCwgZ3VpbnQgcHJvcF9pZCwgR1ZhbHVlCiB2b2lkIHdlYmtpdF93
ZWJfZnJhbWVfY29yZV9mcmFtZV9nb25lKFdlYktpdFdlYkZyYW1lKiBmcmFtZSkKIHsKICAgICBB
U1NFUlQoV0VCS0lUX0lTX1dFQl9GUkFNRShmcmFtZSkpOwotICAgIGZyYW1lLT5wcml2LT5jb3Jl
RnJhbWUgPSAwOworICAgIFdlYktpdFdlYkZyYW1lUHJpdmF0ZSogcHJpdiA9IGZyYW1lLT5wcml2
OworICAgIGlmIChwcml2LT5jb3JlRnJhbWUpCisgICAgICAgIERPTU9iamVjdENhY2hlOjpjbGVh
ckJ5RnJhbWUocHJpdi0+Y29yZUZyYW1lKTsKKyAgICBwcml2LT5jb3JlRnJhbWUgPSAwOwogfQog
CiBzdGF0aWMgV2ViS2l0V2ViRGF0YVNvdXJjZSogd2Via2l0X3dlYl9mcmFtZV9nZXRfZGF0YV9z
b3VyY2VfZnJvbV9jb3JlX2xvYWRlcihXZWJDb3JlOjpEb2N1bWVudExvYWRlciogbG9hZGVyKQpA
QCAtMTYwLDYgKzE2NCw3IEBAIHN0YXRpYyB2b2lkIHdlYmtpdF93ZWJfZnJhbWVfZmluYWxpemUo
R09iamVjdCogb2JqZWN0KQogICAgIFdlYktpdFdlYkZyYW1lUHJpdmF0ZSogcHJpdiA9IGZyYW1l
LT5wcml2OwogCiAgICAgaWYgKHByaXYtPmNvcmVGcmFtZSkgeworICAgICAgICBET01PYmplY3RD
YWNoZTo6Y2xlYXJCeUZyYW1lKHByaXYtPmNvcmVGcmFtZSk7CiAgICAgICAgIHByaXYtPmNvcmVG
cmFtZS0+bG9hZGVyKCktPmNhbmNlbEFuZENsZWFyKCk7CiAgICAgICAgIHByaXYtPmNvcmVGcmFt
ZSA9IDA7CiAgICAgfQotLSAKMS43LjIuMwoK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>74460</attachid>
            <date>2010-11-19 19:42:26 -0800</date>
            <delta_ts>2010-11-19 19:49:18 -0800</delta_ts>
            <desc>domcache.diff</desc>
            <filename>domcache.diff</filename>
            <type>text/plain</type>
            <size>30775</size>
            <attacher name="Xan Lopez">xan.lopez</attacher>
            
              <data encoding="base64">RnJvbSAzNTE2YTNmNzc0ZDRhZjE2OTZmNzM0N2NmZDQyM2QyZWVlODdkNTNiIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBYYW4gTG9wZXogPHhsb3BlekBpZ2FsaWEuY29tPgpEYXRlOiBU
dWUsIDE2IE5vdiAyMDEwIDIwOjMxOjMzIC0wNTAwClN1YmplY3Q6IFtQQVRDSF0gV2ViQ29yZToK
CjIwMTAtMTEtMTkgIFhhbiBMb3BleiAgPHhsb3BlekBpZ2FsaWEuY29tPgoKICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KCiAgICAgICAgW0dUS10gTWVtb3J5IG1hbmFnYW1lbnQg
Zm9yIERPTSBHT2JqZWN0IHdyYXBwZXJzCiAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTQwMzAyCgogICAgICAgIEluaXRpYWwgYXR0ZW1wdCB0byBoYXZlIGEg
a2luZCBvZiBwb29yIG1hbidzIGdhcmJhZ2UgY29sbGVjdGlvbgogICAgICAgIGZvciBHT2JqZWN0
IERPTSBvYmplY3RzLiBXZSB0aWUgdGhlIG9iamVjdCdzIGxpZmVjeWNsZSB0byB0aGVpcgogICAg
ICAgIHBhcmVudCBGcmFtZSBhbmQvb3IgaXRzIGRvY3VtZW50OyB0aGF0IGlzLCBhbGwgb2JqZWN0
cyB3aWxsIGJlCiAgICAgICAgY29sbGVjdGVkIHdoZW4gdGhlaXIgcGFyZW50IGZyYW1lIGlzIGRl
c3Ryb3llZCBvciB3aGVuIHRoYXQgZnJhbWUKICAgICAgICB0cmFuc2l0aW9ucyB0byBhIG5ldyBk
b2N1bWVudC4gTWFudWFsIG1hbmFnZW1lbnQgKGNhbGxpbmcKICAgICAgICBnX29iamVjdF91bnJl
ZiBvbiB0aGVtKSBpcyBhbHNvIGFsbG93ZWQsIGFuZCBpcyByZXF1aXJlZCBmb3IKICAgICAgICBv
YmplY3RzIHRoYXQgYXJlIG5vdCBpbiB0aGUgRE9NIHRyZWUgKGVnIE5vZGVMaXN0cykuCgogICAg
ICAgICogR05VbWFrZWZpbGUuYW06CiAgICAgICAgKiBiaW5kaW5ncy9nb2JqZWN0L0RPTU9iamVj
dENhY2hlLmNwcDogQWRkZWQuCiAgICAgICAgKiBiaW5kaW5ncy9nb2JqZWN0L0RPTU9iamVjdENh
Y2hlLmg6IENvcGllZCBmcm9tIFdlYkNvcmUvYmluZGluZ3MvZ29iamVjdC9XZWJLaXRET01CaW5k
aW5nLmguCiAgICAgICAgKiBiaW5kaW5ncy9nb2JqZWN0L1dlYktpdERPTUJpbmRpbmcuY3BwOiBS
ZW1vdmUgdGhlIG9sZCBjYWNoZSBjb2RlLgogICAgICAgICogYmluZGluZ3MvZ29iamVjdC9XZWJL
aXRET01CaW5kaW5nLmg6IGRpdHRvLgogICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2Vu
ZXJhdG9yR09iamVjdC5wbTogaW5jbHVkZSB0aGUgbmV3IERPTU9iamVjdENhY2hlIGhlYWRlci4K
CldlYktpdC9ndGs6CgoyMDEwLTExLTE5ICBYYW4gTG9wZXogIDx4bG9wZXpAaWdhbGlhLmNvbT4K
CiAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCgogICAgICAgIFtHVEtdIE1lbW9y
eSBtYW5hZ2FtZW50IGZvciBET00gR09iamVjdCB3cmFwcGVycwogICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00MDMwMgoKICAgICAgICBJbml0aWFsIGF0dGVt
cHQgdG8gaGF2ZSBhIGtpbmQgb2YgcG9vciBtYW4ncyBnYXJiYWdlIGNvbGxlY3Rpb24KICAgICAg
ICBmb3IgR09iamVjdCBET00gb2JqZWN0cy4gV2UgdGllIHRoZSBvYmplY3QncyBsaWZlY3ljbGUg
dG8gdGhlaXIKICAgICAgICBwYXJlbnQgRnJhbWUgYW5kL29yIGl0cyBkb2N1bWVudDsgdGhhdCBp
cywgYWxsIG9iamVjdHMgd2lsbCBiZQogICAgICAgIGNvbGxlY3RlZCB3aGVuIHRoZWlyIHBhcmVu
dCBmcmFtZSBpcyBkZXN0cm95ZWQgb3Igd2hlbiB0aGF0IGZyYW1lCiAgICAgICAgdHJhbnNpdGlv
bnMgdG8gYSBuZXcgZG9jdW1lbnQuIE1hbnVhbCBtYW5hZ2VtZW50IChjYWxsaW5nCiAgICAgICAg
Z19vYmplY3RfdW5yZWYgb24gdGhlbSkgaXMgYWxzbyBhbGxvd2VkLCBhbmQgaXMgcmVxdWlyZWQg
Zm9yCiAgICAgICAgb2JqZWN0cyB0aGF0IGFyZSBub3QgaW4gdGhlIERPTSB0cmVlIChlZyBOb2Rl
TGlzdHMpLgoKICAgICAgICAqIEdOVW1ha2VmaWxlLmFtOiBhZGQgdGVzdHV0aWxzIGZpbGUgdG8g
dGVzdGRvbWRvY3VtZW50LmMKICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xp
ZW50R3RrLmNwcDoKICAgICAgICAoV2ViS2l0OjpGcmFtZUxvYWRlckNsaWVudDo6c2V0TWFpbkZy
YW1lRG9jdW1lbnRSZWFkeSk6IGNvbGxlY3QKICAgICAgICBET00gb2JqZWN0cyBvbiBkb2N1bWVu
dCB0cmFuc2l0aW9uLgogICAgICAgICogdGVzdHMvdGVzdGRvbWRvY3VtZW50LmM6CiAgICAgICAg
KGRvbV9kb2N1bWVudF9maXh0dXJlX3RlYXJkb3duKTogb25seSBkZXN0cm95IHRoZSB2aWV3IGlm
IGl0J3Mgbm90CiAgICAgICAgYWxyZWFkeSBkZXN0cm95ZWQsIHNpbmNlIHRoZSBuZXcgdGVzdCBk
ZXRyb3lzIGl0IG9uIGl0cyBvd24uCiAgICAgICAgKHRlc3RfZG9tX2RvY3VtZW50X2dldF9lbGVt
ZW50c19ieV90YWdfbmFtZSk6IG1hbnVhbGx5IHVucmVmIG5vZGUgbGlzdC4KICAgICAgICAodGVz
dF9kb21fZG9jdW1lbnRfZ2V0X2VsZW1lbnRzX2J5X2NsYXNzX25hbWUpOiBkaXR0by4KICAgICAg
ICAodGVzdF9kb21fZG9jdW1lbnRfZ2V0X2xpbmtzKTogZGl0dG8uCiAgICAgICAgKHRlc3RfZG9t
X2RvY3VtZW50X2dhcmJhZ2VfY29sbGVjdGlvbik6IHRlc3QgYWxsIHBvc3NpYmxlCiAgICAgICAg
c2NlbmFyaW9zIGZvciBET00gb2JqZWN0ICJnYXJiYWdlIGNvbGxlY3Rpb24iLgogICAgICAgICht
YWluKTogYWRkIG5ldyB0ZXN0LgogICAgICAgICogdGVzdHMvdGVzdGRvbW5vZGUuYzoKICAgICAg
ICAodGVzdF9kb21fbm9kZV9oaWVyYXJjaHlfbmF2aWdhdGlvbik6IG1hbnVhbGx5IHVucmVmIG5v
ZGUgbGlzdC4KICAgICAgICAodGVzdF9kb21fbm9kZV9pbnNlcnRpb24pOiBkaXR0by4KICAgICAg
ICAqIHdlYmtpdC93ZWJraXRoaXR0ZXN0cmVzdWx0LmNwcDoKICAgICAgICAod2Via2l0X2hpdF90
ZXN0X3Jlc3VsdF9kaXNwb3NlKTogdW5yZWYgdGhlIGlubmVyIG5vZGUgb24gZGlzcG9zZQogICAg
ICAgIG5vdyB0aGF0IHRoZSBtZW1vcnkgbWFuYWdlbWVudCBtb2RlbCBpcyBjbGFyaWZpZWQuCiAg
ICAgICAgKHdlYmtpdF9oaXRfdGVzdF9yZXN1bHRfY2xhc3NfaW5pdCk6IGhvb2sgZGlzcG9zZS4K
ICAgICAgICAqIHdlYmtpdC93ZWJraXR3ZWJmcmFtZS5jcHA6CiAgICAgICAgKHdlYmtpdF93ZWJf
ZnJhbWVfY29yZV9mcmFtZV9nb25lKTogY2xlYXIgRE9NIG9iamVjdHMgYXR0YWNoZWQgdG8gdGhp
cyBmcmFtZS4KICAgICAgICAod2Via2l0X3dlYl9mcmFtZV9maW5hbGl6ZSk6IGRpdHRvLgotLS0K
IFdlYkNvcmUvQ2hhbmdlTG9nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAy
MiArKysKIFdlYkNvcmUvR05VbWFrZWZpbGUuYW0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHwgICAgMiArCiBXZWJDb3JlL2JpbmRpbmdzL2dvYmplY3QvRE9NT2JqZWN0Q2FjaGUuY3BwICAg
ICAgICB8ICAxMzEgKysrKysrKysrKysrKysrKysKIFdlYkNvcmUvYmluZGluZ3MvZ29iamVjdC9E
T01PYmplY3RDYWNoZS5oICAgICAgICAgIHwgICAzOCArKysrKwogV2ViQ29yZS9iaW5kaW5ncy9n
b2JqZWN0L1dlYktpdERPTUJpbmRpbmcuY3BwICAgICAgfCAgIDI3ICstLS0tCiBXZWJDb3JlL2Jp
bmRpbmdzL2dvYmplY3QvV2ViS2l0RE9NQmluZGluZy5oICAgICAgICB8ICAgIDcgLQogV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JHT2JqZWN0LnBtICAgfCAgICAxICsKIFdl
YktpdC9ndGsvQ2hhbmdlTG9nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAzOSAr
KysrKwogV2ViS2l0L2d0ay9HTlVtYWtlZmlsZS5hbSAgICAgICAgICAgICAgICAgICAgICAgICAg
fCAgICAyICstCiBXZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50R3Rr
LmNwcCB8ICAgIDYgKy0KIFdlYktpdC9ndGsvdGVzdHMvdGVzdGRvbWRvY3VtZW50LmMgICAgICAg
ICAgICAgICAgIHwgIDE1MCArKysrKysrKysrKysrKysrKysrLQogV2ViS2l0L2d0ay90ZXN0cy90
ZXN0ZG9tbm9kZS5jICAgICAgICAgICAgICAgICAgICAgfCAgICA1ICsKIFdlYktpdC9ndGsvd2Vi
a2l0L3dlYmtpdGhpdHRlc3RyZXN1bHQuY3BwICAgICAgICAgIHwgICAxMCArKwogV2ViS2l0L2d0
ay93ZWJraXQvd2Via2l0d2ViZnJhbWUuY3BwICAgICAgICAgICAgICAgfCAgICA3ICstCiAxNCBm
aWxlcyBjaGFuZ2VkLCA0MDggaW5zZXJ0aW9ucygrKSwgMzkgZGVsZXRpb25zKC0pCiBjcmVhdGUg
bW9kZSAxMDA2NDQgV2ViQ29yZS9iaW5kaW5ncy9nb2JqZWN0L0RPTU9iamVjdENhY2hlLmNwcAog
Y3JlYXRlIG1vZGUgMTAwNjQ0IFdlYkNvcmUvYmluZGluZ3MvZ29iamVjdC9ET01PYmplY3RDYWNo
ZS5oCgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9DaGFuZ2VMb2cgYi9XZWJDb3JlL0NoYW5nZUxvZwpp
bmRleCA3ZWVjYmY0Li5kYWIxODFiIDEwMDY0NAotLS0gYS9XZWJDb3JlL0NoYW5nZUxvZworKysg
Yi9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI1IEBACisyMDEwLTExLTE5ICBYYW4gTG9w
ZXogIDx4bG9wZXpAaWdhbGlhLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBbR1RLXSBNZW1vcnkgbWFuYWdhbWVudCBmb3IgRE9NIEdPYmplY3Qg
d3JhcHBlcnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTQwMzAyCisKKyAgICAgICAgSW5pdGlhbCBhdHRlbXB0IHRvIGhhdmUgYSBraW5kIG9mIHBvb3Ig
bWFuJ3MgZ2FyYmFnZSBjb2xsZWN0aW9uCisgICAgICAgIGZvciBHT2JqZWN0IERPTSBvYmplY3Rz
LiBXZSB0aWUgdGhlIG9iamVjdCdzIGxpZmVjeWNsZSB0byB0aGVpcgorICAgICAgICBwYXJlbnQg
RnJhbWUgYW5kL29yIGl0cyBkb2N1bWVudDsgdGhhdCBpcywgYWxsIG9iamVjdHMgd2lsbCBiZQor
ICAgICAgICBjb2xsZWN0ZWQgd2hlbiB0aGVpciBwYXJlbnQgZnJhbWUgaXMgZGVzdHJveWVkIG9y
IHdoZW4gdGhhdCBmcmFtZQorICAgICAgICB0cmFuc2l0aW9ucyB0byBhIG5ldyBkb2N1bWVudC4g
TWFudWFsIG1hbmFnZW1lbnQgKGNhbGxpbmcKKyAgICAgICAgZ19vYmplY3RfdW5yZWYgb24gdGhl
bSkgaXMgYWxzbyBhbGxvd2VkLCBhbmQgaXMgcmVxdWlyZWQgZm9yCisgICAgICAgIG9iamVjdHMg
dGhhdCBhcmUgbm90IGluIHRoZSBET00gdHJlZSAoZWcgTm9kZUxpc3RzKS4KKworICAgICAgICAq
IEdOVW1ha2VmaWxlLmFtOgorICAgICAgICAqIGJpbmRpbmdzL2dvYmplY3QvRE9NT2JqZWN0Q2Fj
aGUuY3BwOiBBZGRlZC4KKyAgICAgICAgKiBiaW5kaW5ncy9nb2JqZWN0L0RPTU9iamVjdENhY2hl
Lmg6IENvcGllZCBmcm9tIFdlYkNvcmUvYmluZGluZ3MvZ29iamVjdC9XZWJLaXRET01CaW5kaW5n
LmguCisgICAgICAgICogYmluZGluZ3MvZ29iamVjdC9XZWJLaXRET01CaW5kaW5nLmNwcDogUmVt
b3ZlIHRoZSBvbGQgY2FjaGUgY29kZS4KKyAgICAgICAgKiBiaW5kaW5ncy9nb2JqZWN0L1dlYktp
dERPTUJpbmRpbmcuaDogZGl0dG8uCisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2Vu
ZXJhdG9yR09iamVjdC5wbTogaW5jbHVkZSB0aGUgbmV3IERPTU9iamVjdENhY2hlIGhlYWRlci4K
KwogMjAxMC0xMS0xOSAgSmFtZXMgU2ltb25zZW4gIDxzaW1vbmphbUBjaHJvbWl1bS5vcmc+CiAK
ICAgICAgICAgUmV2aWV3ZWQgYnkgVG9ueSBDaGFuZy4KZGlmZiAtLWdpdCBhL1dlYkNvcmUvR05V
bWFrZWZpbGUuYW0gYi9XZWJDb3JlL0dOVW1ha2VmaWxlLmFtCmluZGV4IGU4ZWIzODYuLmU1ZmUy
YTcgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvR05VbWFrZWZpbGUuYW0KKysrIGIvV2ViQ29yZS9HTlVt
YWtlZmlsZS5hbQpAQCAtNjM5LDYgKzYzOSw4IEBAIHdlYmNvcmVfc291cmNlcyArPSBcCiAJV2Vi
Q29yZS9iaW5kaW5ncy9nZW5lcmljL1J1bnRpbWVFbmFibGVkRmVhdHVyZXMuaCBcCiAJV2ViQ29y
ZS9iaW5kaW5ncy9nb2JqZWN0L0NvbnZlcnRUb1VURjhTdHJpbmcuY3BwIFwKIAlXZWJDb3JlL2Jp
bmRpbmdzL2dvYmplY3QvQ29udmVydFRvVVRGOFN0cmluZy5oIFwKKwlXZWJDb3JlL2JpbmRpbmdz
L2dvYmplY3QvRE9NT2JqZWN0Q2FjaGUuY3BwIFwKKwlXZWJDb3JlL2JpbmRpbmdzL2dvYmplY3Qv
RE9NT2JqZWN0Q2FjaGUuaCBcCiAJV2ViQ29yZS9iaW5kaW5ncy9nb2JqZWN0L0dPYmplY3RFdmVu
dExpc3RlbmVyLmNwcCBcCiAJV2ViQ29yZS9iaW5kaW5ncy9nb2JqZWN0L0dPYmplY3RFdmVudExp
c3RlbmVyLmggXAogCVdlYkNvcmUvYmluZGluZ3MvZ29iamVjdC9XZWJLaXRET01CaW5kaW5nLmNw
cCBcCmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL2dvYmplY3QvRE9NT2JqZWN0Q2FjaGUu
Y3BwIGIvV2ViQ29yZS9iaW5kaW5ncy9nb2JqZWN0L0RPTU9iamVjdENhY2hlLmNwcApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kY2Y5MThmCi0tLSAvZGV2L251bGwKKysrIGIv
V2ViQ29yZS9iaW5kaW5ncy9nb2JqZWN0L0RPTU9iamVjdENhY2hlLmNwcApAQCAtMCwwICsxLDEz
MSBAQAorLyoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMTAgSWdhbGlhIFMuTC4KKyAqCisgKiAgVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJh
bCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5
b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBk
aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBX
SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m
CisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
LiAgU2VlIHRoZSBHTlUKKyAqICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9y
ZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRo
ZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMg
bGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRp
b24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAy
MTEwLTEzMDEgIFVTQQorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJET01P
YmplY3RDYWNoZS5oIgorCisjaW5jbHVkZSAiRG9jdW1lbnQuaCIKKyNpbmNsdWRlICJGcmFtZS5o
IgorI2luY2x1ZGUgIk5vZGUuaCIKKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorCituYW1lc3Bh
Y2UgV2ViS2l0IHsKKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIEdPYmplY3QqIG9iamVjdDsKKyAg
ICB2b2lkKiBmcmFtZTsKKyAgICBnaW50IHJlZkNvdW50OworfSBET01PYmplY3RDYWNoZURhdGE7
CisKK3R5cGVkZWYgSGFzaE1hcDx2b2lkKiwgRE9NT2JqZWN0Q2FjaGVEYXRhKj4gRE9NT2JqZWN0
TWFwOworCitzdGF0aWMgRE9NT2JqZWN0TWFwJiBkb21PYmplY3RzKCkKK3sKKyAgICBzdGF0aWMg
RE9NT2JqZWN0TWFwIHN0YXRpY0RPTU9iamVjdHM7CisgICAgcmV0dXJuIHN0YXRpY0RPTU9iamVj
dHM7Cit9CisKK3N0YXRpYyB2b2lkKiBnZXRGcmFtZUZyb21IYW5kbGUodm9pZCogb2JqZWN0SGFu
ZGxlKQoreworICAgIFdlYkNvcmU6Ok5vZGUqIG5vZGUgPSBzdGF0aWNfY2FzdDxXZWJDb3JlOjpO
b2RlKj4ob2JqZWN0SGFuZGxlKTsKKyAgICBpZiAoIW5vZGUtPmluRG9jdW1lbnQoKSkKKyAgICAg
ICAgcmV0dXJuIDA7CisgICAgV2ViQ29yZTo6RG9jdW1lbnQqIGRvY3VtZW50ID0gbm9kZS0+ZG9j
dW1lbnQoKTsKKyAgICBpZiAoIWRvY3VtZW50KQorICAgICAgICByZXR1cm4gMDsKKyAgICByZXR1
cm4gZG9jdW1lbnQtPmZyYW1lKCk7Cit9CisKK3ZvaWQgRE9NT2JqZWN0Q2FjaGU6OmZvcmdldCh2
b2lkKiBvYmplY3RIYW5kbGUpCit7CisgICAgRE9NT2JqZWN0Q2FjaGVEYXRhKiBjYWNoZURhdGEg
PSBkb21PYmplY3RzKCkuZ2V0KG9iamVjdEhhbmRsZSk7CisgICAgQVNTRVJUKGNhY2hlRGF0YSk7
CisgICAgZ19zbGljZV9mcmVlKERPTU9iamVjdENhY2hlRGF0YSwgY2FjaGVEYXRhKTsKKyAgICBk
b21PYmplY3RzKCkudGFrZShvYmplY3RIYW5kbGUpOworfQorCit2b2lkIERPTU9iamVjdENhY2hl
OjpjbGVhckJ5RnJhbWUodm9pZCogZnJhbWUpCit7CisgICAgVmVjdG9yPERPTU9iamVjdENhY2hl
RGF0YSo+IHRvVW5yZWY7CisKKyAgICAvLyBVbnJlZmZpbmcgdGhlIG9iamVjdHMgcmVtb3ZlcyB0
aGVtIGZyb20gdGhlIGNhY2hlIGluIHRoZWlyCisgICAgLy8gZmluYWxpemUgbWV0aG9kLCBzbyBq
dXN0IHNhdmUgdGhlbSB0byBkbyB0aGF0IHdoaWxlIHdlIGFyZSBub3QKKyAgICAvLyBpdGVyYXRp
bmcgdGhlIGNhY2hlIGl0c2VsZi4KKyAgICBET01PYmplY3RNYXA6Oml0ZXJhdG9yIGVuZCA9IGRv
bU9iamVjdHMoKS5lbmQoKTsKKyAgICBmb3IgKERPTU9iamVjdE1hcDo6aXRlcmF0b3IgaXRlciA9
IGRvbU9iamVjdHMoKS5iZWdpbigpOyBpdGVyICE9IGVuZDsgKytpdGVyKSB7CisgICAgICAgIERP
TU9iamVjdENhY2hlRGF0YSogZGF0YSA9IGl0ZXItPnNlY29uZDsKKyAgICAgICAgQVNTRVJUKGRh
dGEpOworICAgICAgICBpZiAoIWZyYW1lIHx8IGRhdGEtPmZyYW1lID09IGZyYW1lKQorICAgICAg
ICAgICAgdG9VbnJlZi5hcHBlbmQoZGF0YSk7CisgICAgfQorCisgICAgVmVjdG9yPERPTU9iamVj
dENhY2hlRGF0YSo+OjppdGVyYXRvciBsYXN0ID0gdG9VbnJlZi5lbmQoKTsKKyAgICBmb3IgKFZl
Y3RvcjxET01PYmplY3RDYWNoZURhdGEqPjo6aXRlcmF0b3IgaXQgPSB0b1VucmVmLmJlZ2luKCk7
IGl0ICE9IGxhc3Q7ICsraXQpIHsKKyAgICAgICAgRE9NT2JqZWN0Q2FjaGVEYXRhKiBkYXRhID0g
Kml0OworICAgICAgICB3aGlsZSAoZGF0YS0+cmVmQ291bnQtLSkKKyAgICAgICAgICAgIGdfb2Jq
ZWN0X3VucmVmKGRhdGEtPm9iamVjdCk7CisgICAgfQorfQorCitET01PYmplY3RDYWNoZTo6fkRP
TU9iamVjdENhY2hlKCkKK3sKKyAgICBjbGVhckJ5RnJhbWUoKTsKK30KKwordm9pZCogRE9NT2Jq
ZWN0Q2FjaGU6OmdldCh2b2lkKiBvYmplY3RIYW5kbGUpCit7CisgICAgRE9NT2JqZWN0Q2FjaGVE
YXRhKiBkYXRhID0gZG9tT2JqZWN0cygpLmdldChvYmplY3RIYW5kbGUpOworICAgIGlmICghZGF0
YSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICAvLyBXZSB3YW50IHRvIGFkZCBvbmUgcmVmIGVh
Y2ggdGltZSBhIHdyYXBwZXIgaXMgcmV0dXJuZWQsIHNvIHRoYXQKKyAgICAvLyB0aGUgdXNlciBj
YW4gbWFudWFsbHkgdW5yZWYgdGhlbSBpZiBoZSBjaG9vc2VzIHRvLgorICAgIEFTU0VSVChkYXRh
LT5vYmplY3QpOworICAgIGRhdGEtPnJlZkNvdW50Kys7CisgICAgcmV0dXJuIGdfb2JqZWN0X3Jl
ZihkYXRhLT5vYmplY3QpOworfQorCit2b2lkKiBET01PYmplY3RDYWNoZTo6cHV0KHZvaWQqIG9i
amVjdEhhbmRsZSwgdm9pZCogd3JhcHBlcikKK3sKKyAgICBpZiAoZG9tT2JqZWN0cygpLmdldChv
YmplY3RIYW5kbGUpKQorICAgICAgICByZXR1cm4gd3JhcHBlcjsKKworICAgIERPTU9iamVjdENh
Y2hlRGF0YSogZGF0YSA9IGdfc2xpY2VfbmV3KERPTU9iamVjdENhY2hlRGF0YSk7CisgICAgZGF0
YS0+b2JqZWN0ID0gc3RhdGljX2Nhc3Q8R09iamVjdCo+KHdyYXBwZXIpOworICAgIGRhdGEtPmZy
YW1lID0gMDsKKyAgICBkYXRhLT5yZWZDb3VudCA9IDE7CisKKyAgICBkb21PYmplY3RzKCkuc2V0
KG9iamVjdEhhbmRsZSwgZGF0YSk7CisgICAgcmV0dXJuIHdyYXBwZXI7Cit9CisKK3ZvaWQqIERP
TU9iamVjdENhY2hlOjpwdXQoV2ViQ29yZTo6Tm9kZSogb2JqZWN0SGFuZGxlLCB2b2lkKiB3cmFw
cGVyKQoreworICAgIC8vIGNhbGwgdGhlIDo6cHV0IHZlcnNpb24gdGhhdCB0YWtlcyB2b2lkKiB0
byBkbyB0aGUgYmFzaWMgY2FjaGUKKyAgICAvLyBpbnNlcnRpb24gd29yaworICAgIHB1dChzdGF0
aWNfY2FzdDx2b2lkKj4ob2JqZWN0SGFuZGxlKSwgd3JhcHBlcik7CisKKyAgICBET01PYmplY3RD
YWNoZURhdGEqIGRhdGEgPSBkb21PYmplY3RzKCkuZ2V0KG9iamVjdEhhbmRsZSk7CisgICAgQVNT
RVJUKGRhdGEpOworCisgICAgZGF0YS0+ZnJhbWUgPSBnZXRGcmFtZUZyb21IYW5kbGUob2JqZWN0
SGFuZGxlKTsKKworICAgIHJldHVybiB3cmFwcGVyOworfQorCit9CmRpZmYgLS1naXQgYS9XZWJD
b3JlL2JpbmRpbmdzL2dvYmplY3QvRE9NT2JqZWN0Q2FjaGUuaCBiL1dlYkNvcmUvYmluZGluZ3Mv
Z29iamVjdC9ET01PYmplY3RDYWNoZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAuLjQ1ZjcyZjEKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL2dvYmplY3Qv
RE9NT2JqZWN0Q2FjaGUuaApAQCAtMCwwICsxLDM4IEBACisvKgorICogIENvcHlyaWdodCAoQykg
MjAxMCBJZ2FsaWEgUy5MLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVi
bGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNp
b24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lv
bi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQg
aXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0
IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExlc3NlciBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91
bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMK
KyAqICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRo
ZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0
LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKi8KKworI2lmbmRl
ZiBET01PYmplY3RDYWNoZV9oCisjZGVmaW5lIERPTU9iamVjdENhY2hlX2gKKworbmFtZXNwYWNl
IFdlYkNvcmUgeworY2xhc3MgTm9kZTsKK307CisKK25hbWVzcGFjZSBXZWJLaXQgeworY2xhc3Mg
RE9NT2JqZWN0Q2FjaGUgeworcHVibGljOgorICAgIHN0YXRpYyB2b2lkKiBnZXQodm9pZCogb2Jq
ZWN0SGFuZGxlKTsKKyAgICBzdGF0aWMgdm9pZCogcHV0KHZvaWQqIG9iamVjdEhhbmRsZSwgdm9p
ZCogd3JhcHBlcik7CisgICAgc3RhdGljIHZvaWQqIHB1dChXZWJDb3JlOjpOb2RlKiBvYmplY3RI
YW5kbGUsIHZvaWQqIHdyYXBwZXIpOworICAgIHN0YXRpYyB2b2lkIGNsZWFyQnlGcmFtZSh2b2lk
KiBmcmFtZSA9IDApOworICAgIHN0YXRpYyB2b2lkIGZvcmdldCh2b2lkKiBvYmplY3RIYW5kbGUp
OworICAgIH5ET01PYmplY3RDYWNoZSgpOworfTsKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisj
ZW5kaWYKZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3MvZ29iamVjdC9XZWJLaXRET01CaW5k
aW5nLmNwcCBiL1dlYkNvcmUvYmluZGluZ3MvZ29iamVjdC9XZWJLaXRET01CaW5kaW5nLmNwcApp
bmRleCAzYzA2NmUzLi5hOGE4OTU2IDEwMDY0NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdzL2dvYmpl
Y3QvV2ViS2l0RE9NQmluZGluZy5jcHAKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy9nb2JqZWN0L1dl
YktpdERPTUJpbmRpbmcuY3BwCkBAIC0yNCw2ICsyNCw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgi
CiAjaW5jbHVkZSAiV2ViS2l0RE9NQmluZGluZy5oIgogCisjaW5jbHVkZSAiRE9NT2JqZWN0Q2Fj
aGUuaCIKICNpbmNsdWRlICJFbGVtZW50LmgiCiAjaW5jbHVkZSAiRXZlbnQuaCIKICNpbmNsdWRl
ICJFdmVudEV4Y2VwdGlvbi5oIgpAQCAtNDQsMzIgKzQ1LDYgQEAgbmFtZXNwYWNlIFdlYktpdCB7
CiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOjpIVE1M
TmFtZXM7CiAKLS8vIERPTU9iamVjdENhY2hlCi0KLXR5cGVkZWYgSGFzaE1hcDx2b2lkKiwgZ3Bv
aW50ZXI+IERPTU9iamVjdE1hcDsKLQotc3RhdGljIERPTU9iamVjdE1hcCYgZG9tT2JqZWN0cygp
Ci17Ci0gICAgc3RhdGljIERPTU9iamVjdE1hcCBzdGF0aWNET01PYmplY3RzOwotICAgIHJldHVy
biBzdGF0aWNET01PYmplY3RzOwotfQotCi1ncG9pbnRlciBET01PYmplY3RDYWNoZTo6Z2V0KHZv
aWQqIG9iamVjdEhhbmRsZSkKLXsKLSAgICByZXR1cm4gZG9tT2JqZWN0cygpLmdldChvYmplY3RI
YW5kbGUpOwotfQotCi1ncG9pbnRlciBET01PYmplY3RDYWNoZTo6cHV0KHZvaWQqIG9iamVjdEhh
bmRsZSwgZ3BvaW50ZXIgd3JhcHBlcikKLXsKLSAgICBkb21PYmplY3RzKCkuc2V0KG9iamVjdEhh
bmRsZSwgd3JhcHBlcik7Ci0gICAgcmV0dXJuIHdyYXBwZXI7Ci19Ci0KLXZvaWQgRE9NT2JqZWN0
Q2FjaGU6OmZvcmdldCh2b2lkKiBvYmplY3RIYW5kbGUpCi17Ci0gICAgZG9tT2JqZWN0cygpLnRh
a2Uob2JqZWN0SGFuZGxlKTsKLX0KLQogLy8ga2l0IG1ldGhvZHMKIAogc3RhdGljIGdwb2ludGVy
IGNyZWF0ZVdyYXBwZXIoTm9kZSogbm9kZSkKZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3Mv
Z29iamVjdC9XZWJLaXRET01CaW5kaW5nLmggYi9XZWJDb3JlL2JpbmRpbmdzL2dvYmplY3QvV2Vi
S2l0RE9NQmluZGluZy5oCmluZGV4IDIyNDhmNzguLjQ3NTk0YTYgMTAwNjQ0Ci0tLSBhL1dlYkNv
cmUvYmluZGluZ3MvZ29iamVjdC9XZWJLaXRET01CaW5kaW5nLmgKKysrIGIvV2ViQ29yZS9iaW5k
aW5ncy9nb2JqZWN0L1dlYktpdERPTUJpbmRpbmcuaApAQCAtMzgsMTMgKzM4LDYgQEAgZ3BvaW50
ZXIga2l0KFdlYkNvcmU6Ok5vZGUqIG5vZGUpOwogZ3BvaW50ZXIga2l0KFdlYkNvcmU6OkVsZW1l
bnQqIGVsZW1lbnQpOwogZ3BvaW50ZXIga2l0KFdlYkNvcmU6OkV2ZW50KiBldmVudCk7CiBncG9p
bnRlciBraXQoV2ViQ29yZTo6RXZlbnRUYXJnZXQqIHRhcmdldCk7Ci0KLWNsYXNzIERPTU9iamVj
dENhY2hlIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgZ3BvaW50ZXIgZ2V0KHZvaWQqIG9iamVjdEhh
bmRsZSk7Ci0gICAgc3RhdGljIGdwb2ludGVyIHB1dCh2b2lkKiBvYmplY3RIYW5kbGUsIGdwb2lu
dGVyIHdyYXBwZXIpOwotICAgIHN0YXRpYyB2b2lkIGZvcmdldCh2b2lkKiBvYmplY3RIYW5kbGUp
OwotfTsKIH0gLy8gbmFtZXNwYWNlIFdlYktpdAogCiAjZW5kaWYgLy8gV2ViS2l0RE9NQmluZGlu
Z19oCmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckdP
YmplY3QucG0gYi9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckdPYmplY3Qu
cG0KaW5kZXggNmM0NTBhZC4uY2EyYmQ5YyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL0NvZGVHZW5lcmF0b3JHT2JqZWN0LnBtCisrKyBiL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy9Db2RlR2VuZXJhdG9yR09iamVjdC5wbQpAQCAtMTMyMiw2ICsxMzIyLDcgQEAgc3ViIEdl
bmVyYXRlIHsKIAogICAgICRpbXBsSW5jbHVkZXN7IndlYmtpdG1hcnNoYWwuaCJ9ID0gMTsKICAg
ICAkaW1wbEluY2x1ZGVzeyJ3ZWJraXRwcml2YXRlLmgifSA9IDE7CisgICAgJGltcGxJbmNsdWRl
c3siRE9NT2JqZWN0Q2FjaGUuaCJ9ID0gMTsKICAgICAkaW1wbEluY2x1ZGVzeyJXZWJLaXRET01C
aW5kaW5nLmgifSA9IDE7CiAgICAgJGltcGxJbmNsdWRlc3siZ29iamVjdC9Db252ZXJ0VG9VVEY4
U3RyaW5nLmgifSA9IDE7CiAgICAgJGltcGxJbmNsdWRlc3sid2Via2l0LyRjbGFzc05hbWUuaCJ9
ID0gMTsKZGlmZiAtLWdpdCBhL1dlYktpdC9ndGsvQ2hhbmdlTG9nIGIvV2ViS2l0L2d0ay9DaGFu
Z2VMb2cKaW5kZXggYmMwMGI4NS4uYmI1Y2ZjNSAxMDA2NDQKLS0tIGEvV2ViS2l0L2d0ay9DaGFu
Z2VMb2cKKysrIGIvV2ViS2l0L2d0ay9DaGFuZ2VMb2cKQEAgLTEsMyArMSw0MiBAQAorMjAxMC0x
MS0xOSAgWGFuIExvcGV6ICA8eGxvcGV6QGlnYWxpYS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgW0dUS10gTWVtb3J5IG1hbmFnYW1lbnQgZm9y
IERPTSBHT2JqZWN0IHdyYXBwZXJzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD00MDMwMgorCisgICAgICAgIEluaXRpYWwgYXR0ZW1wdCB0byBoYXZlIGEg
a2luZCBvZiBwb29yIG1hbidzIGdhcmJhZ2UgY29sbGVjdGlvbgorICAgICAgICBmb3IgR09iamVj
dCBET00gb2JqZWN0cy4gV2UgdGllIHRoZSBvYmplY3QncyBsaWZlY3ljbGUgdG8gdGhlaXIKKyAg
ICAgICAgcGFyZW50IEZyYW1lIGFuZC9vciBpdHMgZG9jdW1lbnQ7IHRoYXQgaXMsIGFsbCBvYmpl
Y3RzIHdpbGwgYmUKKyAgICAgICAgY29sbGVjdGVkIHdoZW4gdGhlaXIgcGFyZW50IGZyYW1lIGlz
IGRlc3Ryb3llZCBvciB3aGVuIHRoYXQgZnJhbWUKKyAgICAgICAgdHJhbnNpdGlvbnMgdG8gYSBu
ZXcgZG9jdW1lbnQuIE1hbnVhbCBtYW5hZ2VtZW50IChjYWxsaW5nCisgICAgICAgIGdfb2JqZWN0
X3VucmVmIG9uIHRoZW0pIGlzIGFsc28gYWxsb3dlZCwgYW5kIGlzIHJlcXVpcmVkIGZvcgorICAg
ICAgICBvYmplY3RzIHRoYXQgYXJlIG5vdCBpbiB0aGUgRE9NIHRyZWUgKGVnIE5vZGVMaXN0cyku
CisKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5hbTogYWRkIHRlc3R1dGlscyBmaWxlIHRvIHRlc3Rk
b21kb2N1bWVudC5jCisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRH
dGsuY3BwOgorICAgICAgICAoV2ViS2l0OjpGcmFtZUxvYWRlckNsaWVudDo6c2V0TWFpbkZyYW1l
RG9jdW1lbnRSZWFkeSk6IGNvbGxlY3QKKyAgICAgICAgRE9NIG9iamVjdHMgb24gZG9jdW1lbnQg
dHJhbnNpdGlvbi4KKyAgICAgICAgKiB0ZXN0cy90ZXN0ZG9tZG9jdW1lbnQuYzoKKyAgICAgICAg
KGRvbV9kb2N1bWVudF9maXh0dXJlX3RlYXJkb3duKTogb25seSBkZXN0cm95IHRoZSB2aWV3IGlm
IGl0J3Mgbm90CisgICAgICAgIGFscmVhZHkgZGVzdHJveWVkLCBzaW5jZSB0aGUgbmV3IHRlc3Qg
ZGV0cm95cyBpdCBvbiBpdHMgb3duLgorICAgICAgICAodGVzdF9kb21fZG9jdW1lbnRfZ2V0X2Vs
ZW1lbnRzX2J5X3RhZ19uYW1lKTogbWFudWFsbHkgdW5yZWYgbm9kZSBsaXN0LgorICAgICAgICAo
dGVzdF9kb21fZG9jdW1lbnRfZ2V0X2VsZW1lbnRzX2J5X2NsYXNzX25hbWUpOiBkaXR0by4KKyAg
ICAgICAgKHRlc3RfZG9tX2RvY3VtZW50X2dldF9saW5rcyk6IGRpdHRvLgorICAgICAgICAodGVz
dF9kb21fZG9jdW1lbnRfZ2FyYmFnZV9jb2xsZWN0aW9uKTogdGVzdCBhbGwgcG9zc2libGUKKyAg
ICAgICAgc2NlbmFyaW9zIGZvciBET00gb2JqZWN0ICJnYXJiYWdlIGNvbGxlY3Rpb24iLgorICAg
ICAgICAobWFpbik6IGFkZCBuZXcgdGVzdC4KKyAgICAgICAgKiB0ZXN0cy90ZXN0ZG9tbm9kZS5j
OgorICAgICAgICAodGVzdF9kb21fbm9kZV9oaWVyYXJjaHlfbmF2aWdhdGlvbik6IG1hbnVhbGx5
IHVucmVmIG5vZGUgbGlzdC4KKyAgICAgICAgKHRlc3RfZG9tX25vZGVfaW5zZXJ0aW9uKTogZGl0
dG8uCisgICAgICAgICogd2Via2l0L3dlYmtpdGhpdHRlc3RyZXN1bHQuY3BwOgorICAgICAgICAo
d2Via2l0X2hpdF90ZXN0X3Jlc3VsdF9kaXNwb3NlKTogdW5yZWYgdGhlIGlubmVyIG5vZGUgb24g
ZGlzcG9zZQorICAgICAgICBub3cgdGhhdCB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgbW9kZWwgaXMg
Y2xhcmlmaWVkLgorICAgICAgICAod2Via2l0X2hpdF90ZXN0X3Jlc3VsdF9jbGFzc19pbml0KTog
aG9vayBkaXNwb3NlLgorICAgICAgICAqIHdlYmtpdC93ZWJraXR3ZWJmcmFtZS5jcHA6CisgICAg
ICAgICh3ZWJraXRfd2ViX2ZyYW1lX2NvcmVfZnJhbWVfZ29uZSk6IGNsZWFyIERPTSBvYmplY3Rz
IGF0dGFjaGVkIHRvIHRoaXMgZnJhbWUuCisgICAgICAgICh3ZWJraXRfd2ViX2ZyYW1lX2ZpbmFs
aXplKTogZGl0dG8uCisKIDIwMTAtMTEtMTggIFhhbiBMb3BleiAgPHhsb3BlekBpZ2FsaWEuY29t
PgogCiAgICAgICAgIFJldmlld2VkIGJ5IE1hcnRpbiBSb2JpbnNvbi4KZGlmZiAtLWdpdCBhL1dl
YktpdC9ndGsvR05VbWFrZWZpbGUuYW0gYi9XZWJLaXQvZ3RrL0dOVW1ha2VmaWxlLmFtCmluZGV4
IGEzYmU4MTYuLjMyNTI3MGUgMTAwNjQ0Ci0tLSBhL1dlYktpdC9ndGsvR05VbWFrZWZpbGUuYW0K
KysrIGIvV2ViS2l0L2d0ay9HTlVtYWtlZmlsZS5hbQpAQCAtMzkxLDcgKzM5MSw3IEBAIFRFU1Rf
UFJPR1MgKz0gXAogCVByb2dyYW1zL3VuaXR0ZXN0cy90ZXN0Y29weWFuZHBhc3RlCiAKICMgQWRk
IGFkZGl0aW9uYWwgdGVzdHMgaGVyZQotUHJvZ3JhbXNfdW5pdHRlc3RzX3Rlc3Rkb21kb2N1bWVu
dF9TT1VSQ0VTID0gV2ViS2l0L2d0ay90ZXN0cy90ZXN0ZG9tZG9jdW1lbnQuYworUHJvZ3JhbXNf
dW5pdHRlc3RzX3Rlc3Rkb21kb2N1bWVudF9TT1VSQ0VTID0gV2ViS2l0L2d0ay90ZXN0cy90ZXN0
ZG9tZG9jdW1lbnQuYyBXZWJLaXQvZ3RrL3Rlc3RzL3Rlc3RfdXRpbHMuYwogUHJvZ3JhbXNfdW5p
dHRlc3RzX3Rlc3Rkb21kb2N1bWVudF9DRkxBR1MgPSAkKHdlYmtpdF90ZXN0c19jZmxhZ3MpCiBQ
cm9ncmFtc191bml0dGVzdHNfdGVzdGRvbWRvY3VtZW50X0xEQUREID0gJCh3ZWJraXRfdGVzdHNf
bGRhZGQpCiBQcm9ncmFtc191bml0dGVzdHNfdGVzdGRvbWRvY3VtZW50X0xERkxBR1MgPSAkKHdl
YmtpdF90ZXN0c19sZGZsYWdzKQpkaWZmIC0tZ2l0IGEvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9y
dC9GcmFtZUxvYWRlckNsaWVudEd0ay5jcHAgYi9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0Zy
YW1lTG9hZGVyQ2xpZW50R3RrLmNwcAppbmRleCBiMjNiZDcwLi5mZGVmOWRjIDEwMDY0NAotLS0g
YS9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50R3RrLmNwcAorKysg
Yi9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50R3RrLmNwcApAQCAt
MjgsNiArMjgsNyBAQAogI2luY2x1ZGUgIkFyY2hpdmVSZXNvdXJjZS5oIgogI2luY2x1ZGUgIkNh
Y2hlZEZyYW1lLmgiCiAjaW5jbHVkZSAiQ29sb3IuaCIKKyNpbmNsdWRlICJET01PYmplY3RDYWNo
ZS5oIgogI2luY2x1ZGUgIkRvY3VtZW50TG9hZGVyLmgiCiAjaW5jbHVkZSAiRG9jdW1lbnRMb2Fk
ZXJHdGsuaCIKICNpbmNsdWRlICJGb3JtU3RhdGUuaCIKQEAgLTY5Niw5ICs2OTcsMTAgQEAgdm9p
ZCBGcmFtZUxvYWRlckNsaWVudDo6cmVnaXN0ZXJGb3JJY29uTm90aWZpY2F0aW9uKGJvb2wgc2hv
dWxkUmVnaXN0ZXIpCiAgICAgbm90SW1wbGVtZW50ZWQoKTsKIH0KIAotdm9pZCBGcmFtZUxvYWRl
ckNsaWVudDo6c2V0TWFpbkZyYW1lRG9jdW1lbnRSZWFkeShib29sKQordm9pZCBGcmFtZUxvYWRl
ckNsaWVudDo6c2V0TWFpbkZyYW1lRG9jdW1lbnRSZWFkeShib29sIHJlYWR5KQogewotICAgIC8v
IHRoaXMgaXMgb25seSBpbnRlcmVzdGluZyBvbmNlIHdlIHByb3ZpZGUgYW4gZXh0ZXJuYWwgQVBJ
IGZvciB0aGUgRE9NCisgICAgaWYgKCFyZWFkeSkKKyAgICAgICAgRE9NT2JqZWN0Q2FjaGU6OmNs
ZWFyQnlGcmFtZShjb3JlKG1fZnJhbWUpKTsKIH0KIAogYm9vbCBGcmFtZUxvYWRlckNsaWVudDo6
aGFzV2ViVmlldygpIGNvbnN0CmRpZmYgLS1naXQgYS9XZWJLaXQvZ3RrL3Rlc3RzL3Rlc3Rkb21k
b2N1bWVudC5jIGIvV2ViS2l0L2d0ay90ZXN0cy90ZXN0ZG9tZG9jdW1lbnQuYwppbmRleCBlYzJm
NTc5Li5iMjUxYjk2IDEwMDY0NAotLS0gYS9XZWJLaXQvZ3RrL3Rlc3RzL3Rlc3Rkb21kb2N1bWVu
dC5jCisrKyBiL1dlYktpdC9ndGsvdGVzdHMvdGVzdGRvbWRvY3VtZW50LmMKQEAgLTMwLDcgKzMw
LDggQEAKICNkZWZpbmUgSFRNTF9ET0NVTUVOVF9FTEVNRU5UUyAiPGh0bWw+PGJvZHk+PHVsPjxs
aT4xPC9saT48bGk+MjwvbGk+PGxpPjM8L2xpPjwvdWw+PC9ib2R5PjwvaHRtbD4iCiAjZGVmaW5l
IEhUTUxfRE9DVU1FTlRfRUxFTUVOVFNfQ0xBU1MgIjxodG1sPjxib2R5PjxkaXYgY2xhc3M9XCJ0
ZXN0XCI+PC9kaXY+PGRpdiBjbGFzcz1cInN0cmFuZ2VcIj48L2Rpdj48ZGl2IGNsYXNzPVwidGVz
dFwiPjwvZGl2PjwvYm9keT48L2h0bWw+IgogI2RlZmluZSBIVE1MX0RPQ1VNRU5UX0VMRU1FTlRT
X0lEICI8aHRtbD48Ym9keT48ZGl2IGlkPVwidGVzdG9rXCI+PC9kaXY+PGRpdiBpZD1cInRlc3Ri
YWRcIj5maXJzdDwvZGl2PjxkaXYgaWQ9XCJ0ZXN0YmFkXCI+c2Vjb25kPC9kaXY+PC9ib2R5Pjwv
aHRtbD4iCi0jZGVmaW5lIEhUTUxfRE9DVU1FTlRfTElOS1MgIjxodG1sPjxib2R5PjxhIGhyZWY9
XCJhYm91dDpibGFua1wiPmJsYW5rPC9hPjxhIGhyZWY9XCJodHRwOi8vd3d3Lmdvb2dsZS5jb21c
Ij5nb29nbGU8L2E+PGEgaHJlZj1cImh0dHA6Ly93d3cud2Via2l0Lm9yZ1wiPndlYmtpdDwvYT48
L2JvZHk+PC9odG1sPiIKKyNkZWZpbmUgSFRNTF9ET0NVTUVOVF9MSU5LUyAiPGh0bWw+PGhlYWQ+
PHRpdGxlPlRpdGxlPC90aXRsZT48L2hlYWQ+PGJvZHk+PGEgaHJlZj1cImFib3V0OmJsYW5rXCI+
Ymxhbms8L2E+PGEgaHJlZj1cImh0dHA6Ly93d3cuZ29vZ2xlLmNvbVwiPmdvb2dsZTwvYT48YSBo
cmVmPVwiaHR0cDovL3d3dy53ZWJraXQub3JnXCI+d2Via2l0PC9hPjwvYm9keT48L2h0bWw+Igor
I2RlZmluZSBIVE1MX0RPQ1VNRU5UX0lGUkFNRSAiPGh0bWw+PGhlYWQ+PHRpdGxlPklGcmFtZTwv
dGl0bGU+PC9oZWFkPjxib2R5PjxpZnJhbWUgaWQ9J2lmcmFtZSc+PC9pZnJhbWU+PGRpdiBpZD0n
dGVzdCc+PC9kaXY+PC9ib2R5PjwvaHRtbD4iCiAKIHR5cGVkZWYgc3RydWN0IHsKICAgICBHdGtX
aWRnZXQqIHdlYlZpZXc7CkBAIC02MCw3ICs2MSw4IEBAIHN0YXRpYyB2b2lkIGRvbV9kb2N1bWVu
dF9maXh0dXJlX3NldHVwKERvbURvY3VtZW50Rml4dHVyZSogZml4dHVyZSwgZ2NvbnN0cG9pbnRl
CiAKIHN0YXRpYyB2b2lkIGRvbV9kb2N1bWVudF9maXh0dXJlX3RlYXJkb3duKERvbURvY3VtZW50
Rml4dHVyZSogZml4dHVyZSwgZ2NvbnN0cG9pbnRlciBkYXRhKQogewotICAgIGdfb2JqZWN0X3Vu
cmVmKGZpeHR1cmUtPndlYlZpZXcpOworICAgIGlmIChmaXh0dXJlLT53ZWJWaWV3KQorICAgICAg
ICBnX29iamVjdF91bnJlZihmaXh0dXJlLT53ZWJWaWV3KTsKICAgICBnX21haW5fbG9vcF91bnJl
ZihmaXh0dXJlLT5sb29wKTsKIH0KIApAQCAtMTA3LDYgKzEwOSw4IEBAIHN0YXRpYyB2b2lkIHRl
c3RfZG9tX2RvY3VtZW50X2dldF9lbGVtZW50c19ieV90YWdfbmFtZShEb21Eb2N1bWVudEZpeHR1
cmUqIGZpeHR1CiAgICAgICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRfZG9tX2h0bWxfZWxlbWVu
dF9nZXRfaW5uZXJfdGV4dChodG1sRWxlbWVudCksID09LCBuKTsKICAgICAgICAgZ19mcmVlKG4p
OwogICAgIH0KKworICAgIGdfb2JqZWN0X3VucmVmKGxpc3QpOwogfQogCiBzdGF0aWMgdm9pZCB0
ZXN0X2RvbV9kb2N1bWVudF9nZXRfZWxlbWVudHNfYnlfY2xhc3NfbmFtZShEb21Eb2N1bWVudEZp
eHR1cmUqIGZpeHR1cmUsIGdjb25zdHBvaW50ZXIgZGF0YSkKQEAgLTEzMCw2ICsxMzQsOCBAQCBz
dGF0aWMgdm9pZCB0ZXN0X2RvbV9kb2N1bWVudF9nZXRfZWxlbWVudHNfYnlfY2xhc3NfbmFtZShE
b21Eb2N1bWVudEZpeHR1cmUqIGZpeAogICAgICAgICBnX2Fzc2VydChlbGVtZW50KTsKICAgICAg
ICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF9kb21fZWxlbWVudF9nZXRfdGFnX25hbWUoZWxlbWVu
dCksID09LCAiRElWIik7CiAgICAgfQorCisgICAgZ19vYmplY3RfdW5yZWYobGlzdCk7CiB9CiAK
IHN0YXRpYyB2b2lkIHRlc3RfZG9tX2RvY3VtZW50X2dldF9lbGVtZW50X2J5X2lkKERvbURvY3Vt
ZW50Rml4dHVyZSogZml4dHVyZSwgZ2NvbnN0cG9pbnRlciBkYXRhKQpAQCAtMTc4LDYgKzE4NCwx
MzggQEAgc3RhdGljIHZvaWQgdGVzdF9kb21fZG9jdW1lbnRfZ2V0X2xpbmtzKERvbURvY3VtZW50
Rml4dHVyZSogZml4dHVyZSwgZ2NvbnN0cG9pbnQKICAgICAgICAgV2ViS2l0RE9NSFRNTEFuY2hv
ckVsZW1lbnQgKmFuY2hvciA9IChXZWJLaXRET01IVE1MQW5jaG9yRWxlbWVudCopZWxlbWVudDsK
ICAgICAgICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF9kb21faHRtbF9hbmNob3JfZWxlbWVudF9n
ZXRfaHJlZihhbmNob3IpLCA9PSwgdXJpc1tpXSk7CiAgICAgfQorICAgIGdfb2JqZWN0X3VucmVm
KGNvbGxlY3Rpb24pOworfQorCitzdGF0aWMgdm9pZCB3ZWFrX25vdGlmeShncG9pbnRlciBkYXRh
LCBHT2JqZWN0KiB6b21iaWUpCit7CisgICAgZ3VpbnQqIGNvdW50ID0gKGd1aW50KilkYXRhOwor
ICAgICgqY291bnQpKys7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3RfZG9tX2RvY3VtZW50X2dhcmJh
Z2VfY29sbGVjdGlvbihEb21Eb2N1bWVudEZpeHR1cmUqIGZpeHR1cmUsIGdjb25zdHBvaW50ZXIg
ZGF0YSkKK3sKKyAgICBndWludCBjb3VudCA9IDA7CisgICAgZ19hc3NlcnQoZml4dHVyZSk7Cisg
ICAgV2ViS2l0V2ViVmlldyogdmlldyA9IChXZWJLaXRXZWJWaWV3KilmaXh0dXJlLT53ZWJWaWV3
OworICAgIGdfYXNzZXJ0KHZpZXcpOworICAgIFdlYktpdERPTURvY3VtZW50KiBkb2N1bWVudCA9
IHdlYmtpdF93ZWJfdmlld19nZXRfZG9tX2RvY3VtZW50KHZpZXcpOworICAgIGdfYXNzZXJ0KGRv
Y3VtZW50KTsKKyAgICBnX29iamVjdF93ZWFrX3JlZihHX09CSkVDVChkb2N1bWVudCksIChHV2Vh
a05vdGlmeSl3ZWFrX25vdGlmeSwgJmNvdW50KTsKKyAgICBXZWJLaXRET01IVE1MSGVhZEVsZW1l
bnQqIGhlYWQgPSB3ZWJraXRfZG9tX2RvY3VtZW50X2dldF9oZWFkKGRvY3VtZW50KTsKKyAgICBn
X2Fzc2VydChoZWFkKTsKKyAgICBnX29iamVjdF93ZWFrX3JlZihHX09CSkVDVChoZWFkKSwgKEdX
ZWFrTm90aWZ5KXdlYWtfbm90aWZ5LCAmY291bnQpOworICAgIFdlYktpdERPTUhUTUxFbGVtZW50
KiBib2R5ID0gd2Via2l0X2RvbV9kb2N1bWVudF9nZXRfYm9keShkb2N1bWVudCk7CisgICAgZ19h
c3NlcnQoYm9keSk7CisgICAgZ19vYmplY3Rfd2Vha19yZWYoR19PQkpFQ1QoYm9keSksIChHV2Vh
a05vdGlmeSl3ZWFrX25vdGlmeSwgJmNvdW50KTsKKyAgICBXZWJLaXRET01IVE1MQ29sbGVjdGlv
biAqY29sbGVjdGlvbiA9IHdlYmtpdF9kb21fZG9jdW1lbnRfZ2V0X2xpbmtzKGRvY3VtZW50KTsK
KyAgICBnX2Fzc2VydChjb2xsZWN0aW9uKTsKKyAgICBnX29iamVjdF93ZWFrX3JlZihHX09CSkVD
VChjb2xsZWN0aW9uKSwgKEdXZWFrTm90aWZ5KXdlYWtfbm90aWZ5LCAmY291bnQpOworCisgICAg
d2Via2l0X3dlYl92aWV3X2xvYWRfc3RyaW5nKFdFQktJVF9XRUJfVklFVyh2aWV3KSwgSFRNTF9E
T0NVTUVOVF9MSU5LUywgTlVMTCwgTlVMTCwgTlVMTCk7CisKKyAgICB3aGlsZSAoZ19tYWluX2Nv
bnRleHRfcGVuZGluZyhOVUxMKSkKKyAgICAgICAgZ19tYWluX2NvbnRleHRfaXRlcmF0aW9uKE5V
TEwsIEZBTFNFKTsKKworICAgIGdfYXNzZXJ0X2NtcHVpbnQoY291bnQsID09LCAzKTsKKworICAg
IGdfb2JqZWN0X3VucmVmKGNvbGxlY3Rpb24pOworICAgIGdfYXNzZXJ0X2NtcHVpbnQoY291bnQs
ID09LCA0KTsKKworICAgIGNvdW50ID0gMDsKKworICAgIGRvY3VtZW50ID0gd2Via2l0X3dlYl92
aWV3X2dldF9kb21fZG9jdW1lbnQodmlldyk7CisgICAgZ19hc3NlcnQoZG9jdW1lbnQpOworICAg
IGdfb2JqZWN0X3dlYWtfcmVmKEdfT0JKRUNUKGRvY3VtZW50KSwgKEdXZWFrTm90aWZ5KXdlYWtf
bm90aWZ5LCAmY291bnQpOworICAgIGhlYWQgPSB3ZWJraXRfZG9tX2RvY3VtZW50X2dldF9oZWFk
KGRvY3VtZW50KTsKKyAgICBnX2Fzc2VydChoZWFkKTsKKyAgICBnX29iamVjdF93ZWFrX3JlZihH
X09CSkVDVChoZWFkKSwgKEdXZWFrTm90aWZ5KXdlYWtfbm90aWZ5LCAmY291bnQpOworICAgIGJv
ZHkgPSB3ZWJraXRfZG9tX2RvY3VtZW50X2dldF9ib2R5KGRvY3VtZW50KTsKKyAgICBnX2Fzc2Vy
dChib2R5KTsKKyAgICBnX29iamVjdF93ZWFrX3JlZihHX09CSkVDVChib2R5KSwgKEdXZWFrTm90
aWZ5KXdlYWtfbm90aWZ5LCAmY291bnQpOworICAgIGNvbGxlY3Rpb24gPSB3ZWJraXRfZG9tX2Rv
Y3VtZW50X2dldF9saW5rcyhkb2N1bWVudCk7CisgICAgZ19hc3NlcnQoY29sbGVjdGlvbik7Cisg
ICAgZ19vYmplY3Rfd2Vha19yZWYoR19PQkpFQ1QoY29sbGVjdGlvbiksIChHV2Vha05vdGlmeSl3
ZWFrX25vdGlmeSwgJmNvdW50KTsKKyAgICAvKiBBc2sgdHdpY2UgZm9yIHRoZSBzYW1lIG9iamVj
dCAqLworICAgIFdlYktpdERPTUhUTUxDb2xsZWN0aW9uKiBjb2xsZWN0aW9uMiA9IHdlYmtpdF9k
b21fZG9jdW1lbnRfZ2V0X2xpbmtzKGRvY3VtZW50KTsKKyAgICBnX2Fzc2VydChjb2xsZWN0aW9u
Mik7CisgICAgZ19vYmplY3Rfd2Vha19yZWYoR19PQkpFQ1QoY29sbGVjdGlvbjIpLCAoR1dlYWtO
b3RpZnkpd2Vha19ub3RpZnksICZjb3VudCk7CisKKyAgICBnX29iamVjdF91bnJlZihkb2N1bWVu
dCk7CisgICAgZ19vYmplY3RfdW5yZWYoaGVhZCk7CisgICAgZ19vYmplY3RfdW5yZWYoYm9keSk7
CisgICAgZ19vYmplY3RfdW5yZWYoY29sbGVjdGlvbik7CisgICAgZ19vYmplY3RfdW5yZWYoY29s
bGVjdGlvbjIpOworCisgICAgZ19hc3NlcnRfY21wdWludChjb3VudCwgPT0sIDUpOworCisgICAg
d2Via2l0X3dlYl92aWV3X2xvYWRfc3RyaW5nKFdFQktJVF9XRUJfVklFVyh2aWV3KSwgSFRNTF9E
T0NVTUVOVF9JRlJBTUUsIE5VTEwsIE5VTEwsIE5VTEwpOworCisgICAgd2hpbGUgKGdfbWFpbl9j
b250ZXh0X3BlbmRpbmcoTlVMTCkpCisgICAgICAgIGdfbWFpbl9jb250ZXh0X2l0ZXJhdGlvbihO
VUxMLCBGQUxTRSk7CisKKyAgICBjb3VudCA9IDA7CisKKyAgICBkb2N1bWVudCA9IHdlYmtpdF93
ZWJfdmlld19nZXRfZG9tX2RvY3VtZW50KHZpZXcpOworICAgIFdlYktpdERPTUVsZW1lbnQqIGRp
diA9IHdlYmtpdF9kb21fZG9jdW1lbnRfZ2V0X2VsZW1lbnRfYnlfaWQoZG9jdW1lbnQsICJ0ZXN0
Iik7CisgICAgZ19hc3NlcnQoZGl2KTsKKyAgICBnX29iamVjdF93ZWFrX3JlZihHX09CSkVDVChk
aXYpLCAoR1dlYWtOb3RpZnkpd2Vha19ub3RpZnksICZjb3VudCk7CisgICAgV2ViS2l0RE9NRWxl
bWVudCogaWZyYW1lID0gd2Via2l0X2RvbV9kb2N1bWVudF9nZXRfZWxlbWVudF9ieV9pZChkb2N1
bWVudCwgImlmcmFtZSIpOworICAgIGdfYXNzZXJ0KGlmcmFtZSk7CisKKyAgICAvKiBGSVhNRTog
SUZyYW1lIEFQSXMgaGF2ZSB0aGUgJ2knIGluIHRoZSB3cm9uZyBwbGFjZSAqLworICAgIHdlYmtp
dF9kb21fZWxlbWVudF9zZXRfYXR0cmlidXRlKGlmcmFtZSwgInNyYyIsICJkYXRhOjxodG1sPjxo
ZWFkPjwvaGVhZD48L2h0bWw+IiwgTlVMTCk7CisKKyAgICB3aGlsZSAoZ19tYWluX2NvbnRleHRf
cGVuZGluZyhOVUxMKSkKKyAgICAgICAgZ19tYWluX2NvbnRleHRfaXRlcmF0aW9uKE5VTEwsIEZB
TFNFKTsKKworICAgIFdlYktpdERPTURvY3VtZW50KiBpZnJhbWVEb2N1bWVudCA9IHdlYmtpdF9k
b21faHRtbGlfZnJhbWVfZWxlbWVudF9nZXRfY29udGVudF9kb2N1bWVudChXRUJLSVRfRE9NX0hU
TUxJX0ZSQU1FX0VMRU1FTlQoaWZyYW1lKSk7CisgICAgZ19hc3NlcnQoaWZyYW1lRG9jdW1lbnQp
OworICAgIGhlYWQgPSB3ZWJraXRfZG9tX2RvY3VtZW50X2dldF9oZWFkKGlmcmFtZURvY3VtZW50
KTsKKyAgICBnX2Fzc2VydChoZWFkKTsKKyAgICBnX29iamVjdF93ZWFrX3JlZihHX09CSkVDVCho
ZWFkKSwgKEdXZWFrTm90aWZ5KXdlYWtfbm90aWZ5LCAmY291bnQpOworCisgICAgd2Via2l0X2Rv
bV9lbGVtZW50X3NldF9hdHRyaWJ1dGUoaWZyYW1lLCAic3JjIiwgImFib3V0OmJsYW5rIiwgTlVM
TCk7CisKKyAgICB3aGlsZSAoZ19tYWluX2NvbnRleHRfcGVuZGluZyhOVUxMKSkKKyAgICAgICAg
Z19tYWluX2NvbnRleHRfaXRlcmF0aW9uKE5VTEwsIEZBTFNFKTsKKworICAgIGdfYXNzZXJ0X2Nt
cHVpbnQoY291bnQsID09LCAxKTsKKworICAgIHdlYmtpdF93ZWJfdmlld19sb2FkX3N0cmluZyhX
RUJLSVRfV0VCX1ZJRVcodmlldyksIEhUTUxfRE9DVU1FTlRfTElOS1MsIE5VTEwsIE5VTEwsIE5V
TEwpOworCisgICAgd2hpbGUgKGdfbWFpbl9jb250ZXh0X3BlbmRpbmcoTlVMTCkpCisgICAgICAg
IGdfbWFpbl9jb250ZXh0X2l0ZXJhdGlvbihOVUxMLCBGQUxTRSk7CisKKyAgICBnX2Fzc2VydF9j
bXB1aW50KGNvdW50LCA9PSwgMik7CisKKyAgICBjb3VudCA9IDA7CisKKyAgICBkb2N1bWVudCA9
IHdlYmtpdF93ZWJfdmlld19nZXRfZG9tX2RvY3VtZW50KHZpZXcpOworICAgIGdfYXNzZXJ0KGRv
Y3VtZW50KTsKKyAgICBnX29iamVjdF93ZWFrX3JlZihHX09CSkVDVChkb2N1bWVudCksIChHV2Vh
a05vdGlmeSl3ZWFrX25vdGlmeSwgJmNvdW50KTsKKyAgICAvKiBBc2sgdHdpY2UgZm9yIHRoZSBE
b2N1bWVudCAqLworICAgIFdlYktpdERPTURvY3VtZW50KiBkb2N1bWVudDIgPSB3ZWJraXRfd2Vi
X3ZpZXdfZ2V0X2RvbV9kb2N1bWVudCh2aWV3KTsKKyAgICBnX2Fzc2VydChkb2N1bWVudDIpOwor
ICAgIGdfb2JqZWN0X3dlYWtfcmVmKEdfT0JKRUNUKGRvY3VtZW50MiksIChHV2Vha05vdGlmeSl3
ZWFrX25vdGlmeSwgJmNvdW50KTsKKyAgICBoZWFkID0gd2Via2l0X2RvbV9kb2N1bWVudF9nZXRf
aGVhZChkb2N1bWVudCk7CisgICAgZ19hc3NlcnQoaGVhZCk7CisgICAgZ19vYmplY3Rfd2Vha19y
ZWYoR19PQkpFQ1QoaGVhZCksIChHV2Vha05vdGlmeSl3ZWFrX25vdGlmeSwgJmNvdW50KTsKKyAg
ICBib2R5ID0gd2Via2l0X2RvbV9kb2N1bWVudF9nZXRfYm9keShkb2N1bWVudCk7CisgICAgZ19h
c3NlcnQoYm9keSk7CisgICAgZ19vYmplY3Rfd2Vha19yZWYoR19PQkpFQ1QoYm9keSksIChHV2Vh
a05vdGlmeSl3ZWFrX25vdGlmeSwgJmNvdW50KTsKKyAgICBjb2xsZWN0aW9uID0gd2Via2l0X2Rv
bV9kb2N1bWVudF9nZXRfbGlua3MoZG9jdW1lbnQpOworICAgIGdfYXNzZXJ0KGNvbGxlY3Rpb24p
OworICAgIGdfb2JqZWN0X3dlYWtfcmVmKEdfT0JKRUNUKGNvbGxlY3Rpb24pLCAoR1dlYWtOb3Rp
Znkpd2Vha19ub3RpZnksICZjb3VudCk7CisKKyAgICBndGtfd2lkZ2V0X2Rlc3Ryb3koZml4dHVy
ZS0+d2ViVmlldyk7CisgICAgZml4dHVyZS0+d2ViVmlldyA9IE5VTEw7CisKKyAgICBnX2Fzc2Vy
dF9jbXB1aW50KGNvdW50LCA9PSwgNCk7CisKKyAgICBnX29iamVjdF91bnJlZihjb2xsZWN0aW9u
KTsKKworICAgIGdfYXNzZXJ0X2NtcHVpbnQoY291bnQsID09LCA1KTsKIH0KIAogaW50IG1haW4o
aW50IGFyZ2MsIGNoYXIqKiBhcmd2KQpAQCAtMTg3LDYgKzMyNSw4IEBAIGludCBtYWluKGludCBh
cmdjLCBjaGFyKiogYXJndikKIAogICAgIGd0a190ZXN0X2luaXQoJmFyZ2MsICZhcmd2LCBOVUxM
KTsKIAorICAgIHRlc3R1dGlsc19yZWxhdGl2ZV9jaGRpcigiV2ViS2l0L2d0ay90ZXN0cy9yZXNv
dXJjZXMvaWZyYW1lZG9jdW1lbnQuaHRtbCIsIGFyZ3ZbMF0pOworCiAgICAgZ190ZXN0X2J1Z19i
YXNlKCJodHRwczovL2J1Z3Mud2Via2l0Lm9yZy8iKTsKIAogICAgIGdfdGVzdF9hZGQoIi93ZWJr
aXQvZG9tZG9jdW1lbnQvdGVzdF90aXRsZSIsCkBAIC0yMTksNiArMzU5LDEyIEBAIGludCBtYWlu
KGludCBhcmdjLCBjaGFyKiogYXJndikKICAgICAgICAgICAgICAgIHRlc3RfZG9tX2RvY3VtZW50
X2dldF9saW5rcywKICAgICAgICAgICAgICAgIGRvbV9kb2N1bWVudF9maXh0dXJlX3RlYXJkb3du
KTsKIAorICAgIGdfdGVzdF9hZGQoIi93ZWJraXQvZG9tZG9jdW1lbnQvdGVzdF9nYXJiYWdlX2Nv
bGxlY3Rpb24iLAorICAgICAgICAgICAgICAgRG9tRG9jdW1lbnRGaXh0dXJlLCBIVE1MX0RPQ1VN
RU5UX0xJTktTLAorICAgICAgICAgICAgICAgZG9tX2RvY3VtZW50X2ZpeHR1cmVfc2V0dXAsCisg
ICAgICAgICAgICAgICB0ZXN0X2RvbV9kb2N1bWVudF9nYXJiYWdlX2NvbGxlY3Rpb24sCisgICAg
ICAgICAgICAgICBkb21fZG9jdW1lbnRfZml4dHVyZV90ZWFyZG93bik7CisKICAgICByZXR1cm4g
Z190ZXN0X3J1bigpOwogfQogCmRpZmYgLS1naXQgYS9XZWJLaXQvZ3RrL3Rlc3RzL3Rlc3Rkb21u
b2RlLmMgYi9XZWJLaXQvZ3RrL3Rlc3RzL3Rlc3Rkb21ub2RlLmMKaW5kZXggYzYwNTZkNi4uN2Q2
MjcyMCAxMDA2NDQKLS0tIGEvV2ViS2l0L2d0ay90ZXN0cy90ZXN0ZG9tbm9kZS5jCisrKyBiL1dl
YktpdC9ndGsvdGVzdHMvdGVzdGRvbW5vZGUuYwpAQCAtODQsNiArODQsNyBAQCBzdGF0aWMgdm9p
ZCB0ZXN0X2RvbV9ub2RlX2hpZXJhcmNoeV9uYXZpZ2F0aW9uKERvbU5vZGVGaXh0dXJlKiBmaXh0
dXJlLCBnY29uc3RwbwogICAgIHB0ciA9IHdlYmtpdF9kb21fbm9kZV9saXN0X2l0ZW0obGlzdCwg
MCk7CiAgICAgZ19hc3NlcnQocHRyKTsKICAgICBnX2Fzc2VydChXRUJLSVRfRE9NX0lTX0hUTUxf
VElUTEVfRUxFTUVOVChwdHIpKTsKKyAgICBnX29iamVjdF91bnJlZihsaXN0KTsKIAogICAgIC8q
IEJvZHksIEhlYWQgc2libGluZyAqLwogICAgIHB0ciA9IHdlYmtpdF9kb21fbm9kZV9nZXRfbmV4
dF9zaWJsaW5nKFdFQktJVF9ET01fTk9ERShoZWFkKSk7CkBAIC0xMTgsNiArMTE5LDcgQEAgc3Rh
dGljIHZvaWQgdGVzdF9kb21fbm9kZV9oaWVyYXJjaHlfbmF2aWdhdGlvbihEb21Ob2RlRml4dHVy
ZSogZml4dHVyZSwgZ2NvbnN0cG8KICAgICAgICAgLyogTm90aGluZyAqLzsKIAogICAgIGdfYXNz
ZXJ0X2NtcGludChpLCA9PSwgMyk7CisgICAgZ19vYmplY3RfdW5yZWYobGlzdCk7CiB9CiAKIHN0
YXRpYyB2b2lkIHRlc3RfZG9tX25vZGVfaW5zZXJ0aW9uKERvbU5vZGVGaXh0dXJlKiBmaXh0dXJl
LCBnY29uc3Rwb2ludGVyIGRhdGEpCkBAIC0xNDgsNiArMTUwLDcgQEAgc3RhdGljIHZvaWQgdGVz
dF9kb21fbm9kZV9pbnNlcnRpb24oRG9tTm9kZUZpeHR1cmUqIGZpeHR1cmUsIGdjb25zdHBvaW50
ZXIgZGF0YSkKICAgICBub2RlID0gd2Via2l0X2RvbV9ub2RlX2xpc3RfaXRlbShsaXN0LCAwKTsK
ICAgICBnX2Fzc2VydChub2RlKTsKICAgICBnX2Fzc2VydCh3ZWJraXRfZG9tX25vZGVfaXNfc2Ft
ZV9ub2RlKFdFQktJVF9ET01fTk9ERShwKSwgbm9kZSkpOworICAgIGdfb2JqZWN0X3VucmVmKGxp
c3QpOwogCiAgICAgLyogUmVwbGFjZSB0aGUgUCB0YWcgd2l0aCBhIERJViB0YWcgKi8KICAgICBk
aXYgPSB3ZWJraXRfZG9tX2RvY3VtZW50X2NyZWF0ZV9lbGVtZW50KGRvY3VtZW50LCAiRElWIiwg
TlVMTCk7CkBAIC0xNTgsMTEgKzE2MSwxMyBAQCBzdGF0aWMgdm9pZCB0ZXN0X2RvbV9ub2RlX2lu
c2VydGlvbihEb21Ob2RlRml4dHVyZSogZml4dHVyZSwgZ2NvbnN0cG9pbnRlciBkYXRhKQogICAg
IG5vZGUgPSB3ZWJraXRfZG9tX25vZGVfbGlzdF9pdGVtKGxpc3QsIDApOwogICAgIGdfYXNzZXJ0
KG5vZGUpOwogICAgIGdfYXNzZXJ0KHdlYmtpdF9kb21fbm9kZV9pc19zYW1lX25vZGUoV0VCS0lU
X0RPTV9OT0RFKGRpdiksIG5vZGUpKTsKKyAgICBnX29iamVjdF91bnJlZihsaXN0KTsKIAogICAg
IC8qIE5vdyByZW1vdmUgdGhlIHRhZyAqLwogICAgIHdlYmtpdF9kb21fbm9kZV9yZW1vdmVfY2hp
bGQoV0VCS0lUX0RPTV9OT0RFKGJvZHkpLCBub2RlLCBOVUxMKTsKICAgICBsaXN0ID0gd2Via2l0
X2RvbV9ub2RlX2dldF9jaGlsZF9ub2RlcyhXRUJLSVRfRE9NX05PREUoYm9keSkpOwogICAgIGdf
YXNzZXJ0X2NtcGludCh3ZWJraXRfZG9tX25vZGVfbGlzdF9nZXRfbGVuZ3RoKGxpc3QpLCA9PSwg
MCk7CisgICAgZ19vYmplY3RfdW5yZWYobGlzdCk7CiAKICAgICAvKiBUT0RPOiBpbnNlcnRfYmVm
b3JlLCB3aGljaCBkb2VzIG5vdCBzZWVtIHRvIGJlIHdvcmtpbmcgY29ycmVjdGx5ICovCiB9CmRp
ZmYgLS1naXQgYS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRoaXR0ZXN0cmVzdWx0LmNwcCBiL1dl
YktpdC9ndGsvd2Via2l0L3dlYmtpdGhpdHRlc3RyZXN1bHQuY3BwCmluZGV4IDg2MmQ5NGEuLjFl
NmZlMzMgMTAwNjQ0Ci0tLSBhL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdGhpdHRlc3RyZXN1bHQu
Y3BwCisrKyBiL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdGhpdHRlc3RyZXN1bHQuY3BwCkBAIC03
MSw2ICs3MSwxNSBAQCBzdGF0aWMgdm9pZCB3ZWJraXRfaGl0X3Rlc3RfcmVzdWx0X2ZpbmFsaXpl
KEdPYmplY3QqIG9iamVjdCkKICAgICBHX09CSkVDVF9DTEFTUyh3ZWJraXRfaGl0X3Rlc3RfcmVz
dWx0X3BhcmVudF9jbGFzcyktPmZpbmFsaXplKG9iamVjdCk7CiB9CiAKK3N0YXRpYyB2b2lkIHdl
YmtpdF9oaXRfdGVzdF9yZXN1bHRfZGlzcG9zZShHT2JqZWN0KiBvYmplY3QpCit7CisgICAgV2Vi
S2l0SGl0VGVzdFJlc3VsdFByaXZhdGUqIHByaXYgPSBXRUJLSVRfSElUX1RFU1RfUkVTVUxUKG9i
amVjdCktPnByaXY7CisKKyAgICBnX29iamVjdF91bnJlZihwcml2LT5pbm5lck5vZGUpOworCisg
ICAgR19PQkpFQ1RfQ0xBU1Mod2Via2l0X2hpdF90ZXN0X3Jlc3VsdF9wYXJlbnRfY2xhc3MpLT5k
aXNwb3NlKG9iamVjdCk7Cit9CisKIHN0YXRpYyB2b2lkIHdlYmtpdF9oaXRfdGVzdF9yZXN1bHRf
Z2V0X3Byb3BlcnR5KEdPYmplY3QqIG9iamVjdCwgZ3VpbnQgcHJvcGVydHlJRCwgR1ZhbHVlKiB2
YWx1ZSwgR1BhcmFtU3BlYyogcHNwZWMpCiB7CiAgICAgV2ViS2l0SGl0VGVzdFJlc3VsdCogd2Vi
X2hpdF90ZXN0X3Jlc3VsdCA9IFdFQktJVF9ISVRfVEVTVF9SRVNVTFQob2JqZWN0KTsKQEAgLTEz
MSw2ICsxNDAsNyBAQCBzdGF0aWMgdm9pZCB3ZWJraXRfaGl0X3Rlc3RfcmVzdWx0X2NsYXNzX2lu
aXQoV2ViS2l0SGl0VGVzdFJlc3VsdENsYXNzKiB3ZWJIaXRUZQogICAgIEdPYmplY3RDbGFzcyog
b2JqZWN0Q2xhc3MgPSBHX09CSkVDVF9DTEFTUyh3ZWJIaXRUZXN0UmVzdWx0Q2xhc3MpOwogCiAg
ICAgb2JqZWN0Q2xhc3MtPmZpbmFsaXplID0gd2Via2l0X2hpdF90ZXN0X3Jlc3VsdF9maW5hbGl6
ZTsKKyAgICBvYmplY3RDbGFzcy0+ZGlzcG9zZSA9IHdlYmtpdF9oaXRfdGVzdF9yZXN1bHRfZGlz
cG9zZTsKICAgICBvYmplY3RDbGFzcy0+Z2V0X3Byb3BlcnR5ID0gd2Via2l0X2hpdF90ZXN0X3Jl
c3VsdF9nZXRfcHJvcGVydHk7CiAgICAgb2JqZWN0Q2xhc3MtPnNldF9wcm9wZXJ0eSA9IHdlYmtp
dF9oaXRfdGVzdF9yZXN1bHRfc2V0X3Byb3BlcnR5OwogCmRpZmYgLS1naXQgYS9XZWJLaXQvZ3Rr
L3dlYmtpdC93ZWJraXR3ZWJmcmFtZS5jcHAgYi9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJm
cmFtZS5jcHAKaW5kZXggNjNhMjQxMy4uZmNiNTE5NyAxMDA2NDQKLS0tIGEvV2ViS2l0L2d0ay93
ZWJraXQvd2Via2l0d2ViZnJhbWUuY3BwCisrKyBiL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdl
YmZyYW1lLmNwcApAQCAtMzUsNiArMzUsNyBAQAogI2luY2x1ZGUgIkFjY2Vzc2liaWxpdHlPYmpl
Y3RXcmFwcGVyQXRrLmgiCiAjaW5jbHVkZSAiQW5pbWF0aW9uQ29udHJvbGxlci5oIgogI2luY2x1
ZGUgIkFYT2JqZWN0Q2FjaGUuaCIKKyNpbmNsdWRlICJET01PYmplY3RDYWNoZS5oIgogI2luY2x1
ZGUgIkRvY3VtZW50TG9hZGVyLmgiCiAjaW5jbHVkZSAiRG9jdW1lbnRMb2FkZXJHdGsuaCIKICNp
bmNsdWRlICJGcmFtZUxvYWRlci5oIgpAQCAtMTQ2LDcgKzE0NywxMCBAQCBzdGF0aWMgdm9pZCB3
ZWJraXRfd2ViX2ZyYW1lX2dldF9wcm9wZXJ0eShHT2JqZWN0KiBvYmplY3QsIGd1aW50IHByb3Bf
aWQsIEdWYWx1ZQogdm9pZCB3ZWJraXRfd2ViX2ZyYW1lX2NvcmVfZnJhbWVfZ29uZShXZWJLaXRX
ZWJGcmFtZSogZnJhbWUpCiB7CiAgICAgQVNTRVJUKFdFQktJVF9JU19XRUJfRlJBTUUoZnJhbWUp
KTsKLSAgICBmcmFtZS0+cHJpdi0+Y29yZUZyYW1lID0gMDsKKyAgICBXZWJLaXRXZWJGcmFtZVBy
aXZhdGUqIHByaXYgPSBmcmFtZS0+cHJpdjsKKyAgICBpZiAocHJpdi0+Y29yZUZyYW1lKQorICAg
ICAgICBET01PYmplY3RDYWNoZTo6Y2xlYXJCeUZyYW1lKHByaXYtPmNvcmVGcmFtZSk7CisgICAg
cHJpdi0+Y29yZUZyYW1lID0gMDsKIH0KIAogc3RhdGljIFdlYktpdFdlYkRhdGFTb3VyY2UqIHdl
YmtpdF93ZWJfZnJhbWVfZ2V0X2RhdGFfc291cmNlX2Zyb21fY29yZV9sb2FkZXIoV2ViQ29yZTo6
RG9jdW1lbnRMb2FkZXIqIGxvYWRlcikKQEAgLTE2MCw2ICsxNjQsNyBAQCBzdGF0aWMgdm9pZCB3
ZWJraXRfd2ViX2ZyYW1lX2ZpbmFsaXplKEdPYmplY3QqIG9iamVjdCkKICAgICBXZWJLaXRXZWJG
cmFtZVByaXZhdGUqIHByaXYgPSBmcmFtZS0+cHJpdjsKIAogICAgIGlmIChwcml2LT5jb3JlRnJh
bWUpIHsKKyAgICAgICAgRE9NT2JqZWN0Q2FjaGU6OmNsZWFyQnlGcmFtZShwcml2LT5jb3JlRnJh
bWUpOwogICAgICAgICBwcml2LT5jb3JlRnJhbWUtPmxvYWRlcigpLT5jYW5jZWxBbmRDbGVhcigp
OwogICAgICAgICBwcml2LT5jb3JlRnJhbWUgPSAwOwogICAgIH0KLS0gCjEuNy4yLjMKCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>74462</attachid>
            <date>2010-11-19 19:49:18 -0800</date>
            <delta_ts>2010-11-20 18:15:00 -0800</delta_ts>
            <desc>domcache.diff</desc>
            <filename>domcache.diff</filename>
            <type>text/plain</type>
            <size>30779</size>
            <attacher name="Xan Lopez">xan.lopez</attacher>
            
              <data encoding="base64">RnJvbSAxNzIxMDE1MTE5Y2E0MDExMTA5ZTNiZDE2MzdlZWIzZmFmMDAyNjA3IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBYYW4gTG9wZXogPHhsb3BlekBpZ2FsaWEuY29tPgpEYXRlOiBU
dWUsIDE2IE5vdiAyMDEwIDIwOjMxOjMzIC0wNTAwClN1YmplY3Q6IFtQQVRDSF0gV2ViQ29yZToK
CjIwMTAtMTEtMTkgIFhhbiBMb3BleiAgPHhsb3BlekBpZ2FsaWEuY29tPgoKICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KCiAgICAgICAgW0dUS10gTWVtb3J5IG1hbmFnYW1lbnQg
Zm9yIERPTSBHT2JqZWN0IHdyYXBwZXJzCiAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTQwMzAyCgogICAgICAgIEluaXRpYWwgYXR0ZW1wdCB0byBoYXZlIGEg
a2luZCBvZiBwb29yIG1hbidzIGdhcmJhZ2UgY29sbGVjdGlvbgogICAgICAgIGZvciBHT2JqZWN0
IERPTSBvYmplY3RzLiBXZSB0aWUgdGhlIG9iamVjdCdzIGxpZmVjeWNsZSB0byB0aGVpcgogICAg
ICAgIHBhcmVudCBGcmFtZSBhbmQvb3IgaXRzIGRvY3VtZW50OyB0aGF0IGlzLCBhbGwgb2JqZWN0
cyB3aWxsIGJlCiAgICAgICAgY29sbGVjdGVkIHdoZW4gdGhlaXIgcGFyZW50IGZyYW1lIGlzIGRl
c3Ryb3llZCBvciB3aGVuIHRoYXQgZnJhbWUKICAgICAgICB0cmFuc2l0aW9ucyB0byBhIG5ldyBk
b2N1bWVudC4gTWFudWFsIG1hbmFnZW1lbnQgKGNhbGxpbmcKICAgICAgICBnX29iamVjdF91bnJl
ZiBvbiB0aGVtKSBpcyBhbHNvIGFsbG93ZWQsIGFuZCBpcyByZXF1aXJlZCBmb3IKICAgICAgICBv
YmplY3RzIHRoYXQgYXJlIG5vdCBpbiB0aGUgRE9NIHRyZWUgKGVnIE5vZGVMaXN0cykuCgogICAg
ICAgICogR05VbWFrZWZpbGUuYW06CiAgICAgICAgKiBiaW5kaW5ncy9nb2JqZWN0L0RPTU9iamVj
dENhY2hlLmNwcDogQWRkZWQuCiAgICAgICAgKiBiaW5kaW5ncy9nb2JqZWN0L0RPTU9iamVjdENh
Y2hlLmg6IENvcGllZCBmcm9tIFdlYkNvcmUvYmluZGluZ3MvZ29iamVjdC9XZWJLaXRET01CaW5k
aW5nLmguCiAgICAgICAgKiBiaW5kaW5ncy9nb2JqZWN0L1dlYktpdERPTUJpbmRpbmcuY3BwOiBS
ZW1vdmUgdGhlIG9sZCBjYWNoZSBjb2RlLgogICAgICAgICogYmluZGluZ3MvZ29iamVjdC9XZWJL
aXRET01CaW5kaW5nLmg6IGRpdHRvLgogICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2Vu
ZXJhdG9yR09iamVjdC5wbTogaW5jbHVkZSB0aGUgbmV3IERPTU9iamVjdENhY2hlIGhlYWRlci4K
CldlYktpdC9ndGs6CgoyMDEwLTExLTE5ICBYYW4gTG9wZXogIDx4bG9wZXpAaWdhbGlhLmNvbT4K
CiAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCgogICAgICAgIFtHVEtdIE1lbW9y
eSBtYW5hZ2FtZW50IGZvciBET00gR09iamVjdCB3cmFwcGVycwogICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00MDMwMgoKICAgICAgICBJbml0aWFsIGF0dGVt
cHQgdG8gaGF2ZSBhIGtpbmQgb2YgcG9vciBtYW4ncyBnYXJiYWdlIGNvbGxlY3Rpb24KICAgICAg
ICBmb3IgR09iamVjdCBET00gb2JqZWN0cy4gV2UgdGllIHRoZSBvYmplY3QncyBsaWZlY3ljbGUg
dG8gdGhlaXIKICAgICAgICBwYXJlbnQgRnJhbWUgYW5kL29yIGl0cyBkb2N1bWVudDsgdGhhdCBp
cywgYWxsIG9iamVjdHMgd2lsbCBiZQogICAgICAgIGNvbGxlY3RlZCB3aGVuIHRoZWlyIHBhcmVu
dCBmcmFtZSBpcyBkZXN0cm95ZWQgb3Igd2hlbiB0aGF0IGZyYW1lCiAgICAgICAgdHJhbnNpdGlv
bnMgdG8gYSBuZXcgZG9jdW1lbnQuIE1hbnVhbCBtYW5hZ2VtZW50IChjYWxsaW5nCiAgICAgICAg
Z19vYmplY3RfdW5yZWYgb24gdGhlbSkgaXMgYWxzbyBhbGxvd2VkLCBhbmQgaXMgcmVxdWlyZWQg
Zm9yCiAgICAgICAgb2JqZWN0cyB0aGF0IGFyZSBub3QgaW4gdGhlIERPTSB0cmVlIChlZyBOb2Rl
TGlzdHMpLgoKICAgICAgICAqIEdOVW1ha2VmaWxlLmFtOiBhZGQgdGVzdHV0aWxzIGZpbGUgdG8g
dGVzdGRvbWRvY3VtZW50LmMKICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xp
ZW50R3RrLmNwcDoKICAgICAgICAoV2ViS2l0OjpGcmFtZUxvYWRlckNsaWVudDo6c2V0TWFpbkZy
YW1lRG9jdW1lbnRSZWFkeSk6IGNvbGxlY3QKICAgICAgICBET00gb2JqZWN0cyBvbiBkb2N1bWVu
dCB0cmFuc2l0aW9uLgogICAgICAgICogdGVzdHMvdGVzdGRvbWRvY3VtZW50LmM6CiAgICAgICAg
KGRvbV9kb2N1bWVudF9maXh0dXJlX3RlYXJkb3duKTogb25seSBkZXN0cm95IHRoZSB2aWV3IGlm
IGl0J3Mgbm90CiAgICAgICAgYWxyZWFkeSBkZXN0cm95ZWQsIHNpbmNlIHRoZSBuZXcgdGVzdCBk
ZXRyb3lzIGl0IG9uIGl0cyBvd24uCiAgICAgICAgKHRlc3RfZG9tX2RvY3VtZW50X2dldF9lbGVt
ZW50c19ieV90YWdfbmFtZSk6IG1hbnVhbGx5IHVucmVmIG5vZGUgbGlzdC4KICAgICAgICAodGVz
dF9kb21fZG9jdW1lbnRfZ2V0X2VsZW1lbnRzX2J5X2NsYXNzX25hbWUpOiBkaXR0by4KICAgICAg
ICAodGVzdF9kb21fZG9jdW1lbnRfZ2V0X2xpbmtzKTogZGl0dG8uCiAgICAgICAgKHRlc3RfZG9t
X2RvY3VtZW50X2dhcmJhZ2VfY29sbGVjdGlvbik6IHRlc3QgYWxsIHBvc3NpYmxlCiAgICAgICAg
c2NlbmFyaW9zIGZvciBET00gb2JqZWN0ICJnYXJiYWdlIGNvbGxlY3Rpb24iLgogICAgICAgICht
YWluKTogYWRkIG5ldyB0ZXN0LgogICAgICAgICogdGVzdHMvdGVzdGRvbW5vZGUuYzoKICAgICAg
ICAodGVzdF9kb21fbm9kZV9oaWVyYXJjaHlfbmF2aWdhdGlvbik6IG1hbnVhbGx5IHVucmVmIG5v
ZGUgbGlzdC4KICAgICAgICAodGVzdF9kb21fbm9kZV9pbnNlcnRpb24pOiBkaXR0by4KICAgICAg
ICAqIHdlYmtpdC93ZWJraXRoaXR0ZXN0cmVzdWx0LmNwcDoKICAgICAgICAod2Via2l0X2hpdF90
ZXN0X3Jlc3VsdF9kaXNwb3NlKTogdW5yZWYgdGhlIGlubmVyIG5vZGUgb24gZGlzcG9zZQogICAg
ICAgIG5vdyB0aGF0IHRoZSBtZW1vcnkgbWFuYWdlbWVudCBtb2RlbCBpcyBjbGFyaWZpZWQuCiAg
ICAgICAgKHdlYmtpdF9oaXRfdGVzdF9yZXN1bHRfY2xhc3NfaW5pdCk6IGhvb2sgZGlzcG9zZS4K
ICAgICAgICAqIHdlYmtpdC93ZWJraXR3ZWJmcmFtZS5jcHA6CiAgICAgICAgKHdlYmtpdF93ZWJf
ZnJhbWVfY29yZV9mcmFtZV9nb25lKTogY2xlYXIgRE9NIG9iamVjdHMgYXR0YWNoZWQgdG8gdGhp
cyBmcmFtZS4KICAgICAgICAod2Via2l0X3dlYl9mcmFtZV9maW5hbGl6ZSk6IGRpdHRvLgotLS0K
IFdlYkNvcmUvQ2hhbmdlTG9nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAy
MiArKysKIFdlYkNvcmUvR05VbWFrZWZpbGUuYW0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHwgICAgMiArCiBXZWJDb3JlL2JpbmRpbmdzL2dvYmplY3QvRE9NT2JqZWN0Q2FjaGUuY3BwICAg
ICAgICB8ICAxMzEgKysrKysrKysrKysrKysrKysKIFdlYkNvcmUvYmluZGluZ3MvZ29iamVjdC9E
T01PYmplY3RDYWNoZS5oICAgICAgICAgIHwgICAzOCArKysrKwogV2ViQ29yZS9iaW5kaW5ncy9n
b2JqZWN0L1dlYktpdERPTUJpbmRpbmcuY3BwICAgICAgfCAgIDI3ICstLS0tCiBXZWJDb3JlL2Jp
bmRpbmdzL2dvYmplY3QvV2ViS2l0RE9NQmluZGluZy5oICAgICAgICB8ICAgIDcgLQogV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JHT2JqZWN0LnBtICAgfCAgICAxICsKIFdl
YktpdC9ndGsvQ2hhbmdlTG9nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAzOSAr
KysrKwogV2ViS2l0L2d0ay9HTlVtYWtlZmlsZS5hbSAgICAgICAgICAgICAgICAgICAgICAgICAg
fCAgICAyICstCiBXZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50R3Rr
LmNwcCB8ICAgIDYgKy0KIFdlYktpdC9ndGsvdGVzdHMvdGVzdGRvbWRvY3VtZW50LmMgICAgICAg
ICAgICAgICAgIHwgIDE1MCArKysrKysrKysrKysrKysrKysrLQogV2ViS2l0L2d0ay90ZXN0cy90
ZXN0ZG9tbm9kZS5jICAgICAgICAgICAgICAgICAgICAgfCAgICA1ICsKIFdlYktpdC9ndGsvd2Vi
a2l0L3dlYmtpdGhpdHRlc3RyZXN1bHQuY3BwICAgICAgICAgIHwgICAxMCArKwogV2ViS2l0L2d0
ay93ZWJraXQvd2Via2l0d2ViZnJhbWUuY3BwICAgICAgICAgICAgICAgfCAgICA3ICstCiAxNCBm
aWxlcyBjaGFuZ2VkLCA0MDggaW5zZXJ0aW9ucygrKSwgMzkgZGVsZXRpb25zKC0pCiBjcmVhdGUg
bW9kZSAxMDA2NDQgV2ViQ29yZS9iaW5kaW5ncy9nb2JqZWN0L0RPTU9iamVjdENhY2hlLmNwcAog
Y3JlYXRlIG1vZGUgMTAwNjQ0IFdlYkNvcmUvYmluZGluZ3MvZ29iamVjdC9ET01PYmplY3RDYWNo
ZS5oCgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9DaGFuZ2VMb2cgYi9XZWJDb3JlL0NoYW5nZUxvZwpp
bmRleCA3ZWVjYmY0Li5kYWIxODFiIDEwMDY0NAotLS0gYS9XZWJDb3JlL0NoYW5nZUxvZworKysg
Yi9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI1IEBACisyMDEwLTExLTE5ICBYYW4gTG9w
ZXogIDx4bG9wZXpAaWdhbGlhLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBbR1RLXSBNZW1vcnkgbWFuYWdhbWVudCBmb3IgRE9NIEdPYmplY3Qg
d3JhcHBlcnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTQwMzAyCisKKyAgICAgICAgSW5pdGlhbCBhdHRlbXB0IHRvIGhhdmUgYSBraW5kIG9mIHBvb3Ig
bWFuJ3MgZ2FyYmFnZSBjb2xsZWN0aW9uCisgICAgICAgIGZvciBHT2JqZWN0IERPTSBvYmplY3Rz
LiBXZSB0aWUgdGhlIG9iamVjdCdzIGxpZmVjeWNsZSB0byB0aGVpcgorICAgICAgICBwYXJlbnQg
RnJhbWUgYW5kL29yIGl0cyBkb2N1bWVudDsgdGhhdCBpcywgYWxsIG9iamVjdHMgd2lsbCBiZQor
ICAgICAgICBjb2xsZWN0ZWQgd2hlbiB0aGVpciBwYXJlbnQgZnJhbWUgaXMgZGVzdHJveWVkIG9y
IHdoZW4gdGhhdCBmcmFtZQorICAgICAgICB0cmFuc2l0aW9ucyB0byBhIG5ldyBkb2N1bWVudC4g
TWFudWFsIG1hbmFnZW1lbnQgKGNhbGxpbmcKKyAgICAgICAgZ19vYmplY3RfdW5yZWYgb24gdGhl
bSkgaXMgYWxzbyBhbGxvd2VkLCBhbmQgaXMgcmVxdWlyZWQgZm9yCisgICAgICAgIG9iamVjdHMg
dGhhdCBhcmUgbm90IGluIHRoZSBET00gdHJlZSAoZWcgTm9kZUxpc3RzKS4KKworICAgICAgICAq
IEdOVW1ha2VmaWxlLmFtOgorICAgICAgICAqIGJpbmRpbmdzL2dvYmplY3QvRE9NT2JqZWN0Q2Fj
aGUuY3BwOiBBZGRlZC4KKyAgICAgICAgKiBiaW5kaW5ncy9nb2JqZWN0L0RPTU9iamVjdENhY2hl
Lmg6IENvcGllZCBmcm9tIFdlYkNvcmUvYmluZGluZ3MvZ29iamVjdC9XZWJLaXRET01CaW5kaW5n
LmguCisgICAgICAgICogYmluZGluZ3MvZ29iamVjdC9XZWJLaXRET01CaW5kaW5nLmNwcDogUmVt
b3ZlIHRoZSBvbGQgY2FjaGUgY29kZS4KKyAgICAgICAgKiBiaW5kaW5ncy9nb2JqZWN0L1dlYktp
dERPTUJpbmRpbmcuaDogZGl0dG8uCisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2Vu
ZXJhdG9yR09iamVjdC5wbTogaW5jbHVkZSB0aGUgbmV3IERPTU9iamVjdENhY2hlIGhlYWRlci4K
KwogMjAxMC0xMS0xOSAgSmFtZXMgU2ltb25zZW4gIDxzaW1vbmphbUBjaHJvbWl1bS5vcmc+CiAK
ICAgICAgICAgUmV2aWV3ZWQgYnkgVG9ueSBDaGFuZy4KZGlmZiAtLWdpdCBhL1dlYkNvcmUvR05V
bWFrZWZpbGUuYW0gYi9XZWJDb3JlL0dOVW1ha2VmaWxlLmFtCmluZGV4IGU4ZWIzODYuLmU1ZmUy
YTcgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvR05VbWFrZWZpbGUuYW0KKysrIGIvV2ViQ29yZS9HTlVt
YWtlZmlsZS5hbQpAQCAtNjM5LDYgKzYzOSw4IEBAIHdlYmNvcmVfc291cmNlcyArPSBcCiAJV2Vi
Q29yZS9iaW5kaW5ncy9nZW5lcmljL1J1bnRpbWVFbmFibGVkRmVhdHVyZXMuaCBcCiAJV2ViQ29y
ZS9iaW5kaW5ncy9nb2JqZWN0L0NvbnZlcnRUb1VURjhTdHJpbmcuY3BwIFwKIAlXZWJDb3JlL2Jp
bmRpbmdzL2dvYmplY3QvQ29udmVydFRvVVRGOFN0cmluZy5oIFwKKwlXZWJDb3JlL2JpbmRpbmdz
L2dvYmplY3QvRE9NT2JqZWN0Q2FjaGUuY3BwIFwKKwlXZWJDb3JlL2JpbmRpbmdzL2dvYmplY3Qv
RE9NT2JqZWN0Q2FjaGUuaCBcCiAJV2ViQ29yZS9iaW5kaW5ncy9nb2JqZWN0L0dPYmplY3RFdmVu
dExpc3RlbmVyLmNwcCBcCiAJV2ViQ29yZS9iaW5kaW5ncy9nb2JqZWN0L0dPYmplY3RFdmVudExp
c3RlbmVyLmggXAogCVdlYkNvcmUvYmluZGluZ3MvZ29iamVjdC9XZWJLaXRET01CaW5kaW5nLmNw
cCBcCmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL2dvYmplY3QvRE9NT2JqZWN0Q2FjaGUu
Y3BwIGIvV2ViQ29yZS9iaW5kaW5ncy9nb2JqZWN0L0RPTU9iamVjdENhY2hlLmNwcApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZTZmYTIxCi0tLSAvZGV2L251bGwKKysrIGIv
V2ViQ29yZS9iaW5kaW5ncy9nb2JqZWN0L0RPTU9iamVjdENhY2hlLmNwcApAQCAtMCwwICsxLDEz
MSBAQAorLyoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMTAgSWdhbGlhIFMuTC4KKyAqCisgKiAgVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJh
bCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5
b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBk
aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBX
SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m
CisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
LiAgU2VlIHRoZSBHTlUKKyAqICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9y
ZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRo
ZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMg
bGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRp
b24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAy
MTEwLTEzMDEgIFVTQQorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJET01P
YmplY3RDYWNoZS5oIgorCisjaW5jbHVkZSAiRG9jdW1lbnQuaCIKKyNpbmNsdWRlICJGcmFtZS5o
IgorI2luY2x1ZGUgIk5vZGUuaCIKKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorCituYW1lc3Bh
Y2UgV2ViS2l0IHsKKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIEdPYmplY3QqIG9iamVjdDsKKyAg
ICB2b2lkKiBmcmFtZTsKKyAgICBnaW50IHJlZkNvdW50OworfSBET01PYmplY3RDYWNoZURhdGE7
CisKK3R5cGVkZWYgSGFzaE1hcDx2b2lkKiwgRE9NT2JqZWN0Q2FjaGVEYXRhKj4gRE9NT2JqZWN0
TWFwOworCitzdGF0aWMgRE9NT2JqZWN0TWFwJiBkb21PYmplY3RzKCkKK3sKKyAgICBzdGF0aWMg
RE9NT2JqZWN0TWFwIHN0YXRpY0RPTU9iamVjdHM7CisgICAgcmV0dXJuIHN0YXRpY0RPTU9iamVj
dHM7Cit9CisKK3N0YXRpYyB2b2lkKiBnZXRGcmFtZUZyb21IYW5kbGUodm9pZCogb2JqZWN0SGFu
ZGxlKQoreworICAgIFdlYkNvcmU6Ok5vZGUqIG5vZGUgPSBzdGF0aWNfY2FzdDxXZWJDb3JlOjpO
b2RlKj4ob2JqZWN0SGFuZGxlKTsKKyAgICBpZiAoIW5vZGUtPmluRG9jdW1lbnQoKSkKKyAgICAg
ICAgcmV0dXJuIDA7CisgICAgV2ViQ29yZTo6RG9jdW1lbnQqIGRvY3VtZW50ID0gbm9kZS0+ZG9j
dW1lbnQoKTsKKyAgICBpZiAoIWRvY3VtZW50KQorICAgICAgICByZXR1cm4gMDsKKyAgICByZXR1
cm4gZG9jdW1lbnQtPmZyYW1lKCk7Cit9CisKK3ZvaWQgRE9NT2JqZWN0Q2FjaGU6OmZvcmdldCh2
b2lkKiBvYmplY3RIYW5kbGUpCit7CisgICAgRE9NT2JqZWN0Q2FjaGVEYXRhKiBjYWNoZURhdGEg
PSBkb21PYmplY3RzKCkuZ2V0KG9iamVjdEhhbmRsZSk7CisgICAgQVNTRVJUKGNhY2hlRGF0YSk7
CisgICAgZ19zbGljZV9mcmVlKERPTU9iamVjdENhY2hlRGF0YSwgY2FjaGVEYXRhKTsKKyAgICBk
b21PYmplY3RzKCkudGFrZShvYmplY3RIYW5kbGUpOworfQorCit2b2lkIERPTU9iamVjdENhY2hl
OjpjbGVhckJ5RnJhbWUodm9pZCogZnJhbWUpCit7CisgICAgVmVjdG9yPERPTU9iamVjdENhY2hl
RGF0YSo+IHRvVW5yZWY7CisKKyAgICAvLyBVbnJlZmZpbmcgdGhlIG9iamVjdHMgcmVtb3ZlcyB0
aGVtIGZyb20gdGhlIGNhY2hlIGluIHRoZWlyCisgICAgLy8gZmluYWxpemUgbWV0aG9kLCBzbyBq
dXN0IHNhdmUgdGhlbSB0byBkbyB0aGF0IHdoaWxlIHdlIGFyZSBub3QKKyAgICAvLyBpdGVyYXRp
bmcgdGhlIGNhY2hlIGl0c2VsZi4KKyAgICBET01PYmplY3RNYXA6Oml0ZXJhdG9yIGVuZCA9IGRv
bU9iamVjdHMoKS5lbmQoKTsKKyAgICBmb3IgKERPTU9iamVjdE1hcDo6aXRlcmF0b3IgaXRlciA9
IGRvbU9iamVjdHMoKS5iZWdpbigpOyBpdGVyICE9IGVuZDsgKytpdGVyKSB7CisgICAgICAgIERP
TU9iamVjdENhY2hlRGF0YSogZGF0YSA9IGl0ZXItPnNlY29uZDsKKyAgICAgICAgQVNTRVJUKGRh
dGEpOworICAgICAgICBpZiAoIWZyYW1lIHx8IGRhdGEtPmZyYW1lID09IGZyYW1lKQorICAgICAg
ICAgICAgdG9VbnJlZi5hcHBlbmQoZGF0YSk7CisgICAgfQorCisgICAgVmVjdG9yPERPTU9iamVj
dENhY2hlRGF0YSo+OjppdGVyYXRvciBsYXN0ID0gdG9VbnJlZi5lbmQoKTsKKyAgICBmb3IgKFZl
Y3RvcjxET01PYmplY3RDYWNoZURhdGEqPjo6aXRlcmF0b3IgaXQgPSB0b1VucmVmLmJlZ2luKCk7
IGl0ICE9IGxhc3Q7ICsraXQpIHsKKyAgICAgICAgRE9NT2JqZWN0Q2FjaGVEYXRhKiBkYXRhID0g
Kml0OworICAgICAgICB3aGlsZSAoZGF0YS0+cmVmQ291bnQtLSA+IDApCisgICAgICAgICAgICBn
X29iamVjdF91bnJlZihkYXRhLT5vYmplY3QpOworICAgIH0KK30KKworRE9NT2JqZWN0Q2FjaGU6
On5ET01PYmplY3RDYWNoZSgpCit7CisgICAgY2xlYXJCeUZyYW1lKCk7Cit9CisKK3ZvaWQqIERP
TU9iamVjdENhY2hlOjpnZXQodm9pZCogb2JqZWN0SGFuZGxlKQoreworICAgIERPTU9iamVjdENh
Y2hlRGF0YSogZGF0YSA9IGRvbU9iamVjdHMoKS5nZXQob2JqZWN0SGFuZGxlKTsKKyAgICBpZiAo
IWRhdGEpCisgICAgICAgIHJldHVybiAwOworCisgICAgLy8gV2Ugd2FudCB0byBhZGQgb25lIHJl
ZiBlYWNoIHRpbWUgYSB3cmFwcGVyIGlzIHJldHVybmVkLCBzbyB0aGF0CisgICAgLy8gdGhlIHVz
ZXIgY2FuIG1hbnVhbGx5IHVucmVmIHRoZW0gaWYgaGUgY2hvb3NlcyB0by4KKyAgICBBU1NFUlQo
ZGF0YS0+b2JqZWN0KTsKKyAgICBkYXRhLT5yZWZDb3VudCsrOworICAgIHJldHVybiBnX29iamVj
dF9yZWYoZGF0YS0+b2JqZWN0KTsKK30KKwordm9pZCogRE9NT2JqZWN0Q2FjaGU6OnB1dCh2b2lk
KiBvYmplY3RIYW5kbGUsIHZvaWQqIHdyYXBwZXIpCit7CisgICAgaWYgKGRvbU9iamVjdHMoKS5n
ZXQob2JqZWN0SGFuZGxlKSkKKyAgICAgICAgcmV0dXJuIHdyYXBwZXI7CisKKyAgICBET01PYmpl
Y3RDYWNoZURhdGEqIGRhdGEgPSBnX3NsaWNlX25ldyhET01PYmplY3RDYWNoZURhdGEpOworICAg
IGRhdGEtPm9iamVjdCA9IHN0YXRpY19jYXN0PEdPYmplY3QqPih3cmFwcGVyKTsKKyAgICBkYXRh
LT5mcmFtZSA9IDA7CisgICAgZGF0YS0+cmVmQ291bnQgPSAxOworCisgICAgZG9tT2JqZWN0cygp
LnNldChvYmplY3RIYW5kbGUsIGRhdGEpOworICAgIHJldHVybiB3cmFwcGVyOworfQorCit2b2lk
KiBET01PYmplY3RDYWNoZTo6cHV0KFdlYkNvcmU6Ok5vZGUqIG9iamVjdEhhbmRsZSwgdm9pZCog
d3JhcHBlcikKK3sKKyAgICAvLyBjYWxsIHRoZSA6OnB1dCB2ZXJzaW9uIHRoYXQgdGFrZXMgdm9p
ZCogdG8gZG8gdGhlIGJhc2ljIGNhY2hlCisgICAgLy8gaW5zZXJ0aW9uIHdvcmsKKyAgICBwdXQo
c3RhdGljX2Nhc3Q8dm9pZCo+KG9iamVjdEhhbmRsZSksIHdyYXBwZXIpOworCisgICAgRE9NT2Jq
ZWN0Q2FjaGVEYXRhKiBkYXRhID0gZG9tT2JqZWN0cygpLmdldChvYmplY3RIYW5kbGUpOworICAg
IEFTU0VSVChkYXRhKTsKKworICAgIGRhdGEtPmZyYW1lID0gZ2V0RnJhbWVGcm9tSGFuZGxlKG9i
amVjdEhhbmRsZSk7CisKKyAgICByZXR1cm4gd3JhcHBlcjsKK30KKworfQpkaWZmIC0tZ2l0IGEv
V2ViQ29yZS9iaW5kaW5ncy9nb2JqZWN0L0RPTU9iamVjdENhY2hlLmggYi9XZWJDb3JlL2JpbmRp
bmdzL2dvYmplY3QvRE9NT2JqZWN0Q2FjaGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwLi40NWY3MmYxCi0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy9nb2Jq
ZWN0L0RPTU9iamVjdENhY2hlLmgKQEAgLTAsMCArMSwzOCBAQAorLyoKKyAqICBDb3B5cmlnaHQg
KEMpIDIwMTAgSWdhbGlhIFMuTC4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdh
cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFz
IHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2
ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZl
cnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0
aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0
aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9y
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMZXNz
ZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ug
c2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVi
bGljCisgKiAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0
byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0
cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICovCisKKyNp
Zm5kZWYgRE9NT2JqZWN0Q2FjaGVfaAorI2RlZmluZSBET01PYmplY3RDYWNoZV9oCisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKK2NsYXNzIE5vZGU7Cit9OworCituYW1lc3BhY2UgV2ViS2l0IHsKK2Ns
YXNzIERPTU9iamVjdENhY2hlIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgdm9pZCogZ2V0KHZvaWQq
IG9iamVjdEhhbmRsZSk7CisgICAgc3RhdGljIHZvaWQqIHB1dCh2b2lkKiBvYmplY3RIYW5kbGUs
IHZvaWQqIHdyYXBwZXIpOworICAgIHN0YXRpYyB2b2lkKiBwdXQoV2ViQ29yZTo6Tm9kZSogb2Jq
ZWN0SGFuZGxlLCB2b2lkKiB3cmFwcGVyKTsKKyAgICBzdGF0aWMgdm9pZCBjbGVhckJ5RnJhbWUo
dm9pZCogZnJhbWUgPSAwKTsKKyAgICBzdGF0aWMgdm9pZCBmb3JnZXQodm9pZCogb2JqZWN0SGFu
ZGxlKTsKKyAgICB+RE9NT2JqZWN0Q2FjaGUoKTsKK307Cit9IC8vIG5hbWVzcGFjZSBXZWJLaXQK
KworI2VuZGlmCmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL2dvYmplY3QvV2ViS2l0RE9N
QmluZGluZy5jcHAgYi9XZWJDb3JlL2JpbmRpbmdzL2dvYmplY3QvV2ViS2l0RE9NQmluZGluZy5j
cHAKaW5kZXggM2MwNjZlMy4uYThhODk1NiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5ncy9n
b2JqZWN0L1dlYktpdERPTUJpbmRpbmcuY3BwCisrKyBiL1dlYkNvcmUvYmluZGluZ3MvZ29iamVj
dC9XZWJLaXRET01CaW5kaW5nLmNwcApAQCAtMjQsNiArMjQsNyBAQAogI2luY2x1ZGUgImNvbmZp
Zy5oIgogI2luY2x1ZGUgIldlYktpdERPTUJpbmRpbmcuaCIKIAorI2luY2x1ZGUgIkRPTU9iamVj
dENhY2hlLmgiCiAjaW5jbHVkZSAiRWxlbWVudC5oIgogI2luY2x1ZGUgIkV2ZW50LmgiCiAjaW5j
bHVkZSAiRXZlbnRFeGNlcHRpb24uaCIKQEAgLTQ0LDMyICs0NSw2IEBAIG5hbWVzcGFjZSBXZWJL
aXQgewogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTo6
SFRNTE5hbWVzOwogCi0vLyBET01PYmplY3RDYWNoZQotCi10eXBlZGVmIEhhc2hNYXA8dm9pZCos
IGdwb2ludGVyPiBET01PYmplY3RNYXA7Ci0KLXN0YXRpYyBET01PYmplY3RNYXAmIGRvbU9iamVj
dHMoKQotewotICAgIHN0YXRpYyBET01PYmplY3RNYXAgc3RhdGljRE9NT2JqZWN0czsKLSAgICBy
ZXR1cm4gc3RhdGljRE9NT2JqZWN0czsKLX0KLQotZ3BvaW50ZXIgRE9NT2JqZWN0Q2FjaGU6Omdl
dCh2b2lkKiBvYmplY3RIYW5kbGUpCi17Ci0gICAgcmV0dXJuIGRvbU9iamVjdHMoKS5nZXQob2Jq
ZWN0SGFuZGxlKTsKLX0KLQotZ3BvaW50ZXIgRE9NT2JqZWN0Q2FjaGU6OnB1dCh2b2lkKiBvYmpl
Y3RIYW5kbGUsIGdwb2ludGVyIHdyYXBwZXIpCi17Ci0gICAgZG9tT2JqZWN0cygpLnNldChvYmpl
Y3RIYW5kbGUsIHdyYXBwZXIpOwotICAgIHJldHVybiB3cmFwcGVyOwotfQotCi12b2lkIERPTU9i
amVjdENhY2hlOjpmb3JnZXQodm9pZCogb2JqZWN0SGFuZGxlKQotewotICAgIGRvbU9iamVjdHMo
KS50YWtlKG9iamVjdEhhbmRsZSk7Ci19Ci0KIC8vIGtpdCBtZXRob2RzCiAKIHN0YXRpYyBncG9p
bnRlciBjcmVhdGVXcmFwcGVyKE5vZGUqIG5vZGUpCmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRp
bmdzL2dvYmplY3QvV2ViS2l0RE9NQmluZGluZy5oIGIvV2ViQ29yZS9iaW5kaW5ncy9nb2JqZWN0
L1dlYktpdERPTUJpbmRpbmcuaAppbmRleCAyMjQ4Zjc4Li40NzU5NGE2IDEwMDY0NAotLS0gYS9X
ZWJDb3JlL2JpbmRpbmdzL2dvYmplY3QvV2ViS2l0RE9NQmluZGluZy5oCisrKyBiL1dlYkNvcmUv
YmluZGluZ3MvZ29iamVjdC9XZWJLaXRET01CaW5kaW5nLmgKQEAgLTM4LDEzICszOCw2IEBAIGdw
b2ludGVyIGtpdChXZWJDb3JlOjpOb2RlKiBub2RlKTsKIGdwb2ludGVyIGtpdChXZWJDb3JlOjpF
bGVtZW50KiBlbGVtZW50KTsKIGdwb2ludGVyIGtpdChXZWJDb3JlOjpFdmVudCogZXZlbnQpOwog
Z3BvaW50ZXIga2l0KFdlYkNvcmU6OkV2ZW50VGFyZ2V0KiB0YXJnZXQpOwotCi1jbGFzcyBET01P
YmplY3RDYWNoZSB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIGdwb2ludGVyIGdldCh2b2lkKiBvYmpl
Y3RIYW5kbGUpOwotICAgIHN0YXRpYyBncG9pbnRlciBwdXQodm9pZCogb2JqZWN0SGFuZGxlLCBn
cG9pbnRlciB3cmFwcGVyKTsKLSAgICBzdGF0aWMgdm9pZCBmb3JnZXQodm9pZCogb2JqZWN0SGFu
ZGxlKTsKLX07CiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKIAogI2VuZGlmIC8vIFdlYktpdERPTUJp
bmRpbmdfaApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0
b3JHT2JqZWN0LnBtIGIvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JHT2Jq
ZWN0LnBtCmluZGV4IDZjNDUwYWQuLmNhMmJkOWMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yR09iamVjdC5wbQorKysgYi9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvQ29kZUdlbmVyYXRvckdPYmplY3QucG0KQEAgLTEzMjIsNiArMTMyMiw3IEBAIHN1
YiBHZW5lcmF0ZSB7CiAKICAgICAkaW1wbEluY2x1ZGVzeyJ3ZWJraXRtYXJzaGFsLmgifSA9IDE7
CiAgICAgJGltcGxJbmNsdWRlc3sid2Via2l0cHJpdmF0ZS5oIn0gPSAxOworICAgICRpbXBsSW5j
bHVkZXN7IkRPTU9iamVjdENhY2hlLmgifSA9IDE7CiAgICAgJGltcGxJbmNsdWRlc3siV2ViS2l0
RE9NQmluZGluZy5oIn0gPSAxOwogICAgICRpbXBsSW5jbHVkZXN7ImdvYmplY3QvQ29udmVydFRv
VVRGOFN0cmluZy5oIn0gPSAxOwogICAgICRpbXBsSW5jbHVkZXN7IndlYmtpdC8kY2xhc3NOYW1l
LmgifSA9IDE7CmRpZmYgLS1naXQgYS9XZWJLaXQvZ3RrL0NoYW5nZUxvZyBiL1dlYktpdC9ndGsv
Q2hhbmdlTG9nCmluZGV4IGJjMDBiODUuLmJiNWNmYzUgMTAwNjQ0Ci0tLSBhL1dlYktpdC9ndGsv
Q2hhbmdlTG9nCisrKyBiL1dlYktpdC9ndGsvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDIgQEAKKzIw
MTAtMTEtMTkgIFhhbiBMb3BleiAgPHhsb3BlekBpZ2FsaWEuY29tPgorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFtHVEtdIE1lbW9yeSBtYW5hZ2FtZW50
IGZvciBET00gR09iamVjdCB3cmFwcGVycworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9NDAzMDIKKworICAgICAgICBJbml0aWFsIGF0dGVtcHQgdG8gaGF2
ZSBhIGtpbmQgb2YgcG9vciBtYW4ncyBnYXJiYWdlIGNvbGxlY3Rpb24KKyAgICAgICAgZm9yIEdP
YmplY3QgRE9NIG9iamVjdHMuIFdlIHRpZSB0aGUgb2JqZWN0J3MgbGlmZWN5Y2xlIHRvIHRoZWly
CisgICAgICAgIHBhcmVudCBGcmFtZSBhbmQvb3IgaXRzIGRvY3VtZW50OyB0aGF0IGlzLCBhbGwg
b2JqZWN0cyB3aWxsIGJlCisgICAgICAgIGNvbGxlY3RlZCB3aGVuIHRoZWlyIHBhcmVudCBmcmFt
ZSBpcyBkZXN0cm95ZWQgb3Igd2hlbiB0aGF0IGZyYW1lCisgICAgICAgIHRyYW5zaXRpb25zIHRv
IGEgbmV3IGRvY3VtZW50LiBNYW51YWwgbWFuYWdlbWVudCAoY2FsbGluZworICAgICAgICBnX29i
amVjdF91bnJlZiBvbiB0aGVtKSBpcyBhbHNvIGFsbG93ZWQsIGFuZCBpcyByZXF1aXJlZCBmb3IK
KyAgICAgICAgb2JqZWN0cyB0aGF0IGFyZSBub3QgaW4gdGhlIERPTSB0cmVlIChlZyBOb2RlTGlz
dHMpLgorCisgICAgICAgICogR05VbWFrZWZpbGUuYW06IGFkZCB0ZXN0dXRpbHMgZmlsZSB0byB0
ZXN0ZG9tZG9jdW1lbnQuYworICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xp
ZW50R3RrLmNwcDoKKyAgICAgICAgKFdlYktpdDo6RnJhbWVMb2FkZXJDbGllbnQ6OnNldE1haW5G
cmFtZURvY3VtZW50UmVhZHkpOiBjb2xsZWN0CisgICAgICAgIERPTSBvYmplY3RzIG9uIGRvY3Vt
ZW50IHRyYW5zaXRpb24uCisgICAgICAgICogdGVzdHMvdGVzdGRvbWRvY3VtZW50LmM6CisgICAg
ICAgIChkb21fZG9jdW1lbnRfZml4dHVyZV90ZWFyZG93bik6IG9ubHkgZGVzdHJveSB0aGUgdmll
dyBpZiBpdCdzIG5vdAorICAgICAgICBhbHJlYWR5IGRlc3Ryb3llZCwgc2luY2UgdGhlIG5ldyB0
ZXN0IGRldHJveXMgaXQgb24gaXRzIG93bi4KKyAgICAgICAgKHRlc3RfZG9tX2RvY3VtZW50X2dl
dF9lbGVtZW50c19ieV90YWdfbmFtZSk6IG1hbnVhbGx5IHVucmVmIG5vZGUgbGlzdC4KKyAgICAg
ICAgKHRlc3RfZG9tX2RvY3VtZW50X2dldF9lbGVtZW50c19ieV9jbGFzc19uYW1lKTogZGl0dG8u
CisgICAgICAgICh0ZXN0X2RvbV9kb2N1bWVudF9nZXRfbGlua3MpOiBkaXR0by4KKyAgICAgICAg
KHRlc3RfZG9tX2RvY3VtZW50X2dhcmJhZ2VfY29sbGVjdGlvbik6IHRlc3QgYWxsIHBvc3NpYmxl
CisgICAgICAgIHNjZW5hcmlvcyBmb3IgRE9NIG9iamVjdCAiZ2FyYmFnZSBjb2xsZWN0aW9uIi4K
KyAgICAgICAgKG1haW4pOiBhZGQgbmV3IHRlc3QuCisgICAgICAgICogdGVzdHMvdGVzdGRvbW5v
ZGUuYzoKKyAgICAgICAgKHRlc3RfZG9tX25vZGVfaGllcmFyY2h5X25hdmlnYXRpb24pOiBtYW51
YWxseSB1bnJlZiBub2RlIGxpc3QuCisgICAgICAgICh0ZXN0X2RvbV9ub2RlX2luc2VydGlvbik6
IGRpdHRvLgorICAgICAgICAqIHdlYmtpdC93ZWJraXRoaXR0ZXN0cmVzdWx0LmNwcDoKKyAgICAg
ICAgKHdlYmtpdF9oaXRfdGVzdF9yZXN1bHRfZGlzcG9zZSk6IHVucmVmIHRoZSBpbm5lciBub2Rl
IG9uIGRpc3Bvc2UKKyAgICAgICAgbm93IHRoYXQgdGhlIG1lbW9yeSBtYW5hZ2VtZW50IG1vZGVs
IGlzIGNsYXJpZmllZC4KKyAgICAgICAgKHdlYmtpdF9oaXRfdGVzdF9yZXN1bHRfY2xhc3NfaW5p
dCk6IGhvb2sgZGlzcG9zZS4KKyAgICAgICAgKiB3ZWJraXQvd2Via2l0d2ViZnJhbWUuY3BwOgor
ICAgICAgICAod2Via2l0X3dlYl9mcmFtZV9jb3JlX2ZyYW1lX2dvbmUpOiBjbGVhciBET00gb2Jq
ZWN0cyBhdHRhY2hlZCB0byB0aGlzIGZyYW1lLgorICAgICAgICAod2Via2l0X3dlYl9mcmFtZV9m
aW5hbGl6ZSk6IGRpdHRvLgorCiAyMDEwLTExLTE4ICBYYW4gTG9wZXogIDx4bG9wZXpAaWdhbGlh
LmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBNYXJ0aW4gUm9iaW5zb24uCmRpZmYgLS1naXQg
YS9XZWJLaXQvZ3RrL0dOVW1ha2VmaWxlLmFtIGIvV2ViS2l0L2d0ay9HTlVtYWtlZmlsZS5hbQpp
bmRleCBhM2JlODE2Li4zMjUyNzBlIDEwMDY0NAotLS0gYS9XZWJLaXQvZ3RrL0dOVW1ha2VmaWxl
LmFtCisrKyBiL1dlYktpdC9ndGsvR05VbWFrZWZpbGUuYW0KQEAgLTM5MSw3ICszOTEsNyBAQCBU
RVNUX1BST0dTICs9IFwKIAlQcm9ncmFtcy91bml0dGVzdHMvdGVzdGNvcHlhbmRwYXN0ZQogCiAj
IEFkZCBhZGRpdGlvbmFsIHRlc3RzIGhlcmUKLVByb2dyYW1zX3VuaXR0ZXN0c190ZXN0ZG9tZG9j
dW1lbnRfU09VUkNFUyA9IFdlYktpdC9ndGsvdGVzdHMvdGVzdGRvbWRvY3VtZW50LmMKK1Byb2dy
YW1zX3VuaXR0ZXN0c190ZXN0ZG9tZG9jdW1lbnRfU09VUkNFUyA9IFdlYktpdC9ndGsvdGVzdHMv
dGVzdGRvbWRvY3VtZW50LmMgV2ViS2l0L2d0ay90ZXN0cy90ZXN0X3V0aWxzLmMKIFByb2dyYW1z
X3VuaXR0ZXN0c190ZXN0ZG9tZG9jdW1lbnRfQ0ZMQUdTID0gJCh3ZWJraXRfdGVzdHNfY2ZsYWdz
KQogUHJvZ3JhbXNfdW5pdHRlc3RzX3Rlc3Rkb21kb2N1bWVudF9MREFERCA9ICQod2Via2l0X3Rl
c3RzX2xkYWRkKQogUHJvZ3JhbXNfdW5pdHRlc3RzX3Rlc3Rkb21kb2N1bWVudF9MREZMQUdTID0g
JCh3ZWJraXRfdGVzdHNfbGRmbGFncykKZGlmZiAtLWdpdCBhL1dlYktpdC9ndGsvV2ViQ29yZVN1
cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRHdGsuY3BwIGIvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9y
dC9GcmFtZUxvYWRlckNsaWVudEd0ay5jcHAKaW5kZXggYjIzYmQ3MC4uZmRlZjlkYyAxMDA2NDQK
LS0tIGEvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudEd0ay5jcHAK
KysrIGIvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudEd0ay5jcHAK
QEAgLTI4LDYgKzI4LDcgQEAKICNpbmNsdWRlICJBcmNoaXZlUmVzb3VyY2UuaCIKICNpbmNsdWRl
ICJDYWNoZWRGcmFtZS5oIgogI2luY2x1ZGUgIkNvbG9yLmgiCisjaW5jbHVkZSAiRE9NT2JqZWN0
Q2FjaGUuaCIKICNpbmNsdWRlICJEb2N1bWVudExvYWRlci5oIgogI2luY2x1ZGUgIkRvY3VtZW50
TG9hZGVyR3RrLmgiCiAjaW5jbHVkZSAiRm9ybVN0YXRlLmgiCkBAIC02OTYsOSArNjk3LDEwIEBA
IHZvaWQgRnJhbWVMb2FkZXJDbGllbnQ6OnJlZ2lzdGVyRm9ySWNvbk5vdGlmaWNhdGlvbihib29s
IHNob3VsZFJlZ2lzdGVyKQogICAgIG5vdEltcGxlbWVudGVkKCk7CiB9CiAKLXZvaWQgRnJhbWVM
b2FkZXJDbGllbnQ6OnNldE1haW5GcmFtZURvY3VtZW50UmVhZHkoYm9vbCkKK3ZvaWQgRnJhbWVM
b2FkZXJDbGllbnQ6OnNldE1haW5GcmFtZURvY3VtZW50UmVhZHkoYm9vbCByZWFkeSkKIHsKLSAg
ICAvLyB0aGlzIGlzIG9ubHkgaW50ZXJlc3Rpbmcgb25jZSB3ZSBwcm92aWRlIGFuIGV4dGVybmFs
IEFQSSBmb3IgdGhlIERPTQorICAgIGlmICghcmVhZHkpCisgICAgICAgIERPTU9iamVjdENhY2hl
OjpjbGVhckJ5RnJhbWUoY29yZShtX2ZyYW1lKSk7CiB9CiAKIGJvb2wgRnJhbWVMb2FkZXJDbGll
bnQ6Omhhc1dlYlZpZXcoKSBjb25zdApkaWZmIC0tZ2l0IGEvV2ViS2l0L2d0ay90ZXN0cy90ZXN0
ZG9tZG9jdW1lbnQuYyBiL1dlYktpdC9ndGsvdGVzdHMvdGVzdGRvbWRvY3VtZW50LmMKaW5kZXgg
ZWMyZjU3OS4uYjI1MWI5NiAxMDA2NDQKLS0tIGEvV2ViS2l0L2d0ay90ZXN0cy90ZXN0ZG9tZG9j
dW1lbnQuYworKysgYi9XZWJLaXQvZ3RrL3Rlc3RzL3Rlc3Rkb21kb2N1bWVudC5jCkBAIC0zMCw3
ICszMCw4IEBACiAjZGVmaW5lIEhUTUxfRE9DVU1FTlRfRUxFTUVOVFMgIjxodG1sPjxib2R5Pjx1
bD48bGk+MTwvbGk+PGxpPjI8L2xpPjxsaT4zPC9saT48L3VsPjwvYm9keT48L2h0bWw+IgogI2Rl
ZmluZSBIVE1MX0RPQ1VNRU5UX0VMRU1FTlRTX0NMQVNTICI8aHRtbD48Ym9keT48ZGl2IGNsYXNz
PVwidGVzdFwiPjwvZGl2PjxkaXYgY2xhc3M9XCJzdHJhbmdlXCI+PC9kaXY+PGRpdiBjbGFzcz1c
InRlc3RcIj48L2Rpdj48L2JvZHk+PC9odG1sPiIKICNkZWZpbmUgSFRNTF9ET0NVTUVOVF9FTEVN
RU5UU19JRCAiPGh0bWw+PGJvZHk+PGRpdiBpZD1cInRlc3Rva1wiPjwvZGl2PjxkaXYgaWQ9XCJ0
ZXN0YmFkXCI+Zmlyc3Q8L2Rpdj48ZGl2IGlkPVwidGVzdGJhZFwiPnNlY29uZDwvZGl2PjwvYm9k
eT48L2h0bWw+IgotI2RlZmluZSBIVE1MX0RPQ1VNRU5UX0xJTktTICI8aHRtbD48Ym9keT48YSBo
cmVmPVwiYWJvdXQ6YmxhbmtcIj5ibGFuazwvYT48YSBocmVmPVwiaHR0cDovL3d3dy5nb29nbGUu
Y29tXCI+Z29vZ2xlPC9hPjxhIGhyZWY9XCJodHRwOi8vd3d3LndlYmtpdC5vcmdcIj53ZWJraXQ8
L2E+PC9ib2R5PjwvaHRtbD4iCisjZGVmaW5lIEhUTUxfRE9DVU1FTlRfTElOS1MgIjxodG1sPjxo
ZWFkPjx0aXRsZT5UaXRsZTwvdGl0bGU+PC9oZWFkPjxib2R5PjxhIGhyZWY9XCJhYm91dDpibGFu
a1wiPmJsYW5rPC9hPjxhIGhyZWY9XCJodHRwOi8vd3d3Lmdvb2dsZS5jb21cIj5nb29nbGU8L2E+
PGEgaHJlZj1cImh0dHA6Ly93d3cud2Via2l0Lm9yZ1wiPndlYmtpdDwvYT48L2JvZHk+PC9odG1s
PiIKKyNkZWZpbmUgSFRNTF9ET0NVTUVOVF9JRlJBTUUgIjxodG1sPjxoZWFkPjx0aXRsZT5JRnJh
bWU8L3RpdGxlPjwvaGVhZD48Ym9keT48aWZyYW1lIGlkPSdpZnJhbWUnPjwvaWZyYW1lPjxkaXYg
aWQ9J3Rlc3QnPjwvZGl2PjwvYm9keT48L2h0bWw+IgogCiB0eXBlZGVmIHN0cnVjdCB7CiAgICAg
R3RrV2lkZ2V0KiB3ZWJWaWV3OwpAQCAtNjAsNyArNjEsOCBAQCBzdGF0aWMgdm9pZCBkb21fZG9j
dW1lbnRfZml4dHVyZV9zZXR1cChEb21Eb2N1bWVudEZpeHR1cmUqIGZpeHR1cmUsIGdjb25zdHBv
aW50ZQogCiBzdGF0aWMgdm9pZCBkb21fZG9jdW1lbnRfZml4dHVyZV90ZWFyZG93bihEb21Eb2N1
bWVudEZpeHR1cmUqIGZpeHR1cmUsIGdjb25zdHBvaW50ZXIgZGF0YSkKIHsKLSAgICBnX29iamVj
dF91bnJlZihmaXh0dXJlLT53ZWJWaWV3KTsKKyAgICBpZiAoZml4dHVyZS0+d2ViVmlldykKKyAg
ICAgICAgZ19vYmplY3RfdW5yZWYoZml4dHVyZS0+d2ViVmlldyk7CiAgICAgZ19tYWluX2xvb3Bf
dW5yZWYoZml4dHVyZS0+bG9vcCk7CiB9CiAKQEAgLTEwNyw2ICsxMDksOCBAQCBzdGF0aWMgdm9p
ZCB0ZXN0X2RvbV9kb2N1bWVudF9nZXRfZWxlbWVudHNfYnlfdGFnX25hbWUoRG9tRG9jdW1lbnRG
aXh0dXJlKiBmaXh0dQogICAgICAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X2RvbV9odG1sX2Vs
ZW1lbnRfZ2V0X2lubmVyX3RleHQoaHRtbEVsZW1lbnQpLCA9PSwgbik7CiAgICAgICAgIGdfZnJl
ZShuKTsKICAgICB9CisKKyAgICBnX29iamVjdF91bnJlZihsaXN0KTsKIH0KIAogc3RhdGljIHZv
aWQgdGVzdF9kb21fZG9jdW1lbnRfZ2V0X2VsZW1lbnRzX2J5X2NsYXNzX25hbWUoRG9tRG9jdW1l
bnRGaXh0dXJlKiBmaXh0dXJlLCBnY29uc3Rwb2ludGVyIGRhdGEpCkBAIC0xMzAsNiArMTM0LDgg
QEAgc3RhdGljIHZvaWQgdGVzdF9kb21fZG9jdW1lbnRfZ2V0X2VsZW1lbnRzX2J5X2NsYXNzX25h
bWUoRG9tRG9jdW1lbnRGaXh0dXJlKiBmaXgKICAgICAgICAgZ19hc3NlcnQoZWxlbWVudCk7CiAg
ICAgICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRfZG9tX2VsZW1lbnRfZ2V0X3RhZ19uYW1lKGVs
ZW1lbnQpLCA9PSwgIkRJViIpOwogICAgIH0KKworICAgIGdfb2JqZWN0X3VucmVmKGxpc3QpOwog
fQogCiBzdGF0aWMgdm9pZCB0ZXN0X2RvbV9kb2N1bWVudF9nZXRfZWxlbWVudF9ieV9pZChEb21E
b2N1bWVudEZpeHR1cmUqIGZpeHR1cmUsIGdjb25zdHBvaW50ZXIgZGF0YSkKQEAgLTE3OCw2ICsx
ODQsMTM4IEBAIHN0YXRpYyB2b2lkIHRlc3RfZG9tX2RvY3VtZW50X2dldF9saW5rcyhEb21Eb2N1
bWVudEZpeHR1cmUqIGZpeHR1cmUsIGdjb25zdHBvaW50CiAgICAgICAgIFdlYktpdERPTUhUTUxB
bmNob3JFbGVtZW50ICphbmNob3IgPSAoV2ViS2l0RE9NSFRNTEFuY2hvckVsZW1lbnQqKWVsZW1l
bnQ7CiAgICAgICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRfZG9tX2h0bWxfYW5jaG9yX2VsZW1l
bnRfZ2V0X2hyZWYoYW5jaG9yKSwgPT0sIHVyaXNbaV0pOwogICAgIH0KKyAgICBnX29iamVjdF91
bnJlZihjb2xsZWN0aW9uKTsKK30KKworc3RhdGljIHZvaWQgd2Vha19ub3RpZnkoZ3BvaW50ZXIg
ZGF0YSwgR09iamVjdCogem9tYmllKQoreworICAgIGd1aW50KiBjb3VudCA9IChndWludCopZGF0
YTsKKyAgICAoKmNvdW50KSsrOworfQorCitzdGF0aWMgdm9pZCB0ZXN0X2RvbV9kb2N1bWVudF9n
YXJiYWdlX2NvbGxlY3Rpb24oRG9tRG9jdW1lbnRGaXh0dXJlKiBmaXh0dXJlLCBnY29uc3Rwb2lu
dGVyIGRhdGEpCit7CisgICAgZ3VpbnQgY291bnQgPSAwOworICAgIGdfYXNzZXJ0KGZpeHR1cmUp
OworICAgIFdlYktpdFdlYlZpZXcqIHZpZXcgPSAoV2ViS2l0V2ViVmlldyopZml4dHVyZS0+d2Vi
VmlldzsKKyAgICBnX2Fzc2VydCh2aWV3KTsKKyAgICBXZWJLaXRET01Eb2N1bWVudCogZG9jdW1l
bnQgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X2RvbV9kb2N1bWVudCh2aWV3KTsKKyAgICBnX2Fzc2Vy
dChkb2N1bWVudCk7CisgICAgZ19vYmplY3Rfd2Vha19yZWYoR19PQkpFQ1QoZG9jdW1lbnQpLCAo
R1dlYWtOb3RpZnkpd2Vha19ub3RpZnksICZjb3VudCk7CisgICAgV2ViS2l0RE9NSFRNTEhlYWRF
bGVtZW50KiBoZWFkID0gd2Via2l0X2RvbV9kb2N1bWVudF9nZXRfaGVhZChkb2N1bWVudCk7Cisg
ICAgZ19hc3NlcnQoaGVhZCk7CisgICAgZ19vYmplY3Rfd2Vha19yZWYoR19PQkpFQ1QoaGVhZCks
IChHV2Vha05vdGlmeSl3ZWFrX25vdGlmeSwgJmNvdW50KTsKKyAgICBXZWJLaXRET01IVE1MRWxl
bWVudCogYm9keSA9IHdlYmtpdF9kb21fZG9jdW1lbnRfZ2V0X2JvZHkoZG9jdW1lbnQpOworICAg
IGdfYXNzZXJ0KGJvZHkpOworICAgIGdfb2JqZWN0X3dlYWtfcmVmKEdfT0JKRUNUKGJvZHkpLCAo
R1dlYWtOb3RpZnkpd2Vha19ub3RpZnksICZjb3VudCk7CisgICAgV2ViS2l0RE9NSFRNTENvbGxl
Y3Rpb24gKmNvbGxlY3Rpb24gPSB3ZWJraXRfZG9tX2RvY3VtZW50X2dldF9saW5rcyhkb2N1bWVu
dCk7CisgICAgZ19hc3NlcnQoY29sbGVjdGlvbik7CisgICAgZ19vYmplY3Rfd2Vha19yZWYoR19P
QkpFQ1QoY29sbGVjdGlvbiksIChHV2Vha05vdGlmeSl3ZWFrX25vdGlmeSwgJmNvdW50KTsKKwor
ICAgIHdlYmtpdF93ZWJfdmlld19sb2FkX3N0cmluZyhXRUJLSVRfV0VCX1ZJRVcodmlldyksIEhU
TUxfRE9DVU1FTlRfTElOS1MsIE5VTEwsIE5VTEwsIE5VTEwpOworCisgICAgd2hpbGUgKGdfbWFp
bl9jb250ZXh0X3BlbmRpbmcoTlVMTCkpCisgICAgICAgIGdfbWFpbl9jb250ZXh0X2l0ZXJhdGlv
bihOVUxMLCBGQUxTRSk7CisKKyAgICBnX2Fzc2VydF9jbXB1aW50KGNvdW50LCA9PSwgMyk7CisK
KyAgICBnX29iamVjdF91bnJlZihjb2xsZWN0aW9uKTsKKyAgICBnX2Fzc2VydF9jbXB1aW50KGNv
dW50LCA9PSwgNCk7CisKKyAgICBjb3VudCA9IDA7CisKKyAgICBkb2N1bWVudCA9IHdlYmtpdF93
ZWJfdmlld19nZXRfZG9tX2RvY3VtZW50KHZpZXcpOworICAgIGdfYXNzZXJ0KGRvY3VtZW50KTsK
KyAgICBnX29iamVjdF93ZWFrX3JlZihHX09CSkVDVChkb2N1bWVudCksIChHV2Vha05vdGlmeSl3
ZWFrX25vdGlmeSwgJmNvdW50KTsKKyAgICBoZWFkID0gd2Via2l0X2RvbV9kb2N1bWVudF9nZXRf
aGVhZChkb2N1bWVudCk7CisgICAgZ19hc3NlcnQoaGVhZCk7CisgICAgZ19vYmplY3Rfd2Vha19y
ZWYoR19PQkpFQ1QoaGVhZCksIChHV2Vha05vdGlmeSl3ZWFrX25vdGlmeSwgJmNvdW50KTsKKyAg
ICBib2R5ID0gd2Via2l0X2RvbV9kb2N1bWVudF9nZXRfYm9keShkb2N1bWVudCk7CisgICAgZ19h
c3NlcnQoYm9keSk7CisgICAgZ19vYmplY3Rfd2Vha19yZWYoR19PQkpFQ1QoYm9keSksIChHV2Vh
a05vdGlmeSl3ZWFrX25vdGlmeSwgJmNvdW50KTsKKyAgICBjb2xsZWN0aW9uID0gd2Via2l0X2Rv
bV9kb2N1bWVudF9nZXRfbGlua3MoZG9jdW1lbnQpOworICAgIGdfYXNzZXJ0KGNvbGxlY3Rpb24p
OworICAgIGdfb2JqZWN0X3dlYWtfcmVmKEdfT0JKRUNUKGNvbGxlY3Rpb24pLCAoR1dlYWtOb3Rp
Znkpd2Vha19ub3RpZnksICZjb3VudCk7CisgICAgLyogQXNrIHR3aWNlIGZvciB0aGUgc2FtZSBv
YmplY3QgKi8KKyAgICBXZWJLaXRET01IVE1MQ29sbGVjdGlvbiogY29sbGVjdGlvbjIgPSB3ZWJr
aXRfZG9tX2RvY3VtZW50X2dldF9saW5rcyhkb2N1bWVudCk7CisgICAgZ19hc3NlcnQoY29sbGVj
dGlvbjIpOworICAgIGdfb2JqZWN0X3dlYWtfcmVmKEdfT0JKRUNUKGNvbGxlY3Rpb24yKSwgKEdX
ZWFrTm90aWZ5KXdlYWtfbm90aWZ5LCAmY291bnQpOworCisgICAgZ19vYmplY3RfdW5yZWYoZG9j
dW1lbnQpOworICAgIGdfb2JqZWN0X3VucmVmKGhlYWQpOworICAgIGdfb2JqZWN0X3VucmVmKGJv
ZHkpOworICAgIGdfb2JqZWN0X3VucmVmKGNvbGxlY3Rpb24pOworICAgIGdfb2JqZWN0X3VucmVm
KGNvbGxlY3Rpb24yKTsKKworICAgIGdfYXNzZXJ0X2NtcHVpbnQoY291bnQsID09LCA1KTsKKwor
ICAgIHdlYmtpdF93ZWJfdmlld19sb2FkX3N0cmluZyhXRUJLSVRfV0VCX1ZJRVcodmlldyksIEhU
TUxfRE9DVU1FTlRfSUZSQU1FLCBOVUxMLCBOVUxMLCBOVUxMKTsKKworICAgIHdoaWxlIChnX21h
aW5fY29udGV4dF9wZW5kaW5nKE5VTEwpKQorICAgICAgICBnX21haW5fY29udGV4dF9pdGVyYXRp
b24oTlVMTCwgRkFMU0UpOworCisgICAgY291bnQgPSAwOworCisgICAgZG9jdW1lbnQgPSB3ZWJr
aXRfd2ViX3ZpZXdfZ2V0X2RvbV9kb2N1bWVudCh2aWV3KTsKKyAgICBXZWJLaXRET01FbGVtZW50
KiBkaXYgPSB3ZWJraXRfZG9tX2RvY3VtZW50X2dldF9lbGVtZW50X2J5X2lkKGRvY3VtZW50LCAi
dGVzdCIpOworICAgIGdfYXNzZXJ0KGRpdik7CisgICAgZ19vYmplY3Rfd2Vha19yZWYoR19PQkpF
Q1QoZGl2KSwgKEdXZWFrTm90aWZ5KXdlYWtfbm90aWZ5LCAmY291bnQpOworICAgIFdlYktpdERP
TUVsZW1lbnQqIGlmcmFtZSA9IHdlYmtpdF9kb21fZG9jdW1lbnRfZ2V0X2VsZW1lbnRfYnlfaWQo
ZG9jdW1lbnQsICJpZnJhbWUiKTsKKyAgICBnX2Fzc2VydChpZnJhbWUpOworCisgICAgLyogRklY
TUU6IElGcmFtZSBBUElzIGhhdmUgdGhlICdpJyBpbiB0aGUgd3JvbmcgcGxhY2UgKi8KKyAgICB3
ZWJraXRfZG9tX2VsZW1lbnRfc2V0X2F0dHJpYnV0ZShpZnJhbWUsICJzcmMiLCAiZGF0YTo8aHRt
bD48aGVhZD48L2hlYWQ+PC9odG1sPiIsIE5VTEwpOworCisgICAgd2hpbGUgKGdfbWFpbl9jb250
ZXh0X3BlbmRpbmcoTlVMTCkpCisgICAgICAgIGdfbWFpbl9jb250ZXh0X2l0ZXJhdGlvbihOVUxM
LCBGQUxTRSk7CisKKyAgICBXZWJLaXRET01Eb2N1bWVudCogaWZyYW1lRG9jdW1lbnQgPSB3ZWJr
aXRfZG9tX2h0bWxpX2ZyYW1lX2VsZW1lbnRfZ2V0X2NvbnRlbnRfZG9jdW1lbnQoV0VCS0lUX0RP
TV9IVE1MSV9GUkFNRV9FTEVNRU5UKGlmcmFtZSkpOworICAgIGdfYXNzZXJ0KGlmcmFtZURvY3Vt
ZW50KTsKKyAgICBoZWFkID0gd2Via2l0X2RvbV9kb2N1bWVudF9nZXRfaGVhZChpZnJhbWVEb2N1
bWVudCk7CisgICAgZ19hc3NlcnQoaGVhZCk7CisgICAgZ19vYmplY3Rfd2Vha19yZWYoR19PQkpF
Q1QoaGVhZCksIChHV2Vha05vdGlmeSl3ZWFrX25vdGlmeSwgJmNvdW50KTsKKworICAgIHdlYmtp
dF9kb21fZWxlbWVudF9zZXRfYXR0cmlidXRlKGlmcmFtZSwgInNyYyIsICJhYm91dDpibGFuayIs
IE5VTEwpOworCisgICAgd2hpbGUgKGdfbWFpbl9jb250ZXh0X3BlbmRpbmcoTlVMTCkpCisgICAg
ICAgIGdfbWFpbl9jb250ZXh0X2l0ZXJhdGlvbihOVUxMLCBGQUxTRSk7CisKKyAgICBnX2Fzc2Vy
dF9jbXB1aW50KGNvdW50LCA9PSwgMSk7CisKKyAgICB3ZWJraXRfd2ViX3ZpZXdfbG9hZF9zdHJp
bmcoV0VCS0lUX1dFQl9WSUVXKHZpZXcpLCBIVE1MX0RPQ1VNRU5UX0xJTktTLCBOVUxMLCBOVUxM
LCBOVUxMKTsKKworICAgIHdoaWxlIChnX21haW5fY29udGV4dF9wZW5kaW5nKE5VTEwpKQorICAg
ICAgICBnX21haW5fY29udGV4dF9pdGVyYXRpb24oTlVMTCwgRkFMU0UpOworCisgICAgZ19hc3Nl
cnRfY21wdWludChjb3VudCwgPT0sIDIpOworCisgICAgY291bnQgPSAwOworCisgICAgZG9jdW1l
bnQgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X2RvbV9kb2N1bWVudCh2aWV3KTsKKyAgICBnX2Fzc2Vy
dChkb2N1bWVudCk7CisgICAgZ19vYmplY3Rfd2Vha19yZWYoR19PQkpFQ1QoZG9jdW1lbnQpLCAo
R1dlYWtOb3RpZnkpd2Vha19ub3RpZnksICZjb3VudCk7CisgICAgLyogQXNrIHR3aWNlIGZvciB0
aGUgRG9jdW1lbnQgKi8KKyAgICBXZWJLaXRET01Eb2N1bWVudCogZG9jdW1lbnQyID0gd2Via2l0
X3dlYl92aWV3X2dldF9kb21fZG9jdW1lbnQodmlldyk7CisgICAgZ19hc3NlcnQoZG9jdW1lbnQy
KTsKKyAgICBnX29iamVjdF93ZWFrX3JlZihHX09CSkVDVChkb2N1bWVudDIpLCAoR1dlYWtOb3Rp
Znkpd2Vha19ub3RpZnksICZjb3VudCk7CisgICAgaGVhZCA9IHdlYmtpdF9kb21fZG9jdW1lbnRf
Z2V0X2hlYWQoZG9jdW1lbnQpOworICAgIGdfYXNzZXJ0KGhlYWQpOworICAgIGdfb2JqZWN0X3dl
YWtfcmVmKEdfT0JKRUNUKGhlYWQpLCAoR1dlYWtOb3RpZnkpd2Vha19ub3RpZnksICZjb3VudCk7
CisgICAgYm9keSA9IHdlYmtpdF9kb21fZG9jdW1lbnRfZ2V0X2JvZHkoZG9jdW1lbnQpOworICAg
IGdfYXNzZXJ0KGJvZHkpOworICAgIGdfb2JqZWN0X3dlYWtfcmVmKEdfT0JKRUNUKGJvZHkpLCAo
R1dlYWtOb3RpZnkpd2Vha19ub3RpZnksICZjb3VudCk7CisgICAgY29sbGVjdGlvbiA9IHdlYmtp
dF9kb21fZG9jdW1lbnRfZ2V0X2xpbmtzKGRvY3VtZW50KTsKKyAgICBnX2Fzc2VydChjb2xsZWN0
aW9uKTsKKyAgICBnX29iamVjdF93ZWFrX3JlZihHX09CSkVDVChjb2xsZWN0aW9uKSwgKEdXZWFr
Tm90aWZ5KXdlYWtfbm90aWZ5LCAmY291bnQpOworCisgICAgZ3RrX3dpZGdldF9kZXN0cm95KGZp
eHR1cmUtPndlYlZpZXcpOworICAgIGZpeHR1cmUtPndlYlZpZXcgPSBOVUxMOworCisgICAgZ19h
c3NlcnRfY21wdWludChjb3VudCwgPT0sIDQpOworCisgICAgZ19vYmplY3RfdW5yZWYoY29sbGVj
dGlvbik7CisKKyAgICBnX2Fzc2VydF9jbXB1aW50KGNvdW50LCA9PSwgNSk7CiB9CiAKIGludCBt
YWluKGludCBhcmdjLCBjaGFyKiogYXJndikKQEAgLTE4Nyw2ICszMjUsOCBAQCBpbnQgbWFpbihp
bnQgYXJnYywgY2hhcioqIGFyZ3YpCiAKICAgICBndGtfdGVzdF9pbml0KCZhcmdjLCAmYXJndiwg
TlVMTCk7CiAKKyAgICB0ZXN0dXRpbHNfcmVsYXRpdmVfY2hkaXIoIldlYktpdC9ndGsvdGVzdHMv
cmVzb3VyY2VzL2lmcmFtZWRvY3VtZW50Lmh0bWwiLCBhcmd2WzBdKTsKKwogICAgIGdfdGVzdF9i
dWdfYmFzZSgiaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvIik7CiAKICAgICBnX3Rlc3RfYWRkKCIv
d2Via2l0L2RvbWRvY3VtZW50L3Rlc3RfdGl0bGUiLApAQCAtMjE5LDYgKzM1OSwxMiBAQCBpbnQg
bWFpbihpbnQgYXJnYywgY2hhcioqIGFyZ3YpCiAgICAgICAgICAgICAgICB0ZXN0X2RvbV9kb2N1
bWVudF9nZXRfbGlua3MsCiAgICAgICAgICAgICAgICBkb21fZG9jdW1lbnRfZml4dHVyZV90ZWFy
ZG93bik7CiAKKyAgICBnX3Rlc3RfYWRkKCIvd2Via2l0L2RvbWRvY3VtZW50L3Rlc3RfZ2FyYmFn
ZV9jb2xsZWN0aW9uIiwKKyAgICAgICAgICAgICAgIERvbURvY3VtZW50Rml4dHVyZSwgSFRNTF9E
T0NVTUVOVF9MSU5LUywKKyAgICAgICAgICAgICAgIGRvbV9kb2N1bWVudF9maXh0dXJlX3NldHVw
LAorICAgICAgICAgICAgICAgdGVzdF9kb21fZG9jdW1lbnRfZ2FyYmFnZV9jb2xsZWN0aW9uLAor
ICAgICAgICAgICAgICAgZG9tX2RvY3VtZW50X2ZpeHR1cmVfdGVhcmRvd24pOworCiAgICAgcmV0
dXJuIGdfdGVzdF9ydW4oKTsKIH0KIApkaWZmIC0tZ2l0IGEvV2ViS2l0L2d0ay90ZXN0cy90ZXN0
ZG9tbm9kZS5jIGIvV2ViS2l0L2d0ay90ZXN0cy90ZXN0ZG9tbm9kZS5jCmluZGV4IGM2MDU2ZDYu
LjdkNjI3MjAgMTAwNjQ0Ci0tLSBhL1dlYktpdC9ndGsvdGVzdHMvdGVzdGRvbW5vZGUuYworKysg
Yi9XZWJLaXQvZ3RrL3Rlc3RzL3Rlc3Rkb21ub2RlLmMKQEAgLTg0LDYgKzg0LDcgQEAgc3RhdGlj
IHZvaWQgdGVzdF9kb21fbm9kZV9oaWVyYXJjaHlfbmF2aWdhdGlvbihEb21Ob2RlRml4dHVyZSog
Zml4dHVyZSwgZ2NvbnN0cG8KICAgICBwdHIgPSB3ZWJraXRfZG9tX25vZGVfbGlzdF9pdGVtKGxp
c3QsIDApOwogICAgIGdfYXNzZXJ0KHB0cik7CiAgICAgZ19hc3NlcnQoV0VCS0lUX0RPTV9JU19I
VE1MX1RJVExFX0VMRU1FTlQocHRyKSk7CisgICAgZ19vYmplY3RfdW5yZWYobGlzdCk7CiAKICAg
ICAvKiBCb2R5LCBIZWFkIHNpYmxpbmcgKi8KICAgICBwdHIgPSB3ZWJraXRfZG9tX25vZGVfZ2V0
X25leHRfc2libGluZyhXRUJLSVRfRE9NX05PREUoaGVhZCkpOwpAQCAtMTE4LDYgKzExOSw3IEBA
IHN0YXRpYyB2b2lkIHRlc3RfZG9tX25vZGVfaGllcmFyY2h5X25hdmlnYXRpb24oRG9tTm9kZUZp
eHR1cmUqIGZpeHR1cmUsIGdjb25zdHBvCiAgICAgICAgIC8qIE5vdGhpbmcgKi87CiAKICAgICBn
X2Fzc2VydF9jbXBpbnQoaSwgPT0sIDMpOworICAgIGdfb2JqZWN0X3VucmVmKGxpc3QpOwogfQog
CiBzdGF0aWMgdm9pZCB0ZXN0X2RvbV9ub2RlX2luc2VydGlvbihEb21Ob2RlRml4dHVyZSogZml4
dHVyZSwgZ2NvbnN0cG9pbnRlciBkYXRhKQpAQCAtMTQ4LDYgKzE1MCw3IEBAIHN0YXRpYyB2b2lk
IHRlc3RfZG9tX25vZGVfaW5zZXJ0aW9uKERvbU5vZGVGaXh0dXJlKiBmaXh0dXJlLCBnY29uc3Rw
b2ludGVyIGRhdGEpCiAgICAgbm9kZSA9IHdlYmtpdF9kb21fbm9kZV9saXN0X2l0ZW0obGlzdCwg
MCk7CiAgICAgZ19hc3NlcnQobm9kZSk7CiAgICAgZ19hc3NlcnQod2Via2l0X2RvbV9ub2RlX2lz
X3NhbWVfbm9kZShXRUJLSVRfRE9NX05PREUocCksIG5vZGUpKTsKKyAgICBnX29iamVjdF91bnJl
ZihsaXN0KTsKIAogICAgIC8qIFJlcGxhY2UgdGhlIFAgdGFnIHdpdGggYSBESVYgdGFnICovCiAg
ICAgZGl2ID0gd2Via2l0X2RvbV9kb2N1bWVudF9jcmVhdGVfZWxlbWVudChkb2N1bWVudCwgIkRJ
ViIsIE5VTEwpOwpAQCAtMTU4LDExICsxNjEsMTMgQEAgc3RhdGljIHZvaWQgdGVzdF9kb21fbm9k
ZV9pbnNlcnRpb24oRG9tTm9kZUZpeHR1cmUqIGZpeHR1cmUsIGdjb25zdHBvaW50ZXIgZGF0YSkK
ICAgICBub2RlID0gd2Via2l0X2RvbV9ub2RlX2xpc3RfaXRlbShsaXN0LCAwKTsKICAgICBnX2Fz
c2VydChub2RlKTsKICAgICBnX2Fzc2VydCh3ZWJraXRfZG9tX25vZGVfaXNfc2FtZV9ub2RlKFdF
QktJVF9ET01fTk9ERShkaXYpLCBub2RlKSk7CisgICAgZ19vYmplY3RfdW5yZWYobGlzdCk7CiAK
ICAgICAvKiBOb3cgcmVtb3ZlIHRoZSB0YWcgKi8KICAgICB3ZWJraXRfZG9tX25vZGVfcmVtb3Zl
X2NoaWxkKFdFQktJVF9ET01fTk9ERShib2R5KSwgbm9kZSwgTlVMTCk7CiAgICAgbGlzdCA9IHdl
YmtpdF9kb21fbm9kZV9nZXRfY2hpbGRfbm9kZXMoV0VCS0lUX0RPTV9OT0RFKGJvZHkpKTsKICAg
ICBnX2Fzc2VydF9jbXBpbnQod2Via2l0X2RvbV9ub2RlX2xpc3RfZ2V0X2xlbmd0aChsaXN0KSwg
PT0sIDApOworICAgIGdfb2JqZWN0X3VucmVmKGxpc3QpOwogCiAgICAgLyogVE9ETzogaW5zZXJ0
X2JlZm9yZSwgd2hpY2ggZG9lcyBub3Qgc2VlbSB0byBiZSB3b3JraW5nIGNvcnJlY3RseSAqLwog
fQpkaWZmIC0tZ2l0IGEvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0aGl0dGVzdHJlc3VsdC5jcHAg
Yi9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRoaXR0ZXN0cmVzdWx0LmNwcAppbmRleCA4NjJkOTRh
Li4xZTZmZTMzIDEwMDY0NAotLS0gYS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRoaXR0ZXN0cmVz
dWx0LmNwcAorKysgYi9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRoaXR0ZXN0cmVzdWx0LmNwcApA
QCAtNzEsNiArNzEsMTUgQEAgc3RhdGljIHZvaWQgd2Via2l0X2hpdF90ZXN0X3Jlc3VsdF9maW5h
bGl6ZShHT2JqZWN0KiBvYmplY3QpCiAgICAgR19PQkpFQ1RfQ0xBU1Mod2Via2l0X2hpdF90ZXN0
X3Jlc3VsdF9wYXJlbnRfY2xhc3MpLT5maW5hbGl6ZShvYmplY3QpOwogfQogCitzdGF0aWMgdm9p
ZCB3ZWJraXRfaGl0X3Rlc3RfcmVzdWx0X2Rpc3Bvc2UoR09iamVjdCogb2JqZWN0KQoreworICAg
IFdlYktpdEhpdFRlc3RSZXN1bHRQcml2YXRlKiBwcml2ID0gV0VCS0lUX0hJVF9URVNUX1JFU1VM
VChvYmplY3QpLT5wcml2OworCisgICAgZ19vYmplY3RfdW5yZWYocHJpdi0+aW5uZXJOb2RlKTsK
KworICAgIEdfT0JKRUNUX0NMQVNTKHdlYmtpdF9oaXRfdGVzdF9yZXN1bHRfcGFyZW50X2NsYXNz
KS0+ZGlzcG9zZShvYmplY3QpOworfQorCiBzdGF0aWMgdm9pZCB3ZWJraXRfaGl0X3Rlc3RfcmVz
dWx0X2dldF9wcm9wZXJ0eShHT2JqZWN0KiBvYmplY3QsIGd1aW50IHByb3BlcnR5SUQsIEdWYWx1
ZSogdmFsdWUsIEdQYXJhbVNwZWMqIHBzcGVjKQogewogICAgIFdlYktpdEhpdFRlc3RSZXN1bHQq
IHdlYl9oaXRfdGVzdF9yZXN1bHQgPSBXRUJLSVRfSElUX1RFU1RfUkVTVUxUKG9iamVjdCk7CkBA
IC0xMzEsNiArMTQwLDcgQEAgc3RhdGljIHZvaWQgd2Via2l0X2hpdF90ZXN0X3Jlc3VsdF9jbGFz
c19pbml0KFdlYktpdEhpdFRlc3RSZXN1bHRDbGFzcyogd2ViSGl0VGUKICAgICBHT2JqZWN0Q2xh
c3MqIG9iamVjdENsYXNzID0gR19PQkpFQ1RfQ0xBU1Mod2ViSGl0VGVzdFJlc3VsdENsYXNzKTsK
IAogICAgIG9iamVjdENsYXNzLT5maW5hbGl6ZSA9IHdlYmtpdF9oaXRfdGVzdF9yZXN1bHRfZmlu
YWxpemU7CisgICAgb2JqZWN0Q2xhc3MtPmRpc3Bvc2UgPSB3ZWJraXRfaGl0X3Rlc3RfcmVzdWx0
X2Rpc3Bvc2U7CiAgICAgb2JqZWN0Q2xhc3MtPmdldF9wcm9wZXJ0eSA9IHdlYmtpdF9oaXRfdGVz
dF9yZXN1bHRfZ2V0X3Byb3BlcnR5OwogICAgIG9iamVjdENsYXNzLT5zZXRfcHJvcGVydHkgPSB3
ZWJraXRfaGl0X3Rlc3RfcmVzdWx0X3NldF9wcm9wZXJ0eTsKIApkaWZmIC0tZ2l0IGEvV2ViS2l0
L2d0ay93ZWJraXQvd2Via2l0d2ViZnJhbWUuY3BwIGIvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0
d2ViZnJhbWUuY3BwCmluZGV4IDYzYTI0MTMuLmZjYjUxOTcgMTAwNjQ0Ci0tLSBhL1dlYktpdC9n
dGsvd2Via2l0L3dlYmtpdHdlYmZyYW1lLmNwcAorKysgYi9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJr
aXR3ZWJmcmFtZS5jcHAKQEAgLTM1LDYgKzM1LDcgQEAKICNpbmNsdWRlICJBY2Nlc3NpYmlsaXR5
T2JqZWN0V3JhcHBlckF0ay5oIgogI2luY2x1ZGUgIkFuaW1hdGlvbkNvbnRyb2xsZXIuaCIKICNp
bmNsdWRlICJBWE9iamVjdENhY2hlLmgiCisjaW5jbHVkZSAiRE9NT2JqZWN0Q2FjaGUuaCIKICNp
bmNsdWRlICJEb2N1bWVudExvYWRlci5oIgogI2luY2x1ZGUgIkRvY3VtZW50TG9hZGVyR3RrLmgi
CiAjaW5jbHVkZSAiRnJhbWVMb2FkZXIuaCIKQEAgLTE0Niw3ICsxNDcsMTAgQEAgc3RhdGljIHZv
aWQgd2Via2l0X3dlYl9mcmFtZV9nZXRfcHJvcGVydHkoR09iamVjdCogb2JqZWN0LCBndWludCBw
cm9wX2lkLCBHVmFsdWUKIHZvaWQgd2Via2l0X3dlYl9mcmFtZV9jb3JlX2ZyYW1lX2dvbmUoV2Vi
S2l0V2ViRnJhbWUqIGZyYW1lKQogewogICAgIEFTU0VSVChXRUJLSVRfSVNfV0VCX0ZSQU1FKGZy
YW1lKSk7Ci0gICAgZnJhbWUtPnByaXYtPmNvcmVGcmFtZSA9IDA7CisgICAgV2ViS2l0V2ViRnJh
bWVQcml2YXRlKiBwcml2ID0gZnJhbWUtPnByaXY7CisgICAgaWYgKHByaXYtPmNvcmVGcmFtZSkK
KyAgICAgICAgRE9NT2JqZWN0Q2FjaGU6OmNsZWFyQnlGcmFtZShwcml2LT5jb3JlRnJhbWUpOwor
ICAgIHByaXYtPmNvcmVGcmFtZSA9IDA7CiB9CiAKIHN0YXRpYyBXZWJLaXRXZWJEYXRhU291cmNl
KiB3ZWJraXRfd2ViX2ZyYW1lX2dldF9kYXRhX3NvdXJjZV9mcm9tX2NvcmVfbG9hZGVyKFdlYkNv
cmU6OkRvY3VtZW50TG9hZGVyKiBsb2FkZXIpCkBAIC0xNjAsNiArMTY0LDcgQEAgc3RhdGljIHZv
aWQgd2Via2l0X3dlYl9mcmFtZV9maW5hbGl6ZShHT2JqZWN0KiBvYmplY3QpCiAgICAgV2ViS2l0
V2ViRnJhbWVQcml2YXRlKiBwcml2ID0gZnJhbWUtPnByaXY7CiAKICAgICBpZiAocHJpdi0+Y29y
ZUZyYW1lKSB7CisgICAgICAgIERPTU9iamVjdENhY2hlOjpjbGVhckJ5RnJhbWUocHJpdi0+Y29y
ZUZyYW1lKTsKICAgICAgICAgcHJpdi0+Y29yZUZyYW1lLT5sb2FkZXIoKS0+Y2FuY2VsQW5kQ2xl
YXIoKTsKICAgICAgICAgcHJpdi0+Y29yZUZyYW1lID0gMDsKICAgICB9Ci0tIAoxLjcuMi4zCgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>74490</attachid>
            <date>2010-11-20 18:15:00 -0800</date>
            <delta_ts>2010-11-20 22:12:16 -0800</delta_ts>
            <desc>domcache.diff</desc>
            <filename>domcache.diff</filename>
            <type>text/plain</type>
            <size>32666</size>
            <attacher name="Xan Lopez">xan.lopez</attacher>
            
              <data encoding="base64">RnJvbSBjZmJmYjZmMmNmM2Y2MjI2Nzk1MzM4ZTVlY2RlMjlkYmU2YjA0NTEzIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBYYW4gTG9wZXogPHhsb3BlekBpZ2FsaWEuY29tPgpEYXRlOiBU
dWUsIDE2IE5vdiAyMDEwIDIwOjMxOjMzIC0wNTAwClN1YmplY3Q6IFtQQVRDSF0gV2ViQ29yZToK
CjIwMTAtMTEtMTkgIFhhbiBMb3BleiAgPHhsb3BlekBpZ2FsaWEuY29tPgoKICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KCiAgICAgICAgW0dUS10gTWVtb3J5IG1hbmFnYW1lbnQg
Zm9yIERPTSBHT2JqZWN0IHdyYXBwZXJzCiAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTQwMzAyCgogICAgICAgIEluaXRpYWwgYXR0ZW1wdCB0byBoYXZlIGEg
a2luZCBvZiBwb29yIG1hbidzIGdhcmJhZ2UgY29sbGVjdGlvbgogICAgICAgIGZvciBHT2JqZWN0
IERPTSBvYmplY3RzLiBXZSB0aWUgdGhlIG9iamVjdCdzIGxpZmVjeWNsZSB0byB0aGVpcgogICAg
ICAgIHBhcmVudCBGcmFtZSBhbmQvb3IgaXRzIGRvY3VtZW50OyB0aGF0IGlzLCBhbGwgb2JqZWN0
cyB3aWxsIGJlCiAgICAgICAgY29sbGVjdGVkIHdoZW4gdGhlaXIgcGFyZW50IGZyYW1lIGlzIGRl
c3Ryb3llZCBvciB3aGVuIHRoYXQgZnJhbWUKICAgICAgICB0cmFuc2l0aW9ucyB0byBhIG5ldyBk
b2N1bWVudC4gTWFudWFsIG1hbmFnZW1lbnQgKGNhbGxpbmcKICAgICAgICBnX29iamVjdF91bnJl
ZiBvbiB0aGVtKSBpcyBhbHNvIGFsbG93ZWQsIGFuZCBpcyByZXF1aXJlZCBmb3IKICAgICAgICBv
YmplY3RzIHRoYXQgYXJlIG5vdCBpbiB0aGUgRE9NIHRyZWUgKGVnIE5vZGVMaXN0cykuCgogICAg
ICAgICogR05VbWFrZWZpbGUuYW06CiAgICAgICAgKiBiaW5kaW5ncy9nb2JqZWN0L0RPTU9iamVj
dENhY2hlLmNwcDogQWRkZWQuCiAgICAgICAgKiBiaW5kaW5ncy9nb2JqZWN0L0RPTU9iamVjdENh
Y2hlLmg6IENvcGllZCBmcm9tIFdlYkNvcmUvYmluZGluZ3MvZ29iamVjdC9XZWJLaXRET01CaW5k
aW5nLmguCiAgICAgICAgKiBiaW5kaW5ncy9nb2JqZWN0L1dlYktpdERPTUJpbmRpbmcuY3BwOiBS
ZW1vdmUgdGhlIG9sZCBjYWNoZSBjb2RlLgogICAgICAgICogYmluZGluZ3MvZ29iamVjdC9XZWJL
aXRET01CaW5kaW5nLmg6IGRpdHRvLgogICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2Vu
ZXJhdG9yR09iamVjdC5wbTogaW5jbHVkZSB0aGUgbmV3IERPTU9iamVjdENhY2hlIGhlYWRlci4K
CldlYktpdC9ndGs6CgoyMDEwLTExLTE5ICBYYW4gTG9wZXogIDx4bG9wZXpAaWdhbGlhLmNvbT4K
CiAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCgogICAgICAgIFtHVEtdIE1lbW9y
eSBtYW5hZ2FtZW50IGZvciBET00gR09iamVjdCB3cmFwcGVycwogICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00MDMwMgoKICAgICAgICBJbml0aWFsIGF0dGVt
cHQgdG8gaGF2ZSBhIGtpbmQgb2YgcG9vciBtYW4ncyBnYXJiYWdlIGNvbGxlY3Rpb24KICAgICAg
ICBmb3IgR09iamVjdCBET00gb2JqZWN0cy4gV2UgdGllIHRoZSBvYmplY3QncyBsaWZlY3ljbGUg
dG8gdGhlaXIKICAgICAgICBwYXJlbnQgRnJhbWUgYW5kL29yIGl0cyBkb2N1bWVudDsgdGhhdCBp
cywgYWxsIG9iamVjdHMgd2lsbCBiZQogICAgICAgIGNvbGxlY3RlZCB3aGVuIHRoZWlyIHBhcmVu
dCBmcmFtZSBpcyBkZXN0cm95ZWQgb3Igd2hlbiB0aGF0IGZyYW1lCiAgICAgICAgdHJhbnNpdGlv
bnMgdG8gYSBuZXcgZG9jdW1lbnQuIE1hbnVhbCBtYW5hZ2VtZW50IChjYWxsaW5nCiAgICAgICAg
Z19vYmplY3RfdW5yZWYgb24gdGhlbSkgaXMgYWxzbyBhbGxvd2VkLCBhbmQgaXMgcmVxdWlyZWQg
Zm9yCiAgICAgICAgb2JqZWN0cyB0aGF0IGFyZSBub3QgaW4gdGhlIERPTSB0cmVlIChlZyBOb2Rl
TGlzdHMpLgoKICAgICAgICAqIEdOVW1ha2VmaWxlLmFtOiBhZGQgdGVzdHV0aWxzIGZpbGUgdG8g
dGVzdGRvbWRvY3VtZW50LmMKICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xp
ZW50R3RrLmNwcDoKICAgICAgICAoV2ViS2l0OjpGcmFtZUxvYWRlckNsaWVudDo6c2V0TWFpbkZy
YW1lRG9jdW1lbnRSZWFkeSk6IGNvbGxlY3QKICAgICAgICBET00gb2JqZWN0cyBvbiBkb2N1bWVu
dCB0cmFuc2l0aW9uLgogICAgICAgICogdGVzdHMvdGVzdGRvbWRvY3VtZW50LmM6CiAgICAgICAg
KGRvbV9kb2N1bWVudF9maXh0dXJlX3RlYXJkb3duKTogb25seSBkZXN0cm95IHRoZSB2aWV3IGlm
IGl0J3Mgbm90CiAgICAgICAgYWxyZWFkeSBkZXN0cm95ZWQsIHNpbmNlIHRoZSBuZXcgdGVzdCBk
ZXRyb3lzIGl0IG9uIGl0cyBvd24uCiAgICAgICAgKHRlc3RfZG9tX2RvY3VtZW50X2dldF9lbGVt
ZW50c19ieV90YWdfbmFtZSk6IG1hbnVhbGx5IHVucmVmIG5vZGUgbGlzdC4KICAgICAgICAodGVz
dF9kb21fZG9jdW1lbnRfZ2V0X2VsZW1lbnRzX2J5X2NsYXNzX25hbWUpOiBkaXR0by4KICAgICAg
ICAodGVzdF9kb21fZG9jdW1lbnRfZ2V0X2xpbmtzKTogZGl0dG8uCiAgICAgICAgKHRlc3RfZG9t
X2RvY3VtZW50X2dhcmJhZ2VfY29sbGVjdGlvbik6IHRlc3QgYWxsIHBvc3NpYmxlCiAgICAgICAg
c2NlbmFyaW9zIGZvciBET00gb2JqZWN0ICJnYXJiYWdlIGNvbGxlY3Rpb24iLgogICAgICAgICht
YWluKTogYWRkIG5ldyB0ZXN0LgogICAgICAgICogdGVzdHMvdGVzdGRvbW5vZGUuYzoKICAgICAg
ICAodGVzdF9kb21fbm9kZV9oaWVyYXJjaHlfbmF2aWdhdGlvbik6IG1hbnVhbGx5IHVucmVmIG5v
ZGUgbGlzdC4KICAgICAgICAodGVzdF9kb21fbm9kZV9pbnNlcnRpb24pOiBkaXR0by4KICAgICAg
ICAqIHdlYmtpdC93ZWJraXRoaXR0ZXN0cmVzdWx0LmNwcDoKICAgICAgICAod2Via2l0X2hpdF90
ZXN0X3Jlc3VsdF9kaXNwb3NlKTogdW5yZWYgdGhlIGlubmVyIG5vZGUgb24gZGlzcG9zZQogICAg
ICAgIG5vdyB0aGF0IHRoZSBtZW1vcnkgbWFuYWdlbWVudCBtb2RlbCBpcyBjbGFyaWZpZWQuCiAg
ICAgICAgKHdlYmtpdF9oaXRfdGVzdF9yZXN1bHRfY2xhc3NfaW5pdCk6IGhvb2sgZGlzcG9zZS4K
ICAgICAgICAqIHdlYmtpdC93ZWJraXR3ZWJmcmFtZS5jcHA6CiAgICAgICAgKHdlYmtpdF93ZWJf
ZnJhbWVfY29yZV9mcmFtZV9nb25lKTogY2xlYXIgRE9NIG9iamVjdHMgYXR0YWNoZWQgdG8gdGhp
cyBmcmFtZS4KICAgICAgICAod2Via2l0X3dlYl9mcmFtZV9maW5hbGl6ZSk6IGRpdHRvLgotLS0K
IFdlYkNvcmUvQ2hhbmdlTG9nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAy
MiArKysKIFdlYkNvcmUvR05VbWFrZWZpbGUuYW0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHwgICAgMiArCiBXZWJDb3JlL2JpbmRpbmdzL2dvYmplY3QvRE9NT2JqZWN0Q2FjaGUuY3BwICAg
ICAgICB8ICAxNTMgKysrKysrKysrKysrKysrKysrKysKIFdlYkNvcmUvYmluZGluZ3MvZ29iamVj
dC9ET01PYmplY3RDYWNoZS5oICAgICAgICAgIHwgICAzOCArKysrKwogV2ViQ29yZS9iaW5kaW5n
cy9nb2JqZWN0L0dPYmplY3RFdmVudExpc3RlbmVyLmNwcCAgfCAgICAxICsKIFdlYkNvcmUvYmlu
ZGluZ3MvZ29iamVjdC9XZWJLaXRET01CaW5kaW5nLmNwcCAgICAgIHwgICAyNyArLS0tLQogV2Vi
Q29yZS9iaW5kaW5ncy9nb2JqZWN0L1dlYktpdERPTUJpbmRpbmcuaCAgICAgICAgfCAgICA3IC0K
IFdlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yR09iamVjdC5wbSAgIHwgICAg
MSArCiBXZWJLaXQvZ3RrL0NoYW5nZUxvZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8
ICAgMzkgKysrKysKIFdlYktpdC9ndGsvR05VbWFrZWZpbGUuYW0gICAgICAgICAgICAgICAgICAg
ICAgICAgIHwgICAgMiArLQogV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNs
aWVudEd0ay5jcHAgfCAgICA2ICstCiBXZWJLaXQvZ3RrL3Rlc3RzL3Rlc3Rkb21kb2N1bWVudC5j
ICAgICAgICAgICAgICAgICB8ICAxNTAgKysrKysrKysrKysrKysrKysrKy0KIFdlYktpdC9ndGsv
dGVzdHMvdGVzdGRvbW5vZGUuYyAgICAgICAgICAgICAgICAgICAgIHwgICAgNSArCiBXZWJLaXQv
Z3RrL3dlYmtpdC93ZWJraXRoaXR0ZXN0cmVzdWx0LmNwcCAgICAgICAgICB8ICAgMTAgKysKIFdl
YktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYmZyYW1lLmNwcCAgICAgICAgICAgICAgIHwgICAgNyAr
LQogMTUgZmlsZXMgY2hhbmdlZCwgNDMxIGluc2VydGlvbnMoKyksIDM5IGRlbGV0aW9ucygtKQog
Y3JlYXRlIG1vZGUgMTAwNjQ0IFdlYkNvcmUvYmluZGluZ3MvZ29iamVjdC9ET01PYmplY3RDYWNo
ZS5jcHAKIGNyZWF0ZSBtb2RlIDEwMDY0NCBXZWJDb3JlL2JpbmRpbmdzL2dvYmplY3QvRE9NT2Jq
ZWN0Q2FjaGUuaAoKZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFu
Z2VMb2cKaW5kZXggYjc0ZmFhMS4uMTMwOTNmNiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VM
b2cKKysrIGIvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyNSBAQAorMjAxMC0xMS0xOSAg
WGFuIExvcGV6ICA8eGxvcGV6QGlnYWxpYS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgW0dUS10gTWVtb3J5IG1hbmFnYW1lbnQgZm9yIERPTSBH
T2JqZWN0IHdyYXBwZXJzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD00MDMwMgorCisgICAgICAgIEluaXRpYWwgYXR0ZW1wdCB0byBoYXZlIGEga2luZCBv
ZiBwb29yIG1hbidzIGdhcmJhZ2UgY29sbGVjdGlvbgorICAgICAgICBmb3IgR09iamVjdCBET00g
b2JqZWN0cy4gV2UgdGllIHRoZSBvYmplY3QncyBsaWZlY3ljbGUgdG8gdGhlaXIKKyAgICAgICAg
cGFyZW50IEZyYW1lIGFuZC9vciBpdHMgZG9jdW1lbnQ7IHRoYXQgaXMsIGFsbCBvYmplY3RzIHdp
bGwgYmUKKyAgICAgICAgY29sbGVjdGVkIHdoZW4gdGhlaXIgcGFyZW50IGZyYW1lIGlzIGRlc3Ry
b3llZCBvciB3aGVuIHRoYXQgZnJhbWUKKyAgICAgICAgdHJhbnNpdGlvbnMgdG8gYSBuZXcgZG9j
dW1lbnQuIE1hbnVhbCBtYW5hZ2VtZW50IChjYWxsaW5nCisgICAgICAgIGdfb2JqZWN0X3VucmVm
IG9uIHRoZW0pIGlzIGFsc28gYWxsb3dlZCwgYW5kIGlzIHJlcXVpcmVkIGZvcgorICAgICAgICBv
YmplY3RzIHRoYXQgYXJlIG5vdCBpbiB0aGUgRE9NIHRyZWUgKGVnIE5vZGVMaXN0cykuCisKKyAg
ICAgICAgKiBHTlVtYWtlZmlsZS5hbToKKyAgICAgICAgKiBiaW5kaW5ncy9nb2JqZWN0L0RPTU9i
amVjdENhY2hlLmNwcDogQWRkZWQuCisgICAgICAgICogYmluZGluZ3MvZ29iamVjdC9ET01PYmpl
Y3RDYWNoZS5oOiBDb3BpZWQgZnJvbSBXZWJDb3JlL2JpbmRpbmdzL2dvYmplY3QvV2ViS2l0RE9N
QmluZGluZy5oLgorICAgICAgICAqIGJpbmRpbmdzL2dvYmplY3QvV2ViS2l0RE9NQmluZGluZy5j
cHA6IFJlbW92ZSB0aGUgb2xkIGNhY2hlIGNvZGUuCisgICAgICAgICogYmluZGluZ3MvZ29iamVj
dC9XZWJLaXRET01CaW5kaW5nLmg6IGRpdHRvLgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMv
Q29kZUdlbmVyYXRvckdPYmplY3QucG06IGluY2x1ZGUgdGhlIG5ldyBET01PYmplY3RDYWNoZSBo
ZWFkZXIuCisKIDIwMTAtMTEtMjAgIEFuZHJlYXMgS2xpbmcgIDxrbGluZ0B3ZWJraXQub3JnPgog
CiAgICAgICAgIFJldmlld2VkIGJ5IERhdmlkIEtpbHplci4KZGlmZiAtLWdpdCBhL1dlYkNvcmUv
R05VbWFrZWZpbGUuYW0gYi9XZWJDb3JlL0dOVW1ha2VmaWxlLmFtCmluZGV4IGU4ZWIzODYuLmU1
ZmUyYTcgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvR05VbWFrZWZpbGUuYW0KKysrIGIvV2ViQ29yZS9H
TlVtYWtlZmlsZS5hbQpAQCAtNjM5LDYgKzYzOSw4IEBAIHdlYmNvcmVfc291cmNlcyArPSBcCiAJ
V2ViQ29yZS9iaW5kaW5ncy9nZW5lcmljL1J1bnRpbWVFbmFibGVkRmVhdHVyZXMuaCBcCiAJV2Vi
Q29yZS9iaW5kaW5ncy9nb2JqZWN0L0NvbnZlcnRUb1VURjhTdHJpbmcuY3BwIFwKIAlXZWJDb3Jl
L2JpbmRpbmdzL2dvYmplY3QvQ29udmVydFRvVVRGOFN0cmluZy5oIFwKKwlXZWJDb3JlL2JpbmRp
bmdzL2dvYmplY3QvRE9NT2JqZWN0Q2FjaGUuY3BwIFwKKwlXZWJDb3JlL2JpbmRpbmdzL2dvYmpl
Y3QvRE9NT2JqZWN0Q2FjaGUuaCBcCiAJV2ViQ29yZS9iaW5kaW5ncy9nb2JqZWN0L0dPYmplY3RF
dmVudExpc3RlbmVyLmNwcCBcCiAJV2ViQ29yZS9iaW5kaW5ncy9nb2JqZWN0L0dPYmplY3RFdmVu
dExpc3RlbmVyLmggXAogCVdlYkNvcmUvYmluZGluZ3MvZ29iamVjdC9XZWJLaXRET01CaW5kaW5n
LmNwcCBcCmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL2dvYmplY3QvRE9NT2JqZWN0Q2Fj
aGUuY3BwIGIvV2ViQ29yZS9iaW5kaW5ncy9nb2JqZWN0L0RPTU9iamVjdENhY2hlLmNwcApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZmViYjM0Ci0tLSAvZGV2L251bGwKKysr
IGIvV2ViQ29yZS9iaW5kaW5ncy9nb2JqZWN0L0RPTU9iamVjdENhY2hlLmNwcApAQCAtMCwwICsx
LDE1MyBAQAorLyoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMTAgSWdhbGlhIFMuTC4KKyAqCisgKiAg
VGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2Vu
ZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChh
dCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBp
cyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1
dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5
IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig
bW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9m
IHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhbG9uZyB3aXRoIHRo
aXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5k
YXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEg
IDAyMTEwLTEzMDEgIFVTQQorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJE
T01PYmplY3RDYWNoZS5oIgorCisjaW5jbHVkZSAiRG9jdW1lbnQuaCIKKyNpbmNsdWRlICJOb2Rl
LmgiCisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK3R5
cGVkZWYgc3RydWN0IHsKKyAgICBHT2JqZWN0KiBvYmplY3Q7CisgICAgdm9pZCogZnJhbWU7Cisg
ICAgZ3VpbnQgdGltZXNSZXR1cm5lZDsKK30gRE9NT2JqZWN0Q2FjaGVEYXRhOworCit0eXBlZGVm
IEhhc2hNYXA8dm9pZCosIERPTU9iamVjdENhY2hlRGF0YSo+IERPTU9iamVjdE1hcDsKKworc3Rh
dGljIERPTU9iamVjdE1hcCYgZG9tT2JqZWN0cygpCit7CisgICAgc3RhdGljIERPTU9iamVjdE1h
cCBzdGF0aWNET01PYmplY3RzOworICAgIHJldHVybiBzdGF0aWNET01PYmplY3RzOworfQorCitz
dGF0aWMgdm9pZCogZ2V0RnJhbWVGcm9tSGFuZGxlKHZvaWQqIG9iamVjdEhhbmRsZSkKK3sKKyAg
ICBXZWJDb3JlOjpOb2RlKiBub2RlID0gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6Tm9kZSo+KG9iamVj
dEhhbmRsZSk7CisgICAgaWYgKCFub2RlLT5pbkRvY3VtZW50KCkpCisgICAgICAgIHJldHVybiAw
OworICAgIFdlYkNvcmU6OkRvY3VtZW50KiBkb2N1bWVudCA9IG5vZGUtPmRvY3VtZW50KCk7Cisg
ICAgaWYgKCFkb2N1bWVudCkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIGRvY3VtZW50
LT5mcmFtZSgpOworfQorCit2b2lkIERPTU9iamVjdENhY2hlOjpmb3JnZXQodm9pZCogb2JqZWN0
SGFuZGxlKQoreworICAgIERPTU9iamVjdENhY2hlRGF0YSogY2FjaGVEYXRhID0gZG9tT2JqZWN0
cygpLmdldChvYmplY3RIYW5kbGUpOworICAgIEFTU0VSVChjYWNoZURhdGEpOworICAgIGdfc2xp
Y2VfZnJlZShET01PYmplY3RDYWNoZURhdGEsIGNhY2hlRGF0YSk7CisgICAgZG9tT2JqZWN0cygp
LnRha2Uob2JqZWN0SGFuZGxlKTsKK30KKworc3RhdGljIHZvaWQgd2Vha1JlZk5vdGlmeShncG9p
bnRlciBkYXRhLCBHT2JqZWN0KiB6b21iaWUpCit7CisgICAgRE9NT2JqZWN0Q2FjaGVEYXRhKiBj
YWNoZURhdGEgPSBzdGF0aWNfY2FzdDxET01PYmplY3RDYWNoZURhdGEqPihkYXRhKTsKKyAgICAv
LyBTZXQgdGltZXNSZXR1cm5lZCB0byBpdHMgaW5pdGlhbCB2YWx1ZSwgdGhpcyB3aWxsIHN0b3Ag
dGhlIHVucmVmCisgICAgLy8gcHJvY2Vzcy4KKyAgICBjYWNoZURhdGEtPnRpbWVzUmV0dXJuZWQg
PSAxOworfQorCit2b2lkIERPTU9iamVjdENhY2hlOjpjbGVhckJ5RnJhbWUodm9pZCogZnJhbWUp
Cit7CisgICAgVmVjdG9yPERPTU9iamVjdENhY2hlRGF0YSo+IHRvVW5yZWY7CisKKyAgICAvLyBV
bnJlZmZpbmcgdGhlIG9iamVjdHMgcmVtb3ZlcyB0aGVtIGZyb20gdGhlIGNhY2hlIGluIHRoZWly
CisgICAgLy8gZmluYWxpemUgbWV0aG9kLCBzbyBqdXN0IHNhdmUgdGhlbSB0byBkbyB0aGF0IHdo
aWxlIHdlIGFyZSBub3QKKyAgICAvLyBpdGVyYXRpbmcgdGhlIGNhY2hlIGl0c2VsZi4KKyAgICBE
T01PYmplY3RNYXA6Oml0ZXJhdG9yIGVuZCA9IGRvbU9iamVjdHMoKS5lbmQoKTsKKyAgICBmb3Ig
KERPTU9iamVjdE1hcDo6aXRlcmF0b3IgaXRlciA9IGRvbU9iamVjdHMoKS5iZWdpbigpOyBpdGVy
ICE9IGVuZDsgKytpdGVyKSB7CisgICAgICAgIERPTU9iamVjdENhY2hlRGF0YSogZGF0YSA9IGl0
ZXItPnNlY29uZDsKKyAgICAgICAgQVNTRVJUKGRhdGEpOworICAgICAgICBpZiAoKCFmcmFtZSB8
fCBkYXRhLT5mcmFtZSA9PSBmcmFtZSkgJiYgZGF0YS0+dGltZXNSZXR1cm5lZCkKKyAgICAgICAg
ICAgIHRvVW5yZWYuYXBwZW5kKGRhdGEpOworICAgIH0KKworICAgIFZlY3RvcjxET01PYmplY3RD
YWNoZURhdGEqPjo6aXRlcmF0b3IgbGFzdCA9IHRvVW5yZWYuZW5kKCk7CisgICAgZm9yIChWZWN0
b3I8RE9NT2JqZWN0Q2FjaGVEYXRhKj46Oml0ZXJhdG9yIGl0ID0gdG9VbnJlZi5iZWdpbigpOyBp
dCAhPSBsYXN0OyArK2l0KSB7CisgICAgICAgIERPTU9iamVjdENhY2hlRGF0YSogZGF0YSA9ICpp
dDsKKyAgICAgICAgLy8gV2UgY2FuJ3QgcmVhbGx5IGtub3cgd2hhdCB0aGUgdXNlciBoYXMgZG9u
ZSB3aXRoIHRoZSBET00KKyAgICAgICAgLy8gb2JqZWN0cywgc28gaW4gY2FzZSBhbnkgb2YgdGhl
IGV4dGVybmFsIHJlZmVyZW5jZXMgdG8gdGhlbQorICAgICAgICAvLyB3ZXJlIHVucmVmZmVkIChi
dXQgbm90IGFsbCwgb3RoZXJ3aXNlIHRoZSBvYmplY3Qgd291bGQgYmUKKyAgICAgICAgLy8gZGVh
ZCBhbmQgb3V0IG9mIHRoZSBjYWNoZSkgd2UnbGwgYWRkIGEgd2VhayByZWYgYmVmb3JlIHdlCisg
ICAgICAgIC8vIHN0YXJ0IHRvIGdldCByaWQgb2YgdGhlIGNhY2hlJ3Mgb3duIHJlZmVyZW5jZXM7
IGlmIHRoZQorICAgICAgICAvLyBvYmplY3QgZGllcyBpbiB0aGUgbWlkZGxlIG9mIHRoZSBwcm9j
ZXNzLCB3ZSdsbCBqdXN0IHN0b3AuCisgICAgICAgIGdfb2JqZWN0X3dlYWtfcmVmKGRhdGEtPm9i
amVjdCwgd2Vha1JlZk5vdGlmeSwgZGF0YSk7CisgICAgICAgIHdoaWxlIChkYXRhLT50aW1lc1Jl
dHVybmVkID4gMCkgeworICAgICAgICAgICAgLy8gSWYgdGhpcyBpcyB0aGUgbGFzdCB1bnJlZiB3
ZSBhcmUgZ29pbmcgdG8gZG8sCisgICAgICAgICAgICAvLyBkaXNjb25uZWN0IHRoZSB3ZWFrIHJl
Zi4gV2UgY2Fubm90IGRvIGl0IGFmdGVyd2FyZHMKKyAgICAgICAgICAgIC8vIGJlY2F1c2UgdGhl
IG9iamVjdCBtaWdodCBiZSBkZWFkIGF0IHRoYXQgcG9pbnQuCisgICAgICAgICAgICBpZiAoZGF0
YS0+dGltZXNSZXR1cm5lZCA9PSAxKQorICAgICAgICAgICAgICAgIGdfb2JqZWN0X3dlYWtfdW5y
ZWYoZGF0YS0+b2JqZWN0LCB3ZWFrUmVmTm90aWZ5LCBkYXRhKTsKKyAgICAgICAgICAgIGdfb2Jq
ZWN0X3VucmVmKGRhdGEtPm9iamVjdCk7CisgICAgICAgICAgICBkYXRhLT50aW1lc1JldHVybmVk
LS07CisgICAgICAgIH0KKyAgICAgICAgQVNTRVJUKGRhdGEtPnRpbWVzUmV0dXJuZWQgPT0gMCk7
CisgICAgfQorfQorCitET01PYmplY3RDYWNoZTo6fkRPTU9iamVjdENhY2hlKCkKK3sKKyAgICBj
bGVhckJ5RnJhbWUoKTsKK30KKwordm9pZCogRE9NT2JqZWN0Q2FjaGU6OmdldCh2b2lkKiBvYmpl
Y3RIYW5kbGUpCit7CisgICAgRE9NT2JqZWN0Q2FjaGVEYXRhKiBkYXRhID0gZG9tT2JqZWN0cygp
LmdldChvYmplY3RIYW5kbGUpOworICAgIGlmICghZGF0YSkKKyAgICAgICAgcmV0dXJuIDA7CisK
KyAgICAvLyBXZSB3YW50IHRvIGFkZCBvbmUgcmVmIGVhY2ggdGltZSBhIHdyYXBwZXIgaXMgcmV0
dXJuZWQsIHNvIHRoYXQKKyAgICAvLyB0aGUgdXNlciBjYW4gbWFudWFsbHkgdW5yZWYgdGhlbSBp
ZiBoZSBjaG9vc2VzIHRvLgorICAgIEFTU0VSVChkYXRhLT5vYmplY3QpOworICAgIGRhdGEtPnRp
bWVzUmV0dXJuZWQrKzsKKyAgICByZXR1cm4gZ19vYmplY3RfcmVmKGRhdGEtPm9iamVjdCk7Cit9
CisKK3ZvaWQqIERPTU9iamVjdENhY2hlOjpwdXQodm9pZCogb2JqZWN0SGFuZGxlLCB2b2lkKiB3
cmFwcGVyKQoreworICAgIGlmIChkb21PYmplY3RzKCkuZ2V0KG9iamVjdEhhbmRsZSkpCisgICAg
ICAgIHJldHVybiB3cmFwcGVyOworCisgICAgRE9NT2JqZWN0Q2FjaGVEYXRhKiBkYXRhID0gZ19z
bGljZV9uZXcoRE9NT2JqZWN0Q2FjaGVEYXRhKTsKKyAgICBkYXRhLT5vYmplY3QgPSBzdGF0aWNf
Y2FzdDxHT2JqZWN0Kj4od3JhcHBlcik7CisgICAgZGF0YS0+ZnJhbWUgPSAwOworICAgIGRhdGEt
PnRpbWVzUmV0dXJuZWQgPSAxOworCisgICAgZG9tT2JqZWN0cygpLnNldChvYmplY3RIYW5kbGUs
IGRhdGEpOworICAgIHJldHVybiB3cmFwcGVyOworfQorCit2b2lkKiBET01PYmplY3RDYWNoZTo6
cHV0KFdlYkNvcmU6Ok5vZGUqIG9iamVjdEhhbmRsZSwgdm9pZCogd3JhcHBlcikKK3sKKyAgICAv
LyBjYWxsIHRoZSA6OnB1dCB2ZXJzaW9uIHRoYXQgdGFrZXMgdm9pZCogdG8gZG8gdGhlIGJhc2lj
IGNhY2hlCisgICAgLy8gaW5zZXJ0aW9uIHdvcmsKKyAgICBwdXQoc3RhdGljX2Nhc3Q8dm9pZCo+
KG9iamVjdEhhbmRsZSksIHdyYXBwZXIpOworCisgICAgRE9NT2JqZWN0Q2FjaGVEYXRhKiBkYXRh
ID0gZG9tT2JqZWN0cygpLmdldChvYmplY3RIYW5kbGUpOworICAgIEFTU0VSVChkYXRhKTsKKwor
ICAgIGRhdGEtPmZyYW1lID0gZ2V0RnJhbWVGcm9tSGFuZGxlKG9iamVjdEhhbmRsZSk7CisKKyAg
ICByZXR1cm4gd3JhcHBlcjsKK30KKworfQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy9n
b2JqZWN0L0RPTU9iamVjdENhY2hlLmggYi9XZWJDb3JlL2JpbmRpbmdzL2dvYmplY3QvRE9NT2Jq
ZWN0Q2FjaGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NWY3MmYxCi0t
LSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy9nb2JqZWN0L0RPTU9iamVjdENhY2hl
LmgKQEAgLTAsMCArMSwzOCBAQAorLyoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMTAgSWdhbGlhIFMu
TC4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO
VSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExp
Y2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRo
aXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNl
ZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBs
aWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2
ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBh
bG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2Fy
ZQorICogIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3Is
IEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICovCisKKyNpZm5kZWYgRE9NT2JqZWN0Q2Fj
aGVfaAorI2RlZmluZSBET01PYmplY3RDYWNoZV9oCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKK2Ns
YXNzIE5vZGU7Cit9OworCituYW1lc3BhY2UgV2ViS2l0IHsKK2NsYXNzIERPTU9iamVjdENhY2hl
IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgdm9pZCogZ2V0KHZvaWQqIG9iamVjdEhhbmRsZSk7Cisg
ICAgc3RhdGljIHZvaWQqIHB1dCh2b2lkKiBvYmplY3RIYW5kbGUsIHZvaWQqIHdyYXBwZXIpOwor
ICAgIHN0YXRpYyB2b2lkKiBwdXQoV2ViQ29yZTo6Tm9kZSogb2JqZWN0SGFuZGxlLCB2b2lkKiB3
cmFwcGVyKTsKKyAgICBzdGF0aWMgdm9pZCBjbGVhckJ5RnJhbWUodm9pZCogZnJhbWUgPSAwKTsK
KyAgICBzdGF0aWMgdm9pZCBmb3JnZXQodm9pZCogb2JqZWN0SGFuZGxlKTsKKyAgICB+RE9NT2Jq
ZWN0Q2FjaGUoKTsKK307Cit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmCmRpZmYgLS1n
aXQgYS9XZWJDb3JlL2JpbmRpbmdzL2dvYmplY3QvR09iamVjdEV2ZW50TGlzdGVuZXIuY3BwIGIv
V2ViQ29yZS9iaW5kaW5ncy9nb2JqZWN0L0dPYmplY3RFdmVudExpc3RlbmVyLmNwcAppbmRleCAz
ZTBhYTJhLi4yNzQzMmI5IDEwMDY0NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdzL2dvYmplY3QvR09i
amVjdEV2ZW50TGlzdGVuZXIuY3BwCisrKyBiL1dlYkNvcmUvYmluZGluZ3MvZ29iamVjdC9HT2Jq
ZWN0RXZlbnRMaXN0ZW5lci5jcHAKQEAgLTcxLDYgKzcxLDcgQEAgdm9pZCBHT2JqZWN0RXZlbnRM
aXN0ZW5lcjo6aGFuZGxlRXZlbnQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIEV2ZW50KiBldmVu
dCkKICAgICBnYm9vbGVhbiBoYW5kbGVkID0gRkFMU0U7CiAgICAgV2ViS2l0RE9NRXZlbnQqIGdv
YmplY3RFdmVudCA9IFdFQktJVF9ET01fRVZFTlQoV2ViS2l0OjpraXQoZXZlbnQpKTsKICAgICBn
X3NpZ25hbF9lbWl0X2J5X25hbWUobV9vYmplY3QsIG1fc2lnbmFsTmFtZS5kYXRhKCksIGdvYmpl
Y3RFdmVudCwgJmhhbmRsZWQpOworICAgIGdfb2JqZWN0X3VucmVmKGdvYmplY3RFdmVudCk7CiB9
CiAKIGJvb2wgR09iamVjdEV2ZW50TGlzdGVuZXI6Om9wZXJhdG9yPT0oY29uc3QgRXZlbnRMaXN0
ZW5lciYgbGlzdGVuZXIpCmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL2dvYmplY3QvV2Vi
S2l0RE9NQmluZGluZy5jcHAgYi9XZWJDb3JlL2JpbmRpbmdzL2dvYmplY3QvV2ViS2l0RE9NQmlu
ZGluZy5jcHAKaW5kZXggM2MwNjZlMy4uYThhODk1NiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5k
aW5ncy9nb2JqZWN0L1dlYktpdERPTUJpbmRpbmcuY3BwCisrKyBiL1dlYkNvcmUvYmluZGluZ3Mv
Z29iamVjdC9XZWJLaXRET01CaW5kaW5nLmNwcApAQCAtMjQsNiArMjQsNyBAQAogI2luY2x1ZGUg
ImNvbmZpZy5oIgogI2luY2x1ZGUgIldlYktpdERPTUJpbmRpbmcuaCIKIAorI2luY2x1ZGUgIkRP
TU9iamVjdENhY2hlLmgiCiAjaW5jbHVkZSAiRWxlbWVudC5oIgogI2luY2x1ZGUgIkV2ZW50Lmgi
CiAjaW5jbHVkZSAiRXZlbnRFeGNlcHRpb24uaCIKQEAgLTQ0LDMyICs0NSw2IEBAIG5hbWVzcGFj
ZSBXZWJLaXQgewogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiB1c2luZyBuYW1lc3BhY2UgV2Vi
Q29yZTo6SFRNTE5hbWVzOwogCi0vLyBET01PYmplY3RDYWNoZQotCi10eXBlZGVmIEhhc2hNYXA8
dm9pZCosIGdwb2ludGVyPiBET01PYmplY3RNYXA7Ci0KLXN0YXRpYyBET01PYmplY3RNYXAmIGRv
bU9iamVjdHMoKQotewotICAgIHN0YXRpYyBET01PYmplY3RNYXAgc3RhdGljRE9NT2JqZWN0czsK
LSAgICByZXR1cm4gc3RhdGljRE9NT2JqZWN0czsKLX0KLQotZ3BvaW50ZXIgRE9NT2JqZWN0Q2Fj
aGU6OmdldCh2b2lkKiBvYmplY3RIYW5kbGUpCi17Ci0gICAgcmV0dXJuIGRvbU9iamVjdHMoKS5n
ZXQob2JqZWN0SGFuZGxlKTsKLX0KLQotZ3BvaW50ZXIgRE9NT2JqZWN0Q2FjaGU6OnB1dCh2b2lk
KiBvYmplY3RIYW5kbGUsIGdwb2ludGVyIHdyYXBwZXIpCi17Ci0gICAgZG9tT2JqZWN0cygpLnNl
dChvYmplY3RIYW5kbGUsIHdyYXBwZXIpOwotICAgIHJldHVybiB3cmFwcGVyOwotfQotCi12b2lk
IERPTU9iamVjdENhY2hlOjpmb3JnZXQodm9pZCogb2JqZWN0SGFuZGxlKQotewotICAgIGRvbU9i
amVjdHMoKS50YWtlKG9iamVjdEhhbmRsZSk7Ci19Ci0KIC8vIGtpdCBtZXRob2RzCiAKIHN0YXRp
YyBncG9pbnRlciBjcmVhdGVXcmFwcGVyKE5vZGUqIG5vZGUpCmRpZmYgLS1naXQgYS9XZWJDb3Jl
L2JpbmRpbmdzL2dvYmplY3QvV2ViS2l0RE9NQmluZGluZy5oIGIvV2ViQ29yZS9iaW5kaW5ncy9n
b2JqZWN0L1dlYktpdERPTUJpbmRpbmcuaAppbmRleCAyMjQ4Zjc4Li40NzU5NGE2IDEwMDY0NAot
LS0gYS9XZWJDb3JlL2JpbmRpbmdzL2dvYmplY3QvV2ViS2l0RE9NQmluZGluZy5oCisrKyBiL1dl
YkNvcmUvYmluZGluZ3MvZ29iamVjdC9XZWJLaXRET01CaW5kaW5nLmgKQEAgLTM4LDEzICszOCw2
IEBAIGdwb2ludGVyIGtpdChXZWJDb3JlOjpOb2RlKiBub2RlKTsKIGdwb2ludGVyIGtpdChXZWJD
b3JlOjpFbGVtZW50KiBlbGVtZW50KTsKIGdwb2ludGVyIGtpdChXZWJDb3JlOjpFdmVudCogZXZl
bnQpOwogZ3BvaW50ZXIga2l0KFdlYkNvcmU6OkV2ZW50VGFyZ2V0KiB0YXJnZXQpOwotCi1jbGFz
cyBET01PYmplY3RDYWNoZSB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIGdwb2ludGVyIGdldCh2b2lk
KiBvYmplY3RIYW5kbGUpOwotICAgIHN0YXRpYyBncG9pbnRlciBwdXQodm9pZCogb2JqZWN0SGFu
ZGxlLCBncG9pbnRlciB3cmFwcGVyKTsKLSAgICBzdGF0aWMgdm9pZCBmb3JnZXQodm9pZCogb2Jq
ZWN0SGFuZGxlKTsKLX07CiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKIAogI2VuZGlmIC8vIFdlYktp
dERPTUJpbmRpbmdfaApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVH
ZW5lcmF0b3JHT2JqZWN0LnBtIGIvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0
b3JHT2JqZWN0LnBtCmluZGV4IDZjNDUwYWQuLmNhMmJkOWMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yR09iamVjdC5wbQorKysgYi9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckdPYmplY3QucG0KQEAgLTEzMjIsNiArMTMyMiw3
IEBAIHN1YiBHZW5lcmF0ZSB7CiAKICAgICAkaW1wbEluY2x1ZGVzeyJ3ZWJraXRtYXJzaGFsLmgi
fSA9IDE7CiAgICAgJGltcGxJbmNsdWRlc3sid2Via2l0cHJpdmF0ZS5oIn0gPSAxOworICAgICRp
bXBsSW5jbHVkZXN7IkRPTU9iamVjdENhY2hlLmgifSA9IDE7CiAgICAgJGltcGxJbmNsdWRlc3si
V2ViS2l0RE9NQmluZGluZy5oIn0gPSAxOwogICAgICRpbXBsSW5jbHVkZXN7ImdvYmplY3QvQ29u
dmVydFRvVVRGOFN0cmluZy5oIn0gPSAxOwogICAgICRpbXBsSW5jbHVkZXN7IndlYmtpdC8kY2xh
c3NOYW1lLmgifSA9IDE7CmRpZmYgLS1naXQgYS9XZWJLaXQvZ3RrL0NoYW5nZUxvZyBiL1dlYktp
dC9ndGsvQ2hhbmdlTG9nCmluZGV4IGJjMDBiODUuLmJiNWNmYzUgMTAwNjQ0Ci0tLSBhL1dlYktp
dC9ndGsvQ2hhbmdlTG9nCisrKyBiL1dlYktpdC9ndGsvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDIg
QEAKKzIwMTAtMTEtMTkgIFhhbiBMb3BleiAgPHhsb3BlekBpZ2FsaWEuY29tPgorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFtHVEtdIE1lbW9yeSBtYW5h
Z2FtZW50IGZvciBET00gR09iamVjdCB3cmFwcGVycworICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDAzMDIKKworICAgICAgICBJbml0aWFsIGF0dGVtcHQg
dG8gaGF2ZSBhIGtpbmQgb2YgcG9vciBtYW4ncyBnYXJiYWdlIGNvbGxlY3Rpb24KKyAgICAgICAg
Zm9yIEdPYmplY3QgRE9NIG9iamVjdHMuIFdlIHRpZSB0aGUgb2JqZWN0J3MgbGlmZWN5Y2xlIHRv
IHRoZWlyCisgICAgICAgIHBhcmVudCBGcmFtZSBhbmQvb3IgaXRzIGRvY3VtZW50OyB0aGF0IGlz
LCBhbGwgb2JqZWN0cyB3aWxsIGJlCisgICAgICAgIGNvbGxlY3RlZCB3aGVuIHRoZWlyIHBhcmVu
dCBmcmFtZSBpcyBkZXN0cm95ZWQgb3Igd2hlbiB0aGF0IGZyYW1lCisgICAgICAgIHRyYW5zaXRp
b25zIHRvIGEgbmV3IGRvY3VtZW50LiBNYW51YWwgbWFuYWdlbWVudCAoY2FsbGluZworICAgICAg
ICBnX29iamVjdF91bnJlZiBvbiB0aGVtKSBpcyBhbHNvIGFsbG93ZWQsIGFuZCBpcyByZXF1aXJl
ZCBmb3IKKyAgICAgICAgb2JqZWN0cyB0aGF0IGFyZSBub3QgaW4gdGhlIERPTSB0cmVlIChlZyBO
b2RlTGlzdHMpLgorCisgICAgICAgICogR05VbWFrZWZpbGUuYW06IGFkZCB0ZXN0dXRpbHMgZmls
ZSB0byB0ZXN0ZG9tZG9jdW1lbnQuYworICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0ZyYW1lTG9h
ZGVyQ2xpZW50R3RrLmNwcDoKKyAgICAgICAgKFdlYktpdDo6RnJhbWVMb2FkZXJDbGllbnQ6OnNl
dE1haW5GcmFtZURvY3VtZW50UmVhZHkpOiBjb2xsZWN0CisgICAgICAgIERPTSBvYmplY3RzIG9u
IGRvY3VtZW50IHRyYW5zaXRpb24uCisgICAgICAgICogdGVzdHMvdGVzdGRvbWRvY3VtZW50LmM6
CisgICAgICAgIChkb21fZG9jdW1lbnRfZml4dHVyZV90ZWFyZG93bik6IG9ubHkgZGVzdHJveSB0
aGUgdmlldyBpZiBpdCdzIG5vdAorICAgICAgICBhbHJlYWR5IGRlc3Ryb3llZCwgc2luY2UgdGhl
IG5ldyB0ZXN0IGRldHJveXMgaXQgb24gaXRzIG93bi4KKyAgICAgICAgKHRlc3RfZG9tX2RvY3Vt
ZW50X2dldF9lbGVtZW50c19ieV90YWdfbmFtZSk6IG1hbnVhbGx5IHVucmVmIG5vZGUgbGlzdC4K
KyAgICAgICAgKHRlc3RfZG9tX2RvY3VtZW50X2dldF9lbGVtZW50c19ieV9jbGFzc19uYW1lKTog
ZGl0dG8uCisgICAgICAgICh0ZXN0X2RvbV9kb2N1bWVudF9nZXRfbGlua3MpOiBkaXR0by4KKyAg
ICAgICAgKHRlc3RfZG9tX2RvY3VtZW50X2dhcmJhZ2VfY29sbGVjdGlvbik6IHRlc3QgYWxsIHBv
c3NpYmxlCisgICAgICAgIHNjZW5hcmlvcyBmb3IgRE9NIG9iamVjdCAiZ2FyYmFnZSBjb2xsZWN0
aW9uIi4KKyAgICAgICAgKG1haW4pOiBhZGQgbmV3IHRlc3QuCisgICAgICAgICogdGVzdHMvdGVz
dGRvbW5vZGUuYzoKKyAgICAgICAgKHRlc3RfZG9tX25vZGVfaGllcmFyY2h5X25hdmlnYXRpb24p
OiBtYW51YWxseSB1bnJlZiBub2RlIGxpc3QuCisgICAgICAgICh0ZXN0X2RvbV9ub2RlX2luc2Vy
dGlvbik6IGRpdHRvLgorICAgICAgICAqIHdlYmtpdC93ZWJraXRoaXR0ZXN0cmVzdWx0LmNwcDoK
KyAgICAgICAgKHdlYmtpdF9oaXRfdGVzdF9yZXN1bHRfZGlzcG9zZSk6IHVucmVmIHRoZSBpbm5l
ciBub2RlIG9uIGRpc3Bvc2UKKyAgICAgICAgbm93IHRoYXQgdGhlIG1lbW9yeSBtYW5hZ2VtZW50
IG1vZGVsIGlzIGNsYXJpZmllZC4KKyAgICAgICAgKHdlYmtpdF9oaXRfdGVzdF9yZXN1bHRfY2xh
c3NfaW5pdCk6IGhvb2sgZGlzcG9zZS4KKyAgICAgICAgKiB3ZWJraXQvd2Via2l0d2ViZnJhbWUu
Y3BwOgorICAgICAgICAod2Via2l0X3dlYl9mcmFtZV9jb3JlX2ZyYW1lX2dvbmUpOiBjbGVhciBE
T00gb2JqZWN0cyBhdHRhY2hlZCB0byB0aGlzIGZyYW1lLgorICAgICAgICAod2Via2l0X3dlYl9m
cmFtZV9maW5hbGl6ZSk6IGRpdHRvLgorCiAyMDEwLTExLTE4ICBYYW4gTG9wZXogIDx4bG9wZXpA
aWdhbGlhLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBNYXJ0aW4gUm9iaW5zb24uCmRpZmYg
LS1naXQgYS9XZWJLaXQvZ3RrL0dOVW1ha2VmaWxlLmFtIGIvV2ViS2l0L2d0ay9HTlVtYWtlZmls
ZS5hbQppbmRleCBhM2JlODE2Li4zMjUyNzBlIDEwMDY0NAotLS0gYS9XZWJLaXQvZ3RrL0dOVW1h
a2VmaWxlLmFtCisrKyBiL1dlYktpdC9ndGsvR05VbWFrZWZpbGUuYW0KQEAgLTM5MSw3ICszOTEs
NyBAQCBURVNUX1BST0dTICs9IFwKIAlQcm9ncmFtcy91bml0dGVzdHMvdGVzdGNvcHlhbmRwYXN0
ZQogCiAjIEFkZCBhZGRpdGlvbmFsIHRlc3RzIGhlcmUKLVByb2dyYW1zX3VuaXR0ZXN0c190ZXN0
ZG9tZG9jdW1lbnRfU09VUkNFUyA9IFdlYktpdC9ndGsvdGVzdHMvdGVzdGRvbWRvY3VtZW50LmMK
K1Byb2dyYW1zX3VuaXR0ZXN0c190ZXN0ZG9tZG9jdW1lbnRfU09VUkNFUyA9IFdlYktpdC9ndGsv
dGVzdHMvdGVzdGRvbWRvY3VtZW50LmMgV2ViS2l0L2d0ay90ZXN0cy90ZXN0X3V0aWxzLmMKIFBy
b2dyYW1zX3VuaXR0ZXN0c190ZXN0ZG9tZG9jdW1lbnRfQ0ZMQUdTID0gJCh3ZWJraXRfdGVzdHNf
Y2ZsYWdzKQogUHJvZ3JhbXNfdW5pdHRlc3RzX3Rlc3Rkb21kb2N1bWVudF9MREFERCA9ICQod2Vi
a2l0X3Rlc3RzX2xkYWRkKQogUHJvZ3JhbXNfdW5pdHRlc3RzX3Rlc3Rkb21kb2N1bWVudF9MREZM
QUdTID0gJCh3ZWJraXRfdGVzdHNfbGRmbGFncykKZGlmZiAtLWdpdCBhL1dlYktpdC9ndGsvV2Vi
Q29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRHdGsuY3BwIGIvV2ViS2l0L2d0ay9XZWJDb3Jl
U3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudEd0ay5jcHAKaW5kZXggYjIzYmQ3MC4uZmRlZjlkYyAx
MDA2NDQKLS0tIGEvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudEd0
ay5jcHAKKysrIGIvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudEd0
ay5jcHAKQEAgLTI4LDYgKzI4LDcgQEAKICNpbmNsdWRlICJBcmNoaXZlUmVzb3VyY2UuaCIKICNp
bmNsdWRlICJDYWNoZWRGcmFtZS5oIgogI2luY2x1ZGUgIkNvbG9yLmgiCisjaW5jbHVkZSAiRE9N
T2JqZWN0Q2FjaGUuaCIKICNpbmNsdWRlICJEb2N1bWVudExvYWRlci5oIgogI2luY2x1ZGUgIkRv
Y3VtZW50TG9hZGVyR3RrLmgiCiAjaW5jbHVkZSAiRm9ybVN0YXRlLmgiCkBAIC02OTYsOSArNjk3
LDEwIEBAIHZvaWQgRnJhbWVMb2FkZXJDbGllbnQ6OnJlZ2lzdGVyRm9ySWNvbk5vdGlmaWNhdGlv
bihib29sIHNob3VsZFJlZ2lzdGVyKQogICAgIG5vdEltcGxlbWVudGVkKCk7CiB9CiAKLXZvaWQg
RnJhbWVMb2FkZXJDbGllbnQ6OnNldE1haW5GcmFtZURvY3VtZW50UmVhZHkoYm9vbCkKK3ZvaWQg
RnJhbWVMb2FkZXJDbGllbnQ6OnNldE1haW5GcmFtZURvY3VtZW50UmVhZHkoYm9vbCByZWFkeSkK
IHsKLSAgICAvLyB0aGlzIGlzIG9ubHkgaW50ZXJlc3Rpbmcgb25jZSB3ZSBwcm92aWRlIGFuIGV4
dGVybmFsIEFQSSBmb3IgdGhlIERPTQorICAgIGlmICghcmVhZHkpCisgICAgICAgIERPTU9iamVj
dENhY2hlOjpjbGVhckJ5RnJhbWUoY29yZShtX2ZyYW1lKSk7CiB9CiAKIGJvb2wgRnJhbWVMb2Fk
ZXJDbGllbnQ6Omhhc1dlYlZpZXcoKSBjb25zdApkaWZmIC0tZ2l0IGEvV2ViS2l0L2d0ay90ZXN0
cy90ZXN0ZG9tZG9jdW1lbnQuYyBiL1dlYktpdC9ndGsvdGVzdHMvdGVzdGRvbWRvY3VtZW50LmMK
aW5kZXggZWMyZjU3OS4uYjI1MWI5NiAxMDA2NDQKLS0tIGEvV2ViS2l0L2d0ay90ZXN0cy90ZXN0
ZG9tZG9jdW1lbnQuYworKysgYi9XZWJLaXQvZ3RrL3Rlc3RzL3Rlc3Rkb21kb2N1bWVudC5jCkBA
IC0zMCw3ICszMCw4IEBACiAjZGVmaW5lIEhUTUxfRE9DVU1FTlRfRUxFTUVOVFMgIjxodG1sPjxi
b2R5Pjx1bD48bGk+MTwvbGk+PGxpPjI8L2xpPjxsaT4zPC9saT48L3VsPjwvYm9keT48L2h0bWw+
IgogI2RlZmluZSBIVE1MX0RPQ1VNRU5UX0VMRU1FTlRTX0NMQVNTICI8aHRtbD48Ym9keT48ZGl2
IGNsYXNzPVwidGVzdFwiPjwvZGl2PjxkaXYgY2xhc3M9XCJzdHJhbmdlXCI+PC9kaXY+PGRpdiBj
bGFzcz1cInRlc3RcIj48L2Rpdj48L2JvZHk+PC9odG1sPiIKICNkZWZpbmUgSFRNTF9ET0NVTUVO
VF9FTEVNRU5UU19JRCAiPGh0bWw+PGJvZHk+PGRpdiBpZD1cInRlc3Rva1wiPjwvZGl2PjxkaXYg
aWQ9XCJ0ZXN0YmFkXCI+Zmlyc3Q8L2Rpdj48ZGl2IGlkPVwidGVzdGJhZFwiPnNlY29uZDwvZGl2
PjwvYm9keT48L2h0bWw+IgotI2RlZmluZSBIVE1MX0RPQ1VNRU5UX0xJTktTICI8aHRtbD48Ym9k
eT48YSBocmVmPVwiYWJvdXQ6YmxhbmtcIj5ibGFuazwvYT48YSBocmVmPVwiaHR0cDovL3d3dy5n
b29nbGUuY29tXCI+Z29vZ2xlPC9hPjxhIGhyZWY9XCJodHRwOi8vd3d3LndlYmtpdC5vcmdcIj53
ZWJraXQ8L2E+PC9ib2R5PjwvaHRtbD4iCisjZGVmaW5lIEhUTUxfRE9DVU1FTlRfTElOS1MgIjxo
dG1sPjxoZWFkPjx0aXRsZT5UaXRsZTwvdGl0bGU+PC9oZWFkPjxib2R5PjxhIGhyZWY9XCJhYm91
dDpibGFua1wiPmJsYW5rPC9hPjxhIGhyZWY9XCJodHRwOi8vd3d3Lmdvb2dsZS5jb21cIj5nb29n
bGU8L2E+PGEgaHJlZj1cImh0dHA6Ly93d3cud2Via2l0Lm9yZ1wiPndlYmtpdDwvYT48L2JvZHk+
PC9odG1sPiIKKyNkZWZpbmUgSFRNTF9ET0NVTUVOVF9JRlJBTUUgIjxodG1sPjxoZWFkPjx0aXRs
ZT5JRnJhbWU8L3RpdGxlPjwvaGVhZD48Ym9keT48aWZyYW1lIGlkPSdpZnJhbWUnPjwvaWZyYW1l
PjxkaXYgaWQ9J3Rlc3QnPjwvZGl2PjwvYm9keT48L2h0bWw+IgogCiB0eXBlZGVmIHN0cnVjdCB7
CiAgICAgR3RrV2lkZ2V0KiB3ZWJWaWV3OwpAQCAtNjAsNyArNjEsOCBAQCBzdGF0aWMgdm9pZCBk
b21fZG9jdW1lbnRfZml4dHVyZV9zZXR1cChEb21Eb2N1bWVudEZpeHR1cmUqIGZpeHR1cmUsIGdj
b25zdHBvaW50ZQogCiBzdGF0aWMgdm9pZCBkb21fZG9jdW1lbnRfZml4dHVyZV90ZWFyZG93bihE
b21Eb2N1bWVudEZpeHR1cmUqIGZpeHR1cmUsIGdjb25zdHBvaW50ZXIgZGF0YSkKIHsKLSAgICBn
X29iamVjdF91bnJlZihmaXh0dXJlLT53ZWJWaWV3KTsKKyAgICBpZiAoZml4dHVyZS0+d2ViVmll
dykKKyAgICAgICAgZ19vYmplY3RfdW5yZWYoZml4dHVyZS0+d2ViVmlldyk7CiAgICAgZ19tYWlu
X2xvb3BfdW5yZWYoZml4dHVyZS0+bG9vcCk7CiB9CiAKQEAgLTEwNyw2ICsxMDksOCBAQCBzdGF0
aWMgdm9pZCB0ZXN0X2RvbV9kb2N1bWVudF9nZXRfZWxlbWVudHNfYnlfdGFnX25hbWUoRG9tRG9j
dW1lbnRGaXh0dXJlKiBmaXh0dQogICAgICAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X2RvbV9o
dG1sX2VsZW1lbnRfZ2V0X2lubmVyX3RleHQoaHRtbEVsZW1lbnQpLCA9PSwgbik7CiAgICAgICAg
IGdfZnJlZShuKTsKICAgICB9CisKKyAgICBnX29iamVjdF91bnJlZihsaXN0KTsKIH0KIAogc3Rh
dGljIHZvaWQgdGVzdF9kb21fZG9jdW1lbnRfZ2V0X2VsZW1lbnRzX2J5X2NsYXNzX25hbWUoRG9t
RG9jdW1lbnRGaXh0dXJlKiBmaXh0dXJlLCBnY29uc3Rwb2ludGVyIGRhdGEpCkBAIC0xMzAsNiAr
MTM0LDggQEAgc3RhdGljIHZvaWQgdGVzdF9kb21fZG9jdW1lbnRfZ2V0X2VsZW1lbnRzX2J5X2Ns
YXNzX25hbWUoRG9tRG9jdW1lbnRGaXh0dXJlKiBmaXgKICAgICAgICAgZ19hc3NlcnQoZWxlbWVu
dCk7CiAgICAgICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRfZG9tX2VsZW1lbnRfZ2V0X3RhZ19u
YW1lKGVsZW1lbnQpLCA9PSwgIkRJViIpOwogICAgIH0KKworICAgIGdfb2JqZWN0X3VucmVmKGxp
c3QpOwogfQogCiBzdGF0aWMgdm9pZCB0ZXN0X2RvbV9kb2N1bWVudF9nZXRfZWxlbWVudF9ieV9p
ZChEb21Eb2N1bWVudEZpeHR1cmUqIGZpeHR1cmUsIGdjb25zdHBvaW50ZXIgZGF0YSkKQEAgLTE3
OCw2ICsxODQsMTM4IEBAIHN0YXRpYyB2b2lkIHRlc3RfZG9tX2RvY3VtZW50X2dldF9saW5rcyhE
b21Eb2N1bWVudEZpeHR1cmUqIGZpeHR1cmUsIGdjb25zdHBvaW50CiAgICAgICAgIFdlYktpdERP
TUhUTUxBbmNob3JFbGVtZW50ICphbmNob3IgPSAoV2ViS2l0RE9NSFRNTEFuY2hvckVsZW1lbnQq
KWVsZW1lbnQ7CiAgICAgICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRfZG9tX2h0bWxfYW5jaG9y
X2VsZW1lbnRfZ2V0X2hyZWYoYW5jaG9yKSwgPT0sIHVyaXNbaV0pOwogICAgIH0KKyAgICBnX29i
amVjdF91bnJlZihjb2xsZWN0aW9uKTsKK30KKworc3RhdGljIHZvaWQgd2Vha19ub3RpZnkoZ3Bv
aW50ZXIgZGF0YSwgR09iamVjdCogem9tYmllKQoreworICAgIGd1aW50KiBjb3VudCA9IChndWlu
dCopZGF0YTsKKyAgICAoKmNvdW50KSsrOworfQorCitzdGF0aWMgdm9pZCB0ZXN0X2RvbV9kb2N1
bWVudF9nYXJiYWdlX2NvbGxlY3Rpb24oRG9tRG9jdW1lbnRGaXh0dXJlKiBmaXh0dXJlLCBnY29u
c3Rwb2ludGVyIGRhdGEpCit7CisgICAgZ3VpbnQgY291bnQgPSAwOworICAgIGdfYXNzZXJ0KGZp
eHR1cmUpOworICAgIFdlYktpdFdlYlZpZXcqIHZpZXcgPSAoV2ViS2l0V2ViVmlldyopZml4dHVy
ZS0+d2ViVmlldzsKKyAgICBnX2Fzc2VydCh2aWV3KTsKKyAgICBXZWJLaXRET01Eb2N1bWVudCog
ZG9jdW1lbnQgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X2RvbV9kb2N1bWVudCh2aWV3KTsKKyAgICBn
X2Fzc2VydChkb2N1bWVudCk7CisgICAgZ19vYmplY3Rfd2Vha19yZWYoR19PQkpFQ1QoZG9jdW1l
bnQpLCAoR1dlYWtOb3RpZnkpd2Vha19ub3RpZnksICZjb3VudCk7CisgICAgV2ViS2l0RE9NSFRN
TEhlYWRFbGVtZW50KiBoZWFkID0gd2Via2l0X2RvbV9kb2N1bWVudF9nZXRfaGVhZChkb2N1bWVu
dCk7CisgICAgZ19hc3NlcnQoaGVhZCk7CisgICAgZ19vYmplY3Rfd2Vha19yZWYoR19PQkpFQ1Qo
aGVhZCksIChHV2Vha05vdGlmeSl3ZWFrX25vdGlmeSwgJmNvdW50KTsKKyAgICBXZWJLaXRET01I
VE1MRWxlbWVudCogYm9keSA9IHdlYmtpdF9kb21fZG9jdW1lbnRfZ2V0X2JvZHkoZG9jdW1lbnQp
OworICAgIGdfYXNzZXJ0KGJvZHkpOworICAgIGdfb2JqZWN0X3dlYWtfcmVmKEdfT0JKRUNUKGJv
ZHkpLCAoR1dlYWtOb3RpZnkpd2Vha19ub3RpZnksICZjb3VudCk7CisgICAgV2ViS2l0RE9NSFRN
TENvbGxlY3Rpb24gKmNvbGxlY3Rpb24gPSB3ZWJraXRfZG9tX2RvY3VtZW50X2dldF9saW5rcyhk
b2N1bWVudCk7CisgICAgZ19hc3NlcnQoY29sbGVjdGlvbik7CisgICAgZ19vYmplY3Rfd2Vha19y
ZWYoR19PQkpFQ1QoY29sbGVjdGlvbiksIChHV2Vha05vdGlmeSl3ZWFrX25vdGlmeSwgJmNvdW50
KTsKKworICAgIHdlYmtpdF93ZWJfdmlld19sb2FkX3N0cmluZyhXRUJLSVRfV0VCX1ZJRVcodmll
dyksIEhUTUxfRE9DVU1FTlRfTElOS1MsIE5VTEwsIE5VTEwsIE5VTEwpOworCisgICAgd2hpbGUg
KGdfbWFpbl9jb250ZXh0X3BlbmRpbmcoTlVMTCkpCisgICAgICAgIGdfbWFpbl9jb250ZXh0X2l0
ZXJhdGlvbihOVUxMLCBGQUxTRSk7CisKKyAgICBnX2Fzc2VydF9jbXB1aW50KGNvdW50LCA9PSwg
Myk7CisKKyAgICBnX29iamVjdF91bnJlZihjb2xsZWN0aW9uKTsKKyAgICBnX2Fzc2VydF9jbXB1
aW50KGNvdW50LCA9PSwgNCk7CisKKyAgICBjb3VudCA9IDA7CisKKyAgICBkb2N1bWVudCA9IHdl
YmtpdF93ZWJfdmlld19nZXRfZG9tX2RvY3VtZW50KHZpZXcpOworICAgIGdfYXNzZXJ0KGRvY3Vt
ZW50KTsKKyAgICBnX29iamVjdF93ZWFrX3JlZihHX09CSkVDVChkb2N1bWVudCksIChHV2Vha05v
dGlmeSl3ZWFrX25vdGlmeSwgJmNvdW50KTsKKyAgICBoZWFkID0gd2Via2l0X2RvbV9kb2N1bWVu
dF9nZXRfaGVhZChkb2N1bWVudCk7CisgICAgZ19hc3NlcnQoaGVhZCk7CisgICAgZ19vYmplY3Rf
d2Vha19yZWYoR19PQkpFQ1QoaGVhZCksIChHV2Vha05vdGlmeSl3ZWFrX25vdGlmeSwgJmNvdW50
KTsKKyAgICBib2R5ID0gd2Via2l0X2RvbV9kb2N1bWVudF9nZXRfYm9keShkb2N1bWVudCk7Cisg
ICAgZ19hc3NlcnQoYm9keSk7CisgICAgZ19vYmplY3Rfd2Vha19yZWYoR19PQkpFQ1QoYm9keSks
IChHV2Vha05vdGlmeSl3ZWFrX25vdGlmeSwgJmNvdW50KTsKKyAgICBjb2xsZWN0aW9uID0gd2Vi
a2l0X2RvbV9kb2N1bWVudF9nZXRfbGlua3MoZG9jdW1lbnQpOworICAgIGdfYXNzZXJ0KGNvbGxl
Y3Rpb24pOworICAgIGdfb2JqZWN0X3dlYWtfcmVmKEdfT0JKRUNUKGNvbGxlY3Rpb24pLCAoR1dl
YWtOb3RpZnkpd2Vha19ub3RpZnksICZjb3VudCk7CisgICAgLyogQXNrIHR3aWNlIGZvciB0aGUg
c2FtZSBvYmplY3QgKi8KKyAgICBXZWJLaXRET01IVE1MQ29sbGVjdGlvbiogY29sbGVjdGlvbjIg
PSB3ZWJraXRfZG9tX2RvY3VtZW50X2dldF9saW5rcyhkb2N1bWVudCk7CisgICAgZ19hc3NlcnQo
Y29sbGVjdGlvbjIpOworICAgIGdfb2JqZWN0X3dlYWtfcmVmKEdfT0JKRUNUKGNvbGxlY3Rpb24y
KSwgKEdXZWFrTm90aWZ5KXdlYWtfbm90aWZ5LCAmY291bnQpOworCisgICAgZ19vYmplY3RfdW5y
ZWYoZG9jdW1lbnQpOworICAgIGdfb2JqZWN0X3VucmVmKGhlYWQpOworICAgIGdfb2JqZWN0X3Vu
cmVmKGJvZHkpOworICAgIGdfb2JqZWN0X3VucmVmKGNvbGxlY3Rpb24pOworICAgIGdfb2JqZWN0
X3VucmVmKGNvbGxlY3Rpb24yKTsKKworICAgIGdfYXNzZXJ0X2NtcHVpbnQoY291bnQsID09LCA1
KTsKKworICAgIHdlYmtpdF93ZWJfdmlld19sb2FkX3N0cmluZyhXRUJLSVRfV0VCX1ZJRVcodmll
dyksIEhUTUxfRE9DVU1FTlRfSUZSQU1FLCBOVUxMLCBOVUxMLCBOVUxMKTsKKworICAgIHdoaWxl
IChnX21haW5fY29udGV4dF9wZW5kaW5nKE5VTEwpKQorICAgICAgICBnX21haW5fY29udGV4dF9p
dGVyYXRpb24oTlVMTCwgRkFMU0UpOworCisgICAgY291bnQgPSAwOworCisgICAgZG9jdW1lbnQg
PSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X2RvbV9kb2N1bWVudCh2aWV3KTsKKyAgICBXZWJLaXRET01F
bGVtZW50KiBkaXYgPSB3ZWJraXRfZG9tX2RvY3VtZW50X2dldF9lbGVtZW50X2J5X2lkKGRvY3Vt
ZW50LCAidGVzdCIpOworICAgIGdfYXNzZXJ0KGRpdik7CisgICAgZ19vYmplY3Rfd2Vha19yZWYo
R19PQkpFQ1QoZGl2KSwgKEdXZWFrTm90aWZ5KXdlYWtfbm90aWZ5LCAmY291bnQpOworICAgIFdl
YktpdERPTUVsZW1lbnQqIGlmcmFtZSA9IHdlYmtpdF9kb21fZG9jdW1lbnRfZ2V0X2VsZW1lbnRf
YnlfaWQoZG9jdW1lbnQsICJpZnJhbWUiKTsKKyAgICBnX2Fzc2VydChpZnJhbWUpOworCisgICAg
LyogRklYTUU6IElGcmFtZSBBUElzIGhhdmUgdGhlICdpJyBpbiB0aGUgd3JvbmcgcGxhY2UgKi8K
KyAgICB3ZWJraXRfZG9tX2VsZW1lbnRfc2V0X2F0dHJpYnV0ZShpZnJhbWUsICJzcmMiLCAiZGF0
YTo8aHRtbD48aGVhZD48L2hlYWQ+PC9odG1sPiIsIE5VTEwpOworCisgICAgd2hpbGUgKGdfbWFp
bl9jb250ZXh0X3BlbmRpbmcoTlVMTCkpCisgICAgICAgIGdfbWFpbl9jb250ZXh0X2l0ZXJhdGlv
bihOVUxMLCBGQUxTRSk7CisKKyAgICBXZWJLaXRET01Eb2N1bWVudCogaWZyYW1lRG9jdW1lbnQg
PSB3ZWJraXRfZG9tX2h0bWxpX2ZyYW1lX2VsZW1lbnRfZ2V0X2NvbnRlbnRfZG9jdW1lbnQoV0VC
S0lUX0RPTV9IVE1MSV9GUkFNRV9FTEVNRU5UKGlmcmFtZSkpOworICAgIGdfYXNzZXJ0KGlmcmFt
ZURvY3VtZW50KTsKKyAgICBoZWFkID0gd2Via2l0X2RvbV9kb2N1bWVudF9nZXRfaGVhZChpZnJh
bWVEb2N1bWVudCk7CisgICAgZ19hc3NlcnQoaGVhZCk7CisgICAgZ19vYmplY3Rfd2Vha19yZWYo
R19PQkpFQ1QoaGVhZCksIChHV2Vha05vdGlmeSl3ZWFrX25vdGlmeSwgJmNvdW50KTsKKworICAg
IHdlYmtpdF9kb21fZWxlbWVudF9zZXRfYXR0cmlidXRlKGlmcmFtZSwgInNyYyIsICJhYm91dDpi
bGFuayIsIE5VTEwpOworCisgICAgd2hpbGUgKGdfbWFpbl9jb250ZXh0X3BlbmRpbmcoTlVMTCkp
CisgICAgICAgIGdfbWFpbl9jb250ZXh0X2l0ZXJhdGlvbihOVUxMLCBGQUxTRSk7CisKKyAgICBn
X2Fzc2VydF9jbXB1aW50KGNvdW50LCA9PSwgMSk7CisKKyAgICB3ZWJraXRfd2ViX3ZpZXdfbG9h
ZF9zdHJpbmcoV0VCS0lUX1dFQl9WSUVXKHZpZXcpLCBIVE1MX0RPQ1VNRU5UX0xJTktTLCBOVUxM
LCBOVUxMLCBOVUxMKTsKKworICAgIHdoaWxlIChnX21haW5fY29udGV4dF9wZW5kaW5nKE5VTEwp
KQorICAgICAgICBnX21haW5fY29udGV4dF9pdGVyYXRpb24oTlVMTCwgRkFMU0UpOworCisgICAg
Z19hc3NlcnRfY21wdWludChjb3VudCwgPT0sIDIpOworCisgICAgY291bnQgPSAwOworCisgICAg
ZG9jdW1lbnQgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X2RvbV9kb2N1bWVudCh2aWV3KTsKKyAgICBn
X2Fzc2VydChkb2N1bWVudCk7CisgICAgZ19vYmplY3Rfd2Vha19yZWYoR19PQkpFQ1QoZG9jdW1l
bnQpLCAoR1dlYWtOb3RpZnkpd2Vha19ub3RpZnksICZjb3VudCk7CisgICAgLyogQXNrIHR3aWNl
IGZvciB0aGUgRG9jdW1lbnQgKi8KKyAgICBXZWJLaXRET01Eb2N1bWVudCogZG9jdW1lbnQyID0g
d2Via2l0X3dlYl92aWV3X2dldF9kb21fZG9jdW1lbnQodmlldyk7CisgICAgZ19hc3NlcnQoZG9j
dW1lbnQyKTsKKyAgICBnX29iamVjdF93ZWFrX3JlZihHX09CSkVDVChkb2N1bWVudDIpLCAoR1dl
YWtOb3RpZnkpd2Vha19ub3RpZnksICZjb3VudCk7CisgICAgaGVhZCA9IHdlYmtpdF9kb21fZG9j
dW1lbnRfZ2V0X2hlYWQoZG9jdW1lbnQpOworICAgIGdfYXNzZXJ0KGhlYWQpOworICAgIGdfb2Jq
ZWN0X3dlYWtfcmVmKEdfT0JKRUNUKGhlYWQpLCAoR1dlYWtOb3RpZnkpd2Vha19ub3RpZnksICZj
b3VudCk7CisgICAgYm9keSA9IHdlYmtpdF9kb21fZG9jdW1lbnRfZ2V0X2JvZHkoZG9jdW1lbnQp
OworICAgIGdfYXNzZXJ0KGJvZHkpOworICAgIGdfb2JqZWN0X3dlYWtfcmVmKEdfT0JKRUNUKGJv
ZHkpLCAoR1dlYWtOb3RpZnkpd2Vha19ub3RpZnksICZjb3VudCk7CisgICAgY29sbGVjdGlvbiA9
IHdlYmtpdF9kb21fZG9jdW1lbnRfZ2V0X2xpbmtzKGRvY3VtZW50KTsKKyAgICBnX2Fzc2VydChj
b2xsZWN0aW9uKTsKKyAgICBnX29iamVjdF93ZWFrX3JlZihHX09CSkVDVChjb2xsZWN0aW9uKSwg
KEdXZWFrTm90aWZ5KXdlYWtfbm90aWZ5LCAmY291bnQpOworCisgICAgZ3RrX3dpZGdldF9kZXN0
cm95KGZpeHR1cmUtPndlYlZpZXcpOworICAgIGZpeHR1cmUtPndlYlZpZXcgPSBOVUxMOworCisg
ICAgZ19hc3NlcnRfY21wdWludChjb3VudCwgPT0sIDQpOworCisgICAgZ19vYmplY3RfdW5yZWYo
Y29sbGVjdGlvbik7CisKKyAgICBnX2Fzc2VydF9jbXB1aW50KGNvdW50LCA9PSwgNSk7CiB9CiAK
IGludCBtYWluKGludCBhcmdjLCBjaGFyKiogYXJndikKQEAgLTE4Nyw2ICszMjUsOCBAQCBpbnQg
bWFpbihpbnQgYXJnYywgY2hhcioqIGFyZ3YpCiAKICAgICBndGtfdGVzdF9pbml0KCZhcmdjLCAm
YXJndiwgTlVMTCk7CiAKKyAgICB0ZXN0dXRpbHNfcmVsYXRpdmVfY2hkaXIoIldlYktpdC9ndGsv
dGVzdHMvcmVzb3VyY2VzL2lmcmFtZWRvY3VtZW50Lmh0bWwiLCBhcmd2WzBdKTsKKwogICAgIGdf
dGVzdF9idWdfYmFzZSgiaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvIik7CiAKICAgICBnX3Rlc3Rf
YWRkKCIvd2Via2l0L2RvbWRvY3VtZW50L3Rlc3RfdGl0bGUiLApAQCAtMjE5LDYgKzM1OSwxMiBA
QCBpbnQgbWFpbihpbnQgYXJnYywgY2hhcioqIGFyZ3YpCiAgICAgICAgICAgICAgICB0ZXN0X2Rv
bV9kb2N1bWVudF9nZXRfbGlua3MsCiAgICAgICAgICAgICAgICBkb21fZG9jdW1lbnRfZml4dHVy
ZV90ZWFyZG93bik7CiAKKyAgICBnX3Rlc3RfYWRkKCIvd2Via2l0L2RvbWRvY3VtZW50L3Rlc3Rf
Z2FyYmFnZV9jb2xsZWN0aW9uIiwKKyAgICAgICAgICAgICAgIERvbURvY3VtZW50Rml4dHVyZSwg
SFRNTF9ET0NVTUVOVF9MSU5LUywKKyAgICAgICAgICAgICAgIGRvbV9kb2N1bWVudF9maXh0dXJl
X3NldHVwLAorICAgICAgICAgICAgICAgdGVzdF9kb21fZG9jdW1lbnRfZ2FyYmFnZV9jb2xsZWN0
aW9uLAorICAgICAgICAgICAgICAgZG9tX2RvY3VtZW50X2ZpeHR1cmVfdGVhcmRvd24pOworCiAg
ICAgcmV0dXJuIGdfdGVzdF9ydW4oKTsKIH0KIApkaWZmIC0tZ2l0IGEvV2ViS2l0L2d0ay90ZXN0
cy90ZXN0ZG9tbm9kZS5jIGIvV2ViS2l0L2d0ay90ZXN0cy90ZXN0ZG9tbm9kZS5jCmluZGV4IGM2
MDU2ZDYuLjdkNjI3MjAgMTAwNjQ0Ci0tLSBhL1dlYktpdC9ndGsvdGVzdHMvdGVzdGRvbW5vZGUu
YworKysgYi9XZWJLaXQvZ3RrL3Rlc3RzL3Rlc3Rkb21ub2RlLmMKQEAgLTg0LDYgKzg0LDcgQEAg
c3RhdGljIHZvaWQgdGVzdF9kb21fbm9kZV9oaWVyYXJjaHlfbmF2aWdhdGlvbihEb21Ob2RlRml4
dHVyZSogZml4dHVyZSwgZ2NvbnN0cG8KICAgICBwdHIgPSB3ZWJraXRfZG9tX25vZGVfbGlzdF9p
dGVtKGxpc3QsIDApOwogICAgIGdfYXNzZXJ0KHB0cik7CiAgICAgZ19hc3NlcnQoV0VCS0lUX0RP
TV9JU19IVE1MX1RJVExFX0VMRU1FTlQocHRyKSk7CisgICAgZ19vYmplY3RfdW5yZWYobGlzdCk7
CiAKICAgICAvKiBCb2R5LCBIZWFkIHNpYmxpbmcgKi8KICAgICBwdHIgPSB3ZWJraXRfZG9tX25v
ZGVfZ2V0X25leHRfc2libGluZyhXRUJLSVRfRE9NX05PREUoaGVhZCkpOwpAQCAtMTE4LDYgKzEx
OSw3IEBAIHN0YXRpYyB2b2lkIHRlc3RfZG9tX25vZGVfaGllcmFyY2h5X25hdmlnYXRpb24oRG9t
Tm9kZUZpeHR1cmUqIGZpeHR1cmUsIGdjb25zdHBvCiAgICAgICAgIC8qIE5vdGhpbmcgKi87CiAK
ICAgICBnX2Fzc2VydF9jbXBpbnQoaSwgPT0sIDMpOworICAgIGdfb2JqZWN0X3VucmVmKGxpc3Qp
OwogfQogCiBzdGF0aWMgdm9pZCB0ZXN0X2RvbV9ub2RlX2luc2VydGlvbihEb21Ob2RlRml4dHVy
ZSogZml4dHVyZSwgZ2NvbnN0cG9pbnRlciBkYXRhKQpAQCAtMTQ4LDYgKzE1MCw3IEBAIHN0YXRp
YyB2b2lkIHRlc3RfZG9tX25vZGVfaW5zZXJ0aW9uKERvbU5vZGVGaXh0dXJlKiBmaXh0dXJlLCBn
Y29uc3Rwb2ludGVyIGRhdGEpCiAgICAgbm9kZSA9IHdlYmtpdF9kb21fbm9kZV9saXN0X2l0ZW0o
bGlzdCwgMCk7CiAgICAgZ19hc3NlcnQobm9kZSk7CiAgICAgZ19hc3NlcnQod2Via2l0X2RvbV9u
b2RlX2lzX3NhbWVfbm9kZShXRUJLSVRfRE9NX05PREUocCksIG5vZGUpKTsKKyAgICBnX29iamVj
dF91bnJlZihsaXN0KTsKIAogICAgIC8qIFJlcGxhY2UgdGhlIFAgdGFnIHdpdGggYSBESVYgdGFn
ICovCiAgICAgZGl2ID0gd2Via2l0X2RvbV9kb2N1bWVudF9jcmVhdGVfZWxlbWVudChkb2N1bWVu
dCwgIkRJViIsIE5VTEwpOwpAQCAtMTU4LDExICsxNjEsMTMgQEAgc3RhdGljIHZvaWQgdGVzdF9k
b21fbm9kZV9pbnNlcnRpb24oRG9tTm9kZUZpeHR1cmUqIGZpeHR1cmUsIGdjb25zdHBvaW50ZXIg
ZGF0YSkKICAgICBub2RlID0gd2Via2l0X2RvbV9ub2RlX2xpc3RfaXRlbShsaXN0LCAwKTsKICAg
ICBnX2Fzc2VydChub2RlKTsKICAgICBnX2Fzc2VydCh3ZWJraXRfZG9tX25vZGVfaXNfc2FtZV9u
b2RlKFdFQktJVF9ET01fTk9ERShkaXYpLCBub2RlKSk7CisgICAgZ19vYmplY3RfdW5yZWYobGlz
dCk7CiAKICAgICAvKiBOb3cgcmVtb3ZlIHRoZSB0YWcgKi8KICAgICB3ZWJraXRfZG9tX25vZGVf
cmVtb3ZlX2NoaWxkKFdFQktJVF9ET01fTk9ERShib2R5KSwgbm9kZSwgTlVMTCk7CiAgICAgbGlz
dCA9IHdlYmtpdF9kb21fbm9kZV9nZXRfY2hpbGRfbm9kZXMoV0VCS0lUX0RPTV9OT0RFKGJvZHkp
KTsKICAgICBnX2Fzc2VydF9jbXBpbnQod2Via2l0X2RvbV9ub2RlX2xpc3RfZ2V0X2xlbmd0aChs
aXN0KSwgPT0sIDApOworICAgIGdfb2JqZWN0X3VucmVmKGxpc3QpOwogCiAgICAgLyogVE9ETzog
aW5zZXJ0X2JlZm9yZSwgd2hpY2ggZG9lcyBub3Qgc2VlbSB0byBiZSB3b3JraW5nIGNvcnJlY3Rs
eSAqLwogfQpkaWZmIC0tZ2l0IGEvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0aGl0dGVzdHJlc3Vs
dC5jcHAgYi9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRoaXR0ZXN0cmVzdWx0LmNwcAppbmRleCA4
NjJkOTRhLi4xZTZmZTMzIDEwMDY0NAotLS0gYS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRoaXR0
ZXN0cmVzdWx0LmNwcAorKysgYi9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRoaXR0ZXN0cmVzdWx0
LmNwcApAQCAtNzEsNiArNzEsMTUgQEAgc3RhdGljIHZvaWQgd2Via2l0X2hpdF90ZXN0X3Jlc3Vs
dF9maW5hbGl6ZShHT2JqZWN0KiBvYmplY3QpCiAgICAgR19PQkpFQ1RfQ0xBU1Mod2Via2l0X2hp
dF90ZXN0X3Jlc3VsdF9wYXJlbnRfY2xhc3MpLT5maW5hbGl6ZShvYmplY3QpOwogfQogCitzdGF0
aWMgdm9pZCB3ZWJraXRfaGl0X3Rlc3RfcmVzdWx0X2Rpc3Bvc2UoR09iamVjdCogb2JqZWN0KQor
eworICAgIFdlYktpdEhpdFRlc3RSZXN1bHRQcml2YXRlKiBwcml2ID0gV0VCS0lUX0hJVF9URVNU
X1JFU1VMVChvYmplY3QpLT5wcml2OworCisgICAgZ19vYmplY3RfdW5yZWYocHJpdi0+aW5uZXJO
b2RlKTsKKworICAgIEdfT0JKRUNUX0NMQVNTKHdlYmtpdF9oaXRfdGVzdF9yZXN1bHRfcGFyZW50
X2NsYXNzKS0+ZGlzcG9zZShvYmplY3QpOworfQorCiBzdGF0aWMgdm9pZCB3ZWJraXRfaGl0X3Rl
c3RfcmVzdWx0X2dldF9wcm9wZXJ0eShHT2JqZWN0KiBvYmplY3QsIGd1aW50IHByb3BlcnR5SUQs
IEdWYWx1ZSogdmFsdWUsIEdQYXJhbVNwZWMqIHBzcGVjKQogewogICAgIFdlYktpdEhpdFRlc3RS
ZXN1bHQqIHdlYl9oaXRfdGVzdF9yZXN1bHQgPSBXRUJLSVRfSElUX1RFU1RfUkVTVUxUKG9iamVj
dCk7CkBAIC0xMzEsNiArMTQwLDcgQEAgc3RhdGljIHZvaWQgd2Via2l0X2hpdF90ZXN0X3Jlc3Vs
dF9jbGFzc19pbml0KFdlYktpdEhpdFRlc3RSZXN1bHRDbGFzcyogd2ViSGl0VGUKICAgICBHT2Jq
ZWN0Q2xhc3MqIG9iamVjdENsYXNzID0gR19PQkpFQ1RfQ0xBU1Mod2ViSGl0VGVzdFJlc3VsdENs
YXNzKTsKIAogICAgIG9iamVjdENsYXNzLT5maW5hbGl6ZSA9IHdlYmtpdF9oaXRfdGVzdF9yZXN1
bHRfZmluYWxpemU7CisgICAgb2JqZWN0Q2xhc3MtPmRpc3Bvc2UgPSB3ZWJraXRfaGl0X3Rlc3Rf
cmVzdWx0X2Rpc3Bvc2U7CiAgICAgb2JqZWN0Q2xhc3MtPmdldF9wcm9wZXJ0eSA9IHdlYmtpdF9o
aXRfdGVzdF9yZXN1bHRfZ2V0X3Byb3BlcnR5OwogICAgIG9iamVjdENsYXNzLT5zZXRfcHJvcGVy
dHkgPSB3ZWJraXRfaGl0X3Rlc3RfcmVzdWx0X3NldF9wcm9wZXJ0eTsKIApkaWZmIC0tZ2l0IGEv
V2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2ViZnJhbWUuY3BwIGIvV2ViS2l0L2d0ay93ZWJraXQv
d2Via2l0d2ViZnJhbWUuY3BwCmluZGV4IDYzYTI0MTMuLmZjYjUxOTcgMTAwNjQ0Ci0tLSBhL1dl
YktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYmZyYW1lLmNwcAorKysgYi9XZWJLaXQvZ3RrL3dlYmtp
dC93ZWJraXR3ZWJmcmFtZS5jcHAKQEAgLTM1LDYgKzM1LDcgQEAKICNpbmNsdWRlICJBY2Nlc3Np
YmlsaXR5T2JqZWN0V3JhcHBlckF0ay5oIgogI2luY2x1ZGUgIkFuaW1hdGlvbkNvbnRyb2xsZXIu
aCIKICNpbmNsdWRlICJBWE9iamVjdENhY2hlLmgiCisjaW5jbHVkZSAiRE9NT2JqZWN0Q2FjaGUu
aCIKICNpbmNsdWRlICJEb2N1bWVudExvYWRlci5oIgogI2luY2x1ZGUgIkRvY3VtZW50TG9hZGVy
R3RrLmgiCiAjaW5jbHVkZSAiRnJhbWVMb2FkZXIuaCIKQEAgLTE0Niw3ICsxNDcsMTAgQEAgc3Rh
dGljIHZvaWQgd2Via2l0X3dlYl9mcmFtZV9nZXRfcHJvcGVydHkoR09iamVjdCogb2JqZWN0LCBn
dWludCBwcm9wX2lkLCBHVmFsdWUKIHZvaWQgd2Via2l0X3dlYl9mcmFtZV9jb3JlX2ZyYW1lX2dv
bmUoV2ViS2l0V2ViRnJhbWUqIGZyYW1lKQogewogICAgIEFTU0VSVChXRUJLSVRfSVNfV0VCX0ZS
QU1FKGZyYW1lKSk7Ci0gICAgZnJhbWUtPnByaXYtPmNvcmVGcmFtZSA9IDA7CisgICAgV2ViS2l0
V2ViRnJhbWVQcml2YXRlKiBwcml2ID0gZnJhbWUtPnByaXY7CisgICAgaWYgKHByaXYtPmNvcmVG
cmFtZSkKKyAgICAgICAgRE9NT2JqZWN0Q2FjaGU6OmNsZWFyQnlGcmFtZShwcml2LT5jb3JlRnJh
bWUpOworICAgIHByaXYtPmNvcmVGcmFtZSA9IDA7CiB9CiAKIHN0YXRpYyBXZWJLaXRXZWJEYXRh
U291cmNlKiB3ZWJraXRfd2ViX2ZyYW1lX2dldF9kYXRhX3NvdXJjZV9mcm9tX2NvcmVfbG9hZGVy
KFdlYkNvcmU6OkRvY3VtZW50TG9hZGVyKiBsb2FkZXIpCkBAIC0xNjAsNiArMTY0LDcgQEAgc3Rh
dGljIHZvaWQgd2Via2l0X3dlYl9mcmFtZV9maW5hbGl6ZShHT2JqZWN0KiBvYmplY3QpCiAgICAg
V2ViS2l0V2ViRnJhbWVQcml2YXRlKiBwcml2ID0gZnJhbWUtPnByaXY7CiAKICAgICBpZiAocHJp
di0+Y29yZUZyYW1lKSB7CisgICAgICAgIERPTU9iamVjdENhY2hlOjpjbGVhckJ5RnJhbWUocHJp
di0+Y29yZUZyYW1lKTsKICAgICAgICAgcHJpdi0+Y29yZUZyYW1lLT5sb2FkZXIoKS0+Y2FuY2Vs
QW5kQ2xlYXIoKTsKICAgICAgICAgcHJpdi0+Y29yZUZyYW1lID0gMDsKICAgICB9Ci0tIAoxLjcu
Mi4zCgo=
</data>

          </attachment>
      

    </bug>

</bugzilla>