<?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>67720</bug_id>
          
          <creation_ts>2011-09-07 11:10:09 -0700</creation_ts>
          <short_desc>&lt;style scoped&gt;: Implement selector matching</short_desc>
          <delta_ts>2012-03-07 03:13:11 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>DOM</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>67790</dependson>
    
    <dependson>70223</dependson>
    
    <dependson>72480</dependson>
    
    <dependson>72482</dependson>
    
    <dependson>73190</dependson>
    
    <dependson>73192</dependson>
          <blocked>49142</blocked>
    
    <blocked>68093</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Roland Steiner">rolandsteiner</reporter>
          <assigned_to name="Roland Steiner">rolandsteiner</assigned_to>
          <cc>arv</cc>
    
    <cc>dglazkov</cc>
    
    <cc>dominicc</cc>
    
    <cc>gustavo</cc>
    
    <cc>hayato</cc>
    
    <cc>koivisto</cc>
    
    <cc>macpherson</cc>
    
    <cc>morrita</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>xan.lopez</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>463469</commentid>
    <comment_count>0</comment_count>
    <who name="Roland Steiner">rolandsteiner</who>
    <bug_when>2011-09-07 11:10:09 -0700</bug_when>
    <thetext>As part of the larger &lt;style scoped&gt; implementation, implement the necessary changes to selector matching.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>485015</commentid>
    <comment_count>1</comment_count>
      <attachid>111229</attachid>
    <who name="Roland Steiner">rolandsteiner</who>
    <bug_when>2011-10-17 02:26:07 -0700</bug_when>
    <thetext>Created attachment 111229
patch (requires 67718, 67790)

Patch implementing scoped selector resolution. Note that a selector does NOT store itself whether it should be scoped or not! Rather, this is an additional parameter to the matching functions. This way selectors do not have to be updated whenever the &apos;scoped&apos; attribute on a &lt;style&gt; element is set or removed, it also means that a follow-up implementation of queryScopedSelector() will be utterly trivial.

Note that this patch is not stand-alone - it requires the patches from https://bugs.webkit.org/show_bug.cgi?id=67718 and https://bugs.webkit.org/show_bug.cgi?id=67790 .</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>485017</commentid>
    <comment_count>2</comment_count>
      <attachid>111229</attachid>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2011-10-17 02:33:04 -0700</bug_when>
    <thetext>Comment on attachment 111229
patch (requires 67718, 67790)

Attachment 111229 did not pass efl-ews (efl):
Output: http://queues.webkit.org/results/10076940</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>485018</commentid>
    <comment_count>3</comment_count>
      <attachid>111229</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-10-17 02:33:50 -0700</bug_when>
    <thetext>Comment on attachment 111229
patch (requires 67718, 67790)

Attachment 111229 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/10077895</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>485019</commentid>
    <comment_count>4</comment_count>
      <attachid>111229</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2011-10-17 02:35:58 -0700</bug_when>
    <thetext>Comment on attachment 111229
patch (requires 67718, 67790)

Attachment 111229 did not pass qt-ews (qt):
Output: http://queues.webkit.org/results/10075932</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>485020</commentid>
    <comment_count>5</comment_count>
      <attachid>111229</attachid>
    <who name="Gustavo Noronha (kov)">gustavo</who>
    <bug_when>2011-10-17 02:40:01 -0700</bug_when>
    <thetext>Comment on attachment 111229
patch (requires 67718, 67790)

Attachment 111229 did not pass gtk-ews (gtk):
Output: http://queues.webkit.org/results/10079805</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>485024</commentid>
    <comment_count>6</comment_count>
      <attachid>111229</attachid>
    <who name="Roland Steiner">rolandsteiner</who>
    <bug_when>2011-10-17 03:07:22 -0700</bug_when>
    <thetext>Comment on attachment 111229
patch (requires 67718, 67790)

Seems even without the scope attribute and registering, the patch is still quite large. Will try to break it up further (please consider this a work-in-progress then).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>485109</commentid>
    <comment_count>7</comment_count>
      <attachid>111229</attachid>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2011-10-17 06:40:41 -0700</bug_when>
    <thetext>Comment on attachment 111229
patch (requires 67718, 67790)

Attachment 111229 did not pass mac-ews (mac):
Output: http://queues.webkit.org/results/10075999</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>503674</commentid>
    <comment_count>8</comment_count>
      <attachid>115342</attachid>
    <who name="Roland Steiner">rolandsteiner</who>
    <bug_when>2011-11-16 00:25:30 -0800</bug_when>
    <thetext>Created attachment 115342
updated patch

Updated &amp; de-conflicted patch - will r? after 67718 and 67790 have landed</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>503724</commentid>
    <comment_count>9</comment_count>
    <who name="Roland Steiner">rolandsteiner</who>
    <bug_when>2011-11-16 02:21:04 -0800</bug_when>
    <thetext>Update: I factored out some smaller refactoring from the patch into bugs 72480 and 72482. Will update patch after those have landed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>503939</commentid>
    <comment_count>10</comment_count>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2011-11-16 08:53:52 -0800</bug_when>
    <thetext>Antti, could you comment on the general approach?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>503952</commentid>
    <comment_count>11</comment_count>
      <attachid>115342</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-11-16 09:09:39 -0800</bug_when>
    <thetext>Comment on attachment 115342
updated patch

Attachment 115342 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/10329013</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>503954</commentid>
    <comment_count>12</comment_count>
      <attachid>115342</attachid>
    <who name="Gustavo Noronha (kov)">gustavo</who>
    <bug_when>2011-11-16 09:11:48 -0800</bug_when>
    <thetext>Comment on attachment 115342
updated patch

Attachment 115342 did not pass gtk-ews (gtk):
Output: http://queues.webkit.org/results/10425004</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>503957</commentid>
    <comment_count>13</comment_count>
      <attachid>115342</attachid>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2011-11-16 09:14:21 -0800</bug_when>
    <thetext>Comment on attachment 115342
updated patch

Attachment 115342 did not pass efl-ews (efl):
Output: http://queues.webkit.org/results/10396969</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>504007</commentid>
    <comment_count>14</comment_count>
      <attachid>115342</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2011-11-16 10:07:14 -0800</bug_when>
    <thetext>Comment on attachment 115342
updated patch

Attachment 115342 did not pass qt-ews (qt):
Output: http://queues.webkit.org/results/10486805</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>507098</commentid>
    <comment_count>15</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2011-11-21 11:23:59 -0800</bug_when>
    <thetext>As far as I understand, this patch implements a two separate features:
- Stylesheets scoped to a subtree (rules on sheets are only applied to the elements in the subtree).
- Selectors scoped to a subtree (child/descendant selectors only match up the the scope element).

Partly due to above, the logic of the patch gets somewhat lost and it is hard to determine if this is even a good implementation strategy.

These are separate features (is the latter yet specced?) and should be done in separate patches. Doing the first step only first would likely keep things much clearer.

The performance of the regular selector matching code is very critical while the performance of the scoped selector matching does not matter at all yet (as no one is currently using it). You should focus on making a testable implementation that has minimal impact on the existing code so we gain good understanding of the problem. The optimizations can come later.

You should in general avoid unrelated refactoring when implementing something like this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>507400</commentid>
    <comment_count>16</comment_count>
      <attachid>116174</attachid>
    <who name="Roland Steiner">rolandsteiner</who>
    <bug_when>2011-11-21 20:56:20 -0800</bug_when>
    <thetext>Created attachment 116174
patch, shrunk

New patch, removed all renaming and refactoring that isn&apos;t strictly necessary.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>507417</commentid>
    <comment_count>17</comment_count>
    <who name="Roland Steiner">rolandsteiner</who>
    <bug_when>2011-11-21 22:47:43 -0800</bug_when>
    <thetext>(In reply to comment #15)
&gt; As far as I understand, this patch implements a two separate features:
&gt; - Stylesheets scoped to a subtree (rules on sheets are only applied to the elements in the subtree).
&gt; - Selectors scoped to a subtree (child/descendant selectors only match up the the scope element).
&gt; 
&gt; Partly due to above, the logic of the patch gets somewhat lost and it is hard to determine if this is even a good implementation strategy.
&gt;
&gt; These are separate features (is the latter yet specced?) and should be done in separate patches. Doing the first step only first would likely keep things much clearer.

Yes, but please note that scoped stylesheets are just stored associated with their scope - there is no internal change. The difference only arises when that associated scope is applied to the selector matching algorithm.

Therefore, scoping without scoped stylesheets would have no &quot;client&quot;, while scoping stylesheets without the required scoped matching mechanism would be pointless.

I&apos;m therefore a bit at a loss how to divide the patch. One way could be to implement scoped selector matching plus element.find[All]() or document.queryScopedSelector[All] in order to have test cases as one patch, and storing scoped stylesheets in ScopedRuleSets but without scoped selector matching, and implement window.internals.styleSheetsForElement() in order to test that, as a 2nd patch. 

However, I&apos;m not sure doing it this way would make for a much smaller patches, individually.

&gt; The performance of the regular selector matching code is very critical while the performance of the scoped selector matching does not matter at all yet (as no one is currently using it). You should focus on making a testable implementation that has minimal impact on the existing code so we gain good understanding of the problem. The optimizations can come later.
&gt; 
&gt; You should in general avoid unrelated refactoring when implementing something like this.

I uploaded a new patch (no r? set as it still requires 67718 and 67790) that removes all renaming and refactoring.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>508599</commentid>
    <comment_count>18</comment_count>
      <attachid>116174</attachid>
    <who name="Gustavo Noronha (kov)">gustavo</who>
    <bug_when>2011-11-23 20:55:10 -0800</bug_when>
    <thetext>Comment on attachment 116174
patch, shrunk

Attachment 116174 did not pass gtk-ews (gtk):
Output: http://queues.webkit.org/results/10644275</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>508600</commentid>
    <comment_count>19</comment_count>
      <attachid>116174</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2011-11-23 20:57:50 -0800</bug_when>
    <thetext>Comment on attachment 116174
patch, shrunk

Attachment 116174 did not pass qt-ews (qt):
Output: http://queues.webkit.org/results/10639077</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>508601</commentid>
    <comment_count>20</comment_count>
      <attachid>116174</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-11-23 20:59:06 -0800</bug_when>
    <thetext>Comment on attachment 116174
patch, shrunk

Attachment 116174 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/10646184</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>508605</commentid>
    <comment_count>21</comment_count>
      <attachid>116174</attachid>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2011-11-23 21:06:50 -0800</bug_when>
    <thetext>Comment on attachment 116174
patch, shrunk

Attachment 116174 did not pass efl-ews (efl):
Output: http://queues.webkit.org/results/10644279</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>508654</commentid>
    <comment_count>22</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2011-11-24 00:03:50 -0800</bug_when>
    <thetext>(In reply to comment #17)
&gt; Yes, but please note that scoped stylesheets are just stored associated with their scope - there is no internal change. The difference only arises when that associated scope is applied to the selector matching algorithm.
&gt; 
&gt; Therefore, scoping without scoped stylesheets would have no &quot;client&quot;, while scoping stylesheets without the required scoped matching mechanism would be pointless.

I don&apos;t quite understand what you saying. You certainly can implement &lt;style scoped&gt; as described in the current HTML draft (scoping of the stylesheets) without initially implementing the scoping of the selectors. As far as I can tell, thats your patch up to CSSStyleSelector::matchAuthorRules where you pick the scoped stylesheets for the element. The changes to matchRuleSet/matchRulesForList where you pass the scope down to SelectorChecker::checkSelector are part of the second feature.

You missed my question about the specification status of the scoped selectors. Is that still in level of mailing list discussions?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>508922</commentid>
    <comment_count>23</comment_count>
    <who name="Roland Steiner">rolandsteiner</who>
    <bug_when>2011-11-24 18:12:35 -0800</bug_when>
    <thetext>(In reply to comment #22)
&gt; You missed my question about the specification status of the scoped selectors. Is that still in level of mailing list discussions?

The change to make selectors scoped to the parent element of &lt;style scoped&gt; is pretty uncontroversial by now - it&apos;s just a matter of Hixie changing the spec. See https://lists.webkit.org/pipermail/webkit-dev/2011-November/018589.html and http://lists.whatwg.org/htdig.cgi/whatwg-whatwg.org/2011-September/033337.html for reference.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>508923</commentid>
    <comment_count>24</comment_count>
    <who name="Roland Steiner">rolandsteiner</who>
    <bug_when>2011-11-24 18:13:59 -0800</bug_when>
    <thetext>To clarify: I should say it&apos;s just a matter of Hixie UPDATING the spec, as he already agreed to the change.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>509348</commentid>
    <comment_count>25</comment_count>
      <attachid>116174</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2011-11-26 03:03:20 -0800</bug_when>
    <thetext>Comment on attachment 116174
patch, shrunk

Setting to r- to clarify I&apos;d like to see this done in steps as explained in the comments above.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>509605</commentid>
    <comment_count>26</comment_count>
    <who name="Roland Steiner">rolandsteiner</who>
    <bug_when>2011-11-27 23:41:49 -0800</bug_when>
    <thetext>Opened new issues 73190 (scoped stylesheets) and 73192 (scoped selector matching) as requested.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>111229</attachid>
            <date>2011-10-17 02:26:07 -0700</date>
            <delta_ts>2011-11-16 00:25:30 -0800</delta_ts>
            <desc>patch (requires 67718, 67790)</desc>
            <filename>scoped3.patch</filename>
            <type>text/plain</type>
            <size>79202</size>
            <attacher name="Roland Steiner">rolandsteiner</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCAxMTAwYzg5Li5kMDk3ZTY2IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjYgQEAKKzIwMTEtMTAt
MTcgIFJvbGFuZCBTdGVpbmVyICA8cm9sYW5kc3RlaW5lckBjaHJvbWl1bS5vcmc+CisKKyAgICAg
ICAgQnVnIDY3NzIwIC0gPHN0eWxlIHNjb3BlZD46IEltcGxlbWVudCBzZWxlY3RvciBtYXRjaGlu
ZworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Njc3MjAK
KworICAgICAgICBUZXN0IHRoYXQgPHN0eWxlIHNjb3BlZD4gYWZmZWN0cyBzdHlsZXMgYW5kIGlz
IHVwZGF0ZWQgY29ycmVjdGx5OgorICAgICAgICAtKSBiYXNpYyB0ZXN0CisgICAgICAgIC0pIHRl
c3Qgc2V0dGluZy91bi1zZXR0aW5nIHRoZSAnc2NvcGVkJyBhdHRyaWJ1dGUKKyAgICAgICAgLSkg
dGVzdCBpbnNlcnRpbmcvcmVtb3ZpbmcgYSB3aG9sZSA8c3R5bGUgc2NvcGVkPiBlbGVtZW50CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBmYXN0L2Nz
cy9zdHlsZS1zY29wZWQvc3R5bGUtc2NvcGVkLWF0dGFjaC1leHBlY3RlZC50eHQ6IEFkZGVkLgor
ICAgICAgICAqIGZhc3QvY3NzL3N0eWxlLXNjb3BlZC9zdHlsZS1zY29wZWQtYXR0YWNoLmh0bWw6
IEFkZGVkLgorICAgICAgICAqIGZhc3QvY3NzL3N0eWxlLXNjb3BlZC9zdHlsZS1zY29wZWQtYmFz
aWMtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2Nzcy9zdHlsZS1zY29wZWQv
c3R5bGUtc2NvcGVkLWJhc2ljLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGZhc3QvY3NzL3N0eWxl
LXNjb3BlZC9zdHlsZS1zY29wZWQtZGV0YWNoLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAg
ICogZmFzdC9jc3Mvc3R5bGUtc2NvcGVkL3N0eWxlLXNjb3BlZC1kZXRhY2guaHRtbDogQWRkZWQu
CisgICAgICAgICogZmFzdC9jc3Mvc3R5bGUtc2NvcGVkL3N0eWxlLXNjb3BlZC1yZW1vdmUtc2Nv
cGVkLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogZmFzdC9jc3Mvc3R5bGUtc2NvcGVk
L3N0eWxlLXNjb3BlZC1yZW1vdmUtc2NvcGVkLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGZhc3Qv
Y3NzL3N0eWxlLXNjb3BlZC9zdHlsZS1zY29wZWQtc2V0LXNjb3BlZC1leHBlY3RlZC50eHQ6IEFk
ZGVkLgorICAgICAgICAqIGZhc3QvY3NzL3N0eWxlLXNjb3BlZC9zdHlsZS1zY29wZWQtc2V0LXNj
b3BlZC5odG1sOiBBZGRlZC4KKwogMjAxMS0xMC0xNiAgQ3NhYmEgT3N6dHJvZ29uw6FjICA8b3Nz
eUB3ZWJraXQub3JnPgogCiAgICAgICAgIFtRdF0gVW5yZXZpZXdlZCB3ZWVrZW5kIGdhcmRlbmlu
Zy4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvY3NzL3N0eWxlLXNjb3BlZC9zdHlsZS1z
Y29wZWQtYXR0YWNoLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2Zhc3QvY3NzL3N0eWxlLXNj
b3BlZC9zdHlsZS1zY29wZWQtYXR0YWNoLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwLi41ZmUwNjcxCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMv
ZmFzdC9jc3Mvc3R5bGUtc2NvcGVkL3N0eWxlLXNjb3BlZC1hdHRhY2gtZXhwZWN0ZWQudHh0CkBA
IC0wLDAgKzEsMjcgQEAKK1Rlc3QgYXR0YWNoaW5nIGEgbmV3IDxzdHlsZSBzY29wZWQ+IGVsZW1l
bnQKKworVGV4dAorVGV4dAorCitUZXh0CitUZXh0CisKK1RleHQKK1RleHQKKworLS0tIE9SSUdJ
TkFMIC0tLQorUzE6IHJnYigwLCAwLCAwKQorUDE6IHJnYigwLCAwLCAwKQorUzI6IHJnYigwLCAw
LCAwKQorUDI6IHJnYigwLCAwLCAwKQorUzM6IHJnYigwLCAwLCAwKQorUDM6IHJnYigwLCAwLCAw
KQorLS0tIEFGVEVSIEFUVEFDSElORyA8U1RZTEUgU0NPUEVEPiAtLS0KK1MxOiByZ2IoMCwgMCwg
MCkKK1AxOiByZ2IoMCwgMCwgMCkKK1MyOiByZ2IoMjU1LCAwLCAwKQorUDI6IHJnYigwLCAxMjgs
IDApCitTMzogcmdiKDAsIDAsIDApCitQMzogcmdiKDAsIDAsIDApCistLS0gRklOSVNIRUQgLS0t
CisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvY3NzL3N0eWxlLXNjb3BlZC9zdHlsZS1z
Y29wZWQtYXR0YWNoLmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0L2Nzcy9zdHlsZS1zY29wZWQvc3R5
bGUtc2NvcGVkLWF0dGFjaC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAu
LjYwM2RmNTUKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2Nzcy9zdHlsZS1z
Y29wZWQvc3R5bGUtc2NvcGVkLWF0dGFjaC5odG1sCkBAIC0wLDAgKzEsNzAgQEAKKzwhRE9DVFlQ
RSBodG1sPgorPGh0bWw+Cis8aGVhZD4KKyAgICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlw
dCI+CisgICAgICAgIGZ1bmN0aW9uIGxvZyhtc2cpCisgICAgICAgIHsKKyAgICAgICAgICAgIGRv
Y3VtZW50LmdldEVsZW1lbnRCeUlkKCdjb25zb2xlJykuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3Jl
YXRlVGV4dE5vZGUobXNnICsgJ1xuJykpOworICAgICAgICB9CisKKyAgICAgICAgZnVuY3Rpb24g
dGVzdChpZCkKKyAgICAgICAgeworICAgICAgICAgICAgdmFyIGVsZW0gPSBkb2N1bWVudC5nZXRF
bGVtZW50QnlJZChpZCk7CisgICAgICAgICAgICBsb2coaWQgKyAnOiAnICsgZG9jdW1lbnQuZGVm
YXVsdFZpZXcuZ2V0Q29tcHV0ZWRTdHlsZShlbGVtLCBudWxsKS5nZXRQcm9wZXJ0eVZhbHVlKCdj
b2xvcicpKTsKKyAgICAgICAgfQorCisgICAgICAgIGZ1bmN0aW9uIHRlc3RBbGwoKQorICAgICAg
ICB7CisgICAgICAgICAgICB0ZXN0KCdTMScpOworICAgICAgICAgICAgdGVzdCgnUDEnKTsKKyAg
ICAgICAgICAgIHRlc3QoJ1MyJyk7CisgICAgICAgICAgICB0ZXN0KCdQMicpOworICAgICAgICAg
ICAgdGVzdCgnUzMnKTsKKyAgICAgICAgICAgIHRlc3QoJ1AzJyk7CisgICAgICAgIH0KKworICAg
ICAgICBmdW5jdGlvbiBydW5UZXN0cygpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmICh3aW5k
b3cubGF5b3V0VGVzdENvbnRyb2xsZXIpIHsKKyAgICAgICAgICAgICAgICBsYXlvdXRUZXN0Q29u
dHJvbGxlci5kdW1wQXNUZXh0KCk7CisgICAgICAgICAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xs
ZXIud2FpdFVudGlsRG9uZSgpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBsb2coJy0t
LSBPUklHSU5BTCAtLS0nKTsKKyAgICAgICAgICAgIHRlc3RBbGwoKTsKKworICAgICAgICAgICAg
bG9nKCctLS0gQUZURVIgQVRUQUNISU5HIDxTVFlMRSBTQ09QRUQ+IC0tLScpOworICAgICAgICAg
ICAgdmFyIGRpdkVsZW0gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnRElWJyk7CisgICAgICAg
ICAgICB2YXIgc3R5bGVFbGVtID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3R5bGUnKTsKKyAg
ICAgICAgICAgIHN0eWxlRWxlbS5zZXRBdHRyaWJ1dGUoJ3Njb3BlZCcsIHRydWUpOworICAgICAg
ICAgICAgc3R5bGVFbGVtLmlubmVySFRNTCA9ICdkaXYgeyBjb2xvcjogcmVkOyB9IHAgeyBjb2xv
cjogZ3JlZW47IH0nOworICAgICAgICAgICAgZGl2RWxlbS5pbnNlcnRCZWZvcmUoc3R5bGVFbGVt
LCBkaXZFbGVtLmZpcnN0Q2hpbGQpOworICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigp
IHsKKyAgICAgICAgICAgICAgICB0ZXN0QWxsKCk7CisgICAgICAgICAgICAgICAgbG9nKCctLS0g
RklOSVNIRUQgLS0tJyk7CisgICAgICAgICAgICAgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29u
dHJvbGxlcikKKyAgICAgICAgICAgICAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIubm90aWZ5
RG9uZSgpOworICAgICAgICAgICAgfSwgMCk7CisgICAgICAgIH0KKyAgICA8L3NjcmlwdD4KKyAg
ICA8c3R5bGUgdHlwZT0idGV4dC9jc3MiIHNjb3BlZD4KKyAgICAgICAgYm9keSB7IGNvbG9yOiBi
bGFjazsgfQorICAgIDwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keSBvbmxvYWQ9InJ1blRlc3RzKCk7
Ij4KKyAgICA8cD5UZXN0IGF0dGFjaGluZyBhIG5ldyAmbHQ7c3R5bGUgc2NvcGVkJmd0OyBlbGVt
ZW50PC9wPgorICAgIDxkaXY+CisgICAgICAgIDxzcGFuIGlkPSJTMSI+VGV4dDwvc3Bhbj4KKyAg
ICAgICAgPHAgaWQ9IlAxIj5UZXh0PC9wPgorICAgIDwvZGl2PgorICAgIDxkaXYgaWQ9IkRJViI+
CisgICAgICAgIDxzcGFuIGlkPSJTMiI+VGV4dDwvc3Bhbj4KKyAgICAgICAgPHAgaWQ9IlAyIj5U
ZXh0PC9wPgorICAgIDwvZGl2PgorICAgIDxkaXY+CisgICAgICAgIDxzcGFuIGlkPSJTMyI+VGV4
dDwvc3Bhbj4KKyAgICAgICAgPHAgaWQ9IlAzIj5UZXh0PC9wPgorICAgIDwvZGl2PgorICAgIDxw
cmUgaWQ9ImNvbnNvbGUiPjwvcHJlPgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5
b3V0VGVzdHMvZmFzdC9jc3Mvc3R5bGUtc2NvcGVkL3N0eWxlLXNjb3BlZC1iYXNpYy1leHBlY3Rl
ZC50eHQgYi9MYXlvdXRUZXN0cy9mYXN0L2Nzcy9zdHlsZS1zY29wZWQvc3R5bGUtc2NvcGVkLWJh
c2ljLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZWZm
ZDc2Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9jc3Mvc3R5bGUtc2NvcGVk
L3N0eWxlLXNjb3BlZC1iYXNpYy1leHBlY3RlZC50eHQKQEAgLTAsMCArMSw0NCBAQAorVGVzdCA8
c3R5bGUgc2NvcGVkPgorCitUZXh0CitUZXh0CisKK1RleHQKK1RleHQKK1RleHQKK1RleHQKKwor
VGV4dAorVGV4dAorVGV4dAorVGV4dAorCitUZXh0CitUZXh0CitUZXh0CitUZXh0CisKK1RleHQK
K1RleHQKKy0tLSBDT01QVVRFRCBTVFlMRVMgLS0tCitTMTogcmdiKDAsIDAsIDApCitQMTogcmdi
KDAsIDAsIDApCitSMTogcmdiKDAsIDAsIDApCitFMTogcmdiKDAsIDAsIDApCisKK1MyOiByZ2Io
MjU1LCAwLCAwKQorUDI6IHJnYigwLCAxMjgsIDApCitSMjogcmdiKDAsIDAsIDI1NSkKK0UyOiBy
Z2IoMjU1LCAwLCAwKQorCitTMzogcmdiKDAsIDAsIDApCitQMzogcmdiKDAsIDAsIDApCitSMzog
cmdiKDAsIDAsIDApCitFMzogcmdiKDAsIDAsIDApCisKK1M0OiByZ2IoMCwgMCwgMCkKK1A0OiBy
Z2IoMCwgMCwgMCkKK1I0OiByZ2IoMCwgMCwgMCkKK0U0OiByZ2IoMCwgMCwgMCkKKy0tLSBGSU5J
U0hFRCAtLS0KKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9jc3Mvc3R5bGUtc2NvcGVk
L3N0eWxlLXNjb3BlZC1iYXNpYy5odG1sIGIvTGF5b3V0VGVzdHMvZmFzdC9jc3Mvc3R5bGUtc2Nv
cGVkL3N0eWxlLXNjb3BlZC1iYXNpYy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAuLjBiYzIzYWMKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2Nzcy9z
dHlsZS1zY29wZWQvc3R5bGUtc2NvcGVkLWJhc2ljLmh0bWwKQEAgLTAsMCArMSw4NCBAQAorPCFE
T0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxoZWFkPgorICAgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZh
c2NyaXB0Ij4KKyAgICAgICAgZnVuY3Rpb24gbG9nKG1zZykKKyAgICAgICAgeworICAgICAgICAg
ICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NvbnNvbGUnKS5hcHBlbmRDaGlsZChkb2N1bWVu
dC5jcmVhdGVUZXh0Tm9kZShtc2cgKyAnXG4nKSk7CisgICAgICAgIH0KKworICAgICAgICBmdW5j
dGlvbiB0ZXN0KGlkKQorICAgICAgICB7CisgICAgICAgICAgICB2YXIgZWxlbSA9IGRvY3VtZW50
LmdldEVsZW1lbnRCeUlkKGlkKTsKKyAgICAgICAgICAgIGxvZyhpZCArICc6ICcgKyBkb2N1bWVu
dC5kZWZhdWx0Vmlldy5nZXRDb21wdXRlZFN0eWxlKGVsZW0sIG51bGwpLmdldFByb3BlcnR5VmFs
dWUoJ2NvbG9yJykpOworICAgICAgICB9CisKKyAgICAgICAgZnVuY3Rpb24gcnVuVGVzdHMoKQor
ICAgICAgICB7CisgICAgICAgICAgICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQor
ICAgICAgICAgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQoKTsKKworICAg
ICAgICAgICAgbG9nKCctLS0gQ09NUFVURUQgU1RZTEVTIC0tLScpOworCisgICAgICAgICAgICB0
ZXN0KCdTMScpOworICAgICAgICAgICAgdGVzdCgnUDEnKTsKKyAgICAgICAgICAgIHRlc3QoJ1Ix
Jyk7CisgICAgICAgICAgICB0ZXN0KCdFMScpOworICAgICAgICAgICAgbG9nKCcnKTsKKyAgICAg
ICAgICAgIHRlc3QoJ1MyJyk7CisgICAgICAgICAgICB0ZXN0KCdQMicpOworICAgICAgICAgICAg
dGVzdCgnUjInKTsKKyAgICAgICAgICAgIHRlc3QoJ0UyJyk7CisgICAgICAgICAgICBsb2coJycp
OworICAgICAgICAgICAgdGVzdCgnUzMnKTsKKyAgICAgICAgICAgIHRlc3QoJ1AzJyk7CisgICAg
ICAgICAgICB0ZXN0KCdSMycpOworICAgICAgICAgICAgdGVzdCgnRTMnKTsKKyAgICAgICAgICAg
IGxvZygnJyk7CisgICAgICAgICAgICB0ZXN0KCdTNCcpOworICAgICAgICAgICAgdGVzdCgnUDQn
KTsKKyAgICAgICAgICAgIHRlc3QoJ1I0Jyk7CisgICAgICAgICAgICB0ZXN0KCdFNCcpOworCisg
ICAgICAgICAgICBsb2coJy0tLSBGSU5JU0hFRCAtLS0nKTsKKyAgICAgICAgfQorICAgIDwvc2Ny
aXB0PgorICAgIDxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+CisgICAgICAgIGJvZHkgeyBjb2xvcjog
YmxhY2s7IH0KKyAgICA8L3N0eWxlPgorPC9oZWFkPgorPGJvZHkgb25sb2FkPSJydW5UZXN0cygp
OyI+CisgICAgPHA+VGVzdCAmbHQ7c3R5bGUgc2NvcGVkJmd0OzwvcD4KKyAgICA8ZGl2IGNsYXNz
PSJmb28iPgorICAgICAgICA8c3BhbiBpZD0iUzEiPlRleHQ8L3NwYW4+CisgICAgICAgIDxwIGlk
PSJQMSI+VGV4dDwvcD4KKyAgICAgICAgPHByZSBpZCA9ICJSMSIgY2xhc3M9ImJhciI+VGV4dDwv
cHJlPgorICAgICAgICA8cHJlIGlkPSJFMSIgY2xhc3M9ImJheiI+VGV4dDwvcHJlPgorICAgIDwv
ZGl2PgorICAgIDxkaXYgY2xhc3M9ImZvbyI+CisgICAgICAgIDxkaXY+CisgICAgICAgICAgICA8
c3R5bGUgdHlwZT0idGV4dC9jc3MiIHNjb3BlZD4KKyAgICAgICAgICAgICAgICBkaXYgeyBjb2xv
cjogcmVkOyB9CisgICAgICAgICAgICAgICAgcCB7IGNvbG9yOiBncmVlbjsgfQorICAgICAgICAg
ICAgICAgIGRpdiAuYmFyIHsgY29sb3I6IGJsdWU7IH0KKyAgICAgICAgICAgICAgICAuZm9vIC5i
YXogeyBjb2xvcjogcHVycGxlOyB9IC8qIHNob3VsZCBOT1QgYXBwbHkhICovCisgICAgICAgICAg
ICA8L3N0eWxlPgorICAgICAgICAgICAgPHNwYW4gaWQ9IlMyIj5UZXh0PC9zcGFuPgorICAgICAg
ICAgICAgPHAgaWQ9IlAyIj5UZXh0PC9wPgorICAgICAgICAgICAgPHByZSBpZD0iUjIiIGNsYXNz
PSJiYXIiPlRleHQ8L3ByZT4KKyAgICAgICAgICAgIDxwcmUgaWQ9IkUyIiBjbGFzcz0iYmF6Ij5U
ZXh0PC9wcmU+CisgICAgICAgIDwvZGl2PgorICAgICAgICA8c3BhbiBpZD0iUzMiPlRleHQ8L3Nw
YW4+CisgICAgICAgIDxwIGlkPSJQMyI+VGV4dDwvcD4KKyAgICAgICAgPHByZSBpZCA9ICJSMyIg
Y2xhc3M9ImJhciI+VGV4dDwvcHJlPgorICAgICAgICA8cHJlIGlkPSJFMyIgY2xhc3M9ImJheiI+
VGV4dDwvcHJlPgorICAgIDwvZGl2PgorICAgIDxkaXYgY2xhc3M9ImZvbyI+CisgICAgICAgIDxz
cGFuIGlkPSJTNCI+VGV4dDwvc3Bhbj4KKyAgICAgICAgPHAgaWQ9IlA0Ij5UZXh0PC9wPgorICAg
ICAgICA8cHJlIGlkID0gIlI0IiBjbGFzcz0iYmFyIj5UZXh0PC9wcmU+CisgICAgICAgIDxwcmUg
aWQ9IkU0IiBjbGFzcz0iYmF6Ij5UZXh0PC9wcmU+CisgICAgPC9kaXY+CisgICAgPHByZSBpZD0i
Y29uc29sZSI+PC9wcmU+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0
cy9mYXN0L2Nzcy9zdHlsZS1zY29wZWQvc3R5bGUtc2NvcGVkLWRldGFjaC1leHBlY3RlZC50eHQg
Yi9MYXlvdXRUZXN0cy9mYXN0L2Nzcy9zdHlsZS1zY29wZWQvc3R5bGUtc2NvcGVkLWRldGFjaC1l
eHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDdlZjY1Mwot
LS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvY3NzL3N0eWxlLXNjb3BlZC9zdHls
ZS1zY29wZWQtZGV0YWNoLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDI3IEBACitUZXN0IGRldGFj
aGluZyBhIDxzdHlsZSBzY29wZWQ+IGVsZW1lbnQKKworVGV4dAorVGV4dAorCitUZXh0CitUZXh0
CisKK1RleHQKK1RleHQKKworLS0tIE9SSUdJTkFMIC0tLQorUzE6IHJnYigwLCAwLCAwKQorUDE6
IHJnYigwLCAwLCAwKQorUzI6IHJnYigyNTUsIDAsIDApCitQMjogcmdiKDAsIDEyOCwgMCkKK1Mz
OiByZ2IoMCwgMCwgMCkKK1AzOiByZ2IoMCwgMCwgMCkKKy0tLSBBRlRFUiBERVRBQ0hJTkcgPFNU
WUxFIFNDT1BFRD4gLS0tCitTMTogcmdiKDAsIDAsIDApCitQMTogcmdiKDAsIDAsIDApCitTMjog
cmdiKDAsIDAsIDApCitQMjogcmdiKDAsIDAsIDApCitTMzogcmdiKDAsIDAsIDApCitQMzogcmdi
KDAsIDAsIDApCistLS0gRklOSVNIRUQgLS0tCisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zh
c3QvY3NzL3N0eWxlLXNjb3BlZC9zdHlsZS1zY29wZWQtZGV0YWNoLmh0bWwgYi9MYXlvdXRUZXN0
cy9mYXN0L2Nzcy9zdHlsZS1zY29wZWQvc3R5bGUtc2NvcGVkLWRldGFjaC5odG1sCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRjOGJmNmEKLS0tIC9kZXYvbnVsbAorKysgYi9M
YXlvdXRUZXN0cy9mYXN0L2Nzcy9zdHlsZS1zY29wZWQvc3R5bGUtc2NvcGVkLWRldGFjaC5odG1s
CkBAIC0wLDAgKzEsNzIgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8aGVhZD4KKyAgICA8
c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CisgICAgICAgIGZ1bmN0aW9uIGxvZyhtc2cp
CisgICAgICAgIHsKKyAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjb25zb2xl
JykuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUobXNnICsgJ1xuJykpOworICAg
ICAgICB9CisKKyAgICAgICAgZnVuY3Rpb24gdGVzdChpZCkKKyAgICAgICAgeworICAgICAgICAg
ICAgdmFyIGVsZW0gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCk7CisgICAgICAgICAgICBs
b2coaWQgKyAnOiAnICsgZG9jdW1lbnQuZGVmYXVsdFZpZXcuZ2V0Q29tcHV0ZWRTdHlsZShlbGVt
LCBudWxsKS5nZXRQcm9wZXJ0eVZhbHVlKCdjb2xvcicpKTsKKyAgICAgICAgfQorCisgICAgICAg
IGZ1bmN0aW9uIHRlc3RBbGwoKQorICAgICAgICB7CisgICAgICAgICAgICB0ZXN0KCdTMScpOwor
ICAgICAgICAgICAgdGVzdCgnUDEnKTsKKyAgICAgICAgICAgIHRlc3QoJ1MyJyk7CisgICAgICAg
ICAgICB0ZXN0KCdQMicpOworICAgICAgICAgICAgdGVzdCgnUzMnKTsKKyAgICAgICAgICAgIHRl
c3QoJ1AzJyk7CisgICAgICAgIH0KKworICAgICAgICBmdW5jdGlvbiBydW5UZXN0cygpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpIHsKKyAg
ICAgICAgICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7CisgICAgICAg
ICAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIud2FpdFVudGlsRG9uZSgpOworICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICBsb2coJy0tLSBPUklHSU5BTCAtLS0nKTsKKyAgICAgICAgICAg
IHRlc3RBbGwoKTsKKworICAgICAgICAgICAgbG9nKCctLS0gQUZURVIgREVUQUNISU5HIDxTVFlM
RSBTQ09QRUQ+IC0tLScpOworICAgICAgICAgICAgdmFyIGRpdkVsZW0gPSBkb2N1bWVudC5nZXRF
bGVtZW50QnlJZCgnRElWJyk7CisgICAgICAgICAgICB2YXIgc3R5bGVFbGVtID0gZG9jdW1lbnQu
Z2V0RWxlbWVudEJ5SWQoJ1NUWUxFJyk7CisgICAgICAgICAgICBkaXZFbGVtLnJlbW92ZUNoaWxk
KHN0eWxlRWxlbSk7CisgICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkgeworICAgICAg
ICAgICAgICAgIHRlc3RBbGwoKTsKKyAgICAgICAgICAgICAgICBsb2coJy0tLSBGSU5JU0hFRCAt
LS0nKTsKKyAgICAgICAgICAgICAgICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQor
ICAgICAgICAgICAgICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5ub3RpZnlEb25lKCk7Cisg
ICAgICAgICAgICB9LCAwKTsKKyAgICAgICAgfQorICAgIDwvc2NyaXB0PgorICAgIDxzdHlsZSB0
eXBlPSJ0ZXh0L2NzcyIgc2NvcGVkPgorICAgICAgICBib2R5IHsgY29sb3I6IGJsYWNrOyB9Cisg
ICAgPC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5IG9ubG9hZD0icnVuVGVzdHMoKTsiPgorICAgIDxw
PlRlc3QgZGV0YWNoaW5nIGEgJmx0O3N0eWxlIHNjb3BlZCZndDsgZWxlbWVudDwvcD4KKyAgICA8
ZGl2PgorICAgICAgICA8c3BhbiBpZD0iUzEiPlRleHQ8L3NwYW4+CisgICAgICAgIDxwIGlkPSJQ
MSI+VGV4dDwvcD4KKyAgICA8L2Rpdj4KKyAgICA8ZGl2IGlkPSJESVYiPgorICAgICAgICA8c3R5
bGUgaWQ9IlNUWUxFIiB0eXBlPSJ0ZXh0L2NzcyIgc2NvcGVkPgorICAgICAgICAgICAgZGl2IHsg
Y29sb3I6IHJlZDsgfQorICAgICAgICAgICAgcCB7IGNvbG9yOiBncmVlbjsgfQorICAgICAgICA8
L3N0eWxlPgorICAgICAgICA8c3BhbiBpZD0iUzIiPlRleHQ8L3NwYW4+CisgICAgICAgIDxwIGlk
PSJQMiI+VGV4dDwvcD4KKyAgICA8L2Rpdj4KKyAgICA8ZGl2PgorICAgICAgICA8c3BhbiBpZD0i
UzMiPlRleHQ8L3NwYW4+CisgICAgICAgIDxwIGlkPSJQMyI+VGV4dDwvcD4KKyAgICA8L2Rpdj4K
KyAgICA8cHJlIGlkPSJjb25zb2xlIj48L3ByZT4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdp
dCBhL0xheW91dFRlc3RzL2Zhc3QvY3NzL3N0eWxlLXNjb3BlZC9zdHlsZS1zY29wZWQtcmVtb3Zl
LXNjb3BlZC1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9mYXN0L2Nzcy9zdHlsZS1zY29wZWQv
c3R5bGUtc2NvcGVkLXJlbW92ZS1zY29wZWQtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAuLjNhMjA1ODcKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0
cy9mYXN0L2Nzcy9zdHlsZS1zY29wZWQvc3R5bGUtc2NvcGVkLXJlbW92ZS1zY29wZWQtZXhwZWN0
ZWQudHh0CkBAIC0wLDAgKzEsMjcgQEAKK1Rlc3QgcmVtb3ZpbmcgdGhlICdzY29wZWQnIGF0dHJp
YnV0ZSBvbiBhIDxzdHlsZT4gZWxlbWVudAorCitUZXh0CitUZXh0CisKK1RleHQKK1RleHQKKwor
VGV4dAorVGV4dAorCistLS0gT1JJR0lOQUwgLS0tCitTMTogcmdiKDAsIDAsIDApCitQMTogcmdi
KDAsIDAsIDApCitTMjogcmdiKDI1NSwgMCwgMCkKK1AyOiByZ2IoMCwgMTI4LCAwKQorUzM6IHJn
YigwLCAwLCAwKQorUDM6IHJnYigwLCAwLCAwKQorLS0tIEFGVEVSIFVOLVNFVFRJTkcgQFNDT1BF
RCAtLS0KK1MxOiByZ2IoMjU1LCAwLCAwKQorUDE6IHJnYigwLCAxMjgsIDApCitTMjogcmdiKDI1
NSwgMCwgMCkKK1AyOiByZ2IoMCwgMTI4LCAwKQorUzM6IHJnYigyNTUsIDAsIDApCitQMzogcmdi
KDAsIDEyOCwgMCkKKy0tLSBGSU5JU0hFRCAtLS0KKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMv
ZmFzdC9jc3Mvc3R5bGUtc2NvcGVkL3N0eWxlLXNjb3BlZC1yZW1vdmUtc2NvcGVkLmh0bWwgYi9M
YXlvdXRUZXN0cy9mYXN0L2Nzcy9zdHlsZS1zY29wZWQvc3R5bGUtc2NvcGVkLXJlbW92ZS1zY29w
ZWQuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYWFmMzc3Ci0tLSAv
ZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9jc3Mvc3R5bGUtc2NvcGVkL3N0eWxlLXNj
b3BlZC1yZW1vdmUtc2NvcGVkLmh0bWwKQEAgLTAsMCArMSw3MCBAQAorPCFET0NUWVBFIGh0bWw+
Cis8aHRtbD4KKzxoZWFkPgorICAgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KKyAg
ICAgICAgZnVuY3Rpb24gbG9nKG1zZykKKyAgICAgICAgeworICAgICAgICAgICAgZG9jdW1lbnQu
Z2V0RWxlbWVudEJ5SWQoJ2NvbnNvbGUnKS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0
Tm9kZShtc2cgKyAnXG4nKSk7CisgICAgICAgIH0KKworICAgICAgICBmdW5jdGlvbiB0ZXN0KGlk
KQorICAgICAgICB7CisgICAgICAgICAgICB2YXIgZWxlbSA9IGRvY3VtZW50LmdldEVsZW1lbnRC
eUlkKGlkKTsKKyAgICAgICAgICAgIGxvZyhpZCArICc6ICcgKyBkb2N1bWVudC5kZWZhdWx0Vmll
dy5nZXRDb21wdXRlZFN0eWxlKGVsZW0sIG51bGwpLmdldFByb3BlcnR5VmFsdWUoJ2NvbG9yJykp
OworICAgICAgICB9CisKKyAgICAgICAgZnVuY3Rpb24gdGVzdEFsbCgpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIHRlc3QoJ1MxJyk7CisgICAgICAgICAgICB0ZXN0KCdQMScpOworICAgICAgICAg
ICAgdGVzdCgnUzInKTsKKyAgICAgICAgICAgIHRlc3QoJ1AyJyk7CisgICAgICAgICAgICB0ZXN0
KCdTMycpOworICAgICAgICAgICAgdGVzdCgnUDMnKTsKKyAgICAgICAgfQorCisgICAgICAgIGZ1
bmN0aW9uIHJ1blRlc3RzKCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKHdpbmRvdy5sYXlv
dXRUZXN0Q29udHJvbGxlcikgeworICAgICAgICAgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVy
LmR1bXBBc1RleHQoKTsKKyAgICAgICAgICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci53YWl0
VW50aWxEb25lKCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGxvZygnLS0tIE9SSUdJ
TkFMIC0tLScpOworICAgICAgICAgICAgdGVzdEFsbCgpOworCisgICAgICAgICAgICBsb2coJy0t
LSBBRlRFUiBVTi1TRVRUSU5HIEBTQ09QRUQgLS0tJyk7CisgICAgICAgICAgICBkb2N1bWVudC5n
ZXRFbGVtZW50QnlJZCgnU1RZTEUnKS5yZW1vdmVBdHRyaWJ1dGUoJ3Njb3BlZCcpOworICAgICAg
ICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgICB0ZXN0QWxsKCk7
CisgICAgICAgICAgICAgICAgbG9nKCctLS0gRklOSVNIRUQgLS0tJyk7CisgICAgICAgICAgICAg
ICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikKKyAgICAgICAgICAgICAgICAgICAg
bGF5b3V0VGVzdENvbnRyb2xsZXIubm90aWZ5RG9uZSgpOworICAgICAgICAgICAgfSwgMCk7Cisg
ICAgICAgIH0KKyAgICA8L3NjcmlwdD4KKyAgICA8c3R5bGUgdHlwZT0idGV4dC9jc3MiIHNjb3Bl
ZD4KKyAgICAgICAgYm9keSB7IGNvbG9yOiBibGFjazsgfQorICAgIDwvc3R5bGU+Cis8L2hlYWQ+
Cis8Ym9keSBvbmxvYWQ9InJ1blRlc3RzKCk7Ij4KKyAgICA8cD5UZXN0IHJlbW92aW5nIHRoZSAn
c2NvcGVkJyBhdHRyaWJ1dGUgb24gYSAmbHQ7c3R5bGUmZ3Q7IGVsZW1lbnQ8L3A+CisgICAgPGRp
dj4KKyAgICAgICAgPHNwYW4gaWQ9IlMxIj5UZXh0PC9zcGFuPgorICAgICAgICA8cCBpZD0iUDEi
PlRleHQ8L3A+CisgICAgPC9kaXY+CisgICAgPGRpdj4KKyAgICAgICAgPHN0eWxlIGlkPSJTVFlM
RSIgdHlwZT0idGV4dC9jc3MiIHNjb3BlZD4KKyAgICAgICAgICAgIGRpdiB7IGNvbG9yOiByZWQ7
IH0KKyAgICAgICAgICAgIHAgeyBjb2xvcjogZ3JlZW47IH0KKyAgICAgICAgPC9zdHlsZT4KKyAg
ICAgICAgPHNwYW4gaWQ9IlMyIj5UZXh0PC9zcGFuPgorICAgICAgICA8cCBpZD0iUDIiPlRleHQ8
L3A+CisgICAgPC9kaXY+CisgICAgPGRpdj4KKyAgICAgICAgPHNwYW4gaWQ9IlMzIj5UZXh0PC9z
cGFuPgorICAgICAgICA8cCBpZD0iUDMiPlRleHQ8L3A+CisgICAgPC9kaXY+CisgICAgPHByZSBp
ZD0iY29uc29sZSI+PC9wcmU+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRU
ZXN0cy9mYXN0L2Nzcy9zdHlsZS1zY29wZWQvc3R5bGUtc2NvcGVkLXNldC1zY29wZWQtZXhwZWN0
ZWQudHh0IGIvTGF5b3V0VGVzdHMvZmFzdC9jc3Mvc3R5bGUtc2NvcGVkL3N0eWxlLXNjb3BlZC1z
ZXQtc2NvcGVkLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
Li5mYTBjNzk2Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9jc3Mvc3R5bGUt
c2NvcGVkL3N0eWxlLXNjb3BlZC1zZXQtc2NvcGVkLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDI3
IEBACitUZXN0IHNldHRpbmcgdGhlICdzY29wZWQnIGF0dHJpYnV0ZSBvbiBhIDxzdHlsZT4gZWxl
bWVudAorCitUZXh0CitUZXh0CisKK1RleHQKK1RleHQKKworVGV4dAorVGV4dAorCistLS0gT1JJ
R0lOQUwgLS0tCitTMTogcmdiKDI1NSwgMCwgMCkKK1AxOiByZ2IoMCwgMTI4LCAwKQorUzI6IHJn
YigyNTUsIDAsIDApCitQMjogcmdiKDAsIDEyOCwgMCkKK1MzOiByZ2IoMjU1LCAwLCAwKQorUDM6
IHJnYigwLCAxMjgsIDApCistLS0gQUZURVIgU0VUVElORyBAU0NPUEVEIC0tLQorUzE6IHJnYigw
LCAwLCAwKQorUDE6IHJnYigwLCAwLCAwKQorUzI6IHJnYigyNTUsIDAsIDApCitQMjogcmdiKDAs
IDEyOCwgMCkKK1MzOiByZ2IoMCwgMCwgMCkKK1AzOiByZ2IoMCwgMCwgMCkKKy0tLSBGSU5JU0hF
RCAtLS0KKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9jc3Mvc3R5bGUtc2NvcGVkL3N0
eWxlLXNjb3BlZC1zZXQtc2NvcGVkLmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0L2Nzcy9zdHlsZS1z
Y29wZWQvc3R5bGUtc2NvcGVkLXNldC1zY29wZWQuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwLi45OTAzYmQ0Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFz
dC9jc3Mvc3R5bGUtc2NvcGVkL3N0eWxlLXNjb3BlZC1zZXQtc2NvcGVkLmh0bWwKQEAgLTAsMCAr
MSw3MCBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxoZWFkPgorICAgIDxzY3JpcHQgdHlw
ZT0idGV4dC9qYXZhc2NyaXB0Ij4KKyAgICAgICAgZnVuY3Rpb24gbG9nKG1zZykKKyAgICAgICAg
eworICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NvbnNvbGUnKS5hcHBlbmRD
aGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShtc2cgKyAnXG4nKSk7CisgICAgICAgIH0KKwor
ICAgICAgICBmdW5jdGlvbiB0ZXN0KGlkKQorICAgICAgICB7CisgICAgICAgICAgICB2YXIgZWxl
bSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKTsKKyAgICAgICAgICAgIGxvZyhpZCArICc6
ICcgKyBkb2N1bWVudC5kZWZhdWx0Vmlldy5nZXRDb21wdXRlZFN0eWxlKGVsZW0sIG51bGwpLmdl
dFByb3BlcnR5VmFsdWUoJ2NvbG9yJykpOworICAgICAgICB9CisKKyAgICAgICAgZnVuY3Rpb24g
dGVzdEFsbCgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHRlc3QoJ1MxJyk7CisgICAgICAgICAg
ICB0ZXN0KCdQMScpOworICAgICAgICAgICAgdGVzdCgnUzInKTsKKyAgICAgICAgICAgIHRlc3Qo
J1AyJyk7CisgICAgICAgICAgICB0ZXN0KCdTMycpOworICAgICAgICAgICAgdGVzdCgnUDMnKTsK
KyAgICAgICAgfQorCisgICAgICAgIGZ1bmN0aW9uIHJ1blRlc3RzKCkKKyAgICAgICAgeworICAg
ICAgICAgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikgeworICAgICAgICAgICAg
ICAgIGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQoKTsKKyAgICAgICAgICAgICAgICBs
YXlvdXRUZXN0Q29udHJvbGxlci53YWl0VW50aWxEb25lKCk7CisgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgIGxvZygnLS0tIE9SSUdJTkFMIC0tLScpOworICAgICAgICAgICAgdGVzdEFsbCgp
OworCisgICAgICAgICAgICBsb2coJy0tLSBBRlRFUiBTRVRUSU5HIEBTQ09QRUQgLS0tJyk7Cisg
ICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnU1RZTEUnKS5zZXRBdHRyaWJ1dGUo
J3Njb3BlZCcsIHRydWUpOworICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHsKKyAg
ICAgICAgICAgICAgICB0ZXN0QWxsKCk7CisgICAgICAgICAgICAgICAgbG9nKCctLS0gRklOSVNI
RUQgLS0tJyk7CisgICAgICAgICAgICAgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxl
cikKKyAgICAgICAgICAgICAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIubm90aWZ5RG9uZSgp
OworICAgICAgICAgICAgfSwgMCk7CisgICAgICAgIH0KKyAgICA8L3NjcmlwdD4KKyAgICA8c3R5
bGUgdHlwZT0idGV4dC9jc3MiIHNjb3BlZD4KKyAgICAgICAgYm9keSB7IGNvbG9yOiBibGFjazsg
fQorICAgIDwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keSBvbmxvYWQ9InJ1blRlc3RzKCk7Ij4KKyAg
ICA8cD5UZXN0IHNldHRpbmcgdGhlICdzY29wZWQnIGF0dHJpYnV0ZSBvbiBhICZsdDtzdHlsZSZn
dDsgZWxlbWVudDwvcD4KKyAgICA8ZGl2PgorICAgICAgICA8c3BhbiBpZD0iUzEiPlRleHQ8L3Nw
YW4+CisgICAgICAgIDxwIGlkPSJQMSI+VGV4dDwvcD4KKyAgICA8L2Rpdj4KKyAgICA8ZGl2Pgor
ICAgICAgICA8c3R5bGUgaWQ9IlNUWUxFIiB0eXBlPSJ0ZXh0L2NzcyI+CisgICAgICAgICAgICBk
aXYgeyBjb2xvcjogcmVkOyB9CisgICAgICAgICAgICBwIHsgY29sb3I6IGdyZWVuOyB9CisgICAg
ICAgIDwvc3R5bGU+CisgICAgICAgIDxzcGFuIGlkPSJTMiI+VGV4dDwvc3Bhbj4KKyAgICAgICAg
PHAgaWQ9IlAyIj5UZXh0PC9wPgorICAgIDwvZGl2PgorICAgIDxkaXY+CisgICAgICAgIDxzcGFu
IGlkPSJTMyI+VGV4dDwvc3Bhbj4KKyAgICAgICAgPHAgaWQ9IlAzIj5UZXh0PC9wPgorICAgIDwv
ZGl2PgorICAgIDxwcmUgaWQ9ImNvbnNvbGUiPjwvcHJlPgorPC9ib2R5PgorPC9odG1sPgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCmluZGV4IGFmZmIxNTIuLjQ4Njk5YjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw3NSBAQAor
MjAxMS0xMC0xNyAgUm9sYW5kIFN0ZWluZXIgIDxyb2xhbmRzdGVpbmVyQGNocm9taXVtLm9yZz4K
KworICAgICAgICBCdWcgNjc3MjAgLSA8c3R5bGUgc2NvcGVkPjogSW1wbGVtZW50IHNlbGVjdG9y
IG1hdGNoaW5nCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD02NzcyMAorCisgICAgICAgIEltcGxlbWVudGluZyBzdXBwb3J0IGZvciA8c3R5bGUgc2NvcGVk
PjoKKyAgICAgICAgQ1NTU3R5bGVTZWxlY3RvciBob2xkcyBnbG9iYWwgYXMgd2VsbCBhcyBzY29w
ZWQgYXV0aG9yIHNoZWV0cy4KKyAgICAgICAgU2NvcGVkIGF1dGhvciBzaGVldHMgYXJlIG1hcHBl
ZCBieSB0aGVpciBzY29waW5nIGVsZW1lbnQgKHRoZSBwYXJlbnQgZWxlbWVudCBvZiA8c3R5bGUg
c2NvcGVkPikuCisgICAgICAgIDxzdHlsZSBzY29wZWQ+IGVsZW1lbnRzIHJlZ2lzdGVyIGFuZCB1
bi1yZWdpc3RlciB3aXRoIHRoZWlyIHNjb3BpbmcgcGFyZW50IGVsZW1lbnQKKyAgICAgICAgaW4g
YSBraW5kIG9mIHJlZi1jb3VudGluZywgaW4gb3JkZXIgdG8gYWxsb3cgcXVpY2sgbG9vay11cCBv
ZiB3aGV0aGVyIGFuIGVsZW1lbnQgaGFzIHNjb3BlZCBzdHlsZSBjaGlsZHJlbi4KKyAgICAgICAg
QWxzbywgcHJldmVudCBzdHlsZSBzaGFyaW5nIGZyb20gY3Jvc3NpbmcgaW50by9vdXQgb2Ygc2Nv
cGVkIHN0eWxlIGJvdW5kYXJpZXMuCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgVGVzdHM6IGZhc3QvY3NzL3N0eWxlLXNjb3BlZC9zdHlsZS1zY29wZWQt
YXR0YWNoLmh0bWwKKyAgICAgICAgICAgICAgIGZhc3QvY3NzL3N0eWxlLXNjb3BlZC9zdHlsZS1z
Y29wZWQtYmFzaWMuaHRtbAorICAgICAgICAgICAgICAgZmFzdC9jc3Mvc3R5bGUtc2NvcGVkL3N0
eWxlLXNjb3BlZC1kZXRhY2guaHRtbAorICAgICAgICAgICAgICAgZmFzdC9jc3Mvc3R5bGUtc2Nv
cGVkL3N0eWxlLXNjb3BlZC1yZW1vdmUtc2NvcGVkLmh0bWwKKyAgICAgICAgICAgICAgIGZhc3Qv
Y3NzL3N0eWxlLXNjb3BlZC9zdHlsZS1zY29wZWQtc2V0LXNjb3BlZC5odG1sCisKKyAgICAgICAg
KiBjc3MvQ1NTU3R5bGVTZWxlY3Rvci5jcHA6IGFkZCBzdXBwb3J0IGZvciBzY29wZWQgYXV0aG9y
IHNoZWV0cworICAgICAgICAoV2ViQ29yZTo6U2NvcGVkUnVsZVNldHM6OlNjb3BlZFJ1bGVTZXRz
KTogY2xhc3MgZm9yIHNjb3BlZCBhdXRob3Igc2hlZXRzCisgICAgICAgIChXZWJDb3JlOjpTY29w
ZWRSdWxlU2V0czo6Z2V0KToKKyAgICAgICAgKFdlYkNvcmU6OlNjb3BlZFJ1bGVTZXRzOjp+U2Nv
cGVkUnVsZVNldHMpOgorICAgICAgICAoV2ViQ29yZTo6U2NvcGVkUnVsZVNldHM6OmVuc3VyZUV4
aXN0cyk6CisgICAgICAgIChXZWJDb3JlOjpTY29wZWRSdWxlU2V0czo6Y29sbGVjdEZlYXR1cmVz
KToKKyAgICAgICAgKFdlYkNvcmU6OmRldGVybWluZVNjb3BlKToKKyAgICAgICAgKFdlYkNvcmU6
Om1hdGNoZXNJblRyZWVTY29wZSk6CisgICAgICAgIChXZWJDb3JlOjpsZXNzU3BlY2lmaWMpOiBy
ZW5hbWVkIGZ1bmN0b3IgdG8gY29tcGFyZSBzcGVjaWZpY2l0eSBvZiBzZWxlY3RvcnMKKyAgICAg
ICAgKFdlYkNvcmU6OkNTU1N0eWxlU2VsZWN0b3I6OkNTU1N0eWxlU2VsZWN0b3IpOgorICAgICAg
ICAoV2ViQ29yZTo6Q1NTU3R5bGVTZWxlY3Rvcjo6bWF0Y2hBdXRob3JSdWxlcyk6IG1hdGNoIHNj
b3BlZCBhdXRob3IgcnVsZXMKKyAgICAgICAgKFdlYkNvcmU6OkNTU1N0eWxlU2VsZWN0b3I6Om1h
dGNoUGFnZVJ1bGVzKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1N0eWxlU2VsZWN0b3I6Om1hdGNo
UnVsZXNHbG9iYWxseSk6IHJlbmFtZWQgdG8gbWFrZSBleHBsaWNpdCB0aGF0IHJ1bGVzIGFyZSBu
b3QgY29uc2lkZXJlZCBzY29wZWQKKyAgICAgICAgKFdlYkNvcmU6OkNTU1N0eWxlU2VsZWN0b3I6
Om1hdGNoUnVsZVNldCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NTdHlsZVNlbGVjdG9yOjptYXRj
aFJ1bGVzRm9yTGlzdCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NTdHlsZVNlbGVjdG9yOjptYXRj
aFVBUnVsZXMpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTU3R5bGVTZWxlY3Rvcjo6c29ydEFuZFRy
YW5zZmVyTWF0Y2hlZFJ1bGVzKTogcmVmYWN0b3JpbmcgdG8gc2ltcGxpZnkgY29kZQorICAgICAg
ICAoV2ViQ29yZTo6Q1NTU3R5bGVTZWxlY3Rvcjo6bG9jYXRlQ291c2luTGlzdCk6IGF2b2lkIGNy
b3NzaW5nIHNjb3BlZCBzdHlsZSBib3VuZGFyaWVzCisgICAgICAgIChXZWJDb3JlOjpDU1NTdHls
ZVNlbGVjdG9yOjptYXRjaGVzUnVsZVNldEdsb2JhbGx5KTogcmVuYW1lZCB0byBtYWtlIGV4cGxp
Y2l0IHRoYXQgcnVsZXMgYXJlIG5vdCBjb25zaWRlcmVkIHNjb3BlZAorICAgICAgICAoV2ViQ29y
ZTo6Q1NTU3R5bGVTZWxlY3Rvcjo6Y2FuU2hhcmVTdHlsZVdpdGhFbGVtZW50KTogYXZvaWQgY3Jv
c3Npbmcgc2NvcGVkIHN0eWxlIGJvdW5kYXJpZXMKKyAgICAgICAgKFdlYkNvcmU6OkNTU1N0eWxl
U2VsZWN0b3I6OmxvY2F0ZVNoYXJlZFN0eWxlKTogZGl0dG8KKyAgICAgICAgKFdlYkNvcmU6OkNT
U1N0eWxlU2VsZWN0b3I6OnN0eWxlRm9yRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NT
dHlsZVNlbGVjdG9yOjpwc2V1ZG9TdHlsZUZvckVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6
Q1NTU3R5bGVTZWxlY3Rvcjo6c3R5bGVGb3JQYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1N0
eWxlU2VsZWN0b3I6OnBzZXVkb1N0eWxlUnVsZXNGb3JFbGVtZW50KToKKyAgICAgICAgKFdlYkNv
cmU6OkNTU1N0eWxlU2VsZWN0b3I6OmNoZWNrU2VsZWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6
UnVsZVNldDo6YWRkVG9SdWxlU2V0KToKKyAgICAgICAgKFdlYkNvcmU6OlJ1bGVTZXQ6OmFkZFJ1
bGVzRnJvbVNoZWV0KToKKyAgICAgICAgKFdlYkNvcmU6OlJ1bGVTZXQ6OmFkZFN0eWxlUnVsZSk6
CisgICAgICAgICogY3NzL0NTU1N0eWxlU2VsZWN0b3IuaDoKKyAgICAgICAgKiBjc3MvQ1NTU3R5
bGVTaGVldC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDU1NTdHlsZVNoZWV0OjpmaW5kT3duZXJO
b2RlKTogcmVmYWN0b3JpbmcKKyAgICAgICAgKFdlYkNvcmU6OkNTU1N0eWxlU2hlZXQ6OmRvY3Vt
ZW50KTogbWFrZSB1c2Ugb2YgcmVmYWN0b3JlZCBmaW5kT3duZXJOb2RlCisgICAgICAgICogY3Nz
L0NTU1N0eWxlU2hlZXQuaDoKKyAgICAgICAgKiBjc3MvU2VsZWN0b3JDaGVja2VyLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlNlbGVjdG9yQ2hlY2tlcjo6cHVzaFBhcmVudFN0YWNrRnJhbWUpOiBh
ZGQgc2NvcGluZyBpbmZvcm1hdGlvbiB0byBwYXJlbnQgc3RhY2sgZnJhbWUsIG1ha2UgY29uc3QK
KyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdG9yQ2hlY2tlcjo6cHVzaFBhcmVudCk6IAorICAgICAg
ICAoV2ViQ29yZTo6U2VsZWN0b3JDaGVja2VyOjpjaGVja1NlbGVjdG9yKTogYWRkIHNjb3BlCisg
ICAgICAgIChXZWJDb3JlOjpTZWxlY3RvckNoZWNrZXI6OmZhc3RDaGVja1NlbGVjdG9yKTogZGl0
dG8KKyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdG9yQ2hlY2tlcjo6Y2hlY2tPbmVTZWxlY3Rvcik6
IGRpdHRvCisgICAgICAgICogY3NzL1NlbGVjdG9yQ2hlY2tlci5oOgorICAgICAgICAoV2ViQ29y
ZTo6U2VsZWN0b3JDaGVja2VyOjpwYXJlbnRTdGFja0lzQ29uc2lzdGVudCk6CisgICAgICAgIChX
ZWJDb3JlOjpTZWxlY3RvckNoZWNrZXI6OlBhcmVudFN0YWNrRnJhbWU6OlBhcmVudFN0YWNrRnJh
bWUpOiBtYWtlIGVsZW1lbnQgYW5kIHNjb3BpbmcgaW5mbyBtZW1iZXJzIGNvbnN0CisgICAgICAg
IChXZWJDb3JlOjpTZWxlY3RvckNoZWNrZXI6OmdldEVsZW1lbnRXaXRoSW5kZXgpOiBpbnRlcmZh
Y2UgdG8gYWNjZXNzIHBhcmVudFN0YWNrRnJhbWVzCisgICAgICAgIChXZWJDb3JlOjpTZWxlY3Rv
ckNoZWNrZXI6OmdldElubmVybW9zdFN0eWxlU2NvcGVFbGVtZW50SW5kZXgpOiBkaXR0bworICAg
ICAgICAoV2ViQ29yZTo6U2VsZWN0b3JDaGVja2VyOjpnZXRFbmNsb3NpbmdTdHlsZVNjb3BlRWxl
bWVudEluZGV4KTogZGl0dG8KKyAgICAgICAgKiBkb20vU2VsZWN0b3JRdWVyeS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpTZWxlY3RvclF1ZXJ5OjpxdWVyeUFsbCk6CisgICAgICAgIChXZWJDb3Jl
OjpTZWxlY3RvclF1ZXJ5OjpxdWVyeUZpcnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdG9y
UXVlcnk6OmV4ZWN1dGUpOgorICAgICAgICAqIGRvbS9TZWxlY3RvclF1ZXJ5Lmg6CisKIDIwMTEt
MTAtMTYgIEtlbnRhcm8gSGFyYSAgPGhhcmFrZW5AY2hyb21pdW0ub3JnPgogCiAgICAgICAgIEdl
bmVyYXRlIFhTTFRQcm9jZXNzb3IgY29uc3RydWN0b3IgZm9yIEpTQyBieSBbQ29uc3RydWN0b3Jd
IElETC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTdHlsZVNlbGVjdG9yLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTdHlsZVNlbGVjdG9yLmNwcAppbmRleCBiZjFkMjBj
Li5hMDNjOWNiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU3R5bGVTZWxlY3Rv
ci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU1N0eWxlU2VsZWN0b3IuY3BwCkBAIC02
OCw2ICs2OCw3IEBACiAjaW5jbHVkZSAiSFRNTElucHV0RWxlbWVudC5oIgogI2luY2x1ZGUgIkhU
TUxOYW1lcy5oIgogI2luY2x1ZGUgIkhUTUxQcm9ncmVzc0VsZW1lbnQuaCIKKyNpbmNsdWRlICJI
VE1MU3R5bGVFbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTFRleHRBcmVhRWxlbWVudC5oIgogI2lu
Y2x1ZGUgIktleWZyYW1lTGlzdC5oIgogI2luY2x1ZGUgIkxpbmtIYXNoLmgiCkBAIC0yMjIsMTYg
KzIyMywxNSBAQCBjbGFzcyBSdWxlU2V0IHsKIHB1YmxpYzoKICAgICBSdWxlU2V0KCk7CiAgICAg
flJ1bGVTZXQoKTsKLSAgICAKKwogICAgIHR5cGVkZWYgSGFzaE1hcDxBdG9taWNTdHJpbmdJbXBs
KiwgVmVjdG9yPFJ1bGVEYXRhPio+IEF0b21SdWxlTWFwOwotICAgIAotICAgIHZvaWQgYWRkUnVs
ZXNGcm9tU2hlZXQoQ1NTU3R5bGVTaGVldCosIGNvbnN0IE1lZGlhUXVlcnlFdmFsdWF0b3ImLCBD
U1NTdHlsZVNlbGVjdG9yKiA9IDApOwogCi0gICAgdm9pZCBhZGRTdHlsZVJ1bGUoQ1NTU3R5bGVS
dWxlKiBpdGVtKTsKLSAgICB2b2lkIGFkZFJ1bGUoQ1NTU3R5bGVSdWxlKiBydWxlLCBDU1NTZWxl
Y3Rvciogc2VsKTsKLSAgICB2b2lkIGFkZFBhZ2VSdWxlKENTU1N0eWxlUnVsZSogcnVsZSwgQ1NT
U2VsZWN0b3IqIHNlbCk7Ci0gICAgdm9pZCBhZGRUb1J1bGVTZXQoQXRvbWljU3RyaW5nSW1wbCog
a2V5LCBBdG9tUnVsZU1hcCYgbWFwLAotICAgICAgICAgICAgICAgICAgICAgIENTU1N0eWxlUnVs
ZSogcnVsZSwgQ1NTU2VsZWN0b3IqIHNlbCk7CisgICAgdm9pZCBhZGRSdWxlc0Zyb21TaGVldChD
U1NTdHlsZVNoZWV0KiwgY29uc3QgTWVkaWFRdWVyeUV2YWx1YXRvciYsIENTU1N0eWxlU2VsZWN0
b3IqID0gMCwgY29uc3QgRWxlbWVudCogPSAwKTsKKworICAgIHZvaWQgYWRkU3R5bGVSdWxlKENT
U1N0eWxlUnVsZSosIGNvbnN0IEVsZW1lbnQqKTsKKyAgICB2b2lkIGFkZFJ1bGUoQ1NTU3R5bGVS
dWxlKiwgQ1NTU2VsZWN0b3IqKTsKKyAgICB2b2lkIGFkZFBhZ2VSdWxlKENTU1N0eWxlUnVsZSos
IENTU1NlbGVjdG9yKik7CisgICAgdm9pZCBhZGRUb1J1bGVTZXQoQXRvbWljU3RyaW5nSW1wbCos
IEF0b21SdWxlTWFwJiwgQ1NTU3R5bGVSdWxlKiwgQ1NTU2VsZWN0b3IqKTsKICAgICB2b2lkIHNo
cmlua1RvRml0KCk7CiAgICAgdm9pZCBkaXNhYmxlQXV0b1Nocmlua1RvRml0KCkgeyBtX2F1dG9T
aHJpbmtUb0ZpdEVuYWJsZWQgPSBmYWxzZTsgfQogCkBAIC0yNTksNiArMjU5LDIzIEBAIHB1Ymxp
YzoKICAgICBib29sIG1fYXV0b1Nocmlua1RvRml0RW5hYmxlZDsKIH07CiAKK2NsYXNzIFNjb3Bl
ZFJ1bGVTZXRzIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShTY29wZWRSdWxlU2V0cyk7Citw
dWJsaWM6CisgICAgU2NvcGVkUnVsZVNldHMoKSB7IH0KKyAgICB+U2NvcGVkUnVsZVNldHMoKTsK
KworICAgIFJ1bGVTZXQqIGdldChjb25zdCBFbGVtZW50KiBzY29wZSkgeyByZXR1cm4gbV9zY29w
ZWRSdWxlU2V0TWFwLmdldChzY29wZSk7IH0KKyAgICBSdWxlU2V0KiBlbnN1cmVFeGlzdHMoY29u
c3QgRWxlbWVudCopOworCisgICAgdm9pZCBjb2xsZWN0RmVhdHVyZXMoQ1NTU3R5bGVTZWxlY3Rv
cjo6RmVhdHVyZXMmKSBjb25zdDsKKworcHJpdmF0ZToKKyAgICB0eXBlZGVmIEhhc2hNYXA8Y29u
c3QgRWxlbWVudCosIFJ1bGVTZXQqPiBTY29wZWRSdWxlU2V0TWFwOworCisgICAgU2NvcGVkUnVs
ZVNldE1hcCBtX3Njb3BlZFJ1bGVTZXRNYXA7Cit9OworCiBzdGF0aWMgUnVsZVNldCogZGVmYXVs
dFN0eWxlOwogc3RhdGljIFJ1bGVTZXQqIGRlZmF1bHRRdWlya3NTdHlsZTsKIHN0YXRpYyBSdWxl
U2V0KiBkZWZhdWx0UHJpbnRTdHlsZTsKQEAgLTMzMyw2ICszNTAsMzIgQEAgc3RhdGljIENTU011
dGFibGVTdHlsZURlY2xhcmF0aW9uKiByaWdodFRvTGVmdERlY2xhcmF0aW9uKCkKICAgICByZXR1
cm4gcmlnaHRUb0xlZnREZWNsLmdldCgpOwogfQogCisvLyBEZXRlcm1pbmUgdGhlIHNjb3BlIG9m
IGEgc3R5bGUgc2hlZXQgKGlmIGFueSkuIFJldHVybnMgJ2ZhbHNlJyBpZiBpdCdzIGEgc2NvcGVk
IHN0eWxlIHNoZWV0IGluIGFuIGludmFsaWQgbG9jYXRpb24uCitzdGF0aWMgYm9vbCBkZXRlcm1p
bmVTY29wZShDU1NTdHlsZVNoZWV0KiBzaGVldCwgY29uc3QgRWxlbWVudComIHNjb3BlKQorewor
ICAgIHNjb3BlID0gMDsKKworICAgIGlmICghc2hlZXQpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KworICAgIE5vZGUqIG93bmVyTm9kZSA9IHNoZWV0LT5maW5kT3duZXJOb2RlKCk7CisgICAgaWYg
KCFvd25lck5vZGUgfHwgIW93bmVyTm9kZS0+aXNIVE1MRWxlbWVudCgpIHx8ICFvd25lck5vZGUt
Pmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpzdHlsZVRhZykpCisgICAgICAgIHJldHVybiB0cnVlOwor
CisgICAgSFRNTFN0eWxlRWxlbWVudCogc3R5bGVFbGVtZW50ID0gc3RhdGljX2Nhc3Q8SFRNTFN0
eWxlRWxlbWVudCo+KG93bmVyTm9kZSk7CisgICAgaWYgKCFzdHlsZUVsZW1lbnQtPnNjb3BlZCgp
KQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIERvY3VtZW50KiBkb2N1bWVudCA9IHN0eWxl
RWxlbWVudC0+ZG9jdW1lbnQoKTsKKyAgICBpZiAoIWRvY3VtZW50KQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisKKyAgICBzY29wZSA9IHN0eWxlRWxlbWVudC0+cGFyZW50RWxlbWVudCgpOworICAg
IEFTU0VSVChzY29wZSk7CisKKyAgICByZXR1cm4gc2NvcGU7IC8vIFRoZXJlIG11c3QgYmUgYSBz
Y29waW5nIGVsZW1lbnQgLSByZXR1cm4gJ2ZhbHNlJyBpZiBmb3Igd2hhdGV2ZXIgcmVhc29uIHRo
aXMgaXMgbm90IHRoZSBjYXNlLgorfQorCiBDU1NTdHlsZVNlbGVjdG9yOjpDU1NTdHlsZVNlbGVj
dG9yKERvY3VtZW50KiBkb2N1bWVudCwgU3R5bGVTaGVldExpc3QqIHN0eWxlU2hlZXRzLCBDU1NT
dHlsZVNoZWV0KiBtYXBwZWRFbGVtZW50U2hlZXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIENTU1N0eWxlU2hlZXQqIHBhZ2VVc2VyU2hlZXQsIGNvbnN0IFZlY3RvcjxSZWZQ
dHI8Q1NTU3R5bGVTaGVldD4gPiogcGFnZUdyb3VwVXNlclNoZWV0cywgY29uc3QgVmVjdG9yPFJl
ZlB0cjxDU1NTdHlsZVNoZWV0PiA+KiBkb2N1bWVudFVzZXJTaGVldHMsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGJvb2wgc3RyaWN0UGFyc2luZywgYm9vbCBtYXRjaEF1dGhv
ckFuZFVzZXJTdHlsZXMpCkBAIC0zNzUsOSArNDE4LDEwIEBAIENTU1N0eWxlU2VsZWN0b3I6OkNT
U1N0eWxlU2VsZWN0b3IoRG9jdW1lbnQqIGRvY3VtZW50LCBTdHlsZVNoZWV0TGlzdCogc3R5bGVT
aGVlCiAgICAgaWYgKG1fcm9vdERlZmF1bHRTdHlsZSAmJiB2aWV3KQogICAgICAgICBtX21lZGl1
bSA9IGFkb3B0UHRyKG5ldyBNZWRpYVF1ZXJ5RXZhbHVhdG9yKHZpZXctPm1lZGlhVHlwZSgpLCB2
aWV3LT5mcmFtZSgpLCBtX3Jvb3REZWZhdWx0U3R5bGUuZ2V0KCkpKTsKIAotICAgIG1fYXV0aG9y
U3R5bGUgPSBhZG9wdFB0cihuZXcgUnVsZVNldCk7CisgICAgbV9nbG9iYWxBdXRob3JTdHlsZXMg
PSBhZG9wdFB0cihuZXcgUnVsZVNldCk7CisgICAgbV9zY29wZWRBdXRob3JTdHlsZXMgPSBhZG9w
dFB0cihuZXcgU2NvcGVkUnVsZVNldHMpOwogICAgIC8vIEFkZGluZyBydWxlcyBmcm9tIG11bHRp
cGxlIHNoZWV0cywgc2hyaW5rIGF0IHRoZSBlbmQuCi0gICAgbV9hdXRob3JTdHlsZS0+ZGlzYWJs
ZUF1dG9TaHJpbmtUb0ZpdCgpOworICAgIG1fZ2xvYmFsQXV0aG9yU3R5bGVzLT5kaXNhYmxlQXV0
b1Nocmlua1RvRml0KCk7CiAKICAgICAvLyBGSVhNRTogVGhpcyBzdWNrcyEgVGhlIHVzZXIgc2hl
ZXQgaXMgcmVwYXJzZWQgZXZlcnkgdGltZSEKICAgICBPd25QdHI8UnVsZVNldD4gdGVtcFVzZXJT
dHlsZSA9IGFkb3B0UHRyKG5ldyBSdWxlU2V0KTsKQEAgLTM4OSw3ICs0MzMsNyBAQCBDU1NTdHls
ZVNlbGVjdG9yOjpDU1NTdHlsZVNlbGVjdG9yKERvY3VtZW50KiBkb2N1bWVudCwgU3R5bGVTaGVl
dExpc3QqIHN0eWxlU2hlZQogICAgICAgICAgICAgaWYgKHBhZ2VHcm91cFVzZXJTaGVldHMtPmF0
KGkpLT5pc1VzZXJTdHlsZVNoZWV0KCkpCiAgICAgICAgICAgICAgICAgdGVtcFVzZXJTdHlsZS0+
YWRkUnVsZXNGcm9tU2hlZXQocGFnZUdyb3VwVXNlclNoZWV0cy0+YXQoaSkuZ2V0KCksICptX21l
ZGl1bSwgdGhpcyk7CiAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgbV9hdXRob3JT
dHlsZS0+YWRkUnVsZXNGcm9tU2hlZXQocGFnZUdyb3VwVXNlclNoZWV0cy0+YXQoaSkuZ2V0KCks
ICptX21lZGl1bSwgdGhpcyk7CisgICAgICAgICAgICAgICAgbV9nbG9iYWxBdXRob3JTdHlsZXMt
PmFkZFJ1bGVzRnJvbVNoZWV0KHBhZ2VHcm91cFVzZXJTaGVldHMtPmF0KGkpLmdldCgpLCAqbV9t
ZWRpdW0sIHRoaXMpOwogICAgICAgICB9CiAgICAgfQogICAgIGlmIChkb2N1bWVudFVzZXJTaGVl
dHMpIHsKQEAgLTM5OCw3ICs0NDIsNyBAQCBDU1NTdHlsZVNlbGVjdG9yOjpDU1NTdHlsZVNlbGVj
dG9yKERvY3VtZW50KiBkb2N1bWVudCwgU3R5bGVTaGVldExpc3QqIHN0eWxlU2hlZQogICAgICAg
ICAgICAgaWYgKGRvY3VtZW50VXNlclNoZWV0cy0+YXQoaSktPmlzVXNlclN0eWxlU2hlZXQoKSkK
ICAgICAgICAgICAgICAgICB0ZW1wVXNlclN0eWxlLT5hZGRSdWxlc0Zyb21TaGVldChkb2N1bWVu
dFVzZXJTaGVldHMtPmF0KGkpLmdldCgpLCAqbV9tZWRpdW0sIHRoaXMpOwogICAgICAgICAgICAg
ZWxzZQotICAgICAgICAgICAgICAgIG1fYXV0aG9yU3R5bGUtPmFkZFJ1bGVzRnJvbVNoZWV0KGRv
Y3VtZW50VXNlclNoZWV0cy0+YXQoaSkuZ2V0KCksICptX21lZGl1bSwgdGhpcyk7CisgICAgICAg
ICAgICAgICAgbV9nbG9iYWxBdXRob3JTdHlsZXMtPmFkZFJ1bGVzRnJvbVNoZWV0KGRvY3VtZW50
VXNlclNoZWV0cy0+YXQoaSkuZ2V0KCksICptX21lZGl1bSwgdGhpcyk7CiAgICAgICAgIH0KICAg
ICB9CiAKQEAgLTQwNiwxNSArNDUwLDI2IEBAIENTU1N0eWxlU2VsZWN0b3I6OkNTU1N0eWxlU2Vs
ZWN0b3IoRG9jdW1lbnQqIGRvY3VtZW50LCBTdHlsZVNoZWV0TGlzdCogc3R5bGVTaGVlCiAgICAg
ICAgIG1fdXNlclN0eWxlID0gdGVtcFVzZXJTdHlsZS5yZWxlYXNlKCk7CiAKICAgICAvLyBBZGQg
cnVsZXMgZnJvbSBlbGVtZW50cyBsaWtlIFNWRydzIDxmb250LWZhY2U+Ci0gICAgaWYgKG1hcHBl
ZEVsZW1lbnRTaGVldCkKLSAgICAgICAgbV9hdXRob3JTdHlsZS0+YWRkUnVsZXNGcm9tU2hlZXQo
bWFwcGVkRWxlbWVudFNoZWV0LCAqbV9tZWRpdW0sIHRoaXMpOworICAgIGlmIChtYXBwZWRFbGVt
ZW50U2hlZXQpIHsKKyAgICAgICAgLy8gRklYTUU6IHNlZSBpZiBzdHlsZSBzY29wZXMgY2FuL3No
b3VsZCBiZSBhZGRlZCBoZXJlLgorICAgICAgICBtX2dsb2JhbEF1dGhvclN0eWxlcy0+YWRkUnVs
ZXNGcm9tU2hlZXQobWFwcGVkRWxlbWVudFNoZWV0LCAqbV9tZWRpdW0sIHRoaXMpOworICAgIH0K
IAogICAgIC8vIGFkZCBzdHlsZXNoZWV0cyBmcm9tIGRvY3VtZW50CiAgICAgdW5zaWduZWQgbGVu
Z3RoID0gc3R5bGVTaGVldHMtPmxlbmd0aCgpOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBsZW5ndGg7IGkrKykgewogICAgICAgICBTdHlsZVNoZWV0KiBzaGVldCA9IHN0eWxlU2hlZXRz
LT5pdGVtKGkpOwotICAgICAgICBpZiAoc2hlZXQtPmlzQ1NTU3R5bGVTaGVldCgpICYmICFzaGVl
dC0+ZGlzYWJsZWQoKSkKLSAgICAgICAgICAgIG1fYXV0aG9yU3R5bGUtPmFkZFJ1bGVzRnJvbVNo
ZWV0KHN0YXRpY19jYXN0PENTU1N0eWxlU2hlZXQqPihzaGVldCksICptX21lZGl1bSwgdGhpcyk7
CisgICAgICAgIGlmIChzaGVldC0+aXNDU1NTdHlsZVNoZWV0KCkgJiYgIXNoZWV0LT5kaXNhYmxl
ZCgpKSB7CisgICAgICAgICAgICBDU1NTdHlsZVNoZWV0KiBjc3NTaGVldCA9IHN0YXRpY19jYXN0
PENTU1N0eWxlU2hlZXQqPihzaGVldCk7CisgICAgICAgICAgICBjb25zdCBFbGVtZW50KiBzY29w
ZSA9IDA7CisKKyAgICAgICAgICAgIGlmICghZGV0ZXJtaW5lU2NvcGUoY3NzU2hlZXQsIHNjb3Bl
KSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIGlmIChzY29wZSkKKyAg
ICAgICAgICAgICAgICBtX3Njb3BlZEF1dGhvclN0eWxlcy0+ZW5zdXJlRXhpc3RzKHNjb3BlKS0+
YWRkUnVsZXNGcm9tU2hlZXQoY3NzU2hlZXQsICptX21lZGl1bSwgdGhpcywgc2NvcGUpOworICAg
ICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIG1fZ2xvYmFsQXV0aG9yU3R5bGVzLT5hZGRS
dWxlc0Zyb21TaGVldChjc3NTaGVldCwgKm1fbWVkaXVtLCB0aGlzKTsKKyAgICAgICAgfQogICAg
IH0gICAgCiAgICAgLy8gQ29sbGVjdCBhbGwgaWRzIGFuZCBydWxlcyB1c2luZyBzaWJsaW5nIHNl
bGVjdG9ycyAoOmZpcnN0LWNoaWxkIGFuZCBzaW1pbGFyKQogICAgIC8vIGluIHRoZSBjdXJyZW50
IHNldCBvZiBzdHlsZXNoZWV0cy4gU3R5bGUgc2hhcmluZyBjb2RlIHVzZXMgdGhpcyBpbmZvcm1h
dGlvbiB0byByZWplY3QKQEAgLTQyNCwxMSArNDc5LDEyIEBAIENTU1N0eWxlU2VsZWN0b3I6OkNT
U1N0eWxlU2VsZWN0b3IoRG9jdW1lbnQqIGRvY3VtZW50LCBTdHlsZVNoZWV0TGlzdCogc3R5bGVT
aGVlCiAgICAgICAgIHNpYmxpbmdSdWxlc0luRGVmYXVsdFN0eWxlLT5jb2xsZWN0RmVhdHVyZXMo
bV9mZWF0dXJlcyk7CiAgICAgaWYgKHVuY29tbW9uQXR0cmlidXRlUnVsZXNJbkRlZmF1bHRTdHls
ZSkKICAgICAgICAgdW5jb21tb25BdHRyaWJ1dGVSdWxlc0luRGVmYXVsdFN0eWxlLT5jb2xsZWN0
RmVhdHVyZXMobV9mZWF0dXJlcyk7Ci0gICAgbV9hdXRob3JTdHlsZS0+Y29sbGVjdEZlYXR1cmVz
KG1fZmVhdHVyZXMpOworICAgIG1fZ2xvYmFsQXV0aG9yU3R5bGVzLT5jb2xsZWN0RmVhdHVyZXMo
bV9mZWF0dXJlcyk7CisgICAgbV9zY29wZWRBdXRob3JTdHlsZXMtPmNvbGxlY3RGZWF0dXJlcyht
X2ZlYXR1cmVzKTsKICAgICBpZiAobV91c2VyU3R5bGUpCiAgICAgICAgIG1fdXNlclN0eWxlLT5j
b2xsZWN0RmVhdHVyZXMobV9mZWF0dXJlcyk7CiAKLSAgICBtX2F1dGhvclN0eWxlLT5zaHJpbmtU
b0ZpdCgpOworICAgIG1fZ2xvYmFsQXV0aG9yU3R5bGVzLT5zaHJpbmtUb0ZpdCgpOwogICAgIGlm
IChtX2ZlYXR1cmVzLnNpYmxpbmdSdWxlcykKICAgICAgICAgbV9mZWF0dXJlcy5zaWJsaW5nUnVs
ZXMtPnNocmlua1RvRml0KCk7CiAgICAgaWYgKG1fZmVhdHVyZXMudW5jb21tb25BdHRyaWJ1dGVS
dWxlcykKQEAgLTUzMSw0NSArNTg3LDEwNyBAQCB2b2lkIENTU1N0eWxlU2VsZWN0b3I6OmFkZE1h
dGNoZWREZWNsYXJhdGlvbihDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbiogZGVjbCwgdQogICAg
IG1fbWF0Y2hlZERlY2xzLmFwcGVuZChNYXRjaGVkU3R5bGVEZWNsYXJhdGlvbihkZWNsLCBsaW5r
TWF0Y2hUeXBlKSk7CiB9CiAKLXZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6bWF0Y2hSdWxlcyhSdWxl
U2V0KiBydWxlcywgaW50JiBmaXJzdFJ1bGVJbmRleCwgaW50JiBsYXN0UnVsZUluZGV4LCBib29s
IGluY2x1ZGVFbXB0eVJ1bGVzKQordm9pZCBDU1NTdHlsZVNlbGVjdG9yOjptYXRjaEF1dGhvclJ1
bGVzKGludCYgZmlyc3RSdWxlSW5kZXgsIGludCYgbGFzdFJ1bGVJbmRleCwgYm9vbCBpbmNsdWRl
RW1wdHlSdWxlcykKK3sKKyAgICBtX21hdGNoZWRSdWxlcy5jbGVhcigpOworCisgICAgLy8gTWF0
Y2ggZ2xvYmFsIGF1dGhvciBydWxlcy4KKyAgICBtYXRjaFJ1bGVTZXQobV9nbG9iYWxBdXRob3JT
dHlsZXMuZ2V0KCksIDAsIGZpcnN0UnVsZUluZGV4LCBsYXN0UnVsZUluZGV4LCBpbmNsdWRlRW1w
dHlSdWxlcyk7CisgICAgLy8gTWF0Y2ggc2NvcGVkIHN0eWxlIHNoZWV0J3MgcnVsZXMuCisgICAg
aWYgKG1fY2hlY2tlci5wYXJlbnRTdGFja0lzQ29uc2lzdGVudChtX3BhcmVudE5vZGUpKSB7Cisg
ICAgICAgIC8vIEZhc3QgYnJhbmNoOiBhY2Nlc3MgZW5jbG9zaW5nIHNjb3BlcyBkaXJlY3RseSBm
cm9tIHBhcmVudCBzdGFjaworICAgICAgICAvLyAoYnV0IHN0YXJ0IHdpdGggY3VycmVudCBlbGVt
ZW50KS4KKyAgICAgICAgaWYgKG1fZWxlbWVudC0+aGFzU2NvcGVkSFRNTFN0eWxlQ2hpbGQoKSkg
eworICAgICAgICAgICAgUnVsZVNldCogcnVsZVNldCA9IG1fc2NvcGVkQXV0aG9yU3R5bGVzLT5n
ZXQobV9lbGVtZW50KTsKKyAgICAgICAgICAgIGlmIChydWxlU2V0KQorICAgICAgICAgICAgICAg
IG1hdGNoUnVsZVNldChydWxlU2V0LCBtX2VsZW1lbnQsIGZpcnN0UnVsZUluZGV4LCBsYXN0UnVs
ZUluZGV4LCBpbmNsdWRlRW1wdHlSdWxlcyk7CisgICAgICAgIH0KKyAgICAgICAgaW50IHNjb3Bl
SW5kZXggPSBtX2NoZWNrZXIuZ2V0SW5uZXJtb3N0U3R5bGVTY29wZUVsZW1lbnRJbmRleCgpOwor
ICAgICAgICB3aGlsZSAoc2NvcGVJbmRleCA+PSAwKSB7CisgICAgICAgICAgICBjb25zdCBFbGVt
ZW50KiBzY29wZSA9IG1fY2hlY2tlci5nZXRFbGVtZW50V2l0aEluZGV4KHNjb3BlSW5kZXgpOwor
ICAgICAgICAgICAgUnVsZVNldCogcnVsZVNldCA9IG1fc2NvcGVkQXV0aG9yU3R5bGVzLT5nZXQo
c2NvcGUpOworICAgICAgICAgICAgaWYgKHJ1bGVTZXQpCisgICAgICAgICAgICAgICAgbWF0Y2hS
dWxlU2V0KHJ1bGVTZXQsIHNjb3BlLCBmaXJzdFJ1bGVJbmRleCwgbGFzdFJ1bGVJbmRleCwgaW5j
bHVkZUVtcHR5UnVsZXMpOworICAgICAgICAgICAgc2NvcGVJbmRleCA9IG1fY2hlY2tlci5nZXRF
bmNsb3NpbmdTdHlsZVNjb3BlRWxlbWVudEluZGV4KHNjb3BlSW5kZXgpOworICAgICAgICB9Cisg
ICAgfSBlbHNlIHsKKyAgICAgICAgLy8gU2xvdyBicmFuY2g6IGNsaW1iIHRyZWUsIGNoZWNrIGZv
ciBzdHlsZSBzY29wZXMgYXQgZXZlcnkgZWxlbWVudC4KKyAgICAgICAgZm9yIChjb25zdCBOb2Rl
KiBub2RlID0gbV9lbGVtZW50OyBub2RlOyBub2RlID0gbm9kZS0+cGFyZW50Tm9kZSgpKSB7Cisg
ICAgICAgICAgICBpZiAoIW5vZGUtPmlzRWxlbWVudE5vZGUoKSkKKyAgICAgICAgICAgICAgICBj
b250aW51ZTsKKyAgICAgICAgICAgIGNvbnN0IEVsZW1lbnQqIGVsZW1lbnQgPSB0b0VsZW1lbnQo
bm9kZSk7CisgICAgICAgICAgICBpZiAoIWVsZW1lbnQtPmhhc1Njb3BlZEhUTUxTdHlsZUNoaWxk
KCkpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICBSdWxlU2V0KiBydWxl
U2V0ID0gbV9zY29wZWRBdXRob3JTdHlsZXMtPmdldChlbGVtZW50KTsKKyAgICAgICAgICAgIGlm
IChydWxlU2V0KQorICAgICAgICAgICAgICAgIG1hdGNoUnVsZVNldChydWxlU2V0LCBlbGVtZW50
LCBmaXJzdFJ1bGVJbmRleCwgbGFzdFJ1bGVJbmRleCwgaW5jbHVkZUVtcHR5UnVsZXMpOworICAg
ICAgICB9CisgICAgfQorCisgICAgc29ydEFuZFRyYW5zZmVyTWF0Y2hlZFJ1bGVzKG1fY2hlY2tl
ci5pc0NvbGxlY3RpbmdSdWxlc09ubHkoKSk7Cit9CisKK3ZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6
bWF0Y2hSdWxlc0dsb2JhbGx5KFJ1bGVTZXQqIHJ1bGVzLCBpbnQmIGZpcnN0UnVsZUluZGV4LCBp
bnQmIGxhc3RSdWxlSW5kZXgsIGJvb2wgaW5jbHVkZUVtcHR5UnVsZXMpCiB7CiAgICAgbV9tYXRj
aGVkUnVsZXMuY2xlYXIoKTsKIAogICAgIGlmICghcnVsZXMgfHwgIW1fZWxlbWVudCkKICAgICAg
ICAgcmV0dXJuOworCisgICAgbWF0Y2hSdWxlU2V0KHJ1bGVzLCAwLCBmaXJzdFJ1bGVJbmRleCwg
bGFzdFJ1bGVJbmRleCwgaW5jbHVkZUVtcHR5UnVsZXMpOworICAgIHNvcnRBbmRUcmFuc2Zlck1h
dGNoZWRSdWxlcyhtX2NoZWNrZXIuaXNDb2xsZWN0aW5nUnVsZXNPbmx5KCkpOworfQogICAgIAor
c3RhdGljIGlubGluZSBib29sIGxlc3NTcGVjaWZpYyhjb25zdCBSdWxlRGF0YSogcjEsIGNvbnN0
IFJ1bGVEYXRhKiByMikKK3sKKyAgICB1bnNpZ25lZCBzcGVjaWZpY2l0eTEgPSByMS0+c3BlY2lm
aWNpdHkoKTsKKyAgICB1bnNpZ25lZCBzcGVjaWZpY2l0eTIgPSByMi0+c3BlY2lmaWNpdHkoKTsK
KyAgICByZXR1cm4gKHNwZWNpZmljaXR5MSA9PSBzcGVjaWZpY2l0eTIpID8gcjEtPnBvc2l0aW9u
KCkgPCByMi0+cG9zaXRpb24oKSA6IHNwZWNpZmljaXR5MSA8IHNwZWNpZmljaXR5MjsgCit9CisK
K3ZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6bWF0Y2hSdWxlU2V0KFJ1bGVTZXQqIHJ1bGVzLCBjb25z
dCBFbGVtZW50KiBzY29wZSwgaW50JiBmaXJzdFJ1bGVJbmRleCwgaW50JiBsYXN0UnVsZUluZGV4
LCBib29sIGluY2x1ZGVFbXB0eVJ1bGVzKQorewogICAgIC8vIFdlIG5lZWQgdG8gY29sbGVjdCB0
aGUgcnVsZXMgZm9yIGlkLCBjbGFzcywgdGFnLCBhbmQgZXZlcnl0aGluZyBlbHNlIGludG8gYSBi
dWZmZXIgYW5kCiAgICAgLy8gdGhlbiBzb3J0IHRoZSBidWZmZXIuCiAgICAgaWYgKG1fZWxlbWVu
dC0+aGFzSUQoKSkKLSAgICAgICAgbWF0Y2hSdWxlc0Zvckxpc3QocnVsZXMtPmlkUnVsZXMobV9l
bGVtZW50LT5pZEZvclN0eWxlUmVzb2x1dGlvbigpLmltcGwoKSksIGZpcnN0UnVsZUluZGV4LCBs
YXN0UnVsZUluZGV4LCBpbmNsdWRlRW1wdHlSdWxlcyk7CisgICAgICAgIG1hdGNoUnVsZXNGb3JM
aXN0KHJ1bGVzLT5pZFJ1bGVzKG1fZWxlbWVudC0+aWRGb3JTdHlsZVJlc29sdXRpb24oKS5pbXBs
KCkpLCBzY29wZSwgZmlyc3RSdWxlSW5kZXgsIGxhc3RSdWxlSW5kZXgsIGluY2x1ZGVFbXB0eVJ1
bGVzKTsKICAgICBpZiAobV9lbGVtZW50LT5oYXNDbGFzcygpKSB7CiAgICAgICAgIEFTU0VSVCht
X3N0eWxlZEVsZW1lbnQpOwogICAgICAgICBjb25zdCBTcGFjZVNwbGl0U3RyaW5nJiBjbGFzc05h
bWVzID0gbV9zdHlsZWRFbGVtZW50LT5jbGFzc05hbWVzKCk7CiAgICAgICAgIHNpemVfdCBzaXpl
ID0gY2xhc3NOYW1lcy5zaXplKCk7CiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6
ZTsgKytpKQotICAgICAgICAgICAgbWF0Y2hSdWxlc0Zvckxpc3QocnVsZXMtPmNsYXNzUnVsZXMo
Y2xhc3NOYW1lc1tpXS5pbXBsKCkpLCBmaXJzdFJ1bGVJbmRleCwgbGFzdFJ1bGVJbmRleCwgaW5j
bHVkZUVtcHR5UnVsZXMpOworICAgICAgICAgICAgbWF0Y2hSdWxlc0Zvckxpc3QocnVsZXMtPmNs
YXNzUnVsZXMoY2xhc3NOYW1lc1tpXS5pbXBsKCkpLCBzY29wZSwgZmlyc3RSdWxlSW5kZXgsIGxh
c3RSdWxlSW5kZXgsIGluY2x1ZGVFbXB0eVJ1bGVzKTsKICAgICB9CiAgICAgY29uc3QgQXRvbWlj
U3RyaW5nJiBwc2V1ZG9JZCA9IG1fZWxlbWVudC0+c2hhZG93UHNldWRvSWQoKTsKICAgICBpZiAo
IXBzZXVkb0lkLmlzRW1wdHkoKSkgewogICAgICAgICBBU1NFUlQobV9zdHlsZWRFbGVtZW50KTsK
LSAgICAgICAgbWF0Y2hSdWxlc0Zvckxpc3QocnVsZXMtPnNoYWRvd1BzZXVkb0VsZW1lbnRSdWxl
cyhwc2V1ZG9JZC5pbXBsKCkpLCBmaXJzdFJ1bGVJbmRleCwgbGFzdFJ1bGVJbmRleCwgaW5jbHVk
ZUVtcHR5UnVsZXMpOworICAgICAgICBtYXRjaFJ1bGVzRm9yTGlzdChydWxlcy0+c2hhZG93UHNl
dWRvRWxlbWVudFJ1bGVzKHBzZXVkb0lkLmltcGwoKSksIHNjb3BlLCBmaXJzdFJ1bGVJbmRleCwg
bGFzdFJ1bGVJbmRleCwgaW5jbHVkZUVtcHR5UnVsZXMpOwogICAgIH0KICAgICBpZiAobV9lbGVt
ZW50LT5pc0xpbmsoKSkKLSAgICAgICAgbWF0Y2hSdWxlc0Zvckxpc3QocnVsZXMtPmxpbmtQc2V1
ZG9DbGFzc1J1bGVzKCksIGZpcnN0UnVsZUluZGV4LCBsYXN0UnVsZUluZGV4LCBpbmNsdWRlRW1w
dHlSdWxlcyk7CisgICAgICAgIG1hdGNoUnVsZXNGb3JMaXN0KHJ1bGVzLT5saW5rUHNldWRvQ2xh
c3NSdWxlcygpLCBzY29wZSwgZmlyc3RSdWxlSW5kZXgsIGxhc3RSdWxlSW5kZXgsIGluY2x1ZGVF
bXB0eVJ1bGVzKTsKICAgICBpZiAobV9jaGVja2VyLm1hdGNoZXNGb2N1c1BzZXVkb0NsYXNzKG1f
ZWxlbWVudCkpCi0gICAgICAgIG1hdGNoUnVsZXNGb3JMaXN0KHJ1bGVzLT5mb2N1c1BzZXVkb0Ns
YXNzUnVsZXMoKSwgZmlyc3RSdWxlSW5kZXgsIGxhc3RSdWxlSW5kZXgsIGluY2x1ZGVFbXB0eVJ1
bGVzKTsKLSAgICBtYXRjaFJ1bGVzRm9yTGlzdChydWxlcy0+dGFnUnVsZXMobV9lbGVtZW50LT5s
b2NhbE5hbWUoKS5pbXBsKCkpLCBmaXJzdFJ1bGVJbmRleCwgbGFzdFJ1bGVJbmRleCwgaW5jbHVk
ZUVtcHR5UnVsZXMpOwotICAgIG1hdGNoUnVsZXNGb3JMaXN0KHJ1bGVzLT51bml2ZXJzYWxSdWxl
cygpLCBmaXJzdFJ1bGVJbmRleCwgbGFzdFJ1bGVJbmRleCwgaW5jbHVkZUVtcHR5UnVsZXMpOwot
ICAgIAorICAgICAgICBtYXRjaFJ1bGVzRm9yTGlzdChydWxlcy0+Zm9jdXNQc2V1ZG9DbGFzc1J1
bGVzKCksIHNjb3BlLCBmaXJzdFJ1bGVJbmRleCwgbGFzdFJ1bGVJbmRleCwgaW5jbHVkZUVtcHR5
UnVsZXMpOworICAgIG1hdGNoUnVsZXNGb3JMaXN0KHJ1bGVzLT50YWdSdWxlcyhtX2VsZW1lbnQt
PmxvY2FsTmFtZSgpLmltcGwoKSksIHNjb3BlLCBmaXJzdFJ1bGVJbmRleCwgbGFzdFJ1bGVJbmRl
eCwgaW5jbHVkZUVtcHR5UnVsZXMpOworICAgIG1hdGNoUnVsZXNGb3JMaXN0KHJ1bGVzLT51bml2
ZXJzYWxSdWxlcygpLCBzY29wZSwgZmlyc3RSdWxlSW5kZXgsIGxhc3RSdWxlSW5kZXgsIGluY2x1
ZGVFbXB0eVJ1bGVzKTsKK30KKwordm9pZCBDU1NTdHlsZVNlbGVjdG9yOjpzb3J0QW5kVHJhbnNm
ZXJNYXRjaGVkUnVsZXMoYm9vbCBjb2xsZWN0UnVsZXNPbmx5KQorewogICAgIC8vIElmIHdlIGRp
ZG4ndCBtYXRjaCBhbnkgcnVsZXMsIHdlJ3JlIGRvbmUuCiAgICAgaWYgKG1fbWF0Y2hlZFJ1bGVz
LmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwotICAgIAorCiAgICAgLy8gU29ydCB0aGUgc2V0
IG9mIG1hdGNoZWQgcnVsZXMuCi0gICAgc29ydE1hdGNoZWRSdWxlcygpOwotICAgIAorICAgIHN0
ZDo6c29ydChtX21hdGNoZWRSdWxlcy5iZWdpbigpLCBtX21hdGNoZWRSdWxlcy5lbmQoKSwgbGVz
c1NwZWNpZmljKTsKKwogICAgIC8vIE5vdyB0cmFuc2ZlciB0aGUgc2V0IG9mIG1hdGNoZWQgcnVs
ZXMgb3ZlciB0byBvdXIgbGlzdCBvZiBkZWNscy4KLSAgICBpZiAoIW1fY2hlY2tlci5pc0NvbGxl
Y3RpbmdSdWxlc09ubHkoKSkgeworICAgIGlmIChjb2xsZWN0UnVsZXNPbmx5KSB7CisgICAgICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX21hdGNoZWRSdWxlcy5zaXplKCk7IGkrKykgewor
ICAgICAgICAgICAgaWYgKCFtX3J1bGVMaXN0KQorICAgICAgICAgICAgICAgIG1fcnVsZUxpc3Qg
PSBDU1NSdWxlTGlzdDo6Y3JlYXRlKCk7CisgICAgICAgICAgICBtX3J1bGVMaXN0LT5hcHBlbmQo
bV9tYXRjaGVkUnVsZXNbaV0tPnJ1bGUoKSk7CisgICAgICAgIH0KKyAgICB9IGVsc2UgewogICAg
ICAgICAvLyBGSVhNRTogVGhpcyBzdWNrcywgdGhlIGluc3BlY3RvciBzaG91bGQgZ2V0IHRoZSBz
dHlsZSBmcm9tIHRoZSB2aXNpdGVkIHN0eWxlIGl0c2VsZi4KICAgICAgICAgYm9vbCBzd2FwVmlz
aXRlZFVudmlzaXRlZCA9IEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6Zm9yY2VQc2V1ZG9TdGF0
ZShtX2VsZW1lbnQsIENTU1NlbGVjdG9yOjpQc2V1ZG9WaXNpdGVkKTsKICAgICAgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IG1fbWF0Y2hlZFJ1bGVzLnNpemUoKTsgaSsrKSB7CkBAIC01ODAs
MTIgKzY5OCw2IEBAIHZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6bWF0Y2hSdWxlcyhSdWxlU2V0KiBy
dWxlcywgaW50JiBmaXJzdFJ1bGVJbmRleCwgaW50JiBsYXN0CiAgICAgICAgICAgICAgICAgbGlu
a01hdGNoVHlwZSA9IChsaW5rTWF0Y2hUeXBlID09IFNlbGVjdG9yQ2hlY2tlcjo6TWF0Y2hWaXNp
dGVkKSA/IFNlbGVjdG9yQ2hlY2tlcjo6TWF0Y2hMaW5rIDogU2VsZWN0b3JDaGVja2VyOjpNYXRj
aFZpc2l0ZWQ7CiAgICAgICAgICAgICBhZGRNYXRjaGVkRGVjbGFyYXRpb24obV9tYXRjaGVkUnVs
ZXNbaV0tPnJ1bGUoKS0+ZGVjbGFyYXRpb24oKSwgbGlua01hdGNoVHlwZSk7CiAgICAgICAgIH0K
LSAgICB9IGVsc2UgewotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9tYXRjaGVk
UnVsZXMuc2l6ZSgpOyBpKyspIHsKLSAgICAgICAgICAgIGlmICghbV9ydWxlTGlzdCkKLSAgICAg
ICAgICAgICAgICBtX3J1bGVMaXN0ID0gQ1NTUnVsZUxpc3Q6OmNyZWF0ZSgpOwotICAgICAgICAg
ICAgbV9ydWxlTGlzdC0+YXBwZW5kKG1fbWF0Y2hlZFJ1bGVzW2ldLT5ydWxlKCkpOwotICAgICAg
ICB9CiAgICAgfQogfQogCkBAIC02MTgsMTIgKzczMCwxNSBAQCBpbmxpbmUgYm9vbCBNYXRjaGlu
Z1VBUnVsZXNTY29wZTo6aXNNYXRjaGluZ1VBUnVsZXMoKQogCiBib29sIE1hdGNoaW5nVUFSdWxl
c1Njb3BlOjptX21hdGNoaW5nVUFSdWxlcyA9IGZhbHNlOwogCi1pbmxpbmUgc3RhdGljIGJvb2wg
bWF0Y2hlc0luVHJlZVNjb3BlKFRyZWVTY29wZSogdHJlZVNjb3BlLCBib29sIHJ1bGVSZWFjaGVz
SW50b1NoYWRvd0RPTSkKK2lubGluZSBzdGF0aWMgYm9vbCBtYXRjaGVzSW5UcmVlU2NvcGUoVHJl
ZVNjb3BlKiB0cmVlU2NvcGUsIGNvbnN0IEVsZW1lbnQqIHN0eWxlU2NvcGUsIGJvb2wgcnVsZVJl
YWNoZXNJbnRvU2hhZG93RE9NKQogewotICAgIHJldHVybiBNYXRjaGluZ1VBUnVsZXNTY29wZTo6
aXNNYXRjaGluZ1VBUnVsZXMoKSB8fCB0cmVlU2NvcGUtPmFwcGx5QXV0aG9yU2hlZXRzKCkgfHwg
cnVsZVJlYWNoZXNJbnRvU2hhZG93RE9NOworICAgIHJldHVybiBNYXRjaGluZ1VBUnVsZXNTY29w
ZTo6aXNNYXRjaGluZ1VBUnVsZXMoKQorICAgICAgICB8fCB0cmVlU2NvcGUtPmFwcGx5QXV0aG9y
U2hlZXRzKCkKKyAgICAgICAgfHwgKHN0eWxlU2NvcGUgJiYgc3R5bGVTY29wZS0+dHJlZVNjb3Bl
KCkgPT0gdHJlZVNjb3BlKQorICAgICAgICB8fCBydWxlUmVhY2hlc0ludG9TaGFkb3dET007CiB9
CiAKLXZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6bWF0Y2hSdWxlc0Zvckxpc3QoY29uc3QgVmVjdG9y
PFJ1bGVEYXRhPiogcnVsZXMsIGludCYgZmlyc3RSdWxlSW5kZXgsIGludCYgbGFzdFJ1bGVJbmRl
eCwgYm9vbCBpbmNsdWRlRW1wdHlSdWxlcykKK3ZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6bWF0Y2hS
dWxlc0Zvckxpc3QoY29uc3QgVmVjdG9yPFJ1bGVEYXRhPiogcnVsZXMsIGNvbnN0IEVsZW1lbnQq
IHNjb3BlLCBpbnQmIGZpcnN0UnVsZUluZGV4LCBpbnQmIGxhc3RSdWxlSW5kZXgsIGJvb2wgaW5j
bHVkZUVtcHR5UnVsZXMpCiB7CiAgICAgaWYgKCFydWxlcykKICAgICAgICAgcmV0dXJuOwpAQCAt
NjM2LDggKzc1MSw4IEBAIHZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6bWF0Y2hSdWxlc0Zvckxpc3Qo
Y29uc3QgVmVjdG9yPFJ1bGVEYXRhPiogcnVsZXMsIGludCYgZmlyCiAgICAgICAgIGNvbnN0IFJ1
bGVEYXRhJiBydWxlRGF0YSA9IHJ1bGVzLT5hdChpKTsKICAgICAgICAgaWYgKGNhblVzZUZhc3RS
ZWplY3QgJiYgbV9jaGVja2VyLmZhc3RSZWplY3RTZWxlY3RvcjxSdWxlRGF0YTo6bWF4aW11bUlk
ZW50aWZpZXJDb3VudD4ocnVsZURhdGEuZGVzY2VuZGFudFNlbGVjdG9ySWRlbnRpZmllckhhc2hl
cygpKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBpZiAoY2hlY2tTZWxlY3Rvcihy
dWxlRGF0YSkpIHsKLSAgICAgICAgICAgIGlmICghbWF0Y2hlc0luVHJlZVNjb3BlKG1fZWxlbWVu
dC0+dHJlZVNjb3BlKCksIG1fY2hlY2tlci5oYXNVbmtub3duUHNldWRvRWxlbWVudHMoKSkpCisg
ICAgICAgIGlmIChjaGVja1NlbGVjdG9yKHJ1bGVEYXRhLCBzY29wZSkpIHsKKyAgICAgICAgICAg
IGlmICghbWF0Y2hlc0luVHJlZVNjb3BlKG1fZWxlbWVudC0+dHJlZVNjb3BlKCksIHNjb3BlLCBt
X2NoZWNrZXIuaGFzVW5rbm93blBzZXVkb0VsZW1lbnRzKCkpKQogICAgICAgICAgICAgICAgIGNv
bnRpbnVlOwogICAgICAgICAgICAgLy8gSWYgdGhlIHJ1bGUgaGFzIG5vIHByb3BlcnRpZXMgdG8g
YXBwbHksIHRoZW4gaWdub3JlIGl0IGluIHRoZSBub24tZGVidWcgbW9kZS4KICAgICAgICAgICAg
IENTU1N0eWxlUnVsZSogcnVsZSA9IHJ1bGVEYXRhLnJ1bGUoKTsKQEAgLTY2NSwxOCArNzgwLDYg
QEAgdm9pZCBDU1NTdHlsZVNlbGVjdG9yOjptYXRjaFJ1bGVzRm9yTGlzdChjb25zdCBWZWN0b3I8
UnVsZURhdGE+KiBydWxlcywgaW50JiBmaXIKICAgICAgICAgfQogICAgIH0KIH0KLQotc3RhdGlj
IGlubGluZSBib29sIGNvbXBhcmVSdWxlcyhjb25zdCBSdWxlRGF0YSogcjEsIGNvbnN0IFJ1bGVE
YXRhKiByMikKLXsKLSAgICB1bnNpZ25lZCBzcGVjaWZpY2l0eTEgPSByMS0+c3BlY2lmaWNpdHko
KTsKLSAgICB1bnNpZ25lZCBzcGVjaWZpY2l0eTIgPSByMi0+c3BlY2lmaWNpdHkoKTsKLSAgICBy
ZXR1cm4gKHNwZWNpZmljaXR5MSA9PSBzcGVjaWZpY2l0eTIpID8gcjEtPnBvc2l0aW9uKCkgPCBy
Mi0+cG9zaXRpb24oKSA6IHNwZWNpZmljaXR5MSA8IHNwZWNpZmljaXR5MjsgCi19Ci0KLXZvaWQg
Q1NTU3R5bGVTZWxlY3Rvcjo6c29ydE1hdGNoZWRSdWxlcygpCi17Ci0gICAgc3RkOjpzb3J0KG1f
bWF0Y2hlZFJ1bGVzLmJlZ2luKCksIG1fbWF0Y2hlZFJ1bGVzLmVuZCgpLCBjb21wYXJlUnVsZXMp
OwotfQogICAgIAogaW5saW5lIHZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6aW5pdEVsZW1lbnQoRWxl
bWVudCogZSkKIHsKQEAgLTcyNiw2ICs4MjksOCBAQCBOb2RlKiBDU1NTdHlsZVNlbGVjdG9yOjps
b2NhdGVDb3VzaW5MaXN0KEVsZW1lbnQqIHBhcmVudCwgdW5zaWduZWQmIHZpc2l0ZWROb2RlQwog
ICAgICAgICByZXR1cm4gMDsKICAgICBpZiAoIXBhcmVudCB8fCAhcGFyZW50LT5pc1N0eWxlZEVs
ZW1lbnQoKSkKICAgICAgICAgcmV0dXJuIDA7CisgICAgaWYgKHBhcmVudC0+aGFzU2NvcGVkSFRN
TFN0eWxlQ2hpbGQoKSkKKyAgICAgICAgcmV0dXJuIDA7CiAgICAgU3R5bGVkRWxlbWVudCogcCA9
IHN0YXRpY19jYXN0PFN0eWxlZEVsZW1lbnQqPihwYXJlbnQpOwogICAgIGlmIChwLT5pbmxpbmVT
dHlsZURlY2woKSkKICAgICAgICAgcmV0dXJuIDA7CkBAIC03NDEsOCArODQ2LDEwIEBAIE5vZGUq
IENTU1N0eWxlU2VsZWN0b3I6OmxvY2F0ZUNvdXNpbkxpc3QoRWxlbWVudCogcGFyZW50LCB1bnNp
Z25lZCYgdmlzaXRlZE5vZGVDCiAgICAgLy8gd2lsbCBuZXZlciBnbyBkZWVwZXIgdGhhbiBjU3R5
bGVTZWFyY2hMZXZlbFRocmVzaG9sZCBsZXZlbHMgaW50byByZWN1cnNpb24uCiAgICAgdmlzaXRl
ZE5vZGVDb3VudCArPSBjU3R5bGVTZWFyY2hUaHJlc2hvbGQ7CiAgICAgd2hpbGUgKHRoaXNDb3Vz
aW4pIHsKLSAgICAgICAgd2hpbGUgKGN1cnJlbnROb2RlKSB7CisgICAgICAgIGZvciAoOyBjdXJy
ZW50Tm9kZTsgY3VycmVudE5vZGUgPSBjdXJyZW50Tm9kZS0+cHJldmlvdXNTaWJsaW5nKCkpIHsK
ICAgICAgICAgICAgICsrc3ViY291bnQ7CisgICAgICAgICAgICBpZiAoY3VycmVudE5vZGUtPmlz
RWxlbWVudE5vZGUoKSAmJiB0b0VsZW1lbnQoY3VycmVudE5vZGUpLT5oYXNTY29wZWRIVE1MU3R5
bGVDaGlsZCgpKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgaWYgKGN1
cnJlbnROb2RlLT5yZW5kZXJTdHlsZSgpID09IHBhcmVudFN0eWxlICYmIGN1cnJlbnROb2RlLT5s
YXN0Q2hpbGQoKSkgewogICAgICAgICAgICAgICAgIC8vIEFkanVzdCBmb3IgdW51c2VkIHJlc2Vy
dmVkIHRyaWVzLgogICAgICAgICAgICAgICAgIHZpc2l0ZWROb2RlQ291bnQgLT0gY1N0eWxlU2Vh
cmNoVGhyZXNob2xkIC0gc3ViY291bnQ7CkBAIC03NTAsNyArODU3LDYgQEAgTm9kZSogQ1NTU3R5
bGVTZWxlY3Rvcjo6bG9jYXRlQ291c2luTGlzdChFbGVtZW50KiBwYXJlbnQsIHVuc2lnbmVkJiB2
aXNpdGVkTm9kZUMKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlmIChzdWJjb3VudCA+PSBj
U3R5bGVTZWFyY2hUaHJlc2hvbGQpCiAgICAgICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAg
ICAgICBjdXJyZW50Tm9kZSA9IGN1cnJlbnROb2RlLT5wcmV2aW91c1NpYmxpbmcoKTsKICAgICAg
ICAgfQogICAgICAgICBjdXJyZW50Tm9kZSA9IGxvY2F0ZUNvdXNpbkxpc3QodGhpc0NvdXNpbi0+
cGFyZW50RWxlbWVudCgpLCB2aXNpdGVkTm9kZUNvdW50KTsKICAgICAgICAgdGhpc0NvdXNpbiA9
IGN1cnJlbnROb2RlOwpAQCAtNzU5LDEwICs4NjUsMTAgQEAgTm9kZSogQ1NTU3R5bGVTZWxlY3Rv
cjo6bG9jYXRlQ291c2luTGlzdChFbGVtZW50KiBwYXJlbnQsIHVuc2lnbmVkJiB2aXNpdGVkTm9k
ZUMKICAgICByZXR1cm4gMDsKIH0KIAotYm9vbCBDU1NTdHlsZVNlbGVjdG9yOjptYXRjaGVzUnVs
ZVNldChSdWxlU2V0KiBydWxlU2V0KQorYm9vbCBDU1NTdHlsZVNlbGVjdG9yOjptYXRjaGVzUnVs
ZVNldEdsb2JhbGx5KFJ1bGVTZXQqIHJ1bGVTZXQpCiB7CiAgICAgaW50IGZpcnN0U2libGluZ1J1
bGUgPSAtMSwgbGFzdFNpYmxpbmdSdWxlID0gLTE7Ci0gICAgbWF0Y2hSdWxlcyhydWxlU2V0LCBm
aXJzdFNpYmxpbmdSdWxlLCBsYXN0U2libGluZ1J1bGUsIGZhbHNlKTsKKyAgICBtYXRjaFJ1bGVz
R2xvYmFsbHkocnVsZVNldCwgZmlyc3RTaWJsaW5nUnVsZSwgbGFzdFNpYmxpbmdSdWxlLCBmYWxz
ZSk7CiAgICAgaWYgKG1fbWF0Y2hlZERlY2xzLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgIG1fbWF0Y2hlZERlY2xzLmNsZWFyKCk7CkBAIC04NzYsNiArOTgyLDkgQEAgYm9v
bCBDU1NTdHlsZVNlbGVjdG9yOjpjYW5TaGFyZVN0eWxlV2l0aEVsZW1lbnQoTm9kZSogbm9kZSkg
Y29uc3QKICAgICBpZiAoZWxlbWVudC0+aGFzSUQoKSAmJiBtX2ZlYXR1cmVzLmlkc0luUnVsZXMu
Y29udGFpbnMoZWxlbWVudC0+aWRGb3JTdHlsZVJlc29sdXRpb24oKS5pbXBsKCkpKQogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAKKyAgICBpZiAoZWxlbWVudC0+aGFzU2NvcGVkSFRNTFN0eWxlQ2hp
bGQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCiAgICAgYm9vbCBpc0NvbnRyb2wgPSBlbGVt
ZW50LT5pc0Zvcm1Db250cm9sRWxlbWVudCgpOwogCiAgICAgaWYgKGlzQ29udHJvbCAhPSBtX2Vs
ZW1lbnQtPmlzRm9ybUNvbnRyb2xFbGVtZW50KCkpCkBAIC05NDQsNiArMTA1Myw4IEBAIFJlbmRl
clN0eWxlKiBDU1NTdHlsZVNlbGVjdG9yOjpsb2NhdGVTaGFyZWRTdHlsZSgpCiAgICAgICAgIHJl
dHVybiAwOwogICAgIGlmIChwYXJlbnRTdHlsZVByZXZlbnRzU2hhcmluZyhtX3BhcmVudFN0eWxl
KSkKICAgICAgICAgcmV0dXJuIDA7CisgICAgaWYgKG1fc3R5bGVkRWxlbWVudC0+aGFzU2NvcGVk
SFRNTFN0eWxlQ2hpbGQoKSkKKyAgICAgICAgcmV0dXJuIDA7CiAKICAgICAvLyBDaGVjayBwcmV2
aW91cyBzaWJsaW5ncyBhbmQgdGhlaXIgY291c2lucy4KICAgICB1bnNpZ25lZCBjb3VudCA9IDA7
CkBAIC05NjIsMTAgKzEwNzMsMTAgQEAgUmVuZGVyU3R5bGUqIENTU1N0eWxlU2VsZWN0b3I6Omxv
Y2F0ZVNoYXJlZFN0eWxlKCkKICAgICAgICAgcmV0dXJuIDA7CiAKICAgICAvLyBDYW4ndCBzaGFy
ZSBpZiBzaWJsaW5nIHJ1bGVzIGFwcGx5LiBUaGlzIGlzIGNoZWNrZWQgYXQgdGhlIGVuZCBhcyBp
dCBzaG91bGQgcmFyZWx5IGZhaWwuCi0gICAgaWYgKG1hdGNoZXNSdWxlU2V0KG1fZmVhdHVyZXMu
c2libGluZ1J1bGVzLmdldCgpKSkKKyAgICBpZiAobWF0Y2hlc1J1bGVTZXRHbG9iYWxseShtX2Zl
YXR1cmVzLnNpYmxpbmdSdWxlcy5nZXQoKSkpCiAgICAgICAgIHJldHVybiAwOwogICAgIC8vIENh
bid0IHNoYXJlIGlmIGF0dHJpYnV0ZSBydWxlcyBhcHBseS4KLSAgICBpZiAobWF0Y2hlc1J1bGVT
ZXQobV9mZWF0dXJlcy51bmNvbW1vbkF0dHJpYnV0ZVJ1bGVzLmdldCgpKSkKKyAgICBpZiAobWF0
Y2hlc1J1bGVTZXRHbG9iYWxseShtX2ZlYXR1cmVzLnVuY29tbW9uQXR0cmlidXRlUnVsZXMuZ2V0
KCkpKQogICAgICAgICByZXR1cm4gMDsKICAgICAvLyBUcmFja2luZyBjaGlsZCBpbmRleCByZXF1
aXJlcyB1bmlxdWUgc3R5bGUgZm9yIGVhY2ggbm9kZS4gVGhpcyBtYXkgZ2V0IHNldCBieSB0aGUg
c2libGluZyBydWxlIG1hdGNoIGFib3ZlLgogICAgIGlmIChwYXJlbnRTdHlsZVByZXZlbnRzU2hh
cmluZyhtX3BhcmVudFN0eWxlKSkKQEAgLTk4MCwxNyArMTA5MSwxNyBAQCB2b2lkIENTU1N0eWxl
U2VsZWN0b3I6Om1hdGNoVUFSdWxlcyhpbnQmIGZpcnN0VUFSdWxlLCBpbnQmIGxhc3RVQVJ1bGUp
CiAgICAgLy8gRmlyc3Qgd2UgbWF0Y2ggcnVsZXMgZnJvbSB0aGUgdXNlciBhZ2VudCBzaGVldC4K
ICAgICBSdWxlU2V0KiB1c2VyQWdlbnRTdHlsZVNoZWV0ID0gbV9tZWRpdW0tPm1lZGlhVHlwZU1h
dGNoU3BlY2lmaWMoInByaW50IikKICAgICAgICAgPyBkZWZhdWx0UHJpbnRTdHlsZSA6IGRlZmF1
bHRTdHlsZTsKLSAgICBtYXRjaFJ1bGVzKHVzZXJBZ2VudFN0eWxlU2hlZXQsIGZpcnN0VUFSdWxl
LCBsYXN0VUFSdWxlLCBmYWxzZSk7CisgICAgbWF0Y2hSdWxlc0dsb2JhbGx5KHVzZXJBZ2VudFN0
eWxlU2hlZXQsIGZpcnN0VUFSdWxlLCBsYXN0VUFSdWxlLCBmYWxzZSk7CiAKICAgICAvLyBJbiBx
dWlya3MgbW9kZSwgd2UgbWF0Y2ggcnVsZXMgZnJvbSB0aGUgcXVpcmtzIHVzZXIgYWdlbnQgc2hl
ZXQuCiAgICAgaWYgKCFtX2NoZWNrZXIuc3RyaWN0UGFyc2luZygpKQotICAgICAgICBtYXRjaFJ1
bGVzKGRlZmF1bHRRdWlya3NTdHlsZSwgZmlyc3RVQVJ1bGUsIGxhc3RVQVJ1bGUsIGZhbHNlKTsK
KyAgICAgICAgbWF0Y2hSdWxlc0dsb2JhbGx5KGRlZmF1bHRRdWlya3NTdHlsZSwgZmlyc3RVQVJ1
bGUsIGxhc3RVQVJ1bGUsIGZhbHNlKTsKICAgICAgICAgCiAgICAgLy8gSWYgZG9jdW1lbnQgdXNl
cyB2aWV3IHNvdXJjZSBzdHlsZXMgKGluIHZpZXcgc291cmNlIG1vZGUgb3IgaW4geG1sIHZpZXdl
ciBtb2RlKSwgdGhlbiB3ZSBtYXRjaCBydWxlcyBmcm9tIHRoZSB2aWV3IHNvdXJjZSBzdHlsZSBz
aGVldC4KICAgICBpZiAobV9jaGVja2VyLmRvY3VtZW50KCktPmlzVmlld1NvdXJjZSgpKSB7CiAg
ICAgICAgIGlmICghZGVmYXVsdFZpZXdTb3VyY2VTdHlsZSkKICAgICAgICAgICAgIGxvYWRWaWV3
U291cmNlU3R5bGUoKTsKLSAgICAgICAgbWF0Y2hSdWxlcyhkZWZhdWx0Vmlld1NvdXJjZVN0eWxl
LCBmaXJzdFVBUnVsZSwgbGFzdFVBUnVsZSwgZmFsc2UpOworICAgICAgICBtYXRjaFJ1bGVzR2xv
YmFsbHkoZGVmYXVsdFZpZXdTb3VyY2VTdHlsZSwgZmlyc3RVQVJ1bGUsIGxhc3RVQVJ1bGUsIGZh
bHNlKTsKICAgICB9CiB9CiAKQEAgLTExNzksNyArMTI5MCw3IEBAIFBhc3NSZWZQdHI8UmVuZGVy
U3R5bGU+IENTU1N0eWxlU2VsZWN0b3I6OnN0eWxlRm9yRWxlbWVudChFbGVtZW50KiBlLCBSZW5k
ZXJTdHlsCiAgICAgaWYgKCFyZXNvbHZlRm9yUm9vdERlZmF1bHQpIHsKICAgICAgICAgLy8gNC4g
Tm93IHdlIGNoZWNrIHVzZXIgc2hlZXQgcnVsZXMuCiAgICAgICAgIGlmIChtX21hdGNoQXV0aG9y
QW5kVXNlclN0eWxlcykKLSAgICAgICAgICAgIG1hdGNoUnVsZXMobV91c2VyU3R5bGUuZ2V0KCks
IGZpcnN0VXNlclJ1bGUsIGxhc3RVc2VyUnVsZSwgZmFsc2UpOworICAgICAgICAgICAgbWF0Y2hS
dWxlc0dsb2JhbGx5KG1fdXNlclN0eWxlLmdldCgpLCBmaXJzdFVzZXJSdWxlLCBsYXN0VXNlclJ1
bGUsIGZhbHNlKTsKIAogICAgICAgICAvLyA1LiBOb3cgY2hlY2sgYXV0aG9yIHJ1bGVzLCBiZWdp
bm5pbmcgZmlyc3Qgd2l0aCBwcmVzZW50YXRpb25hbCBhdHRyaWJ1dGVzCiAgICAgICAgIC8vIG1h
cHBlZCBmcm9tIEhUTUwuCkBAIC0xMjI0LDcgKzEzMzUsNyBAQCBQYXNzUmVmUHRyPFJlbmRlclN0
eWxlPiBDU1NTdHlsZVNlbGVjdG9yOjpzdHlsZUZvckVsZW1lbnQoRWxlbWVudCogZSwgUmVuZGVy
U3R5bAogICAgIAogICAgICAgICAvLyA2LiBDaGVjayB0aGUgcnVsZXMgaW4gYXV0aG9yIHNoZWV0
cyBuZXh0LgogICAgICAgICBpZiAobV9tYXRjaEF1dGhvckFuZFVzZXJTdHlsZXMpCi0gICAgICAg
ICAgICBtYXRjaFJ1bGVzKG1fYXV0aG9yU3R5bGUuZ2V0KCksIGZpcnN0QXV0aG9yUnVsZSwgbGFz
dEF1dGhvclJ1bGUsIGZhbHNlKTsKKyAgICAgICAgICAgIG1hdGNoQXV0aG9yUnVsZXMoZmlyc3RB
dXRob3JSdWxlLCBsYXN0QXV0aG9yUnVsZSwgZmFsc2UpOwogCiAgICAgICAgIC8vIDcuIE5vdyBj
aGVjayBvdXIgaW5saW5lIHN0eWxlIGF0dHJpYnV0ZS4KICAgICAgICAgaWYgKG1fbWF0Y2hBdXRo
b3JBbmRVc2VyU3R5bGVzICYmIG1fc3R5bGVkRWxlbWVudCkgewpAQCAtMTQ0NSw4ICsxNTU2LDgg
QEAgUGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4gQ1NTU3R5bGVTZWxlY3Rvcjo6cHNldWRvU3R5bGVG
b3JFbGVtZW50KFBzZXVkb0lkIHBzZXVkbywKICAgICBtYXRjaFVBUnVsZXMoZmlyc3RVQVJ1bGUs
IGxhc3RVQVJ1bGUpOwogCiAgICAgaWYgKG1fbWF0Y2hBdXRob3JBbmRVc2VyU3R5bGVzKSB7Ci0g
ICAgICAgIG1hdGNoUnVsZXMobV91c2VyU3R5bGUuZ2V0KCksIGZpcnN0VXNlclJ1bGUsIGxhc3RV
c2VyUnVsZSwgZmFsc2UpOwotICAgICAgICBtYXRjaFJ1bGVzKG1fYXV0aG9yU3R5bGUuZ2V0KCks
IGZpcnN0QXV0aG9yUnVsZSwgbGFzdEF1dGhvclJ1bGUsIGZhbHNlKTsKKyAgICAgICAgbWF0Y2hS
dWxlc0dsb2JhbGx5KG1fdXNlclN0eWxlLmdldCgpLCBmaXJzdFVzZXJSdWxlLCBsYXN0VXNlclJ1
bGUsIGZhbHNlKTsKKyAgICAgICAgbWF0Y2hBdXRob3JSdWxlcyhmaXJzdFVzZXJSdWxlLCBsYXN0
VXNlclJ1bGUsIGZhbHNlKTsKICAgICB9CiAKICAgICBpZiAobV9tYXRjaGVkRGVjbHMuaXNFbXB0
eSgpKQpAQCAtMTUxMyw3ICsxNjI0LDggQEAgUGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4gQ1NTU3R5
bGVTZWxlY3Rvcjo6c3R5bGVGb3JQYWdlKGludCBwYWdlSW5kZXgpCiAgICAgY29uc3QgU3RyaW5n
IHBhZ2UgPSBwYWdlTmFtZShwYWdlSW5kZXgpOwogICAgIG1hdGNoUGFnZVJ1bGVzKGRlZmF1bHRQ
cmludFN0eWxlLCBpc0xlZnQsIGlzRmlyc3QsIHBhZ2UpOwogICAgIG1hdGNoUGFnZVJ1bGVzKG1f
dXNlclN0eWxlLmdldCgpLCBpc0xlZnQsIGlzRmlyc3QsIHBhZ2UpOwotICAgIG1hdGNoUGFnZVJ1
bGVzKG1fYXV0aG9yU3R5bGUuZ2V0KCksIGlzTGVmdCwgaXNGaXJzdCwgcGFnZSk7CisgICAgLy8g
T25seSBjb25zaWRlciB0aGUgZ2xvYmFsIFJ1bGVTZXQgZm9yIEBwYWdlIHJ1bGVzLCBhcyBwZXIg
dGhlIEhUTUw1IHNwZWMuCisgICAgbWF0Y2hQYWdlUnVsZXMobV9nbG9iYWxBdXRob3JTdHlsZXMu
Z2V0KCksIGlzTGVmdCwgaXNGaXJzdCwgcGFnZSk7CiAgICAgbV9saW5lSGVpZ2h0VmFsdWUgPSAw
OwogICAgIGFwcGx5RGVjbGFyYXRpb25zPHRydWU+KGZhbHNlLCAwLCBtX21hdGNoZWREZWNscy5z
aXplKCkgLSAxKTsKIApAQCAtMTc5MCw3ICsxOTAyLDcgQEAgUGFzc1JlZlB0cjxDU1NSdWxlTGlz
dD4gQ1NTU3R5bGVTZWxlY3Rvcjo6cHNldWRvU3R5bGVSdWxlc0ZvckVsZW1lbnQoRWxlbWVudCog
ZSwKICAgICAgICAgLy8gTm93IHdlIGNoZWNrIHVzZXIgc2hlZXQgcnVsZXMuCiAgICAgICAgIGlm
IChtX21hdGNoQXV0aG9yQW5kVXNlclN0eWxlcykgewogICAgICAgICAgICAgaW50IGZpcnN0VXNl
clJ1bGUgPSAtMSwgbGFzdFVzZXJSdWxlID0gLTE7Ci0gICAgICAgICAgICBtYXRjaFJ1bGVzKG1f
dXNlclN0eWxlLmdldCgpLCBmaXJzdFVzZXJSdWxlLCBsYXN0VXNlclJ1bGUsIHJ1bGVzVG9JbmNs
dWRlICYgRW1wdHlDU1NSdWxlcyk7CisgICAgICAgICAgICBtYXRjaFJ1bGVzR2xvYmFsbHkobV91
c2VyU3R5bGUuZ2V0KCksIGZpcnN0VXNlclJ1bGUsIGxhc3RVc2VyUnVsZSwgcnVsZXNUb0luY2x1
ZGUgJiBFbXB0eUNTU1J1bGVzKTsKICAgICAgICAgfQogICAgIH0KIApAQCAtMTc5OSw3ICsxOTEx
LDcgQEAgUGFzc1JlZlB0cjxDU1NSdWxlTGlzdD4gQ1NTU3R5bGVTZWxlY3Rvcjo6cHNldWRvU3R5
bGVSdWxlc0ZvckVsZW1lbnQoRWxlbWVudCogZSwKIAogICAgICAgICAvLyBDaGVjayB0aGUgcnVs
ZXMgaW4gYXV0aG9yIHNoZWV0cy4KICAgICAgICAgaW50IGZpcnN0QXV0aG9yUnVsZSA9IC0xLCBs
YXN0QXV0aG9yUnVsZSA9IC0xOwotICAgICAgICBtYXRjaFJ1bGVzKG1fYXV0aG9yU3R5bGUuZ2V0
KCksIGZpcnN0QXV0aG9yUnVsZSwgbGFzdEF1dGhvclJ1bGUsIHJ1bGVzVG9JbmNsdWRlICYgRW1w
dHlDU1NSdWxlcyk7CisgICAgICAgIG1hdGNoQXV0aG9yUnVsZXMoZmlyc3RBdXRob3JSdWxlLCBs
YXN0QXV0aG9yUnVsZSwgcnVsZXNUb0luY2x1ZGUgJiBFbXB0eUNTU1J1bGVzKTsKIAogICAgICAg
ICBtX3NhbWVPcmlnaW5Pbmx5ID0gZmFsc2U7CiAgICAgfQpAQCAtMTgwOSw3ICsxOTIxLDcgQEAg
UGFzc1JlZlB0cjxDU1NSdWxlTGlzdD4gQ1NTU3R5bGVTZWxlY3Rvcjo6cHNldWRvU3R5bGVSdWxl
c0ZvckVsZW1lbnQoRWxlbWVudCogZSwKICAgICByZXR1cm4gbV9ydWxlTGlzdC5yZWxlYXNlKCk7
CiB9CiAKLWlubGluZSBib29sIENTU1N0eWxlU2VsZWN0b3I6OmNoZWNrU2VsZWN0b3IoY29uc3Qg
UnVsZURhdGEmIHJ1bGVEYXRhKQoraW5saW5lIGJvb2wgQ1NTU3R5bGVTZWxlY3Rvcjo6Y2hlY2tT
ZWxlY3Rvcihjb25zdCBSdWxlRGF0YSYgcnVsZURhdGEsIGNvbnN0IEVsZW1lbnQqIHNjb3BlKQog
ewogICAgIG1fZHluYW1pY1BzZXVkbyA9IE5PUFNFVURPOwogICAgIG1fY2hlY2tlci5jbGVhckhh
c1Vua25vd25Qc2V1ZG9FbGVtZW50cygpOwpAQCAtMTgyOCwxMSArMTk0MCwxMSBAQCBpbmxpbmUg
Ym9vbCBDU1NTdHlsZVNlbGVjdG9yOjpjaGVja1NlbGVjdG9yKGNvbnN0IFJ1bGVEYXRhJiBydWxl
RGF0YSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgaWYgKCFTZWxlY3RvckNo
ZWNrZXI6OmZhc3RDaGVja1JpZ2h0bW9zdEF0dHJpYnV0ZVNlbGVjdG9yKG1fZWxlbWVudCwgcnVs
ZURhdGEuc2VsZWN0b3IoKSkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIHJl
dHVybiBtX2NoZWNrZXIuZmFzdENoZWNrU2VsZWN0b3IocnVsZURhdGEuc2VsZWN0b3IoKSwgbV9l
bGVtZW50KTsKKyAgICAgICAgcmV0dXJuIG1fY2hlY2tlci5mYXN0Q2hlY2tTZWxlY3RvcihydWxl
RGF0YS5zZWxlY3RvcigpLCBtX2VsZW1lbnQsIHNjb3BlKTsKICAgICB9CiAKICAgICAvLyBTbG93
IHBhdGguCi0gICAgU2VsZWN0b3JDaGVja2VyOjpTZWxlY3Rvck1hdGNoIG1hdGNoID0gbV9jaGVj
a2VyLmNoZWNrU2VsZWN0b3IocnVsZURhdGEuc2VsZWN0b3IoKSwgbV9lbGVtZW50LCBtX2R5bmFt
aWNQc2V1ZG8sIGZhbHNlLCBTZWxlY3RvckNoZWNrZXI6OlZpc2l0ZWRNYXRjaEVuYWJsZWQsIHN0
eWxlKCksIG1fcGFyZW50Tm9kZSA/IG1fcGFyZW50Tm9kZS0+cmVuZGVyU3R5bGUoKSA6IDApOwor
ICAgIFNlbGVjdG9yQ2hlY2tlcjo6U2VsZWN0b3JNYXRjaCBtYXRjaCA9IG1fY2hlY2tlci5jaGVj
a1NlbGVjdG9yKHJ1bGVEYXRhLnNlbGVjdG9yKCksIG1fZWxlbWVudCwgc2NvcGUsIG1fZHluYW1p
Y1BzZXVkbywgZmFsc2UsIFNlbGVjdG9yQ2hlY2tlcjo6VmlzaXRlZE1hdGNoRW5hYmxlZCwgc3R5
bGUoKSwgbV9wYXJlbnROb2RlID8gbV9wYXJlbnROb2RlLT5yZW5kZXJTdHlsZSgpIDogMCk7CiAg
ICAgaWYgKG1hdGNoICE9IFNlbGVjdG9yQ2hlY2tlcjo6U2VsZWN0b3JNYXRjaGVzKQogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAgICAgaWYgKG1fY2hlY2tlci5wc2V1ZG9TdHlsZSgpICE9IE5PUFNF
VURPICYmIG1fY2hlY2tlci5wc2V1ZG9TdHlsZSgpICE9IG1fZHluYW1pY1BzZXVkbykKQEAgLTE5
MjQsOSArMjAzNiw3IEBAIFJ1bGVTZXQ6On5SdWxlU2V0KCkKICAgICBkZWxldGVBbGxWYWx1ZXMo
bV90YWdSdWxlcyk7CiB9CiAKLQotdm9pZCBSdWxlU2V0OjphZGRUb1J1bGVTZXQoQXRvbWljU3Ry
aW5nSW1wbCoga2V5LCBBdG9tUnVsZU1hcCYgbWFwLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgQ1NTU3R5bGVSdWxlKiBydWxlLCBDU1NTZWxlY3Rvciogc2VsKQordm9pZCBSdWxlU2V0
OjphZGRUb1J1bGVTZXQoQXRvbWljU3RyaW5nSW1wbCoga2V5LCBBdG9tUnVsZU1hcCYgbWFwLCBD
U1NTdHlsZVJ1bGUqIHJ1bGUsIENTU1NlbGVjdG9yKiBzZWwpCiB7CiAgICAgaWYgKCFrZXkpIHJl
dHVybjsKICAgICBWZWN0b3I8UnVsZURhdGE+KiBydWxlcyA9IG1hcC5nZXQoa2V5KTsKQEAgLTE5
ODEsNyArMjA5MSw3IEBAIHZvaWQgUnVsZVNldDo6YWRkUGFnZVJ1bGUoQ1NTU3R5bGVSdWxlKiBy
dWxlLCBDU1NTZWxlY3Rvciogc2VsKQogICAgIG1fcGFnZVJ1bGVzLmFwcGVuZChSdWxlRGF0YShy
dWxlLCBzZWwsIG1fcGFnZVJ1bGVzLnNpemUoKSkpOwogfQogCi12b2lkIFJ1bGVTZXQ6OmFkZFJ1
bGVzRnJvbVNoZWV0KENTU1N0eWxlU2hlZXQqIHNoZWV0LCBjb25zdCBNZWRpYVF1ZXJ5RXZhbHVh
dG9yJiBtZWRpdW0sIENTU1N0eWxlU2VsZWN0b3IqIHN0eWxlU2VsZWN0b3IpCit2b2lkIFJ1bGVT
ZXQ6OmFkZFJ1bGVzRnJvbVNoZWV0KENTU1N0eWxlU2hlZXQqIHNoZWV0LCBjb25zdCBNZWRpYVF1
ZXJ5RXZhbHVhdG9yJiBtZWRpdW0sIENTU1N0eWxlU2VsZWN0b3IqIHN0eWxlU2VsZWN0b3IsIGNv
bnN0IEVsZW1lbnQqIHNjb3BlKQogewogICAgIGlmICghc2hlZXQpCiAgICAgICAgIHJldHVybjsK
QEAgLTE5OTYsMTEgKzIxMDYsMTEgQEAgdm9pZCBSdWxlU2V0OjphZGRSdWxlc0Zyb21TaGVldChD
U1NTdHlsZVNoZWV0KiBzaGVldCwgY29uc3QgTWVkaWFRdWVyeUV2YWx1YXRvciYKICAgICBmb3Ig
KGludCBpID0gMDsgaSA8IGxlbjsgaSsrKSB7CiAgICAgICAgIENTU1J1bGUqIHJ1bGUgPSBzaGVl
dC0+aXRlbShpKTsKICAgICAgICAgaWYgKHJ1bGUtPmlzU3R5bGVSdWxlKCkpCi0gICAgICAgICAg
ICBhZGRTdHlsZVJ1bGUoc3RhdGljX2Nhc3Q8Q1NTU3R5bGVSdWxlKj4ocnVsZSkpOworICAgICAg
ICAgICAgYWRkU3R5bGVSdWxlKHN0YXRpY19jYXN0PENTU1N0eWxlUnVsZSo+KHJ1bGUpLCBzY29w
ZSk7CiAgICAgICAgIGVsc2UgaWYgKHJ1bGUtPmlzSW1wb3J0UnVsZSgpKSB7CiAgICAgICAgICAg
ICBDU1NJbXBvcnRSdWxlKiBpbXBvcnQgPSBzdGF0aWNfY2FzdDxDU1NJbXBvcnRSdWxlKj4ocnVs
ZSk7CiAgICAgICAgICAgICBpZiAoIWltcG9ydC0+bWVkaWEoKSB8fCBtZWRpdW0uZXZhbChpbXBv
cnQtPm1lZGlhKCksIHN0eWxlU2VsZWN0b3IpKQotICAgICAgICAgICAgICAgIGFkZFJ1bGVzRnJv
bVNoZWV0KGltcG9ydC0+c3R5bGVTaGVldCgpLCBtZWRpdW0sIHN0eWxlU2VsZWN0b3IpOworICAg
ICAgICAgICAgICAgIGFkZFJ1bGVzRnJvbVNoZWV0KGltcG9ydC0+c3R5bGVTaGVldCgpLCBtZWRp
dW0sIHN0eWxlU2VsZWN0b3IsIHNjb3BlKTsKICAgICAgICAgfQogICAgICAgICBlbHNlIGlmIChy
dWxlLT5pc01lZGlhUnVsZSgpKSB7CiAgICAgICAgICAgICBDU1NNZWRpYVJ1bGUqIHIgPSBzdGF0
aWNfY2FzdDxDU1NNZWRpYVJ1bGUqPihydWxlKTsKQEAgLTIwMTIsMzMgKzIxMjIsNTQgQEAgdm9p
ZCBSdWxlU2V0OjphZGRSdWxlc0Zyb21TaGVldChDU1NTdHlsZVNoZWV0KiBzaGVldCwgY29uc3Qg
TWVkaWFRdWVyeUV2YWx1YXRvciYKICAgICAgICAgICAgICAgICAgICAgQ1NTUnVsZSAqY2hpbGRJ
dGVtID0gcnVsZXMtPml0ZW0oaik7CiAgICAgICAgICAgICAgICAgICAgIGlmIChjaGlsZEl0ZW0t
PmlzU3R5bGVSdWxlKCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEl0IGlzIGEgU3R5
bGVSdWxlLCBzbyBhcHBlbmQgaXQgdG8gb3VyIGxpc3QKLSAgICAgICAgICAgICAgICAgICAgICAg
IGFkZFN0eWxlUnVsZShzdGF0aWNfY2FzdDxDU1NTdHlsZVJ1bGUqPihjaGlsZEl0ZW0pKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGFkZFN0eWxlUnVsZShzdGF0aWNfY2FzdDxDU1NTdHlsZVJ1
bGUqPihjaGlsZEl0ZW0pLCBzY29wZSk7CiAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAo
Y2hpbGRJdGVtLT5pc0ZvbnRGYWNlUnVsZSgpICYmIHN0eWxlU2VsZWN0b3IpIHsKICAgICAgICAg
ICAgICAgICAgICAgICAgIC8vIEFkZCB0aGlzIGZvbnQgZmFjZSB0byBvdXIgc2V0LgotICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgQ1NTRm9udEZhY2VSdWxlKiBmb250RmFjZVJ1bGUgPSBz
dGF0aWNfY2FzdDxDU1NGb250RmFjZVJ1bGUqPihjaGlsZEl0ZW0pOwotICAgICAgICAgICAgICAg
ICAgICAgICAgc3R5bGVTZWxlY3Rvci0+Zm9udFNlbGVjdG9yKCktPmFkZEZvbnRGYWNlUnVsZShm
b250RmFjZVJ1bGUpOworICAgICAgICAgICAgICAgICAgICAgICAgLy8KKyAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIEZJWE1FOiBXZSBkb24ndCBhZGQgQGZvbnQtZmFjZSBydWxlcyBvZiBzY29w
ZWQgc3R5bGUgc2hlZXRzIGZvciB0aGUgbW9tZW50LgorICAgICAgICAgICAgICAgICAgICAgICAg
Ly8gRmluZCBhIHdheSB0byBoYXZlIHNjb3BlZCBAZm9udC1mYWNlIHJ1bGVzLgorICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKCFzY29wZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IENTU0ZvbnRGYWNlUnVsZSogZm9udEZhY2VSdWxlID0gc3RhdGljX2Nhc3Q8Q1NTRm9u
dEZhY2VSdWxlKj4oY2hpbGRJdGVtKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHls
ZVNlbGVjdG9yLT5mb250U2VsZWN0b3IoKS0+YWRkRm9udEZhY2VSdWxlKGZvbnRGYWNlUnVsZSk7
CisgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBp
ZiAoY2hpbGRJdGVtLT5pc0tleWZyYW1lc1J1bGUoKSAmJiBzdHlsZVNlbGVjdG9yKSB7CiAgICAg
ICAgICAgICAgICAgICAgICAgICAvLyBBZGQgdGhpcyBrZXlmcmFtZSBydWxlIHRvIG91ciBzZXQu
Ci0gICAgICAgICAgICAgICAgICAgICAgICBzdHlsZVNlbGVjdG9yLT5hZGRLZXlmcmFtZVN0eWxl
KHN0YXRpY19jYXN0PFdlYktpdENTU0tleWZyYW1lc1J1bGUqPihjaGlsZEl0ZW0pKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIC8vCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBGSVhNRTog
V2UgZG9uJ3QgYWRkIEBrZXlmcmFtZSBydWxlcyBvZiBzY29wZWQgc3R5bGUgc2hlZXRzIGZvciB0
aGUgbW9tZW50LgorICAgICAgICAgICAgICAgICAgICAgICAgLy8gRmluZCBhIHdheSB0byBoYXZl
IHNjb3BlZCBAa2V5ZnJhbWUgcnVsZXMuCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXNj
b3BlKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlU2VsZWN0b3ItPmFkZEtleWZy
YW1lU3R5bGUoc3RhdGljX2Nhc3Q8V2ViS2l0Q1NTS2V5ZnJhbWVzUnVsZSo+KGNoaWxkSXRlbSkp
OwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfSAgIC8vIGZvciBydWxl
cwogICAgICAgICAgICAgfSAgIC8vIGlmIHJ1bGVzCiAgICAgICAgIH0gZWxzZSBpZiAocnVsZS0+
aXNGb250RmFjZVJ1bGUoKSAmJiBzdHlsZVNlbGVjdG9yKSB7CiAgICAgICAgICAgICAvLyBBZGQg
dGhpcyBmb250IGZhY2UgdG8gb3VyIHNldC4KLSAgICAgICAgICAgIGNvbnN0IENTU0ZvbnRGYWNl
UnVsZSogZm9udEZhY2VSdWxlID0gc3RhdGljX2Nhc3Q8Q1NTRm9udEZhY2VSdWxlKj4ocnVsZSk7
Ci0gICAgICAgICAgICBzdHlsZVNlbGVjdG9yLT5mb250U2VsZWN0b3IoKS0+YWRkRm9udEZhY2VS
dWxlKGZvbnRGYWNlUnVsZSk7CisgICAgICAgICAgICAvLworICAgICAgICAgICAgLy8gRklYTUU6
IFdlIGRvbid0IGFkZCBAZm9udC1mYWNlIHJ1bGVzIG9mIHNjb3BlZCBzdHlsZSBzaGVldHMgZm9y
IHRoZSBtb21lbnQuCisgICAgICAgICAgICAvLyBGaW5kIGEgd2F5IHRvIGhhdmUgc2NvcGVkIEBm
b250LWZhY2UgcnVsZXMuCisgICAgICAgICAgICBpZiAoIXNjb3BlKSB7CisgICAgICAgICAgICAg
ICAgY29uc3QgQ1NTRm9udEZhY2VSdWxlKiBmb250RmFjZVJ1bGUgPSBzdGF0aWNfY2FzdDxDU1NG
b250RmFjZVJ1bGUqPihydWxlKTsKKyAgICAgICAgICAgICAgICBzdHlsZVNlbGVjdG9yLT5mb250
U2VsZWN0b3IoKS0+YWRkRm9udEZhY2VSdWxlKGZvbnRGYWNlUnVsZSk7CisgICAgICAgICAgICB9
CiAgICAgICAgIH0gZWxzZSBpZiAocnVsZS0+aXNLZXlmcmFtZXNSdWxlKCkpCi0gICAgICAgICAg
ICBzdHlsZVNlbGVjdG9yLT5hZGRLZXlmcmFtZVN0eWxlKHN0YXRpY19jYXN0PFdlYktpdENTU0tl
eWZyYW1lc1J1bGUqPihydWxlKSk7CisgICAgICAgICAgICAvLworICAgICAgICAgICAgLy8gRklY
TUU6IFdlIGRvbid0IGFkZCBAa2V5ZnJhbWUgcnVsZXMgb2Ygc2NvcGVkIHN0eWxlIHNoZWV0cyBm
b3IgdGhlIG1vbWVudC4KKyAgICAgICAgICAgIC8vIEZpbmQgYSB3YXkgdG8gaGF2ZSBzY29wZWQg
QGtleWZyYW1lIHJ1bGVzLgorICAgICAgICAgICAgaWYgKCFzY29wZSkKKyAgICAgICAgICAgICAg
ICBzdHlsZVNlbGVjdG9yLT5hZGRLZXlmcmFtZVN0eWxlKHN0YXRpY19jYXN0PFdlYktpdENTU0tl
eWZyYW1lc1J1bGUqPihydWxlKSk7CiAgICAgfQogICAgIGlmIChtX2F1dG9TaHJpbmtUb0ZpdEVu
YWJsZWQpCiAgICAgICAgIHNocmlua1RvRml0KCk7CiB9CiAKLXZvaWQgUnVsZVNldDo6YWRkU3R5
bGVSdWxlKENTU1N0eWxlUnVsZSogcnVsZSkKK3ZvaWQgUnVsZVNldDo6YWRkU3R5bGVSdWxlKENT
U1N0eWxlUnVsZSogcnVsZSwgY29uc3QgRWxlbWVudCogc2NvcGUpCiB7CiAgICAgaWYgKHJ1bGUt
PmlzUGFnZVJ1bGUoKSkgewotICAgICAgICBDU1NQYWdlUnVsZSogcGFnZVJ1bGUgPSBzdGF0aWNf
Y2FzdDxDU1NQYWdlUnVsZSo+KHJ1bGUpOwotICAgICAgICBhZGRQYWdlUnVsZShwYWdlUnVsZSwg
cGFnZVJ1bGUtPnNlbGVjdG9yTGlzdCgpLmZpcnN0KCkpOworICAgICAgICAvLyBJZ25vcmUgQHBh
Z2UgcnVsZXMgaWYgdGhlIHN0eWxlIHNoZWV0IGlzIHNjb3BlZAorICAgICAgICBpZiAoIXNjb3Bl
KSB7CisgICAgICAgICAgICBDU1NQYWdlUnVsZSogcGFnZVJ1bGUgPSBzdGF0aWNfY2FzdDxDU1NQ
YWdlUnVsZSo+KHJ1bGUpOworICAgICAgICAgICAgYWRkUGFnZVJ1bGUocGFnZVJ1bGUsIHBhZ2VS
dWxlLT5zZWxlY3Rvckxpc3QoKS5maXJzdCgpKTsKKyAgICAgICAgfQogICAgIH0gZWxzZSB7CiAg
ICAgICAgIGZvciAoQ1NTU2VsZWN0b3IqIHMgPSBydWxlLT5zZWxlY3Rvckxpc3QoKS5maXJzdCgp
OyBzOyBzID0gQ1NTU2VsZWN0b3JMaXN0OjpuZXh0KHMpKQogICAgICAgICAgICAgYWRkUnVsZShy
dWxlLCBzKTsKQEAgLTIxMzcsNiArMjI2OCwyNyBAQCB2b2lkIFJ1bGVTZXQ6OnNocmlua1RvRml0
KCkKICAgICBtX3BhZ2VSdWxlcy5zaHJpbmtUb0ZpdCgpOwogfQogCitTY29wZWRSdWxlU2V0czo6
flNjb3BlZFJ1bGVTZXRzKCkKK3sKKyAgICBkZWxldGVBbGxWYWx1ZXMobV9zY29wZWRSdWxlU2V0
TWFwKTsKK30KKworUnVsZVNldCogU2NvcGVkUnVsZVNldHM6OmVuc3VyZUV4aXN0cyhjb25zdCBF
bGVtZW50KiBzY29wZSkKK3sKKyAgICBSdWxlU2V0KiBydWxlU2V0ID0gbV9zY29wZWRSdWxlU2V0
TWFwLmdldChzY29wZSk7CisgICAgaWYgKCFydWxlU2V0KSB7CisgICAgICAgIHJ1bGVTZXQgPSBu
ZXcgUnVsZVNldDsKKyAgICAgICAgbV9zY29wZWRSdWxlU2V0TWFwLnNldChzY29wZSwgcnVsZVNl
dCk7CisgICAgfQorICAgIHJldHVybiBydWxlU2V0OworfQorCit2b2lkIFNjb3BlZFJ1bGVTZXRz
Ojpjb2xsZWN0RmVhdHVyZXMoQ1NTU3R5bGVTZWxlY3Rvcjo6RmVhdHVyZXMmIGZlYXR1cmVzKSBj
b25zdAoreworICAgIGZvciAoU2NvcGVkUnVsZVNldE1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBt
X3Njb3BlZFJ1bGVTZXRNYXAuYmVnaW4oKSwgaXRFbmQgPSBtX3Njb3BlZFJ1bGVTZXRNYXAuZW5k
KCk7IGl0ICE9IGl0RW5kOyArK2l0KQorICAgICAgICBpdC0+c2Vjb25kLT5jb2xsZWN0RmVhdHVy
ZXMoZmVhdHVyZXMpOworfQorCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAvLyB0
aGlzIGlzIG1vc3RseSBib3Jpbmcgc3R1ZmYgb24gaG93IHRvIGFwcGx5IGEgY2VydGFpbiBydWxl
IHRvIHRoZSByZW5kZXJzdHlsZS4uLgogCkBAIC0yMjQ0LDIyICsyMzk2LDEwIEBAIHZvaWQgQ1NT
U3R5bGVTZWxlY3Rvcjo6YXBwbHlEZWNsYXJhdGlvbnMoYm9vbCBpc0ltcG9ydGFudCwgaW50IHN0
YXJ0SW5kZXgsIGludCBlCiB2b2lkIENTU1N0eWxlU2VsZWN0b3I6Om1hdGNoUGFnZVJ1bGVzKFJ1
bGVTZXQqIHJ1bGVzLCBib29sIGlzTGVmdFBhZ2UsIGJvb2wgaXNGaXJzdFBhZ2UsIGNvbnN0IFN0
cmluZyYgcGFnZU5hbWUpCiB7CiAgICAgbV9tYXRjaGVkUnVsZXMuY2xlYXIoKTsKLQogICAgIGlm
ICghcnVsZXMpCiAgICAgICAgIHJldHVybjsKLQogICAgIG1hdGNoUGFnZVJ1bGVzRm9yTGlzdChy
dWxlcy0+cGFnZVJ1bGVzKCksIGlzTGVmdFBhZ2UsIGlzRmlyc3RQYWdlLCBwYWdlTmFtZSk7Ci0K
LSAgICAvLyBJZiB3ZSBkaWRuJ3QgbWF0Y2ggYW55IHJ1bGVzLCB3ZSdyZSBkb25lLgotICAgIGlm
IChtX21hdGNoZWRSdWxlcy5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vIFNv
cnQgdGhlIHNldCBvZiBtYXRjaGVkIHJ1bGVzLgotICAgIHNvcnRNYXRjaGVkUnVsZXMoKTsKLQot
ICAgIC8vIE5vdyB0cmFuc2ZlciB0aGUgc2V0IG9mIG1hdGNoZWQgcnVsZXMgb3ZlciB0byBvdXIg
bGlzdCBvZiBkZWNscy4KLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9tYXRjaGVkUnVs
ZXMuc2l6ZSgpOyBpKyspCi0gICAgICAgIGFkZE1hdGNoZWREZWNsYXJhdGlvbihtX21hdGNoZWRS
dWxlc1tpXS0+cnVsZSgpLT5kZWNsYXJhdGlvbigpKTsKKyAgICBzb3J0QW5kVHJhbnNmZXJNYXRj
aGVkUnVsZXMoZmFsc2UpOwogfQogCiB2b2lkIENTU1N0eWxlU2VsZWN0b3I6Om1hdGNoUGFnZVJ1
bGVzRm9yTGlzdChjb25zdCBWZWN0b3I8UnVsZURhdGE+KiBydWxlcywgYm9vbCBpc0xlZnRQYWdl
LCBib29sIGlzRmlyc3RQYWdlLCBjb25zdCBTdHJpbmcmIHBhZ2VOYW1lKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvY3NzL0NTU1N0eWxlU2VsZWN0b3IuaCBiL1NvdXJjZS9XZWJDb3JlL2Nz
cy9DU1NTdHlsZVNlbGVjdG9yLmgKaW5kZXggNDNkODkxYy4uMjZlZWVhNyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvY3NzL0NTU1N0eWxlU2VsZWN0b3IuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9jc3MvQ1NTU3R5bGVTZWxlY3Rvci5oCkBAIC02Myw2ICs2Myw3IEBAIGNsYXNzIE1lZGlhUXVl
cnlFdmFsdWF0b3I7CiBjbGFzcyBOb2RlOwogY2xhc3MgUnVsZURhdGE7CiBjbGFzcyBSdWxlU2V0
OworY2xhc3MgU2NvcGVkUnVsZVNldHM7CiBjbGFzcyBTZXR0aW5nczsKIGNsYXNzIFN0eWxlSW1h
Z2U7CiBjbGFzcyBTdHlsZVNoZWV0OwpAQCAtMTIyLDcgKzEyMyw3IEBAIHByaXZhdGU6CiAgICAg
dm9pZCBpbml0Rm9yU3R5bGVSZXNvbHZlKEVsZW1lbnQqLCBSZW5kZXJTdHlsZSogcGFyZW50U3R5
bGUgPSAwLCBQc2V1ZG9JZCA9IE5PUFNFVURPKTsKICAgICB2b2lkIGluaXRFbGVtZW50KEVsZW1l
bnQqKTsKICAgICBSZW5kZXJTdHlsZSogbG9jYXRlU2hhcmVkU3R5bGUoKTsKLSAgICBib29sIG1h
dGNoZXNSdWxlU2V0KFJ1bGVTZXQqKTsKKyAgICBib29sIG1hdGNoZXNSdWxlU2V0R2xvYmFsbHko
UnVsZVNldCopOwogICAgIE5vZGUqIGxvY2F0ZUNvdXNpbkxpc3QoRWxlbWVudCogcGFyZW50LCB1
bnNpZ25lZCYgdmlzaXRlZE5vZGVDb3VudCkgY29uc3Q7CiAgICAgTm9kZSogZmluZFNpYmxpbmdG
b3JTdHlsZVNoYXJpbmcoTm9kZSosIHVuc2lnbmVkJiBjb3VudCkgY29uc3Q7CiAgICAgYm9vbCBj
YW5TaGFyZVN0eWxlV2l0aEVsZW1lbnQoTm9kZSopIGNvbnN0OwpAQCAtMjIzLDEyICsyMjQsMTcg
QEAgcHJpdmF0ZToKICAgICB2b2lkIGFkZE1hdGNoZWRSdWxlKGNvbnN0IFJ1bGVEYXRhKiBydWxl
KSB7IG1fbWF0Y2hlZFJ1bGVzLmFwcGVuZChydWxlKTsgfQogICAgIHZvaWQgYWRkTWF0Y2hlZERl
Y2xhcmF0aW9uKENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uKiwgdW5zaWduZWQgbGlua01hdGNo
VHlwZSA9IFNlbGVjdG9yQ2hlY2tlcjo6TWF0Y2hBbGwpOwogCi0gICAgdm9pZCBtYXRjaFJ1bGVz
KFJ1bGVTZXQqLCBpbnQmIGZpcnN0UnVsZUluZGV4LCBpbnQmIGxhc3RSdWxlSW5kZXgsIGJvb2wg
aW5jbHVkZUVtcHR5UnVsZXMpOwotICAgIHZvaWQgbWF0Y2hSdWxlc0Zvckxpc3QoY29uc3QgVmVj
dG9yPFJ1bGVEYXRhPiosIGludCYgZmlyc3RSdWxlSW5kZXgsIGludCYgbGFzdFJ1bGVJbmRleCwg
Ym9vbCBpbmNsdWRlRW1wdHlSdWxlcyk7CisgICAgLy8gbWF0Y2hBdXRob3JSdWxlczogTWF0Y2gg
YWxsIGdsb2JhbCBhbmQgYXBwbGljYWJsZSBzY29wZWQgYXV0aG9yLWRlZmluZWQgcnVsZXMuCisg
ICAgdm9pZCBtYXRjaEF1dGhvclJ1bGVzKGludCYgZmlyc3RSdWxlSW5kZXgsIGludCYgbGFzdFJ1
bGVJbmRleCwgYm9vbCBpbmNsdWRlRW1wdHlSdWxlcyk7CisgICAgLy8gbWF0Y2hSdWxlczogbWF0
Y2hlcyB2cy4gYWxsIHJ1bGVzIGluIHRoZSBwYXNzZWQtaW4gUnVsZVNldC4KKyAgICB2b2lkIG1h
dGNoUnVsZXNHbG9iYWxseShSdWxlU2V0KiwgaW50JiBmaXJzdFJ1bGVJbmRleCwgaW50JiBsYXN0
UnVsZUluZGV4LCBib29sIGluY2x1ZGVFbXB0eVJ1bGVzKTsKKyAgICAvLyBJbXBsZW1lbnRhdGlv
biBtZXRob2RzOgorICAgIHZvaWQgbWF0Y2hSdWxlU2V0KFJ1bGVTZXQqLCBjb25zdCBFbGVtZW50
KiwgaW50JiBmaXJzdFJ1bGVJbmRleCwgaW50JiBsYXN0UnVsZUluZGV4LCBib29sIGluY2x1ZGVF
bXB0eVJ1bGVzKTsKKyAgICB2b2lkIG1hdGNoUnVsZXNGb3JMaXN0KGNvbnN0IFZlY3RvcjxSdWxl
RGF0YT4qLCBjb25zdCBFbGVtZW50KiwgaW50JiBmaXJzdFJ1bGVJbmRleCwgaW50JiBsYXN0UnVs
ZUluZGV4LCBib29sIGluY2x1ZGVFbXB0eVJ1bGVzKTsKICAgICBib29sIGZhc3RSZWplY3RTZWxl
Y3Rvcihjb25zdCBSdWxlRGF0YSYpIGNvbnN0OwotICAgIHZvaWQgc29ydE1hdGNoZWRSdWxlcygp
OworICAgIHZvaWQgc29ydEFuZFRyYW5zZmVyTWF0Y2hlZFJ1bGVzKGJvb2wgY29sbGVjdFJ1bGVz
T25seSk7CiAgICAgCi0gICAgYm9vbCBjaGVja1NlbGVjdG9yKGNvbnN0IFJ1bGVEYXRhJik7Cisg
ICAgYm9vbCBjaGVja1NlbGVjdG9yKGNvbnN0IFJ1bGVEYXRhJiwgY29uc3QgRWxlbWVudCogc2Nv
cGUpOwogCiAgICAgdGVtcGxhdGUgPGJvb2wgZmlyc3RQYXNzPgogICAgIHZvaWQgYXBwbHlEZWNs
YXJhdGlvbnMoYm9vbCBpbXBvcnRhbnQsIGludCBzdGFydEluZGV4LCBpbnQgZW5kSW5kZXgpOwpA
QCAtMjQyLDcgKzI0OCw4IEBAIHByaXZhdGU6CiAgICAgYm9vbCBpc0ZpcnN0UGFnZShpbnQgcGFn
ZUluZGV4KSBjb25zdDsKICAgICBTdHJpbmcgcGFnZU5hbWUoaW50IHBhZ2VJbmRleCkgY29uc3Q7
CiAgICAgCi0gICAgT3duUHRyPFJ1bGVTZXQ+IG1fYXV0aG9yU3R5bGU7CisgICAgT3duUHRyPFJ1
bGVTZXQ+IG1fZ2xvYmFsQXV0aG9yU3R5bGVzOworICAgIE93blB0cjxTY29wZWRSdWxlU2V0cz4g
bV9zY29wZWRBdXRob3JTdHlsZXM7CiAgICAgT3duUHRyPFJ1bGVTZXQ+IG1fdXNlclN0eWxlOwog
CiAgICAgRmVhdHVyZXMgbV9mZWF0dXJlczsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nz
cy9DU1NTdHlsZVNoZWV0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTdHlsZVNoZWV0LmNw
cAppbmRleCAzMzU0NzMwLi4xMDMxMmYxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3Mv
Q1NTU3R5bGVTaGVldC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU1N0eWxlU2hlZXQu
Y3BwCkBAIC0yNjcsMjQgKzI2NywyNiBAQCB2b2lkIENTU1N0eWxlU2hlZXQ6OnN0YXJ0TG9hZGlu
Z0R5bmFtaWNTaGVldCgpCiAgICAgICAgIG93bmVyLT5zdGFydExvYWRpbmdEeW5hbWljU2hlZXQo
KTsKIH0KIAotRG9jdW1lbnQqIENTU1N0eWxlU2hlZXQ6OmRvY3VtZW50KCkKK05vZGUqIENTU1N0
eWxlU2hlZXQ6OmZpbmRPd25lck5vZGUoKSBjb25zdAogewotICAgIFN0eWxlQmFzZSogc3R5bGVP
YmplY3QgPSB0aGlzOwotICAgIHdoaWxlIChzdHlsZU9iamVjdCkgeworICAgIGZvciAoY29uc3Qg
U3R5bGVCYXNlKiBzdHlsZU9iamVjdCA9IHRoaXM7IHN0eWxlT2JqZWN0OyBzdHlsZU9iamVjdCA9
IHN0eWxlT2JqZWN0LT5wYXJlbnQoKSkgewogICAgICAgICBpZiAoc3R5bGVPYmplY3QtPmlzQ1NT
U3R5bGVTaGVldCgpKSB7Ci0gICAgICAgICAgICBOb2RlKiBvd25lck5vZGUgPSBzdGF0aWNfY2Fz
dDxDU1NTdHlsZVNoZWV0Kj4oc3R5bGVPYmplY3QpLT5vd25lck5vZGUoKTsKKyAgICAgICAgICAg
IE5vZGUqIG93bmVyTm9kZSA9IHN0YXRpY19jYXN0PGNvbnN0IENTU1N0eWxlU2hlZXQqPihzdHls
ZU9iamVjdCktPm93bmVyTm9kZSgpOwogICAgICAgICAgICAgaWYgKG93bmVyTm9kZSkKLSAgICAg
ICAgICAgICAgICByZXR1cm4gb3duZXJOb2RlLT5kb2N1bWVudCgpOworICAgICAgICAgICAgICAg
IHJldHVybiBvd25lck5vZGU7CiAgICAgICAgIH0KLSAgICAgICAgaWYgKHN0eWxlT2JqZWN0LT5p
c1J1bGUoKSkKLSAgICAgICAgICAgIHN0eWxlT2JqZWN0ID0gc3RhdGljX2Nhc3Q8Q1NTUnVsZSo+
KHN0eWxlT2JqZWN0KS0+cGFyZW50U3R5bGVTaGVldCgpOwotICAgICAgICBlbHNlCi0gICAgICAg
ICAgICBzdHlsZU9iamVjdCA9IHN0eWxlT2JqZWN0LT5wYXJlbnQoKTsKICAgICB9Ci0KICAgICBy
ZXR1cm4gMDsKIH0KIAorRG9jdW1lbnQqIENTU1N0eWxlU2hlZXQ6OmRvY3VtZW50KCkKK3sKKyAg
ICBOb2RlKiBvd25lck5vZGUgPSBmaW5kT3duZXJOb2RlKCk7CisKKyAgICByZXR1cm4gb3duZXJO
b2RlID8gb3duZXJOb2RlLT5kb2N1bWVudCgpIDogMDsKK30KKworCiB2b2lkIENTU1N0eWxlU2hl
ZXQ6OnN0eWxlU2hlZXRDaGFuZ2VkKCkKIHsKICAgICBTdHlsZUJhc2UqIHJvb3QgPSB0aGlzOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU1N0eWxlU2hlZXQuaCBiL1NvdXJjZS9X
ZWJDb3JlL2Nzcy9DU1NTdHlsZVNoZWV0LmgKaW5kZXggNmRjYjM0Mi4uMmE3NTk0OCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU1N0eWxlU2hlZXQuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9jc3MvQ1NTU3R5bGVTaGVldC5oCkBAIC04OCw2ICs4OCw3IEBAIHB1YmxpYzoKICAgICB2
aXJ0dWFsIHZvaWQgY2hlY2tMb2FkZWQoKTsKICAgICB2b2lkIHN0YXJ0TG9hZGluZ0R5bmFtaWNT
aGVldCgpOwogCisgICAgTm9kZSogZmluZE93bmVyTm9kZSgpIGNvbnN0OwogICAgIERvY3VtZW50
KiBkb2N1bWVudCgpOwogCiAgICAgY29uc3QgU3RyaW5nJiBjaGFyc2V0KCkgY29uc3QgeyByZXR1
cm4gbV9jaGFyc2V0OyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU2VsZWN0b3JD
aGVja2VyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TZWxlY3RvckNoZWNrZXIuY3BwCmluZGV4
IDM0YTU4OWUuLmQ2MzY3YTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9TZWxlY3Rv
ckNoZWNrZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TZWxlY3RvckNoZWNrZXIuY3Bw
CkBAIC05Niw3ICs5NiwxMyBAQCB2b2lkIFNlbGVjdG9yQ2hlY2tlcjo6cHVzaFBhcmVudFN0YWNr
RnJhbWUoRWxlbWVudCogcGFyZW50KQogICAgIEFTU0VSVChtX2FuY2VzdG9ySWRlbnRpZmllckZp
bHRlcik7CiAgICAgQVNTRVJUKG1fcGFyZW50U3RhY2suaXNFbXB0eSgpIHx8IG1fcGFyZW50U3Rh
Y2subGFzdCgpLmVsZW1lbnQgPT0gcGFyZW50LT5wYXJlbnRPckhvc3RFbGVtZW50KCkpOwogICAg
IEFTU0VSVCghbV9wYXJlbnRTdGFjay5pc0VtcHR5KCkgfHwgIXBhcmVudC0+cGFyZW50T3JIb3N0
RWxlbWVudCgpKTsKLSAgICBtX3BhcmVudFN0YWNrLmFwcGVuZChQYXJlbnRTdGFja0ZyYW1lKHBh
cmVudCkpOworICAgIC8vIFBvaW50IHRvIGZyYW1lIGNvbnRhaW5pbmcgdGhlIGNsb3Nlc3Qgc3R5
bGUgc2NvcGUgKG9yIGxlYXZlIGF0IDAgaWYgbm9uZSkuCisgICAgaWYgKHBhcmVudC0+aGFzU2Nv
cGVkSFRNTFN0eWxlQ2hpbGQoKSkKKyAgICAgICAgbV9wYXJlbnRTdGFjay5hcHBlbmQoUGFyZW50
U3RhY2tGcmFtZShwYXJlbnQsIG1fcGFyZW50U3RhY2suc2l6ZSgpKSk7CisgICAgZWxzZSBpZiAo
IW1fcGFyZW50U3RhY2suaXNFbXB0eSgpKQorICAgICAgICBtX3BhcmVudFN0YWNrLmFwcGVuZChQ
YXJlbnRTdGFja0ZyYW1lKHBhcmVudCwgbV9wYXJlbnRTdGFjay5sYXN0KCkuY2xvc2VzdFN0eWxl
U2NvcGVGcmFtZUluZGV4KSk7CisgICAgZWxzZQorICAgICAgICBtX3BhcmVudFN0YWNrLmFwcGVu
ZChQYXJlbnRTdGFja0ZyYW1lKHBhcmVudCwgLTEpKTsKICAgICBQYXJlbnRTdGFja0ZyYW1lJiBw
YXJlbnRGcmFtZSA9IG1fcGFyZW50U3RhY2subGFzdCgpOwogICAgIC8vIE1peCB0YWdzLCBjbGFz
cyBuYW1lcyBhbmQgaWRzIGludG8gc29tZSBzb3J0IG9mIHdlaXJkIGJvdWlsbGFiYWlzc2UuCiAg
ICAgLy8gVGhlIGZpbHRlciBpcyB1c2VkIGZvciBmYXN0IHJlamVjdGlvbiBvZiBjaGlsZCBhbmQg
ZGVzY2VuZGFudCBzZWxlY3RvcnMuCkBAIC0xNDEsNyArMTQ3LDcgQEAgdm9pZCBTZWxlY3RvckNo
ZWNrZXI6OnB1c2hQYXJlbnQoRWxlbWVudCogcGFyZW50KQogICAgICAgICAvLyBzdHlsZSByZWNh
bGMgaW4gdGhlIG1pZGRsZSBvZiB0cmVlIGJ1aWxkaW5nLiBSZXNldCB0aGUgc3RhY2sgaWYgd2Ug
c2VlIGEgbmV3IHJvb3QgZWxlbWVudC4KICAgICAgICAgQVNTRVJUKG1fYW5jZXN0b3JJZGVudGlm
aWVyRmlsdGVyKTsKICAgICAgICAgbV9hbmNlc3RvcklkZW50aWZpZXJGaWx0ZXItPmNsZWFyKCk7
Ci0gICAgICAgIG1fcGFyZW50U3RhY2sucmVzaXplKDApOworICAgICAgICBtX3BhcmVudFN0YWNr
LmNsZWFyKCk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgQVNTRVJUKG1fYW5jZXN0b3JJZGVudGlm
aWVyRmlsdGVyKTsKICAgICAgICAgLy8gV2UgbWF5IGdldCBpbnZva2VkIGZvciBzb21lIHJhbmRv
bSBlbGVtZW50cyBpbiBzb21lIHdhY2t5IGNhc2VzIGR1cmluZyBzdHlsZSByZXNvbHZlLgpAQCAt
MjUwLDI1ICsyNTYsMjUgQEAgRUluc2lkZUxpbmsgU2VsZWN0b3JDaGVja2VyOjpkZXRlcm1pbmVM
aW5rU3RhdGVTbG93Q2FzZShFbGVtZW50KiBlbGVtZW50KSBjb25zdAogI2VuZGlmCiB9CiAKLWJv
b2wgU2VsZWN0b3JDaGVja2VyOjpjaGVja1NlbGVjdG9yKENTU1NlbGVjdG9yKiBzZWwsIEVsZW1l
bnQqIGVsZW1lbnQsIGJvb2wgaXNGYXN0Q2hlY2thYmxlU2VsZWN0b3IpIGNvbnN0Citib29sIFNl
bGVjdG9yQ2hlY2tlcjo6Y2hlY2tTZWxlY3RvcihDU1NTZWxlY3Rvciogc2VsLCBFbGVtZW50KiBl
bGVtZW50LCBjb25zdCBFbGVtZW50KiBzY29wZSwgYm9vbCBpc0Zhc3RDaGVja2FibGVTZWxlY3Rv
cikgY29uc3QKIHsKICAgICBQc2V1ZG9JZCBkeW5hbWljUHNldWRvID0gTk9QU0VVRE87CiAgICAg
aWYgKGlzRmFzdENoZWNrYWJsZVNlbGVjdG9yICYmICFlbGVtZW50LT5pc1NWR0VsZW1lbnQoKSkg
ewogICAgICAgICBpZiAoIWZhc3RDaGVja1JpZ2h0bW9zdFNlbGVjdG9yKHNlbCwgZWxlbWVudCwg
VmlzaXRlZE1hdGNoRGlzYWJsZWQpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAg
ICByZXR1cm4gZmFzdENoZWNrU2VsZWN0b3Ioc2VsLCBlbGVtZW50KTsKKyAgICAgICAgcmV0dXJu
IGZhc3RDaGVja1NlbGVjdG9yKHNlbCwgZWxlbWVudCwgc2NvcGUpOwogICAgIH0KLSAgICByZXR1
cm4gY2hlY2tTZWxlY3RvcihzZWwsIGVsZW1lbnQsIGR5bmFtaWNQc2V1ZG8sIGZhbHNlLCBWaXNp
dGVkTWF0Y2hEaXNhYmxlZCkgPT0gU2VsZWN0b3JNYXRjaGVzOworICAgIHJldHVybiBjaGVja1Nl
bGVjdG9yKHNlbCwgZWxlbWVudCwgc2NvcGUsIGR5bmFtaWNQc2V1ZG8sIGZhbHNlLCBWaXNpdGVk
TWF0Y2hEaXNhYmxlZCkgPT0gU2VsZWN0b3JNYXRjaGVzOwogfQogCiBuYW1lc3BhY2UgewogCiB0
ZW1wbGF0ZSA8Ym9vbCBjaGVja1ZhbHVlKGNvbnN0IEVsZW1lbnQqLCBBdG9taWNTdHJpbmdJbXBs
KiwgY29uc3QgUXVhbGlmaWVkTmFtZSYpLCBib29sIGluaXRBdHRyaWJ1dGVOYW1lPgotaW5saW5l
IGJvb2wgZmFzdENoZWNrU2luZ2xlU2VsZWN0b3IoY29uc3QgQ1NTU2VsZWN0b3IqJiBzZWxlY3Rv
ciwgY29uc3QgRWxlbWVudComIGVsZW1lbnQsIGNvbnN0IENTU1NlbGVjdG9yKiYgdG9wQ2hpbGRP
clN1YnNlbGVjdG9yLCBjb25zdCBFbGVtZW50KiYgdG9wQ2hpbGRPclN1YnNlbGVjdG9yTWF0Y2hF
bGVtZW50KQoraW5saW5lIGJvb2wgZmFzdENoZWNrU2luZ2xlU2VsZWN0b3IoY29uc3QgQ1NTU2Vs
ZWN0b3IqJiBzZWxlY3RvciwgY29uc3QgRWxlbWVudComIGVsZW1lbnQsIGNvbnN0IEVsZW1lbnQq
IHNjb3BlLCBjb25zdCBDU1NTZWxlY3RvciomIHRvcENoaWxkT3JTdWJzZWxlY3RvciwgY29uc3Qg
RWxlbWVudComIHRvcENoaWxkT3JTdWJzZWxlY3Rvck1hdGNoRWxlbWVudCkKIHsKICAgICBBdG9t
aWNTdHJpbmdJbXBsKiB2YWx1ZSA9IHNlbGVjdG9yLT52YWx1ZSgpLmltcGwoKTsKICAgICBjb25z
dCBRdWFsaWZpZWROYW1lJiBhdHRyaWJ1dGUgPSBpbml0QXR0cmlidXRlTmFtZSA/IHNlbGVjdG9y
LT5hdHRyaWJ1dGUoKSA6IGFueVFOYW1lKCk7Ci0gICAgZm9yICg7IGVsZW1lbnQ7IGVsZW1lbnQg
PSBlbGVtZW50LT5wYXJlbnRFbGVtZW50KCkpIHsKKyAgICBmb3IgKDsgZWxlbWVudDsgZWxlbWVu
dCA9IChlbGVtZW50ID09IHNjb3BlKSA/IDAgOiBlbGVtZW50LT5wYXJlbnRFbGVtZW50KCkpIHsK
ICAgICAgICAgaWYgKGNoZWNrVmFsdWUoZWxlbWVudCwgdmFsdWUsIGF0dHJpYnV0ZSkgJiYgU2Vs
ZWN0b3JDaGVja2VyOjp0YWdNYXRjaGVzKGVsZW1lbnQsIHNlbGVjdG9yKSkgewogICAgICAgICAg
ICAgaWYgKHNlbGVjdG9yLT5yZWxhdGlvbigpID09IENTU1NlbGVjdG9yOjpEZXNjZW5kYW50KQog
ICAgICAgICAgICAgICAgIHRvcENoaWxkT3JTdWJzZWxlY3RvciA9IDA7CkBAIC0zNDUsNyArMzUx
LDcgQEAgaW5saW5lIGJvb2wgU2VsZWN0b3JDaGVja2VyOjpmYXN0Q2hlY2tSaWdodG1vc3RTZWxl
Y3Rvcihjb25zdCBDU1NTZWxlY3Rvciogc2VsZWMKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLWJv
b2wgU2VsZWN0b3JDaGVja2VyOjpmYXN0Q2hlY2tTZWxlY3Rvcihjb25zdCBDU1NTZWxlY3Rvciog
c2VsZWN0b3IsIGNvbnN0IEVsZW1lbnQqIGVsZW1lbnQpIGNvbnN0Citib29sIFNlbGVjdG9yQ2hl
Y2tlcjo6ZmFzdENoZWNrU2VsZWN0b3IoY29uc3QgQ1NTU2VsZWN0b3IqIHNlbGVjdG9yLCBjb25z
dCBFbGVtZW50KiBlbGVtZW50LCBjb25zdCBFbGVtZW50KiBzY29wZSkgY29uc3QKIHsKICAgICBB
U1NFUlQoZmFzdENoZWNrUmlnaHRtb3N0U2VsZWN0b3Ioc2VsZWN0b3IsIGVsZW1lbnQsIFZpc2l0
ZWRNYXRjaEVuYWJsZWQpKTsKIApAQCAtMzYzLDIwICszNjksMjAgQEAgYm9vbCBTZWxlY3RvckNo
ZWNrZXI6OmZhc3RDaGVja1NlbGVjdG9yKGNvbnN0IENTU1NlbGVjdG9yKiBzZWxlY3RvciwgY29u
c3QgRWxlbWUKICAgICB3aGlsZSAoc2VsZWN0b3IpIHsKICAgICAgICAgc3dpdGNoIChzZWxlY3Rv
ci0+bV9tYXRjaCkgewogICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpDbGFzczoKLSAgICAgICAg
ICAgIGlmICghZmFzdENoZWNrU2luZ2xlU2VsZWN0b3I8Y2hlY2tDbGFzc1ZhbHVlLCBmYWxzZT4o
c2VsZWN0b3IsIGVsZW1lbnQsIHRvcENoaWxkT3JTdWJzZWxlY3RvciwgdG9wQ2hpbGRPclN1YnNl
bGVjdG9yTWF0Y2hFbGVtZW50KSkKKyAgICAgICAgICAgIGlmICghZmFzdENoZWNrU2luZ2xlU2Vs
ZWN0b3I8Y2hlY2tDbGFzc1ZhbHVlLCBmYWxzZT4oc2VsZWN0b3IsIGVsZW1lbnQsIHNjb3BlLCB0
b3BDaGlsZE9yU3Vic2VsZWN0b3IsIHRvcENoaWxkT3JTdWJzZWxlY3Rvck1hdGNoRWxlbWVudCkp
CiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgIGNhc2UgQ1NTU2VsZWN0b3I6OklkOgotICAgICAgICAgICAgaWYgKCFmYXN0Q2hlY2tTaW5n
bGVTZWxlY3RvcjxjaGVja0lEVmFsdWUsIGZhbHNlPihzZWxlY3RvciwgZWxlbWVudCwgdG9wQ2hp
bGRPclN1YnNlbGVjdG9yLCB0b3BDaGlsZE9yU3Vic2VsZWN0b3JNYXRjaEVsZW1lbnQpKQorICAg
ICAgICAgICAgaWYgKCFmYXN0Q2hlY2tTaW5nbGVTZWxlY3RvcjxjaGVja0lEVmFsdWUsIGZhbHNl
PihzZWxlY3RvciwgZWxlbWVudCwgc2NvcGUsIHRvcENoaWxkT3JTdWJzZWxlY3RvciwgdG9wQ2hp
bGRPclN1YnNlbGVjdG9yTWF0Y2hFbGVtZW50KSkKICAgICAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6Tm9uZToK
LSAgICAgICAgICAgIGlmICghZmFzdENoZWNrU2luZ2xlU2VsZWN0b3I8Y2hlY2tUYWdWYWx1ZSwg
ZmFsc2U+KHNlbGVjdG9yLCBlbGVtZW50LCB0b3BDaGlsZE9yU3Vic2VsZWN0b3IsIHRvcENoaWxk
T3JTdWJzZWxlY3Rvck1hdGNoRWxlbWVudCkpCisgICAgICAgICAgICBpZiAoIWZhc3RDaGVja1Np
bmdsZVNlbGVjdG9yPGNoZWNrVGFnVmFsdWUsIGZhbHNlPihzZWxlY3RvciwgZWxlbWVudCwgc2Nv
cGUsIHRvcENoaWxkT3JTdWJzZWxlY3RvciwgdG9wQ2hpbGRPclN1YnNlbGVjdG9yTWF0Y2hFbGVt
ZW50KSkKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6U2V0OgogICAgICAgICBjYXNlIENTU1NlbGVjdG9y
OjpFeGFjdDoKLSAgICAgICAgICAgIGlmICghZmFzdENoZWNrU2luZ2xlU2VsZWN0b3I8Y2hlY2tF
eGFjdEF0dHJpYnV0ZVZhbHVlLCB0cnVlPihzZWxlY3RvciwgZWxlbWVudCwgdG9wQ2hpbGRPclN1
YnNlbGVjdG9yLCB0b3BDaGlsZE9yU3Vic2VsZWN0b3JNYXRjaEVsZW1lbnQpKQorICAgICAgICAg
ICAgaWYgKCFmYXN0Q2hlY2tTaW5nbGVTZWxlY3RvcjxjaGVja0V4YWN0QXR0cmlidXRlVmFsdWUs
IHRydWU+KHNlbGVjdG9yLCBlbGVtZW50LCBzY29wZSwgdG9wQ2hpbGRPclN1YnNlbGVjdG9yLCB0
b3BDaGlsZE9yU3Vic2VsZWN0b3JNYXRjaEVsZW1lbnQpKQogICAgICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBkZWZhdWx0OgpAQCAtNDI1LDcg
KzQzMSwxNSBAQCBib29sIFNlbGVjdG9yQ2hlY2tlcjo6aXNGYXN0Q2hlY2thYmxlU2VsZWN0b3Io
Y29uc3QgQ1NTU2VsZWN0b3IqIHNlbGVjdG9yKQogLy8gKiBTZWxlY3Rvck1hdGNoZXMgICAgICAg
ICAtIHRoZSBzZWxlY3RvciBtYXRjaGVzIHRoZSBlbGVtZW50IGUKIC8vICogU2VsZWN0b3JGYWls
c0xvY2FsbHkgICAgLSB0aGUgc2VsZWN0b3IgZmFpbHMgZm9yIHRoZSBlbGVtZW50IGUKIC8vICog
U2VsZWN0b3JGYWlsc0NvbXBsZXRlbHkgLSB0aGUgc2VsZWN0b3IgZmFpbHMgZm9yIGUgYW5kIGFu
eSBzaWJsaW5nIG9yIGFuY2VzdG9yIG9mIGUKLVNlbGVjdG9yQ2hlY2tlcjo6U2VsZWN0b3JNYXRj
aCBTZWxlY3RvckNoZWNrZXI6OmNoZWNrU2VsZWN0b3IoQ1NTU2VsZWN0b3IqIHNlbCwgRWxlbWVu
dCogZSwgUHNldWRvSWQmIGR5bmFtaWNQc2V1ZG8sIGJvb2wgaXNTdWJTZWxlY3RvciwgVmlzaXRl
ZE1hdGNoVHlwZSB2aXNpdGVkTWF0Y2hUeXBlLCBSZW5kZXJTdHlsZSogZWxlbWVudFN0eWxlLCBS
ZW5kZXJTdHlsZSogZWxlbWVudFBhcmVudFN0eWxlKSBjb25zdAorU2VsZWN0b3JDaGVja2VyOjpT
ZWxlY3Rvck1hdGNoIFNlbGVjdG9yQ2hlY2tlcjo6Y2hlY2tTZWxlY3RvcigKKyAgICBDU1NTZWxl
Y3Rvciogc2VsLAorICAgIEVsZW1lbnQqIGUsCisgICAgY29uc3QgRWxlbWVudCogc2NvcGUsCisg
ICAgUHNldWRvSWQmIGR5bmFtaWNQc2V1ZG8sCisgICAgYm9vbCBpc1N1YlNlbGVjdG9yLAorICAg
IFZpc2l0ZWRNYXRjaFR5cGUgdmlzaXRlZE1hdGNoVHlwZSwKKyAgICBSZW5kZXJTdHlsZSogZWxl
bWVudFN0eWxlLAorICAgIFJlbmRlclN0eWxlKiBlbGVtZW50UGFyZW50U3R5bGUpIGNvbnN0CiB7
CiAjaWYgRU5BQkxFKFNWRykKICAgICAvLyBTcGVjOiBDU1MyIHNlbGVjdG9ycyBjYW5ub3QgYmUg
YXBwbGllZCB0byB0aGUgKGNvbmNlcHR1YWxseSkgY2xvbmVkIERPTSB0cmVlCkBAIC00MzUsNyAr
NDQ5LDcgQEAgU2VsZWN0b3JDaGVja2VyOjpTZWxlY3Rvck1hdGNoIFNlbGVjdG9yQ2hlY2tlcjo6
Y2hlY2tTZWxlY3RvcihDU1NTZWxlY3Rvciogc2VsLAogI2VuZGlmCiAKICAgICAvLyBmaXJzdCBz
ZWxlY3RvciBoYXMgdG8gbWF0Y2gKLSAgICBpZiAoIWNoZWNrT25lU2VsZWN0b3Ioc2VsLCBlLCBk
eW5hbWljUHNldWRvLCBpc1N1YlNlbGVjdG9yLCB2aXNpdGVkTWF0Y2hUeXBlLCBlbGVtZW50U3R5
bGUsIGVsZW1lbnRQYXJlbnRTdHlsZSkpCisgICAgaWYgKCFjaGVja09uZVNlbGVjdG9yKHNlbCwg
ZSwgc2NvcGUsIGR5bmFtaWNQc2V1ZG8sIGlzU3ViU2VsZWN0b3IsIHZpc2l0ZWRNYXRjaFR5cGUs
IGVsZW1lbnRTdHlsZSwgZWxlbWVudFBhcmVudFN0eWxlKSkKICAgICAgICAgcmV0dXJuIFNlbGVj
dG9yRmFpbHNMb2NhbGx5OwogICAgIAogICAgIC8vIFRoZSByZXN0IG9mIHRoZSBzZWxlY3RvcnMg
aGFzIHRvIG1hdGNoCkBAIC00NjMsNyArNDc3LDcgQEAgU2VsZWN0b3JDaGVja2VyOjpTZWxlY3Rv
ck1hdGNoIFNlbGVjdG9yQ2hlY2tlcjo6Y2hlY2tTZWxlY3RvcihDU1NTZWxlY3Rvciogc2VsLAog
ICAgICAgICAgICAgaWYgKCFuIHx8ICFuLT5pc0VsZW1lbnROb2RlKCkpCiAgICAgICAgICAgICAg
ICAgcmV0dXJuIFNlbGVjdG9yRmFpbHNDb21wbGV0ZWx5OwogICAgICAgICAgICAgZSA9IHN0YXRp
Y19jYXN0PEVsZW1lbnQqPihuKTsKLSAgICAgICAgICAgIFNlbGVjdG9yTWF0Y2ggbWF0Y2ggPSBj
aGVja1NlbGVjdG9yKHNlbCwgZSwgZHluYW1pY1BzZXVkbywgZmFsc2UsIHZpc2l0ZWRNYXRjaFR5
cGUpOworICAgICAgICAgICAgU2VsZWN0b3JNYXRjaCBtYXRjaCA9IGNoZWNrU2VsZWN0b3Ioc2Vs
LCBlLCBzY29wZSwgZHluYW1pY1BzZXVkbywgZmFsc2UsIHZpc2l0ZWRNYXRjaFR5cGUpOwogICAg
ICAgICAgICAgaWYgKG1hdGNoICE9IFNlbGVjdG9yRmFpbHNMb2NhbGx5KQogICAgICAgICAgICAg
ICAgIHJldHVybiBtYXRjaDsKICAgICAgICAgfQpAQCAtNDc0LDcgKzQ4OCw3IEBAIFNlbGVjdG9y
Q2hlY2tlcjo6U2VsZWN0b3JNYXRjaCBTZWxlY3RvckNoZWNrZXI6OmNoZWNrU2VsZWN0b3IoQ1NT
U2VsZWN0b3IqIHNlbCwKICAgICAgICAgICAgIGlmICghbiB8fCAhbi0+aXNFbGVtZW50Tm9kZSgp
KQogICAgICAgICAgICAgICAgIHJldHVybiBTZWxlY3RvckZhaWxzQ29tcGxldGVseTsKICAgICAg
ICAgICAgIGUgPSBzdGF0aWNfY2FzdDxFbGVtZW50Kj4obik7Ci0gICAgICAgICAgICByZXR1cm4g
Y2hlY2tTZWxlY3RvcihzZWwsIGUsIGR5bmFtaWNQc2V1ZG8sIGZhbHNlLCB2aXNpdGVkTWF0Y2hU
eXBlKTsKKyAgICAgICAgICAgIHJldHVybiBjaGVja1NlbGVjdG9yKHNlbCwgZSwgc2NvcGUsIGR5
bmFtaWNQc2V1ZG8sIGZhbHNlLCB2aXNpdGVkTWF0Y2hUeXBlKTsKICAgICAgICAgfQogICAgIGNh
c2UgQ1NTU2VsZWN0b3I6OkRpcmVjdEFkamFjZW50OgogICAgICAgICB7CkBAIC00ODksNyArNTAz
LDcgQEAgU2VsZWN0b3JDaGVja2VyOjpTZWxlY3Rvck1hdGNoIFNlbGVjdG9yQ2hlY2tlcjo6Y2hl
Y2tTZWxlY3RvcihDU1NTZWxlY3Rvciogc2VsLAogICAgICAgICAgICAgaWYgKCFuKQogICAgICAg
ICAgICAgICAgIHJldHVybiBTZWxlY3RvckZhaWxzTG9jYWxseTsKICAgICAgICAgICAgIGUgPSBz
dGF0aWNfY2FzdDxFbGVtZW50Kj4obik7Ci0gICAgICAgICAgICByZXR1cm4gY2hlY2tTZWxlY3Rv
cihzZWwsIGUsIGR5bmFtaWNQc2V1ZG8sIGZhbHNlLCB2aXNpdGVkTWF0Y2hUeXBlKTsKKyAgICAg
ICAgICAgIHJldHVybiBjaGVja1NlbGVjdG9yKHNlbCwgZSwgc2NvcGUsIGR5bmFtaWNQc2V1ZG8s
IGZhbHNlLCB2aXNpdGVkTWF0Y2hUeXBlKTsKICAgICAgICAgfQogICAgIGNhc2UgQ1NTU2VsZWN0
b3I6OkluZGlyZWN0QWRqYWNlbnQ6CiAgICAgICAgIGlmICghbV9pc0NvbGxlY3RpbmdSdWxlc09u
bHkgJiYgZS0+cGFyZW50Tm9kZSgpICYmIGUtPnBhcmVudE5vZGUoKS0+aXNFbGVtZW50Tm9kZSgp
KSB7CkBAIC01MDQsNyArNTE4LDcgQEAgU2VsZWN0b3JDaGVja2VyOjpTZWxlY3Rvck1hdGNoIFNl
bGVjdG9yQ2hlY2tlcjo6Y2hlY2tTZWxlY3RvcihDU1NTZWxlY3Rvciogc2VsLAogICAgICAgICAg
ICAgaWYgKCFuKQogICAgICAgICAgICAgICAgIHJldHVybiBTZWxlY3RvckZhaWxzTG9jYWxseTsK
ICAgICAgICAgICAgIGUgPSBzdGF0aWNfY2FzdDxFbGVtZW50Kj4obik7Ci0gICAgICAgICAgICBT
ZWxlY3Rvck1hdGNoIG1hdGNoID0gY2hlY2tTZWxlY3RvcihzZWwsIGUsIGR5bmFtaWNQc2V1ZG8s
IGZhbHNlLCB2aXNpdGVkTWF0Y2hUeXBlKTsKKyAgICAgICAgICAgIFNlbGVjdG9yTWF0Y2ggbWF0
Y2ggPSBjaGVja1NlbGVjdG9yKHNlbCwgZSwgc2NvcGUsIGR5bmFtaWNQc2V1ZG8sIGZhbHNlLCB2
aXNpdGVkTWF0Y2hUeXBlKTsKICAgICAgICAgICAgIGlmIChtYXRjaCAhPSBTZWxlY3RvckZhaWxz
TG9jYWxseSkKICAgICAgICAgICAgICAgICByZXR1cm4gbWF0Y2g7CiAgICAgICAgIH07CkBAIC01
MTYsMTQgKzUzMCwxNCBAQCBTZWxlY3RvckNoZWNrZXI6OlNlbGVjdG9yTWF0Y2ggU2VsZWN0b3JD
aGVja2VyOjpjaGVja1NlbGVjdG9yKENTU1NlbGVjdG9yKiBzZWwsCiAgICAgICAgIGlmICgoZWxl
bWVudFN0eWxlIHx8IG1faXNDb2xsZWN0aW5nUnVsZXNPbmx5KSAmJiBkeW5hbWljUHNldWRvICE9
IE5PUFNFVURPICYmIGR5bmFtaWNQc2V1ZG8gIT0gU0VMRUNUSU9OCiAgICAgICAgICAgICAgJiYg
ISgoUmVuZGVyU2Nyb2xsYmFyOjpzY3JvbGxiYXJGb3JTdHlsZVJlc29sdmUoKSB8fCBkeW5hbWlj
UHNldWRvID09IFNDUk9MTEJBUl9DT1JORVIgfHwgZHluYW1pY1BzZXVkbyA9PSBSRVNJWkVSKSAm
JiBzZWwtPm1fbWF0Y2ggPT0gQ1NTU2VsZWN0b3I6OlBzZXVkb0NsYXNzKSkKICAgICAgICAgICAg
IHJldHVybiBTZWxlY3RvckZhaWxzQ29tcGxldGVseTsKLSAgICAgICAgcmV0dXJuIGNoZWNrU2Vs
ZWN0b3Ioc2VsLCBlLCBkeW5hbWljUHNldWRvLCB0cnVlLCB2aXNpdGVkTWF0Y2hUeXBlLCBlbGVt
ZW50U3R5bGUsIGVsZW1lbnRQYXJlbnRTdHlsZSk7CisgICAgICAgIHJldHVybiBjaGVja1NlbGVj
dG9yKHNlbCwgZSwgc2NvcGUsIGR5bmFtaWNQc2V1ZG8sIHRydWUsIHZpc2l0ZWRNYXRjaFR5cGUs
IGVsZW1lbnRTdHlsZSwgZWxlbWVudFBhcmVudFN0eWxlKTsKICAgICBjYXNlIENTU1NlbGVjdG9y
OjpTaGFkb3dEZXNjZW5kYW50OgogICAgICAgICB7CiAgICAgICAgICAgICBOb2RlKiBzaGFkb3dI
b3N0Tm9kZSA9IGUtPnNoYWRvd0FuY2VzdG9yTm9kZSgpOwogICAgICAgICAgICAgaWYgKHNoYWRv
d0hvc3ROb2RlID09IGUgfHwgIXNoYWRvd0hvc3ROb2RlLT5pc0VsZW1lbnROb2RlKCkpCiAgICAg
ICAgICAgICAgICAgcmV0dXJuIFNlbGVjdG9yRmFpbHNDb21wbGV0ZWx5OwogICAgICAgICAgICAg
ZSA9IHN0YXRpY19jYXN0PEVsZW1lbnQqPihzaGFkb3dIb3N0Tm9kZSk7Ci0gICAgICAgICAgICBy
ZXR1cm4gY2hlY2tTZWxlY3RvcihzZWwsIGUsIGR5bmFtaWNQc2V1ZG8sIGZhbHNlLCB2aXNpdGVk
TWF0Y2hUeXBlKTsKKyAgICAgICAgICAgIHJldHVybiBjaGVja1NlbGVjdG9yKHNlbCwgZSwgc2Nv
cGUsIGR5bmFtaWNQc2V1ZG8sIGZhbHNlLCB2aXNpdGVkTWF0Y2hUeXBlKTsKICAgICAgICAgfQog
ICAgIH0KICAgICAKQEAgLTY3NSw3ICs2ODksMTUgQEAgc3RhdGljIGJvb2wgYW55QXR0cmlidXRl
TWF0Y2hlcyhOYW1lZE5vZGVNYXAqIGF0dHJpYnV0ZXMsIENTU1NlbGVjdG9yOjpNYXRjaCBtYXQK
ICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLWJvb2wgU2VsZWN0b3JDaGVja2VyOjpjaGVja09uZVNl
bGVjdG9yKENTU1NlbGVjdG9yKiBzZWwsIEVsZW1lbnQqIGUsIFBzZXVkb0lkJiBkeW5hbWljUHNl
dWRvLCBib29sIGlzU3ViU2VsZWN0b3IsIFZpc2l0ZWRNYXRjaFR5cGUgdmlzaXRlZE1hdGNoVHlw
ZSwgUmVuZGVyU3R5bGUqIGVsZW1lbnRTdHlsZSwgUmVuZGVyU3R5bGUqIGVsZW1lbnRQYXJlbnRT
dHlsZSkgY29uc3QKK2Jvb2wgU2VsZWN0b3JDaGVja2VyOjpjaGVja09uZVNlbGVjdG9yKAorICAg
IENTU1NlbGVjdG9yKiBzZWwsCisgICAgRWxlbWVudCogZSwKKyAgICBjb25zdCBFbGVtZW50KiBz
Y29wZSwKKyAgICBQc2V1ZG9JZCYgZHluYW1pY1BzZXVkbywKKyAgICBib29sIGlzU3ViU2VsZWN0
b3IsCisgICAgVmlzaXRlZE1hdGNoVHlwZSB2aXNpdGVkTWF0Y2hUeXBlLAorICAgIFJlbmRlclN0
eWxlKiBlbGVtZW50U3R5bGUsCisgICAgUmVuZGVyU3R5bGUqIGVsZW1lbnRQYXJlbnRTdHlsZSkg
Y29uc3QKIHsKICAgICBBU1NFUlQoZSk7CiAgICAgaWYgKCFTZWxlY3RvckNoZWNrZXI6OnRhZ01h
dGNoZXMoZSwgc2VsKSkKQEAgLTcxMiw3ICs3MzQsNyBAQCBib29sIFNlbGVjdG9yQ2hlY2tlcjo6
Y2hlY2tPbmVTZWxlY3RvcihDU1NTZWxlY3Rvciogc2VsLCBFbGVtZW50KiBlLCBQc2V1ZG9JZCYg
ZAogICAgICAgICAgICAgICAgIC8vIFdlIHNlbGVjdCBiZXR3ZWVuIDp2aXNpdGVkIGFuZCA6bGlu
ayB3aGVuIGFwcGx5aW5nLiBXZSBkb24ndCBrbm93IHdoaWNoIG9uZSBhcHBsaWVkIChvciBub3Qp
IHlldC4KICAgICAgICAgICAgICAgICBpZiAoc3ViU2VsLT5wc2V1ZG9UeXBlKCkgPT0gQ1NTU2Vs
ZWN0b3I6OlBzZXVkb1Zpc2l0ZWQgfHwgKHN1YlNlbC0+cHNldWRvVHlwZSgpID09IENTU1NlbGVj
dG9yOjpQc2V1ZG9MaW5rICYmIHZpc2l0ZWRNYXRjaFR5cGUgPT0gVmlzaXRlZE1hdGNoRW5hYmxl
ZCkpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAgICAgICAgIGlm
ICghY2hlY2tPbmVTZWxlY3RvcihzdWJTZWwsIGUsIGR5bmFtaWNQc2V1ZG8sIHRydWUsIHZpc2l0
ZWRNYXRjaFR5cGUsIGVsZW1lbnRTdHlsZSwgZWxlbWVudFBhcmVudFN0eWxlKSkKKyAgICAgICAg
ICAgICAgICBpZiAoIWNoZWNrT25lU2VsZWN0b3Ioc3ViU2VsLCBlLCBzY29wZSwgZHluYW1pY1Bz
ZXVkbywgdHJ1ZSwgdmlzaXRlZE1hdGNoVHlwZSwgZWxlbWVudFN0eWxlLCBlbGVtZW50UGFyZW50
U3R5bGUpKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgIH0K
ICAgICAgICAgfSBlbHNlIGlmIChkeW5hbWljUHNldWRvICE9IE5PUFNFVURPICYmIChSZW5kZXJT
Y3JvbGxiYXI6OnNjcm9sbGJhckZvclN0eWxlUmVzb2x2ZSgpIHx8IGR5bmFtaWNQc2V1ZG8gPT0g
U0NST0xMQkFSX0NPUk5FUiB8fCBkeW5hbWljUHNldWRvID09IFJFU0laRVIpKSB7CkBAIC0xMDEz
LDcgKzEwMzUsNyBAQCBib29sIFNlbGVjdG9yQ2hlY2tlcjo6Y2hlY2tPbmVTZWxlY3RvcihDU1NT
ZWxlY3Rvciogc2VsLCBFbGVtZW50KiBlLCBQc2V1ZG9JZCYgZAogICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0FueToKICAgICAgICAgICAgIGZvciAo
Q1NTU2VsZWN0b3IqIHNlbGVjdG9yID0gc2VsLT5zZWxlY3Rvckxpc3QoKS0+Zmlyc3QoKTsgc2Vs
ZWN0b3I7IHNlbGVjdG9yID0gQ1NTU2VsZWN0b3JMaXN0OjpuZXh0KHNlbGVjdG9yKSkgewotICAg
ICAgICAgICAgICAgIGlmIChjaGVja1NlbGVjdG9yKHNlbGVjdG9yLCBlLCBkeW5hbWljUHNldWRv
LCB0cnVlLCB2aXNpdGVkTWF0Y2hUeXBlLCBlbGVtZW50U3R5bGUsIGVsZW1lbnRQYXJlbnRTdHls
ZSkgPT0gU2VsZWN0b3JNYXRjaGVzKQorICAgICAgICAgICAgICAgIGlmIChjaGVja1NlbGVjdG9y
KHNlbGVjdG9yLCBlLCBzY29wZSwgZHluYW1pY1BzZXVkbywgdHJ1ZSwgdmlzaXRlZE1hdGNoVHlw
ZSwgZWxlbWVudFN0eWxlLCBlbGVtZW50UGFyZW50U3R5bGUpID09IFNlbGVjdG9yTWF0Y2hlcykK
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICBicmVhazsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9TZWxlY3RvckNoZWNr
ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TZWxlY3RvckNoZWNrZXIuaAppbmRleCBmNTliNzRh
Li5jN2Y4YmU1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU2VsZWN0b3JDaGVja2Vy
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL1NlbGVjdG9yQ2hlY2tlci5oCkBAIC01MSwxMCAr
NTEsMTEgQEAgcHVibGljOgogCiAgICAgZW51bSBTZWxlY3Rvck1hdGNoIHsgU2VsZWN0b3JNYXRj
aGVzLCBTZWxlY3RvckZhaWxzTG9jYWxseSwgU2VsZWN0b3JGYWlsc0NvbXBsZXRlbHkgfTsKICAg
ICBlbnVtIFZpc2l0ZWRNYXRjaFR5cGUgeyBWaXNpdGVkTWF0Y2hEaXNhYmxlZCwgVmlzaXRlZE1h
dGNoRW5hYmxlZCB9OwotICAgIGJvb2wgY2hlY2tTZWxlY3RvcihDU1NTZWxlY3RvciosIEVsZW1l
bnQqLCBib29sIGlzRmFzdENoZWNrYWJsZVNlbGVjdG9yID0gZmFsc2UpIGNvbnN0OwotICAgIFNl
bGVjdG9yTWF0Y2ggY2hlY2tTZWxlY3RvcihDU1NTZWxlY3RvciosIEVsZW1lbnQqLCBQc2V1ZG9J
ZCYgZHluYW1pY1BzZXVkbywgYm9vbCBpc1N1YlNlbGVjdG9yLCBWaXNpdGVkTWF0Y2hUeXBlLCBS
ZW5kZXJTdHlsZSogPSAwLCBSZW5kZXJTdHlsZSogZWxlbWVudFBhcmVudFN0eWxlID0gMCkgY29u
c3Q7CisKKyAgICBib29sIGNoZWNrU2VsZWN0b3IoQ1NTU2VsZWN0b3IqLCBFbGVtZW50KiwgY29u
c3QgRWxlbWVudCogc2NvcGUsIGJvb2wgaXNGYXN0Q2hlY2thYmxlU2VsZWN0b3IgPSBmYWxzZSkg
Y29uc3Q7CisgICAgU2VsZWN0b3JNYXRjaCBjaGVja1NlbGVjdG9yKENTU1NlbGVjdG9yKiwgRWxl
bWVudCosIGNvbnN0IEVsZW1lbnQqIHNjb3BlLCBQc2V1ZG9JZCYgZHluYW1pY1BzZXVkbywgYm9v
bCBpc1N1YlNlbGVjdG9yLCBWaXNpdGVkTWF0Y2hUeXBlLCBSZW5kZXJTdHlsZSogPSAwLCBSZW5k
ZXJTdHlsZSogZWxlbWVudFBhcmVudFN0eWxlID0gMCkgY29uc3Q7CiAgICAgc3RhdGljIGJvb2wg
aXNGYXN0Q2hlY2thYmxlU2VsZWN0b3IoY29uc3QgQ1NTU2VsZWN0b3IqKTsKLSAgICBib29sIGZh
c3RDaGVja1NlbGVjdG9yKGNvbnN0IENTU1NlbGVjdG9yKiwgY29uc3QgRWxlbWVudCopIGNvbnN0
OworICAgIGJvb2wgZmFzdENoZWNrU2VsZWN0b3IoY29uc3QgQ1NTU2VsZWN0b3IqLCBjb25zdCBF
bGVtZW50KiwgY29uc3QgRWxlbWVudCogc2NvcGUpIGNvbnN0OwogCiAgICAgdGVtcGxhdGUgPHVu
c2lnbmVkIG1heGltdW1JZGVudGlmaWVyQ291bnQ+CiAgICAgaW5saW5lIGJvb2wgZmFzdFJlamVj
dFNlbGVjdG9yKGNvbnN0IHVuc2lnbmVkKiBpZGVudGlmaWVySGFzaGVzKSBjb25zdDsKQEAgLTYy
LDcgKzYzLDcgQEAgcHVibGljOgogCiAgICAgdm9pZCBwdXNoUGFyZW50KEVsZW1lbnQqIHBhcmVu
dCk7CiAgICAgdm9pZCBwb3BQYXJlbnQoRWxlbWVudCogcGFyZW50KTsKLSAgICBib29sIHBhcmVu
dFN0YWNrSXNDb25zaXN0ZW50KENvbnRhaW5lck5vZGUqIHBhcmVudE5vZGUpIGNvbnN0IHsgcmV0
dXJuICFtX3BhcmVudFN0YWNrLmlzRW1wdHkoKSAmJiBtX3BhcmVudFN0YWNrLmxhc3QoKS5lbGVt
ZW50ID09IHBhcmVudE5vZGU7IH0KKyAgICBib29sIHBhcmVudFN0YWNrSXNDb25zaXN0ZW50KGNv
bnN0IENvbnRhaW5lck5vZGUqIHBhcmVudE5vZGUpIGNvbnN0IHsgcmV0dXJuICFtX3BhcmVudFN0
YWNrLmlzRW1wdHkoKSAmJiBtX3BhcmVudFN0YWNrLmxhc3QoKS5lbGVtZW50ID09IHBhcmVudE5v
ZGU7IH0KIAogICAgIEVJbnNpZGVMaW5rIGRldGVybWluZUxpbmtTdGF0ZShFbGVtZW50KikgY29u
c3Q7CiAgICAgdm9pZCBhbGxWaXNpdGVkU3RhdGVDaGFuZ2VkKCk7CkBAIC05MCw4ICs5MSwxMyBA
QCBwdWJsaWM6CiAgICAgZW51bSBMaW5rTWF0Y2hNYXNrIHsgTWF0Y2hMaW5rID0gMSwgTWF0Y2hW
aXNpdGVkID0gMiwgTWF0Y2hBbGwgPSBNYXRjaExpbmsgfCBNYXRjaFZpc2l0ZWQgfTsKICAgICBz
dGF0aWMgdW5zaWduZWQgZGV0ZXJtaW5lTGlua01hdGNoVHlwZShjb25zdCBDU1NTZWxlY3Rvciop
OwogCisgICAgLy8gVGhlIGZvbGxvd2luZyBtZXRob2RzIHdvcmsgb25seSB3aXRoIGEgY29uc2lz
dGVudCBQYXJlbnRTdGFja0ZyYW1lIHZlY3RvcgorICAgIEVsZW1lbnQqIGdldEVsZW1lbnRXaXRo
SW5kZXgoaW50IGluZGV4KSBjb25zdDsgLy8gSW5kZXggZWxlbWVudHMsIHdpdGggdGhlIHJvb3Qg
ZWxlbWVudCBzdGFydGluZyBhdCAwLgorICAgIGludCBnZXRJbm5lcm1vc3RTdHlsZVNjb3BlRWxl
bWVudEluZGV4KCkgY29uc3Q7IC8vIFJldHVybiB0aGUgaW5kZXggb2YgdGhlIGVsZW1lbnQgdGhh
dCBjb250YWlucyB0aGUgY2xvc2VzdCA8c3R5bGUgc2NvcGVkPgorICAgIGludCBnZXRFbmNsb3Np
bmdTdHlsZVNjb3BlRWxlbWVudEluZGV4KGludCBpbmRleCk7IC8vIFJldHVybiB0aGUgaW5kZXgg
b2YgdGhlIGNsb3Nlc3QgYW5jZXN0b3IgKCEpIGVsZW1lbnQgdGhhdCBjb250YWlucyA8c3R5bGUg
c2NvcGVkPiwgc3RhcnRpbmcgZnJvbSB0aGUgZ2l2ZW4gaW5kZXgKKwogcHJpdmF0ZToKLSAgICBi
b29sIGNoZWNrT25lU2VsZWN0b3IoQ1NTU2VsZWN0b3IqLCBFbGVtZW50KiwgUHNldWRvSWQmIGR5
bmFtaWNQc2V1ZG8sIGJvb2wgaXNTdWJTZWxlY3RvciwgVmlzaXRlZE1hdGNoVHlwZSwgUmVuZGVy
U3R5bGUqLCBSZW5kZXJTdHlsZSogZWxlbWVudFBhcmVudFN0eWxlKSBjb25zdDsKKyAgICBib29s
IGNoZWNrT25lU2VsZWN0b3IoQ1NTU2VsZWN0b3IqLCBFbGVtZW50KiwgY29uc3QgRWxlbWVudCog
c2NvcGUsIFBzZXVkb0lkJiBkeW5hbWljUHNldWRvLCBib29sIGlzU3ViU2VsZWN0b3IsIFZpc2l0
ZWRNYXRjaFR5cGUsIFJlbmRlclN0eWxlKiwgUmVuZGVyU3R5bGUqIGVsZW1lbnRQYXJlbnRTdHls
ZSkgY29uc3Q7CiAgICAgYm9vbCBjaGVja1Njcm9sbGJhclBzZXVkb0NsYXNzKENTU1NlbGVjdG9y
KiwgUHNldWRvSWQmIGR5bmFtaWNQc2V1ZG8pIGNvbnN0OwogICAgIHN0YXRpYyBib29sIGlzRnJh
bWVGb2N1c2VkKGNvbnN0IEVsZW1lbnQqKTsKICAgICAKQEAgLTExMiw5ICsxMTgsOSBAQCBwcml2
YXRlOgogICAgIG11dGFibGUgSGFzaFNldDxMaW5rSGFzaCwgTGlua0hhc2hIYXNoPiBtX2xpbmtz
Q2hlY2tlZEZvclZpc2l0ZWRTdGF0ZTsKIAogICAgIHN0cnVjdCBQYXJlbnRTdGFja0ZyYW1lIHsK
LSAgICAgICAgUGFyZW50U3RhY2tGcmFtZSgpIHsgfQotICAgICAgICBQYXJlbnRTdGFja0ZyYW1l
KEVsZW1lbnQqIGVsZW1lbnQpIDogZWxlbWVudChlbGVtZW50KSB7IH0KLSAgICAgICAgRWxlbWVu
dCogZWxlbWVudDsKKyAgICAgICAgUGFyZW50U3RhY2tGcmFtZShFbGVtZW50KiBlbGVtZW50LCBz
aXplX3Qgc3R5bGVTY29wZUZyYW1lSW5kZXgpIDogZWxlbWVudChlbGVtZW50KSwgY2xvc2VzdFN0
eWxlU2NvcGVGcmFtZUluZGV4KHN0eWxlU2NvcGVGcmFtZUluZGV4KSB7IH0KKyAgICAgICAgRWxl
bWVudCogY29uc3QgZWxlbWVudDsKKyAgICAgICAgY29uc3QgaW50IGNsb3Nlc3RTdHlsZVNjb3Bl
RnJhbWVJbmRleDsgLy8gaW5kZXggb2YgY2xvc2VzdCBQYXJlbnRTdGFja0ZyYW1lIHRoYXQgcG9p
bnRzIHRvIGFuIGVsZW1lbnQgdGhhdCBpcyBhIHN0eWxlIHNjb3BlIChtYXkgYmUgdGhpcyksIG9y
IC0xCiAgICAgICAgIFZlY3Rvcjx1bnNpZ25lZCwgND4gaWRlbnRpZmllckhhc2hlczsKICAgICB9
OwogICAgIFZlY3RvcjxQYXJlbnRTdGFja0ZyYW1lPiBtX3BhcmVudFN0YWNrOwpAQCAtMjAwLDYg
KzIwNiwyNCBAQCBpbmxpbmUgYm9vbCBTZWxlY3RvckNoZWNrZXI6OmZhc3RDaGVja1JpZ2h0bW9z
dEF0dHJpYnV0ZVNlbGVjdG9yKGNvbnN0IEVsZW1lbnQqCiAgICAgcmV0dXJuIHRydWU7CiB9CiAK
K2lubGluZSBFbGVtZW50KiBTZWxlY3RvckNoZWNrZXI6OmdldEVsZW1lbnRXaXRoSW5kZXgoaW50
IGluZGV4KSBjb25zdAoreworICAgIEFTU0VSVChpbmRleCA+PSAwKTsKKyAgICByZXR1cm4gbV9w
YXJlbnRTdGFjay5hdChpbmRleCkuZWxlbWVudDsKK30KKworaW5saW5lIGludCBTZWxlY3RvckNo
ZWNrZXI6OmdldElubmVybW9zdFN0eWxlU2NvcGVFbGVtZW50SW5kZXgoKSBjb25zdAoreworICAg
IHJldHVybiBtX3BhcmVudFN0YWNrLmlzRW1wdHkoKSA/IC0xIDogbV9wYXJlbnRTdGFjay5sYXN0
KCkuY2xvc2VzdFN0eWxlU2NvcGVGcmFtZUluZGV4OworfQorCitpbmxpbmUgaW50IFNlbGVjdG9y
Q2hlY2tlcjo6Z2V0RW5jbG9zaW5nU3R5bGVTY29wZUVsZW1lbnRJbmRleChpbnQgaW5kZXgpCit7
CisgICAgQVNTRVJUKHN0YXRpY19jYXN0PGludD4obV9wYXJlbnRTdGFjay5zaXplKCkpID49IGlu
ZGV4KTsKKyAgICByZXR1cm4gaW5kZXggPiAwID8gbV9wYXJlbnRTdGFjay5hdChpbmRleCAtIDEp
LmNsb3Nlc3RTdHlsZVNjb3BlRnJhbWVJbmRleCA6IC0xOworfQorCisKIH0KIAogI2VuZGlmCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vU2VsZWN0b3JRdWVyeS5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9kb20vU2VsZWN0b3JRdWVyeS5jcHAKaW5kZXggNWRmZjAzYy4uNzVlMmU1ZSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL1NlbGVjdG9yUXVlcnkuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2RvbS9TZWxlY3RvclF1ZXJ5LmNwcApAQCAtNDEsMTcgKzQxLDE3IEBAIFNlbGVj
dG9yUXVlcnk6OlNlbGVjdG9yUXVlcnkoTm9kZSogcm9vdE5vZGUsIGNvbnN0IENTU1NlbGVjdG9y
TGlzdCYgc2VsZWN0b3JMaXN0CiAgICAgICAgIG1fc2VsZWN0b3JzLmFwcGVuZChTZWxlY3RvckRh
dGEoc2VsZWN0b3IsIFNlbGVjdG9yQ2hlY2tlcjo6aXNGYXN0Q2hlY2thYmxlU2VsZWN0b3Ioc2Vs
ZWN0b3IpKSk7CiB9CiAgICAgCi1QYXNzUmVmUHRyPE5vZGVMaXN0PiBTZWxlY3RvclF1ZXJ5Ojpx
dWVyeUFsbCgpIGNvbnN0CitQYXNzUmVmUHRyPE5vZGVMaXN0PiBTZWxlY3RvclF1ZXJ5OjpxdWVy
eUFsbChjb25zdCBFbGVtZW50KiBzY29wZSkgY29uc3QKIHsKICAgICBWZWN0b3I8UmVmUHRyPE5v
ZGU+ID4gcmVzdWx0OwotICAgIGV4ZWN1dGU8ZmFsc2U+KHJlc3VsdCk7CisgICAgZXhlY3V0ZTxm
YWxzZT4oc2NvcGUsIHJlc3VsdCk7CiAgICAgcmV0dXJuIFN0YXRpY05vZGVMaXN0OjphZG9wdChy
ZXN1bHQpOwogfQogCi1QYXNzUmVmUHRyPEVsZW1lbnQ+IFNlbGVjdG9yUXVlcnk6OnF1ZXJ5Rmly
c3QoKSBjb25zdCAKK1Bhc3NSZWZQdHI8RWxlbWVudD4gU2VsZWN0b3JRdWVyeTo6cXVlcnlGaXJz
dChjb25zdCBFbGVtZW50KiBzY29wZSkgY29uc3QgCiB7IAogICAgIFZlY3RvcjxSZWZQdHI8Tm9k
ZT4gPiByZXN1bHQ7Ci0gICAgZXhlY3V0ZTx0cnVlPihyZXN1bHQpOworICAgIGV4ZWN1dGU8dHJ1
ZT4oc2NvcGUsIHJlc3VsdCk7CiAgICAgaWYgKHJlc3VsdC5pc0VtcHR5KCkpCiAgICAgICAgIHJl
dHVybiAwOwogICAgIEFTU0VSVChyZXN1bHQuc2l6ZSgpID09IDEpOwpAQCAtNzcsNyArNzcsNyBA
QCBib29sIFNlbGVjdG9yUXVlcnk6OmNhblVzZUlkTG9va3VwKCkgY29uc3QKIH0KIAogdGVtcGxh
dGUgPGJvb2wgZmlyc3RNYXRjaE9ubHk+Ci12b2lkIFNlbGVjdG9yUXVlcnk6OmV4ZWN1dGUoVmVj
dG9yPFJlZlB0cjxOb2RlPiA+JiBtYXRjaGVkRWxlbWVudHMpIGNvbnN0Cit2b2lkIFNlbGVjdG9y
UXVlcnk6OmV4ZWN1dGUoY29uc3QgRWxlbWVudCogc2NvcGUsIFZlY3RvcjxSZWZQdHI8Tm9kZT4g
PiYgbWF0Y2hlZEVsZW1lbnRzKSBjb25zdAogewogICAgIGlmIChjYW5Vc2VJZExvb2t1cCgpKSB7
CiAgICAgICAgIEFTU0VSVChtX3NlbGVjdG9ycy5zaXplKCkgPT0gMSk7CkBAIC04NSw3ICs4NSw3
IEBAIHZvaWQgU2VsZWN0b3JRdWVyeTo6ZXhlY3V0ZShWZWN0b3I8UmVmUHRyPE5vZGU+ID4mIG1h
dGNoZWRFbGVtZW50cykgY29uc3QKICAgICAgICAgRWxlbWVudCogZWxlbWVudCA9IG1fcm9vdE5v
ZGUtPmRvY3VtZW50KCktPmdldEVsZW1lbnRCeUlkKHNlbGVjdG9yLT52YWx1ZSgpKTsKICAgICAg
ICAgaWYgKCFlbGVtZW50IHx8ICEobV9yb290Tm9kZS0+aXNEb2N1bWVudE5vZGUoKSB8fCBlbGVt
ZW50LT5pc0Rlc2NlbmRhbnRPZihtX3Jvb3ROb2RlKSkpCiAgICAgICAgICAgICByZXR1cm47Ci0g
ICAgICAgIGlmIChtX3NlbGVjdG9yQ2hlY2tlci5jaGVja1NlbGVjdG9yKHNlbGVjdG9yLCBlbGVt
ZW50LCBtX3NlbGVjdG9yc1swXS5pc0Zhc3RDaGVja2FibGUpKQorICAgICAgICBpZiAobV9zZWxl
Y3RvckNoZWNrZXIuY2hlY2tTZWxlY3RvcihzZWxlY3RvciwgZWxlbWVudCwgc2NvcGUsIG1fc2Vs
ZWN0b3JzWzBdLmlzRmFzdENoZWNrYWJsZSkpCiAgICAgICAgICAgICBtYXRjaGVkRWxlbWVudHMu
YXBwZW5kKGVsZW1lbnQpOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtOTcsNyArOTcsNyBA
QCB2b2lkIFNlbGVjdG9yUXVlcnk6OmV4ZWN1dGUoVmVjdG9yPFJlZlB0cjxOb2RlPiA+JiBtYXRj
aGVkRWxlbWVudHMpIGNvbnN0CiAgICAgICAgIGlmIChuLT5pc0VsZW1lbnROb2RlKCkpIHsKICAg
ICAgICAgICAgIEVsZW1lbnQqIGVsZW1lbnQgPSBzdGF0aWNfY2FzdDxFbGVtZW50Kj4obik7CiAg
ICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2VsZWN0b3JDb3VudDsgKytpKSB7
Ci0gICAgICAgICAgICAgICAgaWYgKG1fc2VsZWN0b3JDaGVja2VyLmNoZWNrU2VsZWN0b3IobV9z
ZWxlY3RvcnNbaV0uc2VsZWN0b3IsIGVsZW1lbnQsIG1fc2VsZWN0b3JzW2ldLmlzRmFzdENoZWNr
YWJsZSkpIHsKKyAgICAgICAgICAgICAgICBpZiAobV9zZWxlY3RvckNoZWNrZXIuY2hlY2tTZWxl
Y3RvcihtX3NlbGVjdG9yc1tpXS5zZWxlY3RvciwgZWxlbWVudCwgc2NvcGUsIG1fc2VsZWN0b3Jz
W2ldLmlzRmFzdENoZWNrYWJsZSkpIHsKICAgICAgICAgICAgICAgICAgICAgbWF0Y2hlZEVsZW1l
bnRzLmFwcGVuZChlbGVtZW50KTsKICAgICAgICAgICAgICAgICAgICAgaWYgKGZpcnN0TWF0Y2hP
bmx5KQogICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvZG9tL1NlbGVjdG9yUXVlcnkuaCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9TZWxlY3Rv
clF1ZXJ5LmgKaW5kZXggYjk2OTgyMy4uMjA4M2FjNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvZG9tL1NlbGVjdG9yUXVlcnkuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vU2VsZWN0b3JR
dWVyeS5oCkBAIC00MiwxNCArNDIsMTQgQEAgY2xhc3MgU2VsZWN0b3JRdWVyeSB7CiBwdWJsaWM6
CiAgICAgU2VsZWN0b3JRdWVyeShOb2RlKiByb290Tm9kZSwgY29uc3QgQ1NTU2VsZWN0b3JMaXN0
Jik7CiAgICAgCi0gICAgUGFzc1JlZlB0cjxOb2RlTGlzdD4gcXVlcnlBbGwoKSBjb25zdDsKLSAg
ICBQYXNzUmVmUHRyPEVsZW1lbnQ+IHF1ZXJ5Rmlyc3QoKSBjb25zdDsKKyAgICBQYXNzUmVmUHRy
PE5vZGVMaXN0PiBxdWVyeUFsbChjb25zdCBFbGVtZW50KiBzY29wZSA9IDApIGNvbnN0OworICAg
IFBhc3NSZWZQdHI8RWxlbWVudD4gcXVlcnlGaXJzdChjb25zdCBFbGVtZW50KiBzY29wZSA9IDAp
IGNvbnN0OwogCiBwcml2YXRlOgogICAgIGJvb2wgY2FuVXNlSWRMb29rdXAoKSBjb25zdDsKIAog
ICAgIHRlbXBsYXRlIDxib29sIGZpcnN0TWF0Y2hPbmx5PgotICAgIHZvaWQgZXhlY3V0ZShWZWN0
b3I8UmVmUHRyPE5vZGU+ID4mKSBjb25zdDsKKyAgICB2b2lkIGV4ZWN1dGUoY29uc3QgRWxlbWVu
dCogc2NvcGUsIFZlY3RvcjxSZWZQdHI8Tm9kZT4gPiYpIGNvbnN0OwogICAgIAogICAgIHN0cnVj
dCBTZWxlY3RvckRhdGEgewogICAgICAgICBTZWxlY3RvckRhdGEoQ1NTU2VsZWN0b3IqIHNlbGVj
dG9yLCBib29sIGlzRmFzdENoZWNrYWJsZSkgOiBzZWxlY3RvcihzZWxlY3RvciksIGlzRmFzdENo
ZWNrYWJsZShpc0Zhc3RDaGVja2FibGUpIHsgfQo=
</data>
<flag name="commit-queue"
          id="109001"
          type_id="3"
          status="-"
          setter="rolandsteiner"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>115342</attachid>
            <date>2011-11-16 00:25:30 -0800</date>
            <delta_ts>2011-11-21 20:56:12 -0800</delta_ts>
            <desc>updated patch</desc>
            <filename>scoped-match.patch</filename>
            <type>text/plain</type>
            <size>77270</size>
            <attacher name="Roland Steiner">rolandsteiner</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCA3NjI5OGZiLi44NjJjMDMwIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDUgKzEsMjggQEAKIDIwMTEtMTEt
MTYgIFJvbGFuZCBTdGVpbmVyICA8cm9sYW5kc3RlaW5lckBjaHJvbWl1bS5vcmc+CiAKKyAgICAg
ICAgQnVnIDY3NzIwIC0gPHN0eWxlIHNjb3BlZD46IEltcGxlbWVudCBzZWxlY3RvciBtYXRjaGlu
ZworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Njc3MjAK
KworICAgICAgICBUZXN0IHRoYXQgPHN0eWxlIHNjb3BlZD4gYWZmZWN0cyBzdHlsZXMgYW5kIGlz
IHVwZGF0ZWQgY29ycmVjdGx5OgorICAgICAgICAtKSBiYXNpYyB0ZXN0CisgICAgICAgIC0pIHRl
c3Qgc2V0dGluZy91bi1zZXR0aW5nIHRoZSAnc2NvcGVkJyBhdHRyaWJ1dGUKKyAgICAgICAgLSkg
dGVzdCBpbnNlcnRpbmcvcmVtb3ZpbmcgYSB3aG9sZSA8c3R5bGUgc2NvcGVkPiBlbGVtZW50CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBmYXN0L2Nz
cy9zdHlsZS1zY29wZWQvc3R5bGUtc2NvcGVkLWF0dGFjaC1leHBlY3RlZC50eHQ6IEFkZGVkLgor
ICAgICAgICAqIGZhc3QvY3NzL3N0eWxlLXNjb3BlZC9zdHlsZS1zY29wZWQtYXR0YWNoLmh0bWw6
IEFkZGVkLgorICAgICAgICAqIGZhc3QvY3NzL3N0eWxlLXNjb3BlZC9zdHlsZS1zY29wZWQtYmFz
aWMtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2Nzcy9zdHlsZS1zY29wZWQv
c3R5bGUtc2NvcGVkLWJhc2ljLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGZhc3QvY3NzL3N0eWxl
LXNjb3BlZC9zdHlsZS1zY29wZWQtZGV0YWNoLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAg
ICogZmFzdC9jc3Mvc3R5bGUtc2NvcGVkL3N0eWxlLXNjb3BlZC1kZXRhY2guaHRtbDogQWRkZWQu
CisgICAgICAgICogZmFzdC9jc3Mvc3R5bGUtc2NvcGVkL3N0eWxlLXNjb3BlZC1yZW1vdmUtc2Nv
cGVkLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogZmFzdC9jc3Mvc3R5bGUtc2NvcGVk
L3N0eWxlLXNjb3BlZC1yZW1vdmUtc2NvcGVkLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGZhc3Qv
Y3NzL3N0eWxlLXNjb3BlZC9zdHlsZS1zY29wZWQtc2V0LXNjb3BlZC1leHBlY3RlZC50eHQ6IEFk
ZGVkLgorICAgICAgICAqIGZhc3QvY3NzL3N0eWxlLXNjb3BlZC9zdHlsZS1zY29wZWQtc2V0LXNj
b3BlZC5odG1sOiBBZGRlZC4KKworMjAxMS0xMS0xNiAgUm9sYW5kIFN0ZWluZXIgIDxyb2xhbmRz
dGVpbmVyQGNocm9taXVtLm9yZz4KKwogICAgICAgICA8c3R5bGUgc2NvcGVkPjogSW1wbGVtZW50
IHJlZ2lzdGVyaW5nIG9mIDxzdHlsZSBzY29wZWQ+IHdpdGggdGhlIHNjb3BpbmcgZWxlbWVudAog
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Njc3OTAKIApk
aWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9jc3Mvc3R5bGUtc2NvcGVkL3N0eWxlLXNjb3Bl
ZC1hdHRhY2gtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvZmFzdC9jc3Mvc3R5bGUtc2NvcGVk
L3N0eWxlLXNjb3BlZC1hdHRhY2gtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAuLjVmZTA2NzEKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0
L2Nzcy9zdHlsZS1zY29wZWQvc3R5bGUtc2NvcGVkLWF0dGFjaC1leHBlY3RlZC50eHQKQEAgLTAs
MCArMSwyNyBAQAorVGVzdCBhdHRhY2hpbmcgYSBuZXcgPHN0eWxlIHNjb3BlZD4gZWxlbWVudAor
CitUZXh0CitUZXh0CisKK1RleHQKK1RleHQKKworVGV4dAorVGV4dAorCistLS0gT1JJR0lOQUwg
LS0tCitTMTogcmdiKDAsIDAsIDApCitQMTogcmdiKDAsIDAsIDApCitTMjogcmdiKDAsIDAsIDAp
CitQMjogcmdiKDAsIDAsIDApCitTMzogcmdiKDAsIDAsIDApCitQMzogcmdiKDAsIDAsIDApCist
LS0gQUZURVIgQVRUQUNISU5HIDxTVFlMRSBTQ09QRUQ+IC0tLQorUzE6IHJnYigwLCAwLCAwKQor
UDE6IHJnYigwLCAwLCAwKQorUzI6IHJnYigyNTUsIDAsIDApCitQMjogcmdiKDAsIDEyOCwgMCkK
K1MzOiByZ2IoMCwgMCwgMCkKK1AzOiByZ2IoMCwgMCwgMCkKKy0tLSBGSU5JU0hFRCAtLS0KKwpk
aWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9jc3Mvc3R5bGUtc2NvcGVkL3N0eWxlLXNjb3Bl
ZC1hdHRhY2guaHRtbCBiL0xheW91dFRlc3RzL2Zhc3QvY3NzL3N0eWxlLXNjb3BlZC9zdHlsZS1z
Y29wZWQtYXR0YWNoLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjAz
ZGY1NQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvY3NzL3N0eWxlLXNjb3Bl
ZC9zdHlsZS1zY29wZWQtYXR0YWNoLmh0bWwKQEAgLTAsMCArMSw3MCBAQAorPCFET0NUWVBFIGh0
bWw+Cis8aHRtbD4KKzxoZWFkPgorICAgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4K
KyAgICAgICAgZnVuY3Rpb24gbG9nKG1zZykKKyAgICAgICAgeworICAgICAgICAgICAgZG9jdW1l
bnQuZ2V0RWxlbWVudEJ5SWQoJ2NvbnNvbGUnKS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVU
ZXh0Tm9kZShtc2cgKyAnXG4nKSk7CisgICAgICAgIH0KKworICAgICAgICBmdW5jdGlvbiB0ZXN0
KGlkKQorICAgICAgICB7CisgICAgICAgICAgICB2YXIgZWxlbSA9IGRvY3VtZW50LmdldEVsZW1l
bnRCeUlkKGlkKTsKKyAgICAgICAgICAgIGxvZyhpZCArICc6ICcgKyBkb2N1bWVudC5kZWZhdWx0
Vmlldy5nZXRDb21wdXRlZFN0eWxlKGVsZW0sIG51bGwpLmdldFByb3BlcnR5VmFsdWUoJ2NvbG9y
JykpOworICAgICAgICB9CisKKyAgICAgICAgZnVuY3Rpb24gdGVzdEFsbCgpCisgICAgICAgIHsK
KyAgICAgICAgICAgIHRlc3QoJ1MxJyk7CisgICAgICAgICAgICB0ZXN0KCdQMScpOworICAgICAg
ICAgICAgdGVzdCgnUzInKTsKKyAgICAgICAgICAgIHRlc3QoJ1AyJyk7CisgICAgICAgICAgICB0
ZXN0KCdTMycpOworICAgICAgICAgICAgdGVzdCgnUDMnKTsKKyAgICAgICAgfQorCisgICAgICAg
IGZ1bmN0aW9uIHJ1blRlc3RzKCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKHdpbmRvdy5s
YXlvdXRUZXN0Q29udHJvbGxlcikgeworICAgICAgICAgICAgICAgIGxheW91dFRlc3RDb250cm9s
bGVyLmR1bXBBc1RleHQoKTsKKyAgICAgICAgICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci53
YWl0VW50aWxEb25lKCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGxvZygnLS0tIE9S
SUdJTkFMIC0tLScpOworICAgICAgICAgICAgdGVzdEFsbCgpOworCisgICAgICAgICAgICBsb2co
Jy0tLSBBRlRFUiBBVFRBQ0hJTkcgPFNUWUxFIFNDT1BFRD4gLS0tJyk7CisgICAgICAgICAgICB2
YXIgZGl2RWxlbSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdESVYnKTsKKyAgICAgICAgICAg
IHZhciBzdHlsZUVsZW0gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzdHlsZScpOworICAgICAg
ICAgICAgc3R5bGVFbGVtLnNldEF0dHJpYnV0ZSgnc2NvcGVkJywgdHJ1ZSk7CisgICAgICAgICAg
ICBzdHlsZUVsZW0uaW5uZXJIVE1MID0gJ2RpdiB7IGNvbG9yOiByZWQ7IH0gcCB7IGNvbG9yOiBn
cmVlbjsgfSc7CisgICAgICAgICAgICBkaXZFbGVtLmluc2VydEJlZm9yZShzdHlsZUVsZW0sIGRp
dkVsZW0uZmlyc3RDaGlsZCk7CisgICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkgewor
ICAgICAgICAgICAgICAgIHRlc3RBbGwoKTsKKyAgICAgICAgICAgICAgICBsb2coJy0tLSBGSU5J
U0hFRCAtLS0nKTsKKyAgICAgICAgICAgICAgICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9s
bGVyKQorICAgICAgICAgICAgICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5ub3RpZnlEb25l
KCk7CisgICAgICAgICAgICB9LCAwKTsKKyAgICAgICAgfQorICAgIDwvc2NyaXB0PgorICAgIDxz
dHlsZSB0eXBlPSJ0ZXh0L2NzcyIgc2NvcGVkPgorICAgICAgICBib2R5IHsgY29sb3I6IGJsYWNr
OyB9CisgICAgPC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5IG9ubG9hZD0icnVuVGVzdHMoKTsiPgor
ICAgIDxwPlRlc3QgYXR0YWNoaW5nIGEgbmV3ICZsdDtzdHlsZSBzY29wZWQmZ3Q7IGVsZW1lbnQ8
L3A+CisgICAgPGRpdj4KKyAgICAgICAgPHNwYW4gaWQ9IlMxIj5UZXh0PC9zcGFuPgorICAgICAg
ICA8cCBpZD0iUDEiPlRleHQ8L3A+CisgICAgPC9kaXY+CisgICAgPGRpdiBpZD0iRElWIj4KKyAg
ICAgICAgPHNwYW4gaWQ9IlMyIj5UZXh0PC9zcGFuPgorICAgICAgICA8cCBpZD0iUDIiPlRleHQ8
L3A+CisgICAgPC9kaXY+CisgICAgPGRpdj4KKyAgICAgICAgPHNwYW4gaWQ9IlMzIj5UZXh0PC9z
cGFuPgorICAgICAgICA8cCBpZD0iUDMiPlRleHQ8L3A+CisgICAgPC9kaXY+CisgICAgPHByZSBp
ZD0iY29uc29sZSI+PC9wcmU+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRU
ZXN0cy9mYXN0L2Nzcy9zdHlsZS1zY29wZWQvc3R5bGUtc2NvcGVkLWJhc2ljLWV4cGVjdGVkLnR4
dCBiL0xheW91dFRlc3RzL2Zhc3QvY3NzL3N0eWxlLXNjb3BlZC9zdHlsZS1zY29wZWQtYmFzaWMt
ZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJlZmZkNzYK
LS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2Nzcy9zdHlsZS1zY29wZWQvc3R5
bGUtc2NvcGVkLWJhc2ljLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDQ0IEBACitUZXN0IDxzdHls
ZSBzY29wZWQ+CisKK1RleHQKK1RleHQKKworVGV4dAorVGV4dAorVGV4dAorVGV4dAorCitUZXh0
CitUZXh0CitUZXh0CitUZXh0CisKK1RleHQKK1RleHQKK1RleHQKK1RleHQKKworVGV4dAorVGV4
dAorLS0tIENPTVBVVEVEIFNUWUxFUyAtLS0KK1MxOiByZ2IoMCwgMCwgMCkKK1AxOiByZ2IoMCwg
MCwgMCkKK1IxOiByZ2IoMCwgMCwgMCkKK0UxOiByZ2IoMCwgMCwgMCkKKworUzI6IHJnYigyNTUs
IDAsIDApCitQMjogcmdiKDAsIDEyOCwgMCkKK1IyOiByZ2IoMCwgMCwgMjU1KQorRTI6IHJnYigy
NTUsIDAsIDApCisKK1MzOiByZ2IoMCwgMCwgMCkKK1AzOiByZ2IoMCwgMCwgMCkKK1IzOiByZ2Io
MCwgMCwgMCkKK0UzOiByZ2IoMCwgMCwgMCkKKworUzQ6IHJnYigwLCAwLCAwKQorUDQ6IHJnYigw
LCAwLCAwKQorUjQ6IHJnYigwLCAwLCAwKQorRTQ6IHJnYigwLCAwLCAwKQorLS0tIEZJTklTSEVE
IC0tLQorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2Nzcy9zdHlsZS1zY29wZWQvc3R5
bGUtc2NvcGVkLWJhc2ljLmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0L2Nzcy9zdHlsZS1zY29wZWQv
c3R5bGUtc2NvcGVkLWJhc2ljLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MC4uMGJjMjNhYwotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvY3NzL3N0eWxl
LXNjb3BlZC9zdHlsZS1zY29wZWQtYmFzaWMuaHRtbApAQCAtMCwwICsxLDg0IEBACis8IURPQ1RZ
UEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+CisgICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3Jp
cHQiPgorICAgICAgICBmdW5jdGlvbiBsb2cobXNnKQorICAgICAgICB7CisgICAgICAgICAgICBk
b2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY29uc29sZScpLmFwcGVuZENoaWxkKGRvY3VtZW50LmNy
ZWF0ZVRleHROb2RlKG1zZyArICdcbicpKTsKKyAgICAgICAgfQorCisgICAgICAgIGZ1bmN0aW9u
IHRlc3QoaWQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHZhciBlbGVtID0gZG9jdW1lbnQuZ2V0
RWxlbWVudEJ5SWQoaWQpOworICAgICAgICAgICAgbG9nKGlkICsgJzogJyArIGRvY3VtZW50LmRl
ZmF1bHRWaWV3LmdldENvbXB1dGVkU3R5bGUoZWxlbSwgbnVsbCkuZ2V0UHJvcGVydHlWYWx1ZSgn
Y29sb3InKSk7CisgICAgICAgIH0KKworICAgICAgICBmdW5jdGlvbiBydW5UZXN0cygpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCisgICAg
ICAgICAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4dCgpOworCisgICAgICAg
ICAgICBsb2coJy0tLSBDT01QVVRFRCBTVFlMRVMgLS0tJyk7CisKKyAgICAgICAgICAgIHRlc3Qo
J1MxJyk7CisgICAgICAgICAgICB0ZXN0KCdQMScpOworICAgICAgICAgICAgdGVzdCgnUjEnKTsK
KyAgICAgICAgICAgIHRlc3QoJ0UxJyk7CisgICAgICAgICAgICBsb2coJycpOworICAgICAgICAg
ICAgdGVzdCgnUzInKTsKKyAgICAgICAgICAgIHRlc3QoJ1AyJyk7CisgICAgICAgICAgICB0ZXN0
KCdSMicpOworICAgICAgICAgICAgdGVzdCgnRTInKTsKKyAgICAgICAgICAgIGxvZygnJyk7Cisg
ICAgICAgICAgICB0ZXN0KCdTMycpOworICAgICAgICAgICAgdGVzdCgnUDMnKTsKKyAgICAgICAg
ICAgIHRlc3QoJ1IzJyk7CisgICAgICAgICAgICB0ZXN0KCdFMycpOworICAgICAgICAgICAgbG9n
KCcnKTsKKyAgICAgICAgICAgIHRlc3QoJ1M0Jyk7CisgICAgICAgICAgICB0ZXN0KCdQNCcpOwor
ICAgICAgICAgICAgdGVzdCgnUjQnKTsKKyAgICAgICAgICAgIHRlc3QoJ0U0Jyk7CisKKyAgICAg
ICAgICAgIGxvZygnLS0tIEZJTklTSEVEIC0tLScpOworICAgICAgICB9CisgICAgPC9zY3JpcHQ+
CisgICAgPHN0eWxlIHR5cGU9InRleHQvY3NzIj4KKyAgICAgICAgYm9keSB7IGNvbG9yOiBibGFj
azsgfQorICAgIDwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keSBvbmxvYWQ9InJ1blRlc3RzKCk7Ij4K
KyAgICA8cD5UZXN0ICZsdDtzdHlsZSBzY29wZWQmZ3Q7PC9wPgorICAgIDxkaXYgY2xhc3M9ImZv
byI+CisgICAgICAgIDxzcGFuIGlkPSJTMSI+VGV4dDwvc3Bhbj4KKyAgICAgICAgPHAgaWQ9IlAx
Ij5UZXh0PC9wPgorICAgICAgICA8cHJlIGlkID0gIlIxIiBjbGFzcz0iYmFyIj5UZXh0PC9wcmU+
CisgICAgICAgIDxwcmUgaWQ9IkUxIiBjbGFzcz0iYmF6Ij5UZXh0PC9wcmU+CisgICAgPC9kaXY+
CisgICAgPGRpdiBjbGFzcz0iZm9vIj4KKyAgICAgICAgPGRpdj4KKyAgICAgICAgICAgIDxzdHls
ZSB0eXBlPSJ0ZXh0L2NzcyIgc2NvcGVkPgorICAgICAgICAgICAgICAgIGRpdiB7IGNvbG9yOiBy
ZWQ7IH0KKyAgICAgICAgICAgICAgICBwIHsgY29sb3I6IGdyZWVuOyB9CisgICAgICAgICAgICAg
ICAgZGl2IC5iYXIgeyBjb2xvcjogYmx1ZTsgfQorICAgICAgICAgICAgICAgIC5mb28gLmJheiB7
IGNvbG9yOiBwdXJwbGU7IH0gLyogc2hvdWxkIE5PVCBhcHBseSEgKi8KKyAgICAgICAgICAgIDwv
c3R5bGU+CisgICAgICAgICAgICA8c3BhbiBpZD0iUzIiPlRleHQ8L3NwYW4+CisgICAgICAgICAg
ICA8cCBpZD0iUDIiPlRleHQ8L3A+CisgICAgICAgICAgICA8cHJlIGlkPSJSMiIgY2xhc3M9ImJh
ciI+VGV4dDwvcHJlPgorICAgICAgICAgICAgPHByZSBpZD0iRTIiIGNsYXNzPSJiYXoiPlRleHQ8
L3ByZT4KKyAgICAgICAgPC9kaXY+CisgICAgICAgIDxzcGFuIGlkPSJTMyI+VGV4dDwvc3Bhbj4K
KyAgICAgICAgPHAgaWQ9IlAzIj5UZXh0PC9wPgorICAgICAgICA8cHJlIGlkID0gIlIzIiBjbGFz
cz0iYmFyIj5UZXh0PC9wcmU+CisgICAgICAgIDxwcmUgaWQ9IkUzIiBjbGFzcz0iYmF6Ij5UZXh0
PC9wcmU+CisgICAgPC9kaXY+CisgICAgPGRpdiBjbGFzcz0iZm9vIj4KKyAgICAgICAgPHNwYW4g
aWQ9IlM0Ij5UZXh0PC9zcGFuPgorICAgICAgICA8cCBpZD0iUDQiPlRleHQ8L3A+CisgICAgICAg
IDxwcmUgaWQgPSAiUjQiIGNsYXNzPSJiYXIiPlRleHQ8L3ByZT4KKyAgICAgICAgPHByZSBpZD0i
RTQiIGNsYXNzPSJiYXoiPlRleHQ8L3ByZT4KKyAgICA8L2Rpdj4KKyAgICA8cHJlIGlkPSJjb25z
b2xlIj48L3ByZT4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zh
c3QvY3NzL3N0eWxlLXNjb3BlZC9zdHlsZS1zY29wZWQtZGV0YWNoLWV4cGVjdGVkLnR4dCBiL0xh
eW91dFRlc3RzL2Zhc3QvY3NzL3N0eWxlLXNjb3BlZC9zdHlsZS1zY29wZWQtZGV0YWNoLWV4cGVj
dGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kN2VmNjUzCi0tLSAv
ZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9jc3Mvc3R5bGUtc2NvcGVkL3N0eWxlLXNj
b3BlZC1kZXRhY2gtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsMjcgQEAKK1Rlc3QgZGV0YWNoaW5n
IGEgPHN0eWxlIHNjb3BlZD4gZWxlbWVudAorCitUZXh0CitUZXh0CisKK1RleHQKK1RleHQKKwor
VGV4dAorVGV4dAorCistLS0gT1JJR0lOQUwgLS0tCitTMTogcmdiKDAsIDAsIDApCitQMTogcmdi
KDAsIDAsIDApCitTMjogcmdiKDI1NSwgMCwgMCkKK1AyOiByZ2IoMCwgMTI4LCAwKQorUzM6IHJn
YigwLCAwLCAwKQorUDM6IHJnYigwLCAwLCAwKQorLS0tIEFGVEVSIERFVEFDSElORyA8U1RZTEUg
U0NPUEVEPiAtLS0KK1MxOiByZ2IoMCwgMCwgMCkKK1AxOiByZ2IoMCwgMCwgMCkKK1MyOiByZ2Io
MCwgMCwgMCkKK1AyOiByZ2IoMCwgMCwgMCkKK1MzOiByZ2IoMCwgMCwgMCkKK1AzOiByZ2IoMCwg
MCwgMCkKKy0tLSBGSU5JU0hFRCAtLS0KKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9j
c3Mvc3R5bGUtc2NvcGVkL3N0eWxlLXNjb3BlZC1kZXRhY2guaHRtbCBiL0xheW91dFRlc3RzL2Zh
c3QvY3NzL3N0eWxlLXNjb3BlZC9zdHlsZS1zY29wZWQtZGV0YWNoLmh0bWwKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGM4YmY2YQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91
dFRlc3RzL2Zhc3QvY3NzL3N0eWxlLXNjb3BlZC9zdHlsZS1zY29wZWQtZGV0YWNoLmh0bWwKQEAg
LTAsMCArMSw3MiBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxoZWFkPgorICAgIDxzY3Jp
cHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KKyAgICAgICAgZnVuY3Rpb24gbG9nKG1zZykKKyAg
ICAgICAgeworICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NvbnNvbGUnKS5h
cHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShtc2cgKyAnXG4nKSk7CisgICAgICAg
IH0KKworICAgICAgICBmdW5jdGlvbiB0ZXN0KGlkKQorICAgICAgICB7CisgICAgICAgICAgICB2
YXIgZWxlbSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKTsKKyAgICAgICAgICAgIGxvZyhp
ZCArICc6ICcgKyBkb2N1bWVudC5kZWZhdWx0Vmlldy5nZXRDb21wdXRlZFN0eWxlKGVsZW0sIG51
bGwpLmdldFByb3BlcnR5VmFsdWUoJ2NvbG9yJykpOworICAgICAgICB9CisKKyAgICAgICAgZnVu
Y3Rpb24gdGVzdEFsbCgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHRlc3QoJ1MxJyk7CisgICAg
ICAgICAgICB0ZXN0KCdQMScpOworICAgICAgICAgICAgdGVzdCgnUzInKTsKKyAgICAgICAgICAg
IHRlc3QoJ1AyJyk7CisgICAgICAgICAgICB0ZXN0KCdTMycpOworICAgICAgICAgICAgdGVzdCgn
UDMnKTsKKyAgICAgICAgfQorCisgICAgICAgIGZ1bmN0aW9uIHJ1blRlc3RzKCkKKyAgICAgICAg
eworICAgICAgICAgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikgeworICAgICAg
ICAgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQoKTsKKyAgICAgICAgICAg
ICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci53YWl0VW50aWxEb25lKCk7CisgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgIGxvZygnLS0tIE9SSUdJTkFMIC0tLScpOworICAgICAgICAgICAgdGVz
dEFsbCgpOworCisgICAgICAgICAgICBsb2coJy0tLSBBRlRFUiBERVRBQ0hJTkcgPFNUWUxFIFND
T1BFRD4gLS0tJyk7CisgICAgICAgICAgICB2YXIgZGl2RWxlbSA9IGRvY3VtZW50LmdldEVsZW1l
bnRCeUlkKCdESVYnKTsKKyAgICAgICAgICAgIHZhciBzdHlsZUVsZW0gPSBkb2N1bWVudC5nZXRF
bGVtZW50QnlJZCgnU1RZTEUnKTsKKyAgICAgICAgICAgIGRpdkVsZW0ucmVtb3ZlQ2hpbGQoc3R5
bGVFbGVtKTsKKyAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7CisgICAgICAgICAg
ICAgICAgdGVzdEFsbCgpOworICAgICAgICAgICAgICAgIGxvZygnLS0tIEZJTklTSEVEIC0tLScp
OworICAgICAgICAgICAgICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCisgICAg
ICAgICAgICAgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLm5vdGlmeURvbmUoKTsKKyAgICAg
ICAgICAgIH0sIDApOworICAgICAgICB9CisgICAgPC9zY3JpcHQ+CisgICAgPHN0eWxlIHR5cGU9
InRleHQvY3NzIiBzY29wZWQ+CisgICAgICAgIGJvZHkgeyBjb2xvcjogYmxhY2s7IH0KKyAgICA8
L3N0eWxlPgorPC9oZWFkPgorPGJvZHkgb25sb2FkPSJydW5UZXN0cygpOyI+CisgICAgPHA+VGVz
dCBkZXRhY2hpbmcgYSAmbHQ7c3R5bGUgc2NvcGVkJmd0OyBlbGVtZW50PC9wPgorICAgIDxkaXY+
CisgICAgICAgIDxzcGFuIGlkPSJTMSI+VGV4dDwvc3Bhbj4KKyAgICAgICAgPHAgaWQ9IlAxIj5U
ZXh0PC9wPgorICAgIDwvZGl2PgorICAgIDxkaXYgaWQ9IkRJViI+CisgICAgICAgIDxzdHlsZSBp
ZD0iU1RZTEUiIHR5cGU9InRleHQvY3NzIiBzY29wZWQ+CisgICAgICAgICAgICBkaXYgeyBjb2xv
cjogcmVkOyB9CisgICAgICAgICAgICBwIHsgY29sb3I6IGdyZWVuOyB9CisgICAgICAgIDwvc3R5
bGU+CisgICAgICAgIDxzcGFuIGlkPSJTMiI+VGV4dDwvc3Bhbj4KKyAgICAgICAgPHAgaWQ9IlAy
Ij5UZXh0PC9wPgorICAgIDwvZGl2PgorICAgIDxkaXY+CisgICAgICAgIDxzcGFuIGlkPSJTMyI+
VGV4dDwvc3Bhbj4KKyAgICAgICAgPHAgaWQ9IlAzIj5UZXh0PC9wPgorICAgIDwvZGl2PgorICAg
IDxwcmUgaWQ9ImNvbnNvbGUiPjwvcHJlPgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEv
TGF5b3V0VGVzdHMvZmFzdC9jc3Mvc3R5bGUtc2NvcGVkL3N0eWxlLXNjb3BlZC1yZW1vdmUtc2Nv
cGVkLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2Zhc3QvY3NzL3N0eWxlLXNjb3BlZC9zdHls
ZS1zY29wZWQtcmVtb3ZlLXNjb3BlZC1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMC4uM2EyMDU4NwotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zh
c3QvY3NzL3N0eWxlLXNjb3BlZC9zdHlsZS1zY29wZWQtcmVtb3ZlLXNjb3BlZC1leHBlY3RlZC50
eHQKQEAgLTAsMCArMSwyNyBAQAorVGVzdCByZW1vdmluZyB0aGUgJ3Njb3BlZCcgYXR0cmlidXRl
IG9uIGEgPHN0eWxlPiBlbGVtZW50CisKK1RleHQKK1RleHQKKworVGV4dAorVGV4dAorCitUZXh0
CitUZXh0CisKKy0tLSBPUklHSU5BTCAtLS0KK1MxOiByZ2IoMCwgMCwgMCkKK1AxOiByZ2IoMCwg
MCwgMCkKK1MyOiByZ2IoMjU1LCAwLCAwKQorUDI6IHJnYigwLCAxMjgsIDApCitTMzogcmdiKDAs
IDAsIDApCitQMzogcmdiKDAsIDAsIDApCistLS0gQUZURVIgVU4tU0VUVElORyBAU0NPUEVEIC0t
LQorUzE6IHJnYigyNTUsIDAsIDApCitQMTogcmdiKDAsIDEyOCwgMCkKK1MyOiByZ2IoMjU1LCAw
LCAwKQorUDI6IHJnYigwLCAxMjgsIDApCitTMzogcmdiKDI1NSwgMCwgMCkKK1AzOiByZ2IoMCwg
MTI4LCAwKQorLS0tIEZJTklTSEVEIC0tLQorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0
L2Nzcy9zdHlsZS1zY29wZWQvc3R5bGUtc2NvcGVkLXJlbW92ZS1zY29wZWQuaHRtbCBiL0xheW91
dFRlc3RzL2Zhc3QvY3NzL3N0eWxlLXNjb3BlZC9zdHlsZS1zY29wZWQtcmVtb3ZlLXNjb3BlZC5o
dG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVhYWYzNzcKLS0tIC9kZXYv
bnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2Nzcy9zdHlsZS1zY29wZWQvc3R5bGUtc2NvcGVk
LXJlbW92ZS1zY29wZWQuaHRtbApAQCAtMCwwICsxLDcwIEBACis8IURPQ1RZUEUgaHRtbD4KKzxo
dG1sPgorPGhlYWQ+CisgICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgorICAgICAg
ICBmdW5jdGlvbiBsb2cobXNnKQorICAgICAgICB7CisgICAgICAgICAgICBkb2N1bWVudC5nZXRF
bGVtZW50QnlJZCgnY29uc29sZScpLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2Rl
KG1zZyArICdcbicpKTsKKyAgICAgICAgfQorCisgICAgICAgIGZ1bmN0aW9uIHRlc3QoaWQpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIHZhciBlbGVtID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQo
aWQpOworICAgICAgICAgICAgbG9nKGlkICsgJzogJyArIGRvY3VtZW50LmRlZmF1bHRWaWV3Lmdl
dENvbXB1dGVkU3R5bGUoZWxlbSwgbnVsbCkuZ2V0UHJvcGVydHlWYWx1ZSgnY29sb3InKSk7Cisg
ICAgICAgIH0KKworICAgICAgICBmdW5jdGlvbiB0ZXN0QWxsKCkKKyAgICAgICAgeworICAgICAg
ICAgICAgdGVzdCgnUzEnKTsKKyAgICAgICAgICAgIHRlc3QoJ1AxJyk7CisgICAgICAgICAgICB0
ZXN0KCdTMicpOworICAgICAgICAgICAgdGVzdCgnUDInKTsKKyAgICAgICAgICAgIHRlc3QoJ1Mz
Jyk7CisgICAgICAgICAgICB0ZXN0KCdQMycpOworICAgICAgICB9CisKKyAgICAgICAgZnVuY3Rp
b24gcnVuVGVzdHMoKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAod2luZG93LmxheW91dFRl
c3RDb250cm9sbGVyKSB7CisgICAgICAgICAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuZHVt
cEFzVGV4dCgpOworICAgICAgICAgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLndhaXRVbnRp
bERvbmUoKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgbG9nKCctLS0gT1JJR0lOQUwg
LS0tJyk7CisgICAgICAgICAgICB0ZXN0QWxsKCk7CisKKyAgICAgICAgICAgIGxvZygnLS0tIEFG
VEVSIFVOLVNFVFRJTkcgQFNDT1BFRCAtLS0nKTsKKyAgICAgICAgICAgIGRvY3VtZW50LmdldEVs
ZW1lbnRCeUlkKCdTVFlMRScpLnJlbW92ZUF0dHJpYnV0ZSgnc2NvcGVkJyk7CisgICAgICAgICAg
ICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICAgIHRlc3RBbGwoKTsKKyAg
ICAgICAgICAgICAgICBsb2coJy0tLSBGSU5JU0hFRCAtLS0nKTsKKyAgICAgICAgICAgICAgICBp
ZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQorICAgICAgICAgICAgICAgICAgICBsYXlv
dXRUZXN0Q29udHJvbGxlci5ub3RpZnlEb25lKCk7CisgICAgICAgICAgICB9LCAwKTsKKyAgICAg
ICAgfQorICAgIDwvc2NyaXB0PgorICAgIDxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyIgc2NvcGVkPgor
ICAgICAgICBib2R5IHsgY29sb3I6IGJsYWNrOyB9CisgICAgPC9zdHlsZT4KKzwvaGVhZD4KKzxi
b2R5IG9ubG9hZD0icnVuVGVzdHMoKTsiPgorICAgIDxwPlRlc3QgcmVtb3ZpbmcgdGhlICdzY29w
ZWQnIGF0dHJpYnV0ZSBvbiBhICZsdDtzdHlsZSZndDsgZWxlbWVudDwvcD4KKyAgICA8ZGl2Pgor
ICAgICAgICA8c3BhbiBpZD0iUzEiPlRleHQ8L3NwYW4+CisgICAgICAgIDxwIGlkPSJQMSI+VGV4
dDwvcD4KKyAgICA8L2Rpdj4KKyAgICA8ZGl2PgorICAgICAgICA8c3R5bGUgaWQ9IlNUWUxFIiB0
eXBlPSJ0ZXh0L2NzcyIgc2NvcGVkPgorICAgICAgICAgICAgZGl2IHsgY29sb3I6IHJlZDsgfQor
ICAgICAgICAgICAgcCB7IGNvbG9yOiBncmVlbjsgfQorICAgICAgICA8L3N0eWxlPgorICAgICAg
ICA8c3BhbiBpZD0iUzIiPlRleHQ8L3NwYW4+CisgICAgICAgIDxwIGlkPSJQMiI+VGV4dDwvcD4K
KyAgICA8L2Rpdj4KKyAgICA8ZGl2PgorICAgICAgICA8c3BhbiBpZD0iUzMiPlRleHQ8L3NwYW4+
CisgICAgICAgIDxwIGlkPSJQMyI+VGV4dDwvcD4KKyAgICA8L2Rpdj4KKyAgICA8cHJlIGlkPSJj
b25zb2xlIj48L3ByZT4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3Rz
L2Zhc3QvY3NzL3N0eWxlLXNjb3BlZC9zdHlsZS1zY29wZWQtc2V0LXNjb3BlZC1leHBlY3RlZC50
eHQgYi9MYXlvdXRUZXN0cy9mYXN0L2Nzcy9zdHlsZS1zY29wZWQvc3R5bGUtc2NvcGVkLXNldC1z
Y29wZWQtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZh
MGM3OTYKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2Nzcy9zdHlsZS1zY29w
ZWQvc3R5bGUtc2NvcGVkLXNldC1zY29wZWQtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsMjcgQEAK
K1Rlc3Qgc2V0dGluZyB0aGUgJ3Njb3BlZCcgYXR0cmlidXRlIG9uIGEgPHN0eWxlPiBlbGVtZW50
CisKK1RleHQKK1RleHQKKworVGV4dAorVGV4dAorCitUZXh0CitUZXh0CisKKy0tLSBPUklHSU5B
TCAtLS0KK1MxOiByZ2IoMjU1LCAwLCAwKQorUDE6IHJnYigwLCAxMjgsIDApCitTMjogcmdiKDI1
NSwgMCwgMCkKK1AyOiByZ2IoMCwgMTI4LCAwKQorUzM6IHJnYigyNTUsIDAsIDApCitQMzogcmdi
KDAsIDEyOCwgMCkKKy0tLSBBRlRFUiBTRVRUSU5HIEBTQ09QRUQgLS0tCitTMTogcmdiKDAsIDAs
IDApCitQMTogcmdiKDAsIDAsIDApCitTMjogcmdiKDI1NSwgMCwgMCkKK1AyOiByZ2IoMCwgMTI4
LCAwKQorUzM6IHJnYigwLCAwLCAwKQorUDM6IHJnYigwLCAwLCAwKQorLS0tIEZJTklTSEVEIC0t
LQorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2Nzcy9zdHlsZS1zY29wZWQvc3R5bGUt
c2NvcGVkLXNldC1zY29wZWQuaHRtbCBiL0xheW91dFRlc3RzL2Zhc3QvY3NzL3N0eWxlLXNjb3Bl
ZC9zdHlsZS1zY29wZWQtc2V0LXNjb3BlZC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAuLjk5MDNiZDQKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2Nz
cy9zdHlsZS1zY29wZWQvc3R5bGUtc2NvcGVkLXNldC1zY29wZWQuaHRtbApAQCAtMCwwICsxLDcw
IEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+CisgICAgPHNjcmlwdCB0eXBlPSJ0
ZXh0L2phdmFzY3JpcHQiPgorICAgICAgICBmdW5jdGlvbiBsb2cobXNnKQorICAgICAgICB7Cisg
ICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY29uc29sZScpLmFwcGVuZENoaWxk
KGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKG1zZyArICdcbicpKTsKKyAgICAgICAgfQorCisgICAg
ICAgIGZ1bmN0aW9uIHRlc3QoaWQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHZhciBlbGVtID0g
ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpOworICAgICAgICAgICAgbG9nKGlkICsgJzogJyAr
IGRvY3VtZW50LmRlZmF1bHRWaWV3LmdldENvbXB1dGVkU3R5bGUoZWxlbSwgbnVsbCkuZ2V0UHJv
cGVydHlWYWx1ZSgnY29sb3InKSk7CisgICAgICAgIH0KKworICAgICAgICBmdW5jdGlvbiB0ZXN0
QWxsKCkKKyAgICAgICAgeworICAgICAgICAgICAgdGVzdCgnUzEnKTsKKyAgICAgICAgICAgIHRl
c3QoJ1AxJyk7CisgICAgICAgICAgICB0ZXN0KCdTMicpOworICAgICAgICAgICAgdGVzdCgnUDIn
KTsKKyAgICAgICAgICAgIHRlc3QoJ1MzJyk7CisgICAgICAgICAgICB0ZXN0KCdQMycpOworICAg
ICAgICB9CisKKyAgICAgICAgZnVuY3Rpb24gcnVuVGVzdHMoKQorICAgICAgICB7CisgICAgICAg
ICAgICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKSB7CisgICAgICAgICAgICAgICAg
bGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4dCgpOworICAgICAgICAgICAgICAgIGxheW91
dFRlc3RDb250cm9sbGVyLndhaXRVbnRpbERvbmUoKTsKKyAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgbG9nKCctLS0gT1JJR0lOQUwgLS0tJyk7CisgICAgICAgICAgICB0ZXN0QWxsKCk7CisK
KyAgICAgICAgICAgIGxvZygnLS0tIEFGVEVSIFNFVFRJTkcgQFNDT1BFRCAtLS0nKTsKKyAgICAg
ICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdTVFlMRScpLnNldEF0dHJpYnV0ZSgnc2Nv
cGVkJywgdHJ1ZSk7CisgICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkgeworICAgICAg
ICAgICAgICAgIHRlc3RBbGwoKTsKKyAgICAgICAgICAgICAgICBsb2coJy0tLSBGSU5JU0hFRCAt
LS0nKTsKKyAgICAgICAgICAgICAgICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQor
ICAgICAgICAgICAgICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5ub3RpZnlEb25lKCk7Cisg
ICAgICAgICAgICB9LCAwKTsKKyAgICAgICAgfQorICAgIDwvc2NyaXB0PgorICAgIDxzdHlsZSB0
eXBlPSJ0ZXh0L2NzcyIgc2NvcGVkPgorICAgICAgICBib2R5IHsgY29sb3I6IGJsYWNrOyB9Cisg
ICAgPC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5IG9ubG9hZD0icnVuVGVzdHMoKTsiPgorICAgIDxw
PlRlc3Qgc2V0dGluZyB0aGUgJ3Njb3BlZCcgYXR0cmlidXRlIG9uIGEgJmx0O3N0eWxlJmd0OyBl
bGVtZW50PC9wPgorICAgIDxkaXY+CisgICAgICAgIDxzcGFuIGlkPSJTMSI+VGV4dDwvc3Bhbj4K
KyAgICAgICAgPHAgaWQ9IlAxIj5UZXh0PC9wPgorICAgIDwvZGl2PgorICAgIDxkaXY+CisgICAg
ICAgIDxzdHlsZSBpZD0iU1RZTEUiIHR5cGU9InRleHQvY3NzIj4KKyAgICAgICAgICAgIGRpdiB7
IGNvbG9yOiByZWQ7IH0KKyAgICAgICAgICAgIHAgeyBjb2xvcjogZ3JlZW47IH0KKyAgICAgICAg
PC9zdHlsZT4KKyAgICAgICAgPHNwYW4gaWQ9IlMyIj5UZXh0PC9zcGFuPgorICAgICAgICA8cCBp
ZD0iUDIiPlRleHQ8L3A+CisgICAgPC9kaXY+CisgICAgPGRpdj4KKyAgICAgICAgPHNwYW4gaWQ9
IlMzIj5UZXh0PC9zcGFuPgorICAgICAgICA8cCBpZD0iUDMiPlRleHQ8L3A+CisgICAgPC9kaXY+
CisgICAgPHByZSBpZD0iY29uc29sZSI+PC9wcmU+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cK
aW5kZXggMGRiOGU4Ny4uODEwYmM5OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDcyIEBACisyMDEx
LTExLTE2IFJvbGFuZCBTdGVpbmVyICA8cm9sYW5kc3RlaW5lckBjaHJvbWl1bS5vcmc+CisKKyAg
ICAgICAgQnVnIDY3NzIwIC0gPHN0eWxlIHNjb3BlZD46IEltcGxlbWVudCBzZWxlY3RvciBtYXRj
aGluZworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Njc3
MjAKKworICAgICAgICBJbXBsZW1lbnRpbmcgc3VwcG9ydCBmb3IgPHN0eWxlIHNjb3BlZD46Cisg
ICAgICAgIENTU1N0eWxlU2VsZWN0b3IgaG9sZHMgZ2xvYmFsIGFzIHdlbGwgYXMgc2NvcGVkIGF1
dGhvciBzaGVldHMuCisgICAgICAgIFNjb3BlZCBhdXRob3Igc2hlZXRzIGFyZSBtYXBwZWQgYnkg
dGhlaXIgc2NvcGluZyBlbGVtZW50ICh0aGUgcGFyZW50IGVsZW1lbnQgb2YgPHN0eWxlIHNjb3Bl
ZD4pLgorICAgICAgICA8c3R5bGUgc2NvcGVkPiBlbGVtZW50cyByZWdpc3RlciBhbmQgdW4tcmVn
aXN0ZXIgd2l0aCB0aGVpciBzY29waW5nIHBhcmVudCBlbGVtZW50CisgICAgICAgIGluIGEga2lu
ZCBvZiByZWYtY291bnRpbmcsIGluIG9yZGVyIHRvIGFsbG93IHF1aWNrIGxvb2stdXAgb2Ygd2hl
dGhlciBhbiBlbGVtZW50IGhhcyBzY29wZWQgc3R5bGUgY2hpbGRyZW4uCisgICAgICAgIEFsc28s
IHByZXZlbnQgc3R5bGUgc2hhcmluZyBmcm9tIGNyb3NzaW5nIGludG8vb3V0IG9mIHNjb3BlZCBz
dHlsZSBib3VuZGFyaWVzLgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgIFRlc3RzOiBmYXN0L2Nzcy9zdHlsZS1zY29wZWQvc3R5bGUtc2NvcGVkLWF0dGFj
aC5odG1sCisgICAgICAgICAgICAgICBmYXN0L2Nzcy9zdHlsZS1zY29wZWQvc3R5bGUtc2NvcGVk
LWJhc2ljLmh0bWwKKyAgICAgICAgICAgICAgIGZhc3QvY3NzL3N0eWxlLXNjb3BlZC9zdHlsZS1z
Y29wZWQtZGV0YWNoLmh0bWwKKyAgICAgICAgICAgICAgIGZhc3QvY3NzL3N0eWxlLXNjb3BlZC9z
dHlsZS1zY29wZWQtcmVtb3ZlLXNjb3BlZC5odG1sCisgICAgICAgICAgICAgICBmYXN0L2Nzcy9z
dHlsZS1zY29wZWQvc3R5bGUtc2NvcGVkLXNldC1zY29wZWQuaHRtbAorCisgICAgICAgICogY3Nz
L0NTU1N0eWxlU2VsZWN0b3IuY3BwOiBhZGQgc3VwcG9ydCBmb3Igc2NvcGVkIGF1dGhvciBzaGVl
dHMKKyAgICAgICAgKFdlYkNvcmU6OlNjb3BlZFJ1bGVTZXRzOjpTY29wZWRSdWxlU2V0cyk6IGNs
YXNzIGZvciBzY29wZWQgYXV0aG9yIHNoZWV0cworICAgICAgICAoV2ViQ29yZTo6U2NvcGVkUnVs
ZVNldHM6OmdldCk6CisgICAgICAgIChXZWJDb3JlOjpkZXRlcm1pbmVTY29wZSk6CisgICAgICAg
IChXZWJDb3JlOjpDU1NTdHlsZVNlbGVjdG9yOjpDU1NTdHlsZVNlbGVjdG9yKToKKyAgICAgICAg
KFdlYkNvcmU6OkNTU1N0eWxlU2VsZWN0b3I6Om1hdGNoQXV0aG9yUnVsZXMpOiBtYXRjaCBzY29w
ZWQgYXV0aG9yIHJ1bGVzCisgICAgICAgIChXZWJDb3JlOjpDU1NTdHlsZVNlbGVjdG9yOjptYXRj
aFJ1bGVzR2xvYmFsbHkpOiByZW5hbWVkIHRvIG1ha2UgZXhwbGljaXQgdGhhdCBydWxlcyBhcmUg
bm90IGNvbnNpZGVyZWQgc2NvcGVkCisgICAgICAgIChXZWJDb3JlOjpsZXNzU3BlY2lmaWMpOiBy
ZW5hbWVkIGZ1bmN0b3IgdG8gY29tcGFyZSBzcGVjaWZpY2l0eSBvZiBzZWxlY3RvcnMKKyAgICAg
ICAgKFdlYkNvcmU6OkNTU1N0eWxlU2VsZWN0b3I6Om1hdGNoUnVsZVNldCk6CisgICAgICAgIChX
ZWJDb3JlOjpDU1NTdHlsZVNlbGVjdG9yOjpzb3J0QW5kVHJhbnNmZXJNYXRjaGVkUnVsZXMpOiBy
ZWZhY3RvcmluZyB0byBzaW1wbGlmeSBjb2RlCisgICAgICAgIChXZWJDb3JlOjptYXRjaGVzSW5U
cmVlU2NvcGUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTU3R5bGVTZWxlY3Rvcjo6bWF0Y2hSdWxl
c0Zvckxpc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTU3R5bGVTZWxlY3Rvcjo6bWF0Y2hBbGxS
dWxlcyk6CisgICAgICAgIChXZWJDb3JlOjpDU1NTdHlsZVNlbGVjdG9yOjpsb2NhdGVDb3VzaW5M
aXN0KTogYXZvaWQgY3Jvc3Npbmcgc2NvcGVkIHN0eWxlIGJvdW5kYXJpZXMKKyAgICAgICAgKFdl
YkNvcmU6OkNTU1N0eWxlU2VsZWN0b3I6Om1hdGNoZXNSdWxlU2V0R2xvYmFsbHkpOiByZW5hbWVk
IHRvIG1ha2UgZXhwbGljaXQgdGhhdCBydWxlcyBhcmUgbm90IGNvbnNpZGVyZWQgc2NvcGVkCisg
ICAgICAgIChXZWJDb3JlOjpDU1NTdHlsZVNlbGVjdG9yOjpjYW5TaGFyZVN0eWxlV2l0aEVsZW1l
bnQpOiBhdm9pZCBjcm9zc2luZyBzY29wZWQgc3R5bGUgYm91bmRhcmllcworICAgICAgICAoV2Vi
Q29yZTo6Q1NTU3R5bGVTZWxlY3Rvcjo6bG9jYXRlU2hhcmVkU3R5bGUpOgorICAgICAgICAoV2Vi
Q29yZTo6Q1NTU3R5bGVTZWxlY3Rvcjo6bWF0Y2hVQVJ1bGVzKToKKyAgICAgICAgKFdlYkNvcmU6
OkNTU1N0eWxlU2VsZWN0b3I6OnBzZXVkb1N0eWxlRm9yRWxlbWVudCk6CisgICAgICAgIChXZWJD
b3JlOjpDU1NTdHlsZVNlbGVjdG9yOjpzdHlsZUZvclBhZ2UpOgorICAgICAgICAoV2ViQ29yZTo6
Q1NTU3R5bGVTZWxlY3Rvcjo6Y2hlY2tSZWdpb25TdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpD
U1NTdHlsZVNlbGVjdG9yOjpwc2V1ZG9TdHlsZVJ1bGVzRm9yRWxlbWVudCk6CisgICAgICAgIChX
ZWJDb3JlOjpDU1NTdHlsZVNlbGVjdG9yOjpjaGVja1NlbGVjdG9yKToKKyAgICAgICAgKFdlYkNv
cmU6OlJ1bGVTZXQ6OmFkZFJ1bGVzRnJvbVNoZWV0KToKKyAgICAgICAgKFdlYkNvcmU6OlNjb3Bl
ZFJ1bGVTZXRzOjp+U2NvcGVkUnVsZVNldHMpOgorICAgICAgICAoV2ViQ29yZTo6U2NvcGVkUnVs
ZVNldHM6OmVuc3VyZUV4aXN0cyk6CisgICAgICAgIChXZWJDb3JlOjpTY29wZWRSdWxlU2V0czo6
Y29sbGVjdEZlYXR1cmVzKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1N0eWxlU2VsZWN0b3I6Om1h
dGNoUGFnZVJ1bGVzKToKKyAgICAgICAgKiBjc3MvQ1NTU3R5bGVTZWxlY3Rvci5oOgorICAgICAg
ICAqIGNzcy9TZWxlY3RvckNoZWNrZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0b3JD
aGVja2VyOjpwdXNoUGFyZW50U3RhY2tGcmFtZSk6IGFkZCBzY29waW5nIGluZm9ybWF0aW9uIHRv
IHBhcmVudCBzdGFjayBmcmFtZSwgbWFrZSBjb25zdAorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0
b3JDaGVja2VyOjpwdXNoUGFyZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdG9yQ2hlY2tl
cjo6Y2hlY2tTZWxlY3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpTZWxlY3RvckNoZWNrZXI6OmZh
c3RDaGVja1NlbGVjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdG9yQ2hlY2tlcjo6Y2hl
Y2tPbmVTZWxlY3Rvcik6CisgICAgICAgICogY3NzL1NlbGVjdG9yQ2hlY2tlci5oOgorICAgICAg
ICAoV2ViQ29yZTo6U2VsZWN0b3JDaGVja2VyOjpwYXJlbnRTdGFja0lzQ29uc2lzdGVudCk6Cisg
ICAgICAgIChXZWJDb3JlOjpTZWxlY3RvckNoZWNrZXI6OlBhcmVudFN0YWNrRnJhbWU6OlBhcmVu
dFN0YWNrRnJhbWUpOiBtYWtlIGVsZW1lbnQgYW5kIHNjb3BpbmcgaW5mbyBtZW1iZXJzIGNvbnN0
CisgICAgICAgIChXZWJDb3JlOjpTZWxlY3RvckNoZWNrZXI6OmdldEVsZW1lbnRXaXRoSW5kZXgp
OiBpbnRlcmZhY2UgdG8gYWNjZXNzIHBhcmVudFN0YWNrRnJhbWVzCisgICAgICAgIChXZWJDb3Jl
OjpTZWxlY3RvckNoZWNrZXI6OmdldElubmVybW9zdFN0eWxlU2NvcGVFbGVtZW50SW5kZXgpOiBk
aXR0bworICAgICAgICAoV2ViQ29yZTo6U2VsZWN0b3JDaGVja2VyOjpnZXRFbmNsb3NpbmdTdHls
ZVNjb3BlRWxlbWVudEluZGV4KTogZGl0dG8KKyAgICAgICAgKiBkb20vRWxlbWVudC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpFbGVtZW50Ojp3ZWJraXRNYXRjaGVzU2VsZWN0b3IpOgorICAgICAg
ICAqIGRvbS9TZWxlY3RvclF1ZXJ5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdG9yUXVl
cnk6OnF1ZXJ5QWxsKToKKyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdG9yUXVlcnk6OnF1ZXJ5Rmly
c3QpOgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0b3JRdWVyeTo6ZXhlY3V0ZSk6CisgICAgICAg
ICogZG9tL1NlbGVjdG9yUXVlcnkuaDoKKwogMjAxMS0xMS0xNiAgUm9sYW5kIFN0ZWluZXIgIDxy
b2xhbmRzdGVpbmVyQGNocm9taXVtLm9yZz4KIAogICAgICAgICA8c3R5bGUgc2NvcGVkPjogSW1w
bGVtZW50IHJlZ2lzdGVyaW5nIG9mIDxzdHlsZSBzY29wZWQ+IHdpdGggdGhlIHNjb3BpbmcgZWxl
bWVudApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU1N0eWxlU2VsZWN0b3IuY3Bw
IGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU1N0eWxlU2VsZWN0b3IuY3BwCmluZGV4IDM0MzczZTAu
LjI1NDM4YzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTdHlsZVNlbGVjdG9y
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU3R5bGVTZWxlY3Rvci5jcHAKQEAgLTY5
LDYgKzY5LDcgQEAKICNpbmNsdWRlICJIVE1MSW5wdXRFbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRN
TE5hbWVzLmgiCiAjaW5jbHVkZSAiSFRNTFByb2dyZXNzRWxlbWVudC5oIgorI2luY2x1ZGUgIkhU
TUxTdHlsZUVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MVGV4dEFyZWFFbGVtZW50LmgiCiAjaW5j
bHVkZSAiS2V5ZnJhbWVMaXN0LmgiCiAjaW5jbHVkZSAiTGlua0hhc2guaCIKQEAgLTIyNiwxMyAr
MjI3LDEyIEBAIHB1YmxpYzoKIAogICAgIHR5cGVkZWYgSGFzaE1hcDxBdG9taWNTdHJpbmdJbXBs
KiwgVmVjdG9yPFJ1bGVEYXRhPio+IEF0b21SdWxlTWFwOwogCi0gICAgdm9pZCBhZGRSdWxlc0Zy
b21TaGVldChDU1NTdHlsZVNoZWV0KiwgY29uc3QgTWVkaWFRdWVyeUV2YWx1YXRvciYsIENTU1N0
eWxlU2VsZWN0b3IqID0gMCk7CisgICAgdm9pZCBhZGRSdWxlc0Zyb21TaGVldChDU1NTdHlsZVNo
ZWV0KiwgY29uc3QgTWVkaWFRdWVyeUV2YWx1YXRvciYsIENTU1N0eWxlU2VsZWN0b3IqID0gMCwg
Y29uc3QgRWxlbWVudCogPSAwKTsKIAotICAgIHZvaWQgYWRkU3R5bGVSdWxlKENTU1N0eWxlUnVs
ZSogaXRlbSk7Ci0gICAgdm9pZCBhZGRSdWxlKENTU1N0eWxlUnVsZSogcnVsZSwgQ1NTU2VsZWN0
b3IqIHNlbCk7CisgICAgdm9pZCBhZGRTdHlsZVJ1bGUoQ1NTU3R5bGVSdWxlKik7CisgICAgdm9p
ZCBhZGRSdWxlKENTU1N0eWxlUnVsZSosIENTU1NlbGVjdG9yKik7CiAgICAgdm9pZCBhZGRQYWdl
UnVsZShDU1NQYWdlUnVsZSopOwotICAgIHZvaWQgYWRkVG9SdWxlU2V0KEF0b21pY1N0cmluZ0lt
cGwqIGtleSwgQXRvbVJ1bGVNYXAmIG1hcCwKLSAgICAgICAgICAgICAgICAgICAgICBDU1NTdHls
ZVJ1bGUqIHJ1bGUsIENTU1NlbGVjdG9yKiBzZWwpOworICAgIHZvaWQgYWRkVG9SdWxlU2V0KEF0
b21pY1N0cmluZ0ltcGwqLCBBdG9tUnVsZU1hcCYsIENTU1N0eWxlUnVsZSosIENTU1NlbGVjdG9y
Kik7CiAgICAgdm9pZCBzaHJpbmtUb0ZpdCgpOwogICAgIHZvaWQgZGlzYWJsZUF1dG9TaHJpbmtU
b0ZpdCgpIHsgbV9hdXRvU2hyaW5rVG9GaXRFbmFibGVkID0gZmFsc2U7IH0KIApAQCAtMjYwLDYg
KzI2MCwyMyBAQCBwdWJsaWM6CiAgICAgYm9vbCBtX2F1dG9TaHJpbmtUb0ZpdEVuYWJsZWQ7CiB9
OwogCitjbGFzcyBTY29wZWRSdWxlU2V0cyB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoU2Nv
cGVkUnVsZVNldHMpOworcHVibGljOgorICAgIFNjb3BlZFJ1bGVTZXRzKCkgeyB9CisgICAgflNj
b3BlZFJ1bGVTZXRzKCk7CisKKyAgICBSdWxlU2V0KiBnZXQoY29uc3QgRWxlbWVudCogc2NvcGUp
IHsgcmV0dXJuIG1fc2NvcGVkUnVsZVNldE1hcC5nZXQoc2NvcGUpOyB9CisgICAgUnVsZVNldCog
ZW5zdXJlRXhpc3RzKGNvbnN0IEVsZW1lbnQqKTsKKworICAgIHZvaWQgY29sbGVjdEZlYXR1cmVz
KENTU1N0eWxlU2VsZWN0b3I6OkZlYXR1cmVzJikgY29uc3Q7CisKK3ByaXZhdGU6CisgICAgdHlw
ZWRlZiBIYXNoTWFwPGNvbnN0IEVsZW1lbnQqLCBSdWxlU2V0Kj4gU2NvcGVkUnVsZVNldE1hcDsK
KworICAgIFNjb3BlZFJ1bGVTZXRNYXAgbV9zY29wZWRSdWxlU2V0TWFwOworfTsKKwogc3RhdGlj
IFJ1bGVTZXQqIGRlZmF1bHRTdHlsZTsKIHN0YXRpYyBSdWxlU2V0KiBkZWZhdWx0UXVpcmtzU3R5
bGU7CiBzdGF0aWMgUnVsZVNldCogZGVmYXVsdFByaW50U3R5bGU7CkBAIC0zMzQsNiArMzUxLDMy
IEBAIHN0YXRpYyBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbiogcmlnaHRUb0xlZnREZWNsYXJh
dGlvbigpCiAgICAgcmV0dXJuIHJpZ2h0VG9MZWZ0RGVjbC5nZXQoKTsKIH0KIAorLy8gRGV0ZXJt
aW5lIHRoZSBzY29wZSBvZiBhIHN0eWxlIHNoZWV0IChpZiBhbnkpLiBSZXR1cm5zICdmYWxzZScg
aWYgaXQncyBhIHNjb3BlZCBzdHlsZSBzaGVldCBpbiBhbiBpbnZhbGlkIGxvY2F0aW9uLgorc3Rh
dGljIGJvb2wgZGV0ZXJtaW5lU2NvcGUoQ1NTU3R5bGVTaGVldCogc2hlZXQsIGNvbnN0IEVsZW1l
bnQqJiBzY29wZSkKK3sKKyAgICBzY29wZSA9IDA7CisKKyAgICBpZiAoIXNoZWV0KQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisKKyAgICBOb2RlKiBvd25lck5vZGUgPSBzaGVldC0+ZmluZFN0eWxl
U2hlZXRPd25lck5vZGUoKTsKKyAgICBpZiAoIW93bmVyTm9kZSB8fCAhb3duZXJOb2RlLT5pc0hU
TUxFbGVtZW50KCkgfHwgIW93bmVyTm9kZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnN0eWxlVGFn
KSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBIVE1MU3R5bGVFbGVtZW50KiBzdHlsZUVs
ZW1lbnQgPSBzdGF0aWNfY2FzdDxIVE1MU3R5bGVFbGVtZW50Kj4ob3duZXJOb2RlKTsKKyAgICBp
ZiAoIXN0eWxlRWxlbWVudC0+c2NvcGVkKCkpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAg
RG9jdW1lbnQqIGRvY3VtZW50ID0gc3R5bGVFbGVtZW50LT5kb2N1bWVudCgpOworICAgIGlmICgh
ZG9jdW1lbnQpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHNjb3BlID0gc3R5bGVFbGVt
ZW50LT5wYXJlbnRFbGVtZW50KCk7CisgICAgQVNTRVJUKHNjb3BlKTsKKworICAgIHJldHVybiBz
Y29wZTsgLy8gVGhlcmUgbXVzdCBiZSBhIHNjb3BpbmcgZWxlbWVudCAtIHJldHVybiAnZmFsc2Un
IGlmIGZvciB3aGF0ZXZlciByZWFzb24gdGhpcyBpcyBub3QgdGhlIGNhc2UuCit9CisKIENTU1N0
eWxlU2VsZWN0b3I6OkNTU1N0eWxlU2VsZWN0b3IoRG9jdW1lbnQqIGRvY3VtZW50LCBTdHlsZVNo
ZWV0TGlzdCogc3R5bGVTaGVldHMsIENTU1N0eWxlU2hlZXQqIG1hcHBlZEVsZW1lbnRTaGVldCwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1NTU3R5bGVTaGVldCogcGFnZVVz
ZXJTaGVldCwgY29uc3QgVmVjdG9yPFJlZlB0cjxDU1NTdHlsZVNoZWV0PiA+KiBwYWdlR3JvdXBV
c2VyU2hlZXRzLCBjb25zdCBWZWN0b3I8UmVmUHRyPENTU1N0eWxlU2hlZXQ+ID4qIGRvY3VtZW50
VXNlclNoZWV0cywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBzdHJp
Y3RQYXJzaW5nLCBib29sIG1hdGNoQXV0aG9yQW5kVXNlclN0eWxlcykKQEAgLTM3OCw5ICs0MjEs
MTAgQEAgQ1NTU3R5bGVTZWxlY3Rvcjo6Q1NTU3R5bGVTZWxlY3RvcihEb2N1bWVudCogZG9jdW1l
bnQsIFN0eWxlU2hlZXRMaXN0KiBzdHlsZVNoZWUKICAgICBpZiAobV9yb290RGVmYXVsdFN0eWxl
ICYmIHZpZXcpCiAgICAgICAgIG1fbWVkaXVtID0gYWRvcHRQdHIobmV3IE1lZGlhUXVlcnlFdmFs
dWF0b3Iodmlldy0+bWVkaWFUeXBlKCksIHZpZXctPmZyYW1lKCksIG1fcm9vdERlZmF1bHRTdHls
ZS5nZXQoKSkpOwogCi0gICAgbV9hdXRob3JTdHlsZSA9IGFkb3B0UHRyKG5ldyBSdWxlU2V0KTsK
KyAgICBtX2dsb2JhbEF1dGhvclN0eWxlcyA9IGFkb3B0UHRyKG5ldyBSdWxlU2V0KTsKKyAgICBt
X3Njb3BlZEF1dGhvclN0eWxlcyA9IGFkb3B0UHRyKG5ldyBTY29wZWRSdWxlU2V0cyk7CiAgICAg
Ly8gQWRkaW5nIHJ1bGVzIGZyb20gbXVsdGlwbGUgc2hlZXRzLCBzaHJpbmsgYXQgdGhlIGVuZC4K
LSAgICBtX2F1dGhvclN0eWxlLT5kaXNhYmxlQXV0b1Nocmlua1RvRml0KCk7CisgICAgbV9nbG9i
YWxBdXRob3JTdHlsZXMtPmRpc2FibGVBdXRvU2hyaW5rVG9GaXQoKTsKIAogICAgIC8vIEZJWE1F
OiBUaGlzIHN1Y2tzISBUaGUgdXNlciBzaGVldCBpcyByZXBhcnNlZCBldmVyeSB0aW1lIQogICAg
IE93blB0cjxSdWxlU2V0PiB0ZW1wVXNlclN0eWxlID0gYWRvcHRQdHIobmV3IFJ1bGVTZXQpOwpA
QCAtMzkyLDcgKzQzNiw3IEBAIENTU1N0eWxlU2VsZWN0b3I6OkNTU1N0eWxlU2VsZWN0b3IoRG9j
dW1lbnQqIGRvY3VtZW50LCBTdHlsZVNoZWV0TGlzdCogc3R5bGVTaGVlCiAgICAgICAgICAgICBp
ZiAocGFnZUdyb3VwVXNlclNoZWV0cy0+YXQoaSktPmlzVXNlclN0eWxlU2hlZXQoKSkKICAgICAg
ICAgICAgICAgICB0ZW1wVXNlclN0eWxlLT5hZGRSdWxlc0Zyb21TaGVldChwYWdlR3JvdXBVc2Vy
U2hlZXRzLT5hdChpKS5nZXQoKSwgKm1fbWVkaXVtLCB0aGlzKTsKICAgICAgICAgICAgIGVsc2UK
LSAgICAgICAgICAgICAgICBtX2F1dGhvclN0eWxlLT5hZGRSdWxlc0Zyb21TaGVldChwYWdlR3Jv
dXBVc2VyU2hlZXRzLT5hdChpKS5nZXQoKSwgKm1fbWVkaXVtLCB0aGlzKTsKKyAgICAgICAgICAg
ICAgICBtX2dsb2JhbEF1dGhvclN0eWxlcy0+YWRkUnVsZXNGcm9tU2hlZXQocGFnZUdyb3VwVXNl
clNoZWV0cy0+YXQoaSkuZ2V0KCksICptX21lZGl1bSwgdGhpcyk7CiAgICAgICAgIH0KICAgICB9
CiAgICAgaWYgKGRvY3VtZW50VXNlclNoZWV0cykgewpAQCAtNDAxLDcgKzQ0NSw3IEBAIENTU1N0
eWxlU2VsZWN0b3I6OkNTU1N0eWxlU2VsZWN0b3IoRG9jdW1lbnQqIGRvY3VtZW50LCBTdHlsZVNo
ZWV0TGlzdCogc3R5bGVTaGVlCiAgICAgICAgICAgICBpZiAoZG9jdW1lbnRVc2VyU2hlZXRzLT5h
dChpKS0+aXNVc2VyU3R5bGVTaGVldCgpKQogICAgICAgICAgICAgICAgIHRlbXBVc2VyU3R5bGUt
PmFkZFJ1bGVzRnJvbVNoZWV0KGRvY3VtZW50VXNlclNoZWV0cy0+YXQoaSkuZ2V0KCksICptX21l
ZGl1bSwgdGhpcyk7CiAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgbV9hdXRob3JT
dHlsZS0+YWRkUnVsZXNGcm9tU2hlZXQoZG9jdW1lbnRVc2VyU2hlZXRzLT5hdChpKS5nZXQoKSwg
Km1fbWVkaXVtLCB0aGlzKTsKKyAgICAgICAgICAgICAgICBtX2dsb2JhbEF1dGhvclN0eWxlcy0+
YWRkUnVsZXNGcm9tU2hlZXQoZG9jdW1lbnRVc2VyU2hlZXRzLT5hdChpKS5nZXQoKSwgKm1fbWVk
aXVtLCB0aGlzKTsKICAgICAgICAgfQogICAgIH0KIApAQCAtNDA5LDE1ICs0NTMsMjYgQEAgQ1NT
U3R5bGVTZWxlY3Rvcjo6Q1NTU3R5bGVTZWxlY3RvcihEb2N1bWVudCogZG9jdW1lbnQsIFN0eWxl
U2hlZXRMaXN0KiBzdHlsZVNoZWUKICAgICAgICAgbV91c2VyU3R5bGUgPSB0ZW1wVXNlclN0eWxl
LnJlbGVhc2UoKTsKIAogICAgIC8vIEFkZCBydWxlcyBmcm9tIGVsZW1lbnRzIGxpa2UgU1ZHJ3Mg
PGZvbnQtZmFjZT4KLSAgICBpZiAobWFwcGVkRWxlbWVudFNoZWV0KQotICAgICAgICBtX2F1dGhv
clN0eWxlLT5hZGRSdWxlc0Zyb21TaGVldChtYXBwZWRFbGVtZW50U2hlZXQsICptX21lZGl1bSwg
dGhpcyk7CisgICAgaWYgKG1hcHBlZEVsZW1lbnRTaGVldCkgeworICAgICAgICAvLyBGSVhNRTog
c2VlIGlmIHN0eWxlIHNjb3BlcyBjYW4vc2hvdWxkIGJlIGFkZGVkIGhlcmUuCisgICAgICAgIG1f
Z2xvYmFsQXV0aG9yU3R5bGVzLT5hZGRSdWxlc0Zyb21TaGVldChtYXBwZWRFbGVtZW50U2hlZXQs
ICptX21lZGl1bSwgdGhpcyk7CisgICAgfQogCiAgICAgLy8gYWRkIHN0eWxlc2hlZXRzIGZyb20g
ZG9jdW1lbnQKICAgICB1bnNpZ25lZCBsZW5ndGggPSBzdHlsZVNoZWV0cy0+bGVuZ3RoKCk7CiAg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7CiAgICAgICAgIFN0eWxl
U2hlZXQqIHNoZWV0ID0gc3R5bGVTaGVldHMtPml0ZW0oaSk7Ci0gICAgICAgIGlmIChzaGVldC0+
aXNDU1NTdHlsZVNoZWV0KCkgJiYgIXNoZWV0LT5kaXNhYmxlZCgpKQotICAgICAgICAgICAgbV9h
dXRob3JTdHlsZS0+YWRkUnVsZXNGcm9tU2hlZXQoc3RhdGljX2Nhc3Q8Q1NTU3R5bGVTaGVldCo+
KHNoZWV0KSwgKm1fbWVkaXVtLCB0aGlzKTsKKyAgICAgICAgaWYgKHNoZWV0LT5pc0NTU1N0eWxl
U2hlZXQoKSAmJiAhc2hlZXQtPmRpc2FibGVkKCkpIHsKKyAgICAgICAgICAgIENTU1N0eWxlU2hl
ZXQqIGNzc1NoZWV0ID0gc3RhdGljX2Nhc3Q8Q1NTU3R5bGVTaGVldCo+KHNoZWV0KTsKKyAgICAg
ICAgICAgIGNvbnN0IEVsZW1lbnQqIHNjb3BlID0gMDsKKworICAgICAgICAgICAgaWYgKCFkZXRl
cm1pbmVTY29wZShjc3NTaGVldCwgc2NvcGUpKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOwor
ICAgICAgICAgICAgaWYgKHNjb3BlKQorICAgICAgICAgICAgICAgIG1fc2NvcGVkQXV0aG9yU3R5
bGVzLT5lbnN1cmVFeGlzdHMoc2NvcGUpLT5hZGRSdWxlc0Zyb21TaGVldChjc3NTaGVldCwgKm1f
bWVkaXVtLCB0aGlzLCBzY29wZSk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAg
bV9nbG9iYWxBdXRob3JTdHlsZXMtPmFkZFJ1bGVzRnJvbVNoZWV0KGNzc1NoZWV0LCAqbV9tZWRp
dW0sIHRoaXMpOworICAgICAgICB9CiAgICAgfQogICAgIC8vIENvbGxlY3QgYWxsIGlkcyBhbmQg
cnVsZXMgdXNpbmcgc2libGluZyBzZWxlY3RvcnMgKDpmaXJzdC1jaGlsZCBhbmQgc2ltaWxhcikK
ICAgICAvLyBpbiB0aGUgY3VycmVudCBzZXQgb2Ygc3R5bGVzaGVldHMuIFN0eWxlIHNoYXJpbmcg
Y29kZSB1c2VzIHRoaXMgaW5mb3JtYXRpb24gdG8gcmVqZWN0CkBAIC00MjcsMTEgKzQ4MiwxMiBA
QCBDU1NTdHlsZVNlbGVjdG9yOjpDU1NTdHlsZVNlbGVjdG9yKERvY3VtZW50KiBkb2N1bWVudCwg
U3R5bGVTaGVldExpc3QqIHN0eWxlU2hlZQogICAgICAgICBzaWJsaW5nUnVsZXNJbkRlZmF1bHRT
dHlsZS0+Y29sbGVjdEZlYXR1cmVzKG1fZmVhdHVyZXMpOwogICAgIGlmICh1bmNvbW1vbkF0dHJp
YnV0ZVJ1bGVzSW5EZWZhdWx0U3R5bGUpCiAgICAgICAgIHVuY29tbW9uQXR0cmlidXRlUnVsZXNJ
bkRlZmF1bHRTdHlsZS0+Y29sbGVjdEZlYXR1cmVzKG1fZmVhdHVyZXMpOwotICAgIG1fYXV0aG9y
U3R5bGUtPmNvbGxlY3RGZWF0dXJlcyhtX2ZlYXR1cmVzKTsKKyAgICBtX2dsb2JhbEF1dGhvclN0
eWxlcy0+Y29sbGVjdEZlYXR1cmVzKG1fZmVhdHVyZXMpOworICAgIG1fc2NvcGVkQXV0aG9yU3R5
bGVzLT5jb2xsZWN0RmVhdHVyZXMobV9mZWF0dXJlcyk7CiAgICAgaWYgKG1fdXNlclN0eWxlKQog
ICAgICAgICBtX3VzZXJTdHlsZS0+Y29sbGVjdEZlYXR1cmVzKG1fZmVhdHVyZXMpOwogCi0gICAg
bV9hdXRob3JTdHlsZS0+c2hyaW5rVG9GaXQoKTsKKyAgICBtX2dsb2JhbEF1dGhvclN0eWxlcy0+
c2hyaW5rVG9GaXQoKTsKICAgICBpZiAobV9mZWF0dXJlcy5zaWJsaW5nUnVsZXMpCiAgICAgICAg
IG1fZmVhdHVyZXMuc2libGluZ1J1bGVzLT5zaHJpbmtUb0ZpdCgpOwogICAgIGlmIChtX2ZlYXR1
cmVzLnVuY29tbW9uQXR0cmlidXRlUnVsZXMpCkBAIC02MDcsNyArNjYzLDY0IEBAIHZvaWQgQ1NT
U3R5bGVTZWxlY3Rvcjo6YWRkTWF0Y2hlZERlY2xhcmF0aW9uKENTU011dGFibGVTdHlsZURlY2xh
cmF0aW9uKiBzdHlsZURlCiAgICAgbmV3RGVjbGFyYXRpb24ubGlua01hdGNoVHlwZSA9IGxpbmtN
YXRjaFR5cGU7CiB9CiAKLXZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6bWF0Y2hSdWxlcyhSdWxlU2V0
KiBydWxlcywgaW50JiBmaXJzdFJ1bGVJbmRleCwgaW50JiBsYXN0UnVsZUluZGV4LCBib29sIGlu
Y2x1ZGVFbXB0eVJ1bGVzKQordm9pZCBDU1NTdHlsZVNlbGVjdG9yOjptYXRjaEF1dGhvclJ1bGVz
KGludCYgZmlyc3RSdWxlSW5kZXgsIGludCYgbGFzdFJ1bGVJbmRleCwgYm9vbCBpbmNsdWRlRW1w
dHlSdWxlcykKK3sKKyAgICBtX21hdGNoZWRSdWxlcy5jbGVhcigpOworCisgICAgLy8gTWF0Y2gg
Z2xvYmFsIGF1dGhvciBydWxlcy4KKyAgICBtYXRjaFJ1bGVTZXQobV9nbG9iYWxBdXRob3JTdHls
ZXMuZ2V0KCksIDAsIGZpcnN0UnVsZUluZGV4LCBsYXN0UnVsZUluZGV4LCBpbmNsdWRlRW1wdHlS
dWxlcyk7CisgICAgLy8gTWF0Y2ggc2NvcGVkIHN0eWxlIHNoZWV0J3MgcnVsZXMuCisgICAgaWYg
KG1fY2hlY2tlci5wYXJlbnRTdGFja0lzQ29uc2lzdGVudChtX3BhcmVudE5vZGUpKSB7CisgICAg
ICAgIC8vIEZhc3QgYnJhbmNoOiBhY2Nlc3MgZW5jbG9zaW5nIHNjb3BlcyBkaXJlY3RseSBmcm9t
IHBhcmVudCBzdGFjayAoYnV0IHN0YXJ0IHdpdGggY3VycmVudCBlbGVtZW50KS4KKyAgICAgICAg
aWYgKG1fZWxlbWVudC0+aGFzU2NvcGVkSFRNTFN0eWxlQ2hpbGQoKSkgeworICAgICAgICAgICAg
UnVsZVNldCogcnVsZVNldCA9IG1fc2NvcGVkQXV0aG9yU3R5bGVzLT5nZXQobV9lbGVtZW50KTsK
KyAgICAgICAgICAgIGlmIChydWxlU2V0KQorICAgICAgICAgICAgICAgIG1hdGNoUnVsZVNldChy
dWxlU2V0LCBtX2VsZW1lbnQsIGZpcnN0UnVsZUluZGV4LCBsYXN0UnVsZUluZGV4LCBpbmNsdWRl
RW1wdHlSdWxlcyk7CisgICAgICAgIH0KKyAgICAgICAgaW50IHNjb3BlSW5kZXggPSBtX2NoZWNr
ZXIuZ2V0SW5uZXJtb3N0U3R5bGVTY29wZUVsZW1lbnRJbmRleCgpOworICAgICAgICB3aGlsZSAo
c2NvcGVJbmRleCA+PSAwKSB7CisgICAgICAgICAgICBjb25zdCBFbGVtZW50KiBzY29wZSA9IG1f
Y2hlY2tlci5nZXRFbGVtZW50V2l0aEluZGV4KHNjb3BlSW5kZXgpOworICAgICAgICAgICAgUnVs
ZVNldCogcnVsZVNldCA9IG1fc2NvcGVkQXV0aG9yU3R5bGVzLT5nZXQoc2NvcGUpOworICAgICAg
ICAgICAgaWYgKHJ1bGVTZXQpCisgICAgICAgICAgICAgICAgbWF0Y2hSdWxlU2V0KHJ1bGVTZXQs
IHNjb3BlLCBmaXJzdFJ1bGVJbmRleCwgbGFzdFJ1bGVJbmRleCwgaW5jbHVkZUVtcHR5UnVsZXMp
OworICAgICAgICAgICAgc2NvcGVJbmRleCA9IG1fY2hlY2tlci5nZXRFbmNsb3NpbmdTdHlsZVNj
b3BlRWxlbWVudEluZGV4KHNjb3BlSW5kZXgpOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAg
ICAgICAgLy8gU2xvdyBicmFuY2g6IGNsaW1iIHRyZWUsIGNoZWNrIGZvciBzdHlsZSBzY29wZXMg
YXQgZXZlcnkgZWxlbWVudC4KKyAgICAgICAgZm9yIChjb25zdCBOb2RlKiBub2RlID0gbV9lbGVt
ZW50OyBub2RlOyBub2RlID0gbm9kZS0+cGFyZW50Tm9kZSgpKSB7CisgICAgICAgICAgICBpZiAo
IW5vZGUtPmlzRWxlbWVudE5vZGUoKSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAg
ICAgICAgIGNvbnN0IEVsZW1lbnQqIGVsZW1lbnQgPSB0b0VsZW1lbnQobm9kZSk7CisgICAgICAg
ICAgICBpZiAoIWVsZW1lbnQtPmhhc1Njb3BlZEhUTUxTdHlsZUNoaWxkKCkpCisgICAgICAgICAg
ICAgICAgY29udGludWU7CisgICAgICAgICAgICBSdWxlU2V0KiBydWxlU2V0ID0gbV9zY29wZWRB
dXRob3JTdHlsZXMtPmdldChlbGVtZW50KTsKKyAgICAgICAgICAgIGlmIChydWxlU2V0KQorICAg
ICAgICAgICAgICAgIG1hdGNoUnVsZVNldChydWxlU2V0LCBlbGVtZW50LCBmaXJzdFJ1bGVJbmRl
eCwgbGFzdFJ1bGVJbmRleCwgaW5jbHVkZUVtcHR5UnVsZXMpOworICAgICAgICB9CisgICAgfQor
CisgICAgc29ydEFuZFRyYW5zZmVyTWF0Y2hlZFJ1bGVzKG1fY2hlY2tlci5pc0NvbGxlY3RpbmdS
dWxlc09ubHkoKSk7Cit9CisKK3ZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6bWF0Y2hSdWxlc0dsb2Jh
bGx5KFJ1bGVTZXQqIHJ1bGVzLCBpbnQmIGZpcnN0UnVsZUluZGV4LCBpbnQmIGxhc3RSdWxlSW5k
ZXgsIGJvb2wgaW5jbHVkZUVtcHR5UnVsZXMpCit7CisgICAgbV9tYXRjaGVkUnVsZXMuY2xlYXIo
KTsKKworICAgIGlmICghcnVsZXMgfHwgIW1fZWxlbWVudCkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgbWF0Y2hSdWxlU2V0KHJ1bGVzLCAwLCBmaXJzdFJ1bGVJbmRleCwgbGFzdFJ1bGVJbmRleCwg
aW5jbHVkZUVtcHR5UnVsZXMpOworICAgIHNvcnRBbmRUcmFuc2Zlck1hdGNoZWRSdWxlcyhtX2No
ZWNrZXIuaXNDb2xsZWN0aW5nUnVsZXNPbmx5KCkpOworfQorCitzdGF0aWMgaW5saW5lIGJvb2wg
bGVzc1NwZWNpZmljKGNvbnN0IFJ1bGVEYXRhKiByMSwgY29uc3QgUnVsZURhdGEqIHIyKQorewor
ICAgIHVuc2lnbmVkIHNwZWNpZmljaXR5MSA9IHIxLT5zcGVjaWZpY2l0eSgpOworICAgIHVuc2ln
bmVkIHNwZWNpZmljaXR5MiA9IHIyLT5zcGVjaWZpY2l0eSgpOworICAgIHJldHVybiAoc3BlY2lm
aWNpdHkxID09IHNwZWNpZmljaXR5MikgPyByMS0+cG9zaXRpb24oKSA8IHIyLT5wb3NpdGlvbigp
IDogc3BlY2lmaWNpdHkxIDwgc3BlY2lmaWNpdHkyOyAKK30KKwordm9pZCBDU1NTdHlsZVNlbGVj
dG9yOjptYXRjaFJ1bGVTZXQoUnVsZVNldCogcnVsZXMsIGNvbnN0IEVsZW1lbnQqIHNjb3BlLCBp
bnQmIGZpcnN0UnVsZUluZGV4LCBpbnQmIGxhc3RSdWxlSW5kZXgsIGJvb2wgaW5jbHVkZUVtcHR5
UnVsZXMpCiB7CiAgICAgbV9tYXRjaGVkUnVsZXMuY2xlYXIoKTsKIApAQCAtNjE3LDM1ICs3MzAs
NDQgQEAgdm9pZCBDU1NTdHlsZVNlbGVjdG9yOjptYXRjaFJ1bGVzKFJ1bGVTZXQqIHJ1bGVzLCBp
bnQmIGZpcnN0UnVsZUluZGV4LCBpbnQmIGxhc3QKICAgICAvLyBXZSBuZWVkIHRvIGNvbGxlY3Qg
dGhlIHJ1bGVzIGZvciBpZCwgY2xhc3MsIHRhZywgYW5kIGV2ZXJ5dGhpbmcgZWxzZSBpbnRvIGEg
YnVmZmVyIGFuZAogICAgIC8vIHRoZW4gc29ydCB0aGUgYnVmZmVyLgogICAgIGlmIChtX2VsZW1l
bnQtPmhhc0lEKCkpCi0gICAgICAgIG1hdGNoUnVsZXNGb3JMaXN0KHJ1bGVzLT5pZFJ1bGVzKG1f
ZWxlbWVudC0+aWRGb3JTdHlsZVJlc29sdXRpb24oKS5pbXBsKCkpLCBmaXJzdFJ1bGVJbmRleCwg
bGFzdFJ1bGVJbmRleCwgaW5jbHVkZUVtcHR5UnVsZXMpOworICAgICAgICBtYXRjaFJ1bGVzRm9y
TGlzdChydWxlcy0+aWRSdWxlcyhtX2VsZW1lbnQtPmlkRm9yU3R5bGVSZXNvbHV0aW9uKCkuaW1w
bCgpKSwgc2NvcGUsIGZpcnN0UnVsZUluZGV4LCBsYXN0UnVsZUluZGV4LCBpbmNsdWRlRW1wdHlS
dWxlcyk7CiAgICAgaWYgKG1fZWxlbWVudC0+aGFzQ2xhc3MoKSkgewogICAgICAgICBBU1NFUlQo
bV9zdHlsZWRFbGVtZW50KTsKICAgICAgICAgY29uc3QgU3BhY2VTcGxpdFN0cmluZyYgY2xhc3NO
YW1lcyA9IG1fc3R5bGVkRWxlbWVudC0+Y2xhc3NOYW1lcygpOwogICAgICAgICBzaXplX3Qgc2l6
ZSA9IGNsYXNzTmFtZXMuc2l6ZSgpOwogICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNp
emU7ICsraSkKLSAgICAgICAgICAgIG1hdGNoUnVsZXNGb3JMaXN0KHJ1bGVzLT5jbGFzc1J1bGVz
KGNsYXNzTmFtZXNbaV0uaW1wbCgpKSwgZmlyc3RSdWxlSW5kZXgsIGxhc3RSdWxlSW5kZXgsIGlu
Y2x1ZGVFbXB0eVJ1bGVzKTsKKyAgICAgICAgICAgIG1hdGNoUnVsZXNGb3JMaXN0KHJ1bGVzLT5j
bGFzc1J1bGVzKGNsYXNzTmFtZXNbaV0uaW1wbCgpKSwgc2NvcGUsIGZpcnN0UnVsZUluZGV4LCBs
YXN0UnVsZUluZGV4LCBpbmNsdWRlRW1wdHlSdWxlcyk7CiAgICAgfQogICAgIGNvbnN0IEF0b21p
Y1N0cmluZyYgcHNldWRvSWQgPSBtX2VsZW1lbnQtPnNoYWRvd1BzZXVkb0lkKCk7CiAgICAgaWYg
KCFwc2V1ZG9JZC5pc0VtcHR5KCkpIHsKICAgICAgICAgQVNTRVJUKG1fc3R5bGVkRWxlbWVudCk7
Ci0gICAgICAgIG1hdGNoUnVsZXNGb3JMaXN0KHJ1bGVzLT5zaGFkb3dQc2V1ZG9FbGVtZW50UnVs
ZXMocHNldWRvSWQuaW1wbCgpKSwgZmlyc3RSdWxlSW5kZXgsIGxhc3RSdWxlSW5kZXgsIGluY2x1
ZGVFbXB0eVJ1bGVzKTsKKyAgICAgICAgbWF0Y2hSdWxlc0Zvckxpc3QocnVsZXMtPnNoYWRvd1Bz
ZXVkb0VsZW1lbnRSdWxlcyhwc2V1ZG9JZC5pbXBsKCkpLCBzY29wZSwgZmlyc3RSdWxlSW5kZXgs
IGxhc3RSdWxlSW5kZXgsIGluY2x1ZGVFbXB0eVJ1bGVzKTsKICAgICB9CiAgICAgaWYgKG1fZWxl
bWVudC0+aXNMaW5rKCkpCi0gICAgICAgIG1hdGNoUnVsZXNGb3JMaXN0KHJ1bGVzLT5saW5rUHNl
dWRvQ2xhc3NSdWxlcygpLCBmaXJzdFJ1bGVJbmRleCwgbGFzdFJ1bGVJbmRleCwgaW5jbHVkZUVt
cHR5UnVsZXMpOworICAgICAgICBtYXRjaFJ1bGVzRm9yTGlzdChydWxlcy0+bGlua1BzZXVkb0Ns
YXNzUnVsZXMoKSwgc2NvcGUsIGZpcnN0UnVsZUluZGV4LCBsYXN0UnVsZUluZGV4LCBpbmNsdWRl
RW1wdHlSdWxlcyk7CiAgICAgaWYgKG1fY2hlY2tlci5tYXRjaGVzRm9jdXNQc2V1ZG9DbGFzcyht
X2VsZW1lbnQpKQotICAgICAgICBtYXRjaFJ1bGVzRm9yTGlzdChydWxlcy0+Zm9jdXNQc2V1ZG9D
bGFzc1J1bGVzKCksIGZpcnN0UnVsZUluZGV4LCBsYXN0UnVsZUluZGV4LCBpbmNsdWRlRW1wdHlS
dWxlcyk7Ci0gICAgbWF0Y2hSdWxlc0Zvckxpc3QocnVsZXMtPnRhZ1J1bGVzKG1fZWxlbWVudC0+
bG9jYWxOYW1lKCkuaW1wbCgpKSwgZmlyc3RSdWxlSW5kZXgsIGxhc3RSdWxlSW5kZXgsIGluY2x1
ZGVFbXB0eVJ1bGVzKTsKLSAgICBtYXRjaFJ1bGVzRm9yTGlzdChydWxlcy0+dW5pdmVyc2FsUnVs
ZXMoKSwgZmlyc3RSdWxlSW5kZXgsIGxhc3RSdWxlSW5kZXgsIGluY2x1ZGVFbXB0eVJ1bGVzKTsK
KyAgICAgICAgbWF0Y2hSdWxlc0Zvckxpc3QocnVsZXMtPmZvY3VzUHNldWRvQ2xhc3NSdWxlcygp
LCBzY29wZSwgZmlyc3RSdWxlSW5kZXgsIGxhc3RSdWxlSW5kZXgsIGluY2x1ZGVFbXB0eVJ1bGVz
KTsKKyAgICBtYXRjaFJ1bGVzRm9yTGlzdChydWxlcy0+dGFnUnVsZXMobV9lbGVtZW50LT5sb2Nh
bE5hbWUoKS5pbXBsKCkpLCBzY29wZSwgZmlyc3RSdWxlSW5kZXgsIGxhc3RSdWxlSW5kZXgsIGlu
Y2x1ZGVFbXB0eVJ1bGVzKTsKKyAgICBtYXRjaFJ1bGVzRm9yTGlzdChydWxlcy0+dW5pdmVyc2Fs
UnVsZXMoKSwgc2NvcGUsIGZpcnN0UnVsZUluZGV4LCBsYXN0UnVsZUluZGV4LCBpbmNsdWRlRW1w
dHlSdWxlcyk7Cit9CiAKK3ZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6c29ydEFuZFRyYW5zZmVyTWF0
Y2hlZFJ1bGVzKGJvb2wgY29sbGVjdFJ1bGVzT25seSkKK3sKICAgICAvLyBJZiB3ZSBkaWRuJ3Qg
bWF0Y2ggYW55IHJ1bGVzLCB3ZSdyZSBkb25lLgogICAgIGlmIChtX21hdGNoZWRSdWxlcy5pc0Vt
cHR5KCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIC8vIFNvcnQgdGhlIHNldCBvZiBtYXRjaGVk
IHJ1bGVzLgotICAgIHNvcnRNYXRjaGVkUnVsZXMoKTsKKyAgICBzdGQ6OnNvcnQobV9tYXRjaGVk
UnVsZXMuYmVnaW4oKSwgbV9tYXRjaGVkUnVsZXMuZW5kKCksIGxlc3NTcGVjaWZpYyk7CiAKICAg
ICAvLyBOb3cgdHJhbnNmZXIgdGhlIHNldCBvZiBtYXRjaGVkIHJ1bGVzIG92ZXIgdG8gb3VyIGxp
c3Qgb2YgZGVjbHMuCi0gICAgaWYgKCFtX2NoZWNrZXIuaXNDb2xsZWN0aW5nUnVsZXNPbmx5KCkp
IHsKKyAgICBpZiAoY29sbGVjdFJ1bGVzT25seSkgeworICAgICAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgbV9tYXRjaGVkUnVsZXMuc2l6ZSgpOyBpKyspIHsKKyAgICAgICAgICAgIGlmICgh
bV9ydWxlTGlzdCkKKyAgICAgICAgICAgICAgICBtX3J1bGVMaXN0ID0gQ1NTUnVsZUxpc3Q6OmNy
ZWF0ZSgpOworICAgICAgICAgICAgbV9ydWxlTGlzdC0+YXBwZW5kKG1fbWF0Y2hlZFJ1bGVzW2ld
LT5ydWxlKCkpOworICAgICAgICB9CisgICAgfSBlbHNlIHsKICAgICAgICAgLy8gRklYTUU6IFRo
aXMgc3Vja3MsIHRoZSBpbnNwZWN0b3Igc2hvdWxkIGdldCB0aGUgc3R5bGUgZnJvbSB0aGUgdmlz
aXRlZCBzdHlsZSBpdHNlbGYuCiAgICAgICAgIGJvb2wgc3dhcFZpc2l0ZWRVbnZpc2l0ZWQgPSBJ
bnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmZvcmNlUHNldWRvU3RhdGUobV9lbGVtZW50LCBDU1NT
ZWxlY3Rvcjo6UHNldWRvVmlzaXRlZCk7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBtX21hdGNoZWRSdWxlcy5zaXplKCk7IGkrKykgewpAQCAtNjU2LDEyICs3NzgsNiBAQCB2b2lk
IENTU1N0eWxlU2VsZWN0b3I6Om1hdGNoUnVsZXMoUnVsZVNldCogcnVsZXMsIGludCYgZmlyc3RS
dWxlSW5kZXgsIGludCYgbGFzdAogICAgICAgICAgICAgICAgIGxpbmtNYXRjaFR5cGUgPSAobGlu
a01hdGNoVHlwZSA9PSBTZWxlY3RvckNoZWNrZXI6Ok1hdGNoVmlzaXRlZCkgPyBTZWxlY3RvckNo
ZWNrZXI6Ok1hdGNoTGluayA6IFNlbGVjdG9yQ2hlY2tlcjo6TWF0Y2hWaXNpdGVkOwogICAgICAg
ICAgICAgYWRkTWF0Y2hlZERlY2xhcmF0aW9uKG1fbWF0Y2hlZFJ1bGVzW2ldLT5ydWxlKCktPmRl
Y2xhcmF0aW9uKCksIGxpbmtNYXRjaFR5cGUpOwogICAgICAgICB9Ci0gICAgfSBlbHNlIHsKLSAg
ICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fbWF0Y2hlZFJ1bGVzLnNpemUoKTsgaSsr
KSB7Ci0gICAgICAgICAgICBpZiAoIW1fcnVsZUxpc3QpCi0gICAgICAgICAgICAgICAgbV9ydWxl
TGlzdCA9IENTU1J1bGVMaXN0OjpjcmVhdGUoKTsKLSAgICAgICAgICAgIG1fcnVsZUxpc3QtPmFw
cGVuZChtX21hdGNoZWRSdWxlc1tpXS0+cnVsZSgpKTsKLSAgICAgICAgfQogICAgIH0KIH0KIApA
QCAtNjk0LDEyICs4MTAsMTUgQEAgaW5saW5lIGJvb2wgTWF0Y2hpbmdVQVJ1bGVzU2NvcGU6Omlz
TWF0Y2hpbmdVQVJ1bGVzKCkKIAogYm9vbCBNYXRjaGluZ1VBUnVsZXNTY29wZTo6bV9tYXRjaGlu
Z1VBUnVsZXMgPSBmYWxzZTsKIAotaW5saW5lIHN0YXRpYyBib29sIG1hdGNoZXNJblRyZWVTY29w
ZShUcmVlU2NvcGUqIHRyZWVTY29wZSwgYm9vbCBydWxlUmVhY2hlc0ludG9TaGFkb3dET00pCitp
bmxpbmUgc3RhdGljIGJvb2wgbWF0Y2hlc0luVHJlZVNjb3BlKFRyZWVTY29wZSogdHJlZVNjb3Bl
LCBjb25zdCBFbGVtZW50KiBzdHlsZVNjb3BlLCBib29sIHJ1bGVSZWFjaGVzSW50b1NoYWRvd0RP
TSkKIHsKLSAgICByZXR1cm4gTWF0Y2hpbmdVQVJ1bGVzU2NvcGU6OmlzTWF0Y2hpbmdVQVJ1bGVz
KCkgfHwgdHJlZVNjb3BlLT5hcHBseUF1dGhvclNoZWV0cygpIHx8IHJ1bGVSZWFjaGVzSW50b1No
YWRvd0RPTTsKKyAgICByZXR1cm4gTWF0Y2hpbmdVQVJ1bGVzU2NvcGU6OmlzTWF0Y2hpbmdVQVJ1
bGVzKCkKKyAgICAgICAgfHwgdHJlZVNjb3BlLT5hcHBseUF1dGhvclNoZWV0cygpCisgICAgICAg
IHx8IChzdHlsZVNjb3BlICYmIHN0eWxlU2NvcGUtPnRyZWVTY29wZSgpID09IHRyZWVTY29wZSkK
KyAgICAgICAgfHwgcnVsZVJlYWNoZXNJbnRvU2hhZG93RE9NOwogfQogCi12b2lkIENTU1N0eWxl
U2VsZWN0b3I6Om1hdGNoUnVsZXNGb3JMaXN0KGNvbnN0IFZlY3RvcjxSdWxlRGF0YT4qIHJ1bGVz
LCBpbnQmIGZpcnN0UnVsZUluZGV4LCBpbnQmIGxhc3RSdWxlSW5kZXgsIGJvb2wgaW5jbHVkZUVt
cHR5UnVsZXMpCit2b2lkIENTU1N0eWxlU2VsZWN0b3I6Om1hdGNoUnVsZXNGb3JMaXN0KGNvbnN0
IFZlY3RvcjxSdWxlRGF0YT4qIHJ1bGVzLCBjb25zdCBFbGVtZW50KiBzY29wZSwgaW50JiBmaXJz
dFJ1bGVJbmRleCwgaW50JiBsYXN0UnVsZUluZGV4LCBib29sIGluY2x1ZGVFbXB0eVJ1bGVzKQog
ewogICAgIGlmICghcnVsZXMpCiAgICAgICAgIHJldHVybjsKQEAgLTcxMiw4ICs4MzEsOCBAQCB2
b2lkIENTU1N0eWxlU2VsZWN0b3I6Om1hdGNoUnVsZXNGb3JMaXN0KGNvbnN0IFZlY3RvcjxSdWxl
RGF0YT4qIHJ1bGVzLCBpbnQmIGZpcgogICAgICAgICBjb25zdCBSdWxlRGF0YSYgcnVsZURhdGEg
PSBydWxlcy0+YXQoaSk7CiAgICAgICAgIGlmIChjYW5Vc2VGYXN0UmVqZWN0ICYmIG1fY2hlY2tl
ci5mYXN0UmVqZWN0U2VsZWN0b3I8UnVsZURhdGE6Om1heGltdW1JZGVudGlmaWVyQ291bnQ+KHJ1
bGVEYXRhLmRlc2NlbmRhbnRTZWxlY3RvcklkZW50aWZpZXJIYXNoZXMoKSkpCiAgICAgICAgICAg
ICBjb250aW51ZTsKLSAgICAgICAgaWYgKGNoZWNrU2VsZWN0b3IocnVsZURhdGEpKSB7Ci0gICAg
ICAgICAgICBpZiAoIW1hdGNoZXNJblRyZWVTY29wZShtX2VsZW1lbnQtPnRyZWVTY29wZSgpLCBt
X2NoZWNrZXIuaGFzVW5rbm93blBzZXVkb0VsZW1lbnRzKCkpKQorICAgICAgICBpZiAoY2hlY2tT
ZWxlY3RvcihydWxlRGF0YSwgc2NvcGUpKSB7CisgICAgICAgICAgICBpZiAoIW1hdGNoZXNJblRy
ZWVTY29wZShtX2VsZW1lbnQtPnRyZWVTY29wZSgpLCBzY29wZSwgbV9jaGVja2VyLmhhc1Vua25v
d25Qc2V1ZG9FbGVtZW50cygpKSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAg
ICAgIC8vIElmIHRoZSBydWxlIGhhcyBubyBwcm9wZXJ0aWVzIHRvIGFwcGx5LCB0aGVuIGlnbm9y
ZSBpdCBpbiB0aGUgbm9uLWRlYnVnIG1vZGUuCiAgICAgICAgICAgICBDU1NTdHlsZVJ1bGUqIHJ1
bGUgPSBydWxlRGF0YS5ydWxlKCk7CkBAIC03NDIsMjUgKzg2MSwxMyBAQCB2b2lkIENTU1N0eWxl
U2VsZWN0b3I6Om1hdGNoUnVsZXNGb3JMaXN0KGNvbnN0IFZlY3RvcjxSdWxlRGF0YT4qIHJ1bGVz
LCBpbnQmIGZpcgogICAgIH0KIH0KIAotc3RhdGljIGlubGluZSBib29sIGNvbXBhcmVSdWxlcyhj
b25zdCBSdWxlRGF0YSogcjEsIGNvbnN0IFJ1bGVEYXRhKiByMikKLXsKLSAgICB1bnNpZ25lZCBz
cGVjaWZpY2l0eTEgPSByMS0+c3BlY2lmaWNpdHkoKTsKLSAgICB1bnNpZ25lZCBzcGVjaWZpY2l0
eTIgPSByMi0+c3BlY2lmaWNpdHkoKTsKLSAgICByZXR1cm4gKHNwZWNpZmljaXR5MSA9PSBzcGVj
aWZpY2l0eTIpID8gcjEtPnBvc2l0aW9uKCkgPCByMi0+cG9zaXRpb24oKSA6IHNwZWNpZmljaXR5
MSA8IHNwZWNpZmljaXR5MjsKLX0KLQotdm9pZCBDU1NTdHlsZVNlbGVjdG9yOjpzb3J0TWF0Y2hl
ZFJ1bGVzKCkKLXsKLSAgICBzdGQ6OnNvcnQobV9tYXRjaGVkUnVsZXMuYmVnaW4oKSwgbV9tYXRj
aGVkUnVsZXMuZW5kKCksIGNvbXBhcmVSdWxlcyk7Ci19Ci0KIHZvaWQgQ1NTU3R5bGVTZWxlY3Rv
cjo6bWF0Y2hBbGxSdWxlcyhNYXRjaFJlc3VsdCYgcmVzdWx0KQogewogICAgIG1hdGNoVUFSdWxl
cyhyZXN1bHQpOwogCiAgICAgLy8gTm93IHdlIGNoZWNrIHVzZXIgc2hlZXQgcnVsZXMuCiAgICAg
aWYgKG1fbWF0Y2hBdXRob3JBbmRVc2VyU3R5bGVzKQotICAgICAgICBtYXRjaFJ1bGVzKG1fdXNl
clN0eWxlLmdldCgpLCByZXN1bHQuZmlyc3RVc2VyUnVsZSwgcmVzdWx0Lmxhc3RVc2VyUnVsZSwg
ZmFsc2UpOworICAgICAgICBtYXRjaFJ1bGVzR2xvYmFsbHkobV91c2VyU3R5bGUuZ2V0KCksIHJl
c3VsdC5maXJzdFVzZXJSdWxlLCByZXN1bHQubGFzdFVzZXJSdWxlLCBmYWxzZSk7CiAgICAgICAg
IAogICAgIC8vIE5vdyBjaGVjayBhdXRob3IgcnVsZXMsIGJlZ2lubmluZyBmaXJzdCB3aXRoIHBy
ZXNlbnRhdGlvbmFsIGF0dHJpYnV0ZXMgbWFwcGVkIGZyb20gSFRNTC4KICAgICBpZiAobV9zdHls
ZWRFbGVtZW50KSB7CkBAIC04MDYsNyArOTEzLDcgQEAgdm9pZCBDU1NTdHlsZVNlbGVjdG9yOjpt
YXRjaEFsbFJ1bGVzKE1hdGNoUmVzdWx0JiByZXN1bHQpCiAgICAgCiAgICAgLy8gQ2hlY2sgdGhl
IHJ1bGVzIGluIGF1dGhvciBzaGVldHMgbmV4dC4KICAgICBpZiAobV9tYXRjaEF1dGhvckFuZFVz
ZXJTdHlsZXMpCi0gICAgICAgIG1hdGNoUnVsZXMobV9hdXRob3JTdHlsZS5nZXQoKSwgcmVzdWx0
LmZpcnN0QXV0aG9yUnVsZSwgcmVzdWx0Lmxhc3RBdXRob3JSdWxlLCBmYWxzZSk7CisgICAgICAg
IG1hdGNoQXV0aG9yUnVsZXMocmVzdWx0LmZpcnN0QXV0aG9yUnVsZSwgcmVzdWx0Lmxhc3RBdXRo
b3JSdWxlLCBmYWxzZSk7CiAgICAgICAgIAogICAgIC8vIE5vdyBjaGVjayBvdXIgaW5saW5lIHN0
eWxlIGF0dHJpYnV0ZS4KICAgICBpZiAobV9tYXRjaEF1dGhvckFuZFVzZXJTdHlsZXMgJiYgbV9z
dHlsZWRFbGVtZW50KSB7CkBAIC04NjksNiArOTc2LDggQEAgTm9kZSogQ1NTU3R5bGVTZWxlY3Rv
cjo6bG9jYXRlQ291c2luTGlzdChFbGVtZW50KiBwYXJlbnQsIHVuc2lnbmVkJiB2aXNpdGVkTm9k
ZUMKICAgICAgICAgcmV0dXJuIDA7CiAgICAgaWYgKCFwYXJlbnQgfHwgIXBhcmVudC0+aXNTdHls
ZWRFbGVtZW50KCkpCiAgICAgICAgIHJldHVybiAwOworICAgIGlmIChwYXJlbnQtPmhhc1Njb3Bl
ZEhUTUxTdHlsZUNoaWxkKCkpCisgICAgICAgIHJldHVybiAwOwogICAgIFN0eWxlZEVsZW1lbnQq
IHAgPSBzdGF0aWNfY2FzdDxTdHlsZWRFbGVtZW50Kj4ocGFyZW50KTsKICAgICBpZiAocC0+aW5s
aW5lU3R5bGVEZWNsKCkpCiAgICAgICAgIHJldHVybiAwOwpAQCAtODg0LDggKzk5MywxMCBAQCBO
b2RlKiBDU1NTdHlsZVNlbGVjdG9yOjpsb2NhdGVDb3VzaW5MaXN0KEVsZW1lbnQqIHBhcmVudCwg
dW5zaWduZWQmIHZpc2l0ZWROb2RlQwogICAgIC8vIHdpbGwgbmV2ZXIgZ28gZGVlcGVyIHRoYW4g
Y1N0eWxlU2VhcmNoTGV2ZWxUaHJlc2hvbGQgbGV2ZWxzIGludG8gcmVjdXJzaW9uLgogICAgIHZp
c2l0ZWROb2RlQ291bnQgKz0gY1N0eWxlU2VhcmNoVGhyZXNob2xkOwogICAgIHdoaWxlICh0aGlz
Q291c2luKSB7Ci0gICAgICAgIHdoaWxlIChjdXJyZW50Tm9kZSkgeworICAgICAgICBmb3IgKDsg
Y3VycmVudE5vZGU7IGN1cnJlbnROb2RlID0gY3VycmVudE5vZGUtPnByZXZpb3VzU2libGluZygp
KSB7CiAgICAgICAgICAgICArK3N1YmNvdW50OworICAgICAgICAgICAgaWYgKGN1cnJlbnROb2Rl
LT5pc0VsZW1lbnROb2RlKCkgJiYgdG9FbGVtZW50KGN1cnJlbnROb2RlKS0+aGFzU2NvcGVkSFRN
TFN0eWxlQ2hpbGQoKSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIGlm
IChjdXJyZW50Tm9kZS0+cmVuZGVyU3R5bGUoKSA9PSBwYXJlbnRTdHlsZSAmJiBjdXJyZW50Tm9k
ZS0+bGFzdENoaWxkKCkpIHsKICAgICAgICAgICAgICAgICAvLyBBZGp1c3QgZm9yIHVudXNlZCBy
ZXNlcnZlZCB0cmllcy4KICAgICAgICAgICAgICAgICB2aXNpdGVkTm9kZUNvdW50IC09IGNTdHls
ZVNlYXJjaFRocmVzaG9sZCAtIHN1YmNvdW50OwpAQCAtODkzLDcgKzEwMDQsNiBAQCBOb2RlKiBD
U1NTdHlsZVNlbGVjdG9yOjpsb2NhdGVDb3VzaW5MaXN0KEVsZW1lbnQqIHBhcmVudCwgdW5zaWdu
ZWQmIHZpc2l0ZWROb2RlQwogICAgICAgICAgICAgfQogICAgICAgICAgICAgaWYgKHN1YmNvdW50
ID49IGNTdHlsZVNlYXJjaFRocmVzaG9sZCkKICAgICAgICAgICAgICAgICByZXR1cm4gMDsKLSAg
ICAgICAgICAgIGN1cnJlbnROb2RlID0gY3VycmVudE5vZGUtPnByZXZpb3VzU2libGluZygpOwog
ICAgICAgICB9CiAgICAgICAgIGN1cnJlbnROb2RlID0gbG9jYXRlQ291c2luTGlzdCh0aGlzQ291
c2luLT5wYXJlbnRFbGVtZW50KCksIHZpc2l0ZWROb2RlQ291bnQpOwogICAgICAgICB0aGlzQ291
c2luID0gY3VycmVudE5vZGU7CkBAIC05MDIsMTAgKzEwMTIsMTAgQEAgTm9kZSogQ1NTU3R5bGVT
ZWxlY3Rvcjo6bG9jYXRlQ291c2luTGlzdChFbGVtZW50KiBwYXJlbnQsIHVuc2lnbmVkJiB2aXNp
dGVkTm9kZUMKICAgICByZXR1cm4gMDsKIH0KIAotYm9vbCBDU1NTdHlsZVNlbGVjdG9yOjptYXRj
aGVzUnVsZVNldChSdWxlU2V0KiBydWxlU2V0KQorYm9vbCBDU1NTdHlsZVNlbGVjdG9yOjptYXRj
aGVzUnVsZVNldEdsb2JhbGx5KFJ1bGVTZXQqIHJ1bGVTZXQpCiB7CiAgICAgaW50IGZpcnN0U2li
bGluZ1J1bGUgPSAtMSwgbGFzdFNpYmxpbmdSdWxlID0gLTE7Ci0gICAgbWF0Y2hSdWxlcyhydWxl
U2V0LCBmaXJzdFNpYmxpbmdSdWxlLCBsYXN0U2libGluZ1J1bGUsIGZhbHNlKTsKKyAgICBtYXRj
aFJ1bGVzR2xvYmFsbHkocnVsZVNldCwgZmlyc3RTaWJsaW5nUnVsZSwgbGFzdFNpYmxpbmdSdWxl
LCBmYWxzZSk7CiAgICAgaWYgKG1fbWF0Y2hlZERlY2xzLmlzRW1wdHkoKSkKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgIG1fbWF0Y2hlZERlY2xzLmNsZWFyKCk7CkBAIC0xMDE5LDYgKzExMjks
OSBAQCBib29sIENTU1N0eWxlU2VsZWN0b3I6OmNhblNoYXJlU3R5bGVXaXRoRWxlbWVudChOb2Rl
KiBub2RlKSBjb25zdAogICAgIGlmIChlbGVtZW50LT5oYXNJRCgpICYmIG1fZmVhdHVyZXMuaWRz
SW5SdWxlcy5jb250YWlucyhlbGVtZW50LT5pZEZvclN0eWxlUmVzb2x1dGlvbigpLmltcGwoKSkp
CiAgICAgICAgIHJldHVybiBmYWxzZTsKIAorICAgIGlmIChlbGVtZW50LT5oYXNTY29wZWRIVE1M
U3R5bGVDaGlsZCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKICAgICBib29sIGlzQ29udHJv
bCA9IGVsZW1lbnQtPmlzRm9ybUNvbnRyb2xFbGVtZW50KCk7CiAKICAgICBpZiAoaXNDb250cm9s
ICE9IG1fZWxlbWVudC0+aXNGb3JtQ29udHJvbEVsZW1lbnQoKSkKQEAgLTEwOTAsNiArMTIwMyw4
IEBAIFJlbmRlclN0eWxlKiBDU1NTdHlsZVNlbGVjdG9yOjpsb2NhdGVTaGFyZWRTdHlsZSgpCiAg
ICAgICAgIHJldHVybiAwOwogICAgIGlmIChwYXJlbnRTdHlsZVByZXZlbnRzU2hhcmluZyhtX3Bh
cmVudFN0eWxlKSkKICAgICAgICAgcmV0dXJuIDA7CisgICAgaWYgKG1fc3R5bGVkRWxlbWVudC0+
aGFzU2NvcGVkSFRNTFN0eWxlQ2hpbGQoKSkKKyAgICAgICAgcmV0dXJuIDA7CiAKICAgICAvLyBD
aGVjayBwcmV2aW91cyBzaWJsaW5ncyBhbmQgdGhlaXIgY291c2lucy4KICAgICB1bnNpZ25lZCBj
b3VudCA9IDA7CkBAIC0xMTA4LDEwICsxMjIzLDEwIEBAIFJlbmRlclN0eWxlKiBDU1NTdHlsZVNl
bGVjdG9yOjpsb2NhdGVTaGFyZWRTdHlsZSgpCiAgICAgICAgIHJldHVybiAwOwogCiAgICAgLy8g
Q2FuJ3Qgc2hhcmUgaWYgc2libGluZyBydWxlcyBhcHBseS4gVGhpcyBpcyBjaGVja2VkIGF0IHRo
ZSBlbmQgYXMgaXQgc2hvdWxkIHJhcmVseSBmYWlsLgotICAgIGlmIChtYXRjaGVzUnVsZVNldCht
X2ZlYXR1cmVzLnNpYmxpbmdSdWxlcy5nZXQoKSkpCisgICAgaWYgKG1hdGNoZXNSdWxlU2V0R2xv
YmFsbHkobV9mZWF0dXJlcy5zaWJsaW5nUnVsZXMuZ2V0KCkpKQogICAgICAgICByZXR1cm4gMDsK
ICAgICAvLyBDYW4ndCBzaGFyZSBpZiBhdHRyaWJ1dGUgcnVsZXMgYXBwbHkuCi0gICAgaWYgKG1h
dGNoZXNSdWxlU2V0KG1fZmVhdHVyZXMudW5jb21tb25BdHRyaWJ1dGVSdWxlcy5nZXQoKSkpCisg
ICAgaWYgKG1hdGNoZXNSdWxlU2V0R2xvYmFsbHkobV9mZWF0dXJlcy51bmNvbW1vbkF0dHJpYnV0
ZVJ1bGVzLmdldCgpKSkKICAgICAgICAgcmV0dXJuIDA7CiAgICAgLy8gVHJhY2tpbmcgY2hpbGQg
aW5kZXggcmVxdWlyZXMgdW5pcXVlIHN0eWxlIGZvciBlYWNoIG5vZGUuIFRoaXMgbWF5IGdldCBz
ZXQgYnkgdGhlIHNpYmxpbmcgcnVsZSBtYXRjaCBhYm92ZS4KICAgICBpZiAocGFyZW50U3R5bGVQ
cmV2ZW50c1NoYXJpbmcobV9wYXJlbnRTdHlsZSkpCkBAIC0xMTI2LDE3ICsxMjQxLDE3IEBAIHZv
aWQgQ1NTU3R5bGVTZWxlY3Rvcjo6bWF0Y2hVQVJ1bGVzKE1hdGNoUmVzdWx0JiByZXN1bHQpCiAg
ICAgLy8gRmlyc3Qgd2UgbWF0Y2ggcnVsZXMgZnJvbSB0aGUgdXNlciBhZ2VudCBzaGVldC4KICAg
ICBSdWxlU2V0KiB1c2VyQWdlbnRTdHlsZVNoZWV0ID0gbV9tZWRpdW0tPm1lZGlhVHlwZU1hdGNo
U3BlY2lmaWMoInByaW50IikKICAgICAgICAgPyBkZWZhdWx0UHJpbnRTdHlsZSA6IGRlZmF1bHRT
dHlsZTsKLSAgICBtYXRjaFJ1bGVzKHVzZXJBZ2VudFN0eWxlU2hlZXQsIHJlc3VsdC5maXJzdFVB
UnVsZSwgcmVzdWx0Lmxhc3RVQVJ1bGUsIGZhbHNlKTsKKyAgICBtYXRjaFJ1bGVzR2xvYmFsbHko
dXNlckFnZW50U3R5bGVTaGVldCwgcmVzdWx0LmZpcnN0VUFSdWxlLCByZXN1bHQubGFzdFVBUnVs
ZSwgZmFsc2UpOwogCiAgICAgLy8gSW4gcXVpcmtzIG1vZGUsIHdlIG1hdGNoIHJ1bGVzIGZyb20g
dGhlIHF1aXJrcyB1c2VyIGFnZW50IHNoZWV0LgogICAgIGlmICghbV9jaGVja2VyLnN0cmljdFBh
cnNpbmcoKSkKLSAgICAgICAgbWF0Y2hSdWxlcyhkZWZhdWx0UXVpcmtzU3R5bGUsIHJlc3VsdC5m
aXJzdFVBUnVsZSwgcmVzdWx0Lmxhc3RVQVJ1bGUsIGZhbHNlKTsKKyAgICAgICAgbWF0Y2hSdWxl
c0dsb2JhbGx5KGRlZmF1bHRRdWlya3NTdHlsZSwgcmVzdWx0LmZpcnN0VUFSdWxlLCByZXN1bHQu
bGFzdFVBUnVsZSwgZmFsc2UpOwogCiAgICAgLy8gSWYgZG9jdW1lbnQgdXNlcyB2aWV3IHNvdXJj
ZSBzdHlsZXMgKGluIHZpZXcgc291cmNlIG1vZGUgb3IgaW4geG1sIHZpZXdlciBtb2RlKSwgdGhl
biB3ZSBtYXRjaCBydWxlcyBmcm9tIHRoZSB2aWV3IHNvdXJjZSBzdHlsZSBzaGVldC4KICAgICBp
ZiAobV9jaGVja2VyLmRvY3VtZW50KCktPmlzVmlld1NvdXJjZSgpKSB7CiAgICAgICAgIGlmICgh
ZGVmYXVsdFZpZXdTb3VyY2VTdHlsZSkKICAgICAgICAgICAgIGxvYWRWaWV3U291cmNlU3R5bGUo
KTsKLSAgICAgICAgbWF0Y2hSdWxlcyhkZWZhdWx0Vmlld1NvdXJjZVN0eWxlLCByZXN1bHQuZmly
c3RVQVJ1bGUsIHJlc3VsdC5sYXN0VUFSdWxlLCBmYWxzZSk7CisgICAgICAgIG1hdGNoUnVsZXNH
bG9iYWxseShkZWZhdWx0Vmlld1NvdXJjZVN0eWxlLCByZXN1bHQuZmlyc3RVQVJ1bGUsIHJlc3Vs
dC5sYXN0VUFSdWxlLCBmYWxzZSk7CiAgICAgfQogfQogCkBAIC0xMzk5LDggKzE1MTQsOCBAQCBQ
YXNzUmVmUHRyPFJlbmRlclN0eWxlPiBDU1NTdHlsZVNlbGVjdG9yOjpwc2V1ZG9TdHlsZUZvckVs
ZW1lbnQoUHNldWRvSWQgcHNldWRvLAogICAgIG1hdGNoVUFSdWxlcyhtYXRjaFJlc3VsdCk7CiAK
ICAgICBpZiAobV9tYXRjaEF1dGhvckFuZFVzZXJTdHlsZXMpIHsKLSAgICAgICAgbWF0Y2hSdWxl
cyhtX3VzZXJTdHlsZS5nZXQoKSwgbWF0Y2hSZXN1bHQuZmlyc3RVc2VyUnVsZSwgbWF0Y2hSZXN1
bHQubGFzdFVzZXJSdWxlLCBmYWxzZSk7Ci0gICAgICAgIG1hdGNoUnVsZXMobV9hdXRob3JTdHls
ZS5nZXQoKSwgbWF0Y2hSZXN1bHQuZmlyc3RBdXRob3JSdWxlLCBtYXRjaFJlc3VsdC5sYXN0QXV0
aG9yUnVsZSwgZmFsc2UpOworICAgICAgICBtYXRjaFJ1bGVzR2xvYmFsbHkobV91c2VyU3R5bGUu
Z2V0KCksIG1hdGNoUmVzdWx0LmZpcnN0VXNlclJ1bGUsIG1hdGNoUmVzdWx0Lmxhc3RVc2VyUnVs
ZSwgZmFsc2UpOworICAgICAgICBtYXRjaEF1dGhvclJ1bGVzKG1hdGNoUmVzdWx0LmZpcnN0QXV0
aG9yUnVsZSwgbWF0Y2hSZXN1bHQubGFzdEF1dGhvclJ1bGUsIGZhbHNlKTsKICAgICB9CiAKICAg
ICBpZiAobV9tYXRjaGVkRGVjbHMuaXNFbXB0eSgpKQpAQCAtMTQzMiw3ICsxNTQ3LDggQEAgUGFz
c1JlZlB0cjxSZW5kZXJTdHlsZT4gQ1NTU3R5bGVTZWxlY3Rvcjo6c3R5bGVGb3JQYWdlKGludCBw
YWdlSW5kZXgpCiAgICAgY29uc3QgU3RyaW5nIHBhZ2UgPSBwYWdlTmFtZShwYWdlSW5kZXgpOwog
ICAgIG1hdGNoUGFnZVJ1bGVzKGRlZmF1bHRQcmludFN0eWxlLCBpc0xlZnQsIGlzRmlyc3QsIHBh
Z2UpOwogICAgIG1hdGNoUGFnZVJ1bGVzKG1fdXNlclN0eWxlLmdldCgpLCBpc0xlZnQsIGlzRmly
c3QsIHBhZ2UpOwotICAgIG1hdGNoUGFnZVJ1bGVzKG1fYXV0aG9yU3R5bGUuZ2V0KCksIGlzTGVm
dCwgaXNGaXJzdCwgcGFnZSk7CisgICAgLy8gT25seSBjb25zaWRlciB0aGUgZ2xvYmFsIFJ1bGVT
ZXQgZm9yIEBwYWdlIHJ1bGVzLCBhcyBwZXIgdGhlIEhUTUw1IHNwZWMuCisgICAgbWF0Y2hQYWdl
UnVsZXMobV9nbG9iYWxBdXRob3JTdHlsZXMuZ2V0KCksIGlzTGVmdCwgaXNGaXJzdCwgcGFnZSk7
CiAgICAgbV9saW5lSGVpZ2h0VmFsdWUgPSAwOwogICAgIGJvb2wgaW5oZXJpdGVkT25seSA9IGZh
bHNlOwogICAgIGFwcGx5RGVjbGFyYXRpb25zPHRydWU+KGZhbHNlLCAwLCBtX21hdGNoZWREZWNs
cy5zaXplKCkgLSAxLCBpbmhlcml0ZWRPbmx5KTsKQEAgLTE2NzYsNyArMTc5Miw5IEBAIGJvb2wg
Q1NTU3R5bGVTZWxlY3Rvcjo6Y2hlY2tSZWdpb25TdHlsZShFbGVtZW50KiBlKQogICAgIGZvciAo
VmVjdG9yPFJlZlB0cjxDU1NSZWdpb25TdHlsZVJ1bGU+ID46Oml0ZXJhdG9yIGl0ID0gbV9yZWdp
b25TdHlsZVJ1bGVzLmJlZ2luKCk7IGl0ICE9IG1fcmVnaW9uU3R5bGVSdWxlcy5lbmQoKTsgKytp
dCkgewogICAgICAgICBjb25zdCBDU1NTZWxlY3Rvckxpc3QmIHJlZ2lvblNlbGVjdG9yTGlzdCA9
ICgqaXQpLT5zZWxlY3Rvckxpc3QoKTsKICAgICAgICAgZm9yIChDU1NTZWxlY3RvciogcyA9IHJl
Z2lvblNlbGVjdG9yTGlzdC5maXJzdCgpOyBzOyBzID0gcmVnaW9uU2VsZWN0b3JMaXN0Lm5leHQo
cykpIHsKLSAgICAgICAgICAgIGlmIChtX2NoZWNrZXIuY2hlY2tTZWxlY3RvcihzLCBlKSkKKyAg
ICAgICAgICAgIC8vIEZJWE1FIChCVUcgNzI0NzIpOiBXZSBkb24ndCBhZGQgQC13ZWJraXQtcmVn
aW9uIHJ1bGVzIG9mIHNjb3BlZCBzdHlsZSBzaGVldHMgZm9yIHRoZSBtb21lbnQsIAorICAgICAg
ICAgICAgLy8gc28gYWxsIHJlZ2lvbiBydWxlcyBhcmUgZ2xvYmFsIGJ5IGRlZmF1bHQuIFZlcmlm
eSB3aGV0aGVyIHRoYXQgY2FuIHN0YW5kIG9yIG5lZWRzIGNoYW5naW4nLgorICAgICAgICAgICAg
aWYgKG1fY2hlY2tlci5jaGVja1NlbGVjdG9yKHMsIGUsIDApKQogICAgICAgICAgICAgICAgIHJl
dHVybiB0cnVlOwogICAgICAgICB9CiAgICAgfQpAQCAtMTcyOCwxNCArMTg0NiwxNCBAQCBQYXNz
UmVmUHRyPENTU1J1bGVMaXN0PiBDU1NTdHlsZVNlbGVjdG9yOjpwc2V1ZG9TdHlsZVJ1bGVzRm9y
RWxlbWVudChFbGVtZW50KiBlLAogCiAgICAgICAgIC8vIE5vdyB3ZSBjaGVjayB1c2VyIHNoZWV0
IHJ1bGVzLgogICAgICAgICBpZiAobV9tYXRjaEF1dGhvckFuZFVzZXJTdHlsZXMpCi0gICAgICAg
ICAgICBtYXRjaFJ1bGVzKG1fdXNlclN0eWxlLmdldCgpLCBkdW1teS5maXJzdFVzZXJSdWxlLCBk
dW1teS5sYXN0VXNlclJ1bGUsIHJ1bGVzVG9JbmNsdWRlICYgRW1wdHlDU1NSdWxlcyk7CisgICAg
ICAgICAgICBtYXRjaFJ1bGVzR2xvYmFsbHkobV91c2VyU3R5bGUuZ2V0KCksIGR1bW15LmZpcnN0
VXNlclJ1bGUsIGR1bW15Lmxhc3RVc2VyUnVsZSwgcnVsZXNUb0luY2x1ZGUgJiBFbXB0eUNTU1J1
bGVzKTsKICAgICB9CiAKICAgICBpZiAobV9tYXRjaEF1dGhvckFuZFVzZXJTdHlsZXMgJiYgKHJ1
bGVzVG9JbmNsdWRlICYgQXV0aG9yQ1NTUnVsZXMpKSB7CiAgICAgICAgIG1fc2FtZU9yaWdpbk9u
bHkgPSAhKHJ1bGVzVG9JbmNsdWRlICYgQ3Jvc3NPcmlnaW5DU1NSdWxlcyk7CiAKICAgICAgICAg
Ly8gQ2hlY2sgdGhlIHJ1bGVzIGluIGF1dGhvciBzaGVldHMuCi0gICAgICAgIG1hdGNoUnVsZXMo
bV9hdXRob3JTdHlsZS5nZXQoKSwgZHVtbXkuZmlyc3RBdXRob3JSdWxlLCBkdW1teS5sYXN0QXV0
aG9yUnVsZSwgcnVsZXNUb0luY2x1ZGUgJiBFbXB0eUNTU1J1bGVzKTsKKyAgICAgICAgbWF0Y2hB
dXRob3JSdWxlcyhkdW1teS5maXJzdEF1dGhvclJ1bGUsIGR1bW15Lmxhc3RBdXRob3JSdWxlLCBy
dWxlc1RvSW5jbHVkZSAmIEVtcHR5Q1NTUnVsZXMpOwogCiAgICAgICAgIG1fc2FtZU9yaWdpbk9u
bHkgPSBmYWxzZTsKICAgICB9CkBAIC0xNzQ1LDcgKzE4NjMsNyBAQCBQYXNzUmVmUHRyPENTU1J1
bGVMaXN0PiBDU1NTdHlsZVNlbGVjdG9yOjpwc2V1ZG9TdHlsZVJ1bGVzRm9yRWxlbWVudChFbGVt
ZW50KiBlLAogICAgIHJldHVybiBtX3J1bGVMaXN0LnJlbGVhc2UoKTsKIH0KIAotaW5saW5lIGJv
b2wgQ1NTU3R5bGVTZWxlY3Rvcjo6Y2hlY2tTZWxlY3Rvcihjb25zdCBSdWxlRGF0YSYgcnVsZURh
dGEpCitpbmxpbmUgYm9vbCBDU1NTdHlsZVNlbGVjdG9yOjpjaGVja1NlbGVjdG9yKGNvbnN0IFJ1
bGVEYXRhJiBydWxlRGF0YSwgY29uc3QgRWxlbWVudCogc2NvcGUpCiB7CiAgICAgbV9keW5hbWlj
UHNldWRvID0gTk9QU0VVRE87CiAgICAgbV9jaGVja2VyLmNsZWFySGFzVW5rbm93blBzZXVkb0Vs
ZW1lbnRzKCk7CkBAIC0xNzY0LDExICsxODgyLDExIEBAIGlubGluZSBib29sIENTU1N0eWxlU2Vs
ZWN0b3I6OmNoZWNrU2VsZWN0b3IoY29uc3QgUnVsZURhdGEmIHJ1bGVEYXRhKQogICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgICAgICBpZiAoIVNlbGVjdG9yQ2hlY2tlcjo6ZmFzdENoZWNr
UmlnaHRtb3N0QXR0cmlidXRlU2VsZWN0b3IobV9lbGVtZW50LCBydWxlRGF0YS5zZWxlY3Rvcigp
KSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgcmV0dXJuIG1fY2hlY2tlci5m
YXN0Q2hlY2tTZWxlY3RvcihydWxlRGF0YS5zZWxlY3RvcigpLCBtX2VsZW1lbnQpOworICAgICAg
ICByZXR1cm4gbV9jaGVja2VyLmZhc3RDaGVja1NlbGVjdG9yKHJ1bGVEYXRhLnNlbGVjdG9yKCks
IG1fZWxlbWVudCwgc2NvcGUpOwogICAgIH0KIAogICAgIC8vIFNsb3cgcGF0aC4KLSAgICBTZWxl
Y3RvckNoZWNrZXI6OlNlbGVjdG9yTWF0Y2ggbWF0Y2ggPSBtX2NoZWNrZXIuY2hlY2tTZWxlY3Rv
cihydWxlRGF0YS5zZWxlY3RvcigpLCBtX2VsZW1lbnQsIG1fZHluYW1pY1BzZXVkbywgZmFsc2Us
IFNlbGVjdG9yQ2hlY2tlcjo6VmlzaXRlZE1hdGNoRW5hYmxlZCwgc3R5bGUoKSwgbV9wYXJlbnRO
b2RlID8gbV9wYXJlbnROb2RlLT5yZW5kZXJTdHlsZSgpIDogMCk7CisgICAgU2VsZWN0b3JDaGVj
a2VyOjpTZWxlY3Rvck1hdGNoIG1hdGNoID0gbV9jaGVja2VyLmNoZWNrU2VsZWN0b3IocnVsZURh
dGEuc2VsZWN0b3IoKSwgbV9lbGVtZW50LCBzY29wZSwgbV9keW5hbWljUHNldWRvLCBmYWxzZSwg
U2VsZWN0b3JDaGVja2VyOjpWaXNpdGVkTWF0Y2hFbmFibGVkLCBzdHlsZSgpLCBtX3BhcmVudE5v
ZGUgPyBtX3BhcmVudE5vZGUtPnJlbmRlclN0eWxlKCkgOiAwKTsKICAgICBpZiAobWF0Y2ggIT0g
U2VsZWN0b3JDaGVja2VyOjpTZWxlY3Rvck1hdGNoZXMpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
ICAgICBpZiAobV9jaGVja2VyLnBzZXVkb1N0eWxlKCkgIT0gTk9QU0VVRE8gJiYgbV9jaGVja2Vy
LnBzZXVkb1N0eWxlKCkgIT0gbV9keW5hbWljUHNldWRvKQpAQCAtMTkxNyw3ICsyMDM1LDcgQEAg
dm9pZCBSdWxlU2V0OjphZGRQYWdlUnVsZShDU1NQYWdlUnVsZSogcnVsZSkKICAgICBtX3BhZ2VS
dWxlcy5hcHBlbmQoUnVsZURhdGEocnVsZSwgcnVsZS0+c2VsZWN0b3JMaXN0KCkuZmlyc3QoKSwg
bV9wYWdlUnVsZXMuc2l6ZSgpKSk7CiB9CiAKLXZvaWQgUnVsZVNldDo6YWRkUnVsZXNGcm9tU2hl
ZXQoQ1NTU3R5bGVTaGVldCogc2hlZXQsIGNvbnN0IE1lZGlhUXVlcnlFdmFsdWF0b3ImIG1lZGl1
bSwgQ1NTU3R5bGVTZWxlY3Rvciogc3R5bGVTZWxlY3RvcikKK3ZvaWQgUnVsZVNldDo6YWRkUnVs
ZXNGcm9tU2hlZXQoQ1NTU3R5bGVTaGVldCogc2hlZXQsIGNvbnN0IE1lZGlhUXVlcnlFdmFsdWF0
b3ImIG1lZGl1bSwgQ1NTU3R5bGVTZWxlY3Rvciogc3R5bGVTZWxlY3RvciwgY29uc3QgRWxlbWVu
dCogc2NvcGUpCiB7CiAgICAgaWYgKCFzaGVldCkKICAgICAgICAgcmV0dXJuOwpAQCAtMTkzOCw3
ICsyMDU2LDcgQEAgdm9pZCBSdWxlU2V0OjphZGRSdWxlc0Zyb21TaGVldChDU1NTdHlsZVNoZWV0
KiBzaGVldCwgY29uc3QgTWVkaWFRdWVyeUV2YWx1YXRvciYKICAgICAgICAgZWxzZSBpZiAocnVs
ZS0+aXNJbXBvcnRSdWxlKCkpIHsKICAgICAgICAgICAgIENTU0ltcG9ydFJ1bGUqIGltcG9ydCA9
IHN0YXRpY19jYXN0PENTU0ltcG9ydFJ1bGUqPihydWxlKTsKICAgICAgICAgICAgIGlmICghaW1w
b3J0LT5tZWRpYSgpIHx8IG1lZGl1bS5ldmFsKGltcG9ydC0+bWVkaWEoKSwgc3R5bGVTZWxlY3Rv
cikpCi0gICAgICAgICAgICAgICAgYWRkUnVsZXNGcm9tU2hlZXQoaW1wb3J0LT5zdHlsZVNoZWV0
KCksIG1lZGl1bSwgc3R5bGVTZWxlY3Rvcik7CisgICAgICAgICAgICAgICAgYWRkUnVsZXNGcm9t
U2hlZXQoaW1wb3J0LT5zdHlsZVNoZWV0KCksIG1lZGl1bSwgc3R5bGVTZWxlY3Rvciwgc2NvcGUp
OwogICAgICAgICB9CiAgICAgICAgIGVsc2UgaWYgKHJ1bGUtPmlzTWVkaWFSdWxlKCkpIHsKICAg
ICAgICAgICAgIENTU01lZGlhUnVsZSogciA9IHN0YXRpY19jYXN0PENTU01lZGlhUnVsZSo+KHJ1
bGUpOwpAQCAtMTk1NiwyMCArMjA3NCw0MSBAQCB2b2lkIFJ1bGVTZXQ6OmFkZFJ1bGVzRnJvbVNo
ZWV0KENTU1N0eWxlU2hlZXQqIHNoZWV0LCBjb25zdCBNZWRpYVF1ZXJ5RXZhbHVhdG9yJgogICAg
ICAgICAgICAgICAgICAgICAgICAgLy8gQWRkIHRoaXMgZm9udCBmYWNlIHRvIG91ciBzZXQuCiAg
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBDU1NGb250RmFjZVJ1bGUqIGZvbnRGYWNlUnVs
ZSA9IHN0YXRpY19jYXN0PENTU0ZvbnRGYWNlUnVsZSo+KGNoaWxkSXRlbSk7CiAgICAgICAgICAg
ICAgICAgICAgICAgICBzdHlsZVNlbGVjdG9yLT5mb250U2VsZWN0b3IoKS0+YWRkRm9udEZhY2VS
dWxlKGZvbnRGYWNlUnVsZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAvLworICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gRklYTUUoQlVHIDcyNDYxKTogV2UgZG9uJ3QgYWRkIEBmb250LWZh
Y2UgcnVsZXMgb2Ygc2NvcGVkIHN0eWxlIHNoZWV0cyBmb3IgdGhlIG1vbWVudC4KKyAgICAgICAg
ICAgICAgICAgICAgICAgIC8vIEZpbmQgYSB3YXkgdG8gaGF2ZSBzY29wZWQgQGZvbnQtZmFjZSBy
dWxlcy4KKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICghc2NvcGUpIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBDU1NGb250RmFjZVJ1bGUqIGZvbnRGYWNlUnVsZSA9IHN0
YXRpY19jYXN0PENTU0ZvbnRGYWNlUnVsZSo+KGNoaWxkSXRlbSk7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgc3R5bGVTZWxlY3Rvci0+Zm9udFNlbGVjdG9yKCktPmFkZEZvbnRGYWNlUnVs
ZShmb250RmFjZVJ1bGUpOworICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
ICAgICAgICB9IGVsc2UgaWYgKGNoaWxkSXRlbS0+aXNLZXlmcmFtZXNSdWxlKCkgJiYgc3R5bGVT
ZWxlY3RvcikgewogICAgICAgICAgICAgICAgICAgICAgICAgLy8gQWRkIHRoaXMga2V5ZnJhbWUg
cnVsZSB0byBvdXIgc2V0LgotICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGVTZWxlY3Rvci0+
YWRkS2V5ZnJhbWVTdHlsZShzdGF0aWNfY2FzdDxXZWJLaXRDU1NLZXlmcmFtZXNSdWxlKj4oY2hp
bGRJdGVtKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAvLworICAgICAgICAgICAgICAgICAg
ICAgICAgLy8gRklYTUUoQlVHIDcyNDYyKTogV2UgZG9uJ3QgYWRkIEBrZXlmcmFtZSBydWxlcyBv
ZiBzY29wZWQgc3R5bGUgc2hlZXRzIGZvciB0aGUgbW9tZW50LgorICAgICAgICAgICAgICAgICAg
ICAgICAgLy8gRmluZCBhIHdheSB0byBoYXZlIHNjb3BlZCBAa2V5ZnJhbWUgcnVsZXMuCisgICAg
ICAgICAgICAgICAgICAgICAgICBpZiAoIXNjb3BlKQorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHN0eWxlU2VsZWN0b3ItPmFkZEtleWZyYW1lU3R5bGUoc3RhdGljX2Nhc3Q8V2ViS2l0Q1NT
S2V5ZnJhbWVzUnVsZSo+KGNoaWxkSXRlbSkpOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICAgICAgfSAgIC8vIGZvciBydWxlcwogICAgICAgICAgICAgfSAgIC8vIGlmIHJ1bGVz
CiAgICAgICAgIH0gZWxzZSBpZiAocnVsZS0+aXNGb250RmFjZVJ1bGUoKSAmJiBzdHlsZVNlbGVj
dG9yKSB7CiAgICAgICAgICAgICAvLyBBZGQgdGhpcyBmb250IGZhY2UgdG8gb3VyIHNldC4KLSAg
ICAgICAgICAgIGNvbnN0IENTU0ZvbnRGYWNlUnVsZSogZm9udEZhY2VSdWxlID0gc3RhdGljX2Nh
c3Q8Q1NTRm9udEZhY2VSdWxlKj4ocnVsZSk7Ci0gICAgICAgICAgICBzdHlsZVNlbGVjdG9yLT5m
b250U2VsZWN0b3IoKS0+YWRkRm9udEZhY2VSdWxlKGZvbnRGYWNlUnVsZSk7Ci0gICAgICAgIH0g
ZWxzZSBpZiAocnVsZS0+aXNLZXlmcmFtZXNSdWxlKCkpCi0gICAgICAgICAgICBzdHlsZVNlbGVj
dG9yLT5hZGRLZXlmcmFtZVN0eWxlKHN0YXRpY19jYXN0PFdlYktpdENTU0tleWZyYW1lc1J1bGUq
PihydWxlKSk7Ci0gICAgICAgIGVsc2UgaWYgKHJ1bGUtPmlzUmVnaW9uU3R5bGVSdWxlKCkgJiYg
c3R5bGVTZWxlY3RvcikKKyAgICAgICAgICAgIC8vCisgICAgICAgICAgICAvLyBGSVhNRShCVUcg
NzI0NjEpOiBXZSBkb24ndCBhZGQgQGZvbnQtZmFjZSBydWxlcyBvZiBzY29wZWQgc3R5bGUgc2hl
ZXRzIGZvciB0aGUgbW9tZW50LgorICAgICAgICAgICAgLy8gRmluZCBhIHdheSB0byBoYXZlIHNj
b3BlZCBAZm9udC1mYWNlIHJ1bGVzLgorICAgICAgICAgICAgaWYgKCFzY29wZSkgeworICAgICAg
ICAgICAgICAgIGNvbnN0IENTU0ZvbnRGYWNlUnVsZSogZm9udEZhY2VSdWxlID0gc3RhdGljX2Nh
c3Q8Q1NTRm9udEZhY2VSdWxlKj4ocnVsZSk7CisgICAgICAgICAgICAgICAgc3R5bGVTZWxlY3Rv
ci0+Zm9udFNlbGVjdG9yKCktPmFkZEZvbnRGYWNlUnVsZShmb250RmFjZVJ1bGUpOworICAgICAg
ICAgICAgfQorICAgICAgICB9IGVsc2UgaWYgKHJ1bGUtPmlzS2V5ZnJhbWVzUnVsZSgpKSB7Cisg
ICAgICAgICAgICAvLyBGSVhNRSAoQlVHIDcyNDYyKTogV2UgZG9uJ3QgYWRkIEBrZXlmcmFtZSBy
dWxlcyBvZiBzY29wZWQgc3R5bGUgc2hlZXRzIGZvciB0aGUgbW9tZW50LgorICAgICAgICAgICAg
Ly8gRmluZCBhIHdheSB0byBoYXZlIHNjb3BlZCBAa2V5ZnJhbWUgcnVsZXMuCisgICAgICAgICAg
ICBpZiAoIXNjb3BlKQorICAgICAgICAgICAgICAgIHN0eWxlU2VsZWN0b3ItPmFkZEtleWZyYW1l
U3R5bGUoc3RhdGljX2Nhc3Q8V2ViS2l0Q1NTS2V5ZnJhbWVzUnVsZSo+KHJ1bGUpKTsKKyAgICAg
ICAgfSBlbHNlIGlmIChydWxlLT5pc1JlZ2lvblN0eWxlUnVsZSgpICYmIHN0eWxlU2VsZWN0b3Ip
IHsKKyAgICAgICAgICAgIC8vIEZJWE1FIChCVUcgNzI0NzIpOiBXZSBkb24ndCBhZGQgQC13ZWJr
aXQtcmVnaW9uIHJ1bGVzIG9mIHNjb3BlZCBzdHlsZSBzaGVldHMgZm9yIHRoZSBtb21lbnQuCiAg
ICAgICAgICAgICBzdHlsZVNlbGVjdG9yLT5hZGRSZWdpb25TdHlsZVJ1bGUoc3RhdGljX2Nhc3Q8
Q1NTUmVnaW9uU3R5bGVSdWxlKj4ocnVsZSkpOworICAgICAgICB9CiAgICAgfQogICAgIGlmICht
X2F1dG9TaHJpbmtUb0ZpdEVuYWJsZWQpCiAgICAgICAgIHNocmlua1RvRml0KCk7CkBAIC0yMDcz
LDYgKzIyMTIsMjcgQEAgdm9pZCBSdWxlU2V0OjpzaHJpbmtUb0ZpdCgpCiAgICAgbV9wYWdlUnVs
ZXMuc2hyaW5rVG9GaXQoKTsKIH0KIAorU2NvcGVkUnVsZVNldHM6On5TY29wZWRSdWxlU2V0cygp
Cit7CisgICAgZGVsZXRlQWxsVmFsdWVzKG1fc2NvcGVkUnVsZVNldE1hcCk7Cit9CisKK1J1bGVT
ZXQqIFNjb3BlZFJ1bGVTZXRzOjplbnN1cmVFeGlzdHMoY29uc3QgRWxlbWVudCogc2NvcGUpCit7
CisgICAgUnVsZVNldCogcnVsZVNldCA9IG1fc2NvcGVkUnVsZVNldE1hcC5nZXQoc2NvcGUpOwor
ICAgIGlmICghcnVsZVNldCkgeworICAgICAgICBydWxlU2V0ID0gbmV3IFJ1bGVTZXQ7CisgICAg
ICAgIG1fc2NvcGVkUnVsZVNldE1hcC5zZXQoc2NvcGUsIHJ1bGVTZXQpOworICAgIH0KKyAgICBy
ZXR1cm4gcnVsZVNldDsKK30KKwordm9pZCBTY29wZWRSdWxlU2V0czo6Y29sbGVjdEZlYXR1cmVz
KENTU1N0eWxlU2VsZWN0b3I6OkZlYXR1cmVzJiBmZWF0dXJlcykgY29uc3QKK3sKKyAgICBmb3Ig
KFNjb3BlZFJ1bGVTZXRNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9zY29wZWRSdWxlU2V0TWFw
LmJlZ2luKCksIGl0RW5kID0gbV9zY29wZWRSdWxlU2V0TWFwLmVuZCgpOyBpdCAhPSBpdEVuZDsg
KytpdCkKKyAgICAgICAgaXQtPnNlY29uZC0+Y29sbGVjdEZlYXR1cmVzKGZlYXR1cmVzKTsKK30K
KwogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogLy8gdGhpcyBpcyBtb3N0bHkgYm9y
aW5nIHN0dWZmIG9uIGhvdyB0byBhcHBseSBhIGNlcnRhaW4gcnVsZSB0byB0aGUgcmVuZGVyc3R5
bGUuLi4KIApAQCAtMjMxOCwyMiArMjQ3OCwxMCBAQCB2b2lkIENTU1N0eWxlU2VsZWN0b3I6OmFw
cGx5TWF0Y2hlZERlY2xhcmF0aW9ucyhjb25zdCBNYXRjaFJlc3VsdCYgbWF0Y2hSZXN1bHQpCiB2
b2lkIENTU1N0eWxlU2VsZWN0b3I6Om1hdGNoUGFnZVJ1bGVzKFJ1bGVTZXQqIHJ1bGVzLCBib29s
IGlzTGVmdFBhZ2UsIGJvb2wgaXNGaXJzdFBhZ2UsIGNvbnN0IFN0cmluZyYgcGFnZU5hbWUpCiB7
CiAgICAgbV9tYXRjaGVkUnVsZXMuY2xlYXIoKTsKLQogICAgIGlmICghcnVsZXMpCiAgICAgICAg
IHJldHVybjsKLQogICAgIG1hdGNoUGFnZVJ1bGVzRm9yTGlzdChydWxlcy0+cGFnZVJ1bGVzKCks
IGlzTGVmdFBhZ2UsIGlzRmlyc3RQYWdlLCBwYWdlTmFtZSk7Ci0KLSAgICAvLyBJZiB3ZSBkaWRu
J3QgbWF0Y2ggYW55IHJ1bGVzLCB3ZSdyZSBkb25lLgotICAgIGlmIChtX21hdGNoZWRSdWxlcy5p
c0VtcHR5KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vIFNvcnQgdGhlIHNldCBvZiBtYXRj
aGVkIHJ1bGVzLgotICAgIHNvcnRNYXRjaGVkUnVsZXMoKTsKLQotICAgIC8vIE5vdyB0cmFuc2Zl
ciB0aGUgc2V0IG9mIG1hdGNoZWQgcnVsZXMgb3ZlciB0byBvdXIgbGlzdCBvZiBkZWNscy4KLSAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9tYXRjaGVkUnVsZXMuc2l6ZSgpOyBpKyspCi0g
ICAgICAgIGFkZE1hdGNoZWREZWNsYXJhdGlvbihtX21hdGNoZWRSdWxlc1tpXS0+cnVsZSgpLT5k
ZWNsYXJhdGlvbigpKTsKKyAgICBzb3J0QW5kVHJhbnNmZXJNYXRjaGVkUnVsZXMoZmFsc2UpOwog
fQogCiB2b2lkIENTU1N0eWxlU2VsZWN0b3I6Om1hdGNoUGFnZVJ1bGVzRm9yTGlzdChjb25zdCBW
ZWN0b3I8UnVsZURhdGE+KiBydWxlcywgYm9vbCBpc0xlZnRQYWdlLCBib29sIGlzRmlyc3RQYWdl
LCBjb25zdCBTdHJpbmcmIHBhZ2VOYW1lKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3Nz
L0NTU1N0eWxlU2VsZWN0b3IuaCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTdHlsZVNlbGVjdG9y
LmgKaW5kZXggMTUzZWY4Ni4uYjgzZjk0NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3Nz
L0NTU1N0eWxlU2VsZWN0b3IuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU3R5bGVTZWxl
Y3Rvci5oCkBAIC02NCw2ICs2NCw3IEBAIGNsYXNzIE1lZGlhUXVlcnlFdmFsdWF0b3I7CiBjbGFz
cyBOb2RlOwogY2xhc3MgUnVsZURhdGE7CiBjbGFzcyBSdWxlU2V0OworY2xhc3MgU2NvcGVkUnVs
ZVNldHM7CiBjbGFzcyBTZXR0aW5nczsKIGNsYXNzIFN0eWxlSW1hZ2U7CiBjbGFzcyBTdHlsZVNo
ZWV0OwpAQCAtMTIzLDcgKzEyNCw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBpbml0Rm9yU3R5bGVS
ZXNvbHZlKEVsZW1lbnQqLCBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUgPSAwLCBQc2V1ZG9JZCA9
IE5PUFNFVURPKTsKICAgICB2b2lkIGluaXRFbGVtZW50KEVsZW1lbnQqKTsKICAgICBSZW5kZXJT
dHlsZSogbG9jYXRlU2hhcmVkU3R5bGUoKTsKLSAgICBib29sIG1hdGNoZXNSdWxlU2V0KFJ1bGVT
ZXQqKTsKKyAgICBib29sIG1hdGNoZXNSdWxlU2V0R2xvYmFsbHkoUnVsZVNldCopOwogICAgIE5v
ZGUqIGxvY2F0ZUNvdXNpbkxpc3QoRWxlbWVudCogcGFyZW50LCB1bnNpZ25lZCYgdmlzaXRlZE5v
ZGVDb3VudCkgY29uc3Q7CiAgICAgTm9kZSogZmluZFNpYmxpbmdGb3JTdHlsZVNoYXJpbmcoTm9k
ZSosIHVuc2lnbmVkJiBjb3VudCkgY29uc3Q7CiAgICAgYm9vbCBjYW5TaGFyZVN0eWxlV2l0aEVs
ZW1lbnQoTm9kZSopIGNvbnN0OwpAQCAtMjQzLDEyICsyNDQsMTcgQEAgcHJpdmF0ZToKICAgICB9
OwogICAgIHZvaWQgbWF0Y2hBbGxSdWxlcyhNYXRjaFJlc3VsdCYpOwogICAgIHZvaWQgbWF0Y2hV
QVJ1bGVzKE1hdGNoUmVzdWx0Jik7Ci0gICAgdm9pZCBtYXRjaFJ1bGVzKFJ1bGVTZXQqLCBpbnQm
IGZpcnN0UnVsZUluZGV4LCBpbnQmIGxhc3RSdWxlSW5kZXgsIGJvb2wgaW5jbHVkZUVtcHR5UnVs
ZXMpOwotICAgIHZvaWQgbWF0Y2hSdWxlc0Zvckxpc3QoY29uc3QgVmVjdG9yPFJ1bGVEYXRhPios
IGludCYgZmlyc3RSdWxlSW5kZXgsIGludCYgbGFzdFJ1bGVJbmRleCwgYm9vbCBpbmNsdWRlRW1w
dHlSdWxlcyk7CisgICAgLy8gbWF0Y2hBdXRob3JSdWxlczogTWF0Y2ggYWxsIGdsb2JhbCBhbmQg
YXBwbGljYWJsZSBzY29wZWQgYXV0aG9yLWRlZmluZWQgcnVsZXMuCisgICAgdm9pZCBtYXRjaEF1
dGhvclJ1bGVzKGludCYgZmlyc3RSdWxlSW5kZXgsIGludCYgbGFzdFJ1bGVJbmRleCwgYm9vbCBp
bmNsdWRlRW1wdHlSdWxlcyk7CisgICAgLy8gbWF0Y2hSdWxlczogbWF0Y2hlcyB2cy4gYWxsIHJ1
bGVzIGluIHRoZSBwYXNzZWQtaW4gUnVsZVNldC4KKyAgICB2b2lkIG1hdGNoUnVsZXNHbG9iYWxs
eShSdWxlU2V0KiwgaW50JiBmaXJzdFJ1bGVJbmRleCwgaW50JiBsYXN0UnVsZUluZGV4LCBib29s
IGluY2x1ZGVFbXB0eVJ1bGVzKTsKKyAgICAvLyBJbXBsZW1lbnRhdGlvbiBtZXRob2RzOgorICAg
IHZvaWQgbWF0Y2hSdWxlU2V0KFJ1bGVTZXQqLCBjb25zdCBFbGVtZW50KiwgaW50JiBmaXJzdFJ1
bGVJbmRleCwgaW50JiBsYXN0UnVsZUluZGV4LCBib29sIGluY2x1ZGVFbXB0eVJ1bGVzKTsKKyAg
ICB2b2lkIG1hdGNoUnVsZXNGb3JMaXN0KGNvbnN0IFZlY3RvcjxSdWxlRGF0YT4qLCBjb25zdCBF
bGVtZW50KiwgaW50JiBmaXJzdFJ1bGVJbmRleCwgaW50JiBsYXN0UnVsZUluZGV4LCBib29sIGlu
Y2x1ZGVFbXB0eVJ1bGVzKTsKICAgICBib29sIGZhc3RSZWplY3RTZWxlY3Rvcihjb25zdCBSdWxl
RGF0YSYpIGNvbnN0OwotICAgIHZvaWQgc29ydE1hdGNoZWRSdWxlcygpOworICAgIHZvaWQgc29y
dEFuZFRyYW5zZmVyTWF0Y2hlZFJ1bGVzKGJvb2wgY29sbGVjdFJ1bGVzT25seSk7CiAKLSAgICBi
b29sIGNoZWNrU2VsZWN0b3IoY29uc3QgUnVsZURhdGEmKTsKKyAgICBib29sIGNoZWNrU2VsZWN0
b3IoY29uc3QgUnVsZURhdGEmLCBjb25zdCBFbGVtZW50KiBzY29wZSk7CiAKICAgICB2b2lkIGFw
cGx5TWF0Y2hlZERlY2xhcmF0aW9ucyhjb25zdCBNYXRjaFJlc3VsdCYpOwogICAgIHRlbXBsYXRl
IDxib29sIGZpcnN0UGFzcz4KQEAgLTI2Myw3ICsyNjksOCBAQCBwcml2YXRlOgogICAgIGJvb2wg
aXNGaXJzdFBhZ2UoaW50IHBhZ2VJbmRleCkgY29uc3Q7CiAgICAgU3RyaW5nIHBhZ2VOYW1lKGlu
dCBwYWdlSW5kZXgpIGNvbnN0OwogCi0gICAgT3duUHRyPFJ1bGVTZXQ+IG1fYXV0aG9yU3R5bGU7
CisgICAgT3duUHRyPFJ1bGVTZXQ+IG1fZ2xvYmFsQXV0aG9yU3R5bGVzOworICAgIE93blB0cjxT
Y29wZWRSdWxlU2V0cz4gbV9zY29wZWRBdXRob3JTdHlsZXM7CiAgICAgT3duUHRyPFJ1bGVTZXQ+
IG1fdXNlclN0eWxlOwogCiAgICAgRmVhdHVyZXMgbV9mZWF0dXJlczsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2Nzcy9TZWxlY3RvckNoZWNrZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvY3Nz
L1NlbGVjdG9yQ2hlY2tlci5jcHAKaW5kZXggMmM1YzczMi4uN2E0ZTdhOCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvY3NzL1NlbGVjdG9yQ2hlY2tlci5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvY3NzL1NlbGVjdG9yQ2hlY2tlci5jcHAKQEAgLTk2LDcgKzk2LDEzIEBAIHZvaWQgU2VsZWN0
b3JDaGVja2VyOjpwdXNoUGFyZW50U3RhY2tGcmFtZShFbGVtZW50KiBwYXJlbnQpCiAgICAgQVNT
RVJUKG1fYW5jZXN0b3JJZGVudGlmaWVyRmlsdGVyKTsKICAgICBBU1NFUlQobV9wYXJlbnRTdGFj
ay5pc0VtcHR5KCkgfHwgbV9wYXJlbnRTdGFjay5sYXN0KCkuZWxlbWVudCA9PSBwYXJlbnQtPnBh
cmVudE9ySG9zdEVsZW1lbnQoKSk7CiAgICAgQVNTRVJUKCFtX3BhcmVudFN0YWNrLmlzRW1wdHko
KSB8fCAhcGFyZW50LT5wYXJlbnRPckhvc3RFbGVtZW50KCkpOwotICAgIG1fcGFyZW50U3RhY2su
YXBwZW5kKFBhcmVudFN0YWNrRnJhbWUocGFyZW50KSk7CisgICAgLy8gUG9pbnQgdG8gZnJhbWUg
Y29udGFpbmluZyB0aGUgY2xvc2VzdCBzdHlsZSBzY29wZSAob3IgbGVhdmUgYXQgMCBpZiBub25l
KS4KKyAgICBpZiAocGFyZW50LT5oYXNTY29wZWRIVE1MU3R5bGVDaGlsZCgpKQorICAgICAgICBt
X3BhcmVudFN0YWNrLmFwcGVuZChQYXJlbnRTdGFja0ZyYW1lKHBhcmVudCwgbV9wYXJlbnRTdGFj
ay5zaXplKCkpKTsKKyAgICBlbHNlIGlmICghbV9wYXJlbnRTdGFjay5pc0VtcHR5KCkpCisgICAg
ICAgIG1fcGFyZW50U3RhY2suYXBwZW5kKFBhcmVudFN0YWNrRnJhbWUocGFyZW50LCBtX3BhcmVu
dFN0YWNrLmxhc3QoKS5jbG9zZXN0U3R5bGVTY29wZUZyYW1lSW5kZXgpKTsKKyAgICBlbHNlCisg
ICAgICAgIG1fcGFyZW50U3RhY2suYXBwZW5kKFBhcmVudFN0YWNrRnJhbWUocGFyZW50LCAtMSkp
OwogICAgIFBhcmVudFN0YWNrRnJhbWUmIHBhcmVudEZyYW1lID0gbV9wYXJlbnRTdGFjay5sYXN0
KCk7CiAgICAgLy8gTWl4IHRhZ3MsIGNsYXNzIG5hbWVzIGFuZCBpZHMgaW50byBzb21lIHNvcnQg
b2Ygd2VpcmQgYm91aWxsYWJhaXNzZS4KICAgICAvLyBUaGUgZmlsdGVyIGlzIHVzZWQgZm9yIGZh
c3QgcmVqZWN0aW9uIG9mIGNoaWxkIGFuZCBkZXNjZW5kYW50IHNlbGVjdG9ycy4KQEAgLTE0MSw3
ICsxNDcsNyBAQCB2b2lkIFNlbGVjdG9yQ2hlY2tlcjo6cHVzaFBhcmVudChFbGVtZW50KiBwYXJl
bnQpCiAgICAgICAgIC8vIHN0eWxlIHJlY2FsYyBpbiB0aGUgbWlkZGxlIG9mIHRyZWUgYnVpbGRp
bmcuIFJlc2V0IHRoZSBzdGFjayBpZiB3ZSBzZWUgYSBuZXcgcm9vdCBlbGVtZW50LgogICAgICAg
ICBBU1NFUlQobV9hbmNlc3RvcklkZW50aWZpZXJGaWx0ZXIpOwogICAgICAgICBtX2FuY2VzdG9y
SWRlbnRpZmllckZpbHRlci0+Y2xlYXIoKTsKLSAgICAgICAgbV9wYXJlbnRTdGFjay5yZXNpemUo
MCk7CisgICAgICAgIG1fcGFyZW50U3RhY2suY2xlYXIoKTsKICAgICB9IGVsc2UgewogICAgICAg
ICBBU1NFUlQobV9hbmNlc3RvcklkZW50aWZpZXJGaWx0ZXIpOwogICAgICAgICAvLyBXZSBtYXkg
Z2V0IGludm9rZWQgZm9yIHNvbWUgcmFuZG9tIGVsZW1lbnRzIGluIHNvbWUgd2Fja3kgY2FzZXMg
ZHVyaW5nIHN0eWxlIHJlc29sdmUuCkBAIC0yNTUsMjUgKzI2MSwyNSBAQCBFSW5zaWRlTGluayBT
ZWxlY3RvckNoZWNrZXI6OmRldGVybWluZUxpbmtTdGF0ZVNsb3dDYXNlKEVsZW1lbnQqIGVsZW1l
bnQpIGNvbnN0CiAjZW5kaWYKIH0KIAotYm9vbCBTZWxlY3RvckNoZWNrZXI6OmNoZWNrU2VsZWN0
b3IoQ1NTU2VsZWN0b3IqIHNlbCwgRWxlbWVudCogZWxlbWVudCwgYm9vbCBpc0Zhc3RDaGVja2Fi
bGVTZWxlY3RvcikgY29uc3QKK2Jvb2wgU2VsZWN0b3JDaGVja2VyOjpjaGVja1NlbGVjdG9yKENT
U1NlbGVjdG9yKiBzZWwsIEVsZW1lbnQqIGVsZW1lbnQsIGNvbnN0IEVsZW1lbnQqIHNjb3BlLCBi
b29sIGlzRmFzdENoZWNrYWJsZVNlbGVjdG9yKSBjb25zdAogewogICAgIFBzZXVkb0lkIGR5bmFt
aWNQc2V1ZG8gPSBOT1BTRVVETzsKICAgICBpZiAoaXNGYXN0Q2hlY2thYmxlU2VsZWN0b3IgJiYg
IWVsZW1lbnQtPmlzU1ZHRWxlbWVudCgpKSB7CiAgICAgICAgIGlmICghZmFzdENoZWNrUmlnaHRt
b3N0U2VsZWN0b3Ioc2VsLCBlbGVtZW50LCBWaXNpdGVkTWF0Y2hEaXNhYmxlZCkpCiAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIHJldHVybiBmYXN0Q2hlY2tTZWxlY3RvcihzZWws
IGVsZW1lbnQpOworICAgICAgICByZXR1cm4gZmFzdENoZWNrU2VsZWN0b3Ioc2VsLCBlbGVtZW50
LCBzY29wZSk7CiAgICAgfQotICAgIHJldHVybiBjaGVja1NlbGVjdG9yKHNlbCwgZWxlbWVudCwg
ZHluYW1pY1BzZXVkbywgZmFsc2UsIFZpc2l0ZWRNYXRjaERpc2FibGVkKSA9PSBTZWxlY3Rvck1h
dGNoZXM7CisgICAgcmV0dXJuIGNoZWNrU2VsZWN0b3Ioc2VsLCBlbGVtZW50LCBzY29wZSwgZHlu
YW1pY1BzZXVkbywgZmFsc2UsIFZpc2l0ZWRNYXRjaERpc2FibGVkKSA9PSBTZWxlY3Rvck1hdGNo
ZXM7CiB9CiAKIG5hbWVzcGFjZSB7CiAKIHRlbXBsYXRlIDxib29sIGNoZWNrVmFsdWUoY29uc3Qg
RWxlbWVudCosIEF0b21pY1N0cmluZ0ltcGwqLCBjb25zdCBRdWFsaWZpZWROYW1lJiksIGJvb2wg
aW5pdEF0dHJpYnV0ZU5hbWU+Ci1pbmxpbmUgYm9vbCBmYXN0Q2hlY2tTaW5nbGVTZWxlY3Rvcihj
b25zdCBDU1NTZWxlY3RvciomIHNlbGVjdG9yLCBjb25zdCBFbGVtZW50KiYgZWxlbWVudCwgY29u
c3QgQ1NTU2VsZWN0b3IqJiB0b3BDaGlsZE9yU3Vic2VsZWN0b3IsIGNvbnN0IEVsZW1lbnQqJiB0
b3BDaGlsZE9yU3Vic2VsZWN0b3JNYXRjaEVsZW1lbnQpCitpbmxpbmUgYm9vbCBmYXN0Q2hlY2tT
aW5nbGVTZWxlY3Rvcihjb25zdCBDU1NTZWxlY3RvciomIHNlbGVjdG9yLCBjb25zdCBFbGVtZW50
KiYgZWxlbWVudCwgY29uc3QgRWxlbWVudCogc2NvcGUsIGNvbnN0IENTU1NlbGVjdG9yKiYgdG9w
Q2hpbGRPclN1YnNlbGVjdG9yLCBjb25zdCBFbGVtZW50KiYgdG9wQ2hpbGRPclN1YnNlbGVjdG9y
TWF0Y2hFbGVtZW50KQogewogICAgIEF0b21pY1N0cmluZ0ltcGwqIHZhbHVlID0gc2VsZWN0b3It
PnZhbHVlKCkuaW1wbCgpOwogICAgIGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJpYnV0ZSA9IGlu
aXRBdHRyaWJ1dGVOYW1lID8gc2VsZWN0b3ItPmF0dHJpYnV0ZSgpIDogYW55UU5hbWUoKTsKLSAg
ICBmb3IgKDsgZWxlbWVudDsgZWxlbWVudCA9IGVsZW1lbnQtPnBhcmVudEVsZW1lbnQoKSkgewor
ICAgIGZvciAoOyBlbGVtZW50OyBlbGVtZW50ID0gKGVsZW1lbnQgPT0gc2NvcGUpID8gMCA6IGVs
ZW1lbnQtPnBhcmVudEVsZW1lbnQoKSkgewogICAgICAgICBpZiAoY2hlY2tWYWx1ZShlbGVtZW50
LCB2YWx1ZSwgYXR0cmlidXRlKSAmJiBTZWxlY3RvckNoZWNrZXI6OnRhZ01hdGNoZXMoZWxlbWVu
dCwgc2VsZWN0b3IpKSB7CiAgICAgICAgICAgICBpZiAoc2VsZWN0b3ItPnJlbGF0aW9uKCkgPT0g
Q1NTU2VsZWN0b3I6OkRlc2NlbmRhbnQpCiAgICAgICAgICAgICAgICAgdG9wQ2hpbGRPclN1YnNl
bGVjdG9yID0gMDsKQEAgLTM1MCw3ICszNTYsNyBAQCBpbmxpbmUgYm9vbCBTZWxlY3RvckNoZWNr
ZXI6OmZhc3RDaGVja1JpZ2h0bW9zdFNlbGVjdG9yKGNvbnN0IENTU1NlbGVjdG9yKiBzZWxlYwog
ICAgIHJldHVybiBmYWxzZTsKIH0KIAotYm9vbCBTZWxlY3RvckNoZWNrZXI6OmZhc3RDaGVja1Nl
bGVjdG9yKGNvbnN0IENTU1NlbGVjdG9yKiBzZWxlY3RvciwgY29uc3QgRWxlbWVudCogZWxlbWVu
dCkgY29uc3QKK2Jvb2wgU2VsZWN0b3JDaGVja2VyOjpmYXN0Q2hlY2tTZWxlY3Rvcihjb25zdCBD
U1NTZWxlY3Rvciogc2VsZWN0b3IsIGNvbnN0IEVsZW1lbnQqIGVsZW1lbnQsIGNvbnN0IEVsZW1l
bnQqIHNjb3BlKSBjb25zdAogewogICAgIEFTU0VSVChmYXN0Q2hlY2tSaWdodG1vc3RTZWxlY3Rv
cihzZWxlY3RvciwgZWxlbWVudCwgVmlzaXRlZE1hdGNoRW5hYmxlZCkpOwogCkBAIC0zNjgsMjAg
KzM3NCwyMCBAQCBib29sIFNlbGVjdG9yQ2hlY2tlcjo6ZmFzdENoZWNrU2VsZWN0b3IoY29uc3Qg
Q1NTU2VsZWN0b3IqIHNlbGVjdG9yLCBjb25zdCBFbGVtZQogICAgIHdoaWxlIChzZWxlY3Rvcikg
ewogICAgICAgICBzd2l0Y2ggKHNlbGVjdG9yLT5tX21hdGNoKSB7CiAgICAgICAgIGNhc2UgQ1NT
U2VsZWN0b3I6OkNsYXNzOgotICAgICAgICAgICAgaWYgKCFmYXN0Q2hlY2tTaW5nbGVTZWxlY3Rv
cjxjaGVja0NsYXNzVmFsdWUsIGZhbHNlPihzZWxlY3RvciwgZWxlbWVudCwgdG9wQ2hpbGRPclN1
YnNlbGVjdG9yLCB0b3BDaGlsZE9yU3Vic2VsZWN0b3JNYXRjaEVsZW1lbnQpKQorICAgICAgICAg
ICAgaWYgKCFmYXN0Q2hlY2tTaW5nbGVTZWxlY3RvcjxjaGVja0NsYXNzVmFsdWUsIGZhbHNlPihz
ZWxlY3RvciwgZWxlbWVudCwgc2NvcGUsIHRvcENoaWxkT3JTdWJzZWxlY3RvciwgdG9wQ2hpbGRP
clN1YnNlbGVjdG9yTWF0Y2hFbGVtZW50KSkKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6SWQ6Ci0gICAg
ICAgICAgICBpZiAoIWZhc3RDaGVja1NpbmdsZVNlbGVjdG9yPGNoZWNrSURWYWx1ZSwgZmFsc2U+
KHNlbGVjdG9yLCBlbGVtZW50LCB0b3BDaGlsZE9yU3Vic2VsZWN0b3IsIHRvcENoaWxkT3JTdWJz
ZWxlY3Rvck1hdGNoRWxlbWVudCkpCisgICAgICAgICAgICBpZiAoIWZhc3RDaGVja1NpbmdsZVNl
bGVjdG9yPGNoZWNrSURWYWx1ZSwgZmFsc2U+KHNlbGVjdG9yLCBlbGVtZW50LCBzY29wZSwgdG9w
Q2hpbGRPclN1YnNlbGVjdG9yLCB0b3BDaGlsZE9yU3Vic2VsZWN0b3JNYXRjaEVsZW1lbnQpKQog
ICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICBjYXNlIENTU1NlbGVjdG9yOjpOb25lOgotICAgICAgICAgICAgaWYgKCFmYXN0Q2hlY2tTaW5n
bGVTZWxlY3RvcjxjaGVja1RhZ1ZhbHVlLCBmYWxzZT4oc2VsZWN0b3IsIGVsZW1lbnQsIHRvcENo
aWxkT3JTdWJzZWxlY3RvciwgdG9wQ2hpbGRPclN1YnNlbGVjdG9yTWF0Y2hFbGVtZW50KSkKKyAg
ICAgICAgICAgIGlmICghZmFzdENoZWNrU2luZ2xlU2VsZWN0b3I8Y2hlY2tUYWdWYWx1ZSwgZmFs
c2U+KHNlbGVjdG9yLCBlbGVtZW50LCBzY29wZSwgdG9wQ2hpbGRPclN1YnNlbGVjdG9yLCB0b3BD
aGlsZE9yU3Vic2VsZWN0b3JNYXRjaEVsZW1lbnQpKQogICAgICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpTZXQ6
CiAgICAgICAgIGNhc2UgQ1NTU2VsZWN0b3I6OkV4YWN0OgotICAgICAgICAgICAgaWYgKCFmYXN0
Q2hlY2tTaW5nbGVTZWxlY3RvcjxjaGVja0V4YWN0QXR0cmlidXRlVmFsdWUsIHRydWU+KHNlbGVj
dG9yLCBlbGVtZW50LCB0b3BDaGlsZE9yU3Vic2VsZWN0b3IsIHRvcENoaWxkT3JTdWJzZWxlY3Rv
ck1hdGNoRWxlbWVudCkpCisgICAgICAgICAgICBpZiAoIWZhc3RDaGVja1NpbmdsZVNlbGVjdG9y
PGNoZWNrRXhhY3RBdHRyaWJ1dGVWYWx1ZSwgdHJ1ZT4oc2VsZWN0b3IsIGVsZW1lbnQsIHNjb3Bl
LCB0b3BDaGlsZE9yU3Vic2VsZWN0b3IsIHRvcENoaWxkT3JTdWJzZWxlY3Rvck1hdGNoRWxlbWVu
dCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgIGRlZmF1bHQ6CkBAIC00MzAsNyArNDM2LDE1IEBAIGJvb2wgU2VsZWN0b3JDaGVja2Vy
Ojppc0Zhc3RDaGVja2FibGVTZWxlY3Rvcihjb25zdCBDU1NTZWxlY3Rvciogc2VsZWN0b3IpCiAv
LyAqIFNlbGVjdG9yTWF0Y2hlcyAgICAgICAgIC0gdGhlIHNlbGVjdG9yIG1hdGNoZXMgdGhlIGVs
ZW1lbnQgZQogLy8gKiBTZWxlY3RvckZhaWxzTG9jYWxseSAgICAtIHRoZSBzZWxlY3RvciBmYWls
cyBmb3IgdGhlIGVsZW1lbnQgZQogLy8gKiBTZWxlY3RvckZhaWxzQ29tcGxldGVseSAtIHRoZSBz
ZWxlY3RvciBmYWlscyBmb3IgZSBhbmQgYW55IHNpYmxpbmcgb3IgYW5jZXN0b3Igb2YgZQotU2Vs
ZWN0b3JDaGVja2VyOjpTZWxlY3Rvck1hdGNoIFNlbGVjdG9yQ2hlY2tlcjo6Y2hlY2tTZWxlY3Rv
cihDU1NTZWxlY3Rvciogc2VsLCBFbGVtZW50KiBlLCBQc2V1ZG9JZCYgZHluYW1pY1BzZXVkbywg
Ym9vbCBpc1N1YlNlbGVjdG9yLCBWaXNpdGVkTWF0Y2hUeXBlIHZpc2l0ZWRNYXRjaFR5cGUsIFJl
bmRlclN0eWxlKiBlbGVtZW50U3R5bGUsIFJlbmRlclN0eWxlKiBlbGVtZW50UGFyZW50U3R5bGUp
IGNvbnN0CitTZWxlY3RvckNoZWNrZXI6OlNlbGVjdG9yTWF0Y2ggU2VsZWN0b3JDaGVja2VyOjpj
aGVja1NlbGVjdG9yKAorICAgIENTU1NlbGVjdG9yKiBzZWwsCisgICAgRWxlbWVudCogZSwKKyAg
ICBjb25zdCBFbGVtZW50KiBzY29wZSwKKyAgICBQc2V1ZG9JZCYgZHluYW1pY1BzZXVkbywKKyAg
ICBib29sIGlzU3ViU2VsZWN0b3IsCisgICAgVmlzaXRlZE1hdGNoVHlwZSB2aXNpdGVkTWF0Y2hU
eXBlLAorICAgIFJlbmRlclN0eWxlKiBlbGVtZW50U3R5bGUsCisgICAgUmVuZGVyU3R5bGUqIGVs
ZW1lbnRQYXJlbnRTdHlsZSkgY29uc3QKIHsKICNpZiBFTkFCTEUoU1ZHKQogICAgIC8vIFNwZWM6
IENTUzIgc2VsZWN0b3JzIGNhbm5vdCBiZSBhcHBsaWVkIHRvIHRoZSAoY29uY2VwdHVhbGx5KSBj
bG9uZWQgRE9NIHRyZWUKQEAgLTQ0MCw3ICs0NTQsNyBAQCBTZWxlY3RvckNoZWNrZXI6OlNlbGVj
dG9yTWF0Y2ggU2VsZWN0b3JDaGVja2VyOjpjaGVja1NlbGVjdG9yKENTU1NlbGVjdG9yKiBzZWws
CiAjZW5kaWYKIAogICAgIC8vIGZpcnN0IHNlbGVjdG9yIGhhcyB0byBtYXRjaAotICAgIGlmICgh
Y2hlY2tPbmVTZWxlY3RvcihzZWwsIGUsIGR5bmFtaWNQc2V1ZG8sIGlzU3ViU2VsZWN0b3IsIHZp
c2l0ZWRNYXRjaFR5cGUsIGVsZW1lbnRTdHlsZSwgZWxlbWVudFBhcmVudFN0eWxlKSkKKyAgICBp
ZiAoIWNoZWNrT25lU2VsZWN0b3Ioc2VsLCBlLCBzY29wZSwgZHluYW1pY1BzZXVkbywgaXNTdWJT
ZWxlY3RvciwgdmlzaXRlZE1hdGNoVHlwZSwgZWxlbWVudFN0eWxlLCBlbGVtZW50UGFyZW50U3R5
bGUpKQogICAgICAgICByZXR1cm4gU2VsZWN0b3JGYWlsc0xvY2FsbHk7CiAKICAgICAvLyBUaGUg
cmVzdCBvZiB0aGUgc2VsZWN0b3JzIGhhcyB0byBtYXRjaApAQCAtNDY4LDcgKzQ4Miw3IEBAIFNl
bGVjdG9yQ2hlY2tlcjo6U2VsZWN0b3JNYXRjaCBTZWxlY3RvckNoZWNrZXI6OmNoZWNrU2VsZWN0
b3IoQ1NTU2VsZWN0b3IqIHNlbCwKICAgICAgICAgICAgIGlmICghbiB8fCAhbi0+aXNFbGVtZW50
Tm9kZSgpKQogICAgICAgICAgICAgICAgIHJldHVybiBTZWxlY3RvckZhaWxzQ29tcGxldGVseTsK
ICAgICAgICAgICAgIGUgPSBzdGF0aWNfY2FzdDxFbGVtZW50Kj4obik7Ci0gICAgICAgICAgICBT
ZWxlY3Rvck1hdGNoIG1hdGNoID0gY2hlY2tTZWxlY3RvcihzZWwsIGUsIGR5bmFtaWNQc2V1ZG8s
IGZhbHNlLCB2aXNpdGVkTWF0Y2hUeXBlKTsKKyAgICAgICAgICAgIFNlbGVjdG9yTWF0Y2ggbWF0
Y2ggPSBjaGVja1NlbGVjdG9yKHNlbCwgZSwgc2NvcGUsIGR5bmFtaWNQc2V1ZG8sIGZhbHNlLCB2
aXNpdGVkTWF0Y2hUeXBlKTsKICAgICAgICAgICAgIGlmIChtYXRjaCAhPSBTZWxlY3RvckZhaWxz
TG9jYWxseSkKICAgICAgICAgICAgICAgICByZXR1cm4gbWF0Y2g7CiAgICAgICAgIH0KQEAgLTQ3
OSw3ICs0OTMsNyBAQCBTZWxlY3RvckNoZWNrZXI6OlNlbGVjdG9yTWF0Y2ggU2VsZWN0b3JDaGVj
a2VyOjpjaGVja1NlbGVjdG9yKENTU1NlbGVjdG9yKiBzZWwsCiAgICAgICAgICAgICBpZiAoIW4g
fHwgIW4tPmlzRWxlbWVudE5vZGUoKSkKICAgICAgICAgICAgICAgICByZXR1cm4gU2VsZWN0b3JG
YWlsc0NvbXBsZXRlbHk7CiAgICAgICAgICAgICBlID0gc3RhdGljX2Nhc3Q8RWxlbWVudCo+KG4p
OwotICAgICAgICAgICAgcmV0dXJuIGNoZWNrU2VsZWN0b3Ioc2VsLCBlLCBkeW5hbWljUHNldWRv
LCBmYWxzZSwgdmlzaXRlZE1hdGNoVHlwZSk7CisgICAgICAgICAgICByZXR1cm4gY2hlY2tTZWxl
Y3RvcihzZWwsIGUsIHNjb3BlLCBkeW5hbWljUHNldWRvLCBmYWxzZSwgdmlzaXRlZE1hdGNoVHlw
ZSk7CiAgICAgICAgIH0KICAgICBjYXNlIENTU1NlbGVjdG9yOjpEaXJlY3RBZGphY2VudDoKICAg
ICAgICAgewpAQCAtNDk0LDcgKzUwOCw3IEBAIFNlbGVjdG9yQ2hlY2tlcjo6U2VsZWN0b3JNYXRj
aCBTZWxlY3RvckNoZWNrZXI6OmNoZWNrU2VsZWN0b3IoQ1NTU2VsZWN0b3IqIHNlbCwKICAgICAg
ICAgICAgIGlmICghbikKICAgICAgICAgICAgICAgICByZXR1cm4gU2VsZWN0b3JGYWlsc0xvY2Fs
bHk7CiAgICAgICAgICAgICBlID0gc3RhdGljX2Nhc3Q8RWxlbWVudCo+KG4pOwotICAgICAgICAg
ICAgcmV0dXJuIGNoZWNrU2VsZWN0b3Ioc2VsLCBlLCBkeW5hbWljUHNldWRvLCBmYWxzZSwgdmlz
aXRlZE1hdGNoVHlwZSk7CisgICAgICAgICAgICByZXR1cm4gY2hlY2tTZWxlY3RvcihzZWwsIGUs
IHNjb3BlLCBkeW5hbWljUHNldWRvLCBmYWxzZSwgdmlzaXRlZE1hdGNoVHlwZSk7CiAgICAgICAg
IH0KICAgICBjYXNlIENTU1NlbGVjdG9yOjpJbmRpcmVjdEFkamFjZW50OgogICAgICAgICBpZiAo
IW1faXNDb2xsZWN0aW5nUnVsZXNPbmx5ICYmIGUtPnBhcmVudE5vZGUoKSAmJiBlLT5wYXJlbnRO
b2RlKCktPmlzRWxlbWVudE5vZGUoKSkgewpAQCAtNTA5LDcgKzUyMyw3IEBAIFNlbGVjdG9yQ2hl
Y2tlcjo6U2VsZWN0b3JNYXRjaCBTZWxlY3RvckNoZWNrZXI6OmNoZWNrU2VsZWN0b3IoQ1NTU2Vs
ZWN0b3IqIHNlbCwKICAgICAgICAgICAgIGlmICghbikKICAgICAgICAgICAgICAgICByZXR1cm4g
U2VsZWN0b3JGYWlsc0xvY2FsbHk7CiAgICAgICAgICAgICBlID0gc3RhdGljX2Nhc3Q8RWxlbWVu
dCo+KG4pOwotICAgICAgICAgICAgU2VsZWN0b3JNYXRjaCBtYXRjaCA9IGNoZWNrU2VsZWN0b3Io
c2VsLCBlLCBkeW5hbWljUHNldWRvLCBmYWxzZSwgdmlzaXRlZE1hdGNoVHlwZSk7CisgICAgICAg
ICAgICBTZWxlY3Rvck1hdGNoIG1hdGNoID0gY2hlY2tTZWxlY3RvcihzZWwsIGUsIHNjb3BlLCBk
eW5hbWljUHNldWRvLCBmYWxzZSwgdmlzaXRlZE1hdGNoVHlwZSk7CiAgICAgICAgICAgICBpZiAo
bWF0Y2ggIT0gU2VsZWN0b3JGYWlsc0xvY2FsbHkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIG1h
dGNoOwogICAgICAgICB9OwpAQCAtNTIxLDE0ICs1MzUsMTQgQEAgU2VsZWN0b3JDaGVja2VyOjpT
ZWxlY3Rvck1hdGNoIFNlbGVjdG9yQ2hlY2tlcjo6Y2hlY2tTZWxlY3RvcihDU1NTZWxlY3Rvciog
c2VsLAogICAgICAgICBpZiAoKGVsZW1lbnRTdHlsZSB8fCBtX2lzQ29sbGVjdGluZ1J1bGVzT25s
eSkgJiYgZHluYW1pY1BzZXVkbyAhPSBOT1BTRVVETyAmJiBkeW5hbWljUHNldWRvICE9IFNFTEVD
VElPTgogICAgICAgICAgICAgICYmICEoKFJlbmRlclNjcm9sbGJhcjo6c2Nyb2xsYmFyRm9yU3R5
bGVSZXNvbHZlKCkgfHwgZHluYW1pY1BzZXVkbyA9PSBTQ1JPTExCQVJfQ09STkVSIHx8IGR5bmFt
aWNQc2V1ZG8gPT0gUkVTSVpFUikgJiYgc2VsLT5tX21hdGNoID09IENTU1NlbGVjdG9yOjpQc2V1
ZG9DbGFzcykpCiAgICAgICAgICAgICByZXR1cm4gU2VsZWN0b3JGYWlsc0NvbXBsZXRlbHk7Ci0g
ICAgICAgIHJldHVybiBjaGVja1NlbGVjdG9yKHNlbCwgZSwgZHluYW1pY1BzZXVkbywgdHJ1ZSwg
dmlzaXRlZE1hdGNoVHlwZSwgZWxlbWVudFN0eWxlLCBlbGVtZW50UGFyZW50U3R5bGUpOworICAg
ICAgICByZXR1cm4gY2hlY2tTZWxlY3RvcihzZWwsIGUsIHNjb3BlLCBkeW5hbWljUHNldWRvLCB0
cnVlLCB2aXNpdGVkTWF0Y2hUeXBlLCBlbGVtZW50U3R5bGUsIGVsZW1lbnRQYXJlbnRTdHlsZSk7
CiAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6U2hhZG93RGVzY2VuZGFudDoKICAgICAgICAgewogICAg
ICAgICAgICAgTm9kZSogc2hhZG93SG9zdE5vZGUgPSBlLT5zaGFkb3dBbmNlc3Rvck5vZGUoKTsK
ICAgICAgICAgICAgIGlmIChzaGFkb3dIb3N0Tm9kZSA9PSBlIHx8ICFzaGFkb3dIb3N0Tm9kZS0+
aXNFbGVtZW50Tm9kZSgpKQogICAgICAgICAgICAgICAgIHJldHVybiBTZWxlY3RvckZhaWxzQ29t
cGxldGVseTsKICAgICAgICAgICAgIGUgPSBzdGF0aWNfY2FzdDxFbGVtZW50Kj4oc2hhZG93SG9z
dE5vZGUpOwotICAgICAgICAgICAgcmV0dXJuIGNoZWNrU2VsZWN0b3Ioc2VsLCBlLCBkeW5hbWlj
UHNldWRvLCBmYWxzZSwgdmlzaXRlZE1hdGNoVHlwZSk7CisgICAgICAgICAgICByZXR1cm4gY2hl
Y2tTZWxlY3RvcihzZWwsIGUsIHNjb3BlLCBkeW5hbWljUHNldWRvLCBmYWxzZSwgdmlzaXRlZE1h
dGNoVHlwZSk7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTY4MCw3ICs2OTQsMTUgQEAgc3RhdGlj
IGJvb2wgYW55QXR0cmlidXRlTWF0Y2hlcyhOYW1lZE5vZGVNYXAqIGF0dHJpYnV0ZXMsIENTU1Nl
bGVjdG9yOjpNYXRjaCBtYXQKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLWJvb2wgU2VsZWN0b3JD
aGVja2VyOjpjaGVja09uZVNlbGVjdG9yKENTU1NlbGVjdG9yKiBzZWwsIEVsZW1lbnQqIGUsIFBz
ZXVkb0lkJiBkeW5hbWljUHNldWRvLCBib29sIGlzU3ViU2VsZWN0b3IsIFZpc2l0ZWRNYXRjaFR5
cGUgdmlzaXRlZE1hdGNoVHlwZSwgUmVuZGVyU3R5bGUqIGVsZW1lbnRTdHlsZSwgUmVuZGVyU3R5
bGUqIGVsZW1lbnRQYXJlbnRTdHlsZSkgY29uc3QKK2Jvb2wgU2VsZWN0b3JDaGVja2VyOjpjaGVj
a09uZVNlbGVjdG9yKAorICAgIENTU1NlbGVjdG9yKiBzZWwsCisgICAgRWxlbWVudCogZSwKKyAg
ICBjb25zdCBFbGVtZW50KiBzY29wZSwKKyAgICBQc2V1ZG9JZCYgZHluYW1pY1BzZXVkbywKKyAg
ICBib29sIGlzU3ViU2VsZWN0b3IsCisgICAgVmlzaXRlZE1hdGNoVHlwZSB2aXNpdGVkTWF0Y2hU
eXBlLAorICAgIFJlbmRlclN0eWxlKiBlbGVtZW50U3R5bGUsCisgICAgUmVuZGVyU3R5bGUqIGVs
ZW1lbnRQYXJlbnRTdHlsZSkgY29uc3QKIHsKICAgICBBU1NFUlQoZSk7CiAgICAgaWYgKCFTZWxl
Y3RvckNoZWNrZXI6OnRhZ01hdGNoZXMoZSwgc2VsKSkKQEAgLTcxNyw3ICs3MzksNyBAQCBib29s
IFNlbGVjdG9yQ2hlY2tlcjo6Y2hlY2tPbmVTZWxlY3RvcihDU1NTZWxlY3Rvciogc2VsLCBFbGVt
ZW50KiBlLCBQc2V1ZG9JZCYgZAogICAgICAgICAgICAgICAgIC8vIFdlIHNlbGVjdCBiZXR3ZWVu
IDp2aXNpdGVkIGFuZCA6bGluayB3aGVuIGFwcGx5aW5nLiBXZSBkb24ndCBrbm93IHdoaWNoIG9u
ZSBhcHBsaWVkIChvciBub3QpIHlldC4KICAgICAgICAgICAgICAgICBpZiAoc3ViU2VsLT5wc2V1
ZG9UeXBlKCkgPT0gQ1NTU2VsZWN0b3I6OlBzZXVkb1Zpc2l0ZWQgfHwgKHN1YlNlbC0+cHNldWRv
VHlwZSgpID09IENTU1NlbGVjdG9yOjpQc2V1ZG9MaW5rICYmIHZpc2l0ZWRNYXRjaFR5cGUgPT0g
VmlzaXRlZE1hdGNoRW5hYmxlZCkpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwot
ICAgICAgICAgICAgICAgIGlmICghY2hlY2tPbmVTZWxlY3RvcihzdWJTZWwsIGUsIGR5bmFtaWNQ
c2V1ZG8sIHRydWUsIHZpc2l0ZWRNYXRjaFR5cGUsIGVsZW1lbnRTdHlsZSwgZWxlbWVudFBhcmVu
dFN0eWxlKSkKKyAgICAgICAgICAgICAgICBpZiAoIWNoZWNrT25lU2VsZWN0b3Ioc3ViU2VsLCBl
LCBzY29wZSwgZHluYW1pY1BzZXVkbywgdHJ1ZSwgdmlzaXRlZE1hdGNoVHlwZSwgZWxlbWVudFN0
eWxlLCBlbGVtZW50UGFyZW50U3R5bGUpKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKICAgICAgICAgICAgIH0KICAgICAgICAgfSBlbHNlIGlmIChkeW5hbWljUHNldWRvICE9IE5P
UFNFVURPICYmIChSZW5kZXJTY3JvbGxiYXI6OnNjcm9sbGJhckZvclN0eWxlUmVzb2x2ZSgpIHx8
IGR5bmFtaWNQc2V1ZG8gPT0gU0NST0xMQkFSX0NPUk5FUiB8fCBkeW5hbWljUHNldWRvID09IFJF
U0laRVIpKSB7CkBAIC0xMDE4LDcgKzEwNDAsNyBAQCBib29sIFNlbGVjdG9yQ2hlY2tlcjo6Y2hl
Y2tPbmVTZWxlY3RvcihDU1NTZWxlY3Rvciogc2VsLCBFbGVtZW50KiBlLCBQc2V1ZG9JZCYgZAog
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0FueToK
ICAgICAgICAgICAgIGZvciAoQ1NTU2VsZWN0b3IqIHNlbGVjdG9yID0gc2VsLT5zZWxlY3Rvckxp
c3QoKS0+Zmlyc3QoKTsgc2VsZWN0b3I7IHNlbGVjdG9yID0gQ1NTU2VsZWN0b3JMaXN0OjpuZXh0
KHNlbGVjdG9yKSkgewotICAgICAgICAgICAgICAgIGlmIChjaGVja1NlbGVjdG9yKHNlbGVjdG9y
LCBlLCBkeW5hbWljUHNldWRvLCB0cnVlLCB2aXNpdGVkTWF0Y2hUeXBlLCBlbGVtZW50U3R5bGUs
IGVsZW1lbnRQYXJlbnRTdHlsZSkgPT0gU2VsZWN0b3JNYXRjaGVzKQorICAgICAgICAgICAgICAg
IGlmIChjaGVja1NlbGVjdG9yKHNlbGVjdG9yLCBlLCBzY29wZSwgZHluYW1pY1BzZXVkbywgdHJ1
ZSwgdmlzaXRlZE1hdGNoVHlwZSwgZWxlbWVudFN0eWxlLCBlbGVtZW50UGFyZW50U3R5bGUpID09
IFNlbGVjdG9yTWF0Y2hlcykKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICBicmVhazsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2Nzcy9TZWxlY3RvckNoZWNrZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TZWxlY3RvckNoZWNr
ZXIuaAppbmRleCA3NjBiYTUyLi41MzEyZDNlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9j
c3MvU2VsZWN0b3JDaGVja2VyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL1NlbGVjdG9yQ2hl
Y2tlci5oCkBAIC01MSwxMCArNTEsMTEgQEAgcHVibGljOgogCiAgICAgZW51bSBTZWxlY3Rvck1h
dGNoIHsgU2VsZWN0b3JNYXRjaGVzLCBTZWxlY3RvckZhaWxzTG9jYWxseSwgU2VsZWN0b3JGYWls
c0NvbXBsZXRlbHkgfTsKICAgICBlbnVtIFZpc2l0ZWRNYXRjaFR5cGUgeyBWaXNpdGVkTWF0Y2hE
aXNhYmxlZCwgVmlzaXRlZE1hdGNoRW5hYmxlZCB9OwotICAgIGJvb2wgY2hlY2tTZWxlY3RvcihD
U1NTZWxlY3RvciosIEVsZW1lbnQqLCBib29sIGlzRmFzdENoZWNrYWJsZVNlbGVjdG9yID0gZmFs
c2UpIGNvbnN0OwotICAgIFNlbGVjdG9yTWF0Y2ggY2hlY2tTZWxlY3RvcihDU1NTZWxlY3Rvcios
IEVsZW1lbnQqLCBQc2V1ZG9JZCYgZHluYW1pY1BzZXVkbywgYm9vbCBpc1N1YlNlbGVjdG9yLCBW
aXNpdGVkTWF0Y2hUeXBlLCBSZW5kZXJTdHlsZSogPSAwLCBSZW5kZXJTdHlsZSogZWxlbWVudFBh
cmVudFN0eWxlID0gMCkgY29uc3Q7CisKKyAgICBib29sIGNoZWNrU2VsZWN0b3IoQ1NTU2VsZWN0
b3IqLCBFbGVtZW50KiwgY29uc3QgRWxlbWVudCogc2NvcGUsIGJvb2wgaXNGYXN0Q2hlY2thYmxl
U2VsZWN0b3IgPSBmYWxzZSkgY29uc3Q7CisgICAgU2VsZWN0b3JNYXRjaCBjaGVja1NlbGVjdG9y
KENTU1NlbGVjdG9yKiwgRWxlbWVudCosIGNvbnN0IEVsZW1lbnQqIHNjb3BlLCBQc2V1ZG9JZCYg
ZHluYW1pY1BzZXVkbywgYm9vbCBpc1N1YlNlbGVjdG9yLCBWaXNpdGVkTWF0Y2hUeXBlLCBSZW5k
ZXJTdHlsZSogPSAwLCBSZW5kZXJTdHlsZSogZWxlbWVudFBhcmVudFN0eWxlID0gMCkgY29uc3Q7
CiAgICAgc3RhdGljIGJvb2wgaXNGYXN0Q2hlY2thYmxlU2VsZWN0b3IoY29uc3QgQ1NTU2VsZWN0
b3IqKTsKLSAgICBib29sIGZhc3RDaGVja1NlbGVjdG9yKGNvbnN0IENTU1NlbGVjdG9yKiwgY29u
c3QgRWxlbWVudCopIGNvbnN0OworICAgIGJvb2wgZmFzdENoZWNrU2VsZWN0b3IoY29uc3QgQ1NT
U2VsZWN0b3IqLCBjb25zdCBFbGVtZW50KiwgY29uc3QgRWxlbWVudCogc2NvcGUpIGNvbnN0Owog
CiAgICAgdGVtcGxhdGUgPHVuc2lnbmVkIG1heGltdW1JZGVudGlmaWVyQ291bnQ+CiAgICAgaW5s
aW5lIGJvb2wgZmFzdFJlamVjdFNlbGVjdG9yKGNvbnN0IHVuc2lnbmVkKiBpZGVudGlmaWVySGFz
aGVzKSBjb25zdDsKQEAgLTYyLDcgKzYzLDcgQEAgcHVibGljOgogCiAgICAgdm9pZCBwdXNoUGFy
ZW50KEVsZW1lbnQqIHBhcmVudCk7CiAgICAgdm9pZCBwb3BQYXJlbnQoRWxlbWVudCogcGFyZW50
KTsKLSAgICBib29sIHBhcmVudFN0YWNrSXNDb25zaXN0ZW50KENvbnRhaW5lck5vZGUqIHBhcmVu
dE5vZGUpIGNvbnN0IHsgcmV0dXJuICFtX3BhcmVudFN0YWNrLmlzRW1wdHkoKSAmJiBtX3BhcmVu
dFN0YWNrLmxhc3QoKS5lbGVtZW50ID09IHBhcmVudE5vZGU7IH0KKyAgICBib29sIHBhcmVudFN0
YWNrSXNDb25zaXN0ZW50KGNvbnN0IENvbnRhaW5lck5vZGUqIHBhcmVudE5vZGUpIGNvbnN0IHsg
cmV0dXJuICFtX3BhcmVudFN0YWNrLmlzRW1wdHkoKSAmJiBtX3BhcmVudFN0YWNrLmxhc3QoKS5l
bGVtZW50ID09IHBhcmVudE5vZGU7IH0KIAogICAgIEVJbnNpZGVMaW5rIGRldGVybWluZUxpbmtT
dGF0ZShFbGVtZW50KikgY29uc3Q7CiAgICAgdm9pZCBhbGxWaXNpdGVkU3RhdGVDaGFuZ2VkKCk7
CkBAIC05MCw4ICs5MSwxMyBAQCBwdWJsaWM6CiAgICAgZW51bSBMaW5rTWF0Y2hNYXNrIHsgTWF0
Y2hMaW5rID0gMSwgTWF0Y2hWaXNpdGVkID0gMiwgTWF0Y2hBbGwgPSBNYXRjaExpbmsgfCBNYXRj
aFZpc2l0ZWQgfTsKICAgICBzdGF0aWMgdW5zaWduZWQgZGV0ZXJtaW5lTGlua01hdGNoVHlwZShj
b25zdCBDU1NTZWxlY3RvciopOwogCisgICAgLy8gVGhlIGZvbGxvd2luZyBtZXRob2RzIHdvcmsg
b25seSB3aXRoIGEgY29uc2lzdGVudCBQYXJlbnRTdGFja0ZyYW1lIHZlY3RvcgorICAgIEVsZW1l
bnQqIGdldEVsZW1lbnRXaXRoSW5kZXgoaW50IGluZGV4KSBjb25zdDsgLy8gSW5kZXggZWxlbWVu
dHMsIHdpdGggdGhlIHJvb3QgZWxlbWVudCBzdGFydGluZyBhdCAwLgorICAgIGludCBnZXRJbm5l
cm1vc3RTdHlsZVNjb3BlRWxlbWVudEluZGV4KCkgY29uc3Q7IC8vIFJldHVybiB0aGUgaW5kZXgg
b2YgdGhlIGVsZW1lbnQgdGhhdCBjb250YWlucyB0aGUgY2xvc2VzdCA8c3R5bGUgc2NvcGVkPgor
ICAgIGludCBnZXRFbmNsb3NpbmdTdHlsZVNjb3BlRWxlbWVudEluZGV4KGludCBpbmRleCk7IC8v
IFJldHVybiB0aGUgaW5kZXggb2YgdGhlIGNsb3Nlc3QgYW5jZXN0b3IgKCEpIGVsZW1lbnQgdGhh
dCBjb250YWlucyA8c3R5bGUgc2NvcGVkPiwgc3RhcnRpbmcgZnJvbSB0aGUgZ2l2ZW4gaW5kZXgK
KwogcHJpdmF0ZToKLSAgICBib29sIGNoZWNrT25lU2VsZWN0b3IoQ1NTU2VsZWN0b3IqLCBFbGVt
ZW50KiwgUHNldWRvSWQmIGR5bmFtaWNQc2V1ZG8sIGJvb2wgaXNTdWJTZWxlY3RvciwgVmlzaXRl
ZE1hdGNoVHlwZSwgUmVuZGVyU3R5bGUqLCBSZW5kZXJTdHlsZSogZWxlbWVudFBhcmVudFN0eWxl
KSBjb25zdDsKKyAgICBib29sIGNoZWNrT25lU2VsZWN0b3IoQ1NTU2VsZWN0b3IqLCBFbGVtZW50
KiwgY29uc3QgRWxlbWVudCogc2NvcGUsIFBzZXVkb0lkJiBkeW5hbWljUHNldWRvLCBib29sIGlz
U3ViU2VsZWN0b3IsIFZpc2l0ZWRNYXRjaFR5cGUsIFJlbmRlclN0eWxlKiwgUmVuZGVyU3R5bGUq
IGVsZW1lbnRQYXJlbnRTdHlsZSkgY29uc3Q7CiAgICAgYm9vbCBjaGVja1Njcm9sbGJhclBzZXVk
b0NsYXNzKENTU1NlbGVjdG9yKiwgUHNldWRvSWQmIGR5bmFtaWNQc2V1ZG8pIGNvbnN0OwogICAg
IHN0YXRpYyBib29sIGlzRnJhbWVGb2N1c2VkKGNvbnN0IEVsZW1lbnQqKTsKIApAQCAtMTEyLDkg
KzExOCw5IEBAIHByaXZhdGU6CiAgICAgbXV0YWJsZSBIYXNoU2V0PExpbmtIYXNoLCBMaW5rSGFz
aEhhc2g+IG1fbGlua3NDaGVja2VkRm9yVmlzaXRlZFN0YXRlOwogCiAgICAgc3RydWN0IFBhcmVu
dFN0YWNrRnJhbWUgewotICAgICAgICBQYXJlbnRTdGFja0ZyYW1lKCkgeyB9Ci0gICAgICAgIFBh
cmVudFN0YWNrRnJhbWUoRWxlbWVudCogZWxlbWVudCkgOiBlbGVtZW50KGVsZW1lbnQpIHsgfQot
ICAgICAgICBFbGVtZW50KiBlbGVtZW50OworICAgICAgICBQYXJlbnRTdGFja0ZyYW1lKEVsZW1l
bnQqIGVsZW1lbnQsIHNpemVfdCBzdHlsZVNjb3BlRnJhbWVJbmRleCkgOiBlbGVtZW50KGVsZW1l
bnQpLCBjbG9zZXN0U3R5bGVTY29wZUZyYW1lSW5kZXgoc3R5bGVTY29wZUZyYW1lSW5kZXgpIHsg
fQorICAgICAgICBFbGVtZW50KiBjb25zdCBlbGVtZW50OworICAgICAgICBjb25zdCBpbnQgY2xv
c2VzdFN0eWxlU2NvcGVGcmFtZUluZGV4OyAvLyBpbmRleCBvZiBjbG9zZXN0IFBhcmVudFN0YWNr
RnJhbWUgdGhhdCBwb2ludHMgdG8gYW4gZWxlbWVudCB0aGF0IGlzIGEgc3R5bGUgc2NvcGUgKG1h
eSBiZSB0aGlzKSwgb3IgLTEKICAgICAgICAgVmVjdG9yPHVuc2lnbmVkLCA0PiBpZGVudGlmaWVy
SGFzaGVzOwogICAgIH07CiAgICAgVmVjdG9yPFBhcmVudFN0YWNrRnJhbWU+IG1fcGFyZW50U3Rh
Y2s7CkBAIC0yMDAsNiArMjA2LDI0IEBAIGlubGluZSBib29sIFNlbGVjdG9yQ2hlY2tlcjo6ZmFz
dENoZWNrUmlnaHRtb3N0QXR0cmlidXRlU2VsZWN0b3IoY29uc3QgRWxlbWVudCoKICAgICByZXR1
cm4gdHJ1ZTsKIH0KIAoraW5saW5lIEVsZW1lbnQqIFNlbGVjdG9yQ2hlY2tlcjo6Z2V0RWxlbWVu
dFdpdGhJbmRleChpbnQgaW5kZXgpIGNvbnN0Cit7CisgICAgQVNTRVJUKGluZGV4ID49IDApOwor
ICAgIHJldHVybiBtX3BhcmVudFN0YWNrLmF0KGluZGV4KS5lbGVtZW50OworfQorCitpbmxpbmUg
aW50IFNlbGVjdG9yQ2hlY2tlcjo6Z2V0SW5uZXJtb3N0U3R5bGVTY29wZUVsZW1lbnRJbmRleCgp
IGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcGFyZW50U3RhY2suaXNFbXB0eSgpID8gLTEgOiBtX3Bh
cmVudFN0YWNrLmxhc3QoKS5jbG9zZXN0U3R5bGVTY29wZUZyYW1lSW5kZXg7Cit9CisKK2lubGlu
ZSBpbnQgU2VsZWN0b3JDaGVja2VyOjpnZXRFbmNsb3NpbmdTdHlsZVNjb3BlRWxlbWVudEluZGV4
KGludCBpbmRleCkKK3sKKyAgICBBU1NFUlQoc3RhdGljX2Nhc3Q8aW50PihtX3BhcmVudFN0YWNr
LnNpemUoKSkgPj0gaW5kZXgpOworICAgIHJldHVybiBpbmRleCA+IDAgPyBtX3BhcmVudFN0YWNr
LmF0KGluZGV4IC0gMSkuY2xvc2VzdFN0eWxlU2NvcGVGcmFtZUluZGV4IDogLTE7Cit9CisKKwog
fQogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmNwcAppbmRleCBjNGVjZjEyLi4xMzI4YjI3IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvZG9tL0VsZW1lbnQuY3BwCkBAIC0xOTEyLDcgKzE5MTIsNyBAQCBib29sIEVsZW1lbnQ6
OndlYmtpdE1hdGNoZXNTZWxlY3Rvcihjb25zdCBTdHJpbmcmIHNlbGVjdG9yLCBFeGNlcHRpb25D
b2RlJiBlYykKIAogICAgIFNlbGVjdG9yQ2hlY2tlciBzZWxlY3RvckNoZWNrZXIoZG9jdW1lbnQo
KSwgc3RyaWN0UGFyc2luZyk7CiAgICAgZm9yIChDU1NTZWxlY3Rvciogc2VsZWN0b3IgPSBzZWxl
Y3Rvckxpc3QuZmlyc3QoKTsgc2VsZWN0b3I7IHNlbGVjdG9yID0gQ1NTU2VsZWN0b3JMaXN0Ojpu
ZXh0KHNlbGVjdG9yKSkgewotICAgICAgICBpZiAoc2VsZWN0b3JDaGVja2VyLmNoZWNrU2VsZWN0
b3Ioc2VsZWN0b3IsIHRoaXMpKQorICAgICAgICBpZiAoc2VsZWN0b3JDaGVja2VyLmNoZWNrU2Vs
ZWN0b3Ioc2VsZWN0b3IsIHRoaXMsIDApKQogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAg
fQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vU2VsZWN0b3JRdWVyeS5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9kb20vU2VsZWN0b3JRdWVyeS5jcHAKaW5kZXggNWRmZjAzYy4uNzVlMmU1
ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL1NlbGVjdG9yUXVlcnkuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2RvbS9TZWxlY3RvclF1ZXJ5LmNwcApAQCAtNDEsMTcgKzQxLDE3IEBA
IFNlbGVjdG9yUXVlcnk6OlNlbGVjdG9yUXVlcnkoTm9kZSogcm9vdE5vZGUsIGNvbnN0IENTU1Nl
bGVjdG9yTGlzdCYgc2VsZWN0b3JMaXN0CiAgICAgICAgIG1fc2VsZWN0b3JzLmFwcGVuZChTZWxl
Y3RvckRhdGEoc2VsZWN0b3IsIFNlbGVjdG9yQ2hlY2tlcjo6aXNGYXN0Q2hlY2thYmxlU2VsZWN0
b3Ioc2VsZWN0b3IpKSk7CiB9CiAgICAgCi1QYXNzUmVmUHRyPE5vZGVMaXN0PiBTZWxlY3RvclF1
ZXJ5OjpxdWVyeUFsbCgpIGNvbnN0CitQYXNzUmVmUHRyPE5vZGVMaXN0PiBTZWxlY3RvclF1ZXJ5
OjpxdWVyeUFsbChjb25zdCBFbGVtZW50KiBzY29wZSkgY29uc3QKIHsKICAgICBWZWN0b3I8UmVm
UHRyPE5vZGU+ID4gcmVzdWx0OwotICAgIGV4ZWN1dGU8ZmFsc2U+KHJlc3VsdCk7CisgICAgZXhl
Y3V0ZTxmYWxzZT4oc2NvcGUsIHJlc3VsdCk7CiAgICAgcmV0dXJuIFN0YXRpY05vZGVMaXN0Ojph
ZG9wdChyZXN1bHQpOwogfQogCi1QYXNzUmVmUHRyPEVsZW1lbnQ+IFNlbGVjdG9yUXVlcnk6OnF1
ZXJ5Rmlyc3QoKSBjb25zdCAKK1Bhc3NSZWZQdHI8RWxlbWVudD4gU2VsZWN0b3JRdWVyeTo6cXVl
cnlGaXJzdChjb25zdCBFbGVtZW50KiBzY29wZSkgY29uc3QgCiB7IAogICAgIFZlY3RvcjxSZWZQ
dHI8Tm9kZT4gPiByZXN1bHQ7Ci0gICAgZXhlY3V0ZTx0cnVlPihyZXN1bHQpOworICAgIGV4ZWN1
dGU8dHJ1ZT4oc2NvcGUsIHJlc3VsdCk7CiAgICAgaWYgKHJlc3VsdC5pc0VtcHR5KCkpCiAgICAg
ICAgIHJldHVybiAwOwogICAgIEFTU0VSVChyZXN1bHQuc2l6ZSgpID09IDEpOwpAQCAtNzcsNyAr
NzcsNyBAQCBib29sIFNlbGVjdG9yUXVlcnk6OmNhblVzZUlkTG9va3VwKCkgY29uc3QKIH0KIAog
dGVtcGxhdGUgPGJvb2wgZmlyc3RNYXRjaE9ubHk+Ci12b2lkIFNlbGVjdG9yUXVlcnk6OmV4ZWN1
dGUoVmVjdG9yPFJlZlB0cjxOb2RlPiA+JiBtYXRjaGVkRWxlbWVudHMpIGNvbnN0Cit2b2lkIFNl
bGVjdG9yUXVlcnk6OmV4ZWN1dGUoY29uc3QgRWxlbWVudCogc2NvcGUsIFZlY3RvcjxSZWZQdHI8
Tm9kZT4gPiYgbWF0Y2hlZEVsZW1lbnRzKSBjb25zdAogewogICAgIGlmIChjYW5Vc2VJZExvb2t1
cCgpKSB7CiAgICAgICAgIEFTU0VSVChtX3NlbGVjdG9ycy5zaXplKCkgPT0gMSk7CkBAIC04NSw3
ICs4NSw3IEBAIHZvaWQgU2VsZWN0b3JRdWVyeTo6ZXhlY3V0ZShWZWN0b3I8UmVmUHRyPE5vZGU+
ID4mIG1hdGNoZWRFbGVtZW50cykgY29uc3QKICAgICAgICAgRWxlbWVudCogZWxlbWVudCA9IG1f
cm9vdE5vZGUtPmRvY3VtZW50KCktPmdldEVsZW1lbnRCeUlkKHNlbGVjdG9yLT52YWx1ZSgpKTsK
ICAgICAgICAgaWYgKCFlbGVtZW50IHx8ICEobV9yb290Tm9kZS0+aXNEb2N1bWVudE5vZGUoKSB8
fCBlbGVtZW50LT5pc0Rlc2NlbmRhbnRPZihtX3Jvb3ROb2RlKSkpCiAgICAgICAgICAgICByZXR1
cm47Ci0gICAgICAgIGlmIChtX3NlbGVjdG9yQ2hlY2tlci5jaGVja1NlbGVjdG9yKHNlbGVjdG9y
LCBlbGVtZW50LCBtX3NlbGVjdG9yc1swXS5pc0Zhc3RDaGVja2FibGUpKQorICAgICAgICBpZiAo
bV9zZWxlY3RvckNoZWNrZXIuY2hlY2tTZWxlY3RvcihzZWxlY3RvciwgZWxlbWVudCwgc2NvcGUs
IG1fc2VsZWN0b3JzWzBdLmlzRmFzdENoZWNrYWJsZSkpCiAgICAgICAgICAgICBtYXRjaGVkRWxl
bWVudHMuYXBwZW5kKGVsZW1lbnQpOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtOTcsNyAr
OTcsNyBAQCB2b2lkIFNlbGVjdG9yUXVlcnk6OmV4ZWN1dGUoVmVjdG9yPFJlZlB0cjxOb2RlPiA+
JiBtYXRjaGVkRWxlbWVudHMpIGNvbnN0CiAgICAgICAgIGlmIChuLT5pc0VsZW1lbnROb2RlKCkp
IHsKICAgICAgICAgICAgIEVsZW1lbnQqIGVsZW1lbnQgPSBzdGF0aWNfY2FzdDxFbGVtZW50Kj4o
bik7CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2VsZWN0b3JDb3VudDsg
KytpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKG1fc2VsZWN0b3JDaGVja2VyLmNoZWNrU2VsZWN0
b3IobV9zZWxlY3RvcnNbaV0uc2VsZWN0b3IsIGVsZW1lbnQsIG1fc2VsZWN0b3JzW2ldLmlzRmFz
dENoZWNrYWJsZSkpIHsKKyAgICAgICAgICAgICAgICBpZiAobV9zZWxlY3RvckNoZWNrZXIuY2hl
Y2tTZWxlY3RvcihtX3NlbGVjdG9yc1tpXS5zZWxlY3RvciwgZWxlbWVudCwgc2NvcGUsIG1fc2Vs
ZWN0b3JzW2ldLmlzRmFzdENoZWNrYWJsZSkpIHsKICAgICAgICAgICAgICAgICAgICAgbWF0Y2hl
ZEVsZW1lbnRzLmFwcGVuZChlbGVtZW50KTsKICAgICAgICAgICAgICAgICAgICAgaWYgKGZpcnN0
TWF0Y2hPbmx5KQogICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvZG9tL1NlbGVjdG9yUXVlcnkuaCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9T
ZWxlY3RvclF1ZXJ5LmgKaW5kZXggYjk2OTgyMy4uMjA4M2FjNyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvZG9tL1NlbGVjdG9yUXVlcnkuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vU2Vs
ZWN0b3JRdWVyeS5oCkBAIC00MiwxNCArNDIsMTQgQEAgY2xhc3MgU2VsZWN0b3JRdWVyeSB7CiBw
dWJsaWM6CiAgICAgU2VsZWN0b3JRdWVyeShOb2RlKiByb290Tm9kZSwgY29uc3QgQ1NTU2VsZWN0
b3JMaXN0Jik7CiAgICAgCi0gICAgUGFzc1JlZlB0cjxOb2RlTGlzdD4gcXVlcnlBbGwoKSBjb25z
dDsKLSAgICBQYXNzUmVmUHRyPEVsZW1lbnQ+IHF1ZXJ5Rmlyc3QoKSBjb25zdDsKKyAgICBQYXNz
UmVmUHRyPE5vZGVMaXN0PiBxdWVyeUFsbChjb25zdCBFbGVtZW50KiBzY29wZSA9IDApIGNvbnN0
OworICAgIFBhc3NSZWZQdHI8RWxlbWVudD4gcXVlcnlGaXJzdChjb25zdCBFbGVtZW50KiBzY29w
ZSA9IDApIGNvbnN0OwogCiBwcml2YXRlOgogICAgIGJvb2wgY2FuVXNlSWRMb29rdXAoKSBjb25z
dDsKIAogICAgIHRlbXBsYXRlIDxib29sIGZpcnN0TWF0Y2hPbmx5PgotICAgIHZvaWQgZXhlY3V0
ZShWZWN0b3I8UmVmUHRyPE5vZGU+ID4mKSBjb25zdDsKKyAgICB2b2lkIGV4ZWN1dGUoY29uc3Qg
RWxlbWVudCogc2NvcGUsIFZlY3RvcjxSZWZQdHI8Tm9kZT4gPiYpIGNvbnN0OwogICAgIAogICAg
IHN0cnVjdCBTZWxlY3RvckRhdGEgewogICAgICAgICBTZWxlY3RvckRhdGEoQ1NTU2VsZWN0b3Iq
IHNlbGVjdG9yLCBib29sIGlzRmFzdENoZWNrYWJsZSkgOiBzZWxlY3RvcihzZWxlY3RvciksIGlz
RmFzdENoZWNrYWJsZShpc0Zhc3RDaGVja2FibGUpIHsgfQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>116174</attachid>
            <date>2011-11-21 20:56:20 -0800</date>
            <delta_ts>2011-11-26 03:03:19 -0800</delta_ts>
            <desc>patch, shrunk</desc>
            <filename>bug-67720-20111122135618.patch</filename>
            <type>text/plain</type>
            <size>70990</size>
            <attacher name="Roland Steiner">rolandsteiner</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTAwOTcwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggY2E0Mzk1MDMwN2IyMDIy
NWVkNTFmYjlmN2QzMTlkOTQ5YmRjZGEwZC4uNzFmMjY4MTcyMDZlNDNlMjI2MDkyODhhZTZiMDE3
YWEwYWJiN2JkNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDY3IEBACisyMDExLTExLTIxICBSb2xh
bmQgU3RlaW5lciAgPHJvbGFuZHN0ZWluZXJAY2hyb21pdW0ub3JnPgorCisgICAgICAgIEJ1ZyA2
NzcyMCAtIDxzdHlsZSBzY29wZWQ+OiBJbXBsZW1lbnQgc2VsZWN0b3IgbWF0Y2hpbmcKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY3NzIwCisKKyAgICAg
ICAgSW1wbGVtZW50aW5nIHN1cHBvcnQgZm9yIDxzdHlsZSBzY29wZWQ+OgorICAgICAgICBTdG9y
ZSBzY29wZWQgc3R5bGUgc2hlZXRzIGluIGEgc2VwYXJhdGUgZGF0YSBzdHJ1Y3R1cmUgU2NvcGVk
UnVsZVNldHMuCisgICAgICAgIEFkZCBhICdzY29wZScgcGFyYW1ldGVyIHRvIHNlbGVjdG9yIG1h
dGNoaW5nIGZ1bmN0aW9ucyB0aGF0IGRldGVybWluZXMgdGhlIHNjb3BlIHRvIGFwcGx5IChpZiBh
bnkpLgorICAgICAgICBFeHRlbmQgUGFyZW50U3RhY2tGcmFtZSB0byBpbmNsdWRlIGluZm9ybWF0
aW9uIGFib3V0IHRoZSBjbG9zZXN0IHNjb3BpbmcgZWxlbWVudCAoaWYgYW55KS4gVGhpcyBpcwor
ICAgICAgICB1c2VkIGZvciBPKDEpIGFjY2VzcyB0byBhbGwgcmVsZXZhbnQgc3R5bGUgc2hlZXRz
IGZvciBhIGdpdmVuIGVsZW1lbnQuCisgICAgICAgIEZpbmFsbHksIHByZXZlbnQgc3R5bGUgc2hh
cmluZyBmcm9tIGNyb3NzaW5nIGludG8vb3V0IG9mIHNjb3BlZCBzdHlsZSBib3VuZGFyaWVzLgor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRlc3RzOiBm
YXN0L2Nzcy9zdHlsZS1zY29wZWQvc3R5bGUtc2NvcGVkLWF0dGFjaC5odG1sCisgICAgICAgICAg
ICAgICBmYXN0L2Nzcy9zdHlsZS1zY29wZWQvc3R5bGUtc2NvcGVkLWJhc2ljLmh0bWwKKyAgICAg
ICAgICAgICAgIGZhc3QvY3NzL3N0eWxlLXNjb3BlZC9zdHlsZS1zY29wZWQtZGV0YWNoLmh0bWwK
KyAgICAgICAgICAgICAgIGZhc3QvY3NzL3N0eWxlLXNjb3BlZC9zdHlsZS1zY29wZWQtcmVtb3Zl
LXNjb3BlZC5odG1sCisgICAgICAgICAgICAgICBmYXN0L2Nzcy9zdHlsZS1zY29wZWQvc3R5bGUt
c2NvcGVkLXNldC1zY29wZWQuaHRtbAorCisgICAgICAgICogY3NzL0NTU1N0eWxlU2VsZWN0b3Iu
Y3BwOiBhZGQgc3VwcG9ydCBmb3Igc2NvcGVkIGF1dGhvciBzaGVldHMKKyAgICAgICAgKFdlYkNv
cmU6OlNjb3BlZFJ1bGVTZXRzOjpTY29wZWRSdWxlU2V0cyk6IGNsYXNzIGZvciBzY29wZWQgYXV0
aG9yIHNoZWV0cworICAgICAgICAoV2ViQ29yZTo6U2NvcGVkUnVsZVNldHM6OmdldCk6CisgICAg
ICAgIChXZWJDb3JlOjpkZXRlcm1pbmVTY29wZSk6IGRldGVybWluZSB3aGV0aGVyIGFuIGF1dGhv
ciBzaGVldCBpcyBzY29wZWQgKGFuZCB0byB3aGljaCBzY29wZSksIG9yIGdsb2JhbAorICAgICAg
ICAoV2ViQ29yZTo6Q1NTU3R5bGVTZWxlY3Rvcjo6Q1NTU3R5bGVTZWxlY3Rvcik6CisgICAgICAg
IChXZWJDb3JlOjpDU1NTdHlsZVNlbGVjdG9yOjpzb3J0QW5kVHJhbnNmZXJNYXRjaGVkUnVsZXMp
OiBoZWxwZXIgZnVuY3Rpb24KKyAgICAgICAgKFdlYkNvcmU6OkNTU1N0eWxlU2VsZWN0b3I6Om1h
dGNoQWxsUnVsZXMpOiBjaGFuZ2VkIGNhbGwgdG8gbWF0Y2hBdXRob3JSdWxlcworICAgICAgICAo
V2ViQ29yZTo6Q1NTU3R5bGVTZWxlY3Rvcjo6bWF0Y2hBdXRob3JSdWxlcyk6IG1hdGNoIHNjb3Bl
ZCBhdXRob3IgcnVsZXMKKyAgICAgICAgKFdlYkNvcmU6OkNTU1N0eWxlU2VsZWN0b3I6Om1hdGNo
UnVsZXMpOiBhZGQgJ3Njb3BlJyBwYXJhbWV0ZXIKKyAgICAgICAgKFdlYkNvcmU6OkNTU1N0eWxl
U2VsZWN0b3I6Om1hdGNoUnVsZVNldCk6IGRpdHRvCisgICAgICAgIChXZWJDb3JlOjpDU1NTdHls
ZVNlbGVjdG9yOjptYXRjaFJ1bGVzRm9yTGlzdCk6IGRpdHRvCisgICAgICAgIChXZWJDb3JlOjpt
YXRjaGVzSW5UcmVlU2NvcGUpOiBkaXR0bworICAgICAgICAoV2ViQ29yZTo6Q1NTU3R5bGVTZWxl
Y3Rvcjo6bG9jYXRlQ291c2luTGlzdCk6IHByZXZlbnQgc3R5bGUgc2hhcmluZyBhY3Jvc3Mgc2Nv
cGUgYm91bmRhcmllcworICAgICAgICAoV2ViQ29yZTo6Q1NTU3R5bGVTZWxlY3Rvcjo6Y2FuU2hh
cmVTdHlsZVdpdGhFbGVtZW50KTogZGl0dG8KKyAgICAgICAgKFdlYkNvcmU6OkNTU1N0eWxlU2Vs
ZWN0b3I6OmxvY2F0ZVNoYXJlZFN0eWxlKTogZGl0dG8KKyAgICAgICAgKFdlYkNvcmU6OkNTU1N0
eWxlU2VsZWN0b3I6OnBzZXVkb1N0eWxlRm9yRWxlbWVudCk6IGNoYW5nZWQgY2FsbCB0byBtYXRj
aEF1dGhvclJ1bGVzCisgICAgICAgIChXZWJDb3JlOjpDU1NTdHlsZVNlbGVjdG9yOjpzdHlsZUZv
clBhZ2UpOiBjb21tZW50CisgICAgICAgIChXZWJDb3JlOjpDU1NTdHlsZVNlbGVjdG9yOjpjaGVj
a1JlZ2lvblN0eWxlKTogYWRkIGdsb2JhbCBzY29wZSBwYXJhbWV0ZXIKKyAgICAgICAgKFdlYkNv
cmU6OkNTU1N0eWxlU2VsZWN0b3I6OnBzZXVkb1N0eWxlUnVsZXNGb3JFbGVtZW50KTogY2hhbmdl
ZCBjYWxsIHRvIG1hdGNoQXV0aG9yUnVsZXMKKyAgICAgICAgKFdlYkNvcmU6OkNTU1N0eWxlU2Vs
ZWN0b3I6OmNoZWNrU2VsZWN0b3IpOiBhZGQgJ3Njb3BlJyBwYXJhbWV0ZXIKKyAgICAgICAgKFdl
YkNvcmU6OlJ1bGVTZXQ6OmFkZFJ1bGVzRnJvbVNoZWV0KTogYWRkIGNvbW1lbnRzIGZvciBAZm9u
dC1mYWNlIGFuZCBAa2V5ZnJhbWVzCisgICAgICAgIChXZWJDb3JlOjpTY29wZWRSdWxlU2V0czo6
flNjb3BlZFJ1bGVTZXRzKTogZGF0YSBzdHJ1Y3R1cmUgdG8gbWFwIHNjb3BlIC0+IFJ1bGVTZXQg
CisgICAgICAgIChXZWJDb3JlOjpTY29wZWRSdWxlU2V0czo6ZW5zdXJlRXhpc3RzKToKKyAgICAg
ICAgKFdlYkNvcmU6OlNjb3BlZFJ1bGVTZXRzOjpjb2xsZWN0RmVhdHVyZXMpOgorICAgICAgICAq
IGNzcy9DU1NTdHlsZVNlbGVjdG9yLmg6CisgICAgICAgICogY3NzL1NlbGVjdG9yQ2hlY2tlci5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpTZWxlY3RvckNoZWNrZXI6OnB1c2hQYXJlbnRTdGFja0Zy
YW1lKTogZXh0ZW5kIFBhcmVudFN0YWNrRnJhbWUgd2l0aCBzY29wZSBpbmZvCisgICAgICAgIChX
ZWJDb3JlOjpTZWxlY3RvckNoZWNrZXI6OnB1c2hQYXJlbnQpOiBhdm9pZCBkZWZhdWx0IGNvbnN0
cnVjdG9yCisgICAgICAgIChXZWJDb3JlOjpTZWxlY3RvckNoZWNrZXI6OmNoZWNrU2VsZWN0b3Ip
OiBhZGQgJ3Njb3BlJyBwYXJhbWV0ZXIKKyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdG9yQ2hlY2tl
cjo6ZmFzdENoZWNrU2VsZWN0b3IpOiBkaXR0bworICAgICAgICAoV2ViQ29yZTo6U2VsZWN0b3JD
aGVja2VyOjpjaGVja09uZVNlbGVjdG9yKTogZGl0dG8KKyAgICAgICAgKiBjc3MvU2VsZWN0b3JD
aGVja2VyLmg6CisgICAgICAgIChXZWJDb3JlOjpTZWxlY3RvckNoZWNrZXI6OlBhcmVudFN0YWNr
RnJhbWU6OlBhcmVudFN0YWNrRnJhbWUpOiBleHRlbmQgUGFyZW50U3RhY2tGcmFtZSB3aXRoIHNj
b3BlIGluZm8KKyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdG9yQ2hlY2tlcjo6Z2V0RWxlbWVudFdp
dGhJbmRleCk6IGFjY2VzcyBtZXRob2RzIGZvciBQYXJlbnRTdGFja0ZyYW1lCisgICAgICAgIChX
ZWJDb3JlOjpTZWxlY3RvckNoZWNrZXI6OmdldElubmVybW9zdFN0eWxlU2NvcGVFbGVtZW50SW5k
ZXgpOiBkaXR0bworICAgICAgICAoV2ViQ29yZTo6U2VsZWN0b3JDaGVja2VyOjpnZXRFbmNsb3Np
bmdTdHlsZVNjb3BlRWxlbWVudEluZGV4KTogZGl0dG8KKyAgICAgICAgKiBkb20vRWxlbWVudC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50Ojp3ZWJraXRNYXRjaGVzU2VsZWN0b3IpOiBh
ZGQgZ2xvYmFsIHNjb3BlIHBhcmFtZXRlcgorICAgICAgICAqIGRvbS9TZWxlY3RvclF1ZXJ5LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdG9yUXVlcnk6OnF1ZXJ5QWxsKTogZGl0dG8KKyAg
ICAgICAgKFdlYkNvcmU6OlNlbGVjdG9yUXVlcnk6OnF1ZXJ5Rmlyc3QpOiBkaXR0bworICAgICAg
ICAoV2ViQ29yZTo6U2VsZWN0b3JRdWVyeTo6ZXhlY3V0ZSk6IGRpdHRvCisgICAgICAgICogZG9t
L1NlbGVjdG9yUXVlcnkuaDoKKwogMjAxMS0xMS0xNiAgUm9sYW5kIFN0ZWluZXIgIDxyb2xhbmRz
dGVpbmVyQGNocm9taXVtLm9yZz4KIAogICAgICAgICA8c3R5bGUgc2NvcGVkPjogSW1wbGVtZW50
IHJlZ2lzdGVyaW5nIG9mIDxzdHlsZSBzY29wZWQ+IHdpdGggdGhlIHNjb3BpbmcgZWxlbWVudApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU1N0eWxlU2VsZWN0b3IuY3BwIGIvU291
cmNlL1dlYkNvcmUvY3NzL0NTU1N0eWxlU2VsZWN0b3IuY3BwCmluZGV4IDhlNDllMjMyOWY2NDM4
MzVhMTM0ZDRlYmYzYzlmZWJiOGE4ZGU5OTIuLmUxZmUwNTJhYTZjMmE5OWM2OTUwZGMyOGVhNzIz
YTM4NjI5NGNmZDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTdHlsZVNlbGVj
dG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU3R5bGVTZWxlY3Rvci5jcHAKQEAg
LTY5LDYgKzY5LDcgQEAKICNpbmNsdWRlICJIVE1MSW5wdXRFbGVtZW50LmgiCiAjaW5jbHVkZSAi
SFRNTE5hbWVzLmgiCiAjaW5jbHVkZSAiSFRNTFByb2dyZXNzRWxlbWVudC5oIgorI2luY2x1ZGUg
IkhUTUxTdHlsZUVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MVGV4dEFyZWFFbGVtZW50LmgiCiAj
aW5jbHVkZSAiS2V5ZnJhbWVMaXN0LmgiCiAjaW5jbHVkZSAiTGlua0hhc2guaCIKQEAgLTIzNCw3
ICsyMzUsNyBAQCBwdWJsaWM6CiAKICAgICB0eXBlZGVmIEhhc2hNYXA8QXRvbWljU3RyaW5nSW1w
bCosIFZlY3RvcjxSdWxlRGF0YT4qPiBBdG9tUnVsZU1hcDsKIAotICAgIHZvaWQgYWRkUnVsZXNG
cm9tU2hlZXQoQ1NTU3R5bGVTaGVldCosIGNvbnN0IE1lZGlhUXVlcnlFdmFsdWF0b3ImLCBDU1NT
dHlsZVNlbGVjdG9yKiA9IDApOworICAgIHZvaWQgYWRkUnVsZXNGcm9tU2hlZXQoQ1NTU3R5bGVT
aGVldCosIGNvbnN0IE1lZGlhUXVlcnlFdmFsdWF0b3ImLCBDU1NTdHlsZVNlbGVjdG9yKiA9IDAs
IGNvbnN0IEVsZW1lbnQqID0gMCk7CiAKICAgICB2b2lkIGFkZFN0eWxlUnVsZShDU1NTdHlsZVJ1
bGUqIGl0ZW0pOwogICAgIHZvaWQgYWRkUnVsZShDU1NTdHlsZVJ1bGUqIHJ1bGUsIENTU1NlbGVj
dG9yKiBzZWwpOwpAQCAtMjY4LDYgKzI2OSwyMyBAQCBwdWJsaWM6CiAgICAgYm9vbCBtX2F1dG9T
aHJpbmtUb0ZpdEVuYWJsZWQ7CiB9OwogCitjbGFzcyBTY29wZWRSdWxlU2V0cyB7CisgICAgV1RG
X01BS0VfTk9OQ09QWUFCTEUoU2NvcGVkUnVsZVNldHMpOworcHVibGljOgorICAgIFNjb3BlZFJ1
bGVTZXRzKCkgeyB9CisgICAgflNjb3BlZFJ1bGVTZXRzKCk7CisKKyAgICBSdWxlU2V0KiBnZXQo
Y29uc3QgRWxlbWVudCogc2NvcGUpIHsgcmV0dXJuIG1fc2NvcGVkUnVsZVNldE1hcC5nZXQoc2Nv
cGUpOyB9CisgICAgUnVsZVNldCogZW5zdXJlRXhpc3RzKGNvbnN0IEVsZW1lbnQqKTsKKworICAg
IHZvaWQgY29sbGVjdEZlYXR1cmVzKENTU1N0eWxlU2VsZWN0b3I6OkZlYXR1cmVzJikgY29uc3Q7
CisKK3ByaXZhdGU6CisgICAgdHlwZWRlZiBIYXNoTWFwPGNvbnN0IEVsZW1lbnQqLCBSdWxlU2V0
Kj4gU2NvcGVkUnVsZVNldE1hcDsKKworICAgIFNjb3BlZFJ1bGVTZXRNYXAgbV9zY29wZWRSdWxl
U2V0TWFwOworfTsKKwogc3RhdGljIFJ1bGVTZXQqIGRlZmF1bHRTdHlsZTsKIHN0YXRpYyBSdWxl
U2V0KiBkZWZhdWx0UXVpcmtzU3R5bGU7CiBzdGF0aWMgUnVsZVNldCogZGVmYXVsdFByaW50U3R5
bGU7CkBAIC0zNDIsNiArMzYwLDMyIEBAIHN0YXRpYyBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlv
biogcmlnaHRUb0xlZnREZWNsYXJhdGlvbigpCiAgICAgcmV0dXJuIHJpZ2h0VG9MZWZ0RGVjbC5n
ZXQoKTsKIH0KIAorLy8gRGV0ZXJtaW5lIHRoZSBzY29wZSBvZiBhIHN0eWxlIHNoZWV0IChpZiBh
bnkpLiBSZXR1cm5zICdmYWxzZScgaWYgaXQncyBhIHNjb3BlZCBzdHlsZSBzaGVldCBpbiBhbiBp
bnZhbGlkIGxvY2F0aW9uLgorc3RhdGljIGJvb2wgZGV0ZXJtaW5lU2NvcGUoQ1NTU3R5bGVTaGVl
dCogc2hlZXQsIGNvbnN0IEVsZW1lbnQqJiBzY29wZSkKK3sKKyAgICBzY29wZSA9IDA7CisKKyAg
ICBpZiAoIXNoZWV0KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBOb2RlKiBvd25lck5v
ZGUgPSBzaGVldC0+ZmluZFN0eWxlU2hlZXRPd25lck5vZGUoKTsKKyAgICBpZiAoIW93bmVyTm9k
ZSB8fCAhb3duZXJOb2RlLT5pc0hUTUxFbGVtZW50KCkgfHwgIW93bmVyTm9kZS0+aGFzVGFnTmFt
ZShIVE1MTmFtZXM6OnN0eWxlVGFnKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBIVE1M
U3R5bGVFbGVtZW50KiBzdHlsZUVsZW1lbnQgPSBzdGF0aWNfY2FzdDxIVE1MU3R5bGVFbGVtZW50
Kj4ob3duZXJOb2RlKTsKKyAgICBpZiAoIXN0eWxlRWxlbWVudC0+c2NvcGVkKCkpCisgICAgICAg
IHJldHVybiB0cnVlOworCisgICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gc3R5bGVFbGVtZW50LT5k
b2N1bWVudCgpOworICAgIGlmICghZG9jdW1lbnQpCisgICAgICAgIHJldHVybiBmYWxzZTsKKwor
ICAgIHNjb3BlID0gc3R5bGVFbGVtZW50LT5wYXJlbnRFbGVtZW50KCk7CisgICAgQVNTRVJUKHNj
b3BlKTsKKworICAgIHJldHVybiBzY29wZTsgLy8gVGhlcmUgbXVzdCBiZSBhIHNjb3BpbmcgZWxl
bWVudCAtIHJldHVybiAnZmFsc2UnIGlmIGZvciB3aGF0ZXZlciByZWFzb24gdGhpcyBpcyBub3Qg
dGhlIGNhc2UuCit9CisKIENTU1N0eWxlU2VsZWN0b3I6OkNTU1N0eWxlU2VsZWN0b3IoRG9jdW1l
bnQqIGRvY3VtZW50LCBTdHlsZVNoZWV0TGlzdCogc3R5bGVTaGVldHMsIENTU1N0eWxlU2hlZXQq
IG1hcHBlZEVsZW1lbnRTaGVldCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Q1NTU3R5bGVTaGVldCogcGFnZVVzZXJTaGVldCwgY29uc3QgVmVjdG9yPFJlZlB0cjxDU1NTdHls
ZVNoZWV0PiA+KiBwYWdlR3JvdXBVc2VyU2hlZXRzLCBjb25zdCBWZWN0b3I8UmVmUHRyPENTU1N0
eWxlU2hlZXQ+ID4qIGRvY3VtZW50VXNlclNoZWV0cywKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgYm9vbCBzdHJpY3RQYXJzaW5nLCBib29sIG1hdGNoQXV0aG9yQW5kVXNlclN0
eWxlcykKQEAgLTM5MCw2ICs0MzQsNyBAQCBDU1NTdHlsZVNlbGVjdG9yOjpDU1NTdHlsZVNlbGVj
dG9yKERvY3VtZW50KiBkb2N1bWVudCwgU3R5bGVTaGVldExpc3QqIHN0eWxlU2hlZQogICAgICAg
ICBtX21lZGl1bSA9IGFkb3B0UHRyKG5ldyBNZWRpYVF1ZXJ5RXZhbHVhdG9yKHZpZXctPm1lZGlh
VHlwZSgpLCB2aWV3LT5mcmFtZSgpLCBtX3Jvb3REZWZhdWx0U3R5bGUuZ2V0KCkpKTsKIAogICAg
IG1fYXV0aG9yU3R5bGUgPSBhZG9wdFB0cihuZXcgUnVsZVNldCk7CisgICAgbV9zY29wZWRBdXRo
b3JTdHlsZXMgPSBhZG9wdFB0cihuZXcgU2NvcGVkUnVsZVNldHMpOwogICAgIC8vIEFkZGluZyBy
dWxlcyBmcm9tIG11bHRpcGxlIHNoZWV0cywgc2hyaW5rIGF0IHRoZSBlbmQuCiAgICAgbV9hdXRo
b3JTdHlsZS0+ZGlzYWJsZUF1dG9TaHJpbmtUb0ZpdCgpOwogCkBAIC00MjAsMTUgKzQ2NSwyNiBA
QCBDU1NTdHlsZVNlbGVjdG9yOjpDU1NTdHlsZVNlbGVjdG9yKERvY3VtZW50KiBkb2N1bWVudCwg
U3R5bGVTaGVldExpc3QqIHN0eWxlU2hlZQogICAgICAgICBtX3VzZXJTdHlsZSA9IHRlbXBVc2Vy
U3R5bGUucmVsZWFzZSgpOwogCiAgICAgLy8gQWRkIHJ1bGVzIGZyb20gZWxlbWVudHMgbGlrZSBT
VkcncyA8Zm9udC1mYWNlPgotICAgIGlmIChtYXBwZWRFbGVtZW50U2hlZXQpCisgICAgaWYgKG1h
cHBlZEVsZW1lbnRTaGVldCkgeworICAgICAgICAvLyBGSVhNRTogc2VlIGlmIHN0eWxlIHNjb3Bl
cyBjYW4vc2hvdWxkIGJlIGFkZGVkIGhlcmUuCiAgICAgICAgIG1fYXV0aG9yU3R5bGUtPmFkZFJ1
bGVzRnJvbVNoZWV0KG1hcHBlZEVsZW1lbnRTaGVldCwgKm1fbWVkaXVtLCB0aGlzKTsKKyAgICB9
CiAKICAgICAvLyBhZGQgc3R5bGVzaGVldHMgZnJvbSBkb2N1bWVudAogICAgIHVuc2lnbmVkIGxl
bmd0aCA9IHN0eWxlU2hlZXRzLT5sZW5ndGgoKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgbGVuZ3RoOyBpKyspIHsKICAgICAgICAgU3R5bGVTaGVldCogc2hlZXQgPSBzdHlsZVNoZWV0
cy0+aXRlbShpKTsKLSAgICAgICAgaWYgKHNoZWV0LT5pc0NTU1N0eWxlU2hlZXQoKSAmJiAhc2hl
ZXQtPmRpc2FibGVkKCkpCi0gICAgICAgICAgICBtX2F1dGhvclN0eWxlLT5hZGRSdWxlc0Zyb21T
aGVldChzdGF0aWNfY2FzdDxDU1NTdHlsZVNoZWV0Kj4oc2hlZXQpLCAqbV9tZWRpdW0sIHRoaXMp
OworICAgICAgICBpZiAoc2hlZXQtPmlzQ1NTU3R5bGVTaGVldCgpICYmICFzaGVldC0+ZGlzYWJs
ZWQoKSkgeworICAgICAgICAgICAgQ1NTU3R5bGVTaGVldCogY3NzU2hlZXQgPSBzdGF0aWNfY2Fz
dDxDU1NTdHlsZVNoZWV0Kj4oc2hlZXQpOworICAgICAgICAgICAgY29uc3QgRWxlbWVudCogc2Nv
cGUgPSAwOworCisgICAgICAgICAgICBpZiAoIWRldGVybWluZVNjb3BlKGNzc1NoZWV0LCBzY29w
ZSkpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICBpZiAoc2NvcGUpCisg
ICAgICAgICAgICAgICAgbV9zY29wZWRBdXRob3JTdHlsZXMtPmVuc3VyZUV4aXN0cyhzY29wZSkt
PmFkZFJ1bGVzRnJvbVNoZWV0KGNzc1NoZWV0LCAqbV9tZWRpdW0sIHRoaXMsIHNjb3BlKTsKKyAg
ICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBtX2F1dGhvclN0eWxlLT5hZGRSdWxlc0Zy
b21TaGVldChjc3NTaGVldCwgKm1fbWVkaXVtLCB0aGlzKTsKKyAgICAgICAgfQogICAgIH0KICAg
ICAvLyBDb2xsZWN0IGFsbCBpZHMgYW5kIHJ1bGVzIHVzaW5nIHNpYmxpbmcgc2VsZWN0b3JzICg6
Zmlyc3QtY2hpbGQgYW5kIHNpbWlsYXIpCiAgICAgLy8gaW4gdGhlIGN1cnJlbnQgc2V0IG9mIHN0
eWxlc2hlZXRzLiBTdHlsZSBzaGFyaW5nIGNvZGUgdXNlcyB0aGlzIGluZm9ybWF0aW9uIHRvIHJl
amVjdApAQCAtNDM5LDYgKzQ5NSw3IEBAIENTU1N0eWxlU2VsZWN0b3I6OkNTU1N0eWxlU2VsZWN0
b3IoRG9jdW1lbnQqIGRvY3VtZW50LCBTdHlsZVNoZWV0TGlzdCogc3R5bGVTaGVlCiAgICAgaWYg
KHVuY29tbW9uQXR0cmlidXRlUnVsZXNJbkRlZmF1bHRTdHlsZSkKICAgICAgICAgdW5jb21tb25B
dHRyaWJ1dGVSdWxlc0luRGVmYXVsdFN0eWxlLT5jb2xsZWN0RmVhdHVyZXMobV9mZWF0dXJlcyk7
CiAgICAgbV9hdXRob3JTdHlsZS0+Y29sbGVjdEZlYXR1cmVzKG1fZmVhdHVyZXMpOworICAgIG1f
c2NvcGVkQXV0aG9yU3R5bGVzLT5jb2xsZWN0RmVhdHVyZXMobV9mZWF0dXJlcyk7CiAgICAgaWYg
KG1fdXNlclN0eWxlKQogICAgICAgICBtX3VzZXJTdHlsZS0+Y29sbGVjdEZlYXR1cmVzKG1fZmVh
dHVyZXMpOwogCkBAIC02MTgsNiArNjc1LDQ1IEBAIHZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6YWRk
TWF0Y2hlZERlY2xhcmF0aW9uKENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uKiBzdHlsZURlCiAg
ICAgbmV3RGVjbGFyYXRpb24ubGlua01hdGNoVHlwZSA9IGxpbmtNYXRjaFR5cGU7CiB9CiAKK3Zv
aWQgQ1NTU3R5bGVTZWxlY3Rvcjo6bWF0Y2hBdXRob3JSdWxlcyhpbnQmIGZpcnN0UnVsZUluZGV4
LCBpbnQmIGxhc3RSdWxlSW5kZXgsIGJvb2wgaW5jbHVkZUVtcHR5UnVsZXMpCit7CisgICAgbV9t
YXRjaGVkUnVsZXMuY2xlYXIoKTsKKworICAgIC8vIE1hdGNoIGdsb2JhbCBhdXRob3IgcnVsZXMu
CisgICAgbWF0Y2hSdWxlU2V0KG1fYXV0aG9yU3R5bGUuZ2V0KCksIDAsIGZpcnN0UnVsZUluZGV4
LCBsYXN0UnVsZUluZGV4LCBpbmNsdWRlRW1wdHlSdWxlcyk7CisgICAgLy8gTWF0Y2ggc2NvcGVk
IHN0eWxlIHNoZWV0J3MgcnVsZXMuCisgICAgaWYgKG1fY2hlY2tlci5wYXJlbnRTdGFja0lzQ29u
c2lzdGVudChtX3BhcmVudE5vZGUpKSB7CisgICAgICAgIC8vIEZhc3QgYnJhbmNoOiBhY2Nlc3Mg
ZW5jbG9zaW5nIHNjb3BlcyBkaXJlY3RseSBmcm9tIHBhcmVudCBzdGFjayAoYnV0IHN0YXJ0IHdp
dGggY3VycmVudCBlbGVtZW50KS4KKyAgICAgICAgaWYgKG1fZWxlbWVudC0+aGFzU2NvcGVkSFRN
TFN0eWxlQ2hpbGQoKSkgeworICAgICAgICAgICAgUnVsZVNldCogcnVsZVNldCA9IG1fc2NvcGVk
QXV0aG9yU3R5bGVzLT5nZXQobV9lbGVtZW50KTsKKyAgICAgICAgICAgIGlmIChydWxlU2V0KQor
ICAgICAgICAgICAgICAgIG1hdGNoUnVsZVNldChydWxlU2V0LCBtX2VsZW1lbnQsIGZpcnN0UnVs
ZUluZGV4LCBsYXN0UnVsZUluZGV4LCBpbmNsdWRlRW1wdHlSdWxlcyk7CisgICAgICAgIH0KKyAg
ICAgICAgaW50IHNjb3BlSW5kZXggPSBtX2NoZWNrZXIuZ2V0SW5uZXJtb3N0U3R5bGVTY29wZUVs
ZW1lbnRJbmRleCgpOworICAgICAgICB3aGlsZSAoc2NvcGVJbmRleCA+PSAwKSB7CisgICAgICAg
ICAgICBjb25zdCBFbGVtZW50KiBzY29wZSA9IG1fY2hlY2tlci5nZXRFbGVtZW50V2l0aEluZGV4
KHNjb3BlSW5kZXgpOworICAgICAgICAgICAgUnVsZVNldCogcnVsZVNldCA9IG1fc2NvcGVkQXV0
aG9yU3R5bGVzLT5nZXQoc2NvcGUpOworICAgICAgICAgICAgaWYgKHJ1bGVTZXQpCisgICAgICAg
ICAgICAgICAgbWF0Y2hSdWxlU2V0KHJ1bGVTZXQsIHNjb3BlLCBmaXJzdFJ1bGVJbmRleCwgbGFz
dFJ1bGVJbmRleCwgaW5jbHVkZUVtcHR5UnVsZXMpOworICAgICAgICAgICAgc2NvcGVJbmRleCA9
IG1fY2hlY2tlci5nZXRFbmNsb3NpbmdTdHlsZVNjb3BlRWxlbWVudEluZGV4KHNjb3BlSW5kZXgp
OworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gU2xvdyBicmFuY2g6IGNsaW1i
IHRyZWUsIGNoZWNrIGZvciBzdHlsZSBzY29wZXMgYXQgZXZlcnkgZWxlbWVudC4KKyAgICAgICAg
Zm9yIChjb25zdCBOb2RlKiBub2RlID0gbV9lbGVtZW50OyBub2RlOyBub2RlID0gbm9kZS0+cGFy
ZW50Tm9kZSgpKSB7CisgICAgICAgICAgICBpZiAoIW5vZGUtPmlzRWxlbWVudE5vZGUoKSkKKyAg
ICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIGNvbnN0IEVsZW1lbnQqIGVsZW1l
bnQgPSB0b0VsZW1lbnQobm9kZSk7CisgICAgICAgICAgICBpZiAoIWVsZW1lbnQtPmhhc1Njb3Bl
ZEhUTUxTdHlsZUNoaWxkKCkpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAg
ICBSdWxlU2V0KiBydWxlU2V0ID0gbV9zY29wZWRBdXRob3JTdHlsZXMtPmdldChlbGVtZW50KTsK
KyAgICAgICAgICAgIGlmIChydWxlU2V0KQorICAgICAgICAgICAgICAgIG1hdGNoUnVsZVNldChy
dWxlU2V0LCBlbGVtZW50LCBmaXJzdFJ1bGVJbmRleCwgbGFzdFJ1bGVJbmRleCwgaW5jbHVkZUVt
cHR5UnVsZXMpOworICAgICAgICB9CisgICAgfQorCisgICAgc29ydEFuZFRyYW5zZmVyTWF0Y2hl
ZFJ1bGVzKCk7Cit9CisKIHZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6bWF0Y2hSdWxlcyhSdWxlU2V0
KiBydWxlcywgaW50JiBmaXJzdFJ1bGVJbmRleCwgaW50JiBsYXN0UnVsZUluZGV4LCBib29sIGlu
Y2x1ZGVFbXB0eVJ1bGVzKQogewogICAgIG1fbWF0Y2hlZFJ1bGVzLmNsZWFyKCk7CkBAIC02MjUs
NTUgKzcyMSwzOSBAQCB2b2lkIENTU1N0eWxlU2VsZWN0b3I6Om1hdGNoUnVsZXMoUnVsZVNldCog
cnVsZXMsIGludCYgZmlyc3RSdWxlSW5kZXgsIGludCYgbGFzdAogICAgIGlmICghcnVsZXMgfHwg
IW1fZWxlbWVudCkKICAgICAgICAgcmV0dXJuOwogCisgICAgbWF0Y2hSdWxlU2V0KHJ1bGVzLCAw
LCBmaXJzdFJ1bGVJbmRleCwgbGFzdFJ1bGVJbmRleCwgaW5jbHVkZUVtcHR5UnVsZXMpOworICAg
IHNvcnRBbmRUcmFuc2Zlck1hdGNoZWRSdWxlcygpOworfQorCit2b2lkIENTU1N0eWxlU2VsZWN0
b3I6Om1hdGNoUnVsZVNldChSdWxlU2V0KiBydWxlcywgY29uc3QgRWxlbWVudCogc2NvcGUsIGlu
dCYgZmlyc3RSdWxlSW5kZXgsIGludCYgbGFzdFJ1bGVJbmRleCwgYm9vbCBpbmNsdWRlRW1wdHlS
dWxlcykKK3sKKyAgICBtX21hdGNoZWRSdWxlcy5jbGVhcigpOworCisgICAgaWYgKCFydWxlcyB8
fCAhbV9lbGVtZW50KQorICAgICAgICByZXR1cm47CisKICAgICAvLyBXZSBuZWVkIHRvIGNvbGxl
Y3QgdGhlIHJ1bGVzIGZvciBpZCwgY2xhc3MsIHRhZywgYW5kIGV2ZXJ5dGhpbmcgZWxzZSBpbnRv
IGEgYnVmZmVyIGFuZAogICAgIC8vIHRoZW4gc29ydCB0aGUgYnVmZmVyLgogICAgIGlmIChtX2Vs
ZW1lbnQtPmhhc0lEKCkpCi0gICAgICAgIG1hdGNoUnVsZXNGb3JMaXN0KHJ1bGVzLT5pZFJ1bGVz
KG1fZWxlbWVudC0+aWRGb3JTdHlsZVJlc29sdXRpb24oKS5pbXBsKCkpLCBmaXJzdFJ1bGVJbmRl
eCwgbGFzdFJ1bGVJbmRleCwgaW5jbHVkZUVtcHR5UnVsZXMpOworICAgICAgICBtYXRjaFJ1bGVz
Rm9yTGlzdChydWxlcy0+aWRSdWxlcyhtX2VsZW1lbnQtPmlkRm9yU3R5bGVSZXNvbHV0aW9uKCku
aW1wbCgpKSwgc2NvcGUsIGZpcnN0UnVsZUluZGV4LCBsYXN0UnVsZUluZGV4LCBpbmNsdWRlRW1w
dHlSdWxlcyk7CiAgICAgaWYgKG1fZWxlbWVudC0+aGFzQ2xhc3MoKSkgewogICAgICAgICBBU1NF
UlQobV9zdHlsZWRFbGVtZW50KTsKICAgICAgICAgY29uc3QgU3BhY2VTcGxpdFN0cmluZyYgY2xh
c3NOYW1lcyA9IG1fc3R5bGVkRWxlbWVudC0+Y2xhc3NOYW1lcygpOwogICAgICAgICBzaXplX3Qg
c2l6ZSA9IGNsYXNzTmFtZXMuc2l6ZSgpOwogICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IHNpemU7ICsraSkKLSAgICAgICAgICAgIG1hdGNoUnVsZXNGb3JMaXN0KHJ1bGVzLT5jbGFzc1J1
bGVzKGNsYXNzTmFtZXNbaV0uaW1wbCgpKSwgZmlyc3RSdWxlSW5kZXgsIGxhc3RSdWxlSW5kZXgs
IGluY2x1ZGVFbXB0eVJ1bGVzKTsKKyAgICAgICAgICAgIG1hdGNoUnVsZXNGb3JMaXN0KHJ1bGVz
LT5jbGFzc1J1bGVzKGNsYXNzTmFtZXNbaV0uaW1wbCgpKSwgc2NvcGUsIGZpcnN0UnVsZUluZGV4
LCBsYXN0UnVsZUluZGV4LCBpbmNsdWRlRW1wdHlSdWxlcyk7CiAgICAgfQogICAgIGNvbnN0IEF0
b21pY1N0cmluZyYgcHNldWRvSWQgPSBtX2VsZW1lbnQtPnNoYWRvd1BzZXVkb0lkKCk7CiAgICAg
aWYgKCFwc2V1ZG9JZC5pc0VtcHR5KCkpIHsKICAgICAgICAgQVNTRVJUKG1fc3R5bGVkRWxlbWVu
dCk7Ci0gICAgICAgIG1hdGNoUnVsZXNGb3JMaXN0KHJ1bGVzLT5zaGFkb3dQc2V1ZG9FbGVtZW50
UnVsZXMocHNldWRvSWQuaW1wbCgpKSwgZmlyc3RSdWxlSW5kZXgsIGxhc3RSdWxlSW5kZXgsIGlu
Y2x1ZGVFbXB0eVJ1bGVzKTsKKyAgICAgICAgbWF0Y2hSdWxlc0Zvckxpc3QocnVsZXMtPnNoYWRv
d1BzZXVkb0VsZW1lbnRSdWxlcyhwc2V1ZG9JZC5pbXBsKCkpLCBzY29wZSwgZmlyc3RSdWxlSW5k
ZXgsIGxhc3RSdWxlSW5kZXgsIGluY2x1ZGVFbXB0eVJ1bGVzKTsKICAgICB9CiAgICAgaWYgKG1f
ZWxlbWVudC0+aXNMaW5rKCkpCi0gICAgICAgIG1hdGNoUnVsZXNGb3JMaXN0KHJ1bGVzLT5saW5r
UHNldWRvQ2xhc3NSdWxlcygpLCBmaXJzdFJ1bGVJbmRleCwgbGFzdFJ1bGVJbmRleCwgaW5jbHVk
ZUVtcHR5UnVsZXMpOworICAgICAgICBtYXRjaFJ1bGVzRm9yTGlzdChydWxlcy0+bGlua1BzZXVk
b0NsYXNzUnVsZXMoKSwgc2NvcGUsIGZpcnN0UnVsZUluZGV4LCBsYXN0UnVsZUluZGV4LCBpbmNs
dWRlRW1wdHlSdWxlcyk7CiAgICAgaWYgKG1fY2hlY2tlci5tYXRjaGVzRm9jdXNQc2V1ZG9DbGFz
cyhtX2VsZW1lbnQpKQotICAgICAgICBtYXRjaFJ1bGVzRm9yTGlzdChydWxlcy0+Zm9jdXNQc2V1
ZG9DbGFzc1J1bGVzKCksIGZpcnN0UnVsZUluZGV4LCBsYXN0UnVsZUluZGV4LCBpbmNsdWRlRW1w
dHlSdWxlcyk7Ci0gICAgbWF0Y2hSdWxlc0Zvckxpc3QocnVsZXMtPnRhZ1J1bGVzKG1fZWxlbWVu
dC0+bG9jYWxOYW1lKCkuaW1wbCgpKSwgZmlyc3RSdWxlSW5kZXgsIGxhc3RSdWxlSW5kZXgsIGlu
Y2x1ZGVFbXB0eVJ1bGVzKTsKLSAgICBtYXRjaFJ1bGVzRm9yTGlzdChydWxlcy0+dW5pdmVyc2Fs
UnVsZXMoKSwgZmlyc3RSdWxlSW5kZXgsIGxhc3RSdWxlSW5kZXgsIGluY2x1ZGVFbXB0eVJ1bGVz
KTsKLQotICAgIC8vIElmIHdlIGRpZG4ndCBtYXRjaCBhbnkgcnVsZXMsIHdlJ3JlIGRvbmUuCi0g
ICAgaWYgKG1fbWF0Y2hlZFJ1bGVzLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
Ly8gU29ydCB0aGUgc2V0IG9mIG1hdGNoZWQgcnVsZXMuCi0gICAgc29ydE1hdGNoZWRSdWxlcygp
OwotCi0gICAgLy8gTm93IHRyYW5zZmVyIHRoZSBzZXQgb2YgbWF0Y2hlZCBydWxlcyBvdmVyIHRv
IG91ciBsaXN0IG9mIGRlY2xzLgotICAgIGlmICghbV9jaGVja2VyLmlzQ29sbGVjdGluZ1J1bGVz
T25seSgpKSB7Ci0gICAgICAgIC8vIEZJWE1FOiBUaGlzIHN1Y2tzLCB0aGUgaW5zcGVjdG9yIHNo
b3VsZCBnZXQgdGhlIHN0eWxlIGZyb20gdGhlIHZpc2l0ZWQgc3R5bGUgaXRzZWxmLgotICAgICAg
ICBib29sIHN3YXBWaXNpdGVkVW52aXNpdGVkID0gSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpm
b3JjZVBzZXVkb1N0YXRlKG1fZWxlbWVudCwgQ1NTU2VsZWN0b3I6OlBzZXVkb1Zpc2l0ZWQpOwot
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9tYXRjaGVkUnVsZXMuc2l6ZSgpOyBp
KyspIHsKLSAgICAgICAgICAgIGlmIChtX3N0eWxlICYmIG1fbWF0Y2hlZFJ1bGVzW2ldLT5jb250
YWluc1VuY29tbW9uQXR0cmlidXRlU2VsZWN0b3IoKSkKLSAgICAgICAgICAgICAgICBtX3N0eWxl
LT5zZXRBZmZlY3RlZEJ5VW5jb21tb25BdHRyaWJ1dGVTZWxlY3RvcnMoKTsKLSAgICAgICAgICAg
IHVuc2lnbmVkIGxpbmtNYXRjaFR5cGUgPSBtX21hdGNoZWRSdWxlc1tpXS0+bGlua01hdGNoVHlw
ZSgpOwotICAgICAgICAgICAgaWYgKHN3YXBWaXNpdGVkVW52aXNpdGVkICYmIGxpbmtNYXRjaFR5
cGUgJiYgbGlua01hdGNoVHlwZSAhPSBTZWxlY3RvckNoZWNrZXI6Ok1hdGNoQWxsKQotICAgICAg
ICAgICAgICAgIGxpbmtNYXRjaFR5cGUgPSAobGlua01hdGNoVHlwZSA9PSBTZWxlY3RvckNoZWNr
ZXI6Ok1hdGNoVmlzaXRlZCkgPyBTZWxlY3RvckNoZWNrZXI6Ok1hdGNoTGluayA6IFNlbGVjdG9y
Q2hlY2tlcjo6TWF0Y2hWaXNpdGVkOwotICAgICAgICAgICAgYWRkTWF0Y2hlZERlY2xhcmF0aW9u
KG1fbWF0Y2hlZFJ1bGVzW2ldLT5ydWxlKCktPmRlY2xhcmF0aW9uKCksIGxpbmtNYXRjaFR5cGUp
OwotICAgICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IG1fbWF0Y2hlZFJ1bGVzLnNpemUoKTsgaSsrKSB7Ci0gICAgICAgICAgICBpZiAoIW1fcnVs
ZUxpc3QpCi0gICAgICAgICAgICAgICAgbV9ydWxlTGlzdCA9IENTU1J1bGVMaXN0OjpjcmVhdGUo
KTsKLSAgICAgICAgICAgIG1fcnVsZUxpc3QtPmFwcGVuZChtX21hdGNoZWRSdWxlc1tpXS0+cnVs
ZSgpKTsKLSAgICAgICAgfQotICAgIH0KKyAgICAgICAgbWF0Y2hSdWxlc0Zvckxpc3QocnVsZXMt
PmZvY3VzUHNldWRvQ2xhc3NSdWxlcygpLCBzY29wZSwgZmlyc3RSdWxlSW5kZXgsIGxhc3RSdWxl
SW5kZXgsIGluY2x1ZGVFbXB0eVJ1bGVzKTsKKyAgICBtYXRjaFJ1bGVzRm9yTGlzdChydWxlcy0+
dGFnUnVsZXMobV9lbGVtZW50LT5sb2NhbE5hbWUoKS5pbXBsKCkpLCBzY29wZSwgZmlyc3RSdWxl
SW5kZXgsIGxhc3RSdWxlSW5kZXgsIGluY2x1ZGVFbXB0eVJ1bGVzKTsKKyAgICBtYXRjaFJ1bGVz
Rm9yTGlzdChydWxlcy0+dW5pdmVyc2FsUnVsZXMoKSwgc2NvcGUsIGZpcnN0UnVsZUluZGV4LCBs
YXN0UnVsZUluZGV4LCBpbmNsdWRlRW1wdHlSdWxlcyk7CiB9CiAKIGNsYXNzIE1hdGNoaW5nVUFS
dWxlc1Njb3BlIHsKQEAgLTcwNSwxMiArNzg1LDE1IEBAIGlubGluZSBib29sIE1hdGNoaW5nVUFS
dWxlc1Njb3BlOjppc01hdGNoaW5nVUFSdWxlcygpCiAKIGJvb2wgTWF0Y2hpbmdVQVJ1bGVzU2Nv
cGU6Om1fbWF0Y2hpbmdVQVJ1bGVzID0gZmFsc2U7CiAKLWlubGluZSBzdGF0aWMgYm9vbCBtYXRj
aGVzSW5UcmVlU2NvcGUoVHJlZVNjb3BlKiB0cmVlU2NvcGUsIGJvb2wgcnVsZVJlYWNoZXNJbnRv
U2hhZG93RE9NKQoraW5saW5lIHN0YXRpYyBib29sIG1hdGNoZXNJblRyZWVTY29wZShUcmVlU2Nv
cGUqIHRyZWVTY29wZSwgY29uc3QgRWxlbWVudCogc3R5bGVTY29wZSwgYm9vbCBydWxlUmVhY2hl
c0ludG9TaGFkb3dET00pCiB7Ci0gICAgcmV0dXJuIE1hdGNoaW5nVUFSdWxlc1Njb3BlOjppc01h
dGNoaW5nVUFSdWxlcygpIHx8IHRyZWVTY29wZS0+YXBwbHlBdXRob3JTaGVldHMoKSB8fCBydWxl
UmVhY2hlc0ludG9TaGFkb3dET007CisgICAgcmV0dXJuIE1hdGNoaW5nVUFSdWxlc1Njb3BlOjpp
c01hdGNoaW5nVUFSdWxlcygpCisgICAgICAgIHx8IHRyZWVTY29wZS0+YXBwbHlBdXRob3JTaGVl
dHMoKQorICAgICAgICB8fCAoc3R5bGVTY29wZSAmJiBzdHlsZVNjb3BlLT50cmVlU2NvcGUoKSA9
PSB0cmVlU2NvcGUpCisgICAgICAgIHx8IHJ1bGVSZWFjaGVzSW50b1NoYWRvd0RPTTsKIH0KIAot
dm9pZCBDU1NTdHlsZVNlbGVjdG9yOjptYXRjaFJ1bGVzRm9yTGlzdChjb25zdCBWZWN0b3I8UnVs
ZURhdGE+KiBydWxlcywgaW50JiBmaXJzdFJ1bGVJbmRleCwgaW50JiBsYXN0UnVsZUluZGV4LCBi
b29sIGluY2x1ZGVFbXB0eVJ1bGVzKQordm9pZCBDU1NTdHlsZVNlbGVjdG9yOjptYXRjaFJ1bGVz
Rm9yTGlzdChjb25zdCBWZWN0b3I8UnVsZURhdGE+KiBydWxlcywgY29uc3QgRWxlbWVudCogc2Nv
cGUsIGludCYgZmlyc3RSdWxlSW5kZXgsIGludCYgbGFzdFJ1bGVJbmRleCwgYm9vbCBpbmNsdWRl
RW1wdHlSdWxlcykKIHsKICAgICBpZiAoIXJ1bGVzKQogICAgICAgICByZXR1cm47CkBAIC03MjMs
OCArODA2LDggQEAgdm9pZCBDU1NTdHlsZVNlbGVjdG9yOjptYXRjaFJ1bGVzRm9yTGlzdChjb25z
dCBWZWN0b3I8UnVsZURhdGE+KiBydWxlcywgaW50JiBmaXIKICAgICAgICAgY29uc3QgUnVsZURh
dGEmIHJ1bGVEYXRhID0gcnVsZXMtPmF0KGkpOwogICAgICAgICBpZiAoY2FuVXNlRmFzdFJlamVj
dCAmJiBtX2NoZWNrZXIuZmFzdFJlamVjdFNlbGVjdG9yPFJ1bGVEYXRhOjptYXhpbXVtSWRlbnRp
ZmllckNvdW50PihydWxlRGF0YS5kZXNjZW5kYW50U2VsZWN0b3JJZGVudGlmaWVySGFzaGVzKCkp
KQogICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIGlmIChjaGVja1NlbGVjdG9yKHJ1bGVE
YXRhKSkgewotICAgICAgICAgICAgaWYgKCFtYXRjaGVzSW5UcmVlU2NvcGUobV9lbGVtZW50LT50
cmVlU2NvcGUoKSwgbV9jaGVja2VyLmhhc1Vua25vd25Qc2V1ZG9FbGVtZW50cygpKSkKKyAgICAg
ICAgaWYgKGNoZWNrU2VsZWN0b3IocnVsZURhdGEsIHNjb3BlKSkgeworICAgICAgICAgICAgaWYg
KCFtYXRjaGVzSW5UcmVlU2NvcGUobV9lbGVtZW50LT50cmVlU2NvcGUoKSwgc2NvcGUsIG1fY2hl
Y2tlci5oYXNVbmtub3duUHNldWRvRWxlbWVudHMoKSkpCiAgICAgICAgICAgICAgICAgY29udGlu
dWU7CiAgICAgICAgICAgICAvLyBJZiB0aGUgcnVsZSBoYXMgbm8gcHJvcGVydGllcyB0byBhcHBs
eSwgdGhlbiBpZ25vcmUgaXQgaW4gdGhlIG5vbi1kZWJ1ZyBtb2RlLgogICAgICAgICAgICAgQ1NT
U3R5bGVSdWxlKiBydWxlID0gcnVsZURhdGEucnVsZSgpOwpAQCAtNzY1LDYgKzg0OCwzNiBAQCB2
b2lkIENTU1N0eWxlU2VsZWN0b3I6OnNvcnRNYXRjaGVkUnVsZXMoKQogICAgIHN0ZDo6c29ydCht
X21hdGNoZWRSdWxlcy5iZWdpbigpLCBtX21hdGNoZWRSdWxlcy5lbmQoKSwgY29tcGFyZVJ1bGVz
KTsKIH0KIAordm9pZCBDU1NTdHlsZVNlbGVjdG9yOjpzb3J0QW5kVHJhbnNmZXJNYXRjaGVkUnVs
ZXMoKQoreworICAgIC8vIElmIHdlIGRpZG4ndCBtYXRjaCBhbnkgcnVsZXMsIHdlJ3JlIGRvbmUu
CisgICAgaWYgKG1fbWF0Y2hlZFJ1bGVzLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgLy8gU29ydCB0aGUgc2V0IG9mIG1hdGNoZWQgcnVsZXMuCisgICAgc3RkOjpzb3J0KG1fbWF0
Y2hlZFJ1bGVzLmJlZ2luKCksIG1fbWF0Y2hlZFJ1bGVzLmVuZCgpLCBjb21wYXJlUnVsZXMpOwor
CisgICAgLy8gTm93IHRyYW5zZmVyIHRoZSBzZXQgb2YgbWF0Y2hlZCBydWxlcyBvdmVyIHRvIG91
ciBsaXN0IG9mIGRlY2xzLgorICAgIGlmIChtX2NoZWNrZXIuaXNDb2xsZWN0aW5nUnVsZXNPbmx5
KCkpIHsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fbWF0Y2hlZFJ1bGVzLnNp
emUoKTsgaSsrKSB7CisgICAgICAgICAgICBpZiAoIW1fcnVsZUxpc3QpCisgICAgICAgICAgICAg
ICAgbV9ydWxlTGlzdCA9IENTU1J1bGVMaXN0OjpjcmVhdGUoKTsKKyAgICAgICAgICAgIG1fcnVs
ZUxpc3QtPmFwcGVuZChtX21hdGNoZWRSdWxlc1tpXS0+cnVsZSgpKTsKKyAgICAgICAgfQorICAg
IH0gZWxzZSB7CisgICAgICAgIC8vIEZJWE1FOiBUaGlzIHN1Y2tzLCB0aGUgaW5zcGVjdG9yIHNo
b3VsZCBnZXQgdGhlIHN0eWxlIGZyb20gdGhlIHZpc2l0ZWQgc3R5bGUgaXRzZWxmLgorICAgICAg
ICBib29sIHN3YXBWaXNpdGVkVW52aXNpdGVkID0gSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpm
b3JjZVBzZXVkb1N0YXRlKG1fZWxlbWVudCwgQ1NTU2VsZWN0b3I6OlBzZXVkb1Zpc2l0ZWQpOwor
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9tYXRjaGVkUnVsZXMuc2l6ZSgpOyBp
KyspIHsKKyAgICAgICAgICAgIGlmIChtX3N0eWxlICYmIG1fbWF0Y2hlZFJ1bGVzW2ldLT5jb250
YWluc1VuY29tbW9uQXR0cmlidXRlU2VsZWN0b3IoKSkKKyAgICAgICAgICAgICAgICBtX3N0eWxl
LT5zZXRBZmZlY3RlZEJ5VW5jb21tb25BdHRyaWJ1dGVTZWxlY3RvcnMoKTsKKyAgICAgICAgICAg
IHVuc2lnbmVkIGxpbmtNYXRjaFR5cGUgPSBtX21hdGNoZWRSdWxlc1tpXS0+bGlua01hdGNoVHlw
ZSgpOworICAgICAgICAgICAgaWYgKHN3YXBWaXNpdGVkVW52aXNpdGVkICYmIGxpbmtNYXRjaFR5
cGUgJiYgbGlua01hdGNoVHlwZSAhPSBTZWxlY3RvckNoZWNrZXI6Ok1hdGNoQWxsKQorICAgICAg
ICAgICAgICAgIGxpbmtNYXRjaFR5cGUgPSAobGlua01hdGNoVHlwZSA9PSBTZWxlY3RvckNoZWNr
ZXI6Ok1hdGNoVmlzaXRlZCkgPyBTZWxlY3RvckNoZWNrZXI6Ok1hdGNoTGluayA6IFNlbGVjdG9y
Q2hlY2tlcjo6TWF0Y2hWaXNpdGVkOworICAgICAgICAgICAgYWRkTWF0Y2hlZERlY2xhcmF0aW9u
KG1fbWF0Y2hlZFJ1bGVzW2ldLT5ydWxlKCktPmRlY2xhcmF0aW9uKCksIGxpbmtNYXRjaFR5cGUp
OworICAgICAgICB9CisgICAgfQorfQorCiB2b2lkIENTU1N0eWxlU2VsZWN0b3I6Om1hdGNoQWxs
UnVsZXMoTWF0Y2hSZXN1bHQmIHJlc3VsdCkKIHsKICAgICBtYXRjaFVBUnVsZXMocmVzdWx0KTsK
QEAgLTgxNyw3ICs5MzAsNyBAQCB2b2lkIENTU1N0eWxlU2VsZWN0b3I6Om1hdGNoQWxsUnVsZXMo
TWF0Y2hSZXN1bHQmIHJlc3VsdCkKICAgICAKICAgICAvLyBDaGVjayB0aGUgcnVsZXMgaW4gYXV0
aG9yIHNoZWV0cyBuZXh0LgogICAgIGlmIChtX21hdGNoQXV0aG9yQW5kVXNlclN0eWxlcykKLSAg
ICAgICAgbWF0Y2hSdWxlcyhtX2F1dGhvclN0eWxlLmdldCgpLCByZXN1bHQuZmlyc3RBdXRob3JS
dWxlLCByZXN1bHQubGFzdEF1dGhvclJ1bGUsIGZhbHNlKTsKKyAgICAgICAgbWF0Y2hBdXRob3JS
dWxlcyhyZXN1bHQuZmlyc3RBdXRob3JSdWxlLCByZXN1bHQubGFzdEF1dGhvclJ1bGUsIGZhbHNl
KTsKICAgICAgICAgCiAgICAgLy8gTm93IGNoZWNrIG91ciBpbmxpbmUgc3R5bGUgYXR0cmlidXRl
LgogICAgIGlmIChtX21hdGNoQXV0aG9yQW5kVXNlclN0eWxlcyAmJiBtX3N0eWxlZEVsZW1lbnQp
IHsKQEAgLTg4MCw2ICs5OTMsOCBAQCBOb2RlKiBDU1NTdHlsZVNlbGVjdG9yOjpsb2NhdGVDb3Vz
aW5MaXN0KEVsZW1lbnQqIHBhcmVudCwgdW5zaWduZWQmIHZpc2l0ZWROb2RlQwogICAgICAgICBy
ZXR1cm4gMDsKICAgICBpZiAoIXBhcmVudCB8fCAhcGFyZW50LT5pc1N0eWxlZEVsZW1lbnQoKSkK
ICAgICAgICAgcmV0dXJuIDA7CisgICAgaWYgKHBhcmVudC0+aGFzU2NvcGVkSFRNTFN0eWxlQ2hp
bGQoKSkKKyAgICAgICAgcmV0dXJuIDA7CiAgICAgU3R5bGVkRWxlbWVudCogcCA9IHN0YXRpY19j
YXN0PFN0eWxlZEVsZW1lbnQqPihwYXJlbnQpOwogICAgIGlmIChwLT5pbmxpbmVTdHlsZURlY2wo
KSkKICAgICAgICAgcmV0dXJuIDA7CkBAIC04OTUsOCArMTAxMCwxMCBAQCBOb2RlKiBDU1NTdHls
ZVNlbGVjdG9yOjpsb2NhdGVDb3VzaW5MaXN0KEVsZW1lbnQqIHBhcmVudCwgdW5zaWduZWQmIHZp
c2l0ZWROb2RlQwogICAgIC8vIHdpbGwgbmV2ZXIgZ28gZGVlcGVyIHRoYW4gY1N0eWxlU2VhcmNo
TGV2ZWxUaHJlc2hvbGQgbGV2ZWxzIGludG8gcmVjdXJzaW9uLgogICAgIHZpc2l0ZWROb2RlQ291
bnQgKz0gY1N0eWxlU2VhcmNoVGhyZXNob2xkOwogICAgIHdoaWxlICh0aGlzQ291c2luKSB7Ci0g
ICAgICAgIHdoaWxlIChjdXJyZW50Tm9kZSkgeworICAgICAgICBmb3IgKDsgY3VycmVudE5vZGU7
IGN1cnJlbnROb2RlID0gY3VycmVudE5vZGUtPnByZXZpb3VzU2libGluZygpKSB7CiAgICAgICAg
ICAgICArK3N1YmNvdW50OworICAgICAgICAgICAgaWYgKGN1cnJlbnROb2RlLT5pc0VsZW1lbnRO
b2RlKCkgJiYgdG9FbGVtZW50KGN1cnJlbnROb2RlKS0+aGFzU2NvcGVkSFRNTFN0eWxlQ2hpbGQo
KSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIGlmIChjdXJyZW50Tm9k
ZS0+cmVuZGVyU3R5bGUoKSA9PSBwYXJlbnRTdHlsZSAmJiBjdXJyZW50Tm9kZS0+bGFzdENoaWxk
KCkpIHsKICAgICAgICAgICAgICAgICAvLyBBZGp1c3QgZm9yIHVudXNlZCByZXNlcnZlZCB0cmll
cy4KICAgICAgICAgICAgICAgICB2aXNpdGVkTm9kZUNvdW50IC09IGNTdHlsZVNlYXJjaFRocmVz
aG9sZCAtIHN1YmNvdW50OwpAQCAtOTA0LDcgKzEwMjEsNiBAQCBOb2RlKiBDU1NTdHlsZVNlbGVj
dG9yOjpsb2NhdGVDb3VzaW5MaXN0KEVsZW1lbnQqIHBhcmVudCwgdW5zaWduZWQmIHZpc2l0ZWRO
b2RlQwogICAgICAgICAgICAgfQogICAgICAgICAgICAgaWYgKHN1YmNvdW50ID49IGNTdHlsZVNl
YXJjaFRocmVzaG9sZCkKICAgICAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgICAgIGN1
cnJlbnROb2RlID0gY3VycmVudE5vZGUtPnByZXZpb3VzU2libGluZygpOwogICAgICAgICB9CiAg
ICAgICAgIGN1cnJlbnROb2RlID0gbG9jYXRlQ291c2luTGlzdCh0aGlzQ291c2luLT5wYXJlbnRF
bGVtZW50KCksIHZpc2l0ZWROb2RlQ291bnQpOwogICAgICAgICB0aGlzQ291c2luID0gY3VycmVu
dE5vZGU7CkBAIC0xMDMwLDYgKzExNDYsOSBAQCBib29sIENTU1N0eWxlU2VsZWN0b3I6OmNhblNo
YXJlU3R5bGVXaXRoRWxlbWVudChOb2RlKiBub2RlKSBjb25zdAogICAgIGlmIChlbGVtZW50LT5o
YXNJRCgpICYmIG1fZmVhdHVyZXMuaWRzSW5SdWxlcy5jb250YWlucyhlbGVtZW50LT5pZEZvclN0
eWxlUmVzb2x1dGlvbigpLmltcGwoKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAorICAgIGlm
IChlbGVtZW50LT5oYXNTY29wZWRIVE1MU3R5bGVDaGlsZCgpKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisKICAgICBib29sIGlzQ29udHJvbCA9IGVsZW1lbnQtPmlzRm9ybUNvbnRyb2xFbGVtZW50
KCk7CiAKICAgICBpZiAoaXNDb250cm9sICE9IG1fZWxlbWVudC0+aXNGb3JtQ29udHJvbEVsZW1l
bnQoKSkKQEAgLTExMDEsNiArMTIyMCw4IEBAIFJlbmRlclN0eWxlKiBDU1NTdHlsZVNlbGVjdG9y
Ojpsb2NhdGVTaGFyZWRTdHlsZSgpCiAgICAgICAgIHJldHVybiAwOwogICAgIGlmIChwYXJlbnRT
dHlsZVByZXZlbnRzU2hhcmluZyhtX3BhcmVudFN0eWxlKSkKICAgICAgICAgcmV0dXJuIDA7Cisg
ICAgaWYgKG1fc3R5bGVkRWxlbWVudC0+aGFzU2NvcGVkSFRNTFN0eWxlQ2hpbGQoKSkKKyAgICAg
ICAgcmV0dXJuIDA7CiAKICAgICAvLyBDaGVjayBwcmV2aW91cyBzaWJsaW5ncyBhbmQgdGhlaXIg
Y291c2lucy4KICAgICB1bnNpZ25lZCBjb3VudCA9IDA7CkBAIC0xNDE2LDcgKzE1MzcsNyBAQCBQ
YXNzUmVmUHRyPFJlbmRlclN0eWxlPiBDU1NTdHlsZVNlbGVjdG9yOjpwc2V1ZG9TdHlsZUZvckVs
ZW1lbnQoUHNldWRvSWQgcHNldWRvLAogCiAgICAgaWYgKG1fbWF0Y2hBdXRob3JBbmRVc2VyU3R5
bGVzKSB7CiAgICAgICAgIG1hdGNoUnVsZXMobV91c2VyU3R5bGUuZ2V0KCksIG1hdGNoUmVzdWx0
LmZpcnN0VXNlclJ1bGUsIG1hdGNoUmVzdWx0Lmxhc3RVc2VyUnVsZSwgZmFsc2UpOwotICAgICAg
ICBtYXRjaFJ1bGVzKG1fYXV0aG9yU3R5bGUuZ2V0KCksIG1hdGNoUmVzdWx0LmZpcnN0QXV0aG9y
UnVsZSwgbWF0Y2hSZXN1bHQubGFzdEF1dGhvclJ1bGUsIGZhbHNlKTsKKyAgICAgICAgbWF0Y2hB
dXRob3JSdWxlcyhtYXRjaFJlc3VsdC5maXJzdEF1dGhvclJ1bGUsIG1hdGNoUmVzdWx0Lmxhc3RB
dXRob3JSdWxlLCBmYWxzZSk7CiAgICAgfQogCiAgICAgaWYgKG1fbWF0Y2hlZERlY2xzLmlzRW1w
dHkoKSkKQEAgLTE0NTMsNiArMTU3NCw3IEBAIFBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IENTU1N0
eWxlU2VsZWN0b3I6OnN0eWxlRm9yUGFnZShpbnQgcGFnZUluZGV4KQogICAgIGNvbnN0IFN0cmlu
ZyBwYWdlID0gcGFnZU5hbWUocGFnZUluZGV4KTsKICAgICBtYXRjaFBhZ2VSdWxlcyhkZWZhdWx0
UHJpbnRTdHlsZSwgaXNMZWZ0LCBpc0ZpcnN0LCBwYWdlKTsKICAgICBtYXRjaFBhZ2VSdWxlcyht
X3VzZXJTdHlsZS5nZXQoKSwgaXNMZWZ0LCBpc0ZpcnN0LCBwYWdlKTsKKyAgICAvLyBPbmx5IGNv
bnNpZGVyIHRoZSBnbG9iYWwgUnVsZVNldCBmb3IgQHBhZ2UgcnVsZXMsIGFzIHBlciB0aGUgSFRN
TDUgc3BlYy4KICAgICBtYXRjaFBhZ2VSdWxlcyhtX2F1dGhvclN0eWxlLmdldCgpLCBpc0xlZnQs
IGlzRmlyc3QsIHBhZ2UpOwogICAgIG1fbGluZUhlaWdodFZhbHVlID0gMDsKICAgICBib29sIGlu
aGVyaXRlZE9ubHkgPSBmYWxzZTsKQEAgLTE3MDIsNyArMTgyNCw5IEBAIGJvb2wgQ1NTU3R5bGVT
ZWxlY3Rvcjo6Y2hlY2tSZWdpb25TdHlsZShFbGVtZW50KiBlKQogICAgIGZvciAoVmVjdG9yPFJl
ZlB0cjxDU1NSZWdpb25TdHlsZVJ1bGU+ID46Oml0ZXJhdG9yIGl0ID0gbV9yZWdpb25TdHlsZVJ1
bGVzLmJlZ2luKCk7IGl0ICE9IG1fcmVnaW9uU3R5bGVSdWxlcy5lbmQoKTsgKytpdCkgewogICAg
ICAgICBjb25zdCBDU1NTZWxlY3Rvckxpc3QmIHJlZ2lvblNlbGVjdG9yTGlzdCA9ICgqaXQpLT5z
ZWxlY3Rvckxpc3QoKTsKICAgICAgICAgZm9yIChDU1NTZWxlY3RvciogcyA9IHJlZ2lvblNlbGVj
dG9yTGlzdC5maXJzdCgpOyBzOyBzID0gcmVnaW9uU2VsZWN0b3JMaXN0Lm5leHQocykpIHsKLSAg
ICAgICAgICAgIGlmIChtX2NoZWNrZXIuY2hlY2tTZWxlY3RvcihzLCBlKSkKKyAgICAgICAgICAg
IC8vIEZJWE1FIChCVUcgNzI0NzIpOiBXZSBkb24ndCBhZGQgQC13ZWJraXQtcmVnaW9uIHJ1bGVz
IG9mIHNjb3BlZCBzdHlsZSBzaGVldHMgZm9yIHRoZSBtb21lbnQsIAorICAgICAgICAgICAgLy8g
c28gYWxsIHJlZ2lvbiBydWxlcyBhcmUgZ2xvYmFsIGJ5IGRlZmF1bHQuIFZlcmlmeSB3aGV0aGVy
IHRoYXQgY2FuIHN0YW5kIG9yIG5lZWRzIGNoYW5naW4nLgorICAgICAgICAgICAgaWYgKG1fY2hl
Y2tlci5jaGVja1NlbGVjdG9yKHMsIGUsIDApKQogICAgICAgICAgICAgICAgIHJldHVybiB0cnVl
OwogICAgICAgICB9CiAgICAgfQpAQCAtMTc2MSw3ICsxODg1LDcgQEAgUGFzc1JlZlB0cjxDU1NS
dWxlTGlzdD4gQ1NTU3R5bGVTZWxlY3Rvcjo6cHNldWRvU3R5bGVSdWxlc0ZvckVsZW1lbnQoRWxl
bWVudCogZSwKICAgICAgICAgbV9zYW1lT3JpZ2luT25seSA9ICEocnVsZXNUb0luY2x1ZGUgJiBD
cm9zc09yaWdpbkNTU1J1bGVzKTsKIAogICAgICAgICAvLyBDaGVjayB0aGUgcnVsZXMgaW4gYXV0
aG9yIHNoZWV0cy4KLSAgICAgICAgbWF0Y2hSdWxlcyhtX2F1dGhvclN0eWxlLmdldCgpLCBkdW1t
eS5maXJzdEF1dGhvclJ1bGUsIGR1bW15Lmxhc3RBdXRob3JSdWxlLCBydWxlc1RvSW5jbHVkZSAm
IEVtcHR5Q1NTUnVsZXMpOworICAgICAgICBtYXRjaEF1dGhvclJ1bGVzKGR1bW15LmZpcnN0QXV0
aG9yUnVsZSwgZHVtbXkubGFzdEF1dGhvclJ1bGUsIHJ1bGVzVG9JbmNsdWRlICYgRW1wdHlDU1NS
dWxlcyk7CiAKICAgICAgICAgbV9zYW1lT3JpZ2luT25seSA9IGZhbHNlOwogICAgIH0KQEAgLTE3
NzEsNyArMTg5NSw3IEBAIFBhc3NSZWZQdHI8Q1NTUnVsZUxpc3Q+IENTU1N0eWxlU2VsZWN0b3I6
OnBzZXVkb1N0eWxlUnVsZXNGb3JFbGVtZW50KEVsZW1lbnQqIGUsCiAgICAgcmV0dXJuIG1fcnVs
ZUxpc3QucmVsZWFzZSgpOwogfQogCi1pbmxpbmUgYm9vbCBDU1NTdHlsZVNlbGVjdG9yOjpjaGVj
a1NlbGVjdG9yKGNvbnN0IFJ1bGVEYXRhJiBydWxlRGF0YSkKK2lubGluZSBib29sIENTU1N0eWxl
U2VsZWN0b3I6OmNoZWNrU2VsZWN0b3IoY29uc3QgUnVsZURhdGEmIHJ1bGVEYXRhLCBjb25zdCBF
bGVtZW50KiBzY29wZSkKIHsKICAgICBtX2R5bmFtaWNQc2V1ZG8gPSBOT1BTRVVETzsKICAgICBt
X2NoZWNrZXIuY2xlYXJIYXNVbmtub3duUHNldWRvRWxlbWVudHMoKTsKQEAgLTE3OTAsMTEgKzE5
MTQsMTEgQEAgaW5saW5lIGJvb2wgQ1NTU3R5bGVTZWxlY3Rvcjo6Y2hlY2tTZWxlY3Rvcihjb25z
dCBSdWxlRGF0YSYgcnVsZURhdGEpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAg
IGlmICghU2VsZWN0b3JDaGVja2VyOjpmYXN0Q2hlY2tSaWdodG1vc3RBdHRyaWJ1dGVTZWxlY3Rv
cihtX2VsZW1lbnQsIHJ1bGVEYXRhLnNlbGVjdG9yKCkpKQogICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgICAgICByZXR1cm4gbV9jaGVja2VyLmZhc3RDaGVja1NlbGVjdG9yKHJ1bGVEYXRh
LnNlbGVjdG9yKCksIG1fZWxlbWVudCk7CisgICAgICAgIHJldHVybiBtX2NoZWNrZXIuZmFzdENo
ZWNrU2VsZWN0b3IocnVsZURhdGEuc2VsZWN0b3IoKSwgbV9lbGVtZW50LCBzY29wZSk7CiAgICAg
fQogCiAgICAgLy8gU2xvdyBwYXRoLgotICAgIFNlbGVjdG9yQ2hlY2tlcjo6U2VsZWN0b3JNYXRj
aCBtYXRjaCA9IG1fY2hlY2tlci5jaGVja1NlbGVjdG9yKHJ1bGVEYXRhLnNlbGVjdG9yKCksIG1f
ZWxlbWVudCwgbV9keW5hbWljUHNldWRvLCBmYWxzZSwgU2VsZWN0b3JDaGVja2VyOjpWaXNpdGVk
TWF0Y2hFbmFibGVkLCBzdHlsZSgpLCBtX3BhcmVudE5vZGUgPyBtX3BhcmVudE5vZGUtPnJlbmRl
clN0eWxlKCkgOiAwKTsKKyAgICBTZWxlY3RvckNoZWNrZXI6OlNlbGVjdG9yTWF0Y2ggbWF0Y2gg
PSBtX2NoZWNrZXIuY2hlY2tTZWxlY3RvcihydWxlRGF0YS5zZWxlY3RvcigpLCBtX2VsZW1lbnQs
IHNjb3BlLCBtX2R5bmFtaWNQc2V1ZG8sIGZhbHNlLCBTZWxlY3RvckNoZWNrZXI6OlZpc2l0ZWRN
YXRjaEVuYWJsZWQsIHN0eWxlKCksIG1fcGFyZW50Tm9kZSA/IG1fcGFyZW50Tm9kZS0+cmVuZGVy
U3R5bGUoKSA6IDApOwogICAgIGlmIChtYXRjaCAhPSBTZWxlY3RvckNoZWNrZXI6OlNlbGVjdG9y
TWF0Y2hlcykKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGlmIChtX2NoZWNrZXIucHNldWRv
U3R5bGUoKSAhPSBOT1BTRVVETyAmJiBtX2NoZWNrZXIucHNldWRvU3R5bGUoKSAhPSBtX2R5bmFt
aWNQc2V1ZG8pCkBAIC0xOTQzLDcgKzIwNjcsNyBAQCB2b2lkIFJ1bGVTZXQ6OmFkZFBhZ2VSdWxl
KENTU1BhZ2VSdWxlKiBydWxlKQogICAgIG1fcGFnZVJ1bGVzLmFwcGVuZChSdWxlRGF0YShydWxl
LCBydWxlLT5zZWxlY3Rvckxpc3QoKS5maXJzdCgpLCBtX3BhZ2VSdWxlcy5zaXplKCkpKTsKIH0K
IAotdm9pZCBSdWxlU2V0OjphZGRSdWxlc0Zyb21TaGVldChDU1NTdHlsZVNoZWV0KiBzaGVldCwg
Y29uc3QgTWVkaWFRdWVyeUV2YWx1YXRvciYgbWVkaXVtLCBDU1NTdHlsZVNlbGVjdG9yKiBzdHls
ZVNlbGVjdG9yKQordm9pZCBSdWxlU2V0OjphZGRSdWxlc0Zyb21TaGVldChDU1NTdHlsZVNoZWV0
KiBzaGVldCwgY29uc3QgTWVkaWFRdWVyeUV2YWx1YXRvciYgbWVkaXVtLCBDU1NTdHlsZVNlbGVj
dG9yKiBzdHlsZVNlbGVjdG9yLCBjb25zdCBFbGVtZW50KiBzY29wZSkKIHsKICAgICBpZiAoIXNo
ZWV0KQogICAgICAgICByZXR1cm47CkBAIC0xOTY0LDcgKzIwODgsNyBAQCB2b2lkIFJ1bGVTZXQ6
OmFkZFJ1bGVzRnJvbVNoZWV0KENTU1N0eWxlU2hlZXQqIHNoZWV0LCBjb25zdCBNZWRpYVF1ZXJ5
RXZhbHVhdG9yJgogICAgICAgICBlbHNlIGlmIChydWxlLT5pc0ltcG9ydFJ1bGUoKSkgewogICAg
ICAgICAgICAgQ1NTSW1wb3J0UnVsZSogaW1wb3J0ID0gc3RhdGljX2Nhc3Q8Q1NTSW1wb3J0UnVs
ZSo+KHJ1bGUpOwogICAgICAgICAgICAgaWYgKCFpbXBvcnQtPm1lZGlhKCkgfHwgbWVkaXVtLmV2
YWwoaW1wb3J0LT5tZWRpYSgpLCBzdHlsZVNlbGVjdG9yKSkKLSAgICAgICAgICAgICAgICBhZGRS
dWxlc0Zyb21TaGVldChpbXBvcnQtPnN0eWxlU2hlZXQoKSwgbWVkaXVtLCBzdHlsZVNlbGVjdG9y
KTsKKyAgICAgICAgICAgICAgICBhZGRSdWxlc0Zyb21TaGVldChpbXBvcnQtPnN0eWxlU2hlZXQo
KSwgbWVkaXVtLCBzdHlsZVNlbGVjdG9yLCBzY29wZSk7CiAgICAgICAgIH0KICAgICAgICAgZWxz
ZSBpZiAocnVsZS0+aXNNZWRpYVJ1bGUoKSkgewogICAgICAgICAgICAgQ1NTTWVkaWFSdWxlKiBy
ID0gc3RhdGljX2Nhc3Q8Q1NTTWVkaWFSdWxlKj4ocnVsZSk7CkBAIC0xOTgyLDIwICsyMTA2LDQx
IEBAIHZvaWQgUnVsZVNldDo6YWRkUnVsZXNGcm9tU2hlZXQoQ1NTU3R5bGVTaGVldCogc2hlZXQs
IGNvbnN0IE1lZGlhUXVlcnlFdmFsdWF0b3ImCiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBB
ZGQgdGhpcyBmb250IGZhY2UgdG8gb3VyIHNldC4KICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IENTU0ZvbnRGYWNlUnVsZSogZm9udEZhY2VSdWxlID0gc3RhdGljX2Nhc3Q8Q1NTRm9udEZh
Y2VSdWxlKj4oY2hpbGRJdGVtKTsKICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlU2VsZWN0
b3ItPmZvbnRTZWxlY3RvcigpLT5hZGRGb250RmFjZVJ1bGUoZm9udEZhY2VSdWxlKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIC8vCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBGSVhNRShC
VUcgNzI0NjEpOiBXZSBkb24ndCBhZGQgQGZvbnQtZmFjZSBydWxlcyBvZiBzY29wZWQgc3R5bGUg
c2hlZXRzIGZvciB0aGUgbW9tZW50LgorICAgICAgICAgICAgICAgICAgICAgICAgLy8gRmluZCBh
IHdheSB0byBoYXZlIHNjb3BlZCBAZm9udC1mYWNlIHJ1bGVzLgorICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKCFzY29wZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IENT
U0ZvbnRGYWNlUnVsZSogZm9udEZhY2VSdWxlID0gc3RhdGljX2Nhc3Q8Q1NTRm9udEZhY2VSdWxl
Kj4oY2hpbGRJdGVtKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZVNlbGVjdG9y
LT5mb250U2VsZWN0b3IoKS0+YWRkRm9udEZhY2VSdWxlKGZvbnRGYWNlUnVsZSk7CisgICAgICAg
ICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoY2hpbGRJ
dGVtLT5pc0tleWZyYW1lc1J1bGUoKSAmJiBzdHlsZVNlbGVjdG9yKSB7CiAgICAgICAgICAgICAg
ICAgICAgICAgICAvLyBBZGQgdGhpcyBrZXlmcmFtZSBydWxlIHRvIG91ciBzZXQuCi0gICAgICAg
ICAgICAgICAgICAgICAgICBzdHlsZVNlbGVjdG9yLT5hZGRLZXlmcmFtZVN0eWxlKHN0YXRpY19j
YXN0PFdlYktpdENTU0tleWZyYW1lc1J1bGUqPihjaGlsZEl0ZW0pKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIC8vCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBGSVhNRShCVUcgNzI0NjIp
OiBXZSBkb24ndCBhZGQgQGtleWZyYW1lIHJ1bGVzIG9mIHNjb3BlZCBzdHlsZSBzaGVldHMgZm9y
IHRoZSBtb21lbnQuCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBGaW5kIGEgd2F5IHRvIGhh
dmUgc2NvcGVkIEBrZXlmcmFtZSBydWxlcy4KKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICgh
c2NvcGUpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGVTZWxlY3Rvci0+YWRkS2V5
ZnJhbWVTdHlsZShzdGF0aWNfY2FzdDxXZWJLaXRDU1NLZXlmcmFtZXNSdWxlKj4oY2hpbGRJdGVt
KSk7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9ICAgLy8gZm9yIHJ1
bGVzCiAgICAgICAgICAgICB9ICAgLy8gaWYgcnVsZXMKICAgICAgICAgfSBlbHNlIGlmIChydWxl
LT5pc0ZvbnRGYWNlUnVsZSgpICYmIHN0eWxlU2VsZWN0b3IpIHsKICAgICAgICAgICAgIC8vIEFk
ZCB0aGlzIGZvbnQgZmFjZSB0byBvdXIgc2V0LgotICAgICAgICAgICAgY29uc3QgQ1NTRm9udEZh
Y2VSdWxlKiBmb250RmFjZVJ1bGUgPSBzdGF0aWNfY2FzdDxDU1NGb250RmFjZVJ1bGUqPihydWxl
KTsKLSAgICAgICAgICAgIHN0eWxlU2VsZWN0b3ItPmZvbnRTZWxlY3RvcigpLT5hZGRGb250RmFj
ZVJ1bGUoZm9udEZhY2VSdWxlKTsKLSAgICAgICAgfSBlbHNlIGlmIChydWxlLT5pc0tleWZyYW1l
c1J1bGUoKSkKLSAgICAgICAgICAgIHN0eWxlU2VsZWN0b3ItPmFkZEtleWZyYW1lU3R5bGUoc3Rh
dGljX2Nhc3Q8V2ViS2l0Q1NTS2V5ZnJhbWVzUnVsZSo+KHJ1bGUpKTsKLSAgICAgICAgZWxzZSBp
ZiAocnVsZS0+aXNSZWdpb25TdHlsZVJ1bGUoKSAmJiBzdHlsZVNlbGVjdG9yKQorICAgICAgICAg
ICAgLy8KKyAgICAgICAgICAgIC8vIEZJWE1FKEJVRyA3MjQ2MSk6IFdlIGRvbid0IGFkZCBAZm9u
dC1mYWNlIHJ1bGVzIG9mIHNjb3BlZCBzdHlsZSBzaGVldHMgZm9yIHRoZSBtb21lbnQuCisgICAg
ICAgICAgICAvLyBGaW5kIGEgd2F5IHRvIGhhdmUgc2NvcGVkIEBmb250LWZhY2UgcnVsZXMuCisg
ICAgICAgICAgICBpZiAoIXNjb3BlKSB7CisgICAgICAgICAgICAgICAgY29uc3QgQ1NTRm9udEZh
Y2VSdWxlKiBmb250RmFjZVJ1bGUgPSBzdGF0aWNfY2FzdDxDU1NGb250RmFjZVJ1bGUqPihydWxl
KTsKKyAgICAgICAgICAgICAgICBzdHlsZVNlbGVjdG9yLT5mb250U2VsZWN0b3IoKS0+YWRkRm9u
dEZhY2VSdWxlKGZvbnRGYWNlUnVsZSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSBp
ZiAocnVsZS0+aXNLZXlmcmFtZXNSdWxlKCkpIHsKKyAgICAgICAgICAgIC8vIEZJWE1FIChCVUcg
NzI0NjIpOiBXZSBkb24ndCBhZGQgQGtleWZyYW1lIHJ1bGVzIG9mIHNjb3BlZCBzdHlsZSBzaGVl
dHMgZm9yIHRoZSBtb21lbnQuCisgICAgICAgICAgICAvLyBGaW5kIGEgd2F5IHRvIGhhdmUgc2Nv
cGVkIEBrZXlmcmFtZSBydWxlcy4KKyAgICAgICAgICAgIGlmICghc2NvcGUpCisgICAgICAgICAg
ICAgICAgc3R5bGVTZWxlY3Rvci0+YWRkS2V5ZnJhbWVTdHlsZShzdGF0aWNfY2FzdDxXZWJLaXRD
U1NLZXlmcmFtZXNSdWxlKj4ocnVsZSkpOworICAgICAgICB9IGVsc2UgaWYgKHJ1bGUtPmlzUmVn
aW9uU3R5bGVSdWxlKCkgJiYgc3R5bGVTZWxlY3RvcikgeworICAgICAgICAgICAgLy8gRklYTUUg
KEJVRyA3MjQ3Mik6IFdlIGRvbid0IGFkZCBALXdlYmtpdC1yZWdpb24gcnVsZXMgb2Ygc2NvcGVk
IHN0eWxlIHNoZWV0cyBmb3IgdGhlIG1vbWVudC4KICAgICAgICAgICAgIHN0eWxlU2VsZWN0b3It
PmFkZFJlZ2lvblN0eWxlUnVsZShzdGF0aWNfY2FzdDxDU1NSZWdpb25TdHlsZVJ1bGUqPihydWxl
KSk7CisgICAgICAgIH0KICAgICB9CiAgICAgaWYgKG1fYXV0b1Nocmlua1RvRml0RW5hYmxlZCkK
ICAgICAgICAgc2hyaW5rVG9GaXQoKTsKQEAgLTIwOTksNiArMjI0NCwyNyBAQCB2b2lkIFJ1bGVT
ZXQ6OnNocmlua1RvRml0KCkKICAgICBtX3BhZ2VSdWxlcy5zaHJpbmtUb0ZpdCgpOwogfQogCitT
Y29wZWRSdWxlU2V0czo6flNjb3BlZFJ1bGVTZXRzKCkKK3sKKyAgICBkZWxldGVBbGxWYWx1ZXMo
bV9zY29wZWRSdWxlU2V0TWFwKTsKK30KKworUnVsZVNldCogU2NvcGVkUnVsZVNldHM6OmVuc3Vy
ZUV4aXN0cyhjb25zdCBFbGVtZW50KiBzY29wZSkKK3sKKyAgICBSdWxlU2V0KiBydWxlU2V0ID0g
bV9zY29wZWRSdWxlU2V0TWFwLmdldChzY29wZSk7CisgICAgaWYgKCFydWxlU2V0KSB7CisgICAg
ICAgIHJ1bGVTZXQgPSBuZXcgUnVsZVNldDsKKyAgICAgICAgbV9zY29wZWRSdWxlU2V0TWFwLnNl
dChzY29wZSwgcnVsZVNldCk7CisgICAgfQorICAgIHJldHVybiBydWxlU2V0OworfQorCit2b2lk
IFNjb3BlZFJ1bGVTZXRzOjpjb2xsZWN0RmVhdHVyZXMoQ1NTU3R5bGVTZWxlY3Rvcjo6RmVhdHVy
ZXMmIGZlYXR1cmVzKSBjb25zdAoreworICAgIGZvciAoU2NvcGVkUnVsZVNldE1hcDo6Y29uc3Rf
aXRlcmF0b3IgaXQgPSBtX3Njb3BlZFJ1bGVTZXRNYXAuYmVnaW4oKSwgaXRFbmQgPSBtX3Njb3Bl
ZFJ1bGVTZXRNYXAuZW5kKCk7IGl0ICE9IGl0RW5kOyArK2l0KQorICAgICAgICBpdC0+c2Vjb25k
LT5jb2xsZWN0RmVhdHVyZXMoZmVhdHVyZXMpOworfQorCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tCiAvLyB0aGlzIGlzIG1vc3RseSBib3Jpbmcgc3R1ZmYgb24gaG93IHRvIGFwcGx5
IGEgY2VydGFpbiBydWxlIHRvIHRoZSByZW5kZXJzdHlsZS4uLgogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9jc3MvQ1NTU3R5bGVTZWxlY3Rvci5oIGIvU291cmNlL1dlYkNvcmUvY3NzL0NT
U1N0eWxlU2VsZWN0b3IuaAppbmRleCBhMGEwZTExOTNjZDhkMDhlZDU5M2M5Yjc1ZGQ1ZjVjYTE2
NjZmOTczLi4xOTQxNDg3ZDllMmRhYWU1NGQyYzYzZTQyYzRkODA1Yjg3YWZjOWMzIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU3R5bGVTZWxlY3Rvci5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2Nzcy9DU1NTdHlsZVNlbGVjdG9yLmgKQEAgLTY2LDYgKzY2LDcgQEAgY2xhc3MgTWVk
aWFRdWVyeUV2YWx1YXRvcjsKIGNsYXNzIE5vZGU7CiBjbGFzcyBSdWxlRGF0YTsKIGNsYXNzIFJ1
bGVTZXQ7CitjbGFzcyBTY29wZWRSdWxlU2V0czsKIGNsYXNzIFNldHRpbmdzOwogY2xhc3MgU3R5
bGVJbWFnZTsKIGNsYXNzIFN0eWxlUGVuZGluZ0ltYWdlOwpAQCAtMjU1LDEyICsyNTYsMTUgQEAg
cHJpdmF0ZToKICAgICB9OwogICAgIHZvaWQgbWF0Y2hBbGxSdWxlcyhNYXRjaFJlc3VsdCYpOwog
ICAgIHZvaWQgbWF0Y2hVQVJ1bGVzKE1hdGNoUmVzdWx0Jik7CisgICAgdm9pZCBtYXRjaEF1dGhv
clJ1bGVzKGludCYgZmlyc3RSdWxlSW5kZXgsIGludCYgbGFzdFJ1bGVJbmRleCwgYm9vbCBpbmNs
dWRlRW1wdHlSdWxlcyk7CiAgICAgdm9pZCBtYXRjaFJ1bGVzKFJ1bGVTZXQqLCBpbnQmIGZpcnN0
UnVsZUluZGV4LCBpbnQmIGxhc3RSdWxlSW5kZXgsIGJvb2wgaW5jbHVkZUVtcHR5UnVsZXMpOwot
ICAgIHZvaWQgbWF0Y2hSdWxlc0Zvckxpc3QoY29uc3QgVmVjdG9yPFJ1bGVEYXRhPiosIGludCYg
Zmlyc3RSdWxlSW5kZXgsIGludCYgbGFzdFJ1bGVJbmRleCwgYm9vbCBpbmNsdWRlRW1wdHlSdWxl
cyk7CisgICAgdm9pZCBtYXRjaFJ1bGVTZXQoUnVsZVNldCosIGNvbnN0IEVsZW1lbnQqLCBpbnQm
IGZpcnN0UnVsZUluZGV4LCBpbnQmIGxhc3RSdWxlSW5kZXgsIGJvb2wgaW5jbHVkZUVtcHR5UnVs
ZXMpOworICAgIHZvaWQgbWF0Y2hSdWxlc0Zvckxpc3QoY29uc3QgVmVjdG9yPFJ1bGVEYXRhPios
IGNvbnN0IEVsZW1lbnQqLCBpbnQmIGZpcnN0UnVsZUluZGV4LCBpbnQmIGxhc3RSdWxlSW5kZXgs
IGJvb2wgaW5jbHVkZUVtcHR5UnVsZXMpOwogICAgIGJvb2wgZmFzdFJlamVjdFNlbGVjdG9yKGNv
bnN0IFJ1bGVEYXRhJikgY29uc3Q7CiAgICAgdm9pZCBzb3J0TWF0Y2hlZFJ1bGVzKCk7CisgICAg
dm9pZCBzb3J0QW5kVHJhbnNmZXJNYXRjaGVkUnVsZXMoKTsKIAotICAgIGJvb2wgY2hlY2tTZWxl
Y3Rvcihjb25zdCBSdWxlRGF0YSYpOworICAgIGJvb2wgY2hlY2tTZWxlY3Rvcihjb25zdCBSdWxl
RGF0YSYsIGNvbnN0IEVsZW1lbnQqIHNjb3BlKTsKIAogICAgIHZvaWQgYXBwbHlNYXRjaGVkRGVj
bGFyYXRpb25zKGNvbnN0IE1hdGNoUmVzdWx0Jik7CiAgICAgdGVtcGxhdGUgPGJvb2wgZmlyc3RQ
YXNzPgpAQCAtMjc2LDYgKzI4MCw3IEBAIHByaXZhdGU6CiAgICAgU3RyaW5nIHBhZ2VOYW1lKGlu
dCBwYWdlSW5kZXgpIGNvbnN0OwogCiAgICAgT3duUHRyPFJ1bGVTZXQ+IG1fYXV0aG9yU3R5bGU7
CisgICAgT3duUHRyPFNjb3BlZFJ1bGVTZXRzPiBtX3Njb3BlZEF1dGhvclN0eWxlczsKICAgICBP
d25QdHI8UnVsZVNldD4gbV91c2VyU3R5bGU7CiAKICAgICBGZWF0dXJlcyBtX2ZlYXR1cmVzOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL1NlbGVjdG9yQ2hlY2tlci5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9jc3MvU2VsZWN0b3JDaGVja2VyLmNwcAppbmRleCAyYzVjNzMyMDBkMTk3YWZk
OTZkMDliZTY5ZTllYWE3ZmE5OWMxZjllLi43YTRlN2E4MWI1OWE5MmQ1ZjI0NGVhYzI5MDY2NWJl
MmUzM2EyMTAwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU2VsZWN0b3JDaGVja2Vy
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvU2VsZWN0b3JDaGVja2VyLmNwcApAQCAtOTYs
NyArOTYsMTMgQEAgdm9pZCBTZWxlY3RvckNoZWNrZXI6OnB1c2hQYXJlbnRTdGFja0ZyYW1lKEVs
ZW1lbnQqIHBhcmVudCkKICAgICBBU1NFUlQobV9hbmNlc3RvcklkZW50aWZpZXJGaWx0ZXIpOwog
ICAgIEFTU0VSVChtX3BhcmVudFN0YWNrLmlzRW1wdHkoKSB8fCBtX3BhcmVudFN0YWNrLmxhc3Qo
KS5lbGVtZW50ID09IHBhcmVudC0+cGFyZW50T3JIb3N0RWxlbWVudCgpKTsKICAgICBBU1NFUlQo
IW1fcGFyZW50U3RhY2suaXNFbXB0eSgpIHx8ICFwYXJlbnQtPnBhcmVudE9ySG9zdEVsZW1lbnQo
KSk7Ci0gICAgbV9wYXJlbnRTdGFjay5hcHBlbmQoUGFyZW50U3RhY2tGcmFtZShwYXJlbnQpKTsK
KyAgICAvLyBQb2ludCB0byBmcmFtZSBjb250YWluaW5nIHRoZSBjbG9zZXN0IHN0eWxlIHNjb3Bl
IChvciBsZWF2ZSBhdCAwIGlmIG5vbmUpLgorICAgIGlmIChwYXJlbnQtPmhhc1Njb3BlZEhUTUxT
dHlsZUNoaWxkKCkpCisgICAgICAgIG1fcGFyZW50U3RhY2suYXBwZW5kKFBhcmVudFN0YWNrRnJh
bWUocGFyZW50LCBtX3BhcmVudFN0YWNrLnNpemUoKSkpOworICAgIGVsc2UgaWYgKCFtX3BhcmVu
dFN0YWNrLmlzRW1wdHkoKSkKKyAgICAgICAgbV9wYXJlbnRTdGFjay5hcHBlbmQoUGFyZW50U3Rh
Y2tGcmFtZShwYXJlbnQsIG1fcGFyZW50U3RhY2subGFzdCgpLmNsb3Nlc3RTdHlsZVNjb3BlRnJh
bWVJbmRleCkpOworICAgIGVsc2UKKyAgICAgICAgbV9wYXJlbnRTdGFjay5hcHBlbmQoUGFyZW50
U3RhY2tGcmFtZShwYXJlbnQsIC0xKSk7CiAgICAgUGFyZW50U3RhY2tGcmFtZSYgcGFyZW50RnJh
bWUgPSBtX3BhcmVudFN0YWNrLmxhc3QoKTsKICAgICAvLyBNaXggdGFncywgY2xhc3MgbmFtZXMg
YW5kIGlkcyBpbnRvIHNvbWUgc29ydCBvZiB3ZWlyZCBib3VpbGxhYmFpc3NlLgogICAgIC8vIFRo
ZSBmaWx0ZXIgaXMgdXNlZCBmb3IgZmFzdCByZWplY3Rpb24gb2YgY2hpbGQgYW5kIGRlc2NlbmRh
bnQgc2VsZWN0b3JzLgpAQCAtMTQxLDcgKzE0Nyw3IEBAIHZvaWQgU2VsZWN0b3JDaGVja2VyOjpw
dXNoUGFyZW50KEVsZW1lbnQqIHBhcmVudCkKICAgICAgICAgLy8gc3R5bGUgcmVjYWxjIGluIHRo
ZSBtaWRkbGUgb2YgdHJlZSBidWlsZGluZy4gUmVzZXQgdGhlIHN0YWNrIGlmIHdlIHNlZSBhIG5l
dyByb290IGVsZW1lbnQuCiAgICAgICAgIEFTU0VSVChtX2FuY2VzdG9ySWRlbnRpZmllckZpbHRl
cik7CiAgICAgICAgIG1fYW5jZXN0b3JJZGVudGlmaWVyRmlsdGVyLT5jbGVhcigpOwotICAgICAg
ICBtX3BhcmVudFN0YWNrLnJlc2l6ZSgwKTsKKyAgICAgICAgbV9wYXJlbnRTdGFjay5jbGVhcigp
OwogICAgIH0gZWxzZSB7CiAgICAgICAgIEFTU0VSVChtX2FuY2VzdG9ySWRlbnRpZmllckZpbHRl
cik7CiAgICAgICAgIC8vIFdlIG1heSBnZXQgaW52b2tlZCBmb3Igc29tZSByYW5kb20gZWxlbWVu
dHMgaW4gc29tZSB3YWNreSBjYXNlcyBkdXJpbmcgc3R5bGUgcmVzb2x2ZS4KQEAgLTI1NSwyNSAr
MjYxLDI1IEBAIEVJbnNpZGVMaW5rIFNlbGVjdG9yQ2hlY2tlcjo6ZGV0ZXJtaW5lTGlua1N0YXRl
U2xvd0Nhc2UoRWxlbWVudCogZWxlbWVudCkgY29uc3QKICNlbmRpZgogfQogCi1ib29sIFNlbGVj
dG9yQ2hlY2tlcjo6Y2hlY2tTZWxlY3RvcihDU1NTZWxlY3Rvciogc2VsLCBFbGVtZW50KiBlbGVt
ZW50LCBib29sIGlzRmFzdENoZWNrYWJsZVNlbGVjdG9yKSBjb25zdAorYm9vbCBTZWxlY3RvckNo
ZWNrZXI6OmNoZWNrU2VsZWN0b3IoQ1NTU2VsZWN0b3IqIHNlbCwgRWxlbWVudCogZWxlbWVudCwg
Y29uc3QgRWxlbWVudCogc2NvcGUsIGJvb2wgaXNGYXN0Q2hlY2thYmxlU2VsZWN0b3IpIGNvbnN0
CiB7CiAgICAgUHNldWRvSWQgZHluYW1pY1BzZXVkbyA9IE5PUFNFVURPOwogICAgIGlmIChpc0Zh
c3RDaGVja2FibGVTZWxlY3RvciAmJiAhZWxlbWVudC0+aXNTVkdFbGVtZW50KCkpIHsKICAgICAg
ICAgaWYgKCFmYXN0Q2hlY2tSaWdodG1vc3RTZWxlY3RvcihzZWwsIGVsZW1lbnQsIFZpc2l0ZWRN
YXRjaERpc2FibGVkKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgcmV0dXJu
IGZhc3RDaGVja1NlbGVjdG9yKHNlbCwgZWxlbWVudCk7CisgICAgICAgIHJldHVybiBmYXN0Q2hl
Y2tTZWxlY3RvcihzZWwsIGVsZW1lbnQsIHNjb3BlKTsKICAgICB9Ci0gICAgcmV0dXJuIGNoZWNr
U2VsZWN0b3Ioc2VsLCBlbGVtZW50LCBkeW5hbWljUHNldWRvLCBmYWxzZSwgVmlzaXRlZE1hdGNo
RGlzYWJsZWQpID09IFNlbGVjdG9yTWF0Y2hlczsKKyAgICByZXR1cm4gY2hlY2tTZWxlY3Rvcihz
ZWwsIGVsZW1lbnQsIHNjb3BlLCBkeW5hbWljUHNldWRvLCBmYWxzZSwgVmlzaXRlZE1hdGNoRGlz
YWJsZWQpID09IFNlbGVjdG9yTWF0Y2hlczsKIH0KIAogbmFtZXNwYWNlIHsKIAogdGVtcGxhdGUg
PGJvb2wgY2hlY2tWYWx1ZShjb25zdCBFbGVtZW50KiwgQXRvbWljU3RyaW5nSW1wbCosIGNvbnN0
IFF1YWxpZmllZE5hbWUmKSwgYm9vbCBpbml0QXR0cmlidXRlTmFtZT4KLWlubGluZSBib29sIGZh
c3RDaGVja1NpbmdsZVNlbGVjdG9yKGNvbnN0IENTU1NlbGVjdG9yKiYgc2VsZWN0b3IsIGNvbnN0
IEVsZW1lbnQqJiBlbGVtZW50LCBjb25zdCBDU1NTZWxlY3RvciomIHRvcENoaWxkT3JTdWJzZWxl
Y3RvciwgY29uc3QgRWxlbWVudComIHRvcENoaWxkT3JTdWJzZWxlY3Rvck1hdGNoRWxlbWVudCkK
K2lubGluZSBib29sIGZhc3RDaGVja1NpbmdsZVNlbGVjdG9yKGNvbnN0IENTU1NlbGVjdG9yKiYg
c2VsZWN0b3IsIGNvbnN0IEVsZW1lbnQqJiBlbGVtZW50LCBjb25zdCBFbGVtZW50KiBzY29wZSwg
Y29uc3QgQ1NTU2VsZWN0b3IqJiB0b3BDaGlsZE9yU3Vic2VsZWN0b3IsIGNvbnN0IEVsZW1lbnQq
JiB0b3BDaGlsZE9yU3Vic2VsZWN0b3JNYXRjaEVsZW1lbnQpCiB7CiAgICAgQXRvbWljU3RyaW5n
SW1wbCogdmFsdWUgPSBzZWxlY3Rvci0+dmFsdWUoKS5pbXBsKCk7CiAgICAgY29uc3QgUXVhbGlm
aWVkTmFtZSYgYXR0cmlidXRlID0gaW5pdEF0dHJpYnV0ZU5hbWUgPyBzZWxlY3Rvci0+YXR0cmli
dXRlKCkgOiBhbnlRTmFtZSgpOwotICAgIGZvciAoOyBlbGVtZW50OyBlbGVtZW50ID0gZWxlbWVu
dC0+cGFyZW50RWxlbWVudCgpKSB7CisgICAgZm9yICg7IGVsZW1lbnQ7IGVsZW1lbnQgPSAoZWxl
bWVudCA9PSBzY29wZSkgPyAwIDogZWxlbWVudC0+cGFyZW50RWxlbWVudCgpKSB7CiAgICAgICAg
IGlmIChjaGVja1ZhbHVlKGVsZW1lbnQsIHZhbHVlLCBhdHRyaWJ1dGUpICYmIFNlbGVjdG9yQ2hl
Y2tlcjo6dGFnTWF0Y2hlcyhlbGVtZW50LCBzZWxlY3RvcikpIHsKICAgICAgICAgICAgIGlmIChz
ZWxlY3Rvci0+cmVsYXRpb24oKSA9PSBDU1NTZWxlY3Rvcjo6RGVzY2VuZGFudCkKICAgICAgICAg
ICAgICAgICB0b3BDaGlsZE9yU3Vic2VsZWN0b3IgPSAwOwpAQCAtMzUwLDcgKzM1Niw3IEBAIGlu
bGluZSBib29sIFNlbGVjdG9yQ2hlY2tlcjo6ZmFzdENoZWNrUmlnaHRtb3N0U2VsZWN0b3IoY29u
c3QgQ1NTU2VsZWN0b3IqIHNlbGVjCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1ib29sIFNlbGVj
dG9yQ2hlY2tlcjo6ZmFzdENoZWNrU2VsZWN0b3IoY29uc3QgQ1NTU2VsZWN0b3IqIHNlbGVjdG9y
LCBjb25zdCBFbGVtZW50KiBlbGVtZW50KSBjb25zdAorYm9vbCBTZWxlY3RvckNoZWNrZXI6OmZh
c3RDaGVja1NlbGVjdG9yKGNvbnN0IENTU1NlbGVjdG9yKiBzZWxlY3RvciwgY29uc3QgRWxlbWVu
dCogZWxlbWVudCwgY29uc3QgRWxlbWVudCogc2NvcGUpIGNvbnN0CiB7CiAgICAgQVNTRVJUKGZh
c3RDaGVja1JpZ2h0bW9zdFNlbGVjdG9yKHNlbGVjdG9yLCBlbGVtZW50LCBWaXNpdGVkTWF0Y2hF
bmFibGVkKSk7CiAKQEAgLTM2OCwyMCArMzc0LDIwIEBAIGJvb2wgU2VsZWN0b3JDaGVja2VyOjpm
YXN0Q2hlY2tTZWxlY3Rvcihjb25zdCBDU1NTZWxlY3Rvciogc2VsZWN0b3IsIGNvbnN0IEVsZW1l
CiAgICAgd2hpbGUgKHNlbGVjdG9yKSB7CiAgICAgICAgIHN3aXRjaCAoc2VsZWN0b3ItPm1fbWF0
Y2gpIHsKICAgICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6Q2xhc3M6Ci0gICAgICAgICAgICBpZiAo
IWZhc3RDaGVja1NpbmdsZVNlbGVjdG9yPGNoZWNrQ2xhc3NWYWx1ZSwgZmFsc2U+KHNlbGVjdG9y
LCBlbGVtZW50LCB0b3BDaGlsZE9yU3Vic2VsZWN0b3IsIHRvcENoaWxkT3JTdWJzZWxlY3Rvck1h
dGNoRWxlbWVudCkpCisgICAgICAgICAgICBpZiAoIWZhc3RDaGVja1NpbmdsZVNlbGVjdG9yPGNo
ZWNrQ2xhc3NWYWx1ZSwgZmFsc2U+KHNlbGVjdG9yLCBlbGVtZW50LCBzY29wZSwgdG9wQ2hpbGRP
clN1YnNlbGVjdG9yLCB0b3BDaGlsZE9yU3Vic2VsZWN0b3JNYXRjaEVsZW1lbnQpKQogICAgICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNl
IENTU1NlbGVjdG9yOjpJZDoKLSAgICAgICAgICAgIGlmICghZmFzdENoZWNrU2luZ2xlU2VsZWN0
b3I8Y2hlY2tJRFZhbHVlLCBmYWxzZT4oc2VsZWN0b3IsIGVsZW1lbnQsIHRvcENoaWxkT3JTdWJz
ZWxlY3RvciwgdG9wQ2hpbGRPclN1YnNlbGVjdG9yTWF0Y2hFbGVtZW50KSkKKyAgICAgICAgICAg
IGlmICghZmFzdENoZWNrU2luZ2xlU2VsZWN0b3I8Y2hlY2tJRFZhbHVlLCBmYWxzZT4oc2VsZWN0
b3IsIGVsZW1lbnQsIHNjb3BlLCB0b3BDaGlsZE9yU3Vic2VsZWN0b3IsIHRvcENoaWxkT3JTdWJz
ZWxlY3Rvck1hdGNoRWxlbWVudCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQ1NTU2VsZWN0b3I6Ok5vbmU6Ci0gICAgICAg
ICAgICBpZiAoIWZhc3RDaGVja1NpbmdsZVNlbGVjdG9yPGNoZWNrVGFnVmFsdWUsIGZhbHNlPihz
ZWxlY3RvciwgZWxlbWVudCwgdG9wQ2hpbGRPclN1YnNlbGVjdG9yLCB0b3BDaGlsZE9yU3Vic2Vs
ZWN0b3JNYXRjaEVsZW1lbnQpKQorICAgICAgICAgICAgaWYgKCFmYXN0Q2hlY2tTaW5nbGVTZWxl
Y3RvcjxjaGVja1RhZ1ZhbHVlLCBmYWxzZT4oc2VsZWN0b3IsIGVsZW1lbnQsIHNjb3BlLCB0b3BD
aGlsZE9yU3Vic2VsZWN0b3IsIHRvcENoaWxkT3JTdWJzZWxlY3Rvck1hdGNoRWxlbWVudCkpCiAg
ICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
IGNhc2UgQ1NTU2VsZWN0b3I6OlNldDoKICAgICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6RXhhY3Q6
Ci0gICAgICAgICAgICBpZiAoIWZhc3RDaGVja1NpbmdsZVNlbGVjdG9yPGNoZWNrRXhhY3RBdHRy
aWJ1dGVWYWx1ZSwgdHJ1ZT4oc2VsZWN0b3IsIGVsZW1lbnQsIHRvcENoaWxkT3JTdWJzZWxlY3Rv
ciwgdG9wQ2hpbGRPclN1YnNlbGVjdG9yTWF0Y2hFbGVtZW50KSkKKyAgICAgICAgICAgIGlmICgh
ZmFzdENoZWNrU2luZ2xlU2VsZWN0b3I8Y2hlY2tFeGFjdEF0dHJpYnV0ZVZhbHVlLCB0cnVlPihz
ZWxlY3RvciwgZWxlbWVudCwgc2NvcGUsIHRvcENoaWxkT3JTdWJzZWxlY3RvciwgdG9wQ2hpbGRP
clN1YnNlbGVjdG9yTWF0Y2hFbGVtZW50KSkKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgZGVmYXVsdDoKQEAgLTQzMCw3ICs0MzYsMTUg
QEAgYm9vbCBTZWxlY3RvckNoZWNrZXI6OmlzRmFzdENoZWNrYWJsZVNlbGVjdG9yKGNvbnN0IENT
U1NlbGVjdG9yKiBzZWxlY3RvcikKIC8vICogU2VsZWN0b3JNYXRjaGVzICAgICAgICAgLSB0aGUg
c2VsZWN0b3IgbWF0Y2hlcyB0aGUgZWxlbWVudCBlCiAvLyAqIFNlbGVjdG9yRmFpbHNMb2NhbGx5
ICAgIC0gdGhlIHNlbGVjdG9yIGZhaWxzIGZvciB0aGUgZWxlbWVudCBlCiAvLyAqIFNlbGVjdG9y
RmFpbHNDb21wbGV0ZWx5IC0gdGhlIHNlbGVjdG9yIGZhaWxzIGZvciBlIGFuZCBhbnkgc2libGlu
ZyBvciBhbmNlc3RvciBvZiBlCi1TZWxlY3RvckNoZWNrZXI6OlNlbGVjdG9yTWF0Y2ggU2VsZWN0
b3JDaGVja2VyOjpjaGVja1NlbGVjdG9yKENTU1NlbGVjdG9yKiBzZWwsIEVsZW1lbnQqIGUsIFBz
ZXVkb0lkJiBkeW5hbWljUHNldWRvLCBib29sIGlzU3ViU2VsZWN0b3IsIFZpc2l0ZWRNYXRjaFR5
cGUgdmlzaXRlZE1hdGNoVHlwZSwgUmVuZGVyU3R5bGUqIGVsZW1lbnRTdHlsZSwgUmVuZGVyU3R5
bGUqIGVsZW1lbnRQYXJlbnRTdHlsZSkgY29uc3QKK1NlbGVjdG9yQ2hlY2tlcjo6U2VsZWN0b3JN
YXRjaCBTZWxlY3RvckNoZWNrZXI6OmNoZWNrU2VsZWN0b3IoCisgICAgQ1NTU2VsZWN0b3IqIHNl
bCwKKyAgICBFbGVtZW50KiBlLAorICAgIGNvbnN0IEVsZW1lbnQqIHNjb3BlLAorICAgIFBzZXVk
b0lkJiBkeW5hbWljUHNldWRvLAorICAgIGJvb2wgaXNTdWJTZWxlY3RvciwKKyAgICBWaXNpdGVk
TWF0Y2hUeXBlIHZpc2l0ZWRNYXRjaFR5cGUsCisgICAgUmVuZGVyU3R5bGUqIGVsZW1lbnRTdHls
ZSwKKyAgICBSZW5kZXJTdHlsZSogZWxlbWVudFBhcmVudFN0eWxlKSBjb25zdAogewogI2lmIEVO
QUJMRShTVkcpCiAgICAgLy8gU3BlYzogQ1NTMiBzZWxlY3RvcnMgY2Fubm90IGJlIGFwcGxpZWQg
dG8gdGhlIChjb25jZXB0dWFsbHkpIGNsb25lZCBET00gdHJlZQpAQCAtNDQwLDcgKzQ1NCw3IEBA
IFNlbGVjdG9yQ2hlY2tlcjo6U2VsZWN0b3JNYXRjaCBTZWxlY3RvckNoZWNrZXI6OmNoZWNrU2Vs
ZWN0b3IoQ1NTU2VsZWN0b3IqIHNlbCwKICNlbmRpZgogCiAgICAgLy8gZmlyc3Qgc2VsZWN0b3Ig
aGFzIHRvIG1hdGNoCi0gICAgaWYgKCFjaGVja09uZVNlbGVjdG9yKHNlbCwgZSwgZHluYW1pY1Bz
ZXVkbywgaXNTdWJTZWxlY3RvciwgdmlzaXRlZE1hdGNoVHlwZSwgZWxlbWVudFN0eWxlLCBlbGVt
ZW50UGFyZW50U3R5bGUpKQorICAgIGlmICghY2hlY2tPbmVTZWxlY3RvcihzZWwsIGUsIHNjb3Bl
LCBkeW5hbWljUHNldWRvLCBpc1N1YlNlbGVjdG9yLCB2aXNpdGVkTWF0Y2hUeXBlLCBlbGVtZW50
U3R5bGUsIGVsZW1lbnRQYXJlbnRTdHlsZSkpCiAgICAgICAgIHJldHVybiBTZWxlY3RvckZhaWxz
TG9jYWxseTsKIAogICAgIC8vIFRoZSByZXN0IG9mIHRoZSBzZWxlY3RvcnMgaGFzIHRvIG1hdGNo
CkBAIC00NjgsNyArNDgyLDcgQEAgU2VsZWN0b3JDaGVja2VyOjpTZWxlY3Rvck1hdGNoIFNlbGVj
dG9yQ2hlY2tlcjo6Y2hlY2tTZWxlY3RvcihDU1NTZWxlY3Rvciogc2VsLAogICAgICAgICAgICAg
aWYgKCFuIHx8ICFuLT5pc0VsZW1lbnROb2RlKCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIFNl
bGVjdG9yRmFpbHNDb21wbGV0ZWx5OwogICAgICAgICAgICAgZSA9IHN0YXRpY19jYXN0PEVsZW1l
bnQqPihuKTsKLSAgICAgICAgICAgIFNlbGVjdG9yTWF0Y2ggbWF0Y2ggPSBjaGVja1NlbGVjdG9y
KHNlbCwgZSwgZHluYW1pY1BzZXVkbywgZmFsc2UsIHZpc2l0ZWRNYXRjaFR5cGUpOworICAgICAg
ICAgICAgU2VsZWN0b3JNYXRjaCBtYXRjaCA9IGNoZWNrU2VsZWN0b3Ioc2VsLCBlLCBzY29wZSwg
ZHluYW1pY1BzZXVkbywgZmFsc2UsIHZpc2l0ZWRNYXRjaFR5cGUpOwogICAgICAgICAgICAgaWYg
KG1hdGNoICE9IFNlbGVjdG9yRmFpbHNMb2NhbGx5KQogICAgICAgICAgICAgICAgIHJldHVybiBt
YXRjaDsKICAgICAgICAgfQpAQCAtNDc5LDcgKzQ5Myw3IEBAIFNlbGVjdG9yQ2hlY2tlcjo6U2Vs
ZWN0b3JNYXRjaCBTZWxlY3RvckNoZWNrZXI6OmNoZWNrU2VsZWN0b3IoQ1NTU2VsZWN0b3IqIHNl
bCwKICAgICAgICAgICAgIGlmICghbiB8fCAhbi0+aXNFbGVtZW50Tm9kZSgpKQogICAgICAgICAg
ICAgICAgIHJldHVybiBTZWxlY3RvckZhaWxzQ29tcGxldGVseTsKICAgICAgICAgICAgIGUgPSBz
dGF0aWNfY2FzdDxFbGVtZW50Kj4obik7Ci0gICAgICAgICAgICByZXR1cm4gY2hlY2tTZWxlY3Rv
cihzZWwsIGUsIGR5bmFtaWNQc2V1ZG8sIGZhbHNlLCB2aXNpdGVkTWF0Y2hUeXBlKTsKKyAgICAg
ICAgICAgIHJldHVybiBjaGVja1NlbGVjdG9yKHNlbCwgZSwgc2NvcGUsIGR5bmFtaWNQc2V1ZG8s
IGZhbHNlLCB2aXNpdGVkTWF0Y2hUeXBlKTsKICAgICAgICAgfQogICAgIGNhc2UgQ1NTU2VsZWN0
b3I6OkRpcmVjdEFkamFjZW50OgogICAgICAgICB7CkBAIC00OTQsNyArNTA4LDcgQEAgU2VsZWN0
b3JDaGVja2VyOjpTZWxlY3Rvck1hdGNoIFNlbGVjdG9yQ2hlY2tlcjo6Y2hlY2tTZWxlY3RvcihD
U1NTZWxlY3Rvciogc2VsLAogICAgICAgICAgICAgaWYgKCFuKQogICAgICAgICAgICAgICAgIHJl
dHVybiBTZWxlY3RvckZhaWxzTG9jYWxseTsKICAgICAgICAgICAgIGUgPSBzdGF0aWNfY2FzdDxF
bGVtZW50Kj4obik7Ci0gICAgICAgICAgICByZXR1cm4gY2hlY2tTZWxlY3RvcihzZWwsIGUsIGR5
bmFtaWNQc2V1ZG8sIGZhbHNlLCB2aXNpdGVkTWF0Y2hUeXBlKTsKKyAgICAgICAgICAgIHJldHVy
biBjaGVja1NlbGVjdG9yKHNlbCwgZSwgc2NvcGUsIGR5bmFtaWNQc2V1ZG8sIGZhbHNlLCB2aXNp
dGVkTWF0Y2hUeXBlKTsKICAgICAgICAgfQogICAgIGNhc2UgQ1NTU2VsZWN0b3I6OkluZGlyZWN0
QWRqYWNlbnQ6CiAgICAgICAgIGlmICghbV9pc0NvbGxlY3RpbmdSdWxlc09ubHkgJiYgZS0+cGFy
ZW50Tm9kZSgpICYmIGUtPnBhcmVudE5vZGUoKS0+aXNFbGVtZW50Tm9kZSgpKSB7CkBAIC01MDks
NyArNTIzLDcgQEAgU2VsZWN0b3JDaGVja2VyOjpTZWxlY3Rvck1hdGNoIFNlbGVjdG9yQ2hlY2tl
cjo6Y2hlY2tTZWxlY3RvcihDU1NTZWxlY3Rvciogc2VsLAogICAgICAgICAgICAgaWYgKCFuKQog
ICAgICAgICAgICAgICAgIHJldHVybiBTZWxlY3RvckZhaWxzTG9jYWxseTsKICAgICAgICAgICAg
IGUgPSBzdGF0aWNfY2FzdDxFbGVtZW50Kj4obik7Ci0gICAgICAgICAgICBTZWxlY3Rvck1hdGNo
IG1hdGNoID0gY2hlY2tTZWxlY3RvcihzZWwsIGUsIGR5bmFtaWNQc2V1ZG8sIGZhbHNlLCB2aXNp
dGVkTWF0Y2hUeXBlKTsKKyAgICAgICAgICAgIFNlbGVjdG9yTWF0Y2ggbWF0Y2ggPSBjaGVja1Nl
bGVjdG9yKHNlbCwgZSwgc2NvcGUsIGR5bmFtaWNQc2V1ZG8sIGZhbHNlLCB2aXNpdGVkTWF0Y2hU
eXBlKTsKICAgICAgICAgICAgIGlmIChtYXRjaCAhPSBTZWxlY3RvckZhaWxzTG9jYWxseSkKICAg
ICAgICAgICAgICAgICByZXR1cm4gbWF0Y2g7CiAgICAgICAgIH07CkBAIC01MjEsMTQgKzUzNSwx
NCBAQCBTZWxlY3RvckNoZWNrZXI6OlNlbGVjdG9yTWF0Y2ggU2VsZWN0b3JDaGVja2VyOjpjaGVj
a1NlbGVjdG9yKENTU1NlbGVjdG9yKiBzZWwsCiAgICAgICAgIGlmICgoZWxlbWVudFN0eWxlIHx8
IG1faXNDb2xsZWN0aW5nUnVsZXNPbmx5KSAmJiBkeW5hbWljUHNldWRvICE9IE5PUFNFVURPICYm
IGR5bmFtaWNQc2V1ZG8gIT0gU0VMRUNUSU9OCiAgICAgICAgICAgICAgJiYgISgoUmVuZGVyU2Ny
b2xsYmFyOjpzY3JvbGxiYXJGb3JTdHlsZVJlc29sdmUoKSB8fCBkeW5hbWljUHNldWRvID09IFND
Uk9MTEJBUl9DT1JORVIgfHwgZHluYW1pY1BzZXVkbyA9PSBSRVNJWkVSKSAmJiBzZWwtPm1fbWF0
Y2ggPT0gQ1NTU2VsZWN0b3I6OlBzZXVkb0NsYXNzKSkKICAgICAgICAgICAgIHJldHVybiBTZWxl
Y3RvckZhaWxzQ29tcGxldGVseTsKLSAgICAgICAgcmV0dXJuIGNoZWNrU2VsZWN0b3Ioc2VsLCBl
LCBkeW5hbWljUHNldWRvLCB0cnVlLCB2aXNpdGVkTWF0Y2hUeXBlLCBlbGVtZW50U3R5bGUsIGVs
ZW1lbnRQYXJlbnRTdHlsZSk7CisgICAgICAgIHJldHVybiBjaGVja1NlbGVjdG9yKHNlbCwgZSwg
c2NvcGUsIGR5bmFtaWNQc2V1ZG8sIHRydWUsIHZpc2l0ZWRNYXRjaFR5cGUsIGVsZW1lbnRTdHls
ZSwgZWxlbWVudFBhcmVudFN0eWxlKTsKICAgICBjYXNlIENTU1NlbGVjdG9yOjpTaGFkb3dEZXNj
ZW5kYW50OgogICAgICAgICB7CiAgICAgICAgICAgICBOb2RlKiBzaGFkb3dIb3N0Tm9kZSA9IGUt
PnNoYWRvd0FuY2VzdG9yTm9kZSgpOwogICAgICAgICAgICAgaWYgKHNoYWRvd0hvc3ROb2RlID09
IGUgfHwgIXNoYWRvd0hvc3ROb2RlLT5pc0VsZW1lbnROb2RlKCkpCiAgICAgICAgICAgICAgICAg
cmV0dXJuIFNlbGVjdG9yRmFpbHNDb21wbGV0ZWx5OwogICAgICAgICAgICAgZSA9IHN0YXRpY19j
YXN0PEVsZW1lbnQqPihzaGFkb3dIb3N0Tm9kZSk7Ci0gICAgICAgICAgICByZXR1cm4gY2hlY2tT
ZWxlY3RvcihzZWwsIGUsIGR5bmFtaWNQc2V1ZG8sIGZhbHNlLCB2aXNpdGVkTWF0Y2hUeXBlKTsK
KyAgICAgICAgICAgIHJldHVybiBjaGVja1NlbGVjdG9yKHNlbCwgZSwgc2NvcGUsIGR5bmFtaWNQ
c2V1ZG8sIGZhbHNlLCB2aXNpdGVkTWF0Y2hUeXBlKTsKICAgICAgICAgfQogICAgIH0KIApAQCAt
NjgwLDcgKzY5NCwxNSBAQCBzdGF0aWMgYm9vbCBhbnlBdHRyaWJ1dGVNYXRjaGVzKE5hbWVkTm9k
ZU1hcCogYXR0cmlidXRlcywgQ1NTU2VsZWN0b3I6Ok1hdGNoIG1hdAogICAgIHJldHVybiBmYWxz
ZTsKIH0KIAotYm9vbCBTZWxlY3RvckNoZWNrZXI6OmNoZWNrT25lU2VsZWN0b3IoQ1NTU2VsZWN0
b3IqIHNlbCwgRWxlbWVudCogZSwgUHNldWRvSWQmIGR5bmFtaWNQc2V1ZG8sIGJvb2wgaXNTdWJT
ZWxlY3RvciwgVmlzaXRlZE1hdGNoVHlwZSB2aXNpdGVkTWF0Y2hUeXBlLCBSZW5kZXJTdHlsZSog
ZWxlbWVudFN0eWxlLCBSZW5kZXJTdHlsZSogZWxlbWVudFBhcmVudFN0eWxlKSBjb25zdAorYm9v
bCBTZWxlY3RvckNoZWNrZXI6OmNoZWNrT25lU2VsZWN0b3IoCisgICAgQ1NTU2VsZWN0b3IqIHNl
bCwKKyAgICBFbGVtZW50KiBlLAorICAgIGNvbnN0IEVsZW1lbnQqIHNjb3BlLAorICAgIFBzZXVk
b0lkJiBkeW5hbWljUHNldWRvLAorICAgIGJvb2wgaXNTdWJTZWxlY3RvciwKKyAgICBWaXNpdGVk
TWF0Y2hUeXBlIHZpc2l0ZWRNYXRjaFR5cGUsCisgICAgUmVuZGVyU3R5bGUqIGVsZW1lbnRTdHls
ZSwKKyAgICBSZW5kZXJTdHlsZSogZWxlbWVudFBhcmVudFN0eWxlKSBjb25zdAogewogICAgIEFT
U0VSVChlKTsKICAgICBpZiAoIVNlbGVjdG9yQ2hlY2tlcjo6dGFnTWF0Y2hlcyhlLCBzZWwpKQpA
QCAtNzE3LDcgKzczOSw3IEBAIGJvb2wgU2VsZWN0b3JDaGVja2VyOjpjaGVja09uZVNlbGVjdG9y
KENTU1NlbGVjdG9yKiBzZWwsIEVsZW1lbnQqIGUsIFBzZXVkb0lkJiBkCiAgICAgICAgICAgICAg
ICAgLy8gV2Ugc2VsZWN0IGJldHdlZW4gOnZpc2l0ZWQgYW5kIDpsaW5rIHdoZW4gYXBwbHlpbmcu
IFdlIGRvbid0IGtub3cgd2hpY2ggb25lIGFwcGxpZWQgKG9yIG5vdCkgeWV0LgogICAgICAgICAg
ICAgICAgIGlmIChzdWJTZWwtPnBzZXVkb1R5cGUoKSA9PSBDU1NTZWxlY3Rvcjo6UHNldWRvVmlz
aXRlZCB8fCAoc3ViU2VsLT5wc2V1ZG9UeXBlKCkgPT0gQ1NTU2VsZWN0b3I6OlBzZXVkb0xpbmsg
JiYgdmlzaXRlZE1hdGNoVHlwZSA9PSBWaXNpdGVkTWF0Y2hFbmFibGVkKSkKICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgICAgICAgaWYgKCFjaGVja09uZVNlbGVj
dG9yKHN1YlNlbCwgZSwgZHluYW1pY1BzZXVkbywgdHJ1ZSwgdmlzaXRlZE1hdGNoVHlwZSwgZWxl
bWVudFN0eWxlLCBlbGVtZW50UGFyZW50U3R5bGUpKQorICAgICAgICAgICAgICAgIGlmICghY2hl
Y2tPbmVTZWxlY3RvcihzdWJTZWwsIGUsIHNjb3BlLCBkeW5hbWljUHNldWRvLCB0cnVlLCB2aXNp
dGVkTWF0Y2hUeXBlLCBlbGVtZW50U3R5bGUsIGVsZW1lbnRQYXJlbnRTdHlsZSkpCiAgICAgICAg
ICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2Ug
aWYgKGR5bmFtaWNQc2V1ZG8gIT0gTk9QU0VVRE8gJiYgKFJlbmRlclNjcm9sbGJhcjo6c2Nyb2xs
YmFyRm9yU3R5bGVSZXNvbHZlKCkgfHwgZHluYW1pY1BzZXVkbyA9PSBTQ1JPTExCQVJfQ09STkVS
IHx8IGR5bmFtaWNQc2V1ZG8gPT0gUkVTSVpFUikpIHsKQEAgLTEwMTgsNyArMTA0MCw3IEBAIGJv
b2wgU2VsZWN0b3JDaGVja2VyOjpjaGVja09uZVNlbGVjdG9yKENTU1NlbGVjdG9yKiBzZWwsIEVs
ZW1lbnQqIGUsIFBzZXVkb0lkJiBkCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBD
U1NTZWxlY3Rvcjo6UHNldWRvQW55OgogICAgICAgICAgICAgZm9yIChDU1NTZWxlY3Rvciogc2Vs
ZWN0b3IgPSBzZWwtPnNlbGVjdG9yTGlzdCgpLT5maXJzdCgpOyBzZWxlY3Rvcjsgc2VsZWN0b3Ig
PSBDU1NTZWxlY3Rvckxpc3Q6Om5leHQoc2VsZWN0b3IpKSB7Ci0gICAgICAgICAgICAgICAgaWYg
KGNoZWNrU2VsZWN0b3Ioc2VsZWN0b3IsIGUsIGR5bmFtaWNQc2V1ZG8sIHRydWUsIHZpc2l0ZWRN
YXRjaFR5cGUsIGVsZW1lbnRTdHlsZSwgZWxlbWVudFBhcmVudFN0eWxlKSA9PSBTZWxlY3Rvck1h
dGNoZXMpCisgICAgICAgICAgICAgICAgaWYgKGNoZWNrU2VsZWN0b3Ioc2VsZWN0b3IsIGUsIHNj
b3BlLCBkeW5hbWljUHNldWRvLCB0cnVlLCB2aXNpdGVkTWF0Y2hUeXBlLCBlbGVtZW50U3R5bGUs
IGVsZW1lbnRQYXJlbnRTdHlsZSkgPT0gU2VsZWN0b3JNYXRjaGVzKQogICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGJyZWFrOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL1NlbGVjdG9yQ2hlY2tlci5oIGIvU291cmNlL1dl
YkNvcmUvY3NzL1NlbGVjdG9yQ2hlY2tlci5oCmluZGV4IDc2MGJhNTIwN2JlNTc0YzVkZmU4YTlh
MDRiOTcwMGU0ZDBjZGYyOGQuLmU1OTJlYTE5NjQ4NmZmNDA3NmNiNjg0ZTExOTA0YTNhYjIwZTJm
NmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9TZWxlY3RvckNoZWNrZXIuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9jc3MvU2VsZWN0b3JDaGVja2VyLmgKQEAgLTUxLDEwICs1MSwxMSBA
QCBwdWJsaWM6CiAKICAgICBlbnVtIFNlbGVjdG9yTWF0Y2ggeyBTZWxlY3Rvck1hdGNoZXMsIFNl
bGVjdG9yRmFpbHNMb2NhbGx5LCBTZWxlY3RvckZhaWxzQ29tcGxldGVseSB9OwogICAgIGVudW0g
VmlzaXRlZE1hdGNoVHlwZSB7IFZpc2l0ZWRNYXRjaERpc2FibGVkLCBWaXNpdGVkTWF0Y2hFbmFi
bGVkIH07Ci0gICAgYm9vbCBjaGVja1NlbGVjdG9yKENTU1NlbGVjdG9yKiwgRWxlbWVudCosIGJv
b2wgaXNGYXN0Q2hlY2thYmxlU2VsZWN0b3IgPSBmYWxzZSkgY29uc3Q7Ci0gICAgU2VsZWN0b3JN
YXRjaCBjaGVja1NlbGVjdG9yKENTU1NlbGVjdG9yKiwgRWxlbWVudCosIFBzZXVkb0lkJiBkeW5h
bWljUHNldWRvLCBib29sIGlzU3ViU2VsZWN0b3IsIFZpc2l0ZWRNYXRjaFR5cGUsIFJlbmRlclN0
eWxlKiA9IDAsIFJlbmRlclN0eWxlKiBlbGVtZW50UGFyZW50U3R5bGUgPSAwKSBjb25zdDsKKwor
ICAgIGJvb2wgY2hlY2tTZWxlY3RvcihDU1NTZWxlY3RvciosIEVsZW1lbnQqLCBjb25zdCBFbGVt
ZW50KiBzY29wZSwgYm9vbCBpc0Zhc3RDaGVja2FibGVTZWxlY3RvciA9IGZhbHNlKSBjb25zdDsK
KyAgICBTZWxlY3Rvck1hdGNoIGNoZWNrU2VsZWN0b3IoQ1NTU2VsZWN0b3IqLCBFbGVtZW50Kiwg
Y29uc3QgRWxlbWVudCogc2NvcGUsIFBzZXVkb0lkJiBkeW5hbWljUHNldWRvLCBib29sIGlzU3Vi
U2VsZWN0b3IsIFZpc2l0ZWRNYXRjaFR5cGUsIFJlbmRlclN0eWxlKiA9IDAsIFJlbmRlclN0eWxl
KiBlbGVtZW50UGFyZW50U3R5bGUgPSAwKSBjb25zdDsKICAgICBzdGF0aWMgYm9vbCBpc0Zhc3RD
aGVja2FibGVTZWxlY3Rvcihjb25zdCBDU1NTZWxlY3RvciopOwotICAgIGJvb2wgZmFzdENoZWNr
U2VsZWN0b3IoY29uc3QgQ1NTU2VsZWN0b3IqLCBjb25zdCBFbGVtZW50KikgY29uc3Q7CisgICAg
Ym9vbCBmYXN0Q2hlY2tTZWxlY3Rvcihjb25zdCBDU1NTZWxlY3RvciosIGNvbnN0IEVsZW1lbnQq
LCBjb25zdCBFbGVtZW50KiBzY29wZSkgY29uc3Q7CiAKICAgICB0ZW1wbGF0ZSA8dW5zaWduZWQg
bWF4aW11bUlkZW50aWZpZXJDb3VudD4KICAgICBpbmxpbmUgYm9vbCBmYXN0UmVqZWN0U2VsZWN0
b3IoY29uc3QgdW5zaWduZWQqIGlkZW50aWZpZXJIYXNoZXMpIGNvbnN0OwpAQCAtOTAsOCArOTEs
MTMgQEAgcHVibGljOgogICAgIGVudW0gTGlua01hdGNoTWFzayB7IE1hdGNoTGluayA9IDEsIE1h
dGNoVmlzaXRlZCA9IDIsIE1hdGNoQWxsID0gTWF0Y2hMaW5rIHwgTWF0Y2hWaXNpdGVkIH07CiAg
ICAgc3RhdGljIHVuc2lnbmVkIGRldGVybWluZUxpbmtNYXRjaFR5cGUoY29uc3QgQ1NTU2VsZWN0
b3IqKTsKIAorICAgIC8vIFRoZSBmb2xsb3dpbmcgbWV0aG9kcyB3b3JrIG9ubHkgd2l0aCBhIGNv
bnNpc3RlbnQgUGFyZW50U3RhY2tGcmFtZSB2ZWN0b3IKKyAgICBFbGVtZW50KiBnZXRFbGVtZW50
V2l0aEluZGV4KGludCBpbmRleCkgY29uc3Q7IC8vIEluZGV4IGVsZW1lbnRzLCB3aXRoIHRoZSBy
b290IGVsZW1lbnQgc3RhcnRpbmcgYXQgMC4KKyAgICBpbnQgZ2V0SW5uZXJtb3N0U3R5bGVTY29w
ZUVsZW1lbnRJbmRleCgpIGNvbnN0OyAvLyBSZXR1cm4gdGhlIGluZGV4IG9mIHRoZSBlbGVtZW50
IHRoYXQgY29udGFpbnMgdGhlIGNsb3Nlc3QgPHN0eWxlIHNjb3BlZD4KKyAgICBpbnQgZ2V0RW5j
bG9zaW5nU3R5bGVTY29wZUVsZW1lbnRJbmRleChpbnQgaW5kZXgpOyAvLyBSZXR1cm4gdGhlIGlu
ZGV4IG9mIHRoZSBjbG9zZXN0IGFuY2VzdG9yICghKSBlbGVtZW50IHRoYXQgY29udGFpbnMgPHN0
eWxlIHNjb3BlZD4sIHN0YXJ0aW5nIGZyb20gdGhlIGdpdmVuIGluZGV4CisKIHByaXZhdGU6Ci0g
ICAgYm9vbCBjaGVja09uZVNlbGVjdG9yKENTU1NlbGVjdG9yKiwgRWxlbWVudCosIFBzZXVkb0lk
JiBkeW5hbWljUHNldWRvLCBib29sIGlzU3ViU2VsZWN0b3IsIFZpc2l0ZWRNYXRjaFR5cGUsIFJl
bmRlclN0eWxlKiwgUmVuZGVyU3R5bGUqIGVsZW1lbnRQYXJlbnRTdHlsZSkgY29uc3Q7CisgICAg
Ym9vbCBjaGVja09uZVNlbGVjdG9yKENTU1NlbGVjdG9yKiwgRWxlbWVudCosIGNvbnN0IEVsZW1l
bnQqIHNjb3BlLCBQc2V1ZG9JZCYgZHluYW1pY1BzZXVkbywgYm9vbCBpc1N1YlNlbGVjdG9yLCBW
aXNpdGVkTWF0Y2hUeXBlLCBSZW5kZXJTdHlsZSosIFJlbmRlclN0eWxlKiBlbGVtZW50UGFyZW50
U3R5bGUpIGNvbnN0OwogICAgIGJvb2wgY2hlY2tTY3JvbGxiYXJQc2V1ZG9DbGFzcyhDU1NTZWxl
Y3RvciosIFBzZXVkb0lkJiBkeW5hbWljUHNldWRvKSBjb25zdDsKICAgICBzdGF0aWMgYm9vbCBp
c0ZyYW1lRm9jdXNlZChjb25zdCBFbGVtZW50Kik7CiAKQEAgLTExMiw5ICsxMTgsOSBAQCBwcml2
YXRlOgogICAgIG11dGFibGUgSGFzaFNldDxMaW5rSGFzaCwgTGlua0hhc2hIYXNoPiBtX2xpbmtz
Q2hlY2tlZEZvclZpc2l0ZWRTdGF0ZTsKIAogICAgIHN0cnVjdCBQYXJlbnRTdGFja0ZyYW1lIHsK
LSAgICAgICAgUGFyZW50U3RhY2tGcmFtZSgpIHsgfQotICAgICAgICBQYXJlbnRTdGFja0ZyYW1l
KEVsZW1lbnQqIGVsZW1lbnQpIDogZWxlbWVudChlbGVtZW50KSB7IH0KLSAgICAgICAgRWxlbWVu
dCogZWxlbWVudDsKKyAgICAgICAgUGFyZW50U3RhY2tGcmFtZShFbGVtZW50KiBlbGVtZW50LCBz
aXplX3Qgc3R5bGVTY29wZUZyYW1lSW5kZXgpIDogZWxlbWVudChlbGVtZW50KSwgY2xvc2VzdFN0
eWxlU2NvcGVGcmFtZUluZGV4KHN0eWxlU2NvcGVGcmFtZUluZGV4KSB7IH0KKyAgICAgICAgRWxl
bWVudCogY29uc3QgZWxlbWVudDsKKyAgICAgICAgY29uc3QgaW50IGNsb3Nlc3RTdHlsZVNjb3Bl
RnJhbWVJbmRleDsgLy8gaW5kZXggb2YgY2xvc2VzdCBQYXJlbnRTdGFja0ZyYW1lIHRoYXQgcG9p
bnRzIHRvIGFuIGVsZW1lbnQgdGhhdCBpcyBhIHN0eWxlIHNjb3BlIChtYXkgYmUgdGhpcyksIG9y
IC0xCiAgICAgICAgIFZlY3Rvcjx1bnNpZ25lZCwgND4gaWRlbnRpZmllckhhc2hlczsKICAgICB9
OwogICAgIFZlY3RvcjxQYXJlbnRTdGFja0ZyYW1lPiBtX3BhcmVudFN0YWNrOwpAQCAtMjAwLDYg
KzIwNiwyNCBAQCBpbmxpbmUgYm9vbCBTZWxlY3RvckNoZWNrZXI6OmZhc3RDaGVja1JpZ2h0bW9z
dEF0dHJpYnV0ZVNlbGVjdG9yKGNvbnN0IEVsZW1lbnQqCiAgICAgcmV0dXJuIHRydWU7CiB9CiAK
K2lubGluZSBFbGVtZW50KiBTZWxlY3RvckNoZWNrZXI6OmdldEVsZW1lbnRXaXRoSW5kZXgoaW50
IGluZGV4KSBjb25zdAoreworICAgIEFTU0VSVChpbmRleCA+PSAwKTsKKyAgICByZXR1cm4gbV9w
YXJlbnRTdGFjay5hdChpbmRleCkuZWxlbWVudDsKK30KKworaW5saW5lIGludCBTZWxlY3RvckNo
ZWNrZXI6OmdldElubmVybW9zdFN0eWxlU2NvcGVFbGVtZW50SW5kZXgoKSBjb25zdAoreworICAg
IHJldHVybiBtX3BhcmVudFN0YWNrLmlzRW1wdHkoKSA/IC0xIDogbV9wYXJlbnRTdGFjay5sYXN0
KCkuY2xvc2VzdFN0eWxlU2NvcGVGcmFtZUluZGV4OworfQorCitpbmxpbmUgaW50IFNlbGVjdG9y
Q2hlY2tlcjo6Z2V0RW5jbG9zaW5nU3R5bGVTY29wZUVsZW1lbnRJbmRleChpbnQgaW5kZXgpCit7
CisgICAgQVNTRVJUKHN0YXRpY19jYXN0PGludD4obV9wYXJlbnRTdGFjay5zaXplKCkpID49IGlu
ZGV4KTsKKyAgICByZXR1cm4gaW5kZXggPiAwID8gbV9wYXJlbnRTdGFjay5hdChpbmRleCAtIDEp
LmNsb3Nlc3RTdHlsZVNjb3BlRnJhbWVJbmRleCA6IC0xOworfQorCisKIH0KIAogI2VuZGlmCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9kb20vRWxlbWVudC5jcHAKaW5kZXggYzRlY2YxMjA4MjNhNzU2MWRjMDkzZmEwNmU2NzgzMzJl
ZTkwNTIwNi4uMTMyOGIyN2E2OTM0ZWRlYjY0MzEwZDk4MzY3YTE3YTRiMGM3MDQzMSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2RvbS9FbGVtZW50LmNwcApAQCAtMTkxMiw3ICsxOTEyLDcgQEAgYm9vbCBFbGVtZW50Ojp3ZWJr
aXRNYXRjaGVzU2VsZWN0b3IoY29uc3QgU3RyaW5nJiBzZWxlY3RvciwgRXhjZXB0aW9uQ29kZSYg
ZWMpCiAKICAgICBTZWxlY3RvckNoZWNrZXIgc2VsZWN0b3JDaGVja2VyKGRvY3VtZW50KCksIHN0
cmljdFBhcnNpbmcpOwogICAgIGZvciAoQ1NTU2VsZWN0b3IqIHNlbGVjdG9yID0gc2VsZWN0b3JM
aXN0LmZpcnN0KCk7IHNlbGVjdG9yOyBzZWxlY3RvciA9IENTU1NlbGVjdG9yTGlzdDo6bmV4dChz
ZWxlY3RvcikpIHsKLSAgICAgICAgaWYgKHNlbGVjdG9yQ2hlY2tlci5jaGVja1NlbGVjdG9yKHNl
bGVjdG9yLCB0aGlzKSkKKyAgICAgICAgaWYgKHNlbGVjdG9yQ2hlY2tlci5jaGVja1NlbGVjdG9y
KHNlbGVjdG9yLCB0aGlzLCAwKSkKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL1NlbGVjdG9yUXVlcnkuY3BwIGIvU291cmNl
L1dlYkNvcmUvZG9tL1NlbGVjdG9yUXVlcnkuY3BwCmluZGV4IDVkZmYwM2NiNzM2MTU0NWVmNWVl
ZDhmODcxODhmMGVlZTNlZDQyYTguLjc1ZTJlNWU4YTYxY2Q1ODk3OTdmYmNkMDQ1ZjNjZjgzMGE5
Yjg5NmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9TZWxlY3RvclF1ZXJ5LmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vU2VsZWN0b3JRdWVyeS5jcHAKQEAgLTQxLDE3ICs0MSwx
NyBAQCBTZWxlY3RvclF1ZXJ5OjpTZWxlY3RvclF1ZXJ5KE5vZGUqIHJvb3ROb2RlLCBjb25zdCBD
U1NTZWxlY3Rvckxpc3QmIHNlbGVjdG9yTGlzdAogICAgICAgICBtX3NlbGVjdG9ycy5hcHBlbmQo
U2VsZWN0b3JEYXRhKHNlbGVjdG9yLCBTZWxlY3RvckNoZWNrZXI6OmlzRmFzdENoZWNrYWJsZVNl
bGVjdG9yKHNlbGVjdG9yKSkpOwogfQogICAgIAotUGFzc1JlZlB0cjxOb2RlTGlzdD4gU2VsZWN0
b3JRdWVyeTo6cXVlcnlBbGwoKSBjb25zdAorUGFzc1JlZlB0cjxOb2RlTGlzdD4gU2VsZWN0b3JR
dWVyeTo6cXVlcnlBbGwoY29uc3QgRWxlbWVudCogc2NvcGUpIGNvbnN0CiB7CiAgICAgVmVjdG9y
PFJlZlB0cjxOb2RlPiA+IHJlc3VsdDsKLSAgICBleGVjdXRlPGZhbHNlPihyZXN1bHQpOworICAg
IGV4ZWN1dGU8ZmFsc2U+KHNjb3BlLCByZXN1bHQpOwogICAgIHJldHVybiBTdGF0aWNOb2RlTGlz
dDo6YWRvcHQocmVzdWx0KTsKIH0KIAotUGFzc1JlZlB0cjxFbGVtZW50PiBTZWxlY3RvclF1ZXJ5
OjpxdWVyeUZpcnN0KCkgY29uc3QgCitQYXNzUmVmUHRyPEVsZW1lbnQ+IFNlbGVjdG9yUXVlcnk6
OnF1ZXJ5Rmlyc3QoY29uc3QgRWxlbWVudCogc2NvcGUpIGNvbnN0IAogeyAKICAgICBWZWN0b3I8
UmVmUHRyPE5vZGU+ID4gcmVzdWx0OwotICAgIGV4ZWN1dGU8dHJ1ZT4ocmVzdWx0KTsKKyAgICBl
eGVjdXRlPHRydWU+KHNjb3BlLCByZXN1bHQpOwogICAgIGlmIChyZXN1bHQuaXNFbXB0eSgpKQog
ICAgICAgICByZXR1cm4gMDsKICAgICBBU1NFUlQocmVzdWx0LnNpemUoKSA9PSAxKTsKQEAgLTc3
LDcgKzc3LDcgQEAgYm9vbCBTZWxlY3RvclF1ZXJ5OjpjYW5Vc2VJZExvb2t1cCgpIGNvbnN0CiB9
CiAKIHRlbXBsYXRlIDxib29sIGZpcnN0TWF0Y2hPbmx5Pgotdm9pZCBTZWxlY3RvclF1ZXJ5Ojpl
eGVjdXRlKFZlY3RvcjxSZWZQdHI8Tm9kZT4gPiYgbWF0Y2hlZEVsZW1lbnRzKSBjb25zdAordm9p
ZCBTZWxlY3RvclF1ZXJ5OjpleGVjdXRlKGNvbnN0IEVsZW1lbnQqIHNjb3BlLCBWZWN0b3I8UmVm
UHRyPE5vZGU+ID4mIG1hdGNoZWRFbGVtZW50cykgY29uc3QKIHsKICAgICBpZiAoY2FuVXNlSWRM
b29rdXAoKSkgewogICAgICAgICBBU1NFUlQobV9zZWxlY3RvcnMuc2l6ZSgpID09IDEpOwpAQCAt
ODUsNyArODUsNyBAQCB2b2lkIFNlbGVjdG9yUXVlcnk6OmV4ZWN1dGUoVmVjdG9yPFJlZlB0cjxO
b2RlPiA+JiBtYXRjaGVkRWxlbWVudHMpIGNvbnN0CiAgICAgICAgIEVsZW1lbnQqIGVsZW1lbnQg
PSBtX3Jvb3ROb2RlLT5kb2N1bWVudCgpLT5nZXRFbGVtZW50QnlJZChzZWxlY3Rvci0+dmFsdWUo
KSk7CiAgICAgICAgIGlmICghZWxlbWVudCB8fCAhKG1fcm9vdE5vZGUtPmlzRG9jdW1lbnROb2Rl
KCkgfHwgZWxlbWVudC0+aXNEZXNjZW5kYW50T2YobV9yb290Tm9kZSkpKQogICAgICAgICAgICAg
cmV0dXJuOwotICAgICAgICBpZiAobV9zZWxlY3RvckNoZWNrZXIuY2hlY2tTZWxlY3RvcihzZWxl
Y3RvciwgZWxlbWVudCwgbV9zZWxlY3RvcnNbMF0uaXNGYXN0Q2hlY2thYmxlKSkKKyAgICAgICAg
aWYgKG1fc2VsZWN0b3JDaGVja2VyLmNoZWNrU2VsZWN0b3Ioc2VsZWN0b3IsIGVsZW1lbnQsIHNj
b3BlLCBtX3NlbGVjdG9yc1swXS5pc0Zhc3RDaGVja2FibGUpKQogICAgICAgICAgICAgbWF0Y2hl
ZEVsZW1lbnRzLmFwcGVuZChlbGVtZW50KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTk3
LDcgKzk3LDcgQEAgdm9pZCBTZWxlY3RvclF1ZXJ5OjpleGVjdXRlKFZlY3RvcjxSZWZQdHI8Tm9k
ZT4gPiYgbWF0Y2hlZEVsZW1lbnRzKSBjb25zdAogICAgICAgICBpZiAobi0+aXNFbGVtZW50Tm9k
ZSgpKSB7CiAgICAgICAgICAgICBFbGVtZW50KiBlbGVtZW50ID0gc3RhdGljX2Nhc3Q8RWxlbWVu
dCo+KG4pOwogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNlbGVjdG9yQ291
bnQ7ICsraSkgewotICAgICAgICAgICAgICAgIGlmIChtX3NlbGVjdG9yQ2hlY2tlci5jaGVja1Nl
bGVjdG9yKG1fc2VsZWN0b3JzW2ldLnNlbGVjdG9yLCBlbGVtZW50LCBtX3NlbGVjdG9yc1tpXS5p
c0Zhc3RDaGVja2FibGUpKSB7CisgICAgICAgICAgICAgICAgaWYgKG1fc2VsZWN0b3JDaGVja2Vy
LmNoZWNrU2VsZWN0b3IobV9zZWxlY3RvcnNbaV0uc2VsZWN0b3IsIGVsZW1lbnQsIHNjb3BlLCBt
X3NlbGVjdG9yc1tpXS5pc0Zhc3RDaGVja2FibGUpKSB7CiAgICAgICAgICAgICAgICAgICAgIG1h
dGNoZWRFbGVtZW50cy5hcHBlbmQoZWxlbWVudCk7CiAgICAgICAgICAgICAgICAgICAgIGlmIChm
aXJzdE1hdGNoT25seSkKICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9TZWxlY3RvclF1ZXJ5LmggYi9Tb3VyY2UvV2ViQ29yZS9k
b20vU2VsZWN0b3JRdWVyeS5oCmluZGV4IGI5Njk4MjM3ODQzYmJjNWVlZjlhYjU3MTRjMmQ2NGVm
MWI4ODE5NzIuLjIwODNhYzc3YTY0N2ZkYjkxMDYwODQ5ZWEzNDE4NzkyYTg1MWExOTEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9TZWxlY3RvclF1ZXJ5LmgKKysrIGIvU291cmNlL1dl
YkNvcmUvZG9tL1NlbGVjdG9yUXVlcnkuaApAQCAtNDIsMTQgKzQyLDE0IEBAIGNsYXNzIFNlbGVj
dG9yUXVlcnkgewogcHVibGljOgogICAgIFNlbGVjdG9yUXVlcnkoTm9kZSogcm9vdE5vZGUsIGNv
bnN0IENTU1NlbGVjdG9yTGlzdCYpOwogICAgIAotICAgIFBhc3NSZWZQdHI8Tm9kZUxpc3Q+IHF1
ZXJ5QWxsKCkgY29uc3Q7Ci0gICAgUGFzc1JlZlB0cjxFbGVtZW50PiBxdWVyeUZpcnN0KCkgY29u
c3Q7CisgICAgUGFzc1JlZlB0cjxOb2RlTGlzdD4gcXVlcnlBbGwoY29uc3QgRWxlbWVudCogc2Nv
cGUgPSAwKSBjb25zdDsKKyAgICBQYXNzUmVmUHRyPEVsZW1lbnQ+IHF1ZXJ5Rmlyc3QoY29uc3Qg
RWxlbWVudCogc2NvcGUgPSAwKSBjb25zdDsKIAogcHJpdmF0ZToKICAgICBib29sIGNhblVzZUlk
TG9va3VwKCkgY29uc3Q7CiAKICAgICB0ZW1wbGF0ZSA8Ym9vbCBmaXJzdE1hdGNoT25seT4KLSAg
ICB2b2lkIGV4ZWN1dGUoVmVjdG9yPFJlZlB0cjxOb2RlPiA+JikgY29uc3Q7CisgICAgdm9pZCBl
eGVjdXRlKGNvbnN0IEVsZW1lbnQqIHNjb3BlLCBWZWN0b3I8UmVmUHRyPE5vZGU+ID4mKSBjb25z
dDsKICAgICAKICAgICBzdHJ1Y3QgU2VsZWN0b3JEYXRhIHsKICAgICAgICAgU2VsZWN0b3JEYXRh
KENTU1NlbGVjdG9yKiBzZWxlY3RvciwgYm9vbCBpc0Zhc3RDaGVja2FibGUpIDogc2VsZWN0b3Io
c2VsZWN0b3IpLCBpc0Zhc3RDaGVja2FibGUoaXNGYXN0Q2hlY2thYmxlKSB7IH0KZGlmZiAtLWdp
dCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCA1
YzljZTk3MGRhMGE1MmNhMDZkMmE1Yzc3ZTU1YjI3YzI4OTViNWQ0Li5mZDg0ODlmYzEyMmMxMjM3
YzEzYjBhMzRhNGQ4OGYzNzY0MmI3OTNlIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDUgKzEsMjggQEAKIDIwMTEtMTEt
MTYgIFJvbGFuZCBTdGVpbmVyICA8cm9sYW5kc3RlaW5lckBjaHJvbWl1bS5vcmc+CiAKKyAgICAg
ICAgQnVnIDY3NzIwIC0gPHN0eWxlIHNjb3BlZD46IEltcGxlbWVudCBzZWxlY3RvciBtYXRjaGlu
ZworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Njc3MjAK
KworICAgICAgICBUZXN0IHRoYXQgPHN0eWxlIHNjb3BlZD4gYWZmZWN0cyBzdHlsZXMgYW5kIGlz
IHVwZGF0ZWQgY29ycmVjdGx5OgorICAgICAgICAtKSBiYXNpYyB0ZXN0CisgICAgICAgIC0pIHRl
c3Qgc2V0dGluZy91bi1zZXR0aW5nIHRoZSAnc2NvcGVkJyBhdHRyaWJ1dGUKKyAgICAgICAgLSkg
dGVzdCBpbnNlcnRpbmcvcmVtb3ZpbmcgYSB3aG9sZSA8c3R5bGUgc2NvcGVkPiBlbGVtZW50CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBmYXN0L2Nz
cy9zdHlsZS1zY29wZWQvc3R5bGUtc2NvcGVkLWF0dGFjaC1leHBlY3RlZC50eHQ6IEFkZGVkLgor
ICAgICAgICAqIGZhc3QvY3NzL3N0eWxlLXNjb3BlZC9zdHlsZS1zY29wZWQtYXR0YWNoLmh0bWw6
IEFkZGVkLgorICAgICAgICAqIGZhc3QvY3NzL3N0eWxlLXNjb3BlZC9zdHlsZS1zY29wZWQtYmFz
aWMtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2Nzcy9zdHlsZS1zY29wZWQv
c3R5bGUtc2NvcGVkLWJhc2ljLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGZhc3QvY3NzL3N0eWxl
LXNjb3BlZC9zdHlsZS1zY29wZWQtZGV0YWNoLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAg
ICogZmFzdC9jc3Mvc3R5bGUtc2NvcGVkL3N0eWxlLXNjb3BlZC1kZXRhY2guaHRtbDogQWRkZWQu
CisgICAgICAgICogZmFzdC9jc3Mvc3R5bGUtc2NvcGVkL3N0eWxlLXNjb3BlZC1yZW1vdmUtc2Nv
cGVkLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogZmFzdC9jc3Mvc3R5bGUtc2NvcGVk
L3N0eWxlLXNjb3BlZC1yZW1vdmUtc2NvcGVkLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGZhc3Qv
Y3NzL3N0eWxlLXNjb3BlZC9zdHlsZS1zY29wZWQtc2V0LXNjb3BlZC1leHBlY3RlZC50eHQ6IEFk
ZGVkLgorICAgICAgICAqIGZhc3QvY3NzL3N0eWxlLXNjb3BlZC9zdHlsZS1zY29wZWQtc2V0LXNj
b3BlZC5odG1sOiBBZGRlZC4KKworMjAxMS0xMS0xNiAgUm9sYW5kIFN0ZWluZXIgIDxyb2xhbmRz
dGVpbmVyQGNocm9taXVtLm9yZz4KKwogICAgICAgICA8c3R5bGUgc2NvcGVkPjogSW1wbGVtZW50
IHJlZ2lzdGVyaW5nIG9mIDxzdHlsZSBzY29wZWQ+IHdpdGggdGhlIHNjb3BpbmcgZWxlbWVudAog
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Njc3OTAKIApk
aWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9jc3Mvc3R5bGUtc2NvcGVkL3N0eWxlLXNjb3Bl
ZC1hdHRhY2gtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvZmFzdC9jc3Mvc3R5bGUtc2NvcGVk
L3N0eWxlLXNjb3BlZC1hdHRhY2gtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjVmZTA2NzFmYWM2
ZTE2ZTMzYTQyYzQyOWFmZWZlZGQxYTM1YWY4Y2QKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRU
ZXN0cy9mYXN0L2Nzcy9zdHlsZS1zY29wZWQvc3R5bGUtc2NvcGVkLWF0dGFjaC1leHBlY3RlZC50
eHQKQEAgLTAsMCArMSwyNyBAQAorVGVzdCBhdHRhY2hpbmcgYSBuZXcgPHN0eWxlIHNjb3BlZD4g
ZWxlbWVudAorCitUZXh0CitUZXh0CisKK1RleHQKK1RleHQKKworVGV4dAorVGV4dAorCistLS0g
T1JJR0lOQUwgLS0tCitTMTogcmdiKDAsIDAsIDApCitQMTogcmdiKDAsIDAsIDApCitTMjogcmdi
KDAsIDAsIDApCitQMjogcmdiKDAsIDAsIDApCitTMzogcmdiKDAsIDAsIDApCitQMzogcmdiKDAs
IDAsIDApCistLS0gQUZURVIgQVRUQUNISU5HIDxTVFlMRSBTQ09QRUQ+IC0tLQorUzE6IHJnYigw
LCAwLCAwKQorUDE6IHJnYigwLCAwLCAwKQorUzI6IHJnYigyNTUsIDAsIDApCitQMjogcmdiKDAs
IDEyOCwgMCkKK1MzOiByZ2IoMCwgMCwgMCkKK1AzOiByZ2IoMCwgMCwgMCkKKy0tLSBGSU5JU0hF
RCAtLS0KKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9jc3Mvc3R5bGUtc2NvcGVkL3N0
eWxlLXNjb3BlZC1hdHRhY2guaHRtbCBiL0xheW91dFRlc3RzL2Zhc3QvY3NzL3N0eWxlLXNjb3Bl
ZC9zdHlsZS1zY29wZWQtYXR0YWNoLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNjAzZGY1NWRlNDliZjZjZmUx
ZjhjNmFkNDBiMGU2NTBjZjhhZTZlNwotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zh
c3QvY3NzL3N0eWxlLXNjb3BlZC9zdHlsZS1zY29wZWQtYXR0YWNoLmh0bWwKQEAgLTAsMCArMSw3
MCBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxoZWFkPgorICAgIDxzY3JpcHQgdHlwZT0i
dGV4dC9qYXZhc2NyaXB0Ij4KKyAgICAgICAgZnVuY3Rpb24gbG9nKG1zZykKKyAgICAgICAgewor
ICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NvbnNvbGUnKS5hcHBlbmRDaGls
ZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShtc2cgKyAnXG4nKSk7CisgICAgICAgIH0KKworICAg
ICAgICBmdW5jdGlvbiB0ZXN0KGlkKQorICAgICAgICB7CisgICAgICAgICAgICB2YXIgZWxlbSA9
IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKTsKKyAgICAgICAgICAgIGxvZyhpZCArICc6ICcg
KyBkb2N1bWVudC5kZWZhdWx0Vmlldy5nZXRDb21wdXRlZFN0eWxlKGVsZW0sIG51bGwpLmdldFBy
b3BlcnR5VmFsdWUoJ2NvbG9yJykpOworICAgICAgICB9CisKKyAgICAgICAgZnVuY3Rpb24gdGVz
dEFsbCgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHRlc3QoJ1MxJyk7CisgICAgICAgICAgICB0
ZXN0KCdQMScpOworICAgICAgICAgICAgdGVzdCgnUzInKTsKKyAgICAgICAgICAgIHRlc3QoJ1Ay
Jyk7CisgICAgICAgICAgICB0ZXN0KCdTMycpOworICAgICAgICAgICAgdGVzdCgnUDMnKTsKKyAg
ICAgICAgfQorCisgICAgICAgIGZ1bmN0aW9uIHJ1blRlc3RzKCkKKyAgICAgICAgeworICAgICAg
ICAgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikgeworICAgICAgICAgICAgICAg
IGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQoKTsKKyAgICAgICAgICAgICAgICBsYXlv
dXRUZXN0Q29udHJvbGxlci53YWl0VW50aWxEb25lKCk7CisgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgIGxvZygnLS0tIE9SSUdJTkFMIC0tLScpOworICAgICAgICAgICAgdGVzdEFsbCgpOwor
CisgICAgICAgICAgICBsb2coJy0tLSBBRlRFUiBBVFRBQ0hJTkcgPFNUWUxFIFNDT1BFRD4gLS0t
Jyk7CisgICAgICAgICAgICB2YXIgZGl2RWxlbSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdE
SVYnKTsKKyAgICAgICAgICAgIHZhciBzdHlsZUVsZW0gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50
KCdzdHlsZScpOworICAgICAgICAgICAgc3R5bGVFbGVtLnNldEF0dHJpYnV0ZSgnc2NvcGVkJywg
dHJ1ZSk7CisgICAgICAgICAgICBzdHlsZUVsZW0uaW5uZXJIVE1MID0gJ2RpdiB7IGNvbG9yOiBy
ZWQ7IH0gcCB7IGNvbG9yOiBncmVlbjsgfSc7CisgICAgICAgICAgICBkaXZFbGVtLmluc2VydEJl
Zm9yZShzdHlsZUVsZW0sIGRpdkVsZW0uZmlyc3RDaGlsZCk7CisgICAgICAgICAgICBzZXRUaW1l
b3V0KGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICAgIHRlc3RBbGwoKTsKKyAgICAgICAgICAg
ICAgICBsb2coJy0tLSBGSU5JU0hFRCAtLS0nKTsKKyAgICAgICAgICAgICAgICBpZiAod2luZG93
LmxheW91dFRlc3RDb250cm9sbGVyKQorICAgICAgICAgICAgICAgICAgICBsYXlvdXRUZXN0Q29u
dHJvbGxlci5ub3RpZnlEb25lKCk7CisgICAgICAgICAgICB9LCAwKTsKKyAgICAgICAgfQorICAg
IDwvc2NyaXB0PgorICAgIDxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyIgc2NvcGVkPgorICAgICAgICBi
b2R5IHsgY29sb3I6IGJsYWNrOyB9CisgICAgPC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5IG9ubG9h
ZD0icnVuVGVzdHMoKTsiPgorICAgIDxwPlRlc3QgYXR0YWNoaW5nIGEgbmV3ICZsdDtzdHlsZSBz
Y29wZWQmZ3Q7IGVsZW1lbnQ8L3A+CisgICAgPGRpdj4KKyAgICAgICAgPHNwYW4gaWQ9IlMxIj5U
ZXh0PC9zcGFuPgorICAgICAgICA8cCBpZD0iUDEiPlRleHQ8L3A+CisgICAgPC9kaXY+CisgICAg
PGRpdiBpZD0iRElWIj4KKyAgICAgICAgPHNwYW4gaWQ9IlMyIj5UZXh0PC9zcGFuPgorICAgICAg
ICA8cCBpZD0iUDIiPlRleHQ8L3A+CisgICAgPC9kaXY+CisgICAgPGRpdj4KKyAgICAgICAgPHNw
YW4gaWQ9IlMzIj5UZXh0PC9zcGFuPgorICAgICAgICA8cCBpZD0iUDMiPlRleHQ8L3A+CisgICAg
PC9kaXY+CisgICAgPHByZSBpZD0iY29uc29sZSI+PC9wcmU+Cis8L2JvZHk+Cis8L2h0bWw+CmRp
ZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2Nzcy9zdHlsZS1zY29wZWQvc3R5bGUtc2NvcGVk
LWJhc2ljLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2Zhc3QvY3NzL3N0eWxlLXNjb3BlZC9z
dHlsZS1zY29wZWQtYmFzaWMtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmJlZmZkNzZjODQ0YTlh
ODI4OTMyYzllM2E1MGNiODMyMTA3ZmZjMzEKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0
cy9mYXN0L2Nzcy9zdHlsZS1zY29wZWQvc3R5bGUtc2NvcGVkLWJhc2ljLWV4cGVjdGVkLnR4dApA
QCAtMCwwICsxLDQ0IEBACitUZXN0IDxzdHlsZSBzY29wZWQ+CisKK1RleHQKK1RleHQKKworVGV4
dAorVGV4dAorVGV4dAorVGV4dAorCitUZXh0CitUZXh0CitUZXh0CitUZXh0CisKK1RleHQKK1Rl
eHQKK1RleHQKK1RleHQKKworVGV4dAorVGV4dAorLS0tIENPTVBVVEVEIFNUWUxFUyAtLS0KK1Mx
OiByZ2IoMCwgMCwgMCkKK1AxOiByZ2IoMCwgMCwgMCkKK1IxOiByZ2IoMCwgMCwgMCkKK0UxOiBy
Z2IoMCwgMCwgMCkKKworUzI6IHJnYigyNTUsIDAsIDApCitQMjogcmdiKDAsIDEyOCwgMCkKK1Iy
OiByZ2IoMCwgMCwgMjU1KQorRTI6IHJnYigyNTUsIDAsIDApCisKK1MzOiByZ2IoMCwgMCwgMCkK
K1AzOiByZ2IoMCwgMCwgMCkKK1IzOiByZ2IoMCwgMCwgMCkKK0UzOiByZ2IoMCwgMCwgMCkKKwor
UzQ6IHJnYigwLCAwLCAwKQorUDQ6IHJnYigwLCAwLCAwKQorUjQ6IHJnYigwLCAwLCAwKQorRTQ6
IHJnYigwLCAwLCAwKQorLS0tIEZJTklTSEVEIC0tLQorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0
cy9mYXN0L2Nzcy9zdHlsZS1zY29wZWQvc3R5bGUtc2NvcGVkLWJhc2ljLmh0bWwgYi9MYXlvdXRU
ZXN0cy9mYXN0L2Nzcy9zdHlsZS1zY29wZWQvc3R5bGUtc2NvcGVkLWJhc2ljLmh0bWwKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uMGJjMjNhY2Y3Y2QwNTgwMDYxOGI0NWU5NWViYzdkNTU1M2JjOTkyYQotLS0gL2Rldi9u
dWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvY3NzL3N0eWxlLXNjb3BlZC9zdHlsZS1zY29wZWQt
YmFzaWMuaHRtbApAQCAtMCwwICsxLDg0IEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGhl
YWQ+CisgICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgorICAgICAgICBmdW5jdGlv
biBsb2cobXNnKQorICAgICAgICB7CisgICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJ
ZCgnY29uc29sZScpLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKG1zZyArICdc
bicpKTsKKyAgICAgICAgfQorCisgICAgICAgIGZ1bmN0aW9uIHRlc3QoaWQpCisgICAgICAgIHsK
KyAgICAgICAgICAgIHZhciBlbGVtID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpOworICAg
ICAgICAgICAgbG9nKGlkICsgJzogJyArIGRvY3VtZW50LmRlZmF1bHRWaWV3LmdldENvbXB1dGVk
U3R5bGUoZWxlbSwgbnVsbCkuZ2V0UHJvcGVydHlWYWx1ZSgnY29sb3InKSk7CisgICAgICAgIH0K
KworICAgICAgICBmdW5jdGlvbiBydW5UZXN0cygpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlm
ICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCisgICAgICAgICAgICAgICAgbGF5b3V0VGVz
dENvbnRyb2xsZXIuZHVtcEFzVGV4dCgpOworCisgICAgICAgICAgICBsb2coJy0tLSBDT01QVVRF
RCBTVFlMRVMgLS0tJyk7CisKKyAgICAgICAgICAgIHRlc3QoJ1MxJyk7CisgICAgICAgICAgICB0
ZXN0KCdQMScpOworICAgICAgICAgICAgdGVzdCgnUjEnKTsKKyAgICAgICAgICAgIHRlc3QoJ0Ux
Jyk7CisgICAgICAgICAgICBsb2coJycpOworICAgICAgICAgICAgdGVzdCgnUzInKTsKKyAgICAg
ICAgICAgIHRlc3QoJ1AyJyk7CisgICAgICAgICAgICB0ZXN0KCdSMicpOworICAgICAgICAgICAg
dGVzdCgnRTInKTsKKyAgICAgICAgICAgIGxvZygnJyk7CisgICAgICAgICAgICB0ZXN0KCdTMycp
OworICAgICAgICAgICAgdGVzdCgnUDMnKTsKKyAgICAgICAgICAgIHRlc3QoJ1IzJyk7CisgICAg
ICAgICAgICB0ZXN0KCdFMycpOworICAgICAgICAgICAgbG9nKCcnKTsKKyAgICAgICAgICAgIHRl
c3QoJ1M0Jyk7CisgICAgICAgICAgICB0ZXN0KCdQNCcpOworICAgICAgICAgICAgdGVzdCgnUjQn
KTsKKyAgICAgICAgICAgIHRlc3QoJ0U0Jyk7CisKKyAgICAgICAgICAgIGxvZygnLS0tIEZJTklT
SEVEIC0tLScpOworICAgICAgICB9CisgICAgPC9zY3JpcHQ+CisgICAgPHN0eWxlIHR5cGU9InRl
eHQvY3NzIj4KKyAgICAgICAgYm9keSB7IGNvbG9yOiBibGFjazsgfQorICAgIDwvc3R5bGU+Cis8
L2hlYWQ+Cis8Ym9keSBvbmxvYWQ9InJ1blRlc3RzKCk7Ij4KKyAgICA8cD5UZXN0ICZsdDtzdHls
ZSBzY29wZWQmZ3Q7PC9wPgorICAgIDxkaXYgY2xhc3M9ImZvbyI+CisgICAgICAgIDxzcGFuIGlk
PSJTMSI+VGV4dDwvc3Bhbj4KKyAgICAgICAgPHAgaWQ9IlAxIj5UZXh0PC9wPgorICAgICAgICA8
cHJlIGlkID0gIlIxIiBjbGFzcz0iYmFyIj5UZXh0PC9wcmU+CisgICAgICAgIDxwcmUgaWQ9IkUx
IiBjbGFzcz0iYmF6Ij5UZXh0PC9wcmU+CisgICAgPC9kaXY+CisgICAgPGRpdiBjbGFzcz0iZm9v
Ij4KKyAgICAgICAgPGRpdj4KKyAgICAgICAgICAgIDxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyIgc2Nv
cGVkPgorICAgICAgICAgICAgICAgIGRpdiB7IGNvbG9yOiByZWQ7IH0KKyAgICAgICAgICAgICAg
ICBwIHsgY29sb3I6IGdyZWVuOyB9CisgICAgICAgICAgICAgICAgZGl2IC5iYXIgeyBjb2xvcjog
Ymx1ZTsgfQorICAgICAgICAgICAgICAgIC5mb28gLmJheiB7IGNvbG9yOiBwdXJwbGU7IH0gLyog
c2hvdWxkIE5PVCBhcHBseSEgKi8KKyAgICAgICAgICAgIDwvc3R5bGU+CisgICAgICAgICAgICA8
c3BhbiBpZD0iUzIiPlRleHQ8L3NwYW4+CisgICAgICAgICAgICA8cCBpZD0iUDIiPlRleHQ8L3A+
CisgICAgICAgICAgICA8cHJlIGlkPSJSMiIgY2xhc3M9ImJhciI+VGV4dDwvcHJlPgorICAgICAg
ICAgICAgPHByZSBpZD0iRTIiIGNsYXNzPSJiYXoiPlRleHQ8L3ByZT4KKyAgICAgICAgPC9kaXY+
CisgICAgICAgIDxzcGFuIGlkPSJTMyI+VGV4dDwvc3Bhbj4KKyAgICAgICAgPHAgaWQ9IlAzIj5U
ZXh0PC9wPgorICAgICAgICA8cHJlIGlkID0gIlIzIiBjbGFzcz0iYmFyIj5UZXh0PC9wcmU+Cisg
ICAgICAgIDxwcmUgaWQ9IkUzIiBjbGFzcz0iYmF6Ij5UZXh0PC9wcmU+CisgICAgPC9kaXY+Cisg
ICAgPGRpdiBjbGFzcz0iZm9vIj4KKyAgICAgICAgPHNwYW4gaWQ9IlM0Ij5UZXh0PC9zcGFuPgor
ICAgICAgICA8cCBpZD0iUDQiPlRleHQ8L3A+CisgICAgICAgIDxwcmUgaWQgPSAiUjQiIGNsYXNz
PSJiYXIiPlRleHQ8L3ByZT4KKyAgICAgICAgPHByZSBpZD0iRTQiIGNsYXNzPSJiYXoiPlRleHQ8
L3ByZT4KKyAgICA8L2Rpdj4KKyAgICA8cHJlIGlkPSJjb25zb2xlIj48L3ByZT4KKzwvYm9keT4K
KzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvY3NzL3N0eWxlLXNjb3BlZC9z
dHlsZS1zY29wZWQtZGV0YWNoLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2Zhc3QvY3NzL3N0
eWxlLXNjb3BlZC9zdHlsZS1zY29wZWQtZGV0YWNoLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5k
N2VmNjUzMTc0MDcyYjc4ODdmN2RmM2RhYmY5MWE5YTczNDBlM2U4Ci0tLSAvZGV2L251bGwKKysr
IGIvTGF5b3V0VGVzdHMvZmFzdC9jc3Mvc3R5bGUtc2NvcGVkL3N0eWxlLXNjb3BlZC1kZXRhY2gt
ZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsMjcgQEAKK1Rlc3QgZGV0YWNoaW5nIGEgPHN0eWxlIHNj
b3BlZD4gZWxlbWVudAorCitUZXh0CitUZXh0CisKK1RleHQKK1RleHQKKworVGV4dAorVGV4dAor
CistLS0gT1JJR0lOQUwgLS0tCitTMTogcmdiKDAsIDAsIDApCitQMTogcmdiKDAsIDAsIDApCitT
MjogcmdiKDI1NSwgMCwgMCkKK1AyOiByZ2IoMCwgMTI4LCAwKQorUzM6IHJnYigwLCAwLCAwKQor
UDM6IHJnYigwLCAwLCAwKQorLS0tIEFGVEVSIERFVEFDSElORyA8U1RZTEUgU0NPUEVEPiAtLS0K
K1MxOiByZ2IoMCwgMCwgMCkKK1AxOiByZ2IoMCwgMCwgMCkKK1MyOiByZ2IoMCwgMCwgMCkKK1Ay
OiByZ2IoMCwgMCwgMCkKK1MzOiByZ2IoMCwgMCwgMCkKK1AzOiByZ2IoMCwgMCwgMCkKKy0tLSBG
SU5JU0hFRCAtLS0KKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9jc3Mvc3R5bGUtc2Nv
cGVkL3N0eWxlLXNjb3BlZC1kZXRhY2guaHRtbCBiL0xheW91dFRlc3RzL2Zhc3QvY3NzL3N0eWxl
LXNjb3BlZC9zdHlsZS1zY29wZWQtZGV0YWNoLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNGM4YmY2YTg2NjEy
NzBmODYxY2I4NTU4YWMzMjdhMTg3NzFmMzllZAotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRl
c3RzL2Zhc3QvY3NzL3N0eWxlLXNjb3BlZC9zdHlsZS1zY29wZWQtZGV0YWNoLmh0bWwKQEAgLTAs
MCArMSw3MiBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxoZWFkPgorICAgIDxzY3JpcHQg
dHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KKyAgICAgICAgZnVuY3Rpb24gbG9nKG1zZykKKyAgICAg
ICAgeworICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NvbnNvbGUnKS5hcHBl
bmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShtc2cgKyAnXG4nKSk7CisgICAgICAgIH0K
KworICAgICAgICBmdW5jdGlvbiB0ZXN0KGlkKQorICAgICAgICB7CisgICAgICAgICAgICB2YXIg
ZWxlbSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKTsKKyAgICAgICAgICAgIGxvZyhpZCAr
ICc6ICcgKyBkb2N1bWVudC5kZWZhdWx0Vmlldy5nZXRDb21wdXRlZFN0eWxlKGVsZW0sIG51bGwp
LmdldFByb3BlcnR5VmFsdWUoJ2NvbG9yJykpOworICAgICAgICB9CisKKyAgICAgICAgZnVuY3Rp
b24gdGVzdEFsbCgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHRlc3QoJ1MxJyk7CisgICAgICAg
ICAgICB0ZXN0KCdQMScpOworICAgICAgICAgICAgdGVzdCgnUzInKTsKKyAgICAgICAgICAgIHRl
c3QoJ1AyJyk7CisgICAgICAgICAgICB0ZXN0KCdTMycpOworICAgICAgICAgICAgdGVzdCgnUDMn
KTsKKyAgICAgICAgfQorCisgICAgICAgIGZ1bmN0aW9uIHJ1blRlc3RzKCkKKyAgICAgICAgewor
ICAgICAgICAgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikgeworICAgICAgICAg
ICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQoKTsKKyAgICAgICAgICAgICAg
ICBsYXlvdXRUZXN0Q29udHJvbGxlci53YWl0VW50aWxEb25lKCk7CisgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgIGxvZygnLS0tIE9SSUdJTkFMIC0tLScpOworICAgICAgICAgICAgdGVzdEFs
bCgpOworCisgICAgICAgICAgICBsb2coJy0tLSBBRlRFUiBERVRBQ0hJTkcgPFNUWUxFIFNDT1BF
RD4gLS0tJyk7CisgICAgICAgICAgICB2YXIgZGl2RWxlbSA9IGRvY3VtZW50LmdldEVsZW1lbnRC
eUlkKCdESVYnKTsKKyAgICAgICAgICAgIHZhciBzdHlsZUVsZW0gPSBkb2N1bWVudC5nZXRFbGVt
ZW50QnlJZCgnU1RZTEUnKTsKKyAgICAgICAgICAgIGRpdkVsZW0ucmVtb3ZlQ2hpbGQoc3R5bGVF
bGVtKTsKKyAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAg
ICAgdGVzdEFsbCgpOworICAgICAgICAgICAgICAgIGxvZygnLS0tIEZJTklTSEVEIC0tLScpOwor
ICAgICAgICAgICAgICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCisgICAgICAg
ICAgICAgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLm5vdGlmeURvbmUoKTsKKyAgICAgICAg
ICAgIH0sIDApOworICAgICAgICB9CisgICAgPC9zY3JpcHQ+CisgICAgPHN0eWxlIHR5cGU9InRl
eHQvY3NzIiBzY29wZWQ+CisgICAgICAgIGJvZHkgeyBjb2xvcjogYmxhY2s7IH0KKyAgICA8L3N0
eWxlPgorPC9oZWFkPgorPGJvZHkgb25sb2FkPSJydW5UZXN0cygpOyI+CisgICAgPHA+VGVzdCBk
ZXRhY2hpbmcgYSAmbHQ7c3R5bGUgc2NvcGVkJmd0OyBlbGVtZW50PC9wPgorICAgIDxkaXY+Cisg
ICAgICAgIDxzcGFuIGlkPSJTMSI+VGV4dDwvc3Bhbj4KKyAgICAgICAgPHAgaWQ9IlAxIj5UZXh0
PC9wPgorICAgIDwvZGl2PgorICAgIDxkaXYgaWQ9IkRJViI+CisgICAgICAgIDxzdHlsZSBpZD0i
U1RZTEUiIHR5cGU9InRleHQvY3NzIiBzY29wZWQ+CisgICAgICAgICAgICBkaXYgeyBjb2xvcjog
cmVkOyB9CisgICAgICAgICAgICBwIHsgY29sb3I6IGdyZWVuOyB9CisgICAgICAgIDwvc3R5bGU+
CisgICAgICAgIDxzcGFuIGlkPSJTMiI+VGV4dDwvc3Bhbj4KKyAgICAgICAgPHAgaWQ9IlAyIj5U
ZXh0PC9wPgorICAgIDwvZGl2PgorICAgIDxkaXY+CisgICAgICAgIDxzcGFuIGlkPSJTMyI+VGV4
dDwvc3Bhbj4KKyAgICAgICAgPHAgaWQ9IlAzIj5UZXh0PC9wPgorICAgIDwvZGl2PgorICAgIDxw
cmUgaWQ9ImNvbnNvbGUiPjwvcHJlPgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5
b3V0VGVzdHMvZmFzdC9jc3Mvc3R5bGUtc2NvcGVkL3N0eWxlLXNjb3BlZC1yZW1vdmUtc2NvcGVk
LWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2Zhc3QvY3NzL3N0eWxlLXNjb3BlZC9zdHlsZS1z
Y29wZWQtcmVtb3ZlLXNjb3BlZC1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uM2EyMDU4N2RmNWFm
ZmY2MmRjMjdmNjJhYWVjNDUwYjMzNzY1Y2FjOAotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRl
c3RzL2Zhc3QvY3NzL3N0eWxlLXNjb3BlZC9zdHlsZS1zY29wZWQtcmVtb3ZlLXNjb3BlZC1leHBl
Y3RlZC50eHQKQEAgLTAsMCArMSwyNyBAQAorVGVzdCByZW1vdmluZyB0aGUgJ3Njb3BlZCcgYXR0
cmlidXRlIG9uIGEgPHN0eWxlPiBlbGVtZW50CisKK1RleHQKK1RleHQKKworVGV4dAorVGV4dAor
CitUZXh0CitUZXh0CisKKy0tLSBPUklHSU5BTCAtLS0KK1MxOiByZ2IoMCwgMCwgMCkKK1AxOiBy
Z2IoMCwgMCwgMCkKK1MyOiByZ2IoMjU1LCAwLCAwKQorUDI6IHJnYigwLCAxMjgsIDApCitTMzog
cmdiKDAsIDAsIDApCitQMzogcmdiKDAsIDAsIDApCistLS0gQUZURVIgVU4tU0VUVElORyBAU0NP
UEVEIC0tLQorUzE6IHJnYigyNTUsIDAsIDApCitQMTogcmdiKDAsIDEyOCwgMCkKK1MyOiByZ2Io
MjU1LCAwLCAwKQorUDI6IHJnYigwLCAxMjgsIDApCitTMzogcmdiKDI1NSwgMCwgMCkKK1AzOiBy
Z2IoMCwgMTI4LCAwKQorLS0tIEZJTklTSEVEIC0tLQorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0
cy9mYXN0L2Nzcy9zdHlsZS1zY29wZWQvc3R5bGUtc2NvcGVkLXJlbW92ZS1zY29wZWQuaHRtbCBi
L0xheW91dFRlc3RzL2Zhc3QvY3NzL3N0eWxlLXNjb3BlZC9zdHlsZS1zY29wZWQtcmVtb3ZlLXNj
b3BlZC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLmVhYWYzNzc0Y2FiMmZhNzRmZDcwYzYxMWFlMDMyYmExMTg0
M2Q3ZWQKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2Nzcy9zdHlsZS1zY29w
ZWQvc3R5bGUtc2NvcGVkLXJlbW92ZS1zY29wZWQuaHRtbApAQCAtMCwwICsxLDcwIEBACis8IURP
Q1RZUEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+CisgICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFz
Y3JpcHQiPgorICAgICAgICBmdW5jdGlvbiBsb2cobXNnKQorICAgICAgICB7CisgICAgICAgICAg
ICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY29uc29sZScpLmFwcGVuZENoaWxkKGRvY3VtZW50
LmNyZWF0ZVRleHROb2RlKG1zZyArICdcbicpKTsKKyAgICAgICAgfQorCisgICAgICAgIGZ1bmN0
aW9uIHRlc3QoaWQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHZhciBlbGVtID0gZG9jdW1lbnQu
Z2V0RWxlbWVudEJ5SWQoaWQpOworICAgICAgICAgICAgbG9nKGlkICsgJzogJyArIGRvY3VtZW50
LmRlZmF1bHRWaWV3LmdldENvbXB1dGVkU3R5bGUoZWxlbSwgbnVsbCkuZ2V0UHJvcGVydHlWYWx1
ZSgnY29sb3InKSk7CisgICAgICAgIH0KKworICAgICAgICBmdW5jdGlvbiB0ZXN0QWxsKCkKKyAg
ICAgICAgeworICAgICAgICAgICAgdGVzdCgnUzEnKTsKKyAgICAgICAgICAgIHRlc3QoJ1AxJyk7
CisgICAgICAgICAgICB0ZXN0KCdTMicpOworICAgICAgICAgICAgdGVzdCgnUDInKTsKKyAgICAg
ICAgICAgIHRlc3QoJ1MzJyk7CisgICAgICAgICAgICB0ZXN0KCdQMycpOworICAgICAgICB9CisK
KyAgICAgICAgZnVuY3Rpb24gcnVuVGVzdHMoKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAo
d2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKSB7CisgICAgICAgICAgICAgICAgbGF5b3V0VGVz
dENvbnRyb2xsZXIuZHVtcEFzVGV4dCgpOworICAgICAgICAgICAgICAgIGxheW91dFRlc3RDb250
cm9sbGVyLndhaXRVbnRpbERvbmUoKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgbG9n
KCctLS0gT1JJR0lOQUwgLS0tJyk7CisgICAgICAgICAgICB0ZXN0QWxsKCk7CisKKyAgICAgICAg
ICAgIGxvZygnLS0tIEFGVEVSIFVOLVNFVFRJTkcgQFNDT1BFRCAtLS0nKTsKKyAgICAgICAgICAg
IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdTVFlMRScpLnJlbW92ZUF0dHJpYnV0ZSgnc2NvcGVk
Jyk7CisgICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICAg
IHRlc3RBbGwoKTsKKyAgICAgICAgICAgICAgICBsb2coJy0tLSBGSU5JU0hFRCAtLS0nKTsKKyAg
ICAgICAgICAgICAgICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQorICAgICAgICAg
ICAgICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5ub3RpZnlEb25lKCk7CisgICAgICAgICAg
ICB9LCAwKTsKKyAgICAgICAgfQorICAgIDwvc2NyaXB0PgorICAgIDxzdHlsZSB0eXBlPSJ0ZXh0
L2NzcyIgc2NvcGVkPgorICAgICAgICBib2R5IHsgY29sb3I6IGJsYWNrOyB9CisgICAgPC9zdHls
ZT4KKzwvaGVhZD4KKzxib2R5IG9ubG9hZD0icnVuVGVzdHMoKTsiPgorICAgIDxwPlRlc3QgcmVt
b3ZpbmcgdGhlICdzY29wZWQnIGF0dHJpYnV0ZSBvbiBhICZsdDtzdHlsZSZndDsgZWxlbWVudDwv
cD4KKyAgICA8ZGl2PgorICAgICAgICA8c3BhbiBpZD0iUzEiPlRleHQ8L3NwYW4+CisgICAgICAg
IDxwIGlkPSJQMSI+VGV4dDwvcD4KKyAgICA8L2Rpdj4KKyAgICA8ZGl2PgorICAgICAgICA8c3R5
bGUgaWQ9IlNUWUxFIiB0eXBlPSJ0ZXh0L2NzcyIgc2NvcGVkPgorICAgICAgICAgICAgZGl2IHsg
Y29sb3I6IHJlZDsgfQorICAgICAgICAgICAgcCB7IGNvbG9yOiBncmVlbjsgfQorICAgICAgICA8
L3N0eWxlPgorICAgICAgICA8c3BhbiBpZD0iUzIiPlRleHQ8L3NwYW4+CisgICAgICAgIDxwIGlk
PSJQMiI+VGV4dDwvcD4KKyAgICA8L2Rpdj4KKyAgICA8ZGl2PgorICAgICAgICA8c3BhbiBpZD0i
UzMiPlRleHQ8L3NwYW4+CisgICAgICAgIDxwIGlkPSJQMyI+VGV4dDwvcD4KKyAgICA8L2Rpdj4K
KyAgICA8cHJlIGlkPSJjb25zb2xlIj48L3ByZT4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdp
dCBhL0xheW91dFRlc3RzL2Zhc3QvY3NzL3N0eWxlLXNjb3BlZC9zdHlsZS1zY29wZWQtc2V0LXNj
b3BlZC1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9mYXN0L2Nzcy9zdHlsZS1zY29wZWQvc3R5
bGUtc2NvcGVkLXNldC1zY29wZWQtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmZhMGM3OTYzYzk3
YzQ3ODAxZTA4NDk2NzUxMTM3MjIyYzQ2NjVkMWMKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRU
ZXN0cy9mYXN0L2Nzcy9zdHlsZS1zY29wZWQvc3R5bGUtc2NvcGVkLXNldC1zY29wZWQtZXhwZWN0
ZWQudHh0CkBAIC0wLDAgKzEsMjcgQEAKK1Rlc3Qgc2V0dGluZyB0aGUgJ3Njb3BlZCcgYXR0cmli
dXRlIG9uIGEgPHN0eWxlPiBlbGVtZW50CisKK1RleHQKK1RleHQKKworVGV4dAorVGV4dAorCitU
ZXh0CitUZXh0CisKKy0tLSBPUklHSU5BTCAtLS0KK1MxOiByZ2IoMjU1LCAwLCAwKQorUDE6IHJn
YigwLCAxMjgsIDApCitTMjogcmdiKDI1NSwgMCwgMCkKK1AyOiByZ2IoMCwgMTI4LCAwKQorUzM6
IHJnYigyNTUsIDAsIDApCitQMzogcmdiKDAsIDEyOCwgMCkKKy0tLSBBRlRFUiBTRVRUSU5HIEBT
Q09QRUQgLS0tCitTMTogcmdiKDAsIDAsIDApCitQMTogcmdiKDAsIDAsIDApCitTMjogcmdiKDI1
NSwgMCwgMCkKK1AyOiByZ2IoMCwgMTI4LCAwKQorUzM6IHJnYigwLCAwLCAwKQorUDM6IHJnYigw
LCAwLCAwKQorLS0tIEZJTklTSEVEIC0tLQorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0
L2Nzcy9zdHlsZS1zY29wZWQvc3R5bGUtc2NvcGVkLXNldC1zY29wZWQuaHRtbCBiL0xheW91dFRl
c3RzL2Zhc3QvY3NzL3N0eWxlLXNjb3BlZC9zdHlsZS1zY29wZWQtc2V0LXNjb3BlZC5odG1sCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjk5MDNiZDQxZTI5OWQwMzUwMWNlZjEwNTQwZmUxOTUwMGM0ZTgyZWUKLS0tIC9k
ZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2Nzcy9zdHlsZS1zY29wZWQvc3R5bGUtc2Nv
cGVkLXNldC1zY29wZWQuaHRtbApAQCAtMCwwICsxLDcwIEBACis8IURPQ1RZUEUgaHRtbD4KKzxo
dG1sPgorPGhlYWQ+CisgICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgorICAgICAg
ICBmdW5jdGlvbiBsb2cobXNnKQorICAgICAgICB7CisgICAgICAgICAgICBkb2N1bWVudC5nZXRF
bGVtZW50QnlJZCgnY29uc29sZScpLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2Rl
KG1zZyArICdcbicpKTsKKyAgICAgICAgfQorCisgICAgICAgIGZ1bmN0aW9uIHRlc3QoaWQpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIHZhciBlbGVtID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQo
aWQpOworICAgICAgICAgICAgbG9nKGlkICsgJzogJyArIGRvY3VtZW50LmRlZmF1bHRWaWV3Lmdl
dENvbXB1dGVkU3R5bGUoZWxlbSwgbnVsbCkuZ2V0UHJvcGVydHlWYWx1ZSgnY29sb3InKSk7Cisg
ICAgICAgIH0KKworICAgICAgICBmdW5jdGlvbiB0ZXN0QWxsKCkKKyAgICAgICAgeworICAgICAg
ICAgICAgdGVzdCgnUzEnKTsKKyAgICAgICAgICAgIHRlc3QoJ1AxJyk7CisgICAgICAgICAgICB0
ZXN0KCdTMicpOworICAgICAgICAgICAgdGVzdCgnUDInKTsKKyAgICAgICAgICAgIHRlc3QoJ1Mz
Jyk7CisgICAgICAgICAgICB0ZXN0KCdQMycpOworICAgICAgICB9CisKKyAgICAgICAgZnVuY3Rp
b24gcnVuVGVzdHMoKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAod2luZG93LmxheW91dFRl
c3RDb250cm9sbGVyKSB7CisgICAgICAgICAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuZHVt
cEFzVGV4dCgpOworICAgICAgICAgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLndhaXRVbnRp
bERvbmUoKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgbG9nKCctLS0gT1JJR0lOQUwg
LS0tJyk7CisgICAgICAgICAgICB0ZXN0QWxsKCk7CisKKyAgICAgICAgICAgIGxvZygnLS0tIEFG
VEVSIFNFVFRJTkcgQFNDT1BFRCAtLS0nKTsKKyAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1l
bnRCeUlkKCdTVFlMRScpLnNldEF0dHJpYnV0ZSgnc2NvcGVkJywgdHJ1ZSk7CisgICAgICAgICAg
ICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICAgIHRlc3RBbGwoKTsKKyAg
ICAgICAgICAgICAgICBsb2coJy0tLSBGSU5JU0hFRCAtLS0nKTsKKyAgICAgICAgICAgICAgICBp
ZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQorICAgICAgICAgICAgICAgICAgICBsYXlv
dXRUZXN0Q29udHJvbGxlci5ub3RpZnlEb25lKCk7CisgICAgICAgICAgICB9LCAwKTsKKyAgICAg
ICAgfQorICAgIDwvc2NyaXB0PgorICAgIDxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyIgc2NvcGVkPgor
ICAgICAgICBib2R5IHsgY29sb3I6IGJsYWNrOyB9CisgICAgPC9zdHlsZT4KKzwvaGVhZD4KKzxi
b2R5IG9ubG9hZD0icnVuVGVzdHMoKTsiPgorICAgIDxwPlRlc3Qgc2V0dGluZyB0aGUgJ3Njb3Bl
ZCcgYXR0cmlidXRlIG9uIGEgJmx0O3N0eWxlJmd0OyBlbGVtZW50PC9wPgorICAgIDxkaXY+Cisg
ICAgICAgIDxzcGFuIGlkPSJTMSI+VGV4dDwvc3Bhbj4KKyAgICAgICAgPHAgaWQ9IlAxIj5UZXh0
PC9wPgorICAgIDwvZGl2PgorICAgIDxkaXY+CisgICAgICAgIDxzdHlsZSBpZD0iU1RZTEUiIHR5
cGU9InRleHQvY3NzIj4KKyAgICAgICAgICAgIGRpdiB7IGNvbG9yOiByZWQ7IH0KKyAgICAgICAg
ICAgIHAgeyBjb2xvcjogZ3JlZW47IH0KKyAgICAgICAgPC9zdHlsZT4KKyAgICAgICAgPHNwYW4g
aWQ9IlMyIj5UZXh0PC9zcGFuPgorICAgICAgICA8cCBpZD0iUDIiPlRleHQ8L3A+CisgICAgPC9k
aXY+CisgICAgPGRpdj4KKyAgICAgICAgPHNwYW4gaWQ9IlMzIj5UZXh0PC9zcGFuPgorICAgICAg
ICA8cCBpZD0iUDMiPlRleHQ8L3A+CisgICAgPC9kaXY+CisgICAgPHByZSBpZD0iY29uc29sZSI+
PC9wcmU+Cis8L2JvZHk+Cis8L2h0bWw+Cg==
</data>
<flag name="review"
          id="115628"
          type_id="1"
          status="-"
          setter="koivisto"
    />
    <flag name="commit-queue"
          id="115629"
          type_id="3"
          status="-"
          setter="rolandsteiner"
    />
          </attachment>
      

    </bug>

</bugzilla>