<?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>137485</bug_id>
          
          <creation_ts>2014-10-07 06:21:48 -0700</creation_ts>
          <short_desc>[GLIB] Split GMainLoopSource moving thread safe implementation to its own class GThreadSafeMainLoopSource</short_desc>
          <delta_ts>2014-10-11 00:09:10 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Web Template Framework</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>Gtk</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Carlos Garcia Campos">cgarcia</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>gustavo</cc>
    
    <cc>zan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1040007</commentid>
    <comment_count>0</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2014-10-07 06:21:48 -0700</bug_when>
    <thetext>We made GMainLoopSource thread safe, but in most of the cases we know the sources is used by a single thread, which has an impact in the performance (mutex, GCancellable, etc.). We can move the thread safe part to a new derived class, leaving the basic common implementation in GMainLoopSource, and explicitly using the thread safe version when needed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1040009</commentid>
    <comment_count>1</comment_count>
      <attachid>239408</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2014-10-07 06:31:10 -0700</bug_when>
    <thetext>Created attachment 239408
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1040010</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-10-07 06:32:50 -0700</bug_when>
    <thetext>Attachment 239408 did not pass style-queue:


ERROR: Source/WTF/wtf/gobject/GThreadSafeMainLoopSource.cpp:63:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/gobject/GThreadSafeMainLoopSource.cpp:70:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/gobject/GThreadSafeMainLoopSource.cpp:77:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/gobject/GThreadSafeMainLoopSource.cpp:84:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/gobject/GThreadSafeMainLoopSource.cpp:91:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/gobject/GThreadSafeMainLoopSource.cpp:98:  Extra space before ( in function call  [whitespace/parens] [4]
Total errors found: 6 in 19 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1040015</commentid>
    <comment_count>3</comment_count>
      <attachid>239411</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2014-10-07 06:48:02 -0700</bug_when>
    <thetext>Created attachment 239411
Add new file to EFL build too</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1040016</commentid>
    <comment_count>4</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-10-07 06:49:36 -0700</bug_when>
    <thetext>Attachment 239411 did not pass style-queue:


ERROR: Source/WTF/wtf/gobject/GThreadSafeMainLoopSource.cpp:63:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/gobject/GThreadSafeMainLoopSource.cpp:70:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/gobject/GThreadSafeMainLoopSource.cpp:77:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/gobject/GThreadSafeMainLoopSource.cpp:84:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/gobject/GThreadSafeMainLoopSource.cpp:91:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/gobject/GThreadSafeMainLoopSource.cpp:98:  Extra space before ( in function call  [whitespace/parens] [4]
Total errors found: 6 in 20 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1040074</commentid>
    <comment_count>5</comment_count>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2014-10-07 11:54:06 -0700</bug_when>
    <thetext>The implementation looks OK.

Still, in my experience the main bottleneck in GMainLoopSource is the constant creation and destruction of GSource objects. I&apos;d prefer to see that addressed first, and work on thread-safety simplification from there.

I&apos;ll dump my current approach towards that either in a bug or in a pastebin, and we can discuss it from there.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1040222</commentid>
    <comment_count>6</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2014-10-07 23:23:09 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; The implementation looks OK.

Thanks for looking at it.

&gt; Still, in my experience the main bottleneck in GMainLoopSource is the constant creation and destruction of GSource objects. I&apos;d prefer to see that addressed first, and work on thread-safety simplification from there.

Constant creation and destruction of GSources is the normal way glib main loop works, so I&apos;m surprised that causes problems. g_idle and g_timeout functions in glib always create a new GSource, so there shouldn&apos;t be differences in that regard between using glib functions directly or GMainLoopSource. 
I haven&apos;t measured but I would say that creating a GCancellable (which is a GObject), and the mutex lock/unlock on every schedule is a lot more demanding than creating and destroying the sources.

&gt; I&apos;ll dump my current approach towards that either in a bug or in a pastebin, and we can discuss it from there.

Ok, I think any optimization in the way glib sources work should be done in glib itself for the benefit of everybody.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1040515</commentid>
    <comment_count>7</comment_count>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2014-10-09 03:07:53 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; (In reply to comment #5)
&gt; &gt; Still, in my experience the main bottleneck in GMainLoopSource is the constant creation and destruction of GSource objects. I&apos;d prefer to see that addressed first, and work on thread-safety simplification from there.
&gt; 
&gt; Constant creation and destruction of GSources is the normal way glib main loop works, so I&apos;m surprised that causes problems. g_idle and g_timeout functions in glib always create a new GSource, so there shouldn&apos;t be differences in that regard between using glib functions directly or GMainLoopSource. 
&gt; I haven&apos;t measured but I would say that creating a GCancellable (which is a GObject), and the mutex lock/unlock on every schedule is a lot more demanding than creating and destroying the sources.
&gt; 

I profiled the current situation, your patch and my work in progress. The test case is a simple loop via setTimeout(loop, 1), which is handled by the shared timer is throttled to 250 iterations per second.

Current state: http://people.igalia.com/zdobersek/gms-current.png
Horrible, spends 24% of overall time under GMainLoopSource::scheduleAfterDelay(). That&apos;s a quarter of runtime to create and attach ~250 GSource objects per second.

Your patch: http://people.igalia.com/zdobersek/gms-optional-thread-safety.png
Already does wonders, dropping the time under GMainLoopSource::scheduleAfterDelay() to a bit under 14% of overall time.

The simple source WIP: http://people.igalia.com/zdobersek/gms-simplified.png
Uses a single GSource object, and it shows. Scheduling the callback dispatch (which at this point is just setting the ready time on the source) only takes 4% of the runtime, and there&apos;s basically no GObject churn.

Comparing the time spent under the GSource dispatch function, it goes from ~52% down to ~27% and further down to ~14%.


There&apos;s no problem in constant creation and destruction of GSource objects in terms of correctness, but it&apos;s disturbing in the terms of performance. Feel free to proceed with this patch, it actually already improves things more than I would&apos;ve expected. But I want to address these high-intensity timers that can hinder performance, starting probably with the shared timer and the flush timer in LayerTreeHostGtk. The simple implementation I outlined in bug #137513 does that, but needs discussion and some sort of approval.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1040520</commentid>
    <comment_count>8</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2014-10-09 04:04:41 -0700</bug_when>
    <thetext>Thanks for measuring, as I said both optimizations are compatible. My point was that the persistent source optimization could be applied anyway, but it could be done using the same API, and transparently to the user. Could you measure again with this patch and the one I attached to bug #137513?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1040530</commentid>
    <comment_count>9</comment_count>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2014-10-09 06:36:09 -0700</bug_when>
    <thetext>(In reply to comment #8)
&gt; Thanks for measuring, as I said both optimizations are compatible. My point was that the persistent source optimization could be applied anyway, but it could be done using the same API, and transparently to the user. Could you measure again with this patch and the one I attached to bug #137513?

Here&apos;s the profile:
http://people.igalia.com/zdobersek/gms-optional-thread-safety-simplified.png

Not really better than without the persistent source implementation, pretty much the same actually. Though the time is now spent in additional mutex locking via g_source_set_ready_time(), g_main_context_get_default() and GSource ref-unrefing, and in string comparison.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1040537</commentid>
    <comment_count>10</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2014-10-09 06:50:26 -0700</bug_when>
    <thetext>(In reply to comment #9)
&gt; (In reply to comment #8)
&gt; &gt; Thanks for measuring, as I said both optimizations are compatible. My point was that the persistent source optimization could be applied anyway, but it could be done using the same API, and transparently to the user. Could you measure again with this patch and the one I attached to bug #137513?
&gt; 
&gt; Here&apos;s the profile:
&gt; http://people.igalia.com/zdobersek/gms-optional-thread-safety-simplified.png
&gt; 
&gt; Not really better than without the persistent source implementation, pretty much the same actually. Though the time is now spent in additional mutex locking via g_source_set_ready_time(), g_main_context_get_default() and GSource ref-unrefing, and in string comparison.

hmm, g_source_set_ready_time() is called mostly in the same places than your patch, so that shouldn&apos;t make any difference. The string comparison was to check if the source name changed, to avoid dealloc/alloc and mutex lock/unlock that happens in g_source_set_name.
I tried to make it transparent for the users, but if we want to avoid all those checks, I guess we need specific API for persistent sources, or even a different class like in your patch. Thanks again for measuring</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1040852</commentid>
    <comment_count>11</comment_count>
      <attachid>239411</attachid>
    <who name="Sergio Villar Senin">svillar</who>
    <bug_when>2014-10-10 02:00:42 -0700</bug_when>
    <thetext>Comment on attachment 239411
Add new file to EFL build too

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

&gt; Source/WTF/wtf/gobject/GMutexLocker.h:78
&gt; +            return;

Hmm this makes the template useless, because the recursive mutexes will act as normal ones, won&apos;t they?

&gt; Source/WTF/wtf/gobject/GThreadSafeMainLoopSource.h:33
&gt; +typedef struct _GRecMutex GRecMutex;

What do we need this for?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1040853</commentid>
    <comment_count>12</comment_count>
      <attachid>239411</attachid>
    <who name="Sergio Villar Senin">svillar</who>
    <bug_when>2014-10-10 02:00:50 -0700</bug_when>
    <thetext>Comment on attachment 239411
Add new file to EFL build too

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

&gt; Source/WTF/wtf/gobject/GMutexLocker.h:78
&gt; +            return;

Hmm this makes the template useless, because the recursive mutexes will act as normal ones, won&apos;t they?

&gt; Source/WTF/wtf/gobject/GThreadSafeMainLoopSource.h:33
&gt; +typedef struct _GRecMutex GRecMutex;

What do we need this for?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1040857</commentid>
    <comment_count>13</comment_count>
      <attachid>239411</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2014-10-10 02:11:37 -0700</bug_when>
    <thetext>Comment on attachment 239411
Add new file to EFL build too

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

&gt;&gt;&gt; Source/WTF/wtf/gobject/GMutexLocker.h:78
&gt;&gt;&gt; +            return;
&gt;&gt; 
&gt;&gt; Hmm this makes the template useless, because the recursive mutexes will act as normal ones, won&apos;t they?
&gt; 
&gt; Hmm this makes the template useless, because the recursive mutexes will act as normal ones, won&apos;t they?

The idea is that the same GMutexLocker object shouldn&apos;t lock a mutex already locked, but two different GMutexLocker objects, wrapping the same GRecMutex should be allowed. Which is the case I&apos;m covering here, schedule calls cancel, both locking the mutex, but using different GMutexLocker objects.

&gt;&gt;&gt; Source/WTF/wtf/gobject/GThreadSafeMainLoopSource.h:33
&gt;&gt;&gt; +typedef struct _GRecMutex GRecMutex;
&gt;&gt; 
&gt;&gt; What do we need this for?
&gt; 
&gt; What do we need this for?

It&apos;s the forward declaration of GRecMutex, needed by the m_mutex memeber that is a GRecMutex, to avoid including glib.h in the header.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1040884</commentid>
    <comment_count>14</comment_count>
      <attachid>239411</attachid>
    <who name="Sergio Villar Senin">svillar</who>
    <bug_when>2014-10-10 03:53:04 -0700</bug_when>
    <thetext>Comment on attachment 239411
Add new file to EFL build too

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

&gt;&gt;&gt;&gt; Source/WTF/wtf/gobject/GMutexLocker.h:78
&gt;&gt;&gt;&gt; +            return;
&gt;&gt;&gt; 
&gt;&gt;&gt; Hmm this makes the template useless, because the recursive mutexes will act as normal ones, won&apos;t they?
&gt;&gt; 
&gt;&gt; Hmm this makes the template useless, because the recursive mutexes will act as normal ones, won&apos;t they?
&gt; 
&gt; The idea is that the same GMutexLocker object shouldn&apos;t lock a mutex already locked, but two different GMutexLocker objects, wrapping the same GRecMutex should be allowed. Which is the case I&apos;m covering here, schedule calls cancel, both locking the mutex, but using different GMutexLocker objects.

Right. Too many mutexes and lockers :). Couldn&apos;t we achieve the same by using the _try_ variants in MutexWrapper object?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1040898</commentid>
    <comment_count>15</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2014-10-10 05:16:59 -0700</bug_when>
    <thetext>(In reply to comment #14)
&gt; (From update of attachment 239411 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=239411&amp;action=review
&gt; 
&gt; &gt;&gt;&gt;&gt; Source/WTF/wtf/gobject/GMutexLocker.h:78
&gt; &gt;&gt;&gt;&gt; +            return;
&gt; &gt;&gt;&gt; 
&gt; &gt;&gt;&gt; Hmm this makes the template useless, because the recursive mutexes will act as normal ones, won&apos;t they?
&gt; &gt;&gt; 
&gt; &gt;&gt; Hmm this makes the template useless, because the recursive mutexes will act as normal ones, won&apos;t they?
&gt; &gt; 
&gt; &gt; The idea is that the same GMutexLocker object shouldn&apos;t lock a mutex already locked, but two different GMutexLocker objects, wrapping the same GRecMutex should be allowed. Which is the case I&apos;m covering here, schedule calls cancel, both locking the mutex, but using different GMutexLocker objects.
&gt; 
&gt; Right. Too many mutexes and lockers :). Couldn&apos;t we achieve the same by using the _try_ variants in MutexWrapper object?

No, try_lock is in case it&apos;s locked by *another* thread, to not block. But if locked by the same thread, in case of non-recursive mutex, the behaviour is undefined.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1041110</commentid>
    <comment_count>16</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2014-10-11 00:09:10 -0700</bug_when>
    <thetext>Committed r174632: &lt;http://trac.webkit.org/changeset/174632&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>239408</attachid>
            <date>2014-10-07 06:31:10 -0700</date>
            <delta_ts>2014-10-07 06:48:02 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>wtf-thread-safe-main-loop-source.diff</filename>
            <type>text/plain</type>
            <size>67130</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nIGIvU291cmNlL1dURi9DaGFuZ2VMb2cK
aW5kZXggN2Q2OTc2YS4uZjk4OWFlOSAxMDA2NDQKLS0tIGEvU291cmNlL1dURi9DaGFuZ2VMb2cK
KysrIGIvU291cmNlL1dURi9DaGFuZ2VMb2cKQEAgLTEsMyArMSw1NyBAQAorMjAxNC0xMC0wNyAg
Q2FybG9zIEdhcmNpYSBDYW1wb3MgIDxjZ2FyY2lhQGlnYWxpYS5jb20+CisKKyAgICAgICAgW0dM
SUJdIFNwbGl0IEdNYWluTG9vcFNvdXJjZSBtb3ZpbmcgdGhyZWFkIHNhZmUgaW1wbGVtZW50YXRp
b24gdG8gaXRzIG93biBjbGFzcyBHVGhyZWFkU2FmZU1haW5Mb29wU291cmNlCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzc0ODUKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBXZSBtYWRlIEdNYWluTG9vcFNv
dXJjZSB0aHJlYWQgc2FmZSwgYnV0IGluIG1vc3Qgb2YgdGhlIGNhc2VzIHdlCisgICAgICAgIGtu
b3cgdGhlIHNvdXJjZXMgYXJlIHVzZWQgYnkgYSBzaW5nbGUgdGhyZWFkLCB3aGljaCBoYXMgYW4g
aW1wYWN0CisgICAgICAgIGluIHRoZSBwZXJmb3JtYW5jZSAobXV0ZXgsIEdDYW5jZWxsYWJsZSwg
ZXRjLikuIFRoZSBuZXcgY2xhc3MKKyAgICAgICAgR1RocmVhZFNhZmVNYWluTG9vcFNvdXJjZSBp
bmhlcml0cyBmcm9tIEdNYWluTG9vcFNvdXJjZSBvdmVycmlkaW5nCisgICAgICAgIHRoZSBuZXcg
dmlydHVhbCBtZXRob2RzIGFuZCBjYWxsaW5nIHRoZSBwYXJlbnQgZm9yIHRoZSBjb21tb24gY29k
ZS4KKyAgICAgICAgR011dGV4TG9ja2VyIG5vdyBzdXBwb3J0cyByZWN1cnNpdmUgbXV0ZXhlcywg
aXQncyBhIHRlbXBsYXRlIHRoYXQKKyAgICAgICAgY2FuIHdyYXAgYSBHTXV0ZXggb3IgYSBHUmVj
TXV0ZXguIEdUaHJlYWRTYWZlTWFpbkxvb3BTb3VyY2UgdXNlcyBhCisgICAgICAgIHJlY3Vyc2l2
ZSBtdXRleCB1c2luZyB0aGUgbmV3IEdNdXRleExvY2tlciBBUEkuCisKKyAgICAgICAgKiB3dGYv
UGxhdGZvcm1HVEsuY21ha2U6IEFkZCBuZXcgZmlsZSB0byBjb21waWxhdGlvbi4KKyAgICAgICAg
KiB3dGYvZ29iamVjdC9HTWFpbkxvb3BTb3VyY2UuY3BwOgorICAgICAgICAoV1RGOjpHTWFpbkxv
b3BTb3VyY2U6OkdNYWluTG9vcFNvdXJjZSk6CisgICAgICAgIChXVEY6OkdNYWluTG9vcFNvdXJj
ZTo6fkdNYWluTG9vcFNvdXJjZSk6CisgICAgICAgIChXVEY6OkdNYWluTG9vcFNvdXJjZTo6Y2Fu
Y2VsKToKKyAgICAgICAgKFdURjo6R01haW5Mb29wU291cmNlOjpzY2hlZHVsZSk6CisgICAgICAg
IChXVEY6OkdNYWluTG9vcFNvdXJjZTo6c2NoZWR1bGVBZnRlckRlbGF5KToKKyAgICAgICAgKFdU
Rjo6R01haW5Mb29wU291cmNlOjpwcmVwYXJlVm9pZENhbGxiYWNrKToKKyAgICAgICAgKFdURjo6
R01haW5Mb29wU291cmNlOjpmaW5pc2hWb2lkQ2FsbGJhY2spOgorICAgICAgICAoV1RGOjpHTWFp
bkxvb3BTb3VyY2U6OnZvaWRDYWxsYmFjayk6CisgICAgICAgIChXVEY6OkdNYWluTG9vcFNvdXJj
ZTo6cHJlcGFyZUJvb2xDYWxsYmFjayk6CisgICAgICAgIChXVEY6OkdNYWluTG9vcFNvdXJjZTo6
ZmluaXNoQm9vbENhbGxiYWNrKToKKyAgICAgICAgKFdURjo6R01haW5Mb29wU291cmNlOjpib29s
Q2FsbGJhY2spOgorICAgICAgICAoV1RGOjpHTWFpbkxvb3BTb3VyY2U6OnNvY2tldENhbGxiYWNr
KToKKyAgICAgICAgKFdURjo6R01haW5Mb29wU291cmNlOjpjYW5jZWxXaXRob3V0TG9ja2luZyk6
IERlbGV0ZWQuCisgICAgICAgICogd3RmL2dvYmplY3QvR01haW5Mb29wU291cmNlLmg6CisgICAg
ICAgICogd3RmL2dvYmplY3QvR011dGV4TG9ja2VyLmg6CisgICAgICAgIChXVEY6Ok11dGV4V3Jh
cHBlcjxHTXV0ZXg+Ojpsb2NrKToKKyAgICAgICAgKFdURjo6TXV0ZXhXcmFwcGVyPEdNdXRleD46
OnVubG9jayk6CisgICAgICAgIChXVEY6Ok11dGV4V3JhcHBlcjxHUmVjTXV0ZXg+Ojpsb2NrKToK
KyAgICAgICAgKFdURjo6TXV0ZXhXcmFwcGVyPEdSZWNNdXRleD46OnVubG9jayk6CisgICAgICAg
IChXVEY6OkdNdXRleExvY2tlcjo6R011dGV4TG9ja2VyKToKKyAgICAgICAgKFdURjo6R011dGV4
TG9ja2VyOjpsb2NrKToKKyAgICAgICAgKFdURjo6R011dGV4TG9ja2VyOjp1bmxvY2spOgorICAg
ICAgICAqIHd0Zi9nb2JqZWN0L0dUaHJlYWRTYWZlTWFpbkxvb3BTb3VyY2UuY3BwOiBBZGRlZC4K
KyAgICAgICAgKFdURjo6R1RocmVhZFNhZmVNYWluTG9vcFNvdXJjZTo6R1RocmVhZFNhZmVNYWlu
TG9vcFNvdXJjZSk6CisgICAgICAgIChXVEY6OkdUaHJlYWRTYWZlTWFpbkxvb3BTb3VyY2U6On5H
VGhyZWFkU2FmZU1haW5Mb29wU291cmNlKToKKyAgICAgICAgKFdURjo6R1RocmVhZFNhZmVNYWlu
TG9vcFNvdXJjZTo6Y2FuY2VsKToKKyAgICAgICAgKFdURjo6R1RocmVhZFNhZmVNYWluTG9vcFNv
dXJjZTo6c2NoZWR1bGUpOgorICAgICAgICAoV1RGOjpHVGhyZWFkU2FmZU1haW5Mb29wU291cmNl
OjpzY2hlZHVsZUFmdGVyRGVsYXkpOgorICAgICAgICAoV1RGOjpHVGhyZWFkU2FmZU1haW5Mb29w
U291cmNlOjpwcmVwYXJlVm9pZENhbGxiYWNrKToKKyAgICAgICAgKFdURjo6R1RocmVhZFNhZmVN
YWluTG9vcFNvdXJjZTo6ZmluaXNoVm9pZENhbGxiYWNrKToKKyAgICAgICAgKFdURjo6R1RocmVh
ZFNhZmVNYWluTG9vcFNvdXJjZTo6dm9pZENhbGxiYWNrKToKKyAgICAgICAgKFdURjo6R1RocmVh
ZFNhZmVNYWluTG9vcFNvdXJjZTo6cHJlcGFyZUJvb2xDYWxsYmFjayk6CisgICAgICAgIChXVEY6
OkdUaHJlYWRTYWZlTWFpbkxvb3BTb3VyY2U6OmZpbmlzaEJvb2xDYWxsYmFjayk6CisgICAgICAg
IChXVEY6OkdUaHJlYWRTYWZlTWFpbkxvb3BTb3VyY2U6OmJvb2xDYWxsYmFjayk6CisgICAgICAg
ICogd3RmL2dvYmplY3QvR1RocmVhZFNhZmVNYWluTG9vcFNvdXJjZS5oOiBBZGRlZC4KKwogMjAx
NC0wOS0xOCAgQ2FybG9zIEdhcmNpYSBDYW1wb3MgIDxjZ2FyY2lhQGlnYWxpYS5jb20+CiAKICAg
ICAgICAgW0dUS10gRG90IG5vdCBhbGxvdyB0byBjcmVhdGUgZGVsZXRlLW9uLWRlc3Ryb3kgR01h
aW5Mb29wU291cmNlcwpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvUGxhdGZvcm1HVEsuY21h
a2UgYi9Tb3VyY2UvV1RGL3d0Zi9QbGF0Zm9ybUdUSy5jbWFrZQppbmRleCBkNzJkNzA4Li5lNjk4
ODkyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9QbGF0Zm9ybUdUSy5jbWFrZQorKysgYi9T
b3VyY2UvV1RGL3d0Zi9QbGF0Zm9ybUdUSy5jbWFrZQpAQCAtMSw2ICsxLDcgQEAKIGxpc3QoQVBQ
RU5EIFdURl9TT1VSQ0VTCiAgICAgZ29iamVjdC9HTWFpbkxvb3BTb3VyY2UuY3BwCiAgICAgZ29i
amVjdC9HUmVmUHRyLmNwcAorICAgIGdvYmplY3QvR1RocmVhZFNhZmVNYWluTG9vcFNvdXJjZS5j
cHAKICAgICBnb2JqZWN0L0dsaWJVdGlsaXRpZXMuY3BwCiAKICAgICBndGsvTWFpblRocmVhZEd0
ay5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL2dvYmplY3QvR01haW5Mb29wU291cmNl
LmNwcCBiL1NvdXJjZS9XVEYvd3RmL2dvYmplY3QvR01haW5Mb29wU291cmNlLmNwcAppbmRleCBi
NjdmZGM3Li5lNWQ1OTBmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9nb2JqZWN0L0dNYWlu
TG9vcFNvdXJjZS5jcHAKKysrIGIvU291cmNlL1dURi93dGYvZ29iamVjdC9HTWFpbkxvb3BTb3Vy
Y2UuY3BwCkBAIC0yNCwxMiArMjQsMTEgQEAKICAqLwogCiAjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiR01haW5Mb29wU291cmNlLmgiCiAKICNpZiBVU0UoR0xJQikKIAotI2luY2x1ZGUg
IkdNYWluTG9vcFNvdXJjZS5oIgogI2luY2x1ZGUgPGdpby9naW8uaD4KLSNpbmNsdWRlIDx3dGYv
Z29iamVjdC9HTXV0ZXhMb2NrZXIuaD4KIAogbmFtZXNwYWNlIFdURiB7CiAKQEAgLTQyLDIwICs0
MSwxNyBAQCBHTWFpbkxvb3BTb3VyY2U6OkdNYWluTG9vcFNvdXJjZSgpCiAgICAgOiBtX2RlbGV0
ZU9uRGVzdHJveShEb05vdERlbGV0ZU9uRGVzdHJveSkKICAgICAsIG1fc3RhdHVzKFJlYWR5KQog
ewotICAgIGdfbXV0ZXhfaW5pdCgmbV9tdXRleCk7CiB9CiAKIEdNYWluTG9vcFNvdXJjZTo6R01h
aW5Mb29wU291cmNlKERlbGV0ZU9uRGVzdHJveVR5cGUgZGVsZXRlT25EZXN0cm95KQogICAgIDog
bV9kZWxldGVPbkRlc3Ryb3koZGVsZXRlT25EZXN0cm95KQogICAgICwgbV9zdGF0dXMoUmVhZHkp
CiB7Ci0gICAgZ19tdXRleF9pbml0KCZtX211dGV4KTsKIH0KIAogR01haW5Mb29wU291cmNlOjp+
R01haW5Mb29wU291cmNlKCkKIHsKICAgICBjYW5jZWwoKTsKLSAgICBnX211dGV4X2NsZWFyKCZt
X211dGV4KTsKIH0KIAogYm9vbCBHTWFpbkxvb3BTb3VyY2U6OmlzU2NoZWR1bGVkKCkgY29uc3QK
QEAgLTcwLDI4ICs2NiwxNSBAQCBib29sIEdNYWluTG9vcFNvdXJjZTo6aXNBY3RpdmUoKSBjb25z
dAogCiB2b2lkIEdNYWluTG9vcFNvdXJjZTo6Y2FuY2VsKCkKIHsKLSAgICBHTXV0ZXhMb2NrZXIg
bG9ja2VyKG1fbXV0ZXgpOwotICAgIGNhbmNlbFdpdGhvdXRMb2NraW5nKCk7Ci19Ci0KLXZvaWQg
R01haW5Mb29wU291cmNlOjpjYW5jZWxXaXRob3V0TG9ja2luZygpCi17CiAgICAgLy8gRGVsZXRl
LW9uLWRlc3Ryb3kgR01haW5Mb29wU291cmNlIG9iamVjdHMgY2FuJ3QgYmUgY2FuY2VsbGVkLgog
ICAgIGlmIChtX2RlbGV0ZU9uRGVzdHJveSA9PSBEZWxldGVPbkRlc3Ryb3kpCiAgICAgICAgIHJl
dHVybjsKIAogICAgIC8vIEEgdmFsaWQgY29udGV4dCBzaG91bGQgb25seSBiZSBwcmVzZW50IGlm
IEdNYWluTG9vcFNvdXJjZSBpcyBpbiB0aGUgU2NoZWR1bGVkIG9yIERpc3BhdGNoaW5nIHN0YXRl
LgogICAgIEFTU0VSVCghbV9jb250ZXh0LnNvdXJjZSB8fCBtX3N0YXR1cyA9PSBTY2hlZHVsZWQg
fHwgbV9zdGF0dXMgPT0gRGlzcGF0Y2hpbmcpOwotICAgIC8vIFRoZSBnZW5lcmFsIGNhbmNlbGxh
YmxlIG9iamVjdCBzaG91bGQgb25seSBiZSBwcmVzZW50IGlmIHdlJ3JlIGN1cnJlbnRseSBkaXNw
YXRjaGluZyB0aGlzIEdNYWluTG9vcFNvdXJjZS4KLSAgICBBU1NFUlQoIW1fY2FuY2VsbGFibGUg
fHwgbV9zdGF0dXMgPT0gRGlzcGF0Y2hpbmcpOwogCiAgICAgbV9zdGF0dXMgPSBSZWFkeTsKIAot
ICAgIC8vIFRoZSBzb3VyY2UgaXMgcGVyaGFwcyBiZWluZyBjYW5jZWxsZWQgaW4gdGhlIG1pZGRs
ZSBvZiBhIGNhbGxiYWNrIGRpc3BhdGNoLgotICAgIC8vIENhbmNlbGxpbmcgdGhpcyBHQ2FuY2Vs
bGFibGUgb2JqZWN0IHdpbGwgY29udmV5IHRoaXMgaW5mb3JtYXRpb24gdG8gdGhlCi0gICAgLy8g
Y3VycmVudCBleGVjdXRpb24gY29udGV4dCB3aGVuIHRoZSBjYWxsYmFjayBkaXNwYXRjaCBpcyBm
aW5pc2hlZC4KLSAgICBnX2NhbmNlbGxhYmxlX2NhbmNlbChtX2NhbmNlbGxhYmxlLmdldCgpKTsK
LSAgICBtX2NhbmNlbGxhYmxlID0gbnVsbHB0cjsKICAgICBnX2NhbmNlbGxhYmxlX2NhbmNlbCht
X2NvbnRleHQuc29ja2V0Q2FuY2VsbGFibGUuZ2V0KCkpOwogCiAgICAgaWYgKCFtX2NvbnRleHQu
c291cmNlKQpAQCAtMTE1LDEzICs5OCwxMiBAQCB2b2lkIEdNYWluTG9vcFNvdXJjZTo6c2NoZWR1
bGVJZGxlU291cmNlKGNvbnN0IGNoYXIqIG5hbWUsIEdTb3VyY2VGdW5jIHNvdXJjZUZ1bgogCiB2
b2lkIEdNYWluTG9vcFNvdXJjZTo6c2NoZWR1bGUoY29uc3QgY2hhciogbmFtZSwgc3RkOjpmdW5j
dGlvbjx2b2lkICgpPiBmdW5jdGlvbiwgaW50IHByaW9yaXR5LCBzdGQ6OmZ1bmN0aW9uPHZvaWQg
KCk+IGRlc3Ryb3lGdW5jdGlvbiwgR01haW5Db250ZXh0KiBjb250ZXh0KQogewotICAgIEdNdXRl
eExvY2tlciBsb2NrZXIobV9tdXRleCk7Ci0gICAgY2FuY2VsV2l0aG91dExvY2tpbmcoKTsKKyAg
ICBjYW5jZWwoKTsKIAogICAgIEFTU0VSVCghbV9jb250ZXh0LnNvdXJjZSk7CiAgICAgbV9jb250
ZXh0ID0gewogICAgICAgICBhZG9wdEdSZWYoZ19pZGxlX3NvdXJjZV9uZXcoKSksCi0gICAgICAg
IGFkb3B0R1JlZihnX2NhbmNlbGxhYmxlX25ldygpKSwKKyAgICAgICAgbnVsbHB0ciwgLy8gY2Fu
Y2VsbGFibGUKICAgICAgICAgbnVsbHB0ciwgLy8gc29ja2V0Q2FuY2VsbGFibGUKICAgICAgICAg
V1RGOjptb3ZlKGZ1bmN0aW9uKSwKICAgICAgICAgbnVsbHB0ciwgLy8gYm9vbENhbGxiYWNrCkBA
IC0xMzMsMTMgKzExNSwxMiBAQCB2b2lkIEdNYWluTG9vcFNvdXJjZTo6c2NoZWR1bGUoY29uc3Qg
Y2hhciogbmFtZSwgc3RkOjpmdW5jdGlvbjx2b2lkICgpPiBmdW5jdGlvbgogCiB2b2lkIEdNYWlu
TG9vcFNvdXJjZTo6c2NoZWR1bGUoY29uc3QgY2hhciogbmFtZSwgc3RkOjpmdW5jdGlvbjxib29s
ICgpPiBmdW5jdGlvbiwgaW50IHByaW9yaXR5LCBzdGQ6OmZ1bmN0aW9uPHZvaWQgKCk+IGRlc3Ry
b3lGdW5jdGlvbiwgR01haW5Db250ZXh0KiBjb250ZXh0KQogewotICAgIEdNdXRleExvY2tlciBs
b2NrZXIobV9tdXRleCk7Ci0gICAgY2FuY2VsV2l0aG91dExvY2tpbmcoKTsKKyAgICBjYW5jZWwo
KTsKIAogICAgIEFTU0VSVCghbV9jb250ZXh0LnNvdXJjZSk7CiAgICAgbV9jb250ZXh0ID0gewog
ICAgICAgICBhZG9wdEdSZWYoZ19pZGxlX3NvdXJjZV9uZXcoKSksCi0gICAgICAgIGFkb3B0R1Jl
ZihnX2NhbmNlbGxhYmxlX25ldygpKSwKKyAgICAgICAgbnVsbHB0ciwgLy8gY2FuY2VsbGFibGUK
ICAgICAgICAgbnVsbHB0ciwgLy8gc29ja2V0Q2FuY2VsbGFibGUKICAgICAgICAgbnVsbHB0ciwg
Ly8gdm9pZENhbGxiYWNrCiAgICAgICAgIFdURjo6bW92ZShmdW5jdGlvbiksCkBAIC0xNTEsMTQg
KzEzMiwxMyBAQCB2b2lkIEdNYWluTG9vcFNvdXJjZTo6c2NoZWR1bGUoY29uc3QgY2hhciogbmFt
ZSwgc3RkOjpmdW5jdGlvbjxib29sICgpPiBmdW5jdGlvbgogCiB2b2lkIEdNYWluTG9vcFNvdXJj
ZTo6c2NoZWR1bGUoY29uc3QgY2hhciogbmFtZSwgc3RkOjpmdW5jdGlvbjxib29sIChHSU9Db25k
aXRpb24pPiBmdW5jdGlvbiwgR1NvY2tldCogc29ja2V0LCBHSU9Db25kaXRpb24gY29uZGl0aW9u
LCBzdGQ6OmZ1bmN0aW9uPHZvaWQgKCk+IGRlc3Ryb3lGdW5jdGlvbiwgR01haW5Db250ZXh0KiBj
b250ZXh0KQogewotICAgIEdNdXRleExvY2tlciBsb2NrZXIobV9tdXRleCk7Ci0gICAgY2FuY2Vs
V2l0aG91dExvY2tpbmcoKTsKKyAgICBjYW5jZWwoKTsKIAogICAgIEFTU0VSVCghbV9jb250ZXh0
LnNvdXJjZSk7CiAgICAgR0NhbmNlbGxhYmxlKiBzb2NrZXRDYW5jZWxsYWJsZSA9IGdfY2FuY2Vs
bGFibGVfbmV3KCk7CiAgICAgbV9jb250ZXh0ID0gewogICAgICAgICBhZG9wdEdSZWYoZ19zb2Nr
ZXRfY3JlYXRlX3NvdXJjZShzb2NrZXQsIGNvbmRpdGlvbiwgc29ja2V0Q2FuY2VsbGFibGUpKSwK
LSAgICAgICAgYWRvcHRHUmVmKGdfY2FuY2VsbGFibGVfbmV3KCkpLAorICAgICAgICBudWxscHRy
LCAvLyBjYW5jZWxsYWJsZQogICAgICAgICBhZG9wdEdSZWYoc29ja2V0Q2FuY2VsbGFibGUpLAog
ICAgICAgICBudWxscHRyLCAvLyB2b2lkQ2FsbGJhY2sKICAgICAgICAgbnVsbHB0ciwgLy8gYm9v
bENhbGxiYWNrCkBAIC0xODcsMTMgKzE2NywxMiBAQCB2b2lkIEdNYWluTG9vcFNvdXJjZTo6c2No
ZWR1bGVUaW1lb3V0U291cmNlKGNvbnN0IGNoYXIqIG5hbWUsIEdTb3VyY2VGdW5jIHNvdXJjZQog
CiB2b2lkIEdNYWluTG9vcFNvdXJjZTo6c2NoZWR1bGVBZnRlckRlbGF5KGNvbnN0IGNoYXIqIG5h
bWUsIHN0ZDo6ZnVuY3Rpb248dm9pZCAoKT4gZnVuY3Rpb24sIHN0ZDo6Y2hyb25vOjptaWxsaXNl
Y29uZHMgZGVsYXksIGludCBwcmlvcml0eSwgc3RkOjpmdW5jdGlvbjx2b2lkICgpPiBkZXN0cm95
RnVuY3Rpb24sIEdNYWluQ29udGV4dCogY29udGV4dCkKIHsKLSAgICBHTXV0ZXhMb2NrZXIgbG9j
a2VyKG1fbXV0ZXgpOwotICAgIGNhbmNlbFdpdGhvdXRMb2NraW5nKCk7CisgICAgY2FuY2VsKCk7
CiAKICAgICBBU1NFUlQoIW1fY29udGV4dC5zb3VyY2UpOwogICAgIG1fY29udGV4dCA9IHsKICAg
ICAgICAgYWRvcHRHUmVmKGdfdGltZW91dF9zb3VyY2VfbmV3KGRlbGF5LmNvdW50KCkpKSwKLSAg
ICAgICAgYWRvcHRHUmVmKGdfY2FuY2VsbGFibGVfbmV3KCkpLAorICAgICAgICBudWxscHRyLCAv
LyBjYW5jZWxsYWJsZQogICAgICAgICBudWxscHRyLCAvLyBzb2NrZXRDYW5jZWxsYWJsZQogICAg
ICAgICBXVEY6Om1vdmUoZnVuY3Rpb24pLAogICAgICAgICBudWxscHRyLCAvLyBib29sQ2FsbGJh
Y2sKQEAgLTIwNSwxMyArMTg0LDEyIEBAIHZvaWQgR01haW5Mb29wU291cmNlOjpzY2hlZHVsZUFm
dGVyRGVsYXkoY29uc3QgY2hhciogbmFtZSwgc3RkOjpmdW5jdGlvbjx2b2lkICgpCiAKIHZvaWQg
R01haW5Mb29wU291cmNlOjpzY2hlZHVsZUFmdGVyRGVsYXkoY29uc3QgY2hhciogbmFtZSwgc3Rk
OjpmdW5jdGlvbjxib29sICgpPiBmdW5jdGlvbiwgc3RkOjpjaHJvbm86Om1pbGxpc2Vjb25kcyBk
ZWxheSwgaW50IHByaW9yaXR5LCBzdGQ6OmZ1bmN0aW9uPHZvaWQgKCk+IGRlc3Ryb3lGdW5jdGlv
biwgR01haW5Db250ZXh0KiBjb250ZXh0KQogewotICAgIEdNdXRleExvY2tlciBsb2NrZXIobV9t
dXRleCk7Ci0gICAgY2FuY2VsV2l0aG91dExvY2tpbmcoKTsKKyAgICBjYW5jZWwoKTsKIAogICAg
IEFTU0VSVCghbV9jb250ZXh0LnNvdXJjZSk7CiAgICAgbV9jb250ZXh0ID0gewogICAgICAgICBh
ZG9wdEdSZWYoZ190aW1lb3V0X3NvdXJjZV9uZXcoZGVsYXkuY291bnQoKSkpLAotICAgICAgICBh
ZG9wdEdSZWYoZ19jYW5jZWxsYWJsZV9uZXcoKSksCisgICAgICAgIG51bGxwdHIsIC8vIGNhbmNl
bGxhYmxlCiAgICAgICAgIG51bGxwdHIsIC8vIHNvY2tldENhbmNlbGxhYmxlCiAgICAgICAgIG51
bGxwdHIsIC8vIHZvaWRDYWxsYmFjawogICAgICAgICBXVEY6Om1vdmUoZnVuY3Rpb24pLApAQCAt
MjIzLDEzICsyMDEsMTIgQEAgdm9pZCBHTWFpbkxvb3BTb3VyY2U6OnNjaGVkdWxlQWZ0ZXJEZWxh
eShjb25zdCBjaGFyKiBuYW1lLCBzdGQ6OmZ1bmN0aW9uPGJvb2wgKCkKIAogdm9pZCBHTWFpbkxv
b3BTb3VyY2U6OnNjaGVkdWxlQWZ0ZXJEZWxheShjb25zdCBjaGFyKiBuYW1lLCBzdGQ6OmZ1bmN0
aW9uPHZvaWQgKCk+IGZ1bmN0aW9uLCBzdGQ6OmNocm9ubzo6c2Vjb25kcyBkZWxheSwgaW50IHBy
aW9yaXR5LCBzdGQ6OmZ1bmN0aW9uPHZvaWQgKCk+IGRlc3Ryb3lGdW5jdGlvbiwgR01haW5Db250
ZXh0KiBjb250ZXh0KQogewotICAgIEdNdXRleExvY2tlciBsb2NrZXIobV9tdXRleCk7Ci0gICAg
Y2FuY2VsV2l0aG91dExvY2tpbmcoKTsKKyAgICBjYW5jZWwoKTsKIAogICAgIEFTU0VSVCghbV9j
b250ZXh0LnNvdXJjZSk7CiAgICAgbV9jb250ZXh0ID0gewogICAgICAgICBhZG9wdEdSZWYoZ190
aW1lb3V0X3NvdXJjZV9uZXdfc2Vjb25kcyhkZWxheS5jb3VudCgpKSksCi0gICAgICAgIGFkb3B0
R1JlZihnX2NhbmNlbGxhYmxlX25ldygpKSwKKyAgICAgICAgbnVsbHB0ciwgLy8gY2FuY2VsbGFi
bGUKICAgICAgICAgbnVsbHB0ciwgLy8gc29ja2V0Q2FuY2VsbGFibGUKICAgICAgICAgV1RGOjpt
b3ZlKGZ1bmN0aW9uKSwKICAgICAgICAgbnVsbHB0ciwgLy8gYm9vbENhbGxiYWNrCkBAIC0yNDEs
MTMgKzIxOCwxMiBAQCB2b2lkIEdNYWluTG9vcFNvdXJjZTo6c2NoZWR1bGVBZnRlckRlbGF5KGNv
bnN0IGNoYXIqIG5hbWUsIHN0ZDo6ZnVuY3Rpb248dm9pZCAoKQogCiB2b2lkIEdNYWluTG9vcFNv
dXJjZTo6c2NoZWR1bGVBZnRlckRlbGF5KGNvbnN0IGNoYXIqIG5hbWUsIHN0ZDo6ZnVuY3Rpb248
Ym9vbCAoKT4gZnVuY3Rpb24sIHN0ZDo6Y2hyb25vOjpzZWNvbmRzIGRlbGF5LCBpbnQgcHJpb3Jp
dHksIHN0ZDo6ZnVuY3Rpb248dm9pZCAoKT4gZGVzdHJveUZ1bmN0aW9uLCBHTWFpbkNvbnRleHQq
IGNvbnRleHQpCiB7Ci0gICAgR011dGV4TG9ja2VyIGxvY2tlcihtX211dGV4KTsKLSAgICBjYW5j
ZWxXaXRob3V0TG9ja2luZygpOworICAgIGNhbmNlbCgpOwogCiAgICAgQVNTRVJUKCFtX2NvbnRl
eHQuc291cmNlKTsKICAgICBtX2NvbnRleHQgPSB7CiAgICAgICAgIGFkb3B0R1JlZihnX3RpbWVv
dXRfc291cmNlX25ld19zZWNvbmRzKGRlbGF5LmNvdW50KCkpKSwKLSAgICAgICAgYWRvcHRHUmVm
KGdfY2FuY2VsbGFibGVfbmV3KCkpLAorICAgICAgICBudWxscHRyLCAvLyBjYW5jZWxsYWJsZQog
ICAgICAgICBudWxscHRyLCAvLyBzb2NrZXRDYW5jZWxsYWJsZQogICAgICAgICBudWxscHRyLCAv
LyB2b2lkQ2FsbGJhY2sKICAgICAgICAgV1RGOjptb3ZlKGZ1bmN0aW9uKSwKQEAgLTI4Nyw4NiAr
MjYzLDgwIEBAIHZvaWQgR01haW5Mb29wU291cmNlOjpzY2hlZHVsZUFmdGVyRGVsYXlBbmREZWxl
dGVPbkRlc3Ryb3koY29uc3QgY2hhciogbmFtZSwgc3RkCiAgICAgY3JlYXRlKCkuc2NoZWR1bGVB
ZnRlckRlbGF5KG5hbWUsIGZ1bmN0aW9uLCBkZWxheSwgcHJpb3JpdHksIGRlc3Ryb3lGdW5jdGlv
biwgY29udGV4dCk7CiB9CiAKLXZvaWQgR01haW5Mb29wU291cmNlOjp2b2lkQ2FsbGJhY2soKQor
Ym9vbCBHTWFpbkxvb3BTb3VyY2U6OnByZXBhcmVWb2lkQ2FsbGJhY2soQ29udGV4dCYgY29udGV4
dCkKIHsKLSAgICBDb250ZXh0IGNvbnRleHQ7Ci0KLSAgICB7Ci0gICAgICAgIEdNdXRleExvY2tl
ciBsb2NrZXIobV9tdXRleCk7Ci0gICAgICAgIGlmICghbV9jb250ZXh0LnNvdXJjZSkKLSAgICAg
ICAgICAgIHJldHVybjsKKyAgICBpZiAoIW1fY29udGV4dC5zb3VyY2UpCisgICAgICAgIHJldHVy
biBmYWxzZTsKIAotICAgICAgICBjb250ZXh0ID0gV1RGOjptb3ZlKG1fY29udGV4dCk7CisgICAg
Y29udGV4dCA9IFdURjo6bW92ZShtX2NvbnRleHQpOwogCi0gICAgICAgIEFTU0VSVChjb250ZXh0
LnZvaWRDYWxsYmFjayk7Ci0gICAgICAgIEFTU0VSVChtX3N0YXR1cyA9PSBTY2hlZHVsZWQpOwot
ICAgICAgICBtX3N0YXR1cyA9IERpc3BhdGNoaW5nOworICAgIEFTU0VSVChjb250ZXh0LnZvaWRD
YWxsYmFjayk7CisgICAgQVNTRVJUKG1fc3RhdHVzID09IFNjaGVkdWxlZCk7CisgICAgbV9zdGF0
dXMgPSBEaXNwYXRjaGluZzsKIAotICAgICAgICBtX2NhbmNlbGxhYmxlID0gY29udGV4dC5jYW5j
ZWxsYWJsZTsKLSAgICB9CisgICAgcmV0dXJuIHRydWU7Cit9CiAKLSAgICBjb250ZXh0LnZvaWRD
YWxsYmFjaygpOwordm9pZCBHTWFpbkxvb3BTb3VyY2U6OmZpbmlzaFZvaWRDYWxsYmFjaygpCit7
CisgICAgbV9zdGF0dXMgPSBSZWFkeTsKK30KIAotICAgIGlmIChnX2NhbmNlbGxhYmxlX2lzX2Nh
bmNlbGxlZChjb250ZXh0LmNhbmNlbGxhYmxlLmdldCgpKSkgewotICAgICAgICBjb250ZXh0LmRl
c3Ryb3lTb3VyY2UoKTsKK3ZvaWQgR01haW5Mb29wU291cmNlOjp2b2lkQ2FsbGJhY2soKQorewor
ICAgIENvbnRleHQgY29udGV4dDsKKyAgICBpZiAoIXByZXBhcmVWb2lkQ2FsbGJhY2soY29udGV4
dCkpCiAgICAgICAgIHJldHVybjsKLSAgICB9CiAKLSAgICBib29sIHNob3VsZFNlbGZEZXN0cnVj
dCA9IGZhbHNlOwotICAgIHsKLSAgICAgICAgR011dGV4TG9ja2VyIGxvY2tlcihtX211dGV4KTsK
LSAgICAgICAgbV9zdGF0dXMgPSBSZWFkeTsKLSAgICAgICAgbV9jYW5jZWxsYWJsZSA9IG51bGxw
dHI7Ci0gICAgICAgIHNob3VsZFNlbGZEZXN0cnVjdCA9IG1fZGVsZXRlT25EZXN0cm95ID09IERl
bGV0ZU9uRGVzdHJveTsKKyAgICBjb250ZXh0LnZvaWRDYWxsYmFjaygpOworICAgIGlmIChtX3N0
YXR1cyAhPSBSZWFkeSAmJiAhbV9jb250ZXh0LnNvdXJjZSkgeworICAgICAgICAvLyBTd2l0Y2gg
dG8gUmVhZHkgaWYgaXQgaGFzbid0IGJlZW4gcmUtc2NoZWR1bGVkIG9yIGNhbmNlbGxlZC4KKyAg
ICAgICAgZmluaXNoVm9pZENhbGxiYWNrKCk7CiAgICAgfQogCiAgICAgY29udGV4dC5kZXN0cm95
U291cmNlKCk7Ci0gICAgaWYgKHNob3VsZFNlbGZEZXN0cnVjdCkKKyAgICBpZiAobV9kZWxldGVP
bkRlc3Ryb3kgPT0gRGVsZXRlT25EZXN0cm95KQogICAgICAgICBkZWxldGUgdGhpczsKIH0KIAot
Ym9vbCBHTWFpbkxvb3BTb3VyY2U6OmJvb2xDYWxsYmFjaygpCitib29sIEdNYWluTG9vcFNvdXJj
ZTo6cHJlcGFyZUJvb2xDYWxsYmFjayhDb250ZXh0JiBjb250ZXh0KQogewotICAgIENvbnRleHQg
Y29udGV4dDsKLQotICAgIHsKLSAgICAgICAgR011dGV4TG9ja2VyIGxvY2tlcihtX211dGV4KTsK
LSAgICAgICAgaWYgKCFtX2NvbnRleHQuc291cmNlKQotICAgICAgICAgICAgcmV0dXJuIFN0b3A7
Ci0KLSAgICAgICAgY29udGV4dCA9IFdURjo6bW92ZShtX2NvbnRleHQpOworICAgIGlmICghbV9j
b250ZXh0LnNvdXJjZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgICAgIEFTU0VSVChj
b250ZXh0LmJvb2xDYWxsYmFjayk7Ci0gICAgICAgIEFTU0VSVChtX3N0YXR1cyA9PSBTY2hlZHVs
ZWQgfHwgbV9zdGF0dXMgPT0gRGlzcGF0Y2hpbmcpOwotICAgICAgICBtX3N0YXR1cyA9IERpc3Bh
dGNoaW5nOworICAgIGNvbnRleHQgPSBXVEY6Om1vdmUobV9jb250ZXh0KTsKIAotICAgICAgICBt
X2NhbmNlbGxhYmxlID0gY29udGV4dC5jYW5jZWxsYWJsZTsKLSAgICB9CisgICAgQVNTRVJUKGNv
bnRleHQuYm9vbENhbGxiYWNrKTsKKyAgICBBU1NFUlQobV9zdGF0dXMgPT0gU2NoZWR1bGVkIHx8
IG1fc3RhdHVzID09IERpc3BhdGNoaW5nKTsKKyAgICBtX3N0YXR1cyA9IERpc3BhdGNoaW5nOwor
ICAgIHJldHVybiB0cnVlOworfQogCi0gICAgYm9vbCByZXR2YWwgPSBjb250ZXh0LmJvb2xDYWxs
YmFjaygpOwordm9pZCBHTWFpbkxvb3BTb3VyY2U6OmZpbmlzaEJvb2xDYWxsYmFjayhib29sIHJl
dHZhbCwgQ29udGV4dCYgY29udGV4dCkKK3sKKyAgICAvLyBtX3N0YXR1cyBzaG91bGQgcmVmbGVj
dCB3aGV0aGVyIHRoZSBHTWFpbkxvb3BTb3VyY2UgaGFzIGJlZW4gcmVzY2hlZHVsZWQgZHVyaW5n
IGRpc3BhdGNoLgorICAgIEFTU0VSVCgoIW1fY29udGV4dC5zb3VyY2UgJiYgbV9zdGF0dXMgPT0g
RGlzcGF0Y2hpbmcpIHx8IG1fc3RhdHVzID09IFNjaGVkdWxlZCk7CisgICAgaWYgKHJldHZhbCAm
JiAhbV9jb250ZXh0LnNvdXJjZSkKKyAgICAgICAgbV9jb250ZXh0ID0gV1RGOjptb3ZlKGNvbnRl
eHQpOworICAgIGVsc2UgaWYgKCFyZXR2YWwpCisgICAgICAgIG1fc3RhdHVzID0gUmVhZHk7Cit9
CiAKLSAgICBpZiAoZ19jYW5jZWxsYWJsZV9pc19jYW5jZWxsZWQoY29udGV4dC5jYW5jZWxsYWJs
ZS5nZXQoKSkpIHsKLSAgICAgICAgY29udGV4dC5kZXN0cm95U291cmNlKCk7Citib29sIEdNYWlu
TG9vcFNvdXJjZTo6Ym9vbENhbGxiYWNrKCkKK3sKKyAgICBDb250ZXh0IGNvbnRleHQ7CisgICAg
aWYgKCFwcmVwYXJlQm9vbENhbGxiYWNrKGNvbnRleHQpKQogICAgICAgICByZXR1cm4gU3RvcDsK
LSAgICB9Ci0KLSAgICBib29sIHNob3VsZFNlbGZEZXN0cnVjdCA9IGZhbHNlOwotICAgIHsKLSAg
ICAgICAgR011dGV4TG9ja2VyIGxvY2tlcihtX211dGV4KTsKLSAgICAgICAgbV9jYW5jZWxsYWJs
ZSA9IG51bGxwdHI7Ci0gICAgICAgIHNob3VsZFNlbGZEZXN0cnVjdCA9IG1fZGVsZXRlT25EZXN0
cm95ID09IERlbGV0ZU9uRGVzdHJveTsKIAotICAgICAgICAvLyBtX3N0YXR1cyBzaG91bGQgcmVm
bGVjdCB3aGV0aGVyIHRoZSBHTWFpbkxvb3BTb3VyY2UgaGFzIGJlZW4gcmVzY2hlZHVsZWQgZHVy
aW5nIGRpc3BhdGNoLgotICAgICAgICBBU1NFUlQoKCFtX2NvbnRleHQuc291cmNlICYmIG1fc3Rh
dHVzID09IERpc3BhdGNoaW5nKSB8fCBtX3N0YXR1cyA9PSBTY2hlZHVsZWQpOwotICAgICAgICBp
ZiAocmV0dmFsICYmICFtX2NvbnRleHQuc291cmNlKQotICAgICAgICAgICAgbV9jb250ZXh0ID0g
V1RGOjptb3ZlKGNvbnRleHQpOwotICAgICAgICBlbHNlIGlmICghcmV0dmFsKQotICAgICAgICAg
ICAgbV9zdGF0dXMgPSBSZWFkeTsKKyAgICBib29sIHJldHZhbCA9IGNvbnRleHQuYm9vbENhbGxi
YWNrKCk7CisgICAgaWYgKG1fc3RhdHVzICE9IFJlYWR5ICYmICFtX2NvbnRleHQuc291cmNlKSB7
CisgICAgICAgIC8vIFByZXBhcmUgZm9yIGEgbmV3IGl0ZXJhdGlvbiBvciBzd2l0Y2ggdG8gUmVh
ZHkgaWYgaXQgaGFzbid0IGJlZW4gcmUtc2NoZWR1bGVkIG9yIGNhbmNlbGxlZC4KKyAgICAgICAg
ZmluaXNoQm9vbENhbGxiYWNrKHJldHZhbCwgY29udGV4dCk7CiAgICAgfQogCiAgICAgaWYgKGNv
bnRleHQuc291cmNlKSB7CiAgICAgICAgIGNvbnRleHQuZGVzdHJveVNvdXJjZSgpOwotICAgICAg
ICBpZiAoc2hvdWxkU2VsZkRlc3RydWN0KQorICAgICAgICBpZiAobV9kZWxldGVPbkRlc3Ryb3kg
PT0gRGVsZXRlT25EZXN0cm95KQogICAgICAgICAgICAgZGVsZXRlIHRoaXM7CiAgICAgfQogCkBA
IC0zNzUsMjEgKzM0NSwxNCBAQCBib29sIEdNYWluTG9vcFNvdXJjZTo6Ym9vbENhbGxiYWNrKCkK
IAogYm9vbCBHTWFpbkxvb3BTb3VyY2U6OnNvY2tldENhbGxiYWNrKEdJT0NvbmRpdGlvbiBjb25k
aXRpb24pCiB7Ci0gICAgQ29udGV4dCBjb250ZXh0OwotCi0gICAgewotICAgICAgICBHTXV0ZXhM
b2NrZXIgbG9ja2VyKG1fbXV0ZXgpOwotICAgICAgICBpZiAoIW1fY29udGV4dC5zb3VyY2UpCi0g
ICAgICAgICAgICByZXR1cm4gU3RvcDsKLQotICAgICAgICBjb250ZXh0ID0gV1RGOjptb3ZlKG1f
Y29udGV4dCk7CisgICAgaWYgKCFtX2NvbnRleHQuc291cmNlKQorICAgICAgICByZXR1cm4gU3Rv
cDsKIAotICAgICAgICBBU1NFUlQoY29udGV4dC5zb2NrZXRDYWxsYmFjayk7Ci0gICAgICAgIEFT
U0VSVChtX3N0YXR1cyA9PSBTY2hlZHVsZWQgfHwgbV9zdGF0dXMgPT0gRGlzcGF0Y2hpbmcpOwot
ICAgICAgICBtX3N0YXR1cyA9IERpc3BhdGNoaW5nOworICAgIENvbnRleHQgY29udGV4dCA9IFdU
Rjo6bW92ZShtX2NvbnRleHQpOwogCi0gICAgICAgIG1fY2FuY2VsbGFibGUgPSBjb250ZXh0LmNh
bmNlbGxhYmxlOwotICAgIH0KKyAgICBBU1NFUlQoY29udGV4dC5zb2NrZXRDYWxsYmFjayk7Cisg
ICAgQVNTRVJUKG1fc3RhdHVzID09IFNjaGVkdWxlZCB8fCBtX3N0YXR1cyA9PSBEaXNwYXRjaGlu
Zyk7CisgICAgbV9zdGF0dXMgPSBEaXNwYXRjaGluZzsKIAogICAgIGlmIChnX2NhbmNlbGxhYmxl
X2lzX2NhbmNlbGxlZChjb250ZXh0LnNvY2tldENhbmNlbGxhYmxlLmdldCgpKSkgewogICAgICAg
ICBjb250ZXh0LmRlc3Ryb3lTb3VyY2UoKTsKQEAgLTM5OCwxOCArMzYxLDkgQEAgYm9vbCBHTWFp
bkxvb3BTb3VyY2U6OnNvY2tldENhbGxiYWNrKEdJT0NvbmRpdGlvbiBjb25kaXRpb24pCiAKICAg
ICBib29sIHJldHZhbCA9IGNvbnRleHQuc29ja2V0Q2FsbGJhY2soY29uZGl0aW9uKTsKIAotICAg
IGlmIChnX2NhbmNlbGxhYmxlX2lzX2NhbmNlbGxlZChjb250ZXh0LmNhbmNlbGxhYmxlLmdldCgp
KSkgewotICAgICAgICBjb250ZXh0LmRlc3Ryb3lTb3VyY2UoKTsKLSAgICAgICAgcmV0dXJuIFN0
b3A7Ci0gICAgfQotCi0gICAgewotICAgICAgICBHTXV0ZXhMb2NrZXIgbG9ja2VyKG1fbXV0ZXgp
OwotICAgICAgICBtX2NhbmNlbGxhYmxlID0gbnVsbHB0cjsKLQorICAgIGlmIChtX3N0YXR1cyAh
PSBSZWFkeSAmJiAhbV9jb250ZXh0LnNvdXJjZSkgewogICAgICAgICAvLyBtX3N0YXR1cyBzaG91
bGQgcmVmbGVjdCB3aGV0aGVyIHRoZSBHTWFpbkxvb3BTb3VyY2UgaGFzIGJlZW4gcmVzY2hlZHVs
ZWQgZHVyaW5nIGRpc3BhdGNoLgogICAgICAgICBBU1NFUlQoKCFtX2NvbnRleHQuc291cmNlICYm
IG1fc3RhdHVzID09IERpc3BhdGNoaW5nKSB8fCBtX3N0YXR1cyA9PSBTY2hlZHVsZWQpOwotCiAg
ICAgICAgIGlmIChyZXR2YWwgJiYgIW1fY29udGV4dC5zb3VyY2UpCiAgICAgICAgICAgICBtX2Nv
bnRleHQgPSBXVEY6Om1vdmUoY29udGV4dCk7CiAgICAgICAgIGVsc2UgaWYgKCFyZXR2YWwpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9nb2JqZWN0L0dNYWluTG9vcFNvdXJjZS5oIGIvU291
cmNlL1dURi93dGYvZ29iamVjdC9HTWFpbkxvb3BTb3VyY2UuaAppbmRleCA3MjhjNTgzLi4zNmRk
NDU5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9nb2JqZWN0L0dNYWluTG9vcFNvdXJjZS5o
CisrKyBiL1NvdXJjZS9XVEYvd3RmL2dvYmplY3QvR01haW5Mb29wU291cmNlLmgKQEAgLTI2LDEz
ICsyNiwxNCBAQAogI2lmbmRlZiBHTWFpbkxvb3BTb3VyY2VfaAogI2RlZmluZSBHTWFpbkxvb3BT
b3VyY2VfaAogCisjaWYgVVNFKEdMSUIpCisKICNpbmNsdWRlIDxmdW5jdGlvbmFsPgogI2luY2x1
ZGUgPGdsaWIuaD4KICNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KICNpbmNsdWRlIDx3dGYv
Z29iamVjdC9HUmVmUHRyLmg+CiAKIHR5cGVkZWYgc3RydWN0IF9HU29ja2V0IEdTb2NrZXQ7Ci10
eXBlZGVmIHVuaW9uIF9HTXV0ZXggR011dGV4OwogCiBuYW1lc3BhY2UgV1RGIHsKIApAQCAtNDEs
NyArNDIsNyBAQCBjbGFzcyBHTWFpbkxvb3BTb3VyY2UgewogICAgIFdURl9NQUtFX0ZBU1RfQUxM
T0NBVEVEOwogcHVibGljOgogICAgIFdURl9FWFBPUlRfUFJJVkFURSBHTWFpbkxvb3BTb3VyY2Uo
KTsKLSAgICBXVEZfRVhQT1JUX1BSSVZBVEUgfkdNYWluTG9vcFNvdXJjZSgpOworICAgIFdURl9F
WFBPUlRfUFJJVkFURSB2aXJ0dWFsIH5HTWFpbkxvb3BTb3VyY2UoKTsKIAogICAgIHN0YXRpYyBj
b25zdCBib29sIFN0b3AgPSBmYWxzZTsKICAgICBzdGF0aWMgY29uc3QgYm9vbCBDb250aW51ZSA9
IHRydWU7CkBAIC00OSwxNCArNTAsMTUgQEAgcHVibGljOgogICAgIFdURl9FWFBPUlRfUFJJVkFU
RSBib29sIGlzU2NoZWR1bGVkKCkgY29uc3Q7CiAgICAgV1RGX0VYUE9SVF9QUklWQVRFIGJvb2wg
aXNBY3RpdmUoKSBjb25zdDsKIAotICAgIFdURl9FWFBPUlRfUFJJVkFURSB2b2lkIHNjaGVkdWxl
KGNvbnN0IGNoYXIqIG5hbWUsIHN0ZDo6ZnVuY3Rpb248dm9pZCgpPiwgaW50IHByaW9yaXR5ID0g
R19QUklPUklUWV9ERUZBVUxULCBzdGQ6OmZ1bmN0aW9uPHZvaWQoKT4gZGVzdHJveUZ1bmN0aW9u
ID0gbnVsbHB0ciwgR01haW5Db250ZXh0KiA9IG51bGxwdHIpOwotICAgIFdURl9FWFBPUlRfUFJJ
VkFURSB2b2lkIHNjaGVkdWxlKGNvbnN0IGNoYXIqIG5hbWUsIHN0ZDo6ZnVuY3Rpb248Ym9vbCgp
PiwgaW50IHByaW9yaXR5ID0gR19QUklPUklUWV9ERUZBVUxULCBzdGQ6OmZ1bmN0aW9uPHZvaWQo
KT4gZGVzdHJveUZ1bmN0aW9uID0gbnVsbHB0ciwgR01haW5Db250ZXh0KiA9IG51bGxwdHIpOwor
ICAgIFdURl9FWFBPUlRfUFJJVkFURSB2aXJ0dWFsIHZvaWQgc2NoZWR1bGUoY29uc3QgY2hhciog
bmFtZSwgc3RkOjpmdW5jdGlvbjx2b2lkKCk+LCBpbnQgcHJpb3JpdHkgPSBHX1BSSU9SSVRZX0RF
RkFVTFQsIHN0ZDo6ZnVuY3Rpb248dm9pZCgpPiBkZXN0cm95RnVuY3Rpb24gPSBudWxscHRyLCBH
TWFpbkNvbnRleHQqID0gbnVsbHB0cik7CisgICAgV1RGX0VYUE9SVF9QUklWQVRFIHZpcnR1YWwg
dm9pZCBzY2hlZHVsZShjb25zdCBjaGFyKiBuYW1lLCBzdGQ6OmZ1bmN0aW9uPGJvb2woKT4sIGlu
dCBwcmlvcml0eSA9IEdfUFJJT1JJVFlfREVGQVVMVCwgc3RkOjpmdW5jdGlvbjx2b2lkKCk+IGRl
c3Ryb3lGdW5jdGlvbiA9IG51bGxwdHIsIEdNYWluQ29udGV4dCogPSBudWxscHRyKTsKKyAgICBX
VEZfRVhQT1JUX1BSSVZBVEUgdmlydHVhbCB2b2lkIHNjaGVkdWxlQWZ0ZXJEZWxheShjb25zdCBj
aGFyKiBuYW1lLCBzdGQ6OmZ1bmN0aW9uPHZvaWQoKT4sIHN0ZDo6Y2hyb25vOjptaWxsaXNlY29u
ZHMsIGludCBwcmlvcml0eSA9IEdfUFJJT1JJVFlfREVGQVVMVCwgc3RkOjpmdW5jdGlvbjx2b2lk
KCk+IGRlc3Ryb3lGdW5jdGlvbiA9IG51bGxwdHIsIEdNYWluQ29udGV4dCogPSBudWxscHRyKTsK
KyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgdmlydHVhbCB2b2lkIHNjaGVkdWxlQWZ0ZXJEZWxheShj
b25zdCBjaGFyKiBuYW1lLCBzdGQ6OmZ1bmN0aW9uPGJvb2woKT4sIHN0ZDo6Y2hyb25vOjptaWxs
aXNlY29uZHMsIGludCBwcmlvcml0eSA9IEdfUFJJT1JJVFlfREVGQVVMVCwgc3RkOjpmdW5jdGlv
bjx2b2lkKCk+IGRlc3Ryb3lGdW5jdGlvbiA9IG51bGxwdHIsIEdNYWluQ29udGV4dCogPSBudWxs
cHRyKTsKKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgdmlydHVhbCB2b2lkIHNjaGVkdWxlQWZ0ZXJE
ZWxheShjb25zdCBjaGFyKiBuYW1lLCBzdGQ6OmZ1bmN0aW9uPHZvaWQoKT4sIHN0ZDo6Y2hyb25v
OjpzZWNvbmRzLCBpbnQgcHJpb3JpdHkgPSBHX1BSSU9SSVRZX0RFRkFVTFQsIHN0ZDo6ZnVuY3Rp
b248dm9pZCgpPiBkZXN0cm95RnVuY3Rpb24gPSBudWxscHRyLCBHTWFpbkNvbnRleHQqID0gbnVs
bHB0cik7CisgICAgV1RGX0VYUE9SVF9QUklWQVRFIHZpcnR1YWwgdm9pZCBzY2hlZHVsZUFmdGVy
RGVsYXkoY29uc3QgY2hhciogbmFtZSwgc3RkOjpmdW5jdGlvbjxib29sKCk+LCBzdGQ6OmNocm9u
bzo6c2Vjb25kcywgaW50IHByaW9yaXR5ID0gR19QUklPUklUWV9ERUZBVUxULCBzdGQ6OmZ1bmN0
aW9uPHZvaWQoKT4gZGVzdHJveUZ1bmN0aW9uID0gbnVsbHB0ciwgR01haW5Db250ZXh0KiA9IG51
bGxwdHIpOworICAgIFdURl9FWFBPUlRfUFJJVkFURSB2aXJ0dWFsIHZvaWQgY2FuY2VsKCk7CisK
ICAgICBXVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBzY2hlZHVsZShjb25zdCBjaGFyKiBuYW1lLCBz
dGQ6OmZ1bmN0aW9uPGJvb2woR0lPQ29uZGl0aW9uKT4sIEdTb2NrZXQqLCBHSU9Db25kaXRpb24s
IHN0ZDo6ZnVuY3Rpb248dm9pZCgpPiBkZXN0cm95RnVuY3Rpb24gPSBudWxscHRyLCBHTWFpbkNv
bnRleHQqID0gbnVsbHB0cik7Ci0gICAgV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgc2NoZWR1bGVB
ZnRlckRlbGF5KGNvbnN0IGNoYXIqIG5hbWUsIHN0ZDo6ZnVuY3Rpb248dm9pZCgpPiwgc3RkOjpj
aHJvbm86Om1pbGxpc2Vjb25kcywgaW50IHByaW9yaXR5ID0gR19QUklPUklUWV9ERUZBVUxULCBz
dGQ6OmZ1bmN0aW9uPHZvaWQoKT4gZGVzdHJveUZ1bmN0aW9uID0gbnVsbHB0ciwgR01haW5Db250
ZXh0KiA9IG51bGxwdHIpOwotICAgIFdURl9FWFBPUlRfUFJJVkFURSB2b2lkIHNjaGVkdWxlQWZ0
ZXJEZWxheShjb25zdCBjaGFyKiBuYW1lLCBzdGQ6OmZ1bmN0aW9uPGJvb2woKT4sIHN0ZDo6Y2hy
b25vOjptaWxsaXNlY29uZHMsIGludCBwcmlvcml0eSA9IEdfUFJJT1JJVFlfREVGQVVMVCwgc3Rk
OjpmdW5jdGlvbjx2b2lkKCk+IGRlc3Ryb3lGdW5jdGlvbiA9IG51bGxwdHIsIEdNYWluQ29udGV4
dCogPSBudWxscHRyKTsKLSAgICBXVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBzY2hlZHVsZUFmdGVy
RGVsYXkoY29uc3QgY2hhciogbmFtZSwgc3RkOjpmdW5jdGlvbjx2b2lkKCk+LCBzdGQ6OmNocm9u
bzo6c2Vjb25kcywgaW50IHByaW9yaXR5ID0gR19QUklPUklUWV9ERUZBVUxULCBzdGQ6OmZ1bmN0
aW9uPHZvaWQoKT4gZGVzdHJveUZ1bmN0aW9uID0gbnVsbHB0ciwgR01haW5Db250ZXh0KiA9IG51
bGxwdHIpOwotICAgIFdURl9FWFBPUlRfUFJJVkFURSB2b2lkIHNjaGVkdWxlQWZ0ZXJEZWxheShj
b25zdCBjaGFyKiBuYW1lLCBzdGQ6OmZ1bmN0aW9uPGJvb2woKT4sIHN0ZDo6Y2hyb25vOjpzZWNv
bmRzLCBpbnQgcHJpb3JpdHkgPSBHX1BSSU9SSVRZX0RFRkFVTFQsIHN0ZDo6ZnVuY3Rpb248dm9p
ZCgpPiBkZXN0cm95RnVuY3Rpb24gPSBudWxscHRyLCBHTWFpbkNvbnRleHQqID0gbnVsbHB0cik7
Ci0gICAgV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgY2FuY2VsKCk7CiAKICAgICBzdGF0aWMgdm9p
ZCBzY2hlZHVsZUFuZERlbGV0ZU9uRGVzdHJveShjb25zdCBjaGFyKiBuYW1lLCBzdGQ6OmZ1bmN0
aW9uPHZvaWQoKT4sIGludCBwcmlvcml0eSA9IEdfUFJJT1JJVFlfREVGQVVMVCwgc3RkOjpmdW5j
dGlvbjx2b2lkKCk+IGRlc3Ryb3lGdW5jdGlvbiA9IG51bGxwdHIsIEdNYWluQ29udGV4dCogPSBu
dWxscHRyKTsKICAgICBzdGF0aWMgdm9pZCBzY2hlZHVsZUFuZERlbGV0ZU9uRGVzdHJveShjb25z
dCBjaGFyKiBuYW1lLCBzdGQ6OmZ1bmN0aW9uPGJvb2woKT4sIGludCBwcmlvcml0eSA9IEdfUFJJ
T1JJVFlfREVGQVVMVCwgc3RkOjpmdW5jdGlvbjx2b2lkKCk+IGRlc3Ryb3lGdW5jdGlvbiA9IG51
bGxwdHIsIEdNYWluQ29udGV4dCogPSBudWxscHRyKTsKQEAgLTY1LDMyICs2Nyw5IEBAIHB1Ymxp
YzoKICAgICBzdGF0aWMgdm9pZCBzY2hlZHVsZUFmdGVyRGVsYXlBbmREZWxldGVPbkRlc3Ryb3ko
Y29uc3QgY2hhciogbmFtZSwgc3RkOjpmdW5jdGlvbjx2b2lkKCk+LCBzdGQ6OmNocm9ubzo6c2Vj
b25kcywgaW50IHByaW9yaXR5ID0gR19QUklPUklUWV9ERUZBVUxULCBzdGQ6OmZ1bmN0aW9uPHZv
aWQoKT4gZGVzdHJveUZ1bmN0aW9uID0gbnVsbHB0ciwgR01haW5Db250ZXh0KiA9IG51bGxwdHIp
OwogICAgIHN0YXRpYyB2b2lkIHNjaGVkdWxlQWZ0ZXJEZWxheUFuZERlbGV0ZU9uRGVzdHJveShj
b25zdCBjaGFyKiBuYW1lLCBzdGQ6OmZ1bmN0aW9uPGJvb2woKT4sIHN0ZDo6Y2hyb25vOjpzZWNv
bmRzLCBpbnQgcHJpb3JpdHkgPSBHX1BSSU9SSVRZX0RFRkFVTFQsIHN0ZDo6ZnVuY3Rpb248dm9p
ZCgpPiBkZXN0cm95RnVuY3Rpb24gPSBudWxscHRyLCBHTWFpbkNvbnRleHQqID0gbnVsbHB0cik7
CiAKLXByaXZhdGU6Ci0gICAgc3RhdGljIEdNYWluTG9vcFNvdXJjZSYgY3JlYXRlKCk7Ci0KLSAg
ICBlbnVtIERlbGV0ZU9uRGVzdHJveVR5cGUgeyBEZWxldGVPbkRlc3Ryb3ksIERvTm90RGVsZXRl
T25EZXN0cm95IH07Ci0gICAgR01haW5Mb29wU291cmNlKERlbGV0ZU9uRGVzdHJveVR5cGUpOwot
Citwcm90ZWN0ZWQ6CiAgICAgZW51bSBTdGF0dXMgeyBSZWFkeSwgU2NoZWR1bGVkLCBEaXNwYXRj
aGluZyB9OwogCi0gICAgdm9pZCBjYW5jZWxXaXRob3V0TG9ja2luZygpOwotICAgIHZvaWQgc2No
ZWR1bGVJZGxlU291cmNlKGNvbnN0IGNoYXIqIG5hbWUsIEdTb3VyY2VGdW5jLCBpbnQgcHJpb3Jp
dHksIEdNYWluQ29udGV4dCopOwotICAgIHZvaWQgc2NoZWR1bGVUaW1lb3V0U291cmNlKGNvbnN0
IGNoYXIqIG5hbWUsIEdTb3VyY2VGdW5jLCBpbnQgcHJpb3JpdHksIEdNYWluQ29udGV4dCopOwot
ICAgIHZvaWQgdm9pZENhbGxiYWNrKCk7Ci0gICAgYm9vbCBib29sQ2FsbGJhY2soKTsKLSAgICBi
b29sIHNvY2tldENhbGxiYWNrKEdJT0NvbmRpdGlvbik7Ci0KLSAgICB2b2lkIGRlc3Ryb3koKTsK
LQotICAgIHN0YXRpYyBnYm9vbGVhbiB2b2lkU291cmNlQ2FsbGJhY2soR01haW5Mb29wU291cmNl
Kik7Ci0gICAgc3RhdGljIGdib29sZWFuIGJvb2xTb3VyY2VDYWxsYmFjayhHTWFpbkxvb3BTb3Vy
Y2UqKTsKLSAgICBzdGF0aWMgZ2Jvb2xlYW4gc29ja2V0U291cmNlQ2FsbGJhY2soR1NvY2tldCos
IEdJT0NvbmRpdGlvbiwgR01haW5Mb29wU291cmNlKik7Ci0KLSAgICBEZWxldGVPbkRlc3Ryb3lU
eXBlIG1fZGVsZXRlT25EZXN0cm95OwotICAgIFN0YXR1cyBtX3N0YXR1czsKLSAgICBHTXV0ZXgg
bV9tdXRleDsKLSAgICBHUmVmUHRyPEdDYW5jZWxsYWJsZT4gbV9jYW5jZWxsYWJsZTsKLQogICAg
IHN0cnVjdCBDb250ZXh0IHsKICAgICAgICAgQ29udGV4dCgpID0gZGVmYXVsdDsKICAgICAgICAg
Q29udGV4dChDb250ZXh0JiYpID0gZGVmYXVsdDsKQEAgLTEwNSwxMSArODQsNDEgQEAgcHJpdmF0
ZToKICAgICAgICAgc3RkOjpmdW5jdGlvbjxib29sICgpPiBib29sQ2FsbGJhY2s7CiAgICAgICAg
IHN0ZDo6ZnVuY3Rpb248Ym9vbCAoR0lPQ29uZGl0aW9uKT4gc29ja2V0Q2FsbGJhY2s7CiAgICAg
ICAgIHN0ZDo6ZnVuY3Rpb248dm9pZCAoKT4gZGVzdHJveUNhbGxiYWNrOwotICAgIH0gbV9jb250
ZXh0OworICAgIH07CisKKyAgICB2aXJ0dWFsIHZvaWQgdm9pZENhbGxiYWNrKCk7CisgICAgdmly
dHVhbCBib29sIGJvb2xDYWxsYmFjaygpOworCisgICAgdmlydHVhbCBib29sIHByZXBhcmVWb2lk
Q2FsbGJhY2soQ29udGV4dCYpOworICAgIHZpcnR1YWwgdm9pZCBmaW5pc2hWb2lkQ2FsbGJhY2so
KTsKKyAgICB2aXJ0dWFsIGJvb2wgcHJlcGFyZUJvb2xDYWxsYmFjayhDb250ZXh0Jik7CisgICAg
dmlydHVhbCB2b2lkIGZpbmlzaEJvb2xDYWxsYmFjayhib29sIHJldHZhbCwgQ29udGV4dCYpOwor
Citwcml2YXRlOgorICAgIHN0YXRpYyBHTWFpbkxvb3BTb3VyY2UmIGNyZWF0ZSgpOworCisgICAg
ZW51bSBEZWxldGVPbkRlc3Ryb3lUeXBlIHsgRGVsZXRlT25EZXN0cm95LCBEb05vdERlbGV0ZU9u
RGVzdHJveSB9OworICAgIEdNYWluTG9vcFNvdXJjZShEZWxldGVPbkRlc3Ryb3lUeXBlKTsKKwor
ICAgIHZvaWQgc2NoZWR1bGVJZGxlU291cmNlKGNvbnN0IGNoYXIqIG5hbWUsIEdTb3VyY2VGdW5j
LCBpbnQgcHJpb3JpdHksIEdNYWluQ29udGV4dCopOworICAgIHZvaWQgc2NoZWR1bGVUaW1lb3V0
U291cmNlKGNvbnN0IGNoYXIqIG5hbWUsIEdTb3VyY2VGdW5jLCBpbnQgcHJpb3JpdHksIEdNYWlu
Q29udGV4dCopOworICAgIGJvb2wgc29ja2V0Q2FsbGJhY2soR0lPQ29uZGl0aW9uKTsKKworICAg
IHN0YXRpYyBnYm9vbGVhbiB2b2lkU291cmNlQ2FsbGJhY2soR01haW5Mb29wU291cmNlKik7Cisg
ICAgc3RhdGljIGdib29sZWFuIGJvb2xTb3VyY2VDYWxsYmFjayhHTWFpbkxvb3BTb3VyY2UqKTsK
KyAgICBzdGF0aWMgZ2Jvb2xlYW4gc29ja2V0U291cmNlQ2FsbGJhY2soR1NvY2tldCosIEdJT0Nv
bmRpdGlvbiwgR01haW5Mb29wU291cmNlKik7CisKKyAgICBEZWxldGVPbkRlc3Ryb3lUeXBlIG1f
ZGVsZXRlT25EZXN0cm95OworCitwcm90ZWN0ZWQ6CisgICAgQ29udGV4dCBtX2NvbnRleHQ7Cisg
ICAgU3RhdHVzIG1fc3RhdHVzOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV1RGCiAKIHVzaW5nIFdU
Rjo6R01haW5Mb29wU291cmNlOwogCisjZW5kaWYgLy8gVVNFKEdMSUIpCisKICNlbmRpZiAvLyBH
TWFpbkxvb3BTb3VyY2VfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvZ29iamVjdC9HTXV0
ZXhMb2NrZXIuaCBiL1NvdXJjZS9XVEYvd3RmL2dvYmplY3QvR011dGV4TG9ja2VyLmgKaW5kZXgg
MGRkMWY3Ni4uMDM1NjcwMiAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvZ29iamVjdC9HTXV0
ZXhMb2NrZXIuaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9nb2JqZWN0L0dNdXRleExvY2tlci5oCkBA
IC0yNywxMCArMjcsNDAgQEAKIAogbmFtZXNwYWNlIFdURiB7CiAKK3RlbXBsYXRlPHR5cGVuYW1l
IFQ+CitzdHJ1Y3QgTXV0ZXhXcmFwcGVyOworCit0ZW1wbGF0ZTw+CitzdHJ1Y3QgTXV0ZXhXcmFw
cGVyPEdNdXRleD4geworICAgIHN0YXRpYyB2b2lkIGxvY2soR011dGV4KiBtdXRleCkKKyAgICB7
CisgICAgICAgIGdfbXV0ZXhfbG9jayhtdXRleCk7CisgICAgfQorCisgICAgc3RhdGljIHZvaWQg
dW5sb2NrKEdNdXRleCogbXV0ZXgpCisgICAgeworICAgICAgICBnX211dGV4X3VubG9jayhtdXRl
eCk7CisgICAgfQorfTsKKwordGVtcGxhdGU8Pgorc3RydWN0IE11dGV4V3JhcHBlcjxHUmVjTXV0
ZXg+IHsKKyAgICBzdGF0aWMgdm9pZCBsb2NrKEdSZWNNdXRleCogbXV0ZXgpCisgICAgeworICAg
ICAgICBnX3JlY19tdXRleF9sb2NrKG11dGV4KTsKKyAgICB9CisKKyAgICBzdGF0aWMgdm9pZCB1
bmxvY2soR1JlY011dGV4KiBtdXRleCkKKyAgICB7CisgICAgICAgIGdfcmVjX211dGV4X3VubG9j
ayhtdXRleCk7CisgICAgfQorfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4KIGNsYXNzIEdNdXRl
eExvY2tlciB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoR011dGV4TG9ja2VyKTsKIHB1Ymxp
YzoKLSAgICBleHBsaWNpdCBHTXV0ZXhMb2NrZXIoR011dGV4JiBtdXRleCkKKyAgICBleHBsaWNp
dCBHTXV0ZXhMb2NrZXIoVCYgbXV0ZXgpCiAgICAgICAgIDogbV9tdXRleChtdXRleCkKICAgICAg
ICAgLCBtX2xvY2tlZChmYWxzZSkKICAgICB7CkBAIC00NCwyMiArNzQsMjQgQEAgcHVibGljOgog
CiAgICAgdm9pZCBsb2NrKCkKICAgICB7Ci0gICAgICAgIGlmICghbV9sb2NrZWQpIHsKLSAgICAg
ICAgICAgIGdfbXV0ZXhfbG9jaygmbV9tdXRleCk7Ci0gICAgICAgICAgICBtX2xvY2tlZCA9IHRy
dWU7Ci0gICAgICAgIH0KKyAgICAgICAgaWYgKG1fbG9ja2VkKQorICAgICAgICAgICAgcmV0dXJu
OworCisgICAgICAgIE11dGV4V3JhcHBlcjxUPjo6bG9jaygmbV9tdXRleCk7CisgICAgICAgIG1f
bG9ja2VkID0gdHJ1ZTsKICAgICB9CiAKICAgICB2b2lkIHVubG9jaygpCiAgICAgewotICAgICAg
ICBpZiAobV9sb2NrZWQpIHsKLSAgICAgICAgICAgIG1fbG9ja2VkID0gZmFsc2U7Ci0gICAgICAg
ICAgICBnX211dGV4X3VubG9jaygmbV9tdXRleCk7Ci0gICAgICAgIH0KKyAgICAgICAgaWYgKCFt
X2xvY2tlZCkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBtX2xvY2tlZCA9IGZhbHNl
OworICAgICAgICBNdXRleFdyYXBwZXI8VD46OnVubG9jaygmbV9tdXRleCk7CiAgICAgfQogCiBw
cml2YXRlOgotICAgIEdNdXRleCYgbV9tdXRleDsKKyAgICBUJiBtX211dGV4OwogICAgIGJvb2wg
bV9sb2NrZWQ7CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9nb2JqZWN0L0dUaHJl
YWRTYWZlTWFpbkxvb3BTb3VyY2UuY3BwIGIvU291cmNlL1dURi93dGYvZ29iamVjdC9HVGhyZWFk
U2FmZU1haW5Mb29wU291cmNlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
Li40YWMyYjNiCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dURi93dGYvZ29iamVjdC9HVGhy
ZWFkU2FmZU1haW5Mb29wU291cmNlLmNwcApAQCAtMCwwICsxLDE3MyBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxNCBJZ2FsaWEgUy5MLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
KyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisg
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiR1RocmVhZFNhZmVNYWluTG9vcFNvdXJjZS5oIgorCisjaWYgVVNFKEdMSUIp
CisKKyNpbmNsdWRlIDxnaW8vZ2lvLmg+CisjaW5jbHVkZSA8d3RmL2dvYmplY3QvR011dGV4TG9j
a2VyLmg+CisKK25hbWVzcGFjZSBXVEYgeworCitHVGhyZWFkU2FmZU1haW5Mb29wU291cmNlOjpH
VGhyZWFkU2FmZU1haW5Mb29wU291cmNlKCkKK3sKKyAgICBnX3JlY19tdXRleF9pbml0KCZtX211
dGV4KTsKK30KKworR1RocmVhZFNhZmVNYWluTG9vcFNvdXJjZTo6fkdUaHJlYWRTYWZlTWFpbkxv
b3BTb3VyY2UoKQoreworICAgIGNhbmNlbCgpOworICAgIGdfcmVjX211dGV4X2NsZWFyKCZtX211
dGV4KTsKK30KKwordm9pZCBHVGhyZWFkU2FmZU1haW5Mb29wU291cmNlOjpjYW5jZWwoKQorewor
ICAgIEdNdXRleExvY2tlcjxHUmVjTXV0ZXg+IGxvY2tlcihtX211dGV4KTsKKworICAgIC8vIFRo
ZSBnZW5lcmFsIGNhbmNlbGxhYmxlIG9iamVjdCBzaG91bGQgb25seSBiZSBwcmVzZW50IGlmIHdl
J3JlIGN1cnJlbnRseSBkaXNwYXRjaGluZyB0aGlzIEdNYWluTG9vcFNvdXJjZS4KKyAgICBBU1NF
UlQoIW1fY2FuY2VsbGFibGUgfHwgbV9zdGF0dXMgPT0gRGlzcGF0Y2hpbmcpOworCisgICAgLy8g
VGhlIHNvdXJjZSBpcyBwZXJoYXBzIGJlaW5nIGNhbmNlbGxlZCBpbiB0aGUgbWlkZGxlIG9mIGEg
Y2FsbGJhY2sgZGlzcGF0Y2guCisgICAgLy8gQ2FuY2VsbGluZyB0aGlzIEdDYW5jZWxsYWJsZSBv
YmplY3Qgd2lsbCBjb252ZXkgdGhpcyBpbmZvcm1hdGlvbiB0byB0aGUKKyAgICAvLyBjdXJyZW50
IGV4ZWN1dGlvbiBjb250ZXh0IHdoZW4gdGhlIGNhbGxiYWNrIGRpc3BhdGNoIGlzIGZpbmlzaGVk
LgorICAgIGdfY2FuY2VsbGFibGVfY2FuY2VsKG1fY2FuY2VsbGFibGUuZ2V0KCkpOworICAgIG1f
Y2FuY2VsbGFibGUgPSBudWxscHRyOworCisgICAgR01haW5Mb29wU291cmNlOjpjYW5jZWwoKTsK
K30KKwordm9pZCBHVGhyZWFkU2FmZU1haW5Mb29wU291cmNlOjpzY2hlZHVsZShjb25zdCBjaGFy
KiBuYW1lLCBzdGQ6OmZ1bmN0aW9uPHZvaWQgKCk+IGZ1bmN0aW9uLCBpbnQgcHJpb3JpdHksIHN0
ZDo6ZnVuY3Rpb248dm9pZCAoKT4gZGVzdHJveUZ1bmN0aW9uLCBHTWFpbkNvbnRleHQqIGNvbnRl
eHQpCit7CisgICAgR011dGV4TG9ja2VyPEdSZWNNdXRleD4gbG9ja2VyKG1fbXV0ZXgpOworICAg
IEdNYWluTG9vcFNvdXJjZTo6c2NoZWR1bGUobmFtZSwgZnVuY3Rpb24sIHByaW9yaXR5LCBkZXN0
cm95RnVuY3Rpb24sIGNvbnRleHQpOworICAgIG1fY29udGV4dC5jYW5jZWxsYWJsZSA9IGFkb3B0
R1JlZihnX2NhbmNlbGxhYmxlX25ldygpKTsKK30KKwordm9pZCBHVGhyZWFkU2FmZU1haW5Mb29w
U291cmNlOjpzY2hlZHVsZShjb25zdCBjaGFyKiBuYW1lLCBzdGQ6OmZ1bmN0aW9uPGJvb2wgKCk+
IGZ1bmN0aW9uLCBpbnQgcHJpb3JpdHksIHN0ZDo6ZnVuY3Rpb248dm9pZCAoKT4gZGVzdHJveUZ1
bmN0aW9uLCBHTWFpbkNvbnRleHQqIGNvbnRleHQpCit7CisgICAgR011dGV4TG9ja2VyPEdSZWNN
dXRleD4gbG9ja2VyKG1fbXV0ZXgpOworICAgIEdNYWluTG9vcFNvdXJjZTo6c2NoZWR1bGUobmFt
ZSwgZnVuY3Rpb24sIHByaW9yaXR5LCBkZXN0cm95RnVuY3Rpb24sIGNvbnRleHQpOworICAgIG1f
Y29udGV4dC5jYW5jZWxsYWJsZSA9IGFkb3B0R1JlZihnX2NhbmNlbGxhYmxlX25ldygpKTsKK30K
Kwordm9pZCBHVGhyZWFkU2FmZU1haW5Mb29wU291cmNlOjpzY2hlZHVsZUFmdGVyRGVsYXkoY29u
c3QgY2hhciogbmFtZSwgc3RkOjpmdW5jdGlvbjx2b2lkICgpPiBmdW5jdGlvbiwgc3RkOjpjaHJv
bm86Om1pbGxpc2Vjb25kcyBkZWxheSwgaW50IHByaW9yaXR5LCBzdGQ6OmZ1bmN0aW9uPHZvaWQg
KCk+IGRlc3Ryb3lGdW5jdGlvbiwgR01haW5Db250ZXh0KiBjb250ZXh0KQoreworICAgIEdNdXRl
eExvY2tlcjxHUmVjTXV0ZXg+IGxvY2tlcihtX211dGV4KTsKKyAgICBHTWFpbkxvb3BTb3VyY2U6
OnNjaGVkdWxlQWZ0ZXJEZWxheShuYW1lLCBmdW5jdGlvbiwgZGVsYXksIHByaW9yaXR5LCBkZXN0
cm95RnVuY3Rpb24sIGNvbnRleHQpOworICAgIG1fY29udGV4dC5jYW5jZWxsYWJsZSA9IGFkb3B0
R1JlZihnX2NhbmNlbGxhYmxlX25ldygpKTsKK30KKwordm9pZCBHVGhyZWFkU2FmZU1haW5Mb29w
U291cmNlOjpzY2hlZHVsZUFmdGVyRGVsYXkoY29uc3QgY2hhciogbmFtZSwgc3RkOjpmdW5jdGlv
bjxib29sICgpPiBmdW5jdGlvbiwgc3RkOjpjaHJvbm86Om1pbGxpc2Vjb25kcyBkZWxheSwgaW50
IHByaW9yaXR5LCBzdGQ6OmZ1bmN0aW9uPHZvaWQgKCk+IGRlc3Ryb3lGdW5jdGlvbiwgR01haW5D
b250ZXh0KiBjb250ZXh0KQoreworICAgIEdNdXRleExvY2tlcjxHUmVjTXV0ZXg+IGxvY2tlciht
X211dGV4KTsKKyAgICBHTWFpbkxvb3BTb3VyY2U6OnNjaGVkdWxlQWZ0ZXJEZWxheShuYW1lLCBm
dW5jdGlvbiwgZGVsYXksIHByaW9yaXR5LCBkZXN0cm95RnVuY3Rpb24sIGNvbnRleHQpOworICAg
IG1fY29udGV4dC5jYW5jZWxsYWJsZSA9IGFkb3B0R1JlZihnX2NhbmNlbGxhYmxlX25ldygpKTsK
K30KKwordm9pZCBHVGhyZWFkU2FmZU1haW5Mb29wU291cmNlOjpzY2hlZHVsZUFmdGVyRGVsYXko
Y29uc3QgY2hhciogbmFtZSwgc3RkOjpmdW5jdGlvbjx2b2lkICgpPiBmdW5jdGlvbiwgc3RkOjpj
aHJvbm86OnNlY29uZHMgZGVsYXksIGludCBwcmlvcml0eSwgc3RkOjpmdW5jdGlvbjx2b2lkICgp
PiBkZXN0cm95RnVuY3Rpb24sIEdNYWluQ29udGV4dCogY29udGV4dCkKK3sKKyAgICBHTXV0ZXhM
b2NrZXI8R1JlY011dGV4PiBsb2NrZXIobV9tdXRleCk7CisgICAgR01haW5Mb29wU291cmNlOjpz
Y2hlZHVsZUFmdGVyRGVsYXkobmFtZSwgZnVuY3Rpb24sIGRlbGF5LCBwcmlvcml0eSwgZGVzdHJv
eUZ1bmN0aW9uLCBjb250ZXh0KTsKKyAgICBtX2NvbnRleHQuY2FuY2VsbGFibGUgPSBhZG9wdEdS
ZWYoZ19jYW5jZWxsYWJsZV9uZXcoKSk7Cit9CisKK3ZvaWQgR1RocmVhZFNhZmVNYWluTG9vcFNv
dXJjZTo6c2NoZWR1bGVBZnRlckRlbGF5KGNvbnN0IGNoYXIqIG5hbWUsIHN0ZDo6ZnVuY3Rpb248
Ym9vbCAoKT4gZnVuY3Rpb24sIHN0ZDo6Y2hyb25vOjpzZWNvbmRzIGRlbGF5LCBpbnQgcHJpb3Jp
dHksIHN0ZDo6ZnVuY3Rpb248dm9pZCAoKT4gZGVzdHJveUZ1bmN0aW9uLCBHTWFpbkNvbnRleHQq
IGNvbnRleHQpCit7CisgICAgR011dGV4TG9ja2VyPEdSZWNNdXRleD4gbG9ja2VyKG1fbXV0ZXgp
OworICAgIEdNYWluTG9vcFNvdXJjZTo6c2NoZWR1bGVBZnRlckRlbGF5KG5hbWUsIGZ1bmN0aW9u
LCBkZWxheSwgcHJpb3JpdHksIGRlc3Ryb3lGdW5jdGlvbiwgY29udGV4dCk7CisgICAgbV9jb250
ZXh0LmNhbmNlbGxhYmxlID0gYWRvcHRHUmVmKGdfY2FuY2VsbGFibGVfbmV3KCkpOworfQorCiti
b29sIEdUaHJlYWRTYWZlTWFpbkxvb3BTb3VyY2U6OnByZXBhcmVWb2lkQ2FsbGJhY2soQ29udGV4
dCYgY29udGV4dCkKK3sKKyAgICBHTXV0ZXhMb2NrZXI8R1JlY011dGV4PiBsb2NrZXIobV9tdXRl
eCk7CisgICAgYm9vbCByZXR2YWwgPSBHTWFpbkxvb3BTb3VyY2U6OnByZXBhcmVWb2lkQ2FsbGJh
Y2soY29udGV4dCk7CisgICAgbV9jYW5jZWxsYWJsZSA9IGNvbnRleHQuY2FuY2VsbGFibGU7Cisg
ICAgcmV0dXJuIHJldHZhbDsKK30KKwordm9pZCBHVGhyZWFkU2FmZU1haW5Mb29wU291cmNlOjpm
aW5pc2hWb2lkQ2FsbGJhY2soKQoreworICAgIEdNdXRleExvY2tlcjxHUmVjTXV0ZXg+IGxvY2tl
cihtX211dGV4KTsKKyAgICBHTWFpbkxvb3BTb3VyY2U6OmZpbmlzaFZvaWRDYWxsYmFjaygpOwor
ICAgIG1fY2FuY2VsbGFibGUgPSBudWxscHRyOworfQorCit2b2lkIEdUaHJlYWRTYWZlTWFpbkxv
b3BTb3VyY2U6OnZvaWRDYWxsYmFjaygpCit7CisgICAgQ29udGV4dCBjb250ZXh0OworICAgIGlm
ICghcHJlcGFyZVZvaWRDYWxsYmFjayhjb250ZXh0KSkKKyAgICAgICAgcmV0dXJuOworCisgICAg
Y29udGV4dC52b2lkQ2FsbGJhY2soKTsKKworICAgIGlmIChnX2NhbmNlbGxhYmxlX2lzX2NhbmNl
bGxlZChjb250ZXh0LmNhbmNlbGxhYmxlLmdldCgpKSkgeworICAgICAgICBjb250ZXh0LmRlc3Ry
b3lTb3VyY2UoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGZpbmlzaFZvaWRDYWxs
YmFjaygpOworICAgIGNvbnRleHQuZGVzdHJveVNvdXJjZSgpOworfQorCitib29sIEdUaHJlYWRT
YWZlTWFpbkxvb3BTb3VyY2U6OnByZXBhcmVCb29sQ2FsbGJhY2soQ29udGV4dCYgY29udGV4dCkK
K3sKKyAgICBHTXV0ZXhMb2NrZXI8R1JlY011dGV4PiBsb2NrZXIobV9tdXRleCk7CisgICAgYm9v
bCByZXR2YWwgPSBHTWFpbkxvb3BTb3VyY2U6OnByZXBhcmVCb29sQ2FsbGJhY2soY29udGV4dCk7
CisgICAgbV9jYW5jZWxsYWJsZSA9IGNvbnRleHQuY2FuY2VsbGFibGU7CisgICAgcmV0dXJuIHJl
dHZhbDsKK30KKwordm9pZCBHVGhyZWFkU2FmZU1haW5Mb29wU291cmNlOjpmaW5pc2hCb29sQ2Fs
bGJhY2soYm9vbCByZXR2YWwsIENvbnRleHQmIGNvbnRleHQpCit7CisgICAgR011dGV4TG9ja2Vy
PEdSZWNNdXRleD4gbG9ja2VyKG1fbXV0ZXgpOworICAgIEdNYWluTG9vcFNvdXJjZTo6ZmluaXNo
Qm9vbENhbGxiYWNrKHJldHZhbCwgY29udGV4dCk7CisgICAgbV9jYW5jZWxsYWJsZSA9IG51bGxw
dHI7Cit9CisKK2Jvb2wgR1RocmVhZFNhZmVNYWluTG9vcFNvdXJjZTo6Ym9vbENhbGxiYWNrKCkK
K3sKKyAgICBDb250ZXh0IGNvbnRleHQ7CisgICAgaWYgKCFwcmVwYXJlQm9vbENhbGxiYWNrKGNv
bnRleHQpKQorICAgICAgICByZXR1cm4gU3RvcDsKKworICAgIGJvb2wgcmV0dmFsID0gY29udGV4
dC5ib29sQ2FsbGJhY2soKTsKKworICAgIGlmIChnX2NhbmNlbGxhYmxlX2lzX2NhbmNlbGxlZChj
b250ZXh0LmNhbmNlbGxhYmxlLmdldCgpKSkgeworICAgICAgICBjb250ZXh0LmRlc3Ryb3lTb3Vy
Y2UoKTsKKyAgICAgICAgcmV0dXJuIFN0b3A7CisgICAgfQorCisgICAgZmluaXNoQm9vbENhbGxi
YWNrKHJldHZhbCwgY29udGV4dCk7CisgICAgaWYgKGNvbnRleHQuc291cmNlKQorICAgICAgICBj
b250ZXh0LmRlc3Ryb3lTb3VyY2UoKTsKKyAgICByZXR1cm4gcmV0dmFsOworfQorCit9IC8vIG5h
bWVzcGFjZSBXVEYKKworI2VuZGlmIC8vIFVTRShHTElCKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dU
Ri93dGYvZ29iamVjdC9HVGhyZWFkU2FmZU1haW5Mb29wU291cmNlLmggYi9Tb3VyY2UvV1RGL3d0
Zi9nb2JqZWN0L0dUaHJlYWRTYWZlTWFpbkxvb3BTb3VyY2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwLi44NzdlODRhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dURi93
dGYvZ29iamVjdC9HVGhyZWFkU2FmZU1haW5Mb29wU291cmNlLmgKQEAgLTAsMCArMSw3MSBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBJZ2FsaWEgUy5MLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVm
IEdUaHJlYWRTYWZlTWFpbkxvb3BTb3VyY2VfaAorI2RlZmluZSBHVGhyZWFkU2FmZU1haW5Mb29w
U291cmNlX2gKKworI2lmIFVTRShHTElCKQorCisjaW5jbHVkZSA8d3RmL2dvYmplY3QvR01haW5M
b29wU291cmNlLmg+CisKK3R5cGVkZWYgc3RydWN0IF9HUmVjTXV0ZXggR1JlY011dGV4OworCitu
YW1lc3BhY2UgV1RGIHsKKworY2xhc3MgR1RocmVhZFNhZmVNYWluTG9vcFNvdXJjZSBmaW5hbCA6
IHB1YmxpYyBHTWFpbkxvb3BTb3VyY2UgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEdUaHJl
YWRTYWZlTWFpbkxvb3BTb3VyY2UpOworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVi
bGljOgorICAgIFdURl9FWFBPUlRfUFJJVkFURSBHVGhyZWFkU2FmZU1haW5Mb29wU291cmNlKCk7
CisgICAgV1RGX0VYUE9SVF9QUklWQVRFIHZpcnR1YWwgfkdUaHJlYWRTYWZlTWFpbkxvb3BTb3Vy
Y2UoKTsKKworICAgIFdURl9FWFBPUlRfUFJJVkFURSB2aXJ0dWFsIHZvaWQgc2NoZWR1bGUoY29u
c3QgY2hhciogbmFtZSwgc3RkOjpmdW5jdGlvbjx2b2lkKCk+LCBpbnQgcHJpb3JpdHkgPSBHX1BS
SU9SSVRZX0RFRkFVTFQsIHN0ZDo6ZnVuY3Rpb248dm9pZCgpPiBkZXN0cm95RnVuY3Rpb24gPSBu
dWxscHRyLCBHTWFpbkNvbnRleHQqID0gbnVsbHB0cikgb3ZlcnJpZGU7CisgICAgV1RGX0VYUE9S
VF9QUklWQVRFIHZpcnR1YWwgdm9pZCBzY2hlZHVsZShjb25zdCBjaGFyKiBuYW1lLCBzdGQ6OmZ1
bmN0aW9uPGJvb2woKT4sIGludCBwcmlvcml0eSA9IEdfUFJJT1JJVFlfREVGQVVMVCwgc3RkOjpm
dW5jdGlvbjx2b2lkKCk+IGRlc3Ryb3lGdW5jdGlvbiA9IG51bGxwdHIsIEdNYWluQ29udGV4dCog
PSBudWxscHRyKSBvdmVycmlkZTsKKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgdmlydHVhbCB2b2lk
IHNjaGVkdWxlQWZ0ZXJEZWxheShjb25zdCBjaGFyKiBuYW1lLCBzdGQ6OmZ1bmN0aW9uPHZvaWQo
KT4sIHN0ZDo6Y2hyb25vOjptaWxsaXNlY29uZHMsIGludCBwcmlvcml0eSA9IEdfUFJJT1JJVFlf
REVGQVVMVCwgc3RkOjpmdW5jdGlvbjx2b2lkKCk+IGRlc3Ryb3lGdW5jdGlvbiA9IG51bGxwdHIs
IEdNYWluQ29udGV4dCogPSBudWxscHRyKSBvdmVycmlkZTsKKyAgICBXVEZfRVhQT1JUX1BSSVZB
VEUgdmlydHVhbCB2b2lkIHNjaGVkdWxlQWZ0ZXJEZWxheShjb25zdCBjaGFyKiBuYW1lLCBzdGQ6
OmZ1bmN0aW9uPGJvb2woKT4sIHN0ZDo6Y2hyb25vOjptaWxsaXNlY29uZHMsIGludCBwcmlvcml0
eSA9IEdfUFJJT1JJVFlfREVGQVVMVCwgc3RkOjpmdW5jdGlvbjx2b2lkKCk+IGRlc3Ryb3lGdW5j
dGlvbiA9IG51bGxwdHIsIEdNYWluQ29udGV4dCogPSBudWxscHRyKSBvdmVycmlkZTsKKyAgICBX
VEZfRVhQT1JUX1BSSVZBVEUgdmlydHVhbCB2b2lkIHNjaGVkdWxlQWZ0ZXJEZWxheShjb25zdCBj
aGFyKiBuYW1lLCBzdGQ6OmZ1bmN0aW9uPHZvaWQoKT4sIHN0ZDo6Y2hyb25vOjpzZWNvbmRzLCBp
bnQgcHJpb3JpdHkgPSBHX1BSSU9SSVRZX0RFRkFVTFQsIHN0ZDo6ZnVuY3Rpb248dm9pZCgpPiBk
ZXN0cm95RnVuY3Rpb24gPSBudWxscHRyLCBHTWFpbkNvbnRleHQqID0gbnVsbHB0cikgb3ZlcnJp
ZGU7CisgICAgV1RGX0VYUE9SVF9QUklWQVRFIHZpcnR1YWwgdm9pZCBzY2hlZHVsZUFmdGVyRGVs
YXkoY29uc3QgY2hhciogbmFtZSwgc3RkOjpmdW5jdGlvbjxib29sKCk+LCBzdGQ6OmNocm9ubzo6
c2Vjb25kcywgaW50IHByaW9yaXR5ID0gR19QUklPUklUWV9ERUZBVUxULCBzdGQ6OmZ1bmN0aW9u
PHZvaWQoKT4gZGVzdHJveUZ1bmN0aW9uID0gbnVsbHB0ciwgR01haW5Db250ZXh0KiA9IG51bGxw
dHIpIG92ZXJyaWRlOworICAgIFdURl9FWFBPUlRfUFJJVkFURSB2aXJ0dWFsIHZvaWQgY2FuY2Vs
KCkgb3ZlcnJpZGU7CisKK3ByaXZhdGU6CisgICAgdmlydHVhbCB2b2lkIHZvaWRDYWxsYmFjaygp
IG92ZXJyaWRlOworICAgIHZpcnR1YWwgYm9vbCBib29sQ2FsbGJhY2soKSBvdmVycmlkZTsKKwor
ICAgIHZpcnR1YWwgYm9vbCBwcmVwYXJlVm9pZENhbGxiYWNrKENvbnRleHQmKSBvdmVycmlkZTsK
KyAgICB2aXJ0dWFsIHZvaWQgZmluaXNoVm9pZENhbGxiYWNrKCkgb3ZlcnJpZGU7CisgICAgdmly
dHVhbCBib29sIHByZXBhcmVCb29sQ2FsbGJhY2soQ29udGV4dCYpIG92ZXJyaWRlOworICAgIHZp
cnR1YWwgdm9pZCBmaW5pc2hCb29sQ2FsbGJhY2soYm9vbCByZXR2YWwsIENvbnRleHQmKSBvdmVy
cmlkZTsKKworICAgIEdSZWNNdXRleCBtX211dGV4OworICAgIEdSZWZQdHI8R0NhbmNlbGxhYmxl
PiBtX2NhbmNlbGxhYmxlOworfTsKKworfSAvLyBuYW1lc3BhY2UgV1RGCisKK3VzaW5nIFdURjo6
R1RocmVhZFNhZmVNYWluTG9vcFNvdXJjZTsKKworI2VuZGlmIC8vIFVTRShHTElCKQorCisjZW5k
aWYgLy8gR1RocmVhZFNhZmVNYWluTG9vcFNvdXJjZV9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYTIyMTVkNy4u
MDUyMTFlMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDUyIEBACisyMDE0LTEwLTA3ICBDYXJsb3Mg
R2FyY2lhIENhbXBvcyAgPGNnYXJjaWFAaWdhbGlhLmNvbT4KKworICAgICAgICBbR0xJQl0gU3Bs
aXQgR01haW5Mb29wU291cmNlIG1vdmluZyB0aHJlYWQgc2FmZSBpbXBsZW1lbnRhdGlvbiB0byBp
dHMgb3duIGNsYXNzIEdUaHJlYWRTYWZlTWFpbkxvb3BTb3VyY2UKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzNzQ4NQorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFVzZSBHVGhyZWFkU2FmZU1haW5Mb29wU291
cmNlIGZvciBHU3RyZWFtZXIgc291cmNlcywgc2luY2UgdGhleQorICAgICAgICBjYW4gYmUgdXNl
ZCBmcm9tIGRpZmZlcmVudCB0aHJlYWRzLiBBbHNvIHVwZGF0ZSBHTXV0ZXhMb2NrZXIKKyAgICAg
ICAgdXNhZ2VzLCBzaW5jZSBpdCdzIG5vdyBhIHRlbXBsYXRlLgorCisgICAgICAgICogcGxhdGZv
cm0vYXVkaW8vZ3N0cmVhbWVyL0F1ZGlvRmlsZVJlYWRlckdTdHJlYW1lci5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpBdWRpb0ZpbGVSZWFkZXI6OmNyZWF0ZUJ1cyk6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0luYmFuZFRleHRUcmFja1ByaXZhdGVHU3RyZWFtZXIuaDoK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRl
R1N0cmVhbWVyLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlh
UGxheWVyUHJpdmF0ZUdTdHJlYW1lckJhc2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQ
bGF5ZXJQcml2YXRlR1N0cmVhbWVyQmFzZTo6dXBkYXRlVGV4dHVyZSk6CisgICAgICAgIChXZWJD
b3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJCYXNlOjp0cmlnZ2VyUmVwYWludCk6Cisg
ICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJCYXNlOjpwYWludCk6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhUGxheWVyUHJpdmF0
ZUdTdHJlYW1lckJhc2UuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIv
VHJhY2tQcml2YXRlQmFzZUdTdHJlYW1lci5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2dzdHJlYW1lci9WaWRlb1NpbmtHU3RyZWFtZXIuY3BwOgorICAgICAgICAod2Via2l0VmlkZW9T
aW5rVGltZW91dENhbGxiYWNrKToKKyAgICAgICAgKHdlYmtpdFZpZGVvU2lua1JlbmRlcik6Cisg
ICAgICAgICh1bmxvY2tCdWZmZXJNdXRleCk6CisgICAgICAgICh3ZWJraXRWaWRlb1NpbmtVbmxv
Y2tTdG9wKToKKyAgICAgICAgKHdlYmtpdFZpZGVvU2lua1N0YXJ0KToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvV2ViS2l0TWVkaWFTb3VyY2VHU3RyZWFtZXIuY3BwOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9XZWJLaXRXZWJTb3VyY2VHU3Ry
ZWFtZXIuY3BwOgorICAgICAgICAod2ViS2l0V2ViU3JjR2V0UHJvcGVydHkpOgorICAgICAgICAo
d2ViS2l0V2ViU3JjU3RvcCk6CisgICAgICAgICh3ZWJLaXRXZWJTcmNTdGFydCk6CisgICAgICAg
ICh3ZWJLaXRXZWJTcmNDaGFuZ2VTdGF0ZSk6CisgICAgICAgICh3ZWJLaXRXZWJTcmNRdWVyeVdp
dGhQYXJlbnQpOgorICAgICAgICAod2ViS2l0V2ViU3JjR2V0VXJpKToKKyAgICAgICAgKHdlYktp
dFdlYlNyY1NldFVyaSk6CisgICAgICAgICh3ZWJLaXRXZWJTcmNOZWVkRGF0YU1haW5DYik6Cisg
ICAgICAgICh3ZWJLaXRXZWJTcmNOZWVkRGF0YUNiKToKKyAgICAgICAgKHdlYktpdFdlYlNyY0Vu
b3VnaERhdGFNYWluQ2IpOgorICAgICAgICAod2ViS2l0V2ViU3JjRW5vdWdoRGF0YUNiKToKKyAg
ICAgICAgKHdlYktpdFdlYlNyY1NlZWtEYXRhQ2IpOgorICAgICAgICAod2ViS2l0V2ViU3JjU2V0
TWVkaWFQbGF5ZXIpOgorICAgICAgICAoU3RyZWFtaW5nQ2xpZW50OjpjcmVhdGVSZWFkQnVmZmVy
KToKKyAgICAgICAgKFN0cmVhbWluZ0NsaWVudDo6aGFuZGxlUmVzcG9uc2VSZWNlaXZlZCk6Cisg
ICAgICAgIChTdHJlYW1pbmdDbGllbnQ6OmhhbmRsZURhdGFSZWNlaXZlZCk6CisgICAgICAgIChT
dHJlYW1pbmdDbGllbnQ6OmhhbmRsZU5vdGlmeUZpbmlzaGVkKToKKyAgICAgICAgKFJlc291cmNl
SGFuZGxlU3RyZWFtaW5nQ2xpZW50Ojp3YXNCbG9ja2VkKToKKyAgICAgICAgKFJlc291cmNlSGFu
ZGxlU3RyZWFtaW5nQ2xpZW50OjpjYW5ub3RTaG93VVJMKToKKwogMjAxNC0wOS0xOSAgRGVhbiBK
YWNrc29uICA8ZGlub0BhcHBsZS5jb20+CiAKICAgICAgICAgTXVsdGl0aHJlYWRlZCBXZWJHTCBp
cyBhIGJhZCBpZGVhIC0gcmVtb3ZlIGl0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9hdWRpby9nc3RyZWFtZXIvQXVkaW9GaWxlUmVhZGVyR1N0cmVhbWVyLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL2dzdHJlYW1lci9BdWRpb0ZpbGVSZWFkZXJHU3RyZWFt
ZXIuY3BwCmluZGV4IDg1YWQ2YjcuLjA0YjhlYWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2F1ZGlvL2dzdHJlYW1lci9BdWRpb0ZpbGVSZWFkZXJHU3RyZWFtZXIuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL2dzdHJlYW1lci9BdWRpb0ZpbGVSZWFk
ZXJHU3RyZWFtZXIuY3BwCkBAIC0zMSw4ICszMSw4IEBACiAjaW5jbHVkZSA8Z3N0L2dzdC5oPgog
I2luY2x1ZGUgPGdzdC9wYnV0aWxzL3BidXRpbHMuaD4KICNpbmNsdWRlIDx3dGYvTm9uY29weWFi
bGUuaD4KLSNpbmNsdWRlIDx3dGYvZ29iamVjdC9HTWFpbkxvb3BTb3VyY2UuaD4KICNpbmNsdWRl
IDx3dGYvZ29iamVjdC9HUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL2dvYmplY3QvR1RocmVhZFNh
ZmVNYWluTG9vcFNvdXJjZS5oPgogI2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dVbmlxdWVQdHIuaD4K
IAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtMzM0LDcgKzMzNCw3IEBAIFBhc3NSZWZQdHI8QXVk
aW9CdXM+IEF1ZGlvRmlsZVJlYWRlcjo6Y3JlYXRlQnVzKGZsb2F0IHNhbXBsZVJhdGUsIGJvb2wg
bWl4VG9Nb25vCiAgICAgbV9sb29wID0gYWRvcHRHUmVmKGdfbWFpbl9sb29wX25ldyhjb250ZXh0
LmdldCgpLCBGQUxTRSkpOwogCiAgICAgLy8gU3RhcnQgdGhlIHBpcGVsaW5lIHByb2Nlc3Npbmcg
anVzdCBhZnRlciB0aGUgbG9vcCBpcyBzdGFydGVkLgotICAgIEdNYWluTG9vcFNvdXJjZSBzb3Vy
Y2U7CisgICAgR1RocmVhZFNhZmVNYWluTG9vcFNvdXJjZSBzb3VyY2U7CiAgICAgc291cmNlLnNj
aGVkdWxlKCJbV2ViS2l0XSBBdWRpb0ZpbGVSZWFkZXI6OmRlY29kZUF1ZGlvRm9yQnVzQ3JlYXRp
b24iLCBzdGQ6OmZ1bmN0aW9uPHZvaWQoKT4oc3RkOjpiaW5kKCZBdWRpb0ZpbGVSZWFkZXI6OmRl
Y29kZUF1ZGlvRm9yQnVzQ3JlYXRpb24sIHRoaXMpKSwgR19QUklPUklUWV9ERUZBVUxULCBudWxs
cHRyLCBjb250ZXh0LmdldCgpKTsKIAogICAgIGdfbWFpbl9sb29wX3J1bihtX2xvb3AuZ2V0KCkp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVy
L0luYmFuZFRleHRUcmFja1ByaXZhdGVHU3RyZWFtZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2dzdHJlYW1lci9JbmJhbmRUZXh0VHJhY2tQcml2YXRlR1N0cmVhbWVyLmgK
aW5kZXggYWYwMGE0My4uNjIyMmE2OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0luYmFuZFRleHRUcmFja1ByaXZhdGVHU3RyZWFtZXIuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvSW5iYW5kVGV4
dFRyYWNrUHJpdmF0ZUdTdHJlYW1lci5oCkBAIC0zMSw3ICszMSw3IEBACiAjaW5jbHVkZSAiR1Jl
ZlB0ckdTdHJlYW1lci5oIgogI2luY2x1ZGUgIkluYmFuZFRleHRUcmFja1ByaXZhdGUuaCIKICNp
bmNsdWRlICJUcmFja1ByaXZhdGVCYXNlR1N0cmVhbWVyLmgiCi0jaW5jbHVkZSA8d3RmL2dvYmpl
Y3QvR01haW5Mb29wU291cmNlLmg+CisjaW5jbHVkZSA8d3RmL2dvYmplY3QvR1RocmVhZFNhZmVN
YWluTG9vcFNvdXJjZS5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTYyLDggKzYyLDgg
QEAgcHVibGljOgogcHJpdmF0ZToKICAgICBJbmJhbmRUZXh0VHJhY2tQcml2YXRlR1N0cmVhbWVy
KGdpbnQgaW5kZXgsIEdSZWZQdHI8R3N0UGFkPik7CiAKLSAgICBHTWFpbkxvb3BTb3VyY2UgbV9z
YW1wbGVUaW1lckhhbmRsZXI7Ci0gICAgR01haW5Mb29wU291cmNlIG1fc3RyZWFtVGltZXJIYW5k
bGVyOworICAgIEdUaHJlYWRTYWZlTWFpbkxvb3BTb3VyY2UgbV9zYW1wbGVUaW1lckhhbmRsZXI7
CisgICAgR1RocmVhZFNhZmVNYWluTG9vcFNvdXJjZSBtX3N0cmVhbVRpbWVySGFuZGxlcjsKICAg
ICBndWxvbmcgbV9ldmVudFByb2JlOwogICAgIFZlY3RvcjxHUmVmUHRyPEdzdFNhbXBsZT4gPiBt
X3BlbmRpbmdTYW1wbGVzOwogICAgIFN0cmluZyBtX3N0cmVhbUlkOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhUGxheWVyUHJpdmF0
ZUdTdHJlYW1lci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVy
L01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lci5oCmluZGV4IDg3MDVkZGYuLjUwODQ5MjEgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9NZWRp
YVBsYXllclByaXZhdGVHU3RyZWFtZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyLmgKQEAgLTMzLDcg
KzMzLDcgQEAKICNpbmNsdWRlIDxnc3QvZ3N0Lmg+CiAjaW5jbHVkZSA8Z3N0L3BidXRpbHMvaW5z
dGFsbC1wbHVnaW5zLmg+CiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KLSNpbmNsdWRlIDx3dGYv
Z29iamVjdC9HTWFpbkxvb3BTb3VyY2UuaD4KKyNpbmNsdWRlIDx3dGYvZ29iamVjdC9HVGhyZWFk
U2FmZU1haW5Mb29wU291cmNlLmg+CiAKICNpZiBFTkFCTEUoVklERU9fVFJBQ0spICYmIFVTRShH
U1RSRUFNRVJfTVBFR1RTKQogI2luY2x1ZGUgPHd0Zi90ZXh0L0F0b21pY1N0cmluZ0hhc2guaD4K
QEAgLTIwMiwxMSArMjAyLDExIEBAIHByaXZhdGU6CiAgICAgYm9vbCBtX3ZvbHVtZUFuZE11dGVJ
bml0aWFsaXplZDsKICAgICBib29sIG1faGFzVmlkZW87CiAgICAgYm9vbCBtX2hhc0F1ZGlvOwot
ICAgIEdNYWluTG9vcFNvdXJjZSBtX2F1ZGlvVGltZXJIYW5kbGVyOwotICAgIEdNYWluTG9vcFNv
dXJjZSBtX3RleHRUaW1lckhhbmRsZXI7Ci0gICAgR01haW5Mb29wU291cmNlIG1fdmlkZW9UaW1l
ckhhbmRsZXI7Ci0gICAgR01haW5Mb29wU291cmNlIG1fdmlkZW9DYXBzVGltZXJIYW5kbGVyOwot
ICAgIEdNYWluTG9vcFNvdXJjZSBtX3JlYWR5VGltZXJIYW5kbGVyOworICAgIEdUaHJlYWRTYWZl
TWFpbkxvb3BTb3VyY2UgbV9hdWRpb1RpbWVySGFuZGxlcjsKKyAgICBHVGhyZWFkU2FmZU1haW5M
b29wU291cmNlIG1fdGV4dFRpbWVySGFuZGxlcjsKKyAgICBHVGhyZWFkU2FmZU1haW5Mb29wU291
cmNlIG1fdmlkZW9UaW1lckhhbmRsZXI7CisgICAgR1RocmVhZFNhZmVNYWluTG9vcFNvdXJjZSBt
X3ZpZGVvQ2Fwc1RpbWVySGFuZGxlcjsKKyAgICBHVGhyZWFkU2FmZU1haW5Mb29wU291cmNlIG1f
cmVhZHlUaW1lckhhbmRsZXI7CiAgICAgbXV0YWJsZSBsb25nIG1fdG90YWxCeXRlczsKICAgICBV
UkwgbV91cmw7CiAgICAgYm9vbCBtX3ByZXNlcnZlc1BpdGNoOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhUGxheWVyUHJpdmF0ZUdT
dHJlYW1lckJhc2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVh
bWVyL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lckJhc2UuY3BwCmluZGV4IDZjZTk0OWUuLjc1
MDZlMzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJl
YW1lci9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJCYXNlLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVh
bWVyQmFzZS5jcHAKQEAgLTI3NSw3ICsyNzUsNyBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdT
dHJlYW1lckJhc2U6Om11dGVDaGFuZ2VkKCkKICNpZiBVU0UoVEVYVFVSRV9NQVBQRVJfR0wpICYm
ICFVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCiBQYXNzUmVmUHRyPEJpdG1hcFRleHR1cmU+IE1l
ZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lckJhc2U6OnVwZGF0ZVRleHR1cmUoVGV4dHVyZU1hcHBl
ciogdGV4dHVyZU1hcHBlcikKIHsKLSAgICBHTXV0ZXhMb2NrZXIgbG9jayhtX2J1ZmZlck11dGV4
KTsKKyAgICBHTXV0ZXhMb2NrZXI8R011dGV4PiBsb2NrKG1fYnVmZmVyTXV0ZXgpOwogICAgIGlm
ICghbV9idWZmZXIpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCkBAIC0zMjUsNyArMzI1LDcg
QEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJCYXNlOjp0cmlnZ2VyUmVwYWludChH
c3RCdWZmZXIqIGJ1ZmZlcikKICAgICBnX3JldHVybl9pZl9mYWlsKEdTVF9JU19CVUZGRVIoYnVm
ZmVyKSk7CiAKICAgICB7Ci0gICAgICAgIEdNdXRleExvY2tlciBsb2NrKG1fYnVmZmVyTXV0ZXgp
OworICAgICAgICBHTXV0ZXhMb2NrZXI8R011dGV4PiBsb2NrKG1fYnVmZmVyTXV0ZXgpOwogICAg
ICAgICBnc3RfYnVmZmVyX3JlcGxhY2UoJm1fYnVmZmVyLCBidWZmZXIpOwogICAgIH0KIApAQCAt
MzU3LDcgKzM1Nyw3IEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyQmFzZTo6cGFp
bnQoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBJbnRSCiAgICAgaWYgKCFtX3BsYXll
ci0+dmlzaWJsZSgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBHTXV0ZXhMb2NrZXIgbG9jayht
X2J1ZmZlck11dGV4KTsKKyAgICBHTXV0ZXhMb2NrZXI8R011dGV4PiBsb2NrKG1fYnVmZmVyTXV0
ZXgpOwogICAgIGlmICghbV9idWZmZXIpCiAgICAgICAgIHJldHVybjsKIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhUGxheWVyUHJp
dmF0ZUdTdHJlYW1lckJhc2UuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dz
dHJlYW1lci9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJCYXNlLmgKaW5kZXggM2ExMDg2MS4u
NDYwZTg2MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0
cmVhbWVyL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lckJhc2UuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVh
bWVyQmFzZS5oCkBAIC0zMCw3ICszMCw3IEBACiAjaW5jbHVkZSA8Z2xpYi5oPgogCiAjaW5jbHVk
ZSA8d3RmL0ZvcndhcmQuaD4KLSNpbmNsdWRlIDx3dGYvZ29iamVjdC9HTWFpbkxvb3BTb3VyY2Uu
aD4KKyNpbmNsdWRlIDx3dGYvZ29iamVjdC9HVGhyZWFkU2FmZU1haW5Mb29wU291cmNlLmg+CiAK
ICNpZiBVU0UoVEVYVFVSRV9NQVBQRVJfR0wpICYmICFVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1Mp
CiAjaW5jbHVkZSAiVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXIuaCIKQEAgLTEyNSw4ICsxMjUs
OCBAQCBwcm90ZWN0ZWQ6CiAgICAgSW50U2l6ZSBtX3NpemU7CiAgICAgR011dGV4IG1fYnVmZmVy
TXV0ZXg7CiAgICAgR3N0QnVmZmVyKiBtX2J1ZmZlcjsKLSAgICBHTWFpbkxvb3BTb3VyY2UgbV92
b2x1bWVUaW1lckhhbmRsZXI7Ci0gICAgR01haW5Mb29wU291cmNlIG1fbXV0ZVRpbWVySGFuZGxl
cjsKKyAgICBHVGhyZWFkU2FmZU1haW5Mb29wU291cmNlIG1fdm9sdW1lVGltZXJIYW5kbGVyOwor
ICAgIEdUaHJlYWRTYWZlTWFpbkxvb3BTb3VyY2UgbV9tdXRlVGltZXJIYW5kbGVyOwogICAgIHVu
c2lnbmVkIGxvbmcgbV9yZXBhaW50SGFuZGxlcjsKICAgICB1bnNpZ25lZCBsb25nIG1fdm9sdW1l
U2lnbmFsSGFuZGxlcjsKICAgICB1bnNpZ25lZCBsb25nIG1fbXV0ZVNpZ25hbEhhbmRsZXI7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvVHJh
Y2tQcml2YXRlQmFzZUdTdHJlYW1lci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZ3N0cmVhbWVyL1RyYWNrUHJpdmF0ZUJhc2VHU3RyZWFtZXIuaAppbmRleCAzN2M5MWQ3Li45
ZTY4MDkxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3Ry
ZWFtZXIvVHJhY2tQcml2YXRlQmFzZUdTdHJlYW1lci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9UcmFja1ByaXZhdGVCYXNlR1N0cmVhbWVyLmgKQEAg
LTMwLDcgKzMwLDcgQEAKIAogI2luY2x1ZGUgIkdSZWZQdHJHU3RyZWFtZXIuaCIKICNpbmNsdWRl
IDx3dGYvVGhyZWFkaW5nUHJpbWl0aXZlcy5oPgotI2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dNYWlu
TG9vcFNvdXJjZS5oPgorI2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dUaHJlYWRTYWZlTWFpbkxvb3BT
b3VyY2UuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogbmFtZXNwYWNlIFdl
YkNvcmUgewpAQCAtNzAsOCArNzAsOCBAQCBwcml2YXRlOgogICAgIGJvb2wgZ2V0VGFnKEdzdFRh
Z0xpc3QqIHRhZ3MsIGNvbnN0IGdjaGFyKiB0YWdOYW1lLCBTdHJpbmdUeXBlJiB2YWx1ZSk7CiAK
ICAgICBUcmFja1ByaXZhdGVCYXNlKiBtX293bmVyOwotICAgIEdNYWluTG9vcFNvdXJjZSBtX2Fj
dGl2ZVRpbWVySGFuZGxlcjsKLSAgICBHTWFpbkxvb3BTb3VyY2UgbV90YWdUaW1lckhhbmRsZXI7
CisgICAgR1RocmVhZFNhZmVNYWluTG9vcFNvdXJjZSBtX2FjdGl2ZVRpbWVySGFuZGxlcjsKKyAg
ICBHVGhyZWFkU2FmZU1haW5Mb29wU291cmNlIG1fdGFnVGltZXJIYW5kbGVyOwogCiAgICAgTXV0
ZXggbV90YWdNdXRleDsKICAgICBHUmVmUHRyPEdzdFRhZ0xpc3Q+IG1fdGFnczsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9WaWRlb1NpbmtH
U3RyZWFtZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVy
L1ZpZGVvU2lua0dTdHJlYW1lci5jcHAKaW5kZXggMTkwZTc1MS4uN2NiMTkzZSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL1ZpZGVvU2lua0dT
dHJlYW1lci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVh
bWVyL1ZpZGVvU2lua0dTdHJlYW1lci5jcHAKQEAgLTM2LDggKzM2LDggQEAKICNpbmNsdWRlIDxn
c3QvZ3N0Lmg+CiAjaW5jbHVkZSA8Z3N0L3ZpZGVvL2dzdHZpZGVvbWV0YS5oPgogI2luY2x1ZGUg
PHd0Zi9Pd25QdHIuaD4KLSNpbmNsdWRlIDx3dGYvZ29iamVjdC9HTWFpbkxvb3BTb3VyY2UuaD4K
ICNpbmNsdWRlIDx3dGYvZ29iamVjdC9HTXV0ZXhMb2NrZXIuaD4KKyNpbmNsdWRlIDx3dGYvZ29i
amVjdC9HVGhyZWFkU2FmZU1haW5Mb29wU291cmNlLmg+CiAKIHVzaW5nIG5hbWVzcGFjZSBXZWJD
b3JlOwogCkBAIC04OCw3ICs4OCw3IEBAIHN0cnVjdCBfV2ViS2l0VmlkZW9TaW5rUHJpdmF0ZSB7
CiAgICAgfQogCiAgICAgR3N0QnVmZmVyKiBidWZmZXI7Ci0gICAgR01haW5Mb29wU291cmNlIHRp
bWVvdXRTb3VyY2U7CisgICAgR1RocmVhZFNhZmVNYWluTG9vcFNvdXJjZSB0aW1lb3V0U291cmNl
OwogICAgIEdNdXRleCBidWZmZXJNdXRleDsKICAgICBHQ29uZCBkYXRhQ29uZGl0aW9uOwogCkBA
IC0xMjEsNyArMTIxLDcgQEAgc3RhdGljIHZvaWQgd2Via2l0VmlkZW9TaW5rVGltZW91dENhbGxi
YWNrKFdlYktpdFZpZGVvU2luayogc2luaykKIHsKICAgICBXZWJLaXRWaWRlb1NpbmtQcml2YXRl
KiBwcml2ID0gc2luay0+cHJpdjsKIAotICAgIEdNdXRleExvY2tlciBsb2NrKHByaXYtPmJ1ZmZl
ck11dGV4KTsKKyAgICBHTXV0ZXhMb2NrZXI8R011dGV4PiBsb2NrKHByaXYtPmJ1ZmZlck11dGV4
KTsKICAgICBHc3RCdWZmZXIqIGJ1ZmZlciA9IHByaXYtPmJ1ZmZlcjsKICAgICBwcml2LT5idWZm
ZXIgPSAwOwogCkBAIC0xNDAsNyArMTQwLDcgQEAgc3RhdGljIEdzdEZsb3dSZXR1cm4gd2Via2l0
VmlkZW9TaW5rUmVuZGVyKEdzdEJhc2VTaW5rKiBiYXNlU2luaywgR3N0QnVmZmVyKiBidWYKICAg
ICBXZWJLaXRWaWRlb1NpbmsqIHNpbmsgPSBXRUJLSVRfVklERU9fU0lOSyhiYXNlU2luayk7CiAg
ICAgV2ViS2l0VmlkZW9TaW5rUHJpdmF0ZSogcHJpdiA9IHNpbmstPnByaXY7CiAKLSAgICBHTXV0
ZXhMb2NrZXIgbG9jayhwcml2LT5idWZmZXJNdXRleCk7CisgICAgR011dGV4TG9ja2VyPEdNdXRl
eD4gbG9jayhwcml2LT5idWZmZXJNdXRleCk7CiAKICAgICBpZiAocHJpdi0+dW5sb2NrZWQpCiAg
ICAgICAgIHJldHVybiBHU1RfRkxPV19PSzsKQEAgLTI1Nyw3ICsyNTcsNyBAQCBzdGF0aWMgdm9p
ZCB3ZWJraXRWaWRlb1NpbmtHZXRQcm9wZXJ0eShHT2JqZWN0KiBvYmplY3QsIGd1aW50IHByb3Bl
cnR5SWQsIEdWYWx1ZQogCiBzdGF0aWMgdm9pZCB1bmxvY2tCdWZmZXJNdXRleChXZWJLaXRWaWRl
b1NpbmtQcml2YXRlKiBwcml2KQogewotICAgIEdNdXRleExvY2tlciBsb2NrKHByaXYtPmJ1ZmZl
ck11dGV4KTsKKyAgICBHTXV0ZXhMb2NrZXI8R011dGV4PiBsb2NrKHByaXYtPmJ1ZmZlck11dGV4
KTsKIAogICAgIGlmIChwcml2LT5idWZmZXIpIHsKICAgICAgICAgZ3N0X2J1ZmZlcl91bnJlZihw
cml2LT5idWZmZXIpOwpAQCAtMjgzLDcgKzI4Myw3IEBAIHN0YXRpYyBnYm9vbGVhbiB3ZWJraXRW
aWRlb1NpbmtVbmxvY2tTdG9wKEdzdEJhc2VTaW5rKiBiYXNlU2luaykKICAgICBXZWJLaXRWaWRl
b1NpbmtQcml2YXRlKiBwcml2ID0gV0VCS0lUX1ZJREVPX1NJTksoYmFzZVNpbmspLT5wcml2Owog
CiAgICAgewotICAgICAgICBHTXV0ZXhMb2NrZXIgbG9jayhwcml2LT5idWZmZXJNdXRleCk7Cisg
ICAgICAgIEdNdXRleExvY2tlcjxHTXV0ZXg+IGxvY2socHJpdi0+YnVmZmVyTXV0ZXgpOwogICAg
ICAgICBwcml2LT51bmxvY2tlZCA9IGZhbHNlOwogICAgIH0KIApAQCAtMzA4LDcgKzMwOCw3IEBA
IHN0YXRpYyBnYm9vbGVhbiB3ZWJraXRWaWRlb1NpbmtTdGFydChHc3RCYXNlU2luayogYmFzZVNp
bmspCiB7CiAgICAgV2ViS2l0VmlkZW9TaW5rUHJpdmF0ZSogcHJpdiA9IFdFQktJVF9WSURFT19T
SU5LKGJhc2VTaW5rKS0+cHJpdjsKIAotICAgIEdNdXRleExvY2tlciBsb2NrKHByaXYtPmJ1ZmZl
ck11dGV4KTsKKyAgICBHTXV0ZXhMb2NrZXI8R011dGV4PiBsb2NrKHByaXYtPmJ1ZmZlck11dGV4
KTsKICAgICBwcml2LT51bmxvY2tlZCA9IGZhbHNlOwogICAgIHJldHVybiBUUlVFOwogfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL1dlYktp
dE1lZGlhU291cmNlR1N0cmVhbWVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2dzdHJlYW1lci9XZWJLaXRNZWRpYVNvdXJjZUdTdHJlYW1lci5jcHAKaW5kZXggYjhhZTJm
MS4uODIwZjYxYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Z3N0cmVhbWVyL1dlYktpdE1lZGlhU291cmNlR1N0cmVhbWVyLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvV2ViS2l0TWVkaWFTb3VyY2VHU3RyZWFt
ZXIuY3BwCkBAIC0zMCw3ICszMCw3IEBACiAjaW5jbHVkZSA8Z3N0L2FwcC9nc3RhcHBzcmMuaD4K
ICNpbmNsdWRlIDxnc3QvZ3N0Lmg+CiAjaW5jbHVkZSA8Z3N0L3BidXRpbHMvbWlzc2luZy1wbHVn
aW5zLmg+Ci0jaW5jbHVkZSA8d3RmL2dvYmplY3QvR01haW5Mb29wU291cmNlLmg+CisjaW5jbHVk
ZSA8d3RmL2dvYmplY3QvR1RocmVhZFNhZmVNYWluTG9vcFNvdXJjZS5oPgogI2luY2x1ZGUgPHd0
Zi9nb2JqZWN0L0dVbmlxdWVQdHIuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CiAK
QEAgLTQ0LDExICs0NCwxMSBAQCB0eXBlZGVmIHN0cnVjdCBfU291cmNlIHsKICAgICBndWludDY0
IHNpemU7CiAgICAgZ2Jvb2xlYW4gcGF1c2VkOwogCi0gICAgR01haW5Mb29wU291cmNlIHN0YXJ0
OwotICAgIEdNYWluTG9vcFNvdXJjZSBzdG9wOwotICAgIEdNYWluTG9vcFNvdXJjZSBuZWVkRGF0
YTsKLSAgICBHTWFpbkxvb3BTb3VyY2UgZW5vdWdoRGF0YTsKLSAgICBHTWFpbkxvb3BTb3VyY2Ug
c2VlazsKKyAgICBHVGhyZWFkU2FmZU1haW5Mb29wU291cmNlIHN0YXJ0OworICAgIEdUaHJlYWRT
YWZlTWFpbkxvb3BTb3VyY2Ugc3RvcDsKKyAgICBHVGhyZWFkU2FmZU1haW5Mb29wU291cmNlIG5l
ZWREYXRhOworICAgIEdUaHJlYWRTYWZlTWFpbkxvb3BTb3VyY2UgZW5vdWdoRGF0YTsKKyAgICBH
VGhyZWFkU2FmZU1haW5Mb29wU291cmNlIHNlZWs7CiAKICAgICBndWludDY0IHJlcXVlc3RlZE9m
ZnNldDsKIH0gU291cmNlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZ3N0cmVhbWVyL1dlYktpdFdlYlNvdXJjZUdTdHJlYW1lci5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvV2ViS2l0V2ViU291cmNlR1N0cmVhbWVy
LmNwcAppbmRleCBjNzFkM2MzLi5lZWRmODZkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvV2ViS2l0V2ViU291cmNlR1N0cmVhbWVyLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvV2ViS2l0V2Vi
U291cmNlR1N0cmVhbWVyLmNwcApAQCAtNDMsOSArNDMsOSBAQAogI2luY2x1ZGUgPGdzdC9nc3Qu
aD4KICNpbmNsdWRlIDxnc3QvcGJ1dGlscy9taXNzaW5nLXBsdWdpbnMuaD4KICNpbmNsdWRlIDx3
dGYvTm9uY29weWFibGUuaD4KLSNpbmNsdWRlIDx3dGYvZ29iamVjdC9HTWFpbkxvb3BTb3VyY2Uu
aD4KICNpbmNsdWRlIDx3dGYvZ29iamVjdC9HTXV0ZXhMb2NrZXIuaD4KICNpbmNsdWRlIDx3dGYv
Z29iamVjdC9HUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL2dvYmplY3QvR1RocmVhZFNhZmVNYWlu
TG9vcFNvdXJjZS5oPgogI2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dVbmlxdWVQdHIuaD4KICNpbmNs
dWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CiAKQEAgLTEzOSwxMSArMTM5LDExIEBAIHN0cnVjdCBf
V2ViS2l0V2ViU3JjUHJpdmF0ZSB7CiAKICAgICBndWludDY0IHJlcXVlc3RlZE9mZnNldDsKIAot
ICAgIEdNYWluTG9vcFNvdXJjZSBzdGFydFNvdXJjZTsKLSAgICBHTWFpbkxvb3BTb3VyY2Ugc3Rv
cFNvdXJjZTsKLSAgICBHTWFpbkxvb3BTb3VyY2UgbmVlZERhdGFTb3VyY2U7Ci0gICAgR01haW5M
b29wU291cmNlIGVub3VnaERhdGFTb3VyY2U7Ci0gICAgR01haW5Mb29wU291cmNlIHNlZWtTb3Vy
Y2U7CisgICAgR1RocmVhZFNhZmVNYWluTG9vcFNvdXJjZSBzdGFydFNvdXJjZTsKKyAgICBHVGhy
ZWFkU2FmZU1haW5Mb29wU291cmNlIHN0b3BTb3VyY2U7CisgICAgR1RocmVhZFNhZmVNYWluTG9v
cFNvdXJjZSBuZWVkRGF0YVNvdXJjZTsKKyAgICBHVGhyZWFkU2FmZU1haW5Mb29wU291cmNlIGVu
b3VnaERhdGFTb3VyY2U7CisgICAgR1RocmVhZFNhZmVNYWluTG9vcFNvdXJjZSBzZWVrU291cmNl
OwogCiAgICAgR1JlZlB0cjxHc3RCdWZmZXI+IGJ1ZmZlcjsKIApAQCAtMzUyLDcgKzM1Miw3IEBA
IHN0YXRpYyB2b2lkIHdlYktpdFdlYlNyY0dldFByb3BlcnR5KEdPYmplY3QqIG9iamVjdCwgZ3Vp
bnQgcHJvcElELCBHVmFsdWUqIHZhbHVlCiAgICAgV2ViS2l0V2ViU3JjKiBzcmMgPSBXRUJLSVRf
V0VCX1NSQyhvYmplY3QpOwogICAgIFdlYktpdFdlYlNyY1ByaXZhdGUqIHByaXYgPSBzcmMtPnBy
aXY7CiAKLSAgICBHTXV0ZXhMb2NrZXIgbG9ja2VyKCpHU1RfT0JKRUNUX0dFVF9MT0NLKHNyYykp
OworICAgIEdNdXRleExvY2tlcjxHTXV0ZXg+IGxvY2tlcigqR1NUX09CSkVDVF9HRVRfTE9DSyhz
cmMpKTsKICAgICBzd2l0Y2ggKHByb3BJRCkgewogICAgIGNhc2UgUFJPUF9JUkFESU9fTkFNRToK
ICAgICAgICAgZ192YWx1ZV9zZXRfc3RyaW5nKHZhbHVlLCBwcml2LT5pcmFkaW9OYW1lKTsKQEAg
LTM5MSw3ICszOTEsNyBAQCBzdGF0aWMgdm9pZCB3ZWJLaXRXZWJTcmNTdG9wKFdlYktpdFdlYlNy
Yyogc3JjKQogCiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKIAotICAgIEdNdXRleExvY2tl
ciBsb2NrZXIoKkdTVF9PQkpFQ1RfR0VUX0xPQ0soc3JjKSk7CisgICAgR011dGV4TG9ja2VyPEdN
dXRleD4gbG9ja2VyKCpHU1RfT0JKRUNUX0dFVF9MT0NLKHNyYykpOwogCiAgICAgYm9vbCBzZWVr
aW5nID0gcHJpdi0+c2Vla1NvdXJjZS5pc0FjdGl2ZSgpOwogCkBAIC00NDcsNyArNDQ3LDcgQEAg
c3RhdGljIHZvaWQgd2ViS2l0V2ViU3JjU3RhcnQoV2ViS2l0V2ViU3JjKiBzcmMpCiAKICAgICBB
U1NFUlQoaXNNYWluVGhyZWFkKCkpOwogCi0gICAgR011dGV4TG9ja2VyIGxvY2tlcigqR1NUX09C
SkVDVF9HRVRfTE9DSyhzcmMpKTsKKyAgICBHTXV0ZXhMb2NrZXI8R011dGV4PiBsb2NrZXIoKkdT
VF9PQkpFQ1RfR0VUX0xPQ0soc3JjKSk7CiAKICAgICBwcml2LT5jb3JzQWNjZXNzQ2hlY2sgPSBD
T1JTTm9DaGVjazsKIApAQCAtNTM5LDcgKzUzOSw3IEBAIHN0YXRpYyBHc3RTdGF0ZUNoYW5nZVJl
dHVybiB3ZWJLaXRXZWJTcmNDaGFuZ2VTdGF0ZShHc3RFbGVtZW50KiBlbGVtZW50LCBHc3RTdGF0
CiAgICAgICAgIHJldHVybiByZXQ7CiAgICAgfQogCi0gICAgR011dGV4TG9ja2VyIGxvY2tlcigq
R1NUX09CSkVDVF9HRVRfTE9DSyhzcmMpKTsKKyAgICBHTXV0ZXhMb2NrZXI8R011dGV4PiBsb2Nr
ZXIoKkdTVF9PQkpFQ1RfR0VUX0xPQ0soc3JjKSk7CiAgICAgc3dpdGNoICh0cmFuc2l0aW9uKSB7
CiAgICAgY2FzZSBHU1RfU1RBVEVfQ0hBTkdFX1JFQURZX1RPX1BBVVNFRDoKICAgICAgICAgR1NU
X0RFQlVHX09CSkVDVChzcmMsICJSRUFEWS0+UEFVU0VEIik7CkBAIC01NzQsNyArNTc0LDcgQEAg
c3RhdGljIGdib29sZWFuIHdlYktpdFdlYlNyY1F1ZXJ5V2l0aFBhcmVudChHc3RQYWQqIHBhZCwg
R3N0T2JqZWN0KiBwYXJlbnQsIEdzdFEKICAgICAgICAgZ3N0X3F1ZXJ5X3BhcnNlX2R1cmF0aW9u
KHF1ZXJ5LCAmZm9ybWF0LCBOVUxMKTsKIAogICAgICAgICBHU1RfREVCVUdfT0JKRUNUKHNyYywg
ImR1cmF0aW9uIHF1ZXJ5IGluIGZvcm1hdCAlcyIsIGdzdF9mb3JtYXRfZ2V0X25hbWUoZm9ybWF0
KSk7Ci0gICAgICAgIEdNdXRleExvY2tlciBsb2NrZXIoKkdTVF9PQkpFQ1RfR0VUX0xPQ0soc3Jj
KSk7CisgICAgICAgIEdNdXRleExvY2tlcjxHTXV0ZXg+IGxvY2tlcigqR1NUX09CSkVDVF9HRVRf
TE9DSyhzcmMpKTsKICAgICAgICAgaWYgKGZvcm1hdCA9PSBHU1RfRk9STUFUX0JZVEVTICYmIHNy
Yy0+cHJpdi0+c2l6ZSA+IDApIHsKICAgICAgICAgICAgIGdzdF9xdWVyeV9zZXRfZHVyYXRpb24o
cXVlcnksIGZvcm1hdCwgc3JjLT5wcml2LT5zaXplKTsKICAgICAgICAgICAgIHJlc3VsdCA9IFRS
VUU7CkBAIC01ODIsNyArNTgyLDcgQEAgc3RhdGljIGdib29sZWFuIHdlYktpdFdlYlNyY1F1ZXJ5
V2l0aFBhcmVudChHc3RQYWQqIHBhZCwgR3N0T2JqZWN0KiBwYXJlbnQsIEdzdFEKICAgICAgICAg
YnJlYWs7CiAgICAgfQogICAgIGNhc2UgR1NUX1FVRVJZX1VSSTogewotICAgICAgICBHTXV0ZXhM
b2NrZXIgbG9ja2VyKCpHU1RfT0JKRUNUX0dFVF9MT0NLKHNyYykpOworICAgICAgICBHTXV0ZXhM
b2NrZXI8R011dGV4PiBsb2NrZXIoKkdTVF9PQkpFQ1RfR0VUX0xPQ0soc3JjKSk7CiAgICAgICAg
IGdzdF9xdWVyeV9zZXRfdXJpKHF1ZXJ5LCBzcmMtPnByaXYtPnVyaSk7CiAgICAgICAgIHJlc3Vs
dCA9IFRSVUU7CiAgICAgICAgIGJyZWFrOwpAQCAtNjIzLDcgKzYyMyw3IEBAIHN0YXRpYyBnY2hh
ciogd2ViS2l0V2ViU3JjR2V0VXJpKEdzdFVSSUhhbmRsZXIqIGhhbmRsZXIpCiAgICAgV2ViS2l0
V2ViU3JjKiBzcmMgPSBXRUJLSVRfV0VCX1NSQyhoYW5kbGVyKTsKICAgICBnY2hhciogcmV0Owog
Ci0gICAgR011dGV4TG9ja2VyIGxvY2tlcigqR1NUX09CSkVDVF9HRVRfTE9DSyhzcmMpKTsKKyAg
ICBHTXV0ZXhMb2NrZXI8R011dGV4PiBsb2NrZXIoKkdTVF9PQkpFQ1RfR0VUX0xPQ0soc3JjKSk7
CiAgICAgcmV0ID0gZ19zdHJkdXAoc3JjLT5wcml2LT51cmkpOwogICAgIHJldHVybiByZXQ7CiB9
CkBAIC02MzgsNyArNjM4LDcgQEAgc3RhdGljIGdib29sZWFuIHdlYktpdFdlYlNyY1NldFVyaShH
c3RVUklIYW5kbGVyKiBoYW5kbGVyLCBjb25zdCBnY2hhciogdXJpLCBHRXIKICAgICAgICAgcmV0
dXJuIEZBTFNFOwogICAgIH0KIAotICAgIEdNdXRleExvY2tlciBsb2NrZXIoKkdTVF9PQkpFQ1Rf
R0VUX0xPQ0soc3JjKSk7CisgICAgR011dGV4TG9ja2VyPEdNdXRleD4gbG9ja2VyKCpHU1RfT0JK
RUNUX0dFVF9MT0NLKHNyYykpOwogCiAgICAgZ19mcmVlKHByaXYtPnVyaSk7CiAgICAgcHJpdi0+
dXJpID0gMDsKQEAgLTY3NCw3ICs2NzQsNyBAQCBzdGF0aWMgdm9pZCB3ZWJLaXRXZWJTcmNOZWVk
RGF0YU1haW5DYihXZWJLaXRXZWJTcmMqIHNyYykKIAogICAgIEFTU0VSVChpc01haW5UaHJlYWQo
KSk7CiAKLSAgICBHTXV0ZXhMb2NrZXIgbG9ja2VyKCpHU1RfT0JKRUNUX0dFVF9MT0NLKHNyYykp
OworICAgIEdNdXRleExvY2tlcjxHTXV0ZXg+IGxvY2tlcigqR1NUX09CSkVDVF9HRVRfTE9DSyhz
cmMpKTsKICAgICBwcml2LT5wYXVzZWQgPSBGQUxTRTsKICAgICBsb2NrZXIudW5sb2NrKCk7CiAK
QEAgLTY4OSw3ICs2ODksNyBAQCBzdGF0aWMgdm9pZCB3ZWJLaXRXZWJTcmNOZWVkRGF0YUNiKEdz
dEFwcFNyYyosIGd1aW50IGxlbmd0aCwgZ3BvaW50ZXIgdXNlckRhdGEpCiAKICAgICBHU1RfREVC
VUdfT0JKRUNUKHNyYywgIk5lZWQgbW9yZSBkYXRhOiAldSIsIGxlbmd0aCk7CiAKLSAgICBHTXV0
ZXhMb2NrZXIgbG9ja2VyKCpHU1RfT0JKRUNUX0dFVF9MT0NLKHNyYykpOworICAgIEdNdXRleExv
Y2tlcjxHTXV0ZXg+IGxvY2tlcigqR1NUX09CSkVDVF9HRVRfTE9DSyhzcmMpKTsKICAgICBpZiAo
cHJpdi0+bmVlZERhdGFTb3VyY2UuaXNTY2hlZHVsZWQoKSB8fCAhcHJpdi0+cGF1c2VkKQogICAg
ICAgICByZXR1cm47CiAKQEAgLTcwNCw3ICs3MDQsNyBAQCBzdGF0aWMgdm9pZCB3ZWJLaXRXZWJT
cmNFbm91Z2hEYXRhTWFpbkNiKFdlYktpdFdlYlNyYyogc3JjKQogCiAgICAgQVNTRVJUKGlzTWFp
blRocmVhZCgpKTsKIAotICAgIEdNdXRleExvY2tlciBsb2NrZXIoKkdTVF9PQkpFQ1RfR0VUX0xP
Q0soc3JjKSk7CisgICAgR011dGV4TG9ja2VyPEdNdXRleD4gbG9ja2VyKCpHU1RfT0JKRUNUX0dF
VF9MT0NLKHNyYykpOwogICAgIHByaXYtPnBhdXNlZCA9IFRSVUU7CiAgICAgbG9ja2VyLnVubG9j
aygpOwogCkBAIC03MTksNyArNzE5LDcgQEAgc3RhdGljIHZvaWQgd2ViS2l0V2ViU3JjRW5vdWdo
RGF0YUNiKEdzdEFwcFNyYyosIGdwb2ludGVyIHVzZXJEYXRhKQogCiAgICAgR1NUX0RFQlVHX09C
SkVDVChzcmMsICJIYXZlIGVub3VnaCBkYXRhIik7CiAKLSAgICBHTXV0ZXhMb2NrZXIgbG9ja2Vy
KCpHU1RfT0JKRUNUX0dFVF9MT0NLKHNyYykpOworICAgIEdNdXRleExvY2tlcjxHTXV0ZXg+IGxv
Y2tlcigqR1NUX09CSkVDVF9HRVRfTE9DSyhzcmMpKTsKICAgICBpZiAocHJpdi0+ZW5vdWdoRGF0
YVNvdXJjZS5pc1NjaGVkdWxlZCgpIHx8IHByaXYtPnBhdXNlZCkKICAgICAgICAgcmV0dXJuOwog
CkBAIC03NDIsNyArNzQyLDcgQEAgc3RhdGljIGdib29sZWFuIHdlYktpdFdlYlNyY1NlZWtEYXRh
Q2IoR3N0QXBwU3JjKiwgZ3VpbnQ2NCBvZmZzZXQsIGdwb2ludGVyIHVzZXIKICAgICBXZWJLaXRX
ZWJTcmNQcml2YXRlKiBwcml2ID0gc3JjLT5wcml2OwogCiAgICAgR1NUX0RFQlVHX09CSkVDVChz
cmMsICJTZWVraW5nIHRvIG9mZnNldDogJSIgR19HVUlOVDY0X0ZPUk1BVCwgb2Zmc2V0KTsKLSAg
ICBHTXV0ZXhMb2NrZXIgbG9ja2VyKCpHU1RfT0JKRUNUX0dFVF9MT0NLKHNyYykpOworICAgIEdN
dXRleExvY2tlcjxHTXV0ZXg+IGxvY2tlcigqR1NUX09CSkVDVF9HRVRfTE9DSyhzcmMpKTsKICAg
ICBpZiAob2Zmc2V0ID09IHByaXYtPm9mZnNldCAmJiBwcml2LT5yZXF1ZXN0ZWRPZmZzZXQgPT0g
cHJpdi0+b2Zmc2V0KQogICAgICAgICByZXR1cm4gVFJVRTsKIApAQCAtNzYxLDcgKzc2MSw3IEBA
IHN0YXRpYyBnYm9vbGVhbiB3ZWJLaXRXZWJTcmNTZWVrRGF0YUNiKEdzdEFwcFNyYyosIGd1aW50
NjQgb2Zmc2V0LCBncG9pbnRlciB1c2VyCiB2b2lkIHdlYktpdFdlYlNyY1NldE1lZGlhUGxheWVy
KFdlYktpdFdlYlNyYyogc3JjLCBXZWJDb3JlOjpNZWRpYVBsYXllciogcGxheWVyKQogewogICAg
IEFTU0VSVChwbGF5ZXIpOwotICAgIEdNdXRleExvY2tlciBsb2NrZXIoKkdTVF9PQkpFQ1RfR0VU
X0xPQ0soc3JjKSk7CisgICAgR011dGV4TG9ja2VyPEdNdXRleD4gbG9ja2VyKCpHU1RfT0JKRUNU
X0dFVF9MT0NLKHNyYykpOwogICAgIHNyYy0+cHJpdi0+cGxheWVyID0gcGxheWVyOwogfQogCkBA
IC03OTEsNyArNzkxLDcgQEAgY2hhciogU3RyZWFtaW5nQ2xpZW50OjpjcmVhdGVSZWFkQnVmZmVy
KHNpemVfdCByZXF1ZXN0ZWRTaXplLCBzaXplX3QmIGFjdHVhbFNpemUKIAogICAgIG1hcEdzdEJ1
ZmZlcihidWZmZXIpOwogCi0gICAgR011dGV4TG9ja2VyIGxvY2tlcigqR1NUX09CSkVDVF9HRVRf
TE9DSyhzcmMpKTsKKyAgICBHTXV0ZXhMb2NrZXI8R011dGV4PiBsb2NrZXIoKkdTVF9PQkpFQ1Rf
R0VUX0xPQ0soc3JjKSk7CiAgICAgcHJpdi0+YnVmZmVyID0gYWRvcHRHUmVmKGJ1ZmZlcik7CiAg
ICAgbG9ja2VyLnVubG9jaygpOwogCkBAIC04MTcsNyArODE3LDcgQEAgdm9pZCBTdHJlYW1pbmdD
bGllbnQ6OmhhbmRsZVJlc3BvbnNlUmVjZWl2ZWQoY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcmVz
cG9uc2UsIEMKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIEdNdXRleExvY2tlciBsb2Nr
ZXIoKkdTVF9PQkpFQ1RfR0VUX0xPQ0soc3JjKSk7CisgICAgR011dGV4TG9ja2VyPEdNdXRleD4g
bG9ja2VyKCpHU1RfT0JKRUNUX0dFVF9MT0NLKHNyYykpOwogCiAgICAgcHJpdi0+Y29yc0FjY2Vz
c0NoZWNrID0gY29yc0FjY2Vzc0NoZWNrOwogCkBAIC05MTYsNyArOTE2LDcgQEAgdm9pZCBTdHJl
YW1pbmdDbGllbnQ6OmhhbmRsZURhdGFSZWNlaXZlZChjb25zdCBjaGFyKiBkYXRhLCBpbnQgbGVu
Z3RoKQogICAgIFdlYktpdFdlYlNyYyogc3JjID0gV0VCS0lUX1dFQl9TUkMobV9zcmMpOwogICAg
IFdlYktpdFdlYlNyY1ByaXZhdGUqIHByaXYgPSBzcmMtPnByaXY7CiAKLSAgICBHTXV0ZXhMb2Nr
ZXIgbG9ja2VyKCpHU1RfT0JKRUNUX0dFVF9MT0NLKHNyYykpOworICAgIEdNdXRleExvY2tlcjxH
TXV0ZXg+IGxvY2tlcigqR1NUX09CSkVDVF9HRVRfTE9DSyhzcmMpKTsKIAogICAgIEdTVF9MT0df
T0JKRUNUKHNyYywgIkhhdmUgJWxsZCBieXRlcyBvZiBkYXRhIiwgcHJpdi0+YnVmZmVyID8gc3Rh
dGljX2Nhc3Q8bG9uZyBsb25nPihnc3RfYnVmZmVyX2dldF9zaXplKHByaXYtPmJ1ZmZlci5nZXQo
KSkpIDogbGVuZ3RoKTsKIApAQCAtOTg1LDcgKzk4NSw3IEBAIHZvaWQgU3RyZWFtaW5nQ2xpZW50
OjpoYW5kbGVOb3RpZnlGaW5pc2hlZCgpCiAKICAgICBHU1RfREVCVUdfT0JKRUNUKHNyYywgIkhh
dmUgRU9TIik7CiAKLSAgICBHTXV0ZXhMb2NrZXIgbG9ja2VyKCpHU1RfT0JKRUNUX0dFVF9MT0NL
KHNyYykpOworICAgIEdNdXRleExvY2tlcjxHTXV0ZXg+IGxvY2tlcigqR1NUX09CSkVDVF9HRVRf
TE9DSyhzcmMpKTsKICAgICBpZiAoIXByaXYtPnNlZWtTb3VyY2UuaXNBY3RpdmUoKSkgewogICAg
ICAgICBsb2NrZXIudW5sb2NrKCk7CiAgICAgICAgIGdzdF9hcHBfc3JjX2VuZF9vZl9zdHJlYW0o
cHJpdi0+YXBwc3JjKTsKQEAgLTExNDQsNyArMTE0NCw3IEBAIHZvaWQgUmVzb3VyY2VIYW5kbGVT
dHJlYW1pbmdDbGllbnQ6Ondhc0Jsb2NrZWQoUmVzb3VyY2VIYW5kbGUqKQogCiAgICAgR1NUX0VS
Uk9SX09CSkVDVChzcmMsICJSZXF1ZXN0IHdhcyBibG9ja2VkIik7CiAKLSAgICBHTXV0ZXhMb2Nr
ZXIgbG9ja2VyKCpHU1RfT0JKRUNUX0dFVF9MT0NLKHNyYykpOworICAgIEdNdXRleExvY2tlcjxH
TXV0ZXg+IGxvY2tlcigqR1NUX09CSkVDVF9HRVRfTE9DSyhzcmMpKTsKICAgICB1cmkucmVzZXQo
Z19zdHJkdXAoc3JjLT5wcml2LT51cmkpKTsKICAgICBsb2NrZXIudW5sb2NrKCk7CiAKQEAgLTEx
NTgsNyArMTE1OCw3IEBAIHZvaWQgUmVzb3VyY2VIYW5kbGVTdHJlYW1pbmdDbGllbnQ6OmNhbm5v
dFNob3dVUkwoUmVzb3VyY2VIYW5kbGUqKQogCiAgICAgR1NUX0VSUk9SX09CSkVDVChzcmMsICJD
YW5ub3Qgc2hvdyBVUkwiKTsKIAotICAgIEdNdXRleExvY2tlciBsb2NrZXIoKkdTVF9PQkpFQ1Rf
R0VUX0xPQ0soc3JjKSk7CisgICAgR011dGV4TG9ja2VyPEdNdXRleD4gbG9ja2VyKCpHU1RfT0JK
RUNUX0dFVF9MT0NLKHNyYykpOwogICAgIHVyaS5yZXNldChnX3N0cmR1cChzcmMtPnByaXYtPnVy
aSkpOwogICAgIGxvY2tlci51bmxvY2soKTsKIApkaWZmIC0tZ2l0IGEvVG9vbHMvQ2hhbmdlTG9n
IGIvVG9vbHMvQ2hhbmdlTG9nCmluZGV4IGY2ZDYxNWMuLjkwN2NmNDMgMTAwNjQ0Ci0tLSBhL1Rv
b2xzL0NoYW5nZUxvZworKysgYi9Ub29scy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyNyBAQAorMjAx
NC0xMC0wNyAgQ2FybG9zIEdhcmNpYSBDYW1wb3MgIDxjZ2FyY2lhQGlnYWxpYS5jb20+CisKKyAg
ICAgICAgW0dMSUJdIFNwbGl0IEdNYWluTG9vcFNvdXJjZSBtb3ZpbmcgdGhyZWFkIHNhZmUgaW1w
bGVtZW50YXRpb24gdG8gaXRzIG93biBjbGFzcyBHVGhyZWFkU2FmZU1haW5Mb29wU291cmNlCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzc0ODUKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBVcGRhdGUgR01h
aW5Mb29wU291cmNlIHRlc3RzLiBNb3N0IG9mIHRoZSB0ZXN0cyBhcmUgbm93IHJ1biB0d2ljZSwK
KyAgICAgICAgZmlyc3Qgd2l0aCBhIEdNYWluTG9vcFNvdXJjZSBhbmQgdGhlbiB3aXRoIGEKKyAg
ICAgICAgR1RocmVhZFNhZmVNYWluTG9vcFNvdXJjZSwgc2luY2UgYm90aCBzaG91bGQgaGF2ZSB0
aGUgc2FtZQorICAgICAgICBiZWhhdmlvdXIuIFRoZSB0aHJlYWRpbmcgdGVzdCB1c2VzIEdUaHJl
YWRTYWZlTWFpbkxvb3BTb3VyY2UgYW5kCisgICAgICAgIHRoZSBkZWxldGUgb24gZGVzdHJveSB0
ZXN0IHVzZXMgR01haW5Mb29wU291cmNlLiBUaGUgdGVzdHMKKyAgICAgICAgdGhlbXNlbHZlcyBo
YXZlbid0IGNoYW5nZWQsIHNpbmNlIHRoZXJlJ3Mgbm8gY2hhbmdlIGluIGJlaGF2aW91ci4KKwor
ICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL2dvYmplY3QvR01haW5Mb29wU291cmNl
LmNwcDoKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OkdNYWluTG9vcFNvdXJjZVRlc3Q6OnNvdXJj
ZSk6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpiYXNpY1Jlc2NoZWR1bGluZyk6CisgICAgICAg
IChUZXN0V2ViS2l0QVBJOjpURVNUKToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OnJlZW50cmFu
dFJlc2NoZWR1bGluZyk6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpjYW5jZWxSZXBlYXRpbmdT
b3VyY2VEdXJpbmdEaXNwYXRjaCk6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpiYXNpY0Rlc3Ry
b3lDYWxsYmFja3MpOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6ZGVzdHJveUNhbGxiYWNrc0Fm
dGVyQ2FuY2VsbGluZ0R1cmluZ0Rpc3BhdGNoKToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OmRl
c3Ryb3lDYWxsYmFja3NBZnRlclJlc2NoZWR1bGluZ0R1cmluZ0Rpc3BhdGNoKToKKwogMjAxNC0w
OS0yNSAgQ2FybG9zIEdhcmNpYSBDYW1wb3MgIDxjZ2FyY2lhQGlnYWxpYS5jb20+CiAKICAgICAg
ICAgW0d0a10gYnVpbGQuc2ggbmVlZHMgYSAtLSBiZWZvcmUgbWFrZSBvcHRpb25zIHdoZW4gdGhl
IGJ1aWxkIGNvbW1hbmQgaXMgY21ha2UgLS1idWlsZApkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdl
YktpdEFQSS9UZXN0cy9XVEYvZ29iamVjdC9HTWFpbkxvb3BTb3VyY2UuY3BwIGIvVG9vbHMvVGVz
dFdlYktpdEFQSS9UZXN0cy9XVEYvZ29iamVjdC9HTWFpbkxvb3BTb3VyY2UuY3BwCmluZGV4IGQz
M2Q5YjkuLmRjZGU5OGQgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RG
L2dvYmplY3QvR01haW5Mb29wU291cmNlLmNwcAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rl
c3RzL1dURi9nb2JqZWN0L0dNYWluTG9vcFNvdXJjZS5jcHAKQEAgLTE5LDExICsxOSwxMiBAQAog
CiAjaW5jbHVkZSAiY29uZmlnLmgiCiAKLSNpbmNsdWRlIDx3dGYvZ29iamVjdC9HTWFpbkxvb3BT
b3VyY2UuaD4KKyNpbmNsdWRlIDx3dGYvZ29iamVjdC9HVGhyZWFkU2FmZU1haW5Mb29wU291cmNl
Lmg+CiAjaW5jbHVkZSA8c3RkaW8uaD4KIAogbmFtZXNwYWNlIFRlc3RXZWJLaXRBUEkgewogCit0
ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KIGNsYXNzIEdNYWluTG9vcFNvdXJjZVRlc3QgewogcHVibGlj
OgogICAgIEdNYWluTG9vcFNvdXJjZVRlc3QoKQpAQCAtNTYsMjEgKzU3LDE2IEBAIHB1YmxpYzoK
ICAgICAgICAgZ19tYWluX2xvb3BfcXVpdChtX21haW5Mb29wKTsKICAgICB9CiAKLSAgICBHTWFp
bkxvb3BTb3VyY2UmIHNvdXJjZSgpIHsgcmV0dXJuIG1fc291cmNlOyB9CisgICAgVCYgc291cmNl
KCkgeyByZXR1cm4gbV9zb3VyY2U7IH0KIAogcHJpdmF0ZToKICAgICBHTWFpbkxvb3AqIG1fbWFp
bkxvb3A7Ci0gICAgR01haW5Mb29wU291cmNlIG1fc291cmNlOworICAgIFQgbV9zb3VyY2U7CiB9
OwogCi1URVNUKFdURl9HTWFpbkxvb3BTb3VyY2UsIEJhc2ljUmVzY2hlZHVsaW5nKQordGVtcGxh
dGUgPHR5cGVuYW1lIFQ+CitzdGF0aWMgdm9pZCBiYXNpY1Jlc2NoZWR1bGluZyhUJiBjb250ZXh0
KQogewotICAgIHN0cnVjdCBUZXN0aW5nQ29udGV4dCB7Ci0gICAgICAgIEdNYWluTG9vcFNvdXJj
ZVRlc3QgdGVzdDsKLSAgICAgICAgYm9vbCBmaW5pc2hlZEZpcnN0VGFzayA9IGZhbHNlOwotICAg
ICAgICBib29sIGZpbmlzaGVkU2Vjb25kVGFzayA9IGZhbHNlOwotICAgIH0gY29udGV4dDsKLQog
ICAgIEVYUEVDVF9UUlVFKCFjb250ZXh0LnRlc3Quc291cmNlKCkuaXNBY3RpdmUoKSk7CiAKICAg
ICBjb250ZXh0LnRlc3Quc291cmNlKCkuc2NoZWR1bGUoIltUZXN0XSBGaXJzdFRhc2siLCBbJl0g
ewpAQCAtOTQsMTQgKzkwLDI2IEBAIFRFU1QoV1RGX0dNYWluTG9vcFNvdXJjZSwgQmFzaWNSZXNj
aGVkdWxpbmcpCiAgICAgRVhQRUNUX1RSVUUoY29udGV4dC5maW5pc2hlZFNlY29uZFRhc2spOwog
fQogCi1URVNUKFdURl9HTWFpbkxvb3BTb3VyY2UsIFJlZW50cmFudFJlc2NoZWR1bGluZykKK1RF
U1QoV1RGX0dNYWluTG9vcFNvdXJjZSwgQmFzaWNSZXNjaGVkdWxpbmcpCiB7CiAgICAgc3RydWN0
IFRlc3RpbmdDb250ZXh0IHsKLSAgICAgICAgR01haW5Mb29wU291cmNlVGVzdCB0ZXN0OworICAg
ICAgICBHTWFpbkxvb3BTb3VyY2VUZXN0PEdNYWluTG9vcFNvdXJjZT4gdGVzdDsKICAgICAgICAg
Ym9vbCBmaW5pc2hlZEZpcnN0VGFzayA9IGZhbHNlOwogICAgICAgICBib29sIGZpbmlzaGVkU2Vj
b25kVGFzayA9IGZhbHNlOwogICAgIH0gY29udGV4dDsKKyAgICBiYXNpY1Jlc2NoZWR1bGluZzxU
ZXN0aW5nQ29udGV4dD4oY29udGV4dCk7CisKKyAgICBzdHJ1Y3QgVGhyZWFkU2FmZVRlc3RpbmdD
b250ZXh0IHsKKyAgICAgICAgR01haW5Mb29wU291cmNlVGVzdDxHVGhyZWFkU2FmZU1haW5Mb29w
U291cmNlPiB0ZXN0OworICAgICAgICBib29sIGZpbmlzaGVkRmlyc3RUYXNrID0gZmFsc2U7Cisg
ICAgICAgIGJvb2wgZmluaXNoZWRTZWNvbmRUYXNrID0gZmFsc2U7CisgICAgfSB0aHJlYWRTYWZl
Q29udGV4dDsKKyAgICBiYXNpY1Jlc2NoZWR1bGluZzxUaHJlYWRTYWZlVGVzdGluZ0NvbnRleHQ+
KHRocmVhZFNhZmVDb250ZXh0KTsKK30KIAordGVtcGxhdGUgPHR5cGVuYW1lIFQ+CitzdGF0aWMg
dm9pZCByZWVudHJhbnRSZXNjaGVkdWxpbmcoVCYgY29udGV4dCkKK3sKICAgICBFWFBFQ1RfVFJV
RSghY29udGV4dC50ZXN0LnNvdXJjZSgpLmlzQWN0aXZlKCkpOwogCiAgICAgY29udGV4dC50ZXN0
LnNvdXJjZSgpLnNjaGVkdWxlKCJbVGVzdF0gRmlyc3RUYXNrIiwgWyZdIHsKQEAgLTEyNywxMCAr
MTM1LDI3IEBAIFRFU1QoV1RGX0dNYWluTG9vcFNvdXJjZSwgUmVlbnRyYW50UmVzY2hlZHVsaW5n
KQogICAgIEVYUEVDVF9UUlVFKGNvbnRleHQuZmluaXNoZWRTZWNvbmRUYXNrKTsKIH0KIAorVEVT
VChXVEZfR01haW5Mb29wU291cmNlLCBSZWVudHJhbnRSZXNjaGVkdWxpbmcpCit7CisgICAgc3Ry
dWN0IFRlc3RpbmdDb250ZXh0IHsKKyAgICAgICAgR01haW5Mb29wU291cmNlVGVzdDxHTWFpbkxv
b3BTb3VyY2U+IHRlc3Q7CisgICAgICAgIGJvb2wgZmluaXNoZWRGaXJzdFRhc2sgPSBmYWxzZTsK
KyAgICAgICAgYm9vbCBmaW5pc2hlZFNlY29uZFRhc2sgPSBmYWxzZTsKKyAgICB9IGNvbnRleHQ7
CisgICAgcmVlbnRyYW50UmVzY2hlZHVsaW5nPFRlc3RpbmdDb250ZXh0Pihjb250ZXh0KTsKKwor
ICAgIHN0cnVjdCBUaHJlYWRTYWZlVGVzdGluZ0NvbnRleHQgeworICAgICAgICBHTWFpbkxvb3BT
b3VyY2VUZXN0PEdUaHJlYWRTYWZlTWFpbkxvb3BTb3VyY2U+IHRlc3Q7CisgICAgICAgIGJvb2wg
ZmluaXNoZWRGaXJzdFRhc2sgPSBmYWxzZTsKKyAgICAgICAgYm9vbCBmaW5pc2hlZFNlY29uZFRh
c2sgPSBmYWxzZTsKKyAgICB9IHRocmVhZFNhZmVDb250ZXh0OworICAgIHJlZW50cmFudFJlc2No
ZWR1bGluZzxUaHJlYWRTYWZlVGVzdGluZ0NvbnRleHQ+KHRocmVhZFNhZmVDb250ZXh0KTsKK30K
KwogVEVTVChXVEZfR01haW5Mb29wU291cmNlLCBSZXNjaGVkdWxpbmdGcm9tRGlmZmVyZW50VGhy
ZWFkKQogewogICAgIHN0cnVjdCBUZXN0aW5nQ29udGV4dCB7Ci0gICAgICAgIEdNYWluTG9vcFNv
dXJjZVRlc3QgdGVzdDsKKyAgICAgICAgR01haW5Mb29wU291cmNlVGVzdDxHVGhyZWFkU2FmZU1h
aW5Mb29wU291cmNlPiB0ZXN0OwogICAgICAgICBib29sIGZpbmlzaGVkRmlyc3RUYXNrOwogICAg
ICAgICBib29sIGZpbmlzaGVkU2Vjb25kVGFzazsKICAgICB9IGNvbnRleHQ7CkBAIC0xOTgsMTMg
KzIyMyw5IEBAIFRFU1QoV1RGX0dNYWluTG9vcFNvdXJjZSwgRGVzdHJ1Y3Rpb25EdXJpbmdEaXNw
YXRjaCkKICAgICBnX21haW5fbG9vcF91bnJlZihsb29wKTsKIH0KIAotVEVTVChXVEZfR01haW5M
b29wU291cmNlLCBDYW5jZWxSZXBlYXRpbmdTb3VyY2VEdXJpbmdEaXNwYXRjaCkKK3RlbXBsYXRl
IDx0eXBlbmFtZSBUPgorc3RhdGljIHZvaWQgY2FuY2VsUmVwZWF0aW5nU291cmNlRHVyaW5nRGlz
cGF0Y2goVCYgY29udGV4dCkKIHsKLSAgICBzdHJ1Y3QgVGVzdGluZ0NvbnRleHQgewotICAgICAg
ICBHTWFpbkxvb3BTb3VyY2VUZXN0IHRlc3Q7Ci0gICAgICAgIHVuc2lnbmVkIGNhbGxDb3VudCA9
IDA7Ci0gICAgfSBjb250ZXh0OwotCiAgICAgRVhQRUNUX1RSVUUoIWNvbnRleHQudGVzdC5zb3Vy
Y2UoKS5pc0FjdGl2ZSgpKTsKIAogICAgIGNvbnRleHQudGVzdC5zb3VyY2UoKS5zY2hlZHVsZSgi
W1Rlc3RdIFJlcGVhdGluZ1Rhc2siLApAQCAtMjI1LDE2ICsyNDYsMjYgQEAgVEVTVChXVEZfR01h
aW5Mb29wU291cmNlLCBDYW5jZWxSZXBlYXRpbmdTb3VyY2VEdXJpbmdEaXNwYXRjaCkKICAgICBF
WFBFQ1RfRVEoMywgY29udGV4dC5jYWxsQ291bnQpOwogfQogCi1URVNUKFdURl9HTWFpbkxvb3BT
b3VyY2UsIEJhc2ljRGVzdHJveUNhbGxiYWNrcykKK1RFU1QoV1RGX0dNYWluTG9vcFNvdXJjZSwg
Q2FuY2VsUmVwZWF0aW5nU291cmNlRHVyaW5nRGlzcGF0Y2gpCiB7CiAgICAgc3RydWN0IFRlc3Rp
bmdDb250ZXh0IHsKLSAgICAgICAgR01haW5Mb29wU291cmNlVGVzdCB0ZXN0OwotICAgICAgICBi
b29sIGNhbGxiYWNrQ2FsbGVkID0gZmFsc2U7Ci0gICAgICAgIGJvb2wgZGVzdHJveUNhbGxiYWNr
Q2FsbGVkID0gZmFsc2U7Ci0gICAgfTsKKyAgICAgICAgR01haW5Mb29wU291cmNlVGVzdDxHTWFp
bkxvb3BTb3VyY2U+IHRlc3Q7CisgICAgICAgIHVuc2lnbmVkIGNhbGxDb3VudCA9IDA7CisgICAg
fSBjb250ZXh0OworICAgIGNhbmNlbFJlcGVhdGluZ1NvdXJjZUR1cmluZ0Rpc3BhdGNoPFRlc3Rp
bmdDb250ZXh0Pihjb250ZXh0KTsKKworICAgIHN0cnVjdCBUaHJlYWRTYWZlVGVzdGluZ0NvbnRl
eHQgeworICAgICAgICBHTWFpbkxvb3BTb3VyY2VUZXN0PEdUaHJlYWRTYWZlTWFpbkxvb3BTb3Vy
Y2U+IHRlc3Q7CisgICAgICAgIHVuc2lnbmVkIGNhbGxDb3VudCA9IDA7CisgICAgfSB0aHJlYWRT
YWZlQ29udGV4dDsKKyAgICBjYW5jZWxSZXBlYXRpbmdTb3VyY2VEdXJpbmdEaXNwYXRjaDxUaHJl
YWRTYWZlVGVzdGluZ0NvbnRleHQ+KHRocmVhZFNhZmVDb250ZXh0KTsKK30KIAordGVtcGxhdGUg
PHR5cGVuYW1lIFQ+CitzdGF0aWMgdm9pZCBiYXNpY0Rlc3Ryb3lDYWxsYmFja3MoKQorewogICAg
IHsKLSAgICAgICAgVGVzdGluZ0NvbnRleHQgY29udGV4dDsKKyAgICAgICAgVCBjb250ZXh0Owog
ICAgICAgICBFWFBFQ1RfVFJVRSghY29udGV4dC50ZXN0LnNvdXJjZSgpLmlzQWN0aXZlKCkpOwog
ICAgICAgICBjb250ZXh0LnRlc3Quc291cmNlKCkuc2NoZWR1bGUoIltUZXN0XSBEZXN0cm95Q2Fs
bGJhY2siLAogICAgICAgICAgICAgWyZdIHsKQEAgLTI1Niw3ICsyODcsNyBAQCBURVNUKFdURl9H
TWFpbkxvb3BTb3VyY2UsIEJhc2ljRGVzdHJveUNhbGxiYWNrcykKICAgICB9CiAKICAgICB7Ci0g
ICAgICAgIFRlc3RpbmdDb250ZXh0IGNvbnRleHQ7CisgICAgICAgIFQgY29udGV4dDsKICAgICAg
ICAgRVhQRUNUX1RSVUUoIWNvbnRleHQudGVzdC5zb3VyY2UoKS5pc0FjdGl2ZSgpKTsKICAgICAg
ICAgY29udGV4dC50ZXN0LnNvdXJjZSgpLnNjaGVkdWxlKCJbVGVzdF0gRGVzdHJveUNhbGxiYWNr
IiwKICAgICAgICAgICAgIHN0ZDo6ZnVuY3Rpb248Ym9vbCAoKT4oWyZdIHsKQEAgLTI3OSwxNiAr
MzEwLDI4IEBAIFRFU1QoV1RGX0dNYWluTG9vcFNvdXJjZSwgQmFzaWNEZXN0cm95Q2FsbGJhY2tz
KQogICAgIH0KIH0KIAotVEVTVChXVEZfR01haW5Mb29wU291cmNlLCBEZXN0cm95Q2FsbGJhY2tz
QWZ0ZXJDYW5jZWxsaW5nRHVyaW5nRGlzcGF0Y2gpCitURVNUKFdURl9HTWFpbkxvb3BTb3VyY2Us
IEJhc2ljRGVzdHJveUNhbGxiYWNrcykKIHsKICAgICBzdHJ1Y3QgVGVzdGluZ0NvbnRleHQgewot
ICAgICAgICBHTWFpbkxvb3BTb3VyY2VUZXN0IHRlc3Q7Ci0gICAgICAgIHVuc2lnbmVkIGNhbGxi
YWNrQ2FsbENvdW50PSAwOworICAgICAgICBHTWFpbkxvb3BTb3VyY2VUZXN0PEdNYWluTG9vcFNv
dXJjZT4gdGVzdDsKKyAgICAgICAgYm9vbCBjYWxsYmFja0NhbGxlZCA9IGZhbHNlOwogICAgICAg
ICBib29sIGRlc3Ryb3lDYWxsYmFja0NhbGxlZCA9IGZhbHNlOwogICAgIH07CisgICAgYmFzaWNE
ZXN0cm95Q2FsbGJhY2tzPFRlc3RpbmdDb250ZXh0PigpOwogCisgICAgc3RydWN0IFRocmVhZFNh
ZmVUZXN0aW5nQ29udGV4dCB7CisgICAgICAgIEdNYWluTG9vcFNvdXJjZVRlc3Q8R1RocmVhZFNh
ZmVNYWluTG9vcFNvdXJjZT4gdGVzdDsKKyAgICAgICAgYm9vbCBjYWxsYmFja0NhbGxlZCA9IGZh
bHNlOworICAgICAgICBib29sIGRlc3Ryb3lDYWxsYmFja0NhbGxlZCA9IGZhbHNlOworICAgIH07
CisgICAgYmFzaWNEZXN0cm95Q2FsbGJhY2tzPFRocmVhZFNhZmVUZXN0aW5nQ29udGV4dD4oKTsK
K30KKwordGVtcGxhdGUgPHR5cGVuYW1lIFQ+CitzdGF0aWMgdm9pZCBkZXN0cm95Q2FsbGJhY2tz
QWZ0ZXJDYW5jZWxsaW5nRHVyaW5nRGlzcGF0Y2goKQorewogICAgIHsKLSAgICAgICAgVGVzdGlu
Z0NvbnRleHQgY29udGV4dDsKKyAgICAgICAgVCBjb250ZXh0OwogICAgICAgICBFWFBFQ1RfVFJV
RSghY29udGV4dC50ZXN0LnNvdXJjZSgpLmlzQWN0aXZlKCkpOwogICAgICAgICBjb250ZXh0LnRl
c3Quc291cmNlKCkuc2NoZWR1bGUoIltUZXN0XSBEZXN0cm95Q2FsbGJhY2siLAogICAgICAgICAg
ICAgWyZdIHsKQEAgLTMxMiw3ICszNTUsNyBAQCBURVNUKFdURl9HTWFpbkxvb3BTb3VyY2UsIERl
c3Ryb3lDYWxsYmFja3NBZnRlckNhbmNlbGxpbmdEdXJpbmdEaXNwYXRjaCkKICAgICB9CiAKICAg
ICB7Ci0gICAgICAgIFRlc3RpbmdDb250ZXh0IGNvbnRleHQ7CisgICAgICAgIFQgY29udGV4dDsK
ICAgICAgICAgRVhQRUNUX1RSVUUoIWNvbnRleHQudGVzdC5zb3VyY2UoKS5pc0FjdGl2ZSgpKTsK
ICAgICAgICAgY29udGV4dC50ZXN0LnNvdXJjZSgpLnNjaGVkdWxlKCJbVGVzdF0gRGVzdHJveUNh
bGxiYWNrIiwKICAgICAgICAgICAgIHN0ZDo6ZnVuY3Rpb248Ym9vbCAoKT4oWyZdIHsKQEAgLTMz
NywxOCArMzgwLDI4IEBAIFRFU1QoV1RGX0dNYWluTG9vcFNvdXJjZSwgRGVzdHJveUNhbGxiYWNr
c0FmdGVyQ2FuY2VsbGluZ0R1cmluZ0Rpc3BhdGNoKQogICAgIH0KIH0KIAotVEVTVChXVEZfR01h
aW5Mb29wU291cmNlLCBEZXN0cm95Q2FsbGJhY2tzQWZ0ZXJSZXNjaGVkdWxpbmdEdXJpbmdEaXNw
YXRjaCkKK1RFU1QoV1RGX0dNYWluTG9vcFNvdXJjZSwgRGVzdHJveUNhbGxiYWNrc0FmdGVyQ2Fu
Y2VsbGluZ0R1cmluZ0Rpc3BhdGNoKQogewogICAgIHN0cnVjdCBUZXN0aW5nQ29udGV4dCB7Ci0g
ICAgICAgIEdNYWluTG9vcFNvdXJjZVRlc3QgdGVzdDsKLSAgICAgICAgdW5zaWduZWQgZmlyc3RD
YWxsYmFja0NhbGxDb3VudCA9IDA7Ci0gICAgICAgIGJvb2wgZmlyc3REZXN0cm95Q2FsbGJhY2tD
YWxsZWQgPSBmYWxzZTsKLSAgICAgICAgdW5zaWduZWQgc2Vjb25kQ2FsbGJhY2tDYWxsQ291bnQg
PSAwOwotICAgICAgICBib29sIHNlY29uZERlc3Ryb3lDYWxsYmFja0NhbGxlZCA9IGZhbHNlOwor
ICAgICAgICBHTWFpbkxvb3BTb3VyY2VUZXN0PEdNYWluTG9vcFNvdXJjZT4gdGVzdDsKKyAgICAg
ICAgdW5zaWduZWQgY2FsbGJhY2tDYWxsQ291bnQ9IDA7CisgICAgICAgIGJvb2wgZGVzdHJveUNh
bGxiYWNrQ2FsbGVkID0gZmFsc2U7CiAgICAgfTsKKyAgICBkZXN0cm95Q2FsbGJhY2tzQWZ0ZXJD
YW5jZWxsaW5nRHVyaW5nRGlzcGF0Y2g8VGVzdGluZ0NvbnRleHQ+KCk7CiAKKyAgICBzdHJ1Y3Qg
VGhyZWFkU2FmZVRlc3RpbmdDb250ZXh0IHsKKyAgICAgICAgR01haW5Mb29wU291cmNlVGVzdDxH
VGhyZWFkU2FmZU1haW5Mb29wU291cmNlPiB0ZXN0OworICAgICAgICB1bnNpZ25lZCBjYWxsYmFj
a0NhbGxDb3VudD0gMDsKKyAgICAgICAgYm9vbCBkZXN0cm95Q2FsbGJhY2tDYWxsZWQgPSBmYWxz
ZTsKKyAgICB9OworICAgIGRlc3Ryb3lDYWxsYmFja3NBZnRlckNhbmNlbGxpbmdEdXJpbmdEaXNw
YXRjaDxUaHJlYWRTYWZlVGVzdGluZ0NvbnRleHQ+KCk7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFt
ZSBUPgorc3RhdGljIHZvaWQgZGVzdHJveUNhbGxiYWNrc0FmdGVyUmVzY2hlZHVsaW5nRHVyaW5n
RGlzcGF0Y2goKQorewogICAgIHsKLSAgICAgICAgVGVzdGluZ0NvbnRleHQgY29udGV4dDsKKyAg
ICAgICAgVCBjb250ZXh0OwogICAgICAgICBFWFBFQ1RfVFJVRSghY29udGV4dC50ZXN0LnNvdXJj
ZSgpLmlzQWN0aXZlKCkpOwogICAgICAgICBjb250ZXh0LnRlc3Quc291cmNlKCkuc2NoZWR1bGUo
IltUZXN0XSBCYXNlQ2FsbGJhY2siLAogICAgICAgICAgICAgWyZdIHsKQEAgLTM4Myw3ICs0MzYs
NyBAQCBURVNUKFdURl9HTWFpbkxvb3BTb3VyY2UsIERlc3Ryb3lDYWxsYmFja3NBZnRlclJlc2No
ZWR1bGluZ0R1cmluZ0Rpc3BhdGNoKQogICAgIH0KIAogICAgIHsKLSAgICAgICAgVGVzdGluZ0Nv
bnRleHQgY29udGV4dDsKKyAgICAgICAgVCBjb250ZXh0OwogICAgICAgICBFWFBFQ1RfVFJVRSgh
Y29udGV4dC50ZXN0LnNvdXJjZSgpLmlzQWN0aXZlKCkpOwogICAgICAgICBjb250ZXh0LnRlc3Qu
c291cmNlKCkuc2NoZWR1bGUoIltUZXN0XSBCYXNlQ2FsbGJhY2siLAogICAgICAgICAgICAgc3Rk
OjpmdW5jdGlvbjxib29sICgpPihbJl0gewpAQCAtNDIwLDYgKzQ3MywyNyBAQCBURVNUKFdURl9H
TWFpbkxvb3BTb3VyY2UsIERlc3Ryb3lDYWxsYmFja3NBZnRlclJlc2NoZWR1bGluZ0R1cmluZ0Rp
c3BhdGNoKQogICAgIH0KIH0KIAorVEVTVChXVEZfR01haW5Mb29wU291cmNlLCBEZXN0cm95Q2Fs
bGJhY2tzQWZ0ZXJSZXNjaGVkdWxpbmdEdXJpbmdEaXNwYXRjaCkKK3sKKyAgICBzdHJ1Y3QgVGVz
dGluZ0NvbnRleHQgeworICAgICAgICBHTWFpbkxvb3BTb3VyY2VUZXN0PEdNYWluTG9vcFNvdXJj
ZT4gdGVzdDsKKyAgICAgICAgdW5zaWduZWQgZmlyc3RDYWxsYmFja0NhbGxDb3VudCA9IDA7Cisg
ICAgICAgIGJvb2wgZmlyc3REZXN0cm95Q2FsbGJhY2tDYWxsZWQgPSBmYWxzZTsKKyAgICAgICAg
dW5zaWduZWQgc2Vjb25kQ2FsbGJhY2tDYWxsQ291bnQgPSAwOworICAgICAgICBib29sIHNlY29u
ZERlc3Ryb3lDYWxsYmFja0NhbGxlZCA9IGZhbHNlOworICAgIH07CisgICAgZGVzdHJveUNhbGxi
YWNrc0FmdGVyUmVzY2hlZHVsaW5nRHVyaW5nRGlzcGF0Y2g8VGVzdGluZ0NvbnRleHQ+KCk7CisK
KyAgICBzdHJ1Y3QgVGhyZWFkU2FmZVRlc3RpbmdDb250ZXh0IHsKKyAgICAgICAgR01haW5Mb29w
U291cmNlVGVzdDxHVGhyZWFkU2FmZU1haW5Mb29wU291cmNlPiB0ZXN0OworICAgICAgICB1bnNp
Z25lZCBmaXJzdENhbGxiYWNrQ2FsbENvdW50ID0gMDsKKyAgICAgICAgYm9vbCBmaXJzdERlc3Ry
b3lDYWxsYmFja0NhbGxlZCA9IGZhbHNlOworICAgICAgICB1bnNpZ25lZCBzZWNvbmRDYWxsYmFj
a0NhbGxDb3VudCA9IDA7CisgICAgICAgIGJvb2wgc2Vjb25kRGVzdHJveUNhbGxiYWNrQ2FsbGVk
ID0gZmFsc2U7CisgICAgfTsKKyAgICBkZXN0cm95Q2FsbGJhY2tzQWZ0ZXJSZXNjaGVkdWxpbmdE
dXJpbmdEaXNwYXRjaDxUaHJlYWRTYWZlVGVzdGluZ0NvbnRleHQ+KCk7Cit9CisKIFRFU1QoV1RG
X0dNYWluTG9vcFNvdXJjZSwgRGVsZXRlT25EZXN0cm95U291cmNlcykKIHsKICAgICAvLyBUZXN0
aW5nIHRoZSBkZWxldGUtb24tZGVzdHJveSBzb3VyY2VzIGlzIHZlcnkgbGltaXRlZC4gVGhlcmUn
cyBubyBnb29kIHdheQpAQCAtNDI3LDcgKzUwMSw3IEBAIFRFU1QoV1RGX0dNYWluTG9vcFNvdXJj
ZSwgRGVsZXRlT25EZXN0cm95U291cmNlcykKICAgICAvLyBpcyBkZXN0cm95ZWQuCiAKICAgICBz
dHJ1Y3QgVGVzdGluZ0NvbnRleHQgewotICAgICAgICBHTWFpbkxvb3BTb3VyY2VUZXN0IHRlc3Q7
CisgICAgICAgIEdNYWluTG9vcFNvdXJjZVRlc3Q8R01haW5Mb29wU291cmNlPiB0ZXN0OwogICAg
ICAgICB1bnNpZ25lZCBjYWxsYmFja0NhbGxDb3VudCA9IDA7CiAgICAgICAgIGJvb2wgZGVzdHJv
eUNhbGxiYWNrQ2FsbGVkID0gZmFsc2U7CiAgICAgfSBjb250ZXh0Owo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>239411</attachid>
            <date>2014-10-07 06:48:02 -0700</date>
            <delta_ts>2014-10-10 03:53:03 -0700</delta_ts>
            <desc>Add new file to EFL build too</desc>
            <filename>wtf-thread-safe-main-loop-source.diff</filename>
            <type>text/plain</type>
            <size>67535</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nIGIvU291cmNlL1dURi9DaGFuZ2VMb2cK
aW5kZXggN2Q2OTc2YS4uZGQxMWI2YSAxMDA2NDQKLS0tIGEvU291cmNlL1dURi9DaGFuZ2VMb2cK
KysrIGIvU291cmNlL1dURi9DaGFuZ2VMb2cKQEAgLTEsMyArMSw1OCBAQAorMjAxNC0xMC0wNyAg
Q2FybG9zIEdhcmNpYSBDYW1wb3MgIDxjZ2FyY2lhQGlnYWxpYS5jb20+CisKKyAgICAgICAgW0dM
SUJdIFNwbGl0IEdNYWluTG9vcFNvdXJjZSBtb3ZpbmcgdGhyZWFkIHNhZmUgaW1wbGVtZW50YXRp
b24gdG8gaXRzIG93biBjbGFzcyBHVGhyZWFkU2FmZU1haW5Mb29wU291cmNlCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzc0ODUKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBXZSBtYWRlIEdNYWluTG9vcFNv
dXJjZSB0aHJlYWQgc2FmZSwgYnV0IGluIG1vc3Qgb2YgdGhlIGNhc2VzIHdlCisgICAgICAgIGtu
b3cgdGhlIHNvdXJjZXMgYXJlIHVzZWQgYnkgYSBzaW5nbGUgdGhyZWFkLCB3aGljaCBoYXMgYW4g
aW1wYWN0CisgICAgICAgIGluIHRoZSBwZXJmb3JtYW5jZSAobXV0ZXgsIEdDYW5jZWxsYWJsZSwg
ZXRjLikuIFRoZSBuZXcgY2xhc3MKKyAgICAgICAgR1RocmVhZFNhZmVNYWluTG9vcFNvdXJjZSBp
bmhlcml0cyBmcm9tIEdNYWluTG9vcFNvdXJjZSBvdmVycmlkaW5nCisgICAgICAgIHRoZSBuZXcg
dmlydHVhbCBtZXRob2RzIGFuZCBjYWxsaW5nIHRoZSBwYXJlbnQgZm9yIHRoZSBjb21tb24gY29k
ZS4KKyAgICAgICAgR011dGV4TG9ja2VyIG5vdyBzdXBwb3J0cyByZWN1cnNpdmUgbXV0ZXhlcywg
aXQncyBhIHRlbXBsYXRlIHRoYXQKKyAgICAgICAgY2FuIHdyYXAgYSBHTXV0ZXggb3IgYSBHUmVj
TXV0ZXguIEdUaHJlYWRTYWZlTWFpbkxvb3BTb3VyY2UgdXNlcyBhCisgICAgICAgIHJlY3Vyc2l2
ZSBtdXRleCB1c2luZyB0aGUgbmV3IEdNdXRleExvY2tlciBBUEkuCisKKyAgICAgICAgKiB3dGYv
UGxhdGZvcm1FZmwuY21ha2U6IEFkZCBuZXcgZmlsZSB0byBjb21waWxhdGlvbi4KKyAgICAgICAg
KiB3dGYvUGxhdGZvcm1HVEsuY21ha2U6IERpdHRvLgorICAgICAgICAqIHd0Zi9nb2JqZWN0L0dN
YWluTG9vcFNvdXJjZS5jcHA6CisgICAgICAgIChXVEY6OkdNYWluTG9vcFNvdXJjZTo6R01haW5M
b29wU291cmNlKToKKyAgICAgICAgKFdURjo6R01haW5Mb29wU291cmNlOjp+R01haW5Mb29wU291
cmNlKToKKyAgICAgICAgKFdURjo6R01haW5Mb29wU291cmNlOjpjYW5jZWwpOgorICAgICAgICAo
V1RGOjpHTWFpbkxvb3BTb3VyY2U6OnNjaGVkdWxlKToKKyAgICAgICAgKFdURjo6R01haW5Mb29w
U291cmNlOjpzY2hlZHVsZUFmdGVyRGVsYXkpOgorICAgICAgICAoV1RGOjpHTWFpbkxvb3BTb3Vy
Y2U6OnByZXBhcmVWb2lkQ2FsbGJhY2spOgorICAgICAgICAoV1RGOjpHTWFpbkxvb3BTb3VyY2U6
OmZpbmlzaFZvaWRDYWxsYmFjayk6CisgICAgICAgIChXVEY6OkdNYWluTG9vcFNvdXJjZTo6dm9p
ZENhbGxiYWNrKToKKyAgICAgICAgKFdURjo6R01haW5Mb29wU291cmNlOjpwcmVwYXJlQm9vbENh
bGxiYWNrKToKKyAgICAgICAgKFdURjo6R01haW5Mb29wU291cmNlOjpmaW5pc2hCb29sQ2FsbGJh
Y2spOgorICAgICAgICAoV1RGOjpHTWFpbkxvb3BTb3VyY2U6OmJvb2xDYWxsYmFjayk6CisgICAg
ICAgIChXVEY6OkdNYWluTG9vcFNvdXJjZTo6c29ja2V0Q2FsbGJhY2spOgorICAgICAgICAoV1RG
OjpHTWFpbkxvb3BTb3VyY2U6OmNhbmNlbFdpdGhvdXRMb2NraW5nKTogRGVsZXRlZC4KKyAgICAg
ICAgKiB3dGYvZ29iamVjdC9HTWFpbkxvb3BTb3VyY2UuaDoKKyAgICAgICAgKiB3dGYvZ29iamVj
dC9HTXV0ZXhMb2NrZXIuaDoKKyAgICAgICAgKFdURjo6TXV0ZXhXcmFwcGVyPEdNdXRleD46Omxv
Y2spOgorICAgICAgICAoV1RGOjpNdXRleFdyYXBwZXI8R011dGV4Pjo6dW5sb2NrKToKKyAgICAg
ICAgKFdURjo6TXV0ZXhXcmFwcGVyPEdSZWNNdXRleD46OmxvY2spOgorICAgICAgICAoV1RGOjpN
dXRleFdyYXBwZXI8R1JlY011dGV4Pjo6dW5sb2NrKToKKyAgICAgICAgKFdURjo6R011dGV4TG9j
a2VyOjpHTXV0ZXhMb2NrZXIpOgorICAgICAgICAoV1RGOjpHTXV0ZXhMb2NrZXI6OmxvY2spOgor
ICAgICAgICAoV1RGOjpHTXV0ZXhMb2NrZXI6OnVubG9jayk6CisgICAgICAgICogd3RmL2dvYmpl
Y3QvR1RocmVhZFNhZmVNYWluTG9vcFNvdXJjZS5jcHA6IEFkZGVkLgorICAgICAgICAoV1RGOjpH
VGhyZWFkU2FmZU1haW5Mb29wU291cmNlOjpHVGhyZWFkU2FmZU1haW5Mb29wU291cmNlKToKKyAg
ICAgICAgKFdURjo6R1RocmVhZFNhZmVNYWluTG9vcFNvdXJjZTo6fkdUaHJlYWRTYWZlTWFpbkxv
b3BTb3VyY2UpOgorICAgICAgICAoV1RGOjpHVGhyZWFkU2FmZU1haW5Mb29wU291cmNlOjpjYW5j
ZWwpOgorICAgICAgICAoV1RGOjpHVGhyZWFkU2FmZU1haW5Mb29wU291cmNlOjpzY2hlZHVsZSk6
CisgICAgICAgIChXVEY6OkdUaHJlYWRTYWZlTWFpbkxvb3BTb3VyY2U6OnNjaGVkdWxlQWZ0ZXJE
ZWxheSk6CisgICAgICAgIChXVEY6OkdUaHJlYWRTYWZlTWFpbkxvb3BTb3VyY2U6OnByZXBhcmVW
b2lkQ2FsbGJhY2spOgorICAgICAgICAoV1RGOjpHVGhyZWFkU2FmZU1haW5Mb29wU291cmNlOjpm
aW5pc2hWb2lkQ2FsbGJhY2spOgorICAgICAgICAoV1RGOjpHVGhyZWFkU2FmZU1haW5Mb29wU291
cmNlOjp2b2lkQ2FsbGJhY2spOgorICAgICAgICAoV1RGOjpHVGhyZWFkU2FmZU1haW5Mb29wU291
cmNlOjpwcmVwYXJlQm9vbENhbGxiYWNrKToKKyAgICAgICAgKFdURjo6R1RocmVhZFNhZmVNYWlu
TG9vcFNvdXJjZTo6ZmluaXNoQm9vbENhbGxiYWNrKToKKyAgICAgICAgKFdURjo6R1RocmVhZFNh
ZmVNYWluTG9vcFNvdXJjZTo6Ym9vbENhbGxiYWNrKToKKyAgICAgICAgKiB3dGYvZ29iamVjdC9H
VGhyZWFkU2FmZU1haW5Mb29wU291cmNlLmg6IEFkZGVkLgorCiAyMDE0LTA5LTE4ICBDYXJsb3Mg
R2FyY2lhIENhbXBvcyAgPGNnYXJjaWFAaWdhbGlhLmNvbT4KIAogICAgICAgICBbR1RLXSBEb3Qg
bm90IGFsbG93IHRvIGNyZWF0ZSBkZWxldGUtb24tZGVzdHJveSBHTWFpbkxvb3BTb3VyY2VzCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9QbGF0Zm9ybUVmbC5jbWFrZSBiL1NvdXJjZS9XVEYv
d3RmL1BsYXRmb3JtRWZsLmNtYWtlCmluZGV4IGUxM2RkNGIuLjJkOGQ4MGUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XVEYvd3RmL1BsYXRmb3JtRWZsLmNtYWtlCisrKyBiL1NvdXJjZS9XVEYvd3RmL1Bs
YXRmb3JtRWZsLmNtYWtlCkBAIC00LDYgKzQsNyBAQCBsaXN0KEFQUEVORCBXVEZfU09VUkNFUwog
CiAgICAgZ29iamVjdC9HTWFpbkxvb3BTb3VyY2UuY3BwCiAgICAgZ29iamVjdC9HUmVmUHRyLmNw
cAorICAgIGdvYmplY3QvR1RocmVhZFNhZmVNYWluTG9vcFNvdXJjZS5jcHAKICkKIAogbGlzdChB
UFBFTkQgV1RGX0xJQlJBUklFUwpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvUGxhdGZvcm1H
VEsuY21ha2UgYi9Tb3VyY2UvV1RGL3d0Zi9QbGF0Zm9ybUdUSy5jbWFrZQppbmRleCBkNzJkNzA4
Li5lNjk4ODkyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9QbGF0Zm9ybUdUSy5jbWFrZQor
KysgYi9Tb3VyY2UvV1RGL3d0Zi9QbGF0Zm9ybUdUSy5jbWFrZQpAQCAtMSw2ICsxLDcgQEAKIGxp
c3QoQVBQRU5EIFdURl9TT1VSQ0VTCiAgICAgZ29iamVjdC9HTWFpbkxvb3BTb3VyY2UuY3BwCiAg
ICAgZ29iamVjdC9HUmVmUHRyLmNwcAorICAgIGdvYmplY3QvR1RocmVhZFNhZmVNYWluTG9vcFNv
dXJjZS5jcHAKICAgICBnb2JqZWN0L0dsaWJVdGlsaXRpZXMuY3BwCiAKICAgICBndGsvTWFpblRo
cmVhZEd0ay5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL2dvYmplY3QvR01haW5Mb29w
U291cmNlLmNwcCBiL1NvdXJjZS9XVEYvd3RmL2dvYmplY3QvR01haW5Mb29wU291cmNlLmNwcApp
bmRleCBiNjdmZGM3Li5lNWQ1OTBmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9nb2JqZWN0
L0dNYWluTG9vcFNvdXJjZS5jcHAKKysrIGIvU291cmNlL1dURi93dGYvZ29iamVjdC9HTWFpbkxv
b3BTb3VyY2UuY3BwCkBAIC0yNCwxMiArMjQsMTEgQEAKICAqLwogCiAjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiR01haW5Mb29wU291cmNlLmgiCiAKICNpZiBVU0UoR0xJQikKIAotI2lu
Y2x1ZGUgIkdNYWluTG9vcFNvdXJjZS5oIgogI2luY2x1ZGUgPGdpby9naW8uaD4KLSNpbmNsdWRl
IDx3dGYvZ29iamVjdC9HTXV0ZXhMb2NrZXIuaD4KIAogbmFtZXNwYWNlIFdURiB7CiAKQEAgLTQy
LDIwICs0MSwxNyBAQCBHTWFpbkxvb3BTb3VyY2U6OkdNYWluTG9vcFNvdXJjZSgpCiAgICAgOiBt
X2RlbGV0ZU9uRGVzdHJveShEb05vdERlbGV0ZU9uRGVzdHJveSkKICAgICAsIG1fc3RhdHVzKFJl
YWR5KQogewotICAgIGdfbXV0ZXhfaW5pdCgmbV9tdXRleCk7CiB9CiAKIEdNYWluTG9vcFNvdXJj
ZTo6R01haW5Mb29wU291cmNlKERlbGV0ZU9uRGVzdHJveVR5cGUgZGVsZXRlT25EZXN0cm95KQog
ICAgIDogbV9kZWxldGVPbkRlc3Ryb3koZGVsZXRlT25EZXN0cm95KQogICAgICwgbV9zdGF0dXMo
UmVhZHkpCiB7Ci0gICAgZ19tdXRleF9pbml0KCZtX211dGV4KTsKIH0KIAogR01haW5Mb29wU291
cmNlOjp+R01haW5Mb29wU291cmNlKCkKIHsKICAgICBjYW5jZWwoKTsKLSAgICBnX211dGV4X2Ns
ZWFyKCZtX211dGV4KTsKIH0KIAogYm9vbCBHTWFpbkxvb3BTb3VyY2U6OmlzU2NoZWR1bGVkKCkg
Y29uc3QKQEAgLTcwLDI4ICs2NiwxNSBAQCBib29sIEdNYWluTG9vcFNvdXJjZTo6aXNBY3RpdmUo
KSBjb25zdAogCiB2b2lkIEdNYWluTG9vcFNvdXJjZTo6Y2FuY2VsKCkKIHsKLSAgICBHTXV0ZXhM
b2NrZXIgbG9ja2VyKG1fbXV0ZXgpOwotICAgIGNhbmNlbFdpdGhvdXRMb2NraW5nKCk7Ci19Ci0K
LXZvaWQgR01haW5Mb29wU291cmNlOjpjYW5jZWxXaXRob3V0TG9ja2luZygpCi17CiAgICAgLy8g
RGVsZXRlLW9uLWRlc3Ryb3kgR01haW5Mb29wU291cmNlIG9iamVjdHMgY2FuJ3QgYmUgY2FuY2Vs
bGVkLgogICAgIGlmIChtX2RlbGV0ZU9uRGVzdHJveSA9PSBEZWxldGVPbkRlc3Ryb3kpCiAgICAg
ICAgIHJldHVybjsKIAogICAgIC8vIEEgdmFsaWQgY29udGV4dCBzaG91bGQgb25seSBiZSBwcmVz
ZW50IGlmIEdNYWluTG9vcFNvdXJjZSBpcyBpbiB0aGUgU2NoZWR1bGVkIG9yIERpc3BhdGNoaW5n
IHN0YXRlLgogICAgIEFTU0VSVCghbV9jb250ZXh0LnNvdXJjZSB8fCBtX3N0YXR1cyA9PSBTY2hl
ZHVsZWQgfHwgbV9zdGF0dXMgPT0gRGlzcGF0Y2hpbmcpOwotICAgIC8vIFRoZSBnZW5lcmFsIGNh
bmNlbGxhYmxlIG9iamVjdCBzaG91bGQgb25seSBiZSBwcmVzZW50IGlmIHdlJ3JlIGN1cnJlbnRs
eSBkaXNwYXRjaGluZyB0aGlzIEdNYWluTG9vcFNvdXJjZS4KLSAgICBBU1NFUlQoIW1fY2FuY2Vs
bGFibGUgfHwgbV9zdGF0dXMgPT0gRGlzcGF0Y2hpbmcpOwogCiAgICAgbV9zdGF0dXMgPSBSZWFk
eTsKIAotICAgIC8vIFRoZSBzb3VyY2UgaXMgcGVyaGFwcyBiZWluZyBjYW5jZWxsZWQgaW4gdGhl
IG1pZGRsZSBvZiBhIGNhbGxiYWNrIGRpc3BhdGNoLgotICAgIC8vIENhbmNlbGxpbmcgdGhpcyBH
Q2FuY2VsbGFibGUgb2JqZWN0IHdpbGwgY29udmV5IHRoaXMgaW5mb3JtYXRpb24gdG8gdGhlCi0g
ICAgLy8gY3VycmVudCBleGVjdXRpb24gY29udGV4dCB3aGVuIHRoZSBjYWxsYmFjayBkaXNwYXRj
aCBpcyBmaW5pc2hlZC4KLSAgICBnX2NhbmNlbGxhYmxlX2NhbmNlbChtX2NhbmNlbGxhYmxlLmdl
dCgpKTsKLSAgICBtX2NhbmNlbGxhYmxlID0gbnVsbHB0cjsKICAgICBnX2NhbmNlbGxhYmxlX2Nh
bmNlbChtX2NvbnRleHQuc29ja2V0Q2FuY2VsbGFibGUuZ2V0KCkpOwogCiAgICAgaWYgKCFtX2Nv
bnRleHQuc291cmNlKQpAQCAtMTE1LDEzICs5OCwxMiBAQCB2b2lkIEdNYWluTG9vcFNvdXJjZTo6
c2NoZWR1bGVJZGxlU291cmNlKGNvbnN0IGNoYXIqIG5hbWUsIEdTb3VyY2VGdW5jIHNvdXJjZUZ1
bgogCiB2b2lkIEdNYWluTG9vcFNvdXJjZTo6c2NoZWR1bGUoY29uc3QgY2hhciogbmFtZSwgc3Rk
OjpmdW5jdGlvbjx2b2lkICgpPiBmdW5jdGlvbiwgaW50IHByaW9yaXR5LCBzdGQ6OmZ1bmN0aW9u
PHZvaWQgKCk+IGRlc3Ryb3lGdW5jdGlvbiwgR01haW5Db250ZXh0KiBjb250ZXh0KQogewotICAg
IEdNdXRleExvY2tlciBsb2NrZXIobV9tdXRleCk7Ci0gICAgY2FuY2VsV2l0aG91dExvY2tpbmco
KTsKKyAgICBjYW5jZWwoKTsKIAogICAgIEFTU0VSVCghbV9jb250ZXh0LnNvdXJjZSk7CiAgICAg
bV9jb250ZXh0ID0gewogICAgICAgICBhZG9wdEdSZWYoZ19pZGxlX3NvdXJjZV9uZXcoKSksCi0g
ICAgICAgIGFkb3B0R1JlZihnX2NhbmNlbGxhYmxlX25ldygpKSwKKyAgICAgICAgbnVsbHB0ciwg
Ly8gY2FuY2VsbGFibGUKICAgICAgICAgbnVsbHB0ciwgLy8gc29ja2V0Q2FuY2VsbGFibGUKICAg
ICAgICAgV1RGOjptb3ZlKGZ1bmN0aW9uKSwKICAgICAgICAgbnVsbHB0ciwgLy8gYm9vbENhbGxi
YWNrCkBAIC0xMzMsMTMgKzExNSwxMiBAQCB2b2lkIEdNYWluTG9vcFNvdXJjZTo6c2NoZWR1bGUo
Y29uc3QgY2hhciogbmFtZSwgc3RkOjpmdW5jdGlvbjx2b2lkICgpPiBmdW5jdGlvbgogCiB2b2lk
IEdNYWluTG9vcFNvdXJjZTo6c2NoZWR1bGUoY29uc3QgY2hhciogbmFtZSwgc3RkOjpmdW5jdGlv
bjxib29sICgpPiBmdW5jdGlvbiwgaW50IHByaW9yaXR5LCBzdGQ6OmZ1bmN0aW9uPHZvaWQgKCk+
IGRlc3Ryb3lGdW5jdGlvbiwgR01haW5Db250ZXh0KiBjb250ZXh0KQogewotICAgIEdNdXRleExv
Y2tlciBsb2NrZXIobV9tdXRleCk7Ci0gICAgY2FuY2VsV2l0aG91dExvY2tpbmcoKTsKKyAgICBj
YW5jZWwoKTsKIAogICAgIEFTU0VSVCghbV9jb250ZXh0LnNvdXJjZSk7CiAgICAgbV9jb250ZXh0
ID0gewogICAgICAgICBhZG9wdEdSZWYoZ19pZGxlX3NvdXJjZV9uZXcoKSksCi0gICAgICAgIGFk
b3B0R1JlZihnX2NhbmNlbGxhYmxlX25ldygpKSwKKyAgICAgICAgbnVsbHB0ciwgLy8gY2FuY2Vs
bGFibGUKICAgICAgICAgbnVsbHB0ciwgLy8gc29ja2V0Q2FuY2VsbGFibGUKICAgICAgICAgbnVs
bHB0ciwgLy8gdm9pZENhbGxiYWNrCiAgICAgICAgIFdURjo6bW92ZShmdW5jdGlvbiksCkBAIC0x
NTEsMTQgKzEzMiwxMyBAQCB2b2lkIEdNYWluTG9vcFNvdXJjZTo6c2NoZWR1bGUoY29uc3QgY2hh
ciogbmFtZSwgc3RkOjpmdW5jdGlvbjxib29sICgpPiBmdW5jdGlvbgogCiB2b2lkIEdNYWluTG9v
cFNvdXJjZTo6c2NoZWR1bGUoY29uc3QgY2hhciogbmFtZSwgc3RkOjpmdW5jdGlvbjxib29sIChH
SU9Db25kaXRpb24pPiBmdW5jdGlvbiwgR1NvY2tldCogc29ja2V0LCBHSU9Db25kaXRpb24gY29u
ZGl0aW9uLCBzdGQ6OmZ1bmN0aW9uPHZvaWQgKCk+IGRlc3Ryb3lGdW5jdGlvbiwgR01haW5Db250
ZXh0KiBjb250ZXh0KQogewotICAgIEdNdXRleExvY2tlciBsb2NrZXIobV9tdXRleCk7Ci0gICAg
Y2FuY2VsV2l0aG91dExvY2tpbmcoKTsKKyAgICBjYW5jZWwoKTsKIAogICAgIEFTU0VSVCghbV9j
b250ZXh0LnNvdXJjZSk7CiAgICAgR0NhbmNlbGxhYmxlKiBzb2NrZXRDYW5jZWxsYWJsZSA9IGdf
Y2FuY2VsbGFibGVfbmV3KCk7CiAgICAgbV9jb250ZXh0ID0gewogICAgICAgICBhZG9wdEdSZWYo
Z19zb2NrZXRfY3JlYXRlX3NvdXJjZShzb2NrZXQsIGNvbmRpdGlvbiwgc29ja2V0Q2FuY2VsbGFi
bGUpKSwKLSAgICAgICAgYWRvcHRHUmVmKGdfY2FuY2VsbGFibGVfbmV3KCkpLAorICAgICAgICBu
dWxscHRyLCAvLyBjYW5jZWxsYWJsZQogICAgICAgICBhZG9wdEdSZWYoc29ja2V0Q2FuY2VsbGFi
bGUpLAogICAgICAgICBudWxscHRyLCAvLyB2b2lkQ2FsbGJhY2sKICAgICAgICAgbnVsbHB0ciwg
Ly8gYm9vbENhbGxiYWNrCkBAIC0xODcsMTMgKzE2NywxMiBAQCB2b2lkIEdNYWluTG9vcFNvdXJj
ZTo6c2NoZWR1bGVUaW1lb3V0U291cmNlKGNvbnN0IGNoYXIqIG5hbWUsIEdTb3VyY2VGdW5jIHNv
dXJjZQogCiB2b2lkIEdNYWluTG9vcFNvdXJjZTo6c2NoZWR1bGVBZnRlckRlbGF5KGNvbnN0IGNo
YXIqIG5hbWUsIHN0ZDo6ZnVuY3Rpb248dm9pZCAoKT4gZnVuY3Rpb24sIHN0ZDo6Y2hyb25vOjpt
aWxsaXNlY29uZHMgZGVsYXksIGludCBwcmlvcml0eSwgc3RkOjpmdW5jdGlvbjx2b2lkICgpPiBk
ZXN0cm95RnVuY3Rpb24sIEdNYWluQ29udGV4dCogY29udGV4dCkKIHsKLSAgICBHTXV0ZXhMb2Nr
ZXIgbG9ja2VyKG1fbXV0ZXgpOwotICAgIGNhbmNlbFdpdGhvdXRMb2NraW5nKCk7CisgICAgY2Fu
Y2VsKCk7CiAKICAgICBBU1NFUlQoIW1fY29udGV4dC5zb3VyY2UpOwogICAgIG1fY29udGV4dCA9
IHsKICAgICAgICAgYWRvcHRHUmVmKGdfdGltZW91dF9zb3VyY2VfbmV3KGRlbGF5LmNvdW50KCkp
KSwKLSAgICAgICAgYWRvcHRHUmVmKGdfY2FuY2VsbGFibGVfbmV3KCkpLAorICAgICAgICBudWxs
cHRyLCAvLyBjYW5jZWxsYWJsZQogICAgICAgICBudWxscHRyLCAvLyBzb2NrZXRDYW5jZWxsYWJs
ZQogICAgICAgICBXVEY6Om1vdmUoZnVuY3Rpb24pLAogICAgICAgICBudWxscHRyLCAvLyBib29s
Q2FsbGJhY2sKQEAgLTIwNSwxMyArMTg0LDEyIEBAIHZvaWQgR01haW5Mb29wU291cmNlOjpzY2hl
ZHVsZUFmdGVyRGVsYXkoY29uc3QgY2hhciogbmFtZSwgc3RkOjpmdW5jdGlvbjx2b2lkICgpCiAK
IHZvaWQgR01haW5Mb29wU291cmNlOjpzY2hlZHVsZUFmdGVyRGVsYXkoY29uc3QgY2hhciogbmFt
ZSwgc3RkOjpmdW5jdGlvbjxib29sICgpPiBmdW5jdGlvbiwgc3RkOjpjaHJvbm86Om1pbGxpc2Vj
b25kcyBkZWxheSwgaW50IHByaW9yaXR5LCBzdGQ6OmZ1bmN0aW9uPHZvaWQgKCk+IGRlc3Ryb3lG
dW5jdGlvbiwgR01haW5Db250ZXh0KiBjb250ZXh0KQogewotICAgIEdNdXRleExvY2tlciBsb2Nr
ZXIobV9tdXRleCk7Ci0gICAgY2FuY2VsV2l0aG91dExvY2tpbmcoKTsKKyAgICBjYW5jZWwoKTsK
IAogICAgIEFTU0VSVCghbV9jb250ZXh0LnNvdXJjZSk7CiAgICAgbV9jb250ZXh0ID0gewogICAg
ICAgICBhZG9wdEdSZWYoZ190aW1lb3V0X3NvdXJjZV9uZXcoZGVsYXkuY291bnQoKSkpLAotICAg
ICAgICBhZG9wdEdSZWYoZ19jYW5jZWxsYWJsZV9uZXcoKSksCisgICAgICAgIG51bGxwdHIsIC8v
IGNhbmNlbGxhYmxlCiAgICAgICAgIG51bGxwdHIsIC8vIHNvY2tldENhbmNlbGxhYmxlCiAgICAg
ICAgIG51bGxwdHIsIC8vIHZvaWRDYWxsYmFjawogICAgICAgICBXVEY6Om1vdmUoZnVuY3Rpb24p
LApAQCAtMjIzLDEzICsyMDEsMTIgQEAgdm9pZCBHTWFpbkxvb3BTb3VyY2U6OnNjaGVkdWxlQWZ0
ZXJEZWxheShjb25zdCBjaGFyKiBuYW1lLCBzdGQ6OmZ1bmN0aW9uPGJvb2wgKCkKIAogdm9pZCBH
TWFpbkxvb3BTb3VyY2U6OnNjaGVkdWxlQWZ0ZXJEZWxheShjb25zdCBjaGFyKiBuYW1lLCBzdGQ6
OmZ1bmN0aW9uPHZvaWQgKCk+IGZ1bmN0aW9uLCBzdGQ6OmNocm9ubzo6c2Vjb25kcyBkZWxheSwg
aW50IHByaW9yaXR5LCBzdGQ6OmZ1bmN0aW9uPHZvaWQgKCk+IGRlc3Ryb3lGdW5jdGlvbiwgR01h
aW5Db250ZXh0KiBjb250ZXh0KQogewotICAgIEdNdXRleExvY2tlciBsb2NrZXIobV9tdXRleCk7
Ci0gICAgY2FuY2VsV2l0aG91dExvY2tpbmcoKTsKKyAgICBjYW5jZWwoKTsKIAogICAgIEFTU0VS
VCghbV9jb250ZXh0LnNvdXJjZSk7CiAgICAgbV9jb250ZXh0ID0gewogICAgICAgICBhZG9wdEdS
ZWYoZ190aW1lb3V0X3NvdXJjZV9uZXdfc2Vjb25kcyhkZWxheS5jb3VudCgpKSksCi0gICAgICAg
IGFkb3B0R1JlZihnX2NhbmNlbGxhYmxlX25ldygpKSwKKyAgICAgICAgbnVsbHB0ciwgLy8gY2Fu
Y2VsbGFibGUKICAgICAgICAgbnVsbHB0ciwgLy8gc29ja2V0Q2FuY2VsbGFibGUKICAgICAgICAg
V1RGOjptb3ZlKGZ1bmN0aW9uKSwKICAgICAgICAgbnVsbHB0ciwgLy8gYm9vbENhbGxiYWNrCkBA
IC0yNDEsMTMgKzIxOCwxMiBAQCB2b2lkIEdNYWluTG9vcFNvdXJjZTo6c2NoZWR1bGVBZnRlckRl
bGF5KGNvbnN0IGNoYXIqIG5hbWUsIHN0ZDo6ZnVuY3Rpb248dm9pZCAoKQogCiB2b2lkIEdNYWlu
TG9vcFNvdXJjZTo6c2NoZWR1bGVBZnRlckRlbGF5KGNvbnN0IGNoYXIqIG5hbWUsIHN0ZDo6ZnVu
Y3Rpb248Ym9vbCAoKT4gZnVuY3Rpb24sIHN0ZDo6Y2hyb25vOjpzZWNvbmRzIGRlbGF5LCBpbnQg
cHJpb3JpdHksIHN0ZDo6ZnVuY3Rpb248dm9pZCAoKT4gZGVzdHJveUZ1bmN0aW9uLCBHTWFpbkNv
bnRleHQqIGNvbnRleHQpCiB7Ci0gICAgR011dGV4TG9ja2VyIGxvY2tlcihtX211dGV4KTsKLSAg
ICBjYW5jZWxXaXRob3V0TG9ja2luZygpOworICAgIGNhbmNlbCgpOwogCiAgICAgQVNTRVJUKCFt
X2NvbnRleHQuc291cmNlKTsKICAgICBtX2NvbnRleHQgPSB7CiAgICAgICAgIGFkb3B0R1JlZihn
X3RpbWVvdXRfc291cmNlX25ld19zZWNvbmRzKGRlbGF5LmNvdW50KCkpKSwKLSAgICAgICAgYWRv
cHRHUmVmKGdfY2FuY2VsbGFibGVfbmV3KCkpLAorICAgICAgICBudWxscHRyLCAvLyBjYW5jZWxs
YWJsZQogICAgICAgICBudWxscHRyLCAvLyBzb2NrZXRDYW5jZWxsYWJsZQogICAgICAgICBudWxs
cHRyLCAvLyB2b2lkQ2FsbGJhY2sKICAgICAgICAgV1RGOjptb3ZlKGZ1bmN0aW9uKSwKQEAgLTI4
Nyw4NiArMjYzLDgwIEBAIHZvaWQgR01haW5Mb29wU291cmNlOjpzY2hlZHVsZUFmdGVyRGVsYXlB
bmREZWxldGVPbkRlc3Ryb3koY29uc3QgY2hhciogbmFtZSwgc3RkCiAgICAgY3JlYXRlKCkuc2No
ZWR1bGVBZnRlckRlbGF5KG5hbWUsIGZ1bmN0aW9uLCBkZWxheSwgcHJpb3JpdHksIGRlc3Ryb3lG
dW5jdGlvbiwgY29udGV4dCk7CiB9CiAKLXZvaWQgR01haW5Mb29wU291cmNlOjp2b2lkQ2FsbGJh
Y2soKQorYm9vbCBHTWFpbkxvb3BTb3VyY2U6OnByZXBhcmVWb2lkQ2FsbGJhY2soQ29udGV4dCYg
Y29udGV4dCkKIHsKLSAgICBDb250ZXh0IGNvbnRleHQ7Ci0KLSAgICB7Ci0gICAgICAgIEdNdXRl
eExvY2tlciBsb2NrZXIobV9tdXRleCk7Ci0gICAgICAgIGlmICghbV9jb250ZXh0LnNvdXJjZSkK
LSAgICAgICAgICAgIHJldHVybjsKKyAgICBpZiAoIW1fY29udGV4dC5zb3VyY2UpCisgICAgICAg
IHJldHVybiBmYWxzZTsKIAotICAgICAgICBjb250ZXh0ID0gV1RGOjptb3ZlKG1fY29udGV4dCk7
CisgICAgY29udGV4dCA9IFdURjo6bW92ZShtX2NvbnRleHQpOwogCi0gICAgICAgIEFTU0VSVChj
b250ZXh0LnZvaWRDYWxsYmFjayk7Ci0gICAgICAgIEFTU0VSVChtX3N0YXR1cyA9PSBTY2hlZHVs
ZWQpOwotICAgICAgICBtX3N0YXR1cyA9IERpc3BhdGNoaW5nOworICAgIEFTU0VSVChjb250ZXh0
LnZvaWRDYWxsYmFjayk7CisgICAgQVNTRVJUKG1fc3RhdHVzID09IFNjaGVkdWxlZCk7CisgICAg
bV9zdGF0dXMgPSBEaXNwYXRjaGluZzsKIAotICAgICAgICBtX2NhbmNlbGxhYmxlID0gY29udGV4
dC5jYW5jZWxsYWJsZTsKLSAgICB9CisgICAgcmV0dXJuIHRydWU7Cit9CiAKLSAgICBjb250ZXh0
LnZvaWRDYWxsYmFjaygpOwordm9pZCBHTWFpbkxvb3BTb3VyY2U6OmZpbmlzaFZvaWRDYWxsYmFj
aygpCit7CisgICAgbV9zdGF0dXMgPSBSZWFkeTsKK30KIAotICAgIGlmIChnX2NhbmNlbGxhYmxl
X2lzX2NhbmNlbGxlZChjb250ZXh0LmNhbmNlbGxhYmxlLmdldCgpKSkgewotICAgICAgICBjb250
ZXh0LmRlc3Ryb3lTb3VyY2UoKTsKK3ZvaWQgR01haW5Mb29wU291cmNlOjp2b2lkQ2FsbGJhY2so
KQoreworICAgIENvbnRleHQgY29udGV4dDsKKyAgICBpZiAoIXByZXBhcmVWb2lkQ2FsbGJhY2so
Y29udGV4dCkpCiAgICAgICAgIHJldHVybjsKLSAgICB9CiAKLSAgICBib29sIHNob3VsZFNlbGZE
ZXN0cnVjdCA9IGZhbHNlOwotICAgIHsKLSAgICAgICAgR011dGV4TG9ja2VyIGxvY2tlcihtX211
dGV4KTsKLSAgICAgICAgbV9zdGF0dXMgPSBSZWFkeTsKLSAgICAgICAgbV9jYW5jZWxsYWJsZSA9
IG51bGxwdHI7Ci0gICAgICAgIHNob3VsZFNlbGZEZXN0cnVjdCA9IG1fZGVsZXRlT25EZXN0cm95
ID09IERlbGV0ZU9uRGVzdHJveTsKKyAgICBjb250ZXh0LnZvaWRDYWxsYmFjaygpOworICAgIGlm
IChtX3N0YXR1cyAhPSBSZWFkeSAmJiAhbV9jb250ZXh0LnNvdXJjZSkgeworICAgICAgICAvLyBT
d2l0Y2ggdG8gUmVhZHkgaWYgaXQgaGFzbid0IGJlZW4gcmUtc2NoZWR1bGVkIG9yIGNhbmNlbGxl
ZC4KKyAgICAgICAgZmluaXNoVm9pZENhbGxiYWNrKCk7CiAgICAgfQogCiAgICAgY29udGV4dC5k
ZXN0cm95U291cmNlKCk7Ci0gICAgaWYgKHNob3VsZFNlbGZEZXN0cnVjdCkKKyAgICBpZiAobV9k
ZWxldGVPbkRlc3Ryb3kgPT0gRGVsZXRlT25EZXN0cm95KQogICAgICAgICBkZWxldGUgdGhpczsK
IH0KIAotYm9vbCBHTWFpbkxvb3BTb3VyY2U6OmJvb2xDYWxsYmFjaygpCitib29sIEdNYWluTG9v
cFNvdXJjZTo6cHJlcGFyZUJvb2xDYWxsYmFjayhDb250ZXh0JiBjb250ZXh0KQogewotICAgIENv
bnRleHQgY29udGV4dDsKLQotICAgIHsKLSAgICAgICAgR011dGV4TG9ja2VyIGxvY2tlcihtX211
dGV4KTsKLSAgICAgICAgaWYgKCFtX2NvbnRleHQuc291cmNlKQotICAgICAgICAgICAgcmV0dXJu
IFN0b3A7Ci0KLSAgICAgICAgY29udGV4dCA9IFdURjo6bW92ZShtX2NvbnRleHQpOworICAgIGlm
ICghbV9jb250ZXh0LnNvdXJjZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgICAgIEFT
U0VSVChjb250ZXh0LmJvb2xDYWxsYmFjayk7Ci0gICAgICAgIEFTU0VSVChtX3N0YXR1cyA9PSBT
Y2hlZHVsZWQgfHwgbV9zdGF0dXMgPT0gRGlzcGF0Y2hpbmcpOwotICAgICAgICBtX3N0YXR1cyA9
IERpc3BhdGNoaW5nOworICAgIGNvbnRleHQgPSBXVEY6Om1vdmUobV9jb250ZXh0KTsKIAotICAg
ICAgICBtX2NhbmNlbGxhYmxlID0gY29udGV4dC5jYW5jZWxsYWJsZTsKLSAgICB9CisgICAgQVNT
RVJUKGNvbnRleHQuYm9vbENhbGxiYWNrKTsKKyAgICBBU1NFUlQobV9zdGF0dXMgPT0gU2NoZWR1
bGVkIHx8IG1fc3RhdHVzID09IERpc3BhdGNoaW5nKTsKKyAgICBtX3N0YXR1cyA9IERpc3BhdGNo
aW5nOworICAgIHJldHVybiB0cnVlOworfQogCi0gICAgYm9vbCByZXR2YWwgPSBjb250ZXh0LmJv
b2xDYWxsYmFjaygpOwordm9pZCBHTWFpbkxvb3BTb3VyY2U6OmZpbmlzaEJvb2xDYWxsYmFjayhi
b29sIHJldHZhbCwgQ29udGV4dCYgY29udGV4dCkKK3sKKyAgICAvLyBtX3N0YXR1cyBzaG91bGQg
cmVmbGVjdCB3aGV0aGVyIHRoZSBHTWFpbkxvb3BTb3VyY2UgaGFzIGJlZW4gcmVzY2hlZHVsZWQg
ZHVyaW5nIGRpc3BhdGNoLgorICAgIEFTU0VSVCgoIW1fY29udGV4dC5zb3VyY2UgJiYgbV9zdGF0
dXMgPT0gRGlzcGF0Y2hpbmcpIHx8IG1fc3RhdHVzID09IFNjaGVkdWxlZCk7CisgICAgaWYgKHJl
dHZhbCAmJiAhbV9jb250ZXh0LnNvdXJjZSkKKyAgICAgICAgbV9jb250ZXh0ID0gV1RGOjptb3Zl
KGNvbnRleHQpOworICAgIGVsc2UgaWYgKCFyZXR2YWwpCisgICAgICAgIG1fc3RhdHVzID0gUmVh
ZHk7Cit9CiAKLSAgICBpZiAoZ19jYW5jZWxsYWJsZV9pc19jYW5jZWxsZWQoY29udGV4dC5jYW5j
ZWxsYWJsZS5nZXQoKSkpIHsKLSAgICAgICAgY29udGV4dC5kZXN0cm95U291cmNlKCk7Citib29s
IEdNYWluTG9vcFNvdXJjZTo6Ym9vbENhbGxiYWNrKCkKK3sKKyAgICBDb250ZXh0IGNvbnRleHQ7
CisgICAgaWYgKCFwcmVwYXJlQm9vbENhbGxiYWNrKGNvbnRleHQpKQogICAgICAgICByZXR1cm4g
U3RvcDsKLSAgICB9Ci0KLSAgICBib29sIHNob3VsZFNlbGZEZXN0cnVjdCA9IGZhbHNlOwotICAg
IHsKLSAgICAgICAgR011dGV4TG9ja2VyIGxvY2tlcihtX211dGV4KTsKLSAgICAgICAgbV9jYW5j
ZWxsYWJsZSA9IG51bGxwdHI7Ci0gICAgICAgIHNob3VsZFNlbGZEZXN0cnVjdCA9IG1fZGVsZXRl
T25EZXN0cm95ID09IERlbGV0ZU9uRGVzdHJveTsKIAotICAgICAgICAvLyBtX3N0YXR1cyBzaG91
bGQgcmVmbGVjdCB3aGV0aGVyIHRoZSBHTWFpbkxvb3BTb3VyY2UgaGFzIGJlZW4gcmVzY2hlZHVs
ZWQgZHVyaW5nIGRpc3BhdGNoLgotICAgICAgICBBU1NFUlQoKCFtX2NvbnRleHQuc291cmNlICYm
IG1fc3RhdHVzID09IERpc3BhdGNoaW5nKSB8fCBtX3N0YXR1cyA9PSBTY2hlZHVsZWQpOwotICAg
ICAgICBpZiAocmV0dmFsICYmICFtX2NvbnRleHQuc291cmNlKQotICAgICAgICAgICAgbV9jb250
ZXh0ID0gV1RGOjptb3ZlKGNvbnRleHQpOwotICAgICAgICBlbHNlIGlmICghcmV0dmFsKQotICAg
ICAgICAgICAgbV9zdGF0dXMgPSBSZWFkeTsKKyAgICBib29sIHJldHZhbCA9IGNvbnRleHQuYm9v
bENhbGxiYWNrKCk7CisgICAgaWYgKG1fc3RhdHVzICE9IFJlYWR5ICYmICFtX2NvbnRleHQuc291
cmNlKSB7CisgICAgICAgIC8vIFByZXBhcmUgZm9yIGEgbmV3IGl0ZXJhdGlvbiBvciBzd2l0Y2gg
dG8gUmVhZHkgaWYgaXQgaGFzbid0IGJlZW4gcmUtc2NoZWR1bGVkIG9yIGNhbmNlbGxlZC4KKyAg
ICAgICAgZmluaXNoQm9vbENhbGxiYWNrKHJldHZhbCwgY29udGV4dCk7CiAgICAgfQogCiAgICAg
aWYgKGNvbnRleHQuc291cmNlKSB7CiAgICAgICAgIGNvbnRleHQuZGVzdHJveVNvdXJjZSgpOwot
ICAgICAgICBpZiAoc2hvdWxkU2VsZkRlc3RydWN0KQorICAgICAgICBpZiAobV9kZWxldGVPbkRl
c3Ryb3kgPT0gRGVsZXRlT25EZXN0cm95KQogICAgICAgICAgICAgZGVsZXRlIHRoaXM7CiAgICAg
fQogCkBAIC0zNzUsMjEgKzM0NSwxNCBAQCBib29sIEdNYWluTG9vcFNvdXJjZTo6Ym9vbENhbGxi
YWNrKCkKIAogYm9vbCBHTWFpbkxvb3BTb3VyY2U6OnNvY2tldENhbGxiYWNrKEdJT0NvbmRpdGlv
biBjb25kaXRpb24pCiB7Ci0gICAgQ29udGV4dCBjb250ZXh0OwotCi0gICAgewotICAgICAgICBH
TXV0ZXhMb2NrZXIgbG9ja2VyKG1fbXV0ZXgpOwotICAgICAgICBpZiAoIW1fY29udGV4dC5zb3Vy
Y2UpCi0gICAgICAgICAgICByZXR1cm4gU3RvcDsKLQotICAgICAgICBjb250ZXh0ID0gV1RGOjpt
b3ZlKG1fY29udGV4dCk7CisgICAgaWYgKCFtX2NvbnRleHQuc291cmNlKQorICAgICAgICByZXR1
cm4gU3RvcDsKIAotICAgICAgICBBU1NFUlQoY29udGV4dC5zb2NrZXRDYWxsYmFjayk7Ci0gICAg
ICAgIEFTU0VSVChtX3N0YXR1cyA9PSBTY2hlZHVsZWQgfHwgbV9zdGF0dXMgPT0gRGlzcGF0Y2hp
bmcpOwotICAgICAgICBtX3N0YXR1cyA9IERpc3BhdGNoaW5nOworICAgIENvbnRleHQgY29udGV4
dCA9IFdURjo6bW92ZShtX2NvbnRleHQpOwogCi0gICAgICAgIG1fY2FuY2VsbGFibGUgPSBjb250
ZXh0LmNhbmNlbGxhYmxlOwotICAgIH0KKyAgICBBU1NFUlQoY29udGV4dC5zb2NrZXRDYWxsYmFj
ayk7CisgICAgQVNTRVJUKG1fc3RhdHVzID09IFNjaGVkdWxlZCB8fCBtX3N0YXR1cyA9PSBEaXNw
YXRjaGluZyk7CisgICAgbV9zdGF0dXMgPSBEaXNwYXRjaGluZzsKIAogICAgIGlmIChnX2NhbmNl
bGxhYmxlX2lzX2NhbmNlbGxlZChjb250ZXh0LnNvY2tldENhbmNlbGxhYmxlLmdldCgpKSkgewog
ICAgICAgICBjb250ZXh0LmRlc3Ryb3lTb3VyY2UoKTsKQEAgLTM5OCwxOCArMzYxLDkgQEAgYm9v
bCBHTWFpbkxvb3BTb3VyY2U6OnNvY2tldENhbGxiYWNrKEdJT0NvbmRpdGlvbiBjb25kaXRpb24p
CiAKICAgICBib29sIHJldHZhbCA9IGNvbnRleHQuc29ja2V0Q2FsbGJhY2soY29uZGl0aW9uKTsK
IAotICAgIGlmIChnX2NhbmNlbGxhYmxlX2lzX2NhbmNlbGxlZChjb250ZXh0LmNhbmNlbGxhYmxl
LmdldCgpKSkgewotICAgICAgICBjb250ZXh0LmRlc3Ryb3lTb3VyY2UoKTsKLSAgICAgICAgcmV0
dXJuIFN0b3A7Ci0gICAgfQotCi0gICAgewotICAgICAgICBHTXV0ZXhMb2NrZXIgbG9ja2VyKG1f
bXV0ZXgpOwotICAgICAgICBtX2NhbmNlbGxhYmxlID0gbnVsbHB0cjsKLQorICAgIGlmIChtX3N0
YXR1cyAhPSBSZWFkeSAmJiAhbV9jb250ZXh0LnNvdXJjZSkgewogICAgICAgICAvLyBtX3N0YXR1
cyBzaG91bGQgcmVmbGVjdCB3aGV0aGVyIHRoZSBHTWFpbkxvb3BTb3VyY2UgaGFzIGJlZW4gcmVz
Y2hlZHVsZWQgZHVyaW5nIGRpc3BhdGNoLgogICAgICAgICBBU1NFUlQoKCFtX2NvbnRleHQuc291
cmNlICYmIG1fc3RhdHVzID09IERpc3BhdGNoaW5nKSB8fCBtX3N0YXR1cyA9PSBTY2hlZHVsZWQp
OwotCiAgICAgICAgIGlmIChyZXR2YWwgJiYgIW1fY29udGV4dC5zb3VyY2UpCiAgICAgICAgICAg
ICBtX2NvbnRleHQgPSBXVEY6Om1vdmUoY29udGV4dCk7CiAgICAgICAgIGVsc2UgaWYgKCFyZXR2
YWwpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9nb2JqZWN0L0dNYWluTG9vcFNvdXJjZS5o
IGIvU291cmNlL1dURi93dGYvZ29iamVjdC9HTWFpbkxvb3BTb3VyY2UuaAppbmRleCA3MjhjNTgz
Li4zNmRkNDU5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9nb2JqZWN0L0dNYWluTG9vcFNv
dXJjZS5oCisrKyBiL1NvdXJjZS9XVEYvd3RmL2dvYmplY3QvR01haW5Mb29wU291cmNlLmgKQEAg
LTI2LDEzICsyNiwxNCBAQAogI2lmbmRlZiBHTWFpbkxvb3BTb3VyY2VfaAogI2RlZmluZSBHTWFp
bkxvb3BTb3VyY2VfaAogCisjaWYgVVNFKEdMSUIpCisKICNpbmNsdWRlIDxmdW5jdGlvbmFsPgog
I2luY2x1ZGUgPGdsaWIuaD4KICNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KICNpbmNsdWRl
IDx3dGYvZ29iamVjdC9HUmVmUHRyLmg+CiAKIHR5cGVkZWYgc3RydWN0IF9HU29ja2V0IEdTb2Nr
ZXQ7Ci10eXBlZGVmIHVuaW9uIF9HTXV0ZXggR011dGV4OwogCiBuYW1lc3BhY2UgV1RGIHsKIApA
QCAtNDEsNyArNDIsNyBAQCBjbGFzcyBHTWFpbkxvb3BTb3VyY2UgewogICAgIFdURl9NQUtFX0ZB
U1RfQUxMT0NBVEVEOwogcHVibGljOgogICAgIFdURl9FWFBPUlRfUFJJVkFURSBHTWFpbkxvb3BT
b3VyY2UoKTsKLSAgICBXVEZfRVhQT1JUX1BSSVZBVEUgfkdNYWluTG9vcFNvdXJjZSgpOworICAg
IFdURl9FWFBPUlRfUFJJVkFURSB2aXJ0dWFsIH5HTWFpbkxvb3BTb3VyY2UoKTsKIAogICAgIHN0
YXRpYyBjb25zdCBib29sIFN0b3AgPSBmYWxzZTsKICAgICBzdGF0aWMgY29uc3QgYm9vbCBDb250
aW51ZSA9IHRydWU7CkBAIC00OSwxNCArNTAsMTUgQEAgcHVibGljOgogICAgIFdURl9FWFBPUlRf
UFJJVkFURSBib29sIGlzU2NoZWR1bGVkKCkgY29uc3Q7CiAgICAgV1RGX0VYUE9SVF9QUklWQVRF
IGJvb2wgaXNBY3RpdmUoKSBjb25zdDsKIAotICAgIFdURl9FWFBPUlRfUFJJVkFURSB2b2lkIHNj
aGVkdWxlKGNvbnN0IGNoYXIqIG5hbWUsIHN0ZDo6ZnVuY3Rpb248dm9pZCgpPiwgaW50IHByaW9y
aXR5ID0gR19QUklPUklUWV9ERUZBVUxULCBzdGQ6OmZ1bmN0aW9uPHZvaWQoKT4gZGVzdHJveUZ1
bmN0aW9uID0gbnVsbHB0ciwgR01haW5Db250ZXh0KiA9IG51bGxwdHIpOwotICAgIFdURl9FWFBP
UlRfUFJJVkFURSB2b2lkIHNjaGVkdWxlKGNvbnN0IGNoYXIqIG5hbWUsIHN0ZDo6ZnVuY3Rpb248
Ym9vbCgpPiwgaW50IHByaW9yaXR5ID0gR19QUklPUklUWV9ERUZBVUxULCBzdGQ6OmZ1bmN0aW9u
PHZvaWQoKT4gZGVzdHJveUZ1bmN0aW9uID0gbnVsbHB0ciwgR01haW5Db250ZXh0KiA9IG51bGxw
dHIpOworICAgIFdURl9FWFBPUlRfUFJJVkFURSB2aXJ0dWFsIHZvaWQgc2NoZWR1bGUoY29uc3Qg
Y2hhciogbmFtZSwgc3RkOjpmdW5jdGlvbjx2b2lkKCk+LCBpbnQgcHJpb3JpdHkgPSBHX1BSSU9S
SVRZX0RFRkFVTFQsIHN0ZDo6ZnVuY3Rpb248dm9pZCgpPiBkZXN0cm95RnVuY3Rpb24gPSBudWxs
cHRyLCBHTWFpbkNvbnRleHQqID0gbnVsbHB0cik7CisgICAgV1RGX0VYUE9SVF9QUklWQVRFIHZp
cnR1YWwgdm9pZCBzY2hlZHVsZShjb25zdCBjaGFyKiBuYW1lLCBzdGQ6OmZ1bmN0aW9uPGJvb2wo
KT4sIGludCBwcmlvcml0eSA9IEdfUFJJT1JJVFlfREVGQVVMVCwgc3RkOjpmdW5jdGlvbjx2b2lk
KCk+IGRlc3Ryb3lGdW5jdGlvbiA9IG51bGxwdHIsIEdNYWluQ29udGV4dCogPSBudWxscHRyKTsK
KyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgdmlydHVhbCB2b2lkIHNjaGVkdWxlQWZ0ZXJEZWxheShj
b25zdCBjaGFyKiBuYW1lLCBzdGQ6OmZ1bmN0aW9uPHZvaWQoKT4sIHN0ZDo6Y2hyb25vOjptaWxs
aXNlY29uZHMsIGludCBwcmlvcml0eSA9IEdfUFJJT1JJVFlfREVGQVVMVCwgc3RkOjpmdW5jdGlv
bjx2b2lkKCk+IGRlc3Ryb3lGdW5jdGlvbiA9IG51bGxwdHIsIEdNYWluQ29udGV4dCogPSBudWxs
cHRyKTsKKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgdmlydHVhbCB2b2lkIHNjaGVkdWxlQWZ0ZXJE
ZWxheShjb25zdCBjaGFyKiBuYW1lLCBzdGQ6OmZ1bmN0aW9uPGJvb2woKT4sIHN0ZDo6Y2hyb25v
OjptaWxsaXNlY29uZHMsIGludCBwcmlvcml0eSA9IEdfUFJJT1JJVFlfREVGQVVMVCwgc3RkOjpm
dW5jdGlvbjx2b2lkKCk+IGRlc3Ryb3lGdW5jdGlvbiA9IG51bGxwdHIsIEdNYWluQ29udGV4dCog
PSBudWxscHRyKTsKKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgdmlydHVhbCB2b2lkIHNjaGVkdWxl
QWZ0ZXJEZWxheShjb25zdCBjaGFyKiBuYW1lLCBzdGQ6OmZ1bmN0aW9uPHZvaWQoKT4sIHN0ZDo6
Y2hyb25vOjpzZWNvbmRzLCBpbnQgcHJpb3JpdHkgPSBHX1BSSU9SSVRZX0RFRkFVTFQsIHN0ZDo6
ZnVuY3Rpb248dm9pZCgpPiBkZXN0cm95RnVuY3Rpb24gPSBudWxscHRyLCBHTWFpbkNvbnRleHQq
ID0gbnVsbHB0cik7CisgICAgV1RGX0VYUE9SVF9QUklWQVRFIHZpcnR1YWwgdm9pZCBzY2hlZHVs
ZUFmdGVyRGVsYXkoY29uc3QgY2hhciogbmFtZSwgc3RkOjpmdW5jdGlvbjxib29sKCk+LCBzdGQ6
OmNocm9ubzo6c2Vjb25kcywgaW50IHByaW9yaXR5ID0gR19QUklPUklUWV9ERUZBVUxULCBzdGQ6
OmZ1bmN0aW9uPHZvaWQoKT4gZGVzdHJveUZ1bmN0aW9uID0gbnVsbHB0ciwgR01haW5Db250ZXh0
KiA9IG51bGxwdHIpOworICAgIFdURl9FWFBPUlRfUFJJVkFURSB2aXJ0dWFsIHZvaWQgY2FuY2Vs
KCk7CisKICAgICBXVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBzY2hlZHVsZShjb25zdCBjaGFyKiBu
YW1lLCBzdGQ6OmZ1bmN0aW9uPGJvb2woR0lPQ29uZGl0aW9uKT4sIEdTb2NrZXQqLCBHSU9Db25k
aXRpb24sIHN0ZDo6ZnVuY3Rpb248dm9pZCgpPiBkZXN0cm95RnVuY3Rpb24gPSBudWxscHRyLCBH
TWFpbkNvbnRleHQqID0gbnVsbHB0cik7Ci0gICAgV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgc2No
ZWR1bGVBZnRlckRlbGF5KGNvbnN0IGNoYXIqIG5hbWUsIHN0ZDo6ZnVuY3Rpb248dm9pZCgpPiwg
c3RkOjpjaHJvbm86Om1pbGxpc2Vjb25kcywgaW50IHByaW9yaXR5ID0gR19QUklPUklUWV9ERUZB
VUxULCBzdGQ6OmZ1bmN0aW9uPHZvaWQoKT4gZGVzdHJveUZ1bmN0aW9uID0gbnVsbHB0ciwgR01h
aW5Db250ZXh0KiA9IG51bGxwdHIpOwotICAgIFdURl9FWFBPUlRfUFJJVkFURSB2b2lkIHNjaGVk
dWxlQWZ0ZXJEZWxheShjb25zdCBjaGFyKiBuYW1lLCBzdGQ6OmZ1bmN0aW9uPGJvb2woKT4sIHN0
ZDo6Y2hyb25vOjptaWxsaXNlY29uZHMsIGludCBwcmlvcml0eSA9IEdfUFJJT1JJVFlfREVGQVVM
VCwgc3RkOjpmdW5jdGlvbjx2b2lkKCk+IGRlc3Ryb3lGdW5jdGlvbiA9IG51bGxwdHIsIEdNYWlu
Q29udGV4dCogPSBudWxscHRyKTsKLSAgICBXVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBzY2hlZHVs
ZUFmdGVyRGVsYXkoY29uc3QgY2hhciogbmFtZSwgc3RkOjpmdW5jdGlvbjx2b2lkKCk+LCBzdGQ6
OmNocm9ubzo6c2Vjb25kcywgaW50IHByaW9yaXR5ID0gR19QUklPUklUWV9ERUZBVUxULCBzdGQ6
OmZ1bmN0aW9uPHZvaWQoKT4gZGVzdHJveUZ1bmN0aW9uID0gbnVsbHB0ciwgR01haW5Db250ZXh0
KiA9IG51bGxwdHIpOwotICAgIFdURl9FWFBPUlRfUFJJVkFURSB2b2lkIHNjaGVkdWxlQWZ0ZXJE
ZWxheShjb25zdCBjaGFyKiBuYW1lLCBzdGQ6OmZ1bmN0aW9uPGJvb2woKT4sIHN0ZDo6Y2hyb25v
OjpzZWNvbmRzLCBpbnQgcHJpb3JpdHkgPSBHX1BSSU9SSVRZX0RFRkFVTFQsIHN0ZDo6ZnVuY3Rp
b248dm9pZCgpPiBkZXN0cm95RnVuY3Rpb24gPSBudWxscHRyLCBHTWFpbkNvbnRleHQqID0gbnVs
bHB0cik7Ci0gICAgV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgY2FuY2VsKCk7CiAKICAgICBzdGF0
aWMgdm9pZCBzY2hlZHVsZUFuZERlbGV0ZU9uRGVzdHJveShjb25zdCBjaGFyKiBuYW1lLCBzdGQ6
OmZ1bmN0aW9uPHZvaWQoKT4sIGludCBwcmlvcml0eSA9IEdfUFJJT1JJVFlfREVGQVVMVCwgc3Rk
OjpmdW5jdGlvbjx2b2lkKCk+IGRlc3Ryb3lGdW5jdGlvbiA9IG51bGxwdHIsIEdNYWluQ29udGV4
dCogPSBudWxscHRyKTsKICAgICBzdGF0aWMgdm9pZCBzY2hlZHVsZUFuZERlbGV0ZU9uRGVzdHJv
eShjb25zdCBjaGFyKiBuYW1lLCBzdGQ6OmZ1bmN0aW9uPGJvb2woKT4sIGludCBwcmlvcml0eSA9
IEdfUFJJT1JJVFlfREVGQVVMVCwgc3RkOjpmdW5jdGlvbjx2b2lkKCk+IGRlc3Ryb3lGdW5jdGlv
biA9IG51bGxwdHIsIEdNYWluQ29udGV4dCogPSBudWxscHRyKTsKQEAgLTY1LDMyICs2Nyw5IEBA
IHB1YmxpYzoKICAgICBzdGF0aWMgdm9pZCBzY2hlZHVsZUFmdGVyRGVsYXlBbmREZWxldGVPbkRl
c3Ryb3koY29uc3QgY2hhciogbmFtZSwgc3RkOjpmdW5jdGlvbjx2b2lkKCk+LCBzdGQ6OmNocm9u
bzo6c2Vjb25kcywgaW50IHByaW9yaXR5ID0gR19QUklPUklUWV9ERUZBVUxULCBzdGQ6OmZ1bmN0
aW9uPHZvaWQoKT4gZGVzdHJveUZ1bmN0aW9uID0gbnVsbHB0ciwgR01haW5Db250ZXh0KiA9IG51
bGxwdHIpOwogICAgIHN0YXRpYyB2b2lkIHNjaGVkdWxlQWZ0ZXJEZWxheUFuZERlbGV0ZU9uRGVz
dHJveShjb25zdCBjaGFyKiBuYW1lLCBzdGQ6OmZ1bmN0aW9uPGJvb2woKT4sIHN0ZDo6Y2hyb25v
OjpzZWNvbmRzLCBpbnQgcHJpb3JpdHkgPSBHX1BSSU9SSVRZX0RFRkFVTFQsIHN0ZDo6ZnVuY3Rp
b248dm9pZCgpPiBkZXN0cm95RnVuY3Rpb24gPSBudWxscHRyLCBHTWFpbkNvbnRleHQqID0gbnVs
bHB0cik7CiAKLXByaXZhdGU6Ci0gICAgc3RhdGljIEdNYWluTG9vcFNvdXJjZSYgY3JlYXRlKCk7
Ci0KLSAgICBlbnVtIERlbGV0ZU9uRGVzdHJveVR5cGUgeyBEZWxldGVPbkRlc3Ryb3ksIERvTm90
RGVsZXRlT25EZXN0cm95IH07Ci0gICAgR01haW5Mb29wU291cmNlKERlbGV0ZU9uRGVzdHJveVR5
cGUpOwotCitwcm90ZWN0ZWQ6CiAgICAgZW51bSBTdGF0dXMgeyBSZWFkeSwgU2NoZWR1bGVkLCBE
aXNwYXRjaGluZyB9OwogCi0gICAgdm9pZCBjYW5jZWxXaXRob3V0TG9ja2luZygpOwotICAgIHZv
aWQgc2NoZWR1bGVJZGxlU291cmNlKGNvbnN0IGNoYXIqIG5hbWUsIEdTb3VyY2VGdW5jLCBpbnQg
cHJpb3JpdHksIEdNYWluQ29udGV4dCopOwotICAgIHZvaWQgc2NoZWR1bGVUaW1lb3V0U291cmNl
KGNvbnN0IGNoYXIqIG5hbWUsIEdTb3VyY2VGdW5jLCBpbnQgcHJpb3JpdHksIEdNYWluQ29udGV4
dCopOwotICAgIHZvaWQgdm9pZENhbGxiYWNrKCk7Ci0gICAgYm9vbCBib29sQ2FsbGJhY2soKTsK
LSAgICBib29sIHNvY2tldENhbGxiYWNrKEdJT0NvbmRpdGlvbik7Ci0KLSAgICB2b2lkIGRlc3Ry
b3koKTsKLQotICAgIHN0YXRpYyBnYm9vbGVhbiB2b2lkU291cmNlQ2FsbGJhY2soR01haW5Mb29w
U291cmNlKik7Ci0gICAgc3RhdGljIGdib29sZWFuIGJvb2xTb3VyY2VDYWxsYmFjayhHTWFpbkxv
b3BTb3VyY2UqKTsKLSAgICBzdGF0aWMgZ2Jvb2xlYW4gc29ja2V0U291cmNlQ2FsbGJhY2soR1Nv
Y2tldCosIEdJT0NvbmRpdGlvbiwgR01haW5Mb29wU291cmNlKik7Ci0KLSAgICBEZWxldGVPbkRl
c3Ryb3lUeXBlIG1fZGVsZXRlT25EZXN0cm95OwotICAgIFN0YXR1cyBtX3N0YXR1czsKLSAgICBH
TXV0ZXggbV9tdXRleDsKLSAgICBHUmVmUHRyPEdDYW5jZWxsYWJsZT4gbV9jYW5jZWxsYWJsZTsK
LQogICAgIHN0cnVjdCBDb250ZXh0IHsKICAgICAgICAgQ29udGV4dCgpID0gZGVmYXVsdDsKICAg
ICAgICAgQ29udGV4dChDb250ZXh0JiYpID0gZGVmYXVsdDsKQEAgLTEwNSwxMSArODQsNDEgQEAg
cHJpdmF0ZToKICAgICAgICAgc3RkOjpmdW5jdGlvbjxib29sICgpPiBib29sQ2FsbGJhY2s7CiAg
ICAgICAgIHN0ZDo6ZnVuY3Rpb248Ym9vbCAoR0lPQ29uZGl0aW9uKT4gc29ja2V0Q2FsbGJhY2s7
CiAgICAgICAgIHN0ZDo6ZnVuY3Rpb248dm9pZCAoKT4gZGVzdHJveUNhbGxiYWNrOwotICAgIH0g
bV9jb250ZXh0OworICAgIH07CisKKyAgICB2aXJ0dWFsIHZvaWQgdm9pZENhbGxiYWNrKCk7Cisg
ICAgdmlydHVhbCBib29sIGJvb2xDYWxsYmFjaygpOworCisgICAgdmlydHVhbCBib29sIHByZXBh
cmVWb2lkQ2FsbGJhY2soQ29udGV4dCYpOworICAgIHZpcnR1YWwgdm9pZCBmaW5pc2hWb2lkQ2Fs
bGJhY2soKTsKKyAgICB2aXJ0dWFsIGJvb2wgcHJlcGFyZUJvb2xDYWxsYmFjayhDb250ZXh0Jik7
CisgICAgdmlydHVhbCB2b2lkIGZpbmlzaEJvb2xDYWxsYmFjayhib29sIHJldHZhbCwgQ29udGV4
dCYpOworCitwcml2YXRlOgorICAgIHN0YXRpYyBHTWFpbkxvb3BTb3VyY2UmIGNyZWF0ZSgpOwor
CisgICAgZW51bSBEZWxldGVPbkRlc3Ryb3lUeXBlIHsgRGVsZXRlT25EZXN0cm95LCBEb05vdERl
bGV0ZU9uRGVzdHJveSB9OworICAgIEdNYWluTG9vcFNvdXJjZShEZWxldGVPbkRlc3Ryb3lUeXBl
KTsKKworICAgIHZvaWQgc2NoZWR1bGVJZGxlU291cmNlKGNvbnN0IGNoYXIqIG5hbWUsIEdTb3Vy
Y2VGdW5jLCBpbnQgcHJpb3JpdHksIEdNYWluQ29udGV4dCopOworICAgIHZvaWQgc2NoZWR1bGVU
aW1lb3V0U291cmNlKGNvbnN0IGNoYXIqIG5hbWUsIEdTb3VyY2VGdW5jLCBpbnQgcHJpb3JpdHks
IEdNYWluQ29udGV4dCopOworICAgIGJvb2wgc29ja2V0Q2FsbGJhY2soR0lPQ29uZGl0aW9uKTsK
KworICAgIHN0YXRpYyBnYm9vbGVhbiB2b2lkU291cmNlQ2FsbGJhY2soR01haW5Mb29wU291cmNl
Kik7CisgICAgc3RhdGljIGdib29sZWFuIGJvb2xTb3VyY2VDYWxsYmFjayhHTWFpbkxvb3BTb3Vy
Y2UqKTsKKyAgICBzdGF0aWMgZ2Jvb2xlYW4gc29ja2V0U291cmNlQ2FsbGJhY2soR1NvY2tldCos
IEdJT0NvbmRpdGlvbiwgR01haW5Mb29wU291cmNlKik7CisKKyAgICBEZWxldGVPbkRlc3Ryb3lU
eXBlIG1fZGVsZXRlT25EZXN0cm95OworCitwcm90ZWN0ZWQ6CisgICAgQ29udGV4dCBtX2NvbnRl
eHQ7CisgICAgU3RhdHVzIG1fc3RhdHVzOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV1RGCiAKIHVz
aW5nIFdURjo6R01haW5Mb29wU291cmNlOwogCisjZW5kaWYgLy8gVVNFKEdMSUIpCisKICNlbmRp
ZiAvLyBHTWFpbkxvb3BTb3VyY2VfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvZ29iamVj
dC9HTXV0ZXhMb2NrZXIuaCBiL1NvdXJjZS9XVEYvd3RmL2dvYmplY3QvR011dGV4TG9ja2VyLmgK
aW5kZXggMGRkMWY3Ni4uMDM1NjcwMiAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvZ29iamVj
dC9HTXV0ZXhMb2NrZXIuaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9nb2JqZWN0L0dNdXRleExvY2tl
ci5oCkBAIC0yNywxMCArMjcsNDAgQEAKIAogbmFtZXNwYWNlIFdURiB7CiAKK3RlbXBsYXRlPHR5
cGVuYW1lIFQ+CitzdHJ1Y3QgTXV0ZXhXcmFwcGVyOworCit0ZW1wbGF0ZTw+CitzdHJ1Y3QgTXV0
ZXhXcmFwcGVyPEdNdXRleD4geworICAgIHN0YXRpYyB2b2lkIGxvY2soR011dGV4KiBtdXRleCkK
KyAgICB7CisgICAgICAgIGdfbXV0ZXhfbG9jayhtdXRleCk7CisgICAgfQorCisgICAgc3RhdGlj
IHZvaWQgdW5sb2NrKEdNdXRleCogbXV0ZXgpCisgICAgeworICAgICAgICBnX211dGV4X3VubG9j
ayhtdXRleCk7CisgICAgfQorfTsKKwordGVtcGxhdGU8Pgorc3RydWN0IE11dGV4V3JhcHBlcjxH
UmVjTXV0ZXg+IHsKKyAgICBzdGF0aWMgdm9pZCBsb2NrKEdSZWNNdXRleCogbXV0ZXgpCisgICAg
eworICAgICAgICBnX3JlY19tdXRleF9sb2NrKG11dGV4KTsKKyAgICB9CisKKyAgICBzdGF0aWMg
dm9pZCB1bmxvY2soR1JlY011dGV4KiBtdXRleCkKKyAgICB7CisgICAgICAgIGdfcmVjX211dGV4
X3VubG9jayhtdXRleCk7CisgICAgfQorfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4KIGNsYXNz
IEdNdXRleExvY2tlciB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoR011dGV4TG9ja2VyKTsK
IHB1YmxpYzoKLSAgICBleHBsaWNpdCBHTXV0ZXhMb2NrZXIoR011dGV4JiBtdXRleCkKKyAgICBl
eHBsaWNpdCBHTXV0ZXhMb2NrZXIoVCYgbXV0ZXgpCiAgICAgICAgIDogbV9tdXRleChtdXRleCkK
ICAgICAgICAgLCBtX2xvY2tlZChmYWxzZSkKICAgICB7CkBAIC00NCwyMiArNzQsMjQgQEAgcHVi
bGljOgogCiAgICAgdm9pZCBsb2NrKCkKICAgICB7Ci0gICAgICAgIGlmICghbV9sb2NrZWQpIHsK
LSAgICAgICAgICAgIGdfbXV0ZXhfbG9jaygmbV9tdXRleCk7Ci0gICAgICAgICAgICBtX2xvY2tl
ZCA9IHRydWU7Ci0gICAgICAgIH0KKyAgICAgICAgaWYgKG1fbG9ja2VkKQorICAgICAgICAgICAg
cmV0dXJuOworCisgICAgICAgIE11dGV4V3JhcHBlcjxUPjo6bG9jaygmbV9tdXRleCk7CisgICAg
ICAgIG1fbG9ja2VkID0gdHJ1ZTsKICAgICB9CiAKICAgICB2b2lkIHVubG9jaygpCiAgICAgewot
ICAgICAgICBpZiAobV9sb2NrZWQpIHsKLSAgICAgICAgICAgIG1fbG9ja2VkID0gZmFsc2U7Ci0g
ICAgICAgICAgICBnX211dGV4X3VubG9jaygmbV9tdXRleCk7Ci0gICAgICAgIH0KKyAgICAgICAg
aWYgKCFtX2xvY2tlZCkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBtX2xvY2tlZCA9
IGZhbHNlOworICAgICAgICBNdXRleFdyYXBwZXI8VD46OnVubG9jaygmbV9tdXRleCk7CiAgICAg
fQogCiBwcml2YXRlOgotICAgIEdNdXRleCYgbV9tdXRleDsKKyAgICBUJiBtX211dGV4OwogICAg
IGJvb2wgbV9sb2NrZWQ7CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9nb2JqZWN0
L0dUaHJlYWRTYWZlTWFpbkxvb3BTb3VyY2UuY3BwIGIvU291cmNlL1dURi93dGYvZ29iamVjdC9H
VGhyZWFkU2FmZU1haW5Mb29wU291cmNlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwLi40YWMyYjNiCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dURi93dGYvZ29iamVj
dC9HVGhyZWFkU2FmZU1haW5Mb29wU291cmNlLmNwcApAQCAtMCwwICsxLDE3MyBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxNCBJZ2FsaWEgUy5MLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
CisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
KyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiR1RocmVhZFNhZmVNYWluTG9vcFNvdXJjZS5oIgorCisjaWYgVVNF
KEdMSUIpCisKKyNpbmNsdWRlIDxnaW8vZ2lvLmg+CisjaW5jbHVkZSA8d3RmL2dvYmplY3QvR011
dGV4TG9ja2VyLmg+CisKK25hbWVzcGFjZSBXVEYgeworCitHVGhyZWFkU2FmZU1haW5Mb29wU291
cmNlOjpHVGhyZWFkU2FmZU1haW5Mb29wU291cmNlKCkKK3sKKyAgICBnX3JlY19tdXRleF9pbml0
KCZtX211dGV4KTsKK30KKworR1RocmVhZFNhZmVNYWluTG9vcFNvdXJjZTo6fkdUaHJlYWRTYWZl
TWFpbkxvb3BTb3VyY2UoKQoreworICAgIGNhbmNlbCgpOworICAgIGdfcmVjX211dGV4X2NsZWFy
KCZtX211dGV4KTsKK30KKwordm9pZCBHVGhyZWFkU2FmZU1haW5Mb29wU291cmNlOjpjYW5jZWwo
KQoreworICAgIEdNdXRleExvY2tlcjxHUmVjTXV0ZXg+IGxvY2tlcihtX211dGV4KTsKKworICAg
IC8vIFRoZSBnZW5lcmFsIGNhbmNlbGxhYmxlIG9iamVjdCBzaG91bGQgb25seSBiZSBwcmVzZW50
IGlmIHdlJ3JlIGN1cnJlbnRseSBkaXNwYXRjaGluZyB0aGlzIEdNYWluTG9vcFNvdXJjZS4KKyAg
ICBBU1NFUlQoIW1fY2FuY2VsbGFibGUgfHwgbV9zdGF0dXMgPT0gRGlzcGF0Y2hpbmcpOworCisg
ICAgLy8gVGhlIHNvdXJjZSBpcyBwZXJoYXBzIGJlaW5nIGNhbmNlbGxlZCBpbiB0aGUgbWlkZGxl
IG9mIGEgY2FsbGJhY2sgZGlzcGF0Y2guCisgICAgLy8gQ2FuY2VsbGluZyB0aGlzIEdDYW5jZWxs
YWJsZSBvYmplY3Qgd2lsbCBjb252ZXkgdGhpcyBpbmZvcm1hdGlvbiB0byB0aGUKKyAgICAvLyBj
dXJyZW50IGV4ZWN1dGlvbiBjb250ZXh0IHdoZW4gdGhlIGNhbGxiYWNrIGRpc3BhdGNoIGlzIGZp
bmlzaGVkLgorICAgIGdfY2FuY2VsbGFibGVfY2FuY2VsKG1fY2FuY2VsbGFibGUuZ2V0KCkpOwor
ICAgIG1fY2FuY2VsbGFibGUgPSBudWxscHRyOworCisgICAgR01haW5Mb29wU291cmNlOjpjYW5j
ZWwoKTsKK30KKwordm9pZCBHVGhyZWFkU2FmZU1haW5Mb29wU291cmNlOjpzY2hlZHVsZShjb25z
dCBjaGFyKiBuYW1lLCBzdGQ6OmZ1bmN0aW9uPHZvaWQgKCk+IGZ1bmN0aW9uLCBpbnQgcHJpb3Jp
dHksIHN0ZDo6ZnVuY3Rpb248dm9pZCAoKT4gZGVzdHJveUZ1bmN0aW9uLCBHTWFpbkNvbnRleHQq
IGNvbnRleHQpCit7CisgICAgR011dGV4TG9ja2VyPEdSZWNNdXRleD4gbG9ja2VyKG1fbXV0ZXgp
OworICAgIEdNYWluTG9vcFNvdXJjZTo6c2NoZWR1bGUobmFtZSwgZnVuY3Rpb24sIHByaW9yaXR5
LCBkZXN0cm95RnVuY3Rpb24sIGNvbnRleHQpOworICAgIG1fY29udGV4dC5jYW5jZWxsYWJsZSA9
IGFkb3B0R1JlZihnX2NhbmNlbGxhYmxlX25ldygpKTsKK30KKwordm9pZCBHVGhyZWFkU2FmZU1h
aW5Mb29wU291cmNlOjpzY2hlZHVsZShjb25zdCBjaGFyKiBuYW1lLCBzdGQ6OmZ1bmN0aW9uPGJv
b2wgKCk+IGZ1bmN0aW9uLCBpbnQgcHJpb3JpdHksIHN0ZDo6ZnVuY3Rpb248dm9pZCAoKT4gZGVz
dHJveUZ1bmN0aW9uLCBHTWFpbkNvbnRleHQqIGNvbnRleHQpCit7CisgICAgR011dGV4TG9ja2Vy
PEdSZWNNdXRleD4gbG9ja2VyKG1fbXV0ZXgpOworICAgIEdNYWluTG9vcFNvdXJjZTo6c2NoZWR1
bGUobmFtZSwgZnVuY3Rpb24sIHByaW9yaXR5LCBkZXN0cm95RnVuY3Rpb24sIGNvbnRleHQpOwor
ICAgIG1fY29udGV4dC5jYW5jZWxsYWJsZSA9IGFkb3B0R1JlZihnX2NhbmNlbGxhYmxlX25ldygp
KTsKK30KKwordm9pZCBHVGhyZWFkU2FmZU1haW5Mb29wU291cmNlOjpzY2hlZHVsZUFmdGVyRGVs
YXkoY29uc3QgY2hhciogbmFtZSwgc3RkOjpmdW5jdGlvbjx2b2lkICgpPiBmdW5jdGlvbiwgc3Rk
OjpjaHJvbm86Om1pbGxpc2Vjb25kcyBkZWxheSwgaW50IHByaW9yaXR5LCBzdGQ6OmZ1bmN0aW9u
PHZvaWQgKCk+IGRlc3Ryb3lGdW5jdGlvbiwgR01haW5Db250ZXh0KiBjb250ZXh0KQoreworICAg
IEdNdXRleExvY2tlcjxHUmVjTXV0ZXg+IGxvY2tlcihtX211dGV4KTsKKyAgICBHTWFpbkxvb3BT
b3VyY2U6OnNjaGVkdWxlQWZ0ZXJEZWxheShuYW1lLCBmdW5jdGlvbiwgZGVsYXksIHByaW9yaXR5
LCBkZXN0cm95RnVuY3Rpb24sIGNvbnRleHQpOworICAgIG1fY29udGV4dC5jYW5jZWxsYWJsZSA9
IGFkb3B0R1JlZihnX2NhbmNlbGxhYmxlX25ldygpKTsKK30KKwordm9pZCBHVGhyZWFkU2FmZU1h
aW5Mb29wU291cmNlOjpzY2hlZHVsZUFmdGVyRGVsYXkoY29uc3QgY2hhciogbmFtZSwgc3RkOjpm
dW5jdGlvbjxib29sICgpPiBmdW5jdGlvbiwgc3RkOjpjaHJvbm86Om1pbGxpc2Vjb25kcyBkZWxh
eSwgaW50IHByaW9yaXR5LCBzdGQ6OmZ1bmN0aW9uPHZvaWQgKCk+IGRlc3Ryb3lGdW5jdGlvbiwg
R01haW5Db250ZXh0KiBjb250ZXh0KQoreworICAgIEdNdXRleExvY2tlcjxHUmVjTXV0ZXg+IGxv
Y2tlcihtX211dGV4KTsKKyAgICBHTWFpbkxvb3BTb3VyY2U6OnNjaGVkdWxlQWZ0ZXJEZWxheShu
YW1lLCBmdW5jdGlvbiwgZGVsYXksIHByaW9yaXR5LCBkZXN0cm95RnVuY3Rpb24sIGNvbnRleHQp
OworICAgIG1fY29udGV4dC5jYW5jZWxsYWJsZSA9IGFkb3B0R1JlZihnX2NhbmNlbGxhYmxlX25l
dygpKTsKK30KKwordm9pZCBHVGhyZWFkU2FmZU1haW5Mb29wU291cmNlOjpzY2hlZHVsZUFmdGVy
RGVsYXkoY29uc3QgY2hhciogbmFtZSwgc3RkOjpmdW5jdGlvbjx2b2lkICgpPiBmdW5jdGlvbiwg
c3RkOjpjaHJvbm86OnNlY29uZHMgZGVsYXksIGludCBwcmlvcml0eSwgc3RkOjpmdW5jdGlvbjx2
b2lkICgpPiBkZXN0cm95RnVuY3Rpb24sIEdNYWluQ29udGV4dCogY29udGV4dCkKK3sKKyAgICBH
TXV0ZXhMb2NrZXI8R1JlY011dGV4PiBsb2NrZXIobV9tdXRleCk7CisgICAgR01haW5Mb29wU291
cmNlOjpzY2hlZHVsZUFmdGVyRGVsYXkobmFtZSwgZnVuY3Rpb24sIGRlbGF5LCBwcmlvcml0eSwg
ZGVzdHJveUZ1bmN0aW9uLCBjb250ZXh0KTsKKyAgICBtX2NvbnRleHQuY2FuY2VsbGFibGUgPSBh
ZG9wdEdSZWYoZ19jYW5jZWxsYWJsZV9uZXcoKSk7Cit9CisKK3ZvaWQgR1RocmVhZFNhZmVNYWlu
TG9vcFNvdXJjZTo6c2NoZWR1bGVBZnRlckRlbGF5KGNvbnN0IGNoYXIqIG5hbWUsIHN0ZDo6ZnVu
Y3Rpb248Ym9vbCAoKT4gZnVuY3Rpb24sIHN0ZDo6Y2hyb25vOjpzZWNvbmRzIGRlbGF5LCBpbnQg
cHJpb3JpdHksIHN0ZDo6ZnVuY3Rpb248dm9pZCAoKT4gZGVzdHJveUZ1bmN0aW9uLCBHTWFpbkNv
bnRleHQqIGNvbnRleHQpCit7CisgICAgR011dGV4TG9ja2VyPEdSZWNNdXRleD4gbG9ja2VyKG1f
bXV0ZXgpOworICAgIEdNYWluTG9vcFNvdXJjZTo6c2NoZWR1bGVBZnRlckRlbGF5KG5hbWUsIGZ1
bmN0aW9uLCBkZWxheSwgcHJpb3JpdHksIGRlc3Ryb3lGdW5jdGlvbiwgY29udGV4dCk7CisgICAg
bV9jb250ZXh0LmNhbmNlbGxhYmxlID0gYWRvcHRHUmVmKGdfY2FuY2VsbGFibGVfbmV3KCkpOwor
fQorCitib29sIEdUaHJlYWRTYWZlTWFpbkxvb3BTb3VyY2U6OnByZXBhcmVWb2lkQ2FsbGJhY2so
Q29udGV4dCYgY29udGV4dCkKK3sKKyAgICBHTXV0ZXhMb2NrZXI8R1JlY011dGV4PiBsb2NrZXIo
bV9tdXRleCk7CisgICAgYm9vbCByZXR2YWwgPSBHTWFpbkxvb3BTb3VyY2U6OnByZXBhcmVWb2lk
Q2FsbGJhY2soY29udGV4dCk7CisgICAgbV9jYW5jZWxsYWJsZSA9IGNvbnRleHQuY2FuY2VsbGFi
bGU7CisgICAgcmV0dXJuIHJldHZhbDsKK30KKwordm9pZCBHVGhyZWFkU2FmZU1haW5Mb29wU291
cmNlOjpmaW5pc2hWb2lkQ2FsbGJhY2soKQoreworICAgIEdNdXRleExvY2tlcjxHUmVjTXV0ZXg+
IGxvY2tlcihtX211dGV4KTsKKyAgICBHTWFpbkxvb3BTb3VyY2U6OmZpbmlzaFZvaWRDYWxsYmFj
aygpOworICAgIG1fY2FuY2VsbGFibGUgPSBudWxscHRyOworfQorCit2b2lkIEdUaHJlYWRTYWZl
TWFpbkxvb3BTb3VyY2U6OnZvaWRDYWxsYmFjaygpCit7CisgICAgQ29udGV4dCBjb250ZXh0Owor
ICAgIGlmICghcHJlcGFyZVZvaWRDYWxsYmFjayhjb250ZXh0KSkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgY29udGV4dC52b2lkQ2FsbGJhY2soKTsKKworICAgIGlmIChnX2NhbmNlbGxhYmxlX2lz
X2NhbmNlbGxlZChjb250ZXh0LmNhbmNlbGxhYmxlLmdldCgpKSkgeworICAgICAgICBjb250ZXh0
LmRlc3Ryb3lTb3VyY2UoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGZpbmlzaFZv
aWRDYWxsYmFjaygpOworICAgIGNvbnRleHQuZGVzdHJveVNvdXJjZSgpOworfQorCitib29sIEdU
aHJlYWRTYWZlTWFpbkxvb3BTb3VyY2U6OnByZXBhcmVCb29sQ2FsbGJhY2soQ29udGV4dCYgY29u
dGV4dCkKK3sKKyAgICBHTXV0ZXhMb2NrZXI8R1JlY011dGV4PiBsb2NrZXIobV9tdXRleCk7Cisg
ICAgYm9vbCByZXR2YWwgPSBHTWFpbkxvb3BTb3VyY2U6OnByZXBhcmVCb29sQ2FsbGJhY2soY29u
dGV4dCk7CisgICAgbV9jYW5jZWxsYWJsZSA9IGNvbnRleHQuY2FuY2VsbGFibGU7CisgICAgcmV0
dXJuIHJldHZhbDsKK30KKwordm9pZCBHVGhyZWFkU2FmZU1haW5Mb29wU291cmNlOjpmaW5pc2hC
b29sQ2FsbGJhY2soYm9vbCByZXR2YWwsIENvbnRleHQmIGNvbnRleHQpCit7CisgICAgR011dGV4
TG9ja2VyPEdSZWNNdXRleD4gbG9ja2VyKG1fbXV0ZXgpOworICAgIEdNYWluTG9vcFNvdXJjZTo6
ZmluaXNoQm9vbENhbGxiYWNrKHJldHZhbCwgY29udGV4dCk7CisgICAgbV9jYW5jZWxsYWJsZSA9
IG51bGxwdHI7Cit9CisKK2Jvb2wgR1RocmVhZFNhZmVNYWluTG9vcFNvdXJjZTo6Ym9vbENhbGxi
YWNrKCkKK3sKKyAgICBDb250ZXh0IGNvbnRleHQ7CisgICAgaWYgKCFwcmVwYXJlQm9vbENhbGxi
YWNrKGNvbnRleHQpKQorICAgICAgICByZXR1cm4gU3RvcDsKKworICAgIGJvb2wgcmV0dmFsID0g
Y29udGV4dC5ib29sQ2FsbGJhY2soKTsKKworICAgIGlmIChnX2NhbmNlbGxhYmxlX2lzX2NhbmNl
bGxlZChjb250ZXh0LmNhbmNlbGxhYmxlLmdldCgpKSkgeworICAgICAgICBjb250ZXh0LmRlc3Ry
b3lTb3VyY2UoKTsKKyAgICAgICAgcmV0dXJuIFN0b3A7CisgICAgfQorCisgICAgZmluaXNoQm9v
bENhbGxiYWNrKHJldHZhbCwgY29udGV4dCk7CisgICAgaWYgKGNvbnRleHQuc291cmNlKQorICAg
ICAgICBjb250ZXh0LmRlc3Ryb3lTb3VyY2UoKTsKKyAgICByZXR1cm4gcmV0dmFsOworfQorCit9
IC8vIG5hbWVzcGFjZSBXVEYKKworI2VuZGlmIC8vIFVTRShHTElCKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dURi93dGYvZ29iamVjdC9HVGhyZWFkU2FmZU1haW5Mb29wU291cmNlLmggYi9Tb3VyY2Uv
V1RGL3d0Zi9nb2JqZWN0L0dUaHJlYWRTYWZlTWFpbkxvb3BTb3VyY2UuaApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwLi44NzdlODRhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dURi93dGYvZ29iamVjdC9HVGhyZWFkU2FmZU1haW5Mb29wU291cmNlLmgKQEAgLTAsMCArMSw3
MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBJZ2FsaWEgUy5MLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aWZuZGVmIEdUaHJlYWRTYWZlTWFpbkxvb3BTb3VyY2VfaAorI2RlZmluZSBHVGhyZWFkU2FmZU1h
aW5Mb29wU291cmNlX2gKKworI2lmIFVTRShHTElCKQorCisjaW5jbHVkZSA8d3RmL2dvYmplY3Qv
R01haW5Mb29wU291cmNlLmg+CisKK3R5cGVkZWYgc3RydWN0IF9HUmVjTXV0ZXggR1JlY011dGV4
OworCituYW1lc3BhY2UgV1RGIHsKKworY2xhc3MgR1RocmVhZFNhZmVNYWluTG9vcFNvdXJjZSBm
aW5hbCA6IHB1YmxpYyBHTWFpbkxvb3BTb3VyY2UgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxF
KEdUaHJlYWRTYWZlTWFpbkxvb3BTb3VyY2UpOworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVE
OworcHVibGljOgorICAgIFdURl9FWFBPUlRfUFJJVkFURSBHVGhyZWFkU2FmZU1haW5Mb29wU291
cmNlKCk7CisgICAgV1RGX0VYUE9SVF9QUklWQVRFIHZpcnR1YWwgfkdUaHJlYWRTYWZlTWFpbkxv
b3BTb3VyY2UoKTsKKworICAgIFdURl9FWFBPUlRfUFJJVkFURSB2aXJ0dWFsIHZvaWQgc2NoZWR1
bGUoY29uc3QgY2hhciogbmFtZSwgc3RkOjpmdW5jdGlvbjx2b2lkKCk+LCBpbnQgcHJpb3JpdHkg
PSBHX1BSSU9SSVRZX0RFRkFVTFQsIHN0ZDo6ZnVuY3Rpb248dm9pZCgpPiBkZXN0cm95RnVuY3Rp
b24gPSBudWxscHRyLCBHTWFpbkNvbnRleHQqID0gbnVsbHB0cikgb3ZlcnJpZGU7CisgICAgV1RG
X0VYUE9SVF9QUklWQVRFIHZpcnR1YWwgdm9pZCBzY2hlZHVsZShjb25zdCBjaGFyKiBuYW1lLCBz
dGQ6OmZ1bmN0aW9uPGJvb2woKT4sIGludCBwcmlvcml0eSA9IEdfUFJJT1JJVFlfREVGQVVMVCwg
c3RkOjpmdW5jdGlvbjx2b2lkKCk+IGRlc3Ryb3lGdW5jdGlvbiA9IG51bGxwdHIsIEdNYWluQ29u
dGV4dCogPSBudWxscHRyKSBvdmVycmlkZTsKKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgdmlydHVh
bCB2b2lkIHNjaGVkdWxlQWZ0ZXJEZWxheShjb25zdCBjaGFyKiBuYW1lLCBzdGQ6OmZ1bmN0aW9u
PHZvaWQoKT4sIHN0ZDo6Y2hyb25vOjptaWxsaXNlY29uZHMsIGludCBwcmlvcml0eSA9IEdfUFJJ
T1JJVFlfREVGQVVMVCwgc3RkOjpmdW5jdGlvbjx2b2lkKCk+IGRlc3Ryb3lGdW5jdGlvbiA9IG51
bGxwdHIsIEdNYWluQ29udGV4dCogPSBudWxscHRyKSBvdmVycmlkZTsKKyAgICBXVEZfRVhQT1JU
X1BSSVZBVEUgdmlydHVhbCB2b2lkIHNjaGVkdWxlQWZ0ZXJEZWxheShjb25zdCBjaGFyKiBuYW1l
LCBzdGQ6OmZ1bmN0aW9uPGJvb2woKT4sIHN0ZDo6Y2hyb25vOjptaWxsaXNlY29uZHMsIGludCBw
cmlvcml0eSA9IEdfUFJJT1JJVFlfREVGQVVMVCwgc3RkOjpmdW5jdGlvbjx2b2lkKCk+IGRlc3Ry
b3lGdW5jdGlvbiA9IG51bGxwdHIsIEdNYWluQ29udGV4dCogPSBudWxscHRyKSBvdmVycmlkZTsK
KyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgdmlydHVhbCB2b2lkIHNjaGVkdWxlQWZ0ZXJEZWxheShj
b25zdCBjaGFyKiBuYW1lLCBzdGQ6OmZ1bmN0aW9uPHZvaWQoKT4sIHN0ZDo6Y2hyb25vOjpzZWNv
bmRzLCBpbnQgcHJpb3JpdHkgPSBHX1BSSU9SSVRZX0RFRkFVTFQsIHN0ZDo6ZnVuY3Rpb248dm9p
ZCgpPiBkZXN0cm95RnVuY3Rpb24gPSBudWxscHRyLCBHTWFpbkNvbnRleHQqID0gbnVsbHB0cikg
b3ZlcnJpZGU7CisgICAgV1RGX0VYUE9SVF9QUklWQVRFIHZpcnR1YWwgdm9pZCBzY2hlZHVsZUFm
dGVyRGVsYXkoY29uc3QgY2hhciogbmFtZSwgc3RkOjpmdW5jdGlvbjxib29sKCk+LCBzdGQ6OmNo
cm9ubzo6c2Vjb25kcywgaW50IHByaW9yaXR5ID0gR19QUklPUklUWV9ERUZBVUxULCBzdGQ6OmZ1
bmN0aW9uPHZvaWQoKT4gZGVzdHJveUZ1bmN0aW9uID0gbnVsbHB0ciwgR01haW5Db250ZXh0KiA9
IG51bGxwdHIpIG92ZXJyaWRlOworICAgIFdURl9FWFBPUlRfUFJJVkFURSB2aXJ0dWFsIHZvaWQg
Y2FuY2VsKCkgb3ZlcnJpZGU7CisKK3ByaXZhdGU6CisgICAgdmlydHVhbCB2b2lkIHZvaWRDYWxs
YmFjaygpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgYm9vbCBib29sQ2FsbGJhY2soKSBvdmVycmlk
ZTsKKworICAgIHZpcnR1YWwgYm9vbCBwcmVwYXJlVm9pZENhbGxiYWNrKENvbnRleHQmKSBvdmVy
cmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgZmluaXNoVm9pZENhbGxiYWNrKCkgb3ZlcnJpZGU7Cisg
ICAgdmlydHVhbCBib29sIHByZXBhcmVCb29sQ2FsbGJhY2soQ29udGV4dCYpIG92ZXJyaWRlOwor
ICAgIHZpcnR1YWwgdm9pZCBmaW5pc2hCb29sQ2FsbGJhY2soYm9vbCByZXR2YWwsIENvbnRleHQm
KSBvdmVycmlkZTsKKworICAgIEdSZWNNdXRleCBtX211dGV4OworICAgIEdSZWZQdHI8R0NhbmNl
bGxhYmxlPiBtX2NhbmNlbGxhYmxlOworfTsKKworfSAvLyBuYW1lc3BhY2UgV1RGCisKK3VzaW5n
IFdURjo6R1RocmVhZFNhZmVNYWluTG9vcFNvdXJjZTsKKworI2VuZGlmIC8vIFVTRShHTElCKQor
CisjZW5kaWYgLy8gR1RocmVhZFNhZmVNYWluTG9vcFNvdXJjZV9oCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYTIy
MTVkNy4uMDUyMTFlMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBi
L1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDUyIEBACisyMDE0LTEwLTA3ICBD
YXJsb3MgR2FyY2lhIENhbXBvcyAgPGNnYXJjaWFAaWdhbGlhLmNvbT4KKworICAgICAgICBbR0xJ
Ql0gU3BsaXQgR01haW5Mb29wU291cmNlIG1vdmluZyB0aHJlYWQgc2FmZSBpbXBsZW1lbnRhdGlv
biB0byBpdHMgb3duIGNsYXNzIEdUaHJlYWRTYWZlTWFpbkxvb3BTb3VyY2UKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzNzQ4NQorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFVzZSBHVGhyZWFkU2FmZU1haW5M
b29wU291cmNlIGZvciBHU3RyZWFtZXIgc291cmNlcywgc2luY2UgdGhleQorICAgICAgICBjYW4g
YmUgdXNlZCBmcm9tIGRpZmZlcmVudCB0aHJlYWRzLiBBbHNvIHVwZGF0ZSBHTXV0ZXhMb2NrZXIK
KyAgICAgICAgdXNhZ2VzLCBzaW5jZSBpdCdzIG5vdyBhIHRlbXBsYXRlLgorCisgICAgICAgICog
cGxhdGZvcm0vYXVkaW8vZ3N0cmVhbWVyL0F1ZGlvRmlsZVJlYWRlckdTdHJlYW1lci5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpBdWRpb0ZpbGVSZWFkZXI6OmNyZWF0ZUJ1cyk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0luYmFuZFRleHRUcmFja1ByaXZhdGVHU3RyZWFt
ZXIuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQ
cml2YXRlR1N0cmVhbWVyLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVy
L01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lckJhc2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyQmFzZTo6dXBkYXRlVGV4dHVyZSk6CisgICAgICAg
IChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJCYXNlOjp0cmlnZ2VyUmVwYWlu
dCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJCYXNlOjpw
YWludCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhUGxheWVy
UHJpdmF0ZUdTdHJlYW1lckJhc2UuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9nc3Ry
ZWFtZXIvVHJhY2tQcml2YXRlQmFzZUdTdHJlYW1lci5oOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2dzdHJlYW1lci9WaWRlb1NpbmtHU3RyZWFtZXIuY3BwOgorICAgICAgICAod2Via2l0
VmlkZW9TaW5rVGltZW91dENhbGxiYWNrKToKKyAgICAgICAgKHdlYmtpdFZpZGVvU2lua1JlbmRl
cik6CisgICAgICAgICh1bmxvY2tCdWZmZXJNdXRleCk6CisgICAgICAgICh3ZWJraXRWaWRlb1Np
bmtVbmxvY2tTdG9wKToKKyAgICAgICAgKHdlYmtpdFZpZGVvU2lua1N0YXJ0KToKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvV2ViS2l0TWVkaWFTb3VyY2VHU3RyZWFtZXIu
Y3BwOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9XZWJLaXRXZWJTb3Vy
Y2VHU3RyZWFtZXIuY3BwOgorICAgICAgICAod2ViS2l0V2ViU3JjR2V0UHJvcGVydHkpOgorICAg
ICAgICAod2ViS2l0V2ViU3JjU3RvcCk6CisgICAgICAgICh3ZWJLaXRXZWJTcmNTdGFydCk6Cisg
ICAgICAgICh3ZWJLaXRXZWJTcmNDaGFuZ2VTdGF0ZSk6CisgICAgICAgICh3ZWJLaXRXZWJTcmNR
dWVyeVdpdGhQYXJlbnQpOgorICAgICAgICAod2ViS2l0V2ViU3JjR2V0VXJpKToKKyAgICAgICAg
KHdlYktpdFdlYlNyY1NldFVyaSk6CisgICAgICAgICh3ZWJLaXRXZWJTcmNOZWVkRGF0YU1haW5D
Yik6CisgICAgICAgICh3ZWJLaXRXZWJTcmNOZWVkRGF0YUNiKToKKyAgICAgICAgKHdlYktpdFdl
YlNyY0Vub3VnaERhdGFNYWluQ2IpOgorICAgICAgICAod2ViS2l0V2ViU3JjRW5vdWdoRGF0YUNi
KToKKyAgICAgICAgKHdlYktpdFdlYlNyY1NlZWtEYXRhQ2IpOgorICAgICAgICAod2ViS2l0V2Vi
U3JjU2V0TWVkaWFQbGF5ZXIpOgorICAgICAgICAoU3RyZWFtaW5nQ2xpZW50OjpjcmVhdGVSZWFk
QnVmZmVyKToKKyAgICAgICAgKFN0cmVhbWluZ0NsaWVudDo6aGFuZGxlUmVzcG9uc2VSZWNlaXZl
ZCk6CisgICAgICAgIChTdHJlYW1pbmdDbGllbnQ6OmhhbmRsZURhdGFSZWNlaXZlZCk6CisgICAg
ICAgIChTdHJlYW1pbmdDbGllbnQ6OmhhbmRsZU5vdGlmeUZpbmlzaGVkKToKKyAgICAgICAgKFJl
c291cmNlSGFuZGxlU3RyZWFtaW5nQ2xpZW50Ojp3YXNCbG9ja2VkKToKKyAgICAgICAgKFJlc291
cmNlSGFuZGxlU3RyZWFtaW5nQ2xpZW50OjpjYW5ub3RTaG93VVJMKToKKwogMjAxNC0wOS0xOSAg
RGVhbiBKYWNrc29uICA8ZGlub0BhcHBsZS5jb20+CiAKICAgICAgICAgTXVsdGl0aHJlYWRlZCBX
ZWJHTCBpcyBhIGJhZCBpZGVhIC0gcmVtb3ZlIGl0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9hdWRpby9nc3RyZWFtZXIvQXVkaW9GaWxlUmVhZGVyR1N0cmVhbWVyLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL2dzdHJlYW1lci9BdWRpb0ZpbGVSZWFkZXJH
U3RyZWFtZXIuY3BwCmluZGV4IDg1YWQ2YjcuLjA0YjhlYWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL2dzdHJlYW1lci9BdWRpb0ZpbGVSZWFkZXJHU3RyZWFtZXIu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL2dzdHJlYW1lci9BdWRpb0Zp
bGVSZWFkZXJHU3RyZWFtZXIuY3BwCkBAIC0zMSw4ICszMSw4IEBACiAjaW5jbHVkZSA8Z3N0L2dz
dC5oPgogI2luY2x1ZGUgPGdzdC9wYnV0aWxzL3BidXRpbHMuaD4KICNpbmNsdWRlIDx3dGYvTm9u
Y29weWFibGUuaD4KLSNpbmNsdWRlIDx3dGYvZ29iamVjdC9HTWFpbkxvb3BTb3VyY2UuaD4KICNp
bmNsdWRlIDx3dGYvZ29iamVjdC9HUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL2dvYmplY3QvR1Ro
cmVhZFNhZmVNYWluTG9vcFNvdXJjZS5oPgogI2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dVbmlxdWVQ
dHIuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtMzM0LDcgKzMzNCw3IEBAIFBhc3NSZWZQ
dHI8QXVkaW9CdXM+IEF1ZGlvRmlsZVJlYWRlcjo6Y3JlYXRlQnVzKGZsb2F0IHNhbXBsZVJhdGUs
IGJvb2wgbWl4VG9Nb25vCiAgICAgbV9sb29wID0gYWRvcHRHUmVmKGdfbWFpbl9sb29wX25ldyhj
b250ZXh0LmdldCgpLCBGQUxTRSkpOwogCiAgICAgLy8gU3RhcnQgdGhlIHBpcGVsaW5lIHByb2Nl
c3NpbmcganVzdCBhZnRlciB0aGUgbG9vcCBpcyBzdGFydGVkLgotICAgIEdNYWluTG9vcFNvdXJj
ZSBzb3VyY2U7CisgICAgR1RocmVhZFNhZmVNYWluTG9vcFNvdXJjZSBzb3VyY2U7CiAgICAgc291
cmNlLnNjaGVkdWxlKCJbV2ViS2l0XSBBdWRpb0ZpbGVSZWFkZXI6OmRlY29kZUF1ZGlvRm9yQnVz
Q3JlYXRpb24iLCBzdGQ6OmZ1bmN0aW9uPHZvaWQoKT4oc3RkOjpiaW5kKCZBdWRpb0ZpbGVSZWFk
ZXI6OmRlY29kZUF1ZGlvRm9yQnVzQ3JlYXRpb24sIHRoaXMpKSwgR19QUklPUklUWV9ERUZBVUxU
LCBudWxscHRyLCBjb250ZXh0LmdldCgpKTsKIAogICAgIGdfbWFpbl9sb29wX3J1bihtX2xvb3Au
Z2V0KCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0
cmVhbWVyL0luYmFuZFRleHRUcmFja1ByaXZhdGVHU3RyZWFtZXIuaCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9JbmJhbmRUZXh0VHJhY2tQcml2YXRlR1N0cmVh
bWVyLmgKaW5kZXggYWYwMGE0My4uNjIyMmE2OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0luYmFuZFRleHRUcmFja1ByaXZhdGVHU3RyZWFt
ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvSW5i
YW5kVGV4dFRyYWNrUHJpdmF0ZUdTdHJlYW1lci5oCkBAIC0zMSw3ICszMSw3IEBACiAjaW5jbHVk
ZSAiR1JlZlB0ckdTdHJlYW1lci5oIgogI2luY2x1ZGUgIkluYmFuZFRleHRUcmFja1ByaXZhdGUu
aCIKICNpbmNsdWRlICJUcmFja1ByaXZhdGVCYXNlR1N0cmVhbWVyLmgiCi0jaW5jbHVkZSA8d3Rm
L2dvYmplY3QvR01haW5Mb29wU291cmNlLmg+CisjaW5jbHVkZSA8d3RmL2dvYmplY3QvR1RocmVh
ZFNhZmVNYWluTG9vcFNvdXJjZS5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTYyLDgg
KzYyLDggQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBJbmJhbmRUZXh0VHJhY2tQcml2YXRlR1N0
cmVhbWVyKGdpbnQgaW5kZXgsIEdSZWZQdHI8R3N0UGFkPik7CiAKLSAgICBHTWFpbkxvb3BTb3Vy
Y2UgbV9zYW1wbGVUaW1lckhhbmRsZXI7Ci0gICAgR01haW5Mb29wU291cmNlIG1fc3RyZWFtVGlt
ZXJIYW5kbGVyOworICAgIEdUaHJlYWRTYWZlTWFpbkxvb3BTb3VyY2UgbV9zYW1wbGVUaW1lckhh
bmRsZXI7CisgICAgR1RocmVhZFNhZmVNYWluTG9vcFNvdXJjZSBtX3N0cmVhbVRpbWVySGFuZGxl
cjsKICAgICBndWxvbmcgbV9ldmVudFByb2JlOwogICAgIFZlY3RvcjxHUmVmUHRyPEdzdFNhbXBs
ZT4gPiBtX3BlbmRpbmdTYW1wbGVzOwogICAgIFN0cmluZyBtX3N0cmVhbUlkOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhUGxheWVy
UHJpdmF0ZUdTdHJlYW1lci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0
cmVhbWVyL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lci5oCmluZGV4IDg3MDVkZGYuLjUwODQ5
MjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1l
ci9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyLmgKQEAg
LTMzLDcgKzMzLDcgQEAKICNpbmNsdWRlIDxnc3QvZ3N0Lmg+CiAjaW5jbHVkZSA8Z3N0L3BidXRp
bHMvaW5zdGFsbC1wbHVnaW5zLmg+CiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KLSNpbmNsdWRl
IDx3dGYvZ29iamVjdC9HTWFpbkxvb3BTb3VyY2UuaD4KKyNpbmNsdWRlIDx3dGYvZ29iamVjdC9H
VGhyZWFkU2FmZU1haW5Mb29wU291cmNlLmg+CiAKICNpZiBFTkFCTEUoVklERU9fVFJBQ0spICYm
IFVTRShHU1RSRUFNRVJfTVBFR1RTKQogI2luY2x1ZGUgPHd0Zi90ZXh0L0F0b21pY1N0cmluZ0hh
c2guaD4KQEAgLTIwMiwxMSArMjAyLDExIEBAIHByaXZhdGU6CiAgICAgYm9vbCBtX3ZvbHVtZUFu
ZE11dGVJbml0aWFsaXplZDsKICAgICBib29sIG1faGFzVmlkZW87CiAgICAgYm9vbCBtX2hhc0F1
ZGlvOwotICAgIEdNYWluTG9vcFNvdXJjZSBtX2F1ZGlvVGltZXJIYW5kbGVyOwotICAgIEdNYWlu
TG9vcFNvdXJjZSBtX3RleHRUaW1lckhhbmRsZXI7Ci0gICAgR01haW5Mb29wU291cmNlIG1fdmlk
ZW9UaW1lckhhbmRsZXI7Ci0gICAgR01haW5Mb29wU291cmNlIG1fdmlkZW9DYXBzVGltZXJIYW5k
bGVyOwotICAgIEdNYWluTG9vcFNvdXJjZSBtX3JlYWR5VGltZXJIYW5kbGVyOworICAgIEdUaHJl
YWRTYWZlTWFpbkxvb3BTb3VyY2UgbV9hdWRpb1RpbWVySGFuZGxlcjsKKyAgICBHVGhyZWFkU2Fm
ZU1haW5Mb29wU291cmNlIG1fdGV4dFRpbWVySGFuZGxlcjsKKyAgICBHVGhyZWFkU2FmZU1haW5M
b29wU291cmNlIG1fdmlkZW9UaW1lckhhbmRsZXI7CisgICAgR1RocmVhZFNhZmVNYWluTG9vcFNv
dXJjZSBtX3ZpZGVvQ2Fwc1RpbWVySGFuZGxlcjsKKyAgICBHVGhyZWFkU2FmZU1haW5Mb29wU291
cmNlIG1fcmVhZHlUaW1lckhhbmRsZXI7CiAgICAgbXV0YWJsZSBsb25nIG1fdG90YWxCeXRlczsK
ICAgICBVUkwgbV91cmw7CiAgICAgYm9vbCBtX3ByZXNlcnZlc1BpdGNoOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhUGxheWVyUHJp
dmF0ZUdTdHJlYW1lckJhc2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Z3N0cmVhbWVyL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lckJhc2UuY3BwCmluZGV4IDZjZTk0
OWUuLjc1MDZlMzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2dzdHJlYW1lci9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJCYXNlLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRl
R1N0cmVhbWVyQmFzZS5jcHAKQEAgLTI3NSw3ICsyNzUsNyBAQCB2b2lkIE1lZGlhUGxheWVyUHJp
dmF0ZUdTdHJlYW1lckJhc2U6Om11dGVDaGFuZ2VkKCkKICNpZiBVU0UoVEVYVFVSRV9NQVBQRVJf
R0wpICYmICFVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCiBQYXNzUmVmUHRyPEJpdG1hcFRleHR1
cmU+IE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lckJhc2U6OnVwZGF0ZVRleHR1cmUoVGV4dHVy
ZU1hcHBlciogdGV4dHVyZU1hcHBlcikKIHsKLSAgICBHTXV0ZXhMb2NrZXIgbG9jayhtX2J1ZmZl
ck11dGV4KTsKKyAgICBHTXV0ZXhMb2NrZXI8R011dGV4PiBsb2NrKG1fYnVmZmVyTXV0ZXgpOwog
ICAgIGlmICghbV9idWZmZXIpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCkBAIC0zMjUsNyAr
MzI1LDcgQEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJCYXNlOjp0cmlnZ2VyUmVw
YWludChHc3RCdWZmZXIqIGJ1ZmZlcikKICAgICBnX3JldHVybl9pZl9mYWlsKEdTVF9JU19CVUZG
RVIoYnVmZmVyKSk7CiAKICAgICB7Ci0gICAgICAgIEdNdXRleExvY2tlciBsb2NrKG1fYnVmZmVy
TXV0ZXgpOworICAgICAgICBHTXV0ZXhMb2NrZXI8R011dGV4PiBsb2NrKG1fYnVmZmVyTXV0ZXgp
OwogICAgICAgICBnc3RfYnVmZmVyX3JlcGxhY2UoJm1fYnVmZmVyLCBidWZmZXIpOwogICAgIH0K
IApAQCAtMzU3LDcgKzM1Nyw3IEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyQmFz
ZTo6cGFpbnQoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBJbnRSCiAgICAgaWYgKCFt
X3BsYXllci0+dmlzaWJsZSgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBHTXV0ZXhMb2NrZXIg
bG9jayhtX2J1ZmZlck11dGV4KTsKKyAgICBHTXV0ZXhMb2NrZXI8R011dGV4PiBsb2NrKG1fYnVm
ZmVyTXV0ZXgpOwogICAgIGlmICghbV9idWZmZXIpCiAgICAgICAgIHJldHVybjsKIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhUGxh
eWVyUHJpdmF0ZUdTdHJlYW1lckJhc2UuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2dzdHJlYW1lci9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJCYXNlLmgKaW5kZXggM2Ex
MDg2MS4uNDYwZTg2MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZ3N0cmVhbWVyL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lckJhc2UuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRl
R1N0cmVhbWVyQmFzZS5oCkBAIC0zMCw3ICszMCw3IEBACiAjaW5jbHVkZSA8Z2xpYi5oPgogCiAj
aW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KLSNpbmNsdWRlIDx3dGYvZ29iamVjdC9HTWFpbkxvb3BT
b3VyY2UuaD4KKyNpbmNsdWRlIDx3dGYvZ29iamVjdC9HVGhyZWFkU2FmZU1haW5Mb29wU291cmNl
Lmg+CiAKICNpZiBVU0UoVEVYVFVSRV9NQVBQRVJfR0wpICYmICFVU0UoQ09PUkRJTkFURURfR1JB
UEhJQ1MpCiAjaW5jbHVkZSAiVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXIuaCIKQEAgLTEyNSw4
ICsxMjUsOCBAQCBwcm90ZWN0ZWQ6CiAgICAgSW50U2l6ZSBtX3NpemU7CiAgICAgR011dGV4IG1f
YnVmZmVyTXV0ZXg7CiAgICAgR3N0QnVmZmVyKiBtX2J1ZmZlcjsKLSAgICBHTWFpbkxvb3BTb3Vy
Y2UgbV92b2x1bWVUaW1lckhhbmRsZXI7Ci0gICAgR01haW5Mb29wU291cmNlIG1fbXV0ZVRpbWVy
SGFuZGxlcjsKKyAgICBHVGhyZWFkU2FmZU1haW5Mb29wU291cmNlIG1fdm9sdW1lVGltZXJIYW5k
bGVyOworICAgIEdUaHJlYWRTYWZlTWFpbkxvb3BTb3VyY2UgbV9tdXRlVGltZXJIYW5kbGVyOwog
ICAgIHVuc2lnbmVkIGxvbmcgbV9yZXBhaW50SGFuZGxlcjsKICAgICB1bnNpZ25lZCBsb25nIG1f
dm9sdW1lU2lnbmFsSGFuZGxlcjsKICAgICB1bnNpZ25lZCBsb25nIG1fbXV0ZVNpZ25hbEhhbmRs
ZXI7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFt
ZXIvVHJhY2tQcml2YXRlQmFzZUdTdHJlYW1lci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZ3N0cmVhbWVyL1RyYWNrUHJpdmF0ZUJhc2VHU3RyZWFtZXIuaAppbmRleCAzN2M5
MWQ3Li45ZTY4MDkxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9nc3RyZWFtZXIvVHJhY2tQcml2YXRlQmFzZUdTdHJlYW1lci5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9UcmFja1ByaXZhdGVCYXNlR1N0cmVhbWVy
LmgKQEAgLTMwLDcgKzMwLDcgQEAKIAogI2luY2x1ZGUgIkdSZWZQdHJHU3RyZWFtZXIuaCIKICNp
bmNsdWRlIDx3dGYvVGhyZWFkaW5nUHJpbWl0aXZlcy5oPgotI2luY2x1ZGUgPHd0Zi9nb2JqZWN0
L0dNYWluTG9vcFNvdXJjZS5oPgorI2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dUaHJlYWRTYWZlTWFp
bkxvb3BTb3VyY2UuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogbmFtZXNw
YWNlIFdlYkNvcmUgewpAQCAtNzAsOCArNzAsOCBAQCBwcml2YXRlOgogICAgIGJvb2wgZ2V0VGFn
KEdzdFRhZ0xpc3QqIHRhZ3MsIGNvbnN0IGdjaGFyKiB0YWdOYW1lLCBTdHJpbmdUeXBlJiB2YWx1
ZSk7CiAKICAgICBUcmFja1ByaXZhdGVCYXNlKiBtX293bmVyOwotICAgIEdNYWluTG9vcFNvdXJj
ZSBtX2FjdGl2ZVRpbWVySGFuZGxlcjsKLSAgICBHTWFpbkxvb3BTb3VyY2UgbV90YWdUaW1lckhh
bmRsZXI7CisgICAgR1RocmVhZFNhZmVNYWluTG9vcFNvdXJjZSBtX2FjdGl2ZVRpbWVySGFuZGxl
cjsKKyAgICBHVGhyZWFkU2FmZU1haW5Mb29wU291cmNlIG1fdGFnVGltZXJIYW5kbGVyOwogCiAg
ICAgTXV0ZXggbV90YWdNdXRleDsKICAgICBHUmVmUHRyPEdzdFRhZ0xpc3Q+IG1fdGFnczsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9WaWRl
b1NpbmtHU3RyZWFtZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0
cmVhbWVyL1ZpZGVvU2lua0dTdHJlYW1lci5jcHAKaW5kZXggMTkwZTc1MS4uN2NiMTkzZSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL1ZpZGVv
U2lua0dTdHJlYW1lci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Z3N0cmVhbWVyL1ZpZGVvU2lua0dTdHJlYW1lci5jcHAKQEAgLTM2LDggKzM2LDggQEAKICNpbmNs
dWRlIDxnc3QvZ3N0Lmg+CiAjaW5jbHVkZSA8Z3N0L3ZpZGVvL2dzdHZpZGVvbWV0YS5oPgogI2lu
Y2x1ZGUgPHd0Zi9Pd25QdHIuaD4KLSNpbmNsdWRlIDx3dGYvZ29iamVjdC9HTWFpbkxvb3BTb3Vy
Y2UuaD4KICNpbmNsdWRlIDx3dGYvZ29iamVjdC9HTXV0ZXhMb2NrZXIuaD4KKyNpbmNsdWRlIDx3
dGYvZ29iamVjdC9HVGhyZWFkU2FmZU1haW5Mb29wU291cmNlLmg+CiAKIHVzaW5nIG5hbWVzcGFj
ZSBXZWJDb3JlOwogCkBAIC04OCw3ICs4OCw3IEBAIHN0cnVjdCBfV2ViS2l0VmlkZW9TaW5rUHJp
dmF0ZSB7CiAgICAgfQogCiAgICAgR3N0QnVmZmVyKiBidWZmZXI7Ci0gICAgR01haW5Mb29wU291
cmNlIHRpbWVvdXRTb3VyY2U7CisgICAgR1RocmVhZFNhZmVNYWluTG9vcFNvdXJjZSB0aW1lb3V0
U291cmNlOwogICAgIEdNdXRleCBidWZmZXJNdXRleDsKICAgICBHQ29uZCBkYXRhQ29uZGl0aW9u
OwogCkBAIC0xMjEsNyArMTIxLDcgQEAgc3RhdGljIHZvaWQgd2Via2l0VmlkZW9TaW5rVGltZW91
dENhbGxiYWNrKFdlYktpdFZpZGVvU2luayogc2luaykKIHsKICAgICBXZWJLaXRWaWRlb1NpbmtQ
cml2YXRlKiBwcml2ID0gc2luay0+cHJpdjsKIAotICAgIEdNdXRleExvY2tlciBsb2NrKHByaXYt
PmJ1ZmZlck11dGV4KTsKKyAgICBHTXV0ZXhMb2NrZXI8R011dGV4PiBsb2NrKHByaXYtPmJ1ZmZl
ck11dGV4KTsKICAgICBHc3RCdWZmZXIqIGJ1ZmZlciA9IHByaXYtPmJ1ZmZlcjsKICAgICBwcml2
LT5idWZmZXIgPSAwOwogCkBAIC0xNDAsNyArMTQwLDcgQEAgc3RhdGljIEdzdEZsb3dSZXR1cm4g
d2Via2l0VmlkZW9TaW5rUmVuZGVyKEdzdEJhc2VTaW5rKiBiYXNlU2luaywgR3N0QnVmZmVyKiBi
dWYKICAgICBXZWJLaXRWaWRlb1NpbmsqIHNpbmsgPSBXRUJLSVRfVklERU9fU0lOSyhiYXNlU2lu
ayk7CiAgICAgV2ViS2l0VmlkZW9TaW5rUHJpdmF0ZSogcHJpdiA9IHNpbmstPnByaXY7CiAKLSAg
ICBHTXV0ZXhMb2NrZXIgbG9jayhwcml2LT5idWZmZXJNdXRleCk7CisgICAgR011dGV4TG9ja2Vy
PEdNdXRleD4gbG9jayhwcml2LT5idWZmZXJNdXRleCk7CiAKICAgICBpZiAocHJpdi0+dW5sb2Nr
ZWQpCiAgICAgICAgIHJldHVybiBHU1RfRkxPV19PSzsKQEAgLTI1Nyw3ICsyNTcsNyBAQCBzdGF0
aWMgdm9pZCB3ZWJraXRWaWRlb1NpbmtHZXRQcm9wZXJ0eShHT2JqZWN0KiBvYmplY3QsIGd1aW50
IHByb3BlcnR5SWQsIEdWYWx1ZQogCiBzdGF0aWMgdm9pZCB1bmxvY2tCdWZmZXJNdXRleChXZWJL
aXRWaWRlb1NpbmtQcml2YXRlKiBwcml2KQogewotICAgIEdNdXRleExvY2tlciBsb2NrKHByaXYt
PmJ1ZmZlck11dGV4KTsKKyAgICBHTXV0ZXhMb2NrZXI8R011dGV4PiBsb2NrKHByaXYtPmJ1ZmZl
ck11dGV4KTsKIAogICAgIGlmIChwcml2LT5idWZmZXIpIHsKICAgICAgICAgZ3N0X2J1ZmZlcl91
bnJlZihwcml2LT5idWZmZXIpOwpAQCAtMjgzLDcgKzI4Myw3IEBAIHN0YXRpYyBnYm9vbGVhbiB3
ZWJraXRWaWRlb1NpbmtVbmxvY2tTdG9wKEdzdEJhc2VTaW5rKiBiYXNlU2luaykKICAgICBXZWJL
aXRWaWRlb1NpbmtQcml2YXRlKiBwcml2ID0gV0VCS0lUX1ZJREVPX1NJTksoYmFzZVNpbmspLT5w
cml2OwogCiAgICAgewotICAgICAgICBHTXV0ZXhMb2NrZXIgbG9jayhwcml2LT5idWZmZXJNdXRl
eCk7CisgICAgICAgIEdNdXRleExvY2tlcjxHTXV0ZXg+IGxvY2socHJpdi0+YnVmZmVyTXV0ZXgp
OwogICAgICAgICBwcml2LT51bmxvY2tlZCA9IGZhbHNlOwogICAgIH0KIApAQCAtMzA4LDcgKzMw
OCw3IEBAIHN0YXRpYyBnYm9vbGVhbiB3ZWJraXRWaWRlb1NpbmtTdGFydChHc3RCYXNlU2luayog
YmFzZVNpbmspCiB7CiAgICAgV2ViS2l0VmlkZW9TaW5rUHJpdmF0ZSogcHJpdiA9IFdFQktJVF9W
SURFT19TSU5LKGJhc2VTaW5rKS0+cHJpdjsKIAotICAgIEdNdXRleExvY2tlciBsb2NrKHByaXYt
PmJ1ZmZlck11dGV4KTsKKyAgICBHTXV0ZXhMb2NrZXI8R011dGV4PiBsb2NrKHByaXYtPmJ1ZmZl
ck11dGV4KTsKICAgICBwcml2LT51bmxvY2tlZCA9IGZhbHNlOwogICAgIHJldHVybiBUUlVFOwog
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVy
L1dlYktpdE1lZGlhU291cmNlR1N0cmVhbWVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2dzdHJlYW1lci9XZWJLaXRNZWRpYVNvdXJjZUdTdHJlYW1lci5jcHAKaW5kZXgg
YjhhZTJmMS4uODIwZjYxYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZ3N0cmVhbWVyL1dlYktpdE1lZGlhU291cmNlR1N0cmVhbWVyLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvV2ViS2l0TWVkaWFTb3VyY2VH
U3RyZWFtZXIuY3BwCkBAIC0zMCw3ICszMCw3IEBACiAjaW5jbHVkZSA8Z3N0L2FwcC9nc3RhcHBz
cmMuaD4KICNpbmNsdWRlIDxnc3QvZ3N0Lmg+CiAjaW5jbHVkZSA8Z3N0L3BidXRpbHMvbWlzc2lu
Zy1wbHVnaW5zLmg+Ci0jaW5jbHVkZSA8d3RmL2dvYmplY3QvR01haW5Mb29wU291cmNlLmg+Cisj
aW5jbHVkZSA8d3RmL2dvYmplY3QvR1RocmVhZFNhZmVNYWluTG9vcFNvdXJjZS5oPgogI2luY2x1
ZGUgPHd0Zi9nb2JqZWN0L0dVbmlxdWVQdHIuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5n
Lmg+CiAKQEAgLTQ0LDExICs0NCwxMSBAQCB0eXBlZGVmIHN0cnVjdCBfU291cmNlIHsKICAgICBn
dWludDY0IHNpemU7CiAgICAgZ2Jvb2xlYW4gcGF1c2VkOwogCi0gICAgR01haW5Mb29wU291cmNl
IHN0YXJ0OwotICAgIEdNYWluTG9vcFNvdXJjZSBzdG9wOwotICAgIEdNYWluTG9vcFNvdXJjZSBu
ZWVkRGF0YTsKLSAgICBHTWFpbkxvb3BTb3VyY2UgZW5vdWdoRGF0YTsKLSAgICBHTWFpbkxvb3BT
b3VyY2Ugc2VlazsKKyAgICBHVGhyZWFkU2FmZU1haW5Mb29wU291cmNlIHN0YXJ0OworICAgIEdU
aHJlYWRTYWZlTWFpbkxvb3BTb3VyY2Ugc3RvcDsKKyAgICBHVGhyZWFkU2FmZU1haW5Mb29wU291
cmNlIG5lZWREYXRhOworICAgIEdUaHJlYWRTYWZlTWFpbkxvb3BTb3VyY2UgZW5vdWdoRGF0YTsK
KyAgICBHVGhyZWFkU2FmZU1haW5Mb29wU291cmNlIHNlZWs7CiAKICAgICBndWludDY0IHJlcXVl
c3RlZE9mZnNldDsKIH0gU291cmNlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL1dlYktpdFdlYlNvdXJjZUdTdHJlYW1lci5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvV2ViS2l0V2ViU291cmNlR1N0
cmVhbWVyLmNwcAppbmRleCBjNzFkM2MzLi5lZWRmODZkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvV2ViS2l0V2ViU291cmNlR1N0cmVhbWVy
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvV2Vi
S2l0V2ViU291cmNlR1N0cmVhbWVyLmNwcApAQCAtNDMsOSArNDMsOSBAQAogI2luY2x1ZGUgPGdz
dC9nc3QuaD4KICNpbmNsdWRlIDxnc3QvcGJ1dGlscy9taXNzaW5nLXBsdWdpbnMuaD4KICNpbmNs
dWRlIDx3dGYvTm9uY29weWFibGUuaD4KLSNpbmNsdWRlIDx3dGYvZ29iamVjdC9HTWFpbkxvb3BT
b3VyY2UuaD4KICNpbmNsdWRlIDx3dGYvZ29iamVjdC9HTXV0ZXhMb2NrZXIuaD4KICNpbmNsdWRl
IDx3dGYvZ29iamVjdC9HUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL2dvYmplY3QvR1RocmVhZFNh
ZmVNYWluTG9vcFNvdXJjZS5oPgogI2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dVbmlxdWVQdHIuaD4K
ICNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CiAKQEAgLTEzOSwxMSArMTM5LDExIEBAIHN0
cnVjdCBfV2ViS2l0V2ViU3JjUHJpdmF0ZSB7CiAKICAgICBndWludDY0IHJlcXVlc3RlZE9mZnNl
dDsKIAotICAgIEdNYWluTG9vcFNvdXJjZSBzdGFydFNvdXJjZTsKLSAgICBHTWFpbkxvb3BTb3Vy
Y2Ugc3RvcFNvdXJjZTsKLSAgICBHTWFpbkxvb3BTb3VyY2UgbmVlZERhdGFTb3VyY2U7Ci0gICAg
R01haW5Mb29wU291cmNlIGVub3VnaERhdGFTb3VyY2U7Ci0gICAgR01haW5Mb29wU291cmNlIHNl
ZWtTb3VyY2U7CisgICAgR1RocmVhZFNhZmVNYWluTG9vcFNvdXJjZSBzdGFydFNvdXJjZTsKKyAg
ICBHVGhyZWFkU2FmZU1haW5Mb29wU291cmNlIHN0b3BTb3VyY2U7CisgICAgR1RocmVhZFNhZmVN
YWluTG9vcFNvdXJjZSBuZWVkRGF0YVNvdXJjZTsKKyAgICBHVGhyZWFkU2FmZU1haW5Mb29wU291
cmNlIGVub3VnaERhdGFTb3VyY2U7CisgICAgR1RocmVhZFNhZmVNYWluTG9vcFNvdXJjZSBzZWVr
U291cmNlOwogCiAgICAgR1JlZlB0cjxHc3RCdWZmZXI+IGJ1ZmZlcjsKIApAQCAtMzUyLDcgKzM1
Miw3IEBAIHN0YXRpYyB2b2lkIHdlYktpdFdlYlNyY0dldFByb3BlcnR5KEdPYmplY3QqIG9iamVj
dCwgZ3VpbnQgcHJvcElELCBHVmFsdWUqIHZhbHVlCiAgICAgV2ViS2l0V2ViU3JjKiBzcmMgPSBX
RUJLSVRfV0VCX1NSQyhvYmplY3QpOwogICAgIFdlYktpdFdlYlNyY1ByaXZhdGUqIHByaXYgPSBz
cmMtPnByaXY7CiAKLSAgICBHTXV0ZXhMb2NrZXIgbG9ja2VyKCpHU1RfT0JKRUNUX0dFVF9MT0NL
KHNyYykpOworICAgIEdNdXRleExvY2tlcjxHTXV0ZXg+IGxvY2tlcigqR1NUX09CSkVDVF9HRVRf
TE9DSyhzcmMpKTsKICAgICBzd2l0Y2ggKHByb3BJRCkgewogICAgIGNhc2UgUFJPUF9JUkFESU9f
TkFNRToKICAgICAgICAgZ192YWx1ZV9zZXRfc3RyaW5nKHZhbHVlLCBwcml2LT5pcmFkaW9OYW1l
KTsKQEAgLTM5MSw3ICszOTEsNyBAQCBzdGF0aWMgdm9pZCB3ZWJLaXRXZWJTcmNTdG9wKFdlYktp
dFdlYlNyYyogc3JjKQogCiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKIAotICAgIEdNdXRl
eExvY2tlciBsb2NrZXIoKkdTVF9PQkpFQ1RfR0VUX0xPQ0soc3JjKSk7CisgICAgR011dGV4TG9j
a2VyPEdNdXRleD4gbG9ja2VyKCpHU1RfT0JKRUNUX0dFVF9MT0NLKHNyYykpOwogCiAgICAgYm9v
bCBzZWVraW5nID0gcHJpdi0+c2Vla1NvdXJjZS5pc0FjdGl2ZSgpOwogCkBAIC00NDcsNyArNDQ3
LDcgQEAgc3RhdGljIHZvaWQgd2ViS2l0V2ViU3JjU3RhcnQoV2ViS2l0V2ViU3JjKiBzcmMpCiAK
ICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwogCi0gICAgR011dGV4TG9ja2VyIGxvY2tlcigq
R1NUX09CSkVDVF9HRVRfTE9DSyhzcmMpKTsKKyAgICBHTXV0ZXhMb2NrZXI8R011dGV4PiBsb2Nr
ZXIoKkdTVF9PQkpFQ1RfR0VUX0xPQ0soc3JjKSk7CiAKICAgICBwcml2LT5jb3JzQWNjZXNzQ2hl
Y2sgPSBDT1JTTm9DaGVjazsKIApAQCAtNTM5LDcgKzUzOSw3IEBAIHN0YXRpYyBHc3RTdGF0ZUNo
YW5nZVJldHVybiB3ZWJLaXRXZWJTcmNDaGFuZ2VTdGF0ZShHc3RFbGVtZW50KiBlbGVtZW50LCBH
c3RTdGF0CiAgICAgICAgIHJldHVybiByZXQ7CiAgICAgfQogCi0gICAgR011dGV4TG9ja2VyIGxv
Y2tlcigqR1NUX09CSkVDVF9HRVRfTE9DSyhzcmMpKTsKKyAgICBHTXV0ZXhMb2NrZXI8R011dGV4
PiBsb2NrZXIoKkdTVF9PQkpFQ1RfR0VUX0xPQ0soc3JjKSk7CiAgICAgc3dpdGNoICh0cmFuc2l0
aW9uKSB7CiAgICAgY2FzZSBHU1RfU1RBVEVfQ0hBTkdFX1JFQURZX1RPX1BBVVNFRDoKICAgICAg
ICAgR1NUX0RFQlVHX09CSkVDVChzcmMsICJSRUFEWS0+UEFVU0VEIik7CkBAIC01NzQsNyArNTc0
LDcgQEAgc3RhdGljIGdib29sZWFuIHdlYktpdFdlYlNyY1F1ZXJ5V2l0aFBhcmVudChHc3RQYWQq
IHBhZCwgR3N0T2JqZWN0KiBwYXJlbnQsIEdzdFEKICAgICAgICAgZ3N0X3F1ZXJ5X3BhcnNlX2R1
cmF0aW9uKHF1ZXJ5LCAmZm9ybWF0LCBOVUxMKTsKIAogICAgICAgICBHU1RfREVCVUdfT0JKRUNU
KHNyYywgImR1cmF0aW9uIHF1ZXJ5IGluIGZvcm1hdCAlcyIsIGdzdF9mb3JtYXRfZ2V0X25hbWUo
Zm9ybWF0KSk7Ci0gICAgICAgIEdNdXRleExvY2tlciBsb2NrZXIoKkdTVF9PQkpFQ1RfR0VUX0xP
Q0soc3JjKSk7CisgICAgICAgIEdNdXRleExvY2tlcjxHTXV0ZXg+IGxvY2tlcigqR1NUX09CSkVD
VF9HRVRfTE9DSyhzcmMpKTsKICAgICAgICAgaWYgKGZvcm1hdCA9PSBHU1RfRk9STUFUX0JZVEVT
ICYmIHNyYy0+cHJpdi0+c2l6ZSA+IDApIHsKICAgICAgICAgICAgIGdzdF9xdWVyeV9zZXRfZHVy
YXRpb24ocXVlcnksIGZvcm1hdCwgc3JjLT5wcml2LT5zaXplKTsKICAgICAgICAgICAgIHJlc3Vs
dCA9IFRSVUU7CkBAIC01ODIsNyArNTgyLDcgQEAgc3RhdGljIGdib29sZWFuIHdlYktpdFdlYlNy
Y1F1ZXJ5V2l0aFBhcmVudChHc3RQYWQqIHBhZCwgR3N0T2JqZWN0KiBwYXJlbnQsIEdzdFEKICAg
ICAgICAgYnJlYWs7CiAgICAgfQogICAgIGNhc2UgR1NUX1FVRVJZX1VSSTogewotICAgICAgICBH
TXV0ZXhMb2NrZXIgbG9ja2VyKCpHU1RfT0JKRUNUX0dFVF9MT0NLKHNyYykpOworICAgICAgICBH
TXV0ZXhMb2NrZXI8R011dGV4PiBsb2NrZXIoKkdTVF9PQkpFQ1RfR0VUX0xPQ0soc3JjKSk7CiAg
ICAgICAgIGdzdF9xdWVyeV9zZXRfdXJpKHF1ZXJ5LCBzcmMtPnByaXYtPnVyaSk7CiAgICAgICAg
IHJlc3VsdCA9IFRSVUU7CiAgICAgICAgIGJyZWFrOwpAQCAtNjIzLDcgKzYyMyw3IEBAIHN0YXRp
YyBnY2hhciogd2ViS2l0V2ViU3JjR2V0VXJpKEdzdFVSSUhhbmRsZXIqIGhhbmRsZXIpCiAgICAg
V2ViS2l0V2ViU3JjKiBzcmMgPSBXRUJLSVRfV0VCX1NSQyhoYW5kbGVyKTsKICAgICBnY2hhciog
cmV0OwogCi0gICAgR011dGV4TG9ja2VyIGxvY2tlcigqR1NUX09CSkVDVF9HRVRfTE9DSyhzcmMp
KTsKKyAgICBHTXV0ZXhMb2NrZXI8R011dGV4PiBsb2NrZXIoKkdTVF9PQkpFQ1RfR0VUX0xPQ0so
c3JjKSk7CiAgICAgcmV0ID0gZ19zdHJkdXAoc3JjLT5wcml2LT51cmkpOwogICAgIHJldHVybiBy
ZXQ7CiB9CkBAIC02MzgsNyArNjM4LDcgQEAgc3RhdGljIGdib29sZWFuIHdlYktpdFdlYlNyY1Nl
dFVyaShHc3RVUklIYW5kbGVyKiBoYW5kbGVyLCBjb25zdCBnY2hhciogdXJpLCBHRXIKICAgICAg
ICAgcmV0dXJuIEZBTFNFOwogICAgIH0KIAotICAgIEdNdXRleExvY2tlciBsb2NrZXIoKkdTVF9P
QkpFQ1RfR0VUX0xPQ0soc3JjKSk7CisgICAgR011dGV4TG9ja2VyPEdNdXRleD4gbG9ja2VyKCpH
U1RfT0JKRUNUX0dFVF9MT0NLKHNyYykpOwogCiAgICAgZ19mcmVlKHByaXYtPnVyaSk7CiAgICAg
cHJpdi0+dXJpID0gMDsKQEAgLTY3NCw3ICs2NzQsNyBAQCBzdGF0aWMgdm9pZCB3ZWJLaXRXZWJT
cmNOZWVkRGF0YU1haW5DYihXZWJLaXRXZWJTcmMqIHNyYykKIAogICAgIEFTU0VSVChpc01haW5U
aHJlYWQoKSk7CiAKLSAgICBHTXV0ZXhMb2NrZXIgbG9ja2VyKCpHU1RfT0JKRUNUX0dFVF9MT0NL
KHNyYykpOworICAgIEdNdXRleExvY2tlcjxHTXV0ZXg+IGxvY2tlcigqR1NUX09CSkVDVF9HRVRf
TE9DSyhzcmMpKTsKICAgICBwcml2LT5wYXVzZWQgPSBGQUxTRTsKICAgICBsb2NrZXIudW5sb2Nr
KCk7CiAKQEAgLTY4OSw3ICs2ODksNyBAQCBzdGF0aWMgdm9pZCB3ZWJLaXRXZWJTcmNOZWVkRGF0
YUNiKEdzdEFwcFNyYyosIGd1aW50IGxlbmd0aCwgZ3BvaW50ZXIgdXNlckRhdGEpCiAKICAgICBH
U1RfREVCVUdfT0JKRUNUKHNyYywgIk5lZWQgbW9yZSBkYXRhOiAldSIsIGxlbmd0aCk7CiAKLSAg
ICBHTXV0ZXhMb2NrZXIgbG9ja2VyKCpHU1RfT0JKRUNUX0dFVF9MT0NLKHNyYykpOworICAgIEdN
dXRleExvY2tlcjxHTXV0ZXg+IGxvY2tlcigqR1NUX09CSkVDVF9HRVRfTE9DSyhzcmMpKTsKICAg
ICBpZiAocHJpdi0+bmVlZERhdGFTb3VyY2UuaXNTY2hlZHVsZWQoKSB8fCAhcHJpdi0+cGF1c2Vk
KQogICAgICAgICByZXR1cm47CiAKQEAgLTcwNCw3ICs3MDQsNyBAQCBzdGF0aWMgdm9pZCB3ZWJL
aXRXZWJTcmNFbm91Z2hEYXRhTWFpbkNiKFdlYktpdFdlYlNyYyogc3JjKQogCiAgICAgQVNTRVJU
KGlzTWFpblRocmVhZCgpKTsKIAotICAgIEdNdXRleExvY2tlciBsb2NrZXIoKkdTVF9PQkpFQ1Rf
R0VUX0xPQ0soc3JjKSk7CisgICAgR011dGV4TG9ja2VyPEdNdXRleD4gbG9ja2VyKCpHU1RfT0JK
RUNUX0dFVF9MT0NLKHNyYykpOwogICAgIHByaXYtPnBhdXNlZCA9IFRSVUU7CiAgICAgbG9ja2Vy
LnVubG9jaygpOwogCkBAIC03MTksNyArNzE5LDcgQEAgc3RhdGljIHZvaWQgd2ViS2l0V2ViU3Jj
RW5vdWdoRGF0YUNiKEdzdEFwcFNyYyosIGdwb2ludGVyIHVzZXJEYXRhKQogCiAgICAgR1NUX0RF
QlVHX09CSkVDVChzcmMsICJIYXZlIGVub3VnaCBkYXRhIik7CiAKLSAgICBHTXV0ZXhMb2NrZXIg
bG9ja2VyKCpHU1RfT0JKRUNUX0dFVF9MT0NLKHNyYykpOworICAgIEdNdXRleExvY2tlcjxHTXV0
ZXg+IGxvY2tlcigqR1NUX09CSkVDVF9HRVRfTE9DSyhzcmMpKTsKICAgICBpZiAocHJpdi0+ZW5v
dWdoRGF0YVNvdXJjZS5pc1NjaGVkdWxlZCgpIHx8IHByaXYtPnBhdXNlZCkKICAgICAgICAgcmV0
dXJuOwogCkBAIC03NDIsNyArNzQyLDcgQEAgc3RhdGljIGdib29sZWFuIHdlYktpdFdlYlNyY1Nl
ZWtEYXRhQ2IoR3N0QXBwU3JjKiwgZ3VpbnQ2NCBvZmZzZXQsIGdwb2ludGVyIHVzZXIKICAgICBX
ZWJLaXRXZWJTcmNQcml2YXRlKiBwcml2ID0gc3JjLT5wcml2OwogCiAgICAgR1NUX0RFQlVHX09C
SkVDVChzcmMsICJTZWVraW5nIHRvIG9mZnNldDogJSIgR19HVUlOVDY0X0ZPUk1BVCwgb2Zmc2V0
KTsKLSAgICBHTXV0ZXhMb2NrZXIgbG9ja2VyKCpHU1RfT0JKRUNUX0dFVF9MT0NLKHNyYykpOwor
ICAgIEdNdXRleExvY2tlcjxHTXV0ZXg+IGxvY2tlcigqR1NUX09CSkVDVF9HRVRfTE9DSyhzcmMp
KTsKICAgICBpZiAob2Zmc2V0ID09IHByaXYtPm9mZnNldCAmJiBwcml2LT5yZXF1ZXN0ZWRPZmZz
ZXQgPT0gcHJpdi0+b2Zmc2V0KQogICAgICAgICByZXR1cm4gVFJVRTsKIApAQCAtNzYxLDcgKzc2
MSw3IEBAIHN0YXRpYyBnYm9vbGVhbiB3ZWJLaXRXZWJTcmNTZWVrRGF0YUNiKEdzdEFwcFNyYyos
IGd1aW50NjQgb2Zmc2V0LCBncG9pbnRlciB1c2VyCiB2b2lkIHdlYktpdFdlYlNyY1NldE1lZGlh
UGxheWVyKFdlYktpdFdlYlNyYyogc3JjLCBXZWJDb3JlOjpNZWRpYVBsYXllciogcGxheWVyKQog
ewogICAgIEFTU0VSVChwbGF5ZXIpOwotICAgIEdNdXRleExvY2tlciBsb2NrZXIoKkdTVF9PQkpF
Q1RfR0VUX0xPQ0soc3JjKSk7CisgICAgR011dGV4TG9ja2VyPEdNdXRleD4gbG9ja2VyKCpHU1Rf
T0JKRUNUX0dFVF9MT0NLKHNyYykpOwogICAgIHNyYy0+cHJpdi0+cGxheWVyID0gcGxheWVyOwog
fQogCkBAIC03OTEsNyArNzkxLDcgQEAgY2hhciogU3RyZWFtaW5nQ2xpZW50OjpjcmVhdGVSZWFk
QnVmZmVyKHNpemVfdCByZXF1ZXN0ZWRTaXplLCBzaXplX3QmIGFjdHVhbFNpemUKIAogICAgIG1h
cEdzdEJ1ZmZlcihidWZmZXIpOwogCi0gICAgR011dGV4TG9ja2VyIGxvY2tlcigqR1NUX09CSkVD
VF9HRVRfTE9DSyhzcmMpKTsKKyAgICBHTXV0ZXhMb2NrZXI8R011dGV4PiBsb2NrZXIoKkdTVF9P
QkpFQ1RfR0VUX0xPQ0soc3JjKSk7CiAgICAgcHJpdi0+YnVmZmVyID0gYWRvcHRHUmVmKGJ1ZmZl
cik7CiAgICAgbG9ja2VyLnVubG9jaygpOwogCkBAIC04MTcsNyArODE3LDcgQEAgdm9pZCBTdHJl
YW1pbmdDbGllbnQ6OmhhbmRsZVJlc3BvbnNlUmVjZWl2ZWQoY29uc3QgUmVzb3VyY2VSZXNwb25z
ZSYgcmVzcG9uc2UsIEMKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIEdNdXRleExvY2tl
ciBsb2NrZXIoKkdTVF9PQkpFQ1RfR0VUX0xPQ0soc3JjKSk7CisgICAgR011dGV4TG9ja2VyPEdN
dXRleD4gbG9ja2VyKCpHU1RfT0JKRUNUX0dFVF9MT0NLKHNyYykpOwogCiAgICAgcHJpdi0+Y29y
c0FjY2Vzc0NoZWNrID0gY29yc0FjY2Vzc0NoZWNrOwogCkBAIC05MTYsNyArOTE2LDcgQEAgdm9p
ZCBTdHJlYW1pbmdDbGllbnQ6OmhhbmRsZURhdGFSZWNlaXZlZChjb25zdCBjaGFyKiBkYXRhLCBp
bnQgbGVuZ3RoKQogICAgIFdlYktpdFdlYlNyYyogc3JjID0gV0VCS0lUX1dFQl9TUkMobV9zcmMp
OwogICAgIFdlYktpdFdlYlNyY1ByaXZhdGUqIHByaXYgPSBzcmMtPnByaXY7CiAKLSAgICBHTXV0
ZXhMb2NrZXIgbG9ja2VyKCpHU1RfT0JKRUNUX0dFVF9MT0NLKHNyYykpOworICAgIEdNdXRleExv
Y2tlcjxHTXV0ZXg+IGxvY2tlcigqR1NUX09CSkVDVF9HRVRfTE9DSyhzcmMpKTsKIAogICAgIEdT
VF9MT0dfT0JKRUNUKHNyYywgIkhhdmUgJWxsZCBieXRlcyBvZiBkYXRhIiwgcHJpdi0+YnVmZmVy
ID8gc3RhdGljX2Nhc3Q8bG9uZyBsb25nPihnc3RfYnVmZmVyX2dldF9zaXplKHByaXYtPmJ1ZmZl
ci5nZXQoKSkpIDogbGVuZ3RoKTsKIApAQCAtOTg1LDcgKzk4NSw3IEBAIHZvaWQgU3RyZWFtaW5n
Q2xpZW50OjpoYW5kbGVOb3RpZnlGaW5pc2hlZCgpCiAKICAgICBHU1RfREVCVUdfT0JKRUNUKHNy
YywgIkhhdmUgRU9TIik7CiAKLSAgICBHTXV0ZXhMb2NrZXIgbG9ja2VyKCpHU1RfT0JKRUNUX0dF
VF9MT0NLKHNyYykpOworICAgIEdNdXRleExvY2tlcjxHTXV0ZXg+IGxvY2tlcigqR1NUX09CSkVD
VF9HRVRfTE9DSyhzcmMpKTsKICAgICBpZiAoIXByaXYtPnNlZWtTb3VyY2UuaXNBY3RpdmUoKSkg
ewogICAgICAgICBsb2NrZXIudW5sb2NrKCk7CiAgICAgICAgIGdzdF9hcHBfc3JjX2VuZF9vZl9z
dHJlYW0ocHJpdi0+YXBwc3JjKTsKQEAgLTExNDQsNyArMTE0NCw3IEBAIHZvaWQgUmVzb3VyY2VI
YW5kbGVTdHJlYW1pbmdDbGllbnQ6Ondhc0Jsb2NrZWQoUmVzb3VyY2VIYW5kbGUqKQogCiAgICAg
R1NUX0VSUk9SX09CSkVDVChzcmMsICJSZXF1ZXN0IHdhcyBibG9ja2VkIik7CiAKLSAgICBHTXV0
ZXhMb2NrZXIgbG9ja2VyKCpHU1RfT0JKRUNUX0dFVF9MT0NLKHNyYykpOworICAgIEdNdXRleExv
Y2tlcjxHTXV0ZXg+IGxvY2tlcigqR1NUX09CSkVDVF9HRVRfTE9DSyhzcmMpKTsKICAgICB1cmku
cmVzZXQoZ19zdHJkdXAoc3JjLT5wcml2LT51cmkpKTsKICAgICBsb2NrZXIudW5sb2NrKCk7CiAK
QEAgLTExNTgsNyArMTE1OCw3IEBAIHZvaWQgUmVzb3VyY2VIYW5kbGVTdHJlYW1pbmdDbGllbnQ6
OmNhbm5vdFNob3dVUkwoUmVzb3VyY2VIYW5kbGUqKQogCiAgICAgR1NUX0VSUk9SX09CSkVDVChz
cmMsICJDYW5ub3Qgc2hvdyBVUkwiKTsKIAotICAgIEdNdXRleExvY2tlciBsb2NrZXIoKkdTVF9P
QkpFQ1RfR0VUX0xPQ0soc3JjKSk7CisgICAgR011dGV4TG9ja2VyPEdNdXRleD4gbG9ja2VyKCpH
U1RfT0JKRUNUX0dFVF9MT0NLKHNyYykpOwogICAgIHVyaS5yZXNldChnX3N0cmR1cChzcmMtPnBy
aXYtPnVyaSkpOwogICAgIGxvY2tlci51bmxvY2soKTsKIApkaWZmIC0tZ2l0IGEvVG9vbHMvQ2hh
bmdlTG9nIGIvVG9vbHMvQ2hhbmdlTG9nCmluZGV4IGY2ZDYxNWMuLjkwN2NmNDMgMTAwNjQ0Ci0t
LSBhL1Rvb2xzL0NoYW5nZUxvZworKysgYi9Ub29scy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyNyBA
QAorMjAxNC0xMC0wNyAgQ2FybG9zIEdhcmNpYSBDYW1wb3MgIDxjZ2FyY2lhQGlnYWxpYS5jb20+
CisKKyAgICAgICAgW0dMSUJdIFNwbGl0IEdNYWluTG9vcFNvdXJjZSBtb3ZpbmcgdGhyZWFkIHNh
ZmUgaW1wbGVtZW50YXRpb24gdG8gaXRzIG93biBjbGFzcyBHVGhyZWFkU2FmZU1haW5Mb29wU291
cmNlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzc0
ODUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBVcGRh
dGUgR01haW5Mb29wU291cmNlIHRlc3RzLiBNb3N0IG9mIHRoZSB0ZXN0cyBhcmUgbm93IHJ1biB0
d2ljZSwKKyAgICAgICAgZmlyc3Qgd2l0aCBhIEdNYWluTG9vcFNvdXJjZSBhbmQgdGhlbiB3aXRo
IGEKKyAgICAgICAgR1RocmVhZFNhZmVNYWluTG9vcFNvdXJjZSwgc2luY2UgYm90aCBzaG91bGQg
aGF2ZSB0aGUgc2FtZQorICAgICAgICBiZWhhdmlvdXIuIFRoZSB0aHJlYWRpbmcgdGVzdCB1c2Vz
IEdUaHJlYWRTYWZlTWFpbkxvb3BTb3VyY2UgYW5kCisgICAgICAgIHRoZSBkZWxldGUgb24gZGVz
dHJveSB0ZXN0IHVzZXMgR01haW5Mb29wU291cmNlLiBUaGUgdGVzdHMKKyAgICAgICAgdGhlbXNl
bHZlcyBoYXZlbid0IGNoYW5nZWQsIHNpbmNlIHRoZXJlJ3Mgbm8gY2hhbmdlIGluIGJlaGF2aW91
ci4KKworICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL2dvYmplY3QvR01haW5Mb29w
U291cmNlLmNwcDoKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OkdNYWluTG9vcFNvdXJjZVRlc3Q6
OnNvdXJjZSk6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpiYXNpY1Jlc2NoZWR1bGluZyk6Cisg
ICAgICAgIChUZXN0V2ViS2l0QVBJOjpURVNUKToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OnJl
ZW50cmFudFJlc2NoZWR1bGluZyk6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpjYW5jZWxSZXBl
YXRpbmdTb3VyY2VEdXJpbmdEaXNwYXRjaCk6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpiYXNp
Y0Rlc3Ryb3lDYWxsYmFja3MpOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6ZGVzdHJveUNhbGxi
YWNrc0FmdGVyQ2FuY2VsbGluZ0R1cmluZ0Rpc3BhdGNoKToKKyAgICAgICAgKFRlc3RXZWJLaXRB
UEk6OmRlc3Ryb3lDYWxsYmFja3NBZnRlclJlc2NoZWR1bGluZ0R1cmluZ0Rpc3BhdGNoKToKKwog
MjAxNC0wOS0yNSAgQ2FybG9zIEdhcmNpYSBDYW1wb3MgIDxjZ2FyY2lhQGlnYWxpYS5jb20+CiAK
ICAgICAgICAgW0d0a10gYnVpbGQuc2ggbmVlZHMgYSAtLSBiZWZvcmUgbWFrZSBvcHRpb25zIHdo
ZW4gdGhlIGJ1aWxkIGNvbW1hbmQgaXMgY21ha2UgLS1idWlsZApkaWZmIC0tZ2l0IGEvVG9vbHMv
VGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvZ29iamVjdC9HTWFpbkxvb3BTb3VyY2UuY3BwIGIvVG9v
bHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvZ29iamVjdC9HTWFpbkxvb3BTb3VyY2UuY3BwCmlu
ZGV4IGQzM2Q5YjkuLmRjZGU5OGQgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVz
dHMvV1RGL2dvYmplY3QvR01haW5Mb29wU291cmNlLmNwcAorKysgYi9Ub29scy9UZXN0V2ViS2l0
QVBJL1Rlc3RzL1dURi9nb2JqZWN0L0dNYWluTG9vcFNvdXJjZS5jcHAKQEAgLTE5LDExICsxOSwx
MiBAQAogCiAjaW5jbHVkZSAiY29uZmlnLmgiCiAKLSNpbmNsdWRlIDx3dGYvZ29iamVjdC9HTWFp
bkxvb3BTb3VyY2UuaD4KKyNpbmNsdWRlIDx3dGYvZ29iamVjdC9HVGhyZWFkU2FmZU1haW5Mb29w
U291cmNlLmg+CiAjaW5jbHVkZSA8c3RkaW8uaD4KIAogbmFtZXNwYWNlIFRlc3RXZWJLaXRBUEkg
ewogCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KIGNsYXNzIEdNYWluTG9vcFNvdXJjZVRlc3Qgewog
cHVibGljOgogICAgIEdNYWluTG9vcFNvdXJjZVRlc3QoKQpAQCAtNTYsMjEgKzU3LDE2IEBAIHB1
YmxpYzoKICAgICAgICAgZ19tYWluX2xvb3BfcXVpdChtX21haW5Mb29wKTsKICAgICB9CiAKLSAg
ICBHTWFpbkxvb3BTb3VyY2UmIHNvdXJjZSgpIHsgcmV0dXJuIG1fc291cmNlOyB9CisgICAgVCYg
c291cmNlKCkgeyByZXR1cm4gbV9zb3VyY2U7IH0KIAogcHJpdmF0ZToKICAgICBHTWFpbkxvb3Aq
IG1fbWFpbkxvb3A7Ci0gICAgR01haW5Mb29wU291cmNlIG1fc291cmNlOworICAgIFQgbV9zb3Vy
Y2U7CiB9OwogCi1URVNUKFdURl9HTWFpbkxvb3BTb3VyY2UsIEJhc2ljUmVzY2hlZHVsaW5nKQor
dGVtcGxhdGUgPHR5cGVuYW1lIFQ+CitzdGF0aWMgdm9pZCBiYXNpY1Jlc2NoZWR1bGluZyhUJiBj
b250ZXh0KQogewotICAgIHN0cnVjdCBUZXN0aW5nQ29udGV4dCB7Ci0gICAgICAgIEdNYWluTG9v
cFNvdXJjZVRlc3QgdGVzdDsKLSAgICAgICAgYm9vbCBmaW5pc2hlZEZpcnN0VGFzayA9IGZhbHNl
OwotICAgICAgICBib29sIGZpbmlzaGVkU2Vjb25kVGFzayA9IGZhbHNlOwotICAgIH0gY29udGV4
dDsKLQogICAgIEVYUEVDVF9UUlVFKCFjb250ZXh0LnRlc3Quc291cmNlKCkuaXNBY3RpdmUoKSk7
CiAKICAgICBjb250ZXh0LnRlc3Quc291cmNlKCkuc2NoZWR1bGUoIltUZXN0XSBGaXJzdFRhc2si
LCBbJl0gewpAQCAtOTQsMTQgKzkwLDI2IEBAIFRFU1QoV1RGX0dNYWluTG9vcFNvdXJjZSwgQmFz
aWNSZXNjaGVkdWxpbmcpCiAgICAgRVhQRUNUX1RSVUUoY29udGV4dC5maW5pc2hlZFNlY29uZFRh
c2spOwogfQogCi1URVNUKFdURl9HTWFpbkxvb3BTb3VyY2UsIFJlZW50cmFudFJlc2NoZWR1bGlu
ZykKK1RFU1QoV1RGX0dNYWluTG9vcFNvdXJjZSwgQmFzaWNSZXNjaGVkdWxpbmcpCiB7CiAgICAg
c3RydWN0IFRlc3RpbmdDb250ZXh0IHsKLSAgICAgICAgR01haW5Mb29wU291cmNlVGVzdCB0ZXN0
OworICAgICAgICBHTWFpbkxvb3BTb3VyY2VUZXN0PEdNYWluTG9vcFNvdXJjZT4gdGVzdDsKICAg
ICAgICAgYm9vbCBmaW5pc2hlZEZpcnN0VGFzayA9IGZhbHNlOwogICAgICAgICBib29sIGZpbmlz
aGVkU2Vjb25kVGFzayA9IGZhbHNlOwogICAgIH0gY29udGV4dDsKKyAgICBiYXNpY1Jlc2NoZWR1
bGluZzxUZXN0aW5nQ29udGV4dD4oY29udGV4dCk7CisKKyAgICBzdHJ1Y3QgVGhyZWFkU2FmZVRl
c3RpbmdDb250ZXh0IHsKKyAgICAgICAgR01haW5Mb29wU291cmNlVGVzdDxHVGhyZWFkU2FmZU1h
aW5Mb29wU291cmNlPiB0ZXN0OworICAgICAgICBib29sIGZpbmlzaGVkRmlyc3RUYXNrID0gZmFs
c2U7CisgICAgICAgIGJvb2wgZmluaXNoZWRTZWNvbmRUYXNrID0gZmFsc2U7CisgICAgfSB0aHJl
YWRTYWZlQ29udGV4dDsKKyAgICBiYXNpY1Jlc2NoZWR1bGluZzxUaHJlYWRTYWZlVGVzdGluZ0Nv
bnRleHQ+KHRocmVhZFNhZmVDb250ZXh0KTsKK30KIAordGVtcGxhdGUgPHR5cGVuYW1lIFQ+Citz
dGF0aWMgdm9pZCByZWVudHJhbnRSZXNjaGVkdWxpbmcoVCYgY29udGV4dCkKK3sKICAgICBFWFBF
Q1RfVFJVRSghY29udGV4dC50ZXN0LnNvdXJjZSgpLmlzQWN0aXZlKCkpOwogCiAgICAgY29udGV4
dC50ZXN0LnNvdXJjZSgpLnNjaGVkdWxlKCJbVGVzdF0gRmlyc3RUYXNrIiwgWyZdIHsKQEAgLTEy
NywxMCArMTM1LDI3IEBAIFRFU1QoV1RGX0dNYWluTG9vcFNvdXJjZSwgUmVlbnRyYW50UmVzY2hl
ZHVsaW5nKQogICAgIEVYUEVDVF9UUlVFKGNvbnRleHQuZmluaXNoZWRTZWNvbmRUYXNrKTsKIH0K
IAorVEVTVChXVEZfR01haW5Mb29wU291cmNlLCBSZWVudHJhbnRSZXNjaGVkdWxpbmcpCit7Cisg
ICAgc3RydWN0IFRlc3RpbmdDb250ZXh0IHsKKyAgICAgICAgR01haW5Mb29wU291cmNlVGVzdDxH
TWFpbkxvb3BTb3VyY2U+IHRlc3Q7CisgICAgICAgIGJvb2wgZmluaXNoZWRGaXJzdFRhc2sgPSBm
YWxzZTsKKyAgICAgICAgYm9vbCBmaW5pc2hlZFNlY29uZFRhc2sgPSBmYWxzZTsKKyAgICB9IGNv
bnRleHQ7CisgICAgcmVlbnRyYW50UmVzY2hlZHVsaW5nPFRlc3RpbmdDb250ZXh0Pihjb250ZXh0
KTsKKworICAgIHN0cnVjdCBUaHJlYWRTYWZlVGVzdGluZ0NvbnRleHQgeworICAgICAgICBHTWFp
bkxvb3BTb3VyY2VUZXN0PEdUaHJlYWRTYWZlTWFpbkxvb3BTb3VyY2U+IHRlc3Q7CisgICAgICAg
IGJvb2wgZmluaXNoZWRGaXJzdFRhc2sgPSBmYWxzZTsKKyAgICAgICAgYm9vbCBmaW5pc2hlZFNl
Y29uZFRhc2sgPSBmYWxzZTsKKyAgICB9IHRocmVhZFNhZmVDb250ZXh0OworICAgIHJlZW50cmFu
dFJlc2NoZWR1bGluZzxUaHJlYWRTYWZlVGVzdGluZ0NvbnRleHQ+KHRocmVhZFNhZmVDb250ZXh0
KTsKK30KKwogVEVTVChXVEZfR01haW5Mb29wU291cmNlLCBSZXNjaGVkdWxpbmdGcm9tRGlmZmVy
ZW50VGhyZWFkKQogewogICAgIHN0cnVjdCBUZXN0aW5nQ29udGV4dCB7Ci0gICAgICAgIEdNYWlu
TG9vcFNvdXJjZVRlc3QgdGVzdDsKKyAgICAgICAgR01haW5Mb29wU291cmNlVGVzdDxHVGhyZWFk
U2FmZU1haW5Mb29wU291cmNlPiB0ZXN0OwogICAgICAgICBib29sIGZpbmlzaGVkRmlyc3RUYXNr
OwogICAgICAgICBib29sIGZpbmlzaGVkU2Vjb25kVGFzazsKICAgICB9IGNvbnRleHQ7CkBAIC0x
OTgsMTMgKzIyMyw5IEBAIFRFU1QoV1RGX0dNYWluTG9vcFNvdXJjZSwgRGVzdHJ1Y3Rpb25EdXJp
bmdEaXNwYXRjaCkKICAgICBnX21haW5fbG9vcF91bnJlZihsb29wKTsKIH0KIAotVEVTVChXVEZf
R01haW5Mb29wU291cmNlLCBDYW5jZWxSZXBlYXRpbmdTb3VyY2VEdXJpbmdEaXNwYXRjaCkKK3Rl
bXBsYXRlIDx0eXBlbmFtZSBUPgorc3RhdGljIHZvaWQgY2FuY2VsUmVwZWF0aW5nU291cmNlRHVy
aW5nRGlzcGF0Y2goVCYgY29udGV4dCkKIHsKLSAgICBzdHJ1Y3QgVGVzdGluZ0NvbnRleHQgewot
ICAgICAgICBHTWFpbkxvb3BTb3VyY2VUZXN0IHRlc3Q7Ci0gICAgICAgIHVuc2lnbmVkIGNhbGxD
b3VudCA9IDA7Ci0gICAgfSBjb250ZXh0OwotCiAgICAgRVhQRUNUX1RSVUUoIWNvbnRleHQudGVz
dC5zb3VyY2UoKS5pc0FjdGl2ZSgpKTsKIAogICAgIGNvbnRleHQudGVzdC5zb3VyY2UoKS5zY2hl
ZHVsZSgiW1Rlc3RdIFJlcGVhdGluZ1Rhc2siLApAQCAtMjI1LDE2ICsyNDYsMjYgQEAgVEVTVChX
VEZfR01haW5Mb29wU291cmNlLCBDYW5jZWxSZXBlYXRpbmdTb3VyY2VEdXJpbmdEaXNwYXRjaCkK
ICAgICBFWFBFQ1RfRVEoMywgY29udGV4dC5jYWxsQ291bnQpOwogfQogCi1URVNUKFdURl9HTWFp
bkxvb3BTb3VyY2UsIEJhc2ljRGVzdHJveUNhbGxiYWNrcykKK1RFU1QoV1RGX0dNYWluTG9vcFNv
dXJjZSwgQ2FuY2VsUmVwZWF0aW5nU291cmNlRHVyaW5nRGlzcGF0Y2gpCiB7CiAgICAgc3RydWN0
IFRlc3RpbmdDb250ZXh0IHsKLSAgICAgICAgR01haW5Mb29wU291cmNlVGVzdCB0ZXN0OwotICAg
ICAgICBib29sIGNhbGxiYWNrQ2FsbGVkID0gZmFsc2U7Ci0gICAgICAgIGJvb2wgZGVzdHJveUNh
bGxiYWNrQ2FsbGVkID0gZmFsc2U7Ci0gICAgfTsKKyAgICAgICAgR01haW5Mb29wU291cmNlVGVz
dDxHTWFpbkxvb3BTb3VyY2U+IHRlc3Q7CisgICAgICAgIHVuc2lnbmVkIGNhbGxDb3VudCA9IDA7
CisgICAgfSBjb250ZXh0OworICAgIGNhbmNlbFJlcGVhdGluZ1NvdXJjZUR1cmluZ0Rpc3BhdGNo
PFRlc3RpbmdDb250ZXh0Pihjb250ZXh0KTsKKworICAgIHN0cnVjdCBUaHJlYWRTYWZlVGVzdGlu
Z0NvbnRleHQgeworICAgICAgICBHTWFpbkxvb3BTb3VyY2VUZXN0PEdUaHJlYWRTYWZlTWFpbkxv
b3BTb3VyY2U+IHRlc3Q7CisgICAgICAgIHVuc2lnbmVkIGNhbGxDb3VudCA9IDA7CisgICAgfSB0
aHJlYWRTYWZlQ29udGV4dDsKKyAgICBjYW5jZWxSZXBlYXRpbmdTb3VyY2VEdXJpbmdEaXNwYXRj
aDxUaHJlYWRTYWZlVGVzdGluZ0NvbnRleHQ+KHRocmVhZFNhZmVDb250ZXh0KTsKK30KIAordGVt
cGxhdGUgPHR5cGVuYW1lIFQ+CitzdGF0aWMgdm9pZCBiYXNpY0Rlc3Ryb3lDYWxsYmFja3MoKQor
ewogICAgIHsKLSAgICAgICAgVGVzdGluZ0NvbnRleHQgY29udGV4dDsKKyAgICAgICAgVCBjb250
ZXh0OwogICAgICAgICBFWFBFQ1RfVFJVRSghY29udGV4dC50ZXN0LnNvdXJjZSgpLmlzQWN0aXZl
KCkpOwogICAgICAgICBjb250ZXh0LnRlc3Quc291cmNlKCkuc2NoZWR1bGUoIltUZXN0XSBEZXN0
cm95Q2FsbGJhY2siLAogICAgICAgICAgICAgWyZdIHsKQEAgLTI1Niw3ICsyODcsNyBAQCBURVNU
KFdURl9HTWFpbkxvb3BTb3VyY2UsIEJhc2ljRGVzdHJveUNhbGxiYWNrcykKICAgICB9CiAKICAg
ICB7Ci0gICAgICAgIFRlc3RpbmdDb250ZXh0IGNvbnRleHQ7CisgICAgICAgIFQgY29udGV4dDsK
ICAgICAgICAgRVhQRUNUX1RSVUUoIWNvbnRleHQudGVzdC5zb3VyY2UoKS5pc0FjdGl2ZSgpKTsK
ICAgICAgICAgY29udGV4dC50ZXN0LnNvdXJjZSgpLnNjaGVkdWxlKCJbVGVzdF0gRGVzdHJveUNh
bGxiYWNrIiwKICAgICAgICAgICAgIHN0ZDo6ZnVuY3Rpb248Ym9vbCAoKT4oWyZdIHsKQEAgLTI3
OSwxNiArMzEwLDI4IEBAIFRFU1QoV1RGX0dNYWluTG9vcFNvdXJjZSwgQmFzaWNEZXN0cm95Q2Fs
bGJhY2tzKQogICAgIH0KIH0KIAotVEVTVChXVEZfR01haW5Mb29wU291cmNlLCBEZXN0cm95Q2Fs
bGJhY2tzQWZ0ZXJDYW5jZWxsaW5nRHVyaW5nRGlzcGF0Y2gpCitURVNUKFdURl9HTWFpbkxvb3BT
b3VyY2UsIEJhc2ljRGVzdHJveUNhbGxiYWNrcykKIHsKICAgICBzdHJ1Y3QgVGVzdGluZ0NvbnRl
eHQgewotICAgICAgICBHTWFpbkxvb3BTb3VyY2VUZXN0IHRlc3Q7Ci0gICAgICAgIHVuc2lnbmVk
IGNhbGxiYWNrQ2FsbENvdW50PSAwOworICAgICAgICBHTWFpbkxvb3BTb3VyY2VUZXN0PEdNYWlu
TG9vcFNvdXJjZT4gdGVzdDsKKyAgICAgICAgYm9vbCBjYWxsYmFja0NhbGxlZCA9IGZhbHNlOwog
ICAgICAgICBib29sIGRlc3Ryb3lDYWxsYmFja0NhbGxlZCA9IGZhbHNlOwogICAgIH07CisgICAg
YmFzaWNEZXN0cm95Q2FsbGJhY2tzPFRlc3RpbmdDb250ZXh0PigpOwogCisgICAgc3RydWN0IFRo
cmVhZFNhZmVUZXN0aW5nQ29udGV4dCB7CisgICAgICAgIEdNYWluTG9vcFNvdXJjZVRlc3Q8R1Ro
cmVhZFNhZmVNYWluTG9vcFNvdXJjZT4gdGVzdDsKKyAgICAgICAgYm9vbCBjYWxsYmFja0NhbGxl
ZCA9IGZhbHNlOworICAgICAgICBib29sIGRlc3Ryb3lDYWxsYmFja0NhbGxlZCA9IGZhbHNlOwor
ICAgIH07CisgICAgYmFzaWNEZXN0cm95Q2FsbGJhY2tzPFRocmVhZFNhZmVUZXN0aW5nQ29udGV4
dD4oKTsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIFQ+CitzdGF0aWMgdm9pZCBkZXN0cm95Q2Fs
bGJhY2tzQWZ0ZXJDYW5jZWxsaW5nRHVyaW5nRGlzcGF0Y2goKQorewogICAgIHsKLSAgICAgICAg
VGVzdGluZ0NvbnRleHQgY29udGV4dDsKKyAgICAgICAgVCBjb250ZXh0OwogICAgICAgICBFWFBF
Q1RfVFJVRSghY29udGV4dC50ZXN0LnNvdXJjZSgpLmlzQWN0aXZlKCkpOwogICAgICAgICBjb250
ZXh0LnRlc3Quc291cmNlKCkuc2NoZWR1bGUoIltUZXN0XSBEZXN0cm95Q2FsbGJhY2siLAogICAg
ICAgICAgICAgWyZdIHsKQEAgLTMxMiw3ICszNTUsNyBAQCBURVNUKFdURl9HTWFpbkxvb3BTb3Vy
Y2UsIERlc3Ryb3lDYWxsYmFja3NBZnRlckNhbmNlbGxpbmdEdXJpbmdEaXNwYXRjaCkKICAgICB9
CiAKICAgICB7Ci0gICAgICAgIFRlc3RpbmdDb250ZXh0IGNvbnRleHQ7CisgICAgICAgIFQgY29u
dGV4dDsKICAgICAgICAgRVhQRUNUX1RSVUUoIWNvbnRleHQudGVzdC5zb3VyY2UoKS5pc0FjdGl2
ZSgpKTsKICAgICAgICAgY29udGV4dC50ZXN0LnNvdXJjZSgpLnNjaGVkdWxlKCJbVGVzdF0gRGVz
dHJveUNhbGxiYWNrIiwKICAgICAgICAgICAgIHN0ZDo6ZnVuY3Rpb248Ym9vbCAoKT4oWyZdIHsK
QEAgLTMzNywxOCArMzgwLDI4IEBAIFRFU1QoV1RGX0dNYWluTG9vcFNvdXJjZSwgRGVzdHJveUNh
bGxiYWNrc0FmdGVyQ2FuY2VsbGluZ0R1cmluZ0Rpc3BhdGNoKQogICAgIH0KIH0KIAotVEVTVChX
VEZfR01haW5Mb29wU291cmNlLCBEZXN0cm95Q2FsbGJhY2tzQWZ0ZXJSZXNjaGVkdWxpbmdEdXJp
bmdEaXNwYXRjaCkKK1RFU1QoV1RGX0dNYWluTG9vcFNvdXJjZSwgRGVzdHJveUNhbGxiYWNrc0Fm
dGVyQ2FuY2VsbGluZ0R1cmluZ0Rpc3BhdGNoKQogewogICAgIHN0cnVjdCBUZXN0aW5nQ29udGV4
dCB7Ci0gICAgICAgIEdNYWluTG9vcFNvdXJjZVRlc3QgdGVzdDsKLSAgICAgICAgdW5zaWduZWQg
Zmlyc3RDYWxsYmFja0NhbGxDb3VudCA9IDA7Ci0gICAgICAgIGJvb2wgZmlyc3REZXN0cm95Q2Fs
bGJhY2tDYWxsZWQgPSBmYWxzZTsKLSAgICAgICAgdW5zaWduZWQgc2Vjb25kQ2FsbGJhY2tDYWxs
Q291bnQgPSAwOwotICAgICAgICBib29sIHNlY29uZERlc3Ryb3lDYWxsYmFja0NhbGxlZCA9IGZh
bHNlOworICAgICAgICBHTWFpbkxvb3BTb3VyY2VUZXN0PEdNYWluTG9vcFNvdXJjZT4gdGVzdDsK
KyAgICAgICAgdW5zaWduZWQgY2FsbGJhY2tDYWxsQ291bnQ9IDA7CisgICAgICAgIGJvb2wgZGVz
dHJveUNhbGxiYWNrQ2FsbGVkID0gZmFsc2U7CiAgICAgfTsKKyAgICBkZXN0cm95Q2FsbGJhY2tz
QWZ0ZXJDYW5jZWxsaW5nRHVyaW5nRGlzcGF0Y2g8VGVzdGluZ0NvbnRleHQ+KCk7CiAKKyAgICBz
dHJ1Y3QgVGhyZWFkU2FmZVRlc3RpbmdDb250ZXh0IHsKKyAgICAgICAgR01haW5Mb29wU291cmNl
VGVzdDxHVGhyZWFkU2FmZU1haW5Mb29wU291cmNlPiB0ZXN0OworICAgICAgICB1bnNpZ25lZCBj
YWxsYmFja0NhbGxDb3VudD0gMDsKKyAgICAgICAgYm9vbCBkZXN0cm95Q2FsbGJhY2tDYWxsZWQg
PSBmYWxzZTsKKyAgICB9OworICAgIGRlc3Ryb3lDYWxsYmFja3NBZnRlckNhbmNlbGxpbmdEdXJp
bmdEaXNwYXRjaDxUaHJlYWRTYWZlVGVzdGluZ0NvbnRleHQ+KCk7Cit9CisKK3RlbXBsYXRlIDx0
eXBlbmFtZSBUPgorc3RhdGljIHZvaWQgZGVzdHJveUNhbGxiYWNrc0FmdGVyUmVzY2hlZHVsaW5n
RHVyaW5nRGlzcGF0Y2goKQorewogICAgIHsKLSAgICAgICAgVGVzdGluZ0NvbnRleHQgY29udGV4
dDsKKyAgICAgICAgVCBjb250ZXh0OwogICAgICAgICBFWFBFQ1RfVFJVRSghY29udGV4dC50ZXN0
LnNvdXJjZSgpLmlzQWN0aXZlKCkpOwogICAgICAgICBjb250ZXh0LnRlc3Quc291cmNlKCkuc2No
ZWR1bGUoIltUZXN0XSBCYXNlQ2FsbGJhY2siLAogICAgICAgICAgICAgWyZdIHsKQEAgLTM4Myw3
ICs0MzYsNyBAQCBURVNUKFdURl9HTWFpbkxvb3BTb3VyY2UsIERlc3Ryb3lDYWxsYmFja3NBZnRl
clJlc2NoZWR1bGluZ0R1cmluZ0Rpc3BhdGNoKQogICAgIH0KIAogICAgIHsKLSAgICAgICAgVGVz
dGluZ0NvbnRleHQgY29udGV4dDsKKyAgICAgICAgVCBjb250ZXh0OwogICAgICAgICBFWFBFQ1Rf
VFJVRSghY29udGV4dC50ZXN0LnNvdXJjZSgpLmlzQWN0aXZlKCkpOwogICAgICAgICBjb250ZXh0
LnRlc3Quc291cmNlKCkuc2NoZWR1bGUoIltUZXN0XSBCYXNlQ2FsbGJhY2siLAogICAgICAgICAg
ICAgc3RkOjpmdW5jdGlvbjxib29sICgpPihbJl0gewpAQCAtNDIwLDYgKzQ3MywyNyBAQCBURVNU
KFdURl9HTWFpbkxvb3BTb3VyY2UsIERlc3Ryb3lDYWxsYmFja3NBZnRlclJlc2NoZWR1bGluZ0R1
cmluZ0Rpc3BhdGNoKQogICAgIH0KIH0KIAorVEVTVChXVEZfR01haW5Mb29wU291cmNlLCBEZXN0
cm95Q2FsbGJhY2tzQWZ0ZXJSZXNjaGVkdWxpbmdEdXJpbmdEaXNwYXRjaCkKK3sKKyAgICBzdHJ1
Y3QgVGVzdGluZ0NvbnRleHQgeworICAgICAgICBHTWFpbkxvb3BTb3VyY2VUZXN0PEdNYWluTG9v
cFNvdXJjZT4gdGVzdDsKKyAgICAgICAgdW5zaWduZWQgZmlyc3RDYWxsYmFja0NhbGxDb3VudCA9
IDA7CisgICAgICAgIGJvb2wgZmlyc3REZXN0cm95Q2FsbGJhY2tDYWxsZWQgPSBmYWxzZTsKKyAg
ICAgICAgdW5zaWduZWQgc2Vjb25kQ2FsbGJhY2tDYWxsQ291bnQgPSAwOworICAgICAgICBib29s
IHNlY29uZERlc3Ryb3lDYWxsYmFja0NhbGxlZCA9IGZhbHNlOworICAgIH07CisgICAgZGVzdHJv
eUNhbGxiYWNrc0FmdGVyUmVzY2hlZHVsaW5nRHVyaW5nRGlzcGF0Y2g8VGVzdGluZ0NvbnRleHQ+
KCk7CisKKyAgICBzdHJ1Y3QgVGhyZWFkU2FmZVRlc3RpbmdDb250ZXh0IHsKKyAgICAgICAgR01h
aW5Mb29wU291cmNlVGVzdDxHVGhyZWFkU2FmZU1haW5Mb29wU291cmNlPiB0ZXN0OworICAgICAg
ICB1bnNpZ25lZCBmaXJzdENhbGxiYWNrQ2FsbENvdW50ID0gMDsKKyAgICAgICAgYm9vbCBmaXJz
dERlc3Ryb3lDYWxsYmFja0NhbGxlZCA9IGZhbHNlOworICAgICAgICB1bnNpZ25lZCBzZWNvbmRD
YWxsYmFja0NhbGxDb3VudCA9IDA7CisgICAgICAgIGJvb2wgc2Vjb25kRGVzdHJveUNhbGxiYWNr
Q2FsbGVkID0gZmFsc2U7CisgICAgfTsKKyAgICBkZXN0cm95Q2FsbGJhY2tzQWZ0ZXJSZXNjaGVk
dWxpbmdEdXJpbmdEaXNwYXRjaDxUaHJlYWRTYWZlVGVzdGluZ0NvbnRleHQ+KCk7Cit9CisKIFRF
U1QoV1RGX0dNYWluTG9vcFNvdXJjZSwgRGVsZXRlT25EZXN0cm95U291cmNlcykKIHsKICAgICAv
LyBUZXN0aW5nIHRoZSBkZWxldGUtb24tZGVzdHJveSBzb3VyY2VzIGlzIHZlcnkgbGltaXRlZC4g
VGhlcmUncyBubyBnb29kIHdheQpAQCAtNDI3LDcgKzUwMSw3IEBAIFRFU1QoV1RGX0dNYWluTG9v
cFNvdXJjZSwgRGVsZXRlT25EZXN0cm95U291cmNlcykKICAgICAvLyBpcyBkZXN0cm95ZWQuCiAK
ICAgICBzdHJ1Y3QgVGVzdGluZ0NvbnRleHQgewotICAgICAgICBHTWFpbkxvb3BTb3VyY2VUZXN0
IHRlc3Q7CisgICAgICAgIEdNYWluTG9vcFNvdXJjZVRlc3Q8R01haW5Mb29wU291cmNlPiB0ZXN0
OwogICAgICAgICB1bnNpZ25lZCBjYWxsYmFja0NhbGxDb3VudCA9IDA7CiAgICAgICAgIGJvb2wg
ZGVzdHJveUNhbGxiYWNrQ2FsbGVkID0gZmFsc2U7CiAgICAgfSBjb250ZXh0Owo=
</data>
<flag name="review"
          id="264133"
          type_id="1"
          status="+"
          setter="svillar"
    />
    <flag name="commit-queue"
          id="264342"
          type_id="3"
          status="-"
          setter="svillar"
    />
          </attachment>
      

    </bug>

</bugzilla>