<?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>73609</bug_id>
          
          <creation_ts>2011-12-01 17:58:16 -0800</creation_ts>
          <short_desc>Grant workers experimental access to IndexedDB.</short_desc>
          <delta_ts>2012-01-05 14:02:34 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="David Grogan">dgrogan</reporter>
          <assigned_to name="David Grogan">dgrogan</assigned_to>
          <cc>abarth</cc>
    
    <cc>dglazkov</cc>
    
    <cc>hans</cc>
    
    <cc>japhet</cc>
    
    <cc>jsbell</cc>
    
    <cc>levin</cc>
    
    <cc>levin+threading</cc>
    
    <cc>michaeln</cc>
    
    <cc>ojan</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>513355</commentid>
    <comment_count>0</comment_count>
    <who name="David Grogan">dgrogan</who>
    <bug_when>2011-12-01 17:58:16 -0800</bug_when>
    <thetext>Allow workers to access IndexedDB.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>513360</commentid>
    <comment_count>1</comment_count>
      <attachid>117537</attachid>
    <who name="David Grogan">dgrogan</who>
    <bug_when>2011-12-01 18:00:54 -0800</bug_when>
    <thetext>Created attachment 117537
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>513394</commentid>
    <comment_count>2</comment_count>
      <attachid>117542</attachid>
    <who name="David Grogan">dgrogan</who>
    <bug_when>2011-12-01 19:08:19 -0800</bug_when>
    <thetext>Created attachment 117542
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>513396</commentid>
    <comment_count>3</comment_count>
    <who name="David Grogan">dgrogan</who>
    <bug_when>2011-12-01 19:13:14 -0800</bug_when>
    <thetext>Michael/Hans/Josh, any feedback is appreciated.  The chromium side, which has to go in first, is at http://codereview.chromium.org/8747002/.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>513397</commentid>
    <comment_count>4</comment_count>
      <attachid>117542</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2011-12-01 19:15:01 -0800</bug_when>
    <thetext>Comment on attachment 117542
Patch

Attachment 117542 did not pass qt-ews (qt):
Output: http://queues.webkit.org/results/10704869</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>513399</commentid>
    <comment_count>5</comment_count>
      <attachid>117544</attachid>
    <who name="David Grogan">dgrogan</who>
    <bug_when>2011-12-01 19:21:34 -0800</bug_when>
    <thetext>Created attachment 117544
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>513412</commentid>
    <comment_count>6</comment_count>
      <attachid>117544</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-12-01 19:42:38 -0800</bug_when>
    <thetext>Comment on attachment 117544
Patch

Attachment 117544 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/10693861</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>513436</commentid>
    <comment_count>7</comment_count>
      <attachid>117553</attachid>
    <who name="David Grogan">dgrogan</who>
    <bug_when>2011-12-01 20:29:10 -0800</bug_when>
    <thetext>Created attachment 117553
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>513461</commentid>
    <comment_count>8</comment_count>
      <attachid>117553</attachid>
    <who name="David Levin">levin</who>
    <bug_when>2011-12-01 21:16:51 -0800</bug_when>
    <thetext>Comment on attachment 117553
Patch

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

A few questions...

&gt; Source/WebKit/chromium/ChangeLog:3
&gt; +        Grant workers experimental access to IndexedDB.

What do you mean experimental access?

&gt; Source/WebCore/storage/IDBFactory.cpp:101
&gt; +    m_backend-&gt;openFromWorker(name, request, context-&gt;securityOrigin(), static_cast&lt;WorkerContext*&gt;(context), String());

Why have two methods open/openFromWorker when they have the same impl?


Get rid of that and a lot of this code collapses.

&gt; Source/WebCore/storage/IDBFactoryBackendImpl.cpp:106
&gt; +void IDBFactoryBackendImpl::openFromWorker(const String&amp; name, PassRefPtr&lt;IDBCallbacks&gt; callbacks, PassRefPtr&lt;SecurityOrigin&gt; securityOrigin, WorkerContext*, const String&amp; dataDir)

please avoid abbreviations: &quot;dataDir&quot;

&gt; Source/WebCore/storage/IDBFactoryBackendImpl.cpp:158
&gt; +{

Why is &quot;callbacks&quot; a PassRefPtr when nothing takes ownership of it in here?

&gt; Source/WebCore/storage/IDBFactoryBackendImpl.cpp:159
&gt; +    const String uniqueIdentifier = computeUniqueIdentifier(name, securityOrigin.get());

securityOrigin should be put in a local RefPtr since you are doing more than just passing it directly to another function call.

&gt; Source/WebCore/storage/IDBFactoryBackendImpl.cpp:178
&gt; +    m_databaseBackendMap.set(uniqueIdentifier, databaseBackend.get());

How does the lifetime of databaseBackend work?

It looks like it goes out of scope and nothing has a ref count on it.

Yes, I know this is the code that existed before :).

&gt; Source/WebCore/workers/WorkerContext.cpp:532
&gt; +        m_idbFactoryBackendInterface = IDBFactoryBackendInterface::create().get();

You shouldn&apos;t need to do &quot;get&quot; here.

&gt; Source/WebKit/chromium/src/IDBFactoryBackendProxy.cpp:110
&gt; +    void signalCompleted(bool result)

Why isn&apos;t &quot;result&quot; used?

&gt; Source/WebKit/chromium/src/IDBFactoryBackendProxy.cpp:115
&gt; +                createCallbackTask(&amp;didComplete, AllowCrossThreadAccess(this), result), m_mode);

AllowCrossThreadAccess is a really really bad sign.

Since &quot;this&quot; is a ThreadSafeRefCounted object, you shouldn&apos;t need to use it.

&gt; Source/WebKit/chromium/src/IDBFactoryBackendProxy.cpp:121
&gt; +        , m_mode(mode)

why isn&apos;t m_result initialized?

&gt; Source/WebKit/chromium/src/IDBFactoryBackendProxy.cpp:125
&gt; +                               AllowCrossThreadAccess(frame),

Everytime you put in AllowCrossThreadAccess, you need to be able to answer the question: How does this stay alive until it is used in the callback?

Please answer for commonClient and frame.  Also remove it for &quot;this&quot;.

&gt; Source/WebKit/chromium/src/IDBFactoryBackendProxy.cpp:149
&gt; +    WebCore::WorkerLoaderProxy* m_workerLoaderProxy;

WebCore:: shouldn&apos;t be needed anywhere due to the using statement above.

&gt; Source/WebKit/chromium/src/IDBFactoryBackendProxy.cpp:150
&gt; +    WTF::String m_mode;

WTF shouldn&apos;t be needed iirc.

Even more critical, putting a String (a RefCounted object) in a ThreadSafeRefCounted object is a no-no. Please find another way to accomplish your goal.

&gt; Source/WebKit/chromium/src/IDBFactoryBackendProxy.cpp:155
&gt; +    WorkerContext* workerContext = static_cast&lt;WorkerContext*&gt;(context);

Assert that the context is a worker first. (I feel like we should have a function that does this cast and assert but I guess we don&apos;t)

&gt; Source/WebKit/chromium/src/IDBFactoryBackendProxy.cpp:158
&gt; +    WorkerLoaderProxy* workerLoaderProxy = &amp;workerContext-&gt;thread()-&gt;workerLoaderProxy();

Why the loader proxy? (This looks odd to me.)

&gt; Source/WebKit/chromium/src/IDBFactoryBackendProxy.cpp:169
&gt; +    if (runLoop.runInMode(workerContext, mode) == MessageQueueTerminated) {

There is only a single task posted to this mode?

&gt; Source/WebKit/chromium/src/IDBFactoryBackendProxy.cpp:187
&gt; +    m_webIDBFactory-&gt;open(name, new WebIDBCallbacksImpl(callbacks), origin, webFrame, dataDir);

A raw new is a bad sign. Who owns this? Why doesn&apos;t it have an adoptPtr around it?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>513639</commentid>
    <comment_count>9</comment_count>
      <attachid>117596</attachid>
    <who name="David Grogan">dgrogan</who>
    <bug_when>2011-12-02 03:03:19 -0800</bug_when>
    <thetext>Created attachment 117596
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>513647</commentid>
    <comment_count>10</comment_count>
      <attachid>117553</attachid>
    <who name="David Grogan">dgrogan</who>
    <bug_when>2011-12-02 03:22:17 -0800</bug_when>
    <thetext>Comment on attachment 117553
Patch

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

&gt;&gt; Source/WebKit/chromium/ChangeLog:3
&gt;&gt; +        Grant workers experimental access to IndexedDB.
&gt; 
&gt; What do you mean experimental access?

That it has rough edges, it&apos;s most likely buggy, etc.  Even with these caveats there is demand for it.  In m17 :/

&gt;&gt; Source/WebCore/storage/IDBFactory.cpp:101
&gt;&gt; +    m_backend-&gt;openFromWorker(name, request, context-&gt;securityOrigin(), static_cast&lt;WorkerContext*&gt;(context), String());
&gt; 
&gt; Why have two methods open/openFromWorker when they have the same impl?
&gt; 
&gt; 
&gt; Get rid of that and a lot of this code collapses.

They have the same impl in the browser process, IDBFactoryBackendImpl, but not in IDBFactoryBackendProxy, the renderer side.

&gt;&gt; Source/WebCore/storage/IDBFactoryBackendImpl.cpp:106
&gt;&gt; +void IDBFactoryBackendImpl::openFromWorker(const String&amp; name, PassRefPtr&lt;IDBCallbacks&gt; callbacks, PassRefPtr&lt;SecurityOrigin&gt; securityOrigin, WorkerContext*, const String&amp; dataDir)
&gt; 
&gt; please avoid abbreviations: &quot;dataDir&quot;

Fixed.

&gt;&gt; Source/WebCore/storage/IDBFactoryBackendImpl.cpp:158
&gt;&gt; +{
&gt; 
&gt; Why is &quot;callbacks&quot; a PassRefPtr when nothing takes ownership of it in here?

I don&apos;t know why it was originally.  Changed to raw.

&gt;&gt; Source/WebCore/storage/IDBFactoryBackendImpl.cpp:159
&gt;&gt; +    const String uniqueIdentifier = computeUniqueIdentifier(name, securityOrigin.get());
&gt; 
&gt; securityOrigin should be put in a local RefPtr since you are doing more than just passing it directly to another function call.

Done.

&gt;&gt; Source/WebCore/storage/IDBFactoryBackendImpl.cpp:178
&gt;&gt; +    m_databaseBackendMap.set(uniqueIdentifier, databaseBackend.get());
&gt; 
&gt; How does the lifetime of databaseBackend work?
&gt; 
&gt; It looks like it goes out of scope and nothing has a ref count on it.
&gt; 
&gt; Yes, I know this is the code that existed before :).

The onSuccess call in the line above this one constructs a PassRefPtr.  When I try to change
callbacks-&gt;onSuccess(databaseBackend.get());
to
callbacks-&gt;onSuccess(databaseBackend.release());
I get an ambiguity compiler error.  It seems that the workarounds are just as unclear as this original code.

RefPtr&lt;IDBDatabaseBackendImpl&gt; objects live inside WebIDBDatabaseImpl objects, which are stored in an IDMap in chromium, here:
http://codesearch.google.com/codesearch#OAMlx_jo-ck/src/content/browser/in_process_webkit/indexed_db_dispatcher_host.h&amp;type=cs&amp;l=134

&gt;&gt; Source/WebCore/workers/WorkerContext.cpp:532
&gt;&gt; +        m_idbFactoryBackendInterface = IDBFactoryBackendInterface::create().get();
&gt; 
&gt; You shouldn&apos;t need to do &quot;get&quot; here.

Removed.

&gt;&gt; Source/WebKit/chromium/src/IDBFactoryBackendProxy.cpp:110
&gt;&gt; +    void signalCompleted(bool result)
&gt; 
&gt; Why isn&apos;t &quot;result&quot; used?

It&apos;s passed to createCallbackTask below, which passes it on to didComplete.

&gt;&gt; Source/WebKit/chromium/src/IDBFactoryBackendProxy.cpp:115
&gt;&gt; +                createCallbackTask(&amp;didComplete, AllowCrossThreadAccess(this), result), m_mode);
&gt; 
&gt; AllowCrossThreadAccess is a really really bad sign.
&gt; 
&gt; Since &quot;this&quot; is a ThreadSafeRefCounted object, you shouldn&apos;t need to use it.

Removed AllowCrossThreadAccess from this.

&gt;&gt; Source/WebKit/chromium/src/IDBFactoryBackendProxy.cpp:121
&gt;&gt; +        , m_mode(mode)
&gt; 
&gt; why isn&apos;t m_result initialized?

It&apos;s only read after it&apos;s set.  I&apos;ll add it though.

&gt;&gt; Source/WebKit/chromium/src/IDBFactoryBackendProxy.cpp:125
&gt;&gt; +                               AllowCrossThreadAccess(frame),
&gt; 
&gt; Everytime you put in AllowCrossThreadAccess, you need to be able to answer the question: How does this stay alive until it is used in the callback?
&gt; 
&gt; Please answer for commonClient and frame.  Also remove it for &quot;this&quot;.

The commonClient check was moved back to the worker thread, so it is no longer needed.

As for frame, I see what you mean, there&apos;s no guarantee the pointer hasn&apos;t become invalid.  I&apos;ll look for some indicator other than the worker&apos;s runloop terminating to listen for.  It looks like the corresponding code for WebSQLDatabase passes frame over to the main thread with AllowCrossThreadAccess.  Though I&apos;m not sure if that indicates that this is safe or if it&apos;s just also unsafe.

I also considered stashing whether IDB is allowed when a worker is created but didn&apos;t see anywhere very obvious to do so.

&gt;&gt; Source/WebKit/chromium/src/IDBFactoryBackendProxy.cpp:149
&gt;&gt; +    WebCore::WorkerLoaderProxy* m_workerLoaderProxy;
&gt; 
&gt; WebCore:: shouldn&apos;t be needed anywhere due to the using statement above.

Fixed.  That&apos;s what you get when you copy and paste code.

&gt;&gt; Source/WebKit/chromium/src/IDBFactoryBackendProxy.cpp:150
&gt;&gt; +    WTF::String m_mode;
&gt; 
&gt; WTF shouldn&apos;t be needed iirc.
&gt; 
&gt; Even more critical, putting a String (a RefCounted object) in a ThreadSafeRefCounted object is a no-no. Please find another way to accomplish your goal.

Replaced with AtomicString.  Let me know if that&apos;s insufficient.

&gt;&gt; Source/WebKit/chromium/src/IDBFactoryBackendProxy.cpp:155
&gt;&gt; +    WorkerContext* workerContext = static_cast&lt;WorkerContext*&gt;(context);
&gt; 
&gt; Assert that the context is a worker first. (I feel like we should have a function that does this cast and assert but I guess we don&apos;t)

I moved the assert and cast earlier in the callstack.

&gt;&gt; Source/WebKit/chromium/src/IDBFactoryBackendProxy.cpp:158
&gt;&gt; +    WorkerLoaderProxy* workerLoaderProxy = &amp;workerContext-&gt;thread()-&gt;workerLoaderProxy();
&gt; 
&gt; Why the loader proxy? (This looks odd to me.)

It offers a convenient way for the main thread to post a task back to the worker thread.  We can also get the webFrame and webView from it.

&gt;&gt; Source/WebKit/chromium/src/IDBFactoryBackendProxy.cpp:169
&gt;&gt; +    if (runLoop.runInMode(workerContext, mode) == MessageQueueTerminated) {
&gt; 
&gt; There is only a single task posted to this mode?

That&apos;s the idea.

I can&apos;t tell if you&apos;re asking or quizzing :)

&gt;&gt; Source/WebKit/chromium/src/IDBFactoryBackendProxy.cpp:187
&gt;&gt; +    m_webIDBFactory-&gt;open(name, new WebIDBCallbacksImpl(callbacks), origin, webFrame, dataDir);
&gt; 
&gt; A raw new is a bad sign. Who owns this? Why doesn&apos;t it have an adoptPtr around it?

It&apos;s owned by an IDMap in chromium.  Which is why it can&apos;t have the adoptPtr.  It seems that whenever an object is passed from webkit to chromium there&apos;s no way around using a raw new.  Is that accurate?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>513736</commentid>
    <comment_count>11</comment_count>
      <attachid>117596</attachid>
    <who name="Hans Wennborg">hans</who>
    <bug_when>2011-12-02 07:13:55 -0800</bug_when>
    <thetext>Comment on attachment 117596
Patch

I only noticed two little nits..

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

&gt; Source/WebKit/chromium/src/IDBFactoryBackendProxy.cpp:115
&gt; +                createCallbackTask(&amp;didComplete, this, result), m_mode);

no need for linebreak

&gt; Source/WebKit/chromium/src/IDBFactoryBackendProxy.cpp:127
&gt; +            createCallbackTask(&amp;allowIndexedDBTask, this, AllowCrossThreadAccess(webFrame), name));

no need for linebreak</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>513765</commentid>
    <comment_count>12</comment_count>
    <who name="David Levin">levin</who>
    <bug_when>2011-12-02 08:06:29 -0800</bug_when>
    <thetext>(In reply to comment #10)
&gt; (From update of attachment 117553 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=117553&amp;action=review


&gt; 
&gt; &gt;&gt; Source/WebCore/storage/IDBFactoryBackendImpl.cpp:178
&gt; &gt;&gt; +    m_databaseBackendMap.set(uniqueIdentifier, databaseBackend.get());
&gt; &gt; 
&gt; &gt; How does the lifetime of databaseBackend work?
&gt; &gt; 
&gt; &gt; It looks like it goes out of scope and nothing has a ref count on it.
&gt; &gt; 
&gt; &gt; Yes, I know this is the code that existed before :).
&gt; 
&gt; The onSuccess call in the line above this one constructs a PassRefPtr.  When I try to change
&gt; callbacks-&gt;onSuccess(databaseBackend.get());
&gt; to
&gt; callbacks-&gt;onSuccess(databaseBackend.release());
&gt; I get an ambiguity compiler error.  It seems that the workarounds are just as unclear as this original code.

Don&apos;t do release because the next line uses it :).

I think you need something like this: RefPtr&lt;IDBDatabaseBackendInterface&gt;(databaseBackend.get()).release()

which looks odd but will properly convey what is going on.






&gt; 
&gt; RefPtr&lt;IDBDatabaseBackendImpl&gt; objects live inside WebIDBDatabaseImpl objects, which are stored in an IDMap in chromium, here:
&gt; http://codesearch.google.com/codesearch#OAMlx_jo-ck/src/content/browser/in_process_webkit/indexed_db_dispatcher_host.h&amp;type=cs&amp;l=134


&gt; 
&gt; &gt;&gt; Source/WebKit/chromium/src/IDBFactoryBackendProxy.cpp:125
&gt; &gt;&gt; +                               AllowCrossThreadAccess(frame),
&gt; &gt; 
&gt; &gt; Everytime you put in AllowCrossThreadAccess, you need to be able to answer the question: How does this stay alive until it is used in the callback?
&gt; &gt; 
&gt; &gt; Please answer for commonClient and frame.  Also remove it for &quot;this&quot;.
&gt; 
&gt; The commonClient check was moved back to the worker thread, so it is no longer needed.
&gt; 
&gt; As for frame, I see what you mean, there&apos;s no guarantee the pointer hasn&apos;t become invalid.  I&apos;ll look for some indicator other than the worker&apos;s runloop terminating to listen for.  It looks like the corresponding code for WebSQLDatabase passes frame over to the main thread with AllowCrossThreadAccess.  Though I&apos;m not sure if that indicates that this is safe or if it&apos;s just also unsafe.

You can look back at the bug that went in with and see if lifetime was discussed. If so, you&apos;re in luck. If not, I would be concerned.

Once you figure out your instance, perhaps you could add a comment in the code to explain your instance.


&gt; 
&gt; I also considered stashing whether IDB is allowed when a worker is created but didn&apos;t see anywhere very obvious to do so.
&gt; 



&gt; &gt;&gt; Source/WebKit/chromium/src/IDBFactoryBackendProxy.cpp:150
&gt; &gt;&gt; +    WTF::String m_mode;
&gt; &gt; 
&gt; &gt; WTF shouldn&apos;t be needed iirc.
&gt; &gt; 
&gt; &gt; Even more critical, putting a String (a RefCounted object) in a ThreadSafeRefCounted object is a no-no. Please find another way to accomplish your goal.
&gt; 
&gt; Replaced with AtomicString.  Let me know if that&apos;s insufficient.

AtomicString is even worse. AtomicString is hard bound to a particular thread due to using tls. If it gets destroyed on the wrong thread, I think it is pretty guaranteed to do something bad iirc.

It is best to factor this such that a string isn&apos;t needed in the class.

For example can you pass the mode in a message (i.e. createCallbackTask) between the threads and not have it in the class?
Can you factor the class such that the string is in a new class which is only ever used on one thread?


I just saw that IDBDatabaseBackendImpl has strings in it and is ThreadSafeRefCounted. This class is way way too complicated to be ThreadSafeRefCounted imo. (String&apos;s don&apos;t appear to be the only problem issue in it.)




&gt; &gt;&gt; Source/WebKit/chromium/src/IDBFactoryBackendProxy.cpp:169
&gt; &gt;&gt; +    if (runLoop.runInMode(workerContext, mode) == MessageQueueTerminated) {
&gt; &gt; 
&gt; &gt; There is only a single task posted to this mode?
&gt; 
&gt; That&apos;s the idea.
&gt; 
&gt; I can&apos;t tell if you&apos;re asking or quizzing :)

No sure what you mean. I thought this was true but was checking to be sure.


&gt; &gt;&gt; Source/WebKit/chromium/src/IDBFactoryBackendProxy.cpp:187
&gt; &gt;&gt; +    m_webIDBFactory-&gt;open(name, new WebIDBCallbacksImpl(callbacks), origin, webFrame, dataDir);
&gt; &gt; 
&gt; &gt; A raw new is a bad sign. Who owns this? Why doesn&apos;t it have an adoptPtr around it?
&gt; 
&gt; It&apos;s owned by an IDMap in chromium.  Which is why it can&apos;t have the adoptPtr.  It seems that whenever an object is passed from webkit to chromium there&apos;s no way around using a raw new.  Is that accurate?

Hmm... for now :).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>513990</commentid>
    <comment_count>13</comment_count>
    <who name="David Grogan">dgrogan</who>
    <bug_when>2011-12-02 11:56:24 -0800</bug_when>
    <thetext>In hopes of getting this into m17, instead of monkeying around with making the bridge threadsafe, I&apos;m going to put IndexedDB-on-workers behind a runtime flag defaulted to false.  When that flag is set to true we can bypass the content settings check.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>513994</commentid>
    <comment_count>14</comment_count>
    <who name="David Levin">levin</who>
    <bug_when>2011-12-02 12:01:38 -0800</bug_when>
    <thetext>(In reply to comment #13)
&gt; In hopes of getting this into m17, instead of monkeying around with making the bridge threadsafe, I&apos;m going to put IndexedDB-on-workers behind a runtime flag defaulted to false.  When that flag is set to true we can bypass the content settings check.

So you want to check in obviously broken code that may corrupt memory if it is used?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>513996</commentid>
    <comment_count>15</comment_count>
    <who name="David Grogan">dgrogan</who>
    <bug_when>2011-12-02 12:02:30 -0800</bug_when>
    <thetext>(In reply to comment #14)
&gt; (In reply to comment #13)
&gt; &gt; In hopes of getting this into m17, instead of monkeying around with making the bridge threadsafe, I&apos;m going to put IndexedDB-on-workers behind a runtime flag defaulted to false.  When that flag is set to true we can bypass the content settings check.
&gt; 
&gt; So you want to check in obviously broken code that may corrupt memory if it is used?

No, the exact opposite, bypassing the content settings check would allow me to remove all this code.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>514006</commentid>
    <comment_count>16</comment_count>
      <attachid>117668</attachid>
    <who name="David Grogan">dgrogan</who>
    <bug_when>2011-12-02 12:17:41 -0800</bug_when>
    <thetext>Created attachment 117668
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>514013</commentid>
    <comment_count>17</comment_count>
      <attachid>117668</attachid>
    <who name="David Grogan">dgrogan</who>
    <bug_when>2011-12-02 12:36:03 -0800</bug_when>
    <thetext>Comment on attachment 117668
Patch

This, combined with changing the default value of the flag in chromium is what I had in mind.

I removed the ability to disable idb at runtime, something that only chromium uses and has had set to true for a long time.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>514015</commentid>
    <comment_count>18</comment_count>
    <who name="David Levin">levin</who>
    <bug_when>2011-12-02 12:40:36 -0800</bug_when>
    <thetext>(In reply to comment #17)
&gt; (From update of attachment 117668 [details])
&gt; This, combined with changing the default value of the flag in chromium is what I had in mind.
&gt; 
&gt; I removed the ability to disable idb at runtime, something that only chromium uses and has had set to true for a long time.

Thanks.

Threading issues in this particular patch seem ok. (I&apos;ll leave it to others to verify overall idea.)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>514084</commentid>
    <comment_count>19</comment_count>
    <who name="David Grogan">dgrogan</who>
    <bug_when>2011-12-02 13:46:08 -0800</bug_when>
    <thetext>Nate, sorry for the crunch, but would you be able to review this today?

Dave Levin has taken a few looks at this already but won&apos;t be able to finish it today.  Greg (Simon) said he&apos;s ok with putting this behind a flag.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>514122</commentid>
    <comment_count>20</comment_count>
      <attachid>117668</attachid>
    <who name="Nate Chapin">japhet</who>
    <bug_when>2011-12-02 14:06:23 -0800</bug_when>
    <thetext>Comment on attachment 117668
Patch

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

Per comment #18, I&apos;m taking on faith that this is correct from a threading perspective.

Otherwise, this seems sane.

&gt; Source/WebCore/storage/IDBFactory.cpp:85
&gt; +    ASSERT(context-&gt;isDocument() || context-&gt;isWorkerContext());

Is this ASSERT actually necessary? I thought these were the only 2 types of ScriptExecutionContexts</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>514224</commentid>
    <comment_count>21</comment_count>
    <who name="David Grogan">dgrogan</who>
    <bug_when>2011-12-02 15:24:01 -0800</bug_when>
    <thetext>I put it in just to alert if a new cast is ever needed, if there becomes a new type of context.  Might be silly.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>514342</commentid>
    <comment_count>22</comment_count>
      <attachid>117668</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-12-02 18:20:27 -0800</bug_when>
    <thetext>Comment on attachment 117668
Patch

Clearing flags on attachment: 117668

Committed r101890: &lt;http://trac.webkit.org/changeset/101890&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>514343</commentid>
    <comment_count>23</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-12-02 18:20:33 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>530610</commentid>
    <comment_count>24</comment_count>
    <who name="David Grogan">dgrogan</who>
    <bug_when>2012-01-05 14:02:34 -0800</bug_when>
    <thetext>*** Bug 56787 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>117537</attachid>
            <date>2011-12-01 18:00:54 -0800</date>
            <delta_ts>2011-12-01 19:08:16 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-73609-20111201180053.patch</filename>
            <type>text/plain</type>
            <size>21856</size>
            <attacher name="David Grogan">dgrogan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTAxNDQyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYjI4ZmNmMmJlY2ZkOWMz
OTE0NzYwZmI4MDU4MDVhNzc2ZjI5OGRjMi4uZWRkMWZhMDkyZjIxYzA2ZDFhNWRkOTkzMTQ1MWM2
MjBjZGNiNjlmYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI2IEBACisyMDExLTEyLTAxICBEYXZp
ZCBHcm9nYW4gIDxkZ3JvZ2FuQGNocm9taXVtLm9yZz4KKworICAgICAgICBBbGxvdyB3b3JrZXJz
IHRvIGFjY2VzcyBJbmRleGVkREIuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD03MzYwOQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIE5vIG5ldyB0ZXN0cyAtIHRoZXJlIHdpbGwgYmUgY2hyb21pdW0gdWkgdGVz
dHMgdGhhdCBkZXBlbmQgb24KKyAgICAgICAgd2Via2l0Lm9yZy9iLzczMjk3LgorCisgICAgICAg
ICogc3RvcmFnZS9JREJGYWN0b3J5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklEQkZhY3Rvcnk6
Om9wZW4pOgorICAgICAgICAqIHN0b3JhZ2UvSURCRmFjdG9yeUJhY2tlbmRJbXBsLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OklEQkZhY3RvcnlCYWNrZW5kSW1wbDo6b3Blbik6CisgICAgICAgIChX
ZWJDb3JlOjpJREJGYWN0b3J5QmFja2VuZEltcGw6Om9wZW5Gcm9tV29ya2VyKToKKyAgICAgICAg
KFdlYkNvcmU6OklEQkZhY3RvcnlCYWNrZW5kSW1wbDo6b3BlbkludGVybmFsKToKKyAgICAgICAg
KiBzdG9yYWdlL0lEQkZhY3RvcnlCYWNrZW5kSW1wbC5oOgorICAgICAgICAqIHN0b3JhZ2UvSURC
RmFjdG9yeUJhY2tlbmRJbnRlcmZhY2UuaDoKKyAgICAgICAgKiB3b3JrZXJzL1dvcmtlckNvbnRl
eHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V29ya2VyQ29udGV4dDo6d2Via2l0SW5kZXhlZERC
KToKKyAgICAgICAgKiB3b3JrZXJzL1dvcmtlckNvbnRleHQuaDoKKyAgICAgICAgKiB3b3JrZXJz
L1dvcmtlckNvbnRleHQuaWRsOgorCiAyMDExLTExLTI5ICBKZXNzaWUgQmVybGluICA8amJlcmxp
bkBhcHBsZS5jb20+CiAKICAgICAgICAgV0tLZXlWYWx1ZVN0b3JhZ2VNYW5hZ2VyR2V0S2V5VmFs
dWVTdG9yYWdlT3JpZ2lucyBtYXkgbm90IHJlcG9ydCB0aGUgY29ycmVjdCBsaXN0IG9mIG9yaWdp
bnMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nIGIvU291cmNl
L1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKaW5kZXggMjYzMDYxYWRjMWQ1OTBiNjMyNmU1YTQw
ZTZhNDcxMTg3ZDg3MmYwMS4uNDYwOGViMDU3NDQwZjRmMjE5NWY0ZjZhOWYyOTM4ZmJhZjNiYTZj
ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyMiBAQAorMjAxMS0xMi0w
MSAgRGF2aWQgR3JvZ2FuICA8ZGdyb2dhbkBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgQWxsb3cg
d29ya2VycyB0byBhY2Nlc3MgSW5kZXhlZERCLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzM2MDkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICAqIHNyYy9JREJGYWN0b3J5QmFja2VuZFByb3h5LmNwcDoKKyAg
ICAgICAgKFdlYktpdDo6QWxsb3dJbmRleGVkREJNYWluVGhyZWFkQnJpZGdlOjpjcmVhdGUpOgor
ICAgICAgICAoV2ViS2l0OjpBbGxvd0luZGV4ZWREQk1haW5UaHJlYWRCcmlkZ2U6OmNhbmNlbCk6
CisgICAgICAgIChXZWJLaXQ6OkFsbG93SW5kZXhlZERCTWFpblRocmVhZEJyaWRnZTo6cmVzdWx0
KToKKyAgICAgICAgKFdlYktpdDo6QWxsb3dJbmRleGVkREJNYWluVGhyZWFkQnJpZGdlOjpzaWdu
YWxDb21wbGV0ZWQpOgorICAgICAgICAoV2ViS2l0OjpBbGxvd0luZGV4ZWREQk1haW5UaHJlYWRC
cmlkZ2U6OkFsbG93SW5kZXhlZERCTWFpblRocmVhZEJyaWRnZSk6CisgICAgICAgIChXZWJLaXQ6
OkFsbG93SW5kZXhlZERCTWFpblRocmVhZEJyaWRnZTo6YWxsb3dJbmRleGVkREJUYXNrKToKKyAg
ICAgICAgKFdlYktpdDo6QWxsb3dJbmRleGVkREJNYWluVGhyZWFkQnJpZGdlOjpkaWRDb21wbGV0
ZSk6CisgICAgICAgIChXZWJLaXQ6OklEQkZhY3RvcnlCYWNrZW5kUHJveHk6OmFsbG93SURCRnJv
bVdvcmtlclRocmVhZCk6CisgICAgICAgIChXZWJLaXQ6OklEQkZhY3RvcnlCYWNrZW5kUHJveHk6
Om9wZW5Gcm9tV29ya2VyKToKKyAgICAgICAgKiBzcmMvSURCRmFjdG9yeUJhY2tlbmRQcm94eS5o
OgorCiAyMDExLTExLTI5ICBOYXQgRHVjYSAgPG5kdWNhQGNocm9taXVtLm9yZz4KIAogICAgICAg
ICBVbnJldmlld2VkLiBGaXggY2xhbmcgYnVpbGQgYnkgdXNpbmcgcmF3IHBvaW50ZXJzIGluc3Rl
YWQgb2Ygc3RhdGljIE93blB0cnMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2Uv
SURCRmFjdG9yeS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkZhY3RvcnkuY3BwCmlu
ZGV4IGY1NGNmNzFlYjM4NjBlMzBlOWMwMzMwNDc0YmM1MjgxYzc3ZTVjYWMuLjZlMTE2YmEzMmEz
ZWU3NGM2YjkwZTk5Yjc0YTVkZTY0ZDY3ODkyODggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3N0b3JhZ2UvSURCRmFjdG9yeS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJG
YWN0b3J5LmNwcApAQCAtNDYsNiArNDYsOSBAQAogI2luY2x1ZGUgIlBhZ2UuaCIKICNpbmNsdWRl
ICJQYWdlR3JvdXAuaCIKICNpbmNsdWRlICJTZWN1cml0eU9yaWdpbi5oIgorI2luY2x1ZGUgIldv
cmtlckNvbnRleHQuaCIKKyNpbmNsdWRlICJXb3JrZXJMb2FkZXJQcm94eS5oIgorI2luY2x1ZGUg
IldvcmtlclRocmVhZC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTc5LDIzICs4Miwy
MyBAQCBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IElEQkZhY3Rvcnk6OmdldERhdGFiYXNlTmFtZXMo
U2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udAogCiBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IElE
QkZhY3Rvcnk6Om9wZW4oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgY29uc3QgU3Ry
aW5nJiBuYW1lLCBFeGNlcHRpb25Db2RlJiBlYykKIHsKLSAgICBpZiAoIWNvbnRleHQtPmlzRG9j
dW1lbnQoKSkgewotICAgICAgICAvLyBGSVhNRTogbWFrZSB0aGlzIHdvcmsgd2l0aCB3b3JrZXJz
LgotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0KLSAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBz
dGF0aWNfY2FzdDxEb2N1bWVudCo+KGNvbnRleHQpOwotICAgIGlmICghZG9jdW1lbnQtPmZyYW1l
KCkgfHwgIWRvY3VtZW50LT5wYWdlKCkpCi0gICAgICAgIHJldHVybiAwOworICAgIEFTU0VSVChj
b250ZXh0LT5pc0RvY3VtZW50KCkgfHwgY29udGV4dC0+aXNXb3JrZXJDb250ZXh0KCkpOwogCiAg
ICAgaWYgKG5hbWUuaXNOdWxsKCkpIHsKICAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlv
bjo6Tk9OX1RSQU5TSUVOVF9FUlI7CiAgICAgICAgIHJldHVybiAwOwogICAgIH0KLQotICAgIFJl
ZlB0cjxJREJSZXF1ZXN0PiByZXF1ZXN0ID0gSURCUmVxdWVzdDo6Y3JlYXRlKGRvY3VtZW50LCBJ
REJBbnk6OmNyZWF0ZSh0aGlzKSwgMCk7Ci0gICAgR3JvdXBTZXR0aW5ncyogZ3JvdXBTZXR0aW5n
cyA9IGRvY3VtZW50LT5wYWdlKCktPmdyb3VwKCkuZ3JvdXBTZXR0aW5ncygpOwotICAgIG1fYmFj
a2VuZC0+b3BlbihuYW1lLCByZXF1ZXN0LCBkb2N1bWVudC0+c2VjdXJpdHlPcmlnaW4oKSwgZG9j
dW1lbnQtPmZyYW1lKCksIGdyb3VwU2V0dGluZ3MtPmluZGV4ZWREQkRhdGFiYXNlUGF0aCgpKTsK
KyAgICBpZiAoY29udGV4dC0+aXNEb2N1bWVudCgpKSB7CisgICAgICAgIERvY3VtZW50KiBkb2N1
bWVudCA9IHN0YXRpY19jYXN0PERvY3VtZW50Kj4oY29udGV4dCk7CisgICAgICAgIGlmICghZG9j
dW1lbnQtPmZyYW1lKCkgfHwgIWRvY3VtZW50LT5wYWdlKCkpCisgICAgICAgICAgICByZXR1cm4g
MDsKKyAgICAgICAgRnJhbWUqIGZyYW1lID0gZG9jdW1lbnQtPmZyYW1lKCk7CisgICAgICAgIFJl
ZlB0cjxJREJSZXF1ZXN0PiByZXF1ZXN0ID0gSURCUmVxdWVzdDo6Y3JlYXRlKGNvbnRleHQsIElE
QkFueTo6Y3JlYXRlKHRoaXMpLCAwKTsKKyAgICAgICAgbV9iYWNrZW5kLT5vcGVuKG5hbWUsIHJl
cXVlc3QsIGNvbnRleHQtPnNlY3VyaXR5T3JpZ2luKCksIGZyYW1lLCBTdHJpbmcoKSk7CisgICAg
ICAgIHJldHVybiByZXF1ZXN0OworICAgIH0KKyAgICBSZWZQdHI8SURCUmVxdWVzdD4gcmVxdWVz
dCA9IElEQlJlcXVlc3Q6OmNyZWF0ZShjb250ZXh0LCBJREJBbnk6OmNyZWF0ZSh0aGlzKSwgMCk7
CisgICAgbV9iYWNrZW5kLT5vcGVuRnJvbVdvcmtlcihuYW1lLCByZXF1ZXN0LCBjb250ZXh0LT5z
ZWN1cml0eU9yaWdpbigpLCBzdGF0aWNfY2FzdDxXb3JrZXJDb250ZXh0Kj4oY29udGV4dCksIFN0
cmluZygpKTsKICAgICByZXR1cm4gcmVxdWVzdDsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvc3RvcmFnZS9JREJGYWN0b3J5QmFja2VuZEltcGwuY3BwIGIvU291cmNlL1dlYkNvcmUv
c3RvcmFnZS9JREJGYWN0b3J5QmFja2VuZEltcGwuY3BwCmluZGV4IGQxMjQ4MWQzZGMxMTEwOGIw
NjhiYjYwMWJmYzM2Zjg4ZDRjOTJlMWUuLmY5YzE0YTg3MTNhNTY0NTJlZGJiMWM3ODE2N2RhOTA5
MjFiYzkwODEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCRmFjdG9yeUJh
Y2tlbmRJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkZhY3RvcnlCYWNr
ZW5kSW1wbC5jcHAKQEAgLTEwMCwyNiArMTAwLDEyIEBAIHZvaWQgSURCRmFjdG9yeUJhY2tlbmRJ
bXBsOjpnZXREYXRhYmFzZU5hbWVzKFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3Ms
CiAKIHZvaWQgSURCRmFjdG9yeUJhY2tlbmRJbXBsOjpvcGVuKGNvbnN0IFN0cmluZyYgbmFtZSwg
UGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcywgUGFzc1JlZlB0cjxTZWN1cml0eU9y
aWdpbj4gc2VjdXJpdHlPcmlnaW4sIEZyYW1lKiwgY29uc3QgU3RyaW5nJiBkYXRhRGlyKQogewot
ICAgIGNvbnN0IFN0cmluZyB1bmlxdWVJZGVudGlmaWVyID0gY29tcHV0ZVVuaXF1ZUlkZW50aWZp
ZXIobmFtZSwgc2VjdXJpdHlPcmlnaW4uZ2V0KCkpOwotCi0gICAgSURCRGF0YWJhc2VCYWNrZW5k
TWFwOjppdGVyYXRvciBpdCA9IG1fZGF0YWJhc2VCYWNrZW5kTWFwLmZpbmQodW5pcXVlSWRlbnRp
Zmllcik7Ci0gICAgaWYgKGl0ICE9IG1fZGF0YWJhc2VCYWNrZW5kTWFwLmVuZCgpKSB7Ci0gICAg
ICAgIC8vIElmIGl0J3MgYWxyZWFkeSBiZWVuIG9wZW5lZCwgd2UgaGF2ZSB0byB3YWl0IGZvciBh
bnkgcGVuZGluZwotICAgICAgICAvLyBzZXRWZXJzaW9uIGNhbGxzIHRvIGNvbXBsZXRlLgotICAg
ICAgICBpdC0+c2Vjb25kLT5vcGVuQ29ubmVjdGlvbihjYWxsYmFja3MpOwotICAgICAgICByZXR1
cm47Ci0gICAgfQotCi0gICAgLy8gRklYTUU6IEV2ZXJ5dGhpbmcgZnJvbSBub3cgb24gc2hvdWxk
IGJlIGRvbmUgb24gYW5vdGhlciB0aHJlYWQuCi0gICAgUmVmUHRyPElEQkJhY2tpbmdTdG9yZT4g
YmFja2luZ1N0b3JlID0gb3BlbkJhY2tpbmdTdG9yZShzZWN1cml0eU9yaWdpbiwgZGF0YURpcik7
Ci0gICAgaWYgKCFiYWNraW5nU3RvcmUpIHsKLSAgICAgICAgY2FsbGJhY2tzLT5vbkVycm9yKElE
QkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VU5LTk9XTl9FUlIs
ICJJbnRlcm5hbCBlcnJvci4iKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAgb3Blbklu
dGVybmFsKG5hbWUsIGNhbGxiYWNrcywgc2VjdXJpdHlPcmlnaW4sIGRhdGFEaXIpOworfQogCi0g
ICAgUmVmUHRyPElEQkRhdGFiYXNlQmFja2VuZEltcGw+IGRhdGFiYXNlQmFja2VuZCA9IElEQkRh
dGFiYXNlQmFja2VuZEltcGw6OmNyZWF0ZShuYW1lLCBiYWNraW5nU3RvcmUuZ2V0KCksIG1fdHJh
bnNhY3Rpb25Db29yZGluYXRvci5nZXQoKSwgdGhpcywgdW5pcXVlSWRlbnRpZmllcik7Ci0gICAg
Y2FsbGJhY2tzLT5vblN1Y2Nlc3MoZGF0YWJhc2VCYWNrZW5kLmdldCgpKTsKLSAgICBtX2RhdGFi
YXNlQmFja2VuZE1hcC5zZXQodW5pcXVlSWRlbnRpZmllciwgZGF0YWJhc2VCYWNrZW5kLmdldCgp
KTsKK3ZvaWQgSURCRmFjdG9yeUJhY2tlbmRJbXBsOjpvcGVuRnJvbVdvcmtlcihjb25zdCBTdHJp
bmcmIG5hbWUsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MsIFBhc3NSZWZQdHI8
U2VjdXJpdHlPcmlnaW4+IHNlY3VyaXR5T3JpZ2luLCBXb3JrZXJDb250ZXh0KiwgY29uc3QgU3Ry
aW5nJiBkYXRhRGlyKQoreworICAgIG9wZW5JbnRlcm5hbChuYW1lLCBjYWxsYmFja3MsIHNlY3Vy
aXR5T3JpZ2luLCBkYXRhRGlyKTsKIH0KIAogdm9pZCBJREJGYWN0b3J5QmFja2VuZEltcGw6OmRl
bGV0ZURhdGFiYXNlKGNvbnN0IFN0cmluZyYgbmFtZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+
IGNhbGxiYWNrcywgUGFzc1JlZlB0cjxTZWN1cml0eU9yaWdpbj4gc2VjdXJpdHlPcmlnaW4sIEZy
YW1lKiwgY29uc3QgU3RyaW5nJiBkYXRhRGlyKQpAQCAtMTY4LDYgKzE1NCwzMCBAQCBQYXNzUmVm
UHRyPElEQkJhY2tpbmdTdG9yZT4gSURCRmFjdG9yeUJhY2tlbmRJbXBsOjpvcGVuQmFja2luZ1N0
b3JlKFBhc3NSZWZQdHI8UwogICAgIHJldHVybiAwOwogfQogCit2b2lkIElEQkZhY3RvcnlCYWNr
ZW5kSW1wbDo6b3BlbkludGVybmFsKGNvbnN0IFN0cmluZyYgbmFtZSwgUGFzc1JlZlB0cjxJREJD
YWxsYmFja3M+IGNhbGxiYWNrcywgUGFzc1JlZlB0cjxTZWN1cml0eU9yaWdpbj4gc2VjdXJpdHlP
cmlnaW4sIGNvbnN0IFN0cmluZyYgZGF0YURpcikKK3sKKyAgICBjb25zdCBTdHJpbmcgdW5pcXVl
SWRlbnRpZmllciA9IGNvbXB1dGVVbmlxdWVJZGVudGlmaWVyKG5hbWUsIHNlY3VyaXR5T3JpZ2lu
LmdldCgpKTsKKworICAgIElEQkRhdGFiYXNlQmFja2VuZE1hcDo6aXRlcmF0b3IgaXQgPSBtX2Rh
dGFiYXNlQmFja2VuZE1hcC5maW5kKHVuaXF1ZUlkZW50aWZpZXIpOworICAgIGlmIChpdCAhPSBt
X2RhdGFiYXNlQmFja2VuZE1hcC5lbmQoKSkgeworICAgICAgICAvLyBJZiBpdCdzIGFscmVhZHkg
YmVlbiBvcGVuZWQsIHdlIGhhdmUgdG8gd2FpdCBmb3IgYW55IHBlbmRpbmcKKyAgICAgICAgLy8g
c2V0VmVyc2lvbiBjYWxscyB0byBjb21wbGV0ZS4KKyAgICAgICAgaXQtPnNlY29uZC0+b3BlbkNv
bm5lY3Rpb24oY2FsbGJhY2tzKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIEZJ
WE1FOiBFdmVyeXRoaW5nIGZyb20gbm93IG9uIHNob3VsZCBiZSBkb25lIG9uIGFub3RoZXIgdGhy
ZWFkLgorICAgIFJlZlB0cjxJREJCYWNraW5nU3RvcmU+IGJhY2tpbmdTdG9yZSA9IG9wZW5CYWNr
aW5nU3RvcmUoc2VjdXJpdHlPcmlnaW4sIGRhdGFEaXIpOworICAgIGlmICghYmFja2luZ1N0b3Jl
KSB7CisgICAgICAgIGNhbGxiYWNrcy0+b25FcnJvcihJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUo
SURCRGF0YWJhc2VFeGNlcHRpb246OlVOS05PV05fRVJSLCAiSW50ZXJuYWwgZXJyb3IuIikpOwor
ICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgUmVmUHRyPElEQkRhdGFiYXNlQmFja2VuZElt
cGw+IGRhdGFiYXNlQmFja2VuZCA9IElEQkRhdGFiYXNlQmFja2VuZEltcGw6OmNyZWF0ZShuYW1l
LCBiYWNraW5nU3RvcmUuZ2V0KCksIG1fdHJhbnNhY3Rpb25Db29yZGluYXRvci5nZXQoKSwgdGhp
cywgdW5pcXVlSWRlbnRpZmllcik7CisgICAgY2FsbGJhY2tzLT5vblN1Y2Nlc3MoZGF0YWJhc2VC
YWNrZW5kLmdldCgpKTsKKyAgICBtX2RhdGFiYXNlQmFja2VuZE1hcC5zZXQodW5pcXVlSWRlbnRp
ZmllciwgZGF0YWJhc2VCYWNrZW5kLmdldCgpKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQogCiAjZW5kaWYgLy8gRU5BQkxFKElOREVYRURfREFUQUJBU0UpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9zdG9yYWdlL0lEQkZhY3RvcnlCYWNrZW5kSW1wbC5oIGIvU291cmNlL1dlYkNv
cmUvc3RvcmFnZS9JREJGYWN0b3J5QmFja2VuZEltcGwuaAppbmRleCA5YzJmMDdmYjcwNTQ3YTIx
MDNhNGNhZDc3ZGI1NmU1OTNmMWM0OTRhLi40M2NkY2Y4ZTc4YTcxMGQwODM4NWJiNDhmZThlYzY5
NzI2NzJhODAzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkZhY3RvcnlC
YWNrZW5kSW1wbC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCRmFjdG9yeUJhY2tl
bmRJbXBsLmgKQEAgLTU2LDEyICs1NiwxNSBAQCBwdWJsaWM6CiAgICAgdm9pZCByZW1vdmVJREJC
YWNraW5nU3RvcmUoY29uc3QgU3RyaW5nJiBmaWxlSWRlbnRpZmllcik7CiAKICAgICB2aXJ0dWFs
IHZvaWQgZ2V0RGF0YWJhc2VOYW1lcyhQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4sIFBhc3NSZWZQ
dHI8U2VjdXJpdHlPcmlnaW4+LCBGcmFtZSosIGNvbnN0IFN0cmluZyYgZGF0YURpcik7CisKICAg
ICB2aXJ0dWFsIHZvaWQgb3Blbihjb25zdCBTdHJpbmcmIG5hbWUsIFBhc3NSZWZQdHI8SURCQ2Fs
bGJhY2tzPiwgUGFzc1JlZlB0cjxTZWN1cml0eU9yaWdpbj4sIEZyYW1lKiwgY29uc3QgU3RyaW5n
JiBkYXRhRGlyKTsKKyAgICB2aXJ0dWFsIHZvaWQgb3BlbkZyb21Xb3JrZXIoY29uc3QgU3RyaW5n
JiBuYW1lLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4sIFBhc3NSZWZQdHI8U2VjdXJpdHlPcmln
aW4+LCBXb3JrZXJDb250ZXh0KiwgY29uc3QgU3RyaW5nJiBkYXRhRGlyKTsKICAgICB2aXJ0dWFs
IHZvaWQgZGVsZXRlRGF0YWJhc2UoY29uc3QgU3RyaW5nJiBuYW1lLCBQYXNzUmVmUHRyPElEQkNh
bGxiYWNrcz4sIFBhc3NSZWZQdHI8U2VjdXJpdHlPcmlnaW4+LCBGcmFtZSosIGNvbnN0IFN0cmlu
ZyYgZGF0YURpcik7CiAKIHByaXZhdGU6CiAgICAgSURCRmFjdG9yeUJhY2tlbmRJbXBsKCk7CiAg
ICAgUGFzc1JlZlB0cjxJREJCYWNraW5nU3RvcmU+IG9wZW5CYWNraW5nU3RvcmUoUGFzc1JlZlB0
cjxTZWN1cml0eU9yaWdpbj4sIGNvbnN0IFN0cmluZyYgZGF0YURpcik7CisgICAgdm9pZCBvcGVu
SW50ZXJuYWwoY29uc3QgU3RyaW5nJiBuYW1lLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4sIFBh
c3NSZWZQdHI8U2VjdXJpdHlPcmlnaW4+LCBjb25zdCBTdHJpbmcmIGRhdGFEaXIpOwogCiAgICAg
dHlwZWRlZiBIYXNoTWFwPFN0cmluZywgSURCRGF0YWJhc2VCYWNrZW5kSW1wbCo+IElEQkRhdGFi
YXNlQmFja2VuZE1hcDsKICAgICBJREJEYXRhYmFzZUJhY2tlbmRNYXAgbV9kYXRhYmFzZUJhY2tl
bmRNYXA7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkZhY3RvcnlCYWNr
ZW5kSW50ZXJmYWNlLmggYi9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkZhY3RvcnlCYWNrZW5k
SW50ZXJmYWNlLmgKaW5kZXggY2U5YjRkZjBjYjdmZjYyMTE4MGQ1YmZkNjg3MWFlZDI0MmRkMjUx
Zi4uNGYxYzgzODcxZjQyZjMyMDlhNmI5YTIwMWE3YjA0NWI5ZWVlMWI1NSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJGYWN0b3J5QmFja2VuZEludGVyZmFjZS5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCRmFjdG9yeUJhY2tlbmRJbnRlcmZhY2UuaApAQCAt
NDAsNiArNDAsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBGcmFtZTsKIGNsYXNzIElE
QkRhdGFiYXNlOwogY2xhc3MgU2VjdXJpdHlPcmlnaW47CitjbGFzcyBTY3JpcHRFeGVjdXRpb25D
b250ZXh0OwogCiB0eXBlZGVmIGludCBFeGNlcHRpb25Db2RlOwogCkBAIC01Myw3ICs1NCw5IEBA
IHB1YmxpYzoKICAgICB2aXJ0dWFsIH5JREJGYWN0b3J5QmFja2VuZEludGVyZmFjZSgpIHsgfQog
CiAgICAgdmlydHVhbCB2b2lkIGdldERhdGFiYXNlTmFtZXMoUGFzc1JlZlB0cjxJREJDYWxsYmFj
a3M+LCBQYXNzUmVmUHRyPFNlY3VyaXR5T3JpZ2luPiwgRnJhbWUqLCBjb25zdCBTdHJpbmcmIGRh
dGFEaXIpID0gMDsKKwogICAgIHZpcnR1YWwgdm9pZCBvcGVuKGNvbnN0IFN0cmluZyYgbmFtZSwg
UGFzc1JlZlB0cjxJREJDYWxsYmFja3M+LCBQYXNzUmVmUHRyPFNlY3VyaXR5T3JpZ2luPiwgRnJh
bWUqLCBjb25zdCBTdHJpbmcmIGRhdGFEaXIpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgb3BlbkZy
b21Xb3JrZXIoY29uc3QgU3RyaW5nJiBuYW1lLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4sIFBh
c3NSZWZQdHI8U2VjdXJpdHlPcmlnaW4+LCBXb3JrZXJDb250ZXh0KiwgY29uc3QgU3RyaW5nJiBk
YXRhRGlyKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIGRlbGV0ZURhdGFiYXNlKGNvbnN0IFN0cmlu
ZyYgbmFtZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+LCBQYXNzUmVmUHRyPFNlY3VyaXR5T3Jp
Z2luPiwgRnJhbWUqLCBjb25zdCBTdHJpbmcmIGRhdGFEaXIpID0gMDsKIH07CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMvV29ya2VyQ29udGV4dC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS93b3JrZXJzL1dvcmtlckNvbnRleHQuY3BwCmluZGV4IDg1YWYyZjVmNmQ3ZWVhZTg1MjJi
YTg5MTM2NmU3OTNkMWM4OTQyYWUuLjAxNjAzYmJjMjdjZTgxZTI1NDEwOGNmMzYxNWNiNDZkZTM5
NmRhNWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMvV29ya2VyQ29udGV4dC5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJDb250ZXh0LmNwcApAQCAtODYs
NiArODYsOCBAQAogI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKICNlbmRpZgogCisjaW5jbHVk
ZSAiSURCRmFjdG9yeS5oIgorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIENsb3NlV29y
a2VyQ29udGV4dFRhc2sgOiBwdWJsaWMgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6VGFzayB7CkBA
IC01MjAsNiArNTIyLDE2IEBAIHZvaWQgV29ya2VyQ29udGV4dDo6bm90aWZ5T2JzZXJ2ZXJzT2ZT
dG9wKCkKICAgICAgICAgaXRlciA9IG1fd29ya2VyT2JzZXJ2ZXJzLmJlZ2luKCk7CiAgICAgfQog
fQorSURCRmFjdG9yeSogV29ya2VyQ29udGV4dDo6d2Via2l0SW5kZXhlZERCKCkgY29uc3QKK3sK
KyAgICBpZiAoIXNlY3VyaXR5T3JpZ2luKCktPmNhbkFjY2Vzc0RhdGFiYXNlKCkpCisgICAgICAg
IHJldHVybiAwOworICAgIGlmICghbV9pZGJGYWN0b3J5QmFja2VuZEludGVyZmFjZSkKKyAgICAg
ICAgbV9pZGJGYWN0b3J5QmFja2VuZEludGVyZmFjZSA9IElEQkZhY3RvcnlCYWNrZW5kSW50ZXJm
YWNlOjpjcmVhdGUoKS5nZXQoKTsKKyAgICBpZiAoIW1faWRiRmFjdG9yeSkKKyAgICAgICAgbV9p
ZGJGYWN0b3J5ID0gSURCRmFjdG9yeTo6Y3JlYXRlKG1faWRiRmFjdG9yeUJhY2tlbmRJbnRlcmZh
Y2UuZ2V0KCkpOworICAgIHJldHVybiBtX2lkYkZhY3RvcnkuZ2V0KCk7Cit9CiAKIFdvcmtlckV2
ZW50UXVldWUqIFdvcmtlckNvbnRleHQ6OmV2ZW50UXVldWUoKSBjb25zdAogewpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJDb250ZXh0LmggYi9Tb3VyY2UvV2ViQ29y
ZS93b3JrZXJzL1dvcmtlckNvbnRleHQuaAppbmRleCA1ZDE0YjA3MDRiMzIyNmNlOGZmOTE3ODI0
MmE4MDMwNDFlOGU0ZjgzLi5jOTRmYTA5NzhiM2FhMDQyZTkxMjNlYmFiMzc0MDEyYWFiNGVmZDMz
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS93b3JrZXJzL1dvcmtlckNvbnRleHQuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS93b3JrZXJzL1dvcmtlckNvbnRleHQuaApAQCAtNTUsNiArNTUsNyBA
QCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgY2xhc3MgRW50cnlTeW5jOwogICAgIGNsYXNzIEVy
cm9yQ2FsbGJhY2s7CiAgICAgY2xhc3MgRmlsZVN5c3RlbUNhbGxiYWNrOworICAgIGNsYXNzIElE
QkZhY3Rvcnk7CiAgICAgY2xhc3MgTm90aWZpY2F0aW9uQ2VudGVyOwogICAgIGNsYXNzIFNjaGVk
dWxlZEFjdGlvbjsKICAgICBjbGFzcyBXb3JrZXJJbnNwZWN0b3JDb250cm9sbGVyOwpAQCAtMTcz
LDYgKzE3NCw5IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgdm9pZCByZWdpc3Rlck9i
c2VydmVyKE9ic2VydmVyKik7CiAgICAgICAgIHZvaWQgdW5yZWdpc3Rlck9ic2VydmVyKE9ic2Vy
dmVyKik7CiAgICAgICAgIHZvaWQgbm90aWZ5T2JzZXJ2ZXJzT2ZTdG9wKCk7CisjaWYgRU5BQkxF
KElOREVYRURfREFUQUJBU0UpCisgICAgICAgIElEQkZhY3RvcnkqIHdlYmtpdEluZGV4ZWREQigp
IGNvbnN0OworI2VuZGlmCiAKICAgICBwcm90ZWN0ZWQ6CiAgICAgICAgIFdvcmtlckNvbnRleHQo
Y29uc3QgS1VSTCYsIGNvbnN0IFN0cmluZyYsIFdvcmtlclRocmVhZCopOwpAQCAtMjE4LDYgKzIy
MiwxMiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIEhhc2hTZXQ8T2JzZXJ2ZXIqPiBt
X3dvcmtlck9ic2VydmVyczsKIAogICAgICAgICBPd25QdHI8V29ya2VyRXZlbnRRdWV1ZT4gbV9l
dmVudFF1ZXVlOworCisjaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCisgICAgICAgIG11dGFi
bGUgUmVmUHRyPElEQkZhY3Rvcnk+IG1faWRiRmFjdG9yeTsKKyAgICAgICAgbXV0YWJsZSBSZWZQ
dHI8SURCRmFjdG9yeUJhY2tlbmRJbnRlcmZhY2U+IG1faWRiRmFjdG9yeUJhY2tlbmRJbnRlcmZh
Y2U7CisjZW5kaWYKKwogICAgIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMvV29ya2VyQ29udGV4dC5pZGwgYi9Tb3VyY2UvV2Vi
Q29yZS93b3JrZXJzL1dvcmtlckNvbnRleHQuaWRsCmluZGV4IGY3YzFiYmIyOWRkZWE2OGY2OWQz
NTg5NGE0Y2ZhNWNiNDUyM2UxNjUuLjczNmJiYzEzM2Y3ZjIzMzBmNzBhYjA3M2E4ODgwM2UwNzVh
ZTBhZDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMvV29ya2VyQ29udGV4dC5p
ZGwKKysrIGIvU291cmNlL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJDb250ZXh0LmlkbApAQCAtMTI2
LDYgKzEyNiwyMCBAQCBtb2R1bGUgdGhyZWFkcyB7CiAgICAgICAgIGF0dHJpYnV0ZSBGbG9hdDMy
QXJyYXlDb25zdHJ1Y3RvciBGbG9hdDMyQXJyYXk7IC8vIFVzYWJsZSB3aXRoIG5ldyBvcGVyYXRv
cgogICAgICAgICBhdHRyaWJ1dGUgRmxvYXQ2NEFycmF5Q29uc3RydWN0b3IgRmxvYXQ2NEFycmF5
OyAvLyBVc2FibGUgd2l0aCBuZXcgb3BlcmF0b3IKICAgICAgICAgYXR0cmlidXRlIERhdGFWaWV3
Q29uc3RydWN0b3IgRGF0YVZpZXc7IC8vIFVzYWJsZSB3aXRoIG5ldyBvcGVyYXRvcgorI2lmIGRl
ZmluZWQoRU5BQkxFX0lOREVYRURfREFUQUJBU0UpICYmIEVOQUJMRV9JTkRFWEVEX0RBVEFCQVNF
CisgICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBbRW5hYmxlZEF0UnVudGltZV0gSURCRmFjdG9y
eSB3ZWJraXRJbmRleGVkREI7CisKKyAgICAgICAgYXR0cmlidXRlIFtFbmFibGVkQXRSdW50aW1l
XSBJREJDdXJzb3JDb25zdHJ1Y3RvciB3ZWJraXRJREJDdXJzb3I7CisgICAgICAgIGF0dHJpYnV0
ZSBbRW5hYmxlZEF0UnVudGltZV0gSURCRGF0YWJhc2VDb25zdHJ1Y3RvciB3ZWJraXRJREJEYXRh
YmFzZTsKKyAgICAgICAgYXR0cmlidXRlIFtFbmFibGVkQXRSdW50aW1lXSBJREJEYXRhYmFzZUVy
cm9yQ29uc3RydWN0b3Igd2Via2l0SURCRGF0YWJhc2VFcnJvcjsKKyAgICAgICAgYXR0cmlidXRl
IFtFbmFibGVkQXRSdW50aW1lXSBJREJEYXRhYmFzZUV4Y2VwdGlvbkNvbnN0cnVjdG9yIHdlYmtp
dElEQkRhdGFiYXNlRXhjZXB0aW9uOworICAgICAgICBhdHRyaWJ1dGUgW0VuYWJsZWRBdFJ1bnRp
bWVdIElEQkZhY3RvcnlDb25zdHJ1Y3RvciB3ZWJraXRJREJGYWN0b3J5OworICAgICAgICBhdHRy
aWJ1dGUgW0VuYWJsZWRBdFJ1bnRpbWVdIElEQkluZGV4Q29uc3RydWN0b3Igd2Via2l0SURCSW5k
ZXg7CisgICAgICAgIGF0dHJpYnV0ZSBbRW5hYmxlZEF0UnVudGltZV0gSURCS2V5UmFuZ2VDb25z
dHJ1Y3RvciB3ZWJraXRJREJLZXlSYW5nZTsKKyAgICAgICAgYXR0cmlidXRlIFtFbmFibGVkQXRS
dW50aW1lXSBJREJPYmplY3RTdG9yZUNvbnN0cnVjdG9yIHdlYmtpdElEQk9iamVjdFN0b3JlOwor
ICAgICAgICBhdHRyaWJ1dGUgW0VuYWJsZWRBdFJ1bnRpbWVdIElEQlJlcXVlc3RDb25zdHJ1Y3Rv
ciB3ZWJraXRJREJSZXF1ZXN0OworICAgICAgICBhdHRyaWJ1dGUgW0VuYWJsZWRBdFJ1bnRpbWVd
IElEQlRyYW5zYWN0aW9uQ29uc3RydWN0b3Igd2Via2l0SURCVHJhbnNhY3Rpb247CisjZW5kaWYK
ICAgICB9OwogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9JREJG
YWN0b3J5QmFja2VuZFByb3h5LmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0lEQkZh
Y3RvcnlCYWNrZW5kUHJveHkuY3BwCmluZGV4IDdiNjAzOGIzNmFkOTQwZWM5NGExZDBkYWU1NDc0
ZGNlZWU0YTBmOWMuLjI5MWIyYjlkMmYzODJmODEzMmM0MDkwOTE5OGU2NmQwMWE0MGYwM2IgMTAw
NzU1Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0lEQkZhY3RvcnlCYWNrZW5kUHJv
eHkuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0lEQkZhY3RvcnlCYWNrZW5k
UHJveHkuY3BwCkBAIC0zMSw2ICszMSw3IEBACiAKICNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFT
RSkKIAorI2luY2x1ZGUgIkNyb3NzVGhyZWFkVGFzay5oIgogI2luY2x1ZGUgIkRPTVN0cmluZ0xp
c3QuaCIKICNpbmNsdWRlICJJREJEYXRhYmFzZUJhY2tlbmRQcm94eS5oIgogI2luY2x1ZGUgIklE
QkRhdGFiYXNlRXJyb3IuaCIKQEAgLTQ1LDYgKzQ2LDEyIEBACiAjaW5jbHVkZSAiV2ViUGVybWlz
c2lvbkNsaWVudC5oIgogI2luY2x1ZGUgIldlYlZlY3Rvci5oIgogI2luY2x1ZGUgIldlYlZpZXdJ
bXBsLmgiCisjaW5jbHVkZSAiV2ViV29ya2VyQmFzZS5oIgorI2luY2x1ZGUgIldvcmtlckNvbnRl
eHQuaCIKKyNpbmNsdWRlICJXb3JrZXJMb2FkZXJQcm94eS5oIgorI2luY2x1ZGUgIldvcmtlclNj
cmlwdENvbnRyb2xsZXIuaCIKKyNpbmNsdWRlICJXb3JrZXJUaHJlYWQuaCIKKwogCiB1c2luZyBu
YW1lc3BhY2UgV2ViQ29yZTsKIApAQCAtNzgsNiArODUsMTA4IEBAIHZvaWQgSURCRmFjdG9yeUJh
Y2tlbmRQcm94eTo6Z2V0RGF0YWJhc2VOYW1lcyhQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2Fs
bGJhY2tzCiAgICAgbV93ZWJJREJGYWN0b3J5LT5nZXREYXRhYmFzZU5hbWVzKG5ldyBXZWJJREJD
YWxsYmFja3NJbXBsKGNhbGxiYWNrcyksIG9yaWdpbiwgd2ViRnJhbWUsIGRhdGFEaXIpOwogfQog
CitzdGF0aWMgY29uc3QgY2hhciBhbGxvd0luZGV4ZWREQk1vZGVbXSA9ICJhbGxvd0luZGV4ZWRE
Qk1vZGUiOworCitjbGFzcyBBbGxvd0luZGV4ZWREQk1haW5UaHJlYWRCcmlkZ2UgOiBwdWJsaWMg
VGhyZWFkU2FmZVJlZkNvdW50ZWQ8QWxsb3dJbmRleGVkREJNYWluVGhyZWFkQnJpZGdlPiB7Citw
dWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8QWxsb3dJbmRleGVkREJNYWluVGhyZWFkQnJp
ZGdlPiBjcmVhdGUoV2ViQ29yZTo6V29ya2VyTG9hZGVyUHJveHkqIHdvcmtlckxvYWRlclByb3h5
LCBjb25zdCBXVEY6OlN0cmluZyYgbW9kZSwgTmV3V2ViQ29tbW9uV29ya2VyQ2xpZW50KiBjb21t
b25DbGllbnQsIFdlYkZyYW1lKiBmcmFtZSwgY29uc3QgU3RyaW5nJiBuYW1lKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBBbGxvd0luZGV4ZWREQk1haW5UaHJlYWRCcmlkZ2Uo
d29ya2VyTG9hZGVyUHJveHksIG1vZGUsIGNvbW1vbkNsaWVudCwgZnJhbWUsIG5hbWUpKTsKKyAg
ICB9CisKKyAgICAvLyBUaGVzZSBtZXRob2RzIGFyZSBpbnZva2VkIG9uIHRoZSB3b3JrZXIgY29u
dGV4dC4KKyAgICB2b2lkIGNhbmNlbCgpCisgICAgeworICAgICAgICBNdXRleExvY2tlciBsb2Nr
ZXIobV9tdXRleCk7CisgICAgICAgIG1fd29ya2VyTG9hZGVyUHJveHkgPSAwOworICAgIH0KKwor
ICAgIGJvb2wgcmVzdWx0KCkKKyAgICB7CisgICAgICAgIHJldHVybiBtX3Jlc3VsdDsKKyAgICB9
CisKKyAgICAvLyBUaGlzIG1ldGhvZCBpcyBpbnZva2VkIG9uIHRoZSBtYWluIHRocmVhZC4KKyAg
ICB2b2lkIHNpZ25hbENvbXBsZXRlZChib29sIHJlc3VsdCkKKyAgICB7CisgICAgICAgIE11dGV4
TG9ja2VyIGxvY2tlcihtX211dGV4KTsKKyAgICAgICAgaWYgKG1fd29ya2VyTG9hZGVyUHJveHkp
CisgICAgICAgICAgICBtX3dvcmtlckxvYWRlclByb3h5LT5wb3N0VGFza0Zvck1vZGVUb1dvcmtl
ckNvbnRleHQoCisgICAgICAgICAgICAgICAgY3JlYXRlQ2FsbGJhY2tUYXNrKCZkaWRDb21wbGV0
ZSwgQWxsb3dDcm9zc1RocmVhZEFjY2Vzcyh0aGlzKSwgcmVzdWx0KSwgbV9tb2RlKTsKKyAgICB9
CisKK3ByaXZhdGU6CisgICAgQWxsb3dJbmRleGVkREJNYWluVGhyZWFkQnJpZGdlKFdlYkNvcmU6
OldvcmtlckxvYWRlclByb3h5KiB3b3JrZXJMb2FkZXJQcm94eSwgY29uc3QgV1RGOjpTdHJpbmcm
IG1vZGUsIE5ld1dlYkNvbW1vbldvcmtlckNsaWVudCogY29tbW9uQ2xpZW50LCBXZWJGcmFtZSog
ZnJhbWUsIGNvbnN0IFN0cmluZyYgbmFtZSkKKyAgICAgICAgOiBtX3dvcmtlckxvYWRlclByb3h5
KHdvcmtlckxvYWRlclByb3h5KQorICAgICAgICAsIG1fbW9kZShtb2RlKQorICAgIHsKKyAgICAg
ICAgV2ViV29ya2VyQmFzZTo6ZGlzcGF0Y2hUYXNrVG9NYWluVGhyZWFkKAorICAgICAgICAgICAg
Y3JlYXRlQ2FsbGJhY2tUYXNrKCZhbGxvd0luZGV4ZWREQlRhc2ssIEFsbG93Q3Jvc3NUaHJlYWRB
Y2Nlc3MoY29tbW9uQ2xpZW50KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBbGxv
d0Nyb3NzVGhyZWFkQWNjZXNzKGZyYW1lKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBBbGxvd0Nyb3NzVGhyZWFkQWNjZXNzKHRoaXMpLCBuYW1lKSk7CisgICAgfQorCisgICAgc3Rh
dGljIHZvaWQgYWxsb3dJbmRleGVkREJUYXNrKFdlYkNvcmU6OlNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQqIGNvbnRleHQsIE5ld1dlYkNvbW1vbldvcmtlckNsaWVudCogY29tbW9uQ2xpZW50LCBXZWJG
cmFtZSogZnJhbWUsIFBhc3NSZWZQdHI8QWxsb3dJbmRleGVkREJNYWluVGhyZWFkQnJpZGdlPiBi
cmlkZ2UsIGNvbnN0IFN0cmluZyYgbmFtZSkKKyAgICB7CisgICAgICAgIGlmICghY29tbW9uQ2xp
ZW50KSB7CisgICAgICAgICAgICBicmlkZ2UtPnNpZ25hbENvbXBsZXRlZChmYWxzZSk7CisgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBXZWJGcmFtZUltcGwqIHdlYkZy
YW1lID0gc3RhdGljX2Nhc3Q8V2ViRnJhbWVJbXBsKj4oZnJhbWUpOworICAgICAgICBXZWJWaWV3
SW1wbCogd2ViVmlldyA9IHdlYkZyYW1lLT52aWV3SW1wbCgpOworICAgICAgICBib29sIGFsbG93
ZWQgPSAhd2ViVmlldy0+cGVybWlzc2lvbkNsaWVudCgpIHx8IHdlYlZpZXctPnBlcm1pc3Npb25D
bGllbnQoKS0+YWxsb3dJbmRleGVkREIod2ViRnJhbWUsIG5hbWUsIFdlYlNlY3VyaXR5T3JpZ2lu
KCkpOworICAgICAgICBicmlkZ2UtPnNpZ25hbENvbXBsZXRlZChhbGxvd2VkKTsKKyAgICB9CisK
KyAgICBzdGF0aWMgdm9pZCBkaWRDb21wbGV0ZShXZWJDb3JlOjpTY3JpcHRFeGVjdXRpb25Db250
ZXh0KiBjb250ZXh0LCBQYXNzUmVmUHRyPEFsbG93SW5kZXhlZERCTWFpblRocmVhZEJyaWRnZT4g
YnJpZGdlLCBib29sIHJlc3VsdCkKKyAgICB7CisgICAgICAgIGJyaWRnZS0+bV9yZXN1bHQgPSBy
ZXN1bHQ7CisgICAgfQorCisgICAgYm9vbCBtX3Jlc3VsdDsKKyAgICBNdXRleCBtX211dGV4Owor
ICAgIFdlYkNvcmU6OldvcmtlckxvYWRlclByb3h5KiBtX3dvcmtlckxvYWRlclByb3h5OworICAg
IFdURjo6U3RyaW5nIG1fbW9kZTsKK307CisKK2Jvb2wgSURCRmFjdG9yeUJhY2tlbmRQcm94eTo6
YWxsb3dJREJGcm9tV29ya2VyVGhyZWFkKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQs
IGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgV2ViU2VjdXJpdHlPcmlnaW4mKQoreworICAgIFdv
cmtlckNvbnRleHQqIHdvcmtlckNvbnRleHQgPSBzdGF0aWNfY2FzdDxXb3JrZXJDb250ZXh0Kj4o
Y29udGV4dCk7CisgICAgV2ViQ29yZTo6V29ya2VyU2NyaXB0Q29udHJvbGxlciogY29udHJvbGxl
ciA9IFdlYkNvcmU6OldvcmtlclNjcmlwdENvbnRyb2xsZXI6OmNvbnRyb2xsZXJGb3JDb250ZXh0
KCk7CisgICAgQVNTRVJUKHdvcmtlckNvbnRleHQgPT0gY29udHJvbGxlci0+d29ya2VyQ29udGV4
dCgpKTsKKyAgICBXb3JrZXJMb2FkZXJQcm94eSogd29ya2VyTG9hZGVyUHJveHkgPSAmd29ya2Vy
Q29udGV4dC0+dGhyZWFkKCktPndvcmtlckxvYWRlclByb3h5KCk7CisgICAgTmV3V2ViV29ya2Vy
QmFzZSogd2ViV29ya2VyID0gc3RhdGljX2Nhc3Q8TmV3V2ViV29ya2VyQmFzZSo+KHdvcmtlckxv
YWRlclByb3h5KTsKKyAgICBXZWJGcmFtZSogZnJhbWUgPSB3ZWJXb3JrZXItPnZpZXcoKS0+bWFp
bkZyYW1lKCk7CisgICAgTmV3V2ViQ29tbW9uV29ya2VyQ2xpZW50KiBjb21tb25DbGllbnQgPSB3
ZWJXb3JrZXItPm5ld0NvbW1vbkNsaWVudCgpOworICAgIFdlYkNvcmU6OldvcmtlclRocmVhZCog
d29ya2VyVGhyZWFkID0gd29ya2VyQ29udGV4dC0+dGhyZWFkKCk7CisgICAgV2ViQ29yZTo6V29y
a2VyUnVuTG9vcCYgcnVuTG9vcCA9IHdvcmtlclRocmVhZC0+cnVuTG9vcCgpOworICAgIFN0cmlu
ZyBtb2RlID0gYWxsb3dJbmRleGVkREJNb2RlOworICAgIG1vZGUuYXBwZW5kKFN0cmluZzo6bnVt
YmVyKHJ1bkxvb3AuY3JlYXRlVW5pcXVlSWQoKSkpOworICAgIFJlZlB0cjxBbGxvd0luZGV4ZWRE
Qk1haW5UaHJlYWRCcmlkZ2U+IGJyaWRnZSA9IEFsbG93SW5kZXhlZERCTWFpblRocmVhZEJyaWRn
ZTo6Y3JlYXRlKHdvcmtlckxvYWRlclByb3h5LCBtb2RlLCBjb21tb25DbGllbnQsIGZyYW1lLCBu
YW1lKTsKKworICAgIC8vIEVpdGhlciB0aGUgYnJpZGdlIHJldHVybnMsIG9yIHRoZSBxdWV1ZSBn
ZXRzIHRlcm1pbmF0ZWQuCisgICAgaWYgKHJ1bkxvb3AucnVuSW5Nb2RlKHdvcmtlckNvbnRleHQs
IG1vZGUpID09IE1lc3NhZ2VRdWV1ZVRlcm1pbmF0ZWQpIHsKKyAgICAgICAgYnJpZGdlLT5jYW5j
ZWwoKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHJldHVybiBicmlkZ2Ut
PnJlc3VsdCgpOworfQorCit2b2lkIElEQkZhY3RvcnlCYWNrZW5kUHJveHk6Om9wZW5Gcm9tV29y
a2VyKGNvbnN0IFN0cmluZyYgbmFtZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNr
cywgUGFzc1JlZlB0cjxTZWN1cml0eU9yaWdpbj4gcHJwT3JpZ2luLCBXb3JrZXJDb250ZXh0KiBj
b250ZXh0LCBjb25zdCBTdHJpbmcmIGRhdGFEaXIpCit7CisgICAgV2ViU2VjdXJpdHlPcmlnaW4g
b3JpZ2luKHBycE9yaWdpbik7CisgICAgaWYgKCFhbGxvd0lEQkZyb21Xb3JrZXJUaHJlYWQoY29u
dGV4dCwgbmFtZSwgb3JpZ2luKSkgeworICAgICAgICBjYWxsYmFja3MtPm9uRXJyb3IoV2ViSURC
RGF0YWJhc2VFcnJvcigwLCAiVGhlIHVzZXIgZGVuaWVkIHBlcm1pc3Npb24gdG8gYWNjZXNzIHRo
ZSBkYXRhYmFzZS4iKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgV29ya2VyTG9hZGVy
UHJveHkqIHdvcmtlckxvYWRlclByb3h5ID0gJmNvbnRleHQtPnRocmVhZCgpLT53b3JrZXJMb2Fk
ZXJQcm94eSgpOworICAgIE5ld1dlYldvcmtlckJhc2UqIHdlYldvcmtlciA9IHN0YXRpY19jYXN0
PE5ld1dlYldvcmtlckJhc2UqPih3b3JrZXJMb2FkZXJQcm94eSk7CisgICAgV2ViRnJhbWUqIHdl
YkZyYW1lID0gd2ViV29ya2VyLT52aWV3KCktPm1haW5GcmFtZSgpOworICAgIG1fd2ViSURCRmFj
dG9yeS0+b3BlbihuYW1lLCBuZXcgV2ViSURCQ2FsbGJhY2tzSW1wbChjYWxsYmFja3MpLCBvcmln
aW4sIHdlYkZyYW1lLCBkYXRhRGlyKTsKK30KKwogdm9pZCBJREJGYWN0b3J5QmFja2VuZFByb3h5
OjpvcGVuKGNvbnN0IFN0cmluZyYgbmFtZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxi
YWNrcywgUGFzc1JlZlB0cjxTZWN1cml0eU9yaWdpbj4gcHJwT3JpZ2luLCBGcmFtZSogZnJhbWUs
IGNvbnN0IFN0cmluZyYgZGF0YURpcikKIHsKICAgICBXZWJTZWN1cml0eU9yaWdpbiBvcmlnaW4o
cHJwT3JpZ2luKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0lEQkZh
Y3RvcnlCYWNrZW5kUHJveHkuaCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0lEQkZhY3Rv
cnlCYWNrZW5kUHJveHkuaAppbmRleCBlMTRiOGNlYTk4MmYzMTdlNDFkNDNhOGM5M2YxZDdkNjFm
NjcxYzMyLi4wMWFiN2E1MGY2NGU0ODMzMzJhZjA3ZWZmNzk5NWUzNzY1NmQ5MzExIDEwMDc1NQot
LS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9JREJGYWN0b3J5QmFja2VuZFByb3h5LmgK
KysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvSURCRmFjdG9yeUJhY2tlbmRQcm94eS5o
CkBAIC0zMywxMSArMzMsMTQgQEAKIAogI2luY2x1ZGUgIklEQkZhY3RvcnlCYWNrZW5kSW50ZXJm
YWNlLmgiCiAKLW5hbWVzcGFjZSBXZWJDb3JlIHsgY2xhc3MgRE9NU3RyaW5nTGlzdDsgfQorbmFt
ZXNwYWNlIFdlYkNvcmUgeworY2xhc3MgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDsKK30KIAogbmFt
ZXNwYWNlIFdlYktpdCB7CiAKIGNsYXNzIFdlYklEQkZhY3Rvcnk7CitjbGFzcyBXZWJTZWN1cml0
eU9yaWdpbjsKIAogY2xhc3MgSURCRmFjdG9yeUJhY2tlbmRQcm94eSA6IHB1YmxpYyBXZWJDb3Jl
OjpJREJGYWN0b3J5QmFja2VuZEludGVyZmFjZSB7CiBwdWJsaWM6CkBAIC00NSwxMSArNDgsMTUg
QEAgcHVibGljOgogICAgIHZpcnR1YWwgfklEQkZhY3RvcnlCYWNrZW5kUHJveHkoKTsKIAogICAg
IHZpcnR1YWwgdm9pZCBnZXREYXRhYmFzZU5hbWVzKFBhc3NSZWZQdHI8V2ViQ29yZTo6SURCQ2Fs
bGJhY2tzPiwgUGFzc1JlZlB0cjxXZWJDb3JlOjpTZWN1cml0eU9yaWdpbj4sIFdlYkNvcmU6OkZy
YW1lKiwgY29uc3QgU3RyaW5nJiBkYXRhRGlyKTsKKwogICAgIHZpcnR1YWwgdm9pZCBvcGVuKGNv
bnN0IFN0cmluZyYgbmFtZSwgUGFzc1JlZlB0cjxXZWJDb3JlOjpJREJDYWxsYmFja3M+LCBQYXNz
UmVmUHRyPFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luPiwgV2ViQ29yZTo6RnJhbWUqLCBjb25zdCBT
dHJpbmcmIGRhdGFEaXIpOworICAgIHZpcnR1YWwgdm9pZCBvcGVuRnJvbVdvcmtlcihjb25zdCBT
dHJpbmcmIG5hbWUsIFBhc3NSZWZQdHI8V2ViQ29yZTo6SURCQ2FsbGJhY2tzPiwgUGFzc1JlZlB0
cjxXZWJDb3JlOjpTZWN1cml0eU9yaWdpbj4sIFdlYkNvcmU6OldvcmtlckNvbnRleHQqLCBjb25z
dCBTdHJpbmcmIGRhdGFEaXIpOworCiAgICAgdmlydHVhbCB2b2lkIGRlbGV0ZURhdGFiYXNlKGNv
bnN0IFN0cmluZyYgbmFtZSwgUGFzc1JlZlB0cjxXZWJDb3JlOjpJREJDYWxsYmFja3M+LCBQYXNz
UmVmUHRyPFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luPiwgV2ViQ29yZTo6RnJhbWUqLCBjb25zdCBT
dHJpbmcmIGRhdGFEaXIpOwogCiBwcml2YXRlOgogICAgIElEQkZhY3RvcnlCYWNrZW5kUHJveHko
KTsKKyAgICBib29sIGFsbG93SURCRnJvbVdvcmtlclRocmVhZChXZWJDb3JlOjpTY3JpcHRFeGVj
dXRpb25Db250ZXh0KiB3b3JrZXJDb250ZXh0LCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFdl
YlNlY3VyaXR5T3JpZ2luJik7CiAKICAgICAvLyBXZSBkb24ndCBvd24gdGhpcyBwb2ludGVyICh1
bmxpa2UgYWxsIHRoZSBvdGhlciBwcm94eSBjbGFzc2VzIHdoaWNoIGRvKS4KICAgICBXZWJJREJG
YWN0b3J5KiBtX3dlYklEQkZhY3Rvcnk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>117542</attachid>
            <date>2011-12-01 19:08:19 -0800</date>
            <delta_ts>2011-12-01 19:21:31 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-73609-20111201190818.patch</filename>
            <type>text/plain</type>
            <size>22583</size>
            <attacher name="David Grogan">dgrogan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTAxNzMwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMzgxY2I1MzIxOGM1MmVl
OTFiZTIyMGRhNzI1MGM2ODQxNTY2NzM0Yy4uNTg4N2VhZDEzMTlkZWJmMDE5NWQ2ZmYzMTY2MTUx
Zjc4OWFmN2Q5NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMyIEBACisyMDExLTEyLTAxICBEYXZp
ZCBHcm9nYW4gIDxkZ3JvZ2FuQGNocm9taXVtLm9yZz4KKworICAgICAgICBBbGxvdyB3b3JrZXJz
IHRvIGFjY2VzcyBJbmRleGVkREIuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD03MzYwOQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIE5vIG5ldyB0ZXN0cyAtIHRoZXJlIHdpbGwgYmUgY2hyb21pdW0gdWkgdGVz
dHMgdGhhdCBkZXBlbmQgb24KKyAgICAgICAgd2Via2l0Lm9yZy9iLzczMjk3LgorCisgICAgICAg
ICogc3RvcmFnZS9JREJGYWN0b3J5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklEQkZhY3Rvcnk6
Om9wZW4pOiBDYWxsIG5ldyBmdW5jdGlvbiwKKyAgICAgICAgSURCRmFjdG9yeUJhY2tlbmRJbnRl
cmZhY2U6Om9wZW5Gcm9tV29ya2VyLgorICAgICAgICAqIHN0b3JhZ2UvSURCRmFjdG9yeUJhY2tl
bmRJbXBsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklEQkZhY3RvcnlCYWNrZW5kSW1wbDo6b3Bl
bik6CisgICAgICAgIChXZWJDb3JlOjpJREJGYWN0b3J5QmFja2VuZEltcGw6Om9wZW5Gcm9tV29y
a2VyKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkZhY3RvcnlCYWNrZW5kSW1wbDo6b3BlbkludGVy
bmFsKToKKyAgICAgICAgKiBzdG9yYWdlL0lEQkZhY3RvcnlCYWNrZW5kSW1wbC5oOgorICAgICAg
ICAqIHN0b3JhZ2UvSURCRmFjdG9yeUJhY2tlbmRJbnRlcmZhY2UuaDoKKyAgICAgICAgKiB3b3Jr
ZXJzL1dvcmtlckNvbnRleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V29ya2VyQ29udGV4dDo6
d2Via2l0SW5kZXhlZERCKTogU3RvcmVzCisgICAgICAgIElEQkZhY3RvcnlCYWNrZW5kSW50ZXJm
YWNlLCBpbXBsZW1lbnRlZCBieSBJREJGYWN0b3J5QmFja2VuZFByb3h5IGluCisgICAgICAgIGNo
cm9taXVtLCBpbiB0aGUgV29ya2VyQ29udGV4dC4gIEZvciB0aGUgRG9jdW1lbnQgY2FzZSBpdCBp
cyBzdG9yZWQgaW4KKyAgICAgICAgdGhlIFBhZ2VHcm91cC4gIFN0b3JpbmcgaXQgaW4gdGhlIFdv
cmtlckNvbnRleHQgY2F1c2VzIG1vcmUgbWVtb3J5CisgICAgICAgIGNodXJuLCBidXQgdGhhdCBz
aG91bGQgYmUgdHJpdmlhbC4gIEkgZG9uJ3Qga25vdyBvZiBhbnkgYmV0dGVyCisgICAgICAgIGFs
dGVybmF0aXZlcy4KKyAgICAgICAgKiB3b3JrZXJzL1dvcmtlckNvbnRleHQuaDoKKyAgICAgICAg
KiB3b3JrZXJzL1dvcmtlckNvbnRleHQuaWRsOgorCiAyMDExLTEyLTAxICBUYWthc2hpIFRveW9z
aGltYSAgPHRveW9zaGltQGNocm9taXVtLm9yZz4KIAogICAgICAgICBidWZmZXJlZEFtb3VudCBj
YWxjdWxhdGlvbiBpcyB3cm9uZyBpbiBDTE9TSU5HIGFuZCBDTE9TRUQgc3RhdGUuCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vQ2hhbmdlTG9nCmluZGV4IGZmYWYwYTI2YmVhODBkYTc5ODRkNDNiOTYwZDg5ZmJiMTIx
OWFmMDMuLmUwM2ViYjI0ZjIwMTAzOGJiYjIxMTM3NzRlN2Y1NzI3NTJkZGQ4MjkgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjggQEAKKzIwMTEtMTItMDEgIERhdmlkIEdy
b2dhbiAgPGRncm9nYW5AY2hyb21pdW0ub3JnPgorCisgICAgICAgIEFsbG93IHdvcmtlcnMgdG8g
YWNjZXNzIEluZGV4ZWREQi4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTczNjA5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgKiBzcmMvSURCRmFjdG9yeUJhY2tlbmRQcm94eS5jcHA6CisgICAgICAgIChXZWJL
aXQ6OkFsbG93SW5kZXhlZERCTWFpblRocmVhZEJyaWRnZTo6Y3JlYXRlKTogQWRhcHRlZCB0aGlz
IGNsYXNzCisgICAgICAgIGZyb20gdGhlIHZlcnNpb25zIGF0CisgICAgICAgIFdlYktpdC9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3NyYy9EYXRhYmFzZU9ic2VydmVyLmNwcAorICAgICAgICBhbmQK
KyAgICAgICAgV2ViS2l0L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0xvY2FsRmlsZVN5c3Rl
bUNocm9taXVtLmNwcAorICAgICAgICAoV2ViS2l0OjpBbGxvd0luZGV4ZWREQk1haW5UaHJlYWRC
cmlkZ2U6OmNhbmNlbCk6CisgICAgICAgIChXZWJLaXQ6OkFsbG93SW5kZXhlZERCTWFpblRocmVh
ZEJyaWRnZTo6cmVzdWx0KToKKyAgICAgICAgKFdlYktpdDo6QWxsb3dJbmRleGVkREJNYWluVGhy
ZWFkQnJpZGdlOjpzaWduYWxDb21wbGV0ZWQpOgorICAgICAgICAoV2ViS2l0OjpBbGxvd0luZGV4
ZWREQk1haW5UaHJlYWRCcmlkZ2U6OkFsbG93SW5kZXhlZERCTWFpblRocmVhZEJyaWRnZSk6Cisg
ICAgICAgIChXZWJLaXQ6OkFsbG93SW5kZXhlZERCTWFpblRocmVhZEJyaWRnZTo6YWxsb3dJbmRl
eGVkREJUYXNrKToKKyAgICAgICAgKFdlYktpdDo6QWxsb3dJbmRleGVkREJNYWluVGhyZWFkQnJp
ZGdlOjpkaWRDb21wbGV0ZSk6CisgICAgICAgIChXZWJLaXQ6OklEQkZhY3RvcnlCYWNrZW5kUHJv
eHk6OmFsbG93SURCRnJvbVdvcmtlclRocmVhZCk6CisgICAgICAgIChXZWJLaXQ6OklEQkZhY3Rv
cnlCYWNrZW5kUHJveHk6Om9wZW5Gcm9tV29ya2VyKTogVXNpbmcgdGhlIHdlYkZyYW1lCisgICAg
ICAgIGZyb20gdGhlIHdvcmtlciBzZWVtcyB0byBzYXRpc2Z5IHRoZSB3ZWFrIGNvbmRpdGlvbiBp
biBjaHJvbWl1bSB0aGF0CisgICAgICAgIG5laXRoZXIgaXQgbm9yIGl0J3MgYXNzb2NpYXRlZCBS
ZW5kZXJWaWV3IGlzIE5VTEwuCisgICAgICAgICogc3JjL0lEQkZhY3RvcnlCYWNrZW5kUHJveHku
aDoKKwogMjAxMS0xMi0wMSAgSm9jaGVuIEVpc2luZ2VyICA8am9jaGVuQGNocm9taXVtLm9yZz4K
IAogICAgICAgICBbY2hyb21pdW1dIGFkZCByZWZlcnJlciBwb2xpY3kgdG8gV2ViQ29udGV4dE1l
bnVEYXRhCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkZhY3RvcnkuY3Bw
IGIvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJGYWN0b3J5LmNwcAppbmRleCBmNTRjZjcxZWIz
ODYwZTMwZTljMDMzMDQ3NGJjNTI4MWM3N2U1Y2FjLi42ZTExNmJhMzJhM2VlNzRjNmI5MGU5OWI3
NGE1ZGU2NGQ2Nzg5Mjg4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkZh
Y3RvcnkuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCRmFjdG9yeS5jcHAKQEAg
LTQ2LDYgKzQ2LDkgQEAKICNpbmNsdWRlICJQYWdlLmgiCiAjaW5jbHVkZSAiUGFnZUdyb3VwLmgi
CiAjaW5jbHVkZSAiU2VjdXJpdHlPcmlnaW4uaCIKKyNpbmNsdWRlICJXb3JrZXJDb250ZXh0Lmgi
CisjaW5jbHVkZSAiV29ya2VyTG9hZGVyUHJveHkuaCIKKyNpbmNsdWRlICJXb3JrZXJUaHJlYWQu
aCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC03OSwyMyArODIsMjMgQEAgUGFzc1JlZlB0
cjxJREJSZXF1ZXN0PiBJREJGYWN0b3J5OjpnZXREYXRhYmFzZU5hbWVzKFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQqIGNvbnQKIAogUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBJREJGYWN0b3J5OjpvcGVu
KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIGNvbnN0IFN0cmluZyYgbmFtZSwgRXhj
ZXB0aW9uQ29kZSYgZWMpCiB7Ci0gICAgaWYgKCFjb250ZXh0LT5pc0RvY3VtZW50KCkpIHsKLSAg
ICAgICAgLy8gRklYTUU6IG1ha2UgdGhpcyB3b3JrIHdpdGggd29ya2Vycy4KLSAgICAgICAgcmV0
dXJuIDA7Ci0gICAgfQotCi0gICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gc3RhdGljX2Nhc3Q8RG9j
dW1lbnQqPihjb250ZXh0KTsKLSAgICBpZiAoIWRvY3VtZW50LT5mcmFtZSgpIHx8ICFkb2N1bWVu
dC0+cGFnZSgpKQotICAgICAgICByZXR1cm4gMDsKKyAgICBBU1NFUlQoY29udGV4dC0+aXNEb2N1
bWVudCgpIHx8IGNvbnRleHQtPmlzV29ya2VyQ29udGV4dCgpKTsKIAogICAgIGlmIChuYW1lLmlz
TnVsbCgpKSB7CiAgICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246Ok5PTl9UUkFOU0lF
TlRfRVJSOwogICAgICAgICByZXR1cm4gMDsKICAgICB9Ci0KLSAgICBSZWZQdHI8SURCUmVxdWVz
dD4gcmVxdWVzdCA9IElEQlJlcXVlc3Q6OmNyZWF0ZShkb2N1bWVudCwgSURCQW55OjpjcmVhdGUo
dGhpcyksIDApOwotICAgIEdyb3VwU2V0dGluZ3MqIGdyb3VwU2V0dGluZ3MgPSBkb2N1bWVudC0+
cGFnZSgpLT5ncm91cCgpLmdyb3VwU2V0dGluZ3MoKTsKLSAgICBtX2JhY2tlbmQtPm9wZW4obmFt
ZSwgcmVxdWVzdCwgZG9jdW1lbnQtPnNlY3VyaXR5T3JpZ2luKCksIGRvY3VtZW50LT5mcmFtZSgp
LCBncm91cFNldHRpbmdzLT5pbmRleGVkREJEYXRhYmFzZVBhdGgoKSk7CisgICAgaWYgKGNvbnRl
eHQtPmlzRG9jdW1lbnQoKSkgeworICAgICAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBzdGF0aWNf
Y2FzdDxEb2N1bWVudCo+KGNvbnRleHQpOworICAgICAgICBpZiAoIWRvY3VtZW50LT5mcmFtZSgp
IHx8ICFkb2N1bWVudC0+cGFnZSgpKQorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIEZy
YW1lKiBmcmFtZSA9IGRvY3VtZW50LT5mcmFtZSgpOworICAgICAgICBSZWZQdHI8SURCUmVxdWVz
dD4gcmVxdWVzdCA9IElEQlJlcXVlc3Q6OmNyZWF0ZShjb250ZXh0LCBJREJBbnk6OmNyZWF0ZSh0
aGlzKSwgMCk7CisgICAgICAgIG1fYmFja2VuZC0+b3BlbihuYW1lLCByZXF1ZXN0LCBjb250ZXh0
LT5zZWN1cml0eU9yaWdpbigpLCBmcmFtZSwgU3RyaW5nKCkpOworICAgICAgICByZXR1cm4gcmVx
dWVzdDsKKyAgICB9CisgICAgUmVmUHRyPElEQlJlcXVlc3Q+IHJlcXVlc3QgPSBJREJSZXF1ZXN0
OjpjcmVhdGUoY29udGV4dCwgSURCQW55OjpjcmVhdGUodGhpcyksIDApOworICAgIG1fYmFja2Vu
ZC0+b3BlbkZyb21Xb3JrZXIobmFtZSwgcmVxdWVzdCwgY29udGV4dC0+c2VjdXJpdHlPcmlnaW4o
KSwgc3RhdGljX2Nhc3Q8V29ya2VyQ29udGV4dCo+KGNvbnRleHQpLCBTdHJpbmcoKSk7CiAgICAg
cmV0dXJuIHJlcXVlc3Q7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2Uv
SURCRmFjdG9yeUJhY2tlbmRJbXBsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCRmFj
dG9yeUJhY2tlbmRJbXBsLmNwcAppbmRleCBkMTI0ODFkM2RjMTExMDhiMDY4YmI2MDFiZmMzNmY4
OGQ0YzkyZTFlLi5mOWMxNGE4NzEzYTU2NDUyZWRiYjFjNzgxNjdkYTkwOTIxYmM5MDgxIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkZhY3RvcnlCYWNrZW5kSW1wbC5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJGYWN0b3J5QmFja2VuZEltcGwuY3BwCkBA
IC0xMDAsMjYgKzEwMCwxMiBAQCB2b2lkIElEQkZhY3RvcnlCYWNrZW5kSW1wbDo6Z2V0RGF0YWJh
c2VOYW1lcyhQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzLAogCiB2b2lkIElEQkZh
Y3RvcnlCYWNrZW5kSW1wbDo6b3Blbihjb25zdCBTdHJpbmcmIG5hbWUsIFBhc3NSZWZQdHI8SURC
Q2FsbGJhY2tzPiBjYWxsYmFja3MsIFBhc3NSZWZQdHI8U2VjdXJpdHlPcmlnaW4+IHNlY3VyaXR5
T3JpZ2luLCBGcmFtZSosIGNvbnN0IFN0cmluZyYgZGF0YURpcikKIHsKLSAgICBjb25zdCBTdHJp
bmcgdW5pcXVlSWRlbnRpZmllciA9IGNvbXB1dGVVbmlxdWVJZGVudGlmaWVyKG5hbWUsIHNlY3Vy
aXR5T3JpZ2luLmdldCgpKTsKLQotICAgIElEQkRhdGFiYXNlQmFja2VuZE1hcDo6aXRlcmF0b3Ig
aXQgPSBtX2RhdGFiYXNlQmFja2VuZE1hcC5maW5kKHVuaXF1ZUlkZW50aWZpZXIpOwotICAgIGlm
IChpdCAhPSBtX2RhdGFiYXNlQmFja2VuZE1hcC5lbmQoKSkgewotICAgICAgICAvLyBJZiBpdCdz
IGFscmVhZHkgYmVlbiBvcGVuZWQsIHdlIGhhdmUgdG8gd2FpdCBmb3IgYW55IHBlbmRpbmcKLSAg
ICAgICAgLy8gc2V0VmVyc2lvbiBjYWxscyB0byBjb21wbGV0ZS4KLSAgICAgICAgaXQtPnNlY29u
ZC0+b3BlbkNvbm5lY3Rpb24oY2FsbGJhY2tzKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQot
ICAgIC8vIEZJWE1FOiBFdmVyeXRoaW5nIGZyb20gbm93IG9uIHNob3VsZCBiZSBkb25lIG9uIGFu
b3RoZXIgdGhyZWFkLgotICAgIFJlZlB0cjxJREJCYWNraW5nU3RvcmU+IGJhY2tpbmdTdG9yZSA9
IG9wZW5CYWNraW5nU3RvcmUoc2VjdXJpdHlPcmlnaW4sIGRhdGFEaXIpOwotICAgIGlmICghYmFj
a2luZ1N0b3JlKSB7Ci0gICAgICAgIGNhbGxiYWNrcy0+b25FcnJvcihJREJEYXRhYmFzZUVycm9y
OjpjcmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246OlVOS05PV05fRVJSLCAiSW50ZXJuYWwgZXJy
b3IuIikpOwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAgIG9wZW5JbnRlcm5hbChuYW1lLCBj
YWxsYmFja3MsIHNlY3VyaXR5T3JpZ2luLCBkYXRhRGlyKTsKK30KIAotICAgIFJlZlB0cjxJREJE
YXRhYmFzZUJhY2tlbmRJbXBsPiBkYXRhYmFzZUJhY2tlbmQgPSBJREJEYXRhYmFzZUJhY2tlbmRJ
bXBsOjpjcmVhdGUobmFtZSwgYmFja2luZ1N0b3JlLmdldCgpLCBtX3RyYW5zYWN0aW9uQ29vcmRp
bmF0b3IuZ2V0KCksIHRoaXMsIHVuaXF1ZUlkZW50aWZpZXIpOwotICAgIGNhbGxiYWNrcy0+b25T
dWNjZXNzKGRhdGFiYXNlQmFja2VuZC5nZXQoKSk7Ci0gICAgbV9kYXRhYmFzZUJhY2tlbmRNYXAu
c2V0KHVuaXF1ZUlkZW50aWZpZXIsIGRhdGFiYXNlQmFja2VuZC5nZXQoKSk7Cit2b2lkIElEQkZh
Y3RvcnlCYWNrZW5kSW1wbDo6b3BlbkZyb21Xb3JrZXIoY29uc3QgU3RyaW5nJiBuYW1lLCBQYXNz
UmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzLCBQYXNzUmVmUHRyPFNlY3VyaXR5T3JpZ2lu
PiBzZWN1cml0eU9yaWdpbiwgV29ya2VyQ29udGV4dCosIGNvbnN0IFN0cmluZyYgZGF0YURpcikK
K3sKKyAgICBvcGVuSW50ZXJuYWwobmFtZSwgY2FsbGJhY2tzLCBzZWN1cml0eU9yaWdpbiwgZGF0
YURpcik7CiB9CiAKIHZvaWQgSURCRmFjdG9yeUJhY2tlbmRJbXBsOjpkZWxldGVEYXRhYmFzZShj
b25zdCBTdHJpbmcmIG5hbWUsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MsIFBh
c3NSZWZQdHI8U2VjdXJpdHlPcmlnaW4+IHNlY3VyaXR5T3JpZ2luLCBGcmFtZSosIGNvbnN0IFN0
cmluZyYgZGF0YURpcikKQEAgLTE2OCw2ICsxNTQsMzAgQEAgUGFzc1JlZlB0cjxJREJCYWNraW5n
U3RvcmU+IElEQkZhY3RvcnlCYWNrZW5kSW1wbDo6b3BlbkJhY2tpbmdTdG9yZShQYXNzUmVmUHRy
PFMKICAgICByZXR1cm4gMDsKIH0KIAordm9pZCBJREJGYWN0b3J5QmFja2VuZEltcGw6Om9wZW5J
bnRlcm5hbChjb25zdCBTdHJpbmcmIG5hbWUsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxs
YmFja3MsIFBhc3NSZWZQdHI8U2VjdXJpdHlPcmlnaW4+IHNlY3VyaXR5T3JpZ2luLCBjb25zdCBT
dHJpbmcmIGRhdGFEaXIpCit7CisgICAgY29uc3QgU3RyaW5nIHVuaXF1ZUlkZW50aWZpZXIgPSBj
b21wdXRlVW5pcXVlSWRlbnRpZmllcihuYW1lLCBzZWN1cml0eU9yaWdpbi5nZXQoKSk7CisKKyAg
ICBJREJEYXRhYmFzZUJhY2tlbmRNYXA6Oml0ZXJhdG9yIGl0ID0gbV9kYXRhYmFzZUJhY2tlbmRN
YXAuZmluZCh1bmlxdWVJZGVudGlmaWVyKTsKKyAgICBpZiAoaXQgIT0gbV9kYXRhYmFzZUJhY2tl
bmRNYXAuZW5kKCkpIHsKKyAgICAgICAgLy8gSWYgaXQncyBhbHJlYWR5IGJlZW4gb3BlbmVkLCB3
ZSBoYXZlIHRvIHdhaXQgZm9yIGFueSBwZW5kaW5nCisgICAgICAgIC8vIHNldFZlcnNpb24gY2Fs
bHMgdG8gY29tcGxldGUuCisgICAgICAgIGl0LT5zZWNvbmQtPm9wZW5Db25uZWN0aW9uKGNhbGxi
YWNrcyk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvLyBGSVhNRTogRXZlcnl0aGlu
ZyBmcm9tIG5vdyBvbiBzaG91bGQgYmUgZG9uZSBvbiBhbm90aGVyIHRocmVhZC4KKyAgICBSZWZQ
dHI8SURCQmFja2luZ1N0b3JlPiBiYWNraW5nU3RvcmUgPSBvcGVuQmFja2luZ1N0b3JlKHNlY3Vy
aXR5T3JpZ2luLCBkYXRhRGlyKTsKKyAgICBpZiAoIWJhY2tpbmdTdG9yZSkgeworICAgICAgICBj
YWxsYmFja3MtPm9uRXJyb3IoSURCRGF0YWJhc2VFcnJvcjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhj
ZXB0aW9uOjpVTktOT1dOX0VSUiwgIkludGVybmFsIGVycm9yLiIpKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKworICAgIFJlZlB0cjxJREJEYXRhYmFzZUJhY2tlbmRJbXBsPiBkYXRhYmFzZUJh
Y2tlbmQgPSBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpjcmVhdGUobmFtZSwgYmFja2luZ1N0b3Jl
LmdldCgpLCBtX3RyYW5zYWN0aW9uQ29vcmRpbmF0b3IuZ2V0KCksIHRoaXMsIHVuaXF1ZUlkZW50
aWZpZXIpOworICAgIGNhbGxiYWNrcy0+b25TdWNjZXNzKGRhdGFiYXNlQmFja2VuZC5nZXQoKSk7
CisgICAgbV9kYXRhYmFzZUJhY2tlbmRNYXAuc2V0KHVuaXF1ZUlkZW50aWZpZXIsIGRhdGFiYXNl
QmFja2VuZC5nZXQoKSk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8v
IEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3Rv
cmFnZS9JREJGYWN0b3J5QmFja2VuZEltcGwuaCBiL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURC
RmFjdG9yeUJhY2tlbmRJbXBsLmgKaW5kZXggOWMyZjA3ZmI3MDU0N2EyMTAzYTRjYWQ3N2RiNTZl
NTkzZjFjNDk0YS4uNDNjZGNmOGU3OGE3MTBkMDgzODViYjQ4ZmU4ZWM2OTcyNjcyYTgwMyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJGYWN0b3J5QmFja2VuZEltcGwuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkZhY3RvcnlCYWNrZW5kSW1wbC5oCkBAIC01
NiwxMiArNTYsMTUgQEAgcHVibGljOgogICAgIHZvaWQgcmVtb3ZlSURCQmFja2luZ1N0b3JlKGNv
bnN0IFN0cmluZyYgZmlsZUlkZW50aWZpZXIpOwogCiAgICAgdmlydHVhbCB2b2lkIGdldERhdGFi
YXNlTmFtZXMoUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+LCBQYXNzUmVmUHRyPFNlY3VyaXR5T3Jp
Z2luPiwgRnJhbWUqLCBjb25zdCBTdHJpbmcmIGRhdGFEaXIpOworCiAgICAgdmlydHVhbCB2b2lk
IG9wZW4oY29uc3QgU3RyaW5nJiBuYW1lLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4sIFBhc3NS
ZWZQdHI8U2VjdXJpdHlPcmlnaW4+LCBGcmFtZSosIGNvbnN0IFN0cmluZyYgZGF0YURpcik7Cisg
ICAgdmlydHVhbCB2b2lkIG9wZW5Gcm9tV29ya2VyKGNvbnN0IFN0cmluZyYgbmFtZSwgUGFzc1Jl
ZlB0cjxJREJDYWxsYmFja3M+LCBQYXNzUmVmUHRyPFNlY3VyaXR5T3JpZ2luPiwgV29ya2VyQ29u
dGV4dCosIGNvbnN0IFN0cmluZyYgZGF0YURpcik7CiAgICAgdmlydHVhbCB2b2lkIGRlbGV0ZURh
dGFiYXNlKGNvbnN0IFN0cmluZyYgbmFtZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+LCBQYXNz
UmVmUHRyPFNlY3VyaXR5T3JpZ2luPiwgRnJhbWUqLCBjb25zdCBTdHJpbmcmIGRhdGFEaXIpOwog
CiBwcml2YXRlOgogICAgIElEQkZhY3RvcnlCYWNrZW5kSW1wbCgpOwogICAgIFBhc3NSZWZQdHI8
SURCQmFja2luZ1N0b3JlPiBvcGVuQmFja2luZ1N0b3JlKFBhc3NSZWZQdHI8U2VjdXJpdHlPcmln
aW4+LCBjb25zdCBTdHJpbmcmIGRhdGFEaXIpOworICAgIHZvaWQgb3BlbkludGVybmFsKGNvbnN0
IFN0cmluZyYgbmFtZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+LCBQYXNzUmVmUHRyPFNlY3Vy
aXR5T3JpZ2luPiwgY29uc3QgU3RyaW5nJiBkYXRhRGlyKTsKIAogICAgIHR5cGVkZWYgSGFzaE1h
cDxTdHJpbmcsIElEQkRhdGFiYXNlQmFja2VuZEltcGwqPiBJREJEYXRhYmFzZUJhY2tlbmRNYXA7
CiAgICAgSURCRGF0YWJhc2VCYWNrZW5kTWFwIG1fZGF0YWJhc2VCYWNrZW5kTWFwOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJGYWN0b3J5QmFja2VuZEludGVyZmFjZS5o
IGIvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJGYWN0b3J5QmFja2VuZEludGVyZmFjZS5oCmlu
ZGV4IGNlOWI0ZGYwY2I3ZmY2MjExODBkNWJmZDY4NzFhZWQyNDJkZDI1MWYuLjRmMWM4Mzg3MWY0
MmYzMjA5YTZiOWEyMDFhN2IwNDViOWVlZTFiNTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3N0b3JhZ2UvSURCRmFjdG9yeUJhY2tlbmRJbnRlcmZhY2UuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9zdG9yYWdlL0lEQkZhY3RvcnlCYWNrZW5kSW50ZXJmYWNlLmgKQEAgLTQwLDYgKzQwLDcgQEAg
bmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3MgRnJhbWU7CiBjbGFzcyBJREJEYXRhYmFzZTsKIGNs
YXNzIFNlY3VyaXR5T3JpZ2luOworY2xhc3MgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDsKIAogdHlw
ZWRlZiBpbnQgRXhjZXB0aW9uQ29kZTsKIApAQCAtNTMsNyArNTQsOSBAQCBwdWJsaWM6CiAgICAg
dmlydHVhbCB+SURCRmFjdG9yeUJhY2tlbmRJbnRlcmZhY2UoKSB7IH0KIAogICAgIHZpcnR1YWwg
dm9pZCBnZXREYXRhYmFzZU5hbWVzKFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiwgUGFzc1JlZlB0
cjxTZWN1cml0eU9yaWdpbj4sIEZyYW1lKiwgY29uc3QgU3RyaW5nJiBkYXRhRGlyKSA9IDA7CisK
ICAgICB2aXJ0dWFsIHZvaWQgb3Blbihjb25zdCBTdHJpbmcmIG5hbWUsIFBhc3NSZWZQdHI8SURC
Q2FsbGJhY2tzPiwgUGFzc1JlZlB0cjxTZWN1cml0eU9yaWdpbj4sIEZyYW1lKiwgY29uc3QgU3Ry
aW5nJiBkYXRhRGlyKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIG9wZW5Gcm9tV29ya2VyKGNvbnN0
IFN0cmluZyYgbmFtZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+LCBQYXNzUmVmUHRyPFNlY3Vy
aXR5T3JpZ2luPiwgV29ya2VyQ29udGV4dCosIGNvbnN0IFN0cmluZyYgZGF0YURpcikgPSAwOwog
ICAgIHZpcnR1YWwgdm9pZCBkZWxldGVEYXRhYmFzZShjb25zdCBTdHJpbmcmIG5hbWUsIFBhc3NS
ZWZQdHI8SURCQ2FsbGJhY2tzPiwgUGFzc1JlZlB0cjxTZWN1cml0eU9yaWdpbj4sIEZyYW1lKiwg
Y29uc3QgU3RyaW5nJiBkYXRhRGlyKSA9IDA7CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS93b3JrZXJzL1dvcmtlckNvbnRleHQuY3BwIGIvU291cmNlL1dlYkNvcmUvd29ya2Vycy9X
b3JrZXJDb250ZXh0LmNwcAppbmRleCA4NWFmMmY1ZjZkN2VlYWU4NTIyYmE4OTEzNjZlNzkzZDFj
ODk0MmFlLi4wMTYwM2JiYzI3Y2U4MWUyNTQxMDhjZjM2MTVjYjQ2ZGUzOTZkYTVmIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS93b3JrZXJzL1dvcmtlckNvbnRleHQuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3dvcmtlcnMvV29ya2VyQ29udGV4dC5jcHAKQEAgLTg2LDYgKzg2LDggQEAKICNp
bmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCiAjZW5kaWYKIAorI2luY2x1ZGUgIklEQkZhY3Rvcnku
aCIKKwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBDbG9zZVdvcmtlckNvbnRleHRUYXNr
IDogcHVibGljIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OlRhc2sgewpAQCAtNTIwLDYgKzUyMiwx
NiBAQCB2b2lkIFdvcmtlckNvbnRleHQ6Om5vdGlmeU9ic2VydmVyc09mU3RvcCgpCiAgICAgICAg
IGl0ZXIgPSBtX3dvcmtlck9ic2VydmVycy5iZWdpbigpOwogICAgIH0KIH0KK0lEQkZhY3Rvcnkq
IFdvcmtlckNvbnRleHQ6OndlYmtpdEluZGV4ZWREQigpIGNvbnN0Cit7CisgICAgaWYgKCFzZWN1
cml0eU9yaWdpbigpLT5jYW5BY2Nlc3NEYXRhYmFzZSgpKQorICAgICAgICByZXR1cm4gMDsKKyAg
ICBpZiAoIW1faWRiRmFjdG9yeUJhY2tlbmRJbnRlcmZhY2UpCisgICAgICAgIG1faWRiRmFjdG9y
eUJhY2tlbmRJbnRlcmZhY2UgPSBJREJGYWN0b3J5QmFja2VuZEludGVyZmFjZTo6Y3JlYXRlKCku
Z2V0KCk7CisgICAgaWYgKCFtX2lkYkZhY3RvcnkpCisgICAgICAgIG1faWRiRmFjdG9yeSA9IElE
QkZhY3Rvcnk6OmNyZWF0ZShtX2lkYkZhY3RvcnlCYWNrZW5kSW50ZXJmYWNlLmdldCgpKTsKKyAg
ICByZXR1cm4gbV9pZGJGYWN0b3J5LmdldCgpOworfQogCiBXb3JrZXJFdmVudFF1ZXVlKiBXb3Jr
ZXJDb250ZXh0OjpldmVudFF1ZXVlKCkgY29uc3QKIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3dvcmtlcnMvV29ya2VyQ29udGV4dC5oIGIvU291cmNlL1dlYkNvcmUvd29ya2Vycy9Xb3Jr
ZXJDb250ZXh0LmgKaW5kZXggNWQxNGIwNzA0YjMyMjZjZThmZjkxNzgyNDJhODAzMDQxZThlNGY4
My4uYzk0ZmEwOTc4YjNhYTA0MmU5MTIzZWJhYjM3NDAxMmFhYjRlZmQzMyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJDb250ZXh0LmgKKysrIGIvU291cmNlL1dlYkNv
cmUvd29ya2Vycy9Xb3JrZXJDb250ZXh0LmgKQEAgLTU1LDYgKzU1LDcgQEAgbmFtZXNwYWNlIFdl
YkNvcmUgewogICAgIGNsYXNzIEVudHJ5U3luYzsKICAgICBjbGFzcyBFcnJvckNhbGxiYWNrOwog
ICAgIGNsYXNzIEZpbGVTeXN0ZW1DYWxsYmFjazsKKyAgICBjbGFzcyBJREJGYWN0b3J5OwogICAg
IGNsYXNzIE5vdGlmaWNhdGlvbkNlbnRlcjsKICAgICBjbGFzcyBTY2hlZHVsZWRBY3Rpb247CiAg
ICAgY2xhc3MgV29ya2VySW5zcGVjdG9yQ29udHJvbGxlcjsKQEAgLTE3Myw2ICsxNzQsOSBAQCBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHZvaWQgcmVnaXN0ZXJPYnNlcnZlcihPYnNlcnZl
ciopOwogICAgICAgICB2b2lkIHVucmVnaXN0ZXJPYnNlcnZlcihPYnNlcnZlciopOwogICAgICAg
ICB2b2lkIG5vdGlmeU9ic2VydmVyc09mU3RvcCgpOworI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFC
QVNFKQorICAgICAgICBJREJGYWN0b3J5KiB3ZWJraXRJbmRleGVkREIoKSBjb25zdDsKKyNlbmRp
ZgogCiAgICAgcHJvdGVjdGVkOgogICAgICAgICBXb3JrZXJDb250ZXh0KGNvbnN0IEtVUkwmLCBj
b25zdCBTdHJpbmcmLCBXb3JrZXJUaHJlYWQqKTsKQEAgLTIxOCw2ICsyMjIsMTIgQEAgbmFtZXNw
YWNlIFdlYkNvcmUgewogICAgICAgICBIYXNoU2V0PE9ic2VydmVyKj4gbV93b3JrZXJPYnNlcnZl
cnM7CiAKICAgICAgICAgT3duUHRyPFdvcmtlckV2ZW50UXVldWU+IG1fZXZlbnRRdWV1ZTsKKwor
I2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQorICAgICAgICBtdXRhYmxlIFJlZlB0cjxJREJG
YWN0b3J5PiBtX2lkYkZhY3Rvcnk7CisgICAgICAgIG11dGFibGUgUmVmUHRyPElEQkZhY3RvcnlC
YWNrZW5kSW50ZXJmYWNlPiBtX2lkYkZhY3RvcnlCYWNrZW5kSW50ZXJmYWNlOworI2VuZGlmCisK
ICAgICB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS93b3JrZXJzL1dvcmtlckNvbnRleHQuaWRsIGIvU291cmNlL1dlYkNvcmUvd29ya2Vycy9X
b3JrZXJDb250ZXh0LmlkbAppbmRleCBmN2MxYmJiMjlkZGVhNjhmNjlkMzU4OTRhNGNmYTVjYjQ1
MjNlMTY1Li43MzZiYmMxMzNmN2YyMzMwZjcwYWIwNzNhODg4MDNlMDc1YWUwYWQyIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS93b3JrZXJzL1dvcmtlckNvbnRleHQuaWRsCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3dvcmtlcnMvV29ya2VyQ29udGV4dC5pZGwKQEAgLTEyNiw2ICsxMjYsMjAgQEAg
bW9kdWxlIHRocmVhZHMgewogICAgICAgICBhdHRyaWJ1dGUgRmxvYXQzMkFycmF5Q29uc3RydWN0
b3IgRmxvYXQzMkFycmF5OyAvLyBVc2FibGUgd2l0aCBuZXcgb3BlcmF0b3IKICAgICAgICAgYXR0
cmlidXRlIEZsb2F0NjRBcnJheUNvbnN0cnVjdG9yIEZsb2F0NjRBcnJheTsgLy8gVXNhYmxlIHdp
dGggbmV3IG9wZXJhdG9yCiAgICAgICAgIGF0dHJpYnV0ZSBEYXRhVmlld0NvbnN0cnVjdG9yIERh
dGFWaWV3OyAvLyBVc2FibGUgd2l0aCBuZXcgb3BlcmF0b3IKKyNpZiBkZWZpbmVkKEVOQUJMRV9J
TkRFWEVEX0RBVEFCQVNFKSAmJiBFTkFCTEVfSU5ERVhFRF9EQVRBQkFTRQorICAgICAgICByZWFk
b25seSBhdHRyaWJ1dGUgW0VuYWJsZWRBdFJ1bnRpbWVdIElEQkZhY3Rvcnkgd2Via2l0SW5kZXhl
ZERCOworCisgICAgICAgIGF0dHJpYnV0ZSBbRW5hYmxlZEF0UnVudGltZV0gSURCQ3Vyc29yQ29u
c3RydWN0b3Igd2Via2l0SURCQ3Vyc29yOworICAgICAgICBhdHRyaWJ1dGUgW0VuYWJsZWRBdFJ1
bnRpbWVdIElEQkRhdGFiYXNlQ29uc3RydWN0b3Igd2Via2l0SURCRGF0YWJhc2U7CisgICAgICAg
IGF0dHJpYnV0ZSBbRW5hYmxlZEF0UnVudGltZV0gSURCRGF0YWJhc2VFcnJvckNvbnN0cnVjdG9y
IHdlYmtpdElEQkRhdGFiYXNlRXJyb3I7CisgICAgICAgIGF0dHJpYnV0ZSBbRW5hYmxlZEF0UnVu
dGltZV0gSURCRGF0YWJhc2VFeGNlcHRpb25Db25zdHJ1Y3RvciB3ZWJraXRJREJEYXRhYmFzZUV4
Y2VwdGlvbjsKKyAgICAgICAgYXR0cmlidXRlIFtFbmFibGVkQXRSdW50aW1lXSBJREJGYWN0b3J5
Q29uc3RydWN0b3Igd2Via2l0SURCRmFjdG9yeTsKKyAgICAgICAgYXR0cmlidXRlIFtFbmFibGVk
QXRSdW50aW1lXSBJREJJbmRleENvbnN0cnVjdG9yIHdlYmtpdElEQkluZGV4OworICAgICAgICBh
dHRyaWJ1dGUgW0VuYWJsZWRBdFJ1bnRpbWVdIElEQktleVJhbmdlQ29uc3RydWN0b3Igd2Via2l0
SURCS2V5UmFuZ2U7CisgICAgICAgIGF0dHJpYnV0ZSBbRW5hYmxlZEF0UnVudGltZV0gSURCT2Jq
ZWN0U3RvcmVDb25zdHJ1Y3RvciB3ZWJraXRJREJPYmplY3RTdG9yZTsKKyAgICAgICAgYXR0cmli
dXRlIFtFbmFibGVkQXRSdW50aW1lXSBJREJSZXF1ZXN0Q29uc3RydWN0b3Igd2Via2l0SURCUmVx
dWVzdDsKKyAgICAgICAgYXR0cmlidXRlIFtFbmFibGVkQXRSdW50aW1lXSBJREJUcmFuc2FjdGlv
bkNvbnN0cnVjdG9yIHdlYmtpdElEQlRyYW5zYWN0aW9uOworI2VuZGlmCiAgICAgfTsKIAogfQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvSURCRmFjdG9yeUJhY2tlbmRQ
cm94eS5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9JREJGYWN0b3J5QmFja2VuZFBy
b3h5LmNwcAppbmRleCA3YjYwMzhiMzZhZDk0MGVjOTRhMWQwZGFlNTQ3NGRjZWVlNGEwZjljLi4y
OTFiMmI5ZDJmMzgyZjgxMzJjNDA5MDkxOThlNjZkMDFhNDBmMDNiIDEwMDc1NQotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3NyYy9JREJGYWN0b3J5QmFja2VuZFByb3h5LmNwcAorKysgYi9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9JREJGYWN0b3J5QmFja2VuZFByb3h5LmNwcApAQCAt
MzEsNiArMzEsNyBAQAogCiAjaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCiAKKyNpbmNsdWRl
ICJDcm9zc1RocmVhZFRhc2suaCIKICNpbmNsdWRlICJET01TdHJpbmdMaXN0LmgiCiAjaW5jbHVk
ZSAiSURCRGF0YWJhc2VCYWNrZW5kUHJveHkuaCIKICNpbmNsdWRlICJJREJEYXRhYmFzZUVycm9y
LmgiCkBAIC00NSw2ICs0NiwxMiBAQAogI2luY2x1ZGUgIldlYlBlcm1pc3Npb25DbGllbnQuaCIK
ICNpbmNsdWRlICJXZWJWZWN0b3IuaCIKICNpbmNsdWRlICJXZWJWaWV3SW1wbC5oIgorI2luY2x1
ZGUgIldlYldvcmtlckJhc2UuaCIKKyNpbmNsdWRlICJXb3JrZXJDb250ZXh0LmgiCisjaW5jbHVk
ZSAiV29ya2VyTG9hZGVyUHJveHkuaCIKKyNpbmNsdWRlICJXb3JrZXJTY3JpcHRDb250cm9sbGVy
LmgiCisjaW5jbHVkZSAiV29ya2VyVGhyZWFkLmgiCisKIAogdXNpbmcgbmFtZXNwYWNlIFdlYkNv
cmU7CiAKQEAgLTc4LDYgKzg1LDEwOCBAQCB2b2lkIElEQkZhY3RvcnlCYWNrZW5kUHJveHk6Omdl
dERhdGFiYXNlTmFtZXMoUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcwogICAgIG1f
d2ViSURCRmFjdG9yeS0+Z2V0RGF0YWJhc2VOYW1lcyhuZXcgV2ViSURCQ2FsbGJhY2tzSW1wbChj
YWxsYmFja3MpLCBvcmlnaW4sIHdlYkZyYW1lLCBkYXRhRGlyKTsKIH0KIAorc3RhdGljIGNvbnN0
IGNoYXIgYWxsb3dJbmRleGVkREJNb2RlW10gPSAiYWxsb3dJbmRleGVkREJNb2RlIjsKKworY2xh
c3MgQWxsb3dJbmRleGVkREJNYWluVGhyZWFkQnJpZGdlIDogcHVibGljIFRocmVhZFNhZmVSZWZD
b3VudGVkPEFsbG93SW5kZXhlZERCTWFpblRocmVhZEJyaWRnZT4geworcHVibGljOgorICAgIHN0
YXRpYyBQYXNzUmVmUHRyPEFsbG93SW5kZXhlZERCTWFpblRocmVhZEJyaWRnZT4gY3JlYXRlKFdl
YkNvcmU6OldvcmtlckxvYWRlclByb3h5KiB3b3JrZXJMb2FkZXJQcm94eSwgY29uc3QgV1RGOjpT
dHJpbmcmIG1vZGUsIE5ld1dlYkNvbW1vbldvcmtlckNsaWVudCogY29tbW9uQ2xpZW50LCBXZWJG
cmFtZSogZnJhbWUsIGNvbnN0IFN0cmluZyYgbmFtZSkKKyAgICB7CisgICAgICAgIHJldHVybiBh
ZG9wdFJlZihuZXcgQWxsb3dJbmRleGVkREJNYWluVGhyZWFkQnJpZGdlKHdvcmtlckxvYWRlclBy
b3h5LCBtb2RlLCBjb21tb25DbGllbnQsIGZyYW1lLCBuYW1lKSk7CisgICAgfQorCisgICAgLy8g
VGhlc2UgbWV0aG9kcyBhcmUgaW52b2tlZCBvbiB0aGUgd29ya2VyIGNvbnRleHQuCisgICAgdm9p
ZCBjYW5jZWwoKQorICAgIHsKKyAgICAgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1fbXV0ZXgpOwor
ICAgICAgICBtX3dvcmtlckxvYWRlclByb3h5ID0gMDsKKyAgICB9CisKKyAgICBib29sIHJlc3Vs
dCgpCisgICAgeworICAgICAgICByZXR1cm4gbV9yZXN1bHQ7CisgICAgfQorCisgICAgLy8gVGhp
cyBtZXRob2QgaXMgaW52b2tlZCBvbiB0aGUgbWFpbiB0aHJlYWQuCisgICAgdm9pZCBzaWduYWxD
b21wbGV0ZWQoYm9vbCByZXN1bHQpCisgICAgeworICAgICAgICBNdXRleExvY2tlciBsb2NrZXIo
bV9tdXRleCk7CisgICAgICAgIGlmIChtX3dvcmtlckxvYWRlclByb3h5KQorICAgICAgICAgICAg
bV93b3JrZXJMb2FkZXJQcm94eS0+cG9zdFRhc2tGb3JNb2RlVG9Xb3JrZXJDb250ZXh0KAorICAg
ICAgICAgICAgICAgIGNyZWF0ZUNhbGxiYWNrVGFzaygmZGlkQ29tcGxldGUsIEFsbG93Q3Jvc3NU
aHJlYWRBY2Nlc3ModGhpcyksIHJlc3VsdCksIG1fbW9kZSk7CisgICAgfQorCitwcml2YXRlOgor
ICAgIEFsbG93SW5kZXhlZERCTWFpblRocmVhZEJyaWRnZShXZWJDb3JlOjpXb3JrZXJMb2FkZXJQ
cm94eSogd29ya2VyTG9hZGVyUHJveHksIGNvbnN0IFdURjo6U3RyaW5nJiBtb2RlLCBOZXdXZWJD
b21tb25Xb3JrZXJDbGllbnQqIGNvbW1vbkNsaWVudCwgV2ViRnJhbWUqIGZyYW1lLCBjb25zdCBT
dHJpbmcmIG5hbWUpCisgICAgICAgIDogbV93b3JrZXJMb2FkZXJQcm94eSh3b3JrZXJMb2FkZXJQ
cm94eSkKKyAgICAgICAgLCBtX21vZGUobW9kZSkKKyAgICB7CisgICAgICAgIFdlYldvcmtlckJh
c2U6OmRpc3BhdGNoVGFza1RvTWFpblRocmVhZCgKKyAgICAgICAgICAgIGNyZWF0ZUNhbGxiYWNr
VGFzaygmYWxsb3dJbmRleGVkREJUYXNrLCBBbGxvd0Nyb3NzVGhyZWFkQWNjZXNzKGNvbW1vbkNs
aWVudCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWxsb3dDcm9zc1RocmVhZEFj
Y2VzcyhmcmFtZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWxsb3dDcm9zc1Ro
cmVhZEFjY2Vzcyh0aGlzKSwgbmFtZSkpOworICAgIH0KKworICAgIHN0YXRpYyB2b2lkIGFsbG93
SW5kZXhlZERCVGFzayhXZWJDb3JlOjpTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBO
ZXdXZWJDb21tb25Xb3JrZXJDbGllbnQqIGNvbW1vbkNsaWVudCwgV2ViRnJhbWUqIGZyYW1lLCBQ
YXNzUmVmUHRyPEFsbG93SW5kZXhlZERCTWFpblRocmVhZEJyaWRnZT4gYnJpZGdlLCBjb25zdCBT
dHJpbmcmIG5hbWUpCisgICAgeworICAgICAgICBpZiAoIWNvbW1vbkNsaWVudCkgeworICAgICAg
ICAgICAgYnJpZGdlLT5zaWduYWxDb21wbGV0ZWQoZmFsc2UpOworICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICB9CisKKyAgICAgICAgV2ViRnJhbWVJbXBsKiB3ZWJGcmFtZSA9IHN0YXRpY19j
YXN0PFdlYkZyYW1lSW1wbCo+KGZyYW1lKTsKKyAgICAgICAgV2ViVmlld0ltcGwqIHdlYlZpZXcg
PSB3ZWJGcmFtZS0+dmlld0ltcGwoKTsKKyAgICAgICAgYm9vbCBhbGxvd2VkID0gIXdlYlZpZXct
PnBlcm1pc3Npb25DbGllbnQoKSB8fCB3ZWJWaWV3LT5wZXJtaXNzaW9uQ2xpZW50KCktPmFsbG93
SW5kZXhlZERCKHdlYkZyYW1lLCBuYW1lLCBXZWJTZWN1cml0eU9yaWdpbigpKTsKKyAgICAgICAg
YnJpZGdlLT5zaWduYWxDb21wbGV0ZWQoYWxsb3dlZCk7CisgICAgfQorCisgICAgc3RhdGljIHZv
aWQgZGlkQ29tcGxldGUoV2ViQ29yZTo6U2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwg
UGFzc1JlZlB0cjxBbGxvd0luZGV4ZWREQk1haW5UaHJlYWRCcmlkZ2U+IGJyaWRnZSwgYm9vbCBy
ZXN1bHQpCisgICAgeworICAgICAgICBicmlkZ2UtPm1fcmVzdWx0ID0gcmVzdWx0OworICAgIH0K
KworICAgIGJvb2wgbV9yZXN1bHQ7CisgICAgTXV0ZXggbV9tdXRleDsKKyAgICBXZWJDb3JlOjpX
b3JrZXJMb2FkZXJQcm94eSogbV93b3JrZXJMb2FkZXJQcm94eTsKKyAgICBXVEY6OlN0cmluZyBt
X21vZGU7Cit9OworCitib29sIElEQkZhY3RvcnlCYWNrZW5kUHJveHk6OmFsbG93SURCRnJvbVdv
cmtlclRocmVhZChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBjb25zdCBTdHJpbmcm
IG5hbWUsIGNvbnN0IFdlYlNlY3VyaXR5T3JpZ2luJikKK3sKKyAgICBXb3JrZXJDb250ZXh0KiB3
b3JrZXJDb250ZXh0ID0gc3RhdGljX2Nhc3Q8V29ya2VyQ29udGV4dCo+KGNvbnRleHQpOworICAg
IFdlYkNvcmU6OldvcmtlclNjcmlwdENvbnRyb2xsZXIqIGNvbnRyb2xsZXIgPSBXZWJDb3JlOjpX
b3JrZXJTY3JpcHRDb250cm9sbGVyOjpjb250cm9sbGVyRm9yQ29udGV4dCgpOworICAgIEFTU0VS
VCh3b3JrZXJDb250ZXh0ID09IGNvbnRyb2xsZXItPndvcmtlckNvbnRleHQoKSk7CisgICAgV29y
a2VyTG9hZGVyUHJveHkqIHdvcmtlckxvYWRlclByb3h5ID0gJndvcmtlckNvbnRleHQtPnRocmVh
ZCgpLT53b3JrZXJMb2FkZXJQcm94eSgpOworICAgIE5ld1dlYldvcmtlckJhc2UqIHdlYldvcmtl
ciA9IHN0YXRpY19jYXN0PE5ld1dlYldvcmtlckJhc2UqPih3b3JrZXJMb2FkZXJQcm94eSk7Cisg
ICAgV2ViRnJhbWUqIGZyYW1lID0gd2ViV29ya2VyLT52aWV3KCktPm1haW5GcmFtZSgpOworICAg
IE5ld1dlYkNvbW1vbldvcmtlckNsaWVudCogY29tbW9uQ2xpZW50ID0gd2ViV29ya2VyLT5uZXdD
b21tb25DbGllbnQoKTsKKyAgICBXZWJDb3JlOjpXb3JrZXJUaHJlYWQqIHdvcmtlclRocmVhZCA9
IHdvcmtlckNvbnRleHQtPnRocmVhZCgpOworICAgIFdlYkNvcmU6OldvcmtlclJ1bkxvb3AmIHJ1
bkxvb3AgPSB3b3JrZXJUaHJlYWQtPnJ1bkxvb3AoKTsKKyAgICBTdHJpbmcgbW9kZSA9IGFsbG93
SW5kZXhlZERCTW9kZTsKKyAgICBtb2RlLmFwcGVuZChTdHJpbmc6Om51bWJlcihydW5Mb29wLmNy
ZWF0ZVVuaXF1ZUlkKCkpKTsKKyAgICBSZWZQdHI8QWxsb3dJbmRleGVkREJNYWluVGhyZWFkQnJp
ZGdlPiBicmlkZ2UgPSBBbGxvd0luZGV4ZWREQk1haW5UaHJlYWRCcmlkZ2U6OmNyZWF0ZSh3b3Jr
ZXJMb2FkZXJQcm94eSwgbW9kZSwgY29tbW9uQ2xpZW50LCBmcmFtZSwgbmFtZSk7CisKKyAgICAv
LyBFaXRoZXIgdGhlIGJyaWRnZSByZXR1cm5zLCBvciB0aGUgcXVldWUgZ2V0cyB0ZXJtaW5hdGVk
LgorICAgIGlmIChydW5Mb29wLnJ1bkluTW9kZSh3b3JrZXJDb250ZXh0LCBtb2RlKSA9PSBNZXNz
YWdlUXVldWVUZXJtaW5hdGVkKSB7CisgICAgICAgIGJyaWRnZS0+Y2FuY2VsKCk7CisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICByZXR1cm4gYnJpZGdlLT5yZXN1bHQoKTsKK30K
Kwordm9pZCBJREJGYWN0b3J5QmFja2VuZFByb3h5OjpvcGVuRnJvbVdvcmtlcihjb25zdCBTdHJp
bmcmIG5hbWUsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MsIFBhc3NSZWZQdHI8
U2VjdXJpdHlPcmlnaW4+IHBycE9yaWdpbiwgV29ya2VyQ29udGV4dCogY29udGV4dCwgY29uc3Qg
U3RyaW5nJiBkYXRhRGlyKQoreworICAgIFdlYlNlY3VyaXR5T3JpZ2luIG9yaWdpbihwcnBPcmln
aW4pOworICAgIGlmICghYWxsb3dJREJGcm9tV29ya2VyVGhyZWFkKGNvbnRleHQsIG5hbWUsIG9y
aWdpbikpIHsKKyAgICAgICAgY2FsbGJhY2tzLT5vbkVycm9yKFdlYklEQkRhdGFiYXNlRXJyb3Io
MCwgIlRoZSB1c2VyIGRlbmllZCBwZXJtaXNzaW9uIHRvIGFjY2VzcyB0aGUgZGF0YWJhc2UuIikp
OworICAgICAgICByZXR1cm47CisgICAgfQorICAgIFdvcmtlckxvYWRlclByb3h5KiB3b3JrZXJM
b2FkZXJQcm94eSA9ICZjb250ZXh0LT50aHJlYWQoKS0+d29ya2VyTG9hZGVyUHJveHkoKTsKKyAg
ICBOZXdXZWJXb3JrZXJCYXNlKiB3ZWJXb3JrZXIgPSBzdGF0aWNfY2FzdDxOZXdXZWJXb3JrZXJC
YXNlKj4od29ya2VyTG9hZGVyUHJveHkpOworICAgIFdlYkZyYW1lKiB3ZWJGcmFtZSA9IHdlYldv
cmtlci0+dmlldygpLT5tYWluRnJhbWUoKTsKKyAgICBtX3dlYklEQkZhY3RvcnktPm9wZW4obmFt
ZSwgbmV3IFdlYklEQkNhbGxiYWNrc0ltcGwoY2FsbGJhY2tzKSwgb3JpZ2luLCB3ZWJGcmFtZSwg
ZGF0YURpcik7Cit9CisKIHZvaWQgSURCRmFjdG9yeUJhY2tlbmRQcm94eTo6b3Blbihjb25zdCBT
dHJpbmcmIG5hbWUsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MsIFBhc3NSZWZQ
dHI8U2VjdXJpdHlPcmlnaW4+IHBycE9yaWdpbiwgRnJhbWUqIGZyYW1lLCBjb25zdCBTdHJpbmcm
IGRhdGFEaXIpCiB7CiAgICAgV2ViU2VjdXJpdHlPcmlnaW4gb3JpZ2luKHBycE9yaWdpbik7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9JREJGYWN0b3J5QmFja2VuZFBy
b3h5LmggYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9JREJGYWN0b3J5QmFja2VuZFByb3h5
LmgKaW5kZXggZTE0YjhjZWE5ODJmMzE3ZTQxZDQzYThjOTNmMWQ3ZDYxZjY3MWMzMi4uMDFhYjdh
NTBmNjRlNDgzMzMyYWYwN2VmZjc5OTVlMzc2NTZkOTMxMSAxMDA3NTUKLS0tIGEvU291cmNlL1dl
YktpdC9jaHJvbWl1bS9zcmMvSURCRmFjdG9yeUJhY2tlbmRQcm94eS5oCisrKyBiL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vc3JjL0lEQkZhY3RvcnlCYWNrZW5kUHJveHkuaApAQCAtMzMsMTEgKzMz
LDE0IEBACiAKICNpbmNsdWRlICJJREJGYWN0b3J5QmFja2VuZEludGVyZmFjZS5oIgogCi1uYW1l
c3BhY2UgV2ViQ29yZSB7IGNsYXNzIERPTVN0cmluZ0xpc3Q7IH0KK25hbWVzcGFjZSBXZWJDb3Jl
IHsKK2NsYXNzIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ7Cit9CiAKIG5hbWVzcGFjZSBXZWJLaXQg
ewogCiBjbGFzcyBXZWJJREJGYWN0b3J5OworY2xhc3MgV2ViU2VjdXJpdHlPcmlnaW47CiAKIGNs
YXNzIElEQkZhY3RvcnlCYWNrZW5kUHJveHkgOiBwdWJsaWMgV2ViQ29yZTo6SURCRmFjdG9yeUJh
Y2tlbmRJbnRlcmZhY2UgewogcHVibGljOgpAQCAtNDUsMTEgKzQ4LDE1IEBAIHB1YmxpYzoKICAg
ICB2aXJ0dWFsIH5JREJGYWN0b3J5QmFja2VuZFByb3h5KCk7CiAKICAgICB2aXJ0dWFsIHZvaWQg
Z2V0RGF0YWJhc2VOYW1lcyhQYXNzUmVmUHRyPFdlYkNvcmU6OklEQkNhbGxiYWNrcz4sIFBhc3NS
ZWZQdHI8V2ViQ29yZTo6U2VjdXJpdHlPcmlnaW4+LCBXZWJDb3JlOjpGcmFtZSosIGNvbnN0IFN0
cmluZyYgZGF0YURpcik7CisKICAgICB2aXJ0dWFsIHZvaWQgb3Blbihjb25zdCBTdHJpbmcmIG5h
bWUsIFBhc3NSZWZQdHI8V2ViQ29yZTo6SURCQ2FsbGJhY2tzPiwgUGFzc1JlZlB0cjxXZWJDb3Jl
OjpTZWN1cml0eU9yaWdpbj4sIFdlYkNvcmU6OkZyYW1lKiwgY29uc3QgU3RyaW5nJiBkYXRhRGly
KTsKKyAgICB2aXJ0dWFsIHZvaWQgb3BlbkZyb21Xb3JrZXIoY29uc3QgU3RyaW5nJiBuYW1lLCBQ
YXNzUmVmUHRyPFdlYkNvcmU6OklEQkNhbGxiYWNrcz4sIFBhc3NSZWZQdHI8V2ViQ29yZTo6U2Vj
dXJpdHlPcmlnaW4+LCBXZWJDb3JlOjpXb3JrZXJDb250ZXh0KiwgY29uc3QgU3RyaW5nJiBkYXRh
RGlyKTsKKwogICAgIHZpcnR1YWwgdm9pZCBkZWxldGVEYXRhYmFzZShjb25zdCBTdHJpbmcmIG5h
bWUsIFBhc3NSZWZQdHI8V2ViQ29yZTo6SURCQ2FsbGJhY2tzPiwgUGFzc1JlZlB0cjxXZWJDb3Jl
OjpTZWN1cml0eU9yaWdpbj4sIFdlYkNvcmU6OkZyYW1lKiwgY29uc3QgU3RyaW5nJiBkYXRhRGly
KTsKIAogcHJpdmF0ZToKICAgICBJREJGYWN0b3J5QmFja2VuZFByb3h5KCk7CisgICAgYm9vbCBh
bGxvd0lEQkZyb21Xb3JrZXJUaHJlYWQoV2ViQ29yZTo6U2NyaXB0RXhlY3V0aW9uQ29udGV4dCog
d29ya2VyQ29udGV4dCwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBXZWJTZWN1cml0eU9yaWdp
biYpOwogCiAgICAgLy8gV2UgZG9uJ3Qgb3duIHRoaXMgcG9pbnRlciAodW5saWtlIGFsbCB0aGUg
b3RoZXIgcHJveHkgY2xhc3NlcyB3aGljaCBkbykuCiAgICAgV2ViSURCRmFjdG9yeSogbV93ZWJJ
REJGYWN0b3J5Owo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>117544</attachid>
            <date>2011-12-01 19:21:34 -0800</date>
            <delta_ts>2011-12-01 20:29:07 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-73609-20111201192133.patch</filename>
            <type>text/plain</type>
            <size>22638</size>
            <attacher name="David Grogan">dgrogan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTAxNzMwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMzgxY2I1MzIxOGM1MmVl
OTFiZTIyMGRhNzI1MGM2ODQxNTY2NzM0Yy4uMWQxOGYyM2M1NzIxZDNiMjU1ZDMxZDdlZGYyNmMz
YzFhNDUzNGIzNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMyIEBACisyMDExLTEyLTAxICBEYXZp
ZCBHcm9nYW4gIDxkZ3JvZ2FuQGNocm9taXVtLm9yZz4KKworICAgICAgICBHcmFudCB3b3JrZXJz
IGV4cGVyaW1lbnRhbCBhY2Nlc3MgdG8gSW5kZXhlZERCLgorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzM2MDkKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBObyBuZXcgdGVzdHMgLSB0aGVyZSB3aWxsIGJlIGNo
cm9taXVtIHVpIHRlc3RzIHRoYXQgZGVwZW5kIG9uCisgICAgICAgIHdlYmtpdC5vcmcvYi83MzI5
Ny4KKworICAgICAgICAqIHN0b3JhZ2UvSURCRmFjdG9yeS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpJREJGYWN0b3J5OjpvcGVuKTogQ2FsbCBuZXcgZnVuY3Rpb24sCisgICAgICAgIElEQkZhY3Rv
cnlCYWNrZW5kSW50ZXJmYWNlOjpvcGVuRnJvbVdvcmtlci4KKyAgICAgICAgKiBzdG9yYWdlL0lE
QkZhY3RvcnlCYWNrZW5kSW1wbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJREJGYWN0b3J5QmFj
a2VuZEltcGw6Om9wZW4pOgorICAgICAgICAoV2ViQ29yZTo6SURCRmFjdG9yeUJhY2tlbmRJbXBs
OjpvcGVuRnJvbVdvcmtlcik6CisgICAgICAgIChXZWJDb3JlOjpJREJGYWN0b3J5QmFja2VuZElt
cGw6Om9wZW5JbnRlcm5hbCk6CisgICAgICAgICogc3RvcmFnZS9JREJGYWN0b3J5QmFja2VuZElt
cGwuaDoKKyAgICAgICAgKiBzdG9yYWdlL0lEQkZhY3RvcnlCYWNrZW5kSW50ZXJmYWNlLmg6Cisg
ICAgICAgICogd29ya2Vycy9Xb3JrZXJDb250ZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Oldv
cmtlckNvbnRleHQ6OndlYmtpdEluZGV4ZWREQik6IFN0b3JlcworICAgICAgICBJREJGYWN0b3J5
QmFja2VuZEludGVyZmFjZSwgaW1wbGVtZW50ZWQgYnkgSURCRmFjdG9yeUJhY2tlbmRQcm94eSBp
bgorICAgICAgICBjaHJvbWl1bSwgaW4gdGhlIFdvcmtlckNvbnRleHQuICBGb3IgdGhlIERvY3Vt
ZW50IGNhc2UgaXQgaXMgc3RvcmVkIGluCisgICAgICAgIHRoZSBQYWdlR3JvdXAuICBTdG9yaW5n
IGl0IGluIHRoZSBXb3JrZXJDb250ZXh0IGNhdXNlcyBtb3JlIG1lbW9yeQorICAgICAgICBjaHVy
biwgYnV0IHRoYXQgc2hvdWxkIGJlIHRyaXZpYWwuICBJIGRvbid0IGtub3cgb2YgYW55IGJldHRl
cgorICAgICAgICBhbHRlcm5hdGl2ZXMuCisgICAgICAgICogd29ya2Vycy9Xb3JrZXJDb250ZXh0
Lmg6CisgICAgICAgICogd29ya2Vycy9Xb3JrZXJDb250ZXh0LmlkbDoKKwogMjAxMS0xMi0wMSAg
VGFrYXNoaSBUb3lvc2hpbWEgIDx0b3lvc2hpbUBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgYnVm
ZmVyZWRBbW91bnQgY2FsY3VsYXRpb24gaXMgd3JvbmcgaW4gQ0xPU0lORyBhbmQgQ0xPU0VEIHN0
YXRlLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cgYi9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwppbmRleCBmZmFmMGEyNmJlYTgwZGE3OTg0ZDQz
Yjk2MGQ4OWZiYjEyMTlhZjAzLi5mYjZiOTVmYmMzOTFhM2NhYmU1ZTU4YWNmNzM5YjRjYTUwMzkw
NTI1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZworKysgYi9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI4IEBACisyMDExLTEy
LTAxICBEYXZpZCBHcm9nYW4gIDxkZ3JvZ2FuQGNocm9taXVtLm9yZz4KKworICAgICAgICBHcmFu
dCB3b3JrZXJzIGV4cGVyaW1lbnRhbCBhY2Nlc3MgdG8gSW5kZXhlZERCLgorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzM2MDkKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIHNyYy9JREJGYWN0b3J5QmFja2Vu
ZFByb3h5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6QWxsb3dJbmRleGVkREJNYWluVGhyZWFkQnJp
ZGdlOjpjcmVhdGUpOiBBZGFwdGVkIHRoaXMgY2xhc3MKKyAgICAgICAgZnJvbSB0aGUgdmVyc2lv
bnMgYXQKKyAgICAgICAgV2ViS2l0L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0RhdGFiYXNl
T2JzZXJ2ZXIuY3BwCisgICAgICAgIGFuZAorICAgICAgICBXZWJLaXQvU291cmNlL1dlYktpdC9j
aHJvbWl1bS9zcmMvTG9jYWxGaWxlU3lzdGVtQ2hyb21pdW0uY3BwCisgICAgICAgIChXZWJLaXQ6
OkFsbG93SW5kZXhlZERCTWFpblRocmVhZEJyaWRnZTo6Y2FuY2VsKToKKyAgICAgICAgKFdlYktp
dDo6QWxsb3dJbmRleGVkREJNYWluVGhyZWFkQnJpZGdlOjpyZXN1bHQpOgorICAgICAgICAoV2Vi
S2l0OjpBbGxvd0luZGV4ZWREQk1haW5UaHJlYWRCcmlkZ2U6OnNpZ25hbENvbXBsZXRlZCk6Cisg
ICAgICAgIChXZWJLaXQ6OkFsbG93SW5kZXhlZERCTWFpblRocmVhZEJyaWRnZTo6QWxsb3dJbmRl
eGVkREJNYWluVGhyZWFkQnJpZGdlKToKKyAgICAgICAgKFdlYktpdDo6QWxsb3dJbmRleGVkREJN
YWluVGhyZWFkQnJpZGdlOjphbGxvd0luZGV4ZWREQlRhc2spOgorICAgICAgICAoV2ViS2l0OjpB
bGxvd0luZGV4ZWREQk1haW5UaHJlYWRCcmlkZ2U6OmRpZENvbXBsZXRlKToKKyAgICAgICAgKFdl
YktpdDo6SURCRmFjdG9yeUJhY2tlbmRQcm94eTo6YWxsb3dJREJGcm9tV29ya2VyVGhyZWFkKToK
KyAgICAgICAgKFdlYktpdDo6SURCRmFjdG9yeUJhY2tlbmRQcm94eTo6b3BlbkZyb21Xb3JrZXIp
OiBVc2luZyB0aGUgd2ViRnJhbWUKKyAgICAgICAgZnJvbSB0aGUgd29ya2VyIHNlZW1zIHRvIHNh
dGlzZnkgdGhlIHdlYWsgY29uZGl0aW9uIGluIGNocm9taXVtIHRoYXQKKyAgICAgICAgbmVpdGhl
ciBpdCBub3IgaXQncyBhc3NvY2lhdGVkIFJlbmRlclZpZXcgaXMgTlVMTC4KKyAgICAgICAgKiBz
cmMvSURCRmFjdG9yeUJhY2tlbmRQcm94eS5oOgorCiAyMDExLTEyLTAxICBKb2NoZW4gRWlzaW5n
ZXIgIDxqb2NoZW5AY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFtjaHJvbWl1bV0gYWRkIHJlZmVy
cmVyIHBvbGljeSB0byBXZWJDb250ZXh0TWVudURhdGEKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3N0b3JhZ2UvSURCRmFjdG9yeS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkZh
Y3RvcnkuY3BwCmluZGV4IGY1NGNmNzFlYjM4NjBlMzBlOWMwMzMwNDc0YmM1MjgxYzc3ZTVjYWMu
LjZlMTE2YmEzMmEzZWU3NGM2YjkwZTk5Yjc0YTVkZTY0ZDY3ODkyODggMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCRmFjdG9yeS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
c3RvcmFnZS9JREJGYWN0b3J5LmNwcApAQCAtNDYsNiArNDYsOSBAQAogI2luY2x1ZGUgIlBhZ2Uu
aCIKICNpbmNsdWRlICJQYWdlR3JvdXAuaCIKICNpbmNsdWRlICJTZWN1cml0eU9yaWdpbi5oIgor
I2luY2x1ZGUgIldvcmtlckNvbnRleHQuaCIKKyNpbmNsdWRlICJXb3JrZXJMb2FkZXJQcm94eS5o
IgorI2luY2x1ZGUgIldvcmtlclRocmVhZC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAg
LTc5LDIzICs4MiwyMyBAQCBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IElEQkZhY3Rvcnk6OmdldERh
dGFiYXNlTmFtZXMoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udAogCiBQYXNzUmVmUHRyPElE
QlJlcXVlc3Q+IElEQkZhY3Rvcnk6Om9wZW4oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4
dCwgY29uc3QgU3RyaW5nJiBuYW1lLCBFeGNlcHRpb25Db2RlJiBlYykKIHsKLSAgICBpZiAoIWNv
bnRleHQtPmlzRG9jdW1lbnQoKSkgewotICAgICAgICAvLyBGSVhNRTogbWFrZSB0aGlzIHdvcmsg
d2l0aCB3b3JrZXJzLgotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0KLSAgICBEb2N1bWVudCog
ZG9jdW1lbnQgPSBzdGF0aWNfY2FzdDxEb2N1bWVudCo+KGNvbnRleHQpOwotICAgIGlmICghZG9j
dW1lbnQtPmZyYW1lKCkgfHwgIWRvY3VtZW50LT5wYWdlKCkpCi0gICAgICAgIHJldHVybiAwOwor
ICAgIEFTU0VSVChjb250ZXh0LT5pc0RvY3VtZW50KCkgfHwgY29udGV4dC0+aXNXb3JrZXJDb250
ZXh0KCkpOwogCiAgICAgaWYgKG5hbWUuaXNOdWxsKCkpIHsKICAgICAgICAgZWMgPSBJREJEYXRh
YmFzZUV4Y2VwdGlvbjo6Tk9OX1RSQU5TSUVOVF9FUlI7CiAgICAgICAgIHJldHVybiAwOwogICAg
IH0KLQotICAgIFJlZlB0cjxJREJSZXF1ZXN0PiByZXF1ZXN0ID0gSURCUmVxdWVzdDo6Y3JlYXRl
KGRvY3VtZW50LCBJREJBbnk6OmNyZWF0ZSh0aGlzKSwgMCk7Ci0gICAgR3JvdXBTZXR0aW5ncyog
Z3JvdXBTZXR0aW5ncyA9IGRvY3VtZW50LT5wYWdlKCktPmdyb3VwKCkuZ3JvdXBTZXR0aW5ncygp
OwotICAgIG1fYmFja2VuZC0+b3BlbihuYW1lLCByZXF1ZXN0LCBkb2N1bWVudC0+c2VjdXJpdHlP
cmlnaW4oKSwgZG9jdW1lbnQtPmZyYW1lKCksIGdyb3VwU2V0dGluZ3MtPmluZGV4ZWREQkRhdGFi
YXNlUGF0aCgpKTsKKyAgICBpZiAoY29udGV4dC0+aXNEb2N1bWVudCgpKSB7CisgICAgICAgIERv
Y3VtZW50KiBkb2N1bWVudCA9IHN0YXRpY19jYXN0PERvY3VtZW50Kj4oY29udGV4dCk7CisgICAg
ICAgIGlmICghZG9jdW1lbnQtPmZyYW1lKCkgfHwgIWRvY3VtZW50LT5wYWdlKCkpCisgICAgICAg
ICAgICByZXR1cm4gMDsKKyAgICAgICAgRnJhbWUqIGZyYW1lID0gZG9jdW1lbnQtPmZyYW1lKCk7
CisgICAgICAgIFJlZlB0cjxJREJSZXF1ZXN0PiByZXF1ZXN0ID0gSURCUmVxdWVzdDo6Y3JlYXRl
KGNvbnRleHQsIElEQkFueTo6Y3JlYXRlKHRoaXMpLCAwKTsKKyAgICAgICAgbV9iYWNrZW5kLT5v
cGVuKG5hbWUsIHJlcXVlc3QsIGNvbnRleHQtPnNlY3VyaXR5T3JpZ2luKCksIGZyYW1lLCBTdHJp
bmcoKSk7CisgICAgICAgIHJldHVybiByZXF1ZXN0OworICAgIH0KKyAgICBSZWZQdHI8SURCUmVx
dWVzdD4gcmVxdWVzdCA9IElEQlJlcXVlc3Q6OmNyZWF0ZShjb250ZXh0LCBJREJBbnk6OmNyZWF0
ZSh0aGlzKSwgMCk7CisgICAgbV9iYWNrZW5kLT5vcGVuRnJvbVdvcmtlcihuYW1lLCByZXF1ZXN0
LCBjb250ZXh0LT5zZWN1cml0eU9yaWdpbigpLCBzdGF0aWNfY2FzdDxXb3JrZXJDb250ZXh0Kj4o
Y29udGV4dCksIFN0cmluZygpKTsKICAgICByZXR1cm4gcmVxdWVzdDsKIH0KIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJGYWN0b3J5QmFja2VuZEltcGwuY3BwIGIvU291
cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJGYWN0b3J5QmFja2VuZEltcGwuY3BwCmluZGV4IGQxMjQ4
MWQzZGMxMTEwOGIwNjhiYjYwMWJmYzM2Zjg4ZDRjOTJlMWUuLmY5YzE0YTg3MTNhNTY0NTJlZGJi
MWM3ODE2N2RhOTA5MjFiYzkwODEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2Uv
SURCRmFjdG9yeUJhY2tlbmRJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lE
QkZhY3RvcnlCYWNrZW5kSW1wbC5jcHAKQEAgLTEwMCwyNiArMTAwLDEyIEBAIHZvaWQgSURCRmFj
dG9yeUJhY2tlbmRJbXBsOjpnZXREYXRhYmFzZU5hbWVzKFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tz
PiBjYWxsYmFja3MsCiAKIHZvaWQgSURCRmFjdG9yeUJhY2tlbmRJbXBsOjpvcGVuKGNvbnN0IFN0
cmluZyYgbmFtZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcywgUGFzc1JlZlB0
cjxTZWN1cml0eU9yaWdpbj4gc2VjdXJpdHlPcmlnaW4sIEZyYW1lKiwgY29uc3QgU3RyaW5nJiBk
YXRhRGlyKQogewotICAgIGNvbnN0IFN0cmluZyB1bmlxdWVJZGVudGlmaWVyID0gY29tcHV0ZVVu
aXF1ZUlkZW50aWZpZXIobmFtZSwgc2VjdXJpdHlPcmlnaW4uZ2V0KCkpOwotCi0gICAgSURCRGF0
YWJhc2VCYWNrZW5kTWFwOjppdGVyYXRvciBpdCA9IG1fZGF0YWJhc2VCYWNrZW5kTWFwLmZpbmQo
dW5pcXVlSWRlbnRpZmllcik7Ci0gICAgaWYgKGl0ICE9IG1fZGF0YWJhc2VCYWNrZW5kTWFwLmVu
ZCgpKSB7Ci0gICAgICAgIC8vIElmIGl0J3MgYWxyZWFkeSBiZWVuIG9wZW5lZCwgd2UgaGF2ZSB0
byB3YWl0IGZvciBhbnkgcGVuZGluZwotICAgICAgICAvLyBzZXRWZXJzaW9uIGNhbGxzIHRvIGNv
bXBsZXRlLgotICAgICAgICBpdC0+c2Vjb25kLT5vcGVuQ29ubmVjdGlvbihjYWxsYmFja3MpOwot
ICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgLy8gRklYTUU6IEV2ZXJ5dGhpbmcgZnJvbSBu
b3cgb24gc2hvdWxkIGJlIGRvbmUgb24gYW5vdGhlciB0aHJlYWQuCi0gICAgUmVmUHRyPElEQkJh
Y2tpbmdTdG9yZT4gYmFja2luZ1N0b3JlID0gb3BlbkJhY2tpbmdTdG9yZShzZWN1cml0eU9yaWdp
biwgZGF0YURpcik7Ci0gICAgaWYgKCFiYWNraW5nU3RvcmUpIHsKLSAgICAgICAgY2FsbGJhY2tz
LT5vbkVycm9yKElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6
VU5LTk9XTl9FUlIsICJJbnRlcm5hbCBlcnJvci4iKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9
CisgICAgb3BlbkludGVybmFsKG5hbWUsIGNhbGxiYWNrcywgc2VjdXJpdHlPcmlnaW4sIGRhdGFE
aXIpOworfQogCi0gICAgUmVmUHRyPElEQkRhdGFiYXNlQmFja2VuZEltcGw+IGRhdGFiYXNlQmFj
a2VuZCA9IElEQkRhdGFiYXNlQmFja2VuZEltcGw6OmNyZWF0ZShuYW1lLCBiYWNraW5nU3RvcmUu
Z2V0KCksIG1fdHJhbnNhY3Rpb25Db29yZGluYXRvci5nZXQoKSwgdGhpcywgdW5pcXVlSWRlbnRp
Zmllcik7Ci0gICAgY2FsbGJhY2tzLT5vblN1Y2Nlc3MoZGF0YWJhc2VCYWNrZW5kLmdldCgpKTsK
LSAgICBtX2RhdGFiYXNlQmFja2VuZE1hcC5zZXQodW5pcXVlSWRlbnRpZmllciwgZGF0YWJhc2VC
YWNrZW5kLmdldCgpKTsKK3ZvaWQgSURCRmFjdG9yeUJhY2tlbmRJbXBsOjpvcGVuRnJvbVdvcmtl
cihjb25zdCBTdHJpbmcmIG5hbWUsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3Ms
IFBhc3NSZWZQdHI8U2VjdXJpdHlPcmlnaW4+IHNlY3VyaXR5T3JpZ2luLCBXb3JrZXJDb250ZXh0
KiwgY29uc3QgU3RyaW5nJiBkYXRhRGlyKQoreworICAgIG9wZW5JbnRlcm5hbChuYW1lLCBjYWxs
YmFja3MsIHNlY3VyaXR5T3JpZ2luLCBkYXRhRGlyKTsKIH0KIAogdm9pZCBJREJGYWN0b3J5QmFj
a2VuZEltcGw6OmRlbGV0ZURhdGFiYXNlKGNvbnN0IFN0cmluZyYgbmFtZSwgUGFzc1JlZlB0cjxJ
REJDYWxsYmFja3M+IGNhbGxiYWNrcywgUGFzc1JlZlB0cjxTZWN1cml0eU9yaWdpbj4gc2VjdXJp
dHlPcmlnaW4sIEZyYW1lKiwgY29uc3QgU3RyaW5nJiBkYXRhRGlyKQpAQCAtMTY4LDYgKzE1NCwz
MCBAQCBQYXNzUmVmUHRyPElEQkJhY2tpbmdTdG9yZT4gSURCRmFjdG9yeUJhY2tlbmRJbXBsOjpv
cGVuQmFja2luZ1N0b3JlKFBhc3NSZWZQdHI8UwogICAgIHJldHVybiAwOwogfQogCit2b2lkIElE
QkZhY3RvcnlCYWNrZW5kSW1wbDo6b3BlbkludGVybmFsKGNvbnN0IFN0cmluZyYgbmFtZSwgUGFz
c1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcywgUGFzc1JlZlB0cjxTZWN1cml0eU9yaWdp
bj4gc2VjdXJpdHlPcmlnaW4sIGNvbnN0IFN0cmluZyYgZGF0YURpcikKK3sKKyAgICBjb25zdCBT
dHJpbmcgdW5pcXVlSWRlbnRpZmllciA9IGNvbXB1dGVVbmlxdWVJZGVudGlmaWVyKG5hbWUsIHNl
Y3VyaXR5T3JpZ2luLmdldCgpKTsKKworICAgIElEQkRhdGFiYXNlQmFja2VuZE1hcDo6aXRlcmF0
b3IgaXQgPSBtX2RhdGFiYXNlQmFja2VuZE1hcC5maW5kKHVuaXF1ZUlkZW50aWZpZXIpOworICAg
IGlmIChpdCAhPSBtX2RhdGFiYXNlQmFja2VuZE1hcC5lbmQoKSkgeworICAgICAgICAvLyBJZiBp
dCdzIGFscmVhZHkgYmVlbiBvcGVuZWQsIHdlIGhhdmUgdG8gd2FpdCBmb3IgYW55IHBlbmRpbmcK
KyAgICAgICAgLy8gc2V0VmVyc2lvbiBjYWxscyB0byBjb21wbGV0ZS4KKyAgICAgICAgaXQtPnNl
Y29uZC0+b3BlbkNvbm5lY3Rpb24oY2FsbGJhY2tzKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KworICAgIC8vIEZJWE1FOiBFdmVyeXRoaW5nIGZyb20gbm93IG9uIHNob3VsZCBiZSBkb25lIG9u
IGFub3RoZXIgdGhyZWFkLgorICAgIFJlZlB0cjxJREJCYWNraW5nU3RvcmU+IGJhY2tpbmdTdG9y
ZSA9IG9wZW5CYWNraW5nU3RvcmUoc2VjdXJpdHlPcmlnaW4sIGRhdGFEaXIpOworICAgIGlmICgh
YmFja2luZ1N0b3JlKSB7CisgICAgICAgIGNhbGxiYWNrcy0+b25FcnJvcihJREJEYXRhYmFzZUVy
cm9yOjpjcmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246OlVOS05PV05fRVJSLCAiSW50ZXJuYWwg
ZXJyb3IuIikpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgUmVmUHRyPElEQkRhdGFi
YXNlQmFja2VuZEltcGw+IGRhdGFiYXNlQmFja2VuZCA9IElEQkRhdGFiYXNlQmFja2VuZEltcGw6
OmNyZWF0ZShuYW1lLCBiYWNraW5nU3RvcmUuZ2V0KCksIG1fdHJhbnNhY3Rpb25Db29yZGluYXRv
ci5nZXQoKSwgdGhpcywgdW5pcXVlSWRlbnRpZmllcik7CisgICAgY2FsbGJhY2tzLT5vblN1Y2Nl
c3MoZGF0YWJhc2VCYWNrZW5kLmdldCgpKTsKKyAgICBtX2RhdGFiYXNlQmFja2VuZE1hcC5zZXQo
dW5pcXVlSWRlbnRpZmllciwgZGF0YWJhc2VCYWNrZW5kLmdldCgpKTsKK30KKwogfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gRU5BQkxFKElOREVYRURfREFUQUJBU0UpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkZhY3RvcnlCYWNrZW5kSW1wbC5oIGIv
U291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJGYWN0b3J5QmFja2VuZEltcGwuaAppbmRleCA5YzJm
MDdmYjcwNTQ3YTIxMDNhNGNhZDc3ZGI1NmU1OTNmMWM0OTRhLi40M2NkY2Y4ZTc4YTcxMGQwODM4
NWJiNDhmZThlYzY5NzI2NzJhODAzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdl
L0lEQkZhY3RvcnlCYWNrZW5kSW1wbC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURC
RmFjdG9yeUJhY2tlbmRJbXBsLmgKQEAgLTU2LDEyICs1NiwxNSBAQCBwdWJsaWM6CiAgICAgdm9p
ZCByZW1vdmVJREJCYWNraW5nU3RvcmUoY29uc3QgU3RyaW5nJiBmaWxlSWRlbnRpZmllcik7CiAK
ICAgICB2aXJ0dWFsIHZvaWQgZ2V0RGF0YWJhc2VOYW1lcyhQYXNzUmVmUHRyPElEQkNhbGxiYWNr
cz4sIFBhc3NSZWZQdHI8U2VjdXJpdHlPcmlnaW4+LCBGcmFtZSosIGNvbnN0IFN0cmluZyYgZGF0
YURpcik7CisKICAgICB2aXJ0dWFsIHZvaWQgb3Blbihjb25zdCBTdHJpbmcmIG5hbWUsIFBhc3NS
ZWZQdHI8SURCQ2FsbGJhY2tzPiwgUGFzc1JlZlB0cjxTZWN1cml0eU9yaWdpbj4sIEZyYW1lKiwg
Y29uc3QgU3RyaW5nJiBkYXRhRGlyKTsKKyAgICB2aXJ0dWFsIHZvaWQgb3BlbkZyb21Xb3JrZXIo
Y29uc3QgU3RyaW5nJiBuYW1lLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4sIFBhc3NSZWZQdHI8
U2VjdXJpdHlPcmlnaW4+LCBXb3JrZXJDb250ZXh0KiwgY29uc3QgU3RyaW5nJiBkYXRhRGlyKTsK
ICAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlRGF0YWJhc2UoY29uc3QgU3RyaW5nJiBuYW1lLCBQYXNz
UmVmUHRyPElEQkNhbGxiYWNrcz4sIFBhc3NSZWZQdHI8U2VjdXJpdHlPcmlnaW4+LCBGcmFtZSos
IGNvbnN0IFN0cmluZyYgZGF0YURpcik7CiAKIHByaXZhdGU6CiAgICAgSURCRmFjdG9yeUJhY2tl
bmRJbXBsKCk7CiAgICAgUGFzc1JlZlB0cjxJREJCYWNraW5nU3RvcmU+IG9wZW5CYWNraW5nU3Rv
cmUoUGFzc1JlZlB0cjxTZWN1cml0eU9yaWdpbj4sIGNvbnN0IFN0cmluZyYgZGF0YURpcik7Cisg
ICAgdm9pZCBvcGVuSW50ZXJuYWwoY29uc3QgU3RyaW5nJiBuYW1lLCBQYXNzUmVmUHRyPElEQkNh
bGxiYWNrcz4sIFBhc3NSZWZQdHI8U2VjdXJpdHlPcmlnaW4+LCBjb25zdCBTdHJpbmcmIGRhdGFE
aXIpOwogCiAgICAgdHlwZWRlZiBIYXNoTWFwPFN0cmluZywgSURCRGF0YWJhc2VCYWNrZW5kSW1w
bCo+IElEQkRhdGFiYXNlQmFja2VuZE1hcDsKICAgICBJREJEYXRhYmFzZUJhY2tlbmRNYXAgbV9k
YXRhYmFzZUJhY2tlbmRNYXA7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lE
QkZhY3RvcnlCYWNrZW5kSW50ZXJmYWNlLmggYi9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkZh
Y3RvcnlCYWNrZW5kSW50ZXJmYWNlLmgKaW5kZXggY2U5YjRkZjBjYjdmZjYyMTE4MGQ1YmZkNjg3
MWFlZDI0MmRkMjUxZi4uNGYxYzgzODcxZjQyZjMyMDlhNmI5YTIwMWE3YjA0NWI5ZWVlMWI1NSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJGYWN0b3J5QmFja2VuZEludGVy
ZmFjZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCRmFjdG9yeUJhY2tlbmRJbnRl
cmZhY2UuaApAQCAtNDAsNiArNDAsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBGcmFt
ZTsKIGNsYXNzIElEQkRhdGFiYXNlOwogY2xhc3MgU2VjdXJpdHlPcmlnaW47CitjbGFzcyBTY3Jp
cHRFeGVjdXRpb25Db250ZXh0OwogCiB0eXBlZGVmIGludCBFeGNlcHRpb25Db2RlOwogCkBAIC01
Myw3ICs1NCw5IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIH5JREJGYWN0b3J5QmFja2VuZEludGVy
ZmFjZSgpIHsgfQogCiAgICAgdmlydHVhbCB2b2lkIGdldERhdGFiYXNlTmFtZXMoUGFzc1JlZlB0
cjxJREJDYWxsYmFja3M+LCBQYXNzUmVmUHRyPFNlY3VyaXR5T3JpZ2luPiwgRnJhbWUqLCBjb25z
dCBTdHJpbmcmIGRhdGFEaXIpID0gMDsKKwogICAgIHZpcnR1YWwgdm9pZCBvcGVuKGNvbnN0IFN0
cmluZyYgbmFtZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+LCBQYXNzUmVmUHRyPFNlY3VyaXR5
T3JpZ2luPiwgRnJhbWUqLCBjb25zdCBTdHJpbmcmIGRhdGFEaXIpID0gMDsKKyAgICB2aXJ0dWFs
IHZvaWQgb3BlbkZyb21Xb3JrZXIoY29uc3QgU3RyaW5nJiBuYW1lLCBQYXNzUmVmUHRyPElEQkNh
bGxiYWNrcz4sIFBhc3NSZWZQdHI8U2VjdXJpdHlPcmlnaW4+LCBXb3JrZXJDb250ZXh0KiwgY29u
c3QgU3RyaW5nJiBkYXRhRGlyKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIGRlbGV0ZURhdGFiYXNl
KGNvbnN0IFN0cmluZyYgbmFtZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+LCBQYXNzUmVmUHRy
PFNlY3VyaXR5T3JpZ2luPiwgRnJhbWUqLCBjb25zdCBTdHJpbmcmIGRhdGFEaXIpID0gMDsKIH07
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMvV29ya2VyQ29udGV4dC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS93b3JrZXJzL1dvcmtlckNvbnRleHQuY3BwCmluZGV4IDg1YWYyZjVm
NmQ3ZWVhZTg1MjJiYTg5MTM2NmU3OTNkMWM4OTQyYWUuLmYzZmJjZmY1M2Q5OWYxMWZkZjZmZDY3
ODc5MjhjODBkOGMxOTMzODQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMvV29y
a2VyQ29udGV4dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJDb250ZXh0
LmNwcApAQCAtODYsNiArODYsOCBAQAogI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKICNlbmRp
ZgogCisjaW5jbHVkZSAiSURCRmFjdG9yeS5oIgorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNs
YXNzIENsb3NlV29ya2VyQ29udGV4dFRhc2sgOiBwdWJsaWMgU2NyaXB0RXhlY3V0aW9uQ29udGV4
dDo6VGFzayB7CkBAIC01MjEsNiArNTIzLDE5IEBAIHZvaWQgV29ya2VyQ29udGV4dDo6bm90aWZ5
T2JzZXJ2ZXJzT2ZTdG9wKCkKICAgICB9CiB9CiAKKyNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFT
RSkKK0lEQkZhY3RvcnkqIFdvcmtlckNvbnRleHQ6OndlYmtpdEluZGV4ZWREQigpIGNvbnN0Cit7
CisgICAgaWYgKCFzZWN1cml0eU9yaWdpbigpLT5jYW5BY2Nlc3NEYXRhYmFzZSgpKQorICAgICAg
ICByZXR1cm4gMDsKKyAgICBpZiAoIW1faWRiRmFjdG9yeUJhY2tlbmRJbnRlcmZhY2UpCisgICAg
ICAgIG1faWRiRmFjdG9yeUJhY2tlbmRJbnRlcmZhY2UgPSBJREJGYWN0b3J5QmFja2VuZEludGVy
ZmFjZTo6Y3JlYXRlKCkuZ2V0KCk7CisgICAgaWYgKCFtX2lkYkZhY3RvcnkpCisgICAgICAgIG1f
aWRiRmFjdG9yeSA9IElEQkZhY3Rvcnk6OmNyZWF0ZShtX2lkYkZhY3RvcnlCYWNrZW5kSW50ZXJm
YWNlLmdldCgpKTsKKyAgICByZXR1cm4gbV9pZGJGYWN0b3J5LmdldCgpOworfQorI2VuZGlmCisK
IFdvcmtlckV2ZW50UXVldWUqIFdvcmtlckNvbnRleHQ6OmV2ZW50UXVldWUoKSBjb25zdAogewog
ICAgIHJldHVybiBtX2V2ZW50UXVldWUuZ2V0KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS93b3JrZXJzL1dvcmtlckNvbnRleHQuaCBiL1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMvV29ya2Vy
Q29udGV4dC5oCmluZGV4IDVkMTRiMDcwNGIzMjI2Y2U4ZmY5MTc4MjQyYTgwMzA0MWU4ZTRmODMu
LmM5NGZhMDk3OGIzYWEwNDJlOTEyM2ViYWIzNzQwMTJhYWI0ZWZkMzMgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3dvcmtlcnMvV29ya2VyQ29udGV4dC5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3dvcmtlcnMvV29ya2VyQ29udGV4dC5oCkBAIC01NSw2ICs1NSw3IEBAIG5hbWVzcGFjZSBXZWJD
b3JlIHsKICAgICBjbGFzcyBFbnRyeVN5bmM7CiAgICAgY2xhc3MgRXJyb3JDYWxsYmFjazsKICAg
ICBjbGFzcyBGaWxlU3lzdGVtQ2FsbGJhY2s7CisgICAgY2xhc3MgSURCRmFjdG9yeTsKICAgICBj
bGFzcyBOb3RpZmljYXRpb25DZW50ZXI7CiAgICAgY2xhc3MgU2NoZWR1bGVkQWN0aW9uOwogICAg
IGNsYXNzIFdvcmtlckluc3BlY3RvckNvbnRyb2xsZXI7CkBAIC0xNzMsNiArMTc0LDkgQEAgbmFt
ZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB2b2lkIHJlZ2lzdGVyT2JzZXJ2ZXIoT2JzZXJ2ZXIq
KTsKICAgICAgICAgdm9pZCB1bnJlZ2lzdGVyT2JzZXJ2ZXIoT2JzZXJ2ZXIqKTsKICAgICAgICAg
dm9pZCBub3RpZnlPYnNlcnZlcnNPZlN0b3AoKTsKKyNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFT
RSkKKyAgICAgICAgSURCRmFjdG9yeSogd2Via2l0SW5kZXhlZERCKCkgY29uc3Q7CisjZW5kaWYK
IAogICAgIHByb3RlY3RlZDoKICAgICAgICAgV29ya2VyQ29udGV4dChjb25zdCBLVVJMJiwgY29u
c3QgU3RyaW5nJiwgV29ya2VyVGhyZWFkKik7CkBAIC0yMTgsNiArMjIyLDEyIEBAIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKICAgICAgICAgSGFzaFNldDxPYnNlcnZlcio+IG1fd29ya2VyT2JzZXJ2ZXJz
OwogCiAgICAgICAgIE93blB0cjxXb3JrZXJFdmVudFF1ZXVlPiBtX2V2ZW50UXVldWU7CisKKyNp
ZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKKyAgICAgICAgbXV0YWJsZSBSZWZQdHI8SURCRmFj
dG9yeT4gbV9pZGJGYWN0b3J5OworICAgICAgICBtdXRhYmxlIFJlZlB0cjxJREJGYWN0b3J5QmFj
a2VuZEludGVyZmFjZT4gbV9pZGJGYWN0b3J5QmFja2VuZEludGVyZmFjZTsKKyNlbmRpZgorCiAg
ICAgfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvd29ya2Vycy9Xb3JrZXJDb250ZXh0LmlkbCBiL1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMvV29y
a2VyQ29udGV4dC5pZGwKaW5kZXggZjdjMWJiYjI5ZGRlYTY4ZjY5ZDM1ODk0YTRjZmE1Y2I0NTIz
ZTE2NS4uNzM2YmJjMTMzZjdmMjMzMGY3MGFiMDczYTg4ODAzZTA3NWFlMGFkMiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJDb250ZXh0LmlkbAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS93b3JrZXJzL1dvcmtlckNvbnRleHQuaWRsCkBAIC0xMjYsNiArMTI2LDIwIEBAIG1v
ZHVsZSB0aHJlYWRzIHsKICAgICAgICAgYXR0cmlidXRlIEZsb2F0MzJBcnJheUNvbnN0cnVjdG9y
IEZsb2F0MzJBcnJheTsgLy8gVXNhYmxlIHdpdGggbmV3IG9wZXJhdG9yCiAgICAgICAgIGF0dHJp
YnV0ZSBGbG9hdDY0QXJyYXlDb25zdHJ1Y3RvciBGbG9hdDY0QXJyYXk7IC8vIFVzYWJsZSB3aXRo
IG5ldyBvcGVyYXRvcgogICAgICAgICBhdHRyaWJ1dGUgRGF0YVZpZXdDb25zdHJ1Y3RvciBEYXRh
VmlldzsgLy8gVXNhYmxlIHdpdGggbmV3IG9wZXJhdG9yCisjaWYgZGVmaW5lZChFTkFCTEVfSU5E
RVhFRF9EQVRBQkFTRSkgJiYgRU5BQkxFX0lOREVYRURfREFUQUJBU0UKKyAgICAgICAgcmVhZG9u
bHkgYXR0cmlidXRlIFtFbmFibGVkQXRSdW50aW1lXSBJREJGYWN0b3J5IHdlYmtpdEluZGV4ZWRE
QjsKKworICAgICAgICBhdHRyaWJ1dGUgW0VuYWJsZWRBdFJ1bnRpbWVdIElEQkN1cnNvckNvbnN0
cnVjdG9yIHdlYmtpdElEQkN1cnNvcjsKKyAgICAgICAgYXR0cmlidXRlIFtFbmFibGVkQXRSdW50
aW1lXSBJREJEYXRhYmFzZUNvbnN0cnVjdG9yIHdlYmtpdElEQkRhdGFiYXNlOworICAgICAgICBh
dHRyaWJ1dGUgW0VuYWJsZWRBdFJ1bnRpbWVdIElEQkRhdGFiYXNlRXJyb3JDb25zdHJ1Y3RvciB3
ZWJraXRJREJEYXRhYmFzZUVycm9yOworICAgICAgICBhdHRyaWJ1dGUgW0VuYWJsZWRBdFJ1bnRp
bWVdIElEQkRhdGFiYXNlRXhjZXB0aW9uQ29uc3RydWN0b3Igd2Via2l0SURCRGF0YWJhc2VFeGNl
cHRpb247CisgICAgICAgIGF0dHJpYnV0ZSBbRW5hYmxlZEF0UnVudGltZV0gSURCRmFjdG9yeUNv
bnN0cnVjdG9yIHdlYmtpdElEQkZhY3Rvcnk7CisgICAgICAgIGF0dHJpYnV0ZSBbRW5hYmxlZEF0
UnVudGltZV0gSURCSW5kZXhDb25zdHJ1Y3RvciB3ZWJraXRJREJJbmRleDsKKyAgICAgICAgYXR0
cmlidXRlIFtFbmFibGVkQXRSdW50aW1lXSBJREJLZXlSYW5nZUNvbnN0cnVjdG9yIHdlYmtpdElE
QktleVJhbmdlOworICAgICAgICBhdHRyaWJ1dGUgW0VuYWJsZWRBdFJ1bnRpbWVdIElEQk9iamVj
dFN0b3JlQ29uc3RydWN0b3Igd2Via2l0SURCT2JqZWN0U3RvcmU7CisgICAgICAgIGF0dHJpYnV0
ZSBbRW5hYmxlZEF0UnVudGltZV0gSURCUmVxdWVzdENvbnN0cnVjdG9yIHdlYmtpdElEQlJlcXVl
c3Q7CisgICAgICAgIGF0dHJpYnV0ZSBbRW5hYmxlZEF0UnVudGltZV0gSURCVHJhbnNhY3Rpb25D
b25zdHJ1Y3RvciB3ZWJraXRJREJUcmFuc2FjdGlvbjsKKyNlbmRpZgogICAgIH07CiAKIH0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0lEQkZhY3RvcnlCYWNrZW5kUHJv
eHkuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvSURCRmFjdG9yeUJhY2tlbmRQcm94
eS5jcHAKaW5kZXggN2I2MDM4YjM2YWQ5NDBlYzk0YTFkMGRhZTU0NzRkY2VlZTRhMGY5Yy4uMjkx
YjJiOWQyZjM4MmY4MTMyYzQwOTA5MTk4ZTY2ZDAxYTQwZjAzYiAxMDA3NTUKLS0tIGEvU291cmNl
L1dlYktpdC9jaHJvbWl1bS9zcmMvSURCRmFjdG9yeUJhY2tlbmRQcm94eS5jcHAKKysrIGIvU291
cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvSURCRmFjdG9yeUJhY2tlbmRQcm94eS5jcHAKQEAgLTMx
LDYgKzMxLDcgQEAKIAogI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQogCisjaW5jbHVkZSAi
Q3Jvc3NUaHJlYWRUYXNrLmgiCiAjaW5jbHVkZSAiRE9NU3RyaW5nTGlzdC5oIgogI2luY2x1ZGUg
IklEQkRhdGFiYXNlQmFja2VuZFByb3h5LmgiCiAjaW5jbHVkZSAiSURCRGF0YWJhc2VFcnJvci5o
IgpAQCAtNDUsNiArNDYsMTIgQEAKICNpbmNsdWRlICJXZWJQZXJtaXNzaW9uQ2xpZW50LmgiCiAj
aW5jbHVkZSAiV2ViVmVjdG9yLmgiCiAjaW5jbHVkZSAiV2ViVmlld0ltcGwuaCIKKyNpbmNsdWRl
ICJXZWJXb3JrZXJCYXNlLmgiCisjaW5jbHVkZSAiV29ya2VyQ29udGV4dC5oIgorI2luY2x1ZGUg
IldvcmtlckxvYWRlclByb3h5LmgiCisjaW5jbHVkZSAiV29ya2VyU2NyaXB0Q29udHJvbGxlci5o
IgorI2luY2x1ZGUgIldvcmtlclRocmVhZC5oIgorCiAKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3Jl
OwogCkBAIC03OCw2ICs4NSwxMDggQEAgdm9pZCBJREJGYWN0b3J5QmFja2VuZFByb3h5OjpnZXRE
YXRhYmFzZU5hbWVzKFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MKICAgICBtX3dl
YklEQkZhY3RvcnktPmdldERhdGFiYXNlTmFtZXMobmV3IFdlYklEQkNhbGxiYWNrc0ltcGwoY2Fs
bGJhY2tzKSwgb3JpZ2luLCB3ZWJGcmFtZSwgZGF0YURpcik7CiB9CiAKK3N0YXRpYyBjb25zdCBj
aGFyIGFsbG93SW5kZXhlZERCTW9kZVtdID0gImFsbG93SW5kZXhlZERCTW9kZSI7CisKK2NsYXNz
IEFsbG93SW5kZXhlZERCTWFpblRocmVhZEJyaWRnZSA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291
bnRlZDxBbGxvd0luZGV4ZWREQk1haW5UaHJlYWRCcmlkZ2U+IHsKK3B1YmxpYzoKKyAgICBzdGF0
aWMgUGFzc1JlZlB0cjxBbGxvd0luZGV4ZWREQk1haW5UaHJlYWRCcmlkZ2U+IGNyZWF0ZShXZWJD
b3JlOjpXb3JrZXJMb2FkZXJQcm94eSogd29ya2VyTG9hZGVyUHJveHksIGNvbnN0IFdURjo6U3Ry
aW5nJiBtb2RlLCBOZXdXZWJDb21tb25Xb3JrZXJDbGllbnQqIGNvbW1vbkNsaWVudCwgV2ViRnJh
bWUqIGZyYW1lLCBjb25zdCBTdHJpbmcmIG5hbWUpCisgICAgeworICAgICAgICByZXR1cm4gYWRv
cHRSZWYobmV3IEFsbG93SW5kZXhlZERCTWFpblRocmVhZEJyaWRnZSh3b3JrZXJMb2FkZXJQcm94
eSwgbW9kZSwgY29tbW9uQ2xpZW50LCBmcmFtZSwgbmFtZSkpOworICAgIH0KKworICAgIC8vIFRo
ZXNlIG1ldGhvZHMgYXJlIGludm9rZWQgb24gdGhlIHdvcmtlciBjb250ZXh0LgorICAgIHZvaWQg
Y2FuY2VsKCkKKyAgICB7CisgICAgICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX211dGV4KTsKKyAg
ICAgICAgbV93b3JrZXJMb2FkZXJQcm94eSA9IDA7CisgICAgfQorCisgICAgYm9vbCByZXN1bHQo
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fcmVzdWx0OworICAgIH0KKworICAgIC8vIFRoaXMg
bWV0aG9kIGlzIGludm9rZWQgb24gdGhlIG1haW4gdGhyZWFkLgorICAgIHZvaWQgc2lnbmFsQ29t
cGxldGVkKGJvb2wgcmVzdWx0KQorICAgIHsKKyAgICAgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1f
bXV0ZXgpOworICAgICAgICBpZiAobV93b3JrZXJMb2FkZXJQcm94eSkKKyAgICAgICAgICAgIG1f
d29ya2VyTG9hZGVyUHJveHktPnBvc3RUYXNrRm9yTW9kZVRvV29ya2VyQ29udGV4dCgKKyAgICAg
ICAgICAgICAgICBjcmVhdGVDYWxsYmFja1Rhc2soJmRpZENvbXBsZXRlLCBBbGxvd0Nyb3NzVGhy
ZWFkQWNjZXNzKHRoaXMpLCByZXN1bHQpLCBtX21vZGUpOworICAgIH0KKworcHJpdmF0ZToKKyAg
ICBBbGxvd0luZGV4ZWREQk1haW5UaHJlYWRCcmlkZ2UoV2ViQ29yZTo6V29ya2VyTG9hZGVyUHJv
eHkqIHdvcmtlckxvYWRlclByb3h5LCBjb25zdCBXVEY6OlN0cmluZyYgbW9kZSwgTmV3V2ViQ29t
bW9uV29ya2VyQ2xpZW50KiBjb21tb25DbGllbnQsIFdlYkZyYW1lKiBmcmFtZSwgY29uc3QgU3Ry
aW5nJiBuYW1lKQorICAgICAgICA6IG1fd29ya2VyTG9hZGVyUHJveHkod29ya2VyTG9hZGVyUHJv
eHkpCisgICAgICAgICwgbV9tb2RlKG1vZGUpCisgICAgeworICAgICAgICBXZWJXb3JrZXJCYXNl
OjpkaXNwYXRjaFRhc2tUb01haW5UaHJlYWQoCisgICAgICAgICAgICBjcmVhdGVDYWxsYmFja1Rh
c2soJmFsbG93SW5kZXhlZERCVGFzaywgQWxsb3dDcm9zc1RocmVhZEFjY2Vzcyhjb21tb25DbGll
bnQpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFsbG93Q3Jvc3NUaHJlYWRBY2Nl
c3MoZnJhbWUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFsbG93Q3Jvc3NUaHJl
YWRBY2Nlc3ModGhpcyksIG5hbWUpKTsKKyAgICB9CisKKyAgICBzdGF0aWMgdm9pZCBhbGxvd0lu
ZGV4ZWREQlRhc2soV2ViQ29yZTo6U2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgTmV3
V2ViQ29tbW9uV29ya2VyQ2xpZW50KiBjb21tb25DbGllbnQsIFdlYkZyYW1lKiBmcmFtZSwgUGFz
c1JlZlB0cjxBbGxvd0luZGV4ZWREQk1haW5UaHJlYWRCcmlkZ2U+IGJyaWRnZSwgY29uc3QgU3Ry
aW5nJiBuYW1lKQorICAgIHsKKyAgICAgICAgaWYgKCFjb21tb25DbGllbnQpIHsKKyAgICAgICAg
ICAgIGJyaWRnZS0+c2lnbmFsQ29tcGxldGVkKGZhbHNlKTsKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgfQorCisgICAgICAgIFdlYkZyYW1lSW1wbCogd2ViRnJhbWUgPSBzdGF0aWNfY2Fz
dDxXZWJGcmFtZUltcGwqPihmcmFtZSk7CisgICAgICAgIFdlYlZpZXdJbXBsKiB3ZWJWaWV3ID0g
d2ViRnJhbWUtPnZpZXdJbXBsKCk7CisgICAgICAgIGJvb2wgYWxsb3dlZCA9ICF3ZWJWaWV3LT5w
ZXJtaXNzaW9uQ2xpZW50KCkgfHwgd2ViVmlldy0+cGVybWlzc2lvbkNsaWVudCgpLT5hbGxvd0lu
ZGV4ZWREQih3ZWJGcmFtZSwgbmFtZSwgV2ViU2VjdXJpdHlPcmlnaW4oKSk7CisgICAgICAgIGJy
aWRnZS0+c2lnbmFsQ29tcGxldGVkKGFsbG93ZWQpOworICAgIH0KKworICAgIHN0YXRpYyB2b2lk
IGRpZENvbXBsZXRlKFdlYkNvcmU6OlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIFBh
c3NSZWZQdHI8QWxsb3dJbmRleGVkREJNYWluVGhyZWFkQnJpZGdlPiBicmlkZ2UsIGJvb2wgcmVz
dWx0KQorICAgIHsKKyAgICAgICAgYnJpZGdlLT5tX3Jlc3VsdCA9IHJlc3VsdDsKKyAgICB9CisK
KyAgICBib29sIG1fcmVzdWx0OworICAgIE11dGV4IG1fbXV0ZXg7CisgICAgV2ViQ29yZTo6V29y
a2VyTG9hZGVyUHJveHkqIG1fd29ya2VyTG9hZGVyUHJveHk7CisgICAgV1RGOjpTdHJpbmcgbV9t
b2RlOworfTsKKworYm9vbCBJREJGYWN0b3J5QmFja2VuZFByb3h5OjphbGxvd0lEQkZyb21Xb3Jr
ZXJUaHJlYWQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgY29uc3QgU3RyaW5nJiBu
YW1lLCBjb25zdCBXZWJTZWN1cml0eU9yaWdpbiYpCit7CisgICAgV29ya2VyQ29udGV4dCogd29y
a2VyQ29udGV4dCA9IHN0YXRpY19jYXN0PFdvcmtlckNvbnRleHQqPihjb250ZXh0KTsKKyAgICBX
ZWJDb3JlOjpXb3JrZXJTY3JpcHRDb250cm9sbGVyKiBjb250cm9sbGVyID0gV2ViQ29yZTo6V29y
a2VyU2NyaXB0Q29udHJvbGxlcjo6Y29udHJvbGxlckZvckNvbnRleHQoKTsKKyAgICBBU1NFUlQo
d29ya2VyQ29udGV4dCA9PSBjb250cm9sbGVyLT53b3JrZXJDb250ZXh0KCkpOworICAgIFdvcmtl
ckxvYWRlclByb3h5KiB3b3JrZXJMb2FkZXJQcm94eSA9ICZ3b3JrZXJDb250ZXh0LT50aHJlYWQo
KS0+d29ya2VyTG9hZGVyUHJveHkoKTsKKyAgICBOZXdXZWJXb3JrZXJCYXNlKiB3ZWJXb3JrZXIg
PSBzdGF0aWNfY2FzdDxOZXdXZWJXb3JrZXJCYXNlKj4od29ya2VyTG9hZGVyUHJveHkpOworICAg
IFdlYkZyYW1lKiBmcmFtZSA9IHdlYldvcmtlci0+dmlldygpLT5tYWluRnJhbWUoKTsKKyAgICBO
ZXdXZWJDb21tb25Xb3JrZXJDbGllbnQqIGNvbW1vbkNsaWVudCA9IHdlYldvcmtlci0+bmV3Q29t
bW9uQ2xpZW50KCk7CisgICAgV2ViQ29yZTo6V29ya2VyVGhyZWFkKiB3b3JrZXJUaHJlYWQgPSB3
b3JrZXJDb250ZXh0LT50aHJlYWQoKTsKKyAgICBXZWJDb3JlOjpXb3JrZXJSdW5Mb29wJiBydW5M
b29wID0gd29ya2VyVGhyZWFkLT5ydW5Mb29wKCk7CisgICAgU3RyaW5nIG1vZGUgPSBhbGxvd0lu
ZGV4ZWREQk1vZGU7CisgICAgbW9kZS5hcHBlbmQoU3RyaW5nOjpudW1iZXIocnVuTG9vcC5jcmVh
dGVVbmlxdWVJZCgpKSk7CisgICAgUmVmUHRyPEFsbG93SW5kZXhlZERCTWFpblRocmVhZEJyaWRn
ZT4gYnJpZGdlID0gQWxsb3dJbmRleGVkREJNYWluVGhyZWFkQnJpZGdlOjpjcmVhdGUod29ya2Vy
TG9hZGVyUHJveHksIG1vZGUsIGNvbW1vbkNsaWVudCwgZnJhbWUsIG5hbWUpOworCisgICAgLy8g
RWl0aGVyIHRoZSBicmlkZ2UgcmV0dXJucywgb3IgdGhlIHF1ZXVlIGdldHMgdGVybWluYXRlZC4K
KyAgICBpZiAocnVuTG9vcC5ydW5Jbk1vZGUod29ya2VyQ29udGV4dCwgbW9kZSkgPT0gTWVzc2Fn
ZVF1ZXVlVGVybWluYXRlZCkgeworICAgICAgICBicmlkZ2UtPmNhbmNlbCgpOworICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgcmV0dXJuIGJyaWRnZS0+cmVzdWx0KCk7Cit9CisK
K3ZvaWQgSURCRmFjdG9yeUJhY2tlbmRQcm94eTo6b3BlbkZyb21Xb3JrZXIoY29uc3QgU3RyaW5n
JiBuYW1lLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzLCBQYXNzUmVmUHRyPFNl
Y3VyaXR5T3JpZ2luPiBwcnBPcmlnaW4sIFdvcmtlckNvbnRleHQqIGNvbnRleHQsIGNvbnN0IFN0
cmluZyYgZGF0YURpcikKK3sKKyAgICBXZWJTZWN1cml0eU9yaWdpbiBvcmlnaW4ocHJwT3JpZ2lu
KTsKKyAgICBpZiAoIWFsbG93SURCRnJvbVdvcmtlclRocmVhZChjb250ZXh0LCBuYW1lLCBvcmln
aW4pKSB7CisgICAgICAgIGNhbGxiYWNrcy0+b25FcnJvcihXZWJJREJEYXRhYmFzZUVycm9yKDAs
ICJUaGUgdXNlciBkZW5pZWQgcGVybWlzc2lvbiB0byBhY2Nlc3MgdGhlIGRhdGFiYXNlLiIpKTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBXb3JrZXJMb2FkZXJQcm94eSogd29ya2VyTG9h
ZGVyUHJveHkgPSAmY29udGV4dC0+dGhyZWFkKCktPndvcmtlckxvYWRlclByb3h5KCk7CisgICAg
TmV3V2ViV29ya2VyQmFzZSogd2ViV29ya2VyID0gc3RhdGljX2Nhc3Q8TmV3V2ViV29ya2VyQmFz
ZSo+KHdvcmtlckxvYWRlclByb3h5KTsKKyAgICBXZWJGcmFtZSogd2ViRnJhbWUgPSB3ZWJXb3Jr
ZXItPnZpZXcoKS0+bWFpbkZyYW1lKCk7CisgICAgbV93ZWJJREJGYWN0b3J5LT5vcGVuKG5hbWUs
IG5ldyBXZWJJREJDYWxsYmFja3NJbXBsKGNhbGxiYWNrcyksIG9yaWdpbiwgd2ViRnJhbWUsIGRh
dGFEaXIpOworfQorCiB2b2lkIElEQkZhY3RvcnlCYWNrZW5kUHJveHk6Om9wZW4oY29uc3QgU3Ry
aW5nJiBuYW1lLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzLCBQYXNzUmVmUHRy
PFNlY3VyaXR5T3JpZ2luPiBwcnBPcmlnaW4sIEZyYW1lKiBmcmFtZSwgY29uc3QgU3RyaW5nJiBk
YXRhRGlyKQogewogICAgIFdlYlNlY3VyaXR5T3JpZ2luIG9yaWdpbihwcnBPcmlnaW4pOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvSURCRmFjdG9yeUJhY2tlbmRQcm94
eS5oIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvSURCRmFjdG9yeUJhY2tlbmRQcm94eS5o
CmluZGV4IGUxNGI4Y2VhOTgyZjMxN2U0MWQ0M2E4YzkzZjFkN2Q2MWY2NzFjMzIuLjAxYWI3YTUw
ZjY0ZTQ4MzMzMmFmMDdlZmY3OTk1ZTM3NjU2ZDkzMTEgMTAwNzU1Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vc3JjL0lEQkZhY3RvcnlCYWNrZW5kUHJveHkuaAorKysgYi9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3NyYy9JREJGYWN0b3J5QmFja2VuZFByb3h5LmgKQEAgLTMzLDExICszMywx
NCBAQAogCiAjaW5jbHVkZSAiSURCRmFjdG9yeUJhY2tlbmRJbnRlcmZhY2UuaCIKIAotbmFtZXNw
YWNlIFdlYkNvcmUgeyBjbGFzcyBET01TdHJpbmdMaXN0OyB9CituYW1lc3BhY2UgV2ViQ29yZSB7
CitjbGFzcyBTY3JpcHRFeGVjdXRpb25Db250ZXh0OworfQogCiBuYW1lc3BhY2UgV2ViS2l0IHsK
IAogY2xhc3MgV2ViSURCRmFjdG9yeTsKK2NsYXNzIFdlYlNlY3VyaXR5T3JpZ2luOwogCiBjbGFz
cyBJREJGYWN0b3J5QmFja2VuZFByb3h5IDogcHVibGljIFdlYkNvcmU6OklEQkZhY3RvcnlCYWNr
ZW5kSW50ZXJmYWNlIHsKIHB1YmxpYzoKQEAgLTQ1LDExICs0OCwxNSBAQCBwdWJsaWM6CiAgICAg
dmlydHVhbCB+SURCRmFjdG9yeUJhY2tlbmRQcm94eSgpOwogCiAgICAgdmlydHVhbCB2b2lkIGdl
dERhdGFiYXNlTmFtZXMoUGFzc1JlZlB0cjxXZWJDb3JlOjpJREJDYWxsYmFja3M+LCBQYXNzUmVm
UHRyPFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luPiwgV2ViQ29yZTo6RnJhbWUqLCBjb25zdCBTdHJp
bmcmIGRhdGFEaXIpOworCiAgICAgdmlydHVhbCB2b2lkIG9wZW4oY29uc3QgU3RyaW5nJiBuYW1l
LCBQYXNzUmVmUHRyPFdlYkNvcmU6OklEQkNhbGxiYWNrcz4sIFBhc3NSZWZQdHI8V2ViQ29yZTo6
U2VjdXJpdHlPcmlnaW4+LCBXZWJDb3JlOjpGcmFtZSosIGNvbnN0IFN0cmluZyYgZGF0YURpcik7
CisgICAgdmlydHVhbCB2b2lkIG9wZW5Gcm9tV29ya2VyKGNvbnN0IFN0cmluZyYgbmFtZSwgUGFz
c1JlZlB0cjxXZWJDb3JlOjpJREJDYWxsYmFja3M+LCBQYXNzUmVmUHRyPFdlYkNvcmU6OlNlY3Vy
aXR5T3JpZ2luPiwgV2ViQ29yZTo6V29ya2VyQ29udGV4dCosIGNvbnN0IFN0cmluZyYgZGF0YURp
cik7CisKICAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlRGF0YWJhc2UoY29uc3QgU3RyaW5nJiBuYW1l
LCBQYXNzUmVmUHRyPFdlYkNvcmU6OklEQkNhbGxiYWNrcz4sIFBhc3NSZWZQdHI8V2ViQ29yZTo6
U2VjdXJpdHlPcmlnaW4+LCBXZWJDb3JlOjpGcmFtZSosIGNvbnN0IFN0cmluZyYgZGF0YURpcik7
CiAKIHByaXZhdGU6CiAgICAgSURCRmFjdG9yeUJhY2tlbmRQcm94eSgpOworICAgIGJvb2wgYWxs
b3dJREJGcm9tV29ya2VyVGhyZWFkKFdlYkNvcmU6OlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHdv
cmtlckNvbnRleHQsIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgV2ViU2VjdXJpdHlPcmlnaW4m
KTsKIAogICAgIC8vIFdlIGRvbid0IG93biB0aGlzIHBvaW50ZXIgKHVubGlrZSBhbGwgdGhlIG90
aGVyIHByb3h5IGNsYXNzZXMgd2hpY2ggZG8pLgogICAgIFdlYklEQkZhY3RvcnkqIG1fd2ViSURC
RmFjdG9yeTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>117553</attachid>
            <date>2011-12-01 20:29:10 -0800</date>
            <delta_ts>2011-12-02 03:22:17 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-73609-20111201202909.patch</filename>
            <type>text/plain</type>
            <size>22657</size>
            <attacher name="David Grogan">dgrogan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTAxNzMwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMzgxY2I1MzIxOGM1MmVl
OTFiZTIyMGRhNzI1MGM2ODQxNTY2NzM0Yy4uMWQxOGYyM2M1NzIxZDNiMjU1ZDMxZDdlZGYyNmMz
YzFhNDUzNGIzNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMyIEBACisyMDExLTEyLTAxICBEYXZp
ZCBHcm9nYW4gIDxkZ3JvZ2FuQGNocm9taXVtLm9yZz4KKworICAgICAgICBHcmFudCB3b3JrZXJz
IGV4cGVyaW1lbnRhbCBhY2Nlc3MgdG8gSW5kZXhlZERCLgorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzM2MDkKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBObyBuZXcgdGVzdHMgLSB0aGVyZSB3aWxsIGJlIGNo
cm9taXVtIHVpIHRlc3RzIHRoYXQgZGVwZW5kIG9uCisgICAgICAgIHdlYmtpdC5vcmcvYi83MzI5
Ny4KKworICAgICAgICAqIHN0b3JhZ2UvSURCRmFjdG9yeS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpJREJGYWN0b3J5OjpvcGVuKTogQ2FsbCBuZXcgZnVuY3Rpb24sCisgICAgICAgIElEQkZhY3Rv
cnlCYWNrZW5kSW50ZXJmYWNlOjpvcGVuRnJvbVdvcmtlci4KKyAgICAgICAgKiBzdG9yYWdlL0lE
QkZhY3RvcnlCYWNrZW5kSW1wbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJREJGYWN0b3J5QmFj
a2VuZEltcGw6Om9wZW4pOgorICAgICAgICAoV2ViQ29yZTo6SURCRmFjdG9yeUJhY2tlbmRJbXBs
OjpvcGVuRnJvbVdvcmtlcik6CisgICAgICAgIChXZWJDb3JlOjpJREJGYWN0b3J5QmFja2VuZElt
cGw6Om9wZW5JbnRlcm5hbCk6CisgICAgICAgICogc3RvcmFnZS9JREJGYWN0b3J5QmFja2VuZElt
cGwuaDoKKyAgICAgICAgKiBzdG9yYWdlL0lEQkZhY3RvcnlCYWNrZW5kSW50ZXJmYWNlLmg6Cisg
ICAgICAgICogd29ya2Vycy9Xb3JrZXJDb250ZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Oldv
cmtlckNvbnRleHQ6OndlYmtpdEluZGV4ZWREQik6IFN0b3JlcworICAgICAgICBJREJGYWN0b3J5
QmFja2VuZEludGVyZmFjZSwgaW1wbGVtZW50ZWQgYnkgSURCRmFjdG9yeUJhY2tlbmRQcm94eSBp
bgorICAgICAgICBjaHJvbWl1bSwgaW4gdGhlIFdvcmtlckNvbnRleHQuICBGb3IgdGhlIERvY3Vt
ZW50IGNhc2UgaXQgaXMgc3RvcmVkIGluCisgICAgICAgIHRoZSBQYWdlR3JvdXAuICBTdG9yaW5n
IGl0IGluIHRoZSBXb3JrZXJDb250ZXh0IGNhdXNlcyBtb3JlIG1lbW9yeQorICAgICAgICBjaHVy
biwgYnV0IHRoYXQgc2hvdWxkIGJlIHRyaXZpYWwuICBJIGRvbid0IGtub3cgb2YgYW55IGJldHRl
cgorICAgICAgICBhbHRlcm5hdGl2ZXMuCisgICAgICAgICogd29ya2Vycy9Xb3JrZXJDb250ZXh0
Lmg6CisgICAgICAgICogd29ya2Vycy9Xb3JrZXJDb250ZXh0LmlkbDoKKwogMjAxMS0xMi0wMSAg
VGFrYXNoaSBUb3lvc2hpbWEgIDx0b3lvc2hpbUBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgYnVm
ZmVyZWRBbW91bnQgY2FsY3VsYXRpb24gaXMgd3JvbmcgaW4gQ0xPU0lORyBhbmQgQ0xPU0VEIHN0
YXRlLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cgYi9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwppbmRleCBmZmFmMGEyNmJlYTgwZGE3OTg0ZDQz
Yjk2MGQ4OWZiYjEyMTlhZjAzLi5mYjZiOTVmYmMzOTFhM2NhYmU1ZTU4YWNmNzM5YjRjYTUwMzkw
NTI1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZworKysgYi9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI4IEBACisyMDExLTEy
LTAxICBEYXZpZCBHcm9nYW4gIDxkZ3JvZ2FuQGNocm9taXVtLm9yZz4KKworICAgICAgICBHcmFu
dCB3b3JrZXJzIGV4cGVyaW1lbnRhbCBhY2Nlc3MgdG8gSW5kZXhlZERCLgorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzM2MDkKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIHNyYy9JREJGYWN0b3J5QmFja2Vu
ZFByb3h5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6QWxsb3dJbmRleGVkREJNYWluVGhyZWFkQnJp
ZGdlOjpjcmVhdGUpOiBBZGFwdGVkIHRoaXMgY2xhc3MKKyAgICAgICAgZnJvbSB0aGUgdmVyc2lv
bnMgYXQKKyAgICAgICAgV2ViS2l0L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0RhdGFiYXNl
T2JzZXJ2ZXIuY3BwCisgICAgICAgIGFuZAorICAgICAgICBXZWJLaXQvU291cmNlL1dlYktpdC9j
aHJvbWl1bS9zcmMvTG9jYWxGaWxlU3lzdGVtQ2hyb21pdW0uY3BwCisgICAgICAgIChXZWJLaXQ6
OkFsbG93SW5kZXhlZERCTWFpblRocmVhZEJyaWRnZTo6Y2FuY2VsKToKKyAgICAgICAgKFdlYktp
dDo6QWxsb3dJbmRleGVkREJNYWluVGhyZWFkQnJpZGdlOjpyZXN1bHQpOgorICAgICAgICAoV2Vi
S2l0OjpBbGxvd0luZGV4ZWREQk1haW5UaHJlYWRCcmlkZ2U6OnNpZ25hbENvbXBsZXRlZCk6Cisg
ICAgICAgIChXZWJLaXQ6OkFsbG93SW5kZXhlZERCTWFpblRocmVhZEJyaWRnZTo6QWxsb3dJbmRl
eGVkREJNYWluVGhyZWFkQnJpZGdlKToKKyAgICAgICAgKFdlYktpdDo6QWxsb3dJbmRleGVkREJN
YWluVGhyZWFkQnJpZGdlOjphbGxvd0luZGV4ZWREQlRhc2spOgorICAgICAgICAoV2ViS2l0OjpB
bGxvd0luZGV4ZWREQk1haW5UaHJlYWRCcmlkZ2U6OmRpZENvbXBsZXRlKToKKyAgICAgICAgKFdl
YktpdDo6SURCRmFjdG9yeUJhY2tlbmRQcm94eTo6YWxsb3dJREJGcm9tV29ya2VyVGhyZWFkKToK
KyAgICAgICAgKFdlYktpdDo6SURCRmFjdG9yeUJhY2tlbmRQcm94eTo6b3BlbkZyb21Xb3JrZXIp
OiBVc2luZyB0aGUgd2ViRnJhbWUKKyAgICAgICAgZnJvbSB0aGUgd29ya2VyIHNlZW1zIHRvIHNh
dGlzZnkgdGhlIHdlYWsgY29uZGl0aW9uIGluIGNocm9taXVtIHRoYXQKKyAgICAgICAgbmVpdGhl
ciBpdCBub3IgaXQncyBhc3NvY2lhdGVkIFJlbmRlclZpZXcgaXMgTlVMTC4KKyAgICAgICAgKiBz
cmMvSURCRmFjdG9yeUJhY2tlbmRQcm94eS5oOgorCiAyMDExLTEyLTAxICBKb2NoZW4gRWlzaW5n
ZXIgIDxqb2NoZW5AY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFtjaHJvbWl1bV0gYWRkIHJlZmVy
cmVyIHBvbGljeSB0byBXZWJDb250ZXh0TWVudURhdGEKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3N0b3JhZ2UvSURCRmFjdG9yeS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkZh
Y3RvcnkuY3BwCmluZGV4IGY1NGNmNzFlYjM4NjBlMzBlOWMwMzMwNDc0YmM1MjgxYzc3ZTVjYWMu
LjZlMTE2YmEzMmEzZWU3NGM2YjkwZTk5Yjc0YTVkZTY0ZDY3ODkyODggMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCRmFjdG9yeS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
c3RvcmFnZS9JREJGYWN0b3J5LmNwcApAQCAtNDYsNiArNDYsOSBAQAogI2luY2x1ZGUgIlBhZ2Uu
aCIKICNpbmNsdWRlICJQYWdlR3JvdXAuaCIKICNpbmNsdWRlICJTZWN1cml0eU9yaWdpbi5oIgor
I2luY2x1ZGUgIldvcmtlckNvbnRleHQuaCIKKyNpbmNsdWRlICJXb3JrZXJMb2FkZXJQcm94eS5o
IgorI2luY2x1ZGUgIldvcmtlclRocmVhZC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAg
LTc5LDIzICs4MiwyMyBAQCBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IElEQkZhY3Rvcnk6OmdldERh
dGFiYXNlTmFtZXMoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udAogCiBQYXNzUmVmUHRyPElE
QlJlcXVlc3Q+IElEQkZhY3Rvcnk6Om9wZW4oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4
dCwgY29uc3QgU3RyaW5nJiBuYW1lLCBFeGNlcHRpb25Db2RlJiBlYykKIHsKLSAgICBpZiAoIWNv
bnRleHQtPmlzRG9jdW1lbnQoKSkgewotICAgICAgICAvLyBGSVhNRTogbWFrZSB0aGlzIHdvcmsg
d2l0aCB3b3JrZXJzLgotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0KLSAgICBEb2N1bWVudCog
ZG9jdW1lbnQgPSBzdGF0aWNfY2FzdDxEb2N1bWVudCo+KGNvbnRleHQpOwotICAgIGlmICghZG9j
dW1lbnQtPmZyYW1lKCkgfHwgIWRvY3VtZW50LT5wYWdlKCkpCi0gICAgICAgIHJldHVybiAwOwor
ICAgIEFTU0VSVChjb250ZXh0LT5pc0RvY3VtZW50KCkgfHwgY29udGV4dC0+aXNXb3JrZXJDb250
ZXh0KCkpOwogCiAgICAgaWYgKG5hbWUuaXNOdWxsKCkpIHsKICAgICAgICAgZWMgPSBJREJEYXRh
YmFzZUV4Y2VwdGlvbjo6Tk9OX1RSQU5TSUVOVF9FUlI7CiAgICAgICAgIHJldHVybiAwOwogICAg
IH0KLQotICAgIFJlZlB0cjxJREJSZXF1ZXN0PiByZXF1ZXN0ID0gSURCUmVxdWVzdDo6Y3JlYXRl
KGRvY3VtZW50LCBJREJBbnk6OmNyZWF0ZSh0aGlzKSwgMCk7Ci0gICAgR3JvdXBTZXR0aW5ncyog
Z3JvdXBTZXR0aW5ncyA9IGRvY3VtZW50LT5wYWdlKCktPmdyb3VwKCkuZ3JvdXBTZXR0aW5ncygp
OwotICAgIG1fYmFja2VuZC0+b3BlbihuYW1lLCByZXF1ZXN0LCBkb2N1bWVudC0+c2VjdXJpdHlP
cmlnaW4oKSwgZG9jdW1lbnQtPmZyYW1lKCksIGdyb3VwU2V0dGluZ3MtPmluZGV4ZWREQkRhdGFi
YXNlUGF0aCgpKTsKKyAgICBpZiAoY29udGV4dC0+aXNEb2N1bWVudCgpKSB7CisgICAgICAgIERv
Y3VtZW50KiBkb2N1bWVudCA9IHN0YXRpY19jYXN0PERvY3VtZW50Kj4oY29udGV4dCk7CisgICAg
ICAgIGlmICghZG9jdW1lbnQtPmZyYW1lKCkgfHwgIWRvY3VtZW50LT5wYWdlKCkpCisgICAgICAg
ICAgICByZXR1cm4gMDsKKyAgICAgICAgRnJhbWUqIGZyYW1lID0gZG9jdW1lbnQtPmZyYW1lKCk7
CisgICAgICAgIFJlZlB0cjxJREJSZXF1ZXN0PiByZXF1ZXN0ID0gSURCUmVxdWVzdDo6Y3JlYXRl
KGNvbnRleHQsIElEQkFueTo6Y3JlYXRlKHRoaXMpLCAwKTsKKyAgICAgICAgbV9iYWNrZW5kLT5v
cGVuKG5hbWUsIHJlcXVlc3QsIGNvbnRleHQtPnNlY3VyaXR5T3JpZ2luKCksIGZyYW1lLCBTdHJp
bmcoKSk7CisgICAgICAgIHJldHVybiByZXF1ZXN0OworICAgIH0KKyAgICBSZWZQdHI8SURCUmVx
dWVzdD4gcmVxdWVzdCA9IElEQlJlcXVlc3Q6OmNyZWF0ZShjb250ZXh0LCBJREJBbnk6OmNyZWF0
ZSh0aGlzKSwgMCk7CisgICAgbV9iYWNrZW5kLT5vcGVuRnJvbVdvcmtlcihuYW1lLCByZXF1ZXN0
LCBjb250ZXh0LT5zZWN1cml0eU9yaWdpbigpLCBzdGF0aWNfY2FzdDxXb3JrZXJDb250ZXh0Kj4o
Y29udGV4dCksIFN0cmluZygpKTsKICAgICByZXR1cm4gcmVxdWVzdDsKIH0KIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJGYWN0b3J5QmFja2VuZEltcGwuY3BwIGIvU291
cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJGYWN0b3J5QmFja2VuZEltcGwuY3BwCmluZGV4IGQxMjQ4
MWQzZGMxMTEwOGIwNjhiYjYwMWJmYzM2Zjg4ZDRjOTJlMWUuLmY5YzE0YTg3MTNhNTY0NTJlZGJi
MWM3ODE2N2RhOTA5MjFiYzkwODEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2Uv
SURCRmFjdG9yeUJhY2tlbmRJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lE
QkZhY3RvcnlCYWNrZW5kSW1wbC5jcHAKQEAgLTEwMCwyNiArMTAwLDEyIEBAIHZvaWQgSURCRmFj
dG9yeUJhY2tlbmRJbXBsOjpnZXREYXRhYmFzZU5hbWVzKFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tz
PiBjYWxsYmFja3MsCiAKIHZvaWQgSURCRmFjdG9yeUJhY2tlbmRJbXBsOjpvcGVuKGNvbnN0IFN0
cmluZyYgbmFtZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcywgUGFzc1JlZlB0
cjxTZWN1cml0eU9yaWdpbj4gc2VjdXJpdHlPcmlnaW4sIEZyYW1lKiwgY29uc3QgU3RyaW5nJiBk
YXRhRGlyKQogewotICAgIGNvbnN0IFN0cmluZyB1bmlxdWVJZGVudGlmaWVyID0gY29tcHV0ZVVu
aXF1ZUlkZW50aWZpZXIobmFtZSwgc2VjdXJpdHlPcmlnaW4uZ2V0KCkpOwotCi0gICAgSURCRGF0
YWJhc2VCYWNrZW5kTWFwOjppdGVyYXRvciBpdCA9IG1fZGF0YWJhc2VCYWNrZW5kTWFwLmZpbmQo
dW5pcXVlSWRlbnRpZmllcik7Ci0gICAgaWYgKGl0ICE9IG1fZGF0YWJhc2VCYWNrZW5kTWFwLmVu
ZCgpKSB7Ci0gICAgICAgIC8vIElmIGl0J3MgYWxyZWFkeSBiZWVuIG9wZW5lZCwgd2UgaGF2ZSB0
byB3YWl0IGZvciBhbnkgcGVuZGluZwotICAgICAgICAvLyBzZXRWZXJzaW9uIGNhbGxzIHRvIGNv
bXBsZXRlLgotICAgICAgICBpdC0+c2Vjb25kLT5vcGVuQ29ubmVjdGlvbihjYWxsYmFja3MpOwot
ICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgLy8gRklYTUU6IEV2ZXJ5dGhpbmcgZnJvbSBu
b3cgb24gc2hvdWxkIGJlIGRvbmUgb24gYW5vdGhlciB0aHJlYWQuCi0gICAgUmVmUHRyPElEQkJh
Y2tpbmdTdG9yZT4gYmFja2luZ1N0b3JlID0gb3BlbkJhY2tpbmdTdG9yZShzZWN1cml0eU9yaWdp
biwgZGF0YURpcik7Ci0gICAgaWYgKCFiYWNraW5nU3RvcmUpIHsKLSAgICAgICAgY2FsbGJhY2tz
LT5vbkVycm9yKElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6
VU5LTk9XTl9FUlIsICJJbnRlcm5hbCBlcnJvci4iKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9
CisgICAgb3BlbkludGVybmFsKG5hbWUsIGNhbGxiYWNrcywgc2VjdXJpdHlPcmlnaW4sIGRhdGFE
aXIpOworfQogCi0gICAgUmVmUHRyPElEQkRhdGFiYXNlQmFja2VuZEltcGw+IGRhdGFiYXNlQmFj
a2VuZCA9IElEQkRhdGFiYXNlQmFja2VuZEltcGw6OmNyZWF0ZShuYW1lLCBiYWNraW5nU3RvcmUu
Z2V0KCksIG1fdHJhbnNhY3Rpb25Db29yZGluYXRvci5nZXQoKSwgdGhpcywgdW5pcXVlSWRlbnRp
Zmllcik7Ci0gICAgY2FsbGJhY2tzLT5vblN1Y2Nlc3MoZGF0YWJhc2VCYWNrZW5kLmdldCgpKTsK
LSAgICBtX2RhdGFiYXNlQmFja2VuZE1hcC5zZXQodW5pcXVlSWRlbnRpZmllciwgZGF0YWJhc2VC
YWNrZW5kLmdldCgpKTsKK3ZvaWQgSURCRmFjdG9yeUJhY2tlbmRJbXBsOjpvcGVuRnJvbVdvcmtl
cihjb25zdCBTdHJpbmcmIG5hbWUsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3Ms
IFBhc3NSZWZQdHI8U2VjdXJpdHlPcmlnaW4+IHNlY3VyaXR5T3JpZ2luLCBXb3JrZXJDb250ZXh0
KiwgY29uc3QgU3RyaW5nJiBkYXRhRGlyKQoreworICAgIG9wZW5JbnRlcm5hbChuYW1lLCBjYWxs
YmFja3MsIHNlY3VyaXR5T3JpZ2luLCBkYXRhRGlyKTsKIH0KIAogdm9pZCBJREJGYWN0b3J5QmFj
a2VuZEltcGw6OmRlbGV0ZURhdGFiYXNlKGNvbnN0IFN0cmluZyYgbmFtZSwgUGFzc1JlZlB0cjxJ
REJDYWxsYmFja3M+IGNhbGxiYWNrcywgUGFzc1JlZlB0cjxTZWN1cml0eU9yaWdpbj4gc2VjdXJp
dHlPcmlnaW4sIEZyYW1lKiwgY29uc3QgU3RyaW5nJiBkYXRhRGlyKQpAQCAtMTY4LDYgKzE1NCwz
MCBAQCBQYXNzUmVmUHRyPElEQkJhY2tpbmdTdG9yZT4gSURCRmFjdG9yeUJhY2tlbmRJbXBsOjpv
cGVuQmFja2luZ1N0b3JlKFBhc3NSZWZQdHI8UwogICAgIHJldHVybiAwOwogfQogCit2b2lkIElE
QkZhY3RvcnlCYWNrZW5kSW1wbDo6b3BlbkludGVybmFsKGNvbnN0IFN0cmluZyYgbmFtZSwgUGFz
c1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcywgUGFzc1JlZlB0cjxTZWN1cml0eU9yaWdp
bj4gc2VjdXJpdHlPcmlnaW4sIGNvbnN0IFN0cmluZyYgZGF0YURpcikKK3sKKyAgICBjb25zdCBT
dHJpbmcgdW5pcXVlSWRlbnRpZmllciA9IGNvbXB1dGVVbmlxdWVJZGVudGlmaWVyKG5hbWUsIHNl
Y3VyaXR5T3JpZ2luLmdldCgpKTsKKworICAgIElEQkRhdGFiYXNlQmFja2VuZE1hcDo6aXRlcmF0
b3IgaXQgPSBtX2RhdGFiYXNlQmFja2VuZE1hcC5maW5kKHVuaXF1ZUlkZW50aWZpZXIpOworICAg
IGlmIChpdCAhPSBtX2RhdGFiYXNlQmFja2VuZE1hcC5lbmQoKSkgeworICAgICAgICAvLyBJZiBp
dCdzIGFscmVhZHkgYmVlbiBvcGVuZWQsIHdlIGhhdmUgdG8gd2FpdCBmb3IgYW55IHBlbmRpbmcK
KyAgICAgICAgLy8gc2V0VmVyc2lvbiBjYWxscyB0byBjb21wbGV0ZS4KKyAgICAgICAgaXQtPnNl
Y29uZC0+b3BlbkNvbm5lY3Rpb24oY2FsbGJhY2tzKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KworICAgIC8vIEZJWE1FOiBFdmVyeXRoaW5nIGZyb20gbm93IG9uIHNob3VsZCBiZSBkb25lIG9u
IGFub3RoZXIgdGhyZWFkLgorICAgIFJlZlB0cjxJREJCYWNraW5nU3RvcmU+IGJhY2tpbmdTdG9y
ZSA9IG9wZW5CYWNraW5nU3RvcmUoc2VjdXJpdHlPcmlnaW4sIGRhdGFEaXIpOworICAgIGlmICgh
YmFja2luZ1N0b3JlKSB7CisgICAgICAgIGNhbGxiYWNrcy0+b25FcnJvcihJREJEYXRhYmFzZUVy
cm9yOjpjcmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246OlVOS05PV05fRVJSLCAiSW50ZXJuYWwg
ZXJyb3IuIikpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgUmVmUHRyPElEQkRhdGFi
YXNlQmFja2VuZEltcGw+IGRhdGFiYXNlQmFja2VuZCA9IElEQkRhdGFiYXNlQmFja2VuZEltcGw6
OmNyZWF0ZShuYW1lLCBiYWNraW5nU3RvcmUuZ2V0KCksIG1fdHJhbnNhY3Rpb25Db29yZGluYXRv
ci5nZXQoKSwgdGhpcywgdW5pcXVlSWRlbnRpZmllcik7CisgICAgY2FsbGJhY2tzLT5vblN1Y2Nl
c3MoZGF0YWJhc2VCYWNrZW5kLmdldCgpKTsKKyAgICBtX2RhdGFiYXNlQmFja2VuZE1hcC5zZXQo
dW5pcXVlSWRlbnRpZmllciwgZGF0YWJhc2VCYWNrZW5kLmdldCgpKTsKK30KKwogfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gRU5BQkxFKElOREVYRURfREFUQUJBU0UpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkZhY3RvcnlCYWNrZW5kSW1wbC5oIGIv
U291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJGYWN0b3J5QmFja2VuZEltcGwuaAppbmRleCA5YzJm
MDdmYjcwNTQ3YTIxMDNhNGNhZDc3ZGI1NmU1OTNmMWM0OTRhLi40M2NkY2Y4ZTc4YTcxMGQwODM4
NWJiNDhmZThlYzY5NzI2NzJhODAzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdl
L0lEQkZhY3RvcnlCYWNrZW5kSW1wbC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURC
RmFjdG9yeUJhY2tlbmRJbXBsLmgKQEAgLTU2LDEyICs1NiwxNSBAQCBwdWJsaWM6CiAgICAgdm9p
ZCByZW1vdmVJREJCYWNraW5nU3RvcmUoY29uc3QgU3RyaW5nJiBmaWxlSWRlbnRpZmllcik7CiAK
ICAgICB2aXJ0dWFsIHZvaWQgZ2V0RGF0YWJhc2VOYW1lcyhQYXNzUmVmUHRyPElEQkNhbGxiYWNr
cz4sIFBhc3NSZWZQdHI8U2VjdXJpdHlPcmlnaW4+LCBGcmFtZSosIGNvbnN0IFN0cmluZyYgZGF0
YURpcik7CisKICAgICB2aXJ0dWFsIHZvaWQgb3Blbihjb25zdCBTdHJpbmcmIG5hbWUsIFBhc3NS
ZWZQdHI8SURCQ2FsbGJhY2tzPiwgUGFzc1JlZlB0cjxTZWN1cml0eU9yaWdpbj4sIEZyYW1lKiwg
Y29uc3QgU3RyaW5nJiBkYXRhRGlyKTsKKyAgICB2aXJ0dWFsIHZvaWQgb3BlbkZyb21Xb3JrZXIo
Y29uc3QgU3RyaW5nJiBuYW1lLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4sIFBhc3NSZWZQdHI8
U2VjdXJpdHlPcmlnaW4+LCBXb3JrZXJDb250ZXh0KiwgY29uc3QgU3RyaW5nJiBkYXRhRGlyKTsK
ICAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlRGF0YWJhc2UoY29uc3QgU3RyaW5nJiBuYW1lLCBQYXNz
UmVmUHRyPElEQkNhbGxiYWNrcz4sIFBhc3NSZWZQdHI8U2VjdXJpdHlPcmlnaW4+LCBGcmFtZSos
IGNvbnN0IFN0cmluZyYgZGF0YURpcik7CiAKIHByaXZhdGU6CiAgICAgSURCRmFjdG9yeUJhY2tl
bmRJbXBsKCk7CiAgICAgUGFzc1JlZlB0cjxJREJCYWNraW5nU3RvcmU+IG9wZW5CYWNraW5nU3Rv
cmUoUGFzc1JlZlB0cjxTZWN1cml0eU9yaWdpbj4sIGNvbnN0IFN0cmluZyYgZGF0YURpcik7Cisg
ICAgdm9pZCBvcGVuSW50ZXJuYWwoY29uc3QgU3RyaW5nJiBuYW1lLCBQYXNzUmVmUHRyPElEQkNh
bGxiYWNrcz4sIFBhc3NSZWZQdHI8U2VjdXJpdHlPcmlnaW4+LCBjb25zdCBTdHJpbmcmIGRhdGFE
aXIpOwogCiAgICAgdHlwZWRlZiBIYXNoTWFwPFN0cmluZywgSURCRGF0YWJhc2VCYWNrZW5kSW1w
bCo+IElEQkRhdGFiYXNlQmFja2VuZE1hcDsKICAgICBJREJEYXRhYmFzZUJhY2tlbmRNYXAgbV9k
YXRhYmFzZUJhY2tlbmRNYXA7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lE
QkZhY3RvcnlCYWNrZW5kSW50ZXJmYWNlLmggYi9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkZh
Y3RvcnlCYWNrZW5kSW50ZXJmYWNlLmgKaW5kZXggY2U5YjRkZjBjYjdmZjYyMTE4MGQ1YmZkNjg3
MWFlZDI0MmRkMjUxZi4uNGYxYzgzODcxZjQyZjMyMDlhNmI5YTIwMWE3YjA0NWI5ZWVlMWI1NSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJGYWN0b3J5QmFja2VuZEludGVy
ZmFjZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCRmFjdG9yeUJhY2tlbmRJbnRl
cmZhY2UuaApAQCAtNDAsNiArNDAsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBGcmFt
ZTsKIGNsYXNzIElEQkRhdGFiYXNlOwogY2xhc3MgU2VjdXJpdHlPcmlnaW47CitjbGFzcyBTY3Jp
cHRFeGVjdXRpb25Db250ZXh0OwogCiB0eXBlZGVmIGludCBFeGNlcHRpb25Db2RlOwogCkBAIC01
Myw3ICs1NCw5IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIH5JREJGYWN0b3J5QmFja2VuZEludGVy
ZmFjZSgpIHsgfQogCiAgICAgdmlydHVhbCB2b2lkIGdldERhdGFiYXNlTmFtZXMoUGFzc1JlZlB0
cjxJREJDYWxsYmFja3M+LCBQYXNzUmVmUHRyPFNlY3VyaXR5T3JpZ2luPiwgRnJhbWUqLCBjb25z
dCBTdHJpbmcmIGRhdGFEaXIpID0gMDsKKwogICAgIHZpcnR1YWwgdm9pZCBvcGVuKGNvbnN0IFN0
cmluZyYgbmFtZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+LCBQYXNzUmVmUHRyPFNlY3VyaXR5
T3JpZ2luPiwgRnJhbWUqLCBjb25zdCBTdHJpbmcmIGRhdGFEaXIpID0gMDsKKyAgICB2aXJ0dWFs
IHZvaWQgb3BlbkZyb21Xb3JrZXIoY29uc3QgU3RyaW5nJiBuYW1lLCBQYXNzUmVmUHRyPElEQkNh
bGxiYWNrcz4sIFBhc3NSZWZQdHI8U2VjdXJpdHlPcmlnaW4+LCBXb3JrZXJDb250ZXh0KiwgY29u
c3QgU3RyaW5nJiBkYXRhRGlyKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIGRlbGV0ZURhdGFiYXNl
KGNvbnN0IFN0cmluZyYgbmFtZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+LCBQYXNzUmVmUHRy
PFNlY3VyaXR5T3JpZ2luPiwgRnJhbWUqLCBjb25zdCBTdHJpbmcmIGRhdGFEaXIpID0gMDsKIH07
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMvV29ya2VyQ29udGV4dC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS93b3JrZXJzL1dvcmtlckNvbnRleHQuY3BwCmluZGV4IDg1YWYyZjVm
NmQ3ZWVhZTg1MjJiYTg5MTM2NmU3OTNkMWM4OTQyYWUuLmYzZmJjZmY1M2Q5OWYxMWZkZjZmZDY3
ODc5MjhjODBkOGMxOTMzODQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMvV29y
a2VyQ29udGV4dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJDb250ZXh0
LmNwcApAQCAtODYsNiArODYsOCBAQAogI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKICNlbmRp
ZgogCisjaW5jbHVkZSAiSURCRmFjdG9yeS5oIgorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNs
YXNzIENsb3NlV29ya2VyQ29udGV4dFRhc2sgOiBwdWJsaWMgU2NyaXB0RXhlY3V0aW9uQ29udGV4
dDo6VGFzayB7CkBAIC01MjEsNiArNTIzLDE5IEBAIHZvaWQgV29ya2VyQ29udGV4dDo6bm90aWZ5
T2JzZXJ2ZXJzT2ZTdG9wKCkKICAgICB9CiB9CiAKKyNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFT
RSkKK0lEQkZhY3RvcnkqIFdvcmtlckNvbnRleHQ6OndlYmtpdEluZGV4ZWREQigpIGNvbnN0Cit7
CisgICAgaWYgKCFzZWN1cml0eU9yaWdpbigpLT5jYW5BY2Nlc3NEYXRhYmFzZSgpKQorICAgICAg
ICByZXR1cm4gMDsKKyAgICBpZiAoIW1faWRiRmFjdG9yeUJhY2tlbmRJbnRlcmZhY2UpCisgICAg
ICAgIG1faWRiRmFjdG9yeUJhY2tlbmRJbnRlcmZhY2UgPSBJREJGYWN0b3J5QmFja2VuZEludGVy
ZmFjZTo6Y3JlYXRlKCkuZ2V0KCk7CisgICAgaWYgKCFtX2lkYkZhY3RvcnkpCisgICAgICAgIG1f
aWRiRmFjdG9yeSA9IElEQkZhY3Rvcnk6OmNyZWF0ZShtX2lkYkZhY3RvcnlCYWNrZW5kSW50ZXJm
YWNlLmdldCgpKTsKKyAgICByZXR1cm4gbV9pZGJGYWN0b3J5LmdldCgpOworfQorI2VuZGlmCisK
IFdvcmtlckV2ZW50UXVldWUqIFdvcmtlckNvbnRleHQ6OmV2ZW50UXVldWUoKSBjb25zdAogewog
ICAgIHJldHVybiBtX2V2ZW50UXVldWUuZ2V0KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS93b3JrZXJzL1dvcmtlckNvbnRleHQuaCBiL1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMvV29ya2Vy
Q29udGV4dC5oCmluZGV4IDVkMTRiMDcwNGIzMjI2Y2U4ZmY5MTc4MjQyYTgwMzA0MWU4ZTRmODMu
LmM5NGZhMDk3OGIzYWEwNDJlOTEyM2ViYWIzNzQwMTJhYWI0ZWZkMzMgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3dvcmtlcnMvV29ya2VyQ29udGV4dC5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3dvcmtlcnMvV29ya2VyQ29udGV4dC5oCkBAIC01NSw2ICs1NSw3IEBAIG5hbWVzcGFjZSBXZWJD
b3JlIHsKICAgICBjbGFzcyBFbnRyeVN5bmM7CiAgICAgY2xhc3MgRXJyb3JDYWxsYmFjazsKICAg
ICBjbGFzcyBGaWxlU3lzdGVtQ2FsbGJhY2s7CisgICAgY2xhc3MgSURCRmFjdG9yeTsKICAgICBj
bGFzcyBOb3RpZmljYXRpb25DZW50ZXI7CiAgICAgY2xhc3MgU2NoZWR1bGVkQWN0aW9uOwogICAg
IGNsYXNzIFdvcmtlckluc3BlY3RvckNvbnRyb2xsZXI7CkBAIC0xNzMsNiArMTc0LDkgQEAgbmFt
ZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB2b2lkIHJlZ2lzdGVyT2JzZXJ2ZXIoT2JzZXJ2ZXIq
KTsKICAgICAgICAgdm9pZCB1bnJlZ2lzdGVyT2JzZXJ2ZXIoT2JzZXJ2ZXIqKTsKICAgICAgICAg
dm9pZCBub3RpZnlPYnNlcnZlcnNPZlN0b3AoKTsKKyNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFT
RSkKKyAgICAgICAgSURCRmFjdG9yeSogd2Via2l0SW5kZXhlZERCKCkgY29uc3Q7CisjZW5kaWYK
IAogICAgIHByb3RlY3RlZDoKICAgICAgICAgV29ya2VyQ29udGV4dChjb25zdCBLVVJMJiwgY29u
c3QgU3RyaW5nJiwgV29ya2VyVGhyZWFkKik7CkBAIC0yMTgsNiArMjIyLDEyIEBAIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKICAgICAgICAgSGFzaFNldDxPYnNlcnZlcio+IG1fd29ya2VyT2JzZXJ2ZXJz
OwogCiAgICAgICAgIE93blB0cjxXb3JrZXJFdmVudFF1ZXVlPiBtX2V2ZW50UXVldWU7CisKKyNp
ZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKKyAgICAgICAgbXV0YWJsZSBSZWZQdHI8SURCRmFj
dG9yeT4gbV9pZGJGYWN0b3J5OworICAgICAgICBtdXRhYmxlIFJlZlB0cjxJREJGYWN0b3J5QmFj
a2VuZEludGVyZmFjZT4gbV9pZGJGYWN0b3J5QmFja2VuZEludGVyZmFjZTsKKyNlbmRpZgorCiAg
ICAgfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvd29ya2Vycy9Xb3JrZXJDb250ZXh0LmlkbCBiL1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMvV29y
a2VyQ29udGV4dC5pZGwKaW5kZXggZjdjMWJiYjI5ZGRlYTY4ZjY5ZDM1ODk0YTRjZmE1Y2I0NTIz
ZTE2NS4uNzM2YmJjMTMzZjdmMjMzMGY3MGFiMDczYTg4ODAzZTA3NWFlMGFkMiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJDb250ZXh0LmlkbAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS93b3JrZXJzL1dvcmtlckNvbnRleHQuaWRsCkBAIC0xMjYsNiArMTI2LDIwIEBAIG1v
ZHVsZSB0aHJlYWRzIHsKICAgICAgICAgYXR0cmlidXRlIEZsb2F0MzJBcnJheUNvbnN0cnVjdG9y
IEZsb2F0MzJBcnJheTsgLy8gVXNhYmxlIHdpdGggbmV3IG9wZXJhdG9yCiAgICAgICAgIGF0dHJp
YnV0ZSBGbG9hdDY0QXJyYXlDb25zdHJ1Y3RvciBGbG9hdDY0QXJyYXk7IC8vIFVzYWJsZSB3aXRo
IG5ldyBvcGVyYXRvcgogICAgICAgICBhdHRyaWJ1dGUgRGF0YVZpZXdDb25zdHJ1Y3RvciBEYXRh
VmlldzsgLy8gVXNhYmxlIHdpdGggbmV3IG9wZXJhdG9yCisjaWYgZGVmaW5lZChFTkFCTEVfSU5E
RVhFRF9EQVRBQkFTRSkgJiYgRU5BQkxFX0lOREVYRURfREFUQUJBU0UKKyAgICAgICAgcmVhZG9u
bHkgYXR0cmlidXRlIFtFbmFibGVkQXRSdW50aW1lXSBJREJGYWN0b3J5IHdlYmtpdEluZGV4ZWRE
QjsKKworICAgICAgICBhdHRyaWJ1dGUgW0VuYWJsZWRBdFJ1bnRpbWVdIElEQkN1cnNvckNvbnN0
cnVjdG9yIHdlYmtpdElEQkN1cnNvcjsKKyAgICAgICAgYXR0cmlidXRlIFtFbmFibGVkQXRSdW50
aW1lXSBJREJEYXRhYmFzZUNvbnN0cnVjdG9yIHdlYmtpdElEQkRhdGFiYXNlOworICAgICAgICBh
dHRyaWJ1dGUgW0VuYWJsZWRBdFJ1bnRpbWVdIElEQkRhdGFiYXNlRXJyb3JDb25zdHJ1Y3RvciB3
ZWJraXRJREJEYXRhYmFzZUVycm9yOworICAgICAgICBhdHRyaWJ1dGUgW0VuYWJsZWRBdFJ1bnRp
bWVdIElEQkRhdGFiYXNlRXhjZXB0aW9uQ29uc3RydWN0b3Igd2Via2l0SURCRGF0YWJhc2VFeGNl
cHRpb247CisgICAgICAgIGF0dHJpYnV0ZSBbRW5hYmxlZEF0UnVudGltZV0gSURCRmFjdG9yeUNv
bnN0cnVjdG9yIHdlYmtpdElEQkZhY3Rvcnk7CisgICAgICAgIGF0dHJpYnV0ZSBbRW5hYmxlZEF0
UnVudGltZV0gSURCSW5kZXhDb25zdHJ1Y3RvciB3ZWJraXRJREJJbmRleDsKKyAgICAgICAgYXR0
cmlidXRlIFtFbmFibGVkQXRSdW50aW1lXSBJREJLZXlSYW5nZUNvbnN0cnVjdG9yIHdlYmtpdElE
QktleVJhbmdlOworICAgICAgICBhdHRyaWJ1dGUgW0VuYWJsZWRBdFJ1bnRpbWVdIElEQk9iamVj
dFN0b3JlQ29uc3RydWN0b3Igd2Via2l0SURCT2JqZWN0U3RvcmU7CisgICAgICAgIGF0dHJpYnV0
ZSBbRW5hYmxlZEF0UnVudGltZV0gSURCUmVxdWVzdENvbnN0cnVjdG9yIHdlYmtpdElEQlJlcXVl
c3Q7CisgICAgICAgIGF0dHJpYnV0ZSBbRW5hYmxlZEF0UnVudGltZV0gSURCVHJhbnNhY3Rpb25D
b25zdHJ1Y3RvciB3ZWJraXRJREJUcmFuc2FjdGlvbjsKKyNlbmRpZgogICAgIH07CiAKIH0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0lEQkZhY3RvcnlCYWNrZW5kUHJv
eHkuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvSURCRmFjdG9yeUJhY2tlbmRQcm94
eS5jcHAKaW5kZXggN2I2MDM4YjM2YWQ5NDBlYzk0YTFkMGRhZTU0NzRkY2VlZTRhMGY5Yy4uNzU3
NzY1ZGNmODQ5M2I1M2ZkMTNmNjRiODA0MzVlYTZkZjBkOTkyNCAxMDA3NTUKLS0tIGEvU291cmNl
L1dlYktpdC9jaHJvbWl1bS9zcmMvSURCRmFjdG9yeUJhY2tlbmRQcm94eS5jcHAKKysrIGIvU291
cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvSURCRmFjdG9yeUJhY2tlbmRQcm94eS5jcHAKQEAgLTMx
LDYgKzMxLDcgQEAKIAogI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQogCisjaW5jbHVkZSAi
Q3Jvc3NUaHJlYWRUYXNrLmgiCiAjaW5jbHVkZSAiRE9NU3RyaW5nTGlzdC5oIgogI2luY2x1ZGUg
IklEQkRhdGFiYXNlQmFja2VuZFByb3h5LmgiCiAjaW5jbHVkZSAiSURCRGF0YWJhc2VFcnJvci5o
IgpAQCAtNDUsNiArNDYsMTIgQEAKICNpbmNsdWRlICJXZWJQZXJtaXNzaW9uQ2xpZW50LmgiCiAj
aW5jbHVkZSAiV2ViVmVjdG9yLmgiCiAjaW5jbHVkZSAiV2ViVmlld0ltcGwuaCIKKyNpbmNsdWRl
ICJXZWJXb3JrZXJCYXNlLmgiCisjaW5jbHVkZSAiV29ya2VyQ29udGV4dC5oIgorI2luY2x1ZGUg
IldvcmtlckxvYWRlclByb3h5LmgiCisjaW5jbHVkZSAiV29ya2VyU2NyaXB0Q29udHJvbGxlci5o
IgorI2luY2x1ZGUgIldvcmtlclRocmVhZC5oIgorCiAKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3Jl
OwogCkBAIC03OCw2ICs4NSwxMDggQEAgdm9pZCBJREJGYWN0b3J5QmFja2VuZFByb3h5OjpnZXRE
YXRhYmFzZU5hbWVzKFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MKICAgICBtX3dl
YklEQkZhY3RvcnktPmdldERhdGFiYXNlTmFtZXMobmV3IFdlYklEQkNhbGxiYWNrc0ltcGwoY2Fs
bGJhY2tzKSwgb3JpZ2luLCB3ZWJGcmFtZSwgZGF0YURpcik7CiB9CiAKK3N0YXRpYyBjb25zdCBj
aGFyIGFsbG93SW5kZXhlZERCTW9kZVtdID0gImFsbG93SW5kZXhlZERCTW9kZSI7CisKK2NsYXNz
IEFsbG93SW5kZXhlZERCTWFpblRocmVhZEJyaWRnZSA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291
bnRlZDxBbGxvd0luZGV4ZWREQk1haW5UaHJlYWRCcmlkZ2U+IHsKK3B1YmxpYzoKKyAgICBzdGF0
aWMgUGFzc1JlZlB0cjxBbGxvd0luZGV4ZWREQk1haW5UaHJlYWRCcmlkZ2U+IGNyZWF0ZShXZWJD
b3JlOjpXb3JrZXJMb2FkZXJQcm94eSogd29ya2VyTG9hZGVyUHJveHksIGNvbnN0IFdURjo6U3Ry
aW5nJiBtb2RlLCBOZXdXZWJDb21tb25Xb3JrZXJDbGllbnQqIGNvbW1vbkNsaWVudCwgV2ViRnJh
bWUqIGZyYW1lLCBjb25zdCBTdHJpbmcmIG5hbWUpCisgICAgeworICAgICAgICByZXR1cm4gYWRv
cHRSZWYobmV3IEFsbG93SW5kZXhlZERCTWFpblRocmVhZEJyaWRnZSh3b3JrZXJMb2FkZXJQcm94
eSwgbW9kZSwgY29tbW9uQ2xpZW50LCBmcmFtZSwgbmFtZSkpOworICAgIH0KKworICAgIC8vIFRo
ZXNlIG1ldGhvZHMgYXJlIGludm9rZWQgb24gdGhlIHdvcmtlciBjb250ZXh0LgorICAgIHZvaWQg
Y2FuY2VsKCkKKyAgICB7CisgICAgICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX211dGV4KTsKKyAg
ICAgICAgbV93b3JrZXJMb2FkZXJQcm94eSA9IDA7CisgICAgfQorCisgICAgYm9vbCByZXN1bHQo
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fcmVzdWx0OworICAgIH0KKworICAgIC8vIFRoaXMg
bWV0aG9kIGlzIGludm9rZWQgb24gdGhlIG1haW4gdGhyZWFkLgorICAgIHZvaWQgc2lnbmFsQ29t
cGxldGVkKGJvb2wgcmVzdWx0KQorICAgIHsKKyAgICAgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1f
bXV0ZXgpOworICAgICAgICBpZiAobV93b3JrZXJMb2FkZXJQcm94eSkKKyAgICAgICAgICAgIG1f
d29ya2VyTG9hZGVyUHJveHktPnBvc3RUYXNrRm9yTW9kZVRvV29ya2VyQ29udGV4dCgKKyAgICAg
ICAgICAgICAgICBjcmVhdGVDYWxsYmFja1Rhc2soJmRpZENvbXBsZXRlLCBBbGxvd0Nyb3NzVGhy
ZWFkQWNjZXNzKHRoaXMpLCByZXN1bHQpLCBtX21vZGUpOworICAgIH0KKworcHJpdmF0ZToKKyAg
ICBBbGxvd0luZGV4ZWREQk1haW5UaHJlYWRCcmlkZ2UoV2ViQ29yZTo6V29ya2VyTG9hZGVyUHJv
eHkqIHdvcmtlckxvYWRlclByb3h5LCBjb25zdCBXVEY6OlN0cmluZyYgbW9kZSwgTmV3V2ViQ29t
bW9uV29ya2VyQ2xpZW50KiBjb21tb25DbGllbnQsIFdlYkZyYW1lKiBmcmFtZSwgY29uc3QgU3Ry
aW5nJiBuYW1lKQorICAgICAgICA6IG1fd29ya2VyTG9hZGVyUHJveHkod29ya2VyTG9hZGVyUHJv
eHkpCisgICAgICAgICwgbV9tb2RlKG1vZGUpCisgICAgeworICAgICAgICBXZWJXb3JrZXJCYXNl
OjpkaXNwYXRjaFRhc2tUb01haW5UaHJlYWQoCisgICAgICAgICAgICBjcmVhdGVDYWxsYmFja1Rh
c2soJmFsbG93SW5kZXhlZERCVGFzaywgQWxsb3dDcm9zc1RocmVhZEFjY2Vzcyhjb21tb25DbGll
bnQpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFsbG93Q3Jvc3NUaHJlYWRBY2Nl
c3MoZnJhbWUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFsbG93Q3Jvc3NUaHJl
YWRBY2Nlc3ModGhpcyksIG5hbWUpKTsKKyAgICB9CisKKyAgICBzdGF0aWMgdm9pZCBhbGxvd0lu
ZGV4ZWREQlRhc2soV2ViQ29yZTo6U2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgTmV3
V2ViQ29tbW9uV29ya2VyQ2xpZW50KiBjb21tb25DbGllbnQsIFdlYkZyYW1lKiBmcmFtZSwgUGFz
c1JlZlB0cjxBbGxvd0luZGV4ZWREQk1haW5UaHJlYWRCcmlkZ2U+IGJyaWRnZSwgY29uc3QgU3Ry
aW5nJiBuYW1lKQorICAgIHsKKyAgICAgICAgaWYgKCFjb21tb25DbGllbnQpIHsKKyAgICAgICAg
ICAgIGJyaWRnZS0+c2lnbmFsQ29tcGxldGVkKGZhbHNlKTsKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgfQorCisgICAgICAgIFdlYkZyYW1lSW1wbCogd2ViRnJhbWUgPSBzdGF0aWNfY2Fz
dDxXZWJGcmFtZUltcGwqPihmcmFtZSk7CisgICAgICAgIFdlYlZpZXdJbXBsKiB3ZWJWaWV3ID0g
d2ViRnJhbWUtPnZpZXdJbXBsKCk7CisgICAgICAgIGJvb2wgYWxsb3dlZCA9ICF3ZWJWaWV3LT5w
ZXJtaXNzaW9uQ2xpZW50KCkgfHwgd2ViVmlldy0+cGVybWlzc2lvbkNsaWVudCgpLT5hbGxvd0lu
ZGV4ZWREQih3ZWJGcmFtZSwgbmFtZSwgV2ViU2VjdXJpdHlPcmlnaW4oKSk7CisgICAgICAgIGJy
aWRnZS0+c2lnbmFsQ29tcGxldGVkKGFsbG93ZWQpOworICAgIH0KKworICAgIHN0YXRpYyB2b2lk
IGRpZENvbXBsZXRlKFdlYkNvcmU6OlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIFBh
c3NSZWZQdHI8QWxsb3dJbmRleGVkREJNYWluVGhyZWFkQnJpZGdlPiBicmlkZ2UsIGJvb2wgcmVz
dWx0KQorICAgIHsKKyAgICAgICAgYnJpZGdlLT5tX3Jlc3VsdCA9IHJlc3VsdDsKKyAgICB9CisK
KyAgICBib29sIG1fcmVzdWx0OworICAgIE11dGV4IG1fbXV0ZXg7CisgICAgV2ViQ29yZTo6V29y
a2VyTG9hZGVyUHJveHkqIG1fd29ya2VyTG9hZGVyUHJveHk7CisgICAgV1RGOjpTdHJpbmcgbV9t
b2RlOworfTsKKworYm9vbCBJREJGYWN0b3J5QmFja2VuZFByb3h5OjphbGxvd0lEQkZyb21Xb3Jr
ZXJUaHJlYWQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgY29uc3QgU3RyaW5nJiBu
YW1lLCBjb25zdCBXZWJTZWN1cml0eU9yaWdpbiYpCit7CisgICAgV29ya2VyQ29udGV4dCogd29y
a2VyQ29udGV4dCA9IHN0YXRpY19jYXN0PFdvcmtlckNvbnRleHQqPihjb250ZXh0KTsKKyAgICBX
ZWJDb3JlOjpXb3JrZXJTY3JpcHRDb250cm9sbGVyKiBjb250cm9sbGVyID0gV2ViQ29yZTo6V29y
a2VyU2NyaXB0Q29udHJvbGxlcjo6Y29udHJvbGxlckZvckNvbnRleHQoKTsKKyAgICBBU1NFUlRf
VU5VU0VEKGNvbnRyb2xsZXIsIHdvcmtlckNvbnRleHQgPT0gY29udHJvbGxlci0+d29ya2VyQ29u
dGV4dCgpKTsKKyAgICBXb3JrZXJMb2FkZXJQcm94eSogd29ya2VyTG9hZGVyUHJveHkgPSAmd29y
a2VyQ29udGV4dC0+dGhyZWFkKCktPndvcmtlckxvYWRlclByb3h5KCk7CisgICAgTmV3V2ViV29y
a2VyQmFzZSogd2ViV29ya2VyID0gc3RhdGljX2Nhc3Q8TmV3V2ViV29ya2VyQmFzZSo+KHdvcmtl
ckxvYWRlclByb3h5KTsKKyAgICBXZWJGcmFtZSogZnJhbWUgPSB3ZWJXb3JrZXItPnZpZXcoKS0+
bWFpbkZyYW1lKCk7CisgICAgTmV3V2ViQ29tbW9uV29ya2VyQ2xpZW50KiBjb21tb25DbGllbnQg
PSB3ZWJXb3JrZXItPm5ld0NvbW1vbkNsaWVudCgpOworICAgIFdlYkNvcmU6OldvcmtlclRocmVh
ZCogd29ya2VyVGhyZWFkID0gd29ya2VyQ29udGV4dC0+dGhyZWFkKCk7CisgICAgV2ViQ29yZTo6
V29ya2VyUnVuTG9vcCYgcnVuTG9vcCA9IHdvcmtlclRocmVhZC0+cnVuTG9vcCgpOworICAgIFN0
cmluZyBtb2RlID0gYWxsb3dJbmRleGVkREJNb2RlOworICAgIG1vZGUuYXBwZW5kKFN0cmluZzo6
bnVtYmVyKHJ1bkxvb3AuY3JlYXRlVW5pcXVlSWQoKSkpOworICAgIFJlZlB0cjxBbGxvd0luZGV4
ZWREQk1haW5UaHJlYWRCcmlkZ2U+IGJyaWRnZSA9IEFsbG93SW5kZXhlZERCTWFpblRocmVhZEJy
aWRnZTo6Y3JlYXRlKHdvcmtlckxvYWRlclByb3h5LCBtb2RlLCBjb21tb25DbGllbnQsIGZyYW1l
LCBuYW1lKTsKKworICAgIC8vIEVpdGhlciB0aGUgYnJpZGdlIHJldHVybnMsIG9yIHRoZSBxdWV1
ZSBnZXRzIHRlcm1pbmF0ZWQuCisgICAgaWYgKHJ1bkxvb3AucnVuSW5Nb2RlKHdvcmtlckNvbnRl
eHQsIG1vZGUpID09IE1lc3NhZ2VRdWV1ZVRlcm1pbmF0ZWQpIHsKKyAgICAgICAgYnJpZGdlLT5j
YW5jZWwoKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHJldHVybiBicmlk
Z2UtPnJlc3VsdCgpOworfQorCit2b2lkIElEQkZhY3RvcnlCYWNrZW5kUHJveHk6Om9wZW5Gcm9t
V29ya2VyKGNvbnN0IFN0cmluZyYgbmFtZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxi
YWNrcywgUGFzc1JlZlB0cjxTZWN1cml0eU9yaWdpbj4gcHJwT3JpZ2luLCBXb3JrZXJDb250ZXh0
KiBjb250ZXh0LCBjb25zdCBTdHJpbmcmIGRhdGFEaXIpCit7CisgICAgV2ViU2VjdXJpdHlPcmln
aW4gb3JpZ2luKHBycE9yaWdpbik7CisgICAgaWYgKCFhbGxvd0lEQkZyb21Xb3JrZXJUaHJlYWQo
Y29udGV4dCwgbmFtZSwgb3JpZ2luKSkgeworICAgICAgICBjYWxsYmFja3MtPm9uRXJyb3IoV2Vi
SURCRGF0YWJhc2VFcnJvcigwLCAiVGhlIHVzZXIgZGVuaWVkIHBlcm1pc3Npb24gdG8gYWNjZXNz
IHRoZSBkYXRhYmFzZS4iKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgV29ya2VyTG9h
ZGVyUHJveHkqIHdvcmtlckxvYWRlclByb3h5ID0gJmNvbnRleHQtPnRocmVhZCgpLT53b3JrZXJM
b2FkZXJQcm94eSgpOworICAgIE5ld1dlYldvcmtlckJhc2UqIHdlYldvcmtlciA9IHN0YXRpY19j
YXN0PE5ld1dlYldvcmtlckJhc2UqPih3b3JrZXJMb2FkZXJQcm94eSk7CisgICAgV2ViRnJhbWUq
IHdlYkZyYW1lID0gd2ViV29ya2VyLT52aWV3KCktPm1haW5GcmFtZSgpOworICAgIG1fd2ViSURC
RmFjdG9yeS0+b3BlbihuYW1lLCBuZXcgV2ViSURCQ2FsbGJhY2tzSW1wbChjYWxsYmFja3MpLCBv
cmlnaW4sIHdlYkZyYW1lLCBkYXRhRGlyKTsKK30KKwogdm9pZCBJREJGYWN0b3J5QmFja2VuZFBy
b3h5OjpvcGVuKGNvbnN0IFN0cmluZyYgbmFtZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNh
bGxiYWNrcywgUGFzc1JlZlB0cjxTZWN1cml0eU9yaWdpbj4gcHJwT3JpZ2luLCBGcmFtZSogZnJh
bWUsIGNvbnN0IFN0cmluZyYgZGF0YURpcikKIHsKICAgICBXZWJTZWN1cml0eU9yaWdpbiBvcmln
aW4ocHJwT3JpZ2luKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0lE
QkZhY3RvcnlCYWNrZW5kUHJveHkuaCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0lEQkZh
Y3RvcnlCYWNrZW5kUHJveHkuaAppbmRleCBlMTRiOGNlYTk4MmYzMTdlNDFkNDNhOGM5M2YxZDdk
NjFmNjcxYzMyLi4wMWFiN2E1MGY2NGU0ODMzMzJhZjA3ZWZmNzk5NWUzNzY1NmQ5MzExIDEwMDc1
NQotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9JREJGYWN0b3J5QmFja2VuZFByb3h5
LmgKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvSURCRmFjdG9yeUJhY2tlbmRQcm94
eS5oCkBAIC0zMywxMSArMzMsMTQgQEAKIAogI2luY2x1ZGUgIklEQkZhY3RvcnlCYWNrZW5kSW50
ZXJmYWNlLmgiCiAKLW5hbWVzcGFjZSBXZWJDb3JlIHsgY2xhc3MgRE9NU3RyaW5nTGlzdDsgfQor
bmFtZXNwYWNlIFdlYkNvcmUgeworY2xhc3MgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDsKK30KIAog
bmFtZXNwYWNlIFdlYktpdCB7CiAKIGNsYXNzIFdlYklEQkZhY3Rvcnk7CitjbGFzcyBXZWJTZWN1
cml0eU9yaWdpbjsKIAogY2xhc3MgSURCRmFjdG9yeUJhY2tlbmRQcm94eSA6IHB1YmxpYyBXZWJD
b3JlOjpJREJGYWN0b3J5QmFja2VuZEludGVyZmFjZSB7CiBwdWJsaWM6CkBAIC00NSwxMSArNDgs
MTUgQEAgcHVibGljOgogICAgIHZpcnR1YWwgfklEQkZhY3RvcnlCYWNrZW5kUHJveHkoKTsKIAog
ICAgIHZpcnR1YWwgdm9pZCBnZXREYXRhYmFzZU5hbWVzKFBhc3NSZWZQdHI8V2ViQ29yZTo6SURC
Q2FsbGJhY2tzPiwgUGFzc1JlZlB0cjxXZWJDb3JlOjpTZWN1cml0eU9yaWdpbj4sIFdlYkNvcmU6
OkZyYW1lKiwgY29uc3QgU3RyaW5nJiBkYXRhRGlyKTsKKwogICAgIHZpcnR1YWwgdm9pZCBvcGVu
KGNvbnN0IFN0cmluZyYgbmFtZSwgUGFzc1JlZlB0cjxXZWJDb3JlOjpJREJDYWxsYmFja3M+LCBQ
YXNzUmVmUHRyPFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luPiwgV2ViQ29yZTo6RnJhbWUqLCBjb25z
dCBTdHJpbmcmIGRhdGFEaXIpOworICAgIHZpcnR1YWwgdm9pZCBvcGVuRnJvbVdvcmtlcihjb25z
dCBTdHJpbmcmIG5hbWUsIFBhc3NSZWZQdHI8V2ViQ29yZTo6SURCQ2FsbGJhY2tzPiwgUGFzc1Jl
ZlB0cjxXZWJDb3JlOjpTZWN1cml0eU9yaWdpbj4sIFdlYkNvcmU6OldvcmtlckNvbnRleHQqLCBj
b25zdCBTdHJpbmcmIGRhdGFEaXIpOworCiAgICAgdmlydHVhbCB2b2lkIGRlbGV0ZURhdGFiYXNl
KGNvbnN0IFN0cmluZyYgbmFtZSwgUGFzc1JlZlB0cjxXZWJDb3JlOjpJREJDYWxsYmFja3M+LCBQ
YXNzUmVmUHRyPFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luPiwgV2ViQ29yZTo6RnJhbWUqLCBjb25z
dCBTdHJpbmcmIGRhdGFEaXIpOwogCiBwcml2YXRlOgogICAgIElEQkZhY3RvcnlCYWNrZW5kUHJv
eHkoKTsKKyAgICBib29sIGFsbG93SURCRnJvbVdvcmtlclRocmVhZChXZWJDb3JlOjpTY3JpcHRF
eGVjdXRpb25Db250ZXh0KiB3b3JrZXJDb250ZXh0LCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0
IFdlYlNlY3VyaXR5T3JpZ2luJik7CiAKICAgICAvLyBXZSBkb24ndCBvd24gdGhpcyBwb2ludGVy
ICh1bmxpa2UgYWxsIHRoZSBvdGhlciBwcm94eSBjbGFzc2VzIHdoaWNoIGRvKS4KICAgICBXZWJJ
REJGYWN0b3J5KiBtX3dlYklEQkZhY3Rvcnk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>117596</attachid>
            <date>2011-12-02 03:03:19 -0800</date>
            <delta_ts>2011-12-02 12:17:37 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-73609-20111202030318.patch</filename>
            <type>text/plain</type>
            <size>26263</size>
            <attacher name="David Grogan">dgrogan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTAxNzMwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMzgxY2I1MzIxOGM1MmVl
OTFiZTIyMGRhNzI1MGM2ODQxNTY2NzM0Yy4uMWQxOGYyM2M1NzIxZDNiMjU1ZDMxZDdlZGYyNmMz
YzFhNDUzNGIzNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMyIEBACisyMDExLTEyLTAxICBEYXZp
ZCBHcm9nYW4gIDxkZ3JvZ2FuQGNocm9taXVtLm9yZz4KKworICAgICAgICBHcmFudCB3b3JrZXJz
IGV4cGVyaW1lbnRhbCBhY2Nlc3MgdG8gSW5kZXhlZERCLgorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzM2MDkKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBObyBuZXcgdGVzdHMgLSB0aGVyZSB3aWxsIGJlIGNo
cm9taXVtIHVpIHRlc3RzIHRoYXQgZGVwZW5kIG9uCisgICAgICAgIHdlYmtpdC5vcmcvYi83MzI5
Ny4KKworICAgICAgICAqIHN0b3JhZ2UvSURCRmFjdG9yeS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpJREJGYWN0b3J5OjpvcGVuKTogQ2FsbCBuZXcgZnVuY3Rpb24sCisgICAgICAgIElEQkZhY3Rv
cnlCYWNrZW5kSW50ZXJmYWNlOjpvcGVuRnJvbVdvcmtlci4KKyAgICAgICAgKiBzdG9yYWdlL0lE
QkZhY3RvcnlCYWNrZW5kSW1wbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJREJGYWN0b3J5QmFj
a2VuZEltcGw6Om9wZW4pOgorICAgICAgICAoV2ViQ29yZTo6SURCRmFjdG9yeUJhY2tlbmRJbXBs
OjpvcGVuRnJvbVdvcmtlcik6CisgICAgICAgIChXZWJDb3JlOjpJREJGYWN0b3J5QmFja2VuZElt
cGw6Om9wZW5JbnRlcm5hbCk6CisgICAgICAgICogc3RvcmFnZS9JREJGYWN0b3J5QmFja2VuZElt
cGwuaDoKKyAgICAgICAgKiBzdG9yYWdlL0lEQkZhY3RvcnlCYWNrZW5kSW50ZXJmYWNlLmg6Cisg
ICAgICAgICogd29ya2Vycy9Xb3JrZXJDb250ZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Oldv
cmtlckNvbnRleHQ6OndlYmtpdEluZGV4ZWREQik6IFN0b3JlcworICAgICAgICBJREJGYWN0b3J5
QmFja2VuZEludGVyZmFjZSwgaW1wbGVtZW50ZWQgYnkgSURCRmFjdG9yeUJhY2tlbmRQcm94eSBp
bgorICAgICAgICBjaHJvbWl1bSwgaW4gdGhlIFdvcmtlckNvbnRleHQuICBGb3IgdGhlIERvY3Vt
ZW50IGNhc2UgaXQgaXMgc3RvcmVkIGluCisgICAgICAgIHRoZSBQYWdlR3JvdXAuICBTdG9yaW5n
IGl0IGluIHRoZSBXb3JrZXJDb250ZXh0IGNhdXNlcyBtb3JlIG1lbW9yeQorICAgICAgICBjaHVy
biwgYnV0IHRoYXQgc2hvdWxkIGJlIHRyaXZpYWwuICBJIGRvbid0IGtub3cgb2YgYW55IGJldHRl
cgorICAgICAgICBhbHRlcm5hdGl2ZXMuCisgICAgICAgICogd29ya2Vycy9Xb3JrZXJDb250ZXh0
Lmg6CisgICAgICAgICogd29ya2Vycy9Xb3JrZXJDb250ZXh0LmlkbDoKKwogMjAxMS0xMi0wMSAg
VGFrYXNoaSBUb3lvc2hpbWEgIDx0b3lvc2hpbUBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgYnVm
ZmVyZWRBbW91bnQgY2FsY3VsYXRpb24gaXMgd3JvbmcgaW4gQ0xPU0lORyBhbmQgQ0xPU0VEIHN0
YXRlLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cgYi9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwppbmRleCBmZmFmMGEyNmJlYTgwZGE3OTg0ZDQz
Yjk2MGQ4OWZiYjEyMTlhZjAzLi5mYjZiOTVmYmMzOTFhM2NhYmU1ZTU4YWNmNzM5YjRjYTUwMzkw
NTI1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZworKysgYi9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI4IEBACisyMDExLTEy
LTAxICBEYXZpZCBHcm9nYW4gIDxkZ3JvZ2FuQGNocm9taXVtLm9yZz4KKworICAgICAgICBHcmFu
dCB3b3JrZXJzIGV4cGVyaW1lbnRhbCBhY2Nlc3MgdG8gSW5kZXhlZERCLgorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzM2MDkKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIHNyYy9JREJGYWN0b3J5QmFja2Vu
ZFByb3h5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6QWxsb3dJbmRleGVkREJNYWluVGhyZWFkQnJp
ZGdlOjpjcmVhdGUpOiBBZGFwdGVkIHRoaXMgY2xhc3MKKyAgICAgICAgZnJvbSB0aGUgdmVyc2lv
bnMgYXQKKyAgICAgICAgV2ViS2l0L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0RhdGFiYXNl
T2JzZXJ2ZXIuY3BwCisgICAgICAgIGFuZAorICAgICAgICBXZWJLaXQvU291cmNlL1dlYktpdC9j
aHJvbWl1bS9zcmMvTG9jYWxGaWxlU3lzdGVtQ2hyb21pdW0uY3BwCisgICAgICAgIChXZWJLaXQ6
OkFsbG93SW5kZXhlZERCTWFpblRocmVhZEJyaWRnZTo6Y2FuY2VsKToKKyAgICAgICAgKFdlYktp
dDo6QWxsb3dJbmRleGVkREJNYWluVGhyZWFkQnJpZGdlOjpyZXN1bHQpOgorICAgICAgICAoV2Vi
S2l0OjpBbGxvd0luZGV4ZWREQk1haW5UaHJlYWRCcmlkZ2U6OnNpZ25hbENvbXBsZXRlZCk6Cisg
ICAgICAgIChXZWJLaXQ6OkFsbG93SW5kZXhlZERCTWFpblRocmVhZEJyaWRnZTo6QWxsb3dJbmRl
eGVkREJNYWluVGhyZWFkQnJpZGdlKToKKyAgICAgICAgKFdlYktpdDo6QWxsb3dJbmRleGVkREJN
YWluVGhyZWFkQnJpZGdlOjphbGxvd0luZGV4ZWREQlRhc2spOgorICAgICAgICAoV2ViS2l0OjpB
bGxvd0luZGV4ZWREQk1haW5UaHJlYWRCcmlkZ2U6OmRpZENvbXBsZXRlKToKKyAgICAgICAgKFdl
YktpdDo6SURCRmFjdG9yeUJhY2tlbmRQcm94eTo6YWxsb3dJREJGcm9tV29ya2VyVGhyZWFkKToK
KyAgICAgICAgKFdlYktpdDo6SURCRmFjdG9yeUJhY2tlbmRQcm94eTo6b3BlbkZyb21Xb3JrZXIp
OiBVc2luZyB0aGUgd2ViRnJhbWUKKyAgICAgICAgZnJvbSB0aGUgd29ya2VyIHNlZW1zIHRvIHNh
dGlzZnkgdGhlIHdlYWsgY29uZGl0aW9uIGluIGNocm9taXVtIHRoYXQKKyAgICAgICAgbmVpdGhl
ciBpdCBub3IgaXQncyBhc3NvY2lhdGVkIFJlbmRlclZpZXcgaXMgTlVMTC4KKyAgICAgICAgKiBz
cmMvSURCRmFjdG9yeUJhY2tlbmRQcm94eS5oOgorCiAyMDExLTEyLTAxICBKb2NoZW4gRWlzaW5n
ZXIgIDxqb2NoZW5AY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFtjaHJvbWl1bV0gYWRkIHJlZmVy
cmVyIHBvbGljeSB0byBXZWJDb250ZXh0TWVudURhdGEKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3N0b3JhZ2UvSURCRmFjdG9yeS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkZh
Y3RvcnkuY3BwCmluZGV4IGY1NGNmNzFlYjM4NjBlMzBlOWMwMzMwNDc0YmM1MjgxYzc3ZTVjYWMu
LmZmZmM0NGQ4YWQyY2UyMmE2ZjcxMjcyM2IyODJjN2FkZWI4OWFhNzQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCRmFjdG9yeS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
c3RvcmFnZS9JREJGYWN0b3J5LmNwcApAQCAtNDYsNiArNDYsOSBAQAogI2luY2x1ZGUgIlBhZ2Uu
aCIKICNpbmNsdWRlICJQYWdlR3JvdXAuaCIKICNpbmNsdWRlICJTZWN1cml0eU9yaWdpbi5oIgor
I2luY2x1ZGUgIldvcmtlckNvbnRleHQuaCIKKyNpbmNsdWRlICJXb3JrZXJMb2FkZXJQcm94eS5o
IgorI2luY2x1ZGUgIldvcmtlclRocmVhZC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAg
LTc5LDIzICs4MiwyMyBAQCBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IElEQkZhY3Rvcnk6OmdldERh
dGFiYXNlTmFtZXMoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udAogCiBQYXNzUmVmUHRyPElE
QlJlcXVlc3Q+IElEQkZhY3Rvcnk6Om9wZW4oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4
dCwgY29uc3QgU3RyaW5nJiBuYW1lLCBFeGNlcHRpb25Db2RlJiBlYykKIHsKLSAgICBpZiAoIWNv
bnRleHQtPmlzRG9jdW1lbnQoKSkgewotICAgICAgICAvLyBGSVhNRTogbWFrZSB0aGlzIHdvcmsg
d2l0aCB3b3JrZXJzLgotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0KLSAgICBEb2N1bWVudCog
ZG9jdW1lbnQgPSBzdGF0aWNfY2FzdDxEb2N1bWVudCo+KGNvbnRleHQpOwotICAgIGlmICghZG9j
dW1lbnQtPmZyYW1lKCkgfHwgIWRvY3VtZW50LT5wYWdlKCkpCi0gICAgICAgIHJldHVybiAwOwor
ICAgIEFTU0VSVChjb250ZXh0LT5pc0RvY3VtZW50KCkgfHwgY29udGV4dC0+aXNXb3JrZXJDb250
ZXh0KCkpOwogCiAgICAgaWYgKG5hbWUuaXNOdWxsKCkpIHsKICAgICAgICAgZWMgPSBJREJEYXRh
YmFzZUV4Y2VwdGlvbjo6Tk9OX1RSQU5TSUVOVF9FUlI7CiAgICAgICAgIHJldHVybiAwOwogICAg
IH0KLQotICAgIFJlZlB0cjxJREJSZXF1ZXN0PiByZXF1ZXN0ID0gSURCUmVxdWVzdDo6Y3JlYXRl
KGRvY3VtZW50LCBJREJBbnk6OmNyZWF0ZSh0aGlzKSwgMCk7Ci0gICAgR3JvdXBTZXR0aW5ncyog
Z3JvdXBTZXR0aW5ncyA9IGRvY3VtZW50LT5wYWdlKCktPmdyb3VwKCkuZ3JvdXBTZXR0aW5ncygp
OwotICAgIG1fYmFja2VuZC0+b3BlbihuYW1lLCByZXF1ZXN0LCBkb2N1bWVudC0+c2VjdXJpdHlP
cmlnaW4oKSwgZG9jdW1lbnQtPmZyYW1lKCksIGdyb3VwU2V0dGluZ3MtPmluZGV4ZWREQkRhdGFi
YXNlUGF0aCgpKTsKKyAgICBpZiAoY29udGV4dC0+aXNEb2N1bWVudCgpKSB7CisgICAgICAgIERv
Y3VtZW50KiBkb2N1bWVudCA9IHN0YXRpY19jYXN0PERvY3VtZW50Kj4oY29udGV4dCk7CisgICAg
ICAgIGlmICghZG9jdW1lbnQtPmZyYW1lKCkgfHwgIWRvY3VtZW50LT5wYWdlKCkpCisgICAgICAg
ICAgICByZXR1cm4gMDsKKyAgICAgICAgRnJhbWUqIGZyYW1lID0gZG9jdW1lbnQtPmZyYW1lKCk7
CisgICAgICAgIFJlZlB0cjxJREJSZXF1ZXN0PiByZXF1ZXN0ID0gSURCUmVxdWVzdDo6Y3JlYXRl
KGNvbnRleHQsIElEQkFueTo6Y3JlYXRlKHRoaXMpLCAwKTsKKyAgICAgICAgbV9iYWNrZW5kLT5v
cGVuKG5hbWUsIHJlcXVlc3QuZ2V0KCksIGNvbnRleHQtPnNlY3VyaXR5T3JpZ2luKCksIGZyYW1l
LCBTdHJpbmcoKSk7CisgICAgICAgIHJldHVybiByZXF1ZXN0OworICAgIH0KKyAgICBSZWZQdHI8
SURCUmVxdWVzdD4gcmVxdWVzdCA9IElEQlJlcXVlc3Q6OmNyZWF0ZShjb250ZXh0LCBJREJBbnk6
OmNyZWF0ZSh0aGlzKSwgMCk7CisgICAgbV9iYWNrZW5kLT5vcGVuRnJvbVdvcmtlcihuYW1lLCBy
ZXF1ZXN0LmdldCgpLCBjb250ZXh0LT5zZWN1cml0eU9yaWdpbigpLCBzdGF0aWNfY2FzdDxXb3Jr
ZXJDb250ZXh0Kj4oY29udGV4dCksIFN0cmluZygpKTsKICAgICByZXR1cm4gcmVxdWVzdDsKIH0K
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJGYWN0b3J5QmFja2VuZElt
cGwuY3BwIGIvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJGYWN0b3J5QmFja2VuZEltcGwuY3Bw
CmluZGV4IGQxMjQ4MWQzZGMxMTEwOGIwNjhiYjYwMWJmYzM2Zjg4ZDRjOTJlMWUuLjQ5YTQxOTlj
NjVkNjdkMjEwZWVhZDEyZmE4YTRkNDQyOTU5ZDFmOGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3N0b3JhZ2UvSURCRmFjdG9yeUJhY2tlbmRJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9zdG9yYWdlL0lEQkZhY3RvcnlCYWNrZW5kSW1wbC5jcHAKQEAgLTgwLDkgKzgwLDkgQEAgdm9p
ZCBJREJGYWN0b3J5QmFja2VuZEltcGw6OnJlbW92ZUlEQkJhY2tpbmdTdG9yZShjb25zdCBTdHJp
bmcmIGZpbGVJZGVudGlmaWVyKQogICAgIG1fYmFja2luZ1N0b3JlTWFwLnJlbW92ZShmaWxlSWRl
bnRpZmllcik7CiB9CiAKLXZvaWQgSURCRmFjdG9yeUJhY2tlbmRJbXBsOjpnZXREYXRhYmFzZU5h
bWVzKFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MsIFBhc3NSZWZQdHI8U2VjdXJp
dHlPcmlnaW4+IHNlY3VyaXR5T3JpZ2luLCBGcmFtZSosIGNvbnN0IFN0cmluZyYgZGF0YURpcikK
K3ZvaWQgSURCRmFjdG9yeUJhY2tlbmRJbXBsOjpnZXREYXRhYmFzZU5hbWVzKFBhc3NSZWZQdHI8
SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MsIFBhc3NSZWZQdHI8U2VjdXJpdHlPcmlnaW4+IHNlY3Vy
aXR5T3JpZ2luLCBGcmFtZSosIGNvbnN0IFN0cmluZyYgZGF0YURpcmVjdG9yeSkKIHsKLSAgICBS
ZWZQdHI8SURCQmFja2luZ1N0b3JlPiBiYWNraW5nU3RvcmUgPSBvcGVuQmFja2luZ1N0b3JlKHNl
Y3VyaXR5T3JpZ2luLCBkYXRhRGlyKTsKKyAgICBSZWZQdHI8SURCQmFja2luZ1N0b3JlPiBiYWNr
aW5nU3RvcmUgPSBvcGVuQmFja2luZ1N0b3JlKHNlY3VyaXR5T3JpZ2luLCBkYXRhRGlyZWN0b3J5
KTsKICAgICBpZiAoIWJhY2tpbmdTdG9yZSkgewogICAgICAgICBjYWxsYmFja3MtPm9uRXJyb3Io
SURCRGF0YWJhc2VFcnJvcjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0aW9uOjpVTktOT1dOX0VS
UiwgIkludGVybmFsIGVycm9yLiIpKTsKICAgICAgICAgcmV0dXJuOwpAQCAtOTgsMzEgKzk4LDE3
IEBAIHZvaWQgSURCRmFjdG9yeUJhY2tlbmRJbXBsOjpnZXREYXRhYmFzZU5hbWVzKFBhc3NSZWZQ
dHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MsCiAgICAgY2FsbGJhY2tzLT5vblN1Y2Nlc3MoZGF0
YWJhc2VOYW1lcy5yZWxlYXNlKCkpOwogfQogCi12b2lkIElEQkZhY3RvcnlCYWNrZW5kSW1wbDo6
b3Blbihjb25zdCBTdHJpbmcmIG5hbWUsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFj
a3MsIFBhc3NSZWZQdHI8U2VjdXJpdHlPcmlnaW4+IHNlY3VyaXR5T3JpZ2luLCBGcmFtZSosIGNv
bnN0IFN0cmluZyYgZGF0YURpcikKK3ZvaWQgSURCRmFjdG9yeUJhY2tlbmRJbXBsOjpvcGVuKGNv
bnN0IFN0cmluZyYgbmFtZSwgSURCQ2FsbGJhY2tzKiBjYWxsYmFja3MsIFBhc3NSZWZQdHI8U2Vj
dXJpdHlPcmlnaW4+IHNlY3VyaXR5T3JpZ2luLCBGcmFtZSosIGNvbnN0IFN0cmluZyYgZGF0YURp
cmVjdG9yeSkKIHsKLSAgICBjb25zdCBTdHJpbmcgdW5pcXVlSWRlbnRpZmllciA9IGNvbXB1dGVV
bmlxdWVJZGVudGlmaWVyKG5hbWUsIHNlY3VyaXR5T3JpZ2luLmdldCgpKTsKLQotICAgIElEQkRh
dGFiYXNlQmFja2VuZE1hcDo6aXRlcmF0b3IgaXQgPSBtX2RhdGFiYXNlQmFja2VuZE1hcC5maW5k
KHVuaXF1ZUlkZW50aWZpZXIpOwotICAgIGlmIChpdCAhPSBtX2RhdGFiYXNlQmFja2VuZE1hcC5l
bmQoKSkgewotICAgICAgICAvLyBJZiBpdCdzIGFscmVhZHkgYmVlbiBvcGVuZWQsIHdlIGhhdmUg
dG8gd2FpdCBmb3IgYW55IHBlbmRpbmcKLSAgICAgICAgLy8gc2V0VmVyc2lvbiBjYWxscyB0byBj
b21wbGV0ZS4KLSAgICAgICAgaXQtPnNlY29uZC0+b3BlbkNvbm5lY3Rpb24oY2FsbGJhY2tzKTsK
LSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIC8vIEZJWE1FOiBFdmVyeXRoaW5nIGZyb20g
bm93IG9uIHNob3VsZCBiZSBkb25lIG9uIGFub3RoZXIgdGhyZWFkLgotICAgIFJlZlB0cjxJREJC
YWNraW5nU3RvcmU+IGJhY2tpbmdTdG9yZSA9IG9wZW5CYWNraW5nU3RvcmUoc2VjdXJpdHlPcmln
aW4sIGRhdGFEaXIpOwotICAgIGlmICghYmFja2luZ1N0b3JlKSB7Ci0gICAgICAgIGNhbGxiYWNr
cy0+b25FcnJvcihJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246
OlVOS05PV05fRVJSLCAiSW50ZXJuYWwgZXJyb3IuIikpOwotICAgICAgICByZXR1cm47Ci0gICAg
fQorICAgIG9wZW5JbnRlcm5hbChuYW1lLCBjYWxsYmFja3MsIHNlY3VyaXR5T3JpZ2luLCBkYXRh
RGlyZWN0b3J5KTsKK30KIAotICAgIFJlZlB0cjxJREJEYXRhYmFzZUJhY2tlbmRJbXBsPiBkYXRh
YmFzZUJhY2tlbmQgPSBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpjcmVhdGUobmFtZSwgYmFja2lu
Z1N0b3JlLmdldCgpLCBtX3RyYW5zYWN0aW9uQ29vcmRpbmF0b3IuZ2V0KCksIHRoaXMsIHVuaXF1
ZUlkZW50aWZpZXIpOwotICAgIGNhbGxiYWNrcy0+b25TdWNjZXNzKGRhdGFiYXNlQmFja2VuZC5n
ZXQoKSk7Ci0gICAgbV9kYXRhYmFzZUJhY2tlbmRNYXAuc2V0KHVuaXF1ZUlkZW50aWZpZXIsIGRh
dGFiYXNlQmFja2VuZC5nZXQoKSk7Cit2b2lkIElEQkZhY3RvcnlCYWNrZW5kSW1wbDo6b3BlbkZy
b21Xb3JrZXIoY29uc3QgU3RyaW5nJiBuYW1lLCBJREJDYWxsYmFja3MqIGNhbGxiYWNrcywgUGFz
c1JlZlB0cjxTZWN1cml0eU9yaWdpbj4gc2VjdXJpdHlPcmlnaW4sIFdvcmtlckNvbnRleHQqLCBj
b25zdCBTdHJpbmcmIGRhdGFEaXJlY3RvcnkpCit7CisgICAgb3BlbkludGVybmFsKG5hbWUsIGNh
bGxiYWNrcywgc2VjdXJpdHlPcmlnaW4sIGRhdGFEaXJlY3RvcnkpOwogfQogCi12b2lkIElEQkZh
Y3RvcnlCYWNrZW5kSW1wbDo6ZGVsZXRlRGF0YWJhc2UoY29uc3QgU3RyaW5nJiBuYW1lLCBQYXNz
UmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzLCBQYXNzUmVmUHRyPFNlY3VyaXR5T3JpZ2lu
PiBzZWN1cml0eU9yaWdpbiwgRnJhbWUqLCBjb25zdCBTdHJpbmcmIGRhdGFEaXIpCit2b2lkIElE
QkZhY3RvcnlCYWNrZW5kSW1wbDo6ZGVsZXRlRGF0YWJhc2UoY29uc3QgU3RyaW5nJiBuYW1lLCBQ
YXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzLCBQYXNzUmVmUHRyPFNlY3VyaXR5T3Jp
Z2luPiBzZWN1cml0eU9yaWdpbiwgRnJhbWUqLCBjb25zdCBTdHJpbmcmIGRhdGFEaXJlY3Rvcnkp
CiB7CiAgICAgY29uc3QgU3RyaW5nIHVuaXF1ZUlkZW50aWZpZXIgPSBjb21wdXRlVW5pcXVlSWRl
bnRpZmllcihuYW1lLCBzZWN1cml0eU9yaWdpbi5nZXQoKSk7CiAKQEAgLTEzNSw3ICsxMjEsNyBA
QCB2b2lkIElEQkZhY3RvcnlCYWNrZW5kSW1wbDo6ZGVsZXRlRGF0YWJhc2UoY29uc3QgU3RyaW5n
JiBuYW1lLCBQYXNzUmVmUHRyPElEQkNhbAogICAgIH0KIAogICAgIC8vIEZJWE1FOiBFdmVyeXRo
aW5nIGZyb20gbm93IG9uIHNob3VsZCBiZSBkb25lIG9uIGFub3RoZXIgdGhyZWFkLgotICAgIFJl
ZlB0cjxJREJCYWNraW5nU3RvcmU+IGJhY2tpbmdTdG9yZSA9IG9wZW5CYWNraW5nU3RvcmUoc2Vj
dXJpdHlPcmlnaW4sIGRhdGFEaXIpOworICAgIFJlZlB0cjxJREJCYWNraW5nU3RvcmU+IGJhY2tp
bmdTdG9yZSA9IG9wZW5CYWNraW5nU3RvcmUoc2VjdXJpdHlPcmlnaW4sIGRhdGFEaXJlY3Rvcnkp
OwogICAgIGlmICghYmFja2luZ1N0b3JlKSB7CiAgICAgICAgIGNhbGxiYWNrcy0+b25FcnJvcihJ
REJEYXRhYmFzZUVycm9yOjpjcmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246OlVOS05PV05fRVJS
LCAiSW50ZXJuYWwgZXJyb3IuIikpOwogICAgICAgICByZXR1cm47CkBAIC0xNDYsNyArMTMyLDcg
QEAgdm9pZCBJREJGYWN0b3J5QmFja2VuZEltcGw6OmRlbGV0ZURhdGFiYXNlKGNvbnN0IFN0cmlu
ZyYgbmFtZSwgUGFzc1JlZlB0cjxJREJDYWwKICAgICBkYXRhYmFzZUJhY2tlbmQtPmRlbGV0ZURh
dGFiYXNlKGNhbGxiYWNrcyk7CiB9CiAKLVBhc3NSZWZQdHI8SURCQmFja2luZ1N0b3JlPiBJREJG
YWN0b3J5QmFja2VuZEltcGw6Om9wZW5CYWNraW5nU3RvcmUoUGFzc1JlZlB0cjxTZWN1cml0eU9y
aWdpbj4gc2VjdXJpdHlPcmlnaW4sIGNvbnN0IFN0cmluZyYgZGF0YURpcikKK1Bhc3NSZWZQdHI8
SURCQmFja2luZ1N0b3JlPiBJREJGYWN0b3J5QmFja2VuZEltcGw6Om9wZW5CYWNraW5nU3RvcmUo
UGFzc1JlZlB0cjxTZWN1cml0eU9yaWdpbj4gc2VjdXJpdHlPcmlnaW4sIGNvbnN0IFN0cmluZyYg
ZGF0YURpcmVjdG9yeSkKIHsKICAgICBjb25zdCBTdHJpbmcgZmlsZUlkZW50aWZpZXIgPSBjb21w
dXRlRmlsZUlkZW50aWZpZXIoc2VjdXJpdHlPcmlnaW4uZ2V0KCkpOwogCkBAIC0xNTYsNyArMTQy
LDcgQEAgUGFzc1JlZlB0cjxJREJCYWNraW5nU3RvcmU+IElEQkZhY3RvcnlCYWNrZW5kSW1wbDo6
b3BlbkJhY2tpbmdTdG9yZShQYXNzUmVmUHRyPFMKICAgICAgICAgYmFja2luZ1N0b3JlID0gaXQy
LT5zZWNvbmQ7CiAgICAgZWxzZSB7CiAjaWYgVVNFKExFVkVMREIpCi0gICAgICAgIGJhY2tpbmdT
dG9yZSA9IElEQkxldmVsREJCYWNraW5nU3RvcmU6Om9wZW4oc2VjdXJpdHlPcmlnaW4uZ2V0KCks
IGRhdGFEaXIsIGZpbGVJZGVudGlmaWVyLCB0aGlzKTsKKyAgICAgICAgYmFja2luZ1N0b3JlID0g
SURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6b3BlbihzZWN1cml0eU9yaWdpbi5nZXQoKSwgZGF0YURp
cmVjdG9yeSwgZmlsZUlkZW50aWZpZXIsIHRoaXMpOwogI2Vsc2UKICAgICAgICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7CiAjZW5kaWYKQEAgLTE2OCw2ICsxNTQsMzEgQEAgUGFzc1JlZlB0cjxJREJC
YWNraW5nU3RvcmU+IElEQkZhY3RvcnlCYWNrZW5kSW1wbDo6b3BlbkJhY2tpbmdTdG9yZShQYXNz
UmVmUHRyPFMKICAgICByZXR1cm4gMDsKIH0KIAordm9pZCBJREJGYWN0b3J5QmFja2VuZEltcGw6
Om9wZW5JbnRlcm5hbChjb25zdCBTdHJpbmcmIG5hbWUsIElEQkNhbGxiYWNrcyogY2FsbGJhY2tz
LCBQYXNzUmVmUHRyPFNlY3VyaXR5T3JpZ2luPiBwcnBTZWN1cml0eU9yaWdpbiwgY29uc3QgU3Ry
aW5nJiBkYXRhRGlyZWN0b3J5KQoreworICAgIFJlZlB0cjxTZWN1cml0eU9yaWdpbj4gc2VjdXJp
dHlPcmlnaW4gPSBwcnBTZWN1cml0eU9yaWdpbjsKKyAgICBjb25zdCBTdHJpbmcgdW5pcXVlSWRl
bnRpZmllciA9IGNvbXB1dGVVbmlxdWVJZGVudGlmaWVyKG5hbWUsIHNlY3VyaXR5T3JpZ2luLmdl
dCgpKTsKKworICAgIElEQkRhdGFiYXNlQmFja2VuZE1hcDo6aXRlcmF0b3IgaXQgPSBtX2RhdGFi
YXNlQmFja2VuZE1hcC5maW5kKHVuaXF1ZUlkZW50aWZpZXIpOworICAgIGlmIChpdCAhPSBtX2Rh
dGFiYXNlQmFja2VuZE1hcC5lbmQoKSkgeworICAgICAgICAvLyBJZiBpdCdzIGFscmVhZHkgYmVl
biBvcGVuZWQsIHdlIGhhdmUgdG8gd2FpdCBmb3IgYW55IHBlbmRpbmcKKyAgICAgICAgLy8gc2V0
VmVyc2lvbiBjYWxscyB0byBjb21wbGV0ZS4KKyAgICAgICAgaXQtPnNlY29uZC0+b3BlbkNvbm5l
Y3Rpb24oY2FsbGJhY2tzKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIEZJWE1F
OiBFdmVyeXRoaW5nIGZyb20gbm93IG9uIHNob3VsZCBiZSBkb25lIG9uIGFub3RoZXIgdGhyZWFk
LgorICAgIFJlZlB0cjxJREJCYWNraW5nU3RvcmU+IGJhY2tpbmdTdG9yZSA9IG9wZW5CYWNraW5n
U3RvcmUoc2VjdXJpdHlPcmlnaW4sIGRhdGFEaXJlY3RvcnkpOworICAgIGlmICghYmFja2luZ1N0
b3JlKSB7CisgICAgICAgIGNhbGxiYWNrcy0+b25FcnJvcihJREJEYXRhYmFzZUVycm9yOjpjcmVh
dGUoSURCRGF0YWJhc2VFeGNlcHRpb246OlVOS05PV05fRVJSLCAiSW50ZXJuYWwgZXJyb3IuIikp
OworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgUmVmUHRyPElEQkRhdGFiYXNlQmFja2Vu
ZEltcGw+IGRhdGFiYXNlQmFja2VuZCA9IElEQkRhdGFiYXNlQmFja2VuZEltcGw6OmNyZWF0ZShu
YW1lLCBiYWNraW5nU3RvcmUuZ2V0KCksIG1fdHJhbnNhY3Rpb25Db29yZGluYXRvci5nZXQoKSwg
dGhpcywgdW5pcXVlSWRlbnRpZmllcik7CisgICAgY2FsbGJhY2tzLT5vblN1Y2Nlc3MoZGF0YWJh
c2VCYWNrZW5kLmdldCgpKTsKKyAgICBtX2RhdGFiYXNlQmFja2VuZE1hcC5zZXQodW5pcXVlSWRl
bnRpZmllciwgZGF0YWJhc2VCYWNrZW5kLmdldCgpKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQogCiAjZW5kaWYgLy8gRU5BQkxFKElOREVYRURfREFUQUJBU0UpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkZhY3RvcnlCYWNrZW5kSW1wbC5oIGIvU291cmNlL1dl
YkNvcmUvc3RvcmFnZS9JREJGYWN0b3J5QmFja2VuZEltcGwuaAppbmRleCA5YzJmMDdmYjcwNTQ3
YTIxMDNhNGNhZDc3ZGI1NmU1OTNmMWM0OTRhLi43OTgyMTY4YmUzMzdkYzk1NmEwYjY1YmYzOGIx
OGQ0NjhkZTFiYmY5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkZhY3Rv
cnlCYWNrZW5kSW1wbC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCRmFjdG9yeUJh
Y2tlbmRJbXBsLmgKQEAgLTU2LDEyICs1NiwxNSBAQCBwdWJsaWM6CiAgICAgdm9pZCByZW1vdmVJ
REJCYWNraW5nU3RvcmUoY29uc3QgU3RyaW5nJiBmaWxlSWRlbnRpZmllcik7CiAKICAgICB2aXJ0
dWFsIHZvaWQgZ2V0RGF0YWJhc2VOYW1lcyhQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4sIFBhc3NS
ZWZQdHI8U2VjdXJpdHlPcmlnaW4+LCBGcmFtZSosIGNvbnN0IFN0cmluZyYgZGF0YURpcik7Ci0g
ICAgdmlydHVhbCB2b2lkIG9wZW4oY29uc3QgU3RyaW5nJiBuYW1lLCBQYXNzUmVmUHRyPElEQkNh
bGxiYWNrcz4sIFBhc3NSZWZQdHI8U2VjdXJpdHlPcmlnaW4+LCBGcmFtZSosIGNvbnN0IFN0cmlu
ZyYgZGF0YURpcik7CisKKyAgICB2aXJ0dWFsIHZvaWQgb3Blbihjb25zdCBTdHJpbmcmIG5hbWUs
IElEQkNhbGxiYWNrcyosIFBhc3NSZWZQdHI8U2VjdXJpdHlPcmlnaW4+LCBGcmFtZSosIGNvbnN0
IFN0cmluZyYgZGF0YURpcik7CisgICAgdmlydHVhbCB2b2lkIG9wZW5Gcm9tV29ya2VyKGNvbnN0
IFN0cmluZyYgbmFtZSwgSURCQ2FsbGJhY2tzKiwgUGFzc1JlZlB0cjxTZWN1cml0eU9yaWdpbj4s
IFdvcmtlckNvbnRleHQqLCBjb25zdCBTdHJpbmcmIGRhdGFEaXIpOwogICAgIHZpcnR1YWwgdm9p
ZCBkZWxldGVEYXRhYmFzZShjb25zdCBTdHJpbmcmIG5hbWUsIFBhc3NSZWZQdHI8SURCQ2FsbGJh
Y2tzPiwgUGFzc1JlZlB0cjxTZWN1cml0eU9yaWdpbj4sIEZyYW1lKiwgY29uc3QgU3RyaW5nJiBk
YXRhRGlyKTsKIAogcHJpdmF0ZToKICAgICBJREJGYWN0b3J5QmFja2VuZEltcGwoKTsKICAgICBQ
YXNzUmVmUHRyPElEQkJhY2tpbmdTdG9yZT4gb3BlbkJhY2tpbmdTdG9yZShQYXNzUmVmUHRyPFNl
Y3VyaXR5T3JpZ2luPiwgY29uc3QgU3RyaW5nJiBkYXRhRGlyKTsKKyAgICB2b2lkIG9wZW5JbnRl
cm5hbChjb25zdCBTdHJpbmcmIG5hbWUsIElEQkNhbGxiYWNrcyosIFBhc3NSZWZQdHI8U2VjdXJp
dHlPcmlnaW4+LCBjb25zdCBTdHJpbmcmIGRhdGFEaXIpOwogCiAgICAgdHlwZWRlZiBIYXNoTWFw
PFN0cmluZywgSURCRGF0YWJhc2VCYWNrZW5kSW1wbCo+IElEQkRhdGFiYXNlQmFja2VuZE1hcDsK
ICAgICBJREJEYXRhYmFzZUJhY2tlbmRNYXAgbV9kYXRhYmFzZUJhY2tlbmRNYXA7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkZhY3RvcnlCYWNrZW5kSW50ZXJmYWNlLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkZhY3RvcnlCYWNrZW5kSW50ZXJmYWNlLmgKaW5k
ZXggY2U5YjRkZjBjYjdmZjYyMTE4MGQ1YmZkNjg3MWFlZDI0MmRkMjUxZi4uMTlhMWM5Nzg0YzMw
YmY3YWE4NzU1MDBhYmJjYzhkNDA5MDhmYjU1ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
c3RvcmFnZS9JREJGYWN0b3J5QmFja2VuZEludGVyZmFjZS5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3N0b3JhZ2UvSURCRmFjdG9yeUJhY2tlbmRJbnRlcmZhY2UuaApAQCAtNDAsNiArNDAsNyBAQCBu
YW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBGcmFtZTsKIGNsYXNzIElEQkRhdGFiYXNlOwogY2xh
c3MgU2VjdXJpdHlPcmlnaW47CitjbGFzcyBXb3JrZXJDb250ZXh0OwogCiB0eXBlZGVmIGludCBF
eGNlcHRpb25Db2RlOwogCkBAIC01Myw3ICs1NCw5IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIH5J
REJGYWN0b3J5QmFja2VuZEludGVyZmFjZSgpIHsgfQogCiAgICAgdmlydHVhbCB2b2lkIGdldERh
dGFiYXNlTmFtZXMoUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+LCBQYXNzUmVmUHRyPFNlY3VyaXR5
T3JpZ2luPiwgRnJhbWUqLCBjb25zdCBTdHJpbmcmIGRhdGFEaXIpID0gMDsKLSAgICB2aXJ0dWFs
IHZvaWQgb3Blbihjb25zdCBTdHJpbmcmIG5hbWUsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiwg
UGFzc1JlZlB0cjxTZWN1cml0eU9yaWdpbj4sIEZyYW1lKiwgY29uc3QgU3RyaW5nJiBkYXRhRGly
KSA9IDA7CisKKyAgICB2aXJ0dWFsIHZvaWQgb3Blbihjb25zdCBTdHJpbmcmIG5hbWUsIElEQkNh
bGxiYWNrcyosIFBhc3NSZWZQdHI8U2VjdXJpdHlPcmlnaW4+LCBGcmFtZSosIGNvbnN0IFN0cmlu
ZyYgZGF0YURpcikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBvcGVuRnJvbVdvcmtlcihjb25zdCBT
dHJpbmcmIG5hbWUsIElEQkNhbGxiYWNrcyosIFBhc3NSZWZQdHI8U2VjdXJpdHlPcmlnaW4+LCBX
b3JrZXJDb250ZXh0KiwgY29uc3QgU3RyaW5nJiBkYXRhRGlyKSA9IDA7CiAgICAgdmlydHVhbCB2
b2lkIGRlbGV0ZURhdGFiYXNlKGNvbnN0IFN0cmluZyYgbmFtZSwgUGFzc1JlZlB0cjxJREJDYWxs
YmFja3M+LCBQYXNzUmVmUHRyPFNlY3VyaXR5T3JpZ2luPiwgRnJhbWUqLCBjb25zdCBTdHJpbmcm
IGRhdGFEaXIpID0gMDsKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMv
V29ya2VyQ29udGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS93b3JrZXJzL1dvcmtlckNvbnRleHQu
Y3BwCmluZGV4IDg1YWYyZjVmNmQ3ZWVhZTg1MjJiYTg5MTM2NmU3OTNkMWM4OTQyYWUuLmMyODQ2
MDhmMTcyOGNmZDJlYjNlMWQ5ZjdiYzVjYWJlYTFjZjVmZmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3dvcmtlcnMvV29ya2VyQ29udGV4dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvd29y
a2Vycy9Xb3JrZXJDb250ZXh0LmNwcApAQCAtODYsNiArODYsOCBAQAogI2luY2x1ZGUgIkV4Y2Vw
dGlvbkNvZGUuaCIKICNlbmRpZgogCisjaW5jbHVkZSAiSURCRmFjdG9yeS5oIgorCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKIGNsYXNzIENsb3NlV29ya2VyQ29udGV4dFRhc2sgOiBwdWJsaWMgU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dDo6VGFzayB7CkBAIC01MjEsNiArNTIzLDE5IEBAIHZvaWQgV29y
a2VyQ29udGV4dDo6bm90aWZ5T2JzZXJ2ZXJzT2ZTdG9wKCkKICAgICB9CiB9CiAKKyNpZiBFTkFC
TEUoSU5ERVhFRF9EQVRBQkFTRSkKK0lEQkZhY3RvcnkqIFdvcmtlckNvbnRleHQ6OndlYmtpdElu
ZGV4ZWREQigpIGNvbnN0Cit7CisgICAgaWYgKCFzZWN1cml0eU9yaWdpbigpLT5jYW5BY2Nlc3NE
YXRhYmFzZSgpKQorICAgICAgICByZXR1cm4gMDsKKyAgICBpZiAoIW1faWRiRmFjdG9yeUJhY2tl
bmRJbnRlcmZhY2UpCisgICAgICAgIG1faWRiRmFjdG9yeUJhY2tlbmRJbnRlcmZhY2UgPSBJREJG
YWN0b3J5QmFja2VuZEludGVyZmFjZTo6Y3JlYXRlKCk7CisgICAgaWYgKCFtX2lkYkZhY3Rvcnkp
CisgICAgICAgIG1faWRiRmFjdG9yeSA9IElEQkZhY3Rvcnk6OmNyZWF0ZShtX2lkYkZhY3RvcnlC
YWNrZW5kSW50ZXJmYWNlLmdldCgpKTsKKyAgICByZXR1cm4gbV9pZGJGYWN0b3J5LmdldCgpOwor
fQorI2VuZGlmCisKIFdvcmtlckV2ZW50UXVldWUqIFdvcmtlckNvbnRleHQ6OmV2ZW50UXVldWUo
KSBjb25zdAogewogICAgIHJldHVybiBtX2V2ZW50UXVldWUuZ2V0KCk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS93b3JrZXJzL1dvcmtlckNvbnRleHQuaCBiL1NvdXJjZS9XZWJDb3JlL3dv
cmtlcnMvV29ya2VyQ29udGV4dC5oCmluZGV4IDVkMTRiMDcwNGIzMjI2Y2U4ZmY5MTc4MjQyYTgw
MzA0MWU4ZTRmODMuLmM5NGZhMDk3OGIzYWEwNDJlOTEyM2ViYWIzNzQwMTJhYWI0ZWZkMzMgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMvV29ya2VyQ29udGV4dC5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3dvcmtlcnMvV29ya2VyQ29udGV4dC5oCkBAIC01NSw2ICs1NSw3IEBAIG5h
bWVzcGFjZSBXZWJDb3JlIHsKICAgICBjbGFzcyBFbnRyeVN5bmM7CiAgICAgY2xhc3MgRXJyb3JD
YWxsYmFjazsKICAgICBjbGFzcyBGaWxlU3lzdGVtQ2FsbGJhY2s7CisgICAgY2xhc3MgSURCRmFj
dG9yeTsKICAgICBjbGFzcyBOb3RpZmljYXRpb25DZW50ZXI7CiAgICAgY2xhc3MgU2NoZWR1bGVk
QWN0aW9uOwogICAgIGNsYXNzIFdvcmtlckluc3BlY3RvckNvbnRyb2xsZXI7CkBAIC0xNzMsNiAr
MTc0LDkgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB2b2lkIHJlZ2lzdGVyT2JzZXJ2
ZXIoT2JzZXJ2ZXIqKTsKICAgICAgICAgdm9pZCB1bnJlZ2lzdGVyT2JzZXJ2ZXIoT2JzZXJ2ZXIq
KTsKICAgICAgICAgdm9pZCBub3RpZnlPYnNlcnZlcnNPZlN0b3AoKTsKKyNpZiBFTkFCTEUoSU5E
RVhFRF9EQVRBQkFTRSkKKyAgICAgICAgSURCRmFjdG9yeSogd2Via2l0SW5kZXhlZERCKCkgY29u
c3Q7CisjZW5kaWYKIAogICAgIHByb3RlY3RlZDoKICAgICAgICAgV29ya2VyQ29udGV4dChjb25z
dCBLVVJMJiwgY29uc3QgU3RyaW5nJiwgV29ya2VyVGhyZWFkKik7CkBAIC0yMTgsNiArMjIyLDEy
IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgSGFzaFNldDxPYnNlcnZlcio+IG1fd29y
a2VyT2JzZXJ2ZXJzOwogCiAgICAgICAgIE93blB0cjxXb3JrZXJFdmVudFF1ZXVlPiBtX2V2ZW50
UXVldWU7CisKKyNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKKyAgICAgICAgbXV0YWJsZSBS
ZWZQdHI8SURCRmFjdG9yeT4gbV9pZGJGYWN0b3J5OworICAgICAgICBtdXRhYmxlIFJlZlB0cjxJ
REJGYWN0b3J5QmFja2VuZEludGVyZmFjZT4gbV9pZGJGYWN0b3J5QmFja2VuZEludGVyZmFjZTsK
KyNlbmRpZgorCiAgICAgfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJDb250ZXh0LmlkbCBiL1NvdXJjZS9XZWJDb3Jl
L3dvcmtlcnMvV29ya2VyQ29udGV4dC5pZGwKaW5kZXggZjdjMWJiYjI5ZGRlYTY4ZjY5ZDM1ODk0
YTRjZmE1Y2I0NTIzZTE2NS4uNzM2YmJjMTMzZjdmMjMzMGY3MGFiMDczYTg4ODAzZTA3NWFlMGFk
MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJDb250ZXh0LmlkbAor
KysgYi9Tb3VyY2UvV2ViQ29yZS93b3JrZXJzL1dvcmtlckNvbnRleHQuaWRsCkBAIC0xMjYsNiAr
MTI2LDIwIEBAIG1vZHVsZSB0aHJlYWRzIHsKICAgICAgICAgYXR0cmlidXRlIEZsb2F0MzJBcnJh
eUNvbnN0cnVjdG9yIEZsb2F0MzJBcnJheTsgLy8gVXNhYmxlIHdpdGggbmV3IG9wZXJhdG9yCiAg
ICAgICAgIGF0dHJpYnV0ZSBGbG9hdDY0QXJyYXlDb25zdHJ1Y3RvciBGbG9hdDY0QXJyYXk7IC8v
IFVzYWJsZSB3aXRoIG5ldyBvcGVyYXRvcgogICAgICAgICBhdHRyaWJ1dGUgRGF0YVZpZXdDb25z
dHJ1Y3RvciBEYXRhVmlldzsgLy8gVXNhYmxlIHdpdGggbmV3IG9wZXJhdG9yCisjaWYgZGVmaW5l
ZChFTkFCTEVfSU5ERVhFRF9EQVRBQkFTRSkgJiYgRU5BQkxFX0lOREVYRURfREFUQUJBU0UKKyAg
ICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIFtFbmFibGVkQXRSdW50aW1lXSBJREJGYWN0b3J5IHdl
YmtpdEluZGV4ZWREQjsKKworICAgICAgICBhdHRyaWJ1dGUgW0VuYWJsZWRBdFJ1bnRpbWVdIElE
QkN1cnNvckNvbnN0cnVjdG9yIHdlYmtpdElEQkN1cnNvcjsKKyAgICAgICAgYXR0cmlidXRlIFtF
bmFibGVkQXRSdW50aW1lXSBJREJEYXRhYmFzZUNvbnN0cnVjdG9yIHdlYmtpdElEQkRhdGFiYXNl
OworICAgICAgICBhdHRyaWJ1dGUgW0VuYWJsZWRBdFJ1bnRpbWVdIElEQkRhdGFiYXNlRXJyb3JD
b25zdHJ1Y3RvciB3ZWJraXRJREJEYXRhYmFzZUVycm9yOworICAgICAgICBhdHRyaWJ1dGUgW0Vu
YWJsZWRBdFJ1bnRpbWVdIElEQkRhdGFiYXNlRXhjZXB0aW9uQ29uc3RydWN0b3Igd2Via2l0SURC
RGF0YWJhc2VFeGNlcHRpb247CisgICAgICAgIGF0dHJpYnV0ZSBbRW5hYmxlZEF0UnVudGltZV0g
SURCRmFjdG9yeUNvbnN0cnVjdG9yIHdlYmtpdElEQkZhY3Rvcnk7CisgICAgICAgIGF0dHJpYnV0
ZSBbRW5hYmxlZEF0UnVudGltZV0gSURCSW5kZXhDb25zdHJ1Y3RvciB3ZWJraXRJREJJbmRleDsK
KyAgICAgICAgYXR0cmlidXRlIFtFbmFibGVkQXRSdW50aW1lXSBJREJLZXlSYW5nZUNvbnN0cnVj
dG9yIHdlYmtpdElEQktleVJhbmdlOworICAgICAgICBhdHRyaWJ1dGUgW0VuYWJsZWRBdFJ1bnRp
bWVdIElEQk9iamVjdFN0b3JlQ29uc3RydWN0b3Igd2Via2l0SURCT2JqZWN0U3RvcmU7CisgICAg
ICAgIGF0dHJpYnV0ZSBbRW5hYmxlZEF0UnVudGltZV0gSURCUmVxdWVzdENvbnN0cnVjdG9yIHdl
YmtpdElEQlJlcXVlc3Q7CisgICAgICAgIGF0dHJpYnV0ZSBbRW5hYmxlZEF0UnVudGltZV0gSURC
VHJhbnNhY3Rpb25Db25zdHJ1Y3RvciB3ZWJraXRJREJUcmFuc2FjdGlvbjsKKyNlbmRpZgogICAg
IH07CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0lEQkZhY3Rv
cnlCYWNrZW5kUHJveHkuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvSURCRmFjdG9y
eUJhY2tlbmRQcm94eS5jcHAKaW5kZXggN2I2MDM4YjM2YWQ5NDBlYzk0YTFkMGRhZTU0NzRkY2Vl
ZTRhMGY5Yy4uMzEzZDkzYjEyZjA1MTc0YTI2MGFhYmMxNGRlZTg2NTI1NmNlMWExOSAxMDA3NTUK
LS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvSURCRmFjdG9yeUJhY2tlbmRQcm94eS5j
cHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvSURCRmFjdG9yeUJhY2tlbmRQcm94
eS5jcHAKQEAgLTMxLDYgKzMxLDcgQEAKIAogI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQog
CisjaW5jbHVkZSAiQ3Jvc3NUaHJlYWRUYXNrLmgiCiAjaW5jbHVkZSAiRE9NU3RyaW5nTGlzdC5o
IgogI2luY2x1ZGUgIklEQkRhdGFiYXNlQmFja2VuZFByb3h5LmgiCiAjaW5jbHVkZSAiSURCRGF0
YWJhc2VFcnJvci5oIgpAQCAtNDUsNiArNDYsMTIgQEAKICNpbmNsdWRlICJXZWJQZXJtaXNzaW9u
Q2xpZW50LmgiCiAjaW5jbHVkZSAiV2ViVmVjdG9yLmgiCiAjaW5jbHVkZSAiV2ViVmlld0ltcGwu
aCIKKyNpbmNsdWRlICJXZWJXb3JrZXJCYXNlLmgiCisjaW5jbHVkZSAiV29ya2VyQ29udGV4dC5o
IgorI2luY2x1ZGUgIldvcmtlckxvYWRlclByb3h5LmgiCisjaW5jbHVkZSAiV29ya2VyU2NyaXB0
Q29udHJvbGxlci5oIgorI2luY2x1ZGUgIldvcmtlclRocmVhZC5oIgorCiAKIHVzaW5nIG5hbWVz
cGFjZSBXZWJDb3JlOwogCkBAIC03OCw3ICs4NSwxMDEgQEAgdm9pZCBJREJGYWN0b3J5QmFja2Vu
ZFByb3h5OjpnZXREYXRhYmFzZU5hbWVzKFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFj
a3MKICAgICBtX3dlYklEQkZhY3RvcnktPmdldERhdGFiYXNlTmFtZXMobmV3IFdlYklEQkNhbGxi
YWNrc0ltcGwoY2FsbGJhY2tzKSwgb3JpZ2luLCB3ZWJGcmFtZSwgZGF0YURpcik7CiB9CiAKLXZv
aWQgSURCRmFjdG9yeUJhY2tlbmRQcm94eTo6b3Blbihjb25zdCBTdHJpbmcmIG5hbWUsIFBhc3NS
ZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MsIFBhc3NSZWZQdHI8U2VjdXJpdHlPcmlnaW4+
IHBycE9yaWdpbiwgRnJhbWUqIGZyYW1lLCBjb25zdCBTdHJpbmcmIGRhdGFEaXIpCitzdGF0aWMg
Y29uc3QgY2hhciBhbGxvd0luZGV4ZWREQk1vZGVbXSA9ICJhbGxvd0luZGV4ZWREQk1vZGUiOwor
CitjbGFzcyBBbGxvd0luZGV4ZWREQk1haW5UaHJlYWRCcmlkZ2UgOiBwdWJsaWMgVGhyZWFkU2Fm
ZVJlZkNvdW50ZWQ8QWxsb3dJbmRleGVkREJNYWluVGhyZWFkQnJpZGdlPiB7CitwdWJsaWM6Cisg
ICAgc3RhdGljIFBhc3NSZWZQdHI8QWxsb3dJbmRleGVkREJNYWluVGhyZWFkQnJpZGdlPiBjcmVh
dGUoV29ya2VyTG9hZGVyUHJveHkqIHdvcmtlckxvYWRlclByb3h5LCBjb25zdCBBdG9taWNTdHJp
bmcmIG1vZGUsIGNvbnN0IFN0cmluZyYgbmFtZSkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9w
dFJlZihuZXcgQWxsb3dJbmRleGVkREJNYWluVGhyZWFkQnJpZGdlKHdvcmtlckxvYWRlclByb3h5
LCBtb2RlLCBuYW1lKSk7CisgICAgfQorCisgICAgLy8gVGhlc2UgbWV0aG9kcyBhcmUgaW52b2tl
ZCBvbiB0aGUgd29ya2VyIGNvbnRleHQuCisgICAgdm9pZCBjYW5jZWwoKQorICAgIHsKKyAgICAg
ICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1fbXV0ZXgpOworICAgICAgICBtX3dvcmtlckxvYWRlclBy
b3h5ID0gMDsKKyAgICB9CisKKyAgICBib29sIHJlc3VsdCgpCisgICAgeworICAgICAgICByZXR1
cm4gbV9yZXN1bHQ7CisgICAgfQorCisgICAgLy8gVGhpcyBtZXRob2QgaXMgaW52b2tlZCBvbiB0
aGUgbWFpbiB0aHJlYWQuCisgICAgdm9pZCBzaWduYWxDb21wbGV0ZWQoYm9vbCByZXN1bHQpCisg
ICAgeworICAgICAgICBNdXRleExvY2tlciBsb2NrZXIobV9tdXRleCk7CisgICAgICAgIGlmICht
X3dvcmtlckxvYWRlclByb3h5KQorICAgICAgICAgICAgbV93b3JrZXJMb2FkZXJQcm94eS0+cG9z
dFRhc2tGb3JNb2RlVG9Xb3JrZXJDb250ZXh0KAorICAgICAgICAgICAgICAgIGNyZWF0ZUNhbGxi
YWNrVGFzaygmZGlkQ29tcGxldGUsIHRoaXMsIHJlc3VsdCksIG1fbW9kZSk7CisgICAgfQorCitw
cml2YXRlOgorICAgIEFsbG93SW5kZXhlZERCTWFpblRocmVhZEJyaWRnZShXb3JrZXJMb2FkZXJQ
cm94eSogd29ya2VyTG9hZGVyUHJveHksIGNvbnN0IEF0b21pY1N0cmluZyYgbW9kZSwgY29uc3Qg
U3RyaW5nJiBuYW1lKQorICAgICAgICA6IG1fcmVzdWx0KGZhbHNlKQorICAgICAgICAsIG1fd29y
a2VyTG9hZGVyUHJveHkod29ya2VyTG9hZGVyUHJveHkpCisgICAgICAgICwgbV9tb2RlKG1vZGUp
CisgICAgeworICAgICAgICBOZXdXZWJXb3JrZXJCYXNlKiB3ZWJXb3JrZXIgPSBzdGF0aWNfY2Fz
dDxOZXdXZWJXb3JrZXJCYXNlKj4od29ya2VyTG9hZGVyUHJveHkpOworICAgICAgICBXZWJGcmFt
ZUltcGwqIHdlYkZyYW1lID0gc3RhdGljX2Nhc3Q8V2ViRnJhbWVJbXBsKj4od2ViV29ya2VyLT52
aWV3KCktPm1haW5GcmFtZSgpKTsKKyAgICAgICAgV2ViV29ya2VyQmFzZTo6ZGlzcGF0Y2hUYXNr
VG9NYWluVGhyZWFkKAorICAgICAgICAgICAgY3JlYXRlQ2FsbGJhY2tUYXNrKCZhbGxvd0luZGV4
ZWREQlRhc2ssIHRoaXMsIEFsbG93Q3Jvc3NUaHJlYWRBY2Nlc3Mod2ViRnJhbWUpLCBuYW1lKSk7
CisgICAgfQorCisgICAgc3RhdGljIHZvaWQgYWxsb3dJbmRleGVkREJUYXNrKFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPEFsbG93SW5kZXhlZERCTWFpblRocmVhZEJyaWRnZT4g
YnJpZGdlLCBXZWJGcmFtZUltcGwqIHdlYkZyYW1lLCBjb25zdCBTdHJpbmcmIG5hbWUpCisgICAg
eworICAgICAgICBXZWJWaWV3SW1wbCogd2ViVmlldyA9IHdlYkZyYW1lLT52aWV3SW1wbCgpOwor
ICAgICAgICBib29sIGFsbG93ZWQgPSAhd2ViVmlldy0+cGVybWlzc2lvbkNsaWVudCgpIHx8IHdl
YlZpZXctPnBlcm1pc3Npb25DbGllbnQoKS0+YWxsb3dJbmRleGVkREIod2ViRnJhbWUsIG5hbWUs
IFdlYlNlY3VyaXR5T3JpZ2luKCkpOworICAgICAgICBicmlkZ2UtPnNpZ25hbENvbXBsZXRlZChh
bGxvd2VkKTsKKyAgICB9CisKKyAgICBzdGF0aWMgdm9pZCBkaWRDb21wbGV0ZShTY3JpcHRFeGVj
dXRpb25Db250ZXh0KiBjb250ZXh0LCBQYXNzUmVmUHRyPEFsbG93SW5kZXhlZERCTWFpblRocmVh
ZEJyaWRnZT4gYnJpZGdlLCBib29sIHJlc3VsdCkKKyAgICB7CisgICAgICAgIGJyaWRnZS0+bV9y
ZXN1bHQgPSByZXN1bHQ7CisgICAgfQorCisgICAgYm9vbCBtX3Jlc3VsdDsKKyAgICBNdXRleCBt
X211dGV4OworICAgIFdvcmtlckxvYWRlclByb3h5KiBtX3dvcmtlckxvYWRlclByb3h5OworICAg
IEF0b21pY1N0cmluZyBtX21vZGU7Cit9OworCitib29sIElEQkZhY3RvcnlCYWNrZW5kUHJveHk6
OmFsbG93SURCRnJvbVdvcmtlclRocmVhZChXb3JrZXJDb250ZXh0KiB3b3JrZXJDb250ZXh0LCBj
b25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFdlYlNlY3VyaXR5T3JpZ2luJikKK3sKKyAgICBXb3Jr
ZXJMb2FkZXJQcm94eSogd29ya2VyTG9hZGVyUHJveHkgPSAmd29ya2VyQ29udGV4dC0+dGhyZWFk
KCktPndvcmtlckxvYWRlclByb3h5KCk7CisgICAgV29ya2VyU2NyaXB0Q29udHJvbGxlciogY29u
dHJvbGxlciA9IFdvcmtlclNjcmlwdENvbnRyb2xsZXI6OmNvbnRyb2xsZXJGb3JDb250ZXh0KCk7
CisgICAgQVNTRVJUX1VOVVNFRChjb250cm9sbGVyLCB3b3JrZXJDb250ZXh0ID09IGNvbnRyb2xs
ZXItPndvcmtlckNvbnRleHQoKSk7CisgICAgV29ya2VyUnVuTG9vcCYgcnVuTG9vcCA9IHdvcmtl
ckNvbnRleHQtPnRocmVhZCgpLT5ydW5Mb29wKCk7CisKKyAgICBTdHJpbmcgbW9kZSA9IGFsbG93
SW5kZXhlZERCTW9kZTsKKyAgICBtb2RlLmFwcGVuZChTdHJpbmc6Om51bWJlcihydW5Mb29wLmNy
ZWF0ZVVuaXF1ZUlkKCkpKTsKKyAgICBBdG9taWNTdHJpbmcgYXRvbWljTW9kZShtb2RlKTsKKyAg
ICBSZWZQdHI8QWxsb3dJbmRleGVkREJNYWluVGhyZWFkQnJpZGdlPiBicmlkZ2UgPSBBbGxvd0lu
ZGV4ZWREQk1haW5UaHJlYWRCcmlkZ2U6OmNyZWF0ZSh3b3JrZXJMb2FkZXJQcm94eSwgbW9kZSwg
bmFtZSk7CisKKyAgICAvLyBFaXRoZXIgdGhlIGJyaWRnZSByZXR1cm5zLCBvciB0aGUgcXVldWUg
Z2V0cyB0ZXJtaW5hdGVkLgorICAgIGlmIChydW5Mb29wLnJ1bkluTW9kZSh3b3JrZXJDb250ZXh0
LCBtb2RlKSA9PSBNZXNzYWdlUXVldWVUZXJtaW5hdGVkKSB7CisgICAgICAgIGJyaWRnZS0+Y2Fu
Y2VsKCk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICByZXR1cm4gYnJpZGdl
LT5yZXN1bHQoKTsKK30KKwordm9pZCBJREJGYWN0b3J5QmFja2VuZFByb3h5OjpvcGVuRnJvbVdv
cmtlcihjb25zdCBTdHJpbmcmIG5hbWUsIElEQkNhbGxiYWNrcyogY2FsbGJhY2tzLCBQYXNzUmVm
UHRyPFNlY3VyaXR5T3JpZ2luPiBwcnBPcmlnaW4sIFdvcmtlckNvbnRleHQqIGNvbnRleHQsIGNv
bnN0IFN0cmluZyYgZGF0YURpcikKK3sKKyAgICBXZWJTZWN1cml0eU9yaWdpbiBvcmlnaW4ocHJw
T3JpZ2luKTsKKyAgICBpZiAoIWFsbG93SURCRnJvbVdvcmtlclRocmVhZChjb250ZXh0LCBuYW1l
LCBvcmlnaW4pKSB7CisgICAgICAgIGNhbGxiYWNrcy0+b25FcnJvcihXZWJJREJEYXRhYmFzZUVy
cm9yKDAsICJUaGUgdXNlciBkZW5pZWQgcGVybWlzc2lvbiB0byBhY2Nlc3MgdGhlIGRhdGFiYXNl
LiIpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBXb3JrZXJMb2FkZXJQcm94eSogd29y
a2VyTG9hZGVyUHJveHkgPSAmY29udGV4dC0+dGhyZWFkKCktPndvcmtlckxvYWRlclByb3h5KCk7
CisgICAgTmV3V2ViV29ya2VyQmFzZSogd2ViV29ya2VyID0gc3RhdGljX2Nhc3Q8TmV3V2ViV29y
a2VyQmFzZSo+KHdvcmtlckxvYWRlclByb3h5KTsKKyAgICBXZWJGcmFtZSogd2ViRnJhbWUgPSB3
ZWJXb3JrZXItPnZpZXcoKS0+bWFpbkZyYW1lKCk7CisgICAgbV93ZWJJREJGYWN0b3J5LT5vcGVu
KG5hbWUsIG5ldyBXZWJJREJDYWxsYmFja3NJbXBsKGNhbGxiYWNrcyksIG9yaWdpbiwgd2ViRnJh
bWUsIGRhdGFEaXIpOworfQorCit2b2lkIElEQkZhY3RvcnlCYWNrZW5kUHJveHk6Om9wZW4oY29u
c3QgU3RyaW5nJiBuYW1lLCBJREJDYWxsYmFja3MqIGNhbGxiYWNrcywgUGFzc1JlZlB0cjxTZWN1
cml0eU9yaWdpbj4gcHJwT3JpZ2luLCBGcmFtZSogZnJhbWUsIGNvbnN0IFN0cmluZyYgZGF0YURp
cikKIHsKICAgICBXZWJTZWN1cml0eU9yaWdpbiBvcmlnaW4ocHJwT3JpZ2luKTsKICAgICBXZWJG
cmFtZUltcGwqIHdlYkZyYW1lID0gV2ViRnJhbWVJbXBsOjpmcm9tRnJhbWUoZnJhbWUpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvSURCRmFjdG9yeUJhY2tlbmRQcm94
eS5oIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvSURCRmFjdG9yeUJhY2tlbmRQcm94eS5o
CmluZGV4IGUxNGI4Y2VhOTgyZjMxN2U0MWQ0M2E4YzkzZjFkN2Q2MWY2NzFjMzIuLmMwN2RiMzU1
NmUwOTAwNjZjN2I0Y2IxZTFiOWVkY2FmYzcwNmM5NjAgMTAwNzU1Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vc3JjL0lEQkZhY3RvcnlCYWNrZW5kUHJveHkuaAorKysgYi9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3NyYy9JREJGYWN0b3J5QmFja2VuZFByb3h5LmgKQEAgLTMzLDExICszMywx
NCBAQAogCiAjaW5jbHVkZSAiSURCRmFjdG9yeUJhY2tlbmRJbnRlcmZhY2UuaCIKIAotbmFtZXNw
YWNlIFdlYkNvcmUgeyBjbGFzcyBET01TdHJpbmdMaXN0OyB9CituYW1lc3BhY2UgV2ViQ29yZSB7
CitjbGFzcyBXb3JrZXJDb250ZXh0OworfQogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAogY2xhc3Mg
V2ViSURCRmFjdG9yeTsKK2NsYXNzIFdlYlNlY3VyaXR5T3JpZ2luOwogCiBjbGFzcyBJREJGYWN0
b3J5QmFja2VuZFByb3h5IDogcHVibGljIFdlYkNvcmU6OklEQkZhY3RvcnlCYWNrZW5kSW50ZXJm
YWNlIHsKIHB1YmxpYzoKQEAgLTQ1LDExICs0OCwxNSBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB+
SURCRmFjdG9yeUJhY2tlbmRQcm94eSgpOwogCiAgICAgdmlydHVhbCB2b2lkIGdldERhdGFiYXNl
TmFtZXMoUGFzc1JlZlB0cjxXZWJDb3JlOjpJREJDYWxsYmFja3M+LCBQYXNzUmVmUHRyPFdlYkNv
cmU6OlNlY3VyaXR5T3JpZ2luPiwgV2ViQ29yZTo6RnJhbWUqLCBjb25zdCBTdHJpbmcmIGRhdGFE
aXIpOwotICAgIHZpcnR1YWwgdm9pZCBvcGVuKGNvbnN0IFN0cmluZyYgbmFtZSwgUGFzc1JlZlB0
cjxXZWJDb3JlOjpJREJDYWxsYmFja3M+LCBQYXNzUmVmUHRyPFdlYkNvcmU6OlNlY3VyaXR5T3Jp
Z2luPiwgV2ViQ29yZTo6RnJhbWUqLCBjb25zdCBTdHJpbmcmIGRhdGFEaXIpOworCisgICAgdmly
dHVhbCB2b2lkIG9wZW4oY29uc3QgU3RyaW5nJiBuYW1lLCBXZWJDb3JlOjpJREJDYWxsYmFja3Mq
LCBQYXNzUmVmUHRyPFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luPiwgV2ViQ29yZTo6RnJhbWUqLCBj
b25zdCBTdHJpbmcmIGRhdGFEaXIpOworICAgIHZpcnR1YWwgdm9pZCBvcGVuRnJvbVdvcmtlcihj
b25zdCBTdHJpbmcmIG5hbWUsIFdlYkNvcmU6OklEQkNhbGxiYWNrcyosIFBhc3NSZWZQdHI8V2Vi
Q29yZTo6U2VjdXJpdHlPcmlnaW4+LCBXZWJDb3JlOjpXb3JrZXJDb250ZXh0KiwgY29uc3QgU3Ry
aW5nJiBkYXRhRGlyKTsKKwogICAgIHZpcnR1YWwgdm9pZCBkZWxldGVEYXRhYmFzZShjb25zdCBT
dHJpbmcmIG5hbWUsIFBhc3NSZWZQdHI8V2ViQ29yZTo6SURCQ2FsbGJhY2tzPiwgUGFzc1JlZlB0
cjxXZWJDb3JlOjpTZWN1cml0eU9yaWdpbj4sIFdlYkNvcmU6OkZyYW1lKiwgY29uc3QgU3RyaW5n
JiBkYXRhRGlyKTsKIAogcHJpdmF0ZToKICAgICBJREJGYWN0b3J5QmFja2VuZFByb3h5KCk7Cisg
ICAgYm9vbCBhbGxvd0lEQkZyb21Xb3JrZXJUaHJlYWQoV2ViQ29yZTo6V29ya2VyQ29udGV4dCos
IGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgV2ViU2VjdXJpdHlPcmlnaW4mKTsKIAogICAgIC8v
IFdlIGRvbid0IG93biB0aGlzIHBvaW50ZXIgKHVubGlrZSBhbGwgdGhlIG90aGVyIHByb3h5IGNs
YXNzZXMgd2hpY2ggZG8pLgogICAgIFdlYklEQkZhY3RvcnkqIG1fd2ViSURCRmFjdG9yeTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYklEQkZhY3RvcnlJbXBsLmNw
cCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYklEQkZhY3RvcnlJbXBsLmNwcAppbmRl
eCA4NGMxYTNkNDJlMWFiMTJmMzNjZDIzMmQ5ZjE0NWI2ZDgzMGVkZDZkLi5kODc1ZTExYmM2NWVm
NTg4ZTA2ZTJiNWY1MWRhYzE2ZDI2YjYwOGVjIDEwMDc1NQotLS0gYS9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL3NyYy9XZWJJREJGYWN0b3J5SW1wbC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJv
bWl1bS9zcmMvV2ViSURCRmFjdG9yeUltcGwuY3BwCkBAIC02Niw3ICs2Niw3IEBAIHZvaWQgV2Vi
SURCRmFjdG9yeUltcGw6OmdldERhdGFiYXNlTmFtZXMoV2ViSURCQ2FsbGJhY2tzKiBjYWxsYmFj
a3MsIGNvbnN0IFdlYlNlCiAKIHZvaWQgV2ViSURCRmFjdG9yeUltcGw6Om9wZW4oY29uc3QgV2Vi
U3RyaW5nJiBuYW1lLCBXZWJJREJDYWxsYmFja3MqIGNhbGxiYWNrcywgY29uc3QgV2ViU2VjdXJp
dHlPcmlnaW4mIG9yaWdpbiwgV2ViRnJhbWUqLCBjb25zdCBXZWJTdHJpbmcmIGRhdGFEaXIpCiB7
Ci0gICAgbV9pZGJGYWN0b3J5QmFja2VuZC0+b3BlbihuYW1lLCBJREJDYWxsYmFja3NQcm94eTo6
Y3JlYXRlKGFkb3B0UHRyKGNhbGxiYWNrcykpLCBvcmlnaW4sIDAsIGRhdGFEaXIpOworICAgIG1f
aWRiRmFjdG9yeUJhY2tlbmQtPm9wZW4obmFtZSwgSURCQ2FsbGJhY2tzUHJveHk6OmNyZWF0ZShh
ZG9wdFB0cihjYWxsYmFja3MpKS5nZXQoKSwgb3JpZ2luLCAwLCBkYXRhRGlyKTsKIH0KIAogdm9p
ZCBXZWJJREJGYWN0b3J5SW1wbDo6ZGVsZXRlRGF0YWJhc2UoY29uc3QgV2ViU3RyaW5nJiBuYW1l
LCBXZWJJREJDYWxsYmFja3MqIGNhbGxiYWNrcywgY29uc3QgV2ViU2VjdXJpdHlPcmlnaW4mIG9y
aWdpbiwgV2ViRnJhbWUqLCBjb25zdCBXZWJTdHJpbmcmIGRhdGFEaXIpCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>117668</attachid>
            <date>2011-12-02 12:17:41 -0800</date>
            <delta_ts>2011-12-02 18:20:27 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-73609-20111202121740.patch</filename>
            <type>text/plain</type>
            <size>24864</size>
            <attacher name="David Grogan">dgrogan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTAxNzMwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMzgxY2I1MzIxOGM1MmVl
OTFiZTIyMGRhNzI1MGM2ODQxNTY2NzM0Yy4uMWQxOGYyM2M1NzIxZDNiMjU1ZDMxZDdlZGYyNmMz
YzFhNDUzNGIzNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMyIEBACisyMDExLTEyLTAxICBEYXZp
ZCBHcm9nYW4gIDxkZ3JvZ2FuQGNocm9taXVtLm9yZz4KKworICAgICAgICBHcmFudCB3b3JrZXJz
IGV4cGVyaW1lbnRhbCBhY2Nlc3MgdG8gSW5kZXhlZERCLgorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzM2MDkKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBObyBuZXcgdGVzdHMgLSB0aGVyZSB3aWxsIGJlIGNo
cm9taXVtIHVpIHRlc3RzIHRoYXQgZGVwZW5kIG9uCisgICAgICAgIHdlYmtpdC5vcmcvYi83MzI5
Ny4KKworICAgICAgICAqIHN0b3JhZ2UvSURCRmFjdG9yeS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpJREJGYWN0b3J5OjpvcGVuKTogQ2FsbCBuZXcgZnVuY3Rpb24sCisgICAgICAgIElEQkZhY3Rv
cnlCYWNrZW5kSW50ZXJmYWNlOjpvcGVuRnJvbVdvcmtlci4KKyAgICAgICAgKiBzdG9yYWdlL0lE
QkZhY3RvcnlCYWNrZW5kSW1wbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJREJGYWN0b3J5QmFj
a2VuZEltcGw6Om9wZW4pOgorICAgICAgICAoV2ViQ29yZTo6SURCRmFjdG9yeUJhY2tlbmRJbXBs
OjpvcGVuRnJvbVdvcmtlcik6CisgICAgICAgIChXZWJDb3JlOjpJREJGYWN0b3J5QmFja2VuZElt
cGw6Om9wZW5JbnRlcm5hbCk6CisgICAgICAgICogc3RvcmFnZS9JREJGYWN0b3J5QmFja2VuZElt
cGwuaDoKKyAgICAgICAgKiBzdG9yYWdlL0lEQkZhY3RvcnlCYWNrZW5kSW50ZXJmYWNlLmg6Cisg
ICAgICAgICogd29ya2Vycy9Xb3JrZXJDb250ZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Oldv
cmtlckNvbnRleHQ6OndlYmtpdEluZGV4ZWREQik6IFN0b3JlcworICAgICAgICBJREJGYWN0b3J5
QmFja2VuZEludGVyZmFjZSwgaW1wbGVtZW50ZWQgYnkgSURCRmFjdG9yeUJhY2tlbmRQcm94eSBp
bgorICAgICAgICBjaHJvbWl1bSwgaW4gdGhlIFdvcmtlckNvbnRleHQuICBGb3IgdGhlIERvY3Vt
ZW50IGNhc2UgaXQgaXMgc3RvcmVkIGluCisgICAgICAgIHRoZSBQYWdlR3JvdXAuICBTdG9yaW5n
IGl0IGluIHRoZSBXb3JrZXJDb250ZXh0IGNhdXNlcyBtb3JlIG1lbW9yeQorICAgICAgICBjaHVy
biwgYnV0IHRoYXQgc2hvdWxkIGJlIHRyaXZpYWwuICBJIGRvbid0IGtub3cgb2YgYW55IGJldHRl
cgorICAgICAgICBhbHRlcm5hdGl2ZXMuCisgICAgICAgICogd29ya2Vycy9Xb3JrZXJDb250ZXh0
Lmg6CisgICAgICAgICogd29ya2Vycy9Xb3JrZXJDb250ZXh0LmlkbDoKKwogMjAxMS0xMi0wMSAg
VGFrYXNoaSBUb3lvc2hpbWEgIDx0b3lvc2hpbUBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgYnVm
ZmVyZWRBbW91bnQgY2FsY3VsYXRpb24gaXMgd3JvbmcgaW4gQ0xPU0lORyBhbmQgQ0xPU0VEIHN0
YXRlLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cgYi9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwppbmRleCBmZmFmMGEyNmJlYTgwZGE3OTg0ZDQz
Yjk2MGQ4OWZiYjEyMTlhZjAzLi5kN2VmY2MwN2U4ZjljM2U2ODBiODhiNWFlN2IwNjgxOTk5OTdm
ZmExIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZworKysgYi9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE5IEBACisyMDExLTEy
LTAxICBEYXZpZCBHcm9nYW4gIDxkZ3JvZ2FuQGNocm9taXVtLm9yZz4KKworICAgICAgICBHcmFu
dCB3b3JrZXJzIGV4cGVyaW1lbnRhbCBhY2Nlc3MgdG8gSW5kZXhlZERCLgorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzM2MDkKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIHNyYy9JREJGYWN0b3J5QmFja2Vu
ZFByb3h5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6SURCRmFjdG9yeUJhY2tlbmRQcm94eTo6YWxs
b3dJREJGcm9tV29ya2VyVGhyZWFkKTogUmV0dXJuCisgICAgICAgIHRydWUgd2hpbGUgYmVoaW5k
IGEgcnVudGltZSBmbGFnLCBhbmQgd2hpbGUgd2UgZmlndXJlIG91dCBob3cgdG8gY2hlY2sKKyAg
ICAgICAgcGVybWlzc2lvbiBpbiBhIHRocmVhZC1zYWZlIG1hbm5lci4KKyAgICAgICAgKFdlYktp
dDo6SURCRmFjdG9yeUJhY2tlbmRQcm94eTo6b3BlbkZyb21Xb3JrZXIpOiBVc2luZyB0aGUgd2Vi
RnJhbWUKKyAgICAgICAgZnJvbSB0aGUgd29ya2VyIHNlZW1zIHRvIHNhdGlzZnkgdGhlIHdlYWsg
Y29uZGl0aW9uIGluIGNocm9taXVtIHRoYXQKKyAgICAgICAgbmVpdGhlciBpdCBub3IgaXQncyBh
c3NvY2lhdGVkIFJlbmRlclZpZXcgaXMgTlVMTC4KKyAgICAgICAgKiBzcmMvSURCRmFjdG9yeUJh
Y2tlbmRQcm94eS5oOgorCiAyMDExLTEyLTAxICBKb2NoZW4gRWlzaW5nZXIgIDxqb2NoZW5AY2hy
b21pdW0ub3JnPgogCiAgICAgICAgIFtjaHJvbWl1bV0gYWRkIHJlZmVycmVyIHBvbGljeSB0byBX
ZWJDb250ZXh0TWVudURhdGEKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRE9NV2lu
ZG93LmlkbCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRE9NV2luZG93LmlkbAppbmRleCBhMjY0Zjk1
ZDIxZGRmMDBkNDBjOWNiOTNmOWU0NmI0MzNmYmVjOTMwLi4yMDliZjQzNzM4YjhlZjI3ZDY0ZWM5
YzM3NjQ1NGY1ZThhNzMzMTM5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RPTVdp
bmRvdy5pZGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9ET01XaW5kb3cuaWRsCkBAIC0xNzcs
MTggKzE3NywxOCBAQCBtb2R1bGUgd2luZG93IHsKICAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRl
IFtFbmFibGVkQXRSdW50aW1lXSBOb3RpZmljYXRpb25DZW50ZXIgd2Via2l0Tm90aWZpY2F0aW9u
czsKICNlbmRpZgogI2lmIGRlZmluZWQoRU5BQkxFX0lOREVYRURfREFUQUJBU0UpICYmIEVOQUJM
RV9JTkRFWEVEX0RBVEFCQVNFCi0gICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBbRW5hYmxlZEF0
UnVudGltZV0gSURCRmFjdG9yeSB3ZWJraXRJbmRleGVkREI7Ci0KLSAgICAgICAgYXR0cmlidXRl
IFtFbmFibGVkQXRSdW50aW1lXSBJREJDdXJzb3JDb25zdHJ1Y3RvciB3ZWJraXRJREJDdXJzb3I7
Ci0gICAgICAgIGF0dHJpYnV0ZSBbRW5hYmxlZEF0UnVudGltZV0gSURCRGF0YWJhc2VDb25zdHJ1
Y3RvciB3ZWJraXRJREJEYXRhYmFzZTsKLSAgICAgICAgYXR0cmlidXRlIFtFbmFibGVkQXRSdW50
aW1lXSBJREJEYXRhYmFzZUVycm9yQ29uc3RydWN0b3Igd2Via2l0SURCRGF0YWJhc2VFcnJvcjsK
LSAgICAgICAgYXR0cmlidXRlIFtFbmFibGVkQXRSdW50aW1lXSBJREJEYXRhYmFzZUV4Y2VwdGlv
bkNvbnN0cnVjdG9yIHdlYmtpdElEQkRhdGFiYXNlRXhjZXB0aW9uOwotICAgICAgICBhdHRyaWJ1
dGUgW0VuYWJsZWRBdFJ1bnRpbWVdIElEQkZhY3RvcnlDb25zdHJ1Y3RvciB3ZWJraXRJREJGYWN0
b3J5OwotICAgICAgICBhdHRyaWJ1dGUgW0VuYWJsZWRBdFJ1bnRpbWVdIElEQkluZGV4Q29uc3Ry
dWN0b3Igd2Via2l0SURCSW5kZXg7Ci0gICAgICAgIGF0dHJpYnV0ZSBbRW5hYmxlZEF0UnVudGlt
ZV0gSURCS2V5UmFuZ2VDb25zdHJ1Y3RvciB3ZWJraXRJREJLZXlSYW5nZTsKLSAgICAgICAgYXR0
cmlidXRlIFtFbmFibGVkQXRSdW50aW1lXSBJREJPYmplY3RTdG9yZUNvbnN0cnVjdG9yIHdlYmtp
dElEQk9iamVjdFN0b3JlOwotICAgICAgICBhdHRyaWJ1dGUgW0VuYWJsZWRBdFJ1bnRpbWVdIElE
QlJlcXVlc3RDb25zdHJ1Y3RvciB3ZWJraXRJREJSZXF1ZXN0OwotICAgICAgICBhdHRyaWJ1dGUg
W0VuYWJsZWRBdFJ1bnRpbWVdIElEQlRyYW5zYWN0aW9uQ29uc3RydWN0b3Igd2Via2l0SURCVHJh
bnNhY3Rpb247CisgICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBJREJGYWN0b3J5IHdlYmtpdElu
ZGV4ZWREQjsKKworICAgICAgICBhdHRyaWJ1dGUgSURCQ3Vyc29yQ29uc3RydWN0b3Igd2Via2l0
SURCQ3Vyc29yOworICAgICAgICBhdHRyaWJ1dGUgSURCRGF0YWJhc2VDb25zdHJ1Y3RvciB3ZWJr
aXRJREJEYXRhYmFzZTsKKyAgICAgICAgYXR0cmlidXRlIElEQkRhdGFiYXNlRXJyb3JDb25zdHJ1
Y3RvciB3ZWJraXRJREJEYXRhYmFzZUVycm9yOworICAgICAgICBhdHRyaWJ1dGUgSURCRGF0YWJh
c2VFeGNlcHRpb25Db25zdHJ1Y3RvciB3ZWJraXRJREJEYXRhYmFzZUV4Y2VwdGlvbjsKKyAgICAg
ICAgYXR0cmlidXRlIElEQkZhY3RvcnlDb25zdHJ1Y3RvciB3ZWJraXRJREJGYWN0b3J5OworICAg
ICAgICBhdHRyaWJ1dGUgSURCSW5kZXhDb25zdHJ1Y3RvciB3ZWJraXRJREJJbmRleDsKKyAgICAg
ICAgYXR0cmlidXRlIElEQktleVJhbmdlQ29uc3RydWN0b3Igd2Via2l0SURCS2V5UmFuZ2U7Cisg
ICAgICAgIGF0dHJpYnV0ZSBJREJPYmplY3RTdG9yZUNvbnN0cnVjdG9yIHdlYmtpdElEQk9iamVj
dFN0b3JlOworICAgICAgICBhdHRyaWJ1dGUgSURCUmVxdWVzdENvbnN0cnVjdG9yIHdlYmtpdElE
QlJlcXVlc3Q7CisgICAgICAgIGF0dHJpYnV0ZSBJREJUcmFuc2FjdGlvbkNvbnN0cnVjdG9yIHdl
YmtpdElEQlRyYW5zYWN0aW9uOwogI2VuZGlmCiAjaWYgZGVmaW5lZChFTkFCTEVfRklMRV9TWVNU
RU0pICYmIEVOQUJMRV9GSUxFX1NZU1RFTQogICAgICAgICBjb25zdCB1bnNpZ25lZCBzaG9ydCBU
RU1QT1JBUlkgPSAwOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJGYWN0
b3J5LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCRmFjdG9yeS5jcHAKaW5kZXggZjU0
Y2Y3MWViMzg2MGUzMGU5YzAzMzA0NzRiYzUyODFjNzdlNWNhYy4uZmZmYzQ0ZDhhZDJjZTIyYTZm
NzEyNzIzYjI4MmM3YWRlYjg5YWE3NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3RvcmFn
ZS9JREJGYWN0b3J5LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkZhY3Rvcnku
Y3BwCkBAIC00Niw2ICs0Niw5IEBACiAjaW5jbHVkZSAiUGFnZS5oIgogI2luY2x1ZGUgIlBhZ2VH
cm91cC5oIgogI2luY2x1ZGUgIlNlY3VyaXR5T3JpZ2luLmgiCisjaW5jbHVkZSAiV29ya2VyQ29u
dGV4dC5oIgorI2luY2x1ZGUgIldvcmtlckxvYWRlclByb3h5LmgiCisjaW5jbHVkZSAiV29ya2Vy
VGhyZWFkLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtNzksMjMgKzgyLDIzIEBAIFBh
c3NSZWZQdHI8SURCUmVxdWVzdD4gSURCRmFjdG9yeTo6Z2V0RGF0YWJhc2VOYW1lcyhTY3JpcHRF
eGVjdXRpb25Db250ZXh0KiBjb250CiAKIFBhc3NSZWZQdHI8SURCUmVxdWVzdD4gSURCRmFjdG9y
eTo6b3BlbihTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBjb25zdCBTdHJpbmcmIG5h
bWUsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewotICAgIGlmICghY29udGV4dC0+aXNEb2N1bWVudCgp
KSB7Ci0gICAgICAgIC8vIEZJWE1FOiBtYWtlIHRoaXMgd29yayB3aXRoIHdvcmtlcnMuCi0gICAg
ICAgIHJldHVybiAwOwotICAgIH0KLQotICAgIERvY3VtZW50KiBkb2N1bWVudCA9IHN0YXRpY19j
YXN0PERvY3VtZW50Kj4oY29udGV4dCk7Ci0gICAgaWYgKCFkb2N1bWVudC0+ZnJhbWUoKSB8fCAh
ZG9jdW1lbnQtPnBhZ2UoKSkKLSAgICAgICAgcmV0dXJuIDA7CisgICAgQVNTRVJUKGNvbnRleHQt
PmlzRG9jdW1lbnQoKSB8fCBjb250ZXh0LT5pc1dvcmtlckNvbnRleHQoKSk7CiAKICAgICBpZiAo
bmFtZS5pc051bGwoKSkgewogICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpOT05f
VFJBTlNJRU5UX0VSUjsKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQotCi0gICAgUmVmUHRyPElE
QlJlcXVlc3Q+IHJlcXVlc3QgPSBJREJSZXF1ZXN0OjpjcmVhdGUoZG9jdW1lbnQsIElEQkFueTo6
Y3JlYXRlKHRoaXMpLCAwKTsKLSAgICBHcm91cFNldHRpbmdzKiBncm91cFNldHRpbmdzID0gZG9j
dW1lbnQtPnBhZ2UoKS0+Z3JvdXAoKS5ncm91cFNldHRpbmdzKCk7Ci0gICAgbV9iYWNrZW5kLT5v
cGVuKG5hbWUsIHJlcXVlc3QsIGRvY3VtZW50LT5zZWN1cml0eU9yaWdpbigpLCBkb2N1bWVudC0+
ZnJhbWUoKSwgZ3JvdXBTZXR0aW5ncy0+aW5kZXhlZERCRGF0YWJhc2VQYXRoKCkpOworICAgIGlm
IChjb250ZXh0LT5pc0RvY3VtZW50KCkpIHsKKyAgICAgICAgRG9jdW1lbnQqIGRvY3VtZW50ID0g
c3RhdGljX2Nhc3Q8RG9jdW1lbnQqPihjb250ZXh0KTsKKyAgICAgICAgaWYgKCFkb2N1bWVudC0+
ZnJhbWUoKSB8fCAhZG9jdW1lbnQtPnBhZ2UoKSkKKyAgICAgICAgICAgIHJldHVybiAwOworICAg
ICAgICBGcmFtZSogZnJhbWUgPSBkb2N1bWVudC0+ZnJhbWUoKTsKKyAgICAgICAgUmVmUHRyPElE
QlJlcXVlc3Q+IHJlcXVlc3QgPSBJREJSZXF1ZXN0OjpjcmVhdGUoY29udGV4dCwgSURCQW55Ojpj
cmVhdGUodGhpcyksIDApOworICAgICAgICBtX2JhY2tlbmQtPm9wZW4obmFtZSwgcmVxdWVzdC5n
ZXQoKSwgY29udGV4dC0+c2VjdXJpdHlPcmlnaW4oKSwgZnJhbWUsIFN0cmluZygpKTsKKyAgICAg
ICAgcmV0dXJuIHJlcXVlc3Q7CisgICAgfQorICAgIFJlZlB0cjxJREJSZXF1ZXN0PiByZXF1ZXN0
ID0gSURCUmVxdWVzdDo6Y3JlYXRlKGNvbnRleHQsIElEQkFueTo6Y3JlYXRlKHRoaXMpLCAwKTsK
KyAgICBtX2JhY2tlbmQtPm9wZW5Gcm9tV29ya2VyKG5hbWUsIHJlcXVlc3QuZ2V0KCksIGNvbnRl
eHQtPnNlY3VyaXR5T3JpZ2luKCksIHN0YXRpY19jYXN0PFdvcmtlckNvbnRleHQqPihjb250ZXh0
KSwgU3RyaW5nKCkpOwogICAgIHJldHVybiByZXF1ZXN0OwogfQogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9zdG9yYWdlL0lEQkZhY3RvcnlCYWNrZW5kSW1wbC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9zdG9yYWdlL0lEQkZhY3RvcnlCYWNrZW5kSW1wbC5jcHAKaW5kZXggZDEyNDgxZDNkYzEx
MTA4YjA2OGJiNjAxYmZjMzZmODhkNGM5MmUxZS4uZGQyNDJlYWI1MmRhMDZhNDQ4ODE2YjI0MjU0
MmM0NDYyMTVmZWU4NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJGYWN0
b3J5QmFja2VuZEltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCRmFjdG9y
eUJhY2tlbmRJbXBsLmNwcApAQCAtODAsOSArODAsOSBAQCB2b2lkIElEQkZhY3RvcnlCYWNrZW5k
SW1wbDo6cmVtb3ZlSURCQmFja2luZ1N0b3JlKGNvbnN0IFN0cmluZyYgZmlsZUlkZW50aWZpZXIp
CiAgICAgbV9iYWNraW5nU3RvcmVNYXAucmVtb3ZlKGZpbGVJZGVudGlmaWVyKTsKIH0KIAotdm9p
ZCBJREJGYWN0b3J5QmFja2VuZEltcGw6OmdldERhdGFiYXNlTmFtZXMoUGFzc1JlZlB0cjxJREJD
YWxsYmFja3M+IGNhbGxiYWNrcywgUGFzc1JlZlB0cjxTZWN1cml0eU9yaWdpbj4gc2VjdXJpdHlP
cmlnaW4sIEZyYW1lKiwgY29uc3QgU3RyaW5nJiBkYXRhRGlyKQordm9pZCBJREJGYWN0b3J5QmFj
a2VuZEltcGw6OmdldERhdGFiYXNlTmFtZXMoUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxi
YWNrcywgUGFzc1JlZlB0cjxTZWN1cml0eU9yaWdpbj4gc2VjdXJpdHlPcmlnaW4sIEZyYW1lKiwg
Y29uc3QgU3RyaW5nJiBkYXRhRGlyZWN0b3J5KQogewotICAgIFJlZlB0cjxJREJCYWNraW5nU3Rv
cmU+IGJhY2tpbmdTdG9yZSA9IG9wZW5CYWNraW5nU3RvcmUoc2VjdXJpdHlPcmlnaW4sIGRhdGFE
aXIpOworICAgIFJlZlB0cjxJREJCYWNraW5nU3RvcmU+IGJhY2tpbmdTdG9yZSA9IG9wZW5CYWNr
aW5nU3RvcmUoc2VjdXJpdHlPcmlnaW4sIGRhdGFEaXJlY3RvcnkpOwogICAgIGlmICghYmFja2lu
Z1N0b3JlKSB7CiAgICAgICAgIGNhbGxiYWNrcy0+b25FcnJvcihJREJEYXRhYmFzZUVycm9yOjpj
cmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246OlVOS05PV05fRVJSLCAiSW50ZXJuYWwgZXJyb3Iu
IikpOwogICAgICAgICByZXR1cm47CkBAIC05OCwzMSArOTgsMTcgQEAgdm9pZCBJREJGYWN0b3J5
QmFja2VuZEltcGw6OmdldERhdGFiYXNlTmFtZXMoUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNh
bGxiYWNrcywKICAgICBjYWxsYmFja3MtPm9uU3VjY2VzcyhkYXRhYmFzZU5hbWVzLnJlbGVhc2Uo
KSk7CiB9CiAKLXZvaWQgSURCRmFjdG9yeUJhY2tlbmRJbXBsOjpvcGVuKGNvbnN0IFN0cmluZyYg
bmFtZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcywgUGFzc1JlZlB0cjxTZWN1
cml0eU9yaWdpbj4gc2VjdXJpdHlPcmlnaW4sIEZyYW1lKiwgY29uc3QgU3RyaW5nJiBkYXRhRGly
KQordm9pZCBJREJGYWN0b3J5QmFja2VuZEltcGw6Om9wZW4oY29uc3QgU3RyaW5nJiBuYW1lLCBJ
REJDYWxsYmFja3MqIGNhbGxiYWNrcywgUGFzc1JlZlB0cjxTZWN1cml0eU9yaWdpbj4gc2VjdXJp
dHlPcmlnaW4sIEZyYW1lKiwgY29uc3QgU3RyaW5nJiBkYXRhRGlyZWN0b3J5KQogewotICAgIGNv
bnN0IFN0cmluZyB1bmlxdWVJZGVudGlmaWVyID0gY29tcHV0ZVVuaXF1ZUlkZW50aWZpZXIobmFt
ZSwgc2VjdXJpdHlPcmlnaW4uZ2V0KCkpOwotCi0gICAgSURCRGF0YWJhc2VCYWNrZW5kTWFwOjpp
dGVyYXRvciBpdCA9IG1fZGF0YWJhc2VCYWNrZW5kTWFwLmZpbmQodW5pcXVlSWRlbnRpZmllcik7
Ci0gICAgaWYgKGl0ICE9IG1fZGF0YWJhc2VCYWNrZW5kTWFwLmVuZCgpKSB7Ci0gICAgICAgIC8v
IElmIGl0J3MgYWxyZWFkeSBiZWVuIG9wZW5lZCwgd2UgaGF2ZSB0byB3YWl0IGZvciBhbnkgcGVu
ZGluZwotICAgICAgICAvLyBzZXRWZXJzaW9uIGNhbGxzIHRvIGNvbXBsZXRlLgotICAgICAgICBp
dC0+c2Vjb25kLT5vcGVuQ29ubmVjdGlvbihjYWxsYmFja3MpOwotICAgICAgICByZXR1cm47Ci0g
ICAgfQotCi0gICAgLy8gRklYTUU6IEV2ZXJ5dGhpbmcgZnJvbSBub3cgb24gc2hvdWxkIGJlIGRv
bmUgb24gYW5vdGhlciB0aHJlYWQuCi0gICAgUmVmUHRyPElEQkJhY2tpbmdTdG9yZT4gYmFja2lu
Z1N0b3JlID0gb3BlbkJhY2tpbmdTdG9yZShzZWN1cml0eU9yaWdpbiwgZGF0YURpcik7Ci0gICAg
aWYgKCFiYWNraW5nU3RvcmUpIHsKLSAgICAgICAgY2FsbGJhY2tzLT5vbkVycm9yKElEQkRhdGFi
YXNlRXJyb3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VU5LTk9XTl9FUlIsICJJbnRl
cm5hbCBlcnJvci4iKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAgb3BlbkludGVybmFs
KG5hbWUsIGNhbGxiYWNrcywgc2VjdXJpdHlPcmlnaW4sIGRhdGFEaXJlY3RvcnkpOworfQogCi0g
ICAgUmVmUHRyPElEQkRhdGFiYXNlQmFja2VuZEltcGw+IGRhdGFiYXNlQmFja2VuZCA9IElEQkRh
dGFiYXNlQmFja2VuZEltcGw6OmNyZWF0ZShuYW1lLCBiYWNraW5nU3RvcmUuZ2V0KCksIG1fdHJh
bnNhY3Rpb25Db29yZGluYXRvci5nZXQoKSwgdGhpcywgdW5pcXVlSWRlbnRpZmllcik7Ci0gICAg
Y2FsbGJhY2tzLT5vblN1Y2Nlc3MoZGF0YWJhc2VCYWNrZW5kLmdldCgpKTsKLSAgICBtX2RhdGFi
YXNlQmFja2VuZE1hcC5zZXQodW5pcXVlSWRlbnRpZmllciwgZGF0YWJhc2VCYWNrZW5kLmdldCgp
KTsKK3ZvaWQgSURCRmFjdG9yeUJhY2tlbmRJbXBsOjpvcGVuRnJvbVdvcmtlcihjb25zdCBTdHJp
bmcmIG5hbWUsIElEQkNhbGxiYWNrcyogY2FsbGJhY2tzLCBQYXNzUmVmUHRyPFNlY3VyaXR5T3Jp
Z2luPiBzZWN1cml0eU9yaWdpbiwgV29ya2VyQ29udGV4dCosIGNvbnN0IFN0cmluZyYgZGF0YURp
cmVjdG9yeSkKK3sKKyAgICBvcGVuSW50ZXJuYWwobmFtZSwgY2FsbGJhY2tzLCBzZWN1cml0eU9y
aWdpbiwgZGF0YURpcmVjdG9yeSk7CiB9CiAKLXZvaWQgSURCRmFjdG9yeUJhY2tlbmRJbXBsOjpk
ZWxldGVEYXRhYmFzZShjb25zdCBTdHJpbmcmIG5hbWUsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tz
PiBjYWxsYmFja3MsIFBhc3NSZWZQdHI8U2VjdXJpdHlPcmlnaW4+IHNlY3VyaXR5T3JpZ2luLCBG
cmFtZSosIGNvbnN0IFN0cmluZyYgZGF0YURpcikKK3ZvaWQgSURCRmFjdG9yeUJhY2tlbmRJbXBs
OjpkZWxldGVEYXRhYmFzZShjb25zdCBTdHJpbmcmIG5hbWUsIFBhc3NSZWZQdHI8SURCQ2FsbGJh
Y2tzPiBjYWxsYmFja3MsIFBhc3NSZWZQdHI8U2VjdXJpdHlPcmlnaW4+IHNlY3VyaXR5T3JpZ2lu
LCBGcmFtZSosIGNvbnN0IFN0cmluZyYgZGF0YURpcmVjdG9yeSkKIHsKICAgICBjb25zdCBTdHJp
bmcgdW5pcXVlSWRlbnRpZmllciA9IGNvbXB1dGVVbmlxdWVJZGVudGlmaWVyKG5hbWUsIHNlY3Vy
aXR5T3JpZ2luLmdldCgpKTsKIApAQCAtMTM1LDcgKzEyMSw3IEBAIHZvaWQgSURCRmFjdG9yeUJh
Y2tlbmRJbXBsOjpkZWxldGVEYXRhYmFzZShjb25zdCBTdHJpbmcmIG5hbWUsIFBhc3NSZWZQdHI8
SURCQ2FsCiAgICAgfQogCiAgICAgLy8gRklYTUU6IEV2ZXJ5dGhpbmcgZnJvbSBub3cgb24gc2hv
dWxkIGJlIGRvbmUgb24gYW5vdGhlciB0aHJlYWQuCi0gICAgUmVmUHRyPElEQkJhY2tpbmdTdG9y
ZT4gYmFja2luZ1N0b3JlID0gb3BlbkJhY2tpbmdTdG9yZShzZWN1cml0eU9yaWdpbiwgZGF0YURp
cik7CisgICAgUmVmUHRyPElEQkJhY2tpbmdTdG9yZT4gYmFja2luZ1N0b3JlID0gb3BlbkJhY2tp
bmdTdG9yZShzZWN1cml0eU9yaWdpbiwgZGF0YURpcmVjdG9yeSk7CiAgICAgaWYgKCFiYWNraW5n
U3RvcmUpIHsKICAgICAgICAgY2FsbGJhY2tzLT5vbkVycm9yKElEQkRhdGFiYXNlRXJyb3I6OmNy
ZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VU5LTk9XTl9FUlIsICJJbnRlcm5hbCBlcnJvci4i
KSk7CiAgICAgICAgIHJldHVybjsKQEAgLTE0Niw3ICsxMzIsNyBAQCB2b2lkIElEQkZhY3RvcnlC
YWNrZW5kSW1wbDo6ZGVsZXRlRGF0YWJhc2UoY29uc3QgU3RyaW5nJiBuYW1lLCBQYXNzUmVmUHRy
PElEQkNhbAogICAgIGRhdGFiYXNlQmFja2VuZC0+ZGVsZXRlRGF0YWJhc2UoY2FsbGJhY2tzKTsK
IH0KIAotUGFzc1JlZlB0cjxJREJCYWNraW5nU3RvcmU+IElEQkZhY3RvcnlCYWNrZW5kSW1wbDo6
b3BlbkJhY2tpbmdTdG9yZShQYXNzUmVmUHRyPFNlY3VyaXR5T3JpZ2luPiBzZWN1cml0eU9yaWdp
biwgY29uc3QgU3RyaW5nJiBkYXRhRGlyKQorUGFzc1JlZlB0cjxJREJCYWNraW5nU3RvcmU+IElE
QkZhY3RvcnlCYWNrZW5kSW1wbDo6b3BlbkJhY2tpbmdTdG9yZShQYXNzUmVmUHRyPFNlY3VyaXR5
T3JpZ2luPiBzZWN1cml0eU9yaWdpbiwgY29uc3QgU3RyaW5nJiBkYXRhRGlyZWN0b3J5KQogewog
ICAgIGNvbnN0IFN0cmluZyBmaWxlSWRlbnRpZmllciA9IGNvbXB1dGVGaWxlSWRlbnRpZmllcihz
ZWN1cml0eU9yaWdpbi5nZXQoKSk7CiAKQEAgLTE1Niw3ICsxNDIsNyBAQCBQYXNzUmVmUHRyPElE
QkJhY2tpbmdTdG9yZT4gSURCRmFjdG9yeUJhY2tlbmRJbXBsOjpvcGVuQmFja2luZ1N0b3JlKFBh
c3NSZWZQdHI8UwogICAgICAgICBiYWNraW5nU3RvcmUgPSBpdDItPnNlY29uZDsKICAgICBlbHNl
IHsKICNpZiBVU0UoTEVWRUxEQikKLSAgICAgICAgYmFja2luZ1N0b3JlID0gSURCTGV2ZWxEQkJh
Y2tpbmdTdG9yZTo6b3BlbihzZWN1cml0eU9yaWdpbi5nZXQoKSwgZGF0YURpciwgZmlsZUlkZW50
aWZpZXIsIHRoaXMpOworICAgICAgICBiYWNraW5nU3RvcmUgPSBJREJMZXZlbERCQmFja2luZ1N0
b3JlOjpvcGVuKHNlY3VyaXR5T3JpZ2luLmdldCgpLCBkYXRhRGlyZWN0b3J5LCBmaWxlSWRlbnRp
ZmllciwgdGhpcyk7CiAjZWxzZQogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICNlbmRp
ZgpAQCAtMTY4LDYgKzE1NCwzMSBAQCBQYXNzUmVmUHRyPElEQkJhY2tpbmdTdG9yZT4gSURCRmFj
dG9yeUJhY2tlbmRJbXBsOjpvcGVuQmFja2luZ1N0b3JlKFBhc3NSZWZQdHI8UwogICAgIHJldHVy
biAwOwogfQogCit2b2lkIElEQkZhY3RvcnlCYWNrZW5kSW1wbDo6b3BlbkludGVybmFsKGNvbnN0
IFN0cmluZyYgbmFtZSwgSURCQ2FsbGJhY2tzKiBjYWxsYmFja3MsIFBhc3NSZWZQdHI8U2VjdXJp
dHlPcmlnaW4+IHBycFNlY3VyaXR5T3JpZ2luLCBjb25zdCBTdHJpbmcmIGRhdGFEaXJlY3Rvcnkp
Cit7CisgICAgUmVmUHRyPFNlY3VyaXR5T3JpZ2luPiBzZWN1cml0eU9yaWdpbiA9IHBycFNlY3Vy
aXR5T3JpZ2luOworICAgIGNvbnN0IFN0cmluZyB1bmlxdWVJZGVudGlmaWVyID0gY29tcHV0ZVVu
aXF1ZUlkZW50aWZpZXIobmFtZSwgc2VjdXJpdHlPcmlnaW4uZ2V0KCkpOworCisgICAgSURCRGF0
YWJhc2VCYWNrZW5kTWFwOjppdGVyYXRvciBpdCA9IG1fZGF0YWJhc2VCYWNrZW5kTWFwLmZpbmQo
dW5pcXVlSWRlbnRpZmllcik7CisgICAgaWYgKGl0ICE9IG1fZGF0YWJhc2VCYWNrZW5kTWFwLmVu
ZCgpKSB7CisgICAgICAgIC8vIElmIGl0J3MgYWxyZWFkeSBiZWVuIG9wZW5lZCwgd2UgaGF2ZSB0
byB3YWl0IGZvciBhbnkgcGVuZGluZworICAgICAgICAvLyBzZXRWZXJzaW9uIGNhbGxzIHRvIGNv
bXBsZXRlLgorICAgICAgICBpdC0+c2Vjb25kLT5vcGVuQ29ubmVjdGlvbihjYWxsYmFja3MpOwor
ICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8gRklYTUU6IEV2ZXJ5dGhpbmcgZnJvbSBu
b3cgb24gc2hvdWxkIGJlIGRvbmUgb24gYW5vdGhlciB0aHJlYWQuCisgICAgUmVmUHRyPElEQkJh
Y2tpbmdTdG9yZT4gYmFja2luZ1N0b3JlID0gb3BlbkJhY2tpbmdTdG9yZShzZWN1cml0eU9yaWdp
biwgZGF0YURpcmVjdG9yeSk7CisgICAgaWYgKCFiYWNraW5nU3RvcmUpIHsKKyAgICAgICAgY2Fs
bGJhY2tzLT5vbkVycm9yKElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2Vw
dGlvbjo6VU5LTk9XTl9FUlIsICJJbnRlcm5hbCBlcnJvci4iKSk7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisKKyAgICBSZWZQdHI8SURCRGF0YWJhc2VCYWNrZW5kSW1wbD4gZGF0YWJhc2VCYWNr
ZW5kID0gSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6Y3JlYXRlKG5hbWUsIGJhY2tpbmdTdG9yZS5n
ZXQoKSwgbV90cmFuc2FjdGlvbkNvb3JkaW5hdG9yLmdldCgpLCB0aGlzLCB1bmlxdWVJZGVudGlm
aWVyKTsKKyAgICBjYWxsYmFja3MtPm9uU3VjY2VzcyhSZWZQdHI8SURCRGF0YWJhc2VCYWNrZW5k
SW50ZXJmYWNlPihkYXRhYmFzZUJhY2tlbmQuZ2V0KCkpLnJlbGVhc2UoKSk7CisgICAgbV9kYXRh
YmFzZUJhY2tlbmRNYXAuc2V0KHVuaXF1ZUlkZW50aWZpZXIsIGRhdGFiYXNlQmFja2VuZC5nZXQo
KSk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIEVOQUJMRShJTkRF
WEVEX0RBVEFCQVNFKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJGYWN0
b3J5QmFja2VuZEltcGwuaCBiL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCRmFjdG9yeUJhY2tl
bmRJbXBsLmgKaW5kZXggOWMyZjA3ZmI3MDU0N2EyMTAzYTRjYWQ3N2RiNTZlNTkzZjFjNDk0YS4u
Nzk4MjE2OGJlMzM3ZGM5NTZhMGI2NWJmMzhiMThkNDY4ZGUxYmJmOSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJGYWN0b3J5QmFja2VuZEltcGwuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9zdG9yYWdlL0lEQkZhY3RvcnlCYWNrZW5kSW1wbC5oCkBAIC01NiwxMiArNTYsMTUg
QEAgcHVibGljOgogICAgIHZvaWQgcmVtb3ZlSURCQmFja2luZ1N0b3JlKGNvbnN0IFN0cmluZyYg
ZmlsZUlkZW50aWZpZXIpOwogCiAgICAgdmlydHVhbCB2b2lkIGdldERhdGFiYXNlTmFtZXMoUGFz
c1JlZlB0cjxJREJDYWxsYmFja3M+LCBQYXNzUmVmUHRyPFNlY3VyaXR5T3JpZ2luPiwgRnJhbWUq
LCBjb25zdCBTdHJpbmcmIGRhdGFEaXIpOwotICAgIHZpcnR1YWwgdm9pZCBvcGVuKGNvbnN0IFN0
cmluZyYgbmFtZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+LCBQYXNzUmVmUHRyPFNlY3VyaXR5
T3JpZ2luPiwgRnJhbWUqLCBjb25zdCBTdHJpbmcmIGRhdGFEaXIpOworCisgICAgdmlydHVhbCB2
b2lkIG9wZW4oY29uc3QgU3RyaW5nJiBuYW1lLCBJREJDYWxsYmFja3MqLCBQYXNzUmVmUHRyPFNl
Y3VyaXR5T3JpZ2luPiwgRnJhbWUqLCBjb25zdCBTdHJpbmcmIGRhdGFEaXIpOworICAgIHZpcnR1
YWwgdm9pZCBvcGVuRnJvbVdvcmtlcihjb25zdCBTdHJpbmcmIG5hbWUsIElEQkNhbGxiYWNrcyos
IFBhc3NSZWZQdHI8U2VjdXJpdHlPcmlnaW4+LCBXb3JrZXJDb250ZXh0KiwgY29uc3QgU3RyaW5n
JiBkYXRhRGlyKTsKICAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlRGF0YWJhc2UoY29uc3QgU3RyaW5n
JiBuYW1lLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4sIFBhc3NSZWZQdHI8U2VjdXJpdHlPcmln
aW4+LCBGcmFtZSosIGNvbnN0IFN0cmluZyYgZGF0YURpcik7CiAKIHByaXZhdGU6CiAgICAgSURC
RmFjdG9yeUJhY2tlbmRJbXBsKCk7CiAgICAgUGFzc1JlZlB0cjxJREJCYWNraW5nU3RvcmU+IG9w
ZW5CYWNraW5nU3RvcmUoUGFzc1JlZlB0cjxTZWN1cml0eU9yaWdpbj4sIGNvbnN0IFN0cmluZyYg
ZGF0YURpcik7CisgICAgdm9pZCBvcGVuSW50ZXJuYWwoY29uc3QgU3RyaW5nJiBuYW1lLCBJREJD
YWxsYmFja3MqLCBQYXNzUmVmUHRyPFNlY3VyaXR5T3JpZ2luPiwgY29uc3QgU3RyaW5nJiBkYXRh
RGlyKTsKIAogICAgIHR5cGVkZWYgSGFzaE1hcDxTdHJpbmcsIElEQkRhdGFiYXNlQmFja2VuZElt
cGwqPiBJREJEYXRhYmFzZUJhY2tlbmRNYXA7CiAgICAgSURCRGF0YWJhc2VCYWNrZW5kTWFwIG1f
ZGF0YWJhc2VCYWNrZW5kTWFwOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9J
REJGYWN0b3J5QmFja2VuZEludGVyZmFjZS5oIGIvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJG
YWN0b3J5QmFja2VuZEludGVyZmFjZS5oCmluZGV4IGNlOWI0ZGYwY2I3ZmY2MjExODBkNWJmZDY4
NzFhZWQyNDJkZDI1MWYuLjE5YTFjOTc4NGMzMGJmN2FhODc1NTAwYWJiY2M4ZDQwOTA4ZmI1NWYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCRmFjdG9yeUJhY2tlbmRJbnRl
cmZhY2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkZhY3RvcnlCYWNrZW5kSW50
ZXJmYWNlLmgKQEAgLTQwLDYgKzQwLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3MgRnJh
bWU7CiBjbGFzcyBJREJEYXRhYmFzZTsKIGNsYXNzIFNlY3VyaXR5T3JpZ2luOworY2xhc3MgV29y
a2VyQ29udGV4dDsKIAogdHlwZWRlZiBpbnQgRXhjZXB0aW9uQ29kZTsKIApAQCAtNTMsNyArNTQs
OSBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB+SURCRmFjdG9yeUJhY2tlbmRJbnRlcmZhY2UoKSB7
IH0KIAogICAgIHZpcnR1YWwgdm9pZCBnZXREYXRhYmFzZU5hbWVzKFBhc3NSZWZQdHI8SURCQ2Fs
bGJhY2tzPiwgUGFzc1JlZlB0cjxTZWN1cml0eU9yaWdpbj4sIEZyYW1lKiwgY29uc3QgU3RyaW5n
JiBkYXRhRGlyKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIG9wZW4oY29uc3QgU3RyaW5nJiBuYW1l
LCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4sIFBhc3NSZWZQdHI8U2VjdXJpdHlPcmlnaW4+LCBG
cmFtZSosIGNvbnN0IFN0cmluZyYgZGF0YURpcikgPSAwOworCisgICAgdmlydHVhbCB2b2lkIG9w
ZW4oY29uc3QgU3RyaW5nJiBuYW1lLCBJREJDYWxsYmFja3MqLCBQYXNzUmVmUHRyPFNlY3VyaXR5
T3JpZ2luPiwgRnJhbWUqLCBjb25zdCBTdHJpbmcmIGRhdGFEaXIpID0gMDsKKyAgICB2aXJ0dWFs
IHZvaWQgb3BlbkZyb21Xb3JrZXIoY29uc3QgU3RyaW5nJiBuYW1lLCBJREJDYWxsYmFja3MqLCBQ
YXNzUmVmUHRyPFNlY3VyaXR5T3JpZ2luPiwgV29ya2VyQ29udGV4dCosIGNvbnN0IFN0cmluZyYg
ZGF0YURpcikgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBkZWxldGVEYXRhYmFzZShjb25zdCBTdHJp
bmcmIG5hbWUsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiwgUGFzc1JlZlB0cjxTZWN1cml0eU9y
aWdpbj4sIEZyYW1lKiwgY29uc3QgU3RyaW5nJiBkYXRhRGlyKSA9IDA7CiB9OwogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS93b3JrZXJzL1dvcmtlckNvbnRleHQuY3BwIGIvU291cmNlL1dl
YkNvcmUvd29ya2Vycy9Xb3JrZXJDb250ZXh0LmNwcAppbmRleCA4NWFmMmY1ZjZkN2VlYWU4NTIy
YmE4OTEzNjZlNzkzZDFjODk0MmFlLi5jMjg0NjA4ZjE3MjhjZmQyZWIzZTFkOWY3YmM1Y2FiZWEx
Y2Y1ZmZiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS93b3JrZXJzL1dvcmtlckNvbnRleHQu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMvV29ya2VyQ29udGV4dC5jcHAKQEAgLTg2
LDYgKzg2LDggQEAKICNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCiAjZW5kaWYKIAorI2luY2x1
ZGUgIklEQkZhY3RvcnkuaCIKKwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBDbG9zZVdv
cmtlckNvbnRleHRUYXNrIDogcHVibGljIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OlRhc2sgewpA
QCAtNTIxLDYgKzUyMywxOSBAQCB2b2lkIFdvcmtlckNvbnRleHQ6Om5vdGlmeU9ic2VydmVyc09m
U3RvcCgpCiAgICAgfQogfQogCisjaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCitJREJGYWN0
b3J5KiBXb3JrZXJDb250ZXh0Ojp3ZWJraXRJbmRleGVkREIoKSBjb25zdAoreworICAgIGlmICgh
c2VjdXJpdHlPcmlnaW4oKS0+Y2FuQWNjZXNzRGF0YWJhc2UoKSkKKyAgICAgICAgcmV0dXJuIDA7
CisgICAgaWYgKCFtX2lkYkZhY3RvcnlCYWNrZW5kSW50ZXJmYWNlKQorICAgICAgICBtX2lkYkZh
Y3RvcnlCYWNrZW5kSW50ZXJmYWNlID0gSURCRmFjdG9yeUJhY2tlbmRJbnRlcmZhY2U6OmNyZWF0
ZSgpOworICAgIGlmICghbV9pZGJGYWN0b3J5KQorICAgICAgICBtX2lkYkZhY3RvcnkgPSBJREJG
YWN0b3J5OjpjcmVhdGUobV9pZGJGYWN0b3J5QmFja2VuZEludGVyZmFjZS5nZXQoKSk7CisgICAg
cmV0dXJuIG1faWRiRmFjdG9yeS5nZXQoKTsKK30KKyNlbmRpZgorCiBXb3JrZXJFdmVudFF1ZXVl
KiBXb3JrZXJDb250ZXh0OjpldmVudFF1ZXVlKCkgY29uc3QKIHsKICAgICByZXR1cm4gbV9ldmVu
dFF1ZXVlLmdldCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJD
b250ZXh0LmggYi9Tb3VyY2UvV2ViQ29yZS93b3JrZXJzL1dvcmtlckNvbnRleHQuaAppbmRleCA1
ZDE0YjA3MDRiMzIyNmNlOGZmOTE3ODI0MmE4MDMwNDFlOGU0ZjgzLi5jOTRmYTA5NzhiM2FhMDQy
ZTkxMjNlYmFiMzc0MDEyYWFiNGVmZDMzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS93b3Jr
ZXJzL1dvcmtlckNvbnRleHQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS93b3JrZXJzL1dvcmtlckNv
bnRleHQuaApAQCAtNTUsNiArNTUsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgY2xhc3Mg
RW50cnlTeW5jOwogICAgIGNsYXNzIEVycm9yQ2FsbGJhY2s7CiAgICAgY2xhc3MgRmlsZVN5c3Rl
bUNhbGxiYWNrOworICAgIGNsYXNzIElEQkZhY3Rvcnk7CiAgICAgY2xhc3MgTm90aWZpY2F0aW9u
Q2VudGVyOwogICAgIGNsYXNzIFNjaGVkdWxlZEFjdGlvbjsKICAgICBjbGFzcyBXb3JrZXJJbnNw
ZWN0b3JDb250cm9sbGVyOwpAQCAtMTczLDYgKzE3NCw5IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsK
ICAgICAgICAgdm9pZCByZWdpc3Rlck9ic2VydmVyKE9ic2VydmVyKik7CiAgICAgICAgIHZvaWQg
dW5yZWdpc3Rlck9ic2VydmVyKE9ic2VydmVyKik7CiAgICAgICAgIHZvaWQgbm90aWZ5T2JzZXJ2
ZXJzT2ZTdG9wKCk7CisjaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCisgICAgICAgIElEQkZh
Y3RvcnkqIHdlYmtpdEluZGV4ZWREQigpIGNvbnN0OworI2VuZGlmCiAKICAgICBwcm90ZWN0ZWQ6
CiAgICAgICAgIFdvcmtlckNvbnRleHQoY29uc3QgS1VSTCYsIGNvbnN0IFN0cmluZyYsIFdvcmtl
clRocmVhZCopOwpAQCAtMjE4LDYgKzIyMiwxMiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAg
ICAgIEhhc2hTZXQ8T2JzZXJ2ZXIqPiBtX3dvcmtlck9ic2VydmVyczsKIAogICAgICAgICBPd25Q
dHI8V29ya2VyRXZlbnRRdWV1ZT4gbV9ldmVudFF1ZXVlOworCisjaWYgRU5BQkxFKElOREVYRURf
REFUQUJBU0UpCisgICAgICAgIG11dGFibGUgUmVmUHRyPElEQkZhY3Rvcnk+IG1faWRiRmFjdG9y
eTsKKyAgICAgICAgbXV0YWJsZSBSZWZQdHI8SURCRmFjdG9yeUJhY2tlbmRJbnRlcmZhY2U+IG1f
aWRiRmFjdG9yeUJhY2tlbmRJbnRlcmZhY2U7CisjZW5kaWYKKwogICAgIH07CiAKIH0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMvV29ya2Vy
Q29udGV4dC5pZGwgYi9Tb3VyY2UvV2ViQ29yZS93b3JrZXJzL1dvcmtlckNvbnRleHQuaWRsCmlu
ZGV4IGY3YzFiYmIyOWRkZWE2OGY2OWQzNTg5NGE0Y2ZhNWNiNDUyM2UxNjUuLjczNmJiYzEzM2Y3
ZjIzMzBmNzBhYjA3M2E4ODgwM2UwNzVhZTBhZDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3dvcmtlcnMvV29ya2VyQ29udGV4dC5pZGwKKysrIGIvU291cmNlL1dlYkNvcmUvd29ya2Vycy9X
b3JrZXJDb250ZXh0LmlkbApAQCAtMTI2LDYgKzEyNiwyMCBAQCBtb2R1bGUgdGhyZWFkcyB7CiAg
ICAgICAgIGF0dHJpYnV0ZSBGbG9hdDMyQXJyYXlDb25zdHJ1Y3RvciBGbG9hdDMyQXJyYXk7IC8v
IFVzYWJsZSB3aXRoIG5ldyBvcGVyYXRvcgogICAgICAgICBhdHRyaWJ1dGUgRmxvYXQ2NEFycmF5
Q29uc3RydWN0b3IgRmxvYXQ2NEFycmF5OyAvLyBVc2FibGUgd2l0aCBuZXcgb3BlcmF0b3IKICAg
ICAgICAgYXR0cmlidXRlIERhdGFWaWV3Q29uc3RydWN0b3IgRGF0YVZpZXc7IC8vIFVzYWJsZSB3
aXRoIG5ldyBvcGVyYXRvcgorI2lmIGRlZmluZWQoRU5BQkxFX0lOREVYRURfREFUQUJBU0UpICYm
IEVOQUJMRV9JTkRFWEVEX0RBVEFCQVNFCisgICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBbRW5h
YmxlZEF0UnVudGltZV0gSURCRmFjdG9yeSB3ZWJraXRJbmRleGVkREI7CisKKyAgICAgICAgYXR0
cmlidXRlIFtFbmFibGVkQXRSdW50aW1lXSBJREJDdXJzb3JDb25zdHJ1Y3RvciB3ZWJraXRJREJD
dXJzb3I7CisgICAgICAgIGF0dHJpYnV0ZSBbRW5hYmxlZEF0UnVudGltZV0gSURCRGF0YWJhc2VD
b25zdHJ1Y3RvciB3ZWJraXRJREJEYXRhYmFzZTsKKyAgICAgICAgYXR0cmlidXRlIFtFbmFibGVk
QXRSdW50aW1lXSBJREJEYXRhYmFzZUVycm9yQ29uc3RydWN0b3Igd2Via2l0SURCRGF0YWJhc2VF
cnJvcjsKKyAgICAgICAgYXR0cmlidXRlIFtFbmFibGVkQXRSdW50aW1lXSBJREJEYXRhYmFzZUV4
Y2VwdGlvbkNvbnN0cnVjdG9yIHdlYmtpdElEQkRhdGFiYXNlRXhjZXB0aW9uOworICAgICAgICBh
dHRyaWJ1dGUgW0VuYWJsZWRBdFJ1bnRpbWVdIElEQkZhY3RvcnlDb25zdHJ1Y3RvciB3ZWJraXRJ
REJGYWN0b3J5OworICAgICAgICBhdHRyaWJ1dGUgW0VuYWJsZWRBdFJ1bnRpbWVdIElEQkluZGV4
Q29uc3RydWN0b3Igd2Via2l0SURCSW5kZXg7CisgICAgICAgIGF0dHJpYnV0ZSBbRW5hYmxlZEF0
UnVudGltZV0gSURCS2V5UmFuZ2VDb25zdHJ1Y3RvciB3ZWJraXRJREJLZXlSYW5nZTsKKyAgICAg
ICAgYXR0cmlidXRlIFtFbmFibGVkQXRSdW50aW1lXSBJREJPYmplY3RTdG9yZUNvbnN0cnVjdG9y
IHdlYmtpdElEQk9iamVjdFN0b3JlOworICAgICAgICBhdHRyaWJ1dGUgW0VuYWJsZWRBdFJ1bnRp
bWVdIElEQlJlcXVlc3RDb25zdHJ1Y3RvciB3ZWJraXRJREJSZXF1ZXN0OworICAgICAgICBhdHRy
aWJ1dGUgW0VuYWJsZWRBdFJ1bnRpbWVdIElEQlRyYW5zYWN0aW9uQ29uc3RydWN0b3Igd2Via2l0
SURCVHJhbnNhY3Rpb247CisjZW5kaWYKICAgICB9OwogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3NyYy9JREJGYWN0b3J5QmFja2VuZFByb3h5LmNwcCBiL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vc3JjL0lEQkZhY3RvcnlCYWNrZW5kUHJveHkuY3BwCmluZGV4IDdiNjAz
OGIzNmFkOTQwZWM5NGExZDBkYWU1NDc0ZGNlZWU0YTBmOWMuLmYwN2YxZjNjNmZkMDJmZjFkZDQ4
MGVkNjI0ZmViY2ZmM2NiOTA0OTYgMTAwNzU1Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
c3JjL0lEQkZhY3RvcnlCYWNrZW5kUHJveHkuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vc3JjL0lEQkZhY3RvcnlCYWNrZW5kUHJveHkuY3BwCkBAIC0zMSw2ICszMSw3IEBACiAKICNp
ZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKIAorI2luY2x1ZGUgIkNyb3NzVGhyZWFkVGFzay5o
IgogI2luY2x1ZGUgIkRPTVN0cmluZ0xpc3QuaCIKICNpbmNsdWRlICJJREJEYXRhYmFzZUJhY2tl
bmRQcm94eS5oIgogI2luY2x1ZGUgIklEQkRhdGFiYXNlRXJyb3IuaCIKQEAgLTQ1LDYgKzQ2LDEy
IEBACiAjaW5jbHVkZSAiV2ViUGVybWlzc2lvbkNsaWVudC5oIgogI2luY2x1ZGUgIldlYlZlY3Rv
ci5oIgogI2luY2x1ZGUgIldlYlZpZXdJbXBsLmgiCisjaW5jbHVkZSAiV2ViV29ya2VyQmFzZS5o
IgorI2luY2x1ZGUgIldvcmtlckNvbnRleHQuaCIKKyNpbmNsdWRlICJXb3JrZXJMb2FkZXJQcm94
eS5oIgorI2luY2x1ZGUgIldvcmtlclNjcmlwdENvbnRyb2xsZXIuaCIKKyNpbmNsdWRlICJXb3Jr
ZXJUaHJlYWQuaCIKKwogCiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIApAQCAtNzgsNyArODUs
MjUgQEAgdm9pZCBJREJGYWN0b3J5QmFja2VuZFByb3h5OjpnZXREYXRhYmFzZU5hbWVzKFBhc3NS
ZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MKICAgICBtX3dlYklEQkZhY3RvcnktPmdldERh
dGFiYXNlTmFtZXMobmV3IFdlYklEQkNhbGxiYWNrc0ltcGwoY2FsbGJhY2tzKSwgb3JpZ2luLCB3
ZWJGcmFtZSwgZGF0YURpcik7CiB9CiAKLXZvaWQgSURCRmFjdG9yeUJhY2tlbmRQcm94eTo6b3Bl
bihjb25zdCBTdHJpbmcmIG5hbWUsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3Ms
IFBhc3NSZWZQdHI8U2VjdXJpdHlPcmlnaW4+IHBycE9yaWdpbiwgRnJhbWUqIGZyYW1lLCBjb25z
dCBTdHJpbmcmIGRhdGFEaXIpCitib29sIElEQkZhY3RvcnlCYWNrZW5kUHJveHk6OmFsbG93SURC
RnJvbVdvcmtlclRocmVhZChXb3JrZXJDb250ZXh0KiwgY29uc3QgU3RyaW5nJiwgY29uc3QgV2Vi
U2VjdXJpdHlPcmlnaW4mKQoreworICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIElEQkZhY3Rv
cnlCYWNrZW5kUHJveHk6Om9wZW5Gcm9tV29ya2VyKGNvbnN0IFN0cmluZyYgbmFtZSwgSURCQ2Fs
bGJhY2tzKiBjYWxsYmFja3MsIFBhc3NSZWZQdHI8U2VjdXJpdHlPcmlnaW4+IHBycE9yaWdpbiwg
V29ya2VyQ29udGV4dCogY29udGV4dCwgY29uc3QgU3RyaW5nJiBkYXRhRGlyKQoreworICAgIFdl
YlNlY3VyaXR5T3JpZ2luIG9yaWdpbihwcnBPcmlnaW4pOworICAgIGlmICghYWxsb3dJREJGcm9t
V29ya2VyVGhyZWFkKGNvbnRleHQsIG5hbWUsIG9yaWdpbikpIHsKKyAgICAgICAgY2FsbGJhY2tz
LT5vbkVycm9yKFdlYklEQkRhdGFiYXNlRXJyb3IoMCwgIlRoZSB1c2VyIGRlbmllZCBwZXJtaXNz
aW9uIHRvIGFjY2VzcyB0aGUgZGF0YWJhc2UuIikpOworICAgICAgICByZXR1cm47CisgICAgfQor
ICAgIFdvcmtlckxvYWRlclByb3h5KiB3b3JrZXJMb2FkZXJQcm94eSA9ICZjb250ZXh0LT50aHJl
YWQoKS0+d29ya2VyTG9hZGVyUHJveHkoKTsKKyAgICBOZXdXZWJXb3JrZXJCYXNlKiB3ZWJXb3Jr
ZXIgPSBzdGF0aWNfY2FzdDxOZXdXZWJXb3JrZXJCYXNlKj4od29ya2VyTG9hZGVyUHJveHkpOwor
ICAgIFdlYkZyYW1lKiB3ZWJGcmFtZSA9IHdlYldvcmtlci0+dmlldygpLT5tYWluRnJhbWUoKTsK
KyAgICBtX3dlYklEQkZhY3RvcnktPm9wZW4obmFtZSwgbmV3IFdlYklEQkNhbGxiYWNrc0ltcGwo
Y2FsbGJhY2tzKSwgb3JpZ2luLCB3ZWJGcmFtZSwgZGF0YURpcik7Cit9CisKK3ZvaWQgSURCRmFj
dG9yeUJhY2tlbmRQcm94eTo6b3Blbihjb25zdCBTdHJpbmcmIG5hbWUsIElEQkNhbGxiYWNrcyog
Y2FsbGJhY2tzLCBQYXNzUmVmUHRyPFNlY3VyaXR5T3JpZ2luPiBwcnBPcmlnaW4sIEZyYW1lKiBm
cmFtZSwgY29uc3QgU3RyaW5nJiBkYXRhRGlyKQogewogICAgIFdlYlNlY3VyaXR5T3JpZ2luIG9y
aWdpbihwcnBPcmlnaW4pOwogICAgIFdlYkZyYW1lSW1wbCogd2ViRnJhbWUgPSBXZWJGcmFtZUlt
cGw6OmZyb21GcmFtZShmcmFtZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3NyYy9JREJGYWN0b3J5QmFja2VuZFByb3h5LmggYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Ny
Yy9JREJGYWN0b3J5QmFja2VuZFByb3h5LmgKaW5kZXggZTE0YjhjZWE5ODJmMzE3ZTQxZDQzYThj
OTNmMWQ3ZDYxZjY3MWMzMi4uYzA3ZGIzNTU2ZTA5MDA2NmM3YjRjYjFlMWI5ZWRjYWZjNzA2Yzk2
MCAxMDA3NTUKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvSURCRmFjdG9yeUJhY2tl
bmRQcm94eS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0lEQkZhY3RvcnlCYWNr
ZW5kUHJveHkuaApAQCAtMzMsMTEgKzMzLDE0IEBACiAKICNpbmNsdWRlICJJREJGYWN0b3J5QmFj
a2VuZEludGVyZmFjZS5oIgogCi1uYW1lc3BhY2UgV2ViQ29yZSB7IGNsYXNzIERPTVN0cmluZ0xp
c3Q7IH0KK25hbWVzcGFjZSBXZWJDb3JlIHsKK2NsYXNzIFdvcmtlckNvbnRleHQ7Cit9CiAKIG5h
bWVzcGFjZSBXZWJLaXQgewogCiBjbGFzcyBXZWJJREJGYWN0b3J5OworY2xhc3MgV2ViU2VjdXJp
dHlPcmlnaW47CiAKIGNsYXNzIElEQkZhY3RvcnlCYWNrZW5kUHJveHkgOiBwdWJsaWMgV2ViQ29y
ZTo6SURCRmFjdG9yeUJhY2tlbmRJbnRlcmZhY2UgewogcHVibGljOgpAQCAtNDUsMTEgKzQ4LDE1
IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIH5JREJGYWN0b3J5QmFja2VuZFByb3h5KCk7CiAKICAg
ICB2aXJ0dWFsIHZvaWQgZ2V0RGF0YWJhc2VOYW1lcyhQYXNzUmVmUHRyPFdlYkNvcmU6OklEQkNh
bGxiYWNrcz4sIFBhc3NSZWZQdHI8V2ViQ29yZTo6U2VjdXJpdHlPcmlnaW4+LCBXZWJDb3JlOjpG
cmFtZSosIGNvbnN0IFN0cmluZyYgZGF0YURpcik7Ci0gICAgdmlydHVhbCB2b2lkIG9wZW4oY29u
c3QgU3RyaW5nJiBuYW1lLCBQYXNzUmVmUHRyPFdlYkNvcmU6OklEQkNhbGxiYWNrcz4sIFBhc3NS
ZWZQdHI8V2ViQ29yZTo6U2VjdXJpdHlPcmlnaW4+LCBXZWJDb3JlOjpGcmFtZSosIGNvbnN0IFN0
cmluZyYgZGF0YURpcik7CisKKyAgICB2aXJ0dWFsIHZvaWQgb3Blbihjb25zdCBTdHJpbmcmIG5h
bWUsIFdlYkNvcmU6OklEQkNhbGxiYWNrcyosIFBhc3NSZWZQdHI8V2ViQ29yZTo6U2VjdXJpdHlP
cmlnaW4+LCBXZWJDb3JlOjpGcmFtZSosIGNvbnN0IFN0cmluZyYgZGF0YURpcik7CisgICAgdmly
dHVhbCB2b2lkIG9wZW5Gcm9tV29ya2VyKGNvbnN0IFN0cmluZyYgbmFtZSwgV2ViQ29yZTo6SURC
Q2FsbGJhY2tzKiwgUGFzc1JlZlB0cjxXZWJDb3JlOjpTZWN1cml0eU9yaWdpbj4sIFdlYkNvcmU6
OldvcmtlckNvbnRleHQqLCBjb25zdCBTdHJpbmcmIGRhdGFEaXIpOworCiAgICAgdmlydHVhbCB2
b2lkIGRlbGV0ZURhdGFiYXNlKGNvbnN0IFN0cmluZyYgbmFtZSwgUGFzc1JlZlB0cjxXZWJDb3Jl
OjpJREJDYWxsYmFja3M+LCBQYXNzUmVmUHRyPFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luPiwgV2Vi
Q29yZTo6RnJhbWUqLCBjb25zdCBTdHJpbmcmIGRhdGFEaXIpOwogCiBwcml2YXRlOgogICAgIElE
QkZhY3RvcnlCYWNrZW5kUHJveHkoKTsKKyAgICBib29sIGFsbG93SURCRnJvbVdvcmtlclRocmVh
ZChXZWJDb3JlOjpXb3JrZXJDb250ZXh0KiwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBXZWJT
ZWN1cml0eU9yaWdpbiYpOwogCiAgICAgLy8gV2UgZG9uJ3Qgb3duIHRoaXMgcG9pbnRlciAodW5s
aWtlIGFsbCB0aGUgb3RoZXIgcHJveHkgY2xhc3NlcyB3aGljaCBkbykuCiAgICAgV2ViSURCRmFj
dG9yeSogbV93ZWJJREJGYWN0b3J5OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1
bS9zcmMvV2ViSURCRmFjdG9yeUltcGwuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMv
V2ViSURCRmFjdG9yeUltcGwuY3BwCmluZGV4IDg0YzFhM2Q0MmUxYWIxMmYzM2NkMjMyZDlmMTQ1
YjZkODMwZWRkNmQuLmQ4NzVlMTFiYzY1ZWY1ODhlMDZlMmI1ZjUxZGFjMTZkMjZiNjA4ZWMgMTAw
NzU1Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYklEQkZhY3RvcnlJbXBsLmNw
cAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJJREJGYWN0b3J5SW1wbC5jcHAK
QEAgLTY2LDcgKzY2LDcgQEAgdm9pZCBXZWJJREJGYWN0b3J5SW1wbDo6Z2V0RGF0YWJhc2VOYW1l
cyhXZWJJREJDYWxsYmFja3MqIGNhbGxiYWNrcywgY29uc3QgV2ViU2UKIAogdm9pZCBXZWJJREJG
YWN0b3J5SW1wbDo6b3Blbihjb25zdCBXZWJTdHJpbmcmIG5hbWUsIFdlYklEQkNhbGxiYWNrcyog
Y2FsbGJhY2tzLCBjb25zdCBXZWJTZWN1cml0eU9yaWdpbiYgb3JpZ2luLCBXZWJGcmFtZSosIGNv
bnN0IFdlYlN0cmluZyYgZGF0YURpcikKIHsKLSAgICBtX2lkYkZhY3RvcnlCYWNrZW5kLT5vcGVu
KG5hbWUsIElEQkNhbGxiYWNrc1Byb3h5OjpjcmVhdGUoYWRvcHRQdHIoY2FsbGJhY2tzKSksIG9y
aWdpbiwgMCwgZGF0YURpcik7CisgICAgbV9pZGJGYWN0b3J5QmFja2VuZC0+b3BlbihuYW1lLCBJ
REJDYWxsYmFja3NQcm94eTo6Y3JlYXRlKGFkb3B0UHRyKGNhbGxiYWNrcykpLmdldCgpLCBvcmln
aW4sIDAsIGRhdGFEaXIpOwogfQogCiB2b2lkIFdlYklEQkZhY3RvcnlJbXBsOjpkZWxldGVEYXRh
YmFzZShjb25zdCBXZWJTdHJpbmcmIG5hbWUsIFdlYklEQkNhbGxiYWNrcyogY2FsbGJhY2tzLCBj
b25zdCBXZWJTZWN1cml0eU9yaWdpbiYgb3JpZ2luLCBXZWJGcmFtZSosIGNvbnN0IFdlYlN0cmlu
ZyYgZGF0YURpcikK
</data>

          </attachment>
      

    </bug>

</bugzilla>