<?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>68303</bug_id>
          
          <creation_ts>2011-09-16 19:23:53 -0700</creation_ts>
          <short_desc>Memory leak using web SQL DB</short_desc>
          <delta_ts>2015-11-24 15:49:43 -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>WebCore Misc.</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>NEW</bug_status>
          <resolution></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="Michael Nordman">michaeln</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>abarth</cc>
    
    <cc>ap</cc>
    
    <cc>beidson</cc>
    
    <cc>benjamin</cc>
    
    <cc>dcarney</cc>
    
    <cc>dglazkov</cc>
    
    <cc>fishd</cc>
    
    <cc>jamesr</cc>
    
    <cc>jochen</cc>
    
    <cc>jsbell</cc>
    
    <cc>leandro</cc>
    
    <cc>levin+threading</cc>
    
    <cc>leviw</cc>
    
    <cc>mark.lam</cc>
    
    <cc>tkent+wkapi</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>zac.spitzer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>468987</commentid>
    <comment_count>0</comment_count>
    <who name="Michael Nordman">michaeln</who>
    <bug_when>2011-09-16 19:23:53 -0700</bug_when>
    <thetext>Here&apos;s a repro case...

&lt;script&gt;
	setInterval (function() {
		openDatabase(&apos;leaky&apos;, &apos;&apos;, &apos;Leaky&apos;, 5*1024*1024);
	}, 250);
&lt;/script&gt;

There are two references held on Database objects that prevent them from being cleaned up prior to page close even if there are no references or pending completions in the containing script execution content.

1) The background DatabaseThread class holds a ref to each Database instance that&apos;s been open on that thread until that Database has been closed. Trouble is, they&apos;re not closed until Document shutdown time.

2) The InspectorInstrumentation holds a ref to each Database instance that&apos;s been open in InspecotorDatabaseAgent. There is no method to clear the ref for an individual Database, only a way to drop such refs for all Database instance that have been opened in the page. That clearing happens when a new Document is being committed to the Frame.

Also see http://code.google.com/p/chromium/issues/detail?id=62275</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>702251</commentid>
    <comment_count>1</comment_count>
      <attachid>159997</attachid>
    <who name="Dan Carney">dcarney</who>
    <bug_when>2012-08-22 13:18:01 -0700</bug_when>
    <thetext>Created attachment 159997
Proposed patch

The above patch stops the leaking of database references in DatabaseThread.  There is still one reference per database name open in the Inspector.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>702291</commentid>
    <comment_count>2</comment_count>
      <attachid>159997</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2012-08-22 13:45:26 -0700</bug_when>
    <thetext>Comment on attachment 159997
Proposed patch

Attachment 159997 did not pass mac-ews (mac):
Output: http://queues.webkit.org/results/13565396</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>702298</commentid>
    <comment_count>3</comment_count>
      <attachid>159997</attachid>
    <who name="David Levin">levin</who>
    <bug_when>2012-08-22 13:48:04 -0700</bug_when>
    <thetext>Comment on attachment 159997
Proposed patch

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

Quick comments. I didn&apos;t verify all the logic. I&apos;ll leave that for someone else.

&gt; Source/WebCore/Modules/webdatabase/Database.cpp:71
&gt; +    AtomicallyInitializedStatic(Mutex&amp;, mutex = *new Mutex);

This basically takes a mutex. It is kind of funny if you think about it to take a mutex to create one (and everytime you enter this function as well).

Instead you could use this macro to initialize currentId and then do an atomic increment.

&gt; Source/WebCore/Modules/webdatabase/Database.cpp:210
&gt; +    guard(PassRefPtr&lt;Database&gt;(this), parameters);

This isn&apos;t correct &quot;PassRefPtr&lt;Database&gt;(this)&quot;. I believe you should either just be able to pass in &quot;this&quot; or there is another construct you can use.

&gt; Source/WebCore/Modules/webdatabase/Database.cpp:276
&gt; +class CloseImmediatelyTask: public ScriptExecutionContext::Task {

space before :

&gt; Source/WebCore/Modules/webdatabase/Database.cpp:279
&gt; +    virtual ~CloseImmediatelyTask() { }

Why?

&gt; Source/WebCore/Modules/webdatabase/Database.cpp:297
&gt; +        m_scriptExecutionContext-&gt;postTask(CloseImmediatelyTask::create(this));

Consider using createCallbackTask instead.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>702785</commentid>
    <comment_count>4</comment_count>
      <attachid>159997</attachid>
    <who name="Dan Carney">dcarney</who>
    <bug_when>2012-08-23 01:02:51 -0700</bug_when>
    <thetext>Comment on attachment 159997
Proposed patch

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

&gt;&gt; Source/WebCore/Modules/webdatabase/Database.cpp:71
&gt;&gt; +    AtomicallyInitializedStatic(Mutex&amp;, mutex = *new Mutex);
&gt; 
&gt; This basically takes a mutex. It is kind of funny if you think about it to take a mutex to create one (and everytime you enter this function as well).
&gt; 
&gt; Instead you could use this macro to initialize currentId and then do an atomic increment.

I copied the code from elsewhere.  I&apos;ve updated to use atomicIncrement

&gt;&gt; Source/WebCore/Modules/webdatabase/Database.cpp:276
&gt;&gt; +class CloseImmediatelyTask: public ScriptExecutionContext::Task {
&gt; 
&gt; space before :

done.

&gt;&gt; Source/WebCore/Modules/webdatabase/Database.cpp:279
&gt;&gt; +    virtual ~CloseImmediatelyTask() { }
&gt; 
&gt; Why?

leftovers.  removed

&gt;&gt; Source/WebCore/Modules/webdatabase/Database.cpp:297
&gt;&gt; +        m_scriptExecutionContext-&gt;postTask(CloseImmediatelyTask::create(this));
&gt; 
&gt; Consider using createCallbackTask instead.

Unfortunately that doesn&apos;t work with PassRefPtr&lt;Database&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>702800</commentid>
    <comment_count>5</comment_count>
      <attachid>160112</attachid>
    <who name="Dan Carney">dcarney</who>
    <bug_when>2012-08-23 01:25:38 -0700</bug_when>
    <thetext>Created attachment 160112
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>705225</commentid>
    <comment_count>6</comment_count>
      <attachid>160112</attachid>
    <who name="">jochen</who>
    <bug_when>2012-08-27 06:37:45 -0700</bug_when>
    <thetext>Comment on attachment 160112
Patch

Can you write a layout test for this? If you open databases in an endless loop, does this allocate enough memory w/o the patch to crash DRT?


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

&gt; Source/WebCore/Modules/webdatabase/DatabaseThread.cpp:-118
&gt; -    if (m_openDatabaseSet.size() &gt; 0) {

it seems that this set is only needed to abort open transactions. So what about instead of recording open and close events of the database (via recordDatabaseOpened/Closed), record start and end of transactions? I think it&apos;s reasonable to keep a strong reference during transactions. I think that way we might be able to avoid the weak ptr thing all together</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>744011</commentid>
    <comment_count>7</comment_count>
      <attachid>169122</attachid>
    <who name="Dan Carney">dcarney</who>
    <bug_when>2012-10-17 01:37:12 -0700</bug_when>
    <thetext>Created attachment 169122
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>744015</commentid>
    <comment_count>8</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-10-17 01:38:44 -0700</bug_when>
    <thetext>Please wait for approval from abarth@webkit.org, dglazkov@chromium.org, fishd@chromium.org, jamesr@chromium.org or tkent@chromium.org before submitting, as this patch contains changes to the Chromium public API. See also https://trac.webkit.org/wiki/ChromiumWebKitAPI.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>744016</commentid>
    <comment_count>9</comment_count>
    <who name="Dan Carney">dcarney</who>
    <bug_when>2012-10-17 01:39:53 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; Created an attachment (id=169122) [details]
&gt; Patch

Here&apos;s a patch which avoids messing with deletion semantics, which is much nicer, but it&apos;s a much bigger change.  I can break it down into smaller bits if this is an acceptable way to go.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>744278</commentid>
    <comment_count>10</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-10-17 08:51:36 -0700</bug_when>
    <thetext>It&apos;s suspicious to me that this code so complicated and that it doesn&apos;t use the normal tools we have to manage these sorts of lifetimes (e.g., ActiveDOMObject).  This is old and was written before we really fleshed out those tools.  If possible, I&apos;d prefer to see a patch that simplified this code to use those tools rather than a patch that layered more complexity onto webdatabase&apos;s custom system.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>744298</commentid>
    <comment_count>11</comment_count>
    <who name="Dan Carney">dcarney</who>
    <bug_when>2012-10-17 09:16:32 -0700</bug_when>
    <thetext>(In reply to comment #10)
&gt; It&apos;s suspicious to me that this code so complicated and that it doesn&apos;t use the normal tools we have to manage these sorts of lifetimes (e.g., ActiveDOMObject).  This is old and was written before we really fleshed out those tools.  If possible, I&apos;d prefer to see a patch that simplified this code to use those tools rather than a patch that layered more complexity onto webdatabase&apos;s custom system.

Okay. I&apos;m definitely looking for a better way to do this.  A good portion of this patch is just trying to ensure a particular ScriptExecutionContext lives long enough and is destroyed in the right thread.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>750449</commentid>
    <comment_count>12</comment_count>
      <attachid>169122</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-10-24 23:54:23 -0700</bug_when>
    <thetext>Comment on attachment 169122
Patch

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

&gt; Source/WebCore/Modules/webdatabase/Database.cpp:170
&gt; +        ScriptExecutionContext* copy = scriptExecutionContext.get();
&gt; +        copy-&gt;postTask(DerefContextTask::create(scriptExecutionContext));

I probably would have picked another name than &quot;copy&quot; here.  It&apos;s not really a copy of the scriptExecutionContext (which is non-copiable).

&gt; Source/WebCore/Modules/webdatabase/DatabaseThread.cpp:168
&gt; +    virtual const char* debugTaskName() const { return &quot;CloseDatabaseCloserTask&quot;; }

I presume this is an OVERRIDE

&gt; Source/WebCore/Modules/webdatabase/DatabaseThread.cpp:174
&gt; +    : DatabaseTask(0, 0)
&gt; +    , m_closer(closer)

Bad indent.

&gt; Source/WebCore/Modules/webdatabase/DatabaseThread.cpp:185
&gt; +        m_queue.prepend(CloseDatabaseCloserTask::create(closer));

prepend, interesting.

&gt; Source/WebCore/Modules/webdatabase/DatabaseThread.h:88
&gt; -    typedef HashSet&lt;RefPtr&lt;Database&gt; &gt; DatabaseSet;
&gt; +    typedef HashSet&lt;RefPtr&lt;DatabaseCloser&gt; &gt; DatabaseSet;

I see, this is the point of the whole thing.

&gt; Source/WebKit/chromium/src/WebDatabase.cpp:65
&gt; +    if (!m_stringIdentifier.isNull())
&gt; +        return m_stringIdentifier;

This seems like a hack.  We should just change the API properly.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>750459</commentid>
    <comment_count>13</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-10-25 00:01:40 -0700</bug_when>
    <thetext>Dan, I&apos;m sorry, but this patch is too complicated for me to review sensibly.  We need to find folks who actually understand this code to review your patch.  I&apos;m not sure who is the most knowledgable about this code at this point.  Perhaps beidson?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>750683</commentid>
    <comment_count>14</comment_count>
    <who name="Dan Carney">dcarney</who>
    <bug_when>2012-10-25 04:55:20 -0700</bug_when>
    <thetext>(In reply to comment #13)
&gt; Dan, I&apos;m sorry, but this patch is too complicated for me to review sensibly.  We need to find folks who actually understand this code to review your patch.  I&apos;m not sure who is the most knowledgable about this code at this point.  Perhaps beidson?

Totally understandable. It took me several days to sort out all the various problems that went into this patch, and at the end, this is really just a long serious of hacks strung together because of weird lifecycle and threading issues in the Database code. If there is someone who could review it for me, I&apos;d be happy to write up a quick  summary of the purpose of each hack, so the patch might be more readable.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>753411</commentid>
    <comment_count>15</comment_count>
      <attachid>169122</attachid>
    <who name="">jochen</who>
    <bug_when>2012-10-29 07:21:40 -0700</bug_when>
    <thetext>Comment on attachment 169122
Patch

I think the change is overall complex enough to warrant a more detailed description in the changelog

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

&gt; Source/WebCore/Modules/webdatabase/AbstractDatabase.h:60
&gt; +        ~Core();

should be virtual.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>754349</commentid>
    <comment_count>16</comment_count>
      <attachid>171448</attachid>
    <who name="Dan Carney">dcarney</who>
    <bug_when>2012-10-30 07:25:37 -0700</bug_when>
    <thetext>Created attachment 171448
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>754352</commentid>
    <comment_count>17</comment_count>
    <who name="Dan Carney">dcarney</who>
    <bug_when>2012-10-30 07:26:46 -0700</bug_when>
    <thetext>(In reply to comment #16)
&gt; Created an attachment (id=171448) [details]
&gt; Patch

Addresses Adam&apos;s few comments and added a more detailed changelog entry.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>870885</commentid>
    <comment_count>18</comment_count>
    <who name="Levi Weintraub">leviw</who>
    <bug_when>2013-04-08 10:56:33 -0700</bug_when>
    <thetext>Should this be moved to blink? If so, please clear the flags on the patch and mark this bug as invalid.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>870958</commentid>
    <comment_count>19</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2013-04-08 11:13:10 -0700</bug_when>
    <thetext>This issue doesn&apos;t seem to be chromium specific.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>870981</commentid>
    <comment_count>20</comment_count>
    <who name="Michael Nordman">michaeln</who>
    <bug_when>2013-04-08 11:50:42 -0700</bug_when>
    <thetext>(In reply to comment #19)
&gt; This issue doesn&apos;t seem to be chromium specific.

Nope, it is not chromium specific (afaict).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>976928</commentid>
    <comment_count>21</comment_count>
      <attachid>171448</attachid>
    <who name="Anders Carlsson">andersca</who>
    <bug_when>2014-02-05 11:08:33 -0800</bug_when>
    <thetext>Comment on attachment 171448
Patch

Clearing review flag on patches from before 2014. If this patch is still relevant, please reset the r? flag.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>159997</attachid>
            <date>2012-08-22 13:18:01 -0700</date>
            <delta_ts>2012-08-23 01:25:32 -0700</delta_ts>
            <desc>Proposed patch</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>13007</size>
            <attacher name="Dan Carney">dcarney</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvQWJzdHJhY3RE
YXRhYmFzZS5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9BYnN0cmFjdERh
dGFiYXNlLmgKaW5kZXggMTJiODk4NS4uNDdjYzRmYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9BYnN0cmFjdERhdGFiYXNlLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9BYnN0cmFjdERhdGFiYXNlLmgKQEAgLTQ4LDcgKzQ4
LDcgQEAgY2xhc3MgU2VjdXJpdHlPcmlnaW47CiAKIHR5cGVkZWYgaW50IEV4Y2VwdGlvbkNvZGU7
CiAKLWNsYXNzIEFic3RyYWN0RGF0YWJhc2UgOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8
QWJzdHJhY3REYXRhYmFzZT4geworY2xhc3MgQWJzdHJhY3REYXRhYmFzZSA6IHB1YmxpYyBXVEY6
OlRocmVhZFNhZmVSZWZDb3VudGVkQmFzZSB7CiBwdWJsaWM6CiAgICAgc3RhdGljIGJvb2wgaXNB
dmFpbGFibGUoKTsKICAgICBzdGF0aWMgdm9pZCBzZXRJc0F2YWlsYWJsZShib29sIGF2YWlsYWJs
ZSk7CkBAIC04OSw2ICs4OSwxNCBAQCBwdWJsaWM6CiAKICAgICBEYXRhYmFzZUNvbnRleHQqIGRh
dGFiYXNlQ29udGV4dCgpIGNvbnN0IHsgcmV0dXJuIG1fZGF0YWJhc2VDb250ZXh0OyB9CiAKKyAg
ICB2b2lkIGRlcmVmKCkKKyAgICB7CisgICAgICAgIGlmICghZGVyZWZCYXNlKCkpCisgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIGlmICghaXNLZXB0QWxpdmUoKSkKKyAgICAgICAgICAgIGRl
bGV0ZSB0aGlzOworICAgIH0KKwogcHJvdGVjdGVkOgogICAgIGZyaWVuZCBjbGFzcyBDaGFuZ2VW
ZXJzaW9uV3JhcHBlcjsKICAgICBmcmllbmQgY2xhc3MgU1FMU3RhdGVtZW50OwpAQCAtMTA3LDYg
KzExNSw3IEBAIHByb3RlY3RlZDoKICAgICB2b2lkIGNsb3NlRGF0YWJhc2UoKTsKIAogICAgIHZp
cnR1YWwgYm9vbCBwZXJmb3JtT3BlbkFuZFZlcmlmeShib29sIHNob3VsZFNldFZlcnNpb25Jbk5l
d0RhdGFiYXNlLCBFeGNlcHRpb25Db2RlJiwgU3RyaW5nJiBlcnJvck1lc3NhZ2UpOworICAgIHZp
cnR1YWwgYm9vbCBpc0tlcHRBbGl2ZSgpIHsgcmV0dXJuIGZhbHNlOyB9CiAKICAgICBib29sIGdl
dFZlcnNpb25Gcm9tRGF0YWJhc2UoU3RyaW5nJiB2ZXJzaW9uLCBib29sIHNob3VsZENhY2hlVmVy
c2lvbiA9IHRydWUpOwogICAgIGJvb2wgc2V0VmVyc2lvbkluRGF0YWJhc2UoY29uc3QgU3RyaW5n
JiB2ZXJzaW9uLCBib29sIHNob3VsZENhY2hlVmVyc2lvbiA9IHRydWUpOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZS5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlLmNwcAppbmRleCBkMGMzYTdhLi43
NmI3NjgyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0Rh
dGFiYXNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFi
YXNlLmNwcApAQCAtNjYsNiArNjYsMTQgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitzdGF0
aWMgaW50IGdldE5leHREYXRhYmFzZUlkKCkKK3sKKyAgICBBdG9taWNhbGx5SW5pdGlhbGl6ZWRT
dGF0aWMoTXV0ZXgmLCBtdXRleCA9ICpuZXcgTXV0ZXgpOworICAgIE11dGV4TG9ja2VyIGxvY2tl
cihtdXRleCk7CisgICAgc3RhdGljIGludCBjdXJyZW50SWQgPSAxOworICAgIHJldHVybiBjdXJy
ZW50SWQrKzsKK30KKwogY2xhc3MgRGF0YWJhc2VDcmVhdGlvbkNhbGxiYWNrVGFzayA6IHB1Ymxp
YyBTY3JpcHRFeGVjdXRpb25Db250ZXh0OjpUYXNrIHsKIHB1YmxpYzoKICAgICBzdGF0aWMgUGFz
c093blB0cjxEYXRhYmFzZUNyZWF0aW9uQ2FsbGJhY2tUYXNrPiBjcmVhdGUoUGFzc1JlZlB0cjxE
YXRhYmFzZT4gZGF0YWJhc2UsIFBhc3NSZWZQdHI8RGF0YWJhc2VDYWxsYmFjaz4gY3JlYXRpb25D
YWxsYmFjaykKQEAgLTEyNCw5ICsxMzIsMTIgQEAgUGFzc1JlZlB0cjxEYXRhYmFzZT4gRGF0YWJh
c2U6Om9wZW5EYXRhYmFzZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBjb24KIAog
RGF0YWJhc2U6OkRhdGFiYXNlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIGNvbnN0
IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiBleHBlY3RlZFZlcnNpb24sIGNvbnN0IFN0cmlu
ZyYgZGlzcGxheU5hbWUsIHVuc2lnbmVkIGxvbmcgZXN0aW1hdGVkU2l6ZSkKICAgICA6IEFic3Ry
YWN0RGF0YWJhc2UoY29udGV4dCwgbmFtZSwgZXhwZWN0ZWRWZXJzaW9uLCBkaXNwbGF5TmFtZSwg
ZXN0aW1hdGVkU2l6ZSwgQXN5bmNEYXRhYmFzZSkKKyAgICAsIG1faWQoZ2V0TmV4dERhdGFiYXNl
SWQoKSkKICAgICAsIG1fdHJhbnNhY3Rpb25JblByb2dyZXNzKGZhbHNlKQogICAgICwgbV9pc1Ry
YW5zYWN0aW9uUXVldWVFbmFibGVkKHRydWUpCiAgICAgLCBtX2RlbGV0ZWQoZmFsc2UpCisgICAg
LCBtX2RlbGV0aW9uR3VhcmQoMCkKKyAgICAsIG1fZGVsZXRpb25HdWFyZFBhcmFtZXRlcnMoMCkK
IHsKICAgICBtX2RhdGFiYXNlVGhyZWFkU2VjdXJpdHlPcmlnaW4gPSBtX2NvbnRleHRUaHJlYWRT
ZWN1cml0eU9yaWdpbi0+aXNvbGF0ZWRDb3B5KCk7CiAKQEAgLTE3MCw2ICsxODEsMzYgQEAgRGF0
YWJhc2U6On5EYXRhYmFzZSgpCiAgICAgfQogfQogCit2b2lkIERhdGFiYXNlOjpzZXREZWxldGlv
bkd1YXJkKERlbGV0aW9uR3VhcmQgZGVsZXRpb25HdWFyZCwgdm9pZCogcGFyYW1ldGVycykKK3sK
KyAgICBNdXRleExvY2tlciBsb2NrZXIobV9kZWxldGlvbkd1YXJkTXV0ZXgpOworICAgIEFTU0VS
VCghbV9kZWxldGlvbkd1YXJkKTsKKyAgICBtX2RlbGV0aW9uR3VhcmQgPSBkZWxldGlvbkd1YXJk
OworICAgIG1fZGVsZXRpb25HdWFyZFBhcmFtZXRlcnMgPSBwYXJhbWV0ZXJzOworfQorCitib29s
IERhdGFiYXNlOjppc0tlcHRBbGl2ZSgpCit7CisKKyAgICBEZWxldGlvbkd1YXJkIGd1YXJkOwor
ICAgIHZvaWQqIHBhcmFtZXRlcnM7CisgICAgeworICAgICAgICBNdXRleExvY2tlciBsb2NrZXIo
bV9kZWxldGlvbkd1YXJkTXV0ZXgpOworICAgICAgICBpZiAoIW1fZGVsZXRpb25HdWFyZCkKKyAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICAvLyBTd2FwIG91dCBkZWxldGlvbiBn
dWFyZCBzbyB0aGUgbmV4dCBkZXJlZigpIGV4ZWN1dGVzIHRoZSBkZWxldGUuCisgICAgICAgIGd1
YXJkID0gbV9kZWxldGlvbkd1YXJkOworICAgICAgICBwYXJhbWV0ZXJzID0gbV9kZWxldGlvbkd1
YXJkUGFyYW1ldGVyczsKKyAgICAgICAgbV9kZWxldGlvbkd1YXJkID0gMDsKKyAgICAgICAgbV9k
ZWxldGlvbkd1YXJkUGFyYW1ldGVycyA9IDA7CisgICAgfQorCisgICAgLy8gUGFzcyBsYXN0IHJl
ZmVyZW5jZSB0byB0aGUgZGVsZXRpb24gZ3VhcmQuCisgICAgZ3VhcmQoUGFzc1JlZlB0cjxEYXRh
YmFzZT4odGhpcyksIHBhcmFtZXRlcnMpOworICAgIHJldHVybiB0cnVlOworfQorCiBTdHJpbmcg
RGF0YWJhc2U6OnZlcnNpb24oKSBjb25zdAogewogICAgIGlmIChtX2RlbGV0ZWQpCkBAIC0yMzEs
NiArMjcyLDMxIEBAIHZvaWQgRGF0YWJhc2U6OmNsb3NlKCkKICAgICBEYXRhYmFzZVRyYWNrZXI6
OnRyYWNrZXIoKS5yZW1vdmVPcGVuRGF0YWJhc2UodGhpcyk7CiB9CiAKKworY2xhc3MgQ2xvc2VJ
bW1lZGlhdGVseVRhc2s6IHB1YmxpYyBTY3JpcHRFeGVjdXRpb25Db250ZXh0OjpUYXNrIHsKK3B1
YmxpYzoKKyAgICBzdGF0aWMgUGFzc093blB0cjxDbG9zZUltbWVkaWF0ZWx5VGFzaz4gY3JlYXRl
KFBhc3NSZWZQdHI8RGF0YWJhc2U+IGRhdGFiYXNlKSB7IHJldHVybiBhZG9wdFB0cihuZXcgQ2xv
c2VJbW1lZGlhdGVseVRhc2soZGF0YWJhc2UpKTsgfQorICAgIHZpcnR1YWwgfkNsb3NlSW1tZWRp
YXRlbHlUYXNrKCkgeyB9CisKKyAgICB2aXJ0dWFsIHZvaWQgcGVyZm9ybVRhc2soU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCogY29udGV4dCkKKyAgICB7CisgICAgICAgIG1fZGF0YWJhc2UtPmNsb3Nl
SW1tZWRpYXRlbHkoKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgQ2xvc2VJbW1lZGlhdGVseVRh
c2soUGFzc1JlZlB0cjxEYXRhYmFzZT4gZGF0YWJhc2UpOiBtX2RhdGFiYXNlKGRhdGFiYXNlKSB7
IH0KKworICAgIFJlZlB0cjxEYXRhYmFzZT4gbV9kYXRhYmFzZTsKK307CisKK3ZvaWQgRGF0YWJh
c2U6OnBvc3RDbG9zZUltbWVkaWF0ZWx5KCkKK3sKKyAgICBpZiAobV9zY3JpcHRFeGVjdXRpb25D
b250ZXh0LT5pc0NvbnRleHRUaHJlYWQoKSkKKyAgICAgICAgY2xvc2VJbW1lZGlhdGVseSgpOwor
ICAgIGVsc2UKKyAgICAgICAgbV9zY3JpcHRFeGVjdXRpb25Db250ZXh0LT5wb3N0VGFzayhDbG9z
ZUltbWVkaWF0ZWx5VGFzazo6Y3JlYXRlKHRoaXMpKTsKK30KKwogdm9pZCBEYXRhYmFzZTo6Y2xv
c2VJbW1lZGlhdGVseSgpCiB7CiAgICAgQVNTRVJUKG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dC0+
aXNDb250ZXh0VGhyZWFkKCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93
ZWJkYXRhYmFzZS9EYXRhYmFzZS5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFz
ZS9EYXRhYmFzZS5oCmluZGV4IDEyYjQzMGUuLjY4YjY4MjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2UuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlLmgKQEAgLTc1LDkgKzc1LDExIEBAIHB1Ymxp
YzoKIAogICAgIHZvaWQgY2xvc2UoKTsKICAgICB2aXJ0dWFsIHZvaWQgY2xvc2VJbW1lZGlhdGVs
eSgpOworICAgIHZvaWQgcG9zdENsb3NlSW1tZWRpYXRlbHkoKTsKIAogICAgIHVuc2lnbmVkIGxv
bmcgbG9uZyBkYXRhYmFzZVNpemUoKSBjb25zdDsKICAgICB1bnNpZ25lZCBsb25nIGxvbmcgbWF4
aW11bVNpemUoKSBjb25zdDsKKyAgICBpbnQgaWQoKSBjb25zdCB7IHJldHVybiBtX2lkOyB9CiAK
ICAgICB2b2lkIHNjaGVkdWxlVHJhbnNhY3Rpb25DYWxsYmFjayhTUUxUcmFuc2FjdGlvbiopOwog
ICAgIHZvaWQgc2NoZWR1bGVUcmFuc2FjdGlvblN0ZXAoU1FMVHJhbnNhY3Rpb24qLCBib29sIGlt
bWVkaWF0ZWx5ID0gZmFsc2UpOwpAQCAtODUsNiArODcsOSBAQCBwdWJsaWM6CiAgICAgU1FMVHJh
bnNhY3Rpb25DbGllbnQqIHRyYW5zYWN0aW9uQ2xpZW50KCkgY29uc3Q7CiAgICAgU1FMVHJhbnNh
Y3Rpb25Db29yZGluYXRvciogdHJhbnNhY3Rpb25Db29yZGluYXRvcigpIGNvbnN0OwogCisgICAg
dHlwZWRlZiB2b2lkICgqRGVsZXRpb25HdWFyZCkoUGFzc1JlZlB0cjxEYXRhYmFzZT4sIHZvaWQq
IHBhcmFtZXRlcnMpOworICAgIHZvaWQgc2V0RGVsZXRpb25HdWFyZChEZWxldGlvbkd1YXJkLCB2
b2lkKiBwYXJhbWV0ZXJzKTsKKwogcHJpdmF0ZToKICAgICBjbGFzcyBEYXRhYmFzZU9wZW5UYXNr
OwogICAgIGNsYXNzIERhdGFiYXNlQ2xvc2VUYXNrOwpAQCAtOTgsNiArMTAzLDcgQEAgcHJpdmF0
ZToKIAogICAgIGJvb2wgb3BlbkFuZFZlcmlmeVZlcnNpb24oYm9vbCBzZXRWZXJzaW9uSW5OZXdE
YXRhYmFzZSwgRXhjZXB0aW9uQ29kZSYsIFN0cmluZyYgZXJyb3JNZXNzYWdlKTsKICAgICB2aXJ0
dWFsIGJvb2wgcGVyZm9ybU9wZW5BbmRWZXJpZnkoYm9vbCBzZXRWZXJzaW9uSW5OZXdEYXRhYmFz
ZSwgRXhjZXB0aW9uQ29kZSYsIFN0cmluZyYgZXJyb3JNZXNzYWdlKTsKKyAgICB2aXJ0dWFsIGJv
b2wgaXNLZXB0QWxpdmUoKTsKIAogICAgIHZvaWQgaW5Qcm9ncmVzc1RyYW5zYWN0aW9uQ29tcGxl
dGVkKCk7CiAgICAgdm9pZCBzY2hlZHVsZVRyYW5zYWN0aW9uKCk7CkBAIC0xMDYsNiArMTEyLDgg
QEAgcHJpdmF0ZToKIAogICAgIHN0YXRpYyB2b2lkIGRlbGl2ZXJQZW5kaW5nQ2FsbGJhY2sodm9p
ZCopOwogCisgICAgY29uc3QgaW50IG1faWQ7CisKICAgICBEZXF1ZTxSZWZQdHI8U1FMVHJhbnNh
Y3Rpb24+ID4gbV90cmFuc2FjdGlvblF1ZXVlOwogICAgIE11dGV4IG1fdHJhbnNhY3Rpb25JblBy
b2dyZXNzTXV0ZXg7CiAgICAgYm9vbCBtX3RyYW5zYWN0aW9uSW5Qcm9ncmVzczsKQEAgLTExNCw2
ICsxMjIsMTAgQEAgcHJpdmF0ZToKICAgICBSZWZQdHI8U2VjdXJpdHlPcmlnaW4+IG1fZGF0YWJh
c2VUaHJlYWRTZWN1cml0eU9yaWdpbjsKIAogICAgIGJvb2wgbV9kZWxldGVkOworCisgICAgTXV0
ZXggbV9kZWxldGlvbkd1YXJkTXV0ZXg7CisgICAgRGVsZXRpb25HdWFyZCBtX2RlbGV0aW9uR3Vh
cmQ7CisgICAgdm9pZCogbV9kZWxldGlvbkd1YXJkUGFyYW1ldGVyczsKIH07CiAKIH0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0
YWJhc2UvRGF0YWJhc2VUaHJlYWQuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRh
YmFzZS9EYXRhYmFzZVRocmVhZC5jcHAKaW5kZXggZDc3MWIxYy4uMmQwNzAyZSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZVRocmVhZC5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZVRocmVhZC5j
cHAKQEAgLTMzLDYgKzMzLDcgQEAKIAogI2luY2x1ZGUgIkF1dG9kcmFpbmVkUG9vbC5oIgogI2lu
Y2x1ZGUgIkRhdGFiYXNlLmgiCisjaW5jbHVkZSAiRGF0YWJhc2VDb250ZXh0LmgiCiAjaW5jbHVk
ZSAiRGF0YWJhc2VUYXNrLmgiCiAjaW5jbHVkZSAiTG9nZ2luZy5oIgogI2luY2x1ZGUgIlNRTFRy
YW5zYWN0aW9uQ2xpZW50LmgiCkBAIC00MSw4ICs0Miw3OCBAQAogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKK2NsYXNzIFdlYWtEYXRhYmFzZU1hcDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVk
PFdlYWtEYXRhYmFzZU1hcD4geworcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPFdlYWtE
YXRhYmFzZU1hcD4gY3JlYXRlKCkgeyByZXR1cm4gYWRvcHRSZWYobmV3IFdlYWtEYXRhYmFzZU1h
cCk7IH0KKworICAgIHR5cGVkZWYgSGFzaE1hcDxpbnQsIERhdGFiYXNlKj4gV2Vha01hcDsKKyAg
ICB0eXBlZGVmIEhhc2hNYXA8aW50LCBSZWZQdHI8RGF0YWJhc2U+ID4gU3Ryb25nTWFwOworICAg
IHR5cGVkZWYgVmVjdG9yPFJlZlB0cjxEYXRhYmFzZT4gPiBSZWZWZWN0b3I7CisKKyAgICB2b2lk
IGFkZFRvV2Vha01hcChEYXRhYmFzZSogZGF0YWJhc2UpCisgICAgeworICAgICAgICBNdXRleExv
Y2tlciBsb2NrZXIobV9tdXRleCk7CisgICAgICAgIEFTU0VSVCghbV93ZWFrTWFwLmNvbnRhaW5z
KGRhdGFiYXNlLT5pZCgpKSk7CisgICAgICAgIG1fd2Vha01hcC5hZGQoZGF0YWJhc2UtPmlkKCks
IGRhdGFiYXNlKTsKKyAgICAgICAgbV9zdHJvbmdNYXAuYWRkKGRhdGFiYXNlLT5pZCgpLCAwKTsK
KyAgICB9CisKKyAgICBib29sIHRyYW5zZmVyVG9TdHJvbmdNYXAoUGFzc1JlZlB0cjxEYXRhYmFz
ZT4gZGF0YWJhc2UpCisgICAgeworICAgICAgICBNdXRleExvY2tlciBsb2NrZXIobV9tdXRleCk7
CisgICAgICAgIFN0cm9uZ01hcDo6aXRlcmF0b3IgaXRlcmF0b3IgPSBtX3N0cm9uZ01hcC5maW5k
KGRhdGFiYXNlLT5pZCgpKTsKKyAgICAgICAgLy8gVGhlIHJlZmVyZW5jZSBoYXMgYmVlbiB3aXBl
ZCwgYW5kIHRoZSBkYXRhYmFzZSBoYXMgYmVlbiBjbG9zZWQuCisgICAgICAgIGlmIChpdGVyYXRv
ciA9PSBtX3N0cm9uZ01hcC5lbmQoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAg
ICAgICBpZiAoaXRlcmF0b3ItPnNlY29uZCkgeworICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKworICAgICAgICBB
U1NFUlQobV93ZWFrTWFwLmZpbmQoZGF0YWJhc2UtPmlkKCkpICE9IG1fd2Vha01hcC5lbmQoKSAm
JiBtX3dlYWtNYXAuZmluZChkYXRhYmFzZS0+aWQoKSktPnNlY29uZCA9PSBkYXRhYmFzZS5nZXQo
KSk7CisgICAgICAgIGl0ZXJhdG9yLT5zZWNvbmQgPSBkYXRhYmFzZTsKKyAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgfQorCisgICAgdm9pZCBkcmFpbkFsbChSZWZWZWN0b3ImIHZlY3RvcikKKyAg
ICB7CisgICAgICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX211dGV4KTsKKworICAgICAgICB2ZWN0
b3IucmVzaXplKG1fc3Ryb25nTWFwLnNpemUoKSk7CisKKyAgICAgICAgU3Ryb25nTWFwOjppdGVy
YXRvciBpdCA9ICBtX3N0cm9uZ01hcC5iZWdpbigpOworICAgICAgICBTdHJvbmdNYXA6Oml0ZXJh
dG9yIGVuZCA9IG1fc3Ryb25nTWFwLmVuZCgpOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpdCAhPSBlbmQ7ICsraXQsICsraSkgeworICAgICAgICAgICAgLy8gT3duZXJzaGlwIGhhcyBh
bHJlYWR5IGJlZW4gdHJhbnNmZXJyZWQgYnkgZGVsZXRpb24gZ3VhcmQuCisgICAgICAgICAgICBp
ZiAoaXQtPnNlY29uZCkKKyAgICAgICAgICAgICAgICB2ZWN0b3JbaV0gPSBpdC0+c2Vjb25kLnJl
bGVhc2UoKTsKKyAgICAgICAgICAgIC8vIFRoZSBkZWxldGlvbiBndWFyZCBoYXMgbm90IHlldCB0
cmFuc2ZlcnJlZCBvd25lcnNoaXAsIHNvIGl0IG11c3QgYmUgYWxpdmUuCisgICAgICAgICAgICBl
bHNlCisgICAgICAgICAgICAgICAgdmVjdG9yW2ldID0gbV93ZWFrTWFwLmZpbmQoaXQtPmZpcnN0
KS0+c2Vjb25kOworICAgICAgICB9CisgICAgICAgIG1fc3Ryb25nTWFwLmNsZWFyKCk7CisgICAg
ICAgIG1fd2Vha01hcC5jbGVhcigpOworICAgIH0KKworICAgIHZvaWQgcmVtb3ZlRnJvbU1hcChE
YXRhYmFzZSogZGF0YWJhc2UpCisgICAgeworICAgICAgICBNdXRleExvY2tlciBsb2NrZXIobV9t
dXRleCk7CisgICAgICAgIG1fd2Vha01hcC5yZW1vdmUoZGF0YWJhc2UtPmlkKCkpOworICAgICAg
ICBtX3N0cm9uZ01hcC5yZW1vdmUoZGF0YWJhc2UtPmlkKCkpOworICAgIH0KKworcHJpdmF0ZToK
KyAgICBXZWFrRGF0YWJhc2VNYXAoKSB7IH0KKworICAgIE11dGV4IG1fbXV0ZXg7CisgICAgV2Vh
a01hcCBtX3dlYWtNYXA7CisgICAgU3Ryb25nTWFwIG1fc3Ryb25nTWFwOworfTsKKwogRGF0YWJh
c2VUaHJlYWQ6OkRhdGFiYXNlVGhyZWFkKCkKICAgICA6IG1fdGhyZWFkSUQoMCkKKyAgICAsIG1f
b3BlbkRhdGFiYXNlTWFwKFdlYWtEYXRhYmFzZU1hcDo6Y3JlYXRlKCkpCiAgICAgLCBtX3RyYW5z
YWN0aW9uQ2xpZW50KGFkb3B0UHRyKG5ldyBTUUxUcmFuc2FjdGlvbkNsaWVudCgpKSkKICAgICAs
IG1fdHJhbnNhY3Rpb25Db29yZGluYXRvcihhZG9wdFB0cihuZXcgU1FMVHJhbnNhY3Rpb25Db29y
ZGluYXRvcigpKSkKICAgICAsIG1fY2xlYW51cFN5bmMoMCkKQEAgLTExNSwxMiArMTg2LDEyIEBA
IHZvaWQgRGF0YWJhc2VUaHJlYWQ6OmRhdGFiYXNlVGhyZWFkKCkKIAogICAgIC8vIENsb3NlIHRo
ZSBkYXRhYmFzZXMgdGhhdCB3ZSByYW4gdHJhbnNhY3Rpb25zIG9uLiBUaGlzIGVuc3VyZXMgdGhh
dCBpZiBhbnkgdHJhbnNhY3Rpb25zIGFyZSBzdGlsbCBvcGVuLCB0aGV5IGFyZSByb2xsZWQgYmFj
ayBhbmQgd2UgZG9uJ3QgbGVhdmUgdGhlIGRhdGFiYXNlIGluIGFuCiAgICAgLy8gaW5jb25zaXN0
ZW50IG9yIGxvY2tlZCBzdGF0ZS4KLSAgICBpZiAobV9vcGVuRGF0YWJhc2VTZXQuc2l6ZSgpID4g
MCkgewotICAgICAgICAvLyBBcyB0aGUgY2FsbCB0byBjbG9zZSB3aWxsIG1vZGlmeSB0aGUgb3Jp
Z2luYWwgc2V0LCB3ZSBtdXN0IHRha2UgYSBjb3B5IHRvIGl0ZXJhdGUgb3Zlci4KLSAgICAgICAg
RGF0YWJhc2VTZXQgb3BlblNldENvcHk7Ci0gICAgICAgIG9wZW5TZXRDb3B5LnN3YXAobV9vcGVu
RGF0YWJhc2VTZXQpOwotICAgICAgICBEYXRhYmFzZVNldDo6aXRlcmF0b3IgZW5kID0gb3BlblNl
dENvcHkuZW5kKCk7Ci0gICAgICAgIGZvciAoRGF0YWJhc2VTZXQ6Oml0ZXJhdG9yIGl0ID0gb3Bl
blNldENvcHkuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQorICAgIHsKKyAgICAgICAgV2Vha0Rh
dGFiYXNlTWFwOjpSZWZWZWN0b3Igb3BlbkRhdGFiYXNlczsKKyAgICAgICAgbV9vcGVuRGF0YWJh
c2VNYXAtPmRyYWluQWxsKG9wZW5EYXRhYmFzZXMpOworCisgICAgICAgIFdlYWtEYXRhYmFzZU1h
cDo6UmVmVmVjdG9yOjppdGVyYXRvciBvcGVuU2V0Q29weUVuZCA9IG9wZW5EYXRhYmFzZXMuZW5k
KCk7CisgICAgICAgIGZvciAoV2Vha0RhdGFiYXNlTWFwOjpSZWZWZWN0b3I6Oml0ZXJhdG9yIGl0
ID0gb3BlbkRhdGFiYXNlcy5iZWdpbigpOyBpdCAhPSBvcGVuU2V0Q29weUVuZDsgKytpdCkKICAg
ICAgICAgICAgICgqaXQpLT5jbG9zZSgpOwogICAgIH0KIApAQCAtMTQwLDE2ICsyMTEsMzUgQEAg
dm9pZCBEYXRhYmFzZVRocmVhZDo6cmVjb3JkRGF0YWJhc2VPcGVuKERhdGFiYXNlKiBkYXRhYmFz
ZSkKIHsKICAgICBBU1NFUlQoY3VycmVudFRocmVhZCgpID09IG1fdGhyZWFkSUQpOwogICAgIEFT
U0VSVChkYXRhYmFzZSk7Ci0gICAgQVNTRVJUKCFtX29wZW5EYXRhYmFzZVNldC5jb250YWlucyhk
YXRhYmFzZSkpOwotICAgIG1fb3BlbkRhdGFiYXNlU2V0LmFkZChkYXRhYmFzZSk7CisgICAgbV9v
cGVuRGF0YWJhc2VNYXAtPmFkZFRvV2Vha01hcChkYXRhYmFzZSk7CisKKyAgICAvLyBOZWVkIHRv
IHJlZigpIGFzIHdlJ3JlIHBhc3NpbmcgdGhyb3VnaCB2b2lkKi4gVGhlIGRlcmVmKCkgaGFwcGVu
cyBpbiBkYXRhYmFzZURlbGV0aW9uR3VhcmQuCisgICAgbV9vcGVuRGF0YWJhc2VNYXAtPnJlZigp
OworICAgIGRhdGFiYXNlLT5zZXREZWxldGlvbkd1YXJkKGRhdGFiYXNlRGVsZXRpb25HdWFyZCwg
KHZvaWQqKW1fb3BlbkRhdGFiYXNlTWFwLmdldCgpKTsKIH0KIAogdm9pZCBEYXRhYmFzZVRocmVh
ZDo6cmVjb3JkRGF0YWJhc2VDbG9zZWQoRGF0YWJhc2UqIGRhdGFiYXNlKQogewogICAgIEFTU0VS
VChjdXJyZW50VGhyZWFkKCkgPT0gbV90aHJlYWRJRCk7CiAgICAgQVNTRVJUKGRhdGFiYXNlKTsK
LSAgICBBU1NFUlQobV9xdWV1ZS5raWxsZWQoKSB8fCBtX29wZW5EYXRhYmFzZVNldC5jb250YWlu
cyhkYXRhYmFzZSkpOwotICAgIG1fb3BlbkRhdGFiYXNlU2V0LnJlbW92ZShkYXRhYmFzZSk7Cisg
ICAgbV9vcGVuRGF0YWJhc2VNYXAtPnJlbW92ZUZyb21NYXAoZGF0YWJhc2UpOworfQorCit2b2lk
IERhdGFiYXNlVGhyZWFkOjpkYXRhYmFzZURlbGV0aW9uR3VhcmQoUGFzc1JlZlB0cjxEYXRhYmFz
ZT4gZGF0YWJhc2VSZWYsIHZvaWQqIHBhcmFtZXRlcnMpCit7CisgICAgUmVmUHRyPERhdGFiYXNl
PiBkYXRhYmFzZSA9IGRhdGFiYXNlUmVmOworCisgICAgV2Vha0RhdGFiYXNlTWFwKiBtYXAgPSBz
dGF0aWNfY2FzdDxXZWFrRGF0YWJhc2VNYXAqPihwYXJhbWV0ZXJzKTsKKyAgICBib29sIHRyYW5z
ZmVycmVkID0gbWFwLT50cmFuc2ZlclRvU3Ryb25nTWFwKGRhdGFiYXNlLmdldCgpKTsKKyAgICAv
LyBNdXN0IGNhbGwgdGhlIGRlcmVmKCkgaGVyZSwgc2VlIHJlY29yZERhdGFiYXNlT3Blbi4KKyAg
ICBtYXAtPmRlcmVmKCk7CisKKyAgICAvLyBUaGUgZGF0YWJhc2UgaGFzIGFscmVhZHkgYmVlbiBj
bG9zZWQgaW4gZGF0YWJhc2VUaHJlYWQoKQorICAgIGlmICghdHJhbnNmZXJyZWQpCisgICAgICAg
IHJldHVybjsKKworICAgIC8vIFRoZSBkYXRhYmFzZSByZWYgaGVyZSBpcyBndWFyZGVkIGJ5IHRo
ZSB0cmFuc2ZlclRvU3Ryb25nTWFwIGNhbGwgYWJvdmUuCisgICAgZGF0YWJhc2UtPnBvc3RDbG9z
ZUltbWVkaWF0ZWx5KCk7CiB9CiAKIHZvaWQgRGF0YWJhc2VUaHJlYWQ6OnNjaGVkdWxlVGFzayhQ
YXNzT3duUHRyPERhdGFiYXNlVGFzaz4gdGFzaykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VUaHJlYWQuaCBiL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VUaHJlYWQuaAppbmRleCBmYTRmZDA4Li4zMjMxYzRl
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNl
VGhyZWFkLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFz
ZVRocmVhZC5oCkBAIC00MywxMSArNDMsMTMgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xh
c3MgRGF0YWJhc2U7CitjbGFzcyBBYnN0cmFjdERhdGFiYXNlOwogY2xhc3MgRGF0YWJhc2VUYXNr
OwogY2xhc3MgRGF0YWJhc2VUYXNrU3luY2hyb25pemVyOwogY2xhc3MgRG9jdW1lbnQ7CiBjbGFz
cyBTUUxUcmFuc2FjdGlvbkNsaWVudDsKIGNsYXNzIFNRTFRyYW5zYWN0aW9uQ29vcmRpbmF0b3I7
CitjbGFzcyBXZWFrRGF0YWJhc2VNYXA7CiAKIGNsYXNzIERhdGFiYXNlVGhyZWFkIDogcHVibGlj
IFRocmVhZFNhZmVSZWZDb3VudGVkPERhdGFiYXNlVGhyZWFkPiB7CiBwdWJsaWM6CkBAIC03Myw2
ICs3NSw3IEBAIHByaXZhdGU6CiAgICAgRGF0YWJhc2VUaHJlYWQoKTsKIAogICAgIHN0YXRpYyB2
b2lkIGRhdGFiYXNlVGhyZWFkU3RhcnQodm9pZCopOworICAgIHN0YXRpYyB2b2lkIGRhdGFiYXNl
RGVsZXRpb25HdWFyZChQYXNzUmVmUHRyPERhdGFiYXNlPiwgdm9pZCopOwogICAgIHZvaWQgZGF0
YWJhc2VUaHJlYWQoKTsKIAogICAgIE11dGV4IG1fdGhyZWFkQ3JlYXRpb25NdXRleDsKQEAgLTgy
LDggKzg1LDcgQEAgcHJpdmF0ZToKICAgICBNZXNzYWdlUXVldWU8RGF0YWJhc2VUYXNrPiBtX3F1
ZXVlOwogCiAgICAgLy8gVGhpcyBzZXQga2VlcHMgdHJhY2sgb2YgdGhlIG9wZW4gZGF0YWJhc2Vz
IHRoYXQgaGF2ZSBiZWVuIHVzZWQgb24gdGhpcyB0aHJlYWQuCi0gICAgdHlwZWRlZiBIYXNoU2V0
PFJlZlB0cjxEYXRhYmFzZT4gPiBEYXRhYmFzZVNldDsKLSAgICBEYXRhYmFzZVNldCBtX29wZW5E
YXRhYmFzZVNldDsKKyAgICBSZWZQdHI8V2Vha0RhdGFiYXNlTWFwPiBtX29wZW5EYXRhYmFzZU1h
cDsKIAogICAgIE93blB0cjxTUUxUcmFuc2FjdGlvbkNsaWVudD4gbV90cmFuc2FjdGlvbkNsaWVu
dDsKICAgICBPd25QdHI8U1FMVHJhbnNhY3Rpb25Db29yZGluYXRvcj4gbV90cmFuc2FjdGlvbkNv
b3JkaW5hdG9yOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>160112</attachid>
            <date>2012-08-23 01:25:38 -0700</date>
            <delta_ts>2012-10-17 01:37:05 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-68303-20120823102534.patch</filename>
            <type>text/plain</type>
            <size>15601</size>
            <attacher name="Dan Carney">dcarney</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTI2NDAzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNzYxODkwYTJmNmEyODc3
ZTQzZmQ1ZDllMzkzMzdlNGNkMzQzNWJmNS4uNDM0ZGVjODIwMDcxOGI3OTQ5MzU5ODIzMjA5ZWJl
NzZjYWNmZmQ5MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ3IEBACisyMDEyLTA4LTIzICBEYW4g
Q2FybmV5ICA8ZGNhcm5leUBnb29nbGUuY29tPgorCisgICAgICAgIE1lbW9yeSBsZWFrIHVzaW5n
IHdlYiBTUUwgREIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTY4MzAzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgU3RvcmUgRGF0YWJhc2UgcmVmZXJlbmNlcyBpbiBhIHdlYWsgbWFwIGluIERhdGFiYXNlVGhy
ZWFkCisgICAgICAgIHNvIHRoYXQgdGhleSBjYW4gYmUgY2xvc2VkIHdoZW4gamF2YXNjcmlwdCBs
b3NlcyByZWZlcmVuY2UgdG8gdGhlbS4KKyAgICAgICAgVGhlIGN1cnJlbnQgaW1wbGVtZW50YXRp
b24ga2VlcHMgYWxsIGRhdGFiYXNlcyBvcGVuIHVudGlsIGEgbmV3CisgICAgICAgIERvY3VtZW50
IGNvbW1pdHRlZCB0byB0aGUgRnJhbWUsIGV2ZW4gaWYgdGhlIHJlZmVyZW5jZSBpcyB0aGUgbGFz
dAorICAgICAgICBvbmUuICAKKworICAgICAgICBObyBuZXcgdGVzdHMuCisKKyAgICAgICAgKiBN
b2R1bGVzL3dlYmRhdGFiYXNlL0Fic3RyYWN0RGF0YWJhc2UuaDoKKyAgICAgICAgKFdlYkNvcmU6
OkFic3RyYWN0RGF0YWJhc2U6OmRlcmVmKTogT3ZlcnJpZGVzIHRoZSBub3JtYWwgZGVyZWYgdG8g
YWRkIHRoZSBvcHRpb24gdG8gZG8gc29tZXRoaW5nIGJlZm9yZSBkZWxldGlvbi4KKyAgICAgICAg
KEFic3RyYWN0RGF0YWJhc2UpOgorICAgICAgICAoV2ViQ29yZTo6QWJzdHJhY3REYXRhYmFzZTo6
aXNLZXB0QWxpdmUpOiBDYWxsZWQgYmVmb3JlIGRlbGV0aW9uLiBSZXR1cm5zIHRydWUgaWYgdGhl
IG9iamVjdCB3YXMgcmVmKCknZCB1cC4KKyAgICAgICAgKiBNb2R1bGVzL3dlYmRhdGFiYXNlL0Rh
dGFiYXNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmdldE5leHREYXRhYmFzZUlkKTogQXRvbWlj
IGRhdGFiYXNlIGl0IGNvdW50ZXIuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNv
cmU6OkRhdGFiYXNlOjpEYXRhYmFzZSk6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZTo6c2V0
RGVsZXRpb25HdWFyZCk6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZTo6aXNLZXB0QWxpdmUp
OiBDYWxsIHRoZSBkZWxldGlvbiBndWFyZCBpZiBpdCdzIGJlZW4gc2V0LiBQcmV2ZW50cyBpbW1l
ZGlhdGUgb2JqZWN0IGRlbGV0aW9uLgorICAgICAgICAoQ2xvc2VJbW1lZGlhdGVseVRhc2spOgor
ICAgICAgICAoV2ViQ29yZTo6Q2xvc2VJbW1lZGlhdGVseVRhc2s6OmNyZWF0ZSk6CisgICAgICAg
IChXZWJDb3JlOjpDbG9zZUltbWVkaWF0ZWx5VGFzazo6cGVyZm9ybVRhc2spOgorICAgICAgICAo
V2ViQ29yZTo6Q2xvc2VJbW1lZGlhdGVseVRhc2s6OkNsb3NlSW1tZWRpYXRlbHlUYXNrKToKKyAg
ICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlOjpwb3N0Q2xvc2VJbW1lZGlhdGVseSk6IExpa2UgY2xv
c2VJbW1lZGlhdGVseSwgYnV0IHZhbGlkIGFjcm9zcyB0aHJlYWRzLgorICAgICAgICAqIE1vZHVs
ZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2UuaDoKKyAgICAgICAgKERhdGFiYXNlKToKKyAgICAgICAg
KFdlYkNvcmU6OkRhdGFiYXNlOjppZCk6CisgICAgICAgICogTW9kdWxlcy93ZWJkYXRhYmFzZS9E
YXRhYmFzZVRocmVhZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZVRocmVhZDo6RGF0
YWJhc2VUaHJlYWQpOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VUaHJlYWQ6OmRhdGFiYXNl
VGhyZWFkKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlVGhyZWFkOjpyZWNvcmREYXRhYmFz
ZU9wZW4pOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VUaHJlYWQ6OnJlY29yZERhdGFiYXNl
Q2xvc2VkKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VU
aHJlYWQ6OmRhdGFiYXNlRGVsZXRpb25HdWFyZCk6CisgICAgICAgICogTW9kdWxlcy93ZWJkYXRh
YmFzZS9EYXRhYmFzZVRocmVhZC5oOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChEYXRh
YmFzZVRocmVhZCk6CisKIDIwMTItMDgtMjMgIEt3YW5nWW9uZyBDaG9pICA8a3kwLmNob2lAc2Ft
c3VuZy5jb20+CiAKICAgICAgICAgW0VGTF0gVXNlIHZlcnRpY2FsIHNsaWRlciB0aGVtZSB3aGVu
IHRoZSBzbGlkZXIgaXMgdmVydGljYWwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2ViZGF0YWJhc2UvQWJzdHJhY3REYXRhYmFzZS5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJkYXRhYmFzZS9BYnN0cmFjdERhdGFiYXNlLmgKaW5kZXggMTJiODk4NWQxMWZkZmU1ZjJk
YzZkY2JkYTcyNWNjMTQ3YWU2YWYyYy4uNDdjYzRmYTYxZTJiMmVkM2MwNTM0OTA5MjBjNTRhODM2
YzRiMWNlZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9B
YnN0cmFjdERhdGFiYXNlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFz
ZS9BYnN0cmFjdERhdGFiYXNlLmgKQEAgLTQ4LDcgKzQ4LDcgQEAgY2xhc3MgU2VjdXJpdHlPcmln
aW47CiAKIHR5cGVkZWYgaW50IEV4Y2VwdGlvbkNvZGU7CiAKLWNsYXNzIEFic3RyYWN0RGF0YWJh
c2UgOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8QWJzdHJhY3REYXRhYmFzZT4geworY2xh
c3MgQWJzdHJhY3REYXRhYmFzZSA6IHB1YmxpYyBXVEY6OlRocmVhZFNhZmVSZWZDb3VudGVkQmFz
ZSB7CiBwdWJsaWM6CiAgICAgc3RhdGljIGJvb2wgaXNBdmFpbGFibGUoKTsKICAgICBzdGF0aWMg
dm9pZCBzZXRJc0F2YWlsYWJsZShib29sIGF2YWlsYWJsZSk7CkBAIC04OSw2ICs4OSwxNCBAQCBw
dWJsaWM6CiAKICAgICBEYXRhYmFzZUNvbnRleHQqIGRhdGFiYXNlQ29udGV4dCgpIGNvbnN0IHsg
cmV0dXJuIG1fZGF0YWJhc2VDb250ZXh0OyB9CiAKKyAgICB2b2lkIGRlcmVmKCkKKyAgICB7Cisg
ICAgICAgIGlmICghZGVyZWZCYXNlKCkpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGlm
ICghaXNLZXB0QWxpdmUoKSkKKyAgICAgICAgICAgIGRlbGV0ZSB0aGlzOworICAgIH0KKwogcHJv
dGVjdGVkOgogICAgIGZyaWVuZCBjbGFzcyBDaGFuZ2VWZXJzaW9uV3JhcHBlcjsKICAgICBmcmll
bmQgY2xhc3MgU1FMU3RhdGVtZW50OwpAQCAtMTA3LDYgKzExNSw3IEBAIHByb3RlY3RlZDoKICAg
ICB2b2lkIGNsb3NlRGF0YWJhc2UoKTsKIAogICAgIHZpcnR1YWwgYm9vbCBwZXJmb3JtT3BlbkFu
ZFZlcmlmeShib29sIHNob3VsZFNldFZlcnNpb25Jbk5ld0RhdGFiYXNlLCBFeGNlcHRpb25Db2Rl
JiwgU3RyaW5nJiBlcnJvck1lc3NhZ2UpOworICAgIHZpcnR1YWwgYm9vbCBpc0tlcHRBbGl2ZSgp
IHsgcmV0dXJuIGZhbHNlOyB9CiAKICAgICBib29sIGdldFZlcnNpb25Gcm9tRGF0YWJhc2UoU3Ry
aW5nJiB2ZXJzaW9uLCBib29sIHNob3VsZENhY2hlVmVyc2lvbiA9IHRydWUpOwogICAgIGJvb2wg
c2V0VmVyc2lvbkluRGF0YWJhc2UoY29uc3QgU3RyaW5nJiB2ZXJzaW9uLCBib29sIHNob3VsZENh
Y2hlVmVyc2lvbiA9IHRydWUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93
ZWJkYXRhYmFzZS9EYXRhYmFzZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFi
YXNlL0RhdGFiYXNlLmNwcAppbmRleCBkMGMzYTdhMWU1YmQ3ODYyODhiNjQzMjlkMWNiYjA4Yzcx
YWMxOGVhLi44NGZlZTY1NmQyOTc5ODkyZGMzOTZmN2I2Y2RkYmNmMTJhY2I2NDNmIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlLmNwcApAQCAtNjYs
NiArNjYsMTIgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitzdGF0aWMgaW50IGdldE5leHRE
YXRhYmFzZUlkKCkKK3sKKyAgICBzdGF0aWMgaW50IGN1cnJlbnRJZDsKKyAgICByZXR1cm4gYXRv
bWljSW5jcmVtZW50KCZjdXJyZW50SWQpOworfQorCiBjbGFzcyBEYXRhYmFzZUNyZWF0aW9uQ2Fs
bGJhY2tUYXNrIDogcHVibGljIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OlRhc2sgewogcHVibGlj
OgogICAgIHN0YXRpYyBQYXNzT3duUHRyPERhdGFiYXNlQ3JlYXRpb25DYWxsYmFja1Rhc2s+IGNy
ZWF0ZShQYXNzUmVmUHRyPERhdGFiYXNlPiBkYXRhYmFzZSwgUGFzc1JlZlB0cjxEYXRhYmFzZUNh
bGxiYWNrPiBjcmVhdGlvbkNhbGxiYWNrKQpAQCAtMTI0LDkgKzEzMCwxMiBAQCBQYXNzUmVmUHRy
PERhdGFiYXNlPiBEYXRhYmFzZTo6b3BlbkRhdGFiYXNlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQq
IGNvbnRleHQsIGNvbgogCiBEYXRhYmFzZTo6RGF0YWJhc2UoU2NyaXB0RXhlY3V0aW9uQ29udGV4
dCogY29udGV4dCwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIGV4cGVjdGVkVmVy
c2lvbiwgY29uc3QgU3RyaW5nJiBkaXNwbGF5TmFtZSwgdW5zaWduZWQgbG9uZyBlc3RpbWF0ZWRT
aXplKQogICAgIDogQWJzdHJhY3REYXRhYmFzZShjb250ZXh0LCBuYW1lLCBleHBlY3RlZFZlcnNp
b24sIGRpc3BsYXlOYW1lLCBlc3RpbWF0ZWRTaXplLCBBc3luY0RhdGFiYXNlKQorICAgICwgbV9p
ZChnZXROZXh0RGF0YWJhc2VJZCgpKQogICAgICwgbV90cmFuc2FjdGlvbkluUHJvZ3Jlc3MoZmFs
c2UpCiAgICAgLCBtX2lzVHJhbnNhY3Rpb25RdWV1ZUVuYWJsZWQodHJ1ZSkKICAgICAsIG1fZGVs
ZXRlZChmYWxzZSkKKyAgICAsIG1fZGVsZXRpb25HdWFyZCgwKQorICAgICwgbV9kZWxldGlvbkd1
YXJkUGFyYW1ldGVycygwKQogewogICAgIG1fZGF0YWJhc2VUaHJlYWRTZWN1cml0eU9yaWdpbiA9
IG1fY29udGV4dFRocmVhZFNlY3VyaXR5T3JpZ2luLT5pc29sYXRlZENvcHkoKTsKIApAQCAtMTcw
LDYgKzE3OSwzNiBAQCBEYXRhYmFzZTo6fkRhdGFiYXNlKCkKICAgICB9CiB9CiAKK3ZvaWQgRGF0
YWJhc2U6OnNldERlbGV0aW9uR3VhcmQoRGVsZXRpb25HdWFyZCBkZWxldGlvbkd1YXJkLCB2b2lk
KiBwYXJhbWV0ZXJzKQoreworICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX2RlbGV0aW9uR3VhcmRN
dXRleCk7CisgICAgQVNTRVJUKCFtX2RlbGV0aW9uR3VhcmQpOworICAgIG1fZGVsZXRpb25HdWFy
ZCA9IGRlbGV0aW9uR3VhcmQ7CisgICAgbV9kZWxldGlvbkd1YXJkUGFyYW1ldGVycyA9IHBhcmFt
ZXRlcnM7Cit9CisKK2Jvb2wgRGF0YWJhc2U6OmlzS2VwdEFsaXZlKCkKK3sKKworICAgIERlbGV0
aW9uR3VhcmQgZ3VhcmQ7CisgICAgdm9pZCogcGFyYW1ldGVyczsKKyAgICB7CisgICAgICAgIE11
dGV4TG9ja2VyIGxvY2tlcihtX2RlbGV0aW9uR3VhcmRNdXRleCk7CisgICAgICAgIGlmICghbV9k
ZWxldGlvbkd1YXJkKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIC8vIFN3
YXAgb3V0IGRlbGV0aW9uIGd1YXJkIHNvIHRoZSBuZXh0IGRlcmVmKCkgZXhlY3V0ZXMgdGhlIGRl
bGV0ZS4KKyAgICAgICAgZ3VhcmQgPSBtX2RlbGV0aW9uR3VhcmQ7CisgICAgICAgIHBhcmFtZXRl
cnMgPSBtX2RlbGV0aW9uR3VhcmRQYXJhbWV0ZXJzOworICAgICAgICBtX2RlbGV0aW9uR3VhcmQg
PSAwOworICAgICAgICBtX2RlbGV0aW9uR3VhcmRQYXJhbWV0ZXJzID0gMDsKKyAgICB9CisKKyAg
ICAvLyBQYXNzIGxhc3QgcmVmZXJlbmNlIHRvIHRoZSBkZWxldGlvbiBndWFyZC4KKyAgICBndWFy
ZCh0aGlzLCBwYXJhbWV0ZXJzKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwogU3RyaW5nIERhdGFi
YXNlOjp2ZXJzaW9uKCkgY29uc3QKIHsKICAgICBpZiAobV9kZWxldGVkKQpAQCAtMjMxLDYgKzI3
MCwyOSBAQCB2b2lkIERhdGFiYXNlOjpjbG9zZSgpCiAgICAgRGF0YWJhc2VUcmFja2VyOjp0cmFj
a2VyKCkucmVtb3ZlT3BlbkRhdGFiYXNlKHRoaXMpOwogfQogCitjbGFzcyBDbG9zZUltbWVkaWF0
ZWx5VGFzayA6IHB1YmxpYyBTY3JpcHRFeGVjdXRpb25Db250ZXh0OjpUYXNrIHsKK3B1YmxpYzoK
KyAgICBzdGF0aWMgUGFzc093blB0cjxDbG9zZUltbWVkaWF0ZWx5VGFzaz4gY3JlYXRlKFBhc3NS
ZWZQdHI8RGF0YWJhc2U+IGRhdGFiYXNlKSB7IHJldHVybiBhZG9wdFB0cihuZXcgQ2xvc2VJbW1l
ZGlhdGVseVRhc2soZGF0YWJhc2UpKTsgfQorCisgICAgdmlydHVhbCB2b2lkIHBlcmZvcm1UYXNr
KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqKQorICAgIHsKKyAgICAgICAgbV9kYXRhYmFzZS0+Y2xv
c2VJbW1lZGlhdGVseSgpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBDbG9zZUltbWVkaWF0ZWx5
VGFzayhQYXNzUmVmUHRyPERhdGFiYXNlPiBkYXRhYmFzZSk6IG1fZGF0YWJhc2UoZGF0YWJhc2Up
IHsgfQorCisgICAgUmVmUHRyPERhdGFiYXNlPiBtX2RhdGFiYXNlOworfTsKKwordm9pZCBEYXRh
YmFzZTo6cG9zdENsb3NlSW1tZWRpYXRlbHkoKQoreworICAgIGlmIChtX3NjcmlwdEV4ZWN1dGlv
bkNvbnRleHQtPmlzQ29udGV4dFRocmVhZCgpKQorICAgICAgICBjbG9zZUltbWVkaWF0ZWx5KCk7
CisgICAgZWxzZQorICAgICAgICBtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQtPnBvc3RUYXNrKENs
b3NlSW1tZWRpYXRlbHlUYXNrOjpjcmVhdGUodGhpcykpOworfQorCiB2b2lkIERhdGFiYXNlOjpj
bG9zZUltbWVkaWF0ZWx5KCkKIHsKICAgICBBU1NFUlQobV9zY3JpcHRFeGVjdXRpb25Db250ZXh0
LT5pc0NvbnRleHRUaHJlYWQoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmRhdGFiYXNlL0RhdGFiYXNlLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFi
YXNlL0RhdGFiYXNlLmgKaW5kZXggMTJiNDMwZTMzYjk0OTFjMjljMzM2ZmI0MTFhYTc1ZDQ1MDNk
NDJhYy4uNjhiNjgyODI4Mzc0MDM3ODI1YzlhNTk3MWUwYjZlMmMwNjQxODlhYiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZS5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2UuaApAQCAtNzUsOSArNzUs
MTEgQEAgcHVibGljOgogCiAgICAgdm9pZCBjbG9zZSgpOwogICAgIHZpcnR1YWwgdm9pZCBjbG9z
ZUltbWVkaWF0ZWx5KCk7CisgICAgdm9pZCBwb3N0Q2xvc2VJbW1lZGlhdGVseSgpOwogCiAgICAg
dW5zaWduZWQgbG9uZyBsb25nIGRhdGFiYXNlU2l6ZSgpIGNvbnN0OwogICAgIHVuc2lnbmVkIGxv
bmcgbG9uZyBtYXhpbXVtU2l6ZSgpIGNvbnN0OworICAgIGludCBpZCgpIGNvbnN0IHsgcmV0dXJu
IG1faWQ7IH0KIAogICAgIHZvaWQgc2NoZWR1bGVUcmFuc2FjdGlvbkNhbGxiYWNrKFNRTFRyYW5z
YWN0aW9uKik7CiAgICAgdm9pZCBzY2hlZHVsZVRyYW5zYWN0aW9uU3RlcChTUUxUcmFuc2FjdGlv
biosIGJvb2wgaW1tZWRpYXRlbHkgPSBmYWxzZSk7CkBAIC04NSw2ICs4Nyw5IEBAIHB1YmxpYzoK
ICAgICBTUUxUcmFuc2FjdGlvbkNsaWVudCogdHJhbnNhY3Rpb25DbGllbnQoKSBjb25zdDsKICAg
ICBTUUxUcmFuc2FjdGlvbkNvb3JkaW5hdG9yKiB0cmFuc2FjdGlvbkNvb3JkaW5hdG9yKCkgY29u
c3Q7CiAKKyAgICB0eXBlZGVmIHZvaWQgKCpEZWxldGlvbkd1YXJkKShQYXNzUmVmUHRyPERhdGFi
YXNlPiwgdm9pZCogcGFyYW1ldGVycyk7CisgICAgdm9pZCBzZXREZWxldGlvbkd1YXJkKERlbGV0
aW9uR3VhcmQsIHZvaWQqIHBhcmFtZXRlcnMpOworCiBwcml2YXRlOgogICAgIGNsYXNzIERhdGFi
YXNlT3BlblRhc2s7CiAgICAgY2xhc3MgRGF0YWJhc2VDbG9zZVRhc2s7CkBAIC05OCw2ICsxMDMs
NyBAQCBwcml2YXRlOgogCiAgICAgYm9vbCBvcGVuQW5kVmVyaWZ5VmVyc2lvbihib29sIHNldFZl
cnNpb25Jbk5ld0RhdGFiYXNlLCBFeGNlcHRpb25Db2RlJiwgU3RyaW5nJiBlcnJvck1lc3NhZ2Up
OwogICAgIHZpcnR1YWwgYm9vbCBwZXJmb3JtT3BlbkFuZFZlcmlmeShib29sIHNldFZlcnNpb25J
bk5ld0RhdGFiYXNlLCBFeGNlcHRpb25Db2RlJiwgU3RyaW5nJiBlcnJvck1lc3NhZ2UpOworICAg
IHZpcnR1YWwgYm9vbCBpc0tlcHRBbGl2ZSgpOwogCiAgICAgdm9pZCBpblByb2dyZXNzVHJhbnNh
Y3Rpb25Db21wbGV0ZWQoKTsKICAgICB2b2lkIHNjaGVkdWxlVHJhbnNhY3Rpb24oKTsKQEAgLTEw
Niw2ICsxMTIsOCBAQCBwcml2YXRlOgogCiAgICAgc3RhdGljIHZvaWQgZGVsaXZlclBlbmRpbmdD
YWxsYmFjayh2b2lkKik7CiAKKyAgICBjb25zdCBpbnQgbV9pZDsKKwogICAgIERlcXVlPFJlZlB0
cjxTUUxUcmFuc2FjdGlvbj4gPiBtX3RyYW5zYWN0aW9uUXVldWU7CiAgICAgTXV0ZXggbV90cmFu
c2FjdGlvbkluUHJvZ3Jlc3NNdXRleDsKICAgICBib29sIG1fdHJhbnNhY3Rpb25JblByb2dyZXNz
OwpAQCAtMTE0LDYgKzEyMiwxMCBAQCBwcml2YXRlOgogICAgIFJlZlB0cjxTZWN1cml0eU9yaWdp
bj4gbV9kYXRhYmFzZVRocmVhZFNlY3VyaXR5T3JpZ2luOwogCiAgICAgYm9vbCBtX2RlbGV0ZWQ7
CisKKyAgICBNdXRleCBtX2RlbGV0aW9uR3VhcmRNdXRleDsKKyAgICBEZWxldGlvbkd1YXJkIG1f
ZGVsZXRpb25HdWFyZDsKKyAgICB2b2lkKiBtX2RlbGV0aW9uR3VhcmRQYXJhbWV0ZXJzOwogfTsK
IAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZVRocmVhZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlVGhyZWFkLmNwcAppbmRleCBkNzcxYjFjYTFlYzRhYWE3
NGY5MzcyZGY1MDllNjJjODdiZmMyMjEwLi4yZDA3MDJlMzgzNjUzZWUzMWNkNDkwNWY2ZGJhY2Y0
MGUyNTBhN2M0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNl
L0RhdGFiYXNlVGhyZWFkLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFi
YXNlL0RhdGFiYXNlVGhyZWFkLmNwcApAQCAtMzMsNiArMzMsNyBAQAogCiAjaW5jbHVkZSAiQXV0
b2RyYWluZWRQb29sLmgiCiAjaW5jbHVkZSAiRGF0YWJhc2UuaCIKKyNpbmNsdWRlICJEYXRhYmFz
ZUNvbnRleHQuaCIKICNpbmNsdWRlICJEYXRhYmFzZVRhc2suaCIKICNpbmNsdWRlICJMb2dnaW5n
LmgiCiAjaW5jbHVkZSAiU1FMVHJhbnNhY3Rpb25DbGllbnQuaCIKQEAgLTQxLDggKzQyLDc4IEBA
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorY2xhc3MgV2Vha0RhdGFiYXNlTWFwOiBwdWJsaWMg
VGhyZWFkU2FmZVJlZkNvdW50ZWQ8V2Vha0RhdGFiYXNlTWFwPiB7CitwdWJsaWM6CisgICAgc3Rh
dGljIFBhc3NSZWZQdHI8V2Vha0RhdGFiYXNlTWFwPiBjcmVhdGUoKSB7IHJldHVybiBhZG9wdFJl
ZihuZXcgV2Vha0RhdGFiYXNlTWFwKTsgfQorCisgICAgdHlwZWRlZiBIYXNoTWFwPGludCwgRGF0
YWJhc2UqPiBXZWFrTWFwOworICAgIHR5cGVkZWYgSGFzaE1hcDxpbnQsIFJlZlB0cjxEYXRhYmFz
ZT4gPiBTdHJvbmdNYXA7CisgICAgdHlwZWRlZiBWZWN0b3I8UmVmUHRyPERhdGFiYXNlPiA+IFJl
ZlZlY3RvcjsKKworICAgIHZvaWQgYWRkVG9XZWFrTWFwKERhdGFiYXNlKiBkYXRhYmFzZSkKKyAg
ICB7CisgICAgICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX211dGV4KTsKKyAgICAgICAgQVNTRVJU
KCFtX3dlYWtNYXAuY29udGFpbnMoZGF0YWJhc2UtPmlkKCkpKTsKKyAgICAgICAgbV93ZWFrTWFw
LmFkZChkYXRhYmFzZS0+aWQoKSwgZGF0YWJhc2UpOworICAgICAgICBtX3N0cm9uZ01hcC5hZGQo
ZGF0YWJhc2UtPmlkKCksIDApOworICAgIH0KKworICAgIGJvb2wgdHJhbnNmZXJUb1N0cm9uZ01h
cChQYXNzUmVmUHRyPERhdGFiYXNlPiBkYXRhYmFzZSkKKyAgICB7CisgICAgICAgIE11dGV4TG9j
a2VyIGxvY2tlcihtX211dGV4KTsKKyAgICAgICAgU3Ryb25nTWFwOjppdGVyYXRvciBpdGVyYXRv
ciA9IG1fc3Ryb25nTWFwLmZpbmQoZGF0YWJhc2UtPmlkKCkpOworICAgICAgICAvLyBUaGUgcmVm
ZXJlbmNlIGhhcyBiZWVuIHdpcGVkLCBhbmQgdGhlIGRhdGFiYXNlIGhhcyBiZWVuIGNsb3NlZC4K
KyAgICAgICAgaWYgKGl0ZXJhdG9yID09IG1fc3Ryb25nTWFwLmVuZCgpKQorICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworCisgICAgICAgIGlmIChpdGVyYXRvci0+c2Vjb25kKSB7CisgICAgICAg
ICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgfQorCisgICAgICAgIEFTU0VSVChtX3dlYWtNYXAuZmluZChkYXRhYmFzZS0+aWQoKSkg
IT0gbV93ZWFrTWFwLmVuZCgpICYmIG1fd2Vha01hcC5maW5kKGRhdGFiYXNlLT5pZCgpKS0+c2Vj
b25kID09IGRhdGFiYXNlLmdldCgpKTsKKyAgICAgICAgaXRlcmF0b3ItPnNlY29uZCA9IGRhdGFi
YXNlOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICB2b2lkIGRyYWluQWxsKFJl
ZlZlY3RvciYgdmVjdG9yKQorICAgIHsKKyAgICAgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1fbXV0
ZXgpOworCisgICAgICAgIHZlY3Rvci5yZXNpemUobV9zdHJvbmdNYXAuc2l6ZSgpKTsKKworICAg
ICAgICBTdHJvbmdNYXA6Oml0ZXJhdG9yIGl0ID0gIG1fc3Ryb25nTWFwLmJlZ2luKCk7CisgICAg
ICAgIFN0cm9uZ01hcDo6aXRlcmF0b3IgZW5kID0gbV9zdHJvbmdNYXAuZW5kKCk7CisgICAgICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGl0ICE9IGVuZDsgKytpdCwgKytpKSB7CisgICAgICAgICAg
ICAvLyBPd25lcnNoaXAgaGFzIGFscmVhZHkgYmVlbiB0cmFuc2ZlcnJlZCBieSBkZWxldGlvbiBn
dWFyZC4KKyAgICAgICAgICAgIGlmIChpdC0+c2Vjb25kKQorICAgICAgICAgICAgICAgIHZlY3Rv
cltpXSA9IGl0LT5zZWNvbmQucmVsZWFzZSgpOworICAgICAgICAgICAgLy8gVGhlIGRlbGV0aW9u
IGd1YXJkIGhhcyBub3QgeWV0IHRyYW5zZmVycmVkIG93bmVyc2hpcCwgc28gaXQgbXVzdCBiZSBh
bGl2ZS4KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB2ZWN0b3JbaV0gPSBtX3dl
YWtNYXAuZmluZChpdC0+Zmlyc3QpLT5zZWNvbmQ7CisgICAgICAgIH0KKyAgICAgICAgbV9zdHJv
bmdNYXAuY2xlYXIoKTsKKyAgICAgICAgbV93ZWFrTWFwLmNsZWFyKCk7CisgICAgfQorCisgICAg
dm9pZCByZW1vdmVGcm9tTWFwKERhdGFiYXNlKiBkYXRhYmFzZSkKKyAgICB7CisgICAgICAgIE11
dGV4TG9ja2VyIGxvY2tlcihtX211dGV4KTsKKyAgICAgICAgbV93ZWFrTWFwLnJlbW92ZShkYXRh
YmFzZS0+aWQoKSk7CisgICAgICAgIG1fc3Ryb25nTWFwLnJlbW92ZShkYXRhYmFzZS0+aWQoKSk7
CisgICAgfQorCitwcml2YXRlOgorICAgIFdlYWtEYXRhYmFzZU1hcCgpIHsgfQorCisgICAgTXV0
ZXggbV9tdXRleDsKKyAgICBXZWFrTWFwIG1fd2Vha01hcDsKKyAgICBTdHJvbmdNYXAgbV9zdHJv
bmdNYXA7Cit9OworCiBEYXRhYmFzZVRocmVhZDo6RGF0YWJhc2VUaHJlYWQoKQogICAgIDogbV90
aHJlYWRJRCgwKQorICAgICwgbV9vcGVuRGF0YWJhc2VNYXAoV2Vha0RhdGFiYXNlTWFwOjpjcmVh
dGUoKSkKICAgICAsIG1fdHJhbnNhY3Rpb25DbGllbnQoYWRvcHRQdHIobmV3IFNRTFRyYW5zYWN0
aW9uQ2xpZW50KCkpKQogICAgICwgbV90cmFuc2FjdGlvbkNvb3JkaW5hdG9yKGFkb3B0UHRyKG5l
dyBTUUxUcmFuc2FjdGlvbkNvb3JkaW5hdG9yKCkpKQogICAgICwgbV9jbGVhbnVwU3luYygwKQpA
QCAtMTE1LDEyICsxODYsMTIgQEAgdm9pZCBEYXRhYmFzZVRocmVhZDo6ZGF0YWJhc2VUaHJlYWQo
KQogCiAgICAgLy8gQ2xvc2UgdGhlIGRhdGFiYXNlcyB0aGF0IHdlIHJhbiB0cmFuc2FjdGlvbnMg
b24uIFRoaXMgZW5zdXJlcyB0aGF0IGlmIGFueSB0cmFuc2FjdGlvbnMgYXJlIHN0aWxsIG9wZW4s
IHRoZXkgYXJlIHJvbGxlZCBiYWNrIGFuZCB3ZSBkb24ndCBsZWF2ZSB0aGUgZGF0YWJhc2UgaW4g
YW4KICAgICAvLyBpbmNvbnNpc3RlbnQgb3IgbG9ja2VkIHN0YXRlLgotICAgIGlmIChtX29wZW5E
YXRhYmFzZVNldC5zaXplKCkgPiAwKSB7Ci0gICAgICAgIC8vIEFzIHRoZSBjYWxsIHRvIGNsb3Nl
IHdpbGwgbW9kaWZ5IHRoZSBvcmlnaW5hbCBzZXQsIHdlIG11c3QgdGFrZSBhIGNvcHkgdG8gaXRl
cmF0ZSBvdmVyLgotICAgICAgICBEYXRhYmFzZVNldCBvcGVuU2V0Q29weTsKLSAgICAgICAgb3Bl
blNldENvcHkuc3dhcChtX29wZW5EYXRhYmFzZVNldCk7Ci0gICAgICAgIERhdGFiYXNlU2V0Ojpp
dGVyYXRvciBlbmQgPSBvcGVuU2V0Q29weS5lbmQoKTsKLSAgICAgICAgZm9yIChEYXRhYmFzZVNl
dDo6aXRlcmF0b3IgaXQgPSBvcGVuU2V0Q29weS5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCisg
ICAgeworICAgICAgICBXZWFrRGF0YWJhc2VNYXA6OlJlZlZlY3RvciBvcGVuRGF0YWJhc2VzOwor
ICAgICAgICBtX29wZW5EYXRhYmFzZU1hcC0+ZHJhaW5BbGwob3BlbkRhdGFiYXNlcyk7CisKKyAg
ICAgICAgV2Vha0RhdGFiYXNlTWFwOjpSZWZWZWN0b3I6Oml0ZXJhdG9yIG9wZW5TZXRDb3B5RW5k
ID0gb3BlbkRhdGFiYXNlcy5lbmQoKTsKKyAgICAgICAgZm9yIChXZWFrRGF0YWJhc2VNYXA6OlJl
ZlZlY3Rvcjo6aXRlcmF0b3IgaXQgPSBvcGVuRGF0YWJhc2VzLmJlZ2luKCk7IGl0ICE9IG9wZW5T
ZXRDb3B5RW5kOyArK2l0KQogICAgICAgICAgICAgKCppdCktPmNsb3NlKCk7CiAgICAgfQogCkBA
IC0xNDAsMTYgKzIxMSwzNSBAQCB2b2lkIERhdGFiYXNlVGhyZWFkOjpyZWNvcmREYXRhYmFzZU9w
ZW4oRGF0YWJhc2UqIGRhdGFiYXNlKQogewogICAgIEFTU0VSVChjdXJyZW50VGhyZWFkKCkgPT0g
bV90aHJlYWRJRCk7CiAgICAgQVNTRVJUKGRhdGFiYXNlKTsKLSAgICBBU1NFUlQoIW1fb3BlbkRh
dGFiYXNlU2V0LmNvbnRhaW5zKGRhdGFiYXNlKSk7Ci0gICAgbV9vcGVuRGF0YWJhc2VTZXQuYWRk
KGRhdGFiYXNlKTsKKyAgICBtX29wZW5EYXRhYmFzZU1hcC0+YWRkVG9XZWFrTWFwKGRhdGFiYXNl
KTsKKworICAgIC8vIE5lZWQgdG8gcmVmKCkgYXMgd2UncmUgcGFzc2luZyB0aHJvdWdoIHZvaWQq
LiBUaGUgZGVyZWYoKSBoYXBwZW5zIGluIGRhdGFiYXNlRGVsZXRpb25HdWFyZC4KKyAgICBtX29w
ZW5EYXRhYmFzZU1hcC0+cmVmKCk7CisgICAgZGF0YWJhc2UtPnNldERlbGV0aW9uR3VhcmQoZGF0
YWJhc2VEZWxldGlvbkd1YXJkLCAodm9pZCopbV9vcGVuRGF0YWJhc2VNYXAuZ2V0KCkpOwogfQog
CiB2b2lkIERhdGFiYXNlVGhyZWFkOjpyZWNvcmREYXRhYmFzZUNsb3NlZChEYXRhYmFzZSogZGF0
YWJhc2UpCiB7CiAgICAgQVNTRVJUKGN1cnJlbnRUaHJlYWQoKSA9PSBtX3RocmVhZElEKTsKICAg
ICBBU1NFUlQoZGF0YWJhc2UpOwotICAgIEFTU0VSVChtX3F1ZXVlLmtpbGxlZCgpIHx8IG1fb3Bl
bkRhdGFiYXNlU2V0LmNvbnRhaW5zKGRhdGFiYXNlKSk7Ci0gICAgbV9vcGVuRGF0YWJhc2VTZXQu
cmVtb3ZlKGRhdGFiYXNlKTsKKyAgICBtX29wZW5EYXRhYmFzZU1hcC0+cmVtb3ZlRnJvbU1hcChk
YXRhYmFzZSk7Cit9CisKK3ZvaWQgRGF0YWJhc2VUaHJlYWQ6OmRhdGFiYXNlRGVsZXRpb25HdWFy
ZChQYXNzUmVmUHRyPERhdGFiYXNlPiBkYXRhYmFzZVJlZiwgdm9pZCogcGFyYW1ldGVycykKK3sK
KyAgICBSZWZQdHI8RGF0YWJhc2U+IGRhdGFiYXNlID0gZGF0YWJhc2VSZWY7CisKKyAgICBXZWFr
RGF0YWJhc2VNYXAqIG1hcCA9IHN0YXRpY19jYXN0PFdlYWtEYXRhYmFzZU1hcCo+KHBhcmFtZXRl
cnMpOworICAgIGJvb2wgdHJhbnNmZXJyZWQgPSBtYXAtPnRyYW5zZmVyVG9TdHJvbmdNYXAoZGF0
YWJhc2UuZ2V0KCkpOworICAgIC8vIE11c3QgY2FsbCB0aGUgZGVyZWYoKSBoZXJlLCBzZWUgcmVj
b3JkRGF0YWJhc2VPcGVuLgorICAgIG1hcC0+ZGVyZWYoKTsKKworICAgIC8vIFRoZSBkYXRhYmFz
ZSBoYXMgYWxyZWFkeSBiZWVuIGNsb3NlZCBpbiBkYXRhYmFzZVRocmVhZCgpCisgICAgaWYgKCF0
cmFuc2ZlcnJlZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gVGhlIGRhdGFiYXNlIHJlZiBo
ZXJlIGlzIGd1YXJkZWQgYnkgdGhlIHRyYW5zZmVyVG9TdHJvbmdNYXAgY2FsbCBhYm92ZS4KKyAg
ICBkYXRhYmFzZS0+cG9zdENsb3NlSW1tZWRpYXRlbHkoKTsKIH0KIAogdm9pZCBEYXRhYmFzZVRo
cmVhZDo6c2NoZWR1bGVUYXNrKFBhc3NPd25QdHI8RGF0YWJhc2VUYXNrPiB0YXNrKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZVRocmVhZC5o
IGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZVRocmVhZC5oCmlu
ZGV4IGZhNGZkMDg4ZjliNTI1NmE2NjIzODM2NDk1MDg1NWY1OTQwNmY4NWQuLjMyMzFjNGUxMGZh
NDY3MDA4NDNjMmZlNWU4YmZiMDZhN2VhMjllMDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VUaHJlYWQuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlVGhyZWFkLmgKQEAgLTQzLDExICs0MywxMyBA
QAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBEYXRhYmFzZTsKK2NsYXNzIEFic3RyYWN0
RGF0YWJhc2U7CiBjbGFzcyBEYXRhYmFzZVRhc2s7CiBjbGFzcyBEYXRhYmFzZVRhc2tTeW5jaHJv
bml6ZXI7CiBjbGFzcyBEb2N1bWVudDsKIGNsYXNzIFNRTFRyYW5zYWN0aW9uQ2xpZW50OwogY2xh
c3MgU1FMVHJhbnNhY3Rpb25Db29yZGluYXRvcjsKK2NsYXNzIFdlYWtEYXRhYmFzZU1hcDsKIAog
Y2xhc3MgRGF0YWJhc2VUaHJlYWQgOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8RGF0YWJh
c2VUaHJlYWQ+IHsKIHB1YmxpYzoKQEAgLTczLDYgKzc1LDcgQEAgcHJpdmF0ZToKICAgICBEYXRh
YmFzZVRocmVhZCgpOwogCiAgICAgc3RhdGljIHZvaWQgZGF0YWJhc2VUaHJlYWRTdGFydCh2b2lk
Kik7CisgICAgc3RhdGljIHZvaWQgZGF0YWJhc2VEZWxldGlvbkd1YXJkKFBhc3NSZWZQdHI8RGF0
YWJhc2U+LCB2b2lkKik7CiAgICAgdm9pZCBkYXRhYmFzZVRocmVhZCgpOwogCiAgICAgTXV0ZXgg
bV90aHJlYWRDcmVhdGlvbk11dGV4OwpAQCAtODIsOCArODUsNyBAQCBwcml2YXRlOgogICAgIE1l
c3NhZ2VRdWV1ZTxEYXRhYmFzZVRhc2s+IG1fcXVldWU7CiAKICAgICAvLyBUaGlzIHNldCBrZWVw
cyB0cmFjayBvZiB0aGUgb3BlbiBkYXRhYmFzZXMgdGhhdCBoYXZlIGJlZW4gdXNlZCBvbiB0aGlz
IHRocmVhZC4KLSAgICB0eXBlZGVmIEhhc2hTZXQ8UmVmUHRyPERhdGFiYXNlPiA+IERhdGFiYXNl
U2V0OwotICAgIERhdGFiYXNlU2V0IG1fb3BlbkRhdGFiYXNlU2V0OworICAgIFJlZlB0cjxXZWFr
RGF0YWJhc2VNYXA+IG1fb3BlbkRhdGFiYXNlTWFwOwogCiAgICAgT3duUHRyPFNRTFRyYW5zYWN0
aW9uQ2xpZW50PiBtX3RyYW5zYWN0aW9uQ2xpZW50OwogICAgIE93blB0cjxTUUxUcmFuc2FjdGlv
bkNvb3JkaW5hdG9yPiBtX3RyYW5zYWN0aW9uQ29vcmRpbmF0b3I7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>169122</attachid>
            <date>2012-10-17 01:37:12 -0700</date>
            <delta_ts>2012-10-30 07:25:28 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-68303-20121017103558.patch</filename>
            <type>text/plain</type>
            <size>66137</size>
            <attacher name="Dan Carney">dcarney</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTMxNTYyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMTlhMGFhNTBiNjE1YzA2
NzRmMGI2MzhhOTE5ZjYyNDE4ZmQzMDdiYi4uNTBhMmJkNGQxZDk5ZGYwNDc2NGQ3NzUyOTQ3OTBh
YTA2MmUwNWU2YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEzMiBAQAorMjAxMi0xMC0xNyAgRGFu
IENhcm5leSAgPGRjYXJuZXlAZ29vZ2xlLmNvbT4KKworICAgICAgICBNZW1vcnkgbGVhayB1c2lu
ZyB3ZWIgU1FMIERCCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD02ODMwMworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIENsb3NlIERhdGFiYXNlIG9iamVjdHMgd2hlbiB0aGVyZSBpcyBubyByZWZlcmVuY2UgdG8g
dGhlbS4KKyAgICAgICAgU3RvcCBob2xkaW5nIGEgcmVmZXJlbmNlIHRvIHRoZSBvYmplY3QgaW4g
RGF0YWJhc2VUaHJlYWQuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLgorCisgICAgICAgICogTW9k
dWxlcy93ZWJkYXRhYmFzZS9BYnN0cmFjdERhdGFiYXNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmUp
OgorICAgICAgICAoV2ViQ29yZTo6QWJzdHJhY3REYXRhYmFzZTo6QWJzdHJhY3REYXRhYmFzZSk6
CisgICAgICAgIChXZWJDb3JlOjpBYnN0cmFjdERhdGFiYXNlOjp+QWJzdHJhY3REYXRhYmFzZSk6
CisgICAgICAgIChXZWJDb3JlOjpBYnN0cmFjdERhdGFiYXNlOjpDb3JlOjp+Q29yZSk6CisgICAg
ICAgIChXZWJDb3JlOjpBYnN0cmFjdERhdGFiYXNlOjpDb3JlOjpDb3JlKToKKyAgICAgICAgKFdl
YkNvcmU6OkFic3RyYWN0RGF0YWJhc2U6OkNvcmU6OnJlbGVhc2VTY3JpcHRFeGVjdXRpb25Db250
ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkFic3RyYWN0RGF0YWJhc2U6OkNvcmU6OmNsb3NlKToK
KyAgICAgICAgKFdlYkNvcmU6OkFic3RyYWN0RGF0YWJhc2U6OnBlcmZvcm1PcGVuQW5kVmVyaWZ5
KToKKyAgICAgICAgKFdlYkNvcmU6OkFic3RyYWN0RGF0YWJhc2U6OmdldFZlcnNpb25Gcm9tRGF0
YWJhc2UpOgorICAgICAgICAoV2ViQ29yZTo6QWJzdHJhY3REYXRhYmFzZTo6c2V0VmVyc2lvbklu
RGF0YWJhc2UpOgorICAgICAgICAoV2ViQ29yZTo6QWJzdHJhY3REYXRhYmFzZTo6Z2V0Q2FjaGVk
VmVyc2lvbik6CisgICAgICAgIChXZWJDb3JlOjpBYnN0cmFjdERhdGFiYXNlOjpzZXRDYWNoZWRW
ZXJzaW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkFic3RyYWN0RGF0YWJhc2U6OmdldEFjdHVhbFZl
cnNpb25Gb3JUcmFuc2FjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpBYnN0cmFjdERhdGFiYXNl
OjppbmNyZW1lbnRhbFZhY3V1bUlmTmVlZGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkFic3RyYWN0
RGF0YWJhc2U6OmludGVycnVwdCk6CisgICAgICAgIChXZWJDb3JlOjpBYnN0cmFjdERhdGFiYXNl
Ojppc0ludGVycnVwdGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkFic3RyYWN0RGF0YWJhc2U6Omxv
Z0Vycm9yTWVzc2FnZSk6CisgICAgICAgICogTW9kdWxlcy93ZWJkYXRhYmFzZS9BYnN0cmFjdERh
dGFiYXNlLmg6CisgICAgICAgIChDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkFic3RyYWN0RGF0
YWJhc2U6OkNvcmU6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpBYnN0cmFjdERhdGFiYXNl
OjpDb3JlOjpzZXRPcGVuZWQpOgorICAgICAgICAoV2ViQ29yZTo6QWJzdHJhY3REYXRhYmFzZTo6
Q29yZTo6b3BlbmVkKToKKyAgICAgICAgKFdlYkNvcmU6OkFic3RyYWN0RGF0YWJhc2U6OkNvcmU6
Omd1aWQpOgorICAgICAgICAoV2ViQ29yZTo6QWJzdHJhY3REYXRhYmFzZTo6Q29yZTo6c3FsaXRl
RGF0YWJhc2UpOgorICAgICAgICAoQWJzdHJhY3REYXRhYmFzZSk6CisgICAgICAgIChXZWJDb3Jl
OjpBYnN0cmFjdERhdGFiYXNlOjpvcGVuZWQpOgorICAgICAgICAoV2ViQ29yZTo6QWJzdHJhY3RE
YXRhYmFzZTo6c2NyaXB0RXhlY3V0aW9uQ29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpBYnN0
cmFjdERhdGFiYXNlOjpzcWxpdGVEYXRhYmFzZSk6CisgICAgICAgIChXZWJDb3JlOjpBYnN0cmFj
dERhdGFiYXNlOjpjb3JlKToKKyAgICAgICAgKiBNb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNl
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlOjpvcGVuRGF0YWJhc2UpOgorICAgICAg
ICAoV2ViQ29yZTo6RGF0YWJhc2U6OmRpc3Bvc2VPZlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQpOgor
ICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2U6On5EYXRhYmFzZSk6CisgICAgICAgIChXZWJDb3Jl
KToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlOjpjbG9zZSk6CisgICAgICAgIChXZWJDb3Jl
OjpEYXRhYmFzZUNsb3Nlcjo6RGF0YWJhc2VDbG9zZXIpOgorICAgICAgICAoV2ViQ29yZTo6RGF0
YWJhc2VDbG9zZXI6On5EYXRhYmFzZUNsb3Nlcik6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFz
ZUNsb3Nlcjo6Y2xvc2VJbkRlc3RydWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VD
bG9zZXI6OmNsb3NlKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlOjpjbG9zZUltbWVkaWF0
ZWx5KToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlOjpwZXJmb3JtT3BlbkFuZFZlcmlmeSk6
CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZTo6c2NoZWR1bGVUcmFuc2FjdGlvbkNhbGxiYWNr
KToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlOjpzZWN1cml0eU9yaWdpbik6CisgICAgICAg
ICogTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZS5oOgorICAgICAgICAoV2ViQ29yZSk6Cisg
ICAgICAgIChEYXRhYmFzZUNsb3Nlcik6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZUNsb3Nl
cjo6Y3JlYXRlKToKKyAgICAgICAgKERhdGFiYXNlKToKKyAgICAgICAgKiBNb2R1bGVzL3dlYmRh
dGFiYXNlL0RhdGFiYXNlU3luYy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZVN5bmM6
On5EYXRhYmFzZVN5bmMpOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VTeW5jOjpjaGFuZ2VW
ZXJzaW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlU3luYzo6cnVuVHJhbnNhY3Rpb24p
OgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VTeW5jOjpjbG9zZUltbWVkaWF0ZWx5KToKKyAg
ICAgICAgKiBNb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlVGFzay5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpEYXRhYmFzZVRhc2s6OkRhdGFiYXNlVGFzayk6CisgICAgICAgIChXZWJDb3JlOjpE
YXRhYmFzZVRhc2s6OnBlcmZvcm1UYXNrKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlOjpE
YXRhYmFzZU9wZW5UYXNrOjpEYXRhYmFzZU9wZW5UYXNrKToKKyAgICAgICAgKFdlYkNvcmU6OkRh
dGFiYXNlOjpEYXRhYmFzZUNsb3NlVGFzazo6RGF0YWJhc2VDbG9zZVRhc2spOgorICAgICAgICAo
V2ViQ29yZTo6RGF0YWJhc2U6OkRhdGFiYXNlVGFibGVOYW1lc1Rhc2s6OkRhdGFiYXNlVGFibGVO
YW1lc1Rhc2spOgorICAgICAgICAqIE1vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VUYXNrLmg6
CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZVRhc2s6OmRhdGFiYXNlKToKKyAgICAgICAgKERh
dGFiYXNlVGFzayk6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZTo6RGF0YWJhc2VPcGVuVGFz
azo6Y3JlYXRlKToKKyAgICAgICAgKERhdGFiYXNlOjpEYXRhYmFzZU9wZW5UYXNrKToKKyAgICAg
ICAgKFdlYkNvcmU6OkRhdGFiYXNlOjpEYXRhYmFzZUNsb3NlVGFzazo6Y3JlYXRlKToKKyAgICAg
ICAgKERhdGFiYXNlOjpEYXRhYmFzZUNsb3NlVGFzayk6CisgICAgICAgIChXZWJDb3JlOjpEYXRh
YmFzZTo6RGF0YWJhc2VUYWJsZU5hbWVzVGFzazo6Y3JlYXRlKToKKyAgICAgICAgKERhdGFiYXNl
OjpEYXRhYmFzZVRhYmxlTmFtZXNUYXNrKToKKyAgICAgICAgKiBNb2R1bGVzL3dlYmRhdGFiYXNl
L0RhdGFiYXNlVGhyZWFkLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlVGhyZWFkOjpy
ZWNvcmREYXRhYmFzZU9wZW4pOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VUaHJlYWQ6OnJl
Y29yZERhdGFiYXNlQ2xvc2VkKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoQ2xvc2VE
YXRhYmFzZUNsb3NlclRhc2spOgorICAgICAgICAoV2ViQ29yZTo6Q2xvc2VEYXRhYmFzZUNsb3Nl
clRhc2s6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpDbG9zZURhdGFiYXNlQ2xvc2VyVGFz
azo6ZG9QZXJmb3JtVGFzayk6CisgICAgICAgIChXZWJDb3JlOjpDbG9zZURhdGFiYXNlQ2xvc2Vy
VGFzazo6ZGVidWdUYXNrTmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpDbG9zZURhdGFiYXNlQ2xv
c2VyVGFzazo6Q2xvc2VEYXRhYmFzZUNsb3NlclRhc2spOgorICAgICAgICAoV2ViQ29yZTo6RGF0
YWJhc2VUaHJlYWQ6OnJlY29yZERhdGFiYXNlU2hvdWxkQmVDbG9zZWQpOgorICAgICAgICAqIE1v
ZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VUaHJlYWQuaDoKKyAgICAgICAgKFdlYkNvcmUpOgor
ICAgICAgICAoRGF0YWJhc2VUaHJlYWQpOgorICAgICAgICAqIE1vZHVsZXMvd2ViZGF0YWJhc2Uv
RGF0YWJhc2VUcmFja2VyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlVHJhY2tlckFz
eW5jaHJvbm91c1JlbW92ZXI6On5EYXRhYmFzZVRyYWNrZXJBc3luY2hyb25vdXNSZW1vdmVyKToK
KyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoRGF0YWJhc2VUcmFja2VyQXN5bmNocm9ub3Vz
UmVtb3ZlckltcGwpOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VUcmFja2VyQXN5bmNocm9u
b3VzUmVtb3ZlckltcGw6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZVRyYWNr
ZXJBc3luY2hyb25vdXNSZW1vdmVySW1wbDo6Y29tcGxldGVSZW1vdmFsKToKKyAgICAgICAgKFdl
YkNvcmU6OkRhdGFiYXNlVHJhY2tlckFzeW5jaHJvbm91c1JlbW92ZXJJbXBsOjpEYXRhYmFzZVRy
YWNrZXJBc3luY2hyb25vdXNSZW1vdmVySW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFz
ZVRyYWNrZXI6OnJlbW92ZU9wZW5EYXRhYmFzZSk6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFz
ZVRyYWNrZXI6OmNvbXBsZXRlRGF0YWJhc2VSZW1vdmFsKToKKyAgICAgICAgKiBNb2R1bGVzL3dl
YmRhdGFiYXNlL0RhdGFiYXNlVHJhY2tlci5oOgorICAgICAgICAoRGF0YWJhc2VUcmFja2VyQXN5
bmNocm9ub3VzUmVtb3Zlcik6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZVRyYWNrZXJBc3lu
Y2hyb25vdXNSZW1vdmVyOjpEYXRhYmFzZVRyYWNrZXJBc3luY2hyb25vdXNSZW1vdmVyKToKKyAg
ICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoRGF0YWJhc2VUcmFja2VyKToKKyAgICAgICAgKiBN
b2R1bGVzL3dlYmRhdGFiYXNlL2Nocm9taXVtL0RhdGFiYXNlT2JzZXJ2ZXIuaDoKKyAgICAgICAg
KFdlYkNvcmUpOgorICAgICAgICAoRGF0YWJhc2VPYnNlcnZlcik6CisgICAgICAgICogTW9kdWxl
cy93ZWJkYXRhYmFzZS9jaHJvbWl1bS9EYXRhYmFzZVRyYWNrZXJDaHJvbWl1bS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpOb3RpZnlEYXRhYmFzZU9ic2VydmVyT25DbG9zZVRhc2s6OmNyZWF0ZSk6
CisgICAgICAgIChXZWJDb3JlOjpOb3RpZnlEYXRhYmFzZU9ic2VydmVyT25DbG9zZVRhc2s6OnBl
cmZvcm1UYXNrKToKKyAgICAgICAgKFdlYkNvcmU6Ok5vdGlmeURhdGFiYXNlT2JzZXJ2ZXJPbkNs
b3NlVGFzazo6Tm90aWZ5RGF0YWJhc2VPYnNlcnZlck9uQ2xvc2VUYXNrKToKKyAgICAgICAgKE5v
dGlmeURhdGFiYXNlT2JzZXJ2ZXJPbkNsb3NlVGFzayk6CisgICAgICAgIChXZWJDb3JlOjpEYXRh
YmFzZVRyYWNrZXJBc3luY2hyb25vdXNSZW1vdmVyOjp+RGF0YWJhc2VUcmFja2VyQXN5bmNocm9u
b3VzUmVtb3Zlcik6CisgICAgICAgIChEYXRhYmFzZVRyYWNrZXJBc3luY2hyb25vdXNSZW1vdmVy
SW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZVRyYWNrZXJBc3luY2hyb25vdXNSZW1v
dmVySW1wbDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlVHJhY2tlckFzeW5j
aHJvbm91c1JlbW92ZXJJbXBsOjpjb21wbGV0ZVJlbW92YWwpOgorICAgICAgICAoV2ViQ29yZTo6
RGF0YWJhc2VUcmFja2VyQXN5bmNocm9ub3VzUmVtb3ZlckltcGw6OkRhdGFiYXNlVHJhY2tlckFz
eW5jaHJvbm91c1JlbW92ZXJJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlVHJhY2tl
cjo6cmVtb3ZlT3BlbkRhdGFiYXNlKToKKyAgICAgICAgKiBzdG9yYWdlL3dpbmNlL0RhdGFiYXNl
VGhyZWFkV2luQ0UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VUaHJlYWQ6OnJlY29y
ZERhdGFiYXNlT3Blbik6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZVRocmVhZDo6cmVjb3Jk
RGF0YWJhc2VDbG9zZWQpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpE
YXRhYmFzZVRocmVhZDo6cmVjb3JkRGF0YWJhc2VTaG91bGRCZUNsb3NlZCk6CisgICAgICAgICog
c3RvcmFnZS93aW5jZS9EYXRhYmFzZVRocmVhZFdpbkNFLmg6CisKIDIwMTItMTAtMTcgIEdhYm9y
IFJhcGNzYW55aSAgPHJnYWJvckB3ZWJraXQub3JnPgogCiAgICAgICAgIE5FT04gaW50cmluc2lj
cyBHYXVzcyBmaWx0ZXIgZG9lcyBub3Qgd29yayBwcm9wZXJseQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5n
ZUxvZwppbmRleCAzOTE2MzZmMDFjMzJiZjQyNTVhM2Q0YmE3YjhhMDM4Yjk1YzMxNTU4Li41NmNl
NDM3YzJlZjUwOGJhNTRmMGFlNTAyZjczNTM4YjJmZTY0MzA2IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0No
YW5nZUxvZwpAQCAtMSwzICsxLDIzIEBACisyMDEyLTEwLTE3ICBEYW4gQ2FybmV5ICA8ZGNhcm5l
eUBnb29nbGUuY29tPgorCisgICAgICAgIE1lbW9yeSBsZWFrIHVzaW5nIHdlYiBTUUwgREIKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY4MzAzCisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUmVmYWN0b3IgZGF0
YWJhc2VDbG9zZWQgdG8gbm90IHJlcXVpcmUgYSBEYXRhYmFzZSBwb2ludGVyLgorCisgICAgICAg
ICogcHVibGljL1dlYkRhdGFiYXNlLmg6CisgICAgICAgIChXZWJLaXQpOgorICAgICAgICAoV2Vi
RGF0YWJhc2UpOgorICAgICAgICAqIHNyYy9EYXRhYmFzZU9ic2VydmVyLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkRhdGFiYXNlT2JzZXJ2ZXI6OmRhdGFiYXNlQ2xvc2VkKToKKyAgICAgICAgKiBz
cmMvV2ViRGF0YWJhc2UuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJEYXRhYmFzZTo6bmFtZSk6
CisgICAgICAgIChXZWJLaXQ6OldlYkRhdGFiYXNlOjpzZWN1cml0eU9yaWdpbik6CisgICAgICAg
IChXZWJLaXQ6OldlYkRhdGFiYXNlOjpXZWJEYXRhYmFzZSk6CisgICAgICAgIChXZWJLaXQpOgor
CiAyMDEyLTEwLTE2ICBNT1JJVEEgSGFqaW1lICA8bW9ycml0YUBnb29nbGUuY29tPgogCiAgICAg
ICAgIFtTaGFkb3cgRE9NXVtWOF0gV2ViQ29yZTo6VjhET01XaW5kb3c6Omluc3RhbGxQZXJDb250
ZXh0UHJvcGVydGllcygpIGlzIHNsb3cgd2hlbiBzaGFkb3dET01FbmFibGVkIGZsYWcgaXMgb24u
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0Fic3RyYWN0
RGF0YWJhc2UuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9BYnN0cmFj
dERhdGFiYXNlLmNwcAppbmRleCA2MjkwN2UzZTFjZTZiMDkxNWMyYjAzNDc2MDllNTA3ZThjMDFj
ZWI2Li44NzEzMTRjYjI2NGM3YTNhMDdiZWMzYWEwMmUyYTkzNzlhYmUxNjkzIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0Fic3RyYWN0RGF0YWJhc2UuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvQWJzdHJhY3REYXRhYmFz
ZS5jcHAKQEAgLTE0MCw3ICsxNDAsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgdXBkYXRlR3VpZFZl
cnNpb25NYXAoaW50IGd1aWQsIFN0cmluZyBuZXdWZXJzaW9uKQogICAgIGd1aWRUb1ZlcnNpb25N
YXAoKS5zZXQoZ3VpZCwgbmV3VmVyc2lvbi5pc0VtcHR5KCkgPyBTdHJpbmcoKSA6IG5ld1ZlcnNp
b24uaXNvbGF0ZWRDb3B5KCkpOwogfQogCi10eXBlZGVmIEhhc2hNYXA8aW50LCBIYXNoU2V0PEFi
c3RyYWN0RGF0YWJhc2UqPio+IEd1aWREYXRhYmFzZU1hcDsKK3R5cGVkZWYgSGFzaE1hcDxpbnQs
IEhhc2hTZXQ8QWJzdHJhY3REYXRhYmFzZTo6Q29yZSo+Kj4gR3VpZERhdGFiYXNlTWFwOwogc3Rh
dGljIEd1aWREYXRhYmFzZU1hcCYgZ3VpZFRvRGF0YWJhc2VNYXAoKQogewogICAgIC8vIEVuc3Vy
ZSB0aGUgdGhlIG11dGV4IGlzIGxvY2tlZC4KQEAgLTE5NCw4ICsxOTQsNiBAQCBBYnN0cmFjdERh
dGFiYXNlOjpBYnN0cmFjdERhdGFiYXNlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQs
IGNvbnN0IFN0cmluZwogICAgICwgbV9leHBlY3RlZFZlcnNpb24oZXhwZWN0ZWRWZXJzaW9uLmlz
b2xhdGVkQ29weSgpKQogICAgICwgbV9kaXNwbGF5TmFtZShkaXNwbGF5TmFtZS5pc29sYXRlZENv
cHkoKSkKICAgICAsIG1fZXN0aW1hdGVkU2l6ZShlc3RpbWF0ZWRTaXplKQotICAgICwgbV9ndWlk
KDApCi0gICAgLCBtX29wZW5lZChmYWxzZSkKICAgICAsIG1fbmV3KGZhbHNlKQogICAgICwgbV9p
c1N5bmNEYXRhYmFzZShkYXRhYmFzZVR5cGUgPT0gU3luY0RhdGFiYXNlKQogewpAQCAtMjA3LDI4
ICsyMDUsNDEgQEAgQWJzdHJhY3REYXRhYmFzZTo6QWJzdHJhY3REYXRhYmFzZShTY3JpcHRFeGVj
dXRpb25Db250ZXh0KiBjb250ZXh0LCBjb25zdCBTdHJpbmcKICAgICBpZiAobV9uYW1lLmlzTnVs
bCgpKQogICAgICAgICBtX25hbWUgPSAiIjsKIAotICAgIHsKLSAgICAgICAgTXV0ZXhMb2NrZXIg
bG9ja2VyKGd1aWRNdXRleCgpKTsKLSAgICAgICAgbV9ndWlkID0gZ3VpZEZvck9yaWdpbkFuZE5h
bWUoc2VjdXJpdHlPcmlnaW4oKS0+dG9TdHJpbmcoKSwgbmFtZSk7Ci0gICAgICAgIEhhc2hTZXQ8
QWJzdHJhY3REYXRhYmFzZSo+KiBoYXNoU2V0ID0gZ3VpZFRvRGF0YWJhc2VNYXAoKS5nZXQobV9n
dWlkKTsKLSAgICAgICAgaWYgKCFoYXNoU2V0KSB7Ci0gICAgICAgICAgICBoYXNoU2V0ID0gbmV3
IEhhc2hTZXQ8QWJzdHJhY3REYXRhYmFzZSo+OwotICAgICAgICAgICAgZ3VpZFRvRGF0YWJhc2VN
YXAoKS5zZXQobV9ndWlkLCBoYXNoU2V0KTsKLSAgICAgICAgfQotCi0gICAgICAgIGhhc2hTZXQt
PmFkZCh0aGlzKTsKLSAgICB9Ci0KKyAgICBtX2NvcmUgPSBDb3JlOjpjcmVhdGUoY29udGV4dCwg
c2VjdXJpdHlPcmlnaW4oKSwgbmFtZSk7CiAgICAgbV9maWxlbmFtZSA9IERhdGFiYXNlVHJhY2tl
cjo6dHJhY2tlcigpLmZ1bGxQYXRoRm9yRGF0YWJhc2Uoc2VjdXJpdHlPcmlnaW4oKSwgbV9uYW1l
KTsKICAgICBEYXRhYmFzZVRyYWNrZXI6OnRyYWNrZXIoKS5hZGRPcGVuRGF0YWJhc2UodGhpcyk7
CiB9CiAKIEFic3RyYWN0RGF0YWJhc2U6On5BYnN0cmFjdERhdGFiYXNlKCkKIHsKK30KKworQWJz
dHJhY3REYXRhYmFzZTo6Q29yZTo6fkNvcmUoKQorewogICAgIEFTU0VSVCghbV9vcGVuZWQpOwor
ICAgIEFTU0VSVCghbV9zY3JpcHRFeGVjdXRpb25Db250ZXh0IHx8IG1fc2NyaXB0RXhlY3V0aW9u
Q29udGV4dC0+aXNDb250ZXh0VGhyZWFkKCkpOwogfQogCi12b2lkIEFic3RyYWN0RGF0YWJhc2U6
OmNsb3NlRGF0YWJhc2UoKQorQWJzdHJhY3REYXRhYmFzZTo6Q29yZTo6Q29yZShTY3JpcHRFeGVj
dXRpb25Db250ZXh0KiBjb250ZXh0LCBTZWN1cml0eU9yaWdpbiogb3JpZ2luLCBjb25zdCBTdHJp
bmcmIG5hbWUpCisgICAgOiBtX29wZW5lZChmYWxzZSkKKyAgICAsIG1fc2NyaXB0RXhlY3V0aW9u
Q29udGV4dChjb250ZXh0KQoreworICAgIE11dGV4TG9ja2VyIGxvY2tlcihndWlkTXV0ZXgoKSk7
CisgICAgbV9ndWlkID0gZ3VpZEZvck9yaWdpbkFuZE5hbWUob3JpZ2luLT50b1N0cmluZygpLCBu
YW1lKTsKKyAgICBIYXNoU2V0PENvcmUqPiogaGFzaFNldCA9IGd1aWRUb0RhdGFiYXNlTWFwKCku
Z2V0KG1fZ3VpZCk7CisgICAgaWYgKCFoYXNoU2V0KSB7CisgICAgICAgIGhhc2hTZXQgPSBuZXcg
SGFzaFNldDxDb3JlKj47CisgICAgICAgIGd1aWRUb0RhdGFiYXNlTWFwKCkuc2V0KG1fZ3VpZCwg
aGFzaFNldCk7CisgICAgfQorICAgIGhhc2hTZXQtPmFkZCh0aGlzKTsKK30KKworUGFzc1JlZlB0
cjxTY3JpcHRFeGVjdXRpb25Db250ZXh0PiBBYnN0cmFjdERhdGFiYXNlOjpDb3JlOjpyZWxlYXNl
U2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpCit7CisgICAgcmV0dXJuIG1fc2NyaXB0RXhlY3V0aW9u
Q29udGV4dC5yZWxlYXNlKCk7Cit9CisKK3ZvaWQgQWJzdHJhY3REYXRhYmFzZTo6Q29yZTo6Y2xv
c2UoKQogewogICAgIGlmICghbV9vcGVuZWQpCiAgICAgICAgIHJldHVybjsKQEAgLTIzOCw3ICsy
NDksNyBAQCB2b2lkIEFic3RyYWN0RGF0YWJhc2U6OmNsb3NlRGF0YWJhc2UoKQogICAgIHsKICAg
ICAgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKGd1aWRNdXRleCgpKTsKIAotICAgICAgICBIYXNoU2V0
PEFic3RyYWN0RGF0YWJhc2UqPiogaGFzaFNldCA9IGd1aWRUb0RhdGFiYXNlTWFwKCkuZ2V0KG1f
Z3VpZCk7CisgICAgICAgIEhhc2hTZXQ8Q29yZSo+KiBoYXNoU2V0ID0gZ3VpZFRvRGF0YWJhc2VN
YXAoKS5nZXQobV9ndWlkKTsKICAgICAgICAgQVNTRVJUKGhhc2hTZXQpOwogICAgICAgICBBU1NF
UlQoaGFzaFNldC0+Y29udGFpbnModGhpcykpOwogICAgICAgICBoYXNoU2V0LT5yZW1vdmUodGhp
cyk7CkBAIC0yNjQsMjYgKzI3NSwyOCBAQCBib29sIEFic3RyYWN0RGF0YWJhc2U6OnBlcmZvcm1P
cGVuQW5kVmVyaWZ5KGJvb2wgc2hvdWxkU2V0VmVyc2lvbkluTmV3RGF0YWJhc2UsCiAKICAgICBj
b25zdCBpbnQgbWF4U3FsaXRlQnVzeVdhaXRUaW1lID0gMzAwMDA7CiAKLSAgICBpZiAoIW1fc3Fs
aXRlRGF0YWJhc2Uub3BlbihtX2ZpbGVuYW1lLCB0cnVlKSkgewotICAgICAgICByZXBvcnRPcGVu
RGF0YWJhc2VSZXN1bHQoMSwgSU5WQUxJRF9TVEFURV9FUlIsIG1fc3FsaXRlRGF0YWJhc2UubGFz
dEVycm9yKCkpOwotICAgICAgICBlcnJvck1lc3NhZ2UgPSBmb3JtYXRFcnJvck1lc3NhZ2UoInVu
YWJsZSB0byBvcGVuIGRhdGFiYXNlIiwgbV9zcWxpdGVEYXRhYmFzZS5sYXN0RXJyb3IoKSwgbV9z
cWxpdGVEYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7CisgICAgU1FMaXRlRGF0YWJhc2UmIHNxbGl0
ZURhdGFiYXNlID0gbV9jb3JlLT5zcWxpdGVEYXRhYmFzZSgpOworCisgICAgaWYgKCFzcWxpdGVE
YXRhYmFzZS5vcGVuKG1fZmlsZW5hbWUsIHRydWUpKSB7CisgICAgICAgIHJlcG9ydE9wZW5EYXRh
YmFzZVJlc3VsdCgxLCBJTlZBTElEX1NUQVRFX0VSUiwgc3FsaXRlRGF0YWJhc2UubGFzdEVycm9y
KCkpOworICAgICAgICBlcnJvck1lc3NhZ2UgPSBmb3JtYXRFcnJvck1lc3NhZ2UoInVuYWJsZSB0
byBvcGVuIGRhdGFiYXNlIiwgc3FsaXRlRGF0YWJhc2UubGFzdEVycm9yKCksIHNxbGl0ZURhdGFi
YXNlLmxhc3RFcnJvck1zZygpKTsKICAgICAgICAgZWMgPSBJTlZBTElEX1NUQVRFX0VSUjsKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KLSAgICBpZiAoIW1fc3FsaXRlRGF0YWJhc2UudHVy
bk9uSW5jcmVtZW50YWxBdXRvVmFjdXVtKCkpCi0gICAgICAgIExPR19FUlJPUigiVW5hYmxlIHRv
IHR1cm4gb24gaW5jcmVtZW50YWwgYXV0by12YWN1dW0gKCVkICVzKSIsIG1fc3FsaXRlRGF0YWJh
c2UubGFzdEVycm9yKCksIG1fc3FsaXRlRGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOworICAgIGlm
ICghc3FsaXRlRGF0YWJhc2UudHVybk9uSW5jcmVtZW50YWxBdXRvVmFjdXVtKCkpCisgICAgICAg
IExPR19FUlJPUigiVW5hYmxlIHRvIHR1cm4gb24gaW5jcmVtZW50YWwgYXV0by12YWN1dW0gKCVk
ICVzKSIsIHNxbGl0ZURhdGFiYXNlLmxhc3RFcnJvcigpLCBzcWxpdGVEYXRhYmFzZS5sYXN0RXJy
b3JNc2coKSk7CiAKLSAgICBtX3NxbGl0ZURhdGFiYXNlLnNldEJ1c3lUaW1lb3V0KG1heFNxbGl0
ZUJ1c3lXYWl0VGltZSk7CisgICAgc3FsaXRlRGF0YWJhc2Uuc2V0QnVzeVRpbWVvdXQobWF4U3Fs
aXRlQnVzeVdhaXRUaW1lKTsKIAogICAgIFN0cmluZyBjdXJyZW50VmVyc2lvbjsKICAgICB7CiAg
ICAgICAgIE11dGV4TG9ja2VyIGxvY2tlcihndWlkTXV0ZXgoKSk7CiAKLSAgICAgICAgR3VpZFZl
cnNpb25NYXA6Oml0ZXJhdG9yIGVudHJ5ID0gZ3VpZFRvVmVyc2lvbk1hcCgpLmZpbmQobV9ndWlk
KTsKKyAgICAgICAgR3VpZFZlcnNpb25NYXA6Oml0ZXJhdG9yIGVudHJ5ID0gZ3VpZFRvVmVyc2lv
bk1hcCgpLmZpbmQobV9jb3JlLT5ndWlkKCkpOwogICAgICAgICBpZiAoZW50cnkgIT0gZ3VpZFRv
VmVyc2lvbk1hcCgpLmVuZCgpKSB7CiAgICAgICAgICAgICAvLyBNYXAgbnVsbCBzdHJpbmcgdG8g
ZW1wdHkgc3RyaW5nIChzZWUgdXBkYXRlR3VpZFZlcnNpb25NYXAoKSkuCiAgICAgICAgICAgICBj
dXJyZW50VmVyc2lvbiA9IGVudHJ5LT52YWx1ZS5pc051bGwoKSA/IGVtcHR5U3RyaW5nKCkgOiBl
bnRyeS0+dmFsdWUuaXNvbGF0ZWRDb3B5KCk7Ci0gICAgICAgICAgICBMT0coU3RvcmFnZUFQSSwg
IkN1cnJlbnQgY2FjaGVkIHZlcnNpb24gZm9yIGd1aWQgJWkgaXMgJXMiLCBtX2d1aWQsIGN1cnJl
bnRWZXJzaW9uLmFzY2lpKCkuZGF0YSgpKTsKKyAgICAgICAgICAgIExPRyhTdG9yYWdlQVBJLCAi
Q3VycmVudCBjYWNoZWQgdmVyc2lvbiBmb3IgZ3VpZCAlaSBpcyAlcyIsIG1fY29yZS0+Z3VpZCgp
LCBjdXJyZW50VmVyc2lvbi5hc2NpaSgpLmRhdGEoKSk7CiAKICNpZiBQTEFURk9STShDSFJPTUlV
TSkKICAgICAgICAgICAgIC8vIE5vdGU6IEluIG11bHRpLXByb2Nlc3MgYnJvd3NlcnMgdGhlIGNh
Y2hlZCB2YWx1ZSBtYXkgYmUgaW5hY2N1cmF0ZSwgYnV0CkBAIC0yOTMsNDUgKzMwNiw0NSBAQCBi
b29sIEFic3RyYWN0RGF0YWJhc2U6OnBlcmZvcm1PcGVuQW5kVmVyaWZ5KGJvb2wgc2hvdWxkU2V0
VmVyc2lvbkluTmV3RGF0YWJhc2UsCiAgICAgICAgICAgICAvLyB0aGUgdmFsdWUgZnJvbSB0aGUg
ZGF0YWJhc2UgZmlsZSB3aXRob3V0IHdhaXRpbmcuCiAgICAgICAgICAgICAvLyBGSVhNRTogQWRk
IGFuIGFzeW5jIG9wZW5EYXRhYmFzZSBtZXRob2QgdG8gdGhlIERhdGFiYXNlQVBJLgogICAgICAg
ICAgICAgY29uc3QgaW50IG5vU3FsaXRlQnVzeVdhaXRUaW1lID0gMDsKLSAgICAgICAgICAgIG1f
c3FsaXRlRGF0YWJhc2Uuc2V0QnVzeVRpbWVvdXQobm9TcWxpdGVCdXN5V2FpdFRpbWUpOworICAg
ICAgICAgICAgc3FsaXRlRGF0YWJhc2Uuc2V0QnVzeVRpbWVvdXQobm9TcWxpdGVCdXN5V2FpdFRp
bWUpOwogICAgICAgICAgICAgU3RyaW5nIHZlcnNpb25Gcm9tRGF0YWJhc2U7CiAgICAgICAgICAg
ICBpZiAoZ2V0VmVyc2lvbkZyb21EYXRhYmFzZSh2ZXJzaW9uRnJvbURhdGFiYXNlLCBmYWxzZSkp
IHsKICAgICAgICAgICAgICAgICBjdXJyZW50VmVyc2lvbiA9IHZlcnNpb25Gcm9tRGF0YWJhc2U7
Ci0gICAgICAgICAgICAgICAgdXBkYXRlR3VpZFZlcnNpb25NYXAobV9ndWlkLCBjdXJyZW50VmVy
c2lvbik7CisgICAgICAgICAgICAgICAgdXBkYXRlR3VpZFZlcnNpb25NYXAobV9jb3JlLT5ndWlk
KCksIGN1cnJlbnRWZXJzaW9uKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIG1fc3FsaXRl
RGF0YWJhc2Uuc2V0QnVzeVRpbWVvdXQobWF4U3FsaXRlQnVzeVdhaXRUaW1lKTsKKyAgICAgICAg
ICAgIHNxbGl0ZURhdGFiYXNlLnNldEJ1c3lUaW1lb3V0KG1heFNxbGl0ZUJ1c3lXYWl0VGltZSk7
CiAjZW5kaWYKICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIExPRyhTdG9yYWdlQVBJLCAi
Tm8gY2FjaGVkIHZlcnNpb24gZm9yIGd1aWQgJWkiLCBtX2d1aWQpOworICAgICAgICAgICAgTE9H
KFN0b3JhZ2VBUEksICJObyBjYWNoZWQgdmVyc2lvbiBmb3IgZ3VpZCAlaSIsIG1fY29yZS0+Z3Vp
ZCgpKTsKIAotICAgICAgICAgICAgU1FMaXRlVHJhbnNhY3Rpb24gdHJhbnNhY3Rpb24obV9zcWxp
dGVEYXRhYmFzZSk7CisgICAgICAgICAgICBTUUxpdGVUcmFuc2FjdGlvbiB0cmFuc2FjdGlvbihz
cWxpdGVEYXRhYmFzZSk7CiAgICAgICAgICAgICB0cmFuc2FjdGlvbi5iZWdpbigpOwogICAgICAg
ICAgICAgaWYgKCF0cmFuc2FjdGlvbi5pblByb2dyZXNzKCkpIHsKLSAgICAgICAgICAgICAgICBy
ZXBvcnRPcGVuRGF0YWJhc2VSZXN1bHQoMiwgSU5WQUxJRF9TVEFURV9FUlIsIG1fc3FsaXRlRGF0
YWJhc2UubGFzdEVycm9yKCkpOwotICAgICAgICAgICAgICAgIGVycm9yTWVzc2FnZSA9IGZvcm1h
dEVycm9yTWVzc2FnZSgidW5hYmxlIHRvIG9wZW4gZGF0YWJhc2UsIGZhaWxlZCB0byBzdGFydCB0
cmFuc2FjdGlvbiIsIG1fc3FsaXRlRGF0YWJhc2UubGFzdEVycm9yKCksIG1fc3FsaXRlRGF0YWJh
c2UubGFzdEVycm9yTXNnKCkpOworICAgICAgICAgICAgICAgIHJlcG9ydE9wZW5EYXRhYmFzZVJl
c3VsdCgyLCBJTlZBTElEX1NUQVRFX0VSUiwgc3FsaXRlRGF0YWJhc2UubGFzdEVycm9yKCkpOwor
ICAgICAgICAgICAgICAgIGVycm9yTWVzc2FnZSA9IGZvcm1hdEVycm9yTWVzc2FnZSgidW5hYmxl
IHRvIG9wZW4gZGF0YWJhc2UsIGZhaWxlZCB0byBzdGFydCB0cmFuc2FjdGlvbiIsIHNxbGl0ZURh
dGFiYXNlLmxhc3RFcnJvcigpLCBzcWxpdGVEYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7CiAgICAg
ICAgICAgICAgICAgZWMgPSBJTlZBTElEX1NUQVRFX0VSUjsKLSAgICAgICAgICAgICAgICBtX3Nx
bGl0ZURhdGFiYXNlLmNsb3NlKCk7CisgICAgICAgICAgICAgICAgc3FsaXRlRGF0YWJhc2UuY2xv
c2UoKTsKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICB9CiAKICAg
ICAgICAgICAgIFN0cmluZyB0YWJsZU5hbWUoaW5mb1RhYmxlTmFtZSk7Ci0gICAgICAgICAgICBp
ZiAoIW1fc3FsaXRlRGF0YWJhc2UudGFibGVFeGlzdHModGFibGVOYW1lKSkgeworICAgICAgICAg
ICAgaWYgKCFzcWxpdGVEYXRhYmFzZS50YWJsZUV4aXN0cyh0YWJsZU5hbWUpKSB7CiAgICAgICAg
ICAgICAgICAgbV9uZXcgPSB0cnVlOwogCi0gICAgICAgICAgICAgICAgaWYgKCFtX3NxbGl0ZURh
dGFiYXNlLmV4ZWN1dGVDb21tYW5kKCJDUkVBVEUgVEFCTEUgIiArIHRhYmxlTmFtZSArICIgKGtl
eSBURVhUIE5PVCBOVUxMIE9OIENPTkZMSUNUIEZBSUwgVU5JUVVFIE9OIENPTkZMSUNUIFJFUExB
Q0UsdmFsdWUgVEVYVCBOT1QgTlVMTCBPTiBDT05GTElDVCBGQUlMKTsiKSkgewotICAgICAgICAg
ICAgICAgICAgICByZXBvcnRPcGVuRGF0YWJhc2VSZXN1bHQoMywgSU5WQUxJRF9TVEFURV9FUlIs
IG1fc3FsaXRlRGF0YWJhc2UubGFzdEVycm9yKCkpOwotICAgICAgICAgICAgICAgICAgICBlcnJv
ck1lc3NhZ2UgPSBmb3JtYXRFcnJvck1lc3NhZ2UoInVuYWJsZSB0byBvcGVuIGRhdGFiYXNlLCBm
YWlsZWQgdG8gY3JlYXRlICdpbmZvJyB0YWJsZSIsIG1fc3FsaXRlRGF0YWJhc2UubGFzdEVycm9y
KCksIG1fc3FsaXRlRGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOworICAgICAgICAgICAgICAgIGlm
ICghc3FsaXRlRGF0YWJhc2UuZXhlY3V0ZUNvbW1hbmQoIkNSRUFURSBUQUJMRSAiICsgdGFibGVO
YW1lICsgIiAoa2V5IFRFWFQgTk9UIE5VTEwgT04gQ09ORkxJQ1QgRkFJTCBVTklRVUUgT04gQ09O
RkxJQ1QgUkVQTEFDRSx2YWx1ZSBURVhUIE5PVCBOVUxMIE9OIENPTkZMSUNUIEZBSUwpOyIpKSB7
CisgICAgICAgICAgICAgICAgICAgIHJlcG9ydE9wZW5EYXRhYmFzZVJlc3VsdCgzLCBJTlZBTElE
X1NUQVRFX0VSUiwgc3FsaXRlRGF0YWJhc2UubGFzdEVycm9yKCkpOworICAgICAgICAgICAgICAg
ICAgICBlcnJvck1lc3NhZ2UgPSBmb3JtYXRFcnJvck1lc3NhZ2UoInVuYWJsZSB0byBvcGVuIGRh
dGFiYXNlLCBmYWlsZWQgdG8gY3JlYXRlICdpbmZvJyB0YWJsZSIsIHNxbGl0ZURhdGFiYXNlLmxh
c3RFcnJvcigpLCBzcWxpdGVEYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7CiAgICAgICAgICAgICAg
ICAgICAgIGVjID0gSU5WQUxJRF9TVEFURV9FUlI7CiAgICAgICAgICAgICAgICAgICAgIHRyYW5z
YWN0aW9uLnJvbGxiYWNrKCk7Ci0gICAgICAgICAgICAgICAgICAgIG1fc3FsaXRlRGF0YWJhc2Uu
Y2xvc2UoKTsKKyAgICAgICAgICAgICAgICAgICAgc3FsaXRlRGF0YWJhc2UuY2xvc2UoKTsKICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgIH0gZWxzZSBpZiAoIWdldFZlcnNpb25Gcm9tRGF0YWJhc2UoY3VycmVudFZlcnNpb24s
IGZhbHNlKSkgewotICAgICAgICAgICAgICAgIHJlcG9ydE9wZW5EYXRhYmFzZVJlc3VsdCg0LCBJ
TlZBTElEX1NUQVRFX0VSUiwgbV9zcWxpdGVEYXRhYmFzZS5sYXN0RXJyb3IoKSk7Ci0gICAgICAg
ICAgICAgICAgZXJyb3JNZXNzYWdlID0gZm9ybWF0RXJyb3JNZXNzYWdlKCJ1bmFibGUgdG8gb3Bl
biBkYXRhYmFzZSwgZmFpbGVkIHRvIHJlYWQgY3VycmVudCB2ZXJzaW9uIiwgbV9zcWxpdGVEYXRh
YmFzZS5sYXN0RXJyb3IoKSwgbV9zcWxpdGVEYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7CisgICAg
ICAgICAgICAgICAgcmVwb3J0T3BlbkRhdGFiYXNlUmVzdWx0KDQsIElOVkFMSURfU1RBVEVfRVJS
LCBzcWxpdGVEYXRhYmFzZS5sYXN0RXJyb3IoKSk7CisgICAgICAgICAgICAgICAgZXJyb3JNZXNz
YWdlID0gZm9ybWF0RXJyb3JNZXNzYWdlKCJ1bmFibGUgdG8gb3BlbiBkYXRhYmFzZSwgZmFpbGVk
IHRvIHJlYWQgY3VycmVudCB2ZXJzaW9uIiwgc3FsaXRlRGF0YWJhc2UubGFzdEVycm9yKCksIHNx
bGl0ZURhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKICAgICAgICAgICAgICAgICBlYyA9IElOVkFM
SURfU1RBVEVfRVJSOwogICAgICAgICAgICAgICAgIHRyYW5zYWN0aW9uLnJvbGxiYWNrKCk7Ci0g
ICAgICAgICAgICAgICAgbV9zcWxpdGVEYXRhYmFzZS5jbG9zZSgpOworICAgICAgICAgICAgICAg
IHNxbGl0ZURhdGFiYXNlLmNsb3NlKCk7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwog
ICAgICAgICAgICAgfQogCkBAIC0zNDAsMTYgKzM1MywxNiBAQCBib29sIEFic3RyYWN0RGF0YWJh
c2U6OnBlcmZvcm1PcGVuQW5kVmVyaWZ5KGJvb2wgc2hvdWxkU2V0VmVyc2lvbkluTmV3RGF0YWJh
c2UsCiAgICAgICAgICAgICB9IGVsc2UgaWYgKCFtX25ldyB8fCBzaG91bGRTZXRWZXJzaW9uSW5O
ZXdEYXRhYmFzZSkgewogICAgICAgICAgICAgICAgIExPRyhTdG9yYWdlQVBJLCAiU2V0dGluZyB2
ZXJzaW9uICVzIGluIGRhdGFiYXNlICVzIHRoYXQgd2FzIGp1c3QgY3JlYXRlZCIsIG1fZXhwZWN0
ZWRWZXJzaW9uLmFzY2lpKCkuZGF0YSgpLCBkYXRhYmFzZURlYnVnTmFtZSgpLmFzY2lpKCkuZGF0
YSgpKTsKICAgICAgICAgICAgICAgICBpZiAoIXNldFZlcnNpb25JbkRhdGFiYXNlKG1fZXhwZWN0
ZWRWZXJzaW9uLCBmYWxzZSkpIHsKLSAgICAgICAgICAgICAgICAgICAgcmVwb3J0T3BlbkRhdGFi
YXNlUmVzdWx0KDUsIElOVkFMSURfU1RBVEVfRVJSLCBtX3NxbGl0ZURhdGFiYXNlLmxhc3RFcnJv
cigpKTsKLSAgICAgICAgICAgICAgICAgICAgZXJyb3JNZXNzYWdlID0gZm9ybWF0RXJyb3JNZXNz
YWdlKCJ1bmFibGUgdG8gb3BlbiBkYXRhYmFzZSwgZmFpbGVkIHRvIHdyaXRlIGN1cnJlbnQgdmVy
c2lvbiIsIG1fc3FsaXRlRGF0YWJhc2UubGFzdEVycm9yKCksIG1fc3FsaXRlRGF0YWJhc2UubGFz
dEVycm9yTXNnKCkpOworICAgICAgICAgICAgICAgICAgICByZXBvcnRPcGVuRGF0YWJhc2VSZXN1
bHQoNSwgSU5WQUxJRF9TVEFURV9FUlIsIHNxbGl0ZURhdGFiYXNlLmxhc3RFcnJvcigpKTsKKyAg
ICAgICAgICAgICAgICAgICAgZXJyb3JNZXNzYWdlID0gZm9ybWF0RXJyb3JNZXNzYWdlKCJ1bmFi
bGUgdG8gb3BlbiBkYXRhYmFzZSwgZmFpbGVkIHRvIHdyaXRlIGN1cnJlbnQgdmVyc2lvbiIsIHNx
bGl0ZURhdGFiYXNlLmxhc3RFcnJvcigpLCBzcWxpdGVEYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7
CiAgICAgICAgICAgICAgICAgICAgIGVjID0gSU5WQUxJRF9TVEFURV9FUlI7CiAgICAgICAgICAg
ICAgICAgICAgIHRyYW5zYWN0aW9uLnJvbGxiYWNrKCk7Ci0gICAgICAgICAgICAgICAgICAgIG1f
c3FsaXRlRGF0YWJhc2UuY2xvc2UoKTsKKyAgICAgICAgICAgICAgICAgICAgc3FsaXRlRGF0YWJh
c2UuY2xvc2UoKTsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgICAgICBjdXJyZW50VmVyc2lvbiA9IG1fZXhwZWN0ZWRWZXJz
aW9uOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgdXBkYXRlR3VpZFZlcnNpb25NYXAobV9n
dWlkLCBjdXJyZW50VmVyc2lvbik7CisgICAgICAgICAgICB1cGRhdGVHdWlkVmVyc2lvbk1hcCht
X2NvcmUtPmd1aWQoKSwgY3VycmVudFZlcnNpb24pOwogICAgICAgICAgICAgdHJhbnNhY3Rpb24u
Y29tbWl0KCk7CiAgICAgICAgIH0KICAgICB9CkBAIC0zNjUsMTQgKzM3OCwxNCBAQCBib29sIEFi
c3RyYWN0RGF0YWJhc2U6OnBlcmZvcm1PcGVuQW5kVmVyaWZ5KGJvb2wgc2hvdWxkU2V0VmVyc2lv
bkluTmV3RGF0YWJhc2UsCiAgICAgICAgIHJlcG9ydE9wZW5EYXRhYmFzZVJlc3VsdCg2LCBJTlZB
TElEX1NUQVRFX0VSUiwgMCk7CiAgICAgICAgIGVycm9yTWVzc2FnZSA9ICJ1bmFibGUgdG8gb3Bl
biBkYXRhYmFzZSwgdmVyc2lvbiBtaXNtYXRjaCwgJyIgKyBtX2V4cGVjdGVkVmVyc2lvbiArICIn
IGRvZXMgbm90IG1hdGNoIHRoZSBjdXJyZW50VmVyc2lvbiBvZiAnIiArIGN1cnJlbnRWZXJzaW9u
ICsgIiciOwogICAgICAgICBlYyA9IElOVkFMSURfU1RBVEVfRVJSOwotICAgICAgICBtX3NxbGl0
ZURhdGFiYXNlLmNsb3NlKCk7CisgICAgICAgIHNxbGl0ZURhdGFiYXNlLmNsb3NlKCk7CiAgICAg
ICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKICAgICBBU1NFUlQobV9kYXRhYmFzZUF1dGhvcml6
ZXIpOwotICAgIG1fc3FsaXRlRGF0YWJhc2Uuc2V0QXV0aG9yaXplcihtX2RhdGFiYXNlQXV0aG9y
aXplcik7CisgICAgc3FsaXRlRGF0YWJhc2Uuc2V0QXV0aG9yaXplcihtX2RhdGFiYXNlQXV0aG9y
aXplcik7CiAKLSAgICBtX29wZW5lZCA9IHRydWU7CisgICAgbV9jb3JlLT5zZXRPcGVuZWQoKTsK
IAogICAgIGlmIChtX25ldyAmJiAhc2hvdWxkU2V0VmVyc2lvbkluTmV3RGF0YWJhc2UpCiAgICAg
ICAgIG1fZXhwZWN0ZWRWZXJzaW9uID0gIiI7IC8vIFRoZSBjYWxsZXIgcHJvdmlkZWQgYSBjcmVh
dGlvbkNhbGxiYWNrIHdoaWNoIHdpbGwgc2V0IHRoZSBleHBlY3RlZCB2ZXJzaW9uLgpAQCAtMzgx
LDExICszOTQsNiBAQCBib29sIEFic3RyYWN0RGF0YWJhc2U6OnBlcmZvcm1PcGVuQW5kVmVyaWZ5
KGJvb2wgc2hvdWxkU2V0VmVyc2lvbkluTmV3RGF0YWJhc2UsCiAgICAgcmV0dXJuIHRydWU7CiB9
CiAKLVNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIEFic3RyYWN0RGF0YWJhc2U6OnNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQoKSBjb25zdAotewotICAgIHJldHVybiBtX3NjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQuZ2V0KCk7Ci19Ci0KIFNlY3VyaXR5T3JpZ2luKiBBYnN0cmFjdERhdGFiYXNlOjpzZWN1cml0
eU9yaWdpbigpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1fY29udGV4dFRocmVhZFNlY3VyaXR5T3Jp
Z2luLmdldCgpOwpAQCAtNDIwLDcgKzQyOCw3IEBAIGJvb2wgQWJzdHJhY3REYXRhYmFzZTo6Z2V0
VmVyc2lvbkZyb21EYXRhYmFzZShTdHJpbmcmIHZlcnNpb24sIGJvb2wgc2hvdWxkQ2FjaGVWCiAK
ICAgICBtX2RhdGFiYXNlQXV0aG9yaXplci0+ZGlzYWJsZSgpOwogCi0gICAgYm9vbCByZXN1bHQg
PSByZXRyaWV2ZVRleHRSZXN1bHRGcm9tRGF0YWJhc2UobV9zcWxpdGVEYXRhYmFzZSwgcXVlcnks
IHZlcnNpb24pOworICAgIGJvb2wgcmVzdWx0ID0gcmV0cmlldmVUZXh0UmVzdWx0RnJvbURhdGFi
YXNlKG1fY29yZS0+c3FsaXRlRGF0YWJhc2UoKSwgcXVlcnksIHZlcnNpb24pOwogICAgIGlmIChy
ZXN1bHQpIHsKICAgICAgICAgaWYgKHNob3VsZENhY2hlVmVyc2lvbikKICAgICAgICAgICAgIHNl
dENhY2hlZFZlcnNpb24odmVyc2lvbik7CkBAIC00NDAsNyArNDQ4LDcgQEAgYm9vbCBBYnN0cmFj
dERhdGFiYXNlOjpzZXRWZXJzaW9uSW5EYXRhYmFzZShjb25zdCBTdHJpbmcmIHZlcnNpb24sIGJv
b2wgc2hvdWxkQ2EKIAogICAgIG1fZGF0YWJhc2VBdXRob3JpemVyLT5kaXNhYmxlKCk7CiAKLSAg
ICBib29sIHJlc3VsdCA9IHNldFRleHRWYWx1ZUluRGF0YWJhc2UobV9zcWxpdGVEYXRhYmFzZSwg
cXVlcnksIHZlcnNpb24pOworICAgIGJvb2wgcmVzdWx0ID0gc2V0VGV4dFZhbHVlSW5EYXRhYmFz
ZShtX2NvcmUtPnNxbGl0ZURhdGFiYXNlKCksIHF1ZXJ5LCB2ZXJzaW9uKTsKICAgICBpZiAocmVz
dWx0KSB7CiAgICAgICAgIGlmIChzaG91bGRDYWNoZVZlcnNpb24pCiAgICAgICAgICAgICBzZXRD
YWNoZWRWZXJzaW9uKHZlcnNpb24pOwpAQCAtNDYwLDE5ICs0NjgsMTkgQEAgdm9pZCBBYnN0cmFj
dERhdGFiYXNlOjpzZXRFeHBlY3RlZFZlcnNpb24oY29uc3QgU3RyaW5nJiB2ZXJzaW9uKQogU3Ry
aW5nIEFic3RyYWN0RGF0YWJhc2U6OmdldENhY2hlZFZlcnNpb24oKSBjb25zdAogewogICAgIE11
dGV4TG9ja2VyIGxvY2tlcihndWlkTXV0ZXgoKSk7Ci0gICAgcmV0dXJuIGd1aWRUb1ZlcnNpb25N
YXAoKS5nZXQobV9ndWlkKS5pc29sYXRlZENvcHkoKTsKKyAgICByZXR1cm4gZ3VpZFRvVmVyc2lv
bk1hcCgpLmdldChtX2NvcmUtPmd1aWQoKSkuaXNvbGF0ZWRDb3B5KCk7CiB9CiAKIHZvaWQgQWJz
dHJhY3REYXRhYmFzZTo6c2V0Q2FjaGVkVmVyc2lvbihjb25zdCBTdHJpbmcmIGFjdHVhbFZlcnNp
b24pCiB7CiAgICAgLy8gVXBkYXRlIHRoZSBpbiBtZW1vcnkgZGF0YWJhc2UgdmVyc2lvbiBtYXAu
CiAgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKGd1aWRNdXRleCgpKTsKLSAgICB1cGRhdGVHdWlkVmVy
c2lvbk1hcChtX2d1aWQsIGFjdHVhbFZlcnNpb24pOworICAgIHVwZGF0ZUd1aWRWZXJzaW9uTWFw
KG1fY29yZS0+Z3VpZCgpLCBhY3R1YWxWZXJzaW9uKTsKIH0KIAogYm9vbCBBYnN0cmFjdERhdGFi
YXNlOjpnZXRBY3R1YWxWZXJzaW9uRm9yVHJhbnNhY3Rpb24oU3RyaW5nICZhY3R1YWxWZXJzaW9u
KQogewotICAgIEFTU0VSVChtX3NxbGl0ZURhdGFiYXNlLnRyYW5zYWN0aW9uSW5Qcm9ncmVzcygp
KTsKKyAgICBBU1NFUlQobV9jb3JlLT5zcWxpdGVEYXRhYmFzZSgpLnRyYW5zYWN0aW9uSW5Qcm9n
cmVzcygpKTsKICNpZiBQTEFURk9STShDSFJPTUlVTSkKICAgICAvLyBOb3RlOiBJbiBtdWx0aS1w
cm9jZXNzIGJyb3dzZXJzIHRoZSBjYWNoZWQgdmFsdWUgbWF5IGJlIGluYWNjdXJhdGUuCiAgICAg
Ly8gU28gd2UgcmV0cmlldmUgdGhlIHZhbHVlIGZyb20gdGhlIGRhdGFiYXNlIGFuZCB1cGRhdGUg
dGhlIGNhY2hlZCB2YWx1ZSBoZXJlLgpAQCAtNTQ0LDMwICs1NTIsMzIgQEAgdW5zaWduZWQgbG9u
ZyBsb25nIEFic3RyYWN0RGF0YWJhc2U6Om1heGltdW1TaXplKCkgY29uc3QKIAogdm9pZCBBYnN0
cmFjdERhdGFiYXNlOjppbmNyZW1lbnRhbFZhY3V1bUlmTmVlZGVkKCkKIHsKLSAgICBpbnQ2NF90
IGZyZWVTcGFjZVNpemUgPSBtX3NxbGl0ZURhdGFiYXNlLmZyZWVTcGFjZVNpemUoKTsKLSAgICBp
bnQ2NF90IHRvdGFsU2l6ZSA9IG1fc3FsaXRlRGF0YWJhc2UudG90YWxTaXplKCk7CisgICAgU1FM
aXRlRGF0YWJhc2UmIHNxbGl0ZURhdGFiYXNlID0gbV9jb3JlLT5zcWxpdGVEYXRhYmFzZSgpOwor
ICAgIGludDY0X3QgZnJlZVNwYWNlU2l6ZSA9IHNxbGl0ZURhdGFiYXNlLmZyZWVTcGFjZVNpemUo
KTsKKyAgICBpbnQ2NF90IHRvdGFsU2l6ZSA9IHNxbGl0ZURhdGFiYXNlLnRvdGFsU2l6ZSgpOwog
ICAgIGlmICh0b3RhbFNpemUgPD0gMTAgKiBmcmVlU3BhY2VTaXplKSB7Ci0gICAgICAgIGludCBy
ZXN1bHQgPSBtX3NxbGl0ZURhdGFiYXNlLnJ1bkluY3JlbWVudGFsVmFjdXVtQ29tbWFuZCgpOwor
ICAgICAgICBpbnQgcmVzdWx0ID0gc3FsaXRlRGF0YWJhc2UucnVuSW5jcmVtZW50YWxWYWN1dW1D
b21tYW5kKCk7CiAgICAgICAgIHJlcG9ydFZhY3V1bURhdGFiYXNlUmVzdWx0KHJlc3VsdCk7CiAg
ICAgICAgIGlmIChyZXN1bHQgIT0gU1FMUmVzdWx0T2spCi0gICAgICAgICAgICBsb2dFcnJvck1l
c3NhZ2UoZm9ybWF0RXJyb3JNZXNzYWdlKCJlcnJvciB2YWN1dW1pbmcgZGF0YWJhc2UiLCByZXN1
bHQsIG1fc3FsaXRlRGF0YWJhc2UubGFzdEVycm9yTXNnKCkpKTsKKyAgICAgICAgICAgIGxvZ0Vy
cm9yTWVzc2FnZShmb3JtYXRFcnJvck1lc3NhZ2UoImVycm9yIHZhY3V1bWluZyBkYXRhYmFzZSIs
IHJlc3VsdCwgc3FsaXRlRGF0YWJhc2UubGFzdEVycm9yTXNnKCkpKTsKICAgICB9CiB9CiAKIHZv
aWQgQWJzdHJhY3REYXRhYmFzZTo6aW50ZXJydXB0KCkKIHsKLSAgICBtX3NxbGl0ZURhdGFiYXNl
LmludGVycnVwdCgpOworICAgIG1fY29yZS0+c3FsaXRlRGF0YWJhc2UoKS5pbnRlcnJ1cHQoKTsK
IH0KIAogYm9vbCBBYnN0cmFjdERhdGFiYXNlOjppc0ludGVycnVwdGVkKCkKIHsKLSAgICBNdXRl
eExvY2tlciBsb2NrZXIobV9zcWxpdGVEYXRhYmFzZS5kYXRhYmFzZU11dGV4KCkpOwotICAgIHJl
dHVybiBtX3NxbGl0ZURhdGFiYXNlLmlzSW50ZXJydXB0ZWQoKTsKKyAgICBTUUxpdGVEYXRhYmFz
ZSYgc3FsaXRlRGF0YWJhc2UgPSBtX2NvcmUtPnNxbGl0ZURhdGFiYXNlKCk7CisgICAgTXV0ZXhM
b2NrZXIgbG9ja2VyKHNxbGl0ZURhdGFiYXNlLmRhdGFiYXNlTXV0ZXgoKSk7CisgICAgcmV0dXJu
IHNxbGl0ZURhdGFiYXNlLmlzSW50ZXJydXB0ZWQoKTsKIH0KIAogdm9pZCBBYnN0cmFjdERhdGFi
YXNlOjpsb2dFcnJvck1lc3NhZ2UoY29uc3QgU3RyaW5nJiBtZXNzYWdlKQogewotICAgIG1fc2Ny
aXB0RXhlY3V0aW9uQ29udGV4dC0+YWRkQ29uc29sZU1lc3NhZ2UoT3RoZXJNZXNzYWdlU291cmNl
LCBMb2dNZXNzYWdlVHlwZSwgRXJyb3JNZXNzYWdlTGV2ZWwsIG1lc3NhZ2UpOworICAgIHNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQoKS0+YWRkQ29uc29sZU1lc3NhZ2UoT3RoZXJNZXNzYWdlU291cmNl
LCBMb2dNZXNzYWdlVHlwZSwgRXJyb3JNZXNzYWdlTGV2ZWwsIG1lc3NhZ2UpOwogfQogCiAjaWYg
UExBVEZPUk0oQ0hST01JVU0pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmRhdGFiYXNlL0Fic3RyYWN0RGF0YWJhc2UuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
ZGF0YWJhc2UvQWJzdHJhY3REYXRhYmFzZS5oCmluZGV4IGQzNzAwZThkNDU4NTgwYTZiM2ZiMGQ1
MzViYzEwYjkxNGE2YjE1ZmEuLmVmMDY3NDI4MTRiMWYxYjMxZjRjODE5OWQ3NTRlZDYzNjdlNDY4
OWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvQWJzdHJh
Y3REYXRhYmFzZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvQWJz
dHJhY3REYXRhYmFzZS5oCkBAIC01MSw2ICs1MSwyOCBAQCB0eXBlZGVmIGludCBFeGNlcHRpb25D
b2RlOwogCiBjbGFzcyBBYnN0cmFjdERhdGFiYXNlIDogcHVibGljIFRocmVhZFNhZmVSZWZDb3Vu
dGVkPEFic3RyYWN0RGF0YWJhc2U+IHsKIHB1YmxpYzoKKyAgICBjbGFzcyBDb3JlIDogcHVibGlj
IFRocmVhZFNhZmVSZWZDb3VudGVkPENvcmU+IHsKKyAgICBwdWJsaWM6CisgICAgICAgIHN0YXRp
YyBQYXNzUmVmUHRyPENvcmU+IGNyZWF0ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBzY3JpcHRF
eGVjdXRpb25Db250ZXh0LCBTZWN1cml0eU9yaWdpbiogb3JpZ2luLCBjb25zdCBTdHJpbmcmIG5h
bWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgQ29yZShzY3Jp
cHRFeGVjdXRpb25Db250ZXh0LCBvcmlnaW4sIG5hbWUpKTsKKyAgICAgICAgfQorICAgICAgICB+
Q29yZSgpOworICAgICAgICB2b2lkIGNsb3NlKCk7CisgICAgICAgIHZvaWQgc2V0T3BlbmVkKCkg
eyBtX29wZW5lZCA9IHRydWU7IH0KKyAgICAgICAgYm9vbCBvcGVuZWQoKSB7IHJldHVybiBtX29w
ZW5lZDsgfQorICAgICAgICBpbnQgZ3VpZCgpIHsgcmV0dXJuIG1fZ3VpZDsgfQorICAgICAgICBT
UUxpdGVEYXRhYmFzZSYgc3FsaXRlRGF0YWJhc2UoKSB7IHJldHVybiBtX3NxbGl0ZURhdGFiYXNl
OyB9CisgICAgICAgIFBhc3NSZWZQdHI8U2NyaXB0RXhlY3V0aW9uQ29udGV4dD4gcmVsZWFzZVNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKKworICAgIHByaXZhdGU6CisgICAgICAgIENvcmUoU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCosIFNlY3VyaXR5T3JpZ2luKiwgY29uc3QgU3RyaW5nJiBuYW1l
KTsKKyAgICAgICAgaW50IG1fZ3VpZDsKKyAgICAgICAgYm9vbCBtX29wZW5lZDsKKyAgICAgICAg
UmVmUHRyPFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ+IG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dDsK
KyAgICAgICAgU1FMaXRlRGF0YWJhc2UgbV9zcWxpdGVEYXRhYmFzZTsKKyAgICB9OworCiAgICAg
c3RhdGljIGJvb2wgaXNBdmFpbGFibGUoKTsKICAgICBzdGF0aWMgdm9pZCBzZXRJc0F2YWlsYWJs
ZShib29sIGF2YWlsYWJsZSk7CiAKQEAgLTU4LDE3ICs4MCwxNyBAQCBwdWJsaWM6CiAKICAgICB2
aXJ0dWFsIFN0cmluZyB2ZXJzaW9uKCkgY29uc3Q7CiAKLSAgICBib29sIG9wZW5lZCgpIGNvbnN0
IHsgcmV0dXJuIG1fb3BlbmVkOyB9CisgICAgYm9vbCBvcGVuZWQoKSBjb25zdCB7IHJldHVybiBt
X2NvcmUtPm9wZW5lZCgpOyB9CiAgICAgYm9vbCBpc05ldygpIGNvbnN0IHsgcmV0dXJuIG1fbmV3
OyB9CiAgICAgYm9vbCBpc1N5bmNEYXRhYmFzZSgpIGNvbnN0IHsgcmV0dXJuIG1faXNTeW5jRGF0
YWJhc2U7IH0KIAotICAgIHZpcnR1YWwgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCgpIGNvbnN0OworICAgIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQoKSBjb25zdCB7IHJldHVybiBtX3NjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQuZ2V0KCk7IH0KICAgICB2aXJ0dWFsIFNlY3VyaXR5T3JpZ2luKiBzZWN1cml0eU9yaWdpbigp
IGNvbnN0OwogICAgIHZpcnR1YWwgU3RyaW5nIHN0cmluZ0lkZW50aWZpZXIoKSBjb25zdDsKICAg
ICB2aXJ0dWFsIFN0cmluZyBkaXNwbGF5TmFtZSgpIGNvbnN0OwogICAgIHZpcnR1YWwgdW5zaWdu
ZWQgbG9uZyBlc3RpbWF0ZWRTaXplKCkgY29uc3Q7CiAgICAgdmlydHVhbCBTdHJpbmcgZmlsZU5h
bWUoKSBjb25zdDsKLSAgICBTUUxpdGVEYXRhYmFzZSYgc3FsaXRlRGF0YWJhc2UoKSB7IHJldHVy
biBtX3NxbGl0ZURhdGFiYXNlOyB9CisgICAgU1FMaXRlRGF0YWJhc2UmIHNxbGl0ZURhdGFiYXNl
KCkgeyByZXR1cm4gbV9jb3JlLT5zcWxpdGVEYXRhYmFzZSgpOyB9CiAKICAgICB1bnNpZ25lZCBs
b25nIGxvbmcgbWF4aW11bVNpemUoKSBjb25zdDsKICAgICB2b2lkIGluY3JlbWVudGFsVmFjdXVt
SWZOZWVkZWQoKTsKQEAgLTEwNSw3ICsxMjcsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgQWJzdHJhY3RE
YXRhYmFzZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25z
dCBTdHJpbmcmIGV4cGVjdGVkVmVyc2lvbiwKICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFN0
cmluZyYgZGlzcGxheU5hbWUsIHVuc2lnbmVkIGxvbmcgZXN0aW1hdGVkU2l6ZSwgRGF0YWJhc2VU
eXBlKTsKIAotICAgIHZvaWQgY2xvc2VEYXRhYmFzZSgpOworICAgIENvcmUqIGNvcmUoKSB7IHJl
dHVybiBtX2NvcmUuZ2V0KCk7IH0KIAogICAgIHZpcnR1YWwgYm9vbCBwZXJmb3JtT3BlbkFuZFZl
cmlmeShib29sIHNob3VsZFNldFZlcnNpb25Jbk5ld0RhdGFiYXNlLCBFeGNlcHRpb25Db2RlJiwg
U3RyaW5nJiBlcnJvck1lc3NhZ2UpOwogCkBAIC0xNDMsMTMgKzE2NSw5IEBAIHByb3RlY3RlZDoK
ICNlbmRpZgogCiBwcml2YXRlOgotICAgIGludCBtX2d1aWQ7Ci0gICAgYm9vbCBtX29wZW5lZDsK
ICAgICBib29sIG1fbmV3OwogICAgIGNvbnN0IGJvb2wgbV9pc1N5bmNEYXRhYmFzZTsKLQotICAg
IFNRTGl0ZURhdGFiYXNlIG1fc3FsaXRlRGF0YWJhc2U7Ci0KKyAgICBSZWZQdHI8Q29yZT4gbV9j
b3JlOwogICAgIFJlZlB0cjxEYXRhYmFzZUF1dGhvcml6ZXI+IG1fZGF0YWJhc2VBdXRob3JpemVy
OwogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9E
YXRhYmFzZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNl
LmNwcAppbmRleCBkMGMzYTdhMWU1YmQ3ODYyODhiNjQzMjlkMWNiYjA4YzcxYWMxOGVhLi42MzJi
NDQwZmU2NjVkMmRiYzAwMWUyNjE0YTg4NWZiYzlhNDc4Y2U4IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlLmNwcApAQCAtMTE2LDcgKzExNiw3IEBA
IFBhc3NSZWZQdHI8RGF0YWJhc2U+IERhdGFiYXNlOjpvcGVuRGF0YWJhc2UoU2NyaXB0RXhlY3V0
aW9uQ29udGV4dCogY29udGV4dCwgY29uCiAKICAgICBpZiAoZGF0YWJhc2UtPmlzTmV3KCkgJiYg
Y3JlYXRpb25DYWxsYmFjay5nZXQoKSkgewogICAgICAgICBMT0coU3RvcmFnZUFQSSwgIlNjaGVk
dWxpbmcgRGF0YWJhc2VDcmVhdGlvbkNhbGxiYWNrVGFzayBmb3IgZGF0YWJhc2UgJXBcbiIsIGRh
dGFiYXNlLmdldCgpKTsKLSAgICAgICAgZGF0YWJhc2UtPm1fc2NyaXB0RXhlY3V0aW9uQ29udGV4
dC0+cG9zdFRhc2soRGF0YWJhc2VDcmVhdGlvbkNhbGxiYWNrVGFzazo6Y3JlYXRlKGRhdGFiYXNl
LCBjcmVhdGlvbkNhbGxiYWNrKSk7CisgICAgICAgIGRhdGFiYXNlLT5zY3JpcHRFeGVjdXRpb25D
b250ZXh0KCktPnBvc3RUYXNrKERhdGFiYXNlQ3JlYXRpb25DYWxsYmFja1Rhc2s6OmNyZWF0ZShk
YXRhYmFzZSwgY3JlYXRpb25DYWxsYmFjaykpOwogICAgIH0KIAogICAgIHJldHVybiBkYXRhYmFz
ZTsKQEAgLTE1OCwxOCArMTU4LDI3IEBAIHByaXZhdGU6CiAgICAgUmVmUHRyPFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQ+IG1fY29udGV4dDsKIH07CiAKLURhdGFiYXNlOjp+RGF0YWJhc2UoKQordm9p
ZCBEYXRhYmFzZTo6ZGlzcG9zZU9mU2NyaXB0RXhlY3V0aW9uQ29udGV4dChQYXNzUmVmUHRyPFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQ+IHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQpCiB7CisgICAgaWYg
KCFzY3JpcHRFeGVjdXRpb25Db250ZXh0KQorICAgICAgICByZXR1cm47CiAgICAgLy8gVGhlIHJl
ZmVyZW5jZSB0byB0aGUgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCBuZWVkcyB0byBiZSBjbGVhcmVk
IG9uIHRoZSBKYXZhU2NyaXB0IHRocmVhZC4gIElmIHdlJ3JlIG9uIHRoYXQgdGhyZWFkIGFscmVh
ZHksIHdlIGNhbiBqdXN0IGxldCB0aGUgUmVmUHRyJ3MgZGVzdHJ1Y3Rpb24gZG8gdGhlIGRlcmVm
ZmluZy4KLSAgICBpZiAoIW1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dC0+aXNDb250ZXh0VGhyZWFk
KCkpIHsKKyAgICBpZiAoIXNjcmlwdEV4ZWN1dGlvbkNvbnRleHQtPmlzQ29udGV4dFRocmVhZCgp
KSB7CiAgICAgICAgIC8vIEdyYWIgYSBwb2ludGVyIHRvIHRoZSBzY3JpcHQgZXhlY3V0aW9uIGhl
cmUgYmVjYXVzZSB3ZSdyZSByZWxlYXNpbmcgaXQgd2hlbiB3ZSBwYXNzIGl0IHRvCiAgICAgICAg
IC8vIERlcmVmQ29udGV4dFRhc2s6OmNyZWF0ZS4KLSAgICAgICAgU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCogc2NyaXB0RXhlY3V0aW9uQ29udGV4dCA9IG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dC5n
ZXQoKTsKLSAgICAgICAgCi0gICAgICAgIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQtPnBvc3RUYXNr
KERlcmVmQ29udGV4dFRhc2s6OmNyZWF0ZShtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQucmVsZWFz
ZSgpKSk7CisgICAgICAgIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvcHkgPSBzY3JpcHRFeGVj
dXRpb25Db250ZXh0LmdldCgpOworICAgICAgICBjb3B5LT5wb3N0VGFzayhEZXJlZkNvbnRleHRU
YXNrOjpjcmVhdGUoc2NyaXB0RXhlY3V0aW9uQ29udGV4dCkpOwogICAgIH0KIH0KIAorRGF0YWJh
c2U6On5EYXRhYmFzZSgpCit7CisgICAgUmVmUHRyPERhdGFiYXNlQ2xvc2VyPiBjbG9zZXIgPSBt
X2Nsb3Nlci5yZWxlYXNlKCk7CisgICAgaWYgKGNsb3NlcikKKyAgICAgICAgY2xvc2VyLT5jbG9z
ZUluRGVzdHJ1Y3RvcigpOworICAgIGRpc3Bvc2VPZlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQobV9z
Y3JpcHRFeGVjdXRpb25Db250ZXh0LnJlbGVhc2UoKSk7Cit9CisKIFN0cmluZyBEYXRhYmFzZTo6
dmVyc2lvbigpIGNvbnN0CiB7CiAgICAgaWYgKG1fZGVsZXRlZCkKQEAgLTIyMiwxOCArMjMxLDky
IEBAIHZvaWQgRGF0YWJhc2U6OmNsb3NlKCkKICAgICAgICAgbV90cmFuc2FjdGlvblF1ZXVlLmNs
ZWFyKCk7CiAgICAgfQogCi0gICAgY2xvc2VEYXRhYmFzZSgpOworICAgIFJlZlB0cjxEYXRhYmFz
ZUNsb3Nlcj4gY2xvc2VyID0gbV9jbG9zZXIucmVsZWFzZSgpOworICAgIGlmIChjbG9zZXIpCisg
ICAgICAgIGNsb3Nlci0+Y2xvc2UoKTsKK30KIAotICAgIC8vIE11c3QgcmVmKCkgYmVmb3JlIGNh
bGxpbmcgZGF0YWJhc2VUaHJlYWQoKS0+cmVjb3JkRGF0YWJhc2VDbG9zZWQoKS4KLSAgICBSZWZQ
dHI8RGF0YWJhc2U+IHByb3RlY3QgPSB0aGlzOwotICAgIGRhdGFiYXNlQ29udGV4dCgpLT5kYXRh
YmFzZVRocmVhZCgpLT5yZWNvcmREYXRhYmFzZUNsb3NlZCh0aGlzKTsKLSAgICBkYXRhYmFzZUNv
bnRleHQoKS0+ZGF0YWJhc2VUaHJlYWQoKS0+dW5zY2hlZHVsZURhdGFiYXNlVGFza3ModGhpcyk7
Ci0gICAgRGF0YWJhc2VUcmFja2VyOjp0cmFja2VyKCkucmVtb3ZlT3BlbkRhdGFiYXNlKHRoaXMp
OworRGF0YWJhc2VDbG9zZXI6OkRhdGFiYXNlQ2xvc2VyKFBhc3NSZWZQdHI8QWJzdHJhY3REYXRh
YmFzZTo6Q29yZT4gY29yZSwgRGF0YWJhc2VUaHJlYWQqIHRocmVhZCwgRGF0YWJhc2UqIGRhdGFi
YXNlKQorICAgIDogbV9jb3JlKGNvcmUpCisgICAgLCBtX3RocmVhZCh0aHJlYWQpCisgICAgLCBt
X2RhdGFiYXNlKGRhdGFiYXNlKQorI2lmbmRlZiBOREVCVUcKKyAgICAsIG1fdGhyZWFkSWQodGhy
ZWFkLT5nZXRUaHJlYWRJRCgpKQorI2VuZGlmCit7CisgICAgQVNTRVJUKG1fY29yZSk7CisgICAg
QVNTRVJUKG1fdGhyZWFkKTsKKyAgICBBU1NFUlQobV9kYXRhYmFzZSk7Cit9CisKK0RhdGFiYXNl
Q2xvc2VyOjp+RGF0YWJhc2VDbG9zZXIoKQoreworICAgIEFTU0VSVCghbV9jb3JlKTsKKyAgICBB
U1NFUlQoIW1fdGhyZWFkKTsKKyAgICBBU1NFUlQoIW1fZGF0YWJhc2UpOworfQorCit2b2lkIERh
dGFiYXNlQ2xvc2VyOjpjbG9zZUluRGVzdHJ1Y3RvcigpCit7CisgICAgRGF0YWJhc2UqIGRhdGFi
YXNlID0gMDsKKyAgICBNdXRleExvY2tlciBsb2NrZXIobV9tdXRleCk7CisKKyAgICBpZiAoIW1f
dGhyZWFkKQorICAgICAgICByZXR1cm47CisKKyAgICBkYXRhYmFzZSA9IG1fZGF0YWJhc2U7Cisg
ICAgbV9kYXRhYmFzZSA9IDA7CisgICAgQVNTRVJUKGRhdGFiYXNlKTsKKworICAgIG1fdGhyZWFk
LT5yZWNvcmREYXRhYmFzZVNob3VsZEJlQ2xvc2VkKHRoaXMpOworICAgIG1fdHJhY2tlclJlbW92
ZXIgPSBEYXRhYmFzZVRyYWNrZXI6OnRyYWNrZXIoKS5yZW1vdmVPcGVuRGF0YWJhc2UoZGF0YWJh
c2UsIHRydWUpOworICAgIG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dCA9IG1fY29yZS0+cmVsZWFz
ZVNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKK30KKwordm9pZCBEYXRhYmFzZUNsb3Nlcjo6Y2xv
c2UoKQoreworICAgIEFTU0VSVChjdXJyZW50VGhyZWFkKCkgPT0gbV90aHJlYWRJZCk7CisKKyAg
ICBEYXRhYmFzZVRocmVhZCogdGhyZWFkID0gMDsKKyAgICBEYXRhYmFzZSogZGF0YWJhc2UgPSAw
OworICAgIFJlZlB0cjxBYnN0cmFjdERhdGFiYXNlOjpDb3JlPiBjb3JlOworICAgIE93blB0cjxE
YXRhYmFzZVRyYWNrZXJBc3luY2hyb25vdXNSZW1vdmVyPiB0cmFja2VyUmVtb3ZlcjsKKyAgICBS
ZWZQdHI8U2NyaXB0RXhlY3V0aW9uQ29udGV4dD4gc2NyaXB0RXhlY3V0aW9uQ29udGV4dDsKKyAg
ICB7CisgICAgICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX211dGV4KTsKKworICAgICAgICBpZiAo
IW1fdGhyZWFkKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIHRocmVhZCA9IG1fdGhy
ZWFkOworICAgICAgICBtX3RocmVhZCA9IDA7CisgICAgICAgIGRhdGFiYXNlID0gbV9kYXRhYmFz
ZTsKKyAgICAgICAgbV9kYXRhYmFzZSA9IDA7CisgICAgICAgIGNvcmUgPSBtX2NvcmUucmVsZWFz
ZSgpOworICAgICAgICB0cmFja2VyUmVtb3ZlciA9IG1fdHJhY2tlclJlbW92ZXIucmVsZWFzZSgp
OworICAgICAgICBzY3JpcHRFeGVjdXRpb25Db250ZXh0ID0gbV9zY3JpcHRFeGVjdXRpb25Db250
ZXh0LnJlbGVhc2UoKTsKKworICAgICAgICB0aHJlYWQtPnJlY29yZERhdGFiYXNlQ2xvc2VkKHRo
aXMpOworICAgICAgICBpZiAoIXNjcmlwdEV4ZWN1dGlvbkNvbnRleHQpCisgICAgICAgICAgICBz
Y3JpcHRFeGVjdXRpb25Db250ZXh0ID0gY29yZS0+cmVsZWFzZVNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQoKTsKKyAgICB9CisKKyAgICBjb3JlLT5jbG9zZSgpOworICAgIGlmIChkYXRhYmFzZSkgewor
ICAgICAgICBBU1NFUlQoIXRyYWNrZXJSZW1vdmVyKTsKKyAgICAgICAgdGhyZWFkLT51bnNjaGVk
dWxlRGF0YWJhc2VUYXNrcyhkYXRhYmFzZSk7CisgICAgICAgIHRyYWNrZXJSZW1vdmVyID0gRGF0
YWJhc2VUcmFja2VyOjp0cmFja2VyKCkucmVtb3ZlT3BlbkRhdGFiYXNlKGRhdGFiYXNlLCB0cnVl
KTsKKyAgICB9CisKKyAgICBpZiAodHJhY2tlclJlbW92ZXIpCisgICAgICAgIHRyYWNrZXJSZW1v
dmVyLT5jb21wbGV0ZVJlbW92YWwoc2NyaXB0RXhlY3V0aW9uQ29udGV4dC5yZWxlYXNlKCkpOwor
ICAgIGVsc2UKKyAgICAgICAgRGF0YWJhc2U6OmRpc3Bvc2VPZlNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQoc2NyaXB0RXhlY3V0aW9uQ29udGV4dC5yZWxlYXNlKCkpOwogfQogCiB2b2lkIERhdGFiYXNl
OjpjbG9zZUltbWVkaWF0ZWx5KCkKIHsKLSAgICBBU1NFUlQobV9zY3JpcHRFeGVjdXRpb25Db250
ZXh0LT5pc0NvbnRleHRUaHJlYWQoKSk7CisgICAgQVNTRVJUKHNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQoKS0+aXNDb250ZXh0VGhyZWFkKCkpOwogICAgIERhdGFiYXNlVGhyZWFkKiBkYXRhYmFzZVRo
cmVhZCA9IGRhdGFiYXNlQ29udGV4dCgpLT5kYXRhYmFzZVRocmVhZCgpOwogICAgIGlmIChkYXRh
YmFzZVRocmVhZCAmJiAhZGF0YWJhc2VUaHJlYWQtPnRlcm1pbmF0aW9uUmVxdWVzdGVkKCkgJiYg
b3BlbmVkKCkpIHsKICAgICAgICAgbG9nRXJyb3JNZXNzYWdlKCJmb3JjaWJseSBjbG9zaW5nIGRh
dGFiYXNlIik7CkBAIC0yNDgsMTQgKzMzMSwxNSBAQCB1bnNpZ25lZCBsb25nIGxvbmcgRGF0YWJh
c2U6Om1heGltdW1TaXplKCkgY29uc3QKIAogYm9vbCBEYXRhYmFzZTo6cGVyZm9ybU9wZW5BbmRW
ZXJpZnkoYm9vbCBzZXRWZXJzaW9uSW5OZXdEYXRhYmFzZSwgRXhjZXB0aW9uQ29kZSYgZSwgU3Ry
aW5nJiBlcnJvck1lc3NhZ2UpCiB7Ci0gICAgaWYgKEFic3RyYWN0RGF0YWJhc2U6OnBlcmZvcm1P
cGVuQW5kVmVyaWZ5KHNldFZlcnNpb25Jbk5ld0RhdGFiYXNlLCBlLCBlcnJvck1lc3NhZ2UpKSB7
Ci0gICAgICAgIGlmIChkYXRhYmFzZUNvbnRleHQoKS0+ZGF0YWJhc2VUaHJlYWQoKSkKLSAgICAg
ICAgICAgIGRhdGFiYXNlQ29udGV4dCgpLT5kYXRhYmFzZVRocmVhZCgpLT5yZWNvcmREYXRhYmFz
ZU9wZW4odGhpcyk7CisgICAgQVNTRVJUKGRhdGFiYXNlQ29udGV4dCgpLT5kYXRhYmFzZVRocmVh
ZCgpKTsKKyAgICBBU1NFUlQoY3VycmVudFRocmVhZCgpID09IGRhdGFiYXNlQ29udGV4dCgpLT5k
YXRhYmFzZVRocmVhZCgpLT5nZXRUaHJlYWRJRCgpKTsKIAotICAgICAgICByZXR1cm4gdHJ1ZTsK
LSAgICB9CisgICAgaWYgKCFBYnN0cmFjdERhdGFiYXNlOjpwZXJmb3JtT3BlbkFuZFZlcmlmeShz
ZXRWZXJzaW9uSW5OZXdEYXRhYmFzZSwgZSwgZXJyb3JNZXNzYWdlKSkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOwogCi0gICAgcmV0dXJuIGZhbHNlOworICAgIG1fY2xvc2VyID0gRGF0YWJhc2VDbG9z
ZXI6OmNyZWF0ZShjb3JlKCksIGRhdGFiYXNlQ29udGV4dCgpLT5kYXRhYmFzZVRocmVhZCgpLCB0
aGlzKTsKKyAgICBkYXRhYmFzZUNvbnRleHQoKS0+ZGF0YWJhc2VUaHJlYWQoKS0+cmVjb3JkRGF0
YWJhc2VPcGVuKG1fY2xvc2VyLmdldCgpKTsKKyAgICByZXR1cm4gdHJ1ZTsKIH0KIAogdm9pZCBE
YXRhYmFzZTo6Y2hhbmdlVmVyc2lvbihjb25zdCBTdHJpbmcmIG9sZFZlcnNpb24sIGNvbnN0IFN0
cmluZyYgbmV3VmVyc2lvbiwKQEAgLTM1Nyw3ICs0NDEsNyBAQCBwcml2YXRlOgogCiB2b2lkIERh
dGFiYXNlOjpzY2hlZHVsZVRyYW5zYWN0aW9uQ2FsbGJhY2soU1FMVHJhbnNhY3Rpb24qIHRyYW5z
YWN0aW9uKQogewotICAgIG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dC0+cG9zdFRhc2soRGVsaXZl
clBlbmRpbmdDYWxsYmFja1Rhc2s6OmNyZWF0ZSh0cmFuc2FjdGlvbikpOworICAgIHNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQoKS0+cG9zdFRhc2soRGVsaXZlclBlbmRpbmdDYWxsYmFja1Rhc2s6OmNy
ZWF0ZSh0cmFuc2FjdGlvbikpOwogfQogCiBWZWN0b3I8U3RyaW5nPiBEYXRhYmFzZTo6cGVyZm9y
bUdldFRhYmxlTmFtZXMoKQpAQCAtNDE3LDcgKzUwMSw3IEBAIFZlY3RvcjxTdHJpbmc+IERhdGFi
YXNlOjp0YWJsZU5hbWVzKCkKIAogU2VjdXJpdHlPcmlnaW4qIERhdGFiYXNlOjpzZWN1cml0eU9y
aWdpbigpIGNvbnN0CiB7Ci0gICAgaWYgKG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dC0+aXNDb250
ZXh0VGhyZWFkKCkpCisgICAgaWYgKHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKS0+aXNDb250ZXh0
VGhyZWFkKCkpCiAgICAgICAgIHJldHVybiBtX2NvbnRleHRUaHJlYWRTZWN1cml0eU9yaWdpbi5n
ZXQoKTsKICAgICBpZiAoY3VycmVudFRocmVhZCgpID09IGRhdGFiYXNlQ29udGV4dCgpLT5kYXRh
YmFzZVRocmVhZCgpLT5nZXRUaHJlYWRJRCgpKQogICAgICAgICByZXR1cm4gbV9kYXRhYmFzZVRo
cmVhZFNlY3VyaXR5T3JpZ2luLmdldCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZS5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJk
YXRhYmFzZS9EYXRhYmFzZS5oCmluZGV4IDBlNTQwMjJjNTM3ZDJlMjU0NDM4MGE0NWRkYzc3ZDUw
Y2Y2MWE2NDkuLjNkYTE0N2M3ZTg4YjM1NmE3MGY4ZDU1ZDc3ZDI2NGNhYjU5N2JiMDAgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2UuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlLmgKQEAgLTMyLDEz
ICszMiwxNyBAQAogI2lmIEVOQUJMRShTUUxfREFUQUJBU0UpCiAKICNpbmNsdWRlICJBYnN0cmFj
dERhdGFiYXNlLmgiCisjaW5jbHVkZSAiRGF0YWJhc2VUcmFja2VyLmgiCiAjaW5jbHVkZSA8d3Rm
L0RlcXVlLmg+CiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9X
VEZTdHJpbmcuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitjbGFzcyBEYXRhYmFzZTsKIGNs
YXNzIERhdGFiYXNlQ2FsbGJhY2s7CitjbGFzcyBEYXRhYmFzZVRocmVhZDsKK2NsYXNzIERhdGFi
YXNlVHJhY2tlckFzeW5jaHJvbm91c1JlbW92ZXI7CiBjbGFzcyBTY3JpcHRFeGVjdXRpb25Db250
ZXh0OwogY2xhc3MgU2VjdXJpdHlPcmlnaW47CiBjbGFzcyBTUUxUcmFuc2FjdGlvbjsKQEAgLTUx
LDcgKzU1LDMzIEBAIGNsYXNzIFZvaWRDYWxsYmFjazsKIAogdHlwZWRlZiBpbnQgRXhjZXB0aW9u
Q29kZTsKIAorY2xhc3MgRGF0YWJhc2VDbG9zZXIgOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50
ZWQ8RGF0YWJhc2VDbG9zZXI+IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxEYXRh
YmFzZUNsb3Nlcj4gY3JlYXRlKFBhc3NSZWZQdHI8QWJzdHJhY3REYXRhYmFzZTo6Q29yZT4gY29y
ZSwgRGF0YWJhc2VUaHJlYWQqIHRocmVhZCwgRGF0YWJhc2UqIGRhdGFiYXNlKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBEYXRhYmFzZUNsb3Nlcihjb3JlLCB0aHJlYWQsIGRh
dGFiYXNlKSk7CisgICAgfQorICAgIH5EYXRhYmFzZUNsb3NlcigpOworICAgIHZvaWQgY2xvc2Uo
KTsKKyAgICB2b2lkIGNsb3NlSW5EZXN0cnVjdG9yKCk7CisKK3ByaXZhdGU6CisgICAgRGF0YWJh
c2VDbG9zZXIoUGFzc1JlZlB0cjxBYnN0cmFjdERhdGFiYXNlOjpDb3JlPiwgRGF0YWJhc2VUaHJl
YWQqLCBEYXRhYmFzZSopOworCisgICAgUmVmUHRyPEFic3RyYWN0RGF0YWJhc2U6OkNvcmU+IG1f
Y29yZTsKKyAgICAvLyBUaGVzZSByYXcgcG9pbnRlcnMgYXJlIGd1YXJhbnRlZWQgdG8gYmUgYWxp
dmUgb3IgMC4KKyAgICBEYXRhYmFzZVRocmVhZCogbV90aHJlYWQ7CisgICAgRGF0YWJhc2UqIG1f
ZGF0YWJhc2U7CisgICAgT3duUHRyPERhdGFiYXNlVHJhY2tlckFzeW5jaHJvbm91c1JlbW92ZXI+
IG1fdHJhY2tlclJlbW92ZXI7CisgICAgUmVmUHRyPFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ+IG1f
c2NyaXB0RXhlY3V0aW9uQ29udGV4dDsKKyNpZm5kZWYgTkRFQlVHCisgICAgVGhyZWFkSWRlbnRp
ZmllciBtX3RocmVhZElkOworI2VuZGlmCisgICAgTXV0ZXggbV9tdXRleDsKK307CisKIGNsYXNz
IERhdGFiYXNlIDogcHVibGljIEFic3RyYWN0RGF0YWJhc2UgeworICAgIGZyaWVuZCBjbGFzcyBE
YXRhYmFzZUNsb3NlcjsKIHB1YmxpYzoKICAgICB2aXJ0dWFsIH5EYXRhYmFzZSgpOwogCkBAIC04
NCw2ICsxMTQsOSBAQCBwdWJsaWM6CiAgICAgU1FMVHJhbnNhY3Rpb25DbGllbnQqIHRyYW5zYWN0
aW9uQ2xpZW50KCkgY29uc3Q7CiAgICAgU1FMVHJhbnNhY3Rpb25Db29yZGluYXRvciogdHJhbnNh
Y3Rpb25Db29yZGluYXRvcigpIGNvbnN0OwogCisgICAgLy8gRklYTUUgdGhpcyBpcyBhIHBvb3Ig
cGxhY2UgZm9yIHRoaXMuCisgICAgc3RhdGljIHZvaWQgZGlzcG9zZU9mU2NyaXB0RXhlY3V0aW9u
Q29udGV4dChQYXNzUmVmUHRyPFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ+KTsKKwogcHJpdmF0ZToK
ICAgICBjbGFzcyBEYXRhYmFzZU9wZW5UYXNrOwogICAgIGNsYXNzIERhdGFiYXNlQ2xvc2VUYXNr
OwpAQCAtMTExLDYgKzE0NCw3IEBAIHByaXZhdGU6CiAgICAgYm9vbCBtX2lzVHJhbnNhY3Rpb25R
dWV1ZUVuYWJsZWQ7CiAKICAgICBSZWZQdHI8U2VjdXJpdHlPcmlnaW4+IG1fZGF0YWJhc2VUaHJl
YWRTZWN1cml0eU9yaWdpbjsKKyAgICBSZWZQdHI8RGF0YWJhc2VDbG9zZXI+IG1fY2xvc2VyOwog
CiAgICAgYm9vbCBtX2RlbGV0ZWQ7CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZVN5bmMuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJkYXRhYmFzZS9EYXRhYmFzZVN5bmMuY3BwCmluZGV4IDhiNzQ0YjhjNjhjM2ZjYjA0YmQx
MzE1NmFiZDcwYjNjNjEyMzE5MTAuLjM2NDg1ZGNiMDlmNDQ5OWE3OGQ0ZjZjMjYxZDU1ZGI2MmY3
OWYwN2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0
YWJhc2VTeW5jLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0Rh
dGFiYXNlU3luYy5jcHAKQEAgLTg0LDE3ICs4NCwxNyBAQCBEYXRhYmFzZVN5bmM6OkRhdGFiYXNl
U3luYyhTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBjb25zdCBTdHJpbmcmIG5hbWUs
CiAKIERhdGFiYXNlU3luYzo6fkRhdGFiYXNlU3luYygpCiB7Ci0gICAgQVNTRVJUKG1fc2NyaXB0
RXhlY3V0aW9uQ29udGV4dC0+aXNDb250ZXh0VGhyZWFkKCkpOworICAgIEFTU0VSVChzY3JpcHRF
eGVjdXRpb25Db250ZXh0KCktPmlzQ29udGV4dFRocmVhZCgpKTsKIAogICAgIGlmIChvcGVuZWQo
KSkgewogICAgICAgICBEYXRhYmFzZVRyYWNrZXI6OnRyYWNrZXIoKS5yZW1vdmVPcGVuRGF0YWJh
c2UodGhpcyk7Ci0gICAgICAgIGNsb3NlRGF0YWJhc2UoKTsKKyAgICAgICAgY29yZSgpLT5jbG9z
ZSgpOwogICAgIH0KIH0KIAogdm9pZCBEYXRhYmFzZVN5bmM6OmNoYW5nZVZlcnNpb24oY29uc3Qg
U3RyaW5nJiBvbGRWZXJzaW9uLCBjb25zdCBTdHJpbmcmIG5ld1ZlcnNpb24sIFBhc3NSZWZQdHI8
U1FMVHJhbnNhY3Rpb25TeW5jQ2FsbGJhY2s+IGNoYW5nZVZlcnNpb25DYWxsYmFjaywgRXhjZXB0
aW9uQ29kZSYgZWMpCiB7Ci0gICAgQVNTRVJUKG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dC0+aXND
b250ZXh0VGhyZWFkKCkpOworICAgIEFTU0VSVChzY3JpcHRFeGVjdXRpb25Db250ZXh0KCktPmlz
Q29udGV4dFRocmVhZCgpKTsKIAogICAgIGlmIChzcWxpdGVEYXRhYmFzZSgpLnRyYW5zYWN0aW9u
SW5Qcm9ncmVzcygpKSB7CiAgICAgICAgIHJlcG9ydENoYW5nZVZlcnNpb25SZXN1bHQoMSwgU1FM
RXhjZXB0aW9uOjpEQVRBQkFTRV9FUlIsIDApOwpAQCAtMTYwLDcgKzE2MCw3IEBAIHZvaWQgRGF0
YWJhc2VTeW5jOjpyZWFkVHJhbnNhY3Rpb24oUGFzc1JlZlB0cjxTUUxUcmFuc2FjdGlvblN5bmND
YWxsYmFjaz4gY2FsbGJhCiAKIHZvaWQgRGF0YWJhc2VTeW5jOjpydW5UcmFuc2FjdGlvbihQYXNz
UmVmUHRyPFNRTFRyYW5zYWN0aW9uU3luY0NhbGxiYWNrPiBjYWxsYmFjaywgYm9vbCByZWFkT25s
eSwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7Ci0gICAgQVNTRVJUKG1fc2NyaXB0RXhlY3V0aW9uQ29u
dGV4dC0+aXNDb250ZXh0VGhyZWFkKCkpOworICAgIEFTU0VSVChzY3JpcHRFeGVjdXRpb25Db250
ZXh0KCktPmlzQ29udGV4dFRocmVhZCgpKTsKIAogICAgIGlmIChzcWxpdGVEYXRhYmFzZSgpLnRy
YW5zYWN0aW9uSW5Qcm9ncmVzcygpKSB7CiAgICAgICAgIHNldExhc3RFcnJvck1lc3NhZ2UoInVu
YWJsZSB0byBzdGFydCBhIHRyYW5zYWN0aW9uIGZyb20gd2l0aGluIGEgdHJhbnNhY3Rpb24iKTsK
QEAgLTIwNSwxNCArMjA1LDE0IEBAIHByaXZhdGU6CiAKIHZvaWQgRGF0YWJhc2VTeW5jOjpjbG9z
ZUltbWVkaWF0ZWx5KCkKIHsKLSAgICBBU1NFUlQobV9zY3JpcHRFeGVjdXRpb25Db250ZXh0LT5p
c0NvbnRleHRUaHJlYWQoKSk7CisgICAgQVNTRVJUKHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKS0+
aXNDb250ZXh0VGhyZWFkKCkpOwogCiAgICAgaWYgKCFvcGVuZWQoKSkKICAgICAgICAgcmV0dXJu
OwogCiAgICAgbG9nRXJyb3JNZXNzYWdlKCJmb3JjaWJseSBjbG9zaW5nIGRhdGFiYXNlIik7CiAg
ICAgRGF0YWJhc2VUcmFja2VyOjp0cmFja2VyKCkucmVtb3ZlT3BlbkRhdGFiYXNlKHRoaXMpOwot
ICAgIGNsb3NlRGF0YWJhc2UoKTsKKyAgICBjb3JlKCktPmNsb3NlKCk7CiB9CiAKIH0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0
YWJhc2UvRGF0YWJhc2VUYXNrLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJh
c2UvRGF0YWJhc2VUYXNrLmNwcAppbmRleCAwNjY3MjVmZTM3NzJhYTQ4ZGUwYWQ5OWU1MTNkN2Y5
ZGZmMmM4OWUyLi45MmI3YjA1NGQ1YzlhMDk3MjA1N2I1ODczN2E2NzcwZTc1NmZiZGYzIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlVGFzay5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZVRhc2su
Y3BwCkBAIC01OSw3ICs1OSw3IEBAIHZvaWQgRGF0YWJhc2VUYXNrU3luY2hyb25pemVyOjp0YXNr
Q29tcGxldGVkKCkKICAgICBtX3N5bmNocm9ub3VzTXV0ZXgudW5sb2NrKCk7CiB9CiAKLURhdGFi
YXNlVGFzazo6RGF0YWJhc2VUYXNrKERhdGFiYXNlKiBkYXRhYmFzZSwgRGF0YWJhc2VUYXNrU3lu
Y2hyb25pemVyKiBzeW5jaHJvbml6ZXIpCitEYXRhYmFzZVRhc2s6OkRhdGFiYXNlVGFzayhQYXNz
UmVmUHRyPERhdGFiYXNlPiBkYXRhYmFzZSwgRGF0YWJhc2VUYXNrU3luY2hyb25pemVyKiBzeW5j
aHJvbml6ZXIpCiAgICAgOiBtX2RhdGFiYXNlKGRhdGFiYXNlKQogICAgICwgbV9zeW5jaHJvbml6
ZXIoc3luY2hyb25pemVyKQogI2lmICFMT0dfRElTQUJMRUQKQEAgLTg0LDcgKzg0LDggQEAgdm9p
ZCBEYXRhYmFzZVRhc2s6OnBlcmZvcm1UYXNrKCkKIAogICAgIExPRyhTdG9yYWdlQVBJLCAiUGVy
Zm9ybWluZyAlcyAlcFxuIiwgZGVidWdUYXNrTmFtZSgpLCB0aGlzKTsKIAotICAgIG1fZGF0YWJh
c2UtPnJlc2V0QXV0aG9yaXplcigpOworICAgIGlmIChtX2RhdGFiYXNlKQorICAgICAgICBtX2Rh
dGFiYXNlLT5yZXNldEF1dGhvcml6ZXIoKTsKICAgICBkb1BlcmZvcm1UYXNrKCk7CiAKICAgICBp
ZiAobV9zeW5jaHJvbml6ZXIpCkBAIC05OCw3ICs5OSw3IEBAIHZvaWQgRGF0YWJhc2VUYXNrOjpw
ZXJmb3JtVGFzaygpCiAvLyAqKiogRGF0YWJhc2VPcGVuVGFzayAqKioKIC8vIE9wZW5zIHRoZSBk
YXRhYmFzZSBmaWxlIGFuZCB2ZXJpZmllcyB0aGUgdmVyc2lvbiBtYXRjaGVzIHRoZSBleHBlY3Rl
ZCB2ZXJzaW9uLgogCi1EYXRhYmFzZTo6RGF0YWJhc2VPcGVuVGFzazo6RGF0YWJhc2VPcGVuVGFz
ayhEYXRhYmFzZSogZGF0YWJhc2UsIGJvb2wgc2V0VmVyc2lvbkluTmV3RGF0YWJhc2UsIERhdGFi
YXNlVGFza1N5bmNocm9uaXplciogc3luY2hyb25pemVyLCBFeGNlcHRpb25Db2RlJiBjb2RlLCBT
dHJpbmcmIGVycm9yTWVzc2FnZSwgYm9vbCYgc3VjY2VzcykKK0RhdGFiYXNlOjpEYXRhYmFzZU9w
ZW5UYXNrOjpEYXRhYmFzZU9wZW5UYXNrKFBhc3NSZWZQdHI8RGF0YWJhc2U+IGRhdGFiYXNlLCBi
b29sIHNldFZlcnNpb25Jbk5ld0RhdGFiYXNlLCBEYXRhYmFzZVRhc2tTeW5jaHJvbml6ZXIqIHN5
bmNocm9uaXplciwgRXhjZXB0aW9uQ29kZSYgY29kZSwgU3RyaW5nJiBlcnJvck1lc3NhZ2UsIGJv
b2wmIHN1Y2Nlc3MpCiAgICAgOiBEYXRhYmFzZVRhc2soZGF0YWJhc2UsIHN5bmNocm9uaXplcikK
ICAgICAsIG1fc2V0VmVyc2lvbkluTmV3RGF0YWJhc2Uoc2V0VmVyc2lvbkluTmV3RGF0YWJhc2Up
CiAgICAgLCBtX2NvZGUoY29kZSkKQEAgLTEyNiw3ICsxMjcsNyBAQCBjb25zdCBjaGFyKiBEYXRh
YmFzZTo6RGF0YWJhc2VPcGVuVGFzazo6ZGVidWdUYXNrTmFtZSgpIGNvbnN0CiAvLyAqKiogRGF0
YWJhc2VDbG9zZVRhc2sgKioqCiAvLyBDbG9zZXMgdGhlIGRhdGFiYXNlLgogCi1EYXRhYmFzZTo6
RGF0YWJhc2VDbG9zZVRhc2s6OkRhdGFiYXNlQ2xvc2VUYXNrKERhdGFiYXNlKiBkYXRhYmFzZSwg
RGF0YWJhc2VUYXNrU3luY2hyb25pemVyKiBzeW5jaHJvbml6ZXIpCitEYXRhYmFzZTo6RGF0YWJh
c2VDbG9zZVRhc2s6OkRhdGFiYXNlQ2xvc2VUYXNrKFBhc3NSZWZQdHI8RGF0YWJhc2U+IGRhdGFi
YXNlLCBEYXRhYmFzZVRhc2tTeW5jaHJvbml6ZXIqIHN5bmNocm9uaXplcikKICAgICA6IERhdGFi
YXNlVGFzayhkYXRhYmFzZSwgc3luY2hyb25pemVyKQogewogfQpAQCAtMTY4LDcgKzE2OSw3IEBA
IGNvbnN0IGNoYXIqIERhdGFiYXNlOjpEYXRhYmFzZVRyYW5zYWN0aW9uVGFzazo6ZGVidWdUYXNr
TmFtZSgpIGNvbnN0CiAvLyAqKiogRGF0YWJhc2VUYWJsZU5hbWVzVGFzayAqKioKIC8vIFJldHJp
ZXZlcyBhIGxpc3Qgb2YgYWxsIHRhYmxlcyBpbiB0aGUgZGF0YWJhc2UgLSBmb3IgV2ViSW5zcGVj
dG9yIHN1cHBvcnQuCiAKLURhdGFiYXNlOjpEYXRhYmFzZVRhYmxlTmFtZXNUYXNrOjpEYXRhYmFz
ZVRhYmxlTmFtZXNUYXNrKERhdGFiYXNlKiBkYXRhYmFzZSwgRGF0YWJhc2VUYXNrU3luY2hyb25p
emVyKiBzeW5jaHJvbml6ZXIsIFZlY3RvcjxTdHJpbmc+JiBuYW1lcykKK0RhdGFiYXNlOjpEYXRh
YmFzZVRhYmxlTmFtZXNUYXNrOjpEYXRhYmFzZVRhYmxlTmFtZXNUYXNrKFBhc3NSZWZQdHI8RGF0
YWJhc2U+IGRhdGFiYXNlLCBEYXRhYmFzZVRhc2tTeW5jaHJvbml6ZXIqIHN5bmNocm9uaXplciwg
VmVjdG9yPFN0cmluZz4mIG5hbWVzKQogICAgIDogRGF0YWJhc2VUYXNrKGRhdGFiYXNlLCBzeW5j
aHJvbml6ZXIpCiAgICAgLCBtX3RhYmxlTmFtZXMobmFtZXMpCiB7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlVGFzay5oIGIvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZVRhc2suaAppbmRleCA0ZmEyOTBmYWNl
ZTU2ODA4ZmRlMGIzYjNhMWRmNmE4ODk4YjhjODA4Li44ODM3YThlYTk0ZTIyMzU1YjAzZTFhODcx
NmI1YWJlZjMyMmQ2NTEzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRh
dGFiYXNlL0RhdGFiYXNlVGFzay5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0
YWJhc2UvRGF0YWJhc2VUYXNrLmgKQEAgLTc3LDE5ICs3NywxOSBAQCBwdWJsaWM6CiAKICAgICB2
b2lkIHBlcmZvcm1UYXNrKCk7CiAKLSAgICBEYXRhYmFzZSogZGF0YWJhc2UoKSBjb25zdCB7IHJl
dHVybiBtX2RhdGFiYXNlOyB9CisgICAgRGF0YWJhc2UqIGRhdGFiYXNlKCkgY29uc3QgeyByZXR1
cm4gbV9kYXRhYmFzZS5nZXQoKTsgfQogI2lmbmRlZiBOREVCVUcKICAgICBib29sIGhhc1N5bmNo
cm9uaXplcigpIGNvbnN0IHsgcmV0dXJuIG1fc3luY2hyb25pemVyOyB9CiAgICAgYm9vbCBoYXND
aGVja2VkRm9yVGVybWluYXRpb24oKSBjb25zdCB7IHJldHVybiBtX3N5bmNocm9uaXplci0+aGFz
Q2hlY2tlZEZvclRlcm1pbmF0aW9uKCk7IH0KICNlbmRpZgogCiBwcm90ZWN0ZWQ6Ci0gICAgRGF0
YWJhc2VUYXNrKERhdGFiYXNlKiwgRGF0YWJhc2VUYXNrU3luY2hyb25pemVyKik7CisgICAgRGF0
YWJhc2VUYXNrKFBhc3NSZWZQdHI8RGF0YWJhc2U+LCBEYXRhYmFzZVRhc2tTeW5jaHJvbml6ZXIq
KTsKIAogcHJpdmF0ZToKICAgICB2aXJ0dWFsIHZvaWQgZG9QZXJmb3JtVGFzaygpID0gMDsKIAot
ICAgIERhdGFiYXNlKiBtX2RhdGFiYXNlOworICAgIFJlZlB0cjxEYXRhYmFzZT4gbV9kYXRhYmFz
ZTsKICAgICBEYXRhYmFzZVRhc2tTeW5jaHJvbml6ZXIqIG1fc3luY2hyb25pemVyOwogCiAjaWYg
IUxPR19ESVNBQkxFRApAQCAtMTAwLDEzICsxMDAsMTMgQEAgcHJpdmF0ZToKIAogY2xhc3MgRGF0
YWJhc2U6OkRhdGFiYXNlT3BlblRhc2sgOiBwdWJsaWMgRGF0YWJhc2VUYXNrIHsKIHB1YmxpYzoK
LSAgICBzdGF0aWMgUGFzc093blB0cjxEYXRhYmFzZU9wZW5UYXNrPiBjcmVhdGUoRGF0YWJhc2Uq
IGRiLCBib29sIHNldFZlcnNpb25Jbk5ld0RhdGFiYXNlLCBEYXRhYmFzZVRhc2tTeW5jaHJvbml6
ZXIqIHN5bmNocm9uaXplciwgRXhjZXB0aW9uQ29kZSYgY29kZSwgU3RyaW5nJiBlcnJvck1lc3Nh
Z2UsIGJvb2wmIHN1Y2Nlc3MpCisgICAgc3RhdGljIFBhc3NPd25QdHI8RGF0YWJhc2VPcGVuVGFz
az4gY3JlYXRlKFBhc3NSZWZQdHI8RGF0YWJhc2U+IGRiLCBib29sIHNldFZlcnNpb25Jbk5ld0Rh
dGFiYXNlLCBEYXRhYmFzZVRhc2tTeW5jaHJvbml6ZXIqIHN5bmNocm9uaXplciwgRXhjZXB0aW9u
Q29kZSYgY29kZSwgU3RyaW5nJiBlcnJvck1lc3NhZ2UsIGJvb2wmIHN1Y2Nlc3MpCiAgICAgewog
ICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3IERhdGFiYXNlT3BlblRhc2soZGIsIHNldFZlcnNp
b25Jbk5ld0RhdGFiYXNlLCBzeW5jaHJvbml6ZXIsIGNvZGUsIGVycm9yTWVzc2FnZSwgc3VjY2Vz
cykpOwogICAgIH0KIAogcHJpdmF0ZToKLSAgICBEYXRhYmFzZU9wZW5UYXNrKERhdGFiYXNlKiwg
Ym9vbCBzZXRWZXJzaW9uSW5OZXdEYXRhYmFzZSwgRGF0YWJhc2VUYXNrU3luY2hyb25pemVyKiwg
RXhjZXB0aW9uQ29kZSYsIFN0cmluZyYgZXJyb3JNZXNzYWdlLCBib29sJiBzdWNjZXNzKTsKKyAg
ICBEYXRhYmFzZU9wZW5UYXNrKFBhc3NSZWZQdHI8RGF0YWJhc2U+LCBib29sIHNldFZlcnNpb25J
bk5ld0RhdGFiYXNlLCBEYXRhYmFzZVRhc2tTeW5jaHJvbml6ZXIqLCBFeGNlcHRpb25Db2RlJiwg
U3RyaW5nJiBlcnJvck1lc3NhZ2UsIGJvb2wmIHN1Y2Nlc3MpOwogCiAgICAgdmlydHVhbCB2b2lk
IGRvUGVyZm9ybVRhc2soKTsKICNpZiAhTE9HX0RJU0FCTEVECkBAIC0xMjEsMTMgKzEyMSwxMyBA
QCBwcml2YXRlOgogCiBjbGFzcyBEYXRhYmFzZTo6RGF0YWJhc2VDbG9zZVRhc2sgOiBwdWJsaWMg
RGF0YWJhc2VUYXNrIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc093blB0cjxEYXRhYmFzZUNs
b3NlVGFzaz4gY3JlYXRlKERhdGFiYXNlKiBkYiwgRGF0YWJhc2VUYXNrU3luY2hyb25pemVyKiBz
eW5jaHJvbml6ZXIpCisgICAgc3RhdGljIFBhc3NPd25QdHI8RGF0YWJhc2VDbG9zZVRhc2s+IGNy
ZWF0ZShQYXNzUmVmUHRyPERhdGFiYXNlPiBkYiwgRGF0YWJhc2VUYXNrU3luY2hyb25pemVyKiBz
eW5jaHJvbml6ZXIpCiAgICAgewogICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3IERhdGFiYXNl
Q2xvc2VUYXNrKGRiLCBzeW5jaHJvbml6ZXIpKTsKICAgICB9CiAKIHByaXZhdGU6Ci0gICAgRGF0
YWJhc2VDbG9zZVRhc2soRGF0YWJhc2UqLCBEYXRhYmFzZVRhc2tTeW5jaHJvbml6ZXIqKTsKKyAg
ICBEYXRhYmFzZUNsb3NlVGFzayhQYXNzUmVmUHRyPERhdGFiYXNlPiwgRGF0YWJhc2VUYXNrU3lu
Y2hyb25pemVyKik7CiAKICAgICB2aXJ0dWFsIHZvaWQgZG9QZXJmb3JtVGFzaygpOwogI2lmICFM
T0dfRElTQUJMRUQKQEAgLTE1OCwxMyArMTU4LDEzIEBAIHByaXZhdGU6CiAKIGNsYXNzIERhdGFi
YXNlOjpEYXRhYmFzZVRhYmxlTmFtZXNUYXNrIDogcHVibGljIERhdGFiYXNlVGFzayB7CiBwdWJs
aWM6Ci0gICAgc3RhdGljIFBhc3NPd25QdHI8RGF0YWJhc2VUYWJsZU5hbWVzVGFzaz4gY3JlYXRl
KERhdGFiYXNlKiBkYiwgRGF0YWJhc2VUYXNrU3luY2hyb25pemVyKiBzeW5jaHJvbml6ZXIsIFZl
Y3RvcjxTdHJpbmc+JiBuYW1lcykKKyAgICBzdGF0aWMgUGFzc093blB0cjxEYXRhYmFzZVRhYmxl
TmFtZXNUYXNrPiBjcmVhdGUoUGFzc1JlZlB0cjxEYXRhYmFzZT4gZGIsIERhdGFiYXNlVGFza1N5
bmNocm9uaXplciogc3luY2hyb25pemVyLCBWZWN0b3I8U3RyaW5nPiYgbmFtZXMpCiAgICAgewog
ICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3IERhdGFiYXNlVGFibGVOYW1lc1Rhc2soZGIsIHN5
bmNocm9uaXplciwgbmFtZXMpKTsKICAgICB9CiAKIHByaXZhdGU6Ci0gICAgRGF0YWJhc2VUYWJs
ZU5hbWVzVGFzayhEYXRhYmFzZSosIERhdGFiYXNlVGFza1N5bmNocm9uaXplciosIFZlY3RvcjxT
dHJpbmc+JiBuYW1lcyk7CisgICAgRGF0YWJhc2VUYWJsZU5hbWVzVGFzayhQYXNzUmVmUHRyPERh
dGFiYXNlPiwgRGF0YWJhc2VUYXNrU3luY2hyb25pemVyKiwgVmVjdG9yPFN0cmluZz4mIG5hbWVz
KTsKIAogICAgIHZpcnR1YWwgdm9pZCBkb1BlcmZvcm1UYXNrKCk7CiAjaWYgIUxPR19ESVNBQkxF
RApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFz
ZVRocmVhZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNl
VGhyZWFkLmNwcAppbmRleCBkNzcxYjFjYTFlYzRhYWE3NGY5MzcyZGY1MDllNjJjODdiZmMyMjEw
Li42MmRlMDYzYWVmNTA0ODdjNTFjYWRlOThlNzA2MjA3NjViODczMWI3IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlVGhyZWFkLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlVGhyZWFkLmNwcApA
QCAtMTM2LDIwICsxMzYsNTMgQEAgdm9pZCBEYXRhYmFzZVRocmVhZDo6ZGF0YWJhc2VUaHJlYWQo
KQogICAgICAgICBjbGVhbnVwU3luYy0+dGFza0NvbXBsZXRlZCgpOwogfQogCi12b2lkIERhdGFi
YXNlVGhyZWFkOjpyZWNvcmREYXRhYmFzZU9wZW4oRGF0YWJhc2UqIGRhdGFiYXNlKQordm9pZCBE
YXRhYmFzZVRocmVhZDo6cmVjb3JkRGF0YWJhc2VPcGVuKERhdGFiYXNlQ2xvc2VyKiBjbG9zZXIp
CiB7CiAgICAgQVNTRVJUKGN1cnJlbnRUaHJlYWQoKSA9PSBtX3RocmVhZElEKTsKLSAgICBBU1NF
UlQoZGF0YWJhc2UpOwotICAgIEFTU0VSVCghbV9vcGVuRGF0YWJhc2VTZXQuY29udGFpbnMoZGF0
YWJhc2UpKTsKLSAgICBtX29wZW5EYXRhYmFzZVNldC5hZGQoZGF0YWJhc2UpOworICAgIEFTU0VS
VChjbG9zZXIpOworICAgIEFTU0VSVCghbV9vcGVuRGF0YWJhc2VTZXQuY29udGFpbnMoY2xvc2Vy
KSk7CisgICAgbV9vcGVuRGF0YWJhc2VTZXQuYWRkKGNsb3Nlcik7CiB9CiAKLXZvaWQgRGF0YWJh
c2VUaHJlYWQ6OnJlY29yZERhdGFiYXNlQ2xvc2VkKERhdGFiYXNlKiBkYXRhYmFzZSkKK3ZvaWQg
RGF0YWJhc2VUaHJlYWQ6OnJlY29yZERhdGFiYXNlQ2xvc2VkKERhdGFiYXNlQ2xvc2VyKiBjbG9z
ZXIpCiB7CiAgICAgQVNTRVJUKGN1cnJlbnRUaHJlYWQoKSA9PSBtX3RocmVhZElEKTsKLSAgICBB
U1NFUlQoZGF0YWJhc2UpOwotICAgIEFTU0VSVChtX3F1ZXVlLmtpbGxlZCgpIHx8IG1fb3BlbkRh
dGFiYXNlU2V0LmNvbnRhaW5zKGRhdGFiYXNlKSk7Ci0gICAgbV9vcGVuRGF0YWJhc2VTZXQucmVt
b3ZlKGRhdGFiYXNlKTsKKyAgICBBU1NFUlQoY2xvc2VyKTsKKyAgICBBU1NFUlQobV9xdWV1ZS5r
aWxsZWQoKSB8fCBtX29wZW5EYXRhYmFzZVNldC5jb250YWlucyhjbG9zZXIpKTsKKyAgICBtX29w
ZW5EYXRhYmFzZVNldC5yZW1vdmUoY2xvc2VyKTsKK30KKworY2xhc3MgQ2xvc2VEYXRhYmFzZUNs
b3NlclRhc2sgOiBwdWJsaWMgRGF0YWJhc2VUYXNrIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFz
c093blB0cjxDbG9zZURhdGFiYXNlQ2xvc2VyVGFzaz4gY3JlYXRlKFBhc3NSZWZQdHI8RGF0YWJh
c2VDbG9zZXI+IGNsb3NlcikKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFB0cihuZXcgQ2xv
c2VEYXRhYmFzZUNsb3NlclRhc2soY2xvc2VyKSk7CisgICAgfQorCisgICAgdmlydHVhbCB2b2lk
IGRvUGVyZm9ybVRhc2soKQorICAgIHsKKyAgICAgICAgbV9jbG9zZXItPmNsb3NlKCk7CisgICAg
fQorCisjaWYgIUxPR19ESVNBQkxFRAorICAgIHZpcnR1YWwgY29uc3QgY2hhciogZGVidWdUYXNr
TmFtZSgpIGNvbnN0IHsgcmV0dXJuICJDbG9zZURhdGFiYXNlQ2xvc2VyVGFzayI7IH0KKyNlbmRp
ZgorCitwcml2YXRlOgorICAgIENsb3NlRGF0YWJhc2VDbG9zZXJUYXNrKFBhc3NSZWZQdHI8RGF0
YWJhc2VDbG9zZXI+IGNsb3NlcikKKyAgICA6IERhdGFiYXNlVGFzaygwLCAwKQorICAgICwgbV9j
bG9zZXIoY2xvc2VyKQorICAgIHsKKyAgICB9CisKKyAgICBSZWZQdHI8RGF0YWJhc2VDbG9zZXI+
IG1fY2xvc2VyOworfTsKKwordm9pZCBEYXRhYmFzZVRocmVhZDo6cmVjb3JkRGF0YWJhc2VTaG91
bGRCZUNsb3NlZChEYXRhYmFzZUNsb3NlciogY2xvc2VyKQoreworICAgIEFTU0VSVChjbG9zZXIp
OworICAgIGlmICghbV9xdWV1ZS5raWxsZWQoKSkKKyAgICAgICAgbV9xdWV1ZS5wcmVwZW5kKENs
b3NlRGF0YWJhc2VDbG9zZXJUYXNrOjpjcmVhdGUoY2xvc2VyKSk7CiB9CiAKIHZvaWQgRGF0YWJh
c2VUaHJlYWQ6OnNjaGVkdWxlVGFzayhQYXNzT3duUHRyPERhdGFiYXNlVGFzaz4gdGFzaykKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VUaHJl
YWQuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VUaHJlYWQu
aAppbmRleCBmYTRmZDA4OGY5YjUyNTZhNjYyMzgzNjQ5NTA4NTVmNTk0MDZmODVkLi5jOWQ2NzVj
ODE3YTZlOGRmNzQzMTc2YTVkZDM3MWMzMTZkMjAwYjUwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlVGhyZWFkLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZVRocmVhZC5oCkBAIC00Myw2ICs0Myw3
IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIERhdGFiYXNlOworY2xhc3MgRGF0YWJh
c2VDbG9zZXI7CiBjbGFzcyBEYXRhYmFzZVRhc2s7CiBjbGFzcyBEYXRhYmFzZVRhc2tTeW5jaHJv
bml6ZXI7CiBjbGFzcyBEb2N1bWVudDsKQEAgLTYyLDggKzYzLDEwIEBAIHB1YmxpYzoKICAgICB2
b2lkIHNjaGVkdWxlSW1tZWRpYXRlVGFzayhQYXNzT3duUHRyPERhdGFiYXNlVGFzaz4pOyAvLyBU
aGlzIGp1c3QgYWRkcyB0aGUgdGFzayB0byB0aGUgZnJvbnQgb2YgdGhlIHF1ZXVlIC0gdGhlIGNh
bGxlciBuZWVkcyB0byBiZSBleHRyZW1lbHkgY2FyZWZ1bCBub3QgdG8gY3JlYXRlIGRlYWRsb2Nr
cyB3aGVuIHdhaXRpbmcgZm9yIGNvbXBsZXRpb24uCiAgICAgdm9pZCB1bnNjaGVkdWxlRGF0YWJh
c2VUYXNrcyhEYXRhYmFzZSopOwogCi0gICAgdm9pZCByZWNvcmREYXRhYmFzZU9wZW4oRGF0YWJh
c2UqKTsKLSAgICB2b2lkIHJlY29yZERhdGFiYXNlQ2xvc2VkKERhdGFiYXNlKik7CisgICAgdm9p
ZCByZWNvcmREYXRhYmFzZU9wZW4oRGF0YWJhc2VDbG9zZXIqKTsKKyAgICB2b2lkIHJlY29yZERh
dGFiYXNlQ2xvc2VkKERhdGFiYXNlQ2xvc2VyKik7CisgICAgdm9pZCByZWNvcmREYXRhYmFzZVNo
b3VsZEJlQ2xvc2VkKERhdGFiYXNlQ2xvc2VyKik7CisKICAgICBUaHJlYWRJZGVudGlmaWVyIGdl
dFRocmVhZElEKCkgeyByZXR1cm4gbV90aHJlYWRJRDsgfQogCiAgICAgU1FMVHJhbnNhY3Rpb25D
bGllbnQqIHRyYW5zYWN0aW9uQ2xpZW50KCkgeyByZXR1cm4gbV90cmFuc2FjdGlvbkNsaWVudC5n
ZXQoKTsgfQpAQCAtODIsNyArODUsNyBAQCBwcml2YXRlOgogICAgIE1lc3NhZ2VRdWV1ZTxEYXRh
YmFzZVRhc2s+IG1fcXVldWU7CiAKICAgICAvLyBUaGlzIHNldCBrZWVwcyB0cmFjayBvZiB0aGUg
b3BlbiBkYXRhYmFzZXMgdGhhdCBoYXZlIGJlZW4gdXNlZCBvbiB0aGlzIHRocmVhZC4KLSAgICB0
eXBlZGVmIEhhc2hTZXQ8UmVmUHRyPERhdGFiYXNlPiA+IERhdGFiYXNlU2V0OworICAgIHR5cGVk
ZWYgSGFzaFNldDxSZWZQdHI8RGF0YWJhc2VDbG9zZXI+ID4gRGF0YWJhc2VTZXQ7CiAgICAgRGF0
YWJhc2VTZXQgbV9vcGVuRGF0YWJhc2VTZXQ7CiAKICAgICBPd25QdHI8U1FMVHJhbnNhY3Rpb25D
bGllbnQ+IG1fdHJhbnNhY3Rpb25DbGllbnQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlVHJhY2tlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlVHJhY2tlci5jcHAKaW5kZXggNWJkNWU3YjNkMmUx
YzQwMjExYjAxYTYxZDBiZjc4M2NiMzUyNjIyOC4uMjM0MDNiODdiN2FkMzI3MWNhNjI5ODY1OTZj
YzY1ZjI5Y2E1YjFjMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRh
YmFzZS9EYXRhYmFzZVRyYWNrZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
ZGF0YWJhc2UvRGF0YWJhc2VUcmFja2VyLmNwcApAQCAtMzQsNiArMzQsNyBAQAogI2luY2x1ZGUg
IkFic3RyYWN0RGF0YWJhc2UuaCIKICNpbmNsdWRlICJDaHJvbWUuaCIKICNpbmNsdWRlICJDaHJv
bWVDbGllbnQuaCIKKyNpbmNsdWRlICJEYXRhYmFzZS5oIgogI2luY2x1ZGUgIkRhdGFiYXNlQ29u
dGV4dC5oIgogI2luY2x1ZGUgIkRhdGFiYXNlVGhyZWFkLmgiCiAjaW5jbHVkZSAiRGF0YWJhc2VU
cmFja2VyQ2xpZW50LmgiCkBAIC01NDcsMzAgKzU0OCw1NyBAQCB2b2lkIERhdGFiYXNlVHJhY2tl
cjo6YWRkT3BlbkRhdGFiYXNlKEFic3RyYWN0RGF0YWJhc2UqIGRhdGFiYXNlKQogICAgIGRvbmVD
cmVhdGluZ0RhdGFiYXNlKGRhdGFiYXNlLT5zZWN1cml0eU9yaWdpbigpLCBkYXRhYmFzZS0+c3Ry
aW5nSWRlbnRpZmllcigpKTsKIH0KIAotdm9pZCBEYXRhYmFzZVRyYWNrZXI6OnJlbW92ZU9wZW5E
YXRhYmFzZShBYnN0cmFjdERhdGFiYXNlKiBkYXRhYmFzZSkKK0RhdGFiYXNlVHJhY2tlckFzeW5j
aHJvbm91c1JlbW92ZXI6On5EYXRhYmFzZVRyYWNrZXJBc3luY2hyb25vdXNSZW1vdmVyKCkKIHsK
K30KKworY2xhc3MgRGF0YWJhc2VUcmFja2VyQXN5bmNocm9ub3VzUmVtb3ZlckltcGwgOiBwdWJs
aWMgRGF0YWJhc2VUcmFja2VyQXN5bmNocm9ub3VzUmVtb3ZlciB7CitwdWJsaWM6CisgICAgc3Rh
dGljIFBhc3NPd25QdHI8RGF0YWJhc2VUcmFja2VyQXN5bmNocm9ub3VzUmVtb3ZlckltcGw+IGNy
ZWF0ZShQYXNzUmVmUHRyPFNlY3VyaXR5T3JpZ2luPiBzZWN1cml0eU9yaWdpbikKKyAgICB7Cisg
ICAgICAgIHJldHVybiBhZG9wdFB0cihuZXcgRGF0YWJhc2VUcmFja2VyQXN5bmNocm9ub3VzUmVt
b3ZlckltcGwoc2VjdXJpdHlPcmlnaW4pKTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgY29t
cGxldGVSZW1vdmFsKFBhc3NSZWZQdHI8U2NyaXB0RXhlY3V0aW9uQ29udGV4dD4gc2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCkKKyAgICB7CisgICAgICAgIERhdGFiYXNlVHJhY2tlcjo6dHJhY2tlcigp
LmNvbXBsZXRlRGF0YWJhc2VSZW1vdmFsKG1fc2VjdXJpdHlPcmlnaW4uZ2V0KCkpOworICAgICAg
ICBEYXRhYmFzZTo6ZGlzcG9zZU9mU2NyaXB0RXhlY3V0aW9uQ29udGV4dChzY3JpcHRFeGVjdXRp
b25Db250ZXh0KTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgRGF0YWJhc2VUcmFja2VyQXN5bmNo
cm9ub3VzUmVtb3ZlckltcGwoUGFzc1JlZlB0cjxTZWN1cml0eU9yaWdpbj4gc2VjdXJpdHlPcmln
aW4pCisgICAgICAgIDogbV9zZWN1cml0eU9yaWdpbihzZWN1cml0eU9yaWdpbikKKyAgICB7Cisg
ICAgfQorCisgICAgUmVmUHRyPFNlY3VyaXR5T3JpZ2luPiBtX3NlY3VyaXR5T3JpZ2luOworfTsK
KworUGFzc093blB0cjxEYXRhYmFzZVRyYWNrZXJBc3luY2hyb25vdXNSZW1vdmVyPiBEYXRhYmFz
ZVRyYWNrZXI6OnJlbW92ZU9wZW5EYXRhYmFzZShBYnN0cmFjdERhdGFiYXNlKiBkYXRhYmFzZSwg
Ym9vbCBjb21wbGV0ZUFzeW5jaHJvbm91c2x5KQoreworICAgIE93blB0cjxEYXRhYmFzZVRyYWNr
ZXJBc3luY2hyb25vdXNSZW1vdmVyPiByZW1vdmVyOwogICAgIGlmICghZGF0YWJhc2UpCi0gICAg
ICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIHJlbW92ZXIucmVsZWFzZSgpOwogCiAgICAgewog
ICAgICAgICBNdXRleExvY2tlciBvcGVuRGF0YWJhc2VNYXBMb2NrKG1fb3BlbkRhdGFiYXNlTWFw
R3VhcmQpOwogCiAgICAgICAgIGlmICghbV9vcGVuRGF0YWJhc2VNYXApIHsKICAgICAgICAgICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAg
cmV0dXJuIHJlbW92ZXIucmVsZWFzZSgpOwogICAgICAgICB9CiAKICAgICAgICAgU3RyaW5nIG5h
bWUoZGF0YWJhc2UtPnN0cmluZ0lkZW50aWZpZXIoKSk7CiAgICAgICAgIERhdGFiYXNlTmFtZU1h
cCogbmFtZU1hcCA9IG1fb3BlbkRhdGFiYXNlTWFwLT5nZXQoZGF0YWJhc2UtPnNlY3VyaXR5T3Jp
Z2luKCkpOwogICAgICAgICBpZiAoIW5hbWVNYXApIHsKICAgICAgICAgICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwotICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgcmV0dXJuIHJlbW92
ZXIucmVsZWFzZSgpOwogICAgICAgICB9CiAKICAgICAgICAgRGF0YWJhc2VTZXQqIGRhdGFiYXNl
U2V0ID0gbmFtZU1hcC0+Z2V0KG5hbWUpOwogICAgICAgICBpZiAoIWRhdGFiYXNlU2V0KSB7CiAg
ICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgICAgIHJldHVybiByZW1vdmVyLnJlbGVhc2UoKTsKICAgICAgICAgfQogCiAgICAgICAg
IGRhdGFiYXNlU2V0LT5yZW1vdmUoZGF0YWJhc2UpOwpAQCAtNTc4LDIwICs2MDYsMzYgQEAgdm9p
ZCBEYXRhYmFzZVRyYWNrZXI6OnJlbW92ZU9wZW5EYXRhYmFzZShBYnN0cmFjdERhdGFiYXNlKiBk
YXRhYmFzZSkKICAgICAgICAgTE9HKFN0b3JhZ2VBUEksICJSZW1vdmVkIG9wZW4gRGF0YWJhc2Ug
JXMgKCVwKVxuIiwgZGF0YWJhc2UtPnN0cmluZ0lkZW50aWZpZXIoKS5hc2NpaSgpLmRhdGEoKSwg
ZGF0YWJhc2UpOwogCiAgICAgICAgIGlmICghZGF0YWJhc2VTZXQtPmlzRW1wdHkoKSkKLSAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIHJldHVybiByZW1vdmVyLnJlbGVhc2UoKTsKIAog
ICAgICAgICBuYW1lTWFwLT5yZW1vdmUobmFtZSk7CiAgICAgICAgIGRlbGV0ZSBkYXRhYmFzZVNl
dDsKIAogICAgICAgICBpZiAoIW5hbWVNYXAtPmlzRW1wdHkoKSkKLSAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgICAgIHJldHVybiByZW1vdmVyLnJlbGVhc2UoKTsKIAogICAgICAgICBtX29w
ZW5EYXRhYmFzZU1hcC0+cmVtb3ZlKGRhdGFiYXNlLT5zZWN1cml0eU9yaWdpbigpKTsKICAgICAg
ICAgZGVsZXRlIG5hbWVNYXA7CiAKLSAgICAgICAgTG9ja2VyPE9yaWdpblF1b3RhTWFuYWdlcj4g
cXVvdGFNYW5hZ2VyTG9ja2VyKG9yaWdpblF1b3RhTWFuYWdlcigpKTsKLSAgICAgICAgb3JpZ2lu
UXVvdGFNYW5hZ2VyKCkucmVtb3ZlT3JpZ2luKGRhdGFiYXNlLT5zZWN1cml0eU9yaWdpbigpKTsK
KyAgICAgICAgaWYgKCFjb21wbGV0ZUFzeW5jaHJvbm91c2x5KSB7CisgICAgICAgICAgICBMb2Nr
ZXI8T3JpZ2luUXVvdGFNYW5hZ2VyPiBxdW90YU1hbmFnZXJMb2NrZXIob3JpZ2luUXVvdGFNYW5h
Z2VyKCkpOworICAgICAgICAgICAgb3JpZ2luUXVvdGFNYW5hZ2VyKCkucmVtb3ZlT3JpZ2luKGRh
dGFiYXNlLT5zZWN1cml0eU9yaWdpbigpKTsKKyAgICAgICAgICAgIHJldHVybiByZW1vdmVyLnJl
bGVhc2UoKTsKKyAgICAgICAgfQogICAgIH0KKworICAgIHJlbW92ZXIgPSBEYXRhYmFzZVRyYWNr
ZXJBc3luY2hyb25vdXNSZW1vdmVySW1wbDo6Y3JlYXRlKGRhdGFiYXNlLT5zZWN1cml0eU9yaWdp
bigpKTsKKyAgICByZXR1cm4gcmVtb3Zlci5yZWxlYXNlKCk7Cit9CisKK3ZvaWQgRGF0YWJhc2VU
cmFja2VyOjpjb21wbGV0ZURhdGFiYXNlUmVtb3ZhbChTZWN1cml0eU9yaWdpbiogc2VjdXJpdHlP
cmlnaW4pCit7CisgICAgTXV0ZXhMb2NrZXIgb3BlbkRhdGFiYXNlTWFwTG9jayhtX29wZW5EYXRh
YmFzZU1hcEd1YXJkKTsKKyAgICBpZiAobV9vcGVuRGF0YWJhc2VNYXAtPmZpbmQoc2VjdXJpdHlP
cmlnaW4pICE9IG1fb3BlbkRhdGFiYXNlTWFwLT5lbmQoKSkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgTG9ja2VyPE9yaWdpblF1b3RhTWFuYWdlcj4gcXVvdGFNYW5hZ2VyTG9ja2VyKG9yaWdpblF1
b3RhTWFuYWdlcigpKTsKKyAgICBvcmlnaW5RdW90YU1hbmFnZXIoKS5yZW1vdmVPcmlnaW4oc2Vj
dXJpdHlPcmlnaW4pOwogfQogCiB2b2lkIERhdGFiYXNlVHJhY2tlcjo6Z2V0T3BlbkRhdGFiYXNl
cyhTZWN1cml0eU9yaWdpbiogb3JpZ2luLCBjb25zdCBTdHJpbmcmIG5hbWUsIEhhc2hTZXQ8UmVm
UHRyPEFic3RyYWN0RGF0YWJhc2U+ID4qIGRhdGFiYXNlcykKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VUcmFja2VyLmggYi9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlVHJhY2tlci5oCmluZGV4IGJiYTQ4OTI3
ZGZkNGQwNmMyYjYwOTU4Y2E1N2I3MmM1YjY2NTNjNTAuLjNlMDM2MDU0M2Y3MDkxM2Y4ZjNkMzc4
MTVmMjA1YWE3YzFiN2Q0NmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
ZGF0YWJhc2UvRGF0YWJhc2VUcmFja2VyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93
ZWJkYXRhYmFzZS9EYXRhYmFzZVRyYWNrZXIuaApAQCAtNTYsOCArNTYsMTggQEAgY2xhc3MgRGF0
YWJhc2VUcmFja2VyQ2xpZW50Owogc3RydWN0IFNlY3VyaXR5T3JpZ2luVHJhaXRzOwogI2VuZGlm
IC8vICFQTEFURk9STShDSFJPTUlVTSkKIAorY2xhc3MgRGF0YWJhc2VUcmFja2VyQXN5bmNocm9u
b3VzUmVtb3ZlciB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoRGF0YWJhc2VUcmFja2VyQXN5
bmNocm9ub3VzUmVtb3Zlcik7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6
CisgICAgRGF0YWJhc2VUcmFja2VyQXN5bmNocm9ub3VzUmVtb3ZlcigpIHsgfQorICAgIHZpcnR1
YWwgfkRhdGFiYXNlVHJhY2tlckFzeW5jaHJvbm91c1JlbW92ZXIoKTsKKyAgICB2aXJ0dWFsIHZv
aWQgY29tcGxldGVSZW1vdmFsKFBhc3NSZWZQdHI8U2NyaXB0RXhlY3V0aW9uQ29udGV4dD4pID0g
MDsKK307CisKIGNsYXNzIERhdGFiYXNlVHJhY2tlciB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFC
TEUoRGF0YWJhc2VUcmFja2VyKTsgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CisgICAgZnJpZW5k
IGNsYXNzIERhdGFiYXNlVHJhY2tlckFzeW5jaHJvbm91c1JlbW92ZXJJbXBsOwogcHVibGljOgog
ICAgIHN0YXRpYyB2b2lkIGluaXRpYWxpemVUcmFja2VyKGNvbnN0IFN0cmluZyYgZGF0YWJhc2VQ
YXRoKTsKICAgICBzdGF0aWMgRGF0YWJhc2VUcmFja2VyJiB0cmFja2VyKCk7CkBAIC03Myw3ICs4
Myw3IEBAIHB1YmxpYzoKICAgICBTdHJpbmcgZnVsbFBhdGhGb3JEYXRhYmFzZShTZWN1cml0eU9y
aWdpbiosIGNvbnN0IFN0cmluZyYgbmFtZSwgYm9vbCBjcmVhdGVJZkRvZXNOb3RFeGlzdCA9IHRy
dWUpOwogCiAgICAgdm9pZCBhZGRPcGVuRGF0YWJhc2UoQWJzdHJhY3REYXRhYmFzZSopOwotICAg
IHZvaWQgcmVtb3ZlT3BlbkRhdGFiYXNlKEFic3RyYWN0RGF0YWJhc2UqKTsKKyAgICBQYXNzT3du
UHRyPERhdGFiYXNlVHJhY2tlckFzeW5jaHJvbm91c1JlbW92ZXI+IHJlbW92ZU9wZW5EYXRhYmFz
ZShBYnN0cmFjdERhdGFiYXNlKiwgYm9vbCBjb21wbGV0ZUFzeW5jaHJvbm91c2x5ID0gZmFsc2Up
OwogICAgIHZvaWQgZ2V0T3BlbkRhdGFiYXNlcyhTZWN1cml0eU9yaWdpbiogb3JpZ2luLCBjb25z
dCBTdHJpbmcmIG5hbWUsIEhhc2hTZXQ8UmVmUHRyPEFic3RyYWN0RGF0YWJhc2U+ID4qIGRhdGFi
YXNlcyk7CiAKICAgICB1bnNpZ25lZCBsb25nIGxvbmcgZ2V0TWF4U2l6ZUZvckRhdGFiYXNlKGNv
bnN0IEFic3RyYWN0RGF0YWJhc2UqKTsKQEAgLTEyMSw2ICsxMzEsNyBAQCBwcml2YXRlOgogICAg
IHZvaWQgb3BlblRyYWNrZXJEYXRhYmFzZShib29sIGNyZWF0ZUlmRG9lc05vdEV4aXN0KTsKIAog
ICAgIFN0cmluZyBvcmlnaW5QYXRoKFNlY3VyaXR5T3JpZ2luKikgY29uc3Q7CisgICAgdm9pZCBj
b21wbGV0ZURhdGFiYXNlUmVtb3ZhbChTZWN1cml0eU9yaWdpbiopOwogCiAgICAgYm9vbCBoYXNF
bnRyeUZvckRhdGFiYXNlKFNlY3VyaXR5T3JpZ2luKiwgY29uc3QgU3RyaW5nJiBkYXRhYmFzZUlk
ZW50aWZpZXIpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFi
YXNlL2Nocm9taXVtL0RhdGFiYXNlT2JzZXJ2ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2ViZGF0YWJhc2UvY2hyb21pdW0vRGF0YWJhc2VPYnNlcnZlci5oCmluZGV4IDY1N2M3OGU5ZTYx
Yzk1ZGNkYTQ0NWJkZTg0NDhjYzE3MWFmMzQ2NTYuLmQyMTNjYmRkYWQxZWViOGE2NGQ1ZWRlMWQ3
ZjhjMGQwMGVlOGZlMjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0
YWJhc2UvY2hyb21pdW0vRGF0YWJhc2VPYnNlcnZlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2ViZGF0YWJhc2UvY2hyb21pdW0vRGF0YWJhc2VPYnNlcnZlci5oCkBAIC0zOSw2ICsz
OSw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgQWJzdHJhY3REYXRhYmFzZTsKIGNs
YXNzIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ7CitjbGFzcyBTZWN1cml0eU9yaWdpbjsKIAogLy8g
VGhlIGltcGxlbWVudGF0aW9uIG9mIHRoaXMgY2xhc3MgaXMgaW4gdGhlIFdlYktpdCBBUEkgKENo
cm9taXVtIHNvdXJjZSB0cmVlKQogLy8gaW4gV2ViS2l0L2Nocm9taXVtL3NyYy9EYXRhYmFzZU9i
c2VydmVyLmNwcC4KQEAgLTQ3LDcgKzQ4LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBib29sIGNh
bkVzdGFibGlzaERhdGFiYXNlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBjb25zdCBTdHJpbmcm
LCBjb25zdCBTdHJpbmcmLCB1bnNpZ25lZCBsb25nKTsKICAgICBzdGF0aWMgdm9pZCBkYXRhYmFz
ZU9wZW5lZChBYnN0cmFjdERhdGFiYXNlKik7CiAgICAgc3RhdGljIHZvaWQgZGF0YWJhc2VNb2Rp
ZmllZChBYnN0cmFjdERhdGFiYXNlKik7Ci0gICAgc3RhdGljIHZvaWQgZGF0YWJhc2VDbG9zZWQo
QWJzdHJhY3REYXRhYmFzZSopOworICAgIHN0YXRpYyB2b2lkIGRhdGFiYXNlQ2xvc2VkKFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQqLCBTdHJpbmcmIHN0cmluZ0lkZW50aWZpZXIsIFBhc3NSZWZQdHI8
U2VjdXJpdHlPcmlnaW4+KTsKIAogICAgIHN0YXRpYyB2b2lkIHJlcG9ydE9wZW5EYXRhYmFzZVJl
c3VsdChBYnN0cmFjdERhdGFiYXNlKiwgaW50IGNhbGxzaXRlLCBpbnQgd2ViU3FsRXJyb3JDb2Rl
LCBpbnQgc3FsaXRlRXJyb3JDb2RlKTsKICAgICBzdGF0aWMgdm9pZCByZXBvcnRDaGFuZ2VWZXJz
aW9uUmVzdWx0KEFic3RyYWN0RGF0YWJhc2UqLCBpbnQgY2FsbHNpdGUsIGludCB3ZWJTcWxFcnJv
ckNvZGUsIGludCBzcWxpdGVFcnJvckNvZGUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJkYXRhYmFzZS9jaHJvbWl1bS9EYXRhYmFzZVRyYWNrZXJDaHJvbWl1bS5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL2Nocm9taXVtL0RhdGFiYXNlVHJh
Y2tlckNocm9taXVtLmNwcAppbmRleCAzMDlkNDZjMGQwODJhZGNlYzQyMmE0ZDJjYmY3YTg3ZThk
Njk4OTc4Li5iNzg0ZDRlMzY4MDY4NDczMjk0OGRmMTE3NzJjZjUyZjdlYWE0NjNhIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL2Nocm9taXVtL0RhdGFiYXNl
VHJhY2tlckNocm9taXVtLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFi
YXNlL2Nocm9taXVtL0RhdGFiYXNlVHJhY2tlckNocm9taXVtLmNwcApAQCAtOTksMTQgKzk5LDE3
IEBAIHZvaWQgRGF0YWJhc2VUcmFja2VyOjphZGRPcGVuRGF0YWJhc2UoQWJzdHJhY3REYXRhYmFz
ZSogZGF0YWJhc2UpCiAKIGNsYXNzIE5vdGlmeURhdGFiYXNlT2JzZXJ2ZXJPbkNsb3NlVGFzayA6
IHB1YmxpYyBTY3JpcHRFeGVjdXRpb25Db250ZXh0OjpUYXNrIHsKIHB1YmxpYzoKLSAgICBzdGF0
aWMgUGFzc093blB0cjxOb3RpZnlEYXRhYmFzZU9ic2VydmVyT25DbG9zZVRhc2s+IGNyZWF0ZShQ
YXNzUmVmUHRyPEFic3RyYWN0RGF0YWJhc2U+IGRhdGFiYXNlKQorICAgIHN0YXRpYyBQYXNzT3du
UHRyPE5vdGlmeURhdGFiYXNlT2JzZXJ2ZXJPbkNsb3NlVGFzaz4gY3JlYXRlKFBhc3NSZWZQdHI8
U2NyaXB0RXhlY3V0aW9uQ29udGV4dD4gc2NyaXB0RXhlY3V0aW9uQ29udGV4dCwgU3RyaW5nIHN0
cmluZ0lkZW50aWZpZXIsIFBhc3NSZWZQdHI8U2VjdXJpdHlPcmlnaW4+IHNlY3VyaXR5T3JpZ2lu
KQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBOb3RpZnlEYXRhYmFzZU9ic2Vy
dmVyT25DbG9zZVRhc2soZGF0YWJhc2UpKTsKKyAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBO
b3RpZnlEYXRhYmFzZU9ic2VydmVyT25DbG9zZVRhc2soc2NyaXB0RXhlY3V0aW9uQ29udGV4dCwg
c3RyaW5nSWRlbnRpZmllciwgc2VjdXJpdHlPcmlnaW4pKTsKICAgICB9CiAKICAgICB2aXJ0dWFs
IHZvaWQgcGVyZm9ybVRhc2soU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCkKICAgICB7
Ci0gICAgICAgIERhdGFiYXNlT2JzZXJ2ZXI6OmRhdGFiYXNlQ2xvc2VkKG1fZGF0YWJhc2UuZ2V0
KCkpOworICAgICAgICBBU1NFUlQoY29udGV4dCA9PSBtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQp
OworICAgICAgICBTdHJpbmcgc3RyaW5nSWRlbnRpZmllciA9IG1fc3RyaW5nSWRlbnRpZmllci5p
c29sYXRlZENvcHkoKTsKKyAgICAgICAgRGF0YWJhc2VPYnNlcnZlcjo6ZGF0YWJhc2VDbG9zZWQo
bV9zY3JpcHRFeGVjdXRpb25Db250ZXh0LmdldCgpLCBzdHJpbmdJZGVudGlmaWVyLCBtX3NlY3Vy
aXR5T3JpZ2luKTsKKyAgICAgICAgbV9zY3JpcHRFeGVjdXRpb25Db250ZXh0LmNsZWFyKCk7CiAg
ICAgfQogCiAgICAgdmlydHVhbCBib29sIGlzQ2xlYW51cFRhc2soKSBjb25zdApAQCAtMTE1LDQ2
ICsxMTgsODggQEAgcHVibGljOgogICAgIH0KIAogcHJpdmF0ZToKLSAgICBOb3RpZnlEYXRhYmFz
ZU9ic2VydmVyT25DbG9zZVRhc2soUGFzc1JlZlB0cjxBYnN0cmFjdERhdGFiYXNlPiBkYXRhYmFz
ZSkKLSAgICAgICAgOiBtX2RhdGFiYXNlKGRhdGFiYXNlKQorICAgIE5vdGlmeURhdGFiYXNlT2Jz
ZXJ2ZXJPbkNsb3NlVGFzayhQYXNzUmVmUHRyPFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ+IHNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQsIFN0cmluZyYgc3RyaW5nSWRlbnRpZmllciwgUGFzc1JlZlB0cjxT
ZWN1cml0eU9yaWdpbj4gc2VjdXJpdHlPcmlnaW4pCisgICAgICAgIDogbV9zY3JpcHRFeGVjdXRp
b25Db250ZXh0KHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQpCisgICAgICAgICwgbV9zdHJpbmdJZGVu
dGlmaWVyKHN0cmluZ0lkZW50aWZpZXIpCisgICAgICAgICwgbV9zZWN1cml0eU9yaWdpbihzZWN1
cml0eU9yaWdpbikKICAgICB7CiAgICAgfQogCi0gICAgUmVmUHRyPEFic3RyYWN0RGF0YWJhc2U+
IG1fZGF0YWJhc2U7CisgICAgUmVmUHRyPFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ+IG1fc2NyaXB0
RXhlY3V0aW9uQ29udGV4dDsKKyAgICBTdHJpbmcgbV9zdHJpbmdJZGVudGlmaWVyOworICAgIFJl
ZlB0cjxTZWN1cml0eU9yaWdpbj4gbV9zZWN1cml0eU9yaWdpbjsKIH07CiAKLXZvaWQgRGF0YWJh
c2VUcmFja2VyOjpyZW1vdmVPcGVuRGF0YWJhc2UoQWJzdHJhY3REYXRhYmFzZSogZGF0YWJhc2Up
CitEYXRhYmFzZVRyYWNrZXJBc3luY2hyb25vdXNSZW1vdmVyOjp+RGF0YWJhc2VUcmFja2VyQXN5
bmNocm9ub3VzUmVtb3ZlcigpCiB7Ci0gICAgU3RyaW5nIG9yaWdpbklkZW50aWZpZXIgPSBkYXRh
YmFzZS0+c2VjdXJpdHlPcmlnaW4oKS0+ZGF0YWJhc2VJZGVudGlmaWVyKCk7Ci0gICAgTXV0ZXhM
b2NrZXIgb3BlbkRhdGFiYXNlTWFwTG9jayhtX29wZW5EYXRhYmFzZU1hcEd1YXJkKTsKLSAgICBB
U1NFUlQobV9vcGVuRGF0YWJhc2VNYXApOwotICAgIERhdGFiYXNlTmFtZU1hcCogbmFtZU1hcCA9
IG1fb3BlbkRhdGFiYXNlTWFwLT5nZXQob3JpZ2luSWRlbnRpZmllcik7Ci0gICAgaWYgKCFuYW1l
TWFwKQotICAgICAgICByZXR1cm47Cit9CisKK2NsYXNzIERhdGFiYXNlVHJhY2tlckFzeW5jaHJv
bm91c1JlbW92ZXJJbXBsIDogcHVibGljIERhdGFiYXNlVHJhY2tlckFzeW5jaHJvbm91c1JlbW92
ZXIgeworcHVibGljOgorICAgIHN0YXRpYyBQYXNzT3duUHRyPERhdGFiYXNlVHJhY2tlckFzeW5j
aHJvbm91c1JlbW92ZXJJbXBsPiBjcmVhdGUoU3RyaW5nJiBzdHJpbmdJZGVudGlmaWVyLCBQYXNz
UmVmUHRyPFNlY3VyaXR5T3JpZ2luPiBzZWN1cml0eU9yaWdpbikKKyAgICB7CisgICAgICAgIHJl
dHVybiBhZG9wdFB0cihuZXcgRGF0YWJhc2VUcmFja2VyQXN5bmNocm9ub3VzUmVtb3ZlckltcGwo
c3RyaW5nSWRlbnRpZmllciwgc2VjdXJpdHlPcmlnaW4pKTsKKyAgICB9CisKKyAgICB2aXJ0dWFs
IHZvaWQgY29tcGxldGVSZW1vdmFsKFBhc3NSZWZQdHI8U2NyaXB0RXhlY3V0aW9uQ29udGV4dD4g
Y29udGV4dCkKKyAgICB7CisgICAgICAgIFN0cmluZyBzdHJpbmdJZGVudGlmaWVyID0gbV9zdHJp
bmdJZGVudGlmaWVyLmlzb2xhdGVkQ29weSgpOworICAgICAgICBpZiAoIWNvbnRleHQtPmlzQ29u
dGV4dFRocmVhZCgpKSB7CisgICAgICAgICAgICBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250
ZXh0Q29weSA9IGNvbnRleHQuZ2V0KCk7CisgICAgICAgICAgICBjb250ZXh0Q29weS0+cG9zdFRh
c2soTm90aWZ5RGF0YWJhc2VPYnNlcnZlck9uQ2xvc2VUYXNrOjpjcmVhdGUoY29udGV4dCwgc3Ry
aW5nSWRlbnRpZmllciwgbV9zZWN1cml0eU9yaWdpbikpOworICAgICAgICB9IGVsc2UKKyAgICAg
ICAgICAgIERhdGFiYXNlT2JzZXJ2ZXI6OmRhdGFiYXNlQ2xvc2VkKGNvbnRleHQuZ2V0KCksIHN0
cmluZ0lkZW50aWZpZXIsIG1fc2VjdXJpdHlPcmlnaW4pOworICAgIH0KKworcHJpdmF0ZToKKyAg
ICBEYXRhYmFzZVRyYWNrZXJBc3luY2hyb25vdXNSZW1vdmVySW1wbChTdHJpbmcmIHN0cmluZ0lk
ZW50aWZpZXIsIFBhc3NSZWZQdHI8U2VjdXJpdHlPcmlnaW4+IHNlY3VyaXR5T3JpZ2luKQorICAg
ICAgICA6IG1fc3RyaW5nSWRlbnRpZmllcihzdHJpbmdJZGVudGlmaWVyKQorICAgICAgICAsIG1f
c2VjdXJpdHlPcmlnaW4oc2VjdXJpdHlPcmlnaW4pCisgICAgeworICAgIH0KIAorICAgIFN0cmlu
ZyBtX3N0cmluZ0lkZW50aWZpZXI7CisgICAgUmVmUHRyPFNlY3VyaXR5T3JpZ2luPiBtX3NlY3Vy
aXR5T3JpZ2luOworfTsKKworUGFzc093blB0cjxEYXRhYmFzZVRyYWNrZXJBc3luY2hyb25vdXNS
ZW1vdmVyPiBEYXRhYmFzZVRyYWNrZXI6OnJlbW92ZU9wZW5EYXRhYmFzZShBYnN0cmFjdERhdGFi
YXNlKiBkYXRhYmFzZSwgYm9vbCBjb21wbGV0ZUFzeW5jaHJvbm91c2x5KQoreworICAgIEFTU0VS
VChtX29wZW5EYXRhYmFzZU1hcCk7CisgICAgU3RyaW5nIG9yaWdpbklkZW50aWZpZXIgPSBkYXRh
YmFzZS0+c2VjdXJpdHlPcmlnaW4oKS0+ZGF0YWJhc2VJZGVudGlmaWVyKCk7CiAgICAgU3RyaW5n
IG5hbWUoZGF0YWJhc2UtPnN0cmluZ0lkZW50aWZpZXIoKSk7Ci0gICAgRGF0YWJhc2VTZXQqIGRh
dGFiYXNlU2V0ID0gbmFtZU1hcC0+Z2V0KG5hbWUpOwotICAgIGlmICghZGF0YWJhc2VTZXQpCi0g
ICAgICAgIHJldHVybjsKKyAgICBPd25QdHI8RGF0YWJhc2VUcmFja2VyQXN5bmNocm9ub3VzUmVt
b3Zlcj4gcmVtb3ZlcjsKKyAgICB7CisgICAgICAgIE11dGV4TG9ja2VyIG9wZW5EYXRhYmFzZU1h
cExvY2sobV9vcGVuRGF0YWJhc2VNYXBHdWFyZCk7CisgICAgICAgIERhdGFiYXNlTmFtZU1hcCog
bmFtZU1hcCA9IG1fb3BlbkRhdGFiYXNlTWFwLT5nZXQob3JpZ2luSWRlbnRpZmllcik7CisgICAg
ICAgIGlmICghbmFtZU1hcCkKKyAgICAgICAgICAgIHJldHVybiByZW1vdmVyLnJlbGVhc2UoKTsK
IAotICAgIERhdGFiYXNlU2V0OjppdGVyYXRvciBmb3VuZCA9IGRhdGFiYXNlU2V0LT5maW5kKGRh
dGFiYXNlKTsKLSAgICBpZiAoZm91bmQgPT0gZGF0YWJhc2VTZXQtPmVuZCgpKQotICAgICAgICBy
ZXR1cm47CisgICAgICAgIERhdGFiYXNlU2V0KiBkYXRhYmFzZVNldCA9IG5hbWVNYXAtPmdldChu
YW1lKTsKKyAgICAgICAgaWYgKCFkYXRhYmFzZVNldCkKKyAgICAgICAgICAgIHJldHVybiByZW1v
dmVyLnJlbGVhc2UoKTsKIAotICAgIGRhdGFiYXNlU2V0LT5yZW1vdmUoZm91bmQpOwotICAgIGlm
IChkYXRhYmFzZVNldC0+aXNFbXB0eSgpKSB7Ci0gICAgICAgIG5hbWVNYXAtPnJlbW92ZShuYW1l
KTsKLSAgICAgICAgZGVsZXRlIGRhdGFiYXNlU2V0OwotICAgICAgICBpZiAobmFtZU1hcC0+aXNF
bXB0eSgpKSB7Ci0gICAgICAgICAgICBtX29wZW5EYXRhYmFzZU1hcC0+cmVtb3ZlKG9yaWdpbklk
ZW50aWZpZXIpOwotICAgICAgICAgICAgZGVsZXRlIG5hbWVNYXA7CisgICAgICAgIERhdGFiYXNl
U2V0OjppdGVyYXRvciBmb3VuZCA9IGRhdGFiYXNlU2V0LT5maW5kKGRhdGFiYXNlKTsKKyAgICAg
ICAgaWYgKGZvdW5kID09IGRhdGFiYXNlU2V0LT5lbmQoKSkKKyAgICAgICAgICAgIHJldHVybiBy
ZW1vdmVyLnJlbGVhc2UoKTsKKworICAgICAgICBkYXRhYmFzZVNldC0+cmVtb3ZlKGZvdW5kKTsK
KyAgICAgICAgaWYgKGRhdGFiYXNlU2V0LT5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgIG5hbWVN
YXAtPnJlbW92ZShuYW1lKTsKKyAgICAgICAgICAgIGRlbGV0ZSBkYXRhYmFzZVNldDsKKyAgICAg
ICAgICAgIGlmIChuYW1lTWFwLT5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgICAgICBtX29wZW5E
YXRhYmFzZU1hcC0+cmVtb3ZlKG9yaWdpbklkZW50aWZpZXIpOworICAgICAgICAgICAgICAgIGRl
bGV0ZSBuYW1lTWFwOworICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQogCi0gICAgaWYg
KCFkYXRhYmFzZS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLT5pc0NvbnRleHRUaHJlYWQoKSkK
LSAgICAgICAgZGF0YWJhc2UtPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKS0+cG9zdFRhc2soTm90
aWZ5RGF0YWJhc2VPYnNlcnZlck9uQ2xvc2VUYXNrOjpjcmVhdGUoZGF0YWJhc2UpKTsKLSAgICBl
bHNlCi0gICAgICAgIERhdGFiYXNlT2JzZXJ2ZXI6OmRhdGFiYXNlQ2xvc2VkKGRhdGFiYXNlKTsK
KyAgICByZW1vdmVyID0gRGF0YWJhc2VUcmFja2VyQXN5bmNocm9ub3VzUmVtb3ZlckltcGw6OmNy
ZWF0ZShuYW1lLCBkYXRhYmFzZS0+c2VjdXJpdHlPcmlnaW4oKSk7CisgICAgaWYgKCFjb21wbGV0
ZUFzeW5jaHJvbm91c2x5KSB7CisgICAgICAgIEFTU0VSVChkYXRhYmFzZS0+c2NyaXB0RXhlY3V0
aW9uQ29udGV4dCgpLT5pc0NvbnRleHRUaHJlYWQoKSk7CisgICAgICAgIHJlbW92ZXItPmNvbXBs
ZXRlUmVtb3ZhbChkYXRhYmFzZS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKTsKKyAgICAgICAg
cmVtb3Zlci5jbGVhcigpOworICAgIH0KKyAgICByZXR1cm4gcmVtb3Zlci5yZWxlYXNlKCk7CiB9
CiAKIHVuc2lnbmVkIGxvbmcgbG9uZyBEYXRhYmFzZVRyYWNrZXI6OmdldE1heFNpemVGb3JEYXRh
YmFzZShjb25zdCBBYnN0cmFjdERhdGFiYXNlKiBkYXRhYmFzZSkKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3N0b3JhZ2Uvd2luY2UvRGF0YWJhc2VUaHJlYWRXaW5DRS5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9zdG9yYWdlL3dpbmNlL0RhdGFiYXNlVGhyZWFkV2luQ0UuY3BwCmluZGV4IGQ4MTE0
NWRmODBiNGRiYTJiNTQ3YWEyMzg0MzE1MDc2MTNlZGQ2NGYuLjc5OWY3MzU2MWEwZGI4MTdjMjlm
ODNiYTZlMDM3ZjIwNTIzNzcyNWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2Uv
d2luY2UvRGF0YWJhc2VUaHJlYWRXaW5DRS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3RvcmFn
ZS93aW5jZS9EYXRhYmFzZVRocmVhZFdpbkNFLmNwcApAQCAtODIsMTIgKzgyLDE3IEBAIHZvaWQg
RGF0YWJhc2VUaHJlYWQ6OnVuc2NoZWR1bGVEYXRhYmFzZVRhc2tzKERhdGFiYXNlKiBkYXRhYmFz
ZSkKICAgICBtX3F1ZXVlLnN3YXAocmVzZXJ2ZWRUYXNrcyk7CiB9CiAKLXZvaWQgRGF0YWJhc2VU
aHJlYWQ6OnJlY29yZERhdGFiYXNlT3BlbihEYXRhYmFzZSogZGF0YWJhc2UpCit2b2lkIERhdGFi
YXNlVGhyZWFkOjpyZWNvcmREYXRhYmFzZU9wZW4oRGF0YWJhc2VDbG9zZXIqIGRhdGFiYXNlKQog
ewogICAgIG5vdEltcGxlbWVudGVkKCk7CiB9CiAKLXZvaWQgRGF0YWJhc2VUaHJlYWQ6OnJlY29y
ZERhdGFiYXNlQ2xvc2VkKERhdGFiYXNlKiBkYXRhYmFzZSkKK3ZvaWQgRGF0YWJhc2VUaHJlYWQ6
OnJlY29yZERhdGFiYXNlQ2xvc2VkKERhdGFiYXNlQ2xvc2VyKiBkYXRhYmFzZSkKK3sKKyAgICBu
b3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIERhdGFiYXNlVGhyZWFkOjpyZWNvcmREYXRhYmFz
ZVNob3VsZEJlQ2xvc2VkKERhdGFiYXNlQ2xvc2VyKiBkYXRhYmFzZSkKIHsKICAgICBub3RJbXBs
ZW1lbnRlZCgpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3RvcmFnZS93aW5jZS9E
YXRhYmFzZVRocmVhZFdpbkNFLmggYi9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL3dpbmNlL0RhdGFi
YXNlVGhyZWFkV2luQ0UuaAppbmRleCAxOTIxY2MxYjZlNDUxMWMxNDVjMzI1MjM5YzgwN2VmZDQz
NDM3NTJlLi5jNmFiZTY5MzEyMmIwZTE4NWQ2M2E4OWQ5ZTIyNTlhODZjNGM1ZTY2IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL3dpbmNlL0RhdGFiYXNlVGhyZWFkV2luQ0UuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL3dpbmNlL0RhdGFiYXNlVGhyZWFkV2luQ0UuaApA
QCAtNDUsOCArNDUsOSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHZvaWQgc2NoZWR1
bGVUYXNrKFBhc3NSZWZQdHI8RGF0YWJhc2VUYXNrPik7CiAgICAgICAgIHZvaWQgc2NoZWR1bGVJ
bW1lZGlhdGVUYXNrKFBhc3NSZWZQdHI8RGF0YWJhc2VUYXNrPik7CiAgICAgICAgIHZvaWQgdW5z
Y2hlZHVsZURhdGFiYXNlVGFza3MoRGF0YWJhc2UqKTsKLSAgICAgICAgdm9pZCByZWNvcmREYXRh
YmFzZU9wZW4oRGF0YWJhc2UqKTsKLSAgICAgICAgdm9pZCByZWNvcmREYXRhYmFzZUNsb3NlZChE
YXRhYmFzZSopOworICAgICAgICB2b2lkIHJlY29yZERhdGFiYXNlT3BlbihEYXRhYmFzZUNsb3Nl
ciopOworICAgICAgICB2b2lkIHJlY29yZERhdGFiYXNlQ2xvc2VkKERhdGFiYXNlQ2xvc2VyKik7
CisgICAgICAgIHZvaWQgcmVjb3JkRGF0YWJhc2VTaG91bGRCZUNsb3NlZChEYXRhYmFzZUNsb3Nl
ciopOwogI2lmbmRlZiBOREVCVUcKICAgICAgICAgVGhyZWFkSWRlbnRpZmllciBnZXRUaHJlYWRJ
RCgpIGNvbnN0IHsgcmV0dXJuIGN1cnJlbnRUaHJlYWQoKTsgfQogI2VuZGlmCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJEYXRhYmFzZS5oIGIvU291cmNlL1dl
YktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViRGF0YWJhc2UuaAppbmRleCA2NmEyNGExNDQwNjgwYzIw
OGY2ZDZkNWQ0MDU0YWNmNmY1OWJkNGI1Li40M2ViMzUxZDFlNDNlYWQ0YWQ3ZDM2NjkzMDlhODRj
MzJkYTgyNDBiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJE
YXRhYmFzZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYkRhdGFiYXNl
LmgKQEAgLTMxLDE1ICszMSwxOSBAQAogI2lmbmRlZiBXZWJEYXRhYmFzZV9oCiAjZGVmaW5lIFdl
YkRhdGFiYXNlX2gKIAorI2lmIFdFQktJVF9JTVBMRU1FTlRBVElPTgorI2luY2x1ZGUgIlNlY3Vy
aXR5T3JpZ2luLmgiCisjZW5kaWYKKwogI2luY2x1ZGUgIldlYlNlY3VyaXR5T3JpZ2luLmgiCiAj
aW5jbHVkZSAicGxhdGZvcm0vV2ViQ29tbW9uLmgiCisjaW5jbHVkZSAicGxhdGZvcm0vV2ViU3Ry
aW5nLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsgY2xhc3MgQWJzdHJhY3REYXRhYmFzZTsgfQog
CiBuYW1lc3BhY2UgV2ViS2l0IHsKIAogY2xhc3MgV2ViRGF0YWJhc2VPYnNlcnZlcjsKLWNsYXNz
IFdlYlN0cmluZzsKIAogY2xhc3MgV2ViRGF0YWJhc2UgewogcHVibGljOgpAQCAtNjQsMTEgKzY4
LDE1IEBAIHB1YmxpYzoKIAogI2lmIFdFQktJVF9JTVBMRU1FTlRBVElPTgogICAgIFdlYkRhdGFi
YXNlKGNvbnN0IFdlYkNvcmU6OkFic3RyYWN0RGF0YWJhc2UqKTsKKyAgICBXZWJEYXRhYmFzZShT
dHJpbmcmIHN0cmluZ0lkZW50aWZpZXIsIFBhc3NSZWZQdHI8V2ViQ29yZTo6U2VjdXJpdHlPcmln
aW4+KTsKICNlbmRpZgogCiBwcml2YXRlOgogICAgIFdlYkRhdGFiYXNlKCkgeyB9CiAgICAgY29u
c3QgV2ViQ29yZTo6QWJzdHJhY3REYXRhYmFzZSogbV9kYXRhYmFzZTsKKyAgICAvLyBGSVhNRTog
UmVtb3ZlIHRoZXNlIHZhcmlhYmxlcyBhbmQgcmVmYWN0b3IgV2ViRGF0YWJhc2VPYnNlcnZlcjo6
ZGF0YWJhc2VDbG9zZWQuCisgICAgV2ViU3RyaW5nIG1fc3RyaW5nSWRlbnRpZmllcjsKKyAgICBX
ZWJTZWN1cml0eU9yaWdpbiBtX3NlY3VyaXR5T3JpZ2luOwogfTsKIAogfSAvLyBuYW1lc3BhY2Ug
V2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9EYXRhYmFzZU9i
c2VydmVyLmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0RhdGFiYXNlT2JzZXJ2ZXIu
Y3BwCmluZGV4IDMyMmU4MDBlYzIxNjRjYjFmMDdmNGQ0ODZjMjg2N2E2YjdiZTIxOTkuLjJjNzQ0
YzllMmNkZTczODUzMjBjODI2NGMwZDNmNWJhMGQzNGY2ODAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vc3JjL0RhdGFiYXNlT2JzZXJ2ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vc3JjL0RhdGFiYXNlT2JzZXJ2ZXIuY3BwCkBAIC0xOTAsMTAgKzE5MCwxMCBA
QCB2b2lkIERhdGFiYXNlT2JzZXJ2ZXI6OmRhdGFiYXNlTW9kaWZpZWQoQWJzdHJhY3REYXRhYmFz
ZSogZGF0YWJhc2UpCiAgICAgV2ViRGF0YWJhc2U6Om9ic2VydmVyKCktPmRhdGFiYXNlTW9kaWZp
ZWQoV2ViRGF0YWJhc2UoZGF0YWJhc2UpKTsKIH0KIAotdm9pZCBEYXRhYmFzZU9ic2VydmVyOjpk
YXRhYmFzZUNsb3NlZChBYnN0cmFjdERhdGFiYXNlKiBkYXRhYmFzZSkKK3ZvaWQgRGF0YWJhc2VP
YnNlcnZlcjo6ZGF0YWJhc2VDbG9zZWQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCwgU3RyaW5nJiBzdHJpbmdJZGVudGlmaWVyLCBQYXNzUmVmUHRyPFNlY3Vy
aXR5T3JpZ2luPiBzZWN1cml0eU9yaWdpbikKIHsKLSAgICBBU1NFUlQoZGF0YWJhc2UtPnNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQoKS0+aXNDb250ZXh0VGhyZWFkKCkpOwotICAgIFdlYkRhdGFiYXNl
OjpvYnNlcnZlcigpLT5kYXRhYmFzZUNsb3NlZChXZWJEYXRhYmFzZShkYXRhYmFzZSkpOworICAg
IEFTU0VSVChzY3JpcHRFeGVjdXRpb25Db250ZXh0LT5pc0NvbnRleHRUaHJlYWQoKSk7CisgICAg
V2ViRGF0YWJhc2U6Om9ic2VydmVyKCktPmRhdGFiYXNlQ2xvc2VkKFdlYkRhdGFiYXNlKHN0cmlu
Z0lkZW50aWZpZXIsIHNlY3VyaXR5T3JpZ2luKSk7CiB9CiAKIHZvaWQgRGF0YWJhc2VPYnNlcnZl
cjo6cmVwb3J0T3BlbkRhdGFiYXNlUmVzdWx0KEFic3RyYWN0RGF0YWJhc2UqIGRhdGFiYXNlLCBp
bnQgZXJyb3JTaXRlLCBpbnQgd2ViU3FsRXJyb3JDb2RlLCBpbnQgc3FsaXRlRXJyb3JDb2RlKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViRGF0YWJhc2UuY3BwIGIv
U291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViRGF0YWJhc2UuY3BwCmluZGV4IDA0ZDRhNDA3
OWE1NDc1OWQxYmYyZDcwYWE0Y2M0ZWRlZmI0NWRkNDQuLmUxOTIzYTFjZTM2YWI4MjY4YTc0YzEw
N2QwOTc0YjIzMWE1ZDk3MzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3Jj
L1dlYkRhdGFiYXNlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJEYXRh
YmFzZS5jcHAKQEAgLTYxLDYgKzYxLDggQEAgc3RhdGljIFdlYkRhdGFiYXNlT2JzZXJ2ZXIqIGRh
dGFiYXNlT2JzZXJ2ZXIgPSAwOwogCiBXZWJTdHJpbmcgV2ViRGF0YWJhc2U6Om5hbWUoKSBjb25z
dAogeworICAgIGlmICghbV9zdHJpbmdJZGVudGlmaWVyLmlzTnVsbCgpKQorICAgICAgICByZXR1
cm4gbV9zdHJpbmdJZGVudGlmaWVyOwogICAgIEFTU0VSVChtX2RhdGFiYXNlKTsKICAgICByZXR1
cm4gbV9kYXRhYmFzZS0+c3RyaW5nSWRlbnRpZmllcigpOwogfQpAQCAtNzksNiArODEsOCBAQCB1
bnNpZ25lZCBsb25nIFdlYkRhdGFiYXNlOjplc3RpbWF0ZWRTaXplKCkgY29uc3QKIAogV2ViU2Vj
dXJpdHlPcmlnaW4gV2ViRGF0YWJhc2U6OnNlY3VyaXR5T3JpZ2luKCkgY29uc3QKIHsKKyAgICBp
ZiAoIW1fc2VjdXJpdHlPcmlnaW4uaXNOdWxsKCkpCisgICAgICAgIHJldHVybiBtX3NlY3VyaXR5
T3JpZ2luOwogICAgIEFTU0VSVChtX2RhdGFiYXNlKTsKICAgICByZXR1cm4gV2ViU2VjdXJpdHlP
cmlnaW4obV9kYXRhYmFzZS0+c2VjdXJpdHlPcmlnaW4oKSk7CiB9CkBAIC0xMzIsNCArMTM2LDEx
IEBAIFdlYkRhdGFiYXNlOjpXZWJEYXRhYmFzZShjb25zdCBBYnN0cmFjdERhdGFiYXNlKiBkYXRh
YmFzZSkKIHsKIH0KIAorV2ViRGF0YWJhc2U6OldlYkRhdGFiYXNlKFN0cmluZyYgc3RyaW5nSWRl
bnRpZmllciwgUGFzc1JlZlB0cjxTZWN1cml0eU9yaWdpbj4gc2VjdXJpdHlPcmlnaW4pCisgICAg
OiBtX2RhdGFiYXNlKDApCisgICAgLCBtX3N0cmluZ0lkZW50aWZpZXIoc3RyaW5nSWRlbnRpZmll
cikKKyAgICAsIG1fc2VjdXJpdHlPcmlnaW4oc2VjdXJpdHlPcmlnaW4pCit7Cit9CisKIH0gLy8g
bmFtZXNwYWNlIFdlYktpdAo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>171448</attachid>
            <date>2012-10-30 07:25:37 -0700</date>
            <delta_ts>2014-02-05 11:08:33 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-68303-20121030152400.patch</filename>
            <type>text/plain</type>
            <size>66719</size>
            <attacher name="Dan Carney">dcarney</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTMyOTA2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZTUwM2E4OTAwZjkzZTZi
YzJiNmIzZjM0ZDQ0YjRlMjIyMzY0MGU5MS4uOGQ3MWY2ZTFiZmEyNTE0OGU3ZDEzMjViNTBlYzM1
NDExNDZlZTBkMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEzOCBAQAorMjAxMi0xMC0zMCAgRGFu
IENhcm5leSAgPGRjYXJuZXlAZ29vZ2xlLmNvbT4KKworICAgICAgICBNZW1vcnkgbGVhayB1c2lu
ZyB3ZWIgU1FMIERCCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD02ODMwMworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIEFsbG93IERhdGFiYXNlIG9iamVjdHMgdG8gYmUgY2xvc2VkIGVhcmx5LgorICAgICAgICBE
YXRhYmFzZXMgYXJlIG5vdyBubyBsb25nZXIgaGVsZCBvcGVuIGJ5IERhdGFiYXNlVGhyZWFkIGJ1
dCByYXRoZXIKKyAgICAgICAgYnkgdGhlIERhdGFiYXNlVGFzayBvYmplY3RzIHRoYXQgdXNlIHRo
ZW0gYXMgd2VsbCBhcyB0aGVpciBKYXZhU2NyaXB0CisgICAgICAgIHdyYXBwZXJzLiBBbGwgZGF0
YSByZXF1aXJlZCBmb3IgY2xvc2luZyBhIGRhdGFiYXNlIGhhcyBiZWVuIG1vdmVkIGludG8KKyAg
ICAgICAgYSBuZXcgb2JqZWN0IGNhbGxlZCBBYnN0cmFjdERhdGFiYXNlOjpDb3JlLCBhbmQgdGhl
IGZ1bmN0aW9uYWxpdHkgZm9yCisgICAgICAgIGNsb3NpbmcgQ29yZSBpcyBoZWxkIGpvaW50bHkg
YnkgRGF0YWJhc2VUaHJlYWQgYW5kIERhdGFiYXNlIGluCisgICAgICAgIGFuIG9iamVjdCBjYWxs
ZWQgRGF0YWJhc2VDbG9zZXIsIHdob3NlIGNsb3NlIGZ1bmN0aW9ucyBhcmUgY2FsbGVkCisgICAg
ICAgIG9uIERhdGFiYXNlIGRlbGV0aW9uIG9yIG9uIERhdGFiYXNlVGhyZWFkIGNsb3NlLiBUaGUg
b3JkZXIgb2YgdGhlc2UKKyAgICAgICAgY2FsbHMgaXMgaXJyZWxldmFudCwgYW5kIGFsbCByZWxl
dmFudCBjYWxsYmFja3MgYXJlIGd1YXJhbnRlZWQgdG8gYmUKKyAgICAgICAgY2FsbGVkIGVpdGhl
ciB3YXkuIEFkZGl0aW9uYWxseSBEYXRhYmFzZVRyYWNrZXI6OnJlbW92ZU9wZW5EYXRhYmFzZQor
ICAgICAgICBoYXMgYmVlbiBtb2RpZmllZCB0byBlbnN1cmUgdGhhdCBpdHMgRGF0YWJhc2UgcG9p
bnRlciBhcmd1bWVudCBpcyBub3QKKyAgICAgICAgdXNlZCBhc3luY2hyb25vdXNseSwgYXMgdGhl
cmUgaXMgbm8gbG9uZ2VyIGEgZ3VhcmFudGVlIHRoYXQgaXQgaXMKKyAgICAgICAgYWxpdmUgYWZ0
ZXIgdGhlIGNhbGwuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLiBDaGFuZ2UgY292ZXJlZCBieSBl
eGlzdGluZyB0ZXN0cy4KKworICAgICAgICAqIE1vZHVsZXMvd2ViZGF0YWJhc2UvQWJzdHJhY3RE
YXRhYmFzZS5jcHA6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkFic3Ry
YWN0RGF0YWJhc2U6OkFic3RyYWN0RGF0YWJhc2UpOgorICAgICAgICAoV2ViQ29yZTo6QWJzdHJh
Y3REYXRhYmFzZTo6fkFic3RyYWN0RGF0YWJhc2UpOgorICAgICAgICAoV2ViQ29yZTo6QWJzdHJh
Y3REYXRhYmFzZTo6Q29yZTo6fkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6QWJzdHJhY3REYXRh
YmFzZTo6Q29yZTo6Q29yZSk6CisgICAgICAgIChXZWJDb3JlOjpBYnN0cmFjdERhdGFiYXNlOjpD
b3JlOjpyZWxlYXNlU2NyaXB0RXhlY3V0aW9uQ29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpB
YnN0cmFjdERhdGFiYXNlOjpDb3JlOjpjbG9zZSk6CisgICAgICAgIChXZWJDb3JlOjpBYnN0cmFj
dERhdGFiYXNlOjpwZXJmb3JtT3BlbkFuZFZlcmlmeSk6CisgICAgICAgIChXZWJDb3JlOjpBYnN0
cmFjdERhdGFiYXNlOjpnZXRWZXJzaW9uRnJvbURhdGFiYXNlKToKKyAgICAgICAgKFdlYkNvcmU6
OkFic3RyYWN0RGF0YWJhc2U6OnNldFZlcnNpb25JbkRhdGFiYXNlKToKKyAgICAgICAgKFdlYkNv
cmU6OkFic3RyYWN0RGF0YWJhc2U6OmdldENhY2hlZFZlcnNpb24pOgorICAgICAgICAoV2ViQ29y
ZTo6QWJzdHJhY3REYXRhYmFzZTo6c2V0Q2FjaGVkVmVyc2lvbik6CisgICAgICAgIChXZWJDb3Jl
OjpBYnN0cmFjdERhdGFiYXNlOjpnZXRBY3R1YWxWZXJzaW9uRm9yVHJhbnNhY3Rpb24pOgorICAg
ICAgICAoV2ViQ29yZTo6QWJzdHJhY3REYXRhYmFzZTo6aW5jcmVtZW50YWxWYWN1dW1JZk5lZWRl
ZCk6CisgICAgICAgIChXZWJDb3JlOjpBYnN0cmFjdERhdGFiYXNlOjppbnRlcnJ1cHQpOgorICAg
ICAgICAoV2ViQ29yZTo6QWJzdHJhY3REYXRhYmFzZTo6aXNJbnRlcnJ1cHRlZCk6CisgICAgICAg
IChXZWJDb3JlOjpBYnN0cmFjdERhdGFiYXNlOjpsb2dFcnJvck1lc3NhZ2UpOgorICAgICAgICAq
IE1vZHVsZXMvd2ViZGF0YWJhc2UvQWJzdHJhY3REYXRhYmFzZS5oOgorICAgICAgICAoQ29yZSk6
CisgICAgICAgIChXZWJDb3JlOjpBYnN0cmFjdERhdGFiYXNlOjpDb3JlOjpjcmVhdGUpOgorICAg
ICAgICAoV2ViQ29yZTo6QWJzdHJhY3REYXRhYmFzZTo6Q29yZTo6c2V0T3BlbmVkKToKKyAgICAg
ICAgKFdlYkNvcmU6OkFic3RyYWN0RGF0YWJhc2U6OkNvcmU6Om9wZW5lZCk6CisgICAgICAgIChX
ZWJDb3JlOjpBYnN0cmFjdERhdGFiYXNlOjpDb3JlOjpndWlkKToKKyAgICAgICAgKFdlYkNvcmU6
OkFic3RyYWN0RGF0YWJhc2U6OkNvcmU6OnNxbGl0ZURhdGFiYXNlKToKKyAgICAgICAgKEFic3Ry
YWN0RGF0YWJhc2UpOgorICAgICAgICAoV2ViQ29yZTo6QWJzdHJhY3REYXRhYmFzZTo6b3BlbmVk
KToKKyAgICAgICAgKFdlYkNvcmU6OkFic3RyYWN0RGF0YWJhc2U6OnNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6QWJzdHJhY3REYXRhYmFzZTo6c3FsaXRlRGF0YWJh
c2UpOgorICAgICAgICAoV2ViQ29yZTo6QWJzdHJhY3REYXRhYmFzZTo6Y29yZSk6CisgICAgICAg
ICogTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpE
YXRhYmFzZTo6b3BlbkRhdGFiYXNlKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlOjpkaXNw
b3NlT2ZTY3JpcHRFeGVjdXRpb25Db250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNl
Ojp+RGF0YWJhc2UpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpEYXRh
YmFzZTo6Y2xvc2UpOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VDbG9zZXI6OkRhdGFiYXNl
Q2xvc2VyKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlQ2xvc2VyOjp+RGF0YWJhc2VDbG9z
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VDbG9zZXI6OmNsb3NlSW5EZXN0cnVjdG9y
KToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlQ2xvc2VyOjpjbG9zZSk6CisgICAgICAgIChX
ZWJDb3JlOjpEYXRhYmFzZTo6Y2xvc2VJbW1lZGlhdGVseSk6CisgICAgICAgIChXZWJDb3JlOjpE
YXRhYmFzZTo6cGVyZm9ybU9wZW5BbmRWZXJpZnkpOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJh
c2U6OnNjaGVkdWxlVHJhbnNhY3Rpb25DYWxsYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpEYXRh
YmFzZTo6c2VjdXJpdHlPcmlnaW4pOgorICAgICAgICAqIE1vZHVsZXMvd2ViZGF0YWJhc2UvRGF0
YWJhc2UuaDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoRGF0YWJhc2VDbG9zZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VDbG9zZXI6OmNyZWF0ZSk6CisgICAgICAgIChEYXRh
YmFzZSk6CisgICAgICAgICogTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZVN5bmMuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VTeW5jOjp+RGF0YWJhc2VTeW5jKToKKyAgICAgICAg
KFdlYkNvcmU6OkRhdGFiYXNlU3luYzo6Y2hhbmdlVmVyc2lvbik6CisgICAgICAgIChXZWJDb3Jl
OjpEYXRhYmFzZVN5bmM6OnJ1blRyYW5zYWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFi
YXNlU3luYzo6Y2xvc2VJbW1lZGlhdGVseSk6CisgICAgICAgICogTW9kdWxlcy93ZWJkYXRhYmFz
ZS9EYXRhYmFzZVRhc2suY3BwOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VUYXNrOjpEYXRh
YmFzZVRhc2spOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VUYXNrOjpwZXJmb3JtVGFzayk6
CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZTo6RGF0YWJhc2VPcGVuVGFzazo6RGF0YWJhc2VP
cGVuVGFzayk6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZTo6RGF0YWJhc2VDbG9zZVRhc2s6
OkRhdGFiYXNlQ2xvc2VUYXNrKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlOjpEYXRhYmFz
ZVRhYmxlTmFtZXNUYXNrOjpEYXRhYmFzZVRhYmxlTmFtZXNUYXNrKToKKyAgICAgICAgKiBNb2R1
bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlVGFzay5oOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJh
c2VUYXNrOjpkYXRhYmFzZSk6CisgICAgICAgIChEYXRhYmFzZVRhc2spOgorICAgICAgICAoV2Vi
Q29yZTo6RGF0YWJhc2U6OkRhdGFiYXNlT3BlblRhc2s6OmNyZWF0ZSk6CisgICAgICAgIChEYXRh
YmFzZTo6RGF0YWJhc2VPcGVuVGFzayk6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZTo6RGF0
YWJhc2VDbG9zZVRhc2s6OmNyZWF0ZSk6CisgICAgICAgIChEYXRhYmFzZTo6RGF0YWJhc2VDbG9z
ZVRhc2spOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2U6OkRhdGFiYXNlVGFibGVOYW1lc1Rh
c2s6OmNyZWF0ZSk6CisgICAgICAgIChEYXRhYmFzZTo6RGF0YWJhc2VUYWJsZU5hbWVzVGFzayk6
CisgICAgICAgICogTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZVRocmVhZC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpEYXRhYmFzZVRocmVhZDo6cmVjb3JkRGF0YWJhc2VPcGVuKToKKyAgICAg
ICAgKFdlYkNvcmU6OkRhdGFiYXNlVGhyZWFkOjpyZWNvcmREYXRhYmFzZUNsb3NlZCk6CisgICAg
ICAgIChXZWJDb3JlKToKKyAgICAgICAgKENsb3NlRGF0YWJhc2VDbG9zZXJUYXNrKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNsb3NlRGF0YWJhc2VDbG9zZXJUYXNrOjpjcmVhdGUpOgorICAgICAgICAo
V2ViQ29yZTo6Q2xvc2VEYXRhYmFzZUNsb3NlclRhc2s6OkNsb3NlRGF0YWJhc2VDbG9zZXJUYXNr
KToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlVGhyZWFkOjpyZWNvcmREYXRhYmFzZVNob3Vs
ZEJlQ2xvc2VkKToKKyAgICAgICAgKiBNb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlVGhyZWFk
Lmg6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKERhdGFiYXNlVGhyZWFkKToKKyAgICAg
ICAgKiBNb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlVHJhY2tlci5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpEYXRhYmFzZVRyYWNrZXJBc3luY2hyb25vdXNSZW1vdmVyOjp+RGF0YWJhc2VUcmFj
a2VyQXN5bmNocm9ub3VzUmVtb3Zlcik6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKERh
dGFiYXNlVHJhY2tlckFzeW5jaHJvbm91c1JlbW92ZXJJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6
OkRhdGFiYXNlVHJhY2tlckFzeW5jaHJvbm91c1JlbW92ZXJJbXBsOjpjcmVhdGUpOgorICAgICAg
ICAoV2ViQ29yZTo6RGF0YWJhc2VUcmFja2VyQXN5bmNocm9ub3VzUmVtb3ZlckltcGw6OkRhdGFi
YXNlVHJhY2tlckFzeW5jaHJvbm91c1JlbW92ZXJJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6OkRh
dGFiYXNlVHJhY2tlcjo6cmVtb3ZlT3BlbkRhdGFiYXNlKToKKyAgICAgICAgKFdlYkNvcmU6OkRh
dGFiYXNlVHJhY2tlcjo6Y29tcGxldGVEYXRhYmFzZVJlbW92YWwpOgorICAgICAgICAqIE1vZHVs
ZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VUcmFja2VyLmg6CisgICAgICAgIChEYXRhYmFzZVRyYWNr
ZXJBc3luY2hyb25vdXNSZW1vdmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlVHJhY2tl
ckFzeW5jaHJvbm91c1JlbW92ZXI6OkRhdGFiYXNlVHJhY2tlckFzeW5jaHJvbm91c1JlbW92ZXIp
OgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChEYXRhYmFzZVRyYWNrZXIpOgorICAgICAg
ICAqIE1vZHVsZXMvd2ViZGF0YWJhc2UvY2hyb21pdW0vRGF0YWJhc2VPYnNlcnZlci5oOgorICAg
ICAgICAoV2ViQ29yZSk6CisgICAgICAgIChEYXRhYmFzZU9ic2VydmVyKToKKyAgICAgICAgKiBN
b2R1bGVzL3dlYmRhdGFiYXNlL2Nocm9taXVtL0RhdGFiYXNlVHJhY2tlckNocm9taXVtLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6Ok5vdGlmeURhdGFiYXNlT2JzZXJ2ZXJPbkNsb3NlVGFzazo6Y3Jl
YXRlKToKKyAgICAgICAgKFdlYkNvcmU6Ok5vdGlmeURhdGFiYXNlT2JzZXJ2ZXJPbkNsb3NlVGFz
azo6Tm90aWZ5RGF0YWJhc2VPYnNlcnZlck9uQ2xvc2VUYXNrKToKKyAgICAgICAgKE5vdGlmeURh
dGFiYXNlT2JzZXJ2ZXJPbkNsb3NlVGFzayk6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZVRy
YWNrZXJBc3luY2hyb25vdXNSZW1vdmVyOjp+RGF0YWJhc2VUcmFja2VyQXN5bmNocm9ub3VzUmVt
b3Zlcik6CisgICAgICAgIChEYXRhYmFzZVRyYWNrZXJBc3luY2hyb25vdXNSZW1vdmVySW1wbCk6
CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZVRyYWNrZXJBc3luY2hyb25vdXNSZW1vdmVySW1w
bDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlVHJhY2tlckFzeW5jaHJvbm91
c1JlbW92ZXJJbXBsOjpEYXRhYmFzZVRyYWNrZXJBc3luY2hyb25vdXNSZW1vdmVySW1wbCk6Cisg
ICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZVRyYWNrZXI6OnJlbW92ZU9wZW5EYXRhYmFzZSk6Cisg
ICAgICAgICogc3RvcmFnZS93aW5jZS9EYXRhYmFzZVRocmVhZFdpbkNFLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkRhdGFiYXNlVGhyZWFkOjpyZWNvcmREYXRhYmFzZU9wZW4pOgorICAgICAgICAo
V2ViQ29yZTo6RGF0YWJhc2VUaHJlYWQ6OnJlY29yZERhdGFiYXNlQ2xvc2VkKToKKyAgICAgICAg
KFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VUaHJlYWQ6OnJlY29yZERhdGFi
YXNlU2hvdWxkQmVDbG9zZWQpOgorICAgICAgICAqIHN0b3JhZ2Uvd2luY2UvRGF0YWJhc2VUaHJl
YWRXaW5DRS5oOgorCiAyMDEyLTEwLTMwICBLb25kYXBhbGx5IEthbHlhbiAgPGthbHlhbi5rb25k
YXBhbGx5QGludGVsLmNvbT4KIAogICAgICAgICBbUXRdW0VGTF1bQUNdIFdoaWxlIFVzaW5nIFdl
YkdMLCBNaW5pQnJvd3NlciBzZWdmYXVsdHMgb24gUmVmcmVzaGluZyB0aGUgcGFnZS4KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9j
aHJvbWl1bS9DaGFuZ2VMb2cKaW5kZXggMWI1ZmYzYjBkMzZhYjc5MmRkNTA2MDk1Y2QwOGNmZTY5
NWNiZmFjZC4uN2EwMTY0MTlmMjA1OTBhYTk5MmZhYzU2YWEzNDMzZTQzZmM0OWRmYSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktp
dC9jaHJvbWl1bS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyMyBAQAorMjAxMi0xMC0zMCAgRGFuIENh
cm5leSAgPGRjYXJuZXlAZ29vZ2xlLmNvbT4KKworICAgICAgICBNZW1vcnkgbGVhayB1c2luZyB3
ZWIgU1FMIERCCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD02ODMwMworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IFJlZmFjdG9yIGRhdGFiYXNlQ2xvc2VkIHRvIG5vdCByZXF1aXJlIGEgRGF0YWJhc2UgcG9pbnRl
ci4KKworICAgICAgICAqIHB1YmxpYy9XZWJEYXRhYmFzZS5oOgorICAgICAgICAoV2ViS2l0KToK
KyAgICAgICAgKFdlYkRhdGFiYXNlKToKKyAgICAgICAgKiBzcmMvRGF0YWJhc2VPYnNlcnZlci5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZU9ic2VydmVyOjpkYXRhYmFzZUNsb3NlZCk6
CisgICAgICAgICogc3JjL1dlYkRhdGFiYXNlLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViRGF0
YWJhc2U6Om5hbWUpOgorICAgICAgICAoV2ViS2l0OjpXZWJEYXRhYmFzZTo6c2VjdXJpdHlPcmln
aW4pOgorICAgICAgICAoV2ViS2l0OjpXZWJEYXRhYmFzZTo6V2ViRGF0YWJhc2UpOgorICAgICAg
ICAoV2ViS2l0KToKKwogMjAxMi0xMC0zMCAgS2VudCBUYW11cmEgIDx0a2VudEBjaHJvbWl1bS5v
cmc+CiAKICAgICAgICAgUmVtb3ZlIHVudXNlZCBjb2RlIGZvciBvbGQgaW5wdXRbdHlwZT1kYXRl
XSBVSQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9BYnN0
cmFjdERhdGFiYXNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvQWJz
dHJhY3REYXRhYmFzZS5jcHAKaW5kZXggNjI5MDdlM2UxY2U2YjA5MTVjMmIwMzQ3NjA5ZTUwN2U4
YzAxY2ViNi4uODcxMzE0Y2IyNjRjN2EzYTA3YmVjM2FhMDJlMmE5Mzc5YWJlMTY5MyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9BYnN0cmFjdERhdGFiYXNl
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0Fic3RyYWN0RGF0
YWJhc2UuY3BwCkBAIC0xNDAsNyArMTQwLDcgQEAgc3RhdGljIGlubGluZSB2b2lkIHVwZGF0ZUd1
aWRWZXJzaW9uTWFwKGludCBndWlkLCBTdHJpbmcgbmV3VmVyc2lvbikKICAgICBndWlkVG9WZXJz
aW9uTWFwKCkuc2V0KGd1aWQsIG5ld1ZlcnNpb24uaXNFbXB0eSgpID8gU3RyaW5nKCkgOiBuZXdW
ZXJzaW9uLmlzb2xhdGVkQ29weSgpKTsKIH0KIAotdHlwZWRlZiBIYXNoTWFwPGludCwgSGFzaFNl
dDxBYnN0cmFjdERhdGFiYXNlKj4qPiBHdWlkRGF0YWJhc2VNYXA7Cit0eXBlZGVmIEhhc2hNYXA8
aW50LCBIYXNoU2V0PEFic3RyYWN0RGF0YWJhc2U6OkNvcmUqPio+IEd1aWREYXRhYmFzZU1hcDsK
IHN0YXRpYyBHdWlkRGF0YWJhc2VNYXAmIGd1aWRUb0RhdGFiYXNlTWFwKCkKIHsKICAgICAvLyBF
bnN1cmUgdGhlIHRoZSBtdXRleCBpcyBsb2NrZWQuCkBAIC0xOTQsOCArMTk0LDYgQEAgQWJzdHJh
Y3REYXRhYmFzZTo6QWJzdHJhY3REYXRhYmFzZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250
ZXh0LCBjb25zdCBTdHJpbmcKICAgICAsIG1fZXhwZWN0ZWRWZXJzaW9uKGV4cGVjdGVkVmVyc2lv
bi5pc29sYXRlZENvcHkoKSkKICAgICAsIG1fZGlzcGxheU5hbWUoZGlzcGxheU5hbWUuaXNvbGF0
ZWRDb3B5KCkpCiAgICAgLCBtX2VzdGltYXRlZFNpemUoZXN0aW1hdGVkU2l6ZSkKLSAgICAsIG1f
Z3VpZCgwKQotICAgICwgbV9vcGVuZWQoZmFsc2UpCiAgICAgLCBtX25ldyhmYWxzZSkKICAgICAs
IG1faXNTeW5jRGF0YWJhc2UoZGF0YWJhc2VUeXBlID09IFN5bmNEYXRhYmFzZSkKIHsKQEAgLTIw
NywyOCArMjA1LDQxIEBAIEFic3RyYWN0RGF0YWJhc2U6OkFic3RyYWN0RGF0YWJhc2UoU2NyaXB0
RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgY29uc3QgU3RyaW5nCiAgICAgaWYgKG1fbmFtZS5p
c051bGwoKSkKICAgICAgICAgbV9uYW1lID0gIiI7CiAKLSAgICB7Ci0gICAgICAgIE11dGV4TG9j
a2VyIGxvY2tlcihndWlkTXV0ZXgoKSk7Ci0gICAgICAgIG1fZ3VpZCA9IGd1aWRGb3JPcmlnaW5B
bmROYW1lKHNlY3VyaXR5T3JpZ2luKCktPnRvU3RyaW5nKCksIG5hbWUpOwotICAgICAgICBIYXNo
U2V0PEFic3RyYWN0RGF0YWJhc2UqPiogaGFzaFNldCA9IGd1aWRUb0RhdGFiYXNlTWFwKCkuZ2V0
KG1fZ3VpZCk7Ci0gICAgICAgIGlmICghaGFzaFNldCkgewotICAgICAgICAgICAgaGFzaFNldCA9
IG5ldyBIYXNoU2V0PEFic3RyYWN0RGF0YWJhc2UqPjsKLSAgICAgICAgICAgIGd1aWRUb0RhdGFi
YXNlTWFwKCkuc2V0KG1fZ3VpZCwgaGFzaFNldCk7Ci0gICAgICAgIH0KLQotICAgICAgICBoYXNo
U2V0LT5hZGQodGhpcyk7Ci0gICAgfQotCisgICAgbV9jb3JlID0gQ29yZTo6Y3JlYXRlKGNvbnRl
eHQsIHNlY3VyaXR5T3JpZ2luKCksIG5hbWUpOwogICAgIG1fZmlsZW5hbWUgPSBEYXRhYmFzZVRy
YWNrZXI6OnRyYWNrZXIoKS5mdWxsUGF0aEZvckRhdGFiYXNlKHNlY3VyaXR5T3JpZ2luKCksIG1f
bmFtZSk7CiAgICAgRGF0YWJhc2VUcmFja2VyOjp0cmFja2VyKCkuYWRkT3BlbkRhdGFiYXNlKHRo
aXMpOwogfQogCiBBYnN0cmFjdERhdGFiYXNlOjp+QWJzdHJhY3REYXRhYmFzZSgpCiB7Cit9CisK
K0Fic3RyYWN0RGF0YWJhc2U6OkNvcmU6On5Db3JlKCkKK3sKICAgICBBU1NFUlQoIW1fb3BlbmVk
KTsKKyAgICBBU1NFUlQoIW1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dCB8fCBtX3NjcmlwdEV4ZWN1
dGlvbkNvbnRleHQtPmlzQ29udGV4dFRocmVhZCgpKTsKIH0KIAotdm9pZCBBYnN0cmFjdERhdGFi
YXNlOjpjbG9zZURhdGFiYXNlKCkKK0Fic3RyYWN0RGF0YWJhc2U6OkNvcmU6OkNvcmUoU2NyaXB0
RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgU2VjdXJpdHlPcmlnaW4qIG9yaWdpbiwgY29uc3Qg
U3RyaW5nJiBuYW1lKQorICAgIDogbV9vcGVuZWQoZmFsc2UpCisgICAgLCBtX3NjcmlwdEV4ZWN1
dGlvbkNvbnRleHQoY29udGV4dCkKK3sKKyAgICBNdXRleExvY2tlciBsb2NrZXIoZ3VpZE11dGV4
KCkpOworICAgIG1fZ3VpZCA9IGd1aWRGb3JPcmlnaW5BbmROYW1lKG9yaWdpbi0+dG9TdHJpbmco
KSwgbmFtZSk7CisgICAgSGFzaFNldDxDb3JlKj4qIGhhc2hTZXQgPSBndWlkVG9EYXRhYmFzZU1h
cCgpLmdldChtX2d1aWQpOworICAgIGlmICghaGFzaFNldCkgeworICAgICAgICBoYXNoU2V0ID0g
bmV3IEhhc2hTZXQ8Q29yZSo+OworICAgICAgICBndWlkVG9EYXRhYmFzZU1hcCgpLnNldChtX2d1
aWQsIGhhc2hTZXQpOworICAgIH0KKyAgICBoYXNoU2V0LT5hZGQodGhpcyk7Cit9CisKK1Bhc3NS
ZWZQdHI8U2NyaXB0RXhlY3V0aW9uQ29udGV4dD4gQWJzdHJhY3REYXRhYmFzZTo6Q29yZTo6cmVs
ZWFzZVNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKQoreworICAgIHJldHVybiBtX3NjcmlwdEV4ZWN1
dGlvbkNvbnRleHQucmVsZWFzZSgpOworfQorCit2b2lkIEFic3RyYWN0RGF0YWJhc2U6OkNvcmU6
OmNsb3NlKCkKIHsKICAgICBpZiAoIW1fb3BlbmVkKQogICAgICAgICByZXR1cm47CkBAIC0yMzgs
NyArMjQ5LDcgQEAgdm9pZCBBYnN0cmFjdERhdGFiYXNlOjpjbG9zZURhdGFiYXNlKCkKICAgICB7
CiAgICAgICAgIE11dGV4TG9ja2VyIGxvY2tlcihndWlkTXV0ZXgoKSk7CiAKLSAgICAgICAgSGFz
aFNldDxBYnN0cmFjdERhdGFiYXNlKj4qIGhhc2hTZXQgPSBndWlkVG9EYXRhYmFzZU1hcCgpLmdl
dChtX2d1aWQpOworICAgICAgICBIYXNoU2V0PENvcmUqPiogaGFzaFNldCA9IGd1aWRUb0RhdGFi
YXNlTWFwKCkuZ2V0KG1fZ3VpZCk7CiAgICAgICAgIEFTU0VSVChoYXNoU2V0KTsKICAgICAgICAg
QVNTRVJUKGhhc2hTZXQtPmNvbnRhaW5zKHRoaXMpKTsKICAgICAgICAgaGFzaFNldC0+cmVtb3Zl
KHRoaXMpOwpAQCAtMjY0LDI2ICsyNzUsMjggQEAgYm9vbCBBYnN0cmFjdERhdGFiYXNlOjpwZXJm
b3JtT3BlbkFuZFZlcmlmeShib29sIHNob3VsZFNldFZlcnNpb25Jbk5ld0RhdGFiYXNlLAogCiAg
ICAgY29uc3QgaW50IG1heFNxbGl0ZUJ1c3lXYWl0VGltZSA9IDMwMDAwOwogCi0gICAgaWYgKCFt
X3NxbGl0ZURhdGFiYXNlLm9wZW4obV9maWxlbmFtZSwgdHJ1ZSkpIHsKLSAgICAgICAgcmVwb3J0
T3BlbkRhdGFiYXNlUmVzdWx0KDEsIElOVkFMSURfU1RBVEVfRVJSLCBtX3NxbGl0ZURhdGFiYXNl
Lmxhc3RFcnJvcigpKTsKLSAgICAgICAgZXJyb3JNZXNzYWdlID0gZm9ybWF0RXJyb3JNZXNzYWdl
KCJ1bmFibGUgdG8gb3BlbiBkYXRhYmFzZSIsIG1fc3FsaXRlRGF0YWJhc2UubGFzdEVycm9yKCks
IG1fc3FsaXRlRGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOworICAgIFNRTGl0ZURhdGFiYXNlJiBz
cWxpdGVEYXRhYmFzZSA9IG1fY29yZS0+c3FsaXRlRGF0YWJhc2UoKTsKKworICAgIGlmICghc3Fs
aXRlRGF0YWJhc2Uub3BlbihtX2ZpbGVuYW1lLCB0cnVlKSkgeworICAgICAgICByZXBvcnRPcGVu
RGF0YWJhc2VSZXN1bHQoMSwgSU5WQUxJRF9TVEFURV9FUlIsIHNxbGl0ZURhdGFiYXNlLmxhc3RF
cnJvcigpKTsKKyAgICAgICAgZXJyb3JNZXNzYWdlID0gZm9ybWF0RXJyb3JNZXNzYWdlKCJ1bmFi
bGUgdG8gb3BlbiBkYXRhYmFzZSIsIHNxbGl0ZURhdGFiYXNlLmxhc3RFcnJvcigpLCBzcWxpdGVE
YXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7CiAgICAgICAgIGVjID0gSU5WQUxJRF9TVEFURV9FUlI7
CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9Ci0gICAgaWYgKCFtX3NxbGl0ZURhdGFiYXNl
LnR1cm5PbkluY3JlbWVudGFsQXV0b1ZhY3V1bSgpKQotICAgICAgICBMT0dfRVJST1IoIlVuYWJs
ZSB0byB0dXJuIG9uIGluY3JlbWVudGFsIGF1dG8tdmFjdXVtICglZCAlcykiLCBtX3NxbGl0ZURh
dGFiYXNlLmxhc3RFcnJvcigpLCBtX3NxbGl0ZURhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKKyAg
ICBpZiAoIXNxbGl0ZURhdGFiYXNlLnR1cm5PbkluY3JlbWVudGFsQXV0b1ZhY3V1bSgpKQorICAg
ICAgICBMT0dfRVJST1IoIlVuYWJsZSB0byB0dXJuIG9uIGluY3JlbWVudGFsIGF1dG8tdmFjdXVt
ICglZCAlcykiLCBzcWxpdGVEYXRhYmFzZS5sYXN0RXJyb3IoKSwgc3FsaXRlRGF0YWJhc2UubGFz
dEVycm9yTXNnKCkpOwogCi0gICAgbV9zcWxpdGVEYXRhYmFzZS5zZXRCdXN5VGltZW91dChtYXhT
cWxpdGVCdXN5V2FpdFRpbWUpOworICAgIHNxbGl0ZURhdGFiYXNlLnNldEJ1c3lUaW1lb3V0KG1h
eFNxbGl0ZUJ1c3lXYWl0VGltZSk7CiAKICAgICBTdHJpbmcgY3VycmVudFZlcnNpb247CiAgICAg
ewogICAgICAgICBNdXRleExvY2tlciBsb2NrZXIoZ3VpZE11dGV4KCkpOwogCi0gICAgICAgIEd1
aWRWZXJzaW9uTWFwOjppdGVyYXRvciBlbnRyeSA9IGd1aWRUb1ZlcnNpb25NYXAoKS5maW5kKG1f
Z3VpZCk7CisgICAgICAgIEd1aWRWZXJzaW9uTWFwOjppdGVyYXRvciBlbnRyeSA9IGd1aWRUb1Zl
cnNpb25NYXAoKS5maW5kKG1fY29yZS0+Z3VpZCgpKTsKICAgICAgICAgaWYgKGVudHJ5ICE9IGd1
aWRUb1ZlcnNpb25NYXAoKS5lbmQoKSkgewogICAgICAgICAgICAgLy8gTWFwIG51bGwgc3RyaW5n
IHRvIGVtcHR5IHN0cmluZyAoc2VlIHVwZGF0ZUd1aWRWZXJzaW9uTWFwKCkpLgogICAgICAgICAg
ICAgY3VycmVudFZlcnNpb24gPSBlbnRyeS0+dmFsdWUuaXNOdWxsKCkgPyBlbXB0eVN0cmluZygp
IDogZW50cnktPnZhbHVlLmlzb2xhdGVkQ29weSgpOwotICAgICAgICAgICAgTE9HKFN0b3JhZ2VB
UEksICJDdXJyZW50IGNhY2hlZCB2ZXJzaW9uIGZvciBndWlkICVpIGlzICVzIiwgbV9ndWlkLCBj
dXJyZW50VmVyc2lvbi5hc2NpaSgpLmRhdGEoKSk7CisgICAgICAgICAgICBMT0coU3RvcmFnZUFQ
SSwgIkN1cnJlbnQgY2FjaGVkIHZlcnNpb24gZm9yIGd1aWQgJWkgaXMgJXMiLCBtX2NvcmUtPmd1
aWQoKSwgY3VycmVudFZlcnNpb24uYXNjaWkoKS5kYXRhKCkpOwogCiAjaWYgUExBVEZPUk0oQ0hS
T01JVU0pCiAgICAgICAgICAgICAvLyBOb3RlOiBJbiBtdWx0aS1wcm9jZXNzIGJyb3dzZXJzIHRo
ZSBjYWNoZWQgdmFsdWUgbWF5IGJlIGluYWNjdXJhdGUsIGJ1dApAQCAtMjkzLDQ1ICszMDYsNDUg
QEAgYm9vbCBBYnN0cmFjdERhdGFiYXNlOjpwZXJmb3JtT3BlbkFuZFZlcmlmeShib29sIHNob3Vs
ZFNldFZlcnNpb25Jbk5ld0RhdGFiYXNlLAogICAgICAgICAgICAgLy8gdGhlIHZhbHVlIGZyb20g
dGhlIGRhdGFiYXNlIGZpbGUgd2l0aG91dCB3YWl0aW5nLgogICAgICAgICAgICAgLy8gRklYTUU6
IEFkZCBhbiBhc3luYyBvcGVuRGF0YWJhc2UgbWV0aG9kIHRvIHRoZSBEYXRhYmFzZUFQSS4KICAg
ICAgICAgICAgIGNvbnN0IGludCBub1NxbGl0ZUJ1c3lXYWl0VGltZSA9IDA7Ci0gICAgICAgICAg
ICBtX3NxbGl0ZURhdGFiYXNlLnNldEJ1c3lUaW1lb3V0KG5vU3FsaXRlQnVzeVdhaXRUaW1lKTsK
KyAgICAgICAgICAgIHNxbGl0ZURhdGFiYXNlLnNldEJ1c3lUaW1lb3V0KG5vU3FsaXRlQnVzeVdh
aXRUaW1lKTsKICAgICAgICAgICAgIFN0cmluZyB2ZXJzaW9uRnJvbURhdGFiYXNlOwogICAgICAg
ICAgICAgaWYgKGdldFZlcnNpb25Gcm9tRGF0YWJhc2UodmVyc2lvbkZyb21EYXRhYmFzZSwgZmFs
c2UpKSB7CiAgICAgICAgICAgICAgICAgY3VycmVudFZlcnNpb24gPSB2ZXJzaW9uRnJvbURhdGFi
YXNlOwotICAgICAgICAgICAgICAgIHVwZGF0ZUd1aWRWZXJzaW9uTWFwKG1fZ3VpZCwgY3VycmVu
dFZlcnNpb24pOworICAgICAgICAgICAgICAgIHVwZGF0ZUd1aWRWZXJzaW9uTWFwKG1fY29yZS0+
Z3VpZCgpLCBjdXJyZW50VmVyc2lvbik7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBtX3Nx
bGl0ZURhdGFiYXNlLnNldEJ1c3lUaW1lb3V0KG1heFNxbGl0ZUJ1c3lXYWl0VGltZSk7CisgICAg
ICAgICAgICBzcWxpdGVEYXRhYmFzZS5zZXRCdXN5VGltZW91dChtYXhTcWxpdGVCdXN5V2FpdFRp
bWUpOwogI2VuZGlmCiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBMT0coU3RvcmFnZUFQ
SSwgIk5vIGNhY2hlZCB2ZXJzaW9uIGZvciBndWlkICVpIiwgbV9ndWlkKTsKKyAgICAgICAgICAg
IExPRyhTdG9yYWdlQVBJLCAiTm8gY2FjaGVkIHZlcnNpb24gZm9yIGd1aWQgJWkiLCBtX2NvcmUt
Pmd1aWQoKSk7CiAKLSAgICAgICAgICAgIFNRTGl0ZVRyYW5zYWN0aW9uIHRyYW5zYWN0aW9uKG1f
c3FsaXRlRGF0YWJhc2UpOworICAgICAgICAgICAgU1FMaXRlVHJhbnNhY3Rpb24gdHJhbnNhY3Rp
b24oc3FsaXRlRGF0YWJhc2UpOwogICAgICAgICAgICAgdHJhbnNhY3Rpb24uYmVnaW4oKTsKICAg
ICAgICAgICAgIGlmICghdHJhbnNhY3Rpb24uaW5Qcm9ncmVzcygpKSB7Ci0gICAgICAgICAgICAg
ICAgcmVwb3J0T3BlbkRhdGFiYXNlUmVzdWx0KDIsIElOVkFMSURfU1RBVEVfRVJSLCBtX3NxbGl0
ZURhdGFiYXNlLmxhc3RFcnJvcigpKTsKLSAgICAgICAgICAgICAgICBlcnJvck1lc3NhZ2UgPSBm
b3JtYXRFcnJvck1lc3NhZ2UoInVuYWJsZSB0byBvcGVuIGRhdGFiYXNlLCBmYWlsZWQgdG8gc3Rh
cnQgdHJhbnNhY3Rpb24iLCBtX3NxbGl0ZURhdGFiYXNlLmxhc3RFcnJvcigpLCBtX3NxbGl0ZURh
dGFiYXNlLmxhc3RFcnJvck1zZygpKTsKKyAgICAgICAgICAgICAgICByZXBvcnRPcGVuRGF0YWJh
c2VSZXN1bHQoMiwgSU5WQUxJRF9TVEFURV9FUlIsIHNxbGl0ZURhdGFiYXNlLmxhc3RFcnJvcigp
KTsKKyAgICAgICAgICAgICAgICBlcnJvck1lc3NhZ2UgPSBmb3JtYXRFcnJvck1lc3NhZ2UoInVu
YWJsZSB0byBvcGVuIGRhdGFiYXNlLCBmYWlsZWQgdG8gc3RhcnQgdHJhbnNhY3Rpb24iLCBzcWxp
dGVEYXRhYmFzZS5sYXN0RXJyb3IoKSwgc3FsaXRlRGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOwog
ICAgICAgICAgICAgICAgIGVjID0gSU5WQUxJRF9TVEFURV9FUlI7Ci0gICAgICAgICAgICAgICAg
bV9zcWxpdGVEYXRhYmFzZS5jbG9zZSgpOworICAgICAgICAgICAgICAgIHNxbGl0ZURhdGFiYXNl
LmNsb3NlKCk7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgfQog
CiAgICAgICAgICAgICBTdHJpbmcgdGFibGVOYW1lKGluZm9UYWJsZU5hbWUpOwotICAgICAgICAg
ICAgaWYgKCFtX3NxbGl0ZURhdGFiYXNlLnRhYmxlRXhpc3RzKHRhYmxlTmFtZSkpIHsKKyAgICAg
ICAgICAgIGlmICghc3FsaXRlRGF0YWJhc2UudGFibGVFeGlzdHModGFibGVOYW1lKSkgewogICAg
ICAgICAgICAgICAgIG1fbmV3ID0gdHJ1ZTsKIAotICAgICAgICAgICAgICAgIGlmICghbV9zcWxp
dGVEYXRhYmFzZS5leGVjdXRlQ29tbWFuZCgiQ1JFQVRFIFRBQkxFICIgKyB0YWJsZU5hbWUgKyAi
IChrZXkgVEVYVCBOT1QgTlVMTCBPTiBDT05GTElDVCBGQUlMIFVOSVFVRSBPTiBDT05GTElDVCBS
RVBMQUNFLHZhbHVlIFRFWFQgTk9UIE5VTEwgT04gQ09ORkxJQ1QgRkFJTCk7IikpIHsKLSAgICAg
ICAgICAgICAgICAgICAgcmVwb3J0T3BlbkRhdGFiYXNlUmVzdWx0KDMsIElOVkFMSURfU1RBVEVf
RVJSLCBtX3NxbGl0ZURhdGFiYXNlLmxhc3RFcnJvcigpKTsKLSAgICAgICAgICAgICAgICAgICAg
ZXJyb3JNZXNzYWdlID0gZm9ybWF0RXJyb3JNZXNzYWdlKCJ1bmFibGUgdG8gb3BlbiBkYXRhYmFz
ZSwgZmFpbGVkIHRvIGNyZWF0ZSAnaW5mbycgdGFibGUiLCBtX3NxbGl0ZURhdGFiYXNlLmxhc3RF
cnJvcigpLCBtX3NxbGl0ZURhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKKyAgICAgICAgICAgICAg
ICBpZiAoIXNxbGl0ZURhdGFiYXNlLmV4ZWN1dGVDb21tYW5kKCJDUkVBVEUgVEFCTEUgIiArIHRh
YmxlTmFtZSArICIgKGtleSBURVhUIE5PVCBOVUxMIE9OIENPTkZMSUNUIEZBSUwgVU5JUVVFIE9O
IENPTkZMSUNUIFJFUExBQ0UsdmFsdWUgVEVYVCBOT1QgTlVMTCBPTiBDT05GTElDVCBGQUlMKTsi
KSkgeworICAgICAgICAgICAgICAgICAgICByZXBvcnRPcGVuRGF0YWJhc2VSZXN1bHQoMywgSU5W
QUxJRF9TVEFURV9FUlIsIHNxbGl0ZURhdGFiYXNlLmxhc3RFcnJvcigpKTsKKyAgICAgICAgICAg
ICAgICAgICAgZXJyb3JNZXNzYWdlID0gZm9ybWF0RXJyb3JNZXNzYWdlKCJ1bmFibGUgdG8gb3Bl
biBkYXRhYmFzZSwgZmFpbGVkIHRvIGNyZWF0ZSAnaW5mbycgdGFibGUiLCBzcWxpdGVEYXRhYmFz
ZS5sYXN0RXJyb3IoKSwgc3FsaXRlRGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOwogICAgICAgICAg
ICAgICAgICAgICBlYyA9IElOVkFMSURfU1RBVEVfRVJSOwogICAgICAgICAgICAgICAgICAgICB0
cmFuc2FjdGlvbi5yb2xsYmFjaygpOwotICAgICAgICAgICAgICAgICAgICBtX3NxbGl0ZURhdGFi
YXNlLmNsb3NlKCk7CisgICAgICAgICAgICAgICAgICAgIHNxbGl0ZURhdGFiYXNlLmNsb3NlKCk7
CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICB9IGVsc2UgaWYgKCFnZXRWZXJzaW9uRnJvbURhdGFiYXNlKGN1cnJlbnRWZXJz
aW9uLCBmYWxzZSkpIHsKLSAgICAgICAgICAgICAgICByZXBvcnRPcGVuRGF0YWJhc2VSZXN1bHQo
NCwgSU5WQUxJRF9TVEFURV9FUlIsIG1fc3FsaXRlRGF0YWJhc2UubGFzdEVycm9yKCkpOwotICAg
ICAgICAgICAgICAgIGVycm9yTWVzc2FnZSA9IGZvcm1hdEVycm9yTWVzc2FnZSgidW5hYmxlIHRv
IG9wZW4gZGF0YWJhc2UsIGZhaWxlZCB0byByZWFkIGN1cnJlbnQgdmVyc2lvbiIsIG1fc3FsaXRl
RGF0YWJhc2UubGFzdEVycm9yKCksIG1fc3FsaXRlRGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOwor
ICAgICAgICAgICAgICAgIHJlcG9ydE9wZW5EYXRhYmFzZVJlc3VsdCg0LCBJTlZBTElEX1NUQVRF
X0VSUiwgc3FsaXRlRGF0YWJhc2UubGFzdEVycm9yKCkpOworICAgICAgICAgICAgICAgIGVycm9y
TWVzc2FnZSA9IGZvcm1hdEVycm9yTWVzc2FnZSgidW5hYmxlIHRvIG9wZW4gZGF0YWJhc2UsIGZh
aWxlZCB0byByZWFkIGN1cnJlbnQgdmVyc2lvbiIsIHNxbGl0ZURhdGFiYXNlLmxhc3RFcnJvcigp
LCBzcWxpdGVEYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7CiAgICAgICAgICAgICAgICAgZWMgPSBJ
TlZBTElEX1NUQVRFX0VSUjsKICAgICAgICAgICAgICAgICB0cmFuc2FjdGlvbi5yb2xsYmFjaygp
OwotICAgICAgICAgICAgICAgIG1fc3FsaXRlRGF0YWJhc2UuY2xvc2UoKTsKKyAgICAgICAgICAg
ICAgICBzcWxpdGVEYXRhYmFzZS5jbG9zZSgpOwogICAgICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICAgICAgICAgIH0KIApAQCAtMzQwLDE2ICszNTMsMTYgQEAgYm9vbCBBYnN0cmFjdERh
dGFiYXNlOjpwZXJmb3JtT3BlbkFuZFZlcmlmeShib29sIHNob3VsZFNldFZlcnNpb25Jbk5ld0Rh
dGFiYXNlLAogICAgICAgICAgICAgfSBlbHNlIGlmICghbV9uZXcgfHwgc2hvdWxkU2V0VmVyc2lv
bkluTmV3RGF0YWJhc2UpIHsKICAgICAgICAgICAgICAgICBMT0coU3RvcmFnZUFQSSwgIlNldHRp
bmcgdmVyc2lvbiAlcyBpbiBkYXRhYmFzZSAlcyB0aGF0IHdhcyBqdXN0IGNyZWF0ZWQiLCBtX2V4
cGVjdGVkVmVyc2lvbi5hc2NpaSgpLmRhdGEoKSwgZGF0YWJhc2VEZWJ1Z05hbWUoKS5hc2NpaSgp
LmRhdGEoKSk7CiAgICAgICAgICAgICAgICAgaWYgKCFzZXRWZXJzaW9uSW5EYXRhYmFzZShtX2V4
cGVjdGVkVmVyc2lvbiwgZmFsc2UpKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJlcG9ydE9wZW5E
YXRhYmFzZVJlc3VsdCg1LCBJTlZBTElEX1NUQVRFX0VSUiwgbV9zcWxpdGVEYXRhYmFzZS5sYXN0
RXJyb3IoKSk7Ci0gICAgICAgICAgICAgICAgICAgIGVycm9yTWVzc2FnZSA9IGZvcm1hdEVycm9y
TWVzc2FnZSgidW5hYmxlIHRvIG9wZW4gZGF0YWJhc2UsIGZhaWxlZCB0byB3cml0ZSBjdXJyZW50
IHZlcnNpb24iLCBtX3NxbGl0ZURhdGFiYXNlLmxhc3RFcnJvcigpLCBtX3NxbGl0ZURhdGFiYXNl
Lmxhc3RFcnJvck1zZygpKTsKKyAgICAgICAgICAgICAgICAgICAgcmVwb3J0T3BlbkRhdGFiYXNl
UmVzdWx0KDUsIElOVkFMSURfU1RBVEVfRVJSLCBzcWxpdGVEYXRhYmFzZS5sYXN0RXJyb3IoKSk7
CisgICAgICAgICAgICAgICAgICAgIGVycm9yTWVzc2FnZSA9IGZvcm1hdEVycm9yTWVzc2FnZSgi
dW5hYmxlIHRvIG9wZW4gZGF0YWJhc2UsIGZhaWxlZCB0byB3cml0ZSBjdXJyZW50IHZlcnNpb24i
LCBzcWxpdGVEYXRhYmFzZS5sYXN0RXJyb3IoKSwgc3FsaXRlRGF0YWJhc2UubGFzdEVycm9yTXNn
KCkpOwogICAgICAgICAgICAgICAgICAgICBlYyA9IElOVkFMSURfU1RBVEVfRVJSOwogICAgICAg
ICAgICAgICAgICAgICB0cmFuc2FjdGlvbi5yb2xsYmFjaygpOwotICAgICAgICAgICAgICAgICAg
ICBtX3NxbGl0ZURhdGFiYXNlLmNsb3NlKCk7CisgICAgICAgICAgICAgICAgICAgIHNxbGl0ZURh
dGFiYXNlLmNsb3NlKCk7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgY3VycmVudFZlcnNpb24gPSBtX2V4cGVjdGVk
VmVyc2lvbjsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHVwZGF0ZUd1aWRWZXJzaW9uTWFw
KG1fZ3VpZCwgY3VycmVudFZlcnNpb24pOworICAgICAgICAgICAgdXBkYXRlR3VpZFZlcnNpb25N
YXAobV9jb3JlLT5ndWlkKCksIGN1cnJlbnRWZXJzaW9uKTsKICAgICAgICAgICAgIHRyYW5zYWN0
aW9uLmNvbW1pdCgpOwogICAgICAgICB9CiAgICAgfQpAQCAtMzY1LDE0ICszNzgsMTQgQEAgYm9v
bCBBYnN0cmFjdERhdGFiYXNlOjpwZXJmb3JtT3BlbkFuZFZlcmlmeShib29sIHNob3VsZFNldFZl
cnNpb25Jbk5ld0RhdGFiYXNlLAogICAgICAgICByZXBvcnRPcGVuRGF0YWJhc2VSZXN1bHQoNiwg
SU5WQUxJRF9TVEFURV9FUlIsIDApOwogICAgICAgICBlcnJvck1lc3NhZ2UgPSAidW5hYmxlIHRv
IG9wZW4gZGF0YWJhc2UsIHZlcnNpb24gbWlzbWF0Y2gsICciICsgbV9leHBlY3RlZFZlcnNpb24g
KyAiJyBkb2VzIG5vdCBtYXRjaCB0aGUgY3VycmVudFZlcnNpb24gb2YgJyIgKyBjdXJyZW50VmVy
c2lvbiArICInIjsKICAgICAgICAgZWMgPSBJTlZBTElEX1NUQVRFX0VSUjsKLSAgICAgICAgbV9z
cWxpdGVEYXRhYmFzZS5jbG9zZSgpOworICAgICAgICBzcWxpdGVEYXRhYmFzZS5jbG9zZSgpOwog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCiAgICAgQVNTRVJUKG1fZGF0YWJhc2VBdXRo
b3JpemVyKTsKLSAgICBtX3NxbGl0ZURhdGFiYXNlLnNldEF1dGhvcml6ZXIobV9kYXRhYmFzZUF1
dGhvcml6ZXIpOworICAgIHNxbGl0ZURhdGFiYXNlLnNldEF1dGhvcml6ZXIobV9kYXRhYmFzZUF1
dGhvcml6ZXIpOwogCi0gICAgbV9vcGVuZWQgPSB0cnVlOworICAgIG1fY29yZS0+c2V0T3BlbmVk
KCk7CiAKICAgICBpZiAobV9uZXcgJiYgIXNob3VsZFNldFZlcnNpb25Jbk5ld0RhdGFiYXNlKQog
ICAgICAgICBtX2V4cGVjdGVkVmVyc2lvbiA9ICIiOyAvLyBUaGUgY2FsbGVyIHByb3ZpZGVkIGEg
Y3JlYXRpb25DYWxsYmFjayB3aGljaCB3aWxsIHNldCB0aGUgZXhwZWN0ZWQgdmVyc2lvbi4KQEAg
LTM4MSwxMSArMzk0LDYgQEAgYm9vbCBBYnN0cmFjdERhdGFiYXNlOjpwZXJmb3JtT3BlbkFuZFZl
cmlmeShib29sIHNob3VsZFNldFZlcnNpb25Jbk5ld0RhdGFiYXNlLAogICAgIHJldHVybiB0cnVl
OwogfQogCi1TY3JpcHRFeGVjdXRpb25Db250ZXh0KiBBYnN0cmFjdERhdGFiYXNlOjpzY3JpcHRF
eGVjdXRpb25Db250ZXh0KCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9zY3JpcHRFeGVjdXRpb25D
b250ZXh0LmdldCgpOwotfQotCiBTZWN1cml0eU9yaWdpbiogQWJzdHJhY3REYXRhYmFzZTo6c2Vj
dXJpdHlPcmlnaW4oKSBjb25zdAogewogICAgIHJldHVybiBtX2NvbnRleHRUaHJlYWRTZWN1cml0
eU9yaWdpbi5nZXQoKTsKQEAgLTQyMCw3ICs0MjgsNyBAQCBib29sIEFic3RyYWN0RGF0YWJhc2U6
OmdldFZlcnNpb25Gcm9tRGF0YWJhc2UoU3RyaW5nJiB2ZXJzaW9uLCBib29sIHNob3VsZENhY2hl
VgogCiAgICAgbV9kYXRhYmFzZUF1dGhvcml6ZXItPmRpc2FibGUoKTsKIAotICAgIGJvb2wgcmVz
dWx0ID0gcmV0cmlldmVUZXh0UmVzdWx0RnJvbURhdGFiYXNlKG1fc3FsaXRlRGF0YWJhc2UsIHF1
ZXJ5LCB2ZXJzaW9uKTsKKyAgICBib29sIHJlc3VsdCA9IHJldHJpZXZlVGV4dFJlc3VsdEZyb21E
YXRhYmFzZShtX2NvcmUtPnNxbGl0ZURhdGFiYXNlKCksIHF1ZXJ5LCB2ZXJzaW9uKTsKICAgICBp
ZiAocmVzdWx0KSB7CiAgICAgICAgIGlmIChzaG91bGRDYWNoZVZlcnNpb24pCiAgICAgICAgICAg
ICBzZXRDYWNoZWRWZXJzaW9uKHZlcnNpb24pOwpAQCAtNDQwLDcgKzQ0OCw3IEBAIGJvb2wgQWJz
dHJhY3REYXRhYmFzZTo6c2V0VmVyc2lvbkluRGF0YWJhc2UoY29uc3QgU3RyaW5nJiB2ZXJzaW9u
LCBib29sIHNob3VsZENhCiAKICAgICBtX2RhdGFiYXNlQXV0aG9yaXplci0+ZGlzYWJsZSgpOwog
Ci0gICAgYm9vbCByZXN1bHQgPSBzZXRUZXh0VmFsdWVJbkRhdGFiYXNlKG1fc3FsaXRlRGF0YWJh
c2UsIHF1ZXJ5LCB2ZXJzaW9uKTsKKyAgICBib29sIHJlc3VsdCA9IHNldFRleHRWYWx1ZUluRGF0
YWJhc2UobV9jb3JlLT5zcWxpdGVEYXRhYmFzZSgpLCBxdWVyeSwgdmVyc2lvbik7CiAgICAgaWYg
KHJlc3VsdCkgewogICAgICAgICBpZiAoc2hvdWxkQ2FjaGVWZXJzaW9uKQogICAgICAgICAgICAg
c2V0Q2FjaGVkVmVyc2lvbih2ZXJzaW9uKTsKQEAgLTQ2MCwxOSArNDY4LDE5IEBAIHZvaWQgQWJz
dHJhY3REYXRhYmFzZTo6c2V0RXhwZWN0ZWRWZXJzaW9uKGNvbnN0IFN0cmluZyYgdmVyc2lvbikK
IFN0cmluZyBBYnN0cmFjdERhdGFiYXNlOjpnZXRDYWNoZWRWZXJzaW9uKCkgY29uc3QKIHsKICAg
ICBNdXRleExvY2tlciBsb2NrZXIoZ3VpZE11dGV4KCkpOwotICAgIHJldHVybiBndWlkVG9WZXJz
aW9uTWFwKCkuZ2V0KG1fZ3VpZCkuaXNvbGF0ZWRDb3B5KCk7CisgICAgcmV0dXJuIGd1aWRUb1Zl
cnNpb25NYXAoKS5nZXQobV9jb3JlLT5ndWlkKCkpLmlzb2xhdGVkQ29weSgpOwogfQogCiB2b2lk
IEFic3RyYWN0RGF0YWJhc2U6OnNldENhY2hlZFZlcnNpb24oY29uc3QgU3RyaW5nJiBhY3R1YWxW
ZXJzaW9uKQogewogICAgIC8vIFVwZGF0ZSB0aGUgaW4gbWVtb3J5IGRhdGFiYXNlIHZlcnNpb24g
bWFwLgogICAgIE11dGV4TG9ja2VyIGxvY2tlcihndWlkTXV0ZXgoKSk7Ci0gICAgdXBkYXRlR3Vp
ZFZlcnNpb25NYXAobV9ndWlkLCBhY3R1YWxWZXJzaW9uKTsKKyAgICB1cGRhdGVHdWlkVmVyc2lv
bk1hcChtX2NvcmUtPmd1aWQoKSwgYWN0dWFsVmVyc2lvbik7CiB9CiAKIGJvb2wgQWJzdHJhY3RE
YXRhYmFzZTo6Z2V0QWN0dWFsVmVyc2lvbkZvclRyYW5zYWN0aW9uKFN0cmluZyAmYWN0dWFsVmVy
c2lvbikKIHsKLSAgICBBU1NFUlQobV9zcWxpdGVEYXRhYmFzZS50cmFuc2FjdGlvbkluUHJvZ3Jl
c3MoKSk7CisgICAgQVNTRVJUKG1fY29yZS0+c3FsaXRlRGF0YWJhc2UoKS50cmFuc2FjdGlvbklu
UHJvZ3Jlc3MoKSk7CiAjaWYgUExBVEZPUk0oQ0hST01JVU0pCiAgICAgLy8gTm90ZTogSW4gbXVs
dGktcHJvY2VzcyBicm93c2VycyB0aGUgY2FjaGVkIHZhbHVlIG1heSBiZSBpbmFjY3VyYXRlLgog
ICAgIC8vIFNvIHdlIHJldHJpZXZlIHRoZSB2YWx1ZSBmcm9tIHRoZSBkYXRhYmFzZSBhbmQgdXBk
YXRlIHRoZSBjYWNoZWQgdmFsdWUgaGVyZS4KQEAgLTU0NCwzMCArNTUyLDMyIEBAIHVuc2lnbmVk
IGxvbmcgbG9uZyBBYnN0cmFjdERhdGFiYXNlOjptYXhpbXVtU2l6ZSgpIGNvbnN0CiAKIHZvaWQg
QWJzdHJhY3REYXRhYmFzZTo6aW5jcmVtZW50YWxWYWN1dW1JZk5lZWRlZCgpCiB7Ci0gICAgaW50
NjRfdCBmcmVlU3BhY2VTaXplID0gbV9zcWxpdGVEYXRhYmFzZS5mcmVlU3BhY2VTaXplKCk7Ci0g
ICAgaW50NjRfdCB0b3RhbFNpemUgPSBtX3NxbGl0ZURhdGFiYXNlLnRvdGFsU2l6ZSgpOworICAg
IFNRTGl0ZURhdGFiYXNlJiBzcWxpdGVEYXRhYmFzZSA9IG1fY29yZS0+c3FsaXRlRGF0YWJhc2Uo
KTsKKyAgICBpbnQ2NF90IGZyZWVTcGFjZVNpemUgPSBzcWxpdGVEYXRhYmFzZS5mcmVlU3BhY2VT
aXplKCk7CisgICAgaW50NjRfdCB0b3RhbFNpemUgPSBzcWxpdGVEYXRhYmFzZS50b3RhbFNpemUo
KTsKICAgICBpZiAodG90YWxTaXplIDw9IDEwICogZnJlZVNwYWNlU2l6ZSkgewotICAgICAgICBp
bnQgcmVzdWx0ID0gbV9zcWxpdGVEYXRhYmFzZS5ydW5JbmNyZW1lbnRhbFZhY3V1bUNvbW1hbmQo
KTsKKyAgICAgICAgaW50IHJlc3VsdCA9IHNxbGl0ZURhdGFiYXNlLnJ1bkluY3JlbWVudGFsVmFj
dXVtQ29tbWFuZCgpOwogICAgICAgICByZXBvcnRWYWN1dW1EYXRhYmFzZVJlc3VsdChyZXN1bHQp
OwogICAgICAgICBpZiAocmVzdWx0ICE9IFNRTFJlc3VsdE9rKQotICAgICAgICAgICAgbG9nRXJy
b3JNZXNzYWdlKGZvcm1hdEVycm9yTWVzc2FnZSgiZXJyb3IgdmFjdXVtaW5nIGRhdGFiYXNlIiwg
cmVzdWx0LCBtX3NxbGl0ZURhdGFiYXNlLmxhc3RFcnJvck1zZygpKSk7CisgICAgICAgICAgICBs
b2dFcnJvck1lc3NhZ2UoZm9ybWF0RXJyb3JNZXNzYWdlKCJlcnJvciB2YWN1dW1pbmcgZGF0YWJh
c2UiLCByZXN1bHQsIHNxbGl0ZURhdGFiYXNlLmxhc3RFcnJvck1zZygpKSk7CiAgICAgfQogfQog
CiB2b2lkIEFic3RyYWN0RGF0YWJhc2U6OmludGVycnVwdCgpCiB7Ci0gICAgbV9zcWxpdGVEYXRh
YmFzZS5pbnRlcnJ1cHQoKTsKKyAgICBtX2NvcmUtPnNxbGl0ZURhdGFiYXNlKCkuaW50ZXJydXB0
KCk7CiB9CiAKIGJvb2wgQWJzdHJhY3REYXRhYmFzZTo6aXNJbnRlcnJ1cHRlZCgpCiB7Ci0gICAg
TXV0ZXhMb2NrZXIgbG9ja2VyKG1fc3FsaXRlRGF0YWJhc2UuZGF0YWJhc2VNdXRleCgpKTsKLSAg
ICByZXR1cm4gbV9zcWxpdGVEYXRhYmFzZS5pc0ludGVycnVwdGVkKCk7CisgICAgU1FMaXRlRGF0
YWJhc2UmIHNxbGl0ZURhdGFiYXNlID0gbV9jb3JlLT5zcWxpdGVEYXRhYmFzZSgpOworICAgIE11
dGV4TG9ja2VyIGxvY2tlcihzcWxpdGVEYXRhYmFzZS5kYXRhYmFzZU11dGV4KCkpOworICAgIHJl
dHVybiBzcWxpdGVEYXRhYmFzZS5pc0ludGVycnVwdGVkKCk7CiB9CiAKIHZvaWQgQWJzdHJhY3RE
YXRhYmFzZTo6bG9nRXJyb3JNZXNzYWdlKGNvbnN0IFN0cmluZyYgbWVzc2FnZSkKIHsKLSAgICBt
X3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQtPmFkZENvbnNvbGVNZXNzYWdlKE90aGVyTWVzc2FnZVNv
dXJjZSwgTG9nTWVzc2FnZVR5cGUsIEVycm9yTWVzc2FnZUxldmVsLCBtZXNzYWdlKTsKKyAgICBz
Y3JpcHRFeGVjdXRpb25Db250ZXh0KCktPmFkZENvbnNvbGVNZXNzYWdlKE90aGVyTWVzc2FnZVNv
dXJjZSwgTG9nTWVzc2FnZVR5cGUsIEVycm9yTWVzc2FnZUxldmVsLCBtZXNzYWdlKTsKIH0KIAog
I2lmIFBMQVRGT1JNKENIUk9NSVVNKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJkYXRhYmFzZS9BYnN0cmFjdERhdGFiYXNlLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmRhdGFiYXNlL0Fic3RyYWN0RGF0YWJhc2UuaAppbmRleCBkMzcwMGU4ZDQ1ODU4MGE2YjNm
YjBkNTM1YmMxMGI5MTRhNmIxNWZhLi5lZjA2NzQyODE0YjFmMWIzMWY0YzgxOTlkNzU0ZWQ2MzY3
ZTQ2ODliIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0Fi
c3RyYWN0RGF0YWJhc2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNl
L0Fic3RyYWN0RGF0YWJhc2UuaApAQCAtNTEsNiArNTEsMjggQEAgdHlwZWRlZiBpbnQgRXhjZXB0
aW9uQ29kZTsKIAogY2xhc3MgQWJzdHJhY3REYXRhYmFzZSA6IHB1YmxpYyBUaHJlYWRTYWZlUmVm
Q291bnRlZDxBYnN0cmFjdERhdGFiYXNlPiB7CiBwdWJsaWM6CisgICAgY2xhc3MgQ29yZSA6IHB1
YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxDb3JlPiB7CisgICAgcHVibGljOgorICAgICAgICBz
dGF0aWMgUGFzc1JlZlB0cjxDb3JlPiBjcmVhdGUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogc2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCwgU2VjdXJpdHlPcmlnaW4qIG9yaWdpbiwgY29uc3QgU3RyaW5n
JiBuYW1lKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IENvcmUo
c2NyaXB0RXhlY3V0aW9uQ29udGV4dCwgb3JpZ2luLCBuYW1lKSk7CisgICAgICAgIH0KKyAgICAg
ICAgfkNvcmUoKTsKKyAgICAgICAgdm9pZCBjbG9zZSgpOworICAgICAgICB2b2lkIHNldE9wZW5l
ZCgpIHsgbV9vcGVuZWQgPSB0cnVlOyB9CisgICAgICAgIGJvb2wgb3BlbmVkKCkgeyByZXR1cm4g
bV9vcGVuZWQ7IH0KKyAgICAgICAgaW50IGd1aWQoKSB7IHJldHVybiBtX2d1aWQ7IH0KKyAgICAg
ICAgU1FMaXRlRGF0YWJhc2UmIHNxbGl0ZURhdGFiYXNlKCkgeyByZXR1cm4gbV9zcWxpdGVEYXRh
YmFzZTsgfQorICAgICAgICBQYXNzUmVmUHRyPFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ+IHJlbGVh
c2VTY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7CisKKyAgICBwcml2YXRlOgorICAgICAgICBDb3Jl
KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBTZWN1cml0eU9yaWdpbiosIGNvbnN0IFN0cmluZyYg
bmFtZSk7CisgICAgICAgIGludCBtX2d1aWQ7CisgICAgICAgIGJvb2wgbV9vcGVuZWQ7CisgICAg
ICAgIFJlZlB0cjxTY3JpcHRFeGVjdXRpb25Db250ZXh0PiBtX3NjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQ7CisgICAgICAgIFNRTGl0ZURhdGFiYXNlIG1fc3FsaXRlRGF0YWJhc2U7CisgICAgfTsKKwog
ICAgIHN0YXRpYyBib29sIGlzQXZhaWxhYmxlKCk7CiAgICAgc3RhdGljIHZvaWQgc2V0SXNBdmFp
bGFibGUoYm9vbCBhdmFpbGFibGUpOwogCkBAIC01OCwxNyArODAsMTcgQEAgcHVibGljOgogCiAg
ICAgdmlydHVhbCBTdHJpbmcgdmVyc2lvbigpIGNvbnN0OwogCi0gICAgYm9vbCBvcGVuZWQoKSBj
b25zdCB7IHJldHVybiBtX29wZW5lZDsgfQorICAgIGJvb2wgb3BlbmVkKCkgY29uc3QgeyByZXR1
cm4gbV9jb3JlLT5vcGVuZWQoKTsgfQogICAgIGJvb2wgaXNOZXcoKSBjb25zdCB7IHJldHVybiBt
X25ldzsgfQogICAgIGJvb2wgaXNTeW5jRGF0YWJhc2UoKSBjb25zdCB7IHJldHVybiBtX2lzU3lu
Y0RhdGFiYXNlOyB9CiAKLSAgICB2aXJ0dWFsIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQoKSBjb25zdDsKKyAgICBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBz
Y3JpcHRFeGVjdXRpb25Db250ZXh0KCkgY29uc3QgeyByZXR1cm4gbV9zY3JpcHRFeGVjdXRpb25D
b250ZXh0LmdldCgpOyB9CiAgICAgdmlydHVhbCBTZWN1cml0eU9yaWdpbiogc2VjdXJpdHlPcmln
aW4oKSBjb25zdDsKICAgICB2aXJ0dWFsIFN0cmluZyBzdHJpbmdJZGVudGlmaWVyKCkgY29uc3Q7
CiAgICAgdmlydHVhbCBTdHJpbmcgZGlzcGxheU5hbWUoKSBjb25zdDsKICAgICB2aXJ0dWFsIHVu
c2lnbmVkIGxvbmcgZXN0aW1hdGVkU2l6ZSgpIGNvbnN0OwogICAgIHZpcnR1YWwgU3RyaW5nIGZp
bGVOYW1lKCkgY29uc3Q7Ci0gICAgU1FMaXRlRGF0YWJhc2UmIHNxbGl0ZURhdGFiYXNlKCkgeyBy
ZXR1cm4gbV9zcWxpdGVEYXRhYmFzZTsgfQorICAgIFNRTGl0ZURhdGFiYXNlJiBzcWxpdGVEYXRh
YmFzZSgpIHsgcmV0dXJuIG1fY29yZS0+c3FsaXRlRGF0YWJhc2UoKTsgfQogCiAgICAgdW5zaWdu
ZWQgbG9uZyBsb25nIG1heGltdW1TaXplKCkgY29uc3Q7CiAgICAgdm9pZCBpbmNyZW1lbnRhbFZh
Y3V1bUlmTmVlZGVkKCk7CkBAIC0xMDUsNyArMTI3LDcgQEAgcHJvdGVjdGVkOgogICAgIEFic3Ry
YWN0RGF0YWJhc2UoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIGNvbnN0IFN0cmluZyYgbmFtZSwg
Y29uc3QgU3RyaW5nJiBleHBlY3RlZFZlcnNpb24sCiAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBTdHJpbmcmIGRpc3BsYXlOYW1lLCB1bnNpZ25lZCBsb25nIGVzdGltYXRlZFNpemUsIERhdGFi
YXNlVHlwZSk7CiAKLSAgICB2b2lkIGNsb3NlRGF0YWJhc2UoKTsKKyAgICBDb3JlKiBjb3JlKCkg
eyByZXR1cm4gbV9jb3JlLmdldCgpOyB9CiAKICAgICB2aXJ0dWFsIGJvb2wgcGVyZm9ybU9wZW5B
bmRWZXJpZnkoYm9vbCBzaG91bGRTZXRWZXJzaW9uSW5OZXdEYXRhYmFzZSwgRXhjZXB0aW9uQ29k
ZSYsIFN0cmluZyYgZXJyb3JNZXNzYWdlKTsKIApAQCAtMTQzLDEzICsxNjUsOSBAQCBwcm90ZWN0
ZWQ6CiAjZW5kaWYKIAogcHJpdmF0ZToKLSAgICBpbnQgbV9ndWlkOwotICAgIGJvb2wgbV9vcGVu
ZWQ7CiAgICAgYm9vbCBtX25ldzsKICAgICBjb25zdCBib29sIG1faXNTeW5jRGF0YWJhc2U7Ci0K
LSAgICBTUUxpdGVEYXRhYmFzZSBtX3NxbGl0ZURhdGFiYXNlOwotCisgICAgUmVmUHRyPENvcmU+
IG1fY29yZTsKICAgICBSZWZQdHI8RGF0YWJhc2VBdXRob3JpemVyPiBtX2RhdGFiYXNlQXV0aG9y
aXplcjsKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJh
c2UvRGF0YWJhc2UuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRh
YmFzZS5jcHAKaW5kZXggZDBjM2E3YTFlNWJkNzg2Mjg4YjY0MzI5ZDFjYmIwOGM3MWFjMThlYS4u
MzdhMGI0NmFjODk5MmZjYTQzOGUzNDk3NWI3NDA4ZmNjNTRmZDY5NCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZS5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZS5jcHAKQEAgLTExNiw3ICsxMTYs
NyBAQCBQYXNzUmVmUHRyPERhdGFiYXNlPiBEYXRhYmFzZTo6b3BlbkRhdGFiYXNlKFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIGNvbgogCiAgICAgaWYgKGRhdGFiYXNlLT5pc05ldygp
ICYmIGNyZWF0aW9uQ2FsbGJhY2suZ2V0KCkpIHsKICAgICAgICAgTE9HKFN0b3JhZ2VBUEksICJT
Y2hlZHVsaW5nIERhdGFiYXNlQ3JlYXRpb25DYWxsYmFja1Rhc2sgZm9yIGRhdGFiYXNlICVwXG4i
LCBkYXRhYmFzZS5nZXQoKSk7Ci0gICAgICAgIGRhdGFiYXNlLT5tX3NjcmlwdEV4ZWN1dGlvbkNv
bnRleHQtPnBvc3RUYXNrKERhdGFiYXNlQ3JlYXRpb25DYWxsYmFja1Rhc2s6OmNyZWF0ZShkYXRh
YmFzZSwgY3JlYXRpb25DYWxsYmFjaykpOworICAgICAgICBkYXRhYmFzZS0+c2NyaXB0RXhlY3V0
aW9uQ29udGV4dCgpLT5wb3N0VGFzayhEYXRhYmFzZUNyZWF0aW9uQ2FsbGJhY2tUYXNrOjpjcmVh
dGUoZGF0YWJhc2UsIGNyZWF0aW9uQ2FsbGJhY2spKTsKICAgICB9CiAKICAgICByZXR1cm4gZGF0
YWJhc2U7CkBAIC0xNTgsMTggKzE1OCwyNyBAQCBwcml2YXRlOgogICAgIFJlZlB0cjxTY3JpcHRF
eGVjdXRpb25Db250ZXh0PiBtX2NvbnRleHQ7CiB9OwogCi1EYXRhYmFzZTo6fkRhdGFiYXNlKCkK
K3ZvaWQgRGF0YWJhc2U6OmRpc3Bvc2VPZlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoUGFzc1JlZlB0
cjxTY3JpcHRFeGVjdXRpb25Db250ZXh0PiBzY3JpcHRFeGVjdXRpb25Db250ZXh0KQogeworICAg
IGlmICghc2NyaXB0RXhlY3V0aW9uQ29udGV4dCkKKyAgICAgICAgcmV0dXJuOwogICAgIC8vIFRo
ZSByZWZlcmVuY2UgdG8gdGhlIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQgbmVlZHMgdG8gYmUgY2xl
YXJlZCBvbiB0aGUgSmF2YVNjcmlwdCB0aHJlYWQuICBJZiB3ZSdyZSBvbiB0aGF0IHRocmVhZCBh
bHJlYWR5LCB3ZSBjYW4ganVzdCBsZXQgdGhlIFJlZlB0cidzIGRlc3RydWN0aW9uIGRvIHRoZSBk
ZXJlZmZpbmcuCi0gICAgaWYgKCFtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQtPmlzQ29udGV4dFRo
cmVhZCgpKSB7CisgICAgaWYgKCFzY3JpcHRFeGVjdXRpb25Db250ZXh0LT5pc0NvbnRleHRUaHJl
YWQoKSkgewogICAgICAgICAvLyBHcmFiIGEgcG9pbnRlciB0byB0aGUgc2NyaXB0IGV4ZWN1dGlv
biBoZXJlIGJlY2F1c2Ugd2UncmUgcmVsZWFzaW5nIGl0IHdoZW4gd2UgcGFzcyBpdCB0bwogICAg
ICAgICAvLyBEZXJlZkNvbnRleHRUYXNrOjpjcmVhdGUuCi0gICAgICAgIFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQqIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQgPSBtX3NjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQuZ2V0KCk7Ci0gICAgICAgIAotICAgICAgICBzY3JpcHRFeGVjdXRpb25Db250ZXh0LT5wb3N0
VGFzayhEZXJlZkNvbnRleHRUYXNrOjpjcmVhdGUobV9zY3JpcHRFeGVjdXRpb25Db250ZXh0LnJl
bGVhc2UoKSkpOworICAgICAgICBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBwb2ludGVyID0gc2Ny
aXB0RXhlY3V0aW9uQ29udGV4dC5nZXQoKTsKKyAgICAgICAgcG9pbnRlci0+cG9zdFRhc2soRGVy
ZWZDb250ZXh0VGFzazo6Y3JlYXRlKHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQpKTsKICAgICB9CiB9
CiAKK0RhdGFiYXNlOjp+RGF0YWJhc2UoKQoreworICAgIFJlZlB0cjxEYXRhYmFzZUNsb3Nlcj4g
Y2xvc2VyID0gbV9jbG9zZXIucmVsZWFzZSgpOworICAgIGlmIChjbG9zZXIpCisgICAgICAgIGNs
b3Nlci0+Y2xvc2VJbkRlc3RydWN0b3IoKTsKKyAgICBkaXNwb3NlT2ZTY3JpcHRFeGVjdXRpb25D
b250ZXh0KG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dC5yZWxlYXNlKCkpOworfQorCiBTdHJpbmcg
RGF0YWJhc2U6OnZlcnNpb24oKSBjb25zdAogewogICAgIGlmIChtX2RlbGV0ZWQpCkBAIC0yMjIs
MTggKzIzMSw5MiBAQCB2b2lkIERhdGFiYXNlOjpjbG9zZSgpCiAgICAgICAgIG1fdHJhbnNhY3Rp
b25RdWV1ZS5jbGVhcigpOwogICAgIH0KIAotICAgIGNsb3NlRGF0YWJhc2UoKTsKKyAgICBSZWZQ
dHI8RGF0YWJhc2VDbG9zZXI+IGNsb3NlciA9IG1fY2xvc2VyLnJlbGVhc2UoKTsKKyAgICBpZiAo
Y2xvc2VyKQorICAgICAgICBjbG9zZXItPmNsb3NlKCk7Cit9CiAKLSAgICAvLyBNdXN0IHJlZigp
IGJlZm9yZSBjYWxsaW5nIGRhdGFiYXNlVGhyZWFkKCktPnJlY29yZERhdGFiYXNlQ2xvc2VkKCku
Ci0gICAgUmVmUHRyPERhdGFiYXNlPiBwcm90ZWN0ID0gdGhpczsKLSAgICBkYXRhYmFzZUNvbnRl
eHQoKS0+ZGF0YWJhc2VUaHJlYWQoKS0+cmVjb3JkRGF0YWJhc2VDbG9zZWQodGhpcyk7Ci0gICAg
ZGF0YWJhc2VDb250ZXh0KCktPmRhdGFiYXNlVGhyZWFkKCktPnVuc2NoZWR1bGVEYXRhYmFzZVRh
c2tzKHRoaXMpOwotICAgIERhdGFiYXNlVHJhY2tlcjo6dHJhY2tlcigpLnJlbW92ZU9wZW5EYXRh
YmFzZSh0aGlzKTsKK0RhdGFiYXNlQ2xvc2VyOjpEYXRhYmFzZUNsb3NlcihQYXNzUmVmUHRyPEFi
c3RyYWN0RGF0YWJhc2U6OkNvcmU+IGNvcmUsIERhdGFiYXNlVGhyZWFkKiB0aHJlYWQsIERhdGFi
YXNlKiBkYXRhYmFzZSkKKyAgICA6IG1fY29yZShjb3JlKQorICAgICwgbV90aHJlYWQodGhyZWFk
KQorICAgICwgbV9kYXRhYmFzZShkYXRhYmFzZSkKKyNpZm5kZWYgTkRFQlVHCisgICAgLCBtX3Ro
cmVhZElkKHRocmVhZC0+Z2V0VGhyZWFkSUQoKSkKKyNlbmRpZgoreworICAgIEFTU0VSVChtX2Nv
cmUpOworICAgIEFTU0VSVChtX3RocmVhZCk7CisgICAgQVNTRVJUKG1fZGF0YWJhc2UpOworfQor
CitEYXRhYmFzZUNsb3Nlcjo6fkRhdGFiYXNlQ2xvc2VyKCkKK3sKKyAgICBBU1NFUlQoIW1fY29y
ZSk7CisgICAgQVNTRVJUKCFtX3RocmVhZCk7CisgICAgQVNTRVJUKCFtX2RhdGFiYXNlKTsKK30K
Kwordm9pZCBEYXRhYmFzZUNsb3Nlcjo6Y2xvc2VJbkRlc3RydWN0b3IoKQoreworICAgIERhdGFi
YXNlKiBkYXRhYmFzZSA9IDA7CisgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1fbXV0ZXgpOworCisg
ICAgaWYgKCFtX3RocmVhZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgZGF0YWJhc2UgPSBtX2Rh
dGFiYXNlOworICAgIG1fZGF0YWJhc2UgPSAwOworICAgIEFTU0VSVChkYXRhYmFzZSk7CisKKyAg
ICBtX3RocmVhZC0+cmVjb3JkRGF0YWJhc2VTaG91bGRCZUNsb3NlZCh0aGlzKTsKKyAgICBtX3Ry
YWNrZXJSZW1vdmVyID0gRGF0YWJhc2VUcmFja2VyOjp0cmFja2VyKCkucmVtb3ZlT3BlbkRhdGFi
YXNlKGRhdGFiYXNlLCB0cnVlKTsKKyAgICBtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQgPSBtX2Nv
cmUtPnJlbGVhc2VTY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7Cit9CisKK3ZvaWQgRGF0YWJhc2VD
bG9zZXI6OmNsb3NlKCkKK3sKKyAgICBBU1NFUlQoY3VycmVudFRocmVhZCgpID09IG1fdGhyZWFk
SWQpOworCisgICAgRGF0YWJhc2VUaHJlYWQqIHRocmVhZCA9IDA7CisgICAgRGF0YWJhc2UqIGRh
dGFiYXNlID0gMDsKKyAgICBSZWZQdHI8QWJzdHJhY3REYXRhYmFzZTo6Q29yZT4gY29yZTsKKyAg
ICBPd25QdHI8RGF0YWJhc2VUcmFja2VyQXN5bmNocm9ub3VzUmVtb3Zlcj4gdHJhY2tlclJlbW92
ZXI7CisgICAgUmVmUHRyPFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ+IHNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQ7CisgICAgeworICAgICAgICBNdXRleExvY2tlciBsb2NrZXIobV9tdXRleCk7CisKKyAg
ICAgICAgaWYgKCFtX3RocmVhZCkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICB0aHJl
YWQgPSBtX3RocmVhZDsKKyAgICAgICAgbV90aHJlYWQgPSAwOworICAgICAgICBkYXRhYmFzZSA9
IG1fZGF0YWJhc2U7CisgICAgICAgIG1fZGF0YWJhc2UgPSAwOworICAgICAgICBjb3JlID0gbV9j
b3JlLnJlbGVhc2UoKTsKKyAgICAgICAgdHJhY2tlclJlbW92ZXIgPSBtX3RyYWNrZXJSZW1vdmVy
LnJlbGVhc2UoKTsKKyAgICAgICAgc2NyaXB0RXhlY3V0aW9uQ29udGV4dCA9IG1fc2NyaXB0RXhl
Y3V0aW9uQ29udGV4dC5yZWxlYXNlKCk7CisKKyAgICAgICAgdGhyZWFkLT5yZWNvcmREYXRhYmFz
ZUNsb3NlZCh0aGlzKTsKKyAgICAgICAgaWYgKCFzY3JpcHRFeGVjdXRpb25Db250ZXh0KQorICAg
ICAgICAgICAgc2NyaXB0RXhlY3V0aW9uQ29udGV4dCA9IGNvcmUtPnJlbGVhc2VTY3JpcHRFeGVj
dXRpb25Db250ZXh0KCk7CisgICAgfQorCisgICAgY29yZS0+Y2xvc2UoKTsKKyAgICBpZiAoZGF0
YWJhc2UpIHsKKyAgICAgICAgQVNTRVJUKCF0cmFja2VyUmVtb3Zlcik7CisgICAgICAgIHRocmVh
ZC0+dW5zY2hlZHVsZURhdGFiYXNlVGFza3MoZGF0YWJhc2UpOworICAgICAgICB0cmFja2VyUmVt
b3ZlciA9IERhdGFiYXNlVHJhY2tlcjo6dHJhY2tlcigpLnJlbW92ZU9wZW5EYXRhYmFzZShkYXRh
YmFzZSwgdHJ1ZSk7CisgICAgfQorCisgICAgaWYgKHRyYWNrZXJSZW1vdmVyKQorICAgICAgICB0
cmFja2VyUmVtb3Zlci0+Y29tcGxldGVSZW1vdmFsKHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQucmVs
ZWFzZSgpKTsKKyAgICBlbHNlCisgICAgICAgIERhdGFiYXNlOjpkaXNwb3NlT2ZTY3JpcHRFeGVj
dXRpb25Db250ZXh0KHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQucmVsZWFzZSgpKTsKIH0KIAogdm9p
ZCBEYXRhYmFzZTo6Y2xvc2VJbW1lZGlhdGVseSgpCiB7Ci0gICAgQVNTRVJUKG1fc2NyaXB0RXhl
Y3V0aW9uQ29udGV4dC0+aXNDb250ZXh0VGhyZWFkKCkpOworICAgIEFTU0VSVChzY3JpcHRFeGVj
dXRpb25Db250ZXh0KCktPmlzQ29udGV4dFRocmVhZCgpKTsKICAgICBEYXRhYmFzZVRocmVhZCog
ZGF0YWJhc2VUaHJlYWQgPSBkYXRhYmFzZUNvbnRleHQoKS0+ZGF0YWJhc2VUaHJlYWQoKTsKICAg
ICBpZiAoZGF0YWJhc2VUaHJlYWQgJiYgIWRhdGFiYXNlVGhyZWFkLT50ZXJtaW5hdGlvblJlcXVl
c3RlZCgpICYmIG9wZW5lZCgpKSB7CiAgICAgICAgIGxvZ0Vycm9yTWVzc2FnZSgiZm9yY2libHkg
Y2xvc2luZyBkYXRhYmFzZSIpOwpAQCAtMjQ4LDE0ICszMzEsMTUgQEAgdW5zaWduZWQgbG9uZyBs
b25nIERhdGFiYXNlOjptYXhpbXVtU2l6ZSgpIGNvbnN0CiAKIGJvb2wgRGF0YWJhc2U6OnBlcmZv
cm1PcGVuQW5kVmVyaWZ5KGJvb2wgc2V0VmVyc2lvbkluTmV3RGF0YWJhc2UsIEV4Y2VwdGlvbkNv
ZGUmIGUsIFN0cmluZyYgZXJyb3JNZXNzYWdlKQogewotICAgIGlmIChBYnN0cmFjdERhdGFiYXNl
OjpwZXJmb3JtT3BlbkFuZFZlcmlmeShzZXRWZXJzaW9uSW5OZXdEYXRhYmFzZSwgZSwgZXJyb3JN
ZXNzYWdlKSkgewotICAgICAgICBpZiAoZGF0YWJhc2VDb250ZXh0KCktPmRhdGFiYXNlVGhyZWFk
KCkpCi0gICAgICAgICAgICBkYXRhYmFzZUNvbnRleHQoKS0+ZGF0YWJhc2VUaHJlYWQoKS0+cmVj
b3JkRGF0YWJhc2VPcGVuKHRoaXMpOworICAgIEFTU0VSVChkYXRhYmFzZUNvbnRleHQoKS0+ZGF0
YWJhc2VUaHJlYWQoKSk7CisgICAgQVNTRVJUKGN1cnJlbnRUaHJlYWQoKSA9PSBkYXRhYmFzZUNv
bnRleHQoKS0+ZGF0YWJhc2VUaHJlYWQoKS0+Z2V0VGhyZWFkSUQoKSk7CiAKLSAgICAgICAgcmV0
dXJuIHRydWU7Ci0gICAgfQorICAgIGlmICghQWJzdHJhY3REYXRhYmFzZTo6cGVyZm9ybU9wZW5B
bmRWZXJpZnkoc2V0VmVyc2lvbkluTmV3RGF0YWJhc2UsIGUsIGVycm9yTWVzc2FnZSkpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKIAotICAgIHJldHVybiBmYWxzZTsKKyAgICBtX2Nsb3NlciA9IERh
dGFiYXNlQ2xvc2VyOjpjcmVhdGUoY29yZSgpLCBkYXRhYmFzZUNvbnRleHQoKS0+ZGF0YWJhc2VU
aHJlYWQoKSwgdGhpcyk7CisgICAgZGF0YWJhc2VDb250ZXh0KCktPmRhdGFiYXNlVGhyZWFkKCkt
PnJlY29yZERhdGFiYXNlT3BlbihtX2Nsb3Nlci5nZXQoKSk7CisgICAgcmV0dXJuIHRydWU7CiB9
CiAKIHZvaWQgRGF0YWJhc2U6OmNoYW5nZVZlcnNpb24oY29uc3QgU3RyaW5nJiBvbGRWZXJzaW9u
LCBjb25zdCBTdHJpbmcmIG5ld1ZlcnNpb24sCkBAIC0zNTcsNyArNDQxLDcgQEAgcHJpdmF0ZToK
IAogdm9pZCBEYXRhYmFzZTo6c2NoZWR1bGVUcmFuc2FjdGlvbkNhbGxiYWNrKFNRTFRyYW5zYWN0
aW9uKiB0cmFuc2FjdGlvbikKIHsKLSAgICBtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQtPnBvc3RU
YXNrKERlbGl2ZXJQZW5kaW5nQ2FsbGJhY2tUYXNrOjpjcmVhdGUodHJhbnNhY3Rpb24pKTsKKyAg
ICBzY3JpcHRFeGVjdXRpb25Db250ZXh0KCktPnBvc3RUYXNrKERlbGl2ZXJQZW5kaW5nQ2FsbGJh
Y2tUYXNrOjpjcmVhdGUodHJhbnNhY3Rpb24pKTsKIH0KIAogVmVjdG9yPFN0cmluZz4gRGF0YWJh
c2U6OnBlcmZvcm1HZXRUYWJsZU5hbWVzKCkKQEAgLTQxNyw3ICs1MDEsNyBAQCBWZWN0b3I8U3Ry
aW5nPiBEYXRhYmFzZTo6dGFibGVOYW1lcygpCiAKIFNlY3VyaXR5T3JpZ2luKiBEYXRhYmFzZTo6
c2VjdXJpdHlPcmlnaW4oKSBjb25zdAogewotICAgIGlmIChtX3NjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQtPmlzQ29udGV4dFRocmVhZCgpKQorICAgIGlmIChzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkt
PmlzQ29udGV4dFRocmVhZCgpKQogICAgICAgICByZXR1cm4gbV9jb250ZXh0VGhyZWFkU2VjdXJp
dHlPcmlnaW4uZ2V0KCk7CiAgICAgaWYgKGN1cnJlbnRUaHJlYWQoKSA9PSBkYXRhYmFzZUNvbnRl
eHQoKS0+ZGF0YWJhc2VUaHJlYWQoKS0+Z2V0VGhyZWFkSUQoKSkKICAgICAgICAgcmV0dXJuIG1f
ZGF0YWJhc2VUaHJlYWRTZWN1cml0eU9yaWdpbi5nZXQoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2UuaCBiL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2UuaAppbmRleCAwZTU0MDIyYzUzN2QyZTI1NDQzODBh
NDVkZGM3N2Q1MGNmNjFhNjQ5Li4zZGExNDdjN2U4OGIzNTZhNzBmOGQ1NWQ3N2QyNjRjYWI1OTdi
YjAwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFi
YXNlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZS5o
CkBAIC0zMiwxMyArMzIsMTcgQEAKICNpZiBFTkFCTEUoU1FMX0RBVEFCQVNFKQogCiAjaW5jbHVk
ZSAiQWJzdHJhY3REYXRhYmFzZS5oIgorI2luY2x1ZGUgIkRhdGFiYXNlVHJhY2tlci5oIgogI2lu
Y2x1ZGUgPHd0Zi9EZXF1ZS5oPgogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CiAjaW5jbHVkZSA8
d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorY2xhc3MgRGF0
YWJhc2U7CiBjbGFzcyBEYXRhYmFzZUNhbGxiYWNrOworY2xhc3MgRGF0YWJhc2VUaHJlYWQ7Citj
bGFzcyBEYXRhYmFzZVRyYWNrZXJBc3luY2hyb25vdXNSZW1vdmVyOwogY2xhc3MgU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dDsKIGNsYXNzIFNlY3VyaXR5T3JpZ2luOwogY2xhc3MgU1FMVHJhbnNhY3Rp
b247CkBAIC01MSw3ICs1NSwzMyBAQCBjbGFzcyBWb2lkQ2FsbGJhY2s7CiAKIHR5cGVkZWYgaW50
IEV4Y2VwdGlvbkNvZGU7CiAKK2NsYXNzIERhdGFiYXNlQ2xvc2VyIDogcHVibGljIFRocmVhZFNh
ZmVSZWZDb3VudGVkPERhdGFiYXNlQ2xvc2VyPiB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NS
ZWZQdHI8RGF0YWJhc2VDbG9zZXI+IGNyZWF0ZShQYXNzUmVmUHRyPEFic3RyYWN0RGF0YWJhc2U6
OkNvcmU+IGNvcmUsIERhdGFiYXNlVGhyZWFkKiB0aHJlYWQsIERhdGFiYXNlKiBkYXRhYmFzZSkK
KyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgRGF0YWJhc2VDbG9zZXIoY29yZSwg
dGhyZWFkLCBkYXRhYmFzZSkpOworICAgIH0KKyAgICB+RGF0YWJhc2VDbG9zZXIoKTsKKyAgICB2
b2lkIGNsb3NlKCk7CisgICAgdm9pZCBjbG9zZUluRGVzdHJ1Y3RvcigpOworCitwcml2YXRlOgor
ICAgIERhdGFiYXNlQ2xvc2VyKFBhc3NSZWZQdHI8QWJzdHJhY3REYXRhYmFzZTo6Q29yZT4sIERh
dGFiYXNlVGhyZWFkKiwgRGF0YWJhc2UqKTsKKworICAgIFJlZlB0cjxBYnN0cmFjdERhdGFiYXNl
OjpDb3JlPiBtX2NvcmU7CisgICAgLy8gVGhlc2UgcmF3IHBvaW50ZXJzIGFyZSBndWFyYW50ZWVk
IHRvIGJlIGFsaXZlIG9yIDAuCisgICAgRGF0YWJhc2VUaHJlYWQqIG1fdGhyZWFkOworICAgIERh
dGFiYXNlKiBtX2RhdGFiYXNlOworICAgIE93blB0cjxEYXRhYmFzZVRyYWNrZXJBc3luY2hyb25v
dXNSZW1vdmVyPiBtX3RyYWNrZXJSZW1vdmVyOworICAgIFJlZlB0cjxTY3JpcHRFeGVjdXRpb25D
b250ZXh0PiBtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQ7CisjaWZuZGVmIE5ERUJVRworICAgIFRo
cmVhZElkZW50aWZpZXIgbV90aHJlYWRJZDsKKyNlbmRpZgorICAgIE11dGV4IG1fbXV0ZXg7Cit9
OworCiBjbGFzcyBEYXRhYmFzZSA6IHB1YmxpYyBBYnN0cmFjdERhdGFiYXNlIHsKKyAgICBmcmll
bmQgY2xhc3MgRGF0YWJhc2VDbG9zZXI7CiBwdWJsaWM6CiAgICAgdmlydHVhbCB+RGF0YWJhc2Uo
KTsKIApAQCAtODQsNiArMTE0LDkgQEAgcHVibGljOgogICAgIFNRTFRyYW5zYWN0aW9uQ2xpZW50
KiB0cmFuc2FjdGlvbkNsaWVudCgpIGNvbnN0OwogICAgIFNRTFRyYW5zYWN0aW9uQ29vcmRpbmF0
b3IqIHRyYW5zYWN0aW9uQ29vcmRpbmF0b3IoKSBjb25zdDsKIAorICAgIC8vIEZJWE1FIHRoaXMg
aXMgYSBwb29yIHBsYWNlIGZvciB0aGlzLgorICAgIHN0YXRpYyB2b2lkIGRpc3Bvc2VPZlNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQoUGFzc1JlZlB0cjxTY3JpcHRFeGVjdXRpb25Db250ZXh0Pik7CisK
IHByaXZhdGU6CiAgICAgY2xhc3MgRGF0YWJhc2VPcGVuVGFzazsKICAgICBjbGFzcyBEYXRhYmFz
ZUNsb3NlVGFzazsKQEAgLTExMSw2ICsxNDQsNyBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9pc1Ry
YW5zYWN0aW9uUXVldWVFbmFibGVkOwogCiAgICAgUmVmUHRyPFNlY3VyaXR5T3JpZ2luPiBtX2Rh
dGFiYXNlVGhyZWFkU2VjdXJpdHlPcmlnaW47CisgICAgUmVmUHRyPERhdGFiYXNlQ2xvc2VyPiBt
X2Nsb3NlcjsKIAogICAgIGJvb2wgbV9kZWxldGVkOwogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VTeW5jLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VTeW5jLmNwcAppbmRleCA4Yjc0NGI4YzY4
YzNmY2IwNGJkMTMxNTZhYmQ3MGIzYzYxMjMxOTEwLi4zNjQ4NWRjYjA5ZjQ0OTlhNzhkNGY2YzI2
MWQ1NWRiNjJmNzlmMDdhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRh
dGFiYXNlL0RhdGFiYXNlU3luYy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJk
YXRhYmFzZS9EYXRhYmFzZVN5bmMuY3BwCkBAIC04NCwxNyArODQsMTcgQEAgRGF0YWJhc2VTeW5j
OjpEYXRhYmFzZVN5bmMoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgY29uc3QgU3Ry
aW5nJiBuYW1lLAogCiBEYXRhYmFzZVN5bmM6On5EYXRhYmFzZVN5bmMoKQogewotICAgIEFTU0VS
VChtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQtPmlzQ29udGV4dFRocmVhZCgpKTsKKyAgICBBU1NF
UlQoc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLT5pc0NvbnRleHRUaHJlYWQoKSk7CiAKICAgICBp
ZiAob3BlbmVkKCkpIHsKICAgICAgICAgRGF0YWJhc2VUcmFja2VyOjp0cmFja2VyKCkucmVtb3Zl
T3BlbkRhdGFiYXNlKHRoaXMpOwotICAgICAgICBjbG9zZURhdGFiYXNlKCk7CisgICAgICAgIGNv
cmUoKS0+Y2xvc2UoKTsKICAgICB9CiB9CiAKIHZvaWQgRGF0YWJhc2VTeW5jOjpjaGFuZ2VWZXJz
aW9uKGNvbnN0IFN0cmluZyYgb2xkVmVyc2lvbiwgY29uc3QgU3RyaW5nJiBuZXdWZXJzaW9uLCBQ
YXNzUmVmUHRyPFNRTFRyYW5zYWN0aW9uU3luY0NhbGxiYWNrPiBjaGFuZ2VWZXJzaW9uQ2FsbGJh
Y2ssIEV4Y2VwdGlvbkNvZGUmIGVjKQogewotICAgIEFTU0VSVChtX3NjcmlwdEV4ZWN1dGlvbkNv
bnRleHQtPmlzQ29udGV4dFRocmVhZCgpKTsKKyAgICBBU1NFUlQoc2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCgpLT5pc0NvbnRleHRUaHJlYWQoKSk7CiAKICAgICBpZiAoc3FsaXRlRGF0YWJhc2UoKS50
cmFuc2FjdGlvbkluUHJvZ3Jlc3MoKSkgewogICAgICAgICByZXBvcnRDaGFuZ2VWZXJzaW9uUmVz
dWx0KDEsIFNRTEV4Y2VwdGlvbjo6REFUQUJBU0VfRVJSLCAwKTsKQEAgLTE2MCw3ICsxNjAsNyBA
QCB2b2lkIERhdGFiYXNlU3luYzo6cmVhZFRyYW5zYWN0aW9uKFBhc3NSZWZQdHI8U1FMVHJhbnNh
Y3Rpb25TeW5jQ2FsbGJhY2s+IGNhbGxiYQogCiB2b2lkIERhdGFiYXNlU3luYzo6cnVuVHJhbnNh
Y3Rpb24oUGFzc1JlZlB0cjxTUUxUcmFuc2FjdGlvblN5bmNDYWxsYmFjaz4gY2FsbGJhY2ssIGJv
b2wgcmVhZE9ubHksIEV4Y2VwdGlvbkNvZGUmIGVjKQogewotICAgIEFTU0VSVChtX3NjcmlwdEV4
ZWN1dGlvbkNvbnRleHQtPmlzQ29udGV4dFRocmVhZCgpKTsKKyAgICBBU1NFUlQoc2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCgpLT5pc0NvbnRleHRUaHJlYWQoKSk7CiAKICAgICBpZiAoc3FsaXRlRGF0
YWJhc2UoKS50cmFuc2FjdGlvbkluUHJvZ3Jlc3MoKSkgewogICAgICAgICBzZXRMYXN0RXJyb3JN
ZXNzYWdlKCJ1bmFibGUgdG8gc3RhcnQgYSB0cmFuc2FjdGlvbiBmcm9tIHdpdGhpbiBhIHRyYW5z
YWN0aW9uIik7CkBAIC0yMDUsMTQgKzIwNSwxNCBAQCBwcml2YXRlOgogCiB2b2lkIERhdGFiYXNl
U3luYzo6Y2xvc2VJbW1lZGlhdGVseSgpCiB7Ci0gICAgQVNTRVJUKG1fc2NyaXB0RXhlY3V0aW9u
Q29udGV4dC0+aXNDb250ZXh0VGhyZWFkKCkpOworICAgIEFTU0VSVChzY3JpcHRFeGVjdXRpb25D
b250ZXh0KCktPmlzQ29udGV4dFRocmVhZCgpKTsKIAogICAgIGlmICghb3BlbmVkKCkpCiAgICAg
ICAgIHJldHVybjsKIAogICAgIGxvZ0Vycm9yTWVzc2FnZSgiZm9yY2libHkgY2xvc2luZyBkYXRh
YmFzZSIpOwogICAgIERhdGFiYXNlVHJhY2tlcjo6dHJhY2tlcigpLnJlbW92ZU9wZW5EYXRhYmFz
ZSh0aGlzKTsKLSAgICBjbG9zZURhdGFiYXNlKCk7CisgICAgY29yZSgpLT5jbG9zZSgpOwogfQog
CiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlVGFzay5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmRhdGFiYXNlL0RhdGFiYXNlVGFzay5jcHAKaW5kZXggMDY2NzI1ZmUzNzcyYWE0OGRlMGFk
OTllNTEzZDdmOWRmZjJjODllMi4uOTJiN2IwNTRkNWM5YTA5NzIwNTdiNTg3MzdhNjc3MGU3NTZm
YmRmMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRh
YmFzZVRhc2suY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0
YWJhc2VUYXNrLmNwcApAQCAtNTksNyArNTksNyBAQCB2b2lkIERhdGFiYXNlVGFza1N5bmNocm9u
aXplcjo6dGFza0NvbXBsZXRlZCgpCiAgICAgbV9zeW5jaHJvbm91c011dGV4LnVubG9jaygpOwog
fQogCi1EYXRhYmFzZVRhc2s6OkRhdGFiYXNlVGFzayhEYXRhYmFzZSogZGF0YWJhc2UsIERhdGFi
YXNlVGFza1N5bmNocm9uaXplciogc3luY2hyb25pemVyKQorRGF0YWJhc2VUYXNrOjpEYXRhYmFz
ZVRhc2soUGFzc1JlZlB0cjxEYXRhYmFzZT4gZGF0YWJhc2UsIERhdGFiYXNlVGFza1N5bmNocm9u
aXplciogc3luY2hyb25pemVyKQogICAgIDogbV9kYXRhYmFzZShkYXRhYmFzZSkKICAgICAsIG1f
c3luY2hyb25pemVyKHN5bmNocm9uaXplcikKICNpZiAhTE9HX0RJU0FCTEVECkBAIC04NCw3ICs4
NCw4IEBAIHZvaWQgRGF0YWJhc2VUYXNrOjpwZXJmb3JtVGFzaygpCiAKICAgICBMT0coU3RvcmFn
ZUFQSSwgIlBlcmZvcm1pbmcgJXMgJXBcbiIsIGRlYnVnVGFza05hbWUoKSwgdGhpcyk7CiAKLSAg
ICBtX2RhdGFiYXNlLT5yZXNldEF1dGhvcml6ZXIoKTsKKyAgICBpZiAobV9kYXRhYmFzZSkKKyAg
ICAgICAgbV9kYXRhYmFzZS0+cmVzZXRBdXRob3JpemVyKCk7CiAgICAgZG9QZXJmb3JtVGFzaygp
OwogCiAgICAgaWYgKG1fc3luY2hyb25pemVyKQpAQCAtOTgsNyArOTksNyBAQCB2b2lkIERhdGFi
YXNlVGFzazo6cGVyZm9ybVRhc2soKQogLy8gKioqIERhdGFiYXNlT3BlblRhc2sgKioqCiAvLyBP
cGVucyB0aGUgZGF0YWJhc2UgZmlsZSBhbmQgdmVyaWZpZXMgdGhlIHZlcnNpb24gbWF0Y2hlcyB0
aGUgZXhwZWN0ZWQgdmVyc2lvbi4KIAotRGF0YWJhc2U6OkRhdGFiYXNlT3BlblRhc2s6OkRhdGFi
YXNlT3BlblRhc2soRGF0YWJhc2UqIGRhdGFiYXNlLCBib29sIHNldFZlcnNpb25Jbk5ld0RhdGFi
YXNlLCBEYXRhYmFzZVRhc2tTeW5jaHJvbml6ZXIqIHN5bmNocm9uaXplciwgRXhjZXB0aW9uQ29k
ZSYgY29kZSwgU3RyaW5nJiBlcnJvck1lc3NhZ2UsIGJvb2wmIHN1Y2Nlc3MpCitEYXRhYmFzZTo6
RGF0YWJhc2VPcGVuVGFzazo6RGF0YWJhc2VPcGVuVGFzayhQYXNzUmVmUHRyPERhdGFiYXNlPiBk
YXRhYmFzZSwgYm9vbCBzZXRWZXJzaW9uSW5OZXdEYXRhYmFzZSwgRGF0YWJhc2VUYXNrU3luY2hy
b25pemVyKiBzeW5jaHJvbml6ZXIsIEV4Y2VwdGlvbkNvZGUmIGNvZGUsIFN0cmluZyYgZXJyb3JN
ZXNzYWdlLCBib29sJiBzdWNjZXNzKQogICAgIDogRGF0YWJhc2VUYXNrKGRhdGFiYXNlLCBzeW5j
aHJvbml6ZXIpCiAgICAgLCBtX3NldFZlcnNpb25Jbk5ld0RhdGFiYXNlKHNldFZlcnNpb25Jbk5l
d0RhdGFiYXNlKQogICAgICwgbV9jb2RlKGNvZGUpCkBAIC0xMjYsNyArMTI3LDcgQEAgY29uc3Qg
Y2hhciogRGF0YWJhc2U6OkRhdGFiYXNlT3BlblRhc2s6OmRlYnVnVGFza05hbWUoKSBjb25zdAog
Ly8gKioqIERhdGFiYXNlQ2xvc2VUYXNrICoqKgogLy8gQ2xvc2VzIHRoZSBkYXRhYmFzZS4KIAot
RGF0YWJhc2U6OkRhdGFiYXNlQ2xvc2VUYXNrOjpEYXRhYmFzZUNsb3NlVGFzayhEYXRhYmFzZSog
ZGF0YWJhc2UsIERhdGFiYXNlVGFza1N5bmNocm9uaXplciogc3luY2hyb25pemVyKQorRGF0YWJh
c2U6OkRhdGFiYXNlQ2xvc2VUYXNrOjpEYXRhYmFzZUNsb3NlVGFzayhQYXNzUmVmUHRyPERhdGFi
YXNlPiBkYXRhYmFzZSwgRGF0YWJhc2VUYXNrU3luY2hyb25pemVyKiBzeW5jaHJvbml6ZXIpCiAg
ICAgOiBEYXRhYmFzZVRhc2soZGF0YWJhc2UsIHN5bmNocm9uaXplcikKIHsKIH0KQEAgLTE2OCw3
ICsxNjksNyBAQCBjb25zdCBjaGFyKiBEYXRhYmFzZTo6RGF0YWJhc2VUcmFuc2FjdGlvblRhc2s6
OmRlYnVnVGFza05hbWUoKSBjb25zdAogLy8gKioqIERhdGFiYXNlVGFibGVOYW1lc1Rhc2sgKioq
CiAvLyBSZXRyaWV2ZXMgYSBsaXN0IG9mIGFsbCB0YWJsZXMgaW4gdGhlIGRhdGFiYXNlIC0gZm9y
IFdlYkluc3BlY3RvciBzdXBwb3J0LgogCi1EYXRhYmFzZTo6RGF0YWJhc2VUYWJsZU5hbWVzVGFz
azo6RGF0YWJhc2VUYWJsZU5hbWVzVGFzayhEYXRhYmFzZSogZGF0YWJhc2UsIERhdGFiYXNlVGFz
a1N5bmNocm9uaXplciogc3luY2hyb25pemVyLCBWZWN0b3I8U3RyaW5nPiYgbmFtZXMpCitEYXRh
YmFzZTo6RGF0YWJhc2VUYWJsZU5hbWVzVGFzazo6RGF0YWJhc2VUYWJsZU5hbWVzVGFzayhQYXNz
UmVmUHRyPERhdGFiYXNlPiBkYXRhYmFzZSwgRGF0YWJhc2VUYXNrU3luY2hyb25pemVyKiBzeW5j
aHJvbml6ZXIsIFZlY3RvcjxTdHJpbmc+JiBuYW1lcykKICAgICA6IERhdGFiYXNlVGFzayhkYXRh
YmFzZSwgc3luY2hyb25pemVyKQogICAgICwgbV90YWJsZU5hbWVzKG5hbWVzKQogewpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZVRhc2suaCBi
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VUYXNrLmgKaW5kZXgg
NGZhMjkwZmFjZWU1NjgwOGZkZTBiM2IzYTFkZjZhODg5OGI4YzgwOC4uODgzN2E4ZWE5NGUyMjM1
NWIwM2UxYTg3MTZiNWFiZWYzMjJkNjUxMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZVRhc2suaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlVGFzay5oCkBAIC03NywxOSArNzcsMTkgQEAgcHVibGlj
OgogCiAgICAgdm9pZCBwZXJmb3JtVGFzaygpOwogCi0gICAgRGF0YWJhc2UqIGRhdGFiYXNlKCkg
Y29uc3QgeyByZXR1cm4gbV9kYXRhYmFzZTsgfQorICAgIERhdGFiYXNlKiBkYXRhYmFzZSgpIGNv
bnN0IHsgcmV0dXJuIG1fZGF0YWJhc2UuZ2V0KCk7IH0KICNpZm5kZWYgTkRFQlVHCiAgICAgYm9v
bCBoYXNTeW5jaHJvbml6ZXIoKSBjb25zdCB7IHJldHVybiBtX3N5bmNocm9uaXplcjsgfQogICAg
IGJvb2wgaGFzQ2hlY2tlZEZvclRlcm1pbmF0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9zeW5jaHJv
bml6ZXItPmhhc0NoZWNrZWRGb3JUZXJtaW5hdGlvbigpOyB9CiAjZW5kaWYKIAogcHJvdGVjdGVk
OgotICAgIERhdGFiYXNlVGFzayhEYXRhYmFzZSosIERhdGFiYXNlVGFza1N5bmNocm9uaXplciop
OworICAgIERhdGFiYXNlVGFzayhQYXNzUmVmUHRyPERhdGFiYXNlPiwgRGF0YWJhc2VUYXNrU3lu
Y2hyb25pemVyKik7CiAKIHByaXZhdGU6CiAgICAgdmlydHVhbCB2b2lkIGRvUGVyZm9ybVRhc2so
KSA9IDA7CiAKLSAgICBEYXRhYmFzZSogbV9kYXRhYmFzZTsKKyAgICBSZWZQdHI8RGF0YWJhc2U+
IG1fZGF0YWJhc2U7CiAgICAgRGF0YWJhc2VUYXNrU3luY2hyb25pemVyKiBtX3N5bmNocm9uaXpl
cjsKIAogI2lmICFMT0dfRElTQUJMRUQKQEAgLTEwMCwxMyArMTAwLDEzIEBAIHByaXZhdGU6CiAK
IGNsYXNzIERhdGFiYXNlOjpEYXRhYmFzZU9wZW5UYXNrIDogcHVibGljIERhdGFiYXNlVGFzayB7
CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NPd25QdHI8RGF0YWJhc2VPcGVuVGFzaz4gY3JlYXRl
KERhdGFiYXNlKiBkYiwgYm9vbCBzZXRWZXJzaW9uSW5OZXdEYXRhYmFzZSwgRGF0YWJhc2VUYXNr
U3luY2hyb25pemVyKiBzeW5jaHJvbml6ZXIsIEV4Y2VwdGlvbkNvZGUmIGNvZGUsIFN0cmluZyYg
ZXJyb3JNZXNzYWdlLCBib29sJiBzdWNjZXNzKQorICAgIHN0YXRpYyBQYXNzT3duUHRyPERhdGFi
YXNlT3BlblRhc2s+IGNyZWF0ZShQYXNzUmVmUHRyPERhdGFiYXNlPiBkYiwgYm9vbCBzZXRWZXJz
aW9uSW5OZXdEYXRhYmFzZSwgRGF0YWJhc2VUYXNrU3luY2hyb25pemVyKiBzeW5jaHJvbml6ZXIs
IEV4Y2VwdGlvbkNvZGUmIGNvZGUsIFN0cmluZyYgZXJyb3JNZXNzYWdlLCBib29sJiBzdWNjZXNz
KQogICAgIHsKICAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBEYXRhYmFzZU9wZW5UYXNrKGRi
LCBzZXRWZXJzaW9uSW5OZXdEYXRhYmFzZSwgc3luY2hyb25pemVyLCBjb2RlLCBlcnJvck1lc3Nh
Z2UsIHN1Y2Nlc3MpKTsKICAgICB9CiAKIHByaXZhdGU6Ci0gICAgRGF0YWJhc2VPcGVuVGFzayhE
YXRhYmFzZSosIGJvb2wgc2V0VmVyc2lvbkluTmV3RGF0YWJhc2UsIERhdGFiYXNlVGFza1N5bmNo
cm9uaXplciosIEV4Y2VwdGlvbkNvZGUmLCBTdHJpbmcmIGVycm9yTWVzc2FnZSwgYm9vbCYgc3Vj
Y2Vzcyk7CisgICAgRGF0YWJhc2VPcGVuVGFzayhQYXNzUmVmUHRyPERhdGFiYXNlPiwgYm9vbCBz
ZXRWZXJzaW9uSW5OZXdEYXRhYmFzZSwgRGF0YWJhc2VUYXNrU3luY2hyb25pemVyKiwgRXhjZXB0
aW9uQ29kZSYsIFN0cmluZyYgZXJyb3JNZXNzYWdlLCBib29sJiBzdWNjZXNzKTsKIAogICAgIHZp
cnR1YWwgdm9pZCBkb1BlcmZvcm1UYXNrKCk7CiAjaWYgIUxPR19ESVNBQkxFRApAQCAtMTIxLDEz
ICsxMjEsMTMgQEAgcHJpdmF0ZToKIAogY2xhc3MgRGF0YWJhc2U6OkRhdGFiYXNlQ2xvc2VUYXNr
IDogcHVibGljIERhdGFiYXNlVGFzayB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NPd25QdHI8
RGF0YWJhc2VDbG9zZVRhc2s+IGNyZWF0ZShEYXRhYmFzZSogZGIsIERhdGFiYXNlVGFza1N5bmNo
cm9uaXplciogc3luY2hyb25pemVyKQorICAgIHN0YXRpYyBQYXNzT3duUHRyPERhdGFiYXNlQ2xv
c2VUYXNrPiBjcmVhdGUoUGFzc1JlZlB0cjxEYXRhYmFzZT4gZGIsIERhdGFiYXNlVGFza1N5bmNo
cm9uaXplciogc3luY2hyb25pemVyKQogICAgIHsKICAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5l
dyBEYXRhYmFzZUNsb3NlVGFzayhkYiwgc3luY2hyb25pemVyKSk7CiAgICAgfQogCiBwcml2YXRl
OgotICAgIERhdGFiYXNlQ2xvc2VUYXNrKERhdGFiYXNlKiwgRGF0YWJhc2VUYXNrU3luY2hyb25p
emVyKik7CisgICAgRGF0YWJhc2VDbG9zZVRhc2soUGFzc1JlZlB0cjxEYXRhYmFzZT4sIERhdGFi
YXNlVGFza1N5bmNocm9uaXplciopOwogCiAgICAgdmlydHVhbCB2b2lkIGRvUGVyZm9ybVRhc2so
KTsKICNpZiAhTE9HX0RJU0FCTEVECkBAIC0xNTgsMTMgKzE1OCwxMyBAQCBwcml2YXRlOgogCiBj
bGFzcyBEYXRhYmFzZTo6RGF0YWJhc2VUYWJsZU5hbWVzVGFzayA6IHB1YmxpYyBEYXRhYmFzZVRh
c2sgewogcHVibGljOgotICAgIHN0YXRpYyBQYXNzT3duUHRyPERhdGFiYXNlVGFibGVOYW1lc1Rh
c2s+IGNyZWF0ZShEYXRhYmFzZSogZGIsIERhdGFiYXNlVGFza1N5bmNocm9uaXplciogc3luY2hy
b25pemVyLCBWZWN0b3I8U3RyaW5nPiYgbmFtZXMpCisgICAgc3RhdGljIFBhc3NPd25QdHI8RGF0
YWJhc2VUYWJsZU5hbWVzVGFzaz4gY3JlYXRlKFBhc3NSZWZQdHI8RGF0YWJhc2U+IGRiLCBEYXRh
YmFzZVRhc2tTeW5jaHJvbml6ZXIqIHN5bmNocm9uaXplciwgVmVjdG9yPFN0cmluZz4mIG5hbWVz
KQogICAgIHsKICAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBEYXRhYmFzZVRhYmxlTmFtZXNU
YXNrKGRiLCBzeW5jaHJvbml6ZXIsIG5hbWVzKSk7CiAgICAgfQogCiBwcml2YXRlOgotICAgIERh
dGFiYXNlVGFibGVOYW1lc1Rhc2soRGF0YWJhc2UqLCBEYXRhYmFzZVRhc2tTeW5jaHJvbml6ZXIq
LCBWZWN0b3I8U3RyaW5nPiYgbmFtZXMpOworICAgIERhdGFiYXNlVGFibGVOYW1lc1Rhc2soUGFz
c1JlZlB0cjxEYXRhYmFzZT4sIERhdGFiYXNlVGFza1N5bmNocm9uaXplciosIFZlY3RvcjxTdHJp
bmc+JiBuYW1lcyk7CiAKICAgICB2aXJ0dWFsIHZvaWQgZG9QZXJmb3JtVGFzaygpOwogI2lmICFM
T0dfRElTQUJMRUQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJh
c2UvRGF0YWJhc2VUaHJlYWQuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFz
ZS9EYXRhYmFzZVRocmVhZC5jcHAKaW5kZXggZDc3MWIxY2ExZWM0YWFhNzRmOTM3MmRmNTA5ZTYy
Yzg3YmZjMjIxMC4uZDZmNjM2YWEzNmQ0ZTYwNDA5NTY3NjVkNTg3ZmMyODdjNjExYTJiMyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZVRocmVh
ZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZVRo
cmVhZC5jcHAKQEAgLTEzNiwyMCArMTM2LDUzIEBAIHZvaWQgRGF0YWJhc2VUaHJlYWQ6OmRhdGFi
YXNlVGhyZWFkKCkKICAgICAgICAgY2xlYW51cFN5bmMtPnRhc2tDb21wbGV0ZWQoKTsKIH0KIAot
dm9pZCBEYXRhYmFzZVRocmVhZDo6cmVjb3JkRGF0YWJhc2VPcGVuKERhdGFiYXNlKiBkYXRhYmFz
ZSkKK3ZvaWQgRGF0YWJhc2VUaHJlYWQ6OnJlY29yZERhdGFiYXNlT3BlbihEYXRhYmFzZUNsb3Nl
ciogY2xvc2VyKQogewogICAgIEFTU0VSVChjdXJyZW50VGhyZWFkKCkgPT0gbV90aHJlYWRJRCk7
Ci0gICAgQVNTRVJUKGRhdGFiYXNlKTsKLSAgICBBU1NFUlQoIW1fb3BlbkRhdGFiYXNlU2V0LmNv
bnRhaW5zKGRhdGFiYXNlKSk7Ci0gICAgbV9vcGVuRGF0YWJhc2VTZXQuYWRkKGRhdGFiYXNlKTsK
KyAgICBBU1NFUlQoY2xvc2VyKTsKKyAgICBBU1NFUlQoIW1fb3BlbkRhdGFiYXNlU2V0LmNvbnRh
aW5zKGNsb3NlcikpOworICAgIG1fb3BlbkRhdGFiYXNlU2V0LmFkZChjbG9zZXIpOwogfQogCi12
b2lkIERhdGFiYXNlVGhyZWFkOjpyZWNvcmREYXRhYmFzZUNsb3NlZChEYXRhYmFzZSogZGF0YWJh
c2UpCit2b2lkIERhdGFiYXNlVGhyZWFkOjpyZWNvcmREYXRhYmFzZUNsb3NlZChEYXRhYmFzZUNs
b3NlciogY2xvc2VyKQogewogICAgIEFTU0VSVChjdXJyZW50VGhyZWFkKCkgPT0gbV90aHJlYWRJ
RCk7Ci0gICAgQVNTRVJUKGRhdGFiYXNlKTsKLSAgICBBU1NFUlQobV9xdWV1ZS5raWxsZWQoKSB8
fCBtX29wZW5EYXRhYmFzZVNldC5jb250YWlucyhkYXRhYmFzZSkpOwotICAgIG1fb3BlbkRhdGFi
YXNlU2V0LnJlbW92ZShkYXRhYmFzZSk7CisgICAgQVNTRVJUKGNsb3Nlcik7CisgICAgQVNTRVJU
KG1fcXVldWUua2lsbGVkKCkgfHwgbV9vcGVuRGF0YWJhc2VTZXQuY29udGFpbnMoY2xvc2VyKSk7
CisgICAgbV9vcGVuRGF0YWJhc2VTZXQucmVtb3ZlKGNsb3Nlcik7Cit9CisKK2NsYXNzIENsb3Nl
RGF0YWJhc2VDbG9zZXJUYXNrIDogcHVibGljIERhdGFiYXNlVGFzayB7CitwdWJsaWM6CisgICAg
c3RhdGljIFBhc3NPd25QdHI8Q2xvc2VEYXRhYmFzZUNsb3NlclRhc2s+IGNyZWF0ZShQYXNzUmVm
UHRyPERhdGFiYXNlQ2xvc2VyPiBjbG9zZXIpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRQ
dHIobmV3IENsb3NlRGF0YWJhc2VDbG9zZXJUYXNrKGNsb3NlcikpOworICAgIH0KKworICAgIHZp
cnR1YWwgdm9pZCBkb1BlcmZvcm1UYXNrKCkgT1ZFUlJJREUKKyAgICB7CisgICAgICAgIG1fY2xv
c2VyLT5jbG9zZSgpOworICAgIH0KKworI2lmICFMT0dfRElTQUJMRUQKKyAgICB2aXJ0dWFsIGNv
bnN0IGNoYXIqIGRlYnVnVGFza05hbWUoKSBjb25zdCBPVkVSUklERSB7IHJldHVybiAiQ2xvc2VE
YXRhYmFzZUNsb3NlclRhc2siOyB9CisjZW5kaWYKKworcHJpdmF0ZToKKyAgICBDbG9zZURhdGFi
YXNlQ2xvc2VyVGFzayhQYXNzUmVmUHRyPERhdGFiYXNlQ2xvc2VyPiBjbG9zZXIpCisgICAgICAg
IDogRGF0YWJhc2VUYXNrKDAsIDApCisgICAgICAgICwgbV9jbG9zZXIoY2xvc2VyKQorICAgIHsK
KyAgICB9CisKKyAgICBSZWZQdHI8RGF0YWJhc2VDbG9zZXI+IG1fY2xvc2VyOworfTsKKwordm9p
ZCBEYXRhYmFzZVRocmVhZDo6cmVjb3JkRGF0YWJhc2VTaG91bGRCZUNsb3NlZChEYXRhYmFzZUNs
b3NlciogY2xvc2VyKQoreworICAgIEFTU0VSVChjbG9zZXIpOworICAgIGlmICghbV9xdWV1ZS5r
aWxsZWQoKSkKKyAgICAgICAgbV9xdWV1ZS5wcmVwZW5kKENsb3NlRGF0YWJhc2VDbG9zZXJUYXNr
OjpjcmVhdGUoY2xvc2VyKSk7CiB9CiAKIHZvaWQgRGF0YWJhc2VUaHJlYWQ6OnNjaGVkdWxlVGFz
ayhQYXNzT3duUHRyPERhdGFiYXNlVGFzaz4gdGFzaykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VUaHJlYWQuaCBiL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VUaHJlYWQuaAppbmRleCBmYTRmZDA4OGY5YjUy
NTZhNjYyMzgzNjQ5NTA4NTVmNTk0MDZmODVkLi5jOWQ2NzVjODE3YTZlOGRmNzQzMTc2YTVkZDM3
MWMzMTZkMjAwYjUwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFi
YXNlL0RhdGFiYXNlVGhyZWFkLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRh
YmFzZS9EYXRhYmFzZVRocmVhZC5oCkBAIC00Myw2ICs0Myw3IEBACiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKIGNsYXNzIERhdGFiYXNlOworY2xhc3MgRGF0YWJhc2VDbG9zZXI7CiBjbGFzcyBEYXRh
YmFzZVRhc2s7CiBjbGFzcyBEYXRhYmFzZVRhc2tTeW5jaHJvbml6ZXI7CiBjbGFzcyBEb2N1bWVu
dDsKQEAgLTYyLDggKzYzLDEwIEBAIHB1YmxpYzoKICAgICB2b2lkIHNjaGVkdWxlSW1tZWRpYXRl
VGFzayhQYXNzT3duUHRyPERhdGFiYXNlVGFzaz4pOyAvLyBUaGlzIGp1c3QgYWRkcyB0aGUgdGFz
ayB0byB0aGUgZnJvbnQgb2YgdGhlIHF1ZXVlIC0gdGhlIGNhbGxlciBuZWVkcyB0byBiZSBleHRy
ZW1lbHkgY2FyZWZ1bCBub3QgdG8gY3JlYXRlIGRlYWRsb2NrcyB3aGVuIHdhaXRpbmcgZm9yIGNv
bXBsZXRpb24uCiAgICAgdm9pZCB1bnNjaGVkdWxlRGF0YWJhc2VUYXNrcyhEYXRhYmFzZSopOwog
Ci0gICAgdm9pZCByZWNvcmREYXRhYmFzZU9wZW4oRGF0YWJhc2UqKTsKLSAgICB2b2lkIHJlY29y
ZERhdGFiYXNlQ2xvc2VkKERhdGFiYXNlKik7CisgICAgdm9pZCByZWNvcmREYXRhYmFzZU9wZW4o
RGF0YWJhc2VDbG9zZXIqKTsKKyAgICB2b2lkIHJlY29yZERhdGFiYXNlQ2xvc2VkKERhdGFiYXNl
Q2xvc2VyKik7CisgICAgdm9pZCByZWNvcmREYXRhYmFzZVNob3VsZEJlQ2xvc2VkKERhdGFiYXNl
Q2xvc2VyKik7CisKICAgICBUaHJlYWRJZGVudGlmaWVyIGdldFRocmVhZElEKCkgeyByZXR1cm4g
bV90aHJlYWRJRDsgfQogCiAgICAgU1FMVHJhbnNhY3Rpb25DbGllbnQqIHRyYW5zYWN0aW9uQ2xp
ZW50KCkgeyByZXR1cm4gbV90cmFuc2FjdGlvbkNsaWVudC5nZXQoKTsgfQpAQCAtODIsNyArODUs
NyBAQCBwcml2YXRlOgogICAgIE1lc3NhZ2VRdWV1ZTxEYXRhYmFzZVRhc2s+IG1fcXVldWU7CiAK
ICAgICAvLyBUaGlzIHNldCBrZWVwcyB0cmFjayBvZiB0aGUgb3BlbiBkYXRhYmFzZXMgdGhhdCBo
YXZlIGJlZW4gdXNlZCBvbiB0aGlzIHRocmVhZC4KLSAgICB0eXBlZGVmIEhhc2hTZXQ8UmVmUHRy
PERhdGFiYXNlPiA+IERhdGFiYXNlU2V0OworICAgIHR5cGVkZWYgSGFzaFNldDxSZWZQdHI8RGF0
YWJhc2VDbG9zZXI+ID4gRGF0YWJhc2VTZXQ7CiAgICAgRGF0YWJhc2VTZXQgbV9vcGVuRGF0YWJh
c2VTZXQ7CiAKICAgICBPd25QdHI8U1FMVHJhbnNhY3Rpb25DbGllbnQ+IG1fdHJhbnNhY3Rpb25D
bGllbnQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0Rh
dGFiYXNlVHJhY2tlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0Rh
dGFiYXNlVHJhY2tlci5jcHAKaW5kZXggNWJkNWU3YjNkMmUxYzQwMjExYjAxYTYxZDBiZjc4M2Ni
MzUyNjIyOC4uMDI3MTFkZjIwMTg3YTdkNjk4YjdjZjQ0ZWNiNWE2Y2NjODRkZThiYyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZVRyYWNrZXIu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VUcmFj
a2VyLmNwcApAQCAtMzQsNiArMzQsNyBAQAogI2luY2x1ZGUgIkFic3RyYWN0RGF0YWJhc2UuaCIK
ICNpbmNsdWRlICJDaHJvbWUuaCIKICNpbmNsdWRlICJDaHJvbWVDbGllbnQuaCIKKyNpbmNsdWRl
ICJEYXRhYmFzZS5oIgogI2luY2x1ZGUgIkRhdGFiYXNlQ29udGV4dC5oIgogI2luY2x1ZGUgIkRh
dGFiYXNlVGhyZWFkLmgiCiAjaW5jbHVkZSAiRGF0YWJhc2VUcmFja2VyQ2xpZW50LmgiCkBAIC01
NDcsMzAgKzU0OCw1NyBAQCB2b2lkIERhdGFiYXNlVHJhY2tlcjo6YWRkT3BlbkRhdGFiYXNlKEFi
c3RyYWN0RGF0YWJhc2UqIGRhdGFiYXNlKQogICAgIGRvbmVDcmVhdGluZ0RhdGFiYXNlKGRhdGFi
YXNlLT5zZWN1cml0eU9yaWdpbigpLCBkYXRhYmFzZS0+c3RyaW5nSWRlbnRpZmllcigpKTsKIH0K
IAotdm9pZCBEYXRhYmFzZVRyYWNrZXI6OnJlbW92ZU9wZW5EYXRhYmFzZShBYnN0cmFjdERhdGFi
YXNlKiBkYXRhYmFzZSkKK0RhdGFiYXNlVHJhY2tlckFzeW5jaHJvbm91c1JlbW92ZXI6On5EYXRh
YmFzZVRyYWNrZXJBc3luY2hyb25vdXNSZW1vdmVyKCkKIHsKK30KKworY2xhc3MgRGF0YWJhc2VU
cmFja2VyQXN5bmNocm9ub3VzUmVtb3ZlckltcGwgOiBwdWJsaWMgRGF0YWJhc2VUcmFja2VyQXN5
bmNocm9ub3VzUmVtb3ZlciB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NPd25QdHI8RGF0YWJh
c2VUcmFja2VyQXN5bmNocm9ub3VzUmVtb3ZlckltcGw+IGNyZWF0ZShQYXNzUmVmUHRyPFNlY3Vy
aXR5T3JpZ2luPiBzZWN1cml0eU9yaWdpbikKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFB0
cihuZXcgRGF0YWJhc2VUcmFja2VyQXN5bmNocm9ub3VzUmVtb3ZlckltcGwoc2VjdXJpdHlPcmln
aW4pKTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgY29tcGxldGVSZW1vdmFsKFBhc3NSZWZQ
dHI8U2NyaXB0RXhlY3V0aW9uQ29udGV4dD4gc2NyaXB0RXhlY3V0aW9uQ29udGV4dCkgT1ZFUlJJ
REUKKyAgICB7CisgICAgICAgIERhdGFiYXNlVHJhY2tlcjo6dHJhY2tlcigpLmNvbXBsZXRlRGF0
YWJhc2VSZW1vdmFsKG1fc2VjdXJpdHlPcmlnaW4uZ2V0KCkpOworICAgICAgICBEYXRhYmFzZTo6
ZGlzcG9zZU9mU2NyaXB0RXhlY3V0aW9uQ29udGV4dChzY3JpcHRFeGVjdXRpb25Db250ZXh0KTsK
KyAgICB9CisKK3ByaXZhdGU6CisgICAgRGF0YWJhc2VUcmFja2VyQXN5bmNocm9ub3VzUmVtb3Zl
ckltcGwoUGFzc1JlZlB0cjxTZWN1cml0eU9yaWdpbj4gc2VjdXJpdHlPcmlnaW4pCisgICAgICAg
IDogbV9zZWN1cml0eU9yaWdpbihzZWN1cml0eU9yaWdpbikKKyAgICB7CisgICAgfQorCisgICAg
UmVmUHRyPFNlY3VyaXR5T3JpZ2luPiBtX3NlY3VyaXR5T3JpZ2luOworfTsKKworUGFzc093blB0
cjxEYXRhYmFzZVRyYWNrZXJBc3luY2hyb25vdXNSZW1vdmVyPiBEYXRhYmFzZVRyYWNrZXI6OnJl
bW92ZU9wZW5EYXRhYmFzZShBYnN0cmFjdERhdGFiYXNlKiBkYXRhYmFzZSwgYm9vbCBjb21wbGV0
ZUFzeW5jaHJvbm91c2x5KQoreworICAgIE93blB0cjxEYXRhYmFzZVRyYWNrZXJBc3luY2hyb25v
dXNSZW1vdmVyPiByZW1vdmVyOwogICAgIGlmICghZGF0YWJhc2UpCi0gICAgICAgIHJldHVybjsK
KyAgICAgICAgcmV0dXJuIHJlbW92ZXIucmVsZWFzZSgpOwogCiAgICAgewogICAgICAgICBNdXRl
eExvY2tlciBvcGVuRGF0YWJhc2VNYXBMb2NrKG1fb3BlbkRhdGFiYXNlTWFwR3VhcmQpOwogCiAg
ICAgICAgIGlmICghbV9vcGVuRGF0YWJhc2VNYXApIHsKICAgICAgICAgICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwotICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgcmV0dXJuIHJlbW92
ZXIucmVsZWFzZSgpOwogICAgICAgICB9CiAKICAgICAgICAgU3RyaW5nIG5hbWUoZGF0YWJhc2Ut
PnN0cmluZ0lkZW50aWZpZXIoKSk7CiAgICAgICAgIERhdGFiYXNlTmFtZU1hcCogbmFtZU1hcCA9
IG1fb3BlbkRhdGFiYXNlTWFwLT5nZXQoZGF0YWJhc2UtPnNlY3VyaXR5T3JpZ2luKCkpOwogICAg
ICAgICBpZiAoIW5hbWVNYXApIHsKICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwot
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgcmV0dXJuIHJlbW92ZXIucmVsZWFzZSgp
OwogICAgICAgICB9CiAKICAgICAgICAgRGF0YWJhc2VTZXQqIGRhdGFiYXNlU2V0ID0gbmFtZU1h
cC0+Z2V0KG5hbWUpOwogICAgICAgICBpZiAoIWRhdGFiYXNlU2V0KSB7CiAgICAgICAgICAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIHJl
dHVybiByZW1vdmVyLnJlbGVhc2UoKTsKICAgICAgICAgfQogCiAgICAgICAgIGRhdGFiYXNlU2V0
LT5yZW1vdmUoZGF0YWJhc2UpOwpAQCAtNTc4LDIwICs2MDYsMzYgQEAgdm9pZCBEYXRhYmFzZVRy
YWNrZXI6OnJlbW92ZU9wZW5EYXRhYmFzZShBYnN0cmFjdERhdGFiYXNlKiBkYXRhYmFzZSkKICAg
ICAgICAgTE9HKFN0b3JhZ2VBUEksICJSZW1vdmVkIG9wZW4gRGF0YWJhc2UgJXMgKCVwKVxuIiwg
ZGF0YWJhc2UtPnN0cmluZ0lkZW50aWZpZXIoKS5hc2NpaSgpLmRhdGEoKSwgZGF0YWJhc2UpOwog
CiAgICAgICAgIGlmICghZGF0YWJhc2VTZXQtPmlzRW1wdHkoKSkKLSAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgICAgIHJldHVybiByZW1vdmVyLnJlbGVhc2UoKTsKIAogICAgICAgICBuYW1l
TWFwLT5yZW1vdmUobmFtZSk7CiAgICAgICAgIGRlbGV0ZSBkYXRhYmFzZVNldDsKIAogICAgICAg
ICBpZiAoIW5hbWVNYXAtPmlzRW1wdHkoKSkKLSAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
ICAgIHJldHVybiByZW1vdmVyLnJlbGVhc2UoKTsKIAogICAgICAgICBtX29wZW5EYXRhYmFzZU1h
cC0+cmVtb3ZlKGRhdGFiYXNlLT5zZWN1cml0eU9yaWdpbigpKTsKICAgICAgICAgZGVsZXRlIG5h
bWVNYXA7CiAKLSAgICAgICAgTG9ja2VyPE9yaWdpblF1b3RhTWFuYWdlcj4gcXVvdGFNYW5hZ2Vy
TG9ja2VyKG9yaWdpblF1b3RhTWFuYWdlcigpKTsKLSAgICAgICAgb3JpZ2luUXVvdGFNYW5hZ2Vy
KCkucmVtb3ZlT3JpZ2luKGRhdGFiYXNlLT5zZWN1cml0eU9yaWdpbigpKTsKKyAgICAgICAgaWYg
KCFjb21wbGV0ZUFzeW5jaHJvbm91c2x5KSB7CisgICAgICAgICAgICBMb2NrZXI8T3JpZ2luUXVv
dGFNYW5hZ2VyPiBxdW90YU1hbmFnZXJMb2NrZXIob3JpZ2luUXVvdGFNYW5hZ2VyKCkpOworICAg
ICAgICAgICAgb3JpZ2luUXVvdGFNYW5hZ2VyKCkucmVtb3ZlT3JpZ2luKGRhdGFiYXNlLT5zZWN1
cml0eU9yaWdpbigpKTsKKyAgICAgICAgICAgIHJldHVybiByZW1vdmVyLnJlbGVhc2UoKTsKKyAg
ICAgICAgfQogICAgIH0KKworICAgIHJlbW92ZXIgPSBEYXRhYmFzZVRyYWNrZXJBc3luY2hyb25v
dXNSZW1vdmVySW1wbDo6Y3JlYXRlKGRhdGFiYXNlLT5zZWN1cml0eU9yaWdpbigpKTsKKyAgICBy
ZXR1cm4gcmVtb3Zlci5yZWxlYXNlKCk7Cit9CisKK3ZvaWQgRGF0YWJhc2VUcmFja2VyOjpjb21w
bGV0ZURhdGFiYXNlUmVtb3ZhbChTZWN1cml0eU9yaWdpbiogc2VjdXJpdHlPcmlnaW4pCit7Cisg
ICAgTXV0ZXhMb2NrZXIgb3BlbkRhdGFiYXNlTWFwTG9jayhtX29wZW5EYXRhYmFzZU1hcEd1YXJk
KTsKKyAgICBpZiAobV9vcGVuRGF0YWJhc2VNYXAtPmZpbmQoc2VjdXJpdHlPcmlnaW4pICE9IG1f
b3BlbkRhdGFiYXNlTWFwLT5lbmQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgTG9ja2VyPE9y
aWdpblF1b3RhTWFuYWdlcj4gcXVvdGFNYW5hZ2VyTG9ja2VyKG9yaWdpblF1b3RhTWFuYWdlcigp
KTsKKyAgICBvcmlnaW5RdW90YU1hbmFnZXIoKS5yZW1vdmVPcmlnaW4oc2VjdXJpdHlPcmlnaW4p
OwogfQogCiB2b2lkIERhdGFiYXNlVHJhY2tlcjo6Z2V0T3BlbkRhdGFiYXNlcyhTZWN1cml0eU9y
aWdpbiogb3JpZ2luLCBjb25zdCBTdHJpbmcmIG5hbWUsIEhhc2hTZXQ8UmVmUHRyPEFic3RyYWN0
RGF0YWJhc2U+ID4qIGRhdGFiYXNlcykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VUcmFja2VyLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmRhdGFiYXNlL0RhdGFiYXNlVHJhY2tlci5oCmluZGV4IGJiYTQ4OTI3ZGZkNGQwNmMyYjYw
OTU4Y2E1N2I3MmM1YjY2NTNjNTAuLjNlMDM2MDU0M2Y3MDkxM2Y4ZjNkMzc4MTVmMjA1YWE3YzFi
N2Q0NmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0
YWJhc2VUcmFja2VyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9E
YXRhYmFzZVRyYWNrZXIuaApAQCAtNTYsOCArNTYsMTggQEAgY2xhc3MgRGF0YWJhc2VUcmFja2Vy
Q2xpZW50Owogc3RydWN0IFNlY3VyaXR5T3JpZ2luVHJhaXRzOwogI2VuZGlmIC8vICFQTEFURk9S
TShDSFJPTUlVTSkKIAorY2xhc3MgRGF0YWJhc2VUcmFja2VyQXN5bmNocm9ub3VzUmVtb3ZlciB7
CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoRGF0YWJhc2VUcmFja2VyQXN5bmNocm9ub3VzUmVt
b3Zlcik7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgRGF0YWJh
c2VUcmFja2VyQXN5bmNocm9ub3VzUmVtb3ZlcigpIHsgfQorICAgIHZpcnR1YWwgfkRhdGFiYXNl
VHJhY2tlckFzeW5jaHJvbm91c1JlbW92ZXIoKTsKKyAgICB2aXJ0dWFsIHZvaWQgY29tcGxldGVS
ZW1vdmFsKFBhc3NSZWZQdHI8U2NyaXB0RXhlY3V0aW9uQ29udGV4dD4pID0gMDsKK307CisKIGNs
YXNzIERhdGFiYXNlVHJhY2tlciB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoRGF0YWJhc2VU
cmFja2VyKTsgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CisgICAgZnJpZW5kIGNsYXNzIERhdGFi
YXNlVHJhY2tlckFzeW5jaHJvbm91c1JlbW92ZXJJbXBsOwogcHVibGljOgogICAgIHN0YXRpYyB2
b2lkIGluaXRpYWxpemVUcmFja2VyKGNvbnN0IFN0cmluZyYgZGF0YWJhc2VQYXRoKTsKICAgICBz
dGF0aWMgRGF0YWJhc2VUcmFja2VyJiB0cmFja2VyKCk7CkBAIC03Myw3ICs4Myw3IEBAIHB1Ymxp
YzoKICAgICBTdHJpbmcgZnVsbFBhdGhGb3JEYXRhYmFzZShTZWN1cml0eU9yaWdpbiosIGNvbnN0
IFN0cmluZyYgbmFtZSwgYm9vbCBjcmVhdGVJZkRvZXNOb3RFeGlzdCA9IHRydWUpOwogCiAgICAg
dm9pZCBhZGRPcGVuRGF0YWJhc2UoQWJzdHJhY3REYXRhYmFzZSopOwotICAgIHZvaWQgcmVtb3Zl
T3BlbkRhdGFiYXNlKEFic3RyYWN0RGF0YWJhc2UqKTsKKyAgICBQYXNzT3duUHRyPERhdGFiYXNl
VHJhY2tlckFzeW5jaHJvbm91c1JlbW92ZXI+IHJlbW92ZU9wZW5EYXRhYmFzZShBYnN0cmFjdERh
dGFiYXNlKiwgYm9vbCBjb21wbGV0ZUFzeW5jaHJvbm91c2x5ID0gZmFsc2UpOwogICAgIHZvaWQg
Z2V0T3BlbkRhdGFiYXNlcyhTZWN1cml0eU9yaWdpbiogb3JpZ2luLCBjb25zdCBTdHJpbmcmIG5h
bWUsIEhhc2hTZXQ8UmVmUHRyPEFic3RyYWN0RGF0YWJhc2U+ID4qIGRhdGFiYXNlcyk7CiAKICAg
ICB1bnNpZ25lZCBsb25nIGxvbmcgZ2V0TWF4U2l6ZUZvckRhdGFiYXNlKGNvbnN0IEFic3RyYWN0
RGF0YWJhc2UqKTsKQEAgLTEyMSw2ICsxMzEsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgb3BlblRy
YWNrZXJEYXRhYmFzZShib29sIGNyZWF0ZUlmRG9lc05vdEV4aXN0KTsKIAogICAgIFN0cmluZyBv
cmlnaW5QYXRoKFNlY3VyaXR5T3JpZ2luKikgY29uc3Q7CisgICAgdm9pZCBjb21wbGV0ZURhdGFi
YXNlUmVtb3ZhbChTZWN1cml0eU9yaWdpbiopOwogCiAgICAgYm9vbCBoYXNFbnRyeUZvckRhdGFi
YXNlKFNlY3VyaXR5T3JpZ2luKiwgY29uc3QgU3RyaW5nJiBkYXRhYmFzZUlkZW50aWZpZXIpOwog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL2Nocm9taXVt
L0RhdGFiYXNlT2JzZXJ2ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2Uv
Y2hyb21pdW0vRGF0YWJhc2VPYnNlcnZlci5oCmluZGV4IDY1N2M3OGU5ZTYxYzk1ZGNkYTQ0NWJk
ZTg0NDhjYzE3MWFmMzQ2NTYuLmQyMTNjYmRkYWQxZWViOGE2NGQ1ZWRlMWQ3ZjhjMGQwMGVlOGZl
MjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvY2hyb21p
dW0vRGF0YWJhc2VPYnNlcnZlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0
YWJhc2UvY2hyb21pdW0vRGF0YWJhc2VPYnNlcnZlci5oCkBAIC0zOSw2ICszOSw3IEBAIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgQWJzdHJhY3REYXRhYmFzZTsKIGNsYXNzIFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQ7CitjbGFzcyBTZWN1cml0eU9yaWdpbjsKIAogLy8gVGhlIGltcGxlbWVu
dGF0aW9uIG9mIHRoaXMgY2xhc3MgaXMgaW4gdGhlIFdlYktpdCBBUEkgKENocm9taXVtIHNvdXJj
ZSB0cmVlKQogLy8gaW4gV2ViS2l0L2Nocm9taXVtL3NyYy9EYXRhYmFzZU9ic2VydmVyLmNwcC4K
QEAgLTQ3LDcgKzQ4LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBib29sIGNhbkVzdGFibGlzaERh
dGFiYXNlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJp
bmcmLCB1bnNpZ25lZCBsb25nKTsKICAgICBzdGF0aWMgdm9pZCBkYXRhYmFzZU9wZW5lZChBYnN0
cmFjdERhdGFiYXNlKik7CiAgICAgc3RhdGljIHZvaWQgZGF0YWJhc2VNb2RpZmllZChBYnN0cmFj
dERhdGFiYXNlKik7Ci0gICAgc3RhdGljIHZvaWQgZGF0YWJhc2VDbG9zZWQoQWJzdHJhY3REYXRh
YmFzZSopOworICAgIHN0YXRpYyB2b2lkIGRhdGFiYXNlQ2xvc2VkKFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQqLCBTdHJpbmcmIHN0cmluZ0lkZW50aWZpZXIsIFBhc3NSZWZQdHI8U2VjdXJpdHlPcmln
aW4+KTsKIAogICAgIHN0YXRpYyB2b2lkIHJlcG9ydE9wZW5EYXRhYmFzZVJlc3VsdChBYnN0cmFj
dERhdGFiYXNlKiwgaW50IGNhbGxzaXRlLCBpbnQgd2ViU3FsRXJyb3JDb2RlLCBpbnQgc3FsaXRl
RXJyb3JDb2RlKTsKICAgICBzdGF0aWMgdm9pZCByZXBvcnRDaGFuZ2VWZXJzaW9uUmVzdWx0KEFi
c3RyYWN0RGF0YWJhc2UqLCBpbnQgY2FsbHNpdGUsIGludCB3ZWJTcWxFcnJvckNvZGUsIGludCBz
cWxpdGVFcnJvckNvZGUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJk
YXRhYmFzZS9jaHJvbWl1bS9EYXRhYmFzZVRyYWNrZXJDaHJvbWl1bS5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL2Nocm9taXVtL0RhdGFiYXNlVHJhY2tlckNocm9taXVt
LmNwcAppbmRleCAzMDlkNDZjMGQwODJhZGNlYzQyMmE0ZDJjYmY3YTg3ZThkNjk4OTc4Li45Nzkw
ZTQwNTljZGJlYTQ1NzhmZDYzZjY3MGVlYTNmNjI1Njg1OWM0IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL2Nocm9taXVtL0RhdGFiYXNlVHJhY2tlckNocm9t
aXVtLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL2Nocm9taXVt
L0RhdGFiYXNlVHJhY2tlckNocm9taXVtLmNwcApAQCAtOTksMTQgKzk5LDE3IEBAIHZvaWQgRGF0
YWJhc2VUcmFja2VyOjphZGRPcGVuRGF0YWJhc2UoQWJzdHJhY3REYXRhYmFzZSogZGF0YWJhc2Up
CiAKIGNsYXNzIE5vdGlmeURhdGFiYXNlT2JzZXJ2ZXJPbkNsb3NlVGFzayA6IHB1YmxpYyBTY3Jp
cHRFeGVjdXRpb25Db250ZXh0OjpUYXNrIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc093blB0
cjxOb3RpZnlEYXRhYmFzZU9ic2VydmVyT25DbG9zZVRhc2s+IGNyZWF0ZShQYXNzUmVmUHRyPEFi
c3RyYWN0RGF0YWJhc2U+IGRhdGFiYXNlKQorICAgIHN0YXRpYyBQYXNzT3duUHRyPE5vdGlmeURh
dGFiYXNlT2JzZXJ2ZXJPbkNsb3NlVGFzaz4gY3JlYXRlKFBhc3NSZWZQdHI8U2NyaXB0RXhlY3V0
aW9uQ29udGV4dD4gc2NyaXB0RXhlY3V0aW9uQ29udGV4dCwgU3RyaW5nIHN0cmluZ0lkZW50aWZp
ZXIsIFBhc3NSZWZQdHI8U2VjdXJpdHlPcmlnaW4+IHNlY3VyaXR5T3JpZ2luKQogICAgIHsKLSAg
ICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBOb3RpZnlEYXRhYmFzZU9ic2VydmVyT25DbG9zZVRh
c2soZGF0YWJhc2UpKTsKKyAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBOb3RpZnlEYXRhYmFz
ZU9ic2VydmVyT25DbG9zZVRhc2soc2NyaXB0RXhlY3V0aW9uQ29udGV4dCwgc3RyaW5nSWRlbnRp
Zmllciwgc2VjdXJpdHlPcmlnaW4pKTsKICAgICB9CiAKLSAgICB2aXJ0dWFsIHZvaWQgcGVyZm9y
bVRhc2soU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCkKKyAgICB2aXJ0dWFsIHZvaWQg
cGVyZm9ybVRhc2soU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCkgT1ZFUlJJREUKICAg
ICB7Ci0gICAgICAgIERhdGFiYXNlT2JzZXJ2ZXI6OmRhdGFiYXNlQ2xvc2VkKG1fZGF0YWJhc2Uu
Z2V0KCkpOworICAgICAgICBBU1NFUlQoY29udGV4dCA9PSBtX3NjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQpOworICAgICAgICBTdHJpbmcgc3RyaW5nSWRlbnRpZmllciA9IG1fc3RyaW5nSWRlbnRpZmll
ci5pc29sYXRlZENvcHkoKTsKKyAgICAgICAgRGF0YWJhc2VPYnNlcnZlcjo6ZGF0YWJhc2VDbG9z
ZWQobV9zY3JpcHRFeGVjdXRpb25Db250ZXh0LmdldCgpLCBzdHJpbmdJZGVudGlmaWVyLCBtX3Nl
Y3VyaXR5T3JpZ2luKTsKKyAgICAgICAgbV9zY3JpcHRFeGVjdXRpb25Db250ZXh0LmNsZWFyKCk7
CiAgICAgfQogCiAgICAgdmlydHVhbCBib29sIGlzQ2xlYW51cFRhc2soKSBjb25zdApAQCAtMTE1
LDQ2ICsxMTgsODggQEAgcHVibGljOgogICAgIH0KIAogcHJpdmF0ZToKLSAgICBOb3RpZnlEYXRh
YmFzZU9ic2VydmVyT25DbG9zZVRhc2soUGFzc1JlZlB0cjxBYnN0cmFjdERhdGFiYXNlPiBkYXRh
YmFzZSkKLSAgICAgICAgOiBtX2RhdGFiYXNlKGRhdGFiYXNlKQorICAgIE5vdGlmeURhdGFiYXNl
T2JzZXJ2ZXJPbkNsb3NlVGFzayhQYXNzUmVmUHRyPFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ+IHNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQsIFN0cmluZyYgc3RyaW5nSWRlbnRpZmllciwgUGFzc1JlZlB0
cjxTZWN1cml0eU9yaWdpbj4gc2VjdXJpdHlPcmlnaW4pCisgICAgICAgIDogbV9zY3JpcHRFeGVj
dXRpb25Db250ZXh0KHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQpCisgICAgICAgICwgbV9zdHJpbmdJ
ZGVudGlmaWVyKHN0cmluZ0lkZW50aWZpZXIpCisgICAgICAgICwgbV9zZWN1cml0eU9yaWdpbihz
ZWN1cml0eU9yaWdpbikKICAgICB7CiAgICAgfQogCi0gICAgUmVmUHRyPEFic3RyYWN0RGF0YWJh
c2U+IG1fZGF0YWJhc2U7CisgICAgUmVmUHRyPFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ+IG1fc2Ny
aXB0RXhlY3V0aW9uQ29udGV4dDsKKyAgICBTdHJpbmcgbV9zdHJpbmdJZGVudGlmaWVyOworICAg
IFJlZlB0cjxTZWN1cml0eU9yaWdpbj4gbV9zZWN1cml0eU9yaWdpbjsKIH07CiAKLXZvaWQgRGF0
YWJhc2VUcmFja2VyOjpyZW1vdmVPcGVuRGF0YWJhc2UoQWJzdHJhY3REYXRhYmFzZSogZGF0YWJh
c2UpCitEYXRhYmFzZVRyYWNrZXJBc3luY2hyb25vdXNSZW1vdmVyOjp+RGF0YWJhc2VUcmFja2Vy
QXN5bmNocm9ub3VzUmVtb3ZlcigpCiB7Ci0gICAgU3RyaW5nIG9yaWdpbklkZW50aWZpZXIgPSBk
YXRhYmFzZS0+c2VjdXJpdHlPcmlnaW4oKS0+ZGF0YWJhc2VJZGVudGlmaWVyKCk7Ci0gICAgTXV0
ZXhMb2NrZXIgb3BlbkRhdGFiYXNlTWFwTG9jayhtX29wZW5EYXRhYmFzZU1hcEd1YXJkKTsKLSAg
ICBBU1NFUlQobV9vcGVuRGF0YWJhc2VNYXApOwotICAgIERhdGFiYXNlTmFtZU1hcCogbmFtZU1h
cCA9IG1fb3BlbkRhdGFiYXNlTWFwLT5nZXQob3JpZ2luSWRlbnRpZmllcik7Ci0gICAgaWYgKCFu
YW1lTWFwKQotICAgICAgICByZXR1cm47Cit9CisKK2NsYXNzIERhdGFiYXNlVHJhY2tlckFzeW5j
aHJvbm91c1JlbW92ZXJJbXBsIDogcHVibGljIERhdGFiYXNlVHJhY2tlckFzeW5jaHJvbm91c1Jl
bW92ZXIgeworcHVibGljOgorICAgIHN0YXRpYyBQYXNzT3duUHRyPERhdGFiYXNlVHJhY2tlckFz
eW5jaHJvbm91c1JlbW92ZXJJbXBsPiBjcmVhdGUoU3RyaW5nJiBzdHJpbmdJZGVudGlmaWVyLCBQ
YXNzUmVmUHRyPFNlY3VyaXR5T3JpZ2luPiBzZWN1cml0eU9yaWdpbikKKyAgICB7CisgICAgICAg
IHJldHVybiBhZG9wdFB0cihuZXcgRGF0YWJhc2VUcmFja2VyQXN5bmNocm9ub3VzUmVtb3Zlcklt
cGwoc3RyaW5nSWRlbnRpZmllciwgc2VjdXJpdHlPcmlnaW4pKTsKKyAgICB9CisKKyAgICB2aXJ0
dWFsIHZvaWQgY29tcGxldGVSZW1vdmFsKFBhc3NSZWZQdHI8U2NyaXB0RXhlY3V0aW9uQ29udGV4
dD4gY29udGV4dCkgT1ZFUlJJREUKKyAgICB7CisgICAgICAgIFN0cmluZyBzdHJpbmdJZGVudGlm
aWVyID0gbV9zdHJpbmdJZGVudGlmaWVyLmlzb2xhdGVkQ29weSgpOworICAgICAgICBpZiAoIWNv
bnRleHQtPmlzQ29udGV4dFRocmVhZCgpKSB7CisgICAgICAgICAgICBTY3JpcHRFeGVjdXRpb25D
b250ZXh0KiBjb250ZXh0Q29weSA9IGNvbnRleHQuZ2V0KCk7CisgICAgICAgICAgICBjb250ZXh0
Q29weS0+cG9zdFRhc2soTm90aWZ5RGF0YWJhc2VPYnNlcnZlck9uQ2xvc2VUYXNrOjpjcmVhdGUo
Y29udGV4dCwgc3RyaW5nSWRlbnRpZmllciwgbV9zZWN1cml0eU9yaWdpbikpOworICAgICAgICB9
IGVsc2UKKyAgICAgICAgICAgIERhdGFiYXNlT2JzZXJ2ZXI6OmRhdGFiYXNlQ2xvc2VkKGNvbnRl
eHQuZ2V0KCksIHN0cmluZ0lkZW50aWZpZXIsIG1fc2VjdXJpdHlPcmlnaW4pOworICAgIH0KKwor
cHJpdmF0ZToKKyAgICBEYXRhYmFzZVRyYWNrZXJBc3luY2hyb25vdXNSZW1vdmVySW1wbChTdHJp
bmcmIHN0cmluZ0lkZW50aWZpZXIsIFBhc3NSZWZQdHI8U2VjdXJpdHlPcmlnaW4+IHNlY3VyaXR5
T3JpZ2luKQorICAgICAgICA6IG1fc3RyaW5nSWRlbnRpZmllcihzdHJpbmdJZGVudGlmaWVyKQor
ICAgICAgICAsIG1fc2VjdXJpdHlPcmlnaW4oc2VjdXJpdHlPcmlnaW4pCisgICAgeworICAgIH0K
IAorICAgIFN0cmluZyBtX3N0cmluZ0lkZW50aWZpZXI7CisgICAgUmVmUHRyPFNlY3VyaXR5T3Jp
Z2luPiBtX3NlY3VyaXR5T3JpZ2luOworfTsKKworUGFzc093blB0cjxEYXRhYmFzZVRyYWNrZXJB
c3luY2hyb25vdXNSZW1vdmVyPiBEYXRhYmFzZVRyYWNrZXI6OnJlbW92ZU9wZW5EYXRhYmFzZShB
YnN0cmFjdERhdGFiYXNlKiBkYXRhYmFzZSwgYm9vbCBjb21wbGV0ZUFzeW5jaHJvbm91c2x5KQor
eworICAgIEFTU0VSVChtX29wZW5EYXRhYmFzZU1hcCk7CisgICAgU3RyaW5nIG9yaWdpbklkZW50
aWZpZXIgPSBkYXRhYmFzZS0+c2VjdXJpdHlPcmlnaW4oKS0+ZGF0YWJhc2VJZGVudGlmaWVyKCk7
CiAgICAgU3RyaW5nIG5hbWUoZGF0YWJhc2UtPnN0cmluZ0lkZW50aWZpZXIoKSk7Ci0gICAgRGF0
YWJhc2VTZXQqIGRhdGFiYXNlU2V0ID0gbmFtZU1hcC0+Z2V0KG5hbWUpOwotICAgIGlmICghZGF0
YWJhc2VTZXQpCi0gICAgICAgIHJldHVybjsKKyAgICBPd25QdHI8RGF0YWJhc2VUcmFja2VyQXN5
bmNocm9ub3VzUmVtb3Zlcj4gcmVtb3ZlcjsKKyAgICB7CisgICAgICAgIE11dGV4TG9ja2VyIG9w
ZW5EYXRhYmFzZU1hcExvY2sobV9vcGVuRGF0YWJhc2VNYXBHdWFyZCk7CisgICAgICAgIERhdGFi
YXNlTmFtZU1hcCogbmFtZU1hcCA9IG1fb3BlbkRhdGFiYXNlTWFwLT5nZXQob3JpZ2luSWRlbnRp
Zmllcik7CisgICAgICAgIGlmICghbmFtZU1hcCkKKyAgICAgICAgICAgIHJldHVybiByZW1vdmVy
LnJlbGVhc2UoKTsKIAotICAgIERhdGFiYXNlU2V0OjppdGVyYXRvciBmb3VuZCA9IGRhdGFiYXNl
U2V0LT5maW5kKGRhdGFiYXNlKTsKLSAgICBpZiAoZm91bmQgPT0gZGF0YWJhc2VTZXQtPmVuZCgp
KQotICAgICAgICByZXR1cm47CisgICAgICAgIERhdGFiYXNlU2V0KiBkYXRhYmFzZVNldCA9IG5h
bWVNYXAtPmdldChuYW1lKTsKKyAgICAgICAgaWYgKCFkYXRhYmFzZVNldCkKKyAgICAgICAgICAg
IHJldHVybiByZW1vdmVyLnJlbGVhc2UoKTsKIAotICAgIGRhdGFiYXNlU2V0LT5yZW1vdmUoZm91
bmQpOwotICAgIGlmIChkYXRhYmFzZVNldC0+aXNFbXB0eSgpKSB7Ci0gICAgICAgIG5hbWVNYXAt
PnJlbW92ZShuYW1lKTsKLSAgICAgICAgZGVsZXRlIGRhdGFiYXNlU2V0OwotICAgICAgICBpZiAo
bmFtZU1hcC0+aXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICBtX29wZW5EYXRhYmFzZU1hcC0+cmVt
b3ZlKG9yaWdpbklkZW50aWZpZXIpOwotICAgICAgICAgICAgZGVsZXRlIG5hbWVNYXA7CisgICAg
ICAgIERhdGFiYXNlU2V0OjppdGVyYXRvciBmb3VuZCA9IGRhdGFiYXNlU2V0LT5maW5kKGRhdGFi
YXNlKTsKKyAgICAgICAgaWYgKGZvdW5kID09IGRhdGFiYXNlU2V0LT5lbmQoKSkKKyAgICAgICAg
ICAgIHJldHVybiByZW1vdmVyLnJlbGVhc2UoKTsKKworICAgICAgICBkYXRhYmFzZVNldC0+cmVt
b3ZlKGZvdW5kKTsKKyAgICAgICAgaWYgKGRhdGFiYXNlU2V0LT5pc0VtcHR5KCkpIHsKKyAgICAg
ICAgICAgIG5hbWVNYXAtPnJlbW92ZShuYW1lKTsKKyAgICAgICAgICAgIGRlbGV0ZSBkYXRhYmFz
ZVNldDsKKyAgICAgICAgICAgIGlmIChuYW1lTWFwLT5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAg
ICAgICBtX29wZW5EYXRhYmFzZU1hcC0+cmVtb3ZlKG9yaWdpbklkZW50aWZpZXIpOworICAgICAg
ICAgICAgICAgIGRlbGV0ZSBuYW1lTWFwOworICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAg
fQogCi0gICAgaWYgKCFkYXRhYmFzZS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLT5pc0NvbnRl
eHRUaHJlYWQoKSkKLSAgICAgICAgZGF0YWJhc2UtPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKS0+
cG9zdFRhc2soTm90aWZ5RGF0YWJhc2VPYnNlcnZlck9uQ2xvc2VUYXNrOjpjcmVhdGUoZGF0YWJh
c2UpKTsKLSAgICBlbHNlCi0gICAgICAgIERhdGFiYXNlT2JzZXJ2ZXI6OmRhdGFiYXNlQ2xvc2Vk
KGRhdGFiYXNlKTsKKyAgICByZW1vdmVyID0gRGF0YWJhc2VUcmFja2VyQXN5bmNocm9ub3VzUmVt
b3ZlckltcGw6OmNyZWF0ZShuYW1lLCBkYXRhYmFzZS0+c2VjdXJpdHlPcmlnaW4oKSk7CisgICAg
aWYgKCFjb21wbGV0ZUFzeW5jaHJvbm91c2x5KSB7CisgICAgICAgIEFTU0VSVChkYXRhYmFzZS0+
c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLT5pc0NvbnRleHRUaHJlYWQoKSk7CisgICAgICAgIHJl
bW92ZXItPmNvbXBsZXRlUmVtb3ZhbChkYXRhYmFzZS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgp
KTsKKyAgICAgICAgcmVtb3Zlci5jbGVhcigpOworICAgIH0KKyAgICByZXR1cm4gcmVtb3Zlci5y
ZWxlYXNlKCk7CiB9CiAKIHVuc2lnbmVkIGxvbmcgbG9uZyBEYXRhYmFzZVRyYWNrZXI6OmdldE1h
eFNpemVGb3JEYXRhYmFzZShjb25zdCBBYnN0cmFjdERhdGFiYXNlKiBkYXRhYmFzZSkKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2Uvd2luY2UvRGF0YWJhc2VUaHJlYWRXaW5DRS5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL3dpbmNlL0RhdGFiYXNlVGhyZWFkV2luQ0UuY3Bw
CmluZGV4IGQ4MTE0NWRmODBiNGRiYTJiNTQ3YWEyMzg0MzE1MDc2MTNlZGQ2NGYuLjc5OWY3MzU2
MWEwZGI4MTdjMjlmODNiYTZlMDM3ZjIwNTIzNzcyNWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3N0b3JhZ2Uvd2luY2UvRGF0YWJhc2VUaHJlYWRXaW5DRS5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvc3RvcmFnZS93aW5jZS9EYXRhYmFzZVRocmVhZFdpbkNFLmNwcApAQCAtODIsMTIgKzgy
LDE3IEBAIHZvaWQgRGF0YWJhc2VUaHJlYWQ6OnVuc2NoZWR1bGVEYXRhYmFzZVRhc2tzKERhdGFi
YXNlKiBkYXRhYmFzZSkKICAgICBtX3F1ZXVlLnN3YXAocmVzZXJ2ZWRUYXNrcyk7CiB9CiAKLXZv
aWQgRGF0YWJhc2VUaHJlYWQ6OnJlY29yZERhdGFiYXNlT3BlbihEYXRhYmFzZSogZGF0YWJhc2Up
Cit2b2lkIERhdGFiYXNlVGhyZWFkOjpyZWNvcmREYXRhYmFzZU9wZW4oRGF0YWJhc2VDbG9zZXIq
IGRhdGFiYXNlKQogewogICAgIG5vdEltcGxlbWVudGVkKCk7CiB9CiAKLXZvaWQgRGF0YWJhc2VU
aHJlYWQ6OnJlY29yZERhdGFiYXNlQ2xvc2VkKERhdGFiYXNlKiBkYXRhYmFzZSkKK3ZvaWQgRGF0
YWJhc2VUaHJlYWQ6OnJlY29yZERhdGFiYXNlQ2xvc2VkKERhdGFiYXNlQ2xvc2VyKiBkYXRhYmFz
ZSkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIERhdGFiYXNlVGhyZWFkOjpy
ZWNvcmREYXRhYmFzZVNob3VsZEJlQ2xvc2VkKERhdGFiYXNlQ2xvc2VyKiBkYXRhYmFzZSkKIHsK
ICAgICBub3RJbXBsZW1lbnRlZCgpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3Rv
cmFnZS93aW5jZS9EYXRhYmFzZVRocmVhZFdpbkNFLmggYi9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdl
L3dpbmNlL0RhdGFiYXNlVGhyZWFkV2luQ0UuaAppbmRleCAxOTIxY2MxYjZlNDUxMWMxNDVjMzI1
MjM5YzgwN2VmZDQzNDM3NTJlLi5jNmFiZTY5MzEyMmIwZTE4NWQ2M2E4OWQ5ZTIyNTlhODZjNGM1
ZTY2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL3dpbmNlL0RhdGFiYXNlVGhy
ZWFkV2luQ0UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL3dpbmNlL0RhdGFiYXNlVGhy
ZWFkV2luQ0UuaApAQCAtNDUsOCArNDUsOSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAg
IHZvaWQgc2NoZWR1bGVUYXNrKFBhc3NSZWZQdHI8RGF0YWJhc2VUYXNrPik7CiAgICAgICAgIHZv
aWQgc2NoZWR1bGVJbW1lZGlhdGVUYXNrKFBhc3NSZWZQdHI8RGF0YWJhc2VUYXNrPik7CiAgICAg
ICAgIHZvaWQgdW5zY2hlZHVsZURhdGFiYXNlVGFza3MoRGF0YWJhc2UqKTsKLSAgICAgICAgdm9p
ZCByZWNvcmREYXRhYmFzZU9wZW4oRGF0YWJhc2UqKTsKLSAgICAgICAgdm9pZCByZWNvcmREYXRh
YmFzZUNsb3NlZChEYXRhYmFzZSopOworICAgICAgICB2b2lkIHJlY29yZERhdGFiYXNlT3BlbihE
YXRhYmFzZUNsb3NlciopOworICAgICAgICB2b2lkIHJlY29yZERhdGFiYXNlQ2xvc2VkKERhdGFi
YXNlQ2xvc2VyKik7CisgICAgICAgIHZvaWQgcmVjb3JkRGF0YWJhc2VTaG91bGRCZUNsb3NlZChE
YXRhYmFzZUNsb3NlciopOwogI2lmbmRlZiBOREVCVUcKICAgICAgICAgVGhyZWFkSWRlbnRpZmll
ciBnZXRUaHJlYWRJRCgpIGNvbnN0IHsgcmV0dXJuIGN1cnJlbnRUaHJlYWQoKTsgfQogI2VuZGlm
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJEYXRhYmFzZS5o
IGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViRGF0YWJhc2UuaAppbmRleCA2NmEy
NGExNDQwNjgwYzIwOGY2ZDZkNWQ0MDU0YWNmNmY1OWJkNGI1Li40M2ViMzUxZDFlNDNlYWQ0YWQ3
ZDM2NjkzMDlhODRjMzJkYTgyNDBiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3B1YmxpYy9XZWJEYXRhYmFzZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGlj
L1dlYkRhdGFiYXNlLmgKQEAgLTMxLDE1ICszMSwxOSBAQAogI2lmbmRlZiBXZWJEYXRhYmFzZV9o
CiAjZGVmaW5lIFdlYkRhdGFiYXNlX2gKIAorI2lmIFdFQktJVF9JTVBMRU1FTlRBVElPTgorI2lu
Y2x1ZGUgIlNlY3VyaXR5T3JpZ2luLmgiCisjZW5kaWYKKwogI2luY2x1ZGUgIldlYlNlY3VyaXR5
T3JpZ2luLmgiCiAjaW5jbHVkZSAicGxhdGZvcm0vV2ViQ29tbW9uLmgiCisjaW5jbHVkZSAicGxh
dGZvcm0vV2ViU3RyaW5nLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsgY2xhc3MgQWJzdHJhY3RE
YXRhYmFzZTsgfQogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAogY2xhc3MgV2ViRGF0YWJhc2VPYnNl
cnZlcjsKLWNsYXNzIFdlYlN0cmluZzsKIAogY2xhc3MgV2ViRGF0YWJhc2UgewogcHVibGljOgpA
QCAtNjQsMTEgKzY4LDE1IEBAIHB1YmxpYzoKIAogI2lmIFdFQktJVF9JTVBMRU1FTlRBVElPTgog
ICAgIFdlYkRhdGFiYXNlKGNvbnN0IFdlYkNvcmU6OkFic3RyYWN0RGF0YWJhc2UqKTsKKyAgICBX
ZWJEYXRhYmFzZShTdHJpbmcmIHN0cmluZ0lkZW50aWZpZXIsIFBhc3NSZWZQdHI8V2ViQ29yZTo6
U2VjdXJpdHlPcmlnaW4+KTsKICNlbmRpZgogCiBwcml2YXRlOgogICAgIFdlYkRhdGFiYXNlKCkg
eyB9CiAgICAgY29uc3QgV2ViQ29yZTo6QWJzdHJhY3REYXRhYmFzZSogbV9kYXRhYmFzZTsKKyAg
ICAvLyBGSVhNRTogUmVtb3ZlIHRoZXNlIHZhcmlhYmxlcyBhbmQgcmVmYWN0b3IgV2ViRGF0YWJh
c2VPYnNlcnZlcjo6ZGF0YWJhc2VDbG9zZWQuCisgICAgV2ViU3RyaW5nIG1fc3RyaW5nSWRlbnRp
ZmllcjsKKyAgICBXZWJTZWN1cml0eU9yaWdpbiBtX3NlY3VyaXR5T3JpZ2luOwogfTsKIAogfSAv
LyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Ny
Yy9EYXRhYmFzZU9ic2VydmVyLmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0RhdGFi
YXNlT2JzZXJ2ZXIuY3BwCmluZGV4IDMyMmU4MDBlYzIxNjRjYjFmMDdmNGQ0ODZjMjg2N2E2Yjdi
ZTIxOTkuLjJjNzQ0YzllMmNkZTczODUzMjBjODI2NGMwZDNmNWJhMGQzNGY2ODAgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0RhdGFiYXNlT2JzZXJ2ZXIuY3BwCisrKyBi
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0RhdGFiYXNlT2JzZXJ2ZXIuY3BwCkBAIC0xOTAs
MTAgKzE5MCwxMCBAQCB2b2lkIERhdGFiYXNlT2JzZXJ2ZXI6OmRhdGFiYXNlTW9kaWZpZWQoQWJz
dHJhY3REYXRhYmFzZSogZGF0YWJhc2UpCiAgICAgV2ViRGF0YWJhc2U6Om9ic2VydmVyKCktPmRh
dGFiYXNlTW9kaWZpZWQoV2ViRGF0YWJhc2UoZGF0YWJhc2UpKTsKIH0KIAotdm9pZCBEYXRhYmFz
ZU9ic2VydmVyOjpkYXRhYmFzZUNsb3NlZChBYnN0cmFjdERhdGFiYXNlKiBkYXRhYmFzZSkKK3Zv
aWQgRGF0YWJhc2VPYnNlcnZlcjo6ZGF0YWJhc2VDbG9zZWQoU2NyaXB0RXhlY3V0aW9uQ29udGV4
dCogc2NyaXB0RXhlY3V0aW9uQ29udGV4dCwgU3RyaW5nJiBzdHJpbmdJZGVudGlmaWVyLCBQYXNz
UmVmUHRyPFNlY3VyaXR5T3JpZ2luPiBzZWN1cml0eU9yaWdpbikKIHsKLSAgICBBU1NFUlQoZGF0
YWJhc2UtPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKS0+aXNDb250ZXh0VGhyZWFkKCkpOwotICAg
IFdlYkRhdGFiYXNlOjpvYnNlcnZlcigpLT5kYXRhYmFzZUNsb3NlZChXZWJEYXRhYmFzZShkYXRh
YmFzZSkpOworICAgIEFTU0VSVChzY3JpcHRFeGVjdXRpb25Db250ZXh0LT5pc0NvbnRleHRUaHJl
YWQoKSk7CisgICAgV2ViRGF0YWJhc2U6Om9ic2VydmVyKCktPmRhdGFiYXNlQ2xvc2VkKFdlYkRh
dGFiYXNlKHN0cmluZ0lkZW50aWZpZXIsIHNlY3VyaXR5T3JpZ2luKSk7CiB9CiAKIHZvaWQgRGF0
YWJhc2VPYnNlcnZlcjo6cmVwb3J0T3BlbkRhdGFiYXNlUmVzdWx0KEFic3RyYWN0RGF0YWJhc2Uq
IGRhdGFiYXNlLCBpbnQgZXJyb3JTaXRlLCBpbnQgd2ViU3FsRXJyb3JDb2RlLCBpbnQgc3FsaXRl
RXJyb3JDb2RlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViRGF0
YWJhc2UuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViRGF0YWJhc2UuY3BwCmlu
ZGV4IDA0ZDRhNDA3OWE1NDc1OWQxYmYyZDcwYWE0Y2M0ZWRlZmI0NWRkNDQuLmUxOTIzYTFjZTM2
YWI4MjY4YTc0YzEwN2QwOTc0YjIzMWE1ZDk3MzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vc3JjL1dlYkRhdGFiYXNlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3NyYy9XZWJEYXRhYmFzZS5jcHAKQEAgLTYxLDYgKzYxLDggQEAgc3RhdGljIFdlYkRhdGFiYXNl
T2JzZXJ2ZXIqIGRhdGFiYXNlT2JzZXJ2ZXIgPSAwOwogCiBXZWJTdHJpbmcgV2ViRGF0YWJhc2U6
Om5hbWUoKSBjb25zdAogeworICAgIGlmICghbV9zdHJpbmdJZGVudGlmaWVyLmlzTnVsbCgpKQor
ICAgICAgICByZXR1cm4gbV9zdHJpbmdJZGVudGlmaWVyOwogICAgIEFTU0VSVChtX2RhdGFiYXNl
KTsKICAgICByZXR1cm4gbV9kYXRhYmFzZS0+c3RyaW5nSWRlbnRpZmllcigpOwogfQpAQCAtNzks
NiArODEsOCBAQCB1bnNpZ25lZCBsb25nIFdlYkRhdGFiYXNlOjplc3RpbWF0ZWRTaXplKCkgY29u
c3QKIAogV2ViU2VjdXJpdHlPcmlnaW4gV2ViRGF0YWJhc2U6OnNlY3VyaXR5T3JpZ2luKCkgY29u
c3QKIHsKKyAgICBpZiAoIW1fc2VjdXJpdHlPcmlnaW4uaXNOdWxsKCkpCisgICAgICAgIHJldHVy
biBtX3NlY3VyaXR5T3JpZ2luOwogICAgIEFTU0VSVChtX2RhdGFiYXNlKTsKICAgICByZXR1cm4g
V2ViU2VjdXJpdHlPcmlnaW4obV9kYXRhYmFzZS0+c2VjdXJpdHlPcmlnaW4oKSk7CiB9CkBAIC0x
MzIsNCArMTM2LDExIEBAIFdlYkRhdGFiYXNlOjpXZWJEYXRhYmFzZShjb25zdCBBYnN0cmFjdERh
dGFiYXNlKiBkYXRhYmFzZSkKIHsKIH0KIAorV2ViRGF0YWJhc2U6OldlYkRhdGFiYXNlKFN0cmlu
ZyYgc3RyaW5nSWRlbnRpZmllciwgUGFzc1JlZlB0cjxTZWN1cml0eU9yaWdpbj4gc2VjdXJpdHlP
cmlnaW4pCisgICAgOiBtX2RhdGFiYXNlKDApCisgICAgLCBtX3N0cmluZ0lkZW50aWZpZXIoc3Ry
aW5nSWRlbnRpZmllcikKKyAgICAsIG1fc2VjdXJpdHlPcmlnaW4oc2VjdXJpdHlPcmlnaW4pCit7
Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYktpdAo=
</data>

          </attachment>
      

    </bug>

</bugzilla>