<?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>144259</bug_id>
          
          <creation_ts>2015-04-27 06:15:16 -0700</creation_ts>
          <short_desc>Network Cache: Disk cache getting filled by YouTube video data</short_desc>
          <delta_ts>2015-05-04 19:49:07 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Page Loading</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=144533</see_also>
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Antti Koivisto">koivisto</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>aestes</cc>
    
    <cc>ap</cc>
    
    <cc>barraclough</cc>
    
    <cc>cdumez</cc>
    
    <cc>commit-queue</cc>
    
    <cc>darin</cc>
    
    <cc>eric.carlson</cc>
    
    <cc>jer.noble</cc>
    
    <cc>mitz</cc>
    
    <cc>mjs</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1089002</commentid>
    <comment_count>0</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2015-04-27 06:15:16 -0700</bug_when>
    <thetext>MSE media loads via the cache and tends to eventually fill it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1089003</commentid>
    <comment_count>1</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2015-04-27 06:15:41 -0700</bug_when>
    <thetext>rdar://problem/20127334</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1089007</commentid>
    <comment_count>2</comment_count>
      <attachid>251736</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2015-04-27 06:31:05 -0700</bug_when>
    <thetext>Created attachment 251736
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1089008</commentid>
    <comment_count>3</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-04-27 06:32:42 -0700</bug_when>
    <thetext>Attachment 251736 did not pass style-queue:


ERROR: Source/WebCore/platform/network/ResourceRequestBase.h:150:  enum members should use InterCaps with an initial capital letter.  [readability/enum_casing] [4]
Total errors found: 1 in 18 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1089013</commentid>
    <comment_count>4</comment_count>
      <attachid>251738</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2015-04-27 06:55:32 -0700</bug_when>
    <thetext>Created attachment 251738
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1089014</commentid>
    <comment_count>5</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-04-27 06:57:08 -0700</bug_when>
    <thetext>Attachment 251738 did not pass style-queue:


ERROR: Source/WebCore/platform/network/ResourceRequestBase.h:150:  enum members should use InterCaps with an initial capital letter.  [readability/enum_casing] [4]
Total errors found: 1 in 18 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1089017</commentid>
    <comment_count>6</comment_count>
      <attachid>251739</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2015-04-27 07:55:32 -0700</bug_when>
    <thetext>Created attachment 251739
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1089018</commentid>
    <comment_count>7</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-04-27 07:57:20 -0700</bug_when>
    <thetext>Attachment 251739 did not pass style-queue:


ERROR: Source/WebCore/platform/network/ResourceRequestBase.h:150:  enum members should use InterCaps with an initial capital letter.  [readability/enum_casing] [4]
Total errors found: 1 in 19 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1089026</commentid>
    <comment_count>8</comment_count>
      <attachid>251743</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2015-04-27 08:36:01 -0700</bug_when>
    <thetext>Created attachment 251743
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1089027</commentid>
    <comment_count>9</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-04-27 08:38:12 -0700</bug_when>
    <thetext>Attachment 251743 did not pass style-queue:


ERROR: Source/WebCore/platform/network/ResourceRequestBase.h:150:  enum members should use InterCaps with an initial capital letter.  [readability/enum_casing] [4]
Total errors found: 1 in 19 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1089033</commentid>
    <comment_count>10</comment_count>
      <attachid>251743</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2015-04-27 09:06:33 -0700</bug_when>
    <thetext>Comment on attachment 251743
patch

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

&gt; Source/WebCore/platform/network/ResourceRequestBase.h:231
&gt; +        Requester m_requester { Requester::Unspecified };

The data members just above are going out of their way to use bitfields, and here for something that takes only 2 bits we are not using one.

&gt; Source/WebKit2/NetworkProcess/cache/NetworkCache.cpp:307
&gt; +    bool isLikelyStreamingMedia = isXHR &amp;&amp; (response.mimeType().startsWith(&quot;video/&quot;) || response.mimeType().startsWith(&quot;audio/&quot;));

Is MIME type guaranteed to be lower case? I think it would be best to do this comparison in a case folding way.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1089068</commentid>
    <comment_count>11</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2015-04-27 10:35:16 -0700</bug_when>
    <thetext>&gt; The data members just above are going out of their way to use bitfields, and
&gt; here for something that takes only 2 bits we are not using one.

Those bitfields are an over-optimization. I was planning to get rid of them separately.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1089076</commentid>
    <comment_count>12</comment_count>
      <attachid>251743</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2015-04-27 10:53:16 -0700</bug_when>
    <thetext>Comment on attachment 251743
patch

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

&gt; Source/WebKit2/NetworkProcess/cache/NetworkCache.cpp:309
&gt; +    // Media loaded via XHR is likely being used for MSE streaming (YouTube and Netflix for example).
&gt; +    // Streaming media fills the cache quickly and is unlikely to be reused.
&gt; +    bool isXHR = originalRequest.requester() == WebCore::ResourceRequest::Requester::XHR;
&gt; +    bool isLikelyStreamingMedia = isXHR &amp;&amp; (response.mimeType().startsWith(&quot;video/&quot;) || response.mimeType().startsWith(&quot;audio/&quot;));
&gt; +    if (isLikelyStreamingMedia)
&gt; +        return StoreDecision::NoDueToStreamingMedia;

We don&apos;t think that people rewind, fast-forward, and/or revisit videos? I tend to do all of those things. :(</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1089382</commentid>
    <comment_count>13</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2015-04-27 21:14:57 -0700</bug_when>
    <thetext>We just removed &quot;requestor&quot; from ResourceRequest due to it being a layering violation, and deprecated isMainResourceRequest, so it&apos;s unfortunate that it&apos;s being added back. ResourceRequest is a network level concept that shouldn&apos;t know about &quot;XMLHttpRequest&quot; on &quot;main resource&quot; in my opinion.

Should we have an abstraction for networking, or just use web concepts all the way through?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1089432</commentid>
    <comment_count>14</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2015-04-28 00:19:50 -0700</bug_when>
    <thetext>In practice we need this sort of information through the stack. We can pass it via side channels. This is bug-prone and cumbersome. We could add a new high level request type that knows about the web and wraps a low level type that doesn&apos;t. This is adds yet another layer to the already too layered networking code.

In the end we are making a browser engine not a platonic networking platform. &quot;Web concepts all the way through&quot; is a decent description of WebKit architecture.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1089454</commentid>
    <comment_count>15</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2015-04-28 03:20:08 -0700</bug_when>
    <thetext>&gt; We don&apos;t think that people rewind, fast-forward, and/or revisit videos? I
&gt; tend to do all of those things. :(

At least the current YouTube player never seems to generate the same URL twice so cache entires are never hit. For rewind and fast-forward have 5min 1024p, 314MB memory cache on MSE level (bigger than the entire disk cache).

We can&apos;t currently move data from the memory cache to MSE without copying so there is no mapped file benefit either.

We should revisit this at some point. I think we want a separate more transient media cache section on disk and we should allow copy-free use of mapped buffers through the stack.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1089455</commentid>
    <comment_count>16</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2015-04-28 03:21:26 -0700</bug_when>
    <thetext>&gt; We can&apos;t currently move data from the memory cache to MSE without copying so
&gt; there is no mapped file benefit either.

from the disk cache I mean</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1089474</commentid>
    <comment_count>17</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2015-04-28 05:51:07 -0700</bug_when>
    <thetext>https://trac.webkit.org/r183467</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1089496</commentid>
    <comment_count>18</comment_count>
    <who name="">mitz</who>
    <bug_when>2015-04-28 07:18:04 -0700</bug_when>
    <thetext>(In reply to comment #17)
&gt; https://trac.webkit.org/r183467

Looks like this broke the USE(CFNETWORK) iOS configuration:

Source/WebCore/platform/network/ios/ResourceRequestIOS.mm:42:7: error: member initializer &apos;m_mainResourceRequest&apos; does not name a non-static data member or base class</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1089534</commentid>
    <comment_count>19</comment_count>
    <who name="Andy Estes">aestes</who>
    <bug_when>2015-04-28 08:54:48 -0700</bug_when>
    <thetext>Mavericks Debug build fix: http://trac.webkit.org/changeset/183478</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1089550</commentid>
    <comment_count>20</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2015-04-28 09:26:45 -0700</bug_when>
    <thetext>Regarding Alexey and Antti’s discussion about “web concepts” at the lower level: I think what we want for the layering here is that the lower level exposes the concepts it uses to make the cache work, and the higher level adopts/implements those. There is no reason, in my opinion, that the lower level concepts need to be “non-web”, but we do want them to be as simple as possible, not simply plumbing through the entire high level. And obviously, “nothing at all” is the simplest, but may not be sufficient.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1089570</commentid>
    <comment_count>21</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2015-04-28 09:56:53 -0700</bug_when>
    <thetext>It&apos;s not really a choice about platonic vs. pragmatical, it&apos;s simple layered software design.

If you want networking to implement a policy that is easy for other engineers to understand, if should have a descriptive name (not &quot;whatever XHR needs&quot;), and the policies should be as centralized as possible, not scattered across multiple frameworks and processes.

In other words, policy decisions are made before a ResourceRequest is passed to NetworkProcess. It should be especially straightforward in this case, where you just want to inhibit caching.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1089709</commentid>
    <comment_count>22</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2015-04-28 13:20:09 -0700</bug_when>
    <thetext>If you look at the patch you will see that the requster is used for number of non-cache related things. Those used to be handled by a side-channel and by (already) having the requester type in ResourceRequest (on iOS).

I want to keep cache decision-making in one place. I also don&apos;t want to be coy and use some other name when I really mean XHR. I would be surprised if this confused anyone. Generally less abstract code is more understandable.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1089714</commentid>
    <comment_count>23</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2015-04-28 13:35:50 -0700</bug_when>
    <thetext>Also &quot;which layer knows about which concept&quot; kind of layering is very soft when not reflected in code dependencies. I don&apos;t think there is any &quot;simple layered software design&quot; hard rules here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1091665</commentid>
    <comment_count>24</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2015-05-04 19:49:07 -0700</bug_when>
    <thetext>This caused bug 144533.

For the record, I still think that this is poor design. Even your own words demonstrate that - you say that one needs to look at the patch to find out what &quot;XMLHttpRequest&quot; means to the low level networking code. I do not think that any human can fully understand the relationship between explicit behaviors passed from upper levels and implicit ones triggered by ResourceRequest::Requester::XHR.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>251736</attachid>
            <date>2015-04-27 06:31:05 -0700</date>
            <delta_ts>2015-04-27 06:55:32 -0700</delta_ts>
            <desc>patch</desc>
            <filename>disk-cache-no-media.patch</filename>
            <type>text/plain</type>
            <size>27631</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE4MzM5NCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDUyIEBACisyMDE1LTA0LTI3ICBBbnR0aSBL
b2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KKworICAgICAgICBOZXR3b3JrIENhY2hlOiBEaXNr
IGNhY2hlIGdldHRpbmcgZmlsbGVkIGJ5IFlvdVR1YmUgdmlkZW8gZGF0YQorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ0MjU5CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTVNFIG1lZGlhIGlzIGxvYWRlZCB2
aWEgWEhSIGFuZCB0ZW5kcyB0byBldmVudHVhbGx5IGZpbGwgdGhlIGNhY2hlLgorCisgICAgICAg
IFlvdVR1YmUgc2VydmVzIHRoZSBtZWRpYSBjaHVua3MgY2FjaGVhYmxlLCBob3dldmVyIHRoZXkg
YXJlIHJhcmVseSAoaWYgZXZlcikgcmV1c2VkLgorICAgICAgICBXZSBjYW4gcmVkdWNlIGRpc2sg
d3JpdGVzIGFuZCBrZWVwIG1vcmUgdXNlZnVsIHJlc291cmNlcyBhcm91bmQgYnkgbm90IGNhY2hp
bmcgdGhlbQorCisgICAgICAgIFRlc3Q6IGh0dHAvdGVzdHMvY2FjaGUvZGlzay1jYWNoZS9kaXNr
LWNhY2hlLW1lZGlhLmh0bWwKKworICAgICAgICAqIGxvYWRlci9Eb2N1bWVudExvYWRlci5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudExvYWRlcjo6c3RhcnRMb2FkaW5nTWFpblJlc291
cmNlKToKKworICAgICAgICAgICAgU2V0IHRoZSByZXF1ZXN0ZXIuCisKKyAgICAgICAgKiBsb2Fk
ZXIvY2FjaGUvQ2FjaGVkUmF3UmVzb3VyY2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2FjaGVk
UmF3UmVzb3VyY2U6OkNhY2hlZFJhd1Jlc291cmNlKToKKyAgICAgICAgKiBwYWdlL0RpYWdub3N0
aWNMb2dnaW5nS2V5cy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEaWFnbm9zdGljTG9nZ2luZ0tl
eXM6OnN0cmVhbWluZ01lZGlhKToKKyAgICAgICAgKiBwYWdlL0RpYWdub3N0aWNMb2dnaW5nS2V5
cy5oOgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VSZXF1ZXN0QmFzZS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3RCYXNlOjphZG9wdCk6CisgICAgICAg
IChXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3RCYXNlOjpjb3B5RGF0YSk6CisgICAgICAgIChXZWJD
b3JlOjplcXVhbElnbm9yaW5nSGVhZGVyRmllbGRzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3
b3JrL1Jlc291cmNlUmVxdWVzdEJhc2UuaDoKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlUmVx
dWVzdEJhc2U6OnJlcXVlc3Rlcik6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3RC
YXNlOjpzZXRSZXF1ZXN0ZXIpOgorCisgICAgICAgICAgICBBZGQgcmVxdWVzdGVyIHR5cGUgdG8g
dGhlIHJlcXVlc3Qgb2JqZWN0LiBDdXJyZW50bHkgdGhpcyBpcyBtYWluIHJlc291cmNlLCB4aHIg
b3IgdW5zcGVjaWZpZWQuCisKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdEJhc2U6
OmVuY29kZVdpdGhvdXRQbGF0Zm9ybURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VS
ZXF1ZXN0QmFzZTo6ZGVjb2RlV2l0aG91dFBsYXRmb3JtRGF0YSk6CisgICAgICAgICogcGxhdGZv
cm0vbmV0d29yay9jZi9SZXNvdXJjZVJlcXVlc3QuaDoKKyAgICAgICAgKFdlYkNvcmU6OlJlc291
cmNlUmVxdWVzdDo6ZGVwcmVjYXRlZFNldE1haW5SZXNvdXJjZVJlcXVlc3QpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0OjpkZXByZWNhdGVkSXNNYWluUmVzb3Vy
Y2VSZXF1ZXN0KTogRGVsZXRlZC4KKworICAgICAgICAgICAgUmVwbGFjZSB0aGlzIGlPUyBvbmx5
IGZpZWxkIHdpdGggc2hhcmVkIG1lY2hhbmlzbS4KKworICAgICAgICAqIHBsYXRmb3JtL25ldHdv
cmsvaW9zL1F1aWNrTG9vay5tbToKKyAgICAgICAgKFdlYkNvcmU6OlF1aWNrTG9va0hhbmRsZTo6
Y3JlYXRlKToKKyAgICAgICAgKiB4bWwvWE1MSHR0cFJlcXVlc3QuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6WE1MSHR0cFJlcXVlc3Q6OmNyZWF0ZVJlcXVlc3QpOgorCisgICAgICAgICAgICBTZXQg
dGhlIHJlcXVlc3Rlci4KKwogMjAxNS0wNC0yNyAgQ3NhYmEgT3N6dHJvZ29uw6FjICA8b3NzeUB3
ZWJraXQub3JnPgogCiAgICAgICAgIEZpeCB0aGUgIUVOQUJMRShDU1NfR1JJRF9MQVlPVVQpIGJ1
aWxkIGFmdGVyIHIxODMzNzAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9Eb2N1bWVudExv
YWRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvbG9hZGVyL0RvY3VtZW50TG9h
ZGVyLmNwcAkocmV2aXNpb24gMTgzMzg4KQorKysgU291cmNlL1dlYkNvcmUvbG9hZGVyL0RvY3Vt
ZW50TG9hZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQwMywxMiArMTQwMyw5IEBAIHZvaWQg
RG9jdW1lbnRMb2FkZXI6OnN0YXJ0TG9hZGluZ01haW5SZXMKICAgICAgICAgcmV0dXJuOwogICAg
IH0KIAotI2lmIFBMQVRGT1JNKElPUykKLSAgICAvLyBGSVhNRTogUmVtb3ZlIFBMQVRGT1JNKElP
UyktZ3VhcmQgb25jZSB3ZSB1cHN0cmVhbSB0aGUgaU9TIGNoYW5nZXMgdG8gUmVzb3VyY2VSZXF1
ZXN0LmguCi0gICAgbV9yZXF1ZXN0LmRlcHJlY2F0ZWRTZXRNYWluUmVzb3VyY2VSZXF1ZXN0KHRy
dWUpOwotI2VuZGlmCi0KICAgICBSZXNvdXJjZVJlcXVlc3QgcmVxdWVzdChtX3JlcXVlc3QpOwor
ICAgIHJlcXVlc3Quc2V0UmVxdWVzdGVyKFJlc291cmNlUmVxdWVzdDo6UmVxdWVzdGVyOjpNYWlu
KTsKKyAgICAKICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8UmVzb3VyY2VMb2FkZXJPcHRpb25z
PiBtYWluUmVzb3VyY2VMb2FkT3B0aW9ucyhTZW5kQ2FsbGJhY2tzLCBTbmlmZkNvbnRlbnQsIEJ1
ZmZlckRhdGEsIEFsbG93U3RvcmVkQ3JlZGVudGlhbHMsIEFza0NsaWVudEZvckFsbENyZWRlbnRp
YWxzLCBTa2lwU2VjdXJpdHlDaGVjaywgVXNlRGVmYXVsdE9yaWdpblJlc3RyaWN0aW9uc0ZvclR5
cGUsIEluY2x1ZGVDZXJ0aWZpY2F0ZUluZm8pOwogICAgIENhY2hlZFJlc291cmNlUmVxdWVzdCBj
YWNoZWRSZXNvdXJjZVJlcXVlc3QocmVxdWVzdCwgbWFpblJlc291cmNlTG9hZE9wdGlvbnMpOwog
ICAgIGNhY2hlZFJlc291cmNlUmVxdWVzdC5zZXRJbml0aWF0b3IoKnRoaXMpOwpJbmRleDogU291
cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZFJhd1Jlc291cmNlLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkUmF3UmVzb3VyY2UuY3BwCShy
ZXZpc2lvbiAxODMzODgpCisrKyBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkUmF3
UmVzb3VyY2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Miw3ICs0Miw2IEBAIENhY2hlZFJhd1Jl
c291cmNlOjpDYWNoZWRSYXdSZXNvdXJjZShSZXMKICAgICAsIG1faWRlbnRpZmllcigwKQogICAg
ICwgbV9hbGxvd0VuY29kZWREYXRhUmVwbGFjZW1lbnQodHJ1ZSkKIHsKLSAgICAvLyBGSVhNRTog
VGhlIHdyb25nIENhY2hlZFJlc291cmNlOjpUeXBlIGhlcmUgbWF5IGNhdXNlIGEgYmFkIGNhc3Qg
ZWxzZXdoZXJlLgogICAgIEFTU0VSVChpc01haW5PclJhd1Jlc291cmNlKCkpOwogfQogCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9wYWdlL0RpYWdub3N0aWNMb2dnaW5nS2V5cy5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9EaWFnbm9zdGljTG9nZ2luZ0tleXMuY3BwCShyZXZp
c2lvbiAxODMzODgpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL0RpYWdub3N0aWNMb2dnaW5nS2V5
cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM3Myw2ICszNzMsMTEgQEAgU3RyaW5nIERpYWdub3N0
aWNMb2dnaW5nS2V5czo6c291cmNlS2V5KAogICAgIHJldHVybiBBU0NJSUxpdGVyYWwoInNvdXJj
ZUtleSIpOwogfQogCitTdHJpbmcgRGlhZ25vc3RpY0xvZ2dpbmdLZXlzOjpzdHJlYW1pbmdNZWRp
YSgpCit7CisgICAgcmV0dXJuIEFTQ0lJTGl0ZXJhbCgic3RyZWFtaW5nTWVkaWEiKTsKK30KKwog
U3RyaW5nIERpYWdub3N0aWNMb2dnaW5nS2V5czo6c3R5bGVTaGVldEtleSgpCiB7CiAgICAgcmV0
dXJuIEFTQ0lJTGl0ZXJhbCgic3R5bGVTaGVldCIpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGFn
ZS9EaWFnbm9zdGljTG9nZ2luZ0tleXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9w
YWdlL0RpYWdub3N0aWNMb2dnaW5nS2V5cy5oCShyZXZpc2lvbiAxODMzODgpCisrKyBTb3VyY2Uv
V2ViQ29yZS9wYWdlL0RpYWdub3N0aWNMb2dnaW5nS2V5cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
MDYsNiArMTA2LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBTdHJpbmcgc2FtZUxvYWRLZXkoKTsK
ICAgICBzdGF0aWMgU3RyaW5nIHNjcmlwdEtleSgpOwogICAgIHN0YXRpYyBTdHJpbmcgc291cmNl
S2V5KCk7CisgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIFN0cmluZyBzdHJlYW1pbmdNZWRpYSgp
OwogICAgIHN0YXRpYyBTdHJpbmcgc3R5bGVTaGVldEtleSgpOwogICAgIHN0YXRpYyBTdHJpbmcg
c3ZnRG9jdW1lbnRLZXkoKTsKICAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgU3RyaW5nIHVuY2Fj
aGVhYmxlU3RhdHVzQ29kZUtleSgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0
d29yay9SZXNvdXJjZVJlcXVlc3RCYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlUmVxdWVzdEJhc2UuY3BwCShyZXZpc2lvbiAxODMz
ODgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlUmVxdWVzdEJh
c2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Nyw2ICs1Nyw3IEBAIHN0ZDo6dW5pcXVlX3B0cjxS
ZXNvdXJjZVJlcXVlc3Q+IFJlc291cmMKICAgICByZXF1ZXN0LT5zZXRGaXJzdFBhcnR5Rm9yQ29v
a2llcyhkYXRhLT5tX2ZpcnN0UGFydHlGb3JDb29raWVzKTsKICAgICByZXF1ZXN0LT5zZXRIVFRQ
TWV0aG9kKGRhdGEtPm1faHR0cE1ldGhvZCk7CiAgICAgcmVxdWVzdC0+c2V0UHJpb3JpdHkoZGF0
YS0+bV9wcmlvcml0eSk7CisgICAgcmVxdWVzdC0+c2V0UmVxdWVzdGVyKGRhdGEtPm1fcmVxdWVz
dGVyKTsKIAogICAgIHJlcXVlc3QtPnVwZGF0ZVJlc291cmNlUmVxdWVzdCgpOwogICAgIHJlcXVl
c3QtPm1faHR0cEhlYWRlckZpZWxkcy5hZG9wdChXVEY6Om1vdmUoZGF0YS0+bV9odHRwSGVhZGVy
cykpOwpAQCAtOTAsNiArOTEsNyBAQCBzdGQ6OnVuaXF1ZV9wdHI8Q3Jvc3NUaHJlYWRSZXNvdXJj
ZVJlcXVlCiAgICAgZGF0YS0+bV9odHRwTWV0aG9kID0gaHR0cE1ldGhvZCgpLmlzb2xhdGVkQ29w
eSgpOwogICAgIGRhdGEtPm1faHR0cEhlYWRlcnMgPSBodHRwSGVhZGVyRmllbGRzKCkuY29weURh
dGEoKTsKICAgICBkYXRhLT5tX3ByaW9yaXR5ID0gcHJpb3JpdHkoKTsKKyAgICBkYXRhLT5tX3Jl
cXVlc3RlciA9IG1fcmVxdWVzdGVyOwogCiAgICAgZGF0YS0+bV9yZXNwb25zZUNvbnRlbnREaXNw
b3NpdGlvbkVuY29kaW5nRmFsbGJhY2tBcnJheS5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KG1fcmVz
cG9uc2VDb250ZW50RGlzcG9zaXRpb25FbmNvZGluZ0ZhbGxiYWNrQXJyYXkuc2l6ZSgpKTsKICAg
ICBzaXplX3QgZW5jb2RpbmdBcnJheVNpemUgPSBtX3Jlc3BvbnNlQ29udGVudERpc3Bvc2l0aW9u
RW5jb2RpbmdGYWxsYmFja0FycmF5LnNpemUoKTsKQEAgLTQ5Niw2ICs0OTgsOSBAQCBib29sIGVx
dWFsSWdub3JpbmdIZWFkZXJGaWVsZHMoY29uc3QgUmVzCiAgICAgaWYgKGEucHJpb3JpdHkoKSAh
PSBiLnByaW9yaXR5KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAorICAgIGlmIChhLnJlcXVl
c3RlcigpICE9IGIucmVxdWVzdGVyKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKwogICAgIEZv
cm1EYXRhKiBmb3JtRGF0YUEgPSBhLmh0dHBCb2R5KCk7CiAgICAgRm9ybURhdGEqIGZvcm1EYXRh
QiA9IGIuaHR0cEJvZHkoKTsKICAgICAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25l
dHdvcmsvUmVzb3VyY2VSZXF1ZXN0QmFzZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VSZXF1ZXN0QmFzZS5oCShyZXZpc2lvbiAxODMzODgp
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlUmVxdWVzdEJhc2Uu
aAkod29ya2luZyBjb3B5KQpAQCAtMTQ3LDYgKzE0NywxMCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAgICAgICAgIGJvb2wgaGlkZGVuRnJvbUluc3BlY3RvcigpIGNvbnN0IHsgcmV0dXJuIG1faGlk
ZGVuRnJvbUluc3BlY3RvcjsgfQogICAgICAgICB2b2lkIHNldEhpZGRlbkZyb21JbnNwZWN0b3Io
Ym9vbCBoaWRkZW5Gcm9tSW5zcGVjdG9yKSB7IG1faGlkZGVuRnJvbUluc3BlY3RvciA9IGhpZGRl
bkZyb21JbnNwZWN0b3I7IH0KIAorICAgICAgICBlbnVtIGNsYXNzIFJlcXVlc3RlciB7IFVuc3Bl
Y2lmaWVkLCBNYWluLCBYSFIgfTsKKyAgICAgICAgV0VCQ09SRV9FWFBPUlQgUmVxdWVzdGVyIHJl
cXVlc3RlcigpIGNvbnN0IHsgcmV0dXJuIG1fcmVxdWVzdGVyOyB9CisgICAgICAgIFdFQkNPUkVf
RVhQT1JUIHZvaWQgc2V0UmVxdWVzdGVyKFJlcXVlc3RlciByZXF1ZXN0ZXIpIHsgbV9yZXF1ZXN0
ZXIgPSByZXF1ZXN0ZXI7IH0KKwogI2lmICFQTEFURk9STShDT0NPQSkKICAgICAgICAgYm9vbCBl
bmNvZGluZ1JlcXVpcmVzUGxhdGZvcm1EYXRhKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQogI2Vu
ZGlmCkBAIC0yMjQsNiArMjI4LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB1bnNp
Z25lZCBtX3JlcG9ydFJhd0hlYWRlcnMgOiAxOwogICAgICAgICB1bnNpZ25lZCBtX2hpZGRlbkZy
b21JbnNwZWN0b3IgOiAxOwogICAgICAgICB1bnNpZ25lZCBtX3ByaW9yaXR5IDogNDsKKyAgICAg
ICAgUmVxdWVzdGVyIG1fcmVxdWVzdGVyIHsgUmVxdWVzdGVyOjpVbnNwZWNpZmllZCB9OwogCiAg
ICAgcHJpdmF0ZToKICAgICAgICAgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiBhc1Jlc291cmNlUmVx
dWVzdCgpIGNvbnN0OwpAQCAtMjU1LDYgKzI2MCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAg
ICAgICAgUmVmUHRyPEZvcm1EYXRhPiBtX2h0dHBCb2R5OwogICAgICAgICBib29sIG1fYWxsb3dD
b29raWVzOwogICAgICAgICBSZXNvdXJjZUxvYWRQcmlvcml0eSBtX3ByaW9yaXR5OworICAgICAg
ICBSZXNvdXJjZVJlcXVlc3RCYXNlOjpSZXF1ZXN0ZXIgbV9yZXF1ZXN0ZXI7CiAgICAgfTsKICAg
ICAKICAgICB1bnNpZ25lZCBpbml0aWFsaXplTWF4aW11bUhUVFBDb25uZWN0aW9uQ291bnRQZXJI
b3N0KCk7CkBAIC0yNzYsNiArMjgyLDcgQEAgdm9pZCBSZXNvdXJjZVJlcXVlc3RCYXNlOjplbmNv
ZGVXaXRob3V0UAogICAgIGVuY29kZXIuZW5jb2RlRW51bShtX2NhY2hlUG9saWN5KTsKICAgICBl
bmNvZGVyIDw8IG1fYWxsb3dDb29raWVzOwogICAgIGVuY29kZXIuZW5jb2RlRW51bShtX3ByaW9y
aXR5KTsKKyAgICBlbmNvZGVyLmVuY29kZUVudW0obV9yZXF1ZXN0ZXIpOwogfQogCiB0ZW1wbGF0
ZTxjbGFzcyBEZWNvZGVyPgpAQCAtMzE4LDYgKzMyNSw5IEBAIGJvb2wgUmVzb3VyY2VSZXF1ZXN0
QmFzZTo6ZGVjb2RlV2l0aG91dFAKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIG1fcHJpb3Jp
dHkgPSBwcmlvcml0eTsKIAorICAgIGlmICghZGVjb2Rlci5kZWNvZGVFbnVtKG1fcmVxdWVzdGVy
KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2YvUmVzb3VyY2VSZXF1ZXN0LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jZi9SZXNvdXJjZVJl
cXVlc3QuaAkocmV2aXNpb24gMTgzMzg4KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0
d29yay9jZi9SZXNvdXJjZVJlcXVlc3QuaAkod29ya2luZyBjb3B5KQpAQCAtMTE4LDE3ICsxMTgs
NiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICAgICAgc3RhdGljIGJvb2wgcmVzb3VyY2VQ
cmlvcml0aWVzRW5hYmxlZCgpOwogCi0jaWYgUExBVEZPUk0oSU9TKQotICAgICAgICAvLyBGSVhN
RTogZGVwcmVjYXRlZElzTWFpblJlc291cmNlUmVxdWVzdCgpIGRvZXMgbm90IHJldHVybiB0aGUg
Y29ycmVjdCB2YWx1ZSBpZiB0aGUgUmVzb3VyY2VSZXF1ZXN0IGhhcyBiZWVuCi0gICAgICAgIC8v
IGRlc2VyaWFsaXplZCBmcm9tIGFuIElQQyBtZXNzYWdlLiBBcyBhIHJlc3VsdCB0aGlzIGZ1bmN0
aW9uIGNhbiBvbmx5IGJlIHJlbGllZCBvbiB3aGVuIG5ldHdvcmtpbmcgaXMgbm90IGluIGEKLSAg
ICAgICAgLy8gc2VwYXJhdGUgcHJvY2Vzcy4KLSAgICAgICAgdm9pZCBkZXByZWNhdGVkU2V0TWFp
blJlc291cmNlUmVxdWVzdChib29sIGlzTWFpblJlc291cmNlUmVxdWVzdCkgY29uc3QgeyBtX21h
aW5SZXNvdXJjZVJlcXVlc3QgPSBpc01haW5SZXNvdXJjZVJlcXVlc3Q7IH0KLSAgICAgICAgYm9v
bCBkZXByZWNhdGVkSXNNYWluUmVzb3VyY2VSZXF1ZXN0KCkgY29uc3QgeyByZXR1cm4gbV9tYWlu
UmVzb3VyY2VSZXF1ZXN0OyB9Ci0KLSAgICBwcml2YXRlOgotICAgICAgICBtdXRhYmxlIGJvb2wg
bV9tYWluUmVzb3VyY2VSZXF1ZXN0ID0gZmFsc2U7Ci0jZW5kaWYKLQogICAgIHByaXZhdGU6CiAg
ICAgICAgIGZyaWVuZCBjbGFzcyBSZXNvdXJjZVJlcXVlc3RCYXNlOwogCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2lvcy9RdWlja0xvb2subW0KPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9pb3MvUXVpY2tMb29rLm1tCShyZXZpc2lv
biAxODMzODgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2lvcy9RdWlja0xv
b2subW0JKHdvcmtpbmcgY29weSkKQEAgLTQ1OSw3ICs0NTksNyBAQCBRdWlja0xvb2tIYW5kbGU6
OlF1aWNrTG9va0hhbmRsZShOU1VSTCAqCiBzdGQ6OnVuaXF1ZV9wdHI8UXVpY2tMb29rSGFuZGxl
PiBRdWlja0xvb2tIYW5kbGU6OmNyZWF0ZShSZXNvdXJjZUhhbmRsZSogaGFuZGxlLCBOU1VSTENv
bm5lY3Rpb24gKmNvbm5lY3Rpb24sIE5TVVJMUmVzcG9uc2UgKm5zUmVzcG9uc2UsIGlkIGRlbGVn
YXRlKQogewogICAgIEFTU0VSVF9BUkcoaGFuZGxlLCBoYW5kbGUpOwotICAgIGlmICghaGFuZGxl
LT5maXJzdFJlcXVlc3QoKS5kZXByZWNhdGVkSXNNYWluUmVzb3VyY2VSZXF1ZXN0KCkgfHwgIVtX
ZWJDb3JlOjpRTFByZXZpZXdHZXRTdXBwb3J0ZWRNSU1FVHlwZXNTZXQoKSBjb250YWluc09iamVj
dDpbbnNSZXNwb25zZSBNSU1FVHlwZV1dKQorICAgIGlmIChoYW5kbGUtPmZpcnN0UmVxdWVzdCgp
LnJlcXVlc3RlcigpICE9IFJlc291cmNlUmVxdWVzdDo6UmVxdWVzdGVyOjpNYWluIHx8ICFbV2Vi
Q29yZTo6UUxQcmV2aWV3R2V0U3VwcG9ydGVkTUlNRVR5cGVzU2V0KCkgY29udGFpbnNPYmplY3Q6
W25zUmVzcG9uc2UgTUlNRVR5cGVdXSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICBz
dGQ6OnVuaXF1ZV9wdHI8UXVpY2tMb29rSGFuZGxlPiBxdWlja0xvb2tIYW5kbGUobmV3IFF1aWNr
TG9va0hhbmRsZShbaGFuZGxlLT5maXJzdFJlcXVlc3QoKS5uc1VSTFJlcXVlc3QoRG9Ob3RVcGRh
dGVIVFRQQm9keSkgVVJMXSwgY29ubmVjdGlvbiwgbnNSZXNwb25zZSwgZGVsZWdhdGUpKTsKQEAg
LTQ3MSw3ICs0NzEsNyBAQCBzdGQ6OnVuaXF1ZV9wdHI8UXVpY2tMb29rSGFuZGxlPiBRdWlja0xv
CiBzdGQ6OnVuaXF1ZV9wdHI8UXVpY2tMb29rSGFuZGxlPiBRdWlja0xvb2tIYW5kbGU6OmNyZWF0
ZShSZXNvdXJjZUhhbmRsZSogaGFuZGxlLCBTeW5jaHJvbm91c1Jlc291cmNlSGFuZGxlQ0ZVUkxD
b25uZWN0aW9uRGVsZWdhdGUqIGNvbm5lY3Rpb25EZWxlZ2F0ZSwgQ0ZVUkxSZXNwb25zZVJlZiBj
ZlJlc3BvbnNlKQogewogICAgIEFTU0VSVF9BUkcoaGFuZGxlLCBoYW5kbGUpOwotICAgIGlmICgh
aGFuZGxlLT5maXJzdFJlcXVlc3QoKS5kZXByZWNhdGVkSXNNYWluUmVzb3VyY2VSZXF1ZXN0KCkg
fHwgIVtXZWJDb3JlOjpRTFByZXZpZXdHZXRTdXBwb3J0ZWRNSU1FVHlwZXNTZXQoKSBjb250YWlu
c09iamVjdDooTlNTdHJpbmcgKilDRlVSTFJlc3BvbnNlR2V0TUlNRVR5cGUoY2ZSZXNwb25zZSld
KQorICAgIGlmIChoYW5kbGUtPmZpcnN0UmVxdWVzdCgpLnJlcXVlc3RlcigpICE9IFJlc291cmNl
UmVxdWVzdDo6UmVxdWVzdGVyOjpNYWluIHx8ICFbV2ViQ29yZTo6UUxQcmV2aWV3R2V0U3VwcG9y
dGVkTUlNRVR5cGVzU2V0KCkgY29udGFpbnNPYmplY3Q6KE5TU3RyaW5nICopQ0ZVUkxSZXNwb25z
ZUdldE1JTUVUeXBlKGNmUmVzcG9uc2UpXSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAg
ICBOU1VSTFJlc3BvbnNlICpuc1Jlc3BvbnNlID0gW05TVVJMUmVzcG9uc2UgX3Jlc3BvbnNlV2l0
aENGVVJMUmVzcG9uc2U6Y2ZSZXNwb25zZV07CkluZGV4OiBTb3VyY2UvV2ViQ29yZS94bWwvWE1M
SHR0cFJlcXVlc3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3htbC9YTUxIdHRw
UmVxdWVzdC5jcHAJKHJldmlzaW9uIDE4MzM4OCkKKysrIFNvdXJjZS9XZWJDb3JlL3htbC9YTUxI
dHRwUmVxdWVzdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc0NSw2ICs3NDUsNyBAQCB2b2lkIFhN
TEh0dHBSZXF1ZXN0OjpjcmVhdGVSZXF1ZXN0KEV4Y2VwCiAgICAgbV91cGxvYWRFdmVudHNBbGxv
d2VkID0gbV9zYW1lT3JpZ2luUmVxdWVzdCB8fCB1cGxvYWRFdmVudHMgfHwgIWlzU2ltcGxlQ3Jv
c3NPcmlnaW5BY2Nlc3NSZXF1ZXN0KG1fbWV0aG9kLCBtX3JlcXVlc3RIZWFkZXJzKTsKIAogICAg
IFJlc291cmNlUmVxdWVzdCByZXF1ZXN0KG1fdXJsKTsKKyAgICByZXF1ZXN0LnNldFJlcXVlc3Rl
cihSZXNvdXJjZVJlcXVlc3Q6OlJlcXVlc3Rlcjo6WEhSKTsKICAgICByZXF1ZXN0LnNldEhUVFBN
ZXRob2QobV9tZXRob2QpOwogCiAgICAgaWYgKG1fcmVxdWVzdEVudGl0eUJvZHkpIHsKSW5kZXg6
IFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9D
aGFuZ2VMb2cJKHJldmlzaW9uIDE4MzM5NCkKKysrIFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwko
d29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQwIEBACisyMDE1LTA0LTI3ICBBbnR0aSBLb2l2aXN0
byAgPGFudHRpQGFwcGxlLmNvbT4KKworICAgICAgICBOZXR3b3JrIENhY2hlOiBEaXNrIGNhY2hl
IGdldHRpbmcgZmlsbGVkIGJ5IFlvdVR1YmUgdmlkZW8gZGF0YQorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ0MjU5CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTVNFIG1lZGlhIGlzIGxvYWRlZCB2aWEgWEhS
IGFuZCB0ZW5kcyB0byBldmVudHVhbGx5IGZpbGwgdGhlIGNhY2hlLgorCisgICAgICAgIFlvdVR1
YmUgc2VydmVzIHRoZSBtZWRpYSBjaHVua3MgY2FjaGVhYmxlLCBob3dldmVyIHRoZXkgYXJlIHJh
cmVseSAoaWYgZXZlcikgcmV1c2VkLgorICAgICAgICBXZSBjYW4gcmVkdWNlIGRpc2sgd3JpdGVz
IGFuZCBrZWVwIG1vcmUgdXNlZnVsIHJlc291cmNlcyBhcm91bmQgYnkgbm90IGNhY2hpbmcgdGhl
bQorCisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Jlc291cmNlTG9hZGVyLmNwcDoK
KyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Jlc291cmNlTG9hZGVyOjpkaWRSZWNlaXZlUmVzcG9u
c2VBc3luYyk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6ZGlkUmV0
cmlldmVDYWNoZUVudHJ5KToKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3Jr
Q2FjaGUuY3BwOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FjaGU6Om1ha2VTdG9yZURlY2lz
aW9uKToKKworICAgICAgICAgICAgRG9uJ3Qgc3RvcmUgaWYgdGhlIHJlcXVlc3RlciBpcyBYSFIg
YW5kIHJlc3BvbnNlIGhhcyB2aWRlbyBvciBhdWRpbyBjb250ZW50IHR5cGUuCisKKyAgICAgICAg
KiBOZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGUuaDoKKyAgICAgICAgKiBOZXR3b3Jr
UHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVTdGF0aXN0aWNzLmNwcDoKKyAgICAgICAgKFdlYktp
dDo6TmV0d29ya0NhY2hlOjpzdG9yZURlY2lzaW9uVG9EaWFnbm9zdGljS2V5KToKKyAgICAgICAg
KiBTaGFyZWQvTmV0d29yay9OZXR3b3JrUmVzb3VyY2VMb2FkUGFyYW1ldGVycy5jcHA6CisgICAg
ICAgIChXZWJLaXQ6Ok5ldHdvcmtSZXNvdXJjZUxvYWRQYXJhbWV0ZXJzOjpOZXR3b3JrUmVzb3Vy
Y2VMb2FkUGFyYW1ldGVycyk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtSZXNvdXJjZUxvYWRQ
YXJhbWV0ZXJzOjplbmNvZGUpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUmVzb3VyY2VMb2Fk
UGFyYW1ldGVyczo6ZGVjb2RlKToKKyAgICAgICAgKiBTaGFyZWQvTmV0d29yay9OZXR3b3JrUmVz
b3VyY2VMb2FkUGFyYW1ldGVycy5oOgorCisgICAgICAgICAgICBUaGUgcmVxdWVzdGVyIHR5cGUg
aXMgbm93IHBhcnQgb2YgdGhlIFJlc291cmNlUmVxdWVzdCwgbm8gbmVlZCBmb3Igc2VwYXJhdGUg
cGFyYW1ldGVyLgorCisgICAgICAgICogU2hhcmVkL21hYy9XZWJDb3JlQXJndW1lbnRDb2RlcnNN
YWMubW06CisgICAgICAgIChJUEM6OkFyZ3VtZW50Q29kZXI8UmVzb3VyY2VSZXF1ZXN0Pjo6ZW5j
b2RlUGxhdGZvcm1EYXRhKToKKyAgICAgICAgKElQQzo6QXJndW1lbnRDb2RlcjxSZXNvdXJjZVJl
cXVlc3Q+OjpkZWNvZGVQbGF0Zm9ybURhdGEpOgorICAgICAgICAqIFdlYlByb2Nlc3MvTmV0d29y
ay9XZWJSZXNvdXJjZUxvYWRTY2hlZHVsZXIuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJSZXNv
dXJjZUxvYWRTY2hlZHVsZXI6OnNjaGVkdWxlTG9hZCk6CisKIDIwMTUtMDQtMjcgIENzYWJhIE9z
enRyb2dvbsOhYyAgPG9zc3lAd2Via2l0Lm9yZz4KIAogICAgICAgICBbRUZMXSBUZXN0V2ViS2l0
QVBJJ3MgZm9yd2FyZGluZyBoZWFkZXIgZ2VuZXJhdG9yIHNob3VsZCBkZXBlbmQgb24gV2ViS2l0
MidzIGdlbmVyYXRvcgpJbmRleDogU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29y
a1Jlc291cmNlTG9hZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9OZXR3b3Jr
UHJvY2Vzcy9OZXR3b3JrUmVzb3VyY2VMb2FkZXIuY3BwCShyZXZpc2lvbiAxODMzODgpCisrKyBT
b3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUmVzb3VyY2VMb2FkZXIuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yNTMsMTcgKzI1MywxOCBAQCB2b2lkIE5ldHdvcmtSZXNvdXJjZUxv
YWRlcjo6ZGlkUmVjZWl2ZVJlCiAgICAgc2hvdWxkU2VuZERpZFJlY2VpdmVSZXNwb25zZSA9ICFt
X2NhY2hlRW50cnlGb3JWYWxpZGF0aW9uOwogI2VuZGlmCiAKKyAgICBib29sIHNob3VsZFdhaXRD
b250aW51ZURpZFJlY2VpdmVSZXNwb25zZSA9IG9yaWdpbmFsUmVxdWVzdCgpLnJlcXVlc3Rlcigp
ID09IFJlc291cmNlUmVxdWVzdDo6UmVxdWVzdGVyOjpNYWluOwogICAgIGlmIChzaG91bGRTZW5k
RGlkUmVjZWl2ZVJlc3BvbnNlKSB7CiAgICAgICAgIGlmIChpc1N5bmNocm9ub3VzKCkpCiAgICAg
ICAgICAgICBtX3N5bmNocm9ub3VzTG9hZERhdGEtPnJlc3BvbnNlID0gbV9yZXNwb25zZTsKICAg
ICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBpZiAoIXNlbmRBYm9ydGluZ09uRmFpbHVyZShNZXNz
YWdlczo6V2ViUmVzb3VyY2VMb2FkZXI6OkRpZFJlY2VpdmVSZXNwb25zZShtX3Jlc3BvbnNlLCBt
X3BhcmFtZXRlcnMuaXNNYWluUmVzb3VyY2UpKSkKKyAgICAgICAgICAgIGlmICghc2VuZEFib3J0
aW5nT25GYWlsdXJlKE1lc3NhZ2VzOjpXZWJSZXNvdXJjZUxvYWRlcjo6RGlkUmVjZWl2ZVJlc3Bv
bnNlKG1fcmVzcG9uc2UsIHNob3VsZFdhaXRDb250aW51ZURpZFJlY2VpdmVSZXNwb25zZSkpKQog
ICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgIH0KIAogICAgIC8vIEZvciBt
YWluIHJlc291cmNlcywgdGhlIHdlYiBwcm9jZXNzIGlzIHJlc3BvbnNpYmxlIGZvciBzZW5kaW5n
IGJhY2sgYSBOZXR3b3JrUmVzb3VyY2VMb2FkZXI6OkNvbnRpbnVlRGlkUmVjZWl2ZVJlc3BvbnNl
IG1lc3NhZ2UuCi0gICAgYm9vbCBzaG91bGRDb250aW51ZURpZFJlY2VpdmVSZXNwb25zZSA9ICFt
X3BhcmFtZXRlcnMuaXNNYWluUmVzb3VyY2U7CisgICAgYm9vbCBzaG91bGRDb250aW51ZURpZFJl
Y2VpdmVSZXNwb25zZSA9ICFzaG91bGRXYWl0Q29udGludWVEaWRSZWNlaXZlUmVzcG9uc2U7CiAj
aWYgRU5BQkxFKE5FVFdPUktfQ0FDSEUpCiAgICAgc2hvdWxkQ29udGludWVEaWRSZWNlaXZlUmVz
cG9uc2UgPSBzaG91bGRDb250aW51ZURpZFJlY2VpdmVSZXNwb25zZSB8fCBtX2NhY2hlRW50cnlG
b3JWYWxpZGF0aW9uOwogI2VuZGlmCkBAIC01NDMsNyArNTQ0LDggQEAgdm9pZCBOZXR3b3JrUmVz
b3VyY2VMb2FkZXI6OmRpZFJldHJpZXZlQwogICAgICAgICBtX3N5bmNocm9ub3VzTG9hZERhdGEt
PnJlc3BvbnNlID0gZW50cnktPnJlc3BvbnNlKCk7CiAgICAgICAgIHNlbmRSZXBseVRvU3luY2hy
b25vdXNSZXF1ZXN0KCptX3N5bmNocm9ub3VzTG9hZERhdGEsIGVudHJ5LT5idWZmZXIoKSk7CiAg
ICAgfSBlbHNlIHsKLSAgICAgICAgc2VuZEFib3J0aW5nT25GYWlsdXJlKE1lc3NhZ2VzOjpXZWJS
ZXNvdXJjZUxvYWRlcjo6RGlkUmVjZWl2ZVJlc3BvbnNlKGVudHJ5LT5yZXNwb25zZSgpLCBtX3Bh
cmFtZXRlcnMuaXNNYWluUmVzb3VyY2UpKTsKKyAgICAgICAgYm9vbCBuZWVkc0NvbnRpbnVlRGlk
UmVjZWl2ZVJlc3BvbnNlTWVzc2FnZSA9IG9yaWdpbmFsUmVxdWVzdCgpLnJlcXVlc3RlcigpID09
IFJlc291cmNlUmVxdWVzdDo6UmVxdWVzdGVyOjpNYWluOworICAgICAgICBzZW5kQWJvcnRpbmdP
bkZhaWx1cmUoTWVzc2FnZXM6OldlYlJlc291cmNlTG9hZGVyOjpEaWRSZWNlaXZlUmVzcG9uc2Uo
ZW50cnktPnJlc3BvbnNlKCksIG5lZWRzQ29udGludWVEaWRSZWNlaXZlUmVzcG9uc2VNZXNzYWdl
KSk7CiAKICNpZiBFTkFCTEUoU0hBUkVBQkxFX1JFU09VUkNFKQogICAgICAgICBpZiAoIWVudHJ5
LT5zaGFyZWFibGVSZXNvdXJjZUhhbmRsZSgpLmlzTnVsbCgpKQpJbmRleDogU291cmNlL1dlYktp
dDIvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGUuY3BwCShyZXZp
c2lvbiAxODMzODgpCisrKyBTb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3
b3JrQ2FjaGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOTAsOCArMjkwLDggQEAgc3RhdGljIFN0
b3JlRGVjaXNpb24gbWFrZVN0b3JlRGVjaXNpb24oYwogICAgICAgICAgICAgcmV0dXJuIFN0b3Jl
RGVjaXNpb246Ok5vRHVlVG9IVFRQU3RhdHVzQ29kZTsKICAgICB9CiAKLSAgICAvLyBNYWluIHJl
c291cmNlIGhhcyBSZXNvdXJjZUxvYWRQcmlvcml0eVZlcnlIaWdoLgotICAgIGJvb2wgc3RvcmVV
bmNvbmRpdGlvbmFsbHlGb3JIaXN0b3J5TmF2aWdhdGlvbiA9IG9yaWdpbmFsUmVxdWVzdC5wcmlv
cml0eSgpID09IFdlYkNvcmU6OlJlc291cmNlTG9hZFByaW9yaXR5VmVyeUhpZ2g7CisgICAgYm9v
bCBpc01haW5SZXNvdXJjZSA9IG9yaWdpbmFsUmVxdWVzdC5yZXF1ZXN0ZXIoKSA9PSBXZWJDb3Jl
OjpSZXNvdXJjZVJlcXVlc3Q6OlJlcXVlc3Rlcjo6TWFpbjsKKyAgICBib29sIHN0b3JlVW5jb25k
aXRpb25hbGx5Rm9ySGlzdG9yeU5hdmlnYXRpb24gPSBpc01haW5SZXNvdXJjZSB8fCBvcmlnaW5h
bFJlcXVlc3QucHJpb3JpdHkoKSA9PSBXZWJDb3JlOjpSZXNvdXJjZUxvYWRQcmlvcml0eVZlcnlI
aWdoOwogICAgIGlmICghc3RvcmVVbmNvbmRpdGlvbmFsbHlGb3JIaXN0b3J5TmF2aWdhdGlvbikg
ewogICAgICAgICBhdXRvIG5vdyA9IHN0ZDo6Y2hyb25vOjpzeXN0ZW1fY2xvY2s6Om5vdygpOwog
ICAgICAgICBib29sIGhhc05vblplcm9MaWZldGltZSA9ICFyZXNwb25zZS5jYWNoZUNvbnRyb2xD
b250YWluc05vQ2FjaGUoKSAmJiBXZWJDb3JlOjpjb21wdXRlRnJlc2huZXNzTGlmZXRpbWVGb3JI
VFRQRmFtaWx5KHJlc3BvbnNlLCBub3cpID4gMF9tczsKQEAgLTMwMSw2ICszMDEsMTMgQEAgc3Rh
dGljIFN0b3JlRGVjaXNpb24gbWFrZVN0b3JlRGVjaXNpb24oYwogICAgICAgICAgICAgcmV0dXJu
IFN0b3JlRGVjaXNpb246Ok5vRHVlVG9Vbmxpa2VseVRvUmV1c2U7CiAgICAgfQogCisgICAgLy8g
TWVkaWEgbG9hZGVkIHZpYSBYSFIgaXMgbGlrZWx5IGJlaW5nIHVzZWQgZm9yIE1TRSBzdHJlYW1p
bmcgKFlvdVR1YmUgYW5kIE5ldGZsaXggZm9yIGV4YW1wbGUpLgorICAgIC8vIFN0cmVhbWluZyBt
ZWRpYSBmaWxscyB0aGUgY2FjaGUgcXVpY2tseSBhbmQgaXMgdW5saWtlbHkgdG8gYmUgcmV1c2Vk
LgorICAgIGJvb2wgaXNYSFIgPSBvcmlnaW5hbFJlcXVlc3QucmVxdWVzdGVyKCkgPT0gV2ViQ29y
ZTo6UmVzb3VyY2VSZXF1ZXN0OjpSZXF1ZXN0ZXI6OlhIUjsKKyAgICBib29sIGlzTGlrZWx5U3Ry
ZWFtaW5nTWVkaWEgPSBpc1hIUiAmJiAocmVzcG9uc2UubWltZVR5cGUoKS5zdGFydHNXaXRoKCJ2
aWRlby8iKSB8fCByZXNwb25zZS5taW1lVHlwZSgpLnN0YXJ0c1dpdGgoImF1ZGlvLyIpKTsKKyAg
ICBpZiAoaXNMaWtlbHlTdHJlYW1pbmdNZWRpYSkKKyAgICAgICAgcmV0dXJuIFN0b3JlRGVjaXNp
b246Ok5vRHVlVG9TdHJlYW1pbmdNZWRpYTsKKwogICAgIHJldHVybiBTdG9yZURlY2lzaW9uOjpZ
ZXM7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdv
cmtDYWNoZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2Nh
Y2hlL05ldHdvcmtDYWNoZS5oCShyZXZpc2lvbiAxODMzODgpCisrKyBTb3VyY2UvV2ViS2l0Mi9O
ZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGUuaAkod29ya2luZyBjb3B5KQpAQCAtNzEs
NyArNzEsOCBAQCBlbnVtIGNsYXNzIFN0b3JlRGVjaXNpb24gewogICAgIE5vRHVlVG9Ob1N0b3Jl
UmVzcG9uc2UsCiAgICAgTm9EdWVUb0hUVFBTdGF0dXNDb2RlLAogICAgIE5vRHVlVG9Ob1N0b3Jl
UmVxdWVzdCwKLSAgICBOb0R1ZVRvVW5saWtlbHlUb1JldXNlCisgICAgTm9EdWVUb1VubGlrZWx5
VG9SZXVzZSwKKyAgICBOb0R1ZVRvU3RyZWFtaW5nTWVkaWEKIH07CiAKIGVudW0gY2xhc3MgVXNl
RGVjaXNpb24gewpJbmRleDogU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0
d29ya0NhY2hlU3RhdGlzdGljcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvTmV0
d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlU3RhdGlzdGljcy5jcHAJKHJldmlzaW9uIDE4
MzM4OCkKKysrIFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNo
ZVN0YXRpc3RpY3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNDQsNiArMjQ0LDggQEAgc3RhdGlj
IFN0cmluZyBzdG9yZURlY2lzaW9uVG9EaWFnbm9zdGljSwogICAgICAgICByZXR1cm4gV2ViQ29y
ZTo6RGlhZ25vc3RpY0xvZ2dpbmdLZXlzOjp1bmNhY2hlYWJsZVN0YXR1c0NvZGVLZXkoKTsKICAg
ICBjYXNlIFN0b3JlRGVjaXNpb246Ok5vRHVlVG9Vbmxpa2VseVRvUmV1c2U6CiAgICAgICAgIHJl
dHVybiBXZWJDb3JlOjpEaWFnbm9zdGljTG9nZ2luZ0tleXM6OnVubGlrZWx5VG9SZXVzZUtleSgp
OworICAgIGNhc2UgU3RvcmVEZWNpc2lvbjo6Tm9EdWVUb1N0cmVhbWluZ01lZGlhOgorICAgICAg
ICByZXR1cm4gV2ViQ29yZTo6RGlhZ25vc3RpY0xvZ2dpbmdLZXlzOjpzdHJlYW1pbmdNZWRpYSgp
OwogICAgIGNhc2UgU3RvcmVEZWNpc2lvbjo6WWVzOgogICAgICAgICAvLyBJdCB3YXMgc3RvcmVk
IGJ1dCBjb3VsZCBub3QgYmUgcmV0cmlldmVkIHNvIGl0IG11c3QgaGF2ZSBiZWVuIHBydW5lZCBm
cm9tIHRoZSBjYWNoZS4KICAgICAgICAgcmV0dXJuIFdlYkNvcmU6OkRpYWdub3N0aWNMb2dnaW5n
S2V5czo6bm9Mb25nZXJJbkNhY2hlS2V5KCk7CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQv
TmV0d29yay9OZXR3b3JrUmVzb3VyY2VMb2FkUGFyYW1ldGVycy5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYktpdDIvU2hhcmVkL05ldHdvcmsvTmV0d29ya1Jlc291cmNlTG9hZFBhcmFtZXRl
cnMuY3BwCShyZXZpc2lvbiAxODMzODgpCisrKyBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvTmV0d29y
ay9OZXR3b3JrUmVzb3VyY2VMb2FkUGFyYW1ldGVycy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ1
LDcgKzQ1LDYgQEAgTmV0d29ya1Jlc291cmNlTG9hZFBhcmFtZXRlcnM6Ok5ldHdvcmtSZQogICAg
ICwgYWxsb3dTdG9yZWRDcmVkZW50aWFscyhEb05vdEFsbG93U3RvcmVkQ3JlZGVudGlhbHMpCiAg
ICAgLCBjbGllbnRDcmVkZW50aWFsUG9saWN5KERvTm90QXNrQ2xpZW50Rm9yQW55Q3JlZGVudGlh
bHMpCiAgICAgLCBzaG91bGRDbGVhclJlZmVycmVyT25IVFRQU1RvSFRUUFJlZGlyZWN0KHRydWUp
Ci0gICAgLCBpc01haW5SZXNvdXJjZShmYWxzZSkKICAgICAsIGRlZmVyc0xvYWRpbmcoZmFsc2Up
CiAgICAgLCBuZWVkc0NlcnRpZmljYXRlSW5mbyhmYWxzZSkKICAgICAsIG1heGltdW1CdWZmZXJp
bmdUaW1lKDBfbXMpCkBAIC05NCw3ICs5Myw2IEBAIHZvaWQgTmV0d29ya1Jlc291cmNlTG9hZFBh
cmFtZXRlcnM6OmVuY28KICAgICBlbmNvZGVyLmVuY29kZUVudW0oYWxsb3dTdG9yZWRDcmVkZW50
aWFscyk7CiAgICAgZW5jb2Rlci5lbmNvZGVFbnVtKGNsaWVudENyZWRlbnRpYWxQb2xpY3kpOwog
ICAgIGVuY29kZXIgPDwgc2hvdWxkQ2xlYXJSZWZlcnJlck9uSFRUUFNUb0hUVFBSZWRpcmVjdDsK
LSAgICBlbmNvZGVyIDw8IGlzTWFpblJlc291cmNlOwogICAgIGVuY29kZXIgPDwgZGVmZXJzTG9h
ZGluZzsKICAgICBlbmNvZGVyIDw8IG5lZWRzQ2VydGlmaWNhdGVJbmZvOwogICAgIGVuY29kZXIg
PDwgbWF4aW11bUJ1ZmZlcmluZ1RpbWU7CkBAIC0xNTEsOCArMTQ5LDYgQEAgYm9vbCBOZXR3b3Jr
UmVzb3VyY2VMb2FkUGFyYW1ldGVyczo6ZGVjbwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAg
aWYgKCFkZWNvZGVyLmRlY29kZShyZXN1bHQuc2hvdWxkQ2xlYXJSZWZlcnJlck9uSFRUUFNUb0hU
VFBSZWRpcmVjdCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAoIWRlY29kZXIuZGVj
b2RlKHJlc3VsdC5pc01haW5SZXNvdXJjZSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKICAgICBp
ZiAoIWRlY29kZXIuZGVjb2RlKHJlc3VsdC5kZWZlcnNMb2FkaW5nKSkKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVzdWx0Lm5lZWRzQ2VydGlmaWNhdGVJ
bmZvKSkKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9OZXR3b3JrL05ldHdvcmtSZXNvdXJj
ZUxvYWRQYXJhbWV0ZXJzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvU2hhcmVkL05l
dHdvcmsvTmV0d29ya1Jlc291cmNlTG9hZFBhcmFtZXRlcnMuaAkocmV2aXNpb24gMTgzMzg4KQor
KysgU291cmNlL1dlYktpdDIvU2hhcmVkL05ldHdvcmsvTmV0d29ya1Jlc291cmNlTG9hZFBhcmFt
ZXRlcnMuaAkod29ya2luZyBjb3B5KQpAQCAtNjEsNyArNjEsNiBAQCBwdWJsaWM6CiAgICAgV2Vi
Q29yZTo6U3RvcmVkQ3JlZGVudGlhbHMgYWxsb3dTdG9yZWRDcmVkZW50aWFsczsKICAgICBXZWJD
b3JlOjpDbGllbnRDcmVkZW50aWFsUG9saWN5IGNsaWVudENyZWRlbnRpYWxQb2xpY3k7CiAgICAg
Ym9vbCBzaG91bGRDbGVhclJlZmVycmVyT25IVFRQU1RvSFRUUFJlZGlyZWN0OwotICAgIGJvb2wg
aXNNYWluUmVzb3VyY2U7CiAgICAgYm9vbCBkZWZlcnNMb2FkaW5nOwogICAgIGJvb2wgbmVlZHND
ZXJ0aWZpY2F0ZUluZm87CiAgICAgc3RkOjpjaHJvbm86Om1pbGxpc2Vjb25kcyBtYXhpbXVtQnVm
ZmVyaW5nVGltZTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9tYWMvV2ViQ29yZUFyZ3Vt
ZW50Q29kZXJzTWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9tYWMv
V2ViQ29yZUFyZ3VtZW50Q29kZXJzTWFjLm1tCShyZXZpc2lvbiAxODMzODgpCisrKyBTb3VyY2Uv
V2ViS2l0Mi9TaGFyZWQvbWFjL1dlYkNvcmVBcmd1bWVudENvZGVyc01hYy5tbQkod29ya2luZyBj
b3B5KQpAQCAtODQsNiArODQsNyBAQCB2b2lkIEFyZ3VtZW50Q29kZXI8UmVzb3VyY2VSZXF1ZXN0
Pjo6ZW5jCiAKICAgICAvLyBUaGUgZmFsbGJhY2sgYXJyYXkgaXMgcGFydCBvZiBDRlVSTFJlcXVl
c3QsIGJ1dCBpdCBpcyBub3QgZW5jb2RlZCBieSBXS0NGVVJMUmVxdWVzdENyZWF0ZVNlcmlhbGl6
YWJsZVJlcHJlc2VudGF0aW9uLgogICAgIGVuY29kZXIgPDwgcmVzb3VyY2VSZXF1ZXN0LnJlc3Bv
bnNlQ29udGVudERpc3Bvc2l0aW9uRW5jb2RpbmdGYWxsYmFja0FycmF5KCk7CisgICAgZW5jb2Rl
ci5lbmNvZGVFbnVtKHJlc291cmNlUmVxdWVzdC5yZXF1ZXN0ZXIoKSk7CiB9CiAjZWxzZQogdm9p
ZCBBcmd1bWVudENvZGVyPFJlc291cmNlUmVxdWVzdD46OmVuY29kZVBsYXRmb3JtRGF0YShBcmd1
bWVudEVuY29kZXImIGVuY29kZXIsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVzb3VyY2VSZXF1
ZXN0KQpAQCAtMTA5LDYgKzExMCw3IEBAIHZvaWQgQXJndW1lbnRDb2RlcjxSZXNvdXJjZVJlcXVl
c3Q+OjplbmMKIAogICAgIC8vIFRoZSBmYWxsYmFjayBhcnJheSBpcyBwYXJ0IG9mIE5TVVJMUmVx
dWVzdCwgYnV0IGl0IGlzIG5vdCBlbmNvZGVkIGJ5IFdLTlNVUkxSZXF1ZXN0Q3JlYXRlU2VyaWFs
aXphYmxlUmVwcmVzZW50YXRpb24uCiAgICAgZW5jb2RlciA8PCByZXNvdXJjZVJlcXVlc3QucmVz
cG9uc2VDb250ZW50RGlzcG9zaXRpb25FbmNvZGluZ0ZhbGxiYWNrQXJyYXkoKTsKKyAgICBlbmNv
ZGVyLmVuY29kZUVudW0ocmVzb3VyY2VSZXF1ZXN0LnJlcXVlc3RlcigpKTsKIH0KICNlbmRpZgog
CkBAIC0xNTEsNiArMTUzLDExIEBAIGJvb2wgQXJndW1lbnRDb2RlcjxSZXNvdXJjZVJlcXVlc3Q+
OjpkZWMKICAgICAgICAgcmVzcG9uc2VDb250ZW50RGlzcG9zaXRpb25FbmNvZGluZ0ZhbGxiYWNr
QXJyYXkuc2l6ZSgpID4gMiA/IHJlc3BvbnNlQ29udGVudERpc3Bvc2l0aW9uRW5jb2RpbmdGYWxs
YmFja0FycmF5WzJdIDogU3RyaW5nKCkKICAgICApOwogCisgICAgUmVzb3VyY2VSZXF1ZXN0OjpS
ZXF1ZXN0ZXIgcmVxdWVzdGVyOworICAgIGlmICghZGVjb2Rlci5kZWNvZGVFbnVtKHJlcXVlc3Rl
cikpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICByZXNvdXJjZVJlcXVlc3Quc2V0UmVxdWVz
dGVyKHJlcXVlc3Rlcik7CisKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApJbmRleDogU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9OZXR3b3JrL1dlYlJlc291cmNlTG9hZFNjaGVkdWxlci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9OZXR3b3JrL1dlYlJlc291cmNl
TG9hZFNjaGVkdWxlci5jcHAJKHJldmlzaW9uIDE4MzM4OCkKKysrIFNvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvTmV0d29yay9XZWJSZXNvdXJjZUxvYWRTY2hlZHVsZXIuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xNzMsNyArMTczLDYgQEAgdm9pZCBXZWJSZXNvdXJjZUxvYWRTY2hlZHVsZXI6OnNj
aGVkdWxlTAogICAgIC8vIElmIHRoZXJlIGlzIG5vIFdlYkZyYW1lIHRoZW4gdGhpcyByZXNvdXJj
ZSBjYW5ub3QgYmUgYXV0aGVudGljYXRlZCB3aXRoIHRoZSBjbGllbnQuCiAgICAgbG9hZFBhcmFt
ZXRlcnMuY2xpZW50Q3JlZGVudGlhbFBvbGljeSA9ICh3ZWJGcmFtZSAmJiB3ZWJQYWdlICYmIHJl
c291cmNlTG9hZGVyLT5pc0FsbG93ZWRUb0Fza1VzZXJGb3JDcmVkZW50aWFscygpKSA/IEFza0Ns
aWVudEZvckFsbENyZWRlbnRpYWxzIDogRG9Ob3RBc2tDbGllbnRGb3JBbnlDcmVkZW50aWFsczsK
ICAgICBsb2FkUGFyYW1ldGVycy5zaG91bGRDbGVhclJlZmVycmVyT25IVFRQU1RvSFRUUFJlZGly
ZWN0ID0gc2hvdWxkQ2xlYXJSZWZlcnJlck9uSFRUUFNUb0hUVFBSZWRpcmVjdDsKLSAgICBsb2Fk
UGFyYW1ldGVycy5pc01haW5SZXNvdXJjZSA9IHJlc291cmNlICYmIHJlc291cmNlLT50eXBlKCkg
PT0gQ2FjaGVkUmVzb3VyY2U6Ok1haW5SZXNvdXJjZTsKICAgICBsb2FkUGFyYW1ldGVycy5kZWZl
cnNMb2FkaW5nID0gcmVzb3VyY2VMb2FkZXItPmRlZmVyc0xvYWRpbmcoKTsKICAgICBsb2FkUGFy
YW1ldGVycy5uZWVkc0NlcnRpZmljYXRlSW5mbyA9IHJlc291cmNlTG9hZGVyLT5zaG91bGRJbmNs
dWRlQ2VydGlmaWNhdGVJbmZvKCk7CiAgICAgbG9hZFBhcmFtZXRlcnMubWF4aW11bUJ1ZmZlcmlu
Z1RpbWUgPSBtYXhpbXVtQnVmZmVyaW5nVGltZShyZXNvdXJjZSk7CkluZGV4OiBMYXlvdXRUZXN0
cy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lv
biAxODMzOTQpCisrKyBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEs
MyArMSwxNSBAQAorMjAxNS0wNC0yNyAgQW50dGkgS29pdmlzdG8gIDxhbnR0aUBhcHBsZS5jb20+
CisKKyAgICAgICAgTmV0d29yayBDYWNoZTogRGlzayBjYWNoZSBnZXR0aW5nIGZpbGxlZCBieSBZ
b3VUdWJlIHZpZGVvIGRhdGEKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTE0NDI1OQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgICogaHR0cC90ZXN0cy9jYWNoZS9kaXNrLWNhY2hlL2Rpc2stY2FjaGUtbWVkaWEt
ZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBodHRwL3Rlc3RzL2NhY2hlL2Rpc2stY2Fj
aGUvZGlzay1jYWNoZS1tZWRpYS5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBodHRwL3Rlc3RzL2Nh
Y2hlL2Rpc2stY2FjaGUvcmVzb3VyY2VzL2NhY2hlLXRlc3QuanM6CisgICAgICAgIChnZW5lcmF0
ZVRlc3RVUkwpOgorCiAyMDE1LTA0LTI3ICBZb3Vlbm4gRmFibGV0ICA8eW91ZW5uLmZhYmxldEBj
cmYuY2Fub24uZnI+CiAKICAgICAgICAgU3luY2hyb25vdXMgWE1MSHR0cFJlcXVlc3Qgc2hvdWxk
IGdldCBhY2Nlc3MgdG8gQXBwQ2FjaGUgcmVzb3VyY2VzIHN0b3JlZCBhcyBmbGF0IGZpbGVzCklu
ZGV4OiBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2NhY2hlL2Rpc2stY2FjaGUvZGlzay1jYWNoZS1t
ZWRpYS1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9j
YWNoZS9kaXNrLWNhY2hlL2Rpc2stY2FjaGUtbWVkaWEtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAw
KQorKysgTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9jYWNoZS9kaXNrLWNhY2hlL2Rpc2stY2FjaGUt
bWVkaWEtZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjkgQEAKK1Rlc3Rz
IHRoYXQgbWVkaWEgcmVzb3VyY2VzIGxvYWRlZCB2aWEgWEhSIGlzIG5vdCBjYWNoZWQuCisKK09u
IHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxv
d2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworCitydW5uaW5nIDYgdGVzdHMKKworcmVzcG9uc2Ug
aGVhZGVyczogeyJDYWNoZS1jb250cm9sIjoibWF4LWFnZT0wIiwiQ29udGVudC1UeXBlIjoidGV4
dC9wbGFpbiJ9CityZXNwb25zZSBzb3VyY2U6IE5ldHdvcmsKKworcmVzcG9uc2UgaGVhZGVyczog
eyJDYWNoZS1jb250cm9sIjoibWF4LWFnZT0xMDAiLCJDb250ZW50LVR5cGUiOiJ0ZXh0L3BsYWlu
In0KK3Jlc3BvbnNlIHNvdXJjZTogRGlzayBjYWNoZQorCityZXNwb25zZSBoZWFkZXJzOiB7IkNh
Y2hlLWNvbnRyb2wiOiJtYXgtYWdlPTAiLCJDb250ZW50LVR5cGUiOiJ2aWRlby9tcDQifQorcmVz
cG9uc2Ugc291cmNlOiBOZXR3b3JrCisKK3Jlc3BvbnNlIGhlYWRlcnM6IHsiQ2FjaGUtY29udHJv
bCI6Im1heC1hZ2U9MTAwIiwiQ29udGVudC1UeXBlIjoidmlkZW8vbXA0In0KK3Jlc3BvbnNlIHNv
dXJjZTogTmV0d29yaworCityZXNwb25zZSBoZWFkZXJzOiB7IkNhY2hlLWNvbnRyb2wiOiJtYXgt
YWdlPTAiLCJDb250ZW50LVR5cGUiOiJhdWRpby9tcDQifQorcmVzcG9uc2Ugc291cmNlOiBOZXR3
b3JrCisKK3Jlc3BvbnNlIGhlYWRlcnM6IHsiQ2FjaGUtY29udHJvbCI6Im1heC1hZ2U9MTAwIiwi
Q29udGVudC1UeXBlIjoiYXVkaW8vbXA0In0KK3Jlc3BvbnNlIHNvdXJjZTogTmV0d29yaworCitQ
QVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpJbmRleDog
TGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9jYWNoZS9kaXNrLWNhY2hlL2Rpc2stY2FjaGUtbWVkaWEu
aHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2NhY2hlL2Rpc2stY2Fj
aGUvZGlzay1jYWNoZS1tZWRpYS5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvaHR0
cC90ZXN0cy9jYWNoZS9kaXNrLWNhY2hlL2Rpc2stY2FjaGUtbWVkaWEuaHRtbAkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDI5IEBACis8c2NyaXB0IHNyYz0iL2pzLXRlc3QtcmVzb3VyY2VzL2pz
LXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvY2FjaGUtdGVz
dC5qcyI+PC9zY3JpcHQ+Cis8Ym9keT4KKzxzY3JpcHQ+CisKK3ZhciB0ZXN0TWF0cml4ID0KK1sK
KyBbCisgIHsgcmVzcG9uc2VIZWFkZXJzOiB7J0NhY2hlLWNvbnRyb2wnOiAnbWF4LWFnZT0wJyB9
IH0sCisgIHsgcmVzcG9uc2VIZWFkZXJzOiB7J0NhY2hlLWNvbnRyb2wnOiAnbWF4LWFnZT0xMDAn
IH0gfSwKKyAgXSwKKyBbCisgIHsgcmVzcG9uc2VIZWFkZXJzOiB7J0NvbnRlbnQtVHlwZSc6ICd0
ZXh0L3BsYWluJyB9IH0sCisgIHsgcmVzcG9uc2VIZWFkZXJzOiB7J0NvbnRlbnQtVHlwZSc6ICd2
aWRlby9tcDQnIH0gfSwKKyAgeyByZXNwb25zZUhlYWRlcnM6IHsnQ29udGVudC1UeXBlJzogJ2F1
ZGlvL21wNCcgfSB9LAorICBdLAorIF07CisKK2Rlc2NyaXB0aW9uKCJUZXN0cyB0aGF0IG1lZGlh
IHJlc291cmNlcyBsb2FkZWQgdmlhIFhIUiBpcyBub3QgY2FjaGVkLiIpOworCit2YXIgdGVzdHMg
PSBnZW5lcmF0ZVRlc3RzKHRlc3RNYXRyaXgpOworCitkZWJ1ZygicnVubmluZyAiICsgdGVzdHMu
bGVuZ3RoICsgIiB0ZXN0cyIpOworZGVidWcoIiIpOworCitydW5UZXN0cyh0ZXN0cyk7CisKKzwv
c2NyaXB0PgorPHNjcmlwdCBzcmM9Ii9qcy10ZXN0LXJlc291cmNlcy9qcy10ZXN0LXBvc3QuanMi
Pjwvc2NyaXB0PgpJbmRleDogTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9jYWNoZS9kaXNrLWNhY2hl
L3Jlc291cmNlcy9jYWNoZS10ZXN0LmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2h0dHAv
dGVzdHMvY2FjaGUvZGlzay1jYWNoZS9yZXNvdXJjZXMvY2FjaGUtdGVzdC5qcwkocmV2aXNpb24g
MTgzMzg4KQorKysgTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9jYWNoZS9kaXNrLWNhY2hlL3Jlc291
cmNlcy9jYWNoZS10ZXN0LmpzCSh3b3JraW5nIGNvcHkpCkBAIC00Niw3ICs0Niw5IEBAIGZ1bmN0
aW9uIGdlbmVyYXRlVGVzdFVSTCh0ZXN0LCBpbmNsdWRlQm8KICAgICB2YXIgdGVzdFVSTCA9ICJy
ZXNvdXJjZXMvZ2VuZXJhdGUtcmVzcG9uc2UuY2dpP2luY2x1ZGUtYm9keT0iICsgKGluY2x1ZGVC
b2R5ID8gIjEiIDogIjAiKTsKICAgICBpZiAoZXhwaXJlc0luRnV0dXJlSW4zMDQpCiAgICAgICAg
IHRlc3RVUkwgKz0gIiZleHBpcmVzLWluLWZ1dHVyZS1pbi0zMDQ9MSI7Ci0gICAgdGVzdFVSTCAr
PSAiJnVuaXF1ZUlkPSIgKyB1bmlxdWVUZXN0SWQrKyArICImQ29udGVudC10eXBlPXRleHQvcGxh
aW4iOworICAgIHRlc3RVUkwgKz0gIiZ1bmlxdWVJZD0iICsgdW5pcXVlVGVzdElkKys7CisgICAg
aWYgKCF0ZXN0LnJlc3BvbnNlSGVhZGVycyB8fCAhdGVzdC5yZXNwb25zZUhlYWRlcnNbIkNvbnRl
bnQtVHlwZSJdKQorICAgICAgICB0ZXN0VVJMICs9ICImQ29udGVudC1UeXBlPXRleHQvcGxhaW4i
OwogICAgIGZvciAodmFyIGhlYWRlciBpbiB0ZXN0LnJlc3BvbnNlSGVhZGVycykKICAgICAgICAg
dGVzdFVSTCArPSAnJicgKyBoZWFkZXIgKyAnPScgKyBtYWtlSGVhZGVyVmFsdWUodGVzdC5yZXNw
b25zZUhlYWRlcnNbaGVhZGVyXSk7CiAgICAgcmV0dXJuIHRlc3RVUkw7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>251738</attachid>
            <date>2015-04-27 06:55:32 -0700</date>
            <delta_ts>2015-04-27 07:55:32 -0700</delta_ts>
            <desc>patch</desc>
            <filename>disk-cache-no-media-2.patch</filename>
            <type>text/plain</type>
            <size>28005</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE4MzM5NCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDUyIEBACisyMDE1LTA0LTI3ICBBbnR0aSBL
b2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KKworICAgICAgICBOZXR3b3JrIENhY2hlOiBEaXNr
IGNhY2hlIGdldHRpbmcgZmlsbGVkIGJ5IFlvdVR1YmUgdmlkZW8gZGF0YQorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ0MjU5CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTVNFIG1lZGlhIGlzIGxvYWRlZCB2
aWEgWEhSIGFuZCB0ZW5kcyB0byBldmVudHVhbGx5IGZpbGwgdGhlIGNhY2hlLgorCisgICAgICAg
IFlvdVR1YmUgc2VydmVzIHRoZSBtZWRpYSBjaHVua3MgY2FjaGVhYmxlLCBob3dldmVyIHRoZXkg
YXJlIHJhcmVseSAoaWYgZXZlcikgcmV1c2VkLgorICAgICAgICBXZSBjYW4gcmVkdWNlIGRpc2sg
d3JpdGVzIGFuZCBrZWVwIG1vcmUgdXNlZnVsIHJlc291cmNlcyBhcm91bmQgYnkgbm90IGNhY2hp
bmcgdGhlbQorCisgICAgICAgIFRlc3Q6IGh0dHAvdGVzdHMvY2FjaGUvZGlzay1jYWNoZS9kaXNr
LWNhY2hlLW1lZGlhLmh0bWwKKworICAgICAgICAqIGxvYWRlci9Eb2N1bWVudExvYWRlci5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudExvYWRlcjo6c3RhcnRMb2FkaW5nTWFpblJlc291
cmNlKToKKworICAgICAgICAgICAgU2V0IHRoZSByZXF1ZXN0ZXIuCisKKyAgICAgICAgKiBsb2Fk
ZXIvY2FjaGUvQ2FjaGVkUmF3UmVzb3VyY2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2FjaGVk
UmF3UmVzb3VyY2U6OkNhY2hlZFJhd1Jlc291cmNlKToKKyAgICAgICAgKiBwYWdlL0RpYWdub3N0
aWNMb2dnaW5nS2V5cy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEaWFnbm9zdGljTG9nZ2luZ0tl
eXM6OnN0cmVhbWluZ01lZGlhKToKKyAgICAgICAgKiBwYWdlL0RpYWdub3N0aWNMb2dnaW5nS2V5
cy5oOgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VSZXF1ZXN0QmFzZS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3RCYXNlOjphZG9wdCk6CisgICAgICAg
IChXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3RCYXNlOjpjb3B5RGF0YSk6CisgICAgICAgIChXZWJD
b3JlOjplcXVhbElnbm9yaW5nSGVhZGVyRmllbGRzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3
b3JrL1Jlc291cmNlUmVxdWVzdEJhc2UuaDoKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlUmVx
dWVzdEJhc2U6OnJlcXVlc3Rlcik6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3RC
YXNlOjpzZXRSZXF1ZXN0ZXIpOgorCisgICAgICAgICAgICBBZGQgcmVxdWVzdGVyIHR5cGUgdG8g
dGhlIHJlcXVlc3Qgb2JqZWN0LiBDdXJyZW50bHkgdGhpcyBpcyBtYWluIHJlc291cmNlLCB4aHIg
b3IgdW5zcGVjaWZpZWQuCisKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdEJhc2U6
OmVuY29kZVdpdGhvdXRQbGF0Zm9ybURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VS
ZXF1ZXN0QmFzZTo6ZGVjb2RlV2l0aG91dFBsYXRmb3JtRGF0YSk6CisgICAgICAgICogcGxhdGZv
cm0vbmV0d29yay9jZi9SZXNvdXJjZVJlcXVlc3QuaDoKKyAgICAgICAgKFdlYkNvcmU6OlJlc291
cmNlUmVxdWVzdDo6ZGVwcmVjYXRlZFNldE1haW5SZXNvdXJjZVJlcXVlc3QpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0OjpkZXByZWNhdGVkSXNNYWluUmVzb3Vy
Y2VSZXF1ZXN0KTogRGVsZXRlZC4KKworICAgICAgICAgICAgUmVwbGFjZSB0aGlzIGlPUyBvbmx5
IGZpZWxkIHdpdGggc2hhcmVkIG1lY2hhbmlzbS4KKworICAgICAgICAqIHBsYXRmb3JtL25ldHdv
cmsvaW9zL1F1aWNrTG9vay5tbToKKyAgICAgICAgKFdlYkNvcmU6OlF1aWNrTG9va0hhbmRsZTo6
Y3JlYXRlKToKKyAgICAgICAgKiB4bWwvWE1MSHR0cFJlcXVlc3QuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6WE1MSHR0cFJlcXVlc3Q6OmNyZWF0ZVJlcXVlc3QpOgorCisgICAgICAgICAgICBTZXQg
dGhlIHJlcXVlc3Rlci4KKwogMjAxNS0wNC0yNyAgQ3NhYmEgT3N6dHJvZ29uw6FjICA8b3NzeUB3
ZWJraXQub3JnPgogCiAgICAgICAgIEZpeCB0aGUgIUVOQUJMRShDU1NfR1JJRF9MQVlPVVQpIGJ1
aWxkIGFmdGVyIHIxODMzNzAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9Eb2N1bWVudExv
YWRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvbG9hZGVyL0RvY3VtZW50TG9h
ZGVyLmNwcAkocmV2aXNpb24gMTgzMzg4KQorKysgU291cmNlL1dlYkNvcmUvbG9hZGVyL0RvY3Vt
ZW50TG9hZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTM0LDExICs5MzQsNiBAQCB2b2lkIERv
Y3VtZW50TG9hZGVyOjpjbGVhck1haW5SZXNvdXJjZUxvCiB7CiAgICAgbV9sb2FkaW5nTWFpblJl
c291cmNlID0gZmFsc2U7CiAKLSNpZiBQTEFURk9STShJT1MpCi0gICAgLy8gRklYTUU6IFJlbW92
ZSBQTEFURk9STShJT1MpLWd1YXJkIG9uY2Ugd2UgdXBzdHJlYW0gdGhlIGlPUyBjaGFuZ2VzIHRv
IFJlc291cmNlUmVxdWVzdC5oLgotICAgIG1fcmVxdWVzdC5kZXByZWNhdGVkU2V0TWFpblJlc291
cmNlUmVxdWVzdChmYWxzZSk7Ci0jZW5kaWYKLQogICAgIGlmICh0aGlzID09IGZyYW1lTG9hZGVy
KCktPmFjdGl2ZURvY3VtZW50TG9hZGVyKCkpCiAgICAgICAgIGNoZWNrTG9hZENvbXBsZXRlKCk7
CiB9CkBAIC0xNDAzLDEyICsxMzk4LDkgQEAgdm9pZCBEb2N1bWVudExvYWRlcjo6c3RhcnRMb2Fk
aW5nTWFpblJlcwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0jaWYgUExBVEZPUk0oSU9TKQot
ICAgIC8vIEZJWE1FOiBSZW1vdmUgUExBVEZPUk0oSU9TKS1ndWFyZCBvbmNlIHdlIHVwc3RyZWFt
IHRoZSBpT1MgY2hhbmdlcyB0byBSZXNvdXJjZVJlcXVlc3QuaC4KLSAgICBtX3JlcXVlc3QuZGVw
cmVjYXRlZFNldE1haW5SZXNvdXJjZVJlcXVlc3QodHJ1ZSk7Ci0jZW5kaWYKLQogICAgIFJlc291
cmNlUmVxdWVzdCByZXF1ZXN0KG1fcmVxdWVzdCk7CisgICAgcmVxdWVzdC5zZXRSZXF1ZXN0ZXIo
UmVzb3VyY2VSZXF1ZXN0OjpSZXF1ZXN0ZXI6Ok1haW4pOworICAgIAogICAgIHN0YXRpYyBOZXZl
ckRlc3Ryb3llZDxSZXNvdXJjZUxvYWRlck9wdGlvbnM+IG1haW5SZXNvdXJjZUxvYWRPcHRpb25z
KFNlbmRDYWxsYmFja3MsIFNuaWZmQ29udGVudCwgQnVmZmVyRGF0YSwgQWxsb3dTdG9yZWRDcmVk
ZW50aWFscywgQXNrQ2xpZW50Rm9yQWxsQ3JlZGVudGlhbHMsIFNraXBTZWN1cml0eUNoZWNrLCBV
c2VEZWZhdWx0T3JpZ2luUmVzdHJpY3Rpb25zRm9yVHlwZSwgSW5jbHVkZUNlcnRpZmljYXRlSW5m
byk7CiAgICAgQ2FjaGVkUmVzb3VyY2VSZXF1ZXN0IGNhY2hlZFJlc291cmNlUmVxdWVzdChyZXF1
ZXN0LCBtYWluUmVzb3VyY2VMb2FkT3B0aW9ucyk7CiAgICAgY2FjaGVkUmVzb3VyY2VSZXF1ZXN0
LnNldEluaXRpYXRvcigqdGhpcyk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUv
Q2FjaGVkUmF3UmVzb3VyY2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xvYWRl
ci9jYWNoZS9DYWNoZWRSYXdSZXNvdXJjZS5jcHAJKHJldmlzaW9uIDE4MzM4OCkKKysrIFNvdXJj
ZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRSYXdSZXNvdXJjZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTQyLDcgKzQyLDYgQEAgQ2FjaGVkUmF3UmVzb3VyY2U6OkNhY2hlZFJhd1Jlc291cmNl
KFJlcwogICAgICwgbV9pZGVudGlmaWVyKDApCiAgICAgLCBtX2FsbG93RW5jb2RlZERhdGFSZXBs
YWNlbWVudCh0cnVlKQogewotICAgIC8vIEZJWE1FOiBUaGUgd3JvbmcgQ2FjaGVkUmVzb3VyY2U6
OlR5cGUgaGVyZSBtYXkgY2F1c2UgYSBiYWQgY2FzdCBlbHNld2hlcmUuCiAgICAgQVNTRVJUKGlz
TWFpbk9yUmF3UmVzb3VyY2UoKSk7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvRGlh
Z25vc3RpY0xvZ2dpbmdLZXlzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdl
L0RpYWdub3N0aWNMb2dnaW5nS2V5cy5jcHAJKHJldmlzaW9uIDE4MzM4OCkKKysrIFNvdXJjZS9X
ZWJDb3JlL3BhZ2UvRGlhZ25vc3RpY0xvZ2dpbmdLZXlzLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzczLDYgKzM3MywxMSBAQCBTdHJpbmcgRGlhZ25vc3RpY0xvZ2dpbmdLZXlzOjpzb3VyY2VLZXko
CiAgICAgcmV0dXJuIEFTQ0lJTGl0ZXJhbCgic291cmNlS2V5Iik7CiB9CiAKK1N0cmluZyBEaWFn
bm9zdGljTG9nZ2luZ0tleXM6OnN0cmVhbWluZ01lZGlhKCkKK3sKKyAgICByZXR1cm4gQVNDSUlM
aXRlcmFsKCJzdHJlYW1pbmdNZWRpYSIpOworfQorCiBTdHJpbmcgRGlhZ25vc3RpY0xvZ2dpbmdL
ZXlzOjpzdHlsZVNoZWV0S2V5KCkKIHsKICAgICByZXR1cm4gQVNDSUlMaXRlcmFsKCJzdHlsZVNo
ZWV0Iik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL0RpYWdub3N0aWNMb2dnaW5nS2V5cy5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvRGlhZ25vc3RpY0xvZ2dpbmdLZXlz
LmgJKHJldmlzaW9uIDE4MzM4OCkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvRGlhZ25vc3RpY0xv
Z2dpbmdLZXlzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEwNiw2ICsxMDYsNyBAQCBwdWJsaWM6CiAg
ICAgc3RhdGljIFN0cmluZyBzYW1lTG9hZEtleSgpOwogICAgIHN0YXRpYyBTdHJpbmcgc2NyaXB0
S2V5KCk7CiAgICAgc3RhdGljIFN0cmluZyBzb3VyY2VLZXkoKTsKKyAgICBXRUJDT1JFX0VYUE9S
VCBzdGF0aWMgU3RyaW5nIHN0cmVhbWluZ01lZGlhKCk7CiAgICAgc3RhdGljIFN0cmluZyBzdHls
ZVNoZWV0S2V5KCk7CiAgICAgc3RhdGljIFN0cmluZyBzdmdEb2N1bWVudEtleSgpOwogICAgIFdF
QkNPUkVfRVhQT1JUIHN0YXRpYyBTdHJpbmcgdW5jYWNoZWFibGVTdGF0dXNDb2RlS2V5KCk7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlUmVxdWVzdEJhc2Uu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3Vy
Y2VSZXF1ZXN0QmFzZS5jcHAJKHJldmlzaW9uIDE4MzM4OCkKKysrIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL25ldHdvcmsvUmVzb3VyY2VSZXF1ZXN0QmFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTU3LDYgKzU3LDcgQEAgc3RkOjp1bmlxdWVfcHRyPFJlc291cmNlUmVxdWVzdD4gUmVzb3VyYwog
ICAgIHJlcXVlc3QtPnNldEZpcnN0UGFydHlGb3JDb29raWVzKGRhdGEtPm1fZmlyc3RQYXJ0eUZv
ckNvb2tpZXMpOwogICAgIHJlcXVlc3QtPnNldEhUVFBNZXRob2QoZGF0YS0+bV9odHRwTWV0aG9k
KTsKICAgICByZXF1ZXN0LT5zZXRQcmlvcml0eShkYXRhLT5tX3ByaW9yaXR5KTsKKyAgICByZXF1
ZXN0LT5zZXRSZXF1ZXN0ZXIoZGF0YS0+bV9yZXF1ZXN0ZXIpOwogCiAgICAgcmVxdWVzdC0+dXBk
YXRlUmVzb3VyY2VSZXF1ZXN0KCk7CiAgICAgcmVxdWVzdC0+bV9odHRwSGVhZGVyRmllbGRzLmFk
b3B0KFdURjo6bW92ZShkYXRhLT5tX2h0dHBIZWFkZXJzKSk7CkBAIC05MCw2ICs5MSw3IEBAIHN0
ZDo6dW5pcXVlX3B0cjxDcm9zc1RocmVhZFJlc291cmNlUmVxdWUKICAgICBkYXRhLT5tX2h0dHBN
ZXRob2QgPSBodHRwTWV0aG9kKCkuaXNvbGF0ZWRDb3B5KCk7CiAgICAgZGF0YS0+bV9odHRwSGVh
ZGVycyA9IGh0dHBIZWFkZXJGaWVsZHMoKS5jb3B5RGF0YSgpOwogICAgIGRhdGEtPm1fcHJpb3Jp
dHkgPSBwcmlvcml0eSgpOworICAgIGRhdGEtPm1fcmVxdWVzdGVyID0gbV9yZXF1ZXN0ZXI7CiAK
ICAgICBkYXRhLT5tX3Jlc3BvbnNlQ29udGVudERpc3Bvc2l0aW9uRW5jb2RpbmdGYWxsYmFja0Fy
cmF5LnJlc2VydmVJbml0aWFsQ2FwYWNpdHkobV9yZXNwb25zZUNvbnRlbnREaXNwb3NpdGlvbkVu
Y29kaW5nRmFsbGJhY2tBcnJheS5zaXplKCkpOwogICAgIHNpemVfdCBlbmNvZGluZ0FycmF5U2l6
ZSA9IG1fcmVzcG9uc2VDb250ZW50RGlzcG9zaXRpb25FbmNvZGluZ0ZhbGxiYWNrQXJyYXkuc2l6
ZSgpOwpAQCAtNDk2LDYgKzQ5OCw5IEBAIGJvb2wgZXF1YWxJZ25vcmluZ0hlYWRlckZpZWxkcyhj
b25zdCBSZXMKICAgICBpZiAoYS5wcmlvcml0eSgpICE9IGIucHJpb3JpdHkoKSkKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogCisgICAgaWYgKGEucmVxdWVzdGVyKCkgIT0gYi5yZXF1ZXN0ZXIoKSkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworCiAgICAgRm9ybURhdGEqIGZvcm1EYXRhQSA9IGEuaHR0
cEJvZHkoKTsKICAgICBGb3JtRGF0YSogZm9ybURhdGFCID0gYi5odHRwQm9keSgpOwogICAgIApJ
bmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZVJlcXVlc3RCYXNl
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJj
ZVJlcXVlc3RCYXNlLmgJKHJldmlzaW9uIDE4MzM4OCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL25ldHdvcmsvUmVzb3VyY2VSZXF1ZXN0QmFzZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNDcs
NiArMTQ3LDEwIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgYm9vbCBoaWRkZW5Gcm9t
SW5zcGVjdG9yKCkgY29uc3QgeyByZXR1cm4gbV9oaWRkZW5Gcm9tSW5zcGVjdG9yOyB9CiAgICAg
ICAgIHZvaWQgc2V0SGlkZGVuRnJvbUluc3BlY3Rvcihib29sIGhpZGRlbkZyb21JbnNwZWN0b3Ip
IHsgbV9oaWRkZW5Gcm9tSW5zcGVjdG9yID0gaGlkZGVuRnJvbUluc3BlY3RvcjsgfQogCisgICAg
ICAgIGVudW0gY2xhc3MgUmVxdWVzdGVyIHsgVW5zcGVjaWZpZWQsIE1haW4sIFhIUiB9OworICAg
ICAgICBXRUJDT1JFX0VYUE9SVCBSZXF1ZXN0ZXIgcmVxdWVzdGVyKCkgY29uc3QgeyByZXR1cm4g
bV9yZXF1ZXN0ZXI7IH0KKyAgICAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRSZXF1ZXN0ZXIo
UmVxdWVzdGVyIHJlcXVlc3RlcikgeyBtX3JlcXVlc3RlciA9IHJlcXVlc3RlcjsgfQorCiAjaWYg
IVBMQVRGT1JNKENPQ09BKQogICAgICAgICBib29sIGVuY29kaW5nUmVxdWlyZXNQbGF0Zm9ybURh
dGEoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CiAjZW5kaWYKQEAgLTIyNCw2ICsyMjgsNyBAQCBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHVuc2lnbmVkIG1fcmVwb3J0UmF3SGVhZGVycyA6
IDE7CiAgICAgICAgIHVuc2lnbmVkIG1faGlkZGVuRnJvbUluc3BlY3RvciA6IDE7CiAgICAgICAg
IHVuc2lnbmVkIG1fcHJpb3JpdHkgOiA0OworICAgICAgICBSZXF1ZXN0ZXIgbV9yZXF1ZXN0ZXIg
eyBSZXF1ZXN0ZXI6OlVuc3BlY2lmaWVkIH07CiAKICAgICBwcml2YXRlOgogICAgICAgICBjb25z
dCBSZXNvdXJjZVJlcXVlc3QmIGFzUmVzb3VyY2VSZXF1ZXN0KCkgY29uc3Q7CkBAIC0yNTUsNiAr
MjYwLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBSZWZQdHI8Rm9ybURhdGE+IG1f
aHR0cEJvZHk7CiAgICAgICAgIGJvb2wgbV9hbGxvd0Nvb2tpZXM7CiAgICAgICAgIFJlc291cmNl
TG9hZFByaW9yaXR5IG1fcHJpb3JpdHk7CisgICAgICAgIFJlc291cmNlUmVxdWVzdEJhc2U6OlJl
cXVlc3RlciBtX3JlcXVlc3RlcjsKICAgICB9OwogICAgIAogICAgIHVuc2lnbmVkIGluaXRpYWxp
emVNYXhpbXVtSFRUUENvbm5lY3Rpb25Db3VudFBlckhvc3QoKTsKQEAgLTI3Niw2ICsyODIsNyBA
QCB2b2lkIFJlc291cmNlUmVxdWVzdEJhc2U6OmVuY29kZVdpdGhvdXRQCiAgICAgZW5jb2Rlci5l
bmNvZGVFbnVtKG1fY2FjaGVQb2xpY3kpOwogICAgIGVuY29kZXIgPDwgbV9hbGxvd0Nvb2tpZXM7
CiAgICAgZW5jb2Rlci5lbmNvZGVFbnVtKG1fcHJpb3JpdHkpOworICAgIGVuY29kZXIuZW5jb2Rl
RW51bShtX3JlcXVlc3Rlcik7CiB9CiAKIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+CkBAIC0zMTgs
NiArMzI1LDkgQEAgYm9vbCBSZXNvdXJjZVJlcXVlc3RCYXNlOjpkZWNvZGVXaXRob3V0UAogICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICAgbV9wcmlvcml0eSA9IHByaW9yaXR5OwogCisgICAgaWYg
KCFkZWNvZGVyLmRlY29kZUVudW0obV9yZXF1ZXN0ZXIpKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bmV0d29yay9jZi9SZXNvdXJjZVJlcXVlc3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9uZXR3b3JrL2NmL1Jlc291cmNlUmVxdWVzdC5oCShyZXZpc2lvbiAxODMzODgp
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2NmL1Jlc291cmNlUmVxdWVzdC5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xMTgsMTcgKzExOCw2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAogICAgICAgICBzdGF0aWMgYm9vbCByZXNvdXJjZVByaW9yaXRpZXNFbmFibGVkKCk7CiAKLSNp
ZiBQTEFURk9STShJT1MpCi0gICAgICAgIC8vIEZJWE1FOiBkZXByZWNhdGVkSXNNYWluUmVzb3Vy
Y2VSZXF1ZXN0KCkgZG9lcyBub3QgcmV0dXJuIHRoZSBjb3JyZWN0IHZhbHVlIGlmIHRoZSBSZXNv
dXJjZVJlcXVlc3QgaGFzIGJlZW4KLSAgICAgICAgLy8gZGVzZXJpYWxpemVkIGZyb20gYW4gSVBD
IG1lc3NhZ2UuIEFzIGEgcmVzdWx0IHRoaXMgZnVuY3Rpb24gY2FuIG9ubHkgYmUgcmVsaWVkIG9u
IHdoZW4gbmV0d29ya2luZyBpcyBub3QgaW4gYQotICAgICAgICAvLyBzZXBhcmF0ZSBwcm9jZXNz
LgotICAgICAgICB2b2lkIGRlcHJlY2F0ZWRTZXRNYWluUmVzb3VyY2VSZXF1ZXN0KGJvb2wgaXNN
YWluUmVzb3VyY2VSZXF1ZXN0KSBjb25zdCB7IG1fbWFpblJlc291cmNlUmVxdWVzdCA9IGlzTWFp
blJlc291cmNlUmVxdWVzdDsgfQotICAgICAgICBib29sIGRlcHJlY2F0ZWRJc01haW5SZXNvdXJj
ZVJlcXVlc3QoKSBjb25zdCB7IHJldHVybiBtX21haW5SZXNvdXJjZVJlcXVlc3Q7IH0KLQotICAg
IHByaXZhdGU6Ci0gICAgICAgIG11dGFibGUgYm9vbCBtX21haW5SZXNvdXJjZVJlcXVlc3QgPSBm
YWxzZTsKLSNlbmRpZgotCiAgICAgcHJpdmF0ZToKICAgICAgICAgZnJpZW5kIGNsYXNzIFJlc291
cmNlUmVxdWVzdEJhc2U7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsv
aW9zL1F1aWNrTG9vay5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9u
ZXR3b3JrL2lvcy9RdWlja0xvb2subW0JKHJldmlzaW9uIDE4MzM4OCkKKysrIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL25ldHdvcmsvaW9zL1F1aWNrTG9vay5tbQkod29ya2luZyBjb3B5KQpAQCAt
NDU5LDcgKzQ1OSw3IEBAIFF1aWNrTG9va0hhbmRsZTo6UXVpY2tMb29rSGFuZGxlKE5TVVJMICoK
IHN0ZDo6dW5pcXVlX3B0cjxRdWlja0xvb2tIYW5kbGU+IFF1aWNrTG9va0hhbmRsZTo6Y3JlYXRl
KFJlc291cmNlSGFuZGxlKiBoYW5kbGUsIE5TVVJMQ29ubmVjdGlvbiAqY29ubmVjdGlvbiwgTlNV
UkxSZXNwb25zZSAqbnNSZXNwb25zZSwgaWQgZGVsZWdhdGUpCiB7CiAgICAgQVNTRVJUX0FSRyho
YW5kbGUsIGhhbmRsZSk7Ci0gICAgaWYgKCFoYW5kbGUtPmZpcnN0UmVxdWVzdCgpLmRlcHJlY2F0
ZWRJc01haW5SZXNvdXJjZVJlcXVlc3QoKSB8fCAhW1dlYkNvcmU6OlFMUHJldmlld0dldFN1cHBv
cnRlZE1JTUVUeXBlc1NldCgpIGNvbnRhaW5zT2JqZWN0Oltuc1Jlc3BvbnNlIE1JTUVUeXBlXV0p
CisgICAgaWYgKGhhbmRsZS0+Zmlyc3RSZXF1ZXN0KCkucmVxdWVzdGVyKCkgIT0gUmVzb3VyY2VS
ZXF1ZXN0OjpSZXF1ZXN0ZXI6Ok1haW4gfHwgIVtXZWJDb3JlOjpRTFByZXZpZXdHZXRTdXBwb3J0
ZWRNSU1FVHlwZXNTZXQoKSBjb250YWluc09iamVjdDpbbnNSZXNwb25zZSBNSU1FVHlwZV1dKQog
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAgIHN0ZDo6dW5pcXVlX3B0cjxRdWlja0xvb2tI
YW5kbGU+IHF1aWNrTG9va0hhbmRsZShuZXcgUXVpY2tMb29rSGFuZGxlKFtoYW5kbGUtPmZpcnN0
UmVxdWVzdCgpLm5zVVJMUmVxdWVzdChEb05vdFVwZGF0ZUhUVFBCb2R5KSBVUkxdLCBjb25uZWN0
aW9uLCBuc1Jlc3BvbnNlLCBkZWxlZ2F0ZSkpOwpAQCAtNDcxLDcgKzQ3MSw3IEBAIHN0ZDo6dW5p
cXVlX3B0cjxRdWlja0xvb2tIYW5kbGU+IFF1aWNrTG8KIHN0ZDo6dW5pcXVlX3B0cjxRdWlja0xv
b2tIYW5kbGU+IFF1aWNrTG9va0hhbmRsZTo6Y3JlYXRlKFJlc291cmNlSGFuZGxlKiBoYW5kbGUs
IFN5bmNocm9ub3VzUmVzb3VyY2VIYW5kbGVDRlVSTENvbm5lY3Rpb25EZWxlZ2F0ZSogY29ubmVj
dGlvbkRlbGVnYXRlLCBDRlVSTFJlc3BvbnNlUmVmIGNmUmVzcG9uc2UpCiB7CiAgICAgQVNTRVJU
X0FSRyhoYW5kbGUsIGhhbmRsZSk7Ci0gICAgaWYgKCFoYW5kbGUtPmZpcnN0UmVxdWVzdCgpLmRl
cHJlY2F0ZWRJc01haW5SZXNvdXJjZVJlcXVlc3QoKSB8fCAhW1dlYkNvcmU6OlFMUHJldmlld0dl
dFN1cHBvcnRlZE1JTUVUeXBlc1NldCgpIGNvbnRhaW5zT2JqZWN0OihOU1N0cmluZyAqKUNGVVJM
UmVzcG9uc2VHZXRNSU1FVHlwZShjZlJlc3BvbnNlKV0pCisgICAgaWYgKGhhbmRsZS0+Zmlyc3RS
ZXF1ZXN0KCkucmVxdWVzdGVyKCkgIT0gUmVzb3VyY2VSZXF1ZXN0OjpSZXF1ZXN0ZXI6Ok1haW4g
fHwgIVtXZWJDb3JlOjpRTFByZXZpZXdHZXRTdXBwb3J0ZWRNSU1FVHlwZXNTZXQoKSBjb250YWlu
c09iamVjdDooTlNTdHJpbmcgKilDRlVSTFJlc3BvbnNlR2V0TUlNRVR5cGUoY2ZSZXNwb25zZSld
KQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAgIE5TVVJMUmVzcG9uc2UgKm5zUmVzcG9u
c2UgPSBbTlNVUkxSZXNwb25zZSBfcmVzcG9uc2VXaXRoQ0ZVUkxSZXNwb25zZTpjZlJlc3BvbnNl
XTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3htbC9YTUxIdHRwUmVxdWVzdC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUveG1sL1hNTEh0dHBSZXF1ZXN0LmNwcAkocmV2aXNpb24gMTgz
Mzg4KQorKysgU291cmNlL1dlYkNvcmUveG1sL1hNTEh0dHBSZXF1ZXN0LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNzQ1LDYgKzc0NSw3IEBAIHZvaWQgWE1MSHR0cFJlcXVlc3Q6OmNyZWF0ZVJlcXVl
c3QoRXhjZXAKICAgICBtX3VwbG9hZEV2ZW50c0FsbG93ZWQgPSBtX3NhbWVPcmlnaW5SZXF1ZXN0
IHx8IHVwbG9hZEV2ZW50cyB8fCAhaXNTaW1wbGVDcm9zc09yaWdpbkFjY2Vzc1JlcXVlc3QobV9t
ZXRob2QsIG1fcmVxdWVzdEhlYWRlcnMpOwogCiAgICAgUmVzb3VyY2VSZXF1ZXN0IHJlcXVlc3Qo
bV91cmwpOworICAgIHJlcXVlc3Quc2V0UmVxdWVzdGVyKFJlc291cmNlUmVxdWVzdDo6UmVxdWVz
dGVyOjpYSFIpOwogICAgIHJlcXVlc3Quc2V0SFRUUE1ldGhvZChtX21ldGhvZCk7CiAKICAgICBp
ZiAobV9yZXF1ZXN0RW50aXR5Qm9keSkgewpJbmRleDogU291cmNlL1dlYktpdDIvQ2hhbmdlTG9n
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwkocmV2aXNpb24gMTgzMzk0
KQorKysgU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEs
NDAgQEAKKzIwMTUtMDQtMjcgIEFudHRpIEtvaXZpc3RvICA8YW50dGlAYXBwbGUuY29tPgorCisg
ICAgICAgIE5ldHdvcmsgQ2FjaGU6IERpc2sgY2FjaGUgZ2V0dGluZyBmaWxsZWQgYnkgWW91VHVi
ZSB2aWRlbyBkYXRhCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xNDQyNTkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBNU0UgbWVkaWEgaXMgbG9hZGVkIHZpYSBYSFIgYW5kIHRlbmRzIHRvIGV2ZW50dWFsbHkg
ZmlsbCB0aGUgY2FjaGUuCisKKyAgICAgICAgWW91VHViZSBzZXJ2ZXMgdGhlIG1lZGlhIGNodW5r
cyBjYWNoZWFibGUsIGhvd2V2ZXIgdGhleSBhcmUgcmFyZWx5IChpZiBldmVyKSByZXVzZWQuCisg
ICAgICAgIFdlIGNhbiByZWR1Y2UgZGlzayB3cml0ZXMgYW5kIGtlZXAgbW9yZSB1c2VmdWwgcmVz
b3VyY2VzIGFyb3VuZCBieSBub3QgY2FjaGluZyB0aGVtCisKKyAgICAgICAgKiBOZXR3b3JrUHJv
Y2Vzcy9OZXR3b3JrUmVzb3VyY2VMb2FkZXIuY3BwOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3Jr
UmVzb3VyY2VMb2FkZXI6OmRpZFJlY2VpdmVSZXNwb25zZUFzeW5jKToKKyAgICAgICAgKFdlYktp
dDo6TmV0d29ya1Jlc291cmNlTG9hZGVyOjpkaWRSZXRyaWV2ZUNhY2hlRW50cnkpOgorICAgICAg
ICAqIE5ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZS5jcHA6CisgICAgICAgIChXZWJL
aXQ6Ok5ldHdvcmtDYWNoZTo6bWFrZVN0b3JlRGVjaXNpb24pOgorCisgICAgICAgICAgICBEb24n
dCBzdG9yZSBpZiB0aGUgcmVxdWVzdGVyIGlzIFhIUiBhbmQgcmVzcG9uc2UgaGFzIHZpZGVvIG9y
IGF1ZGlvIGNvbnRlbnQgdHlwZS4KKworICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL2NhY2hlL05l
dHdvcmtDYWNoZS5oOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNo
ZVN0YXRpc3RpY3MuY3BwOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FjaGU6OnN0b3JlRGVj
aXNpb25Ub0RpYWdub3N0aWNLZXkpOgorICAgICAgICAqIFNoYXJlZC9OZXR3b3JrL05ldHdvcmtS
ZXNvdXJjZUxvYWRQYXJhbWV0ZXJzLmNwcDoKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Jlc291
cmNlTG9hZFBhcmFtZXRlcnM6Ok5ldHdvcmtSZXNvdXJjZUxvYWRQYXJhbWV0ZXJzKToKKyAgICAg
ICAgKFdlYktpdDo6TmV0d29ya1Jlc291cmNlTG9hZFBhcmFtZXRlcnM6OmVuY29kZSk6CisgICAg
ICAgIChXZWJLaXQ6Ok5ldHdvcmtSZXNvdXJjZUxvYWRQYXJhbWV0ZXJzOjpkZWNvZGUpOgorICAg
ICAgICAqIFNoYXJlZC9OZXR3b3JrL05ldHdvcmtSZXNvdXJjZUxvYWRQYXJhbWV0ZXJzLmg6CisK
KyAgICAgICAgICAgIFRoZSByZXF1ZXN0ZXIgdHlwZSBpcyBub3cgcGFydCBvZiB0aGUgUmVzb3Vy
Y2VSZXF1ZXN0LCBubyBuZWVkIGZvciBzZXBhcmF0ZSBwYXJhbWV0ZXIuCisKKyAgICAgICAgKiBT
aGFyZWQvbWFjL1dlYkNvcmVBcmd1bWVudENvZGVyc01hYy5tbToKKyAgICAgICAgKElQQzo6QXJn
dW1lbnRDb2RlcjxSZXNvdXJjZVJlcXVlc3Q+OjplbmNvZGVQbGF0Zm9ybURhdGEpOgorICAgICAg
ICAoSVBDOjpBcmd1bWVudENvZGVyPFJlc291cmNlUmVxdWVzdD46OmRlY29kZVBsYXRmb3JtRGF0
YSk6CisgICAgICAgICogV2ViUHJvY2Vzcy9OZXR3b3JrL1dlYlJlc291cmNlTG9hZFNjaGVkdWxl
ci5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlJlc291cmNlTG9hZFNjaGVkdWxlcjo6c2NoZWR1
bGVMb2FkKToKKwogMjAxNS0wNC0yNyAgQ3NhYmEgT3N6dHJvZ29uw6FjICA8b3NzeUB3ZWJraXQu
b3JnPgogCiAgICAgICAgIFtFRkxdIFRlc3RXZWJLaXRBUEkncyBmb3J3YXJkaW5nIGhlYWRlciBn
ZW5lcmF0b3Igc2hvdWxkIGRlcGVuZCBvbiBXZWJLaXQyJ3MgZ2VuZXJhdG9yCkluZGV4OiBTb3Vy
Y2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUmVzb3VyY2VMb2FkZXIuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtSZXNvdXJjZUxv
YWRlci5jcHAJKHJldmlzaW9uIDE4MzM4OCkKKysrIFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9j
ZXNzL05ldHdvcmtSZXNvdXJjZUxvYWRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI1MywxNyAr
MjUzLDE4IEBAIHZvaWQgTmV0d29ya1Jlc291cmNlTG9hZGVyOjpkaWRSZWNlaXZlUmUKICAgICBz
aG91bGRTZW5kRGlkUmVjZWl2ZVJlc3BvbnNlID0gIW1fY2FjaGVFbnRyeUZvclZhbGlkYXRpb247
CiAjZW5kaWYKIAorICAgIGJvb2wgc2hvdWxkV2FpdENvbnRpbnVlRGlkUmVjZWl2ZVJlc3BvbnNl
ID0gb3JpZ2luYWxSZXF1ZXN0KCkucmVxdWVzdGVyKCkgPT0gUmVzb3VyY2VSZXF1ZXN0OjpSZXF1
ZXN0ZXI6Ok1haW47CiAgICAgaWYgKHNob3VsZFNlbmREaWRSZWNlaXZlUmVzcG9uc2UpIHsKICAg
ICAgICAgaWYgKGlzU3luY2hyb25vdXMoKSkKICAgICAgICAgICAgIG1fc3luY2hyb25vdXNMb2Fk
RGF0YS0+cmVzcG9uc2UgPSBtX3Jlc3BvbnNlOwogICAgICAgICBlbHNlIHsKLSAgICAgICAgICAg
IGlmICghc2VuZEFib3J0aW5nT25GYWlsdXJlKE1lc3NhZ2VzOjpXZWJSZXNvdXJjZUxvYWRlcjo6
RGlkUmVjZWl2ZVJlc3BvbnNlKG1fcmVzcG9uc2UsIG1fcGFyYW1ldGVycy5pc01haW5SZXNvdXJj
ZSkpKQorICAgICAgICAgICAgaWYgKCFzZW5kQWJvcnRpbmdPbkZhaWx1cmUoTWVzc2FnZXM6Oldl
YlJlc291cmNlTG9hZGVyOjpEaWRSZWNlaXZlUmVzcG9uc2UobV9yZXNwb25zZSwgc2hvdWxkV2Fp
dENvbnRpbnVlRGlkUmVjZWl2ZVJlc3BvbnNlKSkpCiAgICAgICAgICAgICAgICAgcmV0dXJuOwog
ICAgICAgICB9CiAgICAgfQogCiAgICAgLy8gRm9yIG1haW4gcmVzb3VyY2VzLCB0aGUgd2ViIHBy
b2Nlc3MgaXMgcmVzcG9uc2libGUgZm9yIHNlbmRpbmcgYmFjayBhIE5ldHdvcmtSZXNvdXJjZUxv
YWRlcjo6Q29udGludWVEaWRSZWNlaXZlUmVzcG9uc2UgbWVzc2FnZS4KLSAgICBib29sIHNob3Vs
ZENvbnRpbnVlRGlkUmVjZWl2ZVJlc3BvbnNlID0gIW1fcGFyYW1ldGVycy5pc01haW5SZXNvdXJj
ZTsKKyAgICBib29sIHNob3VsZENvbnRpbnVlRGlkUmVjZWl2ZVJlc3BvbnNlID0gIXNob3VsZFdh
aXRDb250aW51ZURpZFJlY2VpdmVSZXNwb25zZTsKICNpZiBFTkFCTEUoTkVUV09SS19DQUNIRSkK
ICAgICBzaG91bGRDb250aW51ZURpZFJlY2VpdmVSZXNwb25zZSA9IHNob3VsZENvbnRpbnVlRGlk
UmVjZWl2ZVJlc3BvbnNlIHx8IG1fY2FjaGVFbnRyeUZvclZhbGlkYXRpb247CiAjZW5kaWYKQEAg
LTU0Myw3ICs1NDQsOCBAQCB2b2lkIE5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6ZGlkUmV0cmlldmVD
CiAgICAgICAgIG1fc3luY2hyb25vdXNMb2FkRGF0YS0+cmVzcG9uc2UgPSBlbnRyeS0+cmVzcG9u
c2UoKTsKICAgICAgICAgc2VuZFJlcGx5VG9TeW5jaHJvbm91c1JlcXVlc3QoKm1fc3luY2hyb25v
dXNMb2FkRGF0YSwgZW50cnktPmJ1ZmZlcigpKTsKICAgICB9IGVsc2UgewotICAgICAgICBzZW5k
QWJvcnRpbmdPbkZhaWx1cmUoTWVzc2FnZXM6OldlYlJlc291cmNlTG9hZGVyOjpEaWRSZWNlaXZl
UmVzcG9uc2UoZW50cnktPnJlc3BvbnNlKCksIG1fcGFyYW1ldGVycy5pc01haW5SZXNvdXJjZSkp
OworICAgICAgICBib29sIG5lZWRzQ29udGludWVEaWRSZWNlaXZlUmVzcG9uc2VNZXNzYWdlID0g
b3JpZ2luYWxSZXF1ZXN0KCkucmVxdWVzdGVyKCkgPT0gUmVzb3VyY2VSZXF1ZXN0OjpSZXF1ZXN0
ZXI6Ok1haW47CisgICAgICAgIHNlbmRBYm9ydGluZ09uRmFpbHVyZShNZXNzYWdlczo6V2ViUmVz
b3VyY2VMb2FkZXI6OkRpZFJlY2VpdmVSZXNwb25zZShlbnRyeS0+cmVzcG9uc2UoKSwgbmVlZHND
b250aW51ZURpZFJlY2VpdmVSZXNwb25zZU1lc3NhZ2UpKTsKIAogI2lmIEVOQUJMRShTSEFSRUFC
TEVfUkVTT1VSQ0UpCiAgICAgICAgIGlmICghZW50cnktPnNoYXJlYWJsZVJlc291cmNlSGFuZGxl
KCkuaXNOdWxsKCkpCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9O
ZXR3b3JrQ2FjaGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9j
ZXNzL2NhY2hlL05ldHdvcmtDYWNoZS5jcHAJKHJldmlzaW9uIDE4MzM4OCkKKysrIFNvdXJjZS9X
ZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTI5MCw4ICsyOTAsOCBAQCBzdGF0aWMgU3RvcmVEZWNpc2lvbiBtYWtlU3RvcmVEZWNp
c2lvbihjCiAgICAgICAgICAgICByZXR1cm4gU3RvcmVEZWNpc2lvbjo6Tm9EdWVUb0hUVFBTdGF0
dXNDb2RlOwogICAgIH0KIAotICAgIC8vIE1haW4gcmVzb3VyY2UgaGFzIFJlc291cmNlTG9hZFBy
aW9yaXR5VmVyeUhpZ2guCi0gICAgYm9vbCBzdG9yZVVuY29uZGl0aW9uYWxseUZvckhpc3RvcnlO
YXZpZ2F0aW9uID0gb3JpZ2luYWxSZXF1ZXN0LnByaW9yaXR5KCkgPT0gV2ViQ29yZTo6UmVzb3Vy
Y2VMb2FkUHJpb3JpdHlWZXJ5SGlnaDsKKyAgICBib29sIGlzTWFpblJlc291cmNlID0gb3JpZ2lu
YWxSZXF1ZXN0LnJlcXVlc3RlcigpID09IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdDo6UmVxdWVz
dGVyOjpNYWluOworICAgIGJvb2wgc3RvcmVVbmNvbmRpdGlvbmFsbHlGb3JIaXN0b3J5TmF2aWdh
dGlvbiA9IGlzTWFpblJlc291cmNlIHx8IG9yaWdpbmFsUmVxdWVzdC5wcmlvcml0eSgpID09IFdl
YkNvcmU6OlJlc291cmNlTG9hZFByaW9yaXR5VmVyeUhpZ2g7CiAgICAgaWYgKCFzdG9yZVVuY29u
ZGl0aW9uYWxseUZvckhpc3RvcnlOYXZpZ2F0aW9uKSB7CiAgICAgICAgIGF1dG8gbm93ID0gc3Rk
OjpjaHJvbm86OnN5c3RlbV9jbG9jazo6bm93KCk7CiAgICAgICAgIGJvb2wgaGFzTm9uWmVyb0xp
ZmV0aW1lID0gIXJlc3BvbnNlLmNhY2hlQ29udHJvbENvbnRhaW5zTm9DYWNoZSgpICYmIFdlYkNv
cmU6OmNvbXB1dGVGcmVzaG5lc3NMaWZldGltZUZvckhUVFBGYW1pbHkocmVzcG9uc2UsIG5vdykg
PiAwX21zOwpAQCAtMzAxLDYgKzMwMSwxMyBAQCBzdGF0aWMgU3RvcmVEZWNpc2lvbiBtYWtlU3Rv
cmVEZWNpc2lvbihjCiAgICAgICAgICAgICByZXR1cm4gU3RvcmVEZWNpc2lvbjo6Tm9EdWVUb1Vu
bGlrZWx5VG9SZXVzZTsKICAgICB9CiAKKyAgICAvLyBNZWRpYSBsb2FkZWQgdmlhIFhIUiBpcyBs
aWtlbHkgYmVpbmcgdXNlZCBmb3IgTVNFIHN0cmVhbWluZyAoWW91VHViZSBhbmQgTmV0ZmxpeCBm
b3IgZXhhbXBsZSkuCisgICAgLy8gU3RyZWFtaW5nIG1lZGlhIGZpbGxzIHRoZSBjYWNoZSBxdWlj
a2x5IGFuZCBpcyB1bmxpa2VseSB0byBiZSByZXVzZWQuCisgICAgYm9vbCBpc1hIUiA9IG9yaWdp
bmFsUmVxdWVzdC5yZXF1ZXN0ZXIoKSA9PSBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3Q6OlJlcXVl
c3Rlcjo6WEhSOworICAgIGJvb2wgaXNMaWtlbHlTdHJlYW1pbmdNZWRpYSA9IGlzWEhSICYmIChy
ZXNwb25zZS5taW1lVHlwZSgpLnN0YXJ0c1dpdGgoInZpZGVvLyIpIHx8IHJlc3BvbnNlLm1pbWVU
eXBlKCkuc3RhcnRzV2l0aCgiYXVkaW8vIikpOworICAgIGlmIChpc0xpa2VseVN0cmVhbWluZ01l
ZGlhKQorICAgICAgICByZXR1cm4gU3RvcmVEZWNpc2lvbjo6Tm9EdWVUb1N0cmVhbWluZ01lZGlh
OworCiAgICAgcmV0dXJuIFN0b3JlRGVjaXNpb246OlllczsKIH0KIApJbmRleDogU291cmNlL1dl
YktpdDIvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlLmgJKHJldmlz
aW9uIDE4MzM4OCkKKysrIFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdv
cmtDYWNoZS5oCSh3b3JraW5nIGNvcHkpCkBAIC03MSw3ICs3MSw4IEBAIGVudW0gY2xhc3MgU3Rv
cmVEZWNpc2lvbiB7CiAgICAgTm9EdWVUb05vU3RvcmVSZXNwb25zZSwKICAgICBOb0R1ZVRvSFRU
UFN0YXR1c0NvZGUsCiAgICAgTm9EdWVUb05vU3RvcmVSZXF1ZXN0LAotICAgIE5vRHVlVG9Vbmxp
a2VseVRvUmV1c2UKKyAgICBOb0R1ZVRvVW5saWtlbHlUb1JldXNlLAorICAgIE5vRHVlVG9TdHJl
YW1pbmdNZWRpYQogfTsKIAogZW51bSBjbGFzcyBVc2VEZWNpc2lvbiB7CkluZGV4OiBTb3VyY2Uv
V2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVTdGF0aXN0aWNzLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3Jr
Q2FjaGVTdGF0aXN0aWNzLmNwcAkocmV2aXNpb24gMTgzMzg4KQorKysgU291cmNlL1dlYktpdDIv
TmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlU3RhdGlzdGljcy5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTI0NCw2ICsyNDQsOCBAQCBzdGF0aWMgU3RyaW5nIHN0b3JlRGVjaXNpb25Ub0Rp
YWdub3N0aWNLCiAgICAgICAgIHJldHVybiBXZWJDb3JlOjpEaWFnbm9zdGljTG9nZ2luZ0tleXM6
OnVuY2FjaGVhYmxlU3RhdHVzQ29kZUtleSgpOwogICAgIGNhc2UgU3RvcmVEZWNpc2lvbjo6Tm9E
dWVUb1VubGlrZWx5VG9SZXVzZToKICAgICAgICAgcmV0dXJuIFdlYkNvcmU6OkRpYWdub3N0aWNM
b2dnaW5nS2V5czo6dW5saWtlbHlUb1JldXNlS2V5KCk7CisgICAgY2FzZSBTdG9yZURlY2lzaW9u
OjpOb0R1ZVRvU3RyZWFtaW5nTWVkaWE6CisgICAgICAgIHJldHVybiBXZWJDb3JlOjpEaWFnbm9z
dGljTG9nZ2luZ0tleXM6OnN0cmVhbWluZ01lZGlhKCk7CiAgICAgY2FzZSBTdG9yZURlY2lzaW9u
OjpZZXM6CiAgICAgICAgIC8vIEl0IHdhcyBzdG9yZWQgYnV0IGNvdWxkIG5vdCBiZSByZXRyaWV2
ZWQgc28gaXQgbXVzdCBoYXZlIGJlZW4gcHJ1bmVkIGZyb20gdGhlIGNhY2hlLgogICAgICAgICBy
ZXR1cm4gV2ViQ29yZTo6RGlhZ25vc3RpY0xvZ2dpbmdLZXlzOjpub0xvbmdlckluQ2FjaGVLZXko
KTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9OZXR3b3JrL05ldHdvcmtSZXNvdXJjZUxv
YWRQYXJhbWV0ZXJzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvTmV0
d29yay9OZXR3b3JrUmVzb3VyY2VMb2FkUGFyYW1ldGVycy5jcHAJKHJldmlzaW9uIDE4MzM4OCkK
KysrIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9OZXR3b3JrL05ldHdvcmtSZXNvdXJjZUxvYWRQYXJh
bWV0ZXJzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDUsNyArNDUsNiBAQCBOZXR3b3JrUmVzb3Vy
Y2VMb2FkUGFyYW1ldGVyczo6TmV0d29ya1JlCiAgICAgLCBhbGxvd1N0b3JlZENyZWRlbnRpYWxz
KERvTm90QWxsb3dTdG9yZWRDcmVkZW50aWFscykKICAgICAsIGNsaWVudENyZWRlbnRpYWxQb2xp
Y3koRG9Ob3RBc2tDbGllbnRGb3JBbnlDcmVkZW50aWFscykKICAgICAsIHNob3VsZENsZWFyUmVm
ZXJyZXJPbkhUVFBTVG9IVFRQUmVkaXJlY3QodHJ1ZSkKLSAgICAsIGlzTWFpblJlc291cmNlKGZh
bHNlKQogICAgICwgZGVmZXJzTG9hZGluZyhmYWxzZSkKICAgICAsIG5lZWRzQ2VydGlmaWNhdGVJ
bmZvKGZhbHNlKQogICAgICwgbWF4aW11bUJ1ZmZlcmluZ1RpbWUoMF9tcykKQEAgLTk0LDcgKzkz
LDYgQEAgdm9pZCBOZXR3b3JrUmVzb3VyY2VMb2FkUGFyYW1ldGVyczo6ZW5jbwogICAgIGVuY29k
ZXIuZW5jb2RlRW51bShhbGxvd1N0b3JlZENyZWRlbnRpYWxzKTsKICAgICBlbmNvZGVyLmVuY29k
ZUVudW0oY2xpZW50Q3JlZGVudGlhbFBvbGljeSk7CiAgICAgZW5jb2RlciA8PCBzaG91bGRDbGVh
clJlZmVycmVyT25IVFRQU1RvSFRUUFJlZGlyZWN0OwotICAgIGVuY29kZXIgPDwgaXNNYWluUmVz
b3VyY2U7CiAgICAgZW5jb2RlciA8PCBkZWZlcnNMb2FkaW5nOwogICAgIGVuY29kZXIgPDwgbmVl
ZHNDZXJ0aWZpY2F0ZUluZm87CiAgICAgZW5jb2RlciA8PCBtYXhpbXVtQnVmZmVyaW5nVGltZTsK
QEAgLTE1MSw4ICsxNDksNiBAQCBib29sIE5ldHdvcmtSZXNvdXJjZUxvYWRQYXJhbWV0ZXJzOjpk
ZWNvCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlc3Vs
dC5zaG91bGRDbGVhclJlZmVycmVyT25IVFRQU1RvSFRUUFJlZGlyZWN0KSkKICAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVzdWx0LmlzTWFpblJlc291cmNl
KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVzdWx0
LmRlZmVyc0xvYWRpbmcpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgaWYgKCFkZWNvZGVy
LmRlY29kZShyZXN1bHQubmVlZHNDZXJ0aWZpY2F0ZUluZm8pKQpJbmRleDogU291cmNlL1dlYktp
dDIvU2hhcmVkL05ldHdvcmsvTmV0d29ya1Jlc291cmNlTG9hZFBhcmFtZXRlcnMuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvTmV0d29yay9OZXR3b3JrUmVzb3VyY2VMb2Fk
UGFyYW1ldGVycy5oCShyZXZpc2lvbiAxODMzODgpCisrKyBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQv
TmV0d29yay9OZXR3b3JrUmVzb3VyY2VMb2FkUGFyYW1ldGVycy5oCSh3b3JraW5nIGNvcHkpCkBA
IC02MSw3ICs2MSw2IEBAIHB1YmxpYzoKICAgICBXZWJDb3JlOjpTdG9yZWRDcmVkZW50aWFscyBh
bGxvd1N0b3JlZENyZWRlbnRpYWxzOwogICAgIFdlYkNvcmU6OkNsaWVudENyZWRlbnRpYWxQb2xp
Y3kgY2xpZW50Q3JlZGVudGlhbFBvbGljeTsKICAgICBib29sIHNob3VsZENsZWFyUmVmZXJyZXJP
bkhUVFBTVG9IVFRQUmVkaXJlY3Q7Ci0gICAgYm9vbCBpc01haW5SZXNvdXJjZTsKICAgICBib29s
IGRlZmVyc0xvYWRpbmc7CiAgICAgYm9vbCBuZWVkc0NlcnRpZmljYXRlSW5mbzsKICAgICBzdGQ6
OmNocm9ubzo6bWlsbGlzZWNvbmRzIG1heGltdW1CdWZmZXJpbmdUaW1lOwpJbmRleDogU291cmNl
L1dlYktpdDIvU2hhcmVkL21hYy9XZWJDb3JlQXJndW1lbnRDb2RlcnNNYWMubW0KPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYktpdDIvU2hhcmVkL21hYy9XZWJDb3JlQXJndW1lbnRDb2RlcnNNYWMu
bW0JKHJldmlzaW9uIDE4MzM4OCkKKysrIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9tYWMvV2ViQ29y
ZUFyZ3VtZW50Q29kZXJzTWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC04NCw2ICs4NCw3IEBAIHZv
aWQgQXJndW1lbnRDb2RlcjxSZXNvdXJjZVJlcXVlc3Q+OjplbmMKIAogICAgIC8vIFRoZSBmYWxs
YmFjayBhcnJheSBpcyBwYXJ0IG9mIENGVVJMUmVxdWVzdCwgYnV0IGl0IGlzIG5vdCBlbmNvZGVk
IGJ5IFdLQ0ZVUkxSZXF1ZXN0Q3JlYXRlU2VyaWFsaXphYmxlUmVwcmVzZW50YXRpb24uCiAgICAg
ZW5jb2RlciA8PCByZXNvdXJjZVJlcXVlc3QucmVzcG9uc2VDb250ZW50RGlzcG9zaXRpb25FbmNv
ZGluZ0ZhbGxiYWNrQXJyYXkoKTsKKyAgICBlbmNvZGVyLmVuY29kZUVudW0ocmVzb3VyY2VSZXF1
ZXN0LnJlcXVlc3RlcigpKTsKIH0KICNlbHNlCiB2b2lkIEFyZ3VtZW50Q29kZXI8UmVzb3VyY2VS
ZXF1ZXN0Pjo6ZW5jb2RlUGxhdGZvcm1EYXRhKEFyZ3VtZW50RW5jb2RlciYgZW5jb2RlciwgY29u
c3QgUmVzb3VyY2VSZXF1ZXN0JiByZXNvdXJjZVJlcXVlc3QpCkBAIC0xMDksNiArMTEwLDcgQEAg
dm9pZCBBcmd1bWVudENvZGVyPFJlc291cmNlUmVxdWVzdD46OmVuYwogCiAgICAgLy8gVGhlIGZh
bGxiYWNrIGFycmF5IGlzIHBhcnQgb2YgTlNVUkxSZXF1ZXN0LCBidXQgaXQgaXMgbm90IGVuY29k
ZWQgYnkgV0tOU1VSTFJlcXVlc3RDcmVhdGVTZXJpYWxpemFibGVSZXByZXNlbnRhdGlvbi4KICAg
ICBlbmNvZGVyIDw8IHJlc291cmNlUmVxdWVzdC5yZXNwb25zZUNvbnRlbnREaXNwb3NpdGlvbkVu
Y29kaW5nRmFsbGJhY2tBcnJheSgpOworICAgIGVuY29kZXIuZW5jb2RlRW51bShyZXNvdXJjZVJl
cXVlc3QucmVxdWVzdGVyKCkpOwogfQogI2VuZGlmCiAKQEAgLTE1MSw2ICsxNTMsMTEgQEAgYm9v
bCBBcmd1bWVudENvZGVyPFJlc291cmNlUmVxdWVzdD46OmRlYwogICAgICAgICByZXNwb25zZUNv
bnRlbnREaXNwb3NpdGlvbkVuY29kaW5nRmFsbGJhY2tBcnJheS5zaXplKCkgPiAyID8gcmVzcG9u
c2VDb250ZW50RGlzcG9zaXRpb25FbmNvZGluZ0ZhbGxiYWNrQXJyYXlbMl0gOiBTdHJpbmcoKQog
ICAgICk7CiAKKyAgICBSZXNvdXJjZVJlcXVlc3Q6OlJlcXVlc3RlciByZXF1ZXN0ZXI7CisgICAg
aWYgKCFkZWNvZGVyLmRlY29kZUVudW0ocmVxdWVzdGVyKSkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIHJlc291cmNlUmVxdWVzdC5zZXRSZXF1ZXN0ZXIocmVxdWVzdGVyKTsKKwogICAgIHJl
dHVybiB0cnVlOwogfQogCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL05ldHdvcmsv
V2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL05ldHdvcmsvV2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVyLmNwcAkocmV2aXNp
b24gMTgzMzg4KQorKysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9OZXR3b3JrL1dlYlJlc291
cmNlTG9hZFNjaGVkdWxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE3Myw3ICsxNzMsNiBAQCB2
b2lkIFdlYlJlc291cmNlTG9hZFNjaGVkdWxlcjo6c2NoZWR1bGVMCiAgICAgLy8gSWYgdGhlcmUg
aXMgbm8gV2ViRnJhbWUgdGhlbiB0aGlzIHJlc291cmNlIGNhbm5vdCBiZSBhdXRoZW50aWNhdGVk
IHdpdGggdGhlIGNsaWVudC4KICAgICBsb2FkUGFyYW1ldGVycy5jbGllbnRDcmVkZW50aWFsUG9s
aWN5ID0gKHdlYkZyYW1lICYmIHdlYlBhZ2UgJiYgcmVzb3VyY2VMb2FkZXItPmlzQWxsb3dlZFRv
QXNrVXNlckZvckNyZWRlbnRpYWxzKCkpID8gQXNrQ2xpZW50Rm9yQWxsQ3JlZGVudGlhbHMgOiBE
b05vdEFza0NsaWVudEZvckFueUNyZWRlbnRpYWxzOwogICAgIGxvYWRQYXJhbWV0ZXJzLnNob3Vs
ZENsZWFyUmVmZXJyZXJPbkhUVFBTVG9IVFRQUmVkaXJlY3QgPSBzaG91bGRDbGVhclJlZmVycmVy
T25IVFRQU1RvSFRUUFJlZGlyZWN0OwotICAgIGxvYWRQYXJhbWV0ZXJzLmlzTWFpblJlc291cmNl
ID0gcmVzb3VyY2UgJiYgcmVzb3VyY2UtPnR5cGUoKSA9PSBDYWNoZWRSZXNvdXJjZTo6TWFpblJl
c291cmNlOwogICAgIGxvYWRQYXJhbWV0ZXJzLmRlZmVyc0xvYWRpbmcgPSByZXNvdXJjZUxvYWRl
ci0+ZGVmZXJzTG9hZGluZygpOwogICAgIGxvYWRQYXJhbWV0ZXJzLm5lZWRzQ2VydGlmaWNhdGVJ
bmZvID0gcmVzb3VyY2VMb2FkZXItPnNob3VsZEluY2x1ZGVDZXJ0aWZpY2F0ZUluZm8oKTsKICAg
ICBsb2FkUGFyYW1ldGVycy5tYXhpbXVtQnVmZmVyaW5nVGltZSA9IG1heGltdW1CdWZmZXJpbmdU
aW1lKHJlc291cmNlKTsKSW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDE4MzM5NCkKKysrIExheW91dFRlc3Rz
L0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE1IEBACisyMDE1LTA0LTI3ICBB
bnR0aSBLb2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KKworICAgICAgICBOZXR3b3JrIENhY2hl
OiBEaXNrIGNhY2hlIGdldHRpbmcgZmlsbGVkIGJ5IFlvdVR1YmUgdmlkZW8gZGF0YQorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ0MjU5CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBodHRwL3Rlc3RzL2Nh
Y2hlL2Rpc2stY2FjaGUvZGlzay1jYWNoZS1tZWRpYS1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAg
ICAgICAqIGh0dHAvdGVzdHMvY2FjaGUvZGlzay1jYWNoZS9kaXNrLWNhY2hlLW1lZGlhLmh0bWw6
IEFkZGVkLgorICAgICAgICAqIGh0dHAvdGVzdHMvY2FjaGUvZGlzay1jYWNoZS9yZXNvdXJjZXMv
Y2FjaGUtdGVzdC5qczoKKyAgICAgICAgKGdlbmVyYXRlVGVzdFVSTCk6CisKIDIwMTUtMDQtMjcg
IFlvdWVubiBGYWJsZXQgIDx5b3Vlbm4uZmFibGV0QGNyZi5jYW5vbi5mcj4KIAogICAgICAgICBT
eW5jaHJvbm91cyBYTUxIdHRwUmVxdWVzdCBzaG91bGQgZ2V0IGFjY2VzcyB0byBBcHBDYWNoZSBy
ZXNvdXJjZXMgc3RvcmVkIGFzIGZsYXQgZmlsZXMKSW5kZXg6IExheW91dFRlc3RzL2h0dHAvdGVz
dHMvY2FjaGUvZGlzay1jYWNoZS9kaXNrLWNhY2hlLW1lZGlhLWV4cGVjdGVkLnR4dAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2NhY2hlL2Rpc2stY2FjaGUvZGlzay1jYWNo
ZS1tZWRpYS1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9odHRwL3Rl
c3RzL2NhY2hlL2Rpc2stY2FjaGUvZGlzay1jYWNoZS1tZWRpYS1leHBlY3RlZC50eHQJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSwyOSBAQAorVGVzdHMgdGhhdCBtZWRpYSByZXNvdXJjZXMgbG9h
ZGVkIHZpYSBYSFIgaXMgbm90IGNhY2hlZC4KKworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEg
c2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgor
CisKK3J1bm5pbmcgNiB0ZXN0cworCityZXNwb25zZSBoZWFkZXJzOiB7IkNhY2hlLWNvbnRyb2wi
OiJtYXgtYWdlPTAiLCJDb250ZW50LVR5cGUiOiJ0ZXh0L3BsYWluIn0KK3Jlc3BvbnNlIHNvdXJj
ZTogTmV0d29yaworCityZXNwb25zZSBoZWFkZXJzOiB7IkNhY2hlLWNvbnRyb2wiOiJtYXgtYWdl
PTEwMCIsIkNvbnRlbnQtVHlwZSI6InRleHQvcGxhaW4ifQorcmVzcG9uc2Ugc291cmNlOiBEaXNr
IGNhY2hlCisKK3Jlc3BvbnNlIGhlYWRlcnM6IHsiQ2FjaGUtY29udHJvbCI6Im1heC1hZ2U9MCIs
IkNvbnRlbnQtVHlwZSI6InZpZGVvL21wNCJ9CityZXNwb25zZSBzb3VyY2U6IE5ldHdvcmsKKwor
cmVzcG9uc2UgaGVhZGVyczogeyJDYWNoZS1jb250cm9sIjoibWF4LWFnZT0xMDAiLCJDb250ZW50
LVR5cGUiOiJ2aWRlby9tcDQifQorcmVzcG9uc2Ugc291cmNlOiBOZXR3b3JrCisKK3Jlc3BvbnNl
IGhlYWRlcnM6IHsiQ2FjaGUtY29udHJvbCI6Im1heC1hZ2U9MCIsIkNvbnRlbnQtVHlwZSI6ImF1
ZGlvL21wNCJ9CityZXNwb25zZSBzb3VyY2U6IE5ldHdvcmsKKworcmVzcG9uc2UgaGVhZGVyczog
eyJDYWNoZS1jb250cm9sIjoibWF4LWFnZT0xMDAiLCJDb250ZW50LVR5cGUiOiJhdWRpby9tcDQi
fQorcmVzcG9uc2Ugc291cmNlOiBOZXR3b3JrCisKK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlz
IHRydWUKKworVEVTVCBDT01QTEVURQorCkluZGV4OiBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2Nh
Y2hlL2Rpc2stY2FjaGUvZGlzay1jYWNoZS1tZWRpYS5odG1sCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91
dFRlc3RzL2h0dHAvdGVzdHMvY2FjaGUvZGlzay1jYWNoZS9kaXNrLWNhY2hlLW1lZGlhLmh0bWwJ
KHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2NhY2hlL2Rpc2stY2FjaGUv
ZGlzay1jYWNoZS1tZWRpYS5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjkgQEAKKzxz
Y3JpcHQgc3JjPSIvanMtdGVzdC1yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0Pgor
PHNjcmlwdCBzcmM9InJlc291cmNlcy9jYWNoZS10ZXN0LmpzIj48L3NjcmlwdD4KKzxib2R5Pgor
PHNjcmlwdD4KKwordmFyIHRlc3RNYXRyaXggPQorWworIFsKKyAgeyByZXNwb25zZUhlYWRlcnM6
IHsnQ2FjaGUtY29udHJvbCc6ICdtYXgtYWdlPTAnIH0gfSwKKyAgeyByZXNwb25zZUhlYWRlcnM6
IHsnQ2FjaGUtY29udHJvbCc6ICdtYXgtYWdlPTEwMCcgfSB9LAorICBdLAorIFsKKyAgeyByZXNw
b25zZUhlYWRlcnM6IHsnQ29udGVudC1UeXBlJzogJ3RleHQvcGxhaW4nIH0gfSwKKyAgeyByZXNw
b25zZUhlYWRlcnM6IHsnQ29udGVudC1UeXBlJzogJ3ZpZGVvL21wNCcgfSB9LAorICB7IHJlc3Bv
bnNlSGVhZGVyczogeydDb250ZW50LVR5cGUnOiAnYXVkaW8vbXA0JyB9IH0sCisgIF0sCisgXTsK
KworZGVzY3JpcHRpb24oIlRlc3RzIHRoYXQgbWVkaWEgcmVzb3VyY2VzIGxvYWRlZCB2aWEgWEhS
IGlzIG5vdCBjYWNoZWQuIik7CisKK3ZhciB0ZXN0cyA9IGdlbmVyYXRlVGVzdHModGVzdE1hdHJp
eCk7CisKK2RlYnVnKCJydW5uaW5nICIgKyB0ZXN0cy5sZW5ndGggKyAiIHRlc3RzIik7CitkZWJ1
ZygiIik7CisKK3J1blRlc3RzKHRlc3RzKTsKKworPC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iL2pz
LXRlc3QtcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+CkluZGV4OiBMYXlvdXRU
ZXN0cy9odHRwL3Rlc3RzL2NhY2hlL2Rpc2stY2FjaGUvcmVzb3VyY2VzL2NhY2hlLXRlc3QuanMK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9jYWNoZS9kaXNrLWNhY2hlL3Jl
c291cmNlcy9jYWNoZS10ZXN0LmpzCShyZXZpc2lvbiAxODMzODgpCisrKyBMYXlvdXRUZXN0cy9o
dHRwL3Rlc3RzL2NhY2hlL2Rpc2stY2FjaGUvcmVzb3VyY2VzL2NhY2hlLXRlc3QuanMJKHdvcmtp
bmcgY29weSkKQEAgLTQ2LDcgKzQ2LDkgQEAgZnVuY3Rpb24gZ2VuZXJhdGVUZXN0VVJMKHRlc3Qs
IGluY2x1ZGVCbwogICAgIHZhciB0ZXN0VVJMID0gInJlc291cmNlcy9nZW5lcmF0ZS1yZXNwb25z
ZS5jZ2k/aW5jbHVkZS1ib2R5PSIgKyAoaW5jbHVkZUJvZHkgPyAiMSIgOiAiMCIpOwogICAgIGlm
IChleHBpcmVzSW5GdXR1cmVJbjMwNCkKICAgICAgICAgdGVzdFVSTCArPSAiJmV4cGlyZXMtaW4t
ZnV0dXJlLWluLTMwND0xIjsKLSAgICB0ZXN0VVJMICs9ICImdW5pcXVlSWQ9IiArIHVuaXF1ZVRl
c3RJZCsrICsgIiZDb250ZW50LXR5cGU9dGV4dC9wbGFpbiI7CisgICAgdGVzdFVSTCArPSAiJnVu
aXF1ZUlkPSIgKyB1bmlxdWVUZXN0SWQrKzsKKyAgICBpZiAoIXRlc3QucmVzcG9uc2VIZWFkZXJz
IHx8ICF0ZXN0LnJlc3BvbnNlSGVhZGVyc1siQ29udGVudC1UeXBlIl0pCisgICAgICAgIHRlc3RV
UkwgKz0gIiZDb250ZW50LVR5cGU9dGV4dC9wbGFpbiI7CiAgICAgZm9yICh2YXIgaGVhZGVyIGlu
IHRlc3QucmVzcG9uc2VIZWFkZXJzKQogICAgICAgICB0ZXN0VVJMICs9ICcmJyArIGhlYWRlciAr
ICc9JyArIG1ha2VIZWFkZXJWYWx1ZSh0ZXN0LnJlc3BvbnNlSGVhZGVyc1toZWFkZXJdKTsKICAg
ICByZXR1cm4gdGVzdFVSTDsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>251739</attachid>
            <date>2015-04-27 07:55:32 -0700</date>
            <delta_ts>2015-04-27 08:36:01 -0700</delta_ts>
            <desc>patch</desc>
            <filename>disk-cache-no-media-3.patch</filename>
            <type>text/plain</type>
            <size>29069</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE4MzM5NCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDUyIEBACisyMDE1LTA0LTI3ICBBbnR0aSBL
b2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KKworICAgICAgICBOZXR3b3JrIENhY2hlOiBEaXNr
IGNhY2hlIGdldHRpbmcgZmlsbGVkIGJ5IFlvdVR1YmUgdmlkZW8gZGF0YQorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ0MjU5CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTVNFIG1lZGlhIGlzIGxvYWRlZCB2
aWEgWEhSIGFuZCB0ZW5kcyB0byBldmVudHVhbGx5IGZpbGwgdGhlIGNhY2hlLgorCisgICAgICAg
IFlvdVR1YmUgc2VydmVzIHRoZSBtZWRpYSBjaHVua3MgY2FjaGVhYmxlLCBob3dldmVyIHRoZXkg
YXJlIHJhcmVseSAoaWYgZXZlcikgcmV1c2VkLgorICAgICAgICBXZSBjYW4gcmVkdWNlIGRpc2sg
d3JpdGVzIGFuZCBrZWVwIG1vcmUgdXNlZnVsIHJlc291cmNlcyBhcm91bmQgYnkgbm90IGNhY2hp
bmcgdGhlbQorCisgICAgICAgIFRlc3Q6IGh0dHAvdGVzdHMvY2FjaGUvZGlzay1jYWNoZS9kaXNr
LWNhY2hlLW1lZGlhLmh0bWwKKworICAgICAgICAqIGxvYWRlci9Eb2N1bWVudExvYWRlci5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudExvYWRlcjo6c3RhcnRMb2FkaW5nTWFpblJlc291
cmNlKToKKworICAgICAgICAgICAgU2V0IHRoZSByZXF1ZXN0ZXIuCisKKyAgICAgICAgKiBsb2Fk
ZXIvY2FjaGUvQ2FjaGVkUmF3UmVzb3VyY2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2FjaGVk
UmF3UmVzb3VyY2U6OkNhY2hlZFJhd1Jlc291cmNlKToKKyAgICAgICAgKiBwYWdlL0RpYWdub3N0
aWNMb2dnaW5nS2V5cy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEaWFnbm9zdGljTG9nZ2luZ0tl
eXM6OnN0cmVhbWluZ01lZGlhKToKKyAgICAgICAgKiBwYWdlL0RpYWdub3N0aWNMb2dnaW5nS2V5
cy5oOgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VSZXF1ZXN0QmFzZS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3RCYXNlOjphZG9wdCk6CisgICAgICAg
IChXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3RCYXNlOjpjb3B5RGF0YSk6CisgICAgICAgIChXZWJD
b3JlOjplcXVhbElnbm9yaW5nSGVhZGVyRmllbGRzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3
b3JrL1Jlc291cmNlUmVxdWVzdEJhc2UuaDoKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlUmVx
dWVzdEJhc2U6OnJlcXVlc3Rlcik6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3RC
YXNlOjpzZXRSZXF1ZXN0ZXIpOgorCisgICAgICAgICAgICBBZGQgcmVxdWVzdGVyIHR5cGUgdG8g
dGhlIHJlcXVlc3Qgb2JqZWN0LiBDdXJyZW50bHkgdGhpcyBpcyBtYWluIHJlc291cmNlLCB4aHIg
b3IgdW5zcGVjaWZpZWQuCisKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdEJhc2U6
OmVuY29kZVdpdGhvdXRQbGF0Zm9ybURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VS
ZXF1ZXN0QmFzZTo6ZGVjb2RlV2l0aG91dFBsYXRmb3JtRGF0YSk6CisgICAgICAgICogcGxhdGZv
cm0vbmV0d29yay9jZi9SZXNvdXJjZVJlcXVlc3QuaDoKKyAgICAgICAgKFdlYkNvcmU6OlJlc291
cmNlUmVxdWVzdDo6ZGVwcmVjYXRlZFNldE1haW5SZXNvdXJjZVJlcXVlc3QpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0OjpkZXByZWNhdGVkSXNNYWluUmVzb3Vy
Y2VSZXF1ZXN0KTogRGVsZXRlZC4KKworICAgICAgICAgICAgUmVwbGFjZSB0aGlzIGlPUyBvbmx5
IGZpZWxkIHdpdGggc2hhcmVkIG1lY2hhbmlzbS4KKworICAgICAgICAqIHBsYXRmb3JtL25ldHdv
cmsvaW9zL1F1aWNrTG9vay5tbToKKyAgICAgICAgKFdlYkNvcmU6OlF1aWNrTG9va0hhbmRsZTo6
Y3JlYXRlKToKKyAgICAgICAgKiB4bWwvWE1MSHR0cFJlcXVlc3QuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6WE1MSHR0cFJlcXVlc3Q6OmNyZWF0ZVJlcXVlc3QpOgorCisgICAgICAgICAgICBTZXQg
dGhlIHJlcXVlc3Rlci4KKwogMjAxNS0wNC0yNyAgQ3NhYmEgT3N6dHJvZ29uw6FjICA8b3NzeUB3
ZWJraXQub3JnPgogCiAgICAgICAgIEZpeCB0aGUgIUVOQUJMRShDU1NfR1JJRF9MQVlPVVQpIGJ1
aWxkIGFmdGVyIHIxODMzNzAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9Eb2N1bWVudExv
YWRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvbG9hZGVyL0RvY3VtZW50TG9h
ZGVyLmNwcAkocmV2aXNpb24gMTgzMzg4KQorKysgU291cmNlL1dlYkNvcmUvbG9hZGVyL0RvY3Vt
ZW50TG9hZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTM0LDExICs5MzQsNiBAQCB2b2lkIERv
Y3VtZW50TG9hZGVyOjpjbGVhck1haW5SZXNvdXJjZUxvCiB7CiAgICAgbV9sb2FkaW5nTWFpblJl
c291cmNlID0gZmFsc2U7CiAKLSNpZiBQTEFURk9STShJT1MpCi0gICAgLy8gRklYTUU6IFJlbW92
ZSBQTEFURk9STShJT1MpLWd1YXJkIG9uY2Ugd2UgdXBzdHJlYW0gdGhlIGlPUyBjaGFuZ2VzIHRv
IFJlc291cmNlUmVxdWVzdC5oLgotICAgIG1fcmVxdWVzdC5kZXByZWNhdGVkU2V0TWFpblJlc291
cmNlUmVxdWVzdChmYWxzZSk7Ci0jZW5kaWYKLQogICAgIGlmICh0aGlzID09IGZyYW1lTG9hZGVy
KCktPmFjdGl2ZURvY3VtZW50TG9hZGVyKCkpCiAgICAgICAgIGNoZWNrTG9hZENvbXBsZXRlKCk7
CiB9CkBAIC0xNDAzLDEyICsxMzk4LDkgQEAgdm9pZCBEb2N1bWVudExvYWRlcjo6c3RhcnRMb2Fk
aW5nTWFpblJlcwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0jaWYgUExBVEZPUk0oSU9TKQot
ICAgIC8vIEZJWE1FOiBSZW1vdmUgUExBVEZPUk0oSU9TKS1ndWFyZCBvbmNlIHdlIHVwc3RyZWFt
IHRoZSBpT1MgY2hhbmdlcyB0byBSZXNvdXJjZVJlcXVlc3QuaC4KLSAgICBtX3JlcXVlc3QuZGVw
cmVjYXRlZFNldE1haW5SZXNvdXJjZVJlcXVlc3QodHJ1ZSk7Ci0jZW5kaWYKLQogICAgIFJlc291
cmNlUmVxdWVzdCByZXF1ZXN0KG1fcmVxdWVzdCk7CisgICAgcmVxdWVzdC5zZXRSZXF1ZXN0ZXIo
UmVzb3VyY2VSZXF1ZXN0OjpSZXF1ZXN0ZXI6Ok1haW4pOworICAgIAogICAgIHN0YXRpYyBOZXZl
ckRlc3Ryb3llZDxSZXNvdXJjZUxvYWRlck9wdGlvbnM+IG1haW5SZXNvdXJjZUxvYWRPcHRpb25z
KFNlbmRDYWxsYmFja3MsIFNuaWZmQ29udGVudCwgQnVmZmVyRGF0YSwgQWxsb3dTdG9yZWRDcmVk
ZW50aWFscywgQXNrQ2xpZW50Rm9yQWxsQ3JlZGVudGlhbHMsIFNraXBTZWN1cml0eUNoZWNrLCBV
c2VEZWZhdWx0T3JpZ2luUmVzdHJpY3Rpb25zRm9yVHlwZSwgSW5jbHVkZUNlcnRpZmljYXRlSW5m
byk7CiAgICAgQ2FjaGVkUmVzb3VyY2VSZXF1ZXN0IGNhY2hlZFJlc291cmNlUmVxdWVzdChyZXF1
ZXN0LCBtYWluUmVzb3VyY2VMb2FkT3B0aW9ucyk7CiAgICAgY2FjaGVkUmVzb3VyY2VSZXF1ZXN0
LnNldEluaXRpYXRvcigqdGhpcyk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUv
Q2FjaGVkUmF3UmVzb3VyY2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xvYWRl
ci9jYWNoZS9DYWNoZWRSYXdSZXNvdXJjZS5jcHAJKHJldmlzaW9uIDE4MzM4OCkKKysrIFNvdXJj
ZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRSYXdSZXNvdXJjZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTQyLDcgKzQyLDYgQEAgQ2FjaGVkUmF3UmVzb3VyY2U6OkNhY2hlZFJhd1Jlc291cmNl
KFJlcwogICAgICwgbV9pZGVudGlmaWVyKDApCiAgICAgLCBtX2FsbG93RW5jb2RlZERhdGFSZXBs
YWNlbWVudCh0cnVlKQogewotICAgIC8vIEZJWE1FOiBUaGUgd3JvbmcgQ2FjaGVkUmVzb3VyY2U6
OlR5cGUgaGVyZSBtYXkgY2F1c2UgYSBiYWQgY2FzdCBlbHNld2hlcmUuCiAgICAgQVNTRVJUKGlz
TWFpbk9yUmF3UmVzb3VyY2UoKSk7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvRGlh
Z25vc3RpY0xvZ2dpbmdLZXlzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdl
L0RpYWdub3N0aWNMb2dnaW5nS2V5cy5jcHAJKHJldmlzaW9uIDE4MzM4OCkKKysrIFNvdXJjZS9X
ZWJDb3JlL3BhZ2UvRGlhZ25vc3RpY0xvZ2dpbmdLZXlzLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzczLDYgKzM3MywxMSBAQCBTdHJpbmcgRGlhZ25vc3RpY0xvZ2dpbmdLZXlzOjpzb3VyY2VLZXko
CiAgICAgcmV0dXJuIEFTQ0lJTGl0ZXJhbCgic291cmNlS2V5Iik7CiB9CiAKK1N0cmluZyBEaWFn
bm9zdGljTG9nZ2luZ0tleXM6OnN0cmVhbWluZ01lZGlhKCkKK3sKKyAgICByZXR1cm4gQVNDSUlM
aXRlcmFsKCJzdHJlYW1pbmdNZWRpYSIpOworfQorCiBTdHJpbmcgRGlhZ25vc3RpY0xvZ2dpbmdL
ZXlzOjpzdHlsZVNoZWV0S2V5KCkKIHsKICAgICByZXR1cm4gQVNDSUlMaXRlcmFsKCJzdHlsZVNo
ZWV0Iik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL0RpYWdub3N0aWNMb2dnaW5nS2V5cy5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvRGlhZ25vc3RpY0xvZ2dpbmdLZXlz
LmgJKHJldmlzaW9uIDE4MzM4OCkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvRGlhZ25vc3RpY0xv
Z2dpbmdLZXlzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEwNiw2ICsxMDYsNyBAQCBwdWJsaWM6CiAg
ICAgc3RhdGljIFN0cmluZyBzYW1lTG9hZEtleSgpOwogICAgIHN0YXRpYyBTdHJpbmcgc2NyaXB0
S2V5KCk7CiAgICAgc3RhdGljIFN0cmluZyBzb3VyY2VLZXkoKTsKKyAgICBXRUJDT1JFX0VYUE9S
VCBzdGF0aWMgU3RyaW5nIHN0cmVhbWluZ01lZGlhKCk7CiAgICAgc3RhdGljIFN0cmluZyBzdHls
ZVNoZWV0S2V5KCk7CiAgICAgc3RhdGljIFN0cmluZyBzdmdEb2N1bWVudEtleSgpOwogICAgIFdF
QkNPUkVfRVhQT1JUIHN0YXRpYyBTdHJpbmcgdW5jYWNoZWFibGVTdGF0dXNDb2RlS2V5KCk7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlUmVxdWVzdEJhc2Uu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3Vy
Y2VSZXF1ZXN0QmFzZS5jcHAJKHJldmlzaW9uIDE4MzM4OCkKKysrIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL25ldHdvcmsvUmVzb3VyY2VSZXF1ZXN0QmFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTU3LDYgKzU3LDcgQEAgc3RkOjp1bmlxdWVfcHRyPFJlc291cmNlUmVxdWVzdD4gUmVzb3VyYwog
ICAgIHJlcXVlc3QtPnNldEZpcnN0UGFydHlGb3JDb29raWVzKGRhdGEtPm1fZmlyc3RQYXJ0eUZv
ckNvb2tpZXMpOwogICAgIHJlcXVlc3QtPnNldEhUVFBNZXRob2QoZGF0YS0+bV9odHRwTWV0aG9k
KTsKICAgICByZXF1ZXN0LT5zZXRQcmlvcml0eShkYXRhLT5tX3ByaW9yaXR5KTsKKyAgICByZXF1
ZXN0LT5zZXRSZXF1ZXN0ZXIoZGF0YS0+bV9yZXF1ZXN0ZXIpOwogCiAgICAgcmVxdWVzdC0+dXBk
YXRlUmVzb3VyY2VSZXF1ZXN0KCk7CiAgICAgcmVxdWVzdC0+bV9odHRwSGVhZGVyRmllbGRzLmFk
b3B0KFdURjo6bW92ZShkYXRhLT5tX2h0dHBIZWFkZXJzKSk7CkBAIC05MCw2ICs5MSw3IEBAIHN0
ZDo6dW5pcXVlX3B0cjxDcm9zc1RocmVhZFJlc291cmNlUmVxdWUKICAgICBkYXRhLT5tX2h0dHBN
ZXRob2QgPSBodHRwTWV0aG9kKCkuaXNvbGF0ZWRDb3B5KCk7CiAgICAgZGF0YS0+bV9odHRwSGVh
ZGVycyA9IGh0dHBIZWFkZXJGaWVsZHMoKS5jb3B5RGF0YSgpOwogICAgIGRhdGEtPm1fcHJpb3Jp
dHkgPSBwcmlvcml0eSgpOworICAgIGRhdGEtPm1fcmVxdWVzdGVyID0gbV9yZXF1ZXN0ZXI7CiAK
ICAgICBkYXRhLT5tX3Jlc3BvbnNlQ29udGVudERpc3Bvc2l0aW9uRW5jb2RpbmdGYWxsYmFja0Fy
cmF5LnJlc2VydmVJbml0aWFsQ2FwYWNpdHkobV9yZXNwb25zZUNvbnRlbnREaXNwb3NpdGlvbkVu
Y29kaW5nRmFsbGJhY2tBcnJheS5zaXplKCkpOwogICAgIHNpemVfdCBlbmNvZGluZ0FycmF5U2l6
ZSA9IG1fcmVzcG9uc2VDb250ZW50RGlzcG9zaXRpb25FbmNvZGluZ0ZhbGxiYWNrQXJyYXkuc2l6
ZSgpOwpAQCAtNDk2LDYgKzQ5OCw5IEBAIGJvb2wgZXF1YWxJZ25vcmluZ0hlYWRlckZpZWxkcyhj
b25zdCBSZXMKICAgICBpZiAoYS5wcmlvcml0eSgpICE9IGIucHJpb3JpdHkoKSkKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogCisgICAgaWYgKGEucmVxdWVzdGVyKCkgIT0gYi5yZXF1ZXN0ZXIoKSkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworCiAgICAgRm9ybURhdGEqIGZvcm1EYXRhQSA9IGEuaHR0
cEJvZHkoKTsKICAgICBGb3JtRGF0YSogZm9ybURhdGFCID0gYi5odHRwQm9keSgpOwogICAgIApJ
bmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZVJlcXVlc3RCYXNl
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJj
ZVJlcXVlc3RCYXNlLmgJKHJldmlzaW9uIDE4MzM4OCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL25ldHdvcmsvUmVzb3VyY2VSZXF1ZXN0QmFzZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNDcs
NiArMTQ3LDEwIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgYm9vbCBoaWRkZW5Gcm9t
SW5zcGVjdG9yKCkgY29uc3QgeyByZXR1cm4gbV9oaWRkZW5Gcm9tSW5zcGVjdG9yOyB9CiAgICAg
ICAgIHZvaWQgc2V0SGlkZGVuRnJvbUluc3BlY3Rvcihib29sIGhpZGRlbkZyb21JbnNwZWN0b3Ip
IHsgbV9oaWRkZW5Gcm9tSW5zcGVjdG9yID0gaGlkZGVuRnJvbUluc3BlY3RvcjsgfQogCisgICAg
ICAgIGVudW0gY2xhc3MgUmVxdWVzdGVyIHsgVW5zcGVjaWZpZWQsIE1haW4sIFhIUiB9OworICAg
ICAgICBXRUJDT1JFX0VYUE9SVCBSZXF1ZXN0ZXIgcmVxdWVzdGVyKCkgY29uc3QgeyByZXR1cm4g
bV9yZXF1ZXN0ZXI7IH0KKyAgICAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRSZXF1ZXN0ZXIo
UmVxdWVzdGVyIHJlcXVlc3RlcikgeyBtX3JlcXVlc3RlciA9IHJlcXVlc3RlcjsgfQorCiAjaWYg
IVBMQVRGT1JNKENPQ09BKQogICAgICAgICBib29sIGVuY29kaW5nUmVxdWlyZXNQbGF0Zm9ybURh
dGEoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CiAjZW5kaWYKQEAgLTIyNCw2ICsyMjgsNyBAQCBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHVuc2lnbmVkIG1fcmVwb3J0UmF3SGVhZGVycyA6
IDE7CiAgICAgICAgIHVuc2lnbmVkIG1faGlkZGVuRnJvbUluc3BlY3RvciA6IDE7CiAgICAgICAg
IHVuc2lnbmVkIG1fcHJpb3JpdHkgOiA0OworICAgICAgICBSZXF1ZXN0ZXIgbV9yZXF1ZXN0ZXIg
eyBSZXF1ZXN0ZXI6OlVuc3BlY2lmaWVkIH07CiAKICAgICBwcml2YXRlOgogICAgICAgICBjb25z
dCBSZXNvdXJjZVJlcXVlc3QmIGFzUmVzb3VyY2VSZXF1ZXN0KCkgY29uc3Q7CkBAIC0yNTUsNiAr
MjYwLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBSZWZQdHI8Rm9ybURhdGE+IG1f
aHR0cEJvZHk7CiAgICAgICAgIGJvb2wgbV9hbGxvd0Nvb2tpZXM7CiAgICAgICAgIFJlc291cmNl
TG9hZFByaW9yaXR5IG1fcHJpb3JpdHk7CisgICAgICAgIFJlc291cmNlUmVxdWVzdEJhc2U6OlJl
cXVlc3RlciBtX3JlcXVlc3RlcjsKICAgICB9OwogICAgIAogICAgIHVuc2lnbmVkIGluaXRpYWxp
emVNYXhpbXVtSFRUUENvbm5lY3Rpb25Db3VudFBlckhvc3QoKTsKQEAgLTI3Niw2ICsyODIsNyBA
QCB2b2lkIFJlc291cmNlUmVxdWVzdEJhc2U6OmVuY29kZVdpdGhvdXRQCiAgICAgZW5jb2Rlci5l
bmNvZGVFbnVtKG1fY2FjaGVQb2xpY3kpOwogICAgIGVuY29kZXIgPDwgbV9hbGxvd0Nvb2tpZXM7
CiAgICAgZW5jb2Rlci5lbmNvZGVFbnVtKG1fcHJpb3JpdHkpOworICAgIGVuY29kZXIuZW5jb2Rl
RW51bShtX3JlcXVlc3Rlcik7CiB9CiAKIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+CkBAIC0zMTgs
NiArMzI1LDkgQEAgYm9vbCBSZXNvdXJjZVJlcXVlc3RCYXNlOjpkZWNvZGVXaXRob3V0UAogICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICAgbV9wcmlvcml0eSA9IHByaW9yaXR5OwogCisgICAgaWYg
KCFkZWNvZGVyLmRlY29kZUVudW0obV9yZXF1ZXN0ZXIpKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bmV0d29yay9jZi9SZXNvdXJjZVJlcXVlc3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9uZXR3b3JrL2NmL1Jlc291cmNlUmVxdWVzdC5oCShyZXZpc2lvbiAxODMzODgp
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2NmL1Jlc291cmNlUmVxdWVzdC5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xMTgsMTcgKzExOCw2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAogICAgICAgICBzdGF0aWMgYm9vbCByZXNvdXJjZVByaW9yaXRpZXNFbmFibGVkKCk7CiAKLSNp
ZiBQTEFURk9STShJT1MpCi0gICAgICAgIC8vIEZJWE1FOiBkZXByZWNhdGVkSXNNYWluUmVzb3Vy
Y2VSZXF1ZXN0KCkgZG9lcyBub3QgcmV0dXJuIHRoZSBjb3JyZWN0IHZhbHVlIGlmIHRoZSBSZXNv
dXJjZVJlcXVlc3QgaGFzIGJlZW4KLSAgICAgICAgLy8gZGVzZXJpYWxpemVkIGZyb20gYW4gSVBD
IG1lc3NhZ2UuIEFzIGEgcmVzdWx0IHRoaXMgZnVuY3Rpb24gY2FuIG9ubHkgYmUgcmVsaWVkIG9u
IHdoZW4gbmV0d29ya2luZyBpcyBub3QgaW4gYQotICAgICAgICAvLyBzZXBhcmF0ZSBwcm9jZXNz
LgotICAgICAgICB2b2lkIGRlcHJlY2F0ZWRTZXRNYWluUmVzb3VyY2VSZXF1ZXN0KGJvb2wgaXNN
YWluUmVzb3VyY2VSZXF1ZXN0KSBjb25zdCB7IG1fbWFpblJlc291cmNlUmVxdWVzdCA9IGlzTWFp
blJlc291cmNlUmVxdWVzdDsgfQotICAgICAgICBib29sIGRlcHJlY2F0ZWRJc01haW5SZXNvdXJj
ZVJlcXVlc3QoKSBjb25zdCB7IHJldHVybiBtX21haW5SZXNvdXJjZVJlcXVlc3Q7IH0KLQotICAg
IHByaXZhdGU6Ci0gICAgICAgIG11dGFibGUgYm9vbCBtX21haW5SZXNvdXJjZVJlcXVlc3QgPSBm
YWxzZTsKLSNlbmRpZgotCiAgICAgcHJpdmF0ZToKICAgICAgICAgZnJpZW5kIGNsYXNzIFJlc291
cmNlUmVxdWVzdEJhc2U7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsv
aW9zL1F1aWNrTG9vay5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9u
ZXR3b3JrL2lvcy9RdWlja0xvb2subW0JKHJldmlzaW9uIDE4MzM4OCkKKysrIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL25ldHdvcmsvaW9zL1F1aWNrTG9vay5tbQkod29ya2luZyBjb3B5KQpAQCAt
NDU5LDcgKzQ1OSw3IEBAIFF1aWNrTG9va0hhbmRsZTo6UXVpY2tMb29rSGFuZGxlKE5TVVJMICoK
IHN0ZDo6dW5pcXVlX3B0cjxRdWlja0xvb2tIYW5kbGU+IFF1aWNrTG9va0hhbmRsZTo6Y3JlYXRl
KFJlc291cmNlSGFuZGxlKiBoYW5kbGUsIE5TVVJMQ29ubmVjdGlvbiAqY29ubmVjdGlvbiwgTlNV
UkxSZXNwb25zZSAqbnNSZXNwb25zZSwgaWQgZGVsZWdhdGUpCiB7CiAgICAgQVNTRVJUX0FSRyho
YW5kbGUsIGhhbmRsZSk7Ci0gICAgaWYgKCFoYW5kbGUtPmZpcnN0UmVxdWVzdCgpLmRlcHJlY2F0
ZWRJc01haW5SZXNvdXJjZVJlcXVlc3QoKSB8fCAhW1dlYkNvcmU6OlFMUHJldmlld0dldFN1cHBv
cnRlZE1JTUVUeXBlc1NldCgpIGNvbnRhaW5zT2JqZWN0Oltuc1Jlc3BvbnNlIE1JTUVUeXBlXV0p
CisgICAgaWYgKGhhbmRsZS0+Zmlyc3RSZXF1ZXN0KCkucmVxdWVzdGVyKCkgIT0gUmVzb3VyY2VS
ZXF1ZXN0OjpSZXF1ZXN0ZXI6Ok1haW4gfHwgIVtXZWJDb3JlOjpRTFByZXZpZXdHZXRTdXBwb3J0
ZWRNSU1FVHlwZXNTZXQoKSBjb250YWluc09iamVjdDpbbnNSZXNwb25zZSBNSU1FVHlwZV1dKQog
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAgIHN0ZDo6dW5pcXVlX3B0cjxRdWlja0xvb2tI
YW5kbGU+IHF1aWNrTG9va0hhbmRsZShuZXcgUXVpY2tMb29rSGFuZGxlKFtoYW5kbGUtPmZpcnN0
UmVxdWVzdCgpLm5zVVJMUmVxdWVzdChEb05vdFVwZGF0ZUhUVFBCb2R5KSBVUkxdLCBjb25uZWN0
aW9uLCBuc1Jlc3BvbnNlLCBkZWxlZ2F0ZSkpOwpAQCAtNDcxLDcgKzQ3MSw3IEBAIHN0ZDo6dW5p
cXVlX3B0cjxRdWlja0xvb2tIYW5kbGU+IFF1aWNrTG8KIHN0ZDo6dW5pcXVlX3B0cjxRdWlja0xv
b2tIYW5kbGU+IFF1aWNrTG9va0hhbmRsZTo6Y3JlYXRlKFJlc291cmNlSGFuZGxlKiBoYW5kbGUs
IFN5bmNocm9ub3VzUmVzb3VyY2VIYW5kbGVDRlVSTENvbm5lY3Rpb25EZWxlZ2F0ZSogY29ubmVj
dGlvbkRlbGVnYXRlLCBDRlVSTFJlc3BvbnNlUmVmIGNmUmVzcG9uc2UpCiB7CiAgICAgQVNTRVJU
X0FSRyhoYW5kbGUsIGhhbmRsZSk7Ci0gICAgaWYgKCFoYW5kbGUtPmZpcnN0UmVxdWVzdCgpLmRl
cHJlY2F0ZWRJc01haW5SZXNvdXJjZVJlcXVlc3QoKSB8fCAhW1dlYkNvcmU6OlFMUHJldmlld0dl
dFN1cHBvcnRlZE1JTUVUeXBlc1NldCgpIGNvbnRhaW5zT2JqZWN0OihOU1N0cmluZyAqKUNGVVJM
UmVzcG9uc2VHZXRNSU1FVHlwZShjZlJlc3BvbnNlKV0pCisgICAgaWYgKGhhbmRsZS0+Zmlyc3RS
ZXF1ZXN0KCkucmVxdWVzdGVyKCkgIT0gUmVzb3VyY2VSZXF1ZXN0OjpSZXF1ZXN0ZXI6Ok1haW4g
fHwgIVtXZWJDb3JlOjpRTFByZXZpZXdHZXRTdXBwb3J0ZWRNSU1FVHlwZXNTZXQoKSBjb250YWlu
c09iamVjdDooTlNTdHJpbmcgKilDRlVSTFJlc3BvbnNlR2V0TUlNRVR5cGUoY2ZSZXNwb25zZSld
KQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAgIE5TVVJMUmVzcG9uc2UgKm5zUmVzcG9u
c2UgPSBbTlNVUkxSZXNwb25zZSBfcmVzcG9uc2VXaXRoQ0ZVUkxSZXNwb25zZTpjZlJlc3BvbnNl
XTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3htbC9YTUxIdHRwUmVxdWVzdC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUveG1sL1hNTEh0dHBSZXF1ZXN0LmNwcAkocmV2aXNpb24gMTgz
Mzg4KQorKysgU291cmNlL1dlYkNvcmUveG1sL1hNTEh0dHBSZXF1ZXN0LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNzQ1LDYgKzc0NSw3IEBAIHZvaWQgWE1MSHR0cFJlcXVlc3Q6OmNyZWF0ZVJlcXVl
c3QoRXhjZXAKICAgICBtX3VwbG9hZEV2ZW50c0FsbG93ZWQgPSBtX3NhbWVPcmlnaW5SZXF1ZXN0
IHx8IHVwbG9hZEV2ZW50cyB8fCAhaXNTaW1wbGVDcm9zc09yaWdpbkFjY2Vzc1JlcXVlc3QobV9t
ZXRob2QsIG1fcmVxdWVzdEhlYWRlcnMpOwogCiAgICAgUmVzb3VyY2VSZXF1ZXN0IHJlcXVlc3Qo
bV91cmwpOworICAgIHJlcXVlc3Quc2V0UmVxdWVzdGVyKFJlc291cmNlUmVxdWVzdDo6UmVxdWVz
dGVyOjpYSFIpOwogICAgIHJlcXVlc3Quc2V0SFRUUE1ldGhvZChtX21ldGhvZCk7CiAKICAgICBp
ZiAobV9yZXF1ZXN0RW50aXR5Qm9keSkgewpJbmRleDogU291cmNlL1dlYktpdDIvQ2hhbmdlTG9n
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwkocmV2aXNpb24gMTgzMzk0
KQorKysgU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEs
NDAgQEAKKzIwMTUtMDQtMjcgIEFudHRpIEtvaXZpc3RvICA8YW50dGlAYXBwbGUuY29tPgorCisg
ICAgICAgIE5ldHdvcmsgQ2FjaGU6IERpc2sgY2FjaGUgZ2V0dGluZyBmaWxsZWQgYnkgWW91VHVi
ZSB2aWRlbyBkYXRhCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xNDQyNTkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBNU0UgbWVkaWEgaXMgbG9hZGVkIHZpYSBYSFIgYW5kIHRlbmRzIHRvIGV2ZW50dWFsbHkg
ZmlsbCB0aGUgY2FjaGUuCisKKyAgICAgICAgWW91VHViZSBzZXJ2ZXMgdGhlIG1lZGlhIGNodW5r
cyBjYWNoZWFibGUsIGhvd2V2ZXIgdGhleSBhcmUgcmFyZWx5IChpZiBldmVyKSByZXVzZWQuCisg
ICAgICAgIFdlIGNhbiByZWR1Y2UgZGlzayB3cml0ZXMgYW5kIGtlZXAgbW9yZSB1c2VmdWwgcmVz
b3VyY2VzIGFyb3VuZCBieSBub3QgY2FjaGluZyB0aGVtCisKKyAgICAgICAgKiBOZXR3b3JrUHJv
Y2Vzcy9OZXR3b3JrUmVzb3VyY2VMb2FkZXIuY3BwOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3Jr
UmVzb3VyY2VMb2FkZXI6OmRpZFJlY2VpdmVSZXNwb25zZUFzeW5jKToKKyAgICAgICAgKFdlYktp
dDo6TmV0d29ya1Jlc291cmNlTG9hZGVyOjpkaWRSZXRyaWV2ZUNhY2hlRW50cnkpOgorICAgICAg
ICAqIE5ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZS5jcHA6CisgICAgICAgIChXZWJL
aXQ6Ok5ldHdvcmtDYWNoZTo6bWFrZVN0b3JlRGVjaXNpb24pOgorCisgICAgICAgICAgICBEb24n
dCBzdG9yZSBpZiB0aGUgcmVxdWVzdGVyIGlzIFhIUiBhbmQgcmVzcG9uc2UgaGFzIHZpZGVvIG9y
IGF1ZGlvIGNvbnRlbnQgdHlwZS4KKworICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL2NhY2hlL05l
dHdvcmtDYWNoZS5oOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNo
ZVN0YXRpc3RpY3MuY3BwOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FjaGU6OnN0b3JlRGVj
aXNpb25Ub0RpYWdub3N0aWNLZXkpOgorICAgICAgICAqIFNoYXJlZC9OZXR3b3JrL05ldHdvcmtS
ZXNvdXJjZUxvYWRQYXJhbWV0ZXJzLmNwcDoKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Jlc291
cmNlTG9hZFBhcmFtZXRlcnM6Ok5ldHdvcmtSZXNvdXJjZUxvYWRQYXJhbWV0ZXJzKToKKyAgICAg
ICAgKFdlYktpdDo6TmV0d29ya1Jlc291cmNlTG9hZFBhcmFtZXRlcnM6OmVuY29kZSk6CisgICAg
ICAgIChXZWJLaXQ6Ok5ldHdvcmtSZXNvdXJjZUxvYWRQYXJhbWV0ZXJzOjpkZWNvZGUpOgorICAg
ICAgICAqIFNoYXJlZC9OZXR3b3JrL05ldHdvcmtSZXNvdXJjZUxvYWRQYXJhbWV0ZXJzLmg6CisK
KyAgICAgICAgICAgIFRoZSByZXF1ZXN0ZXIgdHlwZSBpcyBub3cgcGFydCBvZiB0aGUgUmVzb3Vy
Y2VSZXF1ZXN0LCBubyBuZWVkIGZvciBzZXBhcmF0ZSBwYXJhbWV0ZXIuCisKKyAgICAgICAgKiBT
aGFyZWQvbWFjL1dlYkNvcmVBcmd1bWVudENvZGVyc01hYy5tbToKKyAgICAgICAgKElQQzo6QXJn
dW1lbnRDb2RlcjxSZXNvdXJjZVJlcXVlc3Q+OjplbmNvZGVQbGF0Zm9ybURhdGEpOgorICAgICAg
ICAoSVBDOjpBcmd1bWVudENvZGVyPFJlc291cmNlUmVxdWVzdD46OmRlY29kZVBsYXRmb3JtRGF0
YSk6CisgICAgICAgICogV2ViUHJvY2Vzcy9OZXR3b3JrL1dlYlJlc291cmNlTG9hZFNjaGVkdWxl
ci5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlJlc291cmNlTG9hZFNjaGVkdWxlcjo6c2NoZWR1
bGVMb2FkKToKKwogMjAxNS0wNC0yNyAgQ3NhYmEgT3N6dHJvZ29uw6FjICA8b3NzeUB3ZWJraXQu
b3JnPgogCiAgICAgICAgIFtFRkxdIFRlc3RXZWJLaXRBUEkncyBmb3J3YXJkaW5nIGhlYWRlciBn
ZW5lcmF0b3Igc2hvdWxkIGRlcGVuZCBvbiBXZWJLaXQyJ3MgZ2VuZXJhdG9yCkluZGV4OiBTb3Vy
Y2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUmVzb3VyY2VMb2FkZXIuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtSZXNvdXJjZUxv
YWRlci5jcHAJKHJldmlzaW9uIDE4MzM4OCkKKysrIFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9j
ZXNzL05ldHdvcmtSZXNvdXJjZUxvYWRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI1MywxNyAr
MjUzLDE4IEBAIHZvaWQgTmV0d29ya1Jlc291cmNlTG9hZGVyOjpkaWRSZWNlaXZlUmUKICAgICBz
aG91bGRTZW5kRGlkUmVjZWl2ZVJlc3BvbnNlID0gIW1fY2FjaGVFbnRyeUZvclZhbGlkYXRpb247
CiAjZW5kaWYKIAorICAgIGJvb2wgc2hvdWxkV2FpdENvbnRpbnVlRGlkUmVjZWl2ZVJlc3BvbnNl
ID0gb3JpZ2luYWxSZXF1ZXN0KCkucmVxdWVzdGVyKCkgPT0gUmVzb3VyY2VSZXF1ZXN0OjpSZXF1
ZXN0ZXI6Ok1haW47CiAgICAgaWYgKHNob3VsZFNlbmREaWRSZWNlaXZlUmVzcG9uc2UpIHsKICAg
ICAgICAgaWYgKGlzU3luY2hyb25vdXMoKSkKICAgICAgICAgICAgIG1fc3luY2hyb25vdXNMb2Fk
RGF0YS0+cmVzcG9uc2UgPSBtX3Jlc3BvbnNlOwogICAgICAgICBlbHNlIHsKLSAgICAgICAgICAg
IGlmICghc2VuZEFib3J0aW5nT25GYWlsdXJlKE1lc3NhZ2VzOjpXZWJSZXNvdXJjZUxvYWRlcjo6
RGlkUmVjZWl2ZVJlc3BvbnNlKG1fcmVzcG9uc2UsIG1fcGFyYW1ldGVycy5pc01haW5SZXNvdXJj
ZSkpKQorICAgICAgICAgICAgaWYgKCFzZW5kQWJvcnRpbmdPbkZhaWx1cmUoTWVzc2FnZXM6Oldl
YlJlc291cmNlTG9hZGVyOjpEaWRSZWNlaXZlUmVzcG9uc2UobV9yZXNwb25zZSwgc2hvdWxkV2Fp
dENvbnRpbnVlRGlkUmVjZWl2ZVJlc3BvbnNlKSkpCiAgICAgICAgICAgICAgICAgcmV0dXJuOwog
ICAgICAgICB9CiAgICAgfQogCiAgICAgLy8gRm9yIG1haW4gcmVzb3VyY2VzLCB0aGUgd2ViIHBy
b2Nlc3MgaXMgcmVzcG9uc2libGUgZm9yIHNlbmRpbmcgYmFjayBhIE5ldHdvcmtSZXNvdXJjZUxv
YWRlcjo6Q29udGludWVEaWRSZWNlaXZlUmVzcG9uc2UgbWVzc2FnZS4KLSAgICBib29sIHNob3Vs
ZENvbnRpbnVlRGlkUmVjZWl2ZVJlc3BvbnNlID0gIW1fcGFyYW1ldGVycy5pc01haW5SZXNvdXJj
ZTsKKyAgICBib29sIHNob3VsZENvbnRpbnVlRGlkUmVjZWl2ZVJlc3BvbnNlID0gIXNob3VsZFdh
aXRDb250aW51ZURpZFJlY2VpdmVSZXNwb25zZTsKICNpZiBFTkFCTEUoTkVUV09SS19DQUNIRSkK
ICAgICBzaG91bGRDb250aW51ZURpZFJlY2VpdmVSZXNwb25zZSA9IHNob3VsZENvbnRpbnVlRGlk
UmVjZWl2ZVJlc3BvbnNlIHx8IG1fY2FjaGVFbnRyeUZvclZhbGlkYXRpb247CiAjZW5kaWYKQEAg
LTU0Myw3ICs1NDQsOCBAQCB2b2lkIE5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6ZGlkUmV0cmlldmVD
CiAgICAgICAgIG1fc3luY2hyb25vdXNMb2FkRGF0YS0+cmVzcG9uc2UgPSBlbnRyeS0+cmVzcG9u
c2UoKTsKICAgICAgICAgc2VuZFJlcGx5VG9TeW5jaHJvbm91c1JlcXVlc3QoKm1fc3luY2hyb25v
dXNMb2FkRGF0YSwgZW50cnktPmJ1ZmZlcigpKTsKICAgICB9IGVsc2UgewotICAgICAgICBzZW5k
QWJvcnRpbmdPbkZhaWx1cmUoTWVzc2FnZXM6OldlYlJlc291cmNlTG9hZGVyOjpEaWRSZWNlaXZl
UmVzcG9uc2UoZW50cnktPnJlc3BvbnNlKCksIG1fcGFyYW1ldGVycy5pc01haW5SZXNvdXJjZSkp
OworICAgICAgICBib29sIG5lZWRzQ29udGludWVEaWRSZWNlaXZlUmVzcG9uc2VNZXNzYWdlID0g
b3JpZ2luYWxSZXF1ZXN0KCkucmVxdWVzdGVyKCkgPT0gUmVzb3VyY2VSZXF1ZXN0OjpSZXF1ZXN0
ZXI6Ok1haW47CisgICAgICAgIHNlbmRBYm9ydGluZ09uRmFpbHVyZShNZXNzYWdlczo6V2ViUmVz
b3VyY2VMb2FkZXI6OkRpZFJlY2VpdmVSZXNwb25zZShlbnRyeS0+cmVzcG9uc2UoKSwgbmVlZHND
b250aW51ZURpZFJlY2VpdmVSZXNwb25zZU1lc3NhZ2UpKTsKIAogI2lmIEVOQUJMRShTSEFSRUFC
TEVfUkVTT1VSQ0UpCiAgICAgICAgIGlmICghZW50cnktPnNoYXJlYWJsZVJlc291cmNlSGFuZGxl
KCkuaXNOdWxsKCkpCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9O
ZXR3b3JrQ2FjaGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9j
ZXNzL2NhY2hlL05ldHdvcmtDYWNoZS5jcHAJKHJldmlzaW9uIDE4MzM4OCkKKysrIFNvdXJjZS9X
ZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTI5MCw4ICsyOTAsOCBAQCBzdGF0aWMgU3RvcmVEZWNpc2lvbiBtYWtlU3RvcmVEZWNp
c2lvbihjCiAgICAgICAgICAgICByZXR1cm4gU3RvcmVEZWNpc2lvbjo6Tm9EdWVUb0hUVFBTdGF0
dXNDb2RlOwogICAgIH0KIAotICAgIC8vIE1haW4gcmVzb3VyY2UgaGFzIFJlc291cmNlTG9hZFBy
aW9yaXR5VmVyeUhpZ2guCi0gICAgYm9vbCBzdG9yZVVuY29uZGl0aW9uYWxseUZvckhpc3RvcnlO
YXZpZ2F0aW9uID0gb3JpZ2luYWxSZXF1ZXN0LnByaW9yaXR5KCkgPT0gV2ViQ29yZTo6UmVzb3Vy
Y2VMb2FkUHJpb3JpdHlWZXJ5SGlnaDsKKyAgICBib29sIGlzTWFpblJlc291cmNlID0gb3JpZ2lu
YWxSZXF1ZXN0LnJlcXVlc3RlcigpID09IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdDo6UmVxdWVz
dGVyOjpNYWluOworICAgIGJvb2wgc3RvcmVVbmNvbmRpdGlvbmFsbHlGb3JIaXN0b3J5TmF2aWdh
dGlvbiA9IGlzTWFpblJlc291cmNlIHx8IG9yaWdpbmFsUmVxdWVzdC5wcmlvcml0eSgpID09IFdl
YkNvcmU6OlJlc291cmNlTG9hZFByaW9yaXR5VmVyeUhpZ2g7CiAgICAgaWYgKCFzdG9yZVVuY29u
ZGl0aW9uYWxseUZvckhpc3RvcnlOYXZpZ2F0aW9uKSB7CiAgICAgICAgIGF1dG8gbm93ID0gc3Rk
OjpjaHJvbm86OnN5c3RlbV9jbG9jazo6bm93KCk7CiAgICAgICAgIGJvb2wgaGFzTm9uWmVyb0xp
ZmV0aW1lID0gIXJlc3BvbnNlLmNhY2hlQ29udHJvbENvbnRhaW5zTm9DYWNoZSgpICYmIFdlYkNv
cmU6OmNvbXB1dGVGcmVzaG5lc3NMaWZldGltZUZvckhUVFBGYW1pbHkocmVzcG9uc2UsIG5vdykg
PiAwX21zOwpAQCAtMzAxLDYgKzMwMSwxMyBAQCBzdGF0aWMgU3RvcmVEZWNpc2lvbiBtYWtlU3Rv
cmVEZWNpc2lvbihjCiAgICAgICAgICAgICByZXR1cm4gU3RvcmVEZWNpc2lvbjo6Tm9EdWVUb1Vu
bGlrZWx5VG9SZXVzZTsKICAgICB9CiAKKyAgICAvLyBNZWRpYSBsb2FkZWQgdmlhIFhIUiBpcyBs
aWtlbHkgYmVpbmcgdXNlZCBmb3IgTVNFIHN0cmVhbWluZyAoWW91VHViZSBhbmQgTmV0ZmxpeCBm
b3IgZXhhbXBsZSkuCisgICAgLy8gU3RyZWFtaW5nIG1lZGlhIGZpbGxzIHRoZSBjYWNoZSBxdWlj
a2x5IGFuZCBpcyB1bmxpa2VseSB0byBiZSByZXVzZWQuCisgICAgYm9vbCBpc1hIUiA9IG9yaWdp
bmFsUmVxdWVzdC5yZXF1ZXN0ZXIoKSA9PSBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3Q6OlJlcXVl
c3Rlcjo6WEhSOworICAgIGJvb2wgaXNMaWtlbHlTdHJlYW1pbmdNZWRpYSA9IGlzWEhSICYmIChy
ZXNwb25zZS5taW1lVHlwZSgpLnN0YXJ0c1dpdGgoInZpZGVvLyIpIHx8IHJlc3BvbnNlLm1pbWVU
eXBlKCkuc3RhcnRzV2l0aCgiYXVkaW8vIikpOworICAgIGlmIChpc0xpa2VseVN0cmVhbWluZ01l
ZGlhKQorICAgICAgICByZXR1cm4gU3RvcmVEZWNpc2lvbjo6Tm9EdWVUb1N0cmVhbWluZ01lZGlh
OworCiAgICAgcmV0dXJuIFN0b3JlRGVjaXNpb246OlllczsKIH0KIApJbmRleDogU291cmNlL1dl
YktpdDIvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlLmgJKHJldmlz
aW9uIDE4MzM4OCkKKysrIFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdv
cmtDYWNoZS5oCSh3b3JraW5nIGNvcHkpCkBAIC03MSw3ICs3MSw4IEBAIGVudW0gY2xhc3MgU3Rv
cmVEZWNpc2lvbiB7CiAgICAgTm9EdWVUb05vU3RvcmVSZXNwb25zZSwKICAgICBOb0R1ZVRvSFRU
UFN0YXR1c0NvZGUsCiAgICAgTm9EdWVUb05vU3RvcmVSZXF1ZXN0LAotICAgIE5vRHVlVG9Vbmxp
a2VseVRvUmV1c2UKKyAgICBOb0R1ZVRvVW5saWtlbHlUb1JldXNlLAorICAgIE5vRHVlVG9TdHJl
YW1pbmdNZWRpYQogfTsKIAogZW51bSBjbGFzcyBVc2VEZWNpc2lvbiB7CkluZGV4OiBTb3VyY2Uv
V2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVTdGF0aXN0aWNzLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3Jr
Q2FjaGVTdGF0aXN0aWNzLmNwcAkocmV2aXNpb24gMTgzMzg4KQorKysgU291cmNlL1dlYktpdDIv
TmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlU3RhdGlzdGljcy5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTI0NCw2ICsyNDQsOCBAQCBzdGF0aWMgU3RyaW5nIHN0b3JlRGVjaXNpb25Ub0Rp
YWdub3N0aWNLCiAgICAgICAgIHJldHVybiBXZWJDb3JlOjpEaWFnbm9zdGljTG9nZ2luZ0tleXM6
OnVuY2FjaGVhYmxlU3RhdHVzQ29kZUtleSgpOwogICAgIGNhc2UgU3RvcmVEZWNpc2lvbjo6Tm9E
dWVUb1VubGlrZWx5VG9SZXVzZToKICAgICAgICAgcmV0dXJuIFdlYkNvcmU6OkRpYWdub3N0aWNM
b2dnaW5nS2V5czo6dW5saWtlbHlUb1JldXNlS2V5KCk7CisgICAgY2FzZSBTdG9yZURlY2lzaW9u
OjpOb0R1ZVRvU3RyZWFtaW5nTWVkaWE6CisgICAgICAgIHJldHVybiBXZWJDb3JlOjpEaWFnbm9z
dGljTG9nZ2luZ0tleXM6OnN0cmVhbWluZ01lZGlhKCk7CiAgICAgY2FzZSBTdG9yZURlY2lzaW9u
OjpZZXM6CiAgICAgICAgIC8vIEl0IHdhcyBzdG9yZWQgYnV0IGNvdWxkIG5vdCBiZSByZXRyaWV2
ZWQgc28gaXQgbXVzdCBoYXZlIGJlZW4gcHJ1bmVkIGZyb20gdGhlIGNhY2hlLgogICAgICAgICBy
ZXR1cm4gV2ViQ29yZTo6RGlhZ25vc3RpY0xvZ2dpbmdLZXlzOjpub0xvbmdlckluQ2FjaGVLZXko
KTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9OZXR3b3JrL05ldHdvcmtSZXNvdXJjZUxv
YWRQYXJhbWV0ZXJzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvTmV0
d29yay9OZXR3b3JrUmVzb3VyY2VMb2FkUGFyYW1ldGVycy5jcHAJKHJldmlzaW9uIDE4MzM4OCkK
KysrIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9OZXR3b3JrL05ldHdvcmtSZXNvdXJjZUxvYWRQYXJh
bWV0ZXJzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDUsNyArNDUsNiBAQCBOZXR3b3JrUmVzb3Vy
Y2VMb2FkUGFyYW1ldGVyczo6TmV0d29ya1JlCiAgICAgLCBhbGxvd1N0b3JlZENyZWRlbnRpYWxz
KERvTm90QWxsb3dTdG9yZWRDcmVkZW50aWFscykKICAgICAsIGNsaWVudENyZWRlbnRpYWxQb2xp
Y3koRG9Ob3RBc2tDbGllbnRGb3JBbnlDcmVkZW50aWFscykKICAgICAsIHNob3VsZENsZWFyUmVm
ZXJyZXJPbkhUVFBTVG9IVFRQUmVkaXJlY3QodHJ1ZSkKLSAgICAsIGlzTWFpblJlc291cmNlKGZh
bHNlKQogICAgICwgZGVmZXJzTG9hZGluZyhmYWxzZSkKICAgICAsIG5lZWRzQ2VydGlmaWNhdGVJ
bmZvKGZhbHNlKQogICAgICwgbWF4aW11bUJ1ZmZlcmluZ1RpbWUoMF9tcykKQEAgLTk0LDcgKzkz
LDYgQEAgdm9pZCBOZXR3b3JrUmVzb3VyY2VMb2FkUGFyYW1ldGVyczo6ZW5jbwogICAgIGVuY29k
ZXIuZW5jb2RlRW51bShhbGxvd1N0b3JlZENyZWRlbnRpYWxzKTsKICAgICBlbmNvZGVyLmVuY29k
ZUVudW0oY2xpZW50Q3JlZGVudGlhbFBvbGljeSk7CiAgICAgZW5jb2RlciA8PCBzaG91bGRDbGVh
clJlZmVycmVyT25IVFRQU1RvSFRUUFJlZGlyZWN0OwotICAgIGVuY29kZXIgPDwgaXNNYWluUmVz
b3VyY2U7CiAgICAgZW5jb2RlciA8PCBkZWZlcnNMb2FkaW5nOwogICAgIGVuY29kZXIgPDwgbmVl
ZHNDZXJ0aWZpY2F0ZUluZm87CiAgICAgZW5jb2RlciA8PCBtYXhpbXVtQnVmZmVyaW5nVGltZTsK
QEAgLTE1MSw4ICsxNDksNiBAQCBib29sIE5ldHdvcmtSZXNvdXJjZUxvYWRQYXJhbWV0ZXJzOjpk
ZWNvCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlc3Vs
dC5zaG91bGRDbGVhclJlZmVycmVyT25IVFRQU1RvSFRUUFJlZGlyZWN0KSkKICAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVzdWx0LmlzTWFpblJlc291cmNl
KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVzdWx0
LmRlZmVyc0xvYWRpbmcpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgaWYgKCFkZWNvZGVy
LmRlY29kZShyZXN1bHQubmVlZHNDZXJ0aWZpY2F0ZUluZm8pKQpJbmRleDogU291cmNlL1dlYktp
dDIvU2hhcmVkL05ldHdvcmsvTmV0d29ya1Jlc291cmNlTG9hZFBhcmFtZXRlcnMuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvTmV0d29yay9OZXR3b3JrUmVzb3VyY2VMb2Fk
UGFyYW1ldGVycy5oCShyZXZpc2lvbiAxODMzODgpCisrKyBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQv
TmV0d29yay9OZXR3b3JrUmVzb3VyY2VMb2FkUGFyYW1ldGVycy5oCSh3b3JraW5nIGNvcHkpCkBA
IC02MSw3ICs2MSw2IEBAIHB1YmxpYzoKICAgICBXZWJDb3JlOjpTdG9yZWRDcmVkZW50aWFscyBh
bGxvd1N0b3JlZENyZWRlbnRpYWxzOwogICAgIFdlYkNvcmU6OkNsaWVudENyZWRlbnRpYWxQb2xp
Y3kgY2xpZW50Q3JlZGVudGlhbFBvbGljeTsKICAgICBib29sIHNob3VsZENsZWFyUmVmZXJyZXJP
bkhUVFBTVG9IVFRQUmVkaXJlY3Q7Ci0gICAgYm9vbCBpc01haW5SZXNvdXJjZTsKICAgICBib29s
IGRlZmVyc0xvYWRpbmc7CiAgICAgYm9vbCBuZWVkc0NlcnRpZmljYXRlSW5mbzsKICAgICBzdGQ6
OmNocm9ubzo6bWlsbGlzZWNvbmRzIG1heGltdW1CdWZmZXJpbmdUaW1lOwpJbmRleDogU291cmNl
L1dlYktpdDIvU2hhcmVkL21hYy9XZWJDb3JlQXJndW1lbnRDb2RlcnNNYWMubW0KPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYktpdDIvU2hhcmVkL21hYy9XZWJDb3JlQXJndW1lbnRDb2RlcnNNYWMu
bW0JKHJldmlzaW9uIDE4MzM4OCkKKysrIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9tYWMvV2ViQ29y
ZUFyZ3VtZW50Q29kZXJzTWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC04NCw2ICs4NCw3IEBAIHZv
aWQgQXJndW1lbnRDb2RlcjxSZXNvdXJjZVJlcXVlc3Q+OjplbmMKIAogICAgIC8vIFRoZSBmYWxs
YmFjayBhcnJheSBpcyBwYXJ0IG9mIENGVVJMUmVxdWVzdCwgYnV0IGl0IGlzIG5vdCBlbmNvZGVk
IGJ5IFdLQ0ZVUkxSZXF1ZXN0Q3JlYXRlU2VyaWFsaXphYmxlUmVwcmVzZW50YXRpb24uCiAgICAg
ZW5jb2RlciA8PCByZXNvdXJjZVJlcXVlc3QucmVzcG9uc2VDb250ZW50RGlzcG9zaXRpb25FbmNv
ZGluZ0ZhbGxiYWNrQXJyYXkoKTsKKyAgICBlbmNvZGVyLmVuY29kZUVudW0ocmVzb3VyY2VSZXF1
ZXN0LnJlcXVlc3RlcigpKTsKIH0KICNlbHNlCiB2b2lkIEFyZ3VtZW50Q29kZXI8UmVzb3VyY2VS
ZXF1ZXN0Pjo6ZW5jb2RlUGxhdGZvcm1EYXRhKEFyZ3VtZW50RW5jb2RlciYgZW5jb2RlciwgY29u
c3QgUmVzb3VyY2VSZXF1ZXN0JiByZXNvdXJjZVJlcXVlc3QpCkBAIC0xMDksNiArMTEwLDcgQEAg
dm9pZCBBcmd1bWVudENvZGVyPFJlc291cmNlUmVxdWVzdD46OmVuYwogCiAgICAgLy8gVGhlIGZh
bGxiYWNrIGFycmF5IGlzIHBhcnQgb2YgTlNVUkxSZXF1ZXN0LCBidXQgaXQgaXMgbm90IGVuY29k
ZWQgYnkgV0tOU1VSTFJlcXVlc3RDcmVhdGVTZXJpYWxpemFibGVSZXByZXNlbnRhdGlvbi4KICAg
ICBlbmNvZGVyIDw8IHJlc291cmNlUmVxdWVzdC5yZXNwb25zZUNvbnRlbnREaXNwb3NpdGlvbkVu
Y29kaW5nRmFsbGJhY2tBcnJheSgpOworICAgIGVuY29kZXIuZW5jb2RlRW51bShyZXNvdXJjZVJl
cXVlc3QucmVxdWVzdGVyKCkpOwogfQogI2VuZGlmCiAKQEAgLTE1MSw2ICsxNTMsMTEgQEAgYm9v
bCBBcmd1bWVudENvZGVyPFJlc291cmNlUmVxdWVzdD46OmRlYwogICAgICAgICByZXNwb25zZUNv
bnRlbnREaXNwb3NpdGlvbkVuY29kaW5nRmFsbGJhY2tBcnJheS5zaXplKCkgPiAyID8gcmVzcG9u
c2VDb250ZW50RGlzcG9zaXRpb25FbmNvZGluZ0ZhbGxiYWNrQXJyYXlbMl0gOiBTdHJpbmcoKQog
ICAgICk7CiAKKyAgICBSZXNvdXJjZVJlcXVlc3Q6OlJlcXVlc3RlciByZXF1ZXN0ZXI7CisgICAg
aWYgKCFkZWNvZGVyLmRlY29kZUVudW0ocmVxdWVzdGVyKSkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIHJlc291cmNlUmVxdWVzdC5zZXRSZXF1ZXN0ZXIocmVxdWVzdGVyKTsKKwogICAgIHJl
dHVybiB0cnVlOwogfQogCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL05ldHdvcmsv
V2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL05ldHdvcmsvV2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVyLmNwcAkocmV2aXNp
b24gMTgzMzg4KQorKysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9OZXR3b3JrL1dlYlJlc291
cmNlTG9hZFNjaGVkdWxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE3Myw3ICsxNzMsNiBAQCB2
b2lkIFdlYlJlc291cmNlTG9hZFNjaGVkdWxlcjo6c2NoZWR1bGVMCiAgICAgLy8gSWYgdGhlcmUg
aXMgbm8gV2ViRnJhbWUgdGhlbiB0aGlzIHJlc291cmNlIGNhbm5vdCBiZSBhdXRoZW50aWNhdGVk
IHdpdGggdGhlIGNsaWVudC4KICAgICBsb2FkUGFyYW1ldGVycy5jbGllbnRDcmVkZW50aWFsUG9s
aWN5ID0gKHdlYkZyYW1lICYmIHdlYlBhZ2UgJiYgcmVzb3VyY2VMb2FkZXItPmlzQWxsb3dlZFRv
QXNrVXNlckZvckNyZWRlbnRpYWxzKCkpID8gQXNrQ2xpZW50Rm9yQWxsQ3JlZGVudGlhbHMgOiBE
b05vdEFza0NsaWVudEZvckFueUNyZWRlbnRpYWxzOwogICAgIGxvYWRQYXJhbWV0ZXJzLnNob3Vs
ZENsZWFyUmVmZXJyZXJPbkhUVFBTVG9IVFRQUmVkaXJlY3QgPSBzaG91bGRDbGVhclJlZmVycmVy
T25IVFRQU1RvSFRUUFJlZGlyZWN0OwotICAgIGxvYWRQYXJhbWV0ZXJzLmlzTWFpblJlc291cmNl
ID0gcmVzb3VyY2UgJiYgcmVzb3VyY2UtPnR5cGUoKSA9PSBDYWNoZWRSZXNvdXJjZTo6TWFpblJl
c291cmNlOwogICAgIGxvYWRQYXJhbWV0ZXJzLmRlZmVyc0xvYWRpbmcgPSByZXNvdXJjZUxvYWRl
ci0+ZGVmZXJzTG9hZGluZygpOwogICAgIGxvYWRQYXJhbWV0ZXJzLm5lZWRzQ2VydGlmaWNhdGVJ
bmZvID0gcmVzb3VyY2VMb2FkZXItPnNob3VsZEluY2x1ZGVDZXJ0aWZpY2F0ZUluZm8oKTsKICAg
ICBsb2FkUGFyYW1ldGVycy5tYXhpbXVtQnVmZmVyaW5nVGltZSA9IG1heGltdW1CdWZmZXJpbmdU
aW1lKHJlc291cmNlKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dl
YkZyYW1lTG9hZGVyQ2xpZW50Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvbWFjL1dl
YkNvcmVTdXBwb3J0L1dlYkZyYW1lTG9hZGVyQ2xpZW50Lm1tCShyZXZpc2lvbiAxODMzODgpCisr
KyBTb3VyY2UvV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJGcmFtZUxvYWRlckNsaWVudC5t
bQkod29ya2luZyBjb3B5KQpAQCAtMzY0LDcgKzM2NCw3IEBAIHZvaWQgV2ViRnJhbWVMb2FkZXJD
bGllbnQ6OmRpc3BhdGNoV2lsbFMKICAgICBSZXNvdXJjZUxvYWRQcmlvcml0eSBwcmlvcml0eSA9
IHJlcXVlc3QucHJpb3JpdHkoKTsKICAgICBib29sIGlzSGlkZGVuRnJvbUluc3BlY3RvciA9IHJl
cXVlc3QuaGlkZGVuRnJvbUluc3BlY3RvcigpOwogI2lmIFBMQVRGT1JNKElPUykKLSAgICBib29s
IGlzTWFpblJlc291cmNlUmVxdWVzdCA9IHJlcXVlc3QuZGVwcmVjYXRlZElzTWFpblJlc291cmNl
UmVxdWVzdCgpOworICAgIGJvb2wgaXNNYWluUmVzb3VyY2VSZXF1ZXN0ID0gcmVxdWVzdC5yZXF1
ZXN0ZXIoKSA9PSBSZXNvdXJjZVJlcXVlc3Q6OlJlcXVlc3Rlcjo6TWFpbjsKICAgICBpZiAoaW1w
bGVtZW50YXRpb25zLT53ZWJUaHJlYWRXaWxsU2VuZFJlcXVlc3RGdW5jKSB7CiAgICAgICAgIG5l
d1VSTFJlcXVlc3QgPSAoTlNVUkxSZXF1ZXN0ICopQ2FsbFJlc291cmNlTG9hZERlbGVnYXRlSW5X
ZWJUaHJlYWQoaW1wbGVtZW50YXRpb25zLT53ZWJUaHJlYWRXaWxsU2VuZFJlcXVlc3RGdW5jLCB3
ZWJWaWV3LCBAc2VsZWN0b3Iod2ViVGhyZWFkV2ViVmlldzpyZXNvdXJjZTp3aWxsU2VuZFJlcXVl
c3Q6cmVkaXJlY3RSZXNwb25zZTpmcm9tRGF0YVNvdXJjZTopLCBbd2ViVmlldyBfb2JqZWN0Rm9y
SWRlbnRpZmllcjppZGVudGlmaWVyXSwgY3VycmVudFVSTFJlcXVlc3QsIHJlZGlyZWN0UmVzcG9u
c2UubnNVUkxSZXNwb25zZSgpLCBkYXRhU291cmNlKGxvYWRlcikpOwogICAgIH0gZWxzZQpJbmRl
eDogTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL0NoYW5n
ZUxvZwkocmV2aXNpb24gMTgzMzk0KQorKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDMgKzEsMTUgQEAKKzIwMTUtMDQtMjcgIEFudHRpIEtvaXZpc3RvICA8YW50
dGlAYXBwbGUuY29tPgorCisgICAgICAgIE5ldHdvcmsgQ2FjaGU6IERpc2sgY2FjaGUgZ2V0dGlu
ZyBmaWxsZWQgYnkgWW91VHViZSB2aWRlbyBkYXRhCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDQyNTkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICAqIGh0dHAvdGVzdHMvY2FjaGUvZGlzay1jYWNoZS9kaXNr
LWNhY2hlLW1lZGlhLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogaHR0cC90ZXN0cy9j
YWNoZS9kaXNrLWNhY2hlL2Rpc2stY2FjaGUtbWVkaWEuaHRtbDogQWRkZWQuCisgICAgICAgICog
aHR0cC90ZXN0cy9jYWNoZS9kaXNrLWNhY2hlL3Jlc291cmNlcy9jYWNoZS10ZXN0LmpzOgorICAg
ICAgICAoZ2VuZXJhdGVUZXN0VVJMKToKKwogMjAxNS0wNC0yNyAgWW91ZW5uIEZhYmxldCAgPHlv
dWVubi5mYWJsZXRAY3JmLmNhbm9uLmZyPgogCiAgICAgICAgIFN5bmNocm9ub3VzIFhNTEh0dHBS
ZXF1ZXN0IHNob3VsZCBnZXQgYWNjZXNzIHRvIEFwcENhY2hlIHJlc291cmNlcyBzdG9yZWQgYXMg
ZmxhdCBmaWxlcwpJbmRleDogTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9jYWNoZS9kaXNrLWNhY2hl
L2Rpc2stY2FjaGUtbWVkaWEtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3Rz
L2h0dHAvdGVzdHMvY2FjaGUvZGlzay1jYWNoZS9kaXNrLWNhY2hlLW1lZGlhLWV4cGVjdGVkLnR4
dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2h0dHAvdGVzdHMvY2FjaGUvZGlzay1jYWNo
ZS9kaXNrLWNhY2hlLW1lZGlhLWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDI5IEBACitUZXN0cyB0aGF0IG1lZGlhIHJlc291cmNlcyBsb2FkZWQgdmlhIFhIUiBpcyBub3Qg
Y2FjaGVkLgorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1l
c3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKKworcnVubmluZyA2IHRlc3Rz
CisKK3Jlc3BvbnNlIGhlYWRlcnM6IHsiQ2FjaGUtY29udHJvbCI6Im1heC1hZ2U9MCIsIkNvbnRl
bnQtVHlwZSI6InRleHQvcGxhaW4ifQorcmVzcG9uc2Ugc291cmNlOiBOZXR3b3JrCisKK3Jlc3Bv
bnNlIGhlYWRlcnM6IHsiQ2FjaGUtY29udHJvbCI6Im1heC1hZ2U9MTAwIiwiQ29udGVudC1UeXBl
IjoidGV4dC9wbGFpbiJ9CityZXNwb25zZSBzb3VyY2U6IERpc2sgY2FjaGUKKworcmVzcG9uc2Ug
aGVhZGVyczogeyJDYWNoZS1jb250cm9sIjoibWF4LWFnZT0wIiwiQ29udGVudC1UeXBlIjoidmlk
ZW8vbXA0In0KK3Jlc3BvbnNlIHNvdXJjZTogTmV0d29yaworCityZXNwb25zZSBoZWFkZXJzOiB7
IkNhY2hlLWNvbnRyb2wiOiJtYXgtYWdlPTEwMCIsIkNvbnRlbnQtVHlwZSI6InZpZGVvL21wNCJ9
CityZXNwb25zZSBzb3VyY2U6IE5ldHdvcmsKKworcmVzcG9uc2UgaGVhZGVyczogeyJDYWNoZS1j
b250cm9sIjoibWF4LWFnZT0wIiwiQ29udGVudC1UeXBlIjoiYXVkaW8vbXA0In0KK3Jlc3BvbnNl
IHNvdXJjZTogTmV0d29yaworCityZXNwb25zZSBoZWFkZXJzOiB7IkNhY2hlLWNvbnRyb2wiOiJt
YXgtYWdlPTEwMCIsIkNvbnRlbnQtVHlwZSI6ImF1ZGlvL21wNCJ9CityZXNwb25zZSBzb3VyY2U6
IE5ldHdvcmsKKworUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBM
RVRFCisKSW5kZXg6IExheW91dFRlc3RzL2h0dHAvdGVzdHMvY2FjaGUvZGlzay1jYWNoZS9kaXNr
LWNhY2hlLW1lZGlhLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9j
YWNoZS9kaXNrLWNhY2hlL2Rpc2stY2FjaGUtbWVkaWEuaHRtbAkocmV2aXNpb24gMCkKKysrIExh
eW91dFRlc3RzL2h0dHAvdGVzdHMvY2FjaGUvZGlzay1jYWNoZS9kaXNrLWNhY2hlLW1lZGlhLmh0
bWwJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyOSBAQAorPHNjcmlwdCBzcmM9Ii9qcy10ZXN0
LXJlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0icmVzb3Vy
Y2VzL2NhY2hlLXRlc3QuanMiPjwvc2NyaXB0PgorPGJvZHk+Cis8c2NyaXB0PgorCit2YXIgdGVz
dE1hdHJpeCA9CitbCisgWworICB7IHJlc3BvbnNlSGVhZGVyczogeydDYWNoZS1jb250cm9sJzog
J21heC1hZ2U9MCcgfSB9LAorICB7IHJlc3BvbnNlSGVhZGVyczogeydDYWNoZS1jb250cm9sJzog
J21heC1hZ2U9MTAwJyB9IH0sCisgIF0sCisgWworICB7IHJlc3BvbnNlSGVhZGVyczogeydDb250
ZW50LVR5cGUnOiAndGV4dC9wbGFpbicgfSB9LAorICB7IHJlc3BvbnNlSGVhZGVyczogeydDb250
ZW50LVR5cGUnOiAndmlkZW8vbXA0JyB9IH0sCisgIHsgcmVzcG9uc2VIZWFkZXJzOiB7J0NvbnRl
bnQtVHlwZSc6ICdhdWRpby9tcDQnIH0gfSwKKyAgXSwKKyBdOworCitkZXNjcmlwdGlvbigiVGVz
dHMgdGhhdCBtZWRpYSByZXNvdXJjZXMgbG9hZGVkIHZpYSBYSFIgaXMgbm90IGNhY2hlZC4iKTsK
KwordmFyIHRlc3RzID0gZ2VuZXJhdGVUZXN0cyh0ZXN0TWF0cml4KTsKKworZGVidWcoInJ1bm5p
bmcgIiArIHRlc3RzLmxlbmd0aCArICIgdGVzdHMiKTsKK2RlYnVnKCIiKTsKKworcnVuVGVzdHMo
dGVzdHMpOworCis8L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIvanMtdGVzdC1yZXNvdXJjZXMvanMt
dGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KSW5kZXg6IExheW91dFRlc3RzL2h0dHAvdGVzdHMvY2Fj
aGUvZGlzay1jYWNoZS9yZXNvdXJjZXMvY2FjaGUtdGVzdC5qcwo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlv
dXRUZXN0cy9odHRwL3Rlc3RzL2NhY2hlL2Rpc2stY2FjaGUvcmVzb3VyY2VzL2NhY2hlLXRlc3Qu
anMJKHJldmlzaW9uIDE4MzM4OCkKKysrIExheW91dFRlc3RzL2h0dHAvdGVzdHMvY2FjaGUvZGlz
ay1jYWNoZS9yZXNvdXJjZXMvY2FjaGUtdGVzdC5qcwkod29ya2luZyBjb3B5KQpAQCAtNDYsNyAr
NDYsOSBAQCBmdW5jdGlvbiBnZW5lcmF0ZVRlc3RVUkwodGVzdCwgaW5jbHVkZUJvCiAgICAgdmFy
IHRlc3RVUkwgPSAicmVzb3VyY2VzL2dlbmVyYXRlLXJlc3BvbnNlLmNnaT9pbmNsdWRlLWJvZHk9
IiArIChpbmNsdWRlQm9keSA/ICIxIiA6ICIwIik7CiAgICAgaWYgKGV4cGlyZXNJbkZ1dHVyZUlu
MzA0KQogICAgICAgICB0ZXN0VVJMICs9ICImZXhwaXJlcy1pbi1mdXR1cmUtaW4tMzA0PTEiOwot
ICAgIHRlc3RVUkwgKz0gIiZ1bmlxdWVJZD0iICsgdW5pcXVlVGVzdElkKysgKyAiJkNvbnRlbnQt
dHlwZT10ZXh0L3BsYWluIjsKKyAgICB0ZXN0VVJMICs9ICImdW5pcXVlSWQ9IiArIHVuaXF1ZVRl
c3RJZCsrOworICAgIGlmICghdGVzdC5yZXNwb25zZUhlYWRlcnMgfHwgIXRlc3QucmVzcG9uc2VI
ZWFkZXJzWyJDb250ZW50LVR5cGUiXSkKKyAgICAgICAgdGVzdFVSTCArPSAiJkNvbnRlbnQtVHlw
ZT10ZXh0L3BsYWluIjsKICAgICBmb3IgKHZhciBoZWFkZXIgaW4gdGVzdC5yZXNwb25zZUhlYWRl
cnMpCiAgICAgICAgIHRlc3RVUkwgKz0gJyYnICsgaGVhZGVyICsgJz0nICsgbWFrZUhlYWRlclZh
bHVlKHRlc3QucmVzcG9uc2VIZWFkZXJzW2hlYWRlcl0pOwogICAgIHJldHVybiB0ZXN0VVJMOwo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>251743</attachid>
            <date>2015-04-27 08:36:01 -0700</date>
            <delta_ts>2015-04-27 09:06:33 -0700</delta_ts>
            <desc>patch</desc>
            <filename>disk-cache-no-media-4.patch</filename>
            <type>text/plain</type>
            <size>29557</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE4MzM5NCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDUyIEBACisyMDE1LTA0LTI3ICBBbnR0aSBL
b2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KKworICAgICAgICBOZXR3b3JrIENhY2hlOiBEaXNr
IGNhY2hlIGdldHRpbmcgZmlsbGVkIGJ5IFlvdVR1YmUgdmlkZW8gZGF0YQorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ0MjU5CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTVNFIG1lZGlhIGlzIGxvYWRlZCB2
aWEgWEhSIGFuZCB0ZW5kcyB0byBldmVudHVhbGx5IGZpbGwgdGhlIGNhY2hlLgorCisgICAgICAg
IFlvdVR1YmUgc2VydmVzIHRoZSBtZWRpYSBjaHVua3MgY2FjaGVhYmxlLCBob3dldmVyIHRoZXkg
YXJlIHJhcmVseSAoaWYgZXZlcikgcmV1c2VkLgorICAgICAgICBXZSBjYW4gcmVkdWNlIGRpc2sg
d3JpdGVzIGFuZCBrZWVwIG1vcmUgdXNlZnVsIHJlc291cmNlcyBhcm91bmQgYnkgbm90IGNhY2hp
bmcgdGhlbQorCisgICAgICAgIFRlc3Q6IGh0dHAvdGVzdHMvY2FjaGUvZGlzay1jYWNoZS9kaXNr
LWNhY2hlLW1lZGlhLmh0bWwKKworICAgICAgICAqIGxvYWRlci9Eb2N1bWVudExvYWRlci5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudExvYWRlcjo6c3RhcnRMb2FkaW5nTWFpblJlc291
cmNlKToKKworICAgICAgICAgICAgU2V0IHRoZSByZXF1ZXN0ZXIuCisKKyAgICAgICAgKiBsb2Fk
ZXIvY2FjaGUvQ2FjaGVkUmF3UmVzb3VyY2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2FjaGVk
UmF3UmVzb3VyY2U6OkNhY2hlZFJhd1Jlc291cmNlKToKKyAgICAgICAgKiBwYWdlL0RpYWdub3N0
aWNMb2dnaW5nS2V5cy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEaWFnbm9zdGljTG9nZ2luZ0tl
eXM6OnN0cmVhbWluZ01lZGlhKToKKyAgICAgICAgKiBwYWdlL0RpYWdub3N0aWNMb2dnaW5nS2V5
cy5oOgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VSZXF1ZXN0QmFzZS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3RCYXNlOjphZG9wdCk6CisgICAgICAg
IChXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3RCYXNlOjpjb3B5RGF0YSk6CisgICAgICAgIChXZWJD
b3JlOjplcXVhbElnbm9yaW5nSGVhZGVyRmllbGRzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3
b3JrL1Jlc291cmNlUmVxdWVzdEJhc2UuaDoKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlUmVx
dWVzdEJhc2U6OnJlcXVlc3Rlcik6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3RC
YXNlOjpzZXRSZXF1ZXN0ZXIpOgorCisgICAgICAgICAgICBBZGQgcmVxdWVzdGVyIHR5cGUgdG8g
dGhlIHJlcXVlc3Qgb2JqZWN0LiBDdXJyZW50bHkgdGhpcyBpcyBtYWluIHJlc291cmNlLCB4aHIg
b3IgdW5zcGVjaWZpZWQuCisKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdEJhc2U6
OmVuY29kZVdpdGhvdXRQbGF0Zm9ybURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VS
ZXF1ZXN0QmFzZTo6ZGVjb2RlV2l0aG91dFBsYXRmb3JtRGF0YSk6CisgICAgICAgICogcGxhdGZv
cm0vbmV0d29yay9jZi9SZXNvdXJjZVJlcXVlc3QuaDoKKyAgICAgICAgKFdlYkNvcmU6OlJlc291
cmNlUmVxdWVzdDo6ZGVwcmVjYXRlZFNldE1haW5SZXNvdXJjZVJlcXVlc3QpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0OjpkZXByZWNhdGVkSXNNYWluUmVzb3Vy
Y2VSZXF1ZXN0KTogRGVsZXRlZC4KKworICAgICAgICAgICAgUmVwbGFjZSB0aGlzIGlPUyBvbmx5
IGZpZWxkIHdpdGggc2hhcmVkIG1lY2hhbmlzbS4KKworICAgICAgICAqIHBsYXRmb3JtL25ldHdv
cmsvaW9zL1F1aWNrTG9vay5tbToKKyAgICAgICAgKFdlYkNvcmU6OlF1aWNrTG9va0hhbmRsZTo6
Y3JlYXRlKToKKyAgICAgICAgKiB4bWwvWE1MSHR0cFJlcXVlc3QuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6WE1MSHR0cFJlcXVlc3Q6OmNyZWF0ZVJlcXVlc3QpOgorCisgICAgICAgICAgICBTZXQg
dGhlIHJlcXVlc3Rlci4KKwogMjAxNS0wNC0yNyAgQ3NhYmEgT3N6dHJvZ29uw6FjICA8b3NzeUB3
ZWJraXQub3JnPgogCiAgICAgICAgIEZpeCB0aGUgIUVOQUJMRShDU1NfR1JJRF9MQVlPVVQpIGJ1
aWxkIGFmdGVyIHIxODMzNzAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9Eb2N1bWVudExv
YWRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvbG9hZGVyL0RvY3VtZW50TG9h
ZGVyLmNwcAkocmV2aXNpb24gMTgzMzg4KQorKysgU291cmNlL1dlYkNvcmUvbG9hZGVyL0RvY3Vt
ZW50TG9hZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTM0LDExICs5MzQsNiBAQCB2b2lkIERv
Y3VtZW50TG9hZGVyOjpjbGVhck1haW5SZXNvdXJjZUxvCiB7CiAgICAgbV9sb2FkaW5nTWFpblJl
c291cmNlID0gZmFsc2U7CiAKLSNpZiBQTEFURk9STShJT1MpCi0gICAgLy8gRklYTUU6IFJlbW92
ZSBQTEFURk9STShJT1MpLWd1YXJkIG9uY2Ugd2UgdXBzdHJlYW0gdGhlIGlPUyBjaGFuZ2VzIHRv
IFJlc291cmNlUmVxdWVzdC5oLgotICAgIG1fcmVxdWVzdC5kZXByZWNhdGVkU2V0TWFpblJlc291
cmNlUmVxdWVzdChmYWxzZSk7Ci0jZW5kaWYKLQogICAgIGlmICh0aGlzID09IGZyYW1lTG9hZGVy
KCktPmFjdGl2ZURvY3VtZW50TG9hZGVyKCkpCiAgICAgICAgIGNoZWNrTG9hZENvbXBsZXRlKCk7
CiB9CkBAIC0xNDAzLDEyICsxMzk4LDkgQEAgdm9pZCBEb2N1bWVudExvYWRlcjo6c3RhcnRMb2Fk
aW5nTWFpblJlcwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0jaWYgUExBVEZPUk0oSU9TKQot
ICAgIC8vIEZJWE1FOiBSZW1vdmUgUExBVEZPUk0oSU9TKS1ndWFyZCBvbmNlIHdlIHVwc3RyZWFt
IHRoZSBpT1MgY2hhbmdlcyB0byBSZXNvdXJjZVJlcXVlc3QuaC4KLSAgICBtX3JlcXVlc3QuZGVw
cmVjYXRlZFNldE1haW5SZXNvdXJjZVJlcXVlc3QodHJ1ZSk7Ci0jZW5kaWYKLQogICAgIFJlc291
cmNlUmVxdWVzdCByZXF1ZXN0KG1fcmVxdWVzdCk7CisgICAgcmVxdWVzdC5zZXRSZXF1ZXN0ZXIo
UmVzb3VyY2VSZXF1ZXN0OjpSZXF1ZXN0ZXI6Ok1haW4pOworICAgIAogICAgIHN0YXRpYyBOZXZl
ckRlc3Ryb3llZDxSZXNvdXJjZUxvYWRlck9wdGlvbnM+IG1haW5SZXNvdXJjZUxvYWRPcHRpb25z
KFNlbmRDYWxsYmFja3MsIFNuaWZmQ29udGVudCwgQnVmZmVyRGF0YSwgQWxsb3dTdG9yZWRDcmVk
ZW50aWFscywgQXNrQ2xpZW50Rm9yQWxsQ3JlZGVudGlhbHMsIFNraXBTZWN1cml0eUNoZWNrLCBV
c2VEZWZhdWx0T3JpZ2luUmVzdHJpY3Rpb25zRm9yVHlwZSwgSW5jbHVkZUNlcnRpZmljYXRlSW5m
byk7CiAgICAgQ2FjaGVkUmVzb3VyY2VSZXF1ZXN0IGNhY2hlZFJlc291cmNlUmVxdWVzdChyZXF1
ZXN0LCBtYWluUmVzb3VyY2VMb2FkT3B0aW9ucyk7CiAgICAgY2FjaGVkUmVzb3VyY2VSZXF1ZXN0
LnNldEluaXRpYXRvcigqdGhpcyk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUv
Q2FjaGVkUmF3UmVzb3VyY2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xvYWRl
ci9jYWNoZS9DYWNoZWRSYXdSZXNvdXJjZS5jcHAJKHJldmlzaW9uIDE4MzM4OCkKKysrIFNvdXJj
ZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRSYXdSZXNvdXJjZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTQyLDcgKzQyLDYgQEAgQ2FjaGVkUmF3UmVzb3VyY2U6OkNhY2hlZFJhd1Jlc291cmNl
KFJlcwogICAgICwgbV9pZGVudGlmaWVyKDApCiAgICAgLCBtX2FsbG93RW5jb2RlZERhdGFSZXBs
YWNlbWVudCh0cnVlKQogewotICAgIC8vIEZJWE1FOiBUaGUgd3JvbmcgQ2FjaGVkUmVzb3VyY2U6
OlR5cGUgaGVyZSBtYXkgY2F1c2UgYSBiYWQgY2FzdCBlbHNld2hlcmUuCiAgICAgQVNTRVJUKGlz
TWFpbk9yUmF3UmVzb3VyY2UoKSk7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvRGlh
Z25vc3RpY0xvZ2dpbmdLZXlzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdl
L0RpYWdub3N0aWNMb2dnaW5nS2V5cy5jcHAJKHJldmlzaW9uIDE4MzM4OCkKKysrIFNvdXJjZS9X
ZWJDb3JlL3BhZ2UvRGlhZ25vc3RpY0xvZ2dpbmdLZXlzLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzczLDYgKzM3MywxMSBAQCBTdHJpbmcgRGlhZ25vc3RpY0xvZ2dpbmdLZXlzOjpzb3VyY2VLZXko
CiAgICAgcmV0dXJuIEFTQ0lJTGl0ZXJhbCgic291cmNlS2V5Iik7CiB9CiAKK1N0cmluZyBEaWFn
bm9zdGljTG9nZ2luZ0tleXM6OnN0cmVhbWluZ01lZGlhKCkKK3sKKyAgICByZXR1cm4gQVNDSUlM
aXRlcmFsKCJzdHJlYW1pbmdNZWRpYSIpOworfQorCiBTdHJpbmcgRGlhZ25vc3RpY0xvZ2dpbmdL
ZXlzOjpzdHlsZVNoZWV0S2V5KCkKIHsKICAgICByZXR1cm4gQVNDSUlMaXRlcmFsKCJzdHlsZVNo
ZWV0Iik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL0RpYWdub3N0aWNMb2dnaW5nS2V5cy5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvRGlhZ25vc3RpY0xvZ2dpbmdLZXlz
LmgJKHJldmlzaW9uIDE4MzM4OCkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvRGlhZ25vc3RpY0xv
Z2dpbmdLZXlzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEwNiw2ICsxMDYsNyBAQCBwdWJsaWM6CiAg
ICAgc3RhdGljIFN0cmluZyBzYW1lTG9hZEtleSgpOwogICAgIHN0YXRpYyBTdHJpbmcgc2NyaXB0
S2V5KCk7CiAgICAgc3RhdGljIFN0cmluZyBzb3VyY2VLZXkoKTsKKyAgICBXRUJDT1JFX0VYUE9S
VCBzdGF0aWMgU3RyaW5nIHN0cmVhbWluZ01lZGlhKCk7CiAgICAgc3RhdGljIFN0cmluZyBzdHls
ZVNoZWV0S2V5KCk7CiAgICAgc3RhdGljIFN0cmluZyBzdmdEb2N1bWVudEtleSgpOwogICAgIFdF
QkNPUkVfRVhQT1JUIHN0YXRpYyBTdHJpbmcgdW5jYWNoZWFibGVTdGF0dXNDb2RlS2V5KCk7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlUmVxdWVzdEJhc2Uu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3Vy
Y2VSZXF1ZXN0QmFzZS5jcHAJKHJldmlzaW9uIDE4MzM4OCkKKysrIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL25ldHdvcmsvUmVzb3VyY2VSZXF1ZXN0QmFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTU3LDYgKzU3LDcgQEAgc3RkOjp1bmlxdWVfcHRyPFJlc291cmNlUmVxdWVzdD4gUmVzb3VyYwog
ICAgIHJlcXVlc3QtPnNldEZpcnN0UGFydHlGb3JDb29raWVzKGRhdGEtPm1fZmlyc3RQYXJ0eUZv
ckNvb2tpZXMpOwogICAgIHJlcXVlc3QtPnNldEhUVFBNZXRob2QoZGF0YS0+bV9odHRwTWV0aG9k
KTsKICAgICByZXF1ZXN0LT5zZXRQcmlvcml0eShkYXRhLT5tX3ByaW9yaXR5KTsKKyAgICByZXF1
ZXN0LT5zZXRSZXF1ZXN0ZXIoZGF0YS0+bV9yZXF1ZXN0ZXIpOwogCiAgICAgcmVxdWVzdC0+dXBk
YXRlUmVzb3VyY2VSZXF1ZXN0KCk7CiAgICAgcmVxdWVzdC0+bV9odHRwSGVhZGVyRmllbGRzLmFk
b3B0KFdURjo6bW92ZShkYXRhLT5tX2h0dHBIZWFkZXJzKSk7CkBAIC05MCw2ICs5MSw3IEBAIHN0
ZDo6dW5pcXVlX3B0cjxDcm9zc1RocmVhZFJlc291cmNlUmVxdWUKICAgICBkYXRhLT5tX2h0dHBN
ZXRob2QgPSBodHRwTWV0aG9kKCkuaXNvbGF0ZWRDb3B5KCk7CiAgICAgZGF0YS0+bV9odHRwSGVh
ZGVycyA9IGh0dHBIZWFkZXJGaWVsZHMoKS5jb3B5RGF0YSgpOwogICAgIGRhdGEtPm1fcHJpb3Jp
dHkgPSBwcmlvcml0eSgpOworICAgIGRhdGEtPm1fcmVxdWVzdGVyID0gbV9yZXF1ZXN0ZXI7CiAK
ICAgICBkYXRhLT5tX3Jlc3BvbnNlQ29udGVudERpc3Bvc2l0aW9uRW5jb2RpbmdGYWxsYmFja0Fy
cmF5LnJlc2VydmVJbml0aWFsQ2FwYWNpdHkobV9yZXNwb25zZUNvbnRlbnREaXNwb3NpdGlvbkVu
Y29kaW5nRmFsbGJhY2tBcnJheS5zaXplKCkpOwogICAgIHNpemVfdCBlbmNvZGluZ0FycmF5U2l6
ZSA9IG1fcmVzcG9uc2VDb250ZW50RGlzcG9zaXRpb25FbmNvZGluZ0ZhbGxiYWNrQXJyYXkuc2l6
ZSgpOwpAQCAtNDk2LDYgKzQ5OCw5IEBAIGJvb2wgZXF1YWxJZ25vcmluZ0hlYWRlckZpZWxkcyhj
b25zdCBSZXMKICAgICBpZiAoYS5wcmlvcml0eSgpICE9IGIucHJpb3JpdHkoKSkKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogCisgICAgaWYgKGEucmVxdWVzdGVyKCkgIT0gYi5yZXF1ZXN0ZXIoKSkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworCiAgICAgRm9ybURhdGEqIGZvcm1EYXRhQSA9IGEuaHR0
cEJvZHkoKTsKICAgICBGb3JtRGF0YSogZm9ybURhdGFCID0gYi5odHRwQm9keSgpOwogICAgIApJ
bmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZVJlcXVlc3RCYXNl
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJj
ZVJlcXVlc3RCYXNlLmgJKHJldmlzaW9uIDE4MzM4OCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL25ldHdvcmsvUmVzb3VyY2VSZXF1ZXN0QmFzZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNDcs
NiArMTQ3LDEwIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgYm9vbCBoaWRkZW5Gcm9t
SW5zcGVjdG9yKCkgY29uc3QgeyByZXR1cm4gbV9oaWRkZW5Gcm9tSW5zcGVjdG9yOyB9CiAgICAg
ICAgIHZvaWQgc2V0SGlkZGVuRnJvbUluc3BlY3Rvcihib29sIGhpZGRlbkZyb21JbnNwZWN0b3Ip
IHsgbV9oaWRkZW5Gcm9tSW5zcGVjdG9yID0gaGlkZGVuRnJvbUluc3BlY3RvcjsgfQogCisgICAg
ICAgIGVudW0gY2xhc3MgUmVxdWVzdGVyIHsgVW5zcGVjaWZpZWQsIE1haW4sIFhIUiB9OworICAg
ICAgICBXRUJDT1JFX0VYUE9SVCBSZXF1ZXN0ZXIgcmVxdWVzdGVyKCkgY29uc3QgeyByZXR1cm4g
bV9yZXF1ZXN0ZXI7IH0KKyAgICAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRSZXF1ZXN0ZXIo
UmVxdWVzdGVyIHJlcXVlc3RlcikgeyBtX3JlcXVlc3RlciA9IHJlcXVlc3RlcjsgfQorCiAjaWYg
IVBMQVRGT1JNKENPQ09BKQogICAgICAgICBib29sIGVuY29kaW5nUmVxdWlyZXNQbGF0Zm9ybURh
dGEoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CiAjZW5kaWYKQEAgLTIyNCw2ICsyMjgsNyBAQCBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHVuc2lnbmVkIG1fcmVwb3J0UmF3SGVhZGVycyA6
IDE7CiAgICAgICAgIHVuc2lnbmVkIG1faGlkZGVuRnJvbUluc3BlY3RvciA6IDE7CiAgICAgICAg
IHVuc2lnbmVkIG1fcHJpb3JpdHkgOiA0OworICAgICAgICBSZXF1ZXN0ZXIgbV9yZXF1ZXN0ZXIg
eyBSZXF1ZXN0ZXI6OlVuc3BlY2lmaWVkIH07CiAKICAgICBwcml2YXRlOgogICAgICAgICBjb25z
dCBSZXNvdXJjZVJlcXVlc3QmIGFzUmVzb3VyY2VSZXF1ZXN0KCkgY29uc3Q7CkBAIC0yNTUsNiAr
MjYwLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBSZWZQdHI8Rm9ybURhdGE+IG1f
aHR0cEJvZHk7CiAgICAgICAgIGJvb2wgbV9hbGxvd0Nvb2tpZXM7CiAgICAgICAgIFJlc291cmNl
TG9hZFByaW9yaXR5IG1fcHJpb3JpdHk7CisgICAgICAgIFJlc291cmNlUmVxdWVzdEJhc2U6OlJl
cXVlc3RlciBtX3JlcXVlc3RlcjsKICAgICB9OwogICAgIAogICAgIHVuc2lnbmVkIGluaXRpYWxp
emVNYXhpbXVtSFRUUENvbm5lY3Rpb25Db3VudFBlckhvc3QoKTsKQEAgLTI3Niw2ICsyODIsNyBA
QCB2b2lkIFJlc291cmNlUmVxdWVzdEJhc2U6OmVuY29kZVdpdGhvdXRQCiAgICAgZW5jb2Rlci5l
bmNvZGVFbnVtKG1fY2FjaGVQb2xpY3kpOwogICAgIGVuY29kZXIgPDwgbV9hbGxvd0Nvb2tpZXM7
CiAgICAgZW5jb2Rlci5lbmNvZGVFbnVtKG1fcHJpb3JpdHkpOworICAgIGVuY29kZXIuZW5jb2Rl
RW51bShtX3JlcXVlc3Rlcik7CiB9CiAKIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+CkBAIC0zMTgs
NiArMzI1LDkgQEAgYm9vbCBSZXNvdXJjZVJlcXVlc3RCYXNlOjpkZWNvZGVXaXRob3V0UAogICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICAgbV9wcmlvcml0eSA9IHByaW9yaXR5OwogCisgICAgaWYg
KCFkZWNvZGVyLmRlY29kZUVudW0obV9yZXF1ZXN0ZXIpKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bmV0d29yay9jZi9SZXNvdXJjZVJlcXVlc3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9uZXR3b3JrL2NmL1Jlc291cmNlUmVxdWVzdC5oCShyZXZpc2lvbiAxODMzODgp
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2NmL1Jlc291cmNlUmVxdWVzdC5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xMTgsMTcgKzExOCw2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAogICAgICAgICBzdGF0aWMgYm9vbCByZXNvdXJjZVByaW9yaXRpZXNFbmFibGVkKCk7CiAKLSNp
ZiBQTEFURk9STShJT1MpCi0gICAgICAgIC8vIEZJWE1FOiBkZXByZWNhdGVkSXNNYWluUmVzb3Vy
Y2VSZXF1ZXN0KCkgZG9lcyBub3QgcmV0dXJuIHRoZSBjb3JyZWN0IHZhbHVlIGlmIHRoZSBSZXNv
dXJjZVJlcXVlc3QgaGFzIGJlZW4KLSAgICAgICAgLy8gZGVzZXJpYWxpemVkIGZyb20gYW4gSVBD
IG1lc3NhZ2UuIEFzIGEgcmVzdWx0IHRoaXMgZnVuY3Rpb24gY2FuIG9ubHkgYmUgcmVsaWVkIG9u
IHdoZW4gbmV0d29ya2luZyBpcyBub3QgaW4gYQotICAgICAgICAvLyBzZXBhcmF0ZSBwcm9jZXNz
LgotICAgICAgICB2b2lkIGRlcHJlY2F0ZWRTZXRNYWluUmVzb3VyY2VSZXF1ZXN0KGJvb2wgaXNN
YWluUmVzb3VyY2VSZXF1ZXN0KSBjb25zdCB7IG1fbWFpblJlc291cmNlUmVxdWVzdCA9IGlzTWFp
blJlc291cmNlUmVxdWVzdDsgfQotICAgICAgICBib29sIGRlcHJlY2F0ZWRJc01haW5SZXNvdXJj
ZVJlcXVlc3QoKSBjb25zdCB7IHJldHVybiBtX21haW5SZXNvdXJjZVJlcXVlc3Q7IH0KLQotICAg
IHByaXZhdGU6Ci0gICAgICAgIG11dGFibGUgYm9vbCBtX21haW5SZXNvdXJjZVJlcXVlc3QgPSBm
YWxzZTsKLSNlbmRpZgotCiAgICAgcHJpdmF0ZToKICAgICAgICAgZnJpZW5kIGNsYXNzIFJlc291
cmNlUmVxdWVzdEJhc2U7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsv
aW9zL1F1aWNrTG9vay5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9u
ZXR3b3JrL2lvcy9RdWlja0xvb2subW0JKHJldmlzaW9uIDE4MzM4OCkKKysrIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL25ldHdvcmsvaW9zL1F1aWNrTG9vay5tbQkod29ya2luZyBjb3B5KQpAQCAt
NDU5LDcgKzQ1OSw3IEBAIFF1aWNrTG9va0hhbmRsZTo6UXVpY2tMb29rSGFuZGxlKE5TVVJMICoK
IHN0ZDo6dW5pcXVlX3B0cjxRdWlja0xvb2tIYW5kbGU+IFF1aWNrTG9va0hhbmRsZTo6Y3JlYXRl
KFJlc291cmNlSGFuZGxlKiBoYW5kbGUsIE5TVVJMQ29ubmVjdGlvbiAqY29ubmVjdGlvbiwgTlNV
UkxSZXNwb25zZSAqbnNSZXNwb25zZSwgaWQgZGVsZWdhdGUpCiB7CiAgICAgQVNTRVJUX0FSRyho
YW5kbGUsIGhhbmRsZSk7Ci0gICAgaWYgKCFoYW5kbGUtPmZpcnN0UmVxdWVzdCgpLmRlcHJlY2F0
ZWRJc01haW5SZXNvdXJjZVJlcXVlc3QoKSB8fCAhW1dlYkNvcmU6OlFMUHJldmlld0dldFN1cHBv
cnRlZE1JTUVUeXBlc1NldCgpIGNvbnRhaW5zT2JqZWN0Oltuc1Jlc3BvbnNlIE1JTUVUeXBlXV0p
CisgICAgaWYgKGhhbmRsZS0+Zmlyc3RSZXF1ZXN0KCkucmVxdWVzdGVyKCkgIT0gUmVzb3VyY2VS
ZXF1ZXN0OjpSZXF1ZXN0ZXI6Ok1haW4gfHwgIVtXZWJDb3JlOjpRTFByZXZpZXdHZXRTdXBwb3J0
ZWRNSU1FVHlwZXNTZXQoKSBjb250YWluc09iamVjdDpbbnNSZXNwb25zZSBNSU1FVHlwZV1dKQog
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAgIHN0ZDo6dW5pcXVlX3B0cjxRdWlja0xvb2tI
YW5kbGU+IHF1aWNrTG9va0hhbmRsZShuZXcgUXVpY2tMb29rSGFuZGxlKFtoYW5kbGUtPmZpcnN0
UmVxdWVzdCgpLm5zVVJMUmVxdWVzdChEb05vdFVwZGF0ZUhUVFBCb2R5KSBVUkxdLCBjb25uZWN0
aW9uLCBuc1Jlc3BvbnNlLCBkZWxlZ2F0ZSkpOwpAQCAtNDcxLDcgKzQ3MSw3IEBAIHN0ZDo6dW5p
cXVlX3B0cjxRdWlja0xvb2tIYW5kbGU+IFF1aWNrTG8KIHN0ZDo6dW5pcXVlX3B0cjxRdWlja0xv
b2tIYW5kbGU+IFF1aWNrTG9va0hhbmRsZTo6Y3JlYXRlKFJlc291cmNlSGFuZGxlKiBoYW5kbGUs
IFN5bmNocm9ub3VzUmVzb3VyY2VIYW5kbGVDRlVSTENvbm5lY3Rpb25EZWxlZ2F0ZSogY29ubmVj
dGlvbkRlbGVnYXRlLCBDRlVSTFJlc3BvbnNlUmVmIGNmUmVzcG9uc2UpCiB7CiAgICAgQVNTRVJU
X0FSRyhoYW5kbGUsIGhhbmRsZSk7Ci0gICAgaWYgKCFoYW5kbGUtPmZpcnN0UmVxdWVzdCgpLmRl
cHJlY2F0ZWRJc01haW5SZXNvdXJjZVJlcXVlc3QoKSB8fCAhW1dlYkNvcmU6OlFMUHJldmlld0dl
dFN1cHBvcnRlZE1JTUVUeXBlc1NldCgpIGNvbnRhaW5zT2JqZWN0OihOU1N0cmluZyAqKUNGVVJM
UmVzcG9uc2VHZXRNSU1FVHlwZShjZlJlc3BvbnNlKV0pCisgICAgaWYgKGhhbmRsZS0+Zmlyc3RS
ZXF1ZXN0KCkucmVxdWVzdGVyKCkgIT0gUmVzb3VyY2VSZXF1ZXN0OjpSZXF1ZXN0ZXI6Ok1haW4g
fHwgIVtXZWJDb3JlOjpRTFByZXZpZXdHZXRTdXBwb3J0ZWRNSU1FVHlwZXNTZXQoKSBjb250YWlu
c09iamVjdDooTlNTdHJpbmcgKilDRlVSTFJlc3BvbnNlR2V0TUlNRVR5cGUoY2ZSZXNwb25zZSld
KQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAgIE5TVVJMUmVzcG9uc2UgKm5zUmVzcG9u
c2UgPSBbTlNVUkxSZXNwb25zZSBfcmVzcG9uc2VXaXRoQ0ZVUkxSZXNwb25zZTpjZlJlc3BvbnNl
XTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3htbC9YTUxIdHRwUmVxdWVzdC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUveG1sL1hNTEh0dHBSZXF1ZXN0LmNwcAkocmV2aXNpb24gMTgz
Mzg4KQorKysgU291cmNlL1dlYkNvcmUveG1sL1hNTEh0dHBSZXF1ZXN0LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNzQ1LDYgKzc0NSw3IEBAIHZvaWQgWE1MSHR0cFJlcXVlc3Q6OmNyZWF0ZVJlcXVl
c3QoRXhjZXAKICAgICBtX3VwbG9hZEV2ZW50c0FsbG93ZWQgPSBtX3NhbWVPcmlnaW5SZXF1ZXN0
IHx8IHVwbG9hZEV2ZW50cyB8fCAhaXNTaW1wbGVDcm9zc09yaWdpbkFjY2Vzc1JlcXVlc3QobV9t
ZXRob2QsIG1fcmVxdWVzdEhlYWRlcnMpOwogCiAgICAgUmVzb3VyY2VSZXF1ZXN0IHJlcXVlc3Qo
bV91cmwpOworICAgIHJlcXVlc3Quc2V0UmVxdWVzdGVyKFJlc291cmNlUmVxdWVzdDo6UmVxdWVz
dGVyOjpYSFIpOwogICAgIHJlcXVlc3Quc2V0SFRUUE1ldGhvZChtX21ldGhvZCk7CiAKICAgICBp
ZiAobV9yZXF1ZXN0RW50aXR5Qm9keSkgewpJbmRleDogU291cmNlL1dlYktpdDIvQ2hhbmdlTG9n
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwkocmV2aXNpb24gMTgzMzk0
KQorKysgU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEs
NDAgQEAKKzIwMTUtMDQtMjcgIEFudHRpIEtvaXZpc3RvICA8YW50dGlAYXBwbGUuY29tPgorCisg
ICAgICAgIE5ldHdvcmsgQ2FjaGU6IERpc2sgY2FjaGUgZ2V0dGluZyBmaWxsZWQgYnkgWW91VHVi
ZSB2aWRlbyBkYXRhCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xNDQyNTkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBNU0UgbWVkaWEgaXMgbG9hZGVkIHZpYSBYSFIgYW5kIHRlbmRzIHRvIGV2ZW50dWFsbHkg
ZmlsbCB0aGUgY2FjaGUuCisKKyAgICAgICAgWW91VHViZSBzZXJ2ZXMgdGhlIG1lZGlhIGNodW5r
cyBjYWNoZWFibGUsIGhvd2V2ZXIgdGhleSBhcmUgcmFyZWx5IChpZiBldmVyKSByZXVzZWQuCisg
ICAgICAgIFdlIGNhbiByZWR1Y2UgZGlzayB3cml0ZXMgYW5kIGtlZXAgbW9yZSB1c2VmdWwgcmVz
b3VyY2VzIGFyb3VuZCBieSBub3QgY2FjaGluZyB0aGVtCisKKyAgICAgICAgKiBOZXR3b3JrUHJv
Y2Vzcy9OZXR3b3JrUmVzb3VyY2VMb2FkZXIuY3BwOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3Jr
UmVzb3VyY2VMb2FkZXI6OmRpZFJlY2VpdmVSZXNwb25zZUFzeW5jKToKKyAgICAgICAgKFdlYktp
dDo6TmV0d29ya1Jlc291cmNlTG9hZGVyOjpkaWRSZXRyaWV2ZUNhY2hlRW50cnkpOgorICAgICAg
ICAqIE5ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZS5jcHA6CisgICAgICAgIChXZWJL
aXQ6Ok5ldHdvcmtDYWNoZTo6bWFrZVN0b3JlRGVjaXNpb24pOgorCisgICAgICAgICAgICBEb24n
dCBzdG9yZSBpZiB0aGUgcmVxdWVzdGVyIGlzIFhIUiBhbmQgcmVzcG9uc2UgaGFzIHZpZGVvIG9y
IGF1ZGlvIGNvbnRlbnQgdHlwZS4KKworICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL2NhY2hlL05l
dHdvcmtDYWNoZS5oOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNo
ZVN0YXRpc3RpY3MuY3BwOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FjaGU6OnN0b3JlRGVj
aXNpb25Ub0RpYWdub3N0aWNLZXkpOgorICAgICAgICAqIFNoYXJlZC9OZXR3b3JrL05ldHdvcmtS
ZXNvdXJjZUxvYWRQYXJhbWV0ZXJzLmNwcDoKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Jlc291
cmNlTG9hZFBhcmFtZXRlcnM6Ok5ldHdvcmtSZXNvdXJjZUxvYWRQYXJhbWV0ZXJzKToKKyAgICAg
ICAgKFdlYktpdDo6TmV0d29ya1Jlc291cmNlTG9hZFBhcmFtZXRlcnM6OmVuY29kZSk6CisgICAg
ICAgIChXZWJLaXQ6Ok5ldHdvcmtSZXNvdXJjZUxvYWRQYXJhbWV0ZXJzOjpkZWNvZGUpOgorICAg
ICAgICAqIFNoYXJlZC9OZXR3b3JrL05ldHdvcmtSZXNvdXJjZUxvYWRQYXJhbWV0ZXJzLmg6CisK
KyAgICAgICAgICAgIFRoZSByZXF1ZXN0ZXIgdHlwZSBpcyBub3cgcGFydCBvZiB0aGUgUmVzb3Vy
Y2VSZXF1ZXN0LCBubyBuZWVkIGZvciBzZXBhcmF0ZSBwYXJhbWV0ZXIuCisKKyAgICAgICAgKiBT
aGFyZWQvbWFjL1dlYkNvcmVBcmd1bWVudENvZGVyc01hYy5tbToKKyAgICAgICAgKElQQzo6QXJn
dW1lbnRDb2RlcjxSZXNvdXJjZVJlcXVlc3Q+OjplbmNvZGVQbGF0Zm9ybURhdGEpOgorICAgICAg
ICAoSVBDOjpBcmd1bWVudENvZGVyPFJlc291cmNlUmVxdWVzdD46OmRlY29kZVBsYXRmb3JtRGF0
YSk6CisgICAgICAgICogV2ViUHJvY2Vzcy9OZXR3b3JrL1dlYlJlc291cmNlTG9hZFNjaGVkdWxl
ci5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlJlc291cmNlTG9hZFNjaGVkdWxlcjo6c2NoZWR1
bGVMb2FkKToKKwogMjAxNS0wNC0yNyAgQ3NhYmEgT3N6dHJvZ29uw6FjICA8b3NzeUB3ZWJraXQu
b3JnPgogCiAgICAgICAgIFtFRkxdIFRlc3RXZWJLaXRBUEkncyBmb3J3YXJkaW5nIGhlYWRlciBn
ZW5lcmF0b3Igc2hvdWxkIGRlcGVuZCBvbiBXZWJLaXQyJ3MgZ2VuZXJhdG9yCkluZGV4OiBTb3Vy
Y2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUmVzb3VyY2VMb2FkZXIuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtSZXNvdXJjZUxv
YWRlci5jcHAJKHJldmlzaW9uIDE4MzM4OCkKKysrIFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9j
ZXNzL05ldHdvcmtSZXNvdXJjZUxvYWRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI1MywxNyAr
MjUzLDE4IEBAIHZvaWQgTmV0d29ya1Jlc291cmNlTG9hZGVyOjpkaWRSZWNlaXZlUmUKICAgICBz
aG91bGRTZW5kRGlkUmVjZWl2ZVJlc3BvbnNlID0gIW1fY2FjaGVFbnRyeUZvclZhbGlkYXRpb247
CiAjZW5kaWYKIAorICAgIGJvb2wgc2hvdWxkV2FpdENvbnRpbnVlRGlkUmVjZWl2ZVJlc3BvbnNl
ID0gb3JpZ2luYWxSZXF1ZXN0KCkucmVxdWVzdGVyKCkgPT0gUmVzb3VyY2VSZXF1ZXN0OjpSZXF1
ZXN0ZXI6Ok1haW47CiAgICAgaWYgKHNob3VsZFNlbmREaWRSZWNlaXZlUmVzcG9uc2UpIHsKICAg
ICAgICAgaWYgKGlzU3luY2hyb25vdXMoKSkKICAgICAgICAgICAgIG1fc3luY2hyb25vdXNMb2Fk
RGF0YS0+cmVzcG9uc2UgPSBtX3Jlc3BvbnNlOwogICAgICAgICBlbHNlIHsKLSAgICAgICAgICAg
IGlmICghc2VuZEFib3J0aW5nT25GYWlsdXJlKE1lc3NhZ2VzOjpXZWJSZXNvdXJjZUxvYWRlcjo6
RGlkUmVjZWl2ZVJlc3BvbnNlKG1fcmVzcG9uc2UsIG1fcGFyYW1ldGVycy5pc01haW5SZXNvdXJj
ZSkpKQorICAgICAgICAgICAgaWYgKCFzZW5kQWJvcnRpbmdPbkZhaWx1cmUoTWVzc2FnZXM6Oldl
YlJlc291cmNlTG9hZGVyOjpEaWRSZWNlaXZlUmVzcG9uc2UobV9yZXNwb25zZSwgc2hvdWxkV2Fp
dENvbnRpbnVlRGlkUmVjZWl2ZVJlc3BvbnNlKSkpCiAgICAgICAgICAgICAgICAgcmV0dXJuOwog
ICAgICAgICB9CiAgICAgfQogCiAgICAgLy8gRm9yIG1haW4gcmVzb3VyY2VzLCB0aGUgd2ViIHBy
b2Nlc3MgaXMgcmVzcG9uc2libGUgZm9yIHNlbmRpbmcgYmFjayBhIE5ldHdvcmtSZXNvdXJjZUxv
YWRlcjo6Q29udGludWVEaWRSZWNlaXZlUmVzcG9uc2UgbWVzc2FnZS4KLSAgICBib29sIHNob3Vs
ZENvbnRpbnVlRGlkUmVjZWl2ZVJlc3BvbnNlID0gIW1fcGFyYW1ldGVycy5pc01haW5SZXNvdXJj
ZTsKKyAgICBib29sIHNob3VsZENvbnRpbnVlRGlkUmVjZWl2ZVJlc3BvbnNlID0gIXNob3VsZFdh
aXRDb250aW51ZURpZFJlY2VpdmVSZXNwb25zZTsKICNpZiBFTkFCTEUoTkVUV09SS19DQUNIRSkK
ICAgICBzaG91bGRDb250aW51ZURpZFJlY2VpdmVSZXNwb25zZSA9IHNob3VsZENvbnRpbnVlRGlk
UmVjZWl2ZVJlc3BvbnNlIHx8IG1fY2FjaGVFbnRyeUZvclZhbGlkYXRpb247CiAjZW5kaWYKQEAg
LTU0Myw3ICs1NDQsOCBAQCB2b2lkIE5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6ZGlkUmV0cmlldmVD
CiAgICAgICAgIG1fc3luY2hyb25vdXNMb2FkRGF0YS0+cmVzcG9uc2UgPSBlbnRyeS0+cmVzcG9u
c2UoKTsKICAgICAgICAgc2VuZFJlcGx5VG9TeW5jaHJvbm91c1JlcXVlc3QoKm1fc3luY2hyb25v
dXNMb2FkRGF0YSwgZW50cnktPmJ1ZmZlcigpKTsKICAgICB9IGVsc2UgewotICAgICAgICBzZW5k
QWJvcnRpbmdPbkZhaWx1cmUoTWVzc2FnZXM6OldlYlJlc291cmNlTG9hZGVyOjpEaWRSZWNlaXZl
UmVzcG9uc2UoZW50cnktPnJlc3BvbnNlKCksIG1fcGFyYW1ldGVycy5pc01haW5SZXNvdXJjZSkp
OworICAgICAgICBib29sIG5lZWRzQ29udGludWVEaWRSZWNlaXZlUmVzcG9uc2VNZXNzYWdlID0g
b3JpZ2luYWxSZXF1ZXN0KCkucmVxdWVzdGVyKCkgPT0gUmVzb3VyY2VSZXF1ZXN0OjpSZXF1ZXN0
ZXI6Ok1haW47CisgICAgICAgIHNlbmRBYm9ydGluZ09uRmFpbHVyZShNZXNzYWdlczo6V2ViUmVz
b3VyY2VMb2FkZXI6OkRpZFJlY2VpdmVSZXNwb25zZShlbnRyeS0+cmVzcG9uc2UoKSwgbmVlZHND
b250aW51ZURpZFJlY2VpdmVSZXNwb25zZU1lc3NhZ2UpKTsKIAogI2lmIEVOQUJMRShTSEFSRUFC
TEVfUkVTT1VSQ0UpCiAgICAgICAgIGlmICghZW50cnktPnNoYXJlYWJsZVJlc291cmNlSGFuZGxl
KCkuaXNOdWxsKCkpCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9O
ZXR3b3JrQ2FjaGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9j
ZXNzL2NhY2hlL05ldHdvcmtDYWNoZS5jcHAJKHJldmlzaW9uIDE4MzM4OCkKKysrIFNvdXJjZS9X
ZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTI5MCw4ICsyOTAsOCBAQCBzdGF0aWMgU3RvcmVEZWNpc2lvbiBtYWtlU3RvcmVEZWNp
c2lvbihjCiAgICAgICAgICAgICByZXR1cm4gU3RvcmVEZWNpc2lvbjo6Tm9EdWVUb0hUVFBTdGF0
dXNDb2RlOwogICAgIH0KIAotICAgIC8vIE1haW4gcmVzb3VyY2UgaGFzIFJlc291cmNlTG9hZFBy
aW9yaXR5VmVyeUhpZ2guCi0gICAgYm9vbCBzdG9yZVVuY29uZGl0aW9uYWxseUZvckhpc3RvcnlO
YXZpZ2F0aW9uID0gb3JpZ2luYWxSZXF1ZXN0LnByaW9yaXR5KCkgPT0gV2ViQ29yZTo6UmVzb3Vy
Y2VMb2FkUHJpb3JpdHlWZXJ5SGlnaDsKKyAgICBib29sIGlzTWFpblJlc291cmNlID0gb3JpZ2lu
YWxSZXF1ZXN0LnJlcXVlc3RlcigpID09IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdDo6UmVxdWVz
dGVyOjpNYWluOworICAgIGJvb2wgc3RvcmVVbmNvbmRpdGlvbmFsbHlGb3JIaXN0b3J5TmF2aWdh
dGlvbiA9IGlzTWFpblJlc291cmNlIHx8IG9yaWdpbmFsUmVxdWVzdC5wcmlvcml0eSgpID09IFdl
YkNvcmU6OlJlc291cmNlTG9hZFByaW9yaXR5VmVyeUhpZ2g7CiAgICAgaWYgKCFzdG9yZVVuY29u
ZGl0aW9uYWxseUZvckhpc3RvcnlOYXZpZ2F0aW9uKSB7CiAgICAgICAgIGF1dG8gbm93ID0gc3Rk
OjpjaHJvbm86OnN5c3RlbV9jbG9jazo6bm93KCk7CiAgICAgICAgIGJvb2wgaGFzTm9uWmVyb0xp
ZmV0aW1lID0gIXJlc3BvbnNlLmNhY2hlQ29udHJvbENvbnRhaW5zTm9DYWNoZSgpICYmIFdlYkNv
cmU6OmNvbXB1dGVGcmVzaG5lc3NMaWZldGltZUZvckhUVFBGYW1pbHkocmVzcG9uc2UsIG5vdykg
PiAwX21zOwpAQCAtMzAxLDYgKzMwMSwxMyBAQCBzdGF0aWMgU3RvcmVEZWNpc2lvbiBtYWtlU3Rv
cmVEZWNpc2lvbihjCiAgICAgICAgICAgICByZXR1cm4gU3RvcmVEZWNpc2lvbjo6Tm9EdWVUb1Vu
bGlrZWx5VG9SZXVzZTsKICAgICB9CiAKKyAgICAvLyBNZWRpYSBsb2FkZWQgdmlhIFhIUiBpcyBs
aWtlbHkgYmVpbmcgdXNlZCBmb3IgTVNFIHN0cmVhbWluZyAoWW91VHViZSBhbmQgTmV0ZmxpeCBm
b3IgZXhhbXBsZSkuCisgICAgLy8gU3RyZWFtaW5nIG1lZGlhIGZpbGxzIHRoZSBjYWNoZSBxdWlj
a2x5IGFuZCBpcyB1bmxpa2VseSB0byBiZSByZXVzZWQuCisgICAgYm9vbCBpc1hIUiA9IG9yaWdp
bmFsUmVxdWVzdC5yZXF1ZXN0ZXIoKSA9PSBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3Q6OlJlcXVl
c3Rlcjo6WEhSOworICAgIGJvb2wgaXNMaWtlbHlTdHJlYW1pbmdNZWRpYSA9IGlzWEhSICYmIChy
ZXNwb25zZS5taW1lVHlwZSgpLnN0YXJ0c1dpdGgoInZpZGVvLyIpIHx8IHJlc3BvbnNlLm1pbWVU
eXBlKCkuc3RhcnRzV2l0aCgiYXVkaW8vIikpOworICAgIGlmIChpc0xpa2VseVN0cmVhbWluZ01l
ZGlhKQorICAgICAgICByZXR1cm4gU3RvcmVEZWNpc2lvbjo6Tm9EdWVUb1N0cmVhbWluZ01lZGlh
OworCiAgICAgcmV0dXJuIFN0b3JlRGVjaXNpb246OlllczsKIH0KIApJbmRleDogU291cmNlL1dl
YktpdDIvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlLmgJKHJldmlz
aW9uIDE4MzM4OCkKKysrIFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdv
cmtDYWNoZS5oCSh3b3JraW5nIGNvcHkpCkBAIC03MSw3ICs3MSw4IEBAIGVudW0gY2xhc3MgU3Rv
cmVEZWNpc2lvbiB7CiAgICAgTm9EdWVUb05vU3RvcmVSZXNwb25zZSwKICAgICBOb0R1ZVRvSFRU
UFN0YXR1c0NvZGUsCiAgICAgTm9EdWVUb05vU3RvcmVSZXF1ZXN0LAotICAgIE5vRHVlVG9Vbmxp
a2VseVRvUmV1c2UKKyAgICBOb0R1ZVRvVW5saWtlbHlUb1JldXNlLAorICAgIE5vRHVlVG9TdHJl
YW1pbmdNZWRpYQogfTsKIAogZW51bSBjbGFzcyBVc2VEZWNpc2lvbiB7CkluZGV4OiBTb3VyY2Uv
V2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVTdGF0aXN0aWNzLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3Jr
Q2FjaGVTdGF0aXN0aWNzLmNwcAkocmV2aXNpb24gMTgzMzg4KQorKysgU291cmNlL1dlYktpdDIv
TmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlU3RhdGlzdGljcy5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTI0NCw2ICsyNDQsOCBAQCBzdGF0aWMgU3RyaW5nIHN0b3JlRGVjaXNpb25Ub0Rp
YWdub3N0aWNLCiAgICAgICAgIHJldHVybiBXZWJDb3JlOjpEaWFnbm9zdGljTG9nZ2luZ0tleXM6
OnVuY2FjaGVhYmxlU3RhdHVzQ29kZUtleSgpOwogICAgIGNhc2UgU3RvcmVEZWNpc2lvbjo6Tm9E
dWVUb1VubGlrZWx5VG9SZXVzZToKICAgICAgICAgcmV0dXJuIFdlYkNvcmU6OkRpYWdub3N0aWNM
b2dnaW5nS2V5czo6dW5saWtlbHlUb1JldXNlS2V5KCk7CisgICAgY2FzZSBTdG9yZURlY2lzaW9u
OjpOb0R1ZVRvU3RyZWFtaW5nTWVkaWE6CisgICAgICAgIHJldHVybiBXZWJDb3JlOjpEaWFnbm9z
dGljTG9nZ2luZ0tleXM6OnN0cmVhbWluZ01lZGlhKCk7CiAgICAgY2FzZSBTdG9yZURlY2lzaW9u
OjpZZXM6CiAgICAgICAgIC8vIEl0IHdhcyBzdG9yZWQgYnV0IGNvdWxkIG5vdCBiZSByZXRyaWV2
ZWQgc28gaXQgbXVzdCBoYXZlIGJlZW4gcHJ1bmVkIGZyb20gdGhlIGNhY2hlLgogICAgICAgICBy
ZXR1cm4gV2ViQ29yZTo6RGlhZ25vc3RpY0xvZ2dpbmdLZXlzOjpub0xvbmdlckluQ2FjaGVLZXko
KTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9OZXR3b3JrL05ldHdvcmtSZXNvdXJjZUxv
YWRQYXJhbWV0ZXJzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvTmV0
d29yay9OZXR3b3JrUmVzb3VyY2VMb2FkUGFyYW1ldGVycy5jcHAJKHJldmlzaW9uIDE4MzM4OCkK
KysrIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9OZXR3b3JrL05ldHdvcmtSZXNvdXJjZUxvYWRQYXJh
bWV0ZXJzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDUsNyArNDUsNiBAQCBOZXR3b3JrUmVzb3Vy
Y2VMb2FkUGFyYW1ldGVyczo6TmV0d29ya1JlCiAgICAgLCBhbGxvd1N0b3JlZENyZWRlbnRpYWxz
KERvTm90QWxsb3dTdG9yZWRDcmVkZW50aWFscykKICAgICAsIGNsaWVudENyZWRlbnRpYWxQb2xp
Y3koRG9Ob3RBc2tDbGllbnRGb3JBbnlDcmVkZW50aWFscykKICAgICAsIHNob3VsZENsZWFyUmVm
ZXJyZXJPbkhUVFBTVG9IVFRQUmVkaXJlY3QodHJ1ZSkKLSAgICAsIGlzTWFpblJlc291cmNlKGZh
bHNlKQogICAgICwgZGVmZXJzTG9hZGluZyhmYWxzZSkKICAgICAsIG5lZWRzQ2VydGlmaWNhdGVJ
bmZvKGZhbHNlKQogICAgICwgbWF4aW11bUJ1ZmZlcmluZ1RpbWUoMF9tcykKQEAgLTk0LDcgKzkz
LDYgQEAgdm9pZCBOZXR3b3JrUmVzb3VyY2VMb2FkUGFyYW1ldGVyczo6ZW5jbwogICAgIGVuY29k
ZXIuZW5jb2RlRW51bShhbGxvd1N0b3JlZENyZWRlbnRpYWxzKTsKICAgICBlbmNvZGVyLmVuY29k
ZUVudW0oY2xpZW50Q3JlZGVudGlhbFBvbGljeSk7CiAgICAgZW5jb2RlciA8PCBzaG91bGRDbGVh
clJlZmVycmVyT25IVFRQU1RvSFRUUFJlZGlyZWN0OwotICAgIGVuY29kZXIgPDwgaXNNYWluUmVz
b3VyY2U7CiAgICAgZW5jb2RlciA8PCBkZWZlcnNMb2FkaW5nOwogICAgIGVuY29kZXIgPDwgbmVl
ZHNDZXJ0aWZpY2F0ZUluZm87CiAgICAgZW5jb2RlciA8PCBtYXhpbXVtQnVmZmVyaW5nVGltZTsK
QEAgLTE1MSw4ICsxNDksNiBAQCBib29sIE5ldHdvcmtSZXNvdXJjZUxvYWRQYXJhbWV0ZXJzOjpk
ZWNvCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlc3Vs
dC5zaG91bGRDbGVhclJlZmVycmVyT25IVFRQU1RvSFRUUFJlZGlyZWN0KSkKICAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVzdWx0LmlzTWFpblJlc291cmNl
KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVzdWx0
LmRlZmVyc0xvYWRpbmcpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgaWYgKCFkZWNvZGVy
LmRlY29kZShyZXN1bHQubmVlZHNDZXJ0aWZpY2F0ZUluZm8pKQpJbmRleDogU291cmNlL1dlYktp
dDIvU2hhcmVkL05ldHdvcmsvTmV0d29ya1Jlc291cmNlTG9hZFBhcmFtZXRlcnMuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvTmV0d29yay9OZXR3b3JrUmVzb3VyY2VMb2Fk
UGFyYW1ldGVycy5oCShyZXZpc2lvbiAxODMzODgpCisrKyBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQv
TmV0d29yay9OZXR3b3JrUmVzb3VyY2VMb2FkUGFyYW1ldGVycy5oCSh3b3JraW5nIGNvcHkpCkBA
IC02MSw3ICs2MSw2IEBAIHB1YmxpYzoKICAgICBXZWJDb3JlOjpTdG9yZWRDcmVkZW50aWFscyBh
bGxvd1N0b3JlZENyZWRlbnRpYWxzOwogICAgIFdlYkNvcmU6OkNsaWVudENyZWRlbnRpYWxQb2xp
Y3kgY2xpZW50Q3JlZGVudGlhbFBvbGljeTsKICAgICBib29sIHNob3VsZENsZWFyUmVmZXJyZXJP
bkhUVFBTVG9IVFRQUmVkaXJlY3Q7Ci0gICAgYm9vbCBpc01haW5SZXNvdXJjZTsKICAgICBib29s
IGRlZmVyc0xvYWRpbmc7CiAgICAgYm9vbCBuZWVkc0NlcnRpZmljYXRlSW5mbzsKICAgICBzdGQ6
OmNocm9ubzo6bWlsbGlzZWNvbmRzIG1heGltdW1CdWZmZXJpbmdUaW1lOwpJbmRleDogU291cmNl
L1dlYktpdDIvU2hhcmVkL21hYy9XZWJDb3JlQXJndW1lbnRDb2RlcnNNYWMubW0KPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYktpdDIvU2hhcmVkL21hYy9XZWJDb3JlQXJndW1lbnRDb2RlcnNNYWMu
bW0JKHJldmlzaW9uIDE4MzM4OCkKKysrIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9tYWMvV2ViQ29y
ZUFyZ3VtZW50Q29kZXJzTWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC04NCw2ICs4NCw3IEBAIHZv
aWQgQXJndW1lbnRDb2RlcjxSZXNvdXJjZVJlcXVlc3Q+OjplbmMKIAogICAgIC8vIFRoZSBmYWxs
YmFjayBhcnJheSBpcyBwYXJ0IG9mIENGVVJMUmVxdWVzdCwgYnV0IGl0IGlzIG5vdCBlbmNvZGVk
IGJ5IFdLQ0ZVUkxSZXF1ZXN0Q3JlYXRlU2VyaWFsaXphYmxlUmVwcmVzZW50YXRpb24uCiAgICAg
ZW5jb2RlciA8PCByZXNvdXJjZVJlcXVlc3QucmVzcG9uc2VDb250ZW50RGlzcG9zaXRpb25FbmNv
ZGluZ0ZhbGxiYWNrQXJyYXkoKTsKKyAgICBlbmNvZGVyLmVuY29kZUVudW0ocmVzb3VyY2VSZXF1
ZXN0LnJlcXVlc3RlcigpKTsKIH0KICNlbHNlCiB2b2lkIEFyZ3VtZW50Q29kZXI8UmVzb3VyY2VS
ZXF1ZXN0Pjo6ZW5jb2RlUGxhdGZvcm1EYXRhKEFyZ3VtZW50RW5jb2RlciYgZW5jb2RlciwgY29u
c3QgUmVzb3VyY2VSZXF1ZXN0JiByZXNvdXJjZVJlcXVlc3QpCkBAIC0xMDksNiArMTEwLDcgQEAg
dm9pZCBBcmd1bWVudENvZGVyPFJlc291cmNlUmVxdWVzdD46OmVuYwogCiAgICAgLy8gVGhlIGZh
bGxiYWNrIGFycmF5IGlzIHBhcnQgb2YgTlNVUkxSZXF1ZXN0LCBidXQgaXQgaXMgbm90IGVuY29k
ZWQgYnkgV0tOU1VSTFJlcXVlc3RDcmVhdGVTZXJpYWxpemFibGVSZXByZXNlbnRhdGlvbi4KICAg
ICBlbmNvZGVyIDw8IHJlc291cmNlUmVxdWVzdC5yZXNwb25zZUNvbnRlbnREaXNwb3NpdGlvbkVu
Y29kaW5nRmFsbGJhY2tBcnJheSgpOworICAgIGVuY29kZXIuZW5jb2RlRW51bShyZXNvdXJjZVJl
cXVlc3QucmVxdWVzdGVyKCkpOwogfQogI2VuZGlmCiAKQEAgLTE1MSw2ICsxNTMsMTEgQEAgYm9v
bCBBcmd1bWVudENvZGVyPFJlc291cmNlUmVxdWVzdD46OmRlYwogICAgICAgICByZXNwb25zZUNv
bnRlbnREaXNwb3NpdGlvbkVuY29kaW5nRmFsbGJhY2tBcnJheS5zaXplKCkgPiAyID8gcmVzcG9u
c2VDb250ZW50RGlzcG9zaXRpb25FbmNvZGluZ0ZhbGxiYWNrQXJyYXlbMl0gOiBTdHJpbmcoKQog
ICAgICk7CiAKKyAgICBSZXNvdXJjZVJlcXVlc3Q6OlJlcXVlc3RlciByZXF1ZXN0ZXI7CisgICAg
aWYgKCFkZWNvZGVyLmRlY29kZUVudW0ocmVxdWVzdGVyKSkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIHJlc291cmNlUmVxdWVzdC5zZXRSZXF1ZXN0ZXIocmVxdWVzdGVyKTsKKwogICAgIHJl
dHVybiB0cnVlOwogfQogCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL05ldHdvcmsv
V2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL05ldHdvcmsvV2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVyLmNwcAkocmV2aXNp
b24gMTgzMzg4KQorKysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9OZXR3b3JrL1dlYlJlc291
cmNlTG9hZFNjaGVkdWxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE3Myw3ICsxNzMsNiBAQCB2
b2lkIFdlYlJlc291cmNlTG9hZFNjaGVkdWxlcjo6c2NoZWR1bGVMCiAgICAgLy8gSWYgdGhlcmUg
aXMgbm8gV2ViRnJhbWUgdGhlbiB0aGlzIHJlc291cmNlIGNhbm5vdCBiZSBhdXRoZW50aWNhdGVk
IHdpdGggdGhlIGNsaWVudC4KICAgICBsb2FkUGFyYW1ldGVycy5jbGllbnRDcmVkZW50aWFsUG9s
aWN5ID0gKHdlYkZyYW1lICYmIHdlYlBhZ2UgJiYgcmVzb3VyY2VMb2FkZXItPmlzQWxsb3dlZFRv
QXNrVXNlckZvckNyZWRlbnRpYWxzKCkpID8gQXNrQ2xpZW50Rm9yQWxsQ3JlZGVudGlhbHMgOiBE
b05vdEFza0NsaWVudEZvckFueUNyZWRlbnRpYWxzOwogICAgIGxvYWRQYXJhbWV0ZXJzLnNob3Vs
ZENsZWFyUmVmZXJyZXJPbkhUVFBTVG9IVFRQUmVkaXJlY3QgPSBzaG91bGRDbGVhclJlZmVycmVy
T25IVFRQU1RvSFRUUFJlZGlyZWN0OwotICAgIGxvYWRQYXJhbWV0ZXJzLmlzTWFpblJlc291cmNl
ID0gcmVzb3VyY2UgJiYgcmVzb3VyY2UtPnR5cGUoKSA9PSBDYWNoZWRSZXNvdXJjZTo6TWFpblJl
c291cmNlOwogICAgIGxvYWRQYXJhbWV0ZXJzLmRlZmVyc0xvYWRpbmcgPSByZXNvdXJjZUxvYWRl
ci0+ZGVmZXJzTG9hZGluZygpOwogICAgIGxvYWRQYXJhbWV0ZXJzLm5lZWRzQ2VydGlmaWNhdGVJ
bmZvID0gcmVzb3VyY2VMb2FkZXItPnNob3VsZEluY2x1ZGVDZXJ0aWZpY2F0ZUluZm8oKTsKICAg
ICBsb2FkUGFyYW1ldGVycy5tYXhpbXVtQnVmZmVyaW5nVGltZSA9IG1heGltdW1CdWZmZXJpbmdU
aW1lKHJlc291cmNlKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dl
YkZyYW1lTG9hZGVyQ2xpZW50Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvbWFjL1dl
YkNvcmVTdXBwb3J0L1dlYkZyYW1lTG9hZGVyQ2xpZW50Lm1tCShyZXZpc2lvbiAxODMzODgpCisr
KyBTb3VyY2UvV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJGcmFtZUxvYWRlckNsaWVudC5t
bQkod29ya2luZyBjb3B5KQpAQCAtMzYzLDggKzM2Myw4IEBAIHZvaWQgV2ViRnJhbWVMb2FkZXJD
bGllbnQ6OmRpc3BhdGNoV2lsbFMKICAgICBOU1VSTFJlcXVlc3QgKm5ld1VSTFJlcXVlc3QgPSBj
dXJyZW50VVJMUmVxdWVzdDsKICAgICBSZXNvdXJjZUxvYWRQcmlvcml0eSBwcmlvcml0eSA9IHJl
cXVlc3QucHJpb3JpdHkoKTsKICAgICBib29sIGlzSGlkZGVuRnJvbUluc3BlY3RvciA9IHJlcXVl
c3QuaGlkZGVuRnJvbUluc3BlY3RvcigpOworICAgIGF1dG8gcmVxdWVzdGVyID0gcmVxdWVzdC5y
ZXF1ZXN0ZXIoKTsKICNpZiBQTEFURk9STShJT1MpCi0gICAgYm9vbCBpc01haW5SZXNvdXJjZVJl
cXVlc3QgPSByZXF1ZXN0LmRlcHJlY2F0ZWRJc01haW5SZXNvdXJjZVJlcXVlc3QoKTsKICAgICBp
ZiAoaW1wbGVtZW50YXRpb25zLT53ZWJUaHJlYWRXaWxsU2VuZFJlcXVlc3RGdW5jKSB7CiAgICAg
ICAgIG5ld1VSTFJlcXVlc3QgPSAoTlNVUkxSZXF1ZXN0ICopQ2FsbFJlc291cmNlTG9hZERlbGVn
YXRlSW5XZWJUaHJlYWQoaW1wbGVtZW50YXRpb25zLT53ZWJUaHJlYWRXaWxsU2VuZFJlcXVlc3RG
dW5jLCB3ZWJWaWV3LCBAc2VsZWN0b3Iod2ViVGhyZWFkV2ViVmlldzpyZXNvdXJjZTp3aWxsU2Vu
ZFJlcXVlc3Q6cmVkaXJlY3RSZXNwb25zZTpmcm9tRGF0YVNvdXJjZTopLCBbd2ViVmlldyBfb2Jq
ZWN0Rm9ySWRlbnRpZmllcjppZGVudGlmaWVyXSwgY3VycmVudFVSTFJlcXVlc3QsIHJlZGlyZWN0
UmVzcG9uc2UubnNVUkxSZXNwb25zZSgpLCBkYXRhU291cmNlKGxvYWRlcikpOwogICAgIH0gZWxz
ZQpAQCAtMzc1LDEwICszNzUsOCBAQCB2b2lkIFdlYkZyYW1lTG9hZGVyQ2xpZW50OjpkaXNwYXRj
aFdpbGxTCiAgICAgaWYgKG5ld1VSTFJlcXVlc3QgIT0gY3VycmVudFVSTFJlcXVlc3QpCiAgICAg
ICAgIHJlcXVlc3QgPSBuZXdVUkxSZXF1ZXN0OwogICAgIHJlcXVlc3Quc2V0SGlkZGVuRnJvbUlu
c3BlY3Rvcihpc0hpZGRlbkZyb21JbnNwZWN0b3IpOwotI2lmIFBMQVRGT1JNKElPUykKLSAgICBy
ZXF1ZXN0LmRlcHJlY2F0ZWRTZXRNYWluUmVzb3VyY2VSZXF1ZXN0KGlzTWFpblJlc291cmNlUmVx
dWVzdCk7Ci0jZW5kaWYKICAgICByZXF1ZXN0LnNldFByaW9yaXR5KHByaW9yaXR5KTsKKyAgICBy
ZXF1ZXN0LnNldFJlcXVlc3RlcihyZXF1ZXN0ZXIpOwogfQogCiBib29sIFdlYkZyYW1lTG9hZGVy
Q2xpZW50OjpzaG91bGRVc2VDcmVkZW50aWFsU3RvcmFnZShEb2N1bWVudExvYWRlciogbG9hZGVy
LCB1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIpCkluZGV4OiBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAxODMzOTQpCisr
KyBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNSBAQAor
MjAxNS0wNC0yNyAgQW50dGkgS29pdmlzdG8gIDxhbnR0aUBhcHBsZS5jb20+CisKKyAgICAgICAg
TmV0d29yayBDYWNoZTogRGlzayBjYWNoZSBnZXR0aW5nIGZpbGxlZCBieSBZb3VUdWJlIHZpZGVv
IGRhdGEKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0
NDI1OQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICog
aHR0cC90ZXN0cy9jYWNoZS9kaXNrLWNhY2hlL2Rpc2stY2FjaGUtbWVkaWEtZXhwZWN0ZWQudHh0
OiBBZGRlZC4KKyAgICAgICAgKiBodHRwL3Rlc3RzL2NhY2hlL2Rpc2stY2FjaGUvZGlzay1jYWNo
ZS1tZWRpYS5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBodHRwL3Rlc3RzL2NhY2hlL2Rpc2stY2Fj
aGUvcmVzb3VyY2VzL2NhY2hlLXRlc3QuanM6CisgICAgICAgIChnZW5lcmF0ZVRlc3RVUkwpOgor
CiAyMDE1LTA0LTI3ICBZb3Vlbm4gRmFibGV0ICA8eW91ZW5uLmZhYmxldEBjcmYuY2Fub24uZnI+
CiAKICAgICAgICAgU3luY2hyb25vdXMgWE1MSHR0cFJlcXVlc3Qgc2hvdWxkIGdldCBhY2Nlc3Mg
dG8gQXBwQ2FjaGUgcmVzb3VyY2VzIHN0b3JlZCBhcyBmbGF0IGZpbGVzCkluZGV4OiBMYXlvdXRU
ZXN0cy9odHRwL3Rlc3RzL2NhY2hlL2Rpc2stY2FjaGUvZGlzay1jYWNoZS1tZWRpYS1leHBlY3Rl
ZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9jYWNoZS9kaXNrLWNh
Y2hlL2Rpc2stY2FjaGUtbWVkaWEtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0
VGVzdHMvaHR0cC90ZXN0cy9jYWNoZS9kaXNrLWNhY2hlL2Rpc2stY2FjaGUtbWVkaWEtZXhwZWN0
ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjkgQEAKK1Rlc3RzIHRoYXQgbWVkaWEg
cmVzb3VyY2VzIGxvYWRlZCB2aWEgWEhSIGlzIG5vdCBjYWNoZWQuCisKK09uIHN1Y2Nlc3MsIHlv
dSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNU
IENPTVBMRVRFIi4KKworCitydW5uaW5nIDYgdGVzdHMKKworcmVzcG9uc2UgaGVhZGVyczogeyJD
YWNoZS1jb250cm9sIjoibWF4LWFnZT0wIiwiQ29udGVudC1UeXBlIjoidGV4dC9wbGFpbiJ9City
ZXNwb25zZSBzb3VyY2U6IE5ldHdvcmsKKworcmVzcG9uc2UgaGVhZGVyczogeyJDYWNoZS1jb250
cm9sIjoibWF4LWFnZT0xMDAiLCJDb250ZW50LVR5cGUiOiJ0ZXh0L3BsYWluIn0KK3Jlc3BvbnNl
IHNvdXJjZTogRGlzayBjYWNoZQorCityZXNwb25zZSBoZWFkZXJzOiB7IkNhY2hlLWNvbnRyb2wi
OiJtYXgtYWdlPTAiLCJDb250ZW50LVR5cGUiOiJ2aWRlby9tcDQifQorcmVzcG9uc2Ugc291cmNl
OiBOZXR3b3JrCisKK3Jlc3BvbnNlIGhlYWRlcnM6IHsiQ2FjaGUtY29udHJvbCI6Im1heC1hZ2U9
MTAwIiwiQ29udGVudC1UeXBlIjoidmlkZW8vbXA0In0KK3Jlc3BvbnNlIHNvdXJjZTogTmV0d29y
aworCityZXNwb25zZSBoZWFkZXJzOiB7IkNhY2hlLWNvbnRyb2wiOiJtYXgtYWdlPTAiLCJDb250
ZW50LVR5cGUiOiJhdWRpby9tcDQifQorcmVzcG9uc2Ugc291cmNlOiBOZXR3b3JrCisKK3Jlc3Bv
bnNlIGhlYWRlcnM6IHsiQ2FjaGUtY29udHJvbCI6Im1heC1hZ2U9MTAwIiwiQ29udGVudC1UeXBl
IjoiYXVkaW8vbXA0In0KK3Jlc3BvbnNlIHNvdXJjZTogTmV0d29yaworCitQQVNTIHN1Y2Nlc3Nm
dWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpJbmRleDogTGF5b3V0VGVzdHMv
aHR0cC90ZXN0cy9jYWNoZS9kaXNrLWNhY2hlL2Rpc2stY2FjaGUtbWVkaWEuaHRtbAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2NhY2hlL2Rpc2stY2FjaGUvZGlzay1jYWNo
ZS1tZWRpYS5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9jYWNo
ZS9kaXNrLWNhY2hlL2Rpc2stY2FjaGUtbWVkaWEuaHRtbAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDI5IEBACis8c2NyaXB0IHNyYz0iL2pzLXRlc3QtcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpz
Ij48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvY2FjaGUtdGVzdC5qcyI+PC9zY3Jp
cHQ+Cis8Ym9keT4KKzxzY3JpcHQ+CisKK3ZhciB0ZXN0TWF0cml4ID0KK1sKKyBbCisgIHsgcmVz
cG9uc2VIZWFkZXJzOiB7J0NhY2hlLWNvbnRyb2wnOiAnbWF4LWFnZT0wJyB9IH0sCisgIHsgcmVz
cG9uc2VIZWFkZXJzOiB7J0NhY2hlLWNvbnRyb2wnOiAnbWF4LWFnZT0xMDAnIH0gfSwKKyAgXSwK
KyBbCisgIHsgcmVzcG9uc2VIZWFkZXJzOiB7J0NvbnRlbnQtVHlwZSc6ICd0ZXh0L3BsYWluJyB9
IH0sCisgIHsgcmVzcG9uc2VIZWFkZXJzOiB7J0NvbnRlbnQtVHlwZSc6ICd2aWRlby9tcDQnIH0g
fSwKKyAgeyByZXNwb25zZUhlYWRlcnM6IHsnQ29udGVudC1UeXBlJzogJ2F1ZGlvL21wNCcgfSB9
LAorICBdLAorIF07CisKK2Rlc2NyaXB0aW9uKCJUZXN0cyB0aGF0IG1lZGlhIHJlc291cmNlcyBs
b2FkZWQgdmlhIFhIUiBpcyBub3QgY2FjaGVkLiIpOworCit2YXIgdGVzdHMgPSBnZW5lcmF0ZVRl
c3RzKHRlc3RNYXRyaXgpOworCitkZWJ1ZygicnVubmluZyAiICsgdGVzdHMubGVuZ3RoICsgIiB0
ZXN0cyIpOworZGVidWcoIiIpOworCitydW5UZXN0cyh0ZXN0cyk7CisKKzwvc2NyaXB0PgorPHNj
cmlwdCBzcmM9Ii9qcy10ZXN0LXJlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgpJ
bmRleDogTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9jYWNoZS9kaXNrLWNhY2hlL3Jlc291cmNlcy9j
YWNoZS10ZXN0LmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2h0dHAvdGVzdHMvY2FjaGUv
ZGlzay1jYWNoZS9yZXNvdXJjZXMvY2FjaGUtdGVzdC5qcwkocmV2aXNpb24gMTgzMzg4KQorKysg
TGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9jYWNoZS9kaXNrLWNhY2hlL3Jlc291cmNlcy9jYWNoZS10
ZXN0LmpzCSh3b3JraW5nIGNvcHkpCkBAIC00Niw3ICs0Niw5IEBAIGZ1bmN0aW9uIGdlbmVyYXRl
VGVzdFVSTCh0ZXN0LCBpbmNsdWRlQm8KICAgICB2YXIgdGVzdFVSTCA9ICJyZXNvdXJjZXMvZ2Vu
ZXJhdGUtcmVzcG9uc2UuY2dpP2luY2x1ZGUtYm9keT0iICsgKGluY2x1ZGVCb2R5ID8gIjEiIDog
IjAiKTsKICAgICBpZiAoZXhwaXJlc0luRnV0dXJlSW4zMDQpCiAgICAgICAgIHRlc3RVUkwgKz0g
IiZleHBpcmVzLWluLWZ1dHVyZS1pbi0zMDQ9MSI7Ci0gICAgdGVzdFVSTCArPSAiJnVuaXF1ZUlk
PSIgKyB1bmlxdWVUZXN0SWQrKyArICImQ29udGVudC10eXBlPXRleHQvcGxhaW4iOworICAgIHRl
c3RVUkwgKz0gIiZ1bmlxdWVJZD0iICsgdW5pcXVlVGVzdElkKys7CisgICAgaWYgKCF0ZXN0LnJl
c3BvbnNlSGVhZGVycyB8fCAhdGVzdC5yZXNwb25zZUhlYWRlcnNbIkNvbnRlbnQtVHlwZSJdKQor
ICAgICAgICB0ZXN0VVJMICs9ICImQ29udGVudC1UeXBlPXRleHQvcGxhaW4iOwogICAgIGZvciAo
dmFyIGhlYWRlciBpbiB0ZXN0LnJlc3BvbnNlSGVhZGVycykKICAgICAgICAgdGVzdFVSTCArPSAn
JicgKyBoZWFkZXIgKyAnPScgKyBtYWtlSGVhZGVyVmFsdWUodGVzdC5yZXNwb25zZUhlYWRlcnNb
aGVhZGVyXSk7CiAgICAgcmV0dXJuIHRlc3RVUkw7Cg==
</data>
<flag name="review"
          id="276535"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>