<?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>23758</bug_id>
          
          <creation_ts>2009-02-05 04:53:35 -0800</creation_ts>
          <short_desc>WCSS input extension is not supported</short_desc>
          <delta_ts>2011-04-29 15:52:29 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>CSS</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>Linux</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>WONTFIX</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>23452</dependson>
          
          <everconfirmed>0</everconfirmed>
          <reporter name="yichao.yin">yichao.yin</reporter>
          <assigned_to name="Nikolas Zimmermann">zimmermann</assigned_to>
          <cc>abarth</cc>
    
    <cc>ap</cc>
    
    <cc>charles.wei</cc>
    
    <cc>eric</cc>
    
    <cc>hyatt</cc>
    
    <cc>joseph.ligman</cc>
    
    <cc>laszlo.gombos</cc>
    
    <cc>staikos</cc>
    
    <cc>zimmermann</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>108421</commentid>
    <comment_count>0</comment_count>
    <who name="yichao.yin">yichao.yin</who>
    <bug_when>2009-02-05 04:53:35 -0800</bug_when>
    <thetext>WCSS input extension is one of the WAP specific extenstions to CSS2.
It is consisted of two WCSS properties: -wap-input-format and -wap-input-required</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>108626</commentid>
    <comment_count>1</comment_count>
      <attachid>27391</attachid>
    <who name="yichao.yin">yichao.yin</who>
    <bug_when>2009-02-06 06:00:26 -0800</bug_when>
    <thetext>Created attachment 27391
inital patch for WCSS input support</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>109654</commentid>
    <comment_count>2</comment_count>
      <attachid>27653</attachid>
    <who name="yichao.yin">yichao.yin</who>
    <bug_when>2009-02-13 03:49:35 -0800</bug_when>
    <thetext>Created attachment 27653
updated patch for changed code


split the initial patch into two parts: this one contains the changed code, the upcoming one is for layout test</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>109655</commentid>
    <comment_count>3</comment_count>
      <attachid>27654</attachid>
    <who name="yichao.yin">yichao.yin</who>
    <bug_when>2009-02-13 03:50:42 -0800</bug_when>
    <thetext>Created attachment 27654
updated patch for layout test</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>121222</commentid>
    <comment_count>4</comment_count>
      <attachid>30315</attachid>
    <who name="yichao.yin">yichao.yin</who>
    <bug_when>2009-05-14 00:06:21 -0700</bug_when>
    <thetext>Created attachment 30315
Updated patch for adding tests

The latest tests for WCSS input extension</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>121223</commentid>
    <comment_count>5</comment_count>
      <attachid>30316</attachid>
    <who name="yichao.yin">yichao.yin</who>
    <bug_when>2009-05-14 00:08:22 -0700</bug_when>
    <thetext>Created attachment 30316
Updated patch about code changes

Latest code changes for WCSS input extension support</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>121764</commentid>
    <comment_count>6</comment_count>
      <attachid>30443</attachid>
    <who name="yichao.yin">yichao.yin</who>
    <bug_when>2009-05-18 01:58:38 -0700</bug_when>
    <thetext>Created attachment 30443
Latest Updated patch for code change

add copyright messages for code change</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>122027</commentid>
    <comment_count>7</comment_count>
      <attachid>30315</attachid>
    <who name="George Staikos">staikos</who>
    <bug_when>2009-05-19 20:36:02 -0700</bug_when>
    <thetext>Comment on attachment 30315
Updated patch for adding tests

will need to be added to skipped for Mac OS also, but patch is fine.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>122034</commentid>
    <comment_count>8</comment_count>
    <who name="yichao.yin">yichao.yin</who>
    <bug_when>2009-05-19 20:48:04 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; (From update of attachment 30315 [review])
&gt; will need to be added to skipped for Mac OS also, but patch is fine.

Mac OS? I have changed platform/mac/Skipped. Do you mean other mac-xxx platforms?
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>122039</commentid>
    <comment_count>9</comment_count>
    <who name="George Staikos">staikos</who>
    <bug_when>2009-05-19 21:05:02 -0700</bug_when>
    <thetext>Sorry, I meant Qt.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>122798</commentid>
    <comment_count>10</comment_count>
      <attachid>30443</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2009-05-22 22:16:37 -0700</bug_when>
    <thetext>Comment on attachment 30443
Latest Updated patch for code change

&gt; +        This change depends on https://bugs.webkit.org/show_bug.cgi?id=23452

This doesn&apos;t make sense to have in a changelog.  Either the change works or it doesn&apos;t.

&gt; +
&gt; +        Tests: fast/wcss/inputelement-inputformat.xhtml
&gt; +               fast/wcss/inputelement-inputrequired.xhtml
&gt; +               fast/wcss/textarea-inputformat.xhtml
&gt; +               fast/wcss/textarea-inputrequired.xhtml

These tests don&apos;t seem to be included.

&gt; +    bool ok = true;
&gt; +    UChar mask = inputFormatMask[maskIndex];
&gt; +    // Match the inputed character with input mask
&gt; +    switch (mask) {
&gt; +    case &apos;A&apos;:
&gt; +        ok = !WTF::isASCIIDigit(inChar) &amp;&amp; !WTF::isASCIILower(inChar) &amp;&amp; WTF::isASCIIPrintable(inChar);
&gt; +        break;
&gt; +    case &apos;a&apos;:
&gt; +        ok = !WTF::isASCIIDigit(inChar) &amp;&amp; !WTF::isASCIIUpper(inChar) &amp;&amp; WTF::isASCIIPrintable(inChar);
&gt; +        break;
&gt; +    case &apos;N&apos;:
&gt; +        ok = WTF::isASCIIDigit(inChar);
&gt; +        break;
&gt; +    case &apos;n&apos;:
&gt; +        ok = !WTF::isASCIIAlpha(inChar) &amp;&amp; WTF::isASCIIPrintable(inChar);
&gt; +        break;
&gt; +    case &apos;X&apos;:
&gt; +        ok = !WTF::isASCIILower(inChar) &amp;&amp; WTF::isASCIIPrintable(inChar);
&gt; +        break;
&gt; +    case &apos;x&apos;:
&gt; +        ok = !WTF::isASCIIUpper(inChar) &amp;&amp; WTF::isASCIIPrintable(inChar);
&gt; +        break;
&gt; +    case &apos;M&apos;:
&gt; +        ok = WTF::isASCIIPrintable(inChar);
&gt; +        break;
&gt; +    case &apos;m&apos;:
&gt; +        ok = WTF::isASCIIPrintable(inChar);

The WTF should not be needed for these (or at the very least, you should add using namespace WTF at the top of file).  The cases for &apos;M&apos; and &apos;m&apos; can be combined.
&gt; Index: WebCore/html/HTMLTextAreaElement.h
&gt; ===================================================================
&gt; --- WebCore/html/HTMLTextAreaElement.h	(revision 43681)
&gt; +++ WebCore/html/HTMLTextAreaElement.h	(working copy)
&gt; @@ -3,6 +3,7 @@
&gt;   *           (C) 1999 Antti Koivisto (koivisto@kde.org)
&gt;   *           (C) 2000 Dirk Mueller (mueller@kde.org)
&gt;   * Copyright (C) 2004, 2005, 2006, 2007 Apple Inc. All rights reserved.
&gt; + * Copyright (C) 2009 Torch Mobile Inc. All rights reserved. (http://www.torchmobile.com/)
&gt;   *
&gt;   * This library is free software; you can redistribute it and/or
&gt;   * modify it under the terms of the GNU Library General Public
&gt; @@ -26,11 +27,19 @@
&gt;  
&gt;  #include &quot;HTMLFormControlElement.h&quot;
&gt;  
&gt; +#if ENABLE(WCSS)
&gt; +#include &quot;InputElement.h&quot;
&gt; +#endif
&gt; +
&gt;  namespace WebCore {
&gt;  
&gt;  class VisibleSelection;
&gt;  
&gt; +#if ENABLE(WCSS)
&gt; +class HTMLTextAreaElement : public HTMLFormControlElementWithState, public InputElement {
&gt; +#else
&gt;  class HTMLTextAreaElement : public HTMLFormControlElementWithState {
&gt; +#endif

This seems wrong to me.  An HTMLTextAreaElement is not an InputElement and therefore should never inherit from InputElement.  The changes made to this class seem too invasive and I think a cleaner approach is necessary.  

r-</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>123102</commentid>
    <comment_count>11</comment_count>
    <who name="yichao.yin">yichao.yin</who>
    <bug_when>2009-05-25 20:49:03 -0700</bug_when>
    <thetext>(In reply to comment #10)
&gt; (From update of attachment 30443 [review])
&gt; &gt; +        This change depends on https://bugs.webkit.org/show_bug.cgi?id=23452
&gt; This doesn&apos;t make sense to have in a changelog.  Either the change works or it
&gt; doesn&apos;t.
&gt; &gt; +
&gt; &gt; +        Tests: fast/wcss/inputelement-inputformat.xhtml
&gt; &gt; +               fast/wcss/inputelement-inputrequired.xhtml
&gt; &gt; +               fast/wcss/textarea-inputformat.xhtml
&gt; &gt; +               fast/wcss/textarea-inputrequired.xhtml
&gt; These tests don&apos;t seem to be included.

will remove it.

&gt; &gt; +    bool ok = true;
&gt; &gt; +    UChar mask = inputFormatMask[maskIndex];
&gt; &gt; +    // Match the inputed character with input mask
&gt; &gt; +    switch (mask) {
&gt; &gt; +    case &apos;A&apos;:
&gt; &gt; +        ok = !WTF::isASCIIDigit(inChar) &amp;&amp; !WTF::isASCIILower(inChar) &amp;&amp; WTF::isASCIIPrintable(inChar);
&gt; &gt; +        break;
&gt; &gt; +    case &apos;a&apos;:
&gt; &gt; +        ok = !WTF::isASCIIDigit(inChar) &amp;&amp; !WTF::isASCIIUpper(inChar) &amp;&amp; WTF::isASCIIPrintable(inChar);
&gt; &gt; +        break;
&gt; &gt; +    case &apos;N&apos;:
&gt; &gt; +        ok = WTF::isASCIIDigit(inChar);
&gt; &gt; +        break;
&gt; &gt; +    case &apos;n&apos;:
&gt; &gt; +        ok = !WTF::isASCIIAlpha(inChar) &amp;&amp; WTF::isASCIIPrintable(inChar);
&gt; &gt; +        break;
&gt; &gt; +    case &apos;X&apos;:
&gt; &gt; +        ok = !WTF::isASCIILower(inChar) &amp;&amp; WTF::isASCIIPrintable(inChar);
&gt; &gt; +        break;
&gt; &gt; +    case &apos;x&apos;:
&gt; &gt; +        ok = !WTF::isASCIIUpper(inChar) &amp;&amp; WTF::isASCIIPrintable(inChar);
&gt; &gt; +        break;
&gt; &gt; +    case &apos;M&apos;:
&gt; &gt; +        ok = WTF::isASCIIPrintable(inChar);
&gt; &gt; +        break;
&gt; &gt; +    case &apos;m&apos;:
&gt; &gt; +        ok = WTF::isASCIIPrintable(inChar);
&gt; The WTF should not be needed for these (or at the very least, you should add
&gt; using namespace WTF at the top of file).  The cases for &apos;M&apos; and &apos;m&apos; can be
&gt; combined.

Thanks, will combine them.

&gt; &gt; Index: WebCore/html/HTMLTextAreaElement.h
&gt; &gt; ===================================================================
&gt; &gt; --- WebCore/html/HTMLTextAreaElement.h	(revision 43681)
&gt; &gt; +++ WebCore/html/HTMLTextAreaElement.h	(working copy)
&gt; &gt; @@ -3,6 +3,7 @@
&gt; &gt;   *           (C) 1999 Antti Koivisto (koivisto@kde.org)
&gt; &gt;   *           (C) 2000 Dirk Mueller (mueller@kde.org)
&gt; &gt;   * Copyright (C) 2004, 2005, 2006, 2007 Apple Inc. All rights reserved.
&gt; &gt; + * Copyright (C) 2009 Torch Mobile Inc. All rights reserved. (http://www.torchmobile.com/)
&gt; &gt;   *
&gt; &gt;   * This library is free software; you can redistribute it and/or
&gt; &gt;   * modify it under the terms of the GNU Library General Public
&gt; &gt; @@ -26,11 +27,19 @@
&gt; &gt;  
&gt; &gt;  #include &quot;HTMLFormControlElement.h&quot;
&gt; &gt;  
&gt; &gt; +#if ENABLE(WCSS)
&gt; &gt; +#include &quot;InputElement.h&quot;
&gt; &gt; +#endif
&gt; &gt; +
&gt; &gt;  namespace WebCore {
&gt; &gt;  
&gt; &gt;  class VisibleSelection;
&gt; &gt;  
&gt; &gt; +#if ENABLE(WCSS)
&gt; &gt; +class HTMLTextAreaElement : public HTMLFormControlElementWithState, public InputElement {
&gt; &gt; +#else
&gt; &gt;  class HTMLTextAreaElement : public HTMLFormControlElementWithState {
&gt; &gt; +#endif
&gt; This seems wrong to me.  An HTMLTextAreaElement is not an InputElement and
&gt; therefore should never inherit from InputElement.  The changes made to this
&gt; class seem too invasive and I think a cleaner approach is necessary.  
&gt; r-

In my opinion, HTMLTextAreaElement can be treated as an InputElement since it also receives user input.
Does any specifications define InputElement explicitly and say HTMLTextAreaElement is not an InputElment? 
I am not sure for that.
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>123950</commentid>
    <comment_count>12</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2009-06-02 00:36:47 -0700</bug_when>
    <thetext>I&apos;m confused.  Is there something to be landed here?  If not, can we remove from the commit queue?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>124079</commentid>
    <comment_count>13</comment_count>
    <who name="George Staikos">staikos</who>
    <bug_when>2009-06-02 17:06:30 -0700</bug_when>
    <thetext>well, the tests seem fine.  I guess they could be landed (disabled)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>126900</commentid>
    <comment_count>14</comment_count>
    <who name="Mark Rowe (bdash)">mrowe</who>
    <bug_when>2009-06-19 00:05:01 -0700</bug_when>
    <thetext>Landing tests without the supporting functionality isn&apos;t hugely useful, and would require a different patch than the one that is attached.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>126901</commentid>
    <comment_count>15</comment_count>
      <attachid>30315</attachid>
    <who name="Mark Rowe (bdash)">mrowe</who>
    <bug_when>2009-06-19 00:05:31 -0700</bug_when>
    <thetext>Comment on attachment 30315
Updated patch for adding tests

Clearing the review flag to get this out of the review queue for now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>144383</commentid>
    <comment_count>16</comment_count>
      <attachid>38967</attachid>
    <who name="Charles Wei">charles.wei</who>
    <bug_when>2009-09-02 22:45:22 -0700</bug_when>
    <thetext>Created attachment 38967
re-submit the patch after porting to ToT and addressing the reviews comments 

patch that addresses the reviewer&apos;s comments. 

This patch is to add WCSS input extension to CSS2,  which includes the following CSS properties:

-wap-input-format
-wap-input-required

with -wap-input-format,  the author can define the value space of an input element.
-wap-input-required says the input element can&apos;t be empty</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>162229</commentid>
    <comment_count>17</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-11-10 14:36:38 -0800</bug_when>
    <thetext>Given that we have failed to find a reviewer to support this in over 2 months, and that I am no longer in support of adding this feature to WebKit, I think we should close out this bug/patch due to lack of reviewer support.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>166647</commentid>
    <comment_count>18</comment_count>
      <attachid>38967</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-11-25 22:36:34 -0800</bug_when>
    <thetext>Comment on attachment 38967
re-submit the patch after porting to ToT and addressing the reviews comments 

r- due to lack of reviewer support based on my above comment and that no one has commented on this bug in the 2 weeks since I made it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>182472</commentid>
    <comment_count>19</comment_count>
      <attachid>38967</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-01-19 14:41:43 -0800</bug_when>
    <thetext>Comment on attachment 38967
re-submit the patch after porting to ToT and addressing the reviews comments 

6 weeks later, same story.  WebKit&apos;s apathy towards this patch suggests we should close this bug as WONTFIX.  Marking r- to remove this abandoned bug/patch from the review queue.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>395589</commentid>
    <comment_count>20</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2011-04-29 15:52:29 -0700</bug_when>
    <thetext>Bug 23477 was resolved with a general lack of desire to implement any WCSS extensions, so closing this one, too. Please e-mail webkit-dev mailing list if you are interested in WCSS support.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>27391</attachid>
            <date>2009-02-06 06:00:26 -0800</date>
            <delta_ts>2009-02-13 03:49:35 -0800</delta_ts>
            <desc>inital patch for WCSS input support</desc>
            <filename>addwcssinputsupport.patch</filename>
            <type>text/plain</type>
            <size>46485</size>
            <attacher name="yichao.yin">yichao.yin</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0MDcxNykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsODEgQEAKKzIwMDktMDItMDYgIFlpY2hhbyBZaW4gIDx5aWNoYW8ueWluQHRvcmNo
bW9iaWxlLmNvbS5jbj4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBBZGQgV0NTUyBpbnB1dCBleHRlbnNpb24gc3VwcG9ydCB0byBXZWJraXQKKyAgICAg
ICAgV0NTUyBpbnB1dCBleHRlbnNpb24gaXMgb25lIG9mIHRoZSBXQVAgc3BlY2lmaWMgZXh0ZW5z
dGlvbnMgdG8gQ1NTMi4KKyAgICAgICAgSXQgY29uc2lzdHMgb2YgdHdvIFdDU1MgcHJvcGVydGll
czogLXdhcC1pbnB1dC1mb3JtYXQgYW5kIC13YXAtaW5wdXQtcmVxdWlyZWQKKyAgICAgICAgcmVm
ZXIgdG8gV0FQLTIzOS1XQ1NTLTIwMDExMDI2LWEucGRmCisKKyAgICAgICAgVGhpcyBjaGFuZ2Ug
ZGVwZW5kcyBvbiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjM0NTIg
CisKKyAgICAgICAgVGVzdHM6IGZhc3Qvd2Nzcy9pbnB1dGVsZW1lbnQtaW5wdXRmb3JtYXQueGh0
bWwKKyAgICAgICAgICAgICAgIGZhc3Qvd2Nzcy9pbnB1dGVsZW1lbnQtaW5wdXRyZXF1aXJlZC54
aHRtbAorICAgICAgICAgICAgICAgZmFzdC93Y3NzL3RleHRhcmVhLWlucHV0Zm9ybWF0LnhodG1s
CisgICAgICAgICAgICAgICBmYXN0L3djc3MvdGV4dGFyZWEtaW5wdXRyZXF1aXJlZC54aHRtbAor
CisgICAgICAgICogV2ViQ29yZS5wcm86CisgICAgICAgICogY3NzL0NTU1BhcnNlci5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpDU1NQYXJzZXI6OnBhcnNlVmFsdWUpOgorICAgICAgICAoV2ViQ29y
ZTo6Q1NTUGFyc2VyOjpwYXJzZVdDU1NJbnB1dFByb3BlcnR5KToKKyAgICAgICAgKiBjc3MvQ1NT
UGFyc2VyLmg6CisgICAgICAgICogY3NzL0NTU1Byb3BlcnR5TmFtZXMuaW46CisgICAgICAgICog
ZG9tL0lucHV0RWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpmb3JtYXRDb2Rlcyk6Cisg
ICAgICAgIChXZWJDb3JlOjpjdXJzb3JQb3NpdGlvblRvTWFza0luZGV4KToKKyAgICAgICAgKFdl
YkNvcmU6OklucHV0RWxlbWVudDo6aXNDb25mb3JtZWRUb0lucHV0TWFzayk6CisgICAgICAgIChX
ZWJDb3JlOjpJbnB1dEVsZW1lbnQ6OnZhbGlkYXRlSW5wdXRNYXNrKToKKyAgICAgICAgKFdlYkNv
cmU6OklucHV0RWxlbWVudDo6dXBkYXRlSW5wdXRQcm9wZXJ0aWVzRnJvbVdDU1MpOgorICAgICAg
ICAoV2ViQ29yZTo6SW5wdXRFbGVtZW50OjpkaXNwYXRjaEZvY3VzRXZlbnQpOgorICAgICAgICAo
V2ViQ29yZTo6SW5wdXRFbGVtZW50OjpkaXNwYXRjaEJsdXJFdmVudCk6CisgICAgICAgIChXZWJD
b3JlOjpJbnB1dEVsZW1lbnREYXRhOjpJbnB1dEVsZW1lbnREYXRhKToKKyAgICAgICAgKFdlYkNv
cmU6OnRvSW5wdXRFbGVtZW50KToKKyAgICAgICAgKiBkb20vSW5wdXRFbGVtZW50Lmg6CisgICAg
ICAgIChXZWJDb3JlOjpJbnB1dEVsZW1lbnREYXRhOjopOgorICAgICAgICAoV2ViQ29yZTo6SW5w
dXRFbGVtZW50RGF0YTo6aW5wdXRSZXF1aXJlbWVudFN0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6
OklucHV0RWxlbWVudERhdGE6OnNldElucHV0UmVxdWlyZW1lbnRTdGF0ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpJbnB1dEVsZW1lbnREYXRhOjppbnB1dEZvcm1hdE1hc2spOgorICAgICAgICAoV2Vi
Q29yZTo6SW5wdXRFbGVtZW50RGF0YTo6c2V0SW5wdXRGb3JtYXRNYXNrKToKKyAgICAgICAgKFdl
YkNvcmU6OklucHV0RWxlbWVudERhdGE6OmFsbG93ZWRJbnB1dENoYXJzTWF4TGVuZ3RoKToKKyAg
ICAgICAgKFdlYkNvcmU6OklucHV0RWxlbWVudERhdGE6OnNldEFsbG93ZWRJbnB1dENoYXJzTWF4
TGVuZ3RoKToKKyAgICAgICAgKiBodG1sL0hUTUxJbnB1dEVsZW1lbnQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6SFRNTElucHV0RWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxlcik6CisgICAgICAg
ICogaHRtbC9IVE1MVGV4dEFyZWFFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxU
ZXh0QXJlYUVsZW1lbnQ6OkhUTUxUZXh0QXJlYUVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6
SFRNTFRleHRBcmVhRWxlbWVudDo6c2VsZWN0aW9uU3RhcnQpOgorICAgICAgICAoV2ViQ29yZTo6
SFRNTFRleHRBcmVhRWxlbWVudDo6c2VsZWN0aW9uRW5kKToKKyAgICAgICAgKFdlYkNvcmU6OkhU
TUxUZXh0QXJlYUVsZW1lbnQ6OnNldFNlbGVjdGlvblJhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6
OkhUTUxUZXh0QXJlYUVsZW1lbnQ6OnVwZGF0ZUZvY3VzQXBwZWFyYW5jZSk6CisgICAgICAgIChX
ZWJDb3JlOjpIVE1MVGV4dEFyZWFFbGVtZW50OjpzZXRWYWx1ZUZyb21SZW5kZXJlcik6CisgICAg
ICAgIChXZWJDb3JlOjpIVE1MVGV4dEFyZWFFbGVtZW50Ojpjb25zdHJhaW5WYWx1ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpIVE1MVGV4dEFyZWFFbGVtZW50OjpjYWNoZVNlbGVjdGlvbik6CisgICAg
ICAgIChXZWJDb3JlOjpIVE1MVGV4dEFyZWFFbGVtZW50OjpkaXNwYXRjaEZvY3VzRXZlbnQpOgor
ICAgICAgICAoV2ViQ29yZTo6SFRNTFRleHRBcmVhRWxlbWVudDo6ZGlzcGF0Y2hCbHVyRXZlbnQp
OgorICAgICAgICAoV2ViQ29yZTo6SFRNTFRleHRBcmVhRWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFu
ZGxlcik6CisgICAgICAgIChXZWJDb3JlOjpIVE1MVGV4dEFyZWFFbGVtZW50Ojp1cGRhdGVWYWx1
ZSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MVGV4dEFyZWFFbGVtZW50OjpzZXRWYWx1ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpIVE1MVGV4dEFyZWFFbGVtZW50OjpzZWxlY3Rpb24pOgorICAgICAg
ICAqIGh0bWwvSFRNTFRleHRBcmVhRWxlbWVudC5oOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFRl
eHRBcmVhRWxlbWVudDo6SFRNTFRleHRBcmVhRWxlbWVudDo6aXNDaGVja2VkKToKKyAgICAgICAg
KFdlYkNvcmU6OkhUTUxUZXh0QXJlYUVsZW1lbnQ6OkhUTUxUZXh0QXJlYUVsZW1lbnQ6OmlzQXV0
b2ZpbGxlZCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MVGV4dEFyZWFFbGVtZW50OjpIVE1MVGV4
dEFyZWFFbGVtZW50Ojppc0luZGV0ZXJtaW5hdGUpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFRl
eHRBcmVhRWxlbWVudDo6SFRNTFRleHRBcmVhRWxlbWVudDo6aXNSYWRpb0J1dHRvbik6CisgICAg
ICAgIChXZWJDb3JlOjpIVE1MVGV4dEFyZWFFbGVtZW50OjpIVE1MVGV4dEFyZWFFbGVtZW50Ojpp
c1RleHRGaWVsZCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MVGV4dEFyZWFFbGVtZW50OjpIVE1M
VGV4dEFyZWFFbGVtZW50Ojppc1NlYXJjaEZpZWxkKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxU
ZXh0QXJlYUVsZW1lbnQ6OkhUTUxUZXh0QXJlYUVsZW1lbnQ6OmlzSW5wdXRUeXBlSGlkZGVuKToK
KyAgICAgICAgKFdlYkNvcmU6OkhUTUxUZXh0QXJlYUVsZW1lbnQ6OkhUTUxUZXh0QXJlYUVsZW1l
bnQ6OmlzUGFzc3dvcmRGaWVsZCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MVGV4dEFyZWFFbGVt
ZW50OjpIVE1MVGV4dEFyZWFFbGVtZW50OjpzZWFyY2hFdmVudHNTaG91bGRCZURpc3BhdGNoZWQp
OgorICAgICAgICAoV2ViQ29yZTo6SFRNTFRleHRBcmVhRWxlbWVudDo6SFRNTFRleHRBcmVhRWxl
bWVudDo6cGxhY2Vob2xkZXJTaG91bGRCZVZpc2libGUpOgorICAgICAgICAoV2ViQ29yZTo6SFRN
TFRleHRBcmVhRWxlbWVudDo6SFRNTFRleHRBcmVhRWxlbWVudDo6c2l6ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpIVE1MVGV4dEFyZWFFbGVtZW50OjpIVE1MVGV4dEFyZWFFbGVtZW50OjpwbGFjZWhv
bGRlclZhbHVlKToKKyAgICAgICAgKiB3bWwvV01MSW5wdXRFbGVtZW50LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OldNTElucHV0RWxlbWVudDo6V01MSW5wdXRFbGVtZW50KToKKyAgICAgICAgKFdl
YkNvcmU6OldNTElucHV0RWxlbWVudDo6ZGlzcGF0Y2hCbHVyRXZlbnQpOgorICAgICAgICAoV2Vi
Q29yZTo6V01MSW5wdXRFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpXTUxJbnB1dEVsZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRsZXIpOgorICAgICAgICAo
V2ViQ29yZTo6V01MSW5wdXRFbGVtZW50Ojppbml0KToKKyAgICAgICAgKiB3bWwvV01MSW5wdXRF
bGVtZW50Lmg6CisKIDIwMDktMDItMDYgIFNpbW9uIEhhdXNtYW5uICA8c2ltb24uaGF1c21hbm5A
bm9raWEuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IFRvciBBcm5lIFZlc3Riw7guCkluZGV4
OiBXZWJDb3JlL1dlYkNvcmUucHJvCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvV2ViQ29yZS5wcm8J
KHJldmlzaW9uIDQwNzE2KQorKysgV2ViQ29yZS9XZWJDb3JlLnBybwkod29ya2luZyBjb3B5KQpA
QCAtMTAxLDYgKzEwMSw3IEBAIENPTkZJRyhRVERJUl9idWlsZCkgewogIWNvbnRhaW5zKERFRklO
RVMsIEVOQUJMRV9YUEFUSD0uKTogREVGSU5FUyArPSBFTkFCTEVfWFBBVEg9MQogIyFjb250YWlu
cyhERUZJTkVTLCBFTkFCTEVfWEJMPS4pOiBERUZJTkVTICs9IEVOQUJMRV9YQkw9MQogIWNvbnRh
aW5zKERFRklORVMsIEVOQUJMRV9XTUw9Lik6IERFRklORVMgKz0gRU5BQkxFX1dNTD0wCishY29u
dGFpbnMoREVGSU5FUywgRU5BQkxFX1hIVE1MTVA9Lik6IERFRklORVMgKz0gRU5BQkxFX1hIVE1M
TVA9MAogIWNvbnRhaW5zKERFRklORVMsIEVOQUJMRV9TVkc9Lik6IERFRklORVMgKz0gRU5BQkxF
X1NWRz0xCiAhY29udGFpbnMoREVGSU5FUywgRU5BQkxFX1NWR19GT05UUz0uKTogREVGSU5FUyAr
PSBFTkFCTEVfU1ZHX0ZPTlRTPTEKICFjb250YWlucyhERUZJTkVTLCBFTkFCTEVfU1ZHX0ZJTFRF
UlM9Lik6IERFRklORVMgKz0gRU5BQkxFX1NWR19GSUxURVJTPTEKQEAgLTE0NzIsNiArMTQ3Mywx
NSBAQCBjb250YWlucyhERUZJTkVTLCBFTkFCTEVfV01MPTEpIHsKICAgICBhZGRFeHRyYUNvbXBp
bGVyV2l0aEhlYWRlcih3bWxuYW1lc19iKQogfQogCitjb250YWlucyhERUZJTkVTLCBFTkFCTEVf
WEhUTUxNUD0xKSB7CisgICAgRkVBVFVSRV9ERUZJTkVTX0pBVkFTQ1JJUFQgKz0gRU5BQkxFX1hI
VE1MTVA9MQorICAgICFjb250YWlucyhERUZJTkVTLCBFTkFCTEVfV0NTUz0uKTogREVGSU5FUyAr
PSBFTkFCTEVfV0NTUz0xCit9CisgCitjb250YWlucyhERUZJTkVTLCBFTkFCTEVfV0NTUz0xKSB7
CisgICAgRkVBVFVSRV9ERUZJTkVTX0pBVkFTQ1JJUFQgKz0gRU5BQkxFX1dDU1M9MQorfQorCiBj
b250YWlucyhERUZJTkVTLCBFTkFCTEVfU1ZHPTEpIHsKICAgICBGRUFUVVJFX0RFRklORVNfSkFW
QVNDUklQVCArPSBFTkFCTEVfU1ZHPTEKIApJbmRleDogV2ViQ29yZS9jc3MvQ1NTUGFyc2VyLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2Nzcy9DU1NQYXJzZXIuY3BwCShyZXZpc2lvbiA0MDcx
NikKKysrIFdlYkNvcmUvY3NzL0NTU1BhcnNlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1ODMs
NiArMTU4MywxMiBAQCBib29sIENTU1BhcnNlcjo6cGFyc2VWYWx1ZShpbnQgcHJvcElkLCBiCiAg
ICAgICAgIGNvbnN0IGludCBwcm9wZXJ0aWVzWzJdID0geyBDU1NQcm9wZXJ0eVdlYmtpdFRleHRT
dHJva2VXaWR0aCwgQ1NTUHJvcGVydHlXZWJraXRUZXh0U3Ryb2tlQ29sb3IgfTsKICAgICAgICAg
cmV0dXJuIHBhcnNlU2hvcnRoYW5kKHByb3BJZCwgcHJvcGVydGllcywgMiwgaW1wb3J0YW50KTsK
ICAgICB9CisjaWYgRU5BQkxFKFdDU1MpCisgICAgY2FzZSBDU1NQcm9wZXJ0eVdhcElucHV0Rm9y
bWF0OgorICAgIGNhc2UgQ1NTUHJvcGVydHlXYXBJbnB1dFJlcXVpcmVkOgorICAgICAgICBwYXJz
ZWRWYWx1ZSA9IHBhcnNlV0NTU0lucHV0UHJvcGVydHkoKTsKKyAgICAgICAgYnJlYWs7CisjZW5k
aWYgCiAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEFuaW1hdGlvbjoKICAgICAgICAgcmV0dXJu
IHBhcnNlQW5pbWF0aW9uU2hvcnRoYW5kKGltcG9ydGFudCk7CiAgICAgY2FzZSBDU1NQcm9wZXJ0
eVdlYmtpdFRyYW5zaXRpb246CkBAIC0xNjIxLDYgKzE2MjcsMjYgQEAgYm9vbCBDU1NQYXJzZXI6
OnBhcnNlVmFsdWUoaW50IHByb3BJZCwgYgogICAgIHJldHVybiBmYWxzZTsKIH0KIAorI2lmIEVO
QUJMRShXQ1NTKQorUGFzc1JlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gQ1NTUGFyc2VyOjpwYXJz
ZVdDU1NJbnB1dFByb3BlcnR5KCkKK3sKKyAgICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IHBh
cnNlZFZhbHVlID0gMDsKKyAgICBTdHJpbmcgaW5wdXRQcm9wZXJ0eTsKKyAgICBDU1NQYXJzZXJW
YWx1ZSogdmFsdWUgPSBtX3ZhbHVlTGlzdC0+Y3VycmVudCgpOworICAgIHdoaWxlICh2YWx1ZSkg
eworICAgICAgICBpZiAodmFsdWUtPnVuaXQgPT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19TVFJJ
TkcgfHwgdmFsdWUtPnVuaXQgPT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19JREVOVCkKKyAgICAg
ICAgICAgIGlucHV0UHJvcGVydHkgPSBTdHJpbmcodmFsdWUtPnN0cmluZyk7CisgCisgICAgICAg
IGlmICghaW5wdXRQcm9wZXJ0eS5pc0VtcHR5KCkpCisgICAgICAgICAgIHBhcnNlZFZhbHVlID0g
Q1NTUHJpbWl0aXZlVmFsdWU6OmNyZWF0ZShpbnB1dFByb3BlcnR5LCBDU1NQcmltaXRpdmVWYWx1
ZTo6Q1NTX1NUUklORyk7CisgCisgICAgICAgIHZhbHVlID0gbV92YWx1ZUxpc3QtPm5leHQoKTsK
KyAgICB9CisgCisgICAgcmV0dXJuIHBhcnNlZFZhbHVlOworfQorI2VuZGlmCisKIHZvaWQgQ1NT
UGFyc2VyOjphZGRGaWxsVmFsdWUoUmVmUHRyPENTU1ZhbHVlPiYgbHZhbCwgUGFzc1JlZlB0cjxD
U1NWYWx1ZT4gcnZhbCkKIHsKICAgICBpZiAobHZhbCkgewpJbmRleDogV2ViQ29yZS9jc3MvQ1NT
UGFyc2VyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9jc3MvQ1NTUGFyc2VyLmgJKHJldmlzaW9u
IDQwNzE2KQorKysgV2ViQ29yZS9jc3MvQ1NTUGFyc2VyLmgJKHdvcmtpbmcgY29weSkKQEAgLTEz
Myw2ICsxMzMsMTAgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBQYXNzUmVmUHRyPENT
U1ZhbHVlPiBwYXJzZVNWR1N0cm9rZURhc2hhcnJheSgpOwogI2VuZGlmCiAKKyNpZiBFTkFCTEUo
V0NTUykgICAgICAgCisgICAgICAgIFBhc3NSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IHBhcnNl
V0NTU0lucHV0UHJvcGVydHkoKTsKKyNlbmRpZgorCiAgICAgICAgIC8vIENTUzMgUGFyc2luZyBS
b3V0aW5lcyAoZm9yIHByb3BlcnRpZXMgc3BlY2lmaWMgdG8gQ1NTMykKICAgICAgICAgYm9vbCBw
YXJzZVNoYWRvdyhpbnQgcHJvcElkLCBib29sIGltcG9ydGFudCk7CiAgICAgICAgIGJvb2wgcGFy
c2VCb3JkZXJJbWFnZShpbnQgcHJvcElkLCBib29sIGltcG9ydGFudCwgUmVmUHRyPENTU1ZhbHVl
PiYpOwpJbmRleDogV2ViQ29yZS9jc3MvQ1NTUHJvcGVydHlOYW1lcy5pbgo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL2Nzcy9DU1NQcm9wZXJ0eU5hbWVzLmluCShyZXZpc2lvbiA0MDcxNikKKysrIFdl
YkNvcmUvY3NzL0NTU1Byb3BlcnR5TmFtZXMuaW4JKHdvcmtpbmcgY29weSkKQEAgLTE0Myw2ICsx
NDMsOCBAQCB3b3JkLXNwYWNpbmcKIHdvcmQtd3JhcAogei1pbmRleAogem9vbQorLXdhcC1pbnB1
dC1mb3JtYXQKKy13YXAtaW5wdXQtcmVxdWlyZWQKIC13ZWJraXQtYW5pbWF0aW9uCiAtd2Via2l0
LWFuaW1hdGlvbi1kZWxheQogLXdlYmtpdC1hbmltYXRpb24tZGlyZWN0aW9uCkluZGV4OiBXZWJD
b3JlL2RvbS9JbnB1dEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL0lucHV0
RWxlbWVudC5jcHAJKHJldmlzaW9uIDQwNzE2KQorKysgV2ViQ29yZS9kb20vSW5wdXRFbGVtZW50
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjIsNiArMjIsMTMgQEAKICNpbmNsdWRlICJJbnB1dEVs
ZW1lbnQuaCIKIAogI2luY2x1ZGUgIkJlZm9yZVRleHRJbnNlcnRlZEV2ZW50LmgiCisjaWYgRU5B
QkxFKFdDU1MpCisjaW5jbHVkZSAiQ1NTUHJvcGVydHlOYW1lcy5oIgorI2luY2x1ZGUgIkNTU1J1
bGUuaCIKKyNpbmNsdWRlICJDU1NSdWxlTGlzdC5oIgorI2luY2x1ZGUgIkNTU1N0eWxlUnVsZS5o
IgorI2luY2x1ZGUgIkNTU1N0eWxlU2VsZWN0b3IuaCIKKyNlbmRpZgogI2luY2x1ZGUgIkNocm9t
ZUNsaWVudC5oIgogI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5jbHVkZSAiRXZlbnQuaCIKQEAg
LTMwLDYgKzM3LDkgQEAKICNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIkhUTUxJbnB1dEVs
ZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MTmFtZXMuaCIKKyNpZiBFTkFCTEUoV0NTUykKKyNpbmNs
dWRlICJIVE1MVGV4dEFyZWFFbGVtZW50LmgiCisjZW5kaWYKICNpbmNsdWRlICJQYWdlLmgiCiAj
aW5jbHVkZSAiUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lLmgiCiAjaW5jbHVkZSAiU2VsZWN0
aW9uQ29udHJvbGxlci5oIgpAQCAtNTIsMTEgKzYyLDI0MiBAQCB1c2luZyBuYW1lc3BhY2UgSFRN
TE5hbWVzOwogY29uc3QgaW50IElucHV0RWxlbWVudDo6c19tYXhpbXVtTGVuZ3RoID0gNTI0Mjg4
OwogY29uc3QgaW50IElucHV0RWxlbWVudDo6c19kZWZhdWx0U2l6ZSA9IDIwOwogCisjaWYgRU5B
QkxFKFdDU1MpCitzdGF0aWMgaW5saW5lIGNvbnN0IEF0b21pY1N0cmluZyYgZm9ybWF0Q29kZXMo
KQoreworICAgIERFRklORV9TVEFUSUNfTE9DQUwoQXRvbWljU3RyaW5nLCBjb2RlcywgKCJBYU5u
WHhNbSIpKTsKKyAgICByZXR1cm4gY29kZXM7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBjdXJzb3JQ
b3NpdGlvblRvTWFza0luZGV4KGNvbnN0IFN0cmluZyYgaW5wdXRGb3JtYXRNYXNrLCB1bnNpZ25l
ZCBjdXJzb3JQb3NpdGlvbikKK3sKKyAgICBVQ2hhciBtYXNrOworICAgIGludCBpbmRleCA9IC0x
OworICAgIGRvIHsKKyAgICAgICAgbWFzayA9IGlucHV0Rm9ybWF0TWFza1srK2luZGV4XTsKKyAg
ICAgICAgaWYgKG1hc2sgPT0gJ1xcJykKKyAgICAgICAgICAgICsraW5kZXg7CisgICAgICAgIGVs
c2UgaWYgKG1hc2sgPT0gJyonIHx8IChXVEY6OmlzQVNDSUlEaWdpdChtYXNrKSAmJiBtYXNrICE9
ICcwJykpIHsKKyAgICAgICAgICAgIGluZGV4ID0gaW5wdXRGb3JtYXRNYXNrLmxlbmd0aCgpIC0g
MTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfSB3aGlsZSAoY3Vyc29yUG9z
aXRpb24tLSk7CisgCisgICAgcmV0dXJuIGluZGV4OworfQorCitib29sIElucHV0RWxlbWVudDo6
aXNDb25mb3JtZWRUb0lucHV0TWFzayhjb25zdCBJbnB1dEVsZW1lbnREYXRhJiBkYXRhLCBjb25z
dCBTdHJpbmcmIGlucHV0Q2hhcnMpCit7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGlu
cHV0Q2hhcnMubGVuZ3RoKCk7ICsraSkKKyAgICAgICAgaWYgKCFpc0NvbmZvcm1lZFRvSW5wdXRN
YXNrKGRhdGEsIGlucHV0Q2hhcnNbaV0sIGksIGkgKyAxKSkKKyAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBJbnB1dEVsZW1lbnQ6OmlzQ29uZm9y
bWVkVG9JbnB1dE1hc2soY29uc3QgSW5wdXRFbGVtZW50RGF0YSYgZGF0YSwgVUNoYXIgaW5DaGFy
LCB1bnNpZ25lZCBjdXJzb3JQb3NpdGlvbiwgdW5zaWduZWQgaW5wdXRDaGFyc0NvdW50KQorewor
ICAgIFN0cmluZyBpbnB1dEZvcm1hdE1hc2sgPSBkYXRhLmlucHV0Rm9ybWF0TWFzaygpOworICAg
IGlmIChpbnB1dEZvcm1hdE1hc2suaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKwor
ICAgIGlmIChpbnB1dENoYXJzQ291bnQgPiBkYXRhLmFsbG93ZWRJbnB1dENoYXJzTWF4TGVuZ3Ro
KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAKKyAgICB1bnNpZ25lZCBtYXNrSW5kZXggPSBj
dXJzb3JQb3NpdGlvblRvTWFza0luZGV4KGlucHV0Rm9ybWF0TWFzaywgY3Vyc29yUG9zaXRpb24p
OworICAgIGJvb2wgb2sgPSB0cnVlOworICAgIFVDaGFyIG1hc2sgPSBpbnB1dEZvcm1hdE1hc2tb
bWFza0luZGV4XTsKKyAgICAvLyBtYXRjaCB0aGUgaW5wdXRlZCBjaGFyYWN0ZXIgd2l0aCBpbnB1
dCBtYXNrCisgICAgc3dpdGNoIChtYXNrKSB7CisgICAgY2FzZSAnQSc6CisgICAgICAgIG9rID0g
IVdURjo6aXNBU0NJSURpZ2l0KGluQ2hhcikgJiYgIVdURjo6aXNBU0NJSUxvd2VyKGluQ2hhcikg
JiYgV1RGOjppc0FTQ0lJUHJpbnRhYmxlKGluQ2hhcik7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgJ2EnOgorICAgICAgICBvayA9ICFXVEY6OmlzQVNDSUlEaWdpdChpbkNoYXIpICYmICFXVEY6
OmlzQVNDSUlVcHBlcihpbkNoYXIpICYmIFdURjo6aXNBU0NJSVByaW50YWJsZShpbkNoYXIpOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlICdOJzoKKyAgICAgICAgb2sgPSBXVEY6OmlzQVNDSUlE
aWdpdChpbkNoYXIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlICduJzoKKyAgICAgICAgb2sg
PSAhV1RGOjppc0FTQ0lJQWxwaGEoaW5DaGFyKSAmJiBXVEY6OmlzQVNDSUlQcmludGFibGUoaW5D
aGFyKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSAnWCc6CisgICAgICAgIG9rID0gIVdURjo6
aXNBU0NJSUxvd2VyKGluQ2hhcikgJiYgV1RGOjppc0FTQ0lJUHJpbnRhYmxlKGluQ2hhcik7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2UgJ3gnOgorICAgICAgICBvayA9ICFXVEY6OmlzQVNDSUlV
cHBlcihpbkNoYXIpICYmIFdURjo6aXNBU0NJSVByaW50YWJsZShpbkNoYXIpOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlICdNJzoKKyAgICAgICAgb2sgPSBXVEY6OmlzQVNDSUlQcmludGFibGUo
aW5DaGFyKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSAnbSc6CisgICAgICAgIG9rID0gV1RG
Ojppc0FTQ0lJUHJpbnRhYmxlKGluQ2hhcik7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6
CisgICAgICAgIG9rID0gKG1hc2sgPT0gaW5DaGFyKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQor
IAorICAgIHJldHVybiBvazsKK30KKworU3RyaW5nIElucHV0RWxlbWVudDo6dmFsaWRhdGVJbnB1
dE1hc2soSW5wdXRFbGVtZW50RGF0YSYgZGF0YSwgU3RyaW5nJiBpbnB1dE1hc2ssIGJvb2wgaXNG
cm9tV0NTUykKK3sKKyAgICBpZiAoaXNGcm9tV0NTUykKKyAgICAgICAgaW5wdXRNYXNrLnJlcGxh
Y2UoIlxcXFwiLCAiXFwiKTsKKyAKKyAgICBib29sIGlzVmFsaWQgPSB0cnVlOworICAgIGJvb2wg
aGFzV2lsZGNhcmQgPSBmYWxzZTsKKyAgICB1bnNpZ25lZCBlc2NhcGVDaGFyQ291bnQgPSAwOwor
ICAgIHVuc2lnbmVkIG1hc2tMZW5ndGggPSBpbnB1dE1hc2subGVuZ3RoKCk7CisgICAgVUNoYXIg
Zm9ybWF0Q29kZTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbWFza0xlbmd0aDsgKytp
KSB7CisgICAgICAgIGZvcm1hdENvZGUgPSBpbnB1dE1hc2tbaV07CisgICAgICAgIGlmIChmb3Jt
YXRDb2RlcygpLmZpbmQoZm9ybWF0Q29kZSkgPT0gLTEpIHsKKyAgICAgICAgICAgIGlmIChmb3Jt
YXRDb2RlID09ICcqJyB8fCAoV1RGOjppc0FTQ0lJRGlnaXQoZm9ybWF0Q29kZSkgJiYgZm9ybWF0
Q29kZSAhPSAnMCcpKSB7CisgICAgICAgICAgICAgICAgLy8gdmFsaWRhdGUgY29kZXMgd2hpY2gg
ZW5kcyB3aXRoICcqZicgb3IgJ25mJworICAgICAgICAgICAgICAgIGZvcm1hdENvZGUgPSBpbnB1
dE1hc2tbKytpXTsKKyAgICAgICAgICAgICAgICBpZiAoKGkgKyAxICE9IG1hc2tMZW5ndGgpIHx8
IGZvcm1hdENvZGVzKCkuZmluZChmb3JtYXRDb2RlKSA9PSAtMSkgeworICAgICAgICAgICAgICAg
ICAgICBpc1ZhbGlkID0gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBoYXNXaWxkY2FyZCA9IHRydWU7CisgICAgICAg
ICAgICB9IGVsc2UgaWYgKGZvcm1hdENvZGUgPT0gJ1xcJykgeworICAgICAgICAgICAgICAgIC8v
c2tpcCBvdmVyIHRoZSBuZXh0IG1hc2sgY2hhcmFjdGVyCisgICAgICAgICAgICAgICAgKytpOwor
ICAgICAgICAgICAgICAgICsrZXNjYXBlQ2hhckNvdW50OworICAgICAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgICAgICBpc1ZhbGlkID0gZmFsc2U7CisgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgCisgICAgaWYgKCFpc1ZhbGlkKQor
ICAgICAgICByZXR1cm4gU3RyaW5nKCk7CisgCisgICAgLy8gY2FsY3VsYXRlIHRoZSBudW1iZXIg
b2YgY2hhcmFjdGVycyBhbGxvd2VkIHRvIGJlIGVudGVyZWQgYnkgaW5wdXQgbWFzaworICAgIHVu
c2lnbmVkIGFsbG93ZWRMZW5ndGggPSBtYXNrTGVuZ3RoOworICAgIGlmIChlc2NhcGVDaGFyQ291
bnQpCisgICAgICAgIGFsbG93ZWRMZW5ndGggLT0gZXNjYXBlQ2hhckNvdW50OworCisgICAgaWYg
KGhhc1dpbGRjYXJkKSB7CisgICAgICAgIGZvcm1hdENvZGUgPSBpbnB1dE1hc2tbbWFza0xlbmd0
aCAtIDJdOworICAgICAgICBpZiAoZm9ybWF0Q29kZSA9PSAnKicpCisgICAgICAgICAgICBhbGxv
d2VkTGVuZ3RoID0gZGF0YS5hbGxvd2VkSW5wdXRDaGFyc01heExlbmd0aCgpOworICAgICAgICBl
bHNlIHsKKyAgICAgICAgICAgIHVuc2lnbmVkIGxlZnRMZW4gPSBTdHJpbmcoJmZvcm1hdENvZGUp
LnRvSW50KCk7CisgICAgICAgICAgICBhbGxvd2VkTGVuZ3RoID0gbGVmdExlbiArIGFsbG93ZWRM
ZW5ndGggLSAyOworICAgICAgICB9CisgICAgfQorIAorICAgIGlmIChhbGxvd2VkTGVuZ3RoIDwg
ZGF0YS5hbGxvd2VkSW5wdXRDaGFyc01heExlbmd0aCgpKQorICAgICAgICBkYXRhLnNldEFsbG93
ZWRJbnB1dENoYXJzTWF4TGVuZ3RoKGFsbG93ZWRMZW5ndGgpOworIAorICAgIHJldHVybiBpbnB1
dE1hc2s7Cit9CisKK3ZvaWQgSW5wdXRFbGVtZW50Ojp1cGRhdGVJbnB1dFByb3BlcnRpZXNGcm9t
V0NTUyhJbnB1dEVsZW1lbnREYXRhJiBkYXRhLCBEb2N1bWVudCogZG9jdW1lbnQpCit7CisgICAg
aWYgKCFkb2N1bWVudCkKKyAgICAgICAgcmV0dXJuOworCisgICAgU3RyaW5nIGlucHV0Rm9ybWF0
TWFzayA9IGRhdGEuaW5wdXRGb3JtYXRNYXNrKCk7CisgICAgSW5wdXRFbGVtZW50RGF0YTo6SW5w
dXRSZXF1aXJlbWVudFN0YXRlIGlucHV0UmVxdWlyZW1lbnRTdGF0ZSA9IGRhdGEuaW5wdXRSZXF1
aXJlbWVudFN0YXRlKCk7CisgICAgaWYgKCFpbnB1dEZvcm1hdE1hc2suaXNFbXB0eSgpICYmIElu
cHV0RWxlbWVudERhdGE6Ok5vbmUgIT0gaW5wdXRSZXF1aXJlbWVudFN0YXRlKQorICAgICAgICBy
ZXR1cm47CisgCisgICAgLy8xLCBnZXQgaW5wdXQgcHJvcGVydHkgZnJvbSBpbmxpbmUgV0NTUyBm
aXJzdCAKKyAgICBDU1NTdHlsZURlY2xhcmF0aW9uKiBzdHlsZURlY2xhcmF0aW9uID0gZGF0YS5l
bGVtZW50KCktPnN0eWxlKCk7CisgICAgaWYgKHN0eWxlRGVjbGFyYXRpb24pIHsKKyAgICAgICAg
aWYgKGlucHV0Rm9ybWF0TWFzay5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgIGlucHV0Rm9ybWF0
TWFzayA9IHN0eWxlRGVjbGFyYXRpb24tPmdldFByb3BlcnR5VmFsdWUoQ1NTUHJvcGVydHlXYXBJ
bnB1dEZvcm1hdCk7CisgICAgICAgICAgICBpbnB1dEZvcm1hdE1hc2sucmVwbGFjZSgnXCcnLCAn
ICcpOworICAgICAgICAgICAgaW5wdXRGb3JtYXRNYXNrID0gaW5wdXRGb3JtYXRNYXNrLnN0cmlw
V2hpdGVTcGFjZSgpOworICAgICAgICB9CisgCisgICAgICAgIGlmIChJbnB1dEVsZW1lbnREYXRh
OjpOb25lID09IGlucHV0UmVxdWlyZW1lbnRTdGF0ZSkgeworICAgICAgICAgICAgU3RyaW5nIGlu
cHV0UmVxdWlyZWQgPSBzdHlsZURlY2xhcmF0aW9uLT5nZXRQcm9wZXJ0eVZhbHVlKENTU1Byb3Bl
cnR5V2FwSW5wdXRSZXF1aXJlZCk7CisgICAgICAgICAgICBpZiAoIWlucHV0UmVxdWlyZWQuaXNF
bXB0eSgpKQorICAgICAgICAgICAgICAgIGlucHV0UmVxdWlyZW1lbnRTdGF0ZSA9IChpbnB1dFJl
cXVpcmVkID09ICJ0cnVlIiA/IElucHV0RWxlbWVudERhdGE6OklucHV0UmVxdWlyZWQgOiBJbnB1
dEVsZW1lbnREYXRhOjpJbnB1dE5vdFJlcXVpcmVkKTsKKyAgICAgICAgfQorICAgIH0KKyAKKyAg
ICAvLzIsIFRyeSB0byBnZXQgaW5wdXQgcHJvcGVydHkgZnJvbSBpbnRlcm5hbCBXQ1NTIGFuZCBl
eHRlcm5hbCBXQ1NTIGluIHR1cm4KKyAgICBpZiAoaW5wdXRGb3JtYXRNYXNrLmlzRW1wdHkoKSB8
fCBJbnB1dEVsZW1lbnREYXRhOjpOb25lID09IGlucHV0UmVxdWlyZW1lbnRTdGF0ZSkgeworICAg
ICAgICBpZiAoZG9jdW1lbnQtPnN0eWxlU2VsZWN0b3IoKSkgeworICAgICAgICAgICAgUmVmUHRy
PENTU1J1bGVMaXN0PiBydWxlTGlzdCA9IGRvY3VtZW50LT5zdHlsZVNlbGVjdG9yKCktPnN0eWxl
UnVsZXNGb3JFbGVtZW50KGRhdGEuZWxlbWVudCgpLCBmYWxzZSk7CisgICAgICAgICAgICBpZiAo
cnVsZUxpc3QgJiYgcnVsZUxpc3QtPmxlbmd0aCgpID4gMCkgeworICAgICAgICAgICAgICAgIENT
U1J1bGUqIHJ1bGUgPSAwOworICAgICAgICAgICAgICAgIFN0cmluZyBjc3NUZXh0OworICAgICAg
ICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcnVsZUxpc3QtPmxlbmd0aCgpOyArK2kpIHsK
KyAgICAgICAgICAgICAgICAgICAgcnVsZSA9IHJ1bGVMaXN0LT5pdGVtKGkpOworICAgICAgICAg
ICAgICAgICAgICBpZiAocnVsZS0+aXNTdHlsZVJ1bGUoKSkgeworICAgICAgICAgICAgICAgICAg
ICAgICAgQ1NTU3R5bGVSdWxlKiBjc1J1bGUgPSBzdGF0aWNfY2FzdDxDU1NTdHlsZVJ1bGUqPihy
dWxlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjc1J1bGUtPnN0eWxlKCkpIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjc3NUZXh0ID0gY3NSdWxlLT5zdHlsZSgpLT5jc3NU
ZXh0KCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGluZGV4ID0gLTE7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlucHV0Rm9ybWF0TWFzay5pc0VtcHR5KCkpIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXggPSBjc3NUZXh0LmZpbmQoIi13
YXAtaW5wdXQtZm9ybWF0Iik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChp
bmRleCAhPSAtMSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHBv
c3Rpb24gPSBjc3NUZXh0LmZpbmQoJzonLCBpbmRleCk7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpbnB1dEZvcm1hdE1hc2sgPSBjc3NUZXh0LnN1YnN0cmluZyhwb3N0aW9u
ICsgMSk7CisgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3N0aW9uID0g
aW5wdXRGb3JtYXRNYXNrLmZpbmQoJzsnKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGlucHV0Rm9ybWF0TWFzay50cnVuY2F0ZShwb3N0aW9uKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGlucHV0Rm9ybWF0TWFzay5yZXBsYWNlKCdcJycsICcgJyk7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dEZvcm1hdE1hc2sgPSBp
bnB1dEZvcm1hdE1hc2suc3RyaXBXaGl0ZVNwYWNlKCk7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpZiAoSW5wdXRFbGVtZW50RGF0YTo6Tm9uZSA9PSBpbnB1dFJlcXVp
cmVtZW50U3RhdGUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXggPSBj
c3NUZXh0LmZpbmQoIi13YXAtaW5wdXQtcmVxdWlyZWQiKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKGluZGV4ICE9IC0xKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpbnQgcG9zdGlvbiA9IGNzc1RleHQuZmluZCgnOicsIGluZGV4KTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyBpbnB1dFJlcXVpcmVkID0gY3Nz
VGV4dC5zdWJzdHJpbmcocG9zdGlvbiArIDEpOworICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcG9zdGlvbiA9IGlucHV0UmVxdWlyZWQuZmluZCgnOycpOworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXRSZXF1aXJlZC50cnVuY2F0ZShwb3N0aW9uKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0UmVxdWlyZWQgPSBpbnB1
dFJlcXVpcmVkLnN0cmlwV2hpdGVTcGFjZSgpOworIAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKCFpbnB1dFJlcXVpcmVkLmlzRW1wdHkoKSkKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dFJlcXVpcmVtZW50U3RhdGUgPSAoaW5wdXRS
ZXF1aXJlZCA9PSAidHJ1ZSIgPyBJbnB1dEVsZW1lbnREYXRhOjpJbnB1dFJlcXVpcmVkIDogSW5w
dXRFbGVtZW50RGF0YTo6SW5wdXROb3RSZXF1aXJlZCk7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKCFpbnB1dEZvcm1hdE1hc2suaXNFbXB0eSgpICYmIElucHV0
RWxlbWVudERhdGE6Ok5vbmUgIT0gaW5wdXRSZXF1aXJlbWVudFN0YXRlKQorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorICAgIH0KKyAKKyAgICBpZiAoaW5wdXRGb3JtYXRNYXNrLmlzRW1wdHkoKSkKKyAg
ICAgICAgZGF0YS5zZXRJbnB1dEZvcm1hdE1hc2soIipNIik7IC8vIHNldCBpbnB1dCBtYXNrIHRv
ICcqTScgYnkgZGVmYXVsdCAKKyAgICBlbHNlCisgICAgICAgIGRhdGEuc2V0SW5wdXRGb3JtYXRN
YXNrKHZhbGlkYXRlSW5wdXRNYXNrKGRhdGEsIGlucHV0Rm9ybWF0TWFzaywgdHJ1ZSkpOworIAor
ICAgIC8vIElmICctd2FwLWlucHV0LXJlcXVpcmVkJyBpcyBub3Qgc3BlY2lmaWVkLCBpbnB1dCBp
cyBzdGlsbCByZXF1aXJlZCB3aGVuCisgICAgLy8gdGhlIGlucHV0IGZvcm1hdCBpcyBub3QgZW1w
dHkgYW5kIHRoZSBjb2RlcyBpcyBub3QgZXF1YWwgdG8gIipmIgorICAgIGlmIChJbnB1dEVsZW1l
bnREYXRhOjpOb25lID09IGlucHV0UmVxdWlyZW1lbnRTdGF0ZSkgeworICAgICAgICBpZiAoaW5w
dXRGb3JtYXRNYXNrLmlzRW1wdHkoKSB8fCAoaW5wdXRGb3JtYXRNYXNrLmxlbmd0aCgpID09IDIg
JiYgaW5wdXRGb3JtYXRNYXNrWzBdID09ICcqJykpCisgICAgICAgICAgICBkYXRhLnNldElucHV0
UmVxdWlyZW1lbnRTdGF0ZShJbnB1dEVsZW1lbnREYXRhOjpJbnB1dE5vdFJlcXVpcmVkKTsKKyAg
ICAgICAgZWxzZQorICAgICAgICAgICAgZGF0YS5zZXRJbnB1dFJlcXVpcmVtZW50U3RhdGUoSW5w
dXRFbGVtZW50RGF0YTo6SW5wdXRSZXF1aXJlZCk7CisgICAgfSBlbHNlCisgICAgICAgIGRhdGEu
c2V0SW5wdXRSZXF1aXJlbWVudFN0YXRlKGlucHV0UmVxdWlyZW1lbnRTdGF0ZSk7Cit9CisjZW5k
aWYKKwogdm9pZCBJbnB1dEVsZW1lbnQ6OmRpc3BhdGNoRm9jdXNFdmVudChJbnB1dEVsZW1lbnRE
YXRhJiBkYXRhLCBEb2N1bWVudCogZG9jdW1lbnQpCiB7CiAgICAgaWYgKCFkYXRhLmlucHV0RWxl
bWVudCgpLT5pc1RleHRGaWVsZCgpKQogICAgICAgICByZXR1cm47CiAKKyNpZiBFTkFCTEUoV0NT
UykKKyAgICB1cGRhdGVJbnB1dFByb3BlcnRpZXNGcm9tV0NTUyhkYXRhLCBkb2N1bWVudCk7Cisj
ZW5kaWYKKwogICAgIHVwZGF0ZVBsYWNlaG9sZGVyVmlzaWJpbGl0eShkYXRhLCBkb2N1bWVudCk7
CiAKICAgICBpZiAoZGF0YS5pbnB1dEVsZW1lbnQoKS0+aXNQYXNzd29yZEZpZWxkKCkgJiYgZG9j
dW1lbnQtPmZyYW1lKCkpCkBAIC03Miw2ICszMTMsMTQgQEAgdm9pZCBJbnB1dEVsZW1lbnQ6OmRp
c3BhdGNoQmx1ckV2ZW50KElucAogICAgIGlmICghZnJhbWUpCiAgICAgICAgIHJldHVybjsKIAor
I2lmIEVOQUJMRShXQ1NTKQorICAgIGlmIChkYXRhLmlucHV0UmVxdWlyZW1lbnRTdGF0ZSgpID09
IElucHV0RWxlbWVudERhdGE6OklucHV0UmVxdWlyZWQgJiYgZGF0YS5lbGVtZW50KCktPnJlbmRl
cmVyKCkpIHsKKyAgICAgICAgU3RyaW5nIGlucHV0ZWRUZXh0ID0gc3RhdGljX2Nhc3Q8UmVuZGVy
VGV4dENvbnRyb2wqPihkYXRhLmVsZW1lbnQoKS0+cmVuZGVyZXIoKSktPnRleHQoKTsKKyAgICAg
ICAgaWYgKGlucHV0ZWRUZXh0LmlzRW1wdHkoKSB8fCAhaXNDb25mb3JtZWRUb0lucHV0TWFzayhk
YXRhLCBpbnB1dGVkVGV4dCkpCisgICAgICAgICAgICBkYXRhLmVsZW1lbnQoKS0+Zm9jdXMoKTsg
CisgICAgfSAKKyNlbmRpZgorCiAgICAgdXBkYXRlUGxhY2Vob2xkZXJWaXNpYmlsaXR5KGRhdGEs
IGRvY3VtZW50KTsKIAogICAgIGlmIChkYXRhLmlucHV0RWxlbWVudCgpLT5pc1Bhc3N3b3JkRmll
bGQoKSkKQEAgLTI3Nyw2ICs1MjYsMTAgQEAgSW5wdXRFbGVtZW50RGF0YTo6SW5wdXRFbGVtZW50
RGF0YShJbnB1dAogICAgICwgbV9tYXhMZW5ndGgoSW5wdXRFbGVtZW50OjpzX21heGltdW1MZW5n
dGgpCiAgICAgLCBtX2NhY2hlZFNlbGVjdGlvblN0YXJ0KC0xKQogICAgICwgbV9jYWNoZWRTZWxl
Y3Rpb25FbmQoLTEpCisjaWYgRU5BQkxFKFdDU1MpCisgICAgLCBtX2lucHV0UmVxdWlyZW1lbnRT
dGF0ZShJbnB1dEVsZW1lbnREYXRhOjpOb25lKQorICAgICwgbV9hbGxvd2VkSW5wdXRDaGFyc01h
eExlbmd0aChJbnB1dEVsZW1lbnQ6OnNfbWF4aW11bUxlbmd0aCkKKyNlbmRpZgogewogICAgIEFT
U0VSVChtX2lucHV0RWxlbWVudCk7CiAgICAgQVNTRVJUKG1fZWxlbWVudCk7CkBAIC0yOTUsNiAr
NTQ4LDEwIEBAIElucHV0RWxlbWVudCogdG9JbnB1dEVsZW1lbnQoRWxlbWVudCogZWwKIHsKICAg
ICBpZiAoZWxlbWVudC0+aXNIVE1MRWxlbWVudCgpICYmIChlbGVtZW50LT5oYXNUYWdOYW1lKGlu
cHV0VGFnKSB8fCBlbGVtZW50LT5oYXNUYWdOYW1lKGlzaW5kZXhUYWcpKSkKICAgICAgICAgcmV0
dXJuIHN0YXRpY19jYXN0PEhUTUxJbnB1dEVsZW1lbnQqPihlbGVtZW50KTsKKyNpZiBFTkFCTEUo
V0NTUykKKyAgICBlbHNlIGlmIChlbGVtZW50LT5pc0hUTUxFbGVtZW50KCkgJiYgZWxlbWVudC0+
aGFzVGFnTmFtZSh0ZXh0YXJlYVRhZykpCisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxIVE1M
VGV4dEFyZWFFbGVtZW50Kj4oZWxlbWVudCk7CisjZW5kaWYKIAogI2lmIEVOQUJMRShXTUwpCiAg
ICAgaWYgKGVsZW1lbnQtPmlzV01MRWxlbWVudCgpICYmIGVsZW1lbnQtPmhhc1RhZ05hbWUoV01M
TmFtZXM6OmlucHV0VGFnKSkKSW5kZXg6IFdlYkNvcmUvZG9tL0lucHV0RWxlbWVudC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvZG9tL0lucHV0RWxlbWVudC5oCShyZXZpc2lvbiA0MDcxNikKKysr
IFdlYkNvcmUvZG9tL0lucHV0RWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC03Nyw2ICs3Nywx
MiBAQCBwcm90ZWN0ZWQ6CiAgICAgc3RhdGljIHZvaWQgcGFyc2VNYXhMZW5ndGhBdHRyaWJ1dGUo
SW5wdXRFbGVtZW50RGF0YSYsIE1hcHBlZEF0dHJpYnV0ZSopOwogICAgIHN0YXRpYyB2b2lkIHVw
ZGF0ZVZhbHVlSWZOZWVkZWQoSW5wdXRFbGVtZW50RGF0YSYpOwogICAgIHN0YXRpYyB2b2lkIG5v
dGlmeUZvcm1TdGF0ZUNoYW5nZWQoSW5wdXRFbGVtZW50RGF0YSYsIERvY3VtZW50Kik7CisjaWYg
RU5BQkxFKFdDU1MpCisgICAgc3RhdGljIGJvb2wgaXNDb25mb3JtZWRUb0lucHV0TWFzayhjb25z
dCBJbnB1dEVsZW1lbnREYXRhJiwgY29uc3QgU3RyaW5nJik7IAorICAgIHN0YXRpYyBib29sIGlz
Q29uZm9ybWVkVG9JbnB1dE1hc2soY29uc3QgSW5wdXRFbGVtZW50RGF0YSYsIFVDaGFyLCB1bnNp
Z25lZCwgdW5zaWduZWQpOworICAgIHN0YXRpYyB2b2lkIHVwZGF0ZUlucHV0UHJvcGVydGllc0Zy
b21XQ1NTKElucHV0RWxlbWVudERhdGEmLCBEb2N1bWVudCopOworICAgIHN0YXRpYyBTdHJpbmcg
dmFsaWRhdGVJbnB1dE1hc2soSW5wdXRFbGVtZW50RGF0YSYsIFN0cmluZyYsIGJvb2wgaXNGcm9t
V0NTUyA9IGZhbHNlKTsKKyNlbmRpZgogfTsKIAogLy8gSFRNTC9XTUxJbnB1dEVsZW1lbnQgaG9s
ZCB0aGlzIHN0cnVjdCBhcyBtZW1iZXIgdmFyaWFibGUKQEAgLTExMCw2ICsxMTYsMTggQEAgcHVi
bGljOgogICAgIGludCBjYWNoZWRTZWxlY3Rpb25FbmQoKSBjb25zdCB7IHJldHVybiBtX2NhY2hl
ZFNlbGVjdGlvbkVuZDsgfQogICAgIHZvaWQgc2V0Q2FjaGVkU2VsZWN0aW9uRW5kKGludCB2YWx1
ZSkgeyBtX2NhY2hlZFNlbGVjdGlvbkVuZCA9IHZhbHVlOyB9CiAKKyNpZiBFTkFCTEUoV0NTUykK
KyAgICBlbnVtIElucHV0UmVxdWlyZW1lbnRTdGF0ZSB7IE5vbmUgPSAtMSwgSW5wdXROb3RSZXF1
aXJlZCwgSW5wdXRSZXF1aXJlZCB9OworICAgIElucHV0UmVxdWlyZW1lbnRTdGF0ZSBpbnB1dFJl
cXVpcmVtZW50U3RhdGUoKSBjb25zdCB7IHJldHVybiBtX2lucHV0UmVxdWlyZW1lbnRTdGF0ZTsg
fQorICAgIHZvaWQgc2V0SW5wdXRSZXF1aXJlbWVudFN0YXRlKElucHV0UmVxdWlyZW1lbnRTdGF0
ZSBzdGF0ZSkgeyBtX2lucHV0UmVxdWlyZW1lbnRTdGF0ZSA9IHN0YXRlOyB9CisKKyAgICBTdHJp
bmcgaW5wdXRGb3JtYXRNYXNrKCkgY29uc3QgeyByZXR1cm4gbV9pbnB1dEZvcm1hdE1hc2s7IH0K
KyAgICB2b2lkIHNldElucHV0Rm9ybWF0TWFzayhjb25zdCBTdHJpbmcmIG1hc2spIHsgbV9pbnB1
dEZvcm1hdE1hc2sgPSBtYXNrOyB9CisKKyAgICB1bnNpZ25lZCBhbGxvd2VkSW5wdXRDaGFyc01h
eExlbmd0aCgpIGNvbnN0IHsgcmV0dXJuIG1fYWxsb3dlZElucHV0Q2hhcnNNYXhMZW5ndGg7IH0K
KyAgICB2b2lkIHNldEFsbG93ZWRJbnB1dENoYXJzTWF4TGVuZ3RoKHVuc2lnbmVkIG1heExlbmd0
aCkgeyBtX2FsbG93ZWRJbnB1dENoYXJzTWF4TGVuZ3RoID0gbWF4TGVuZ3RoOyB9CisjZW5kaWYK
KwogcHJpdmF0ZToKICAgICBJbnB1dEVsZW1lbnQqIG1faW5wdXRFbGVtZW50OwogICAgIEVsZW1l
bnQqIG1fZWxlbWVudDsKQEAgLTEyMCw2ICsxMzgsMTEgQEAgcHJpdmF0ZToKICAgICBpbnQgbV9t
YXhMZW5ndGg7CiAgICAgaW50IG1fY2FjaGVkU2VsZWN0aW9uU3RhcnQ7CiAgICAgaW50IG1fY2Fj
aGVkU2VsZWN0aW9uRW5kOworI2lmIEVOQUJMRShXQ1NTKQorICAgIFN0cmluZyBtX2lucHV0Rm9y
bWF0TWFzazsKKyAgICBJbnB1dFJlcXVpcmVtZW50U3RhdGUgbV9pbnB1dFJlcXVpcmVtZW50U3Rh
dGU7CisgICAgdW5zaWduZWQgbV9hbGxvd2VkSW5wdXRDaGFyc01heExlbmd0aDsKKyNlbmRpZgog
fTsKIAogSW5wdXRFbGVtZW50KiB0b0lucHV0RWxlbWVudChFbGVtZW50Kik7CkluZGV4OiBXZWJD
b3JlL2h0bWwvSFRNTElucHV0RWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1s
L0hUTUxJbnB1dEVsZW1lbnQuY3BwCShyZXZpc2lvbiA0MDcxNikKKysrIFdlYkNvcmUvaHRtbC9I
VE1MSW5wdXRFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA4NCw4ICsxMDg0LDE5IEBA
IHZvaWQgSFRNTElucHV0RWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFuZGwKIHsKICAgICBib29sIGNs
aWNrRGVmYXVsdEZvcm1CdXR0b24gPSBmYWxzZTsKIAorI2lmIEVOQUJMRShXQ1NTKQorICAgIGlm
IChpc1RleHRGaWVsZCgpICYmIGV2dC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS50ZXh0SW5wdXRF
dmVudCAmJiBldnQtPmlzVGV4dEV2ZW50KCkpIHsKKyAgICAgICAgVGV4dEV2ZW50KiB0ZXh0RXZl
bnQgPSBzdGF0aWNfY2FzdDxUZXh0RXZlbnQqPihldnQpOworICAgICAgICBpZiAodGV4dEV2ZW50
LT5kYXRhKCkgPT0gIlxuIikKKyAgICAgICAgICAgIGNsaWNrRGVmYXVsdEZvcm1CdXR0b24gPSB0
cnVlOworICAgICAgICBlbHNlIGlmIChyZW5kZXJlcigpICYmICFpc0NvbmZvcm1lZFRvSW5wdXRN
YXNrKG1fZGF0YSwgdGV4dEV2ZW50LT5kYXRhKClbMF0sIHNlbGVjdGlvblN0YXJ0KCksIHN0YXRp
Y19jYXN0PFJlbmRlclRleHRDb250cm9sKj4ocmVuZGVyZXIoKSktPnRleHQoKS5sZW5ndGgoKSAr
IDEpKQorICAgICAgICAgICAgLy8gSWYgdGhlIGlucHV0ZWQgY2hhcmFjdGVyIGRvZXNuJ3QgY29u
Zm9ybSB0byB0aGUgaW5wdXQgbWFzaywgc3RvcCBoYW5kbGluZyAKKyAgICAgICAgICAgIHJldHVy
bjsKKyAgICB9CisjZWxzZQogICAgIGlmIChpc1RleHRGaWVsZCgpICYmIGV2dC0+dHlwZSgpID09
IGV2ZW50TmFtZXMoKS50ZXh0SW5wdXRFdmVudCAmJiBldnQtPmlzVGV4dEV2ZW50KCkgJiYgc3Rh
dGljX2Nhc3Q8VGV4dEV2ZW50Kj4oZXZ0KS0+ZGF0YSgpID09ICJcbiIpCiAgICAgICAgIGNsaWNr
RGVmYXVsdEZvcm1CdXR0b24gPSB0cnVlOworI2VuZGlmCiAKICAgICBpZiAoaW5wdXRUeXBlKCkg
PT0gSU1BR0UgJiYgZXZ0LT5pc01vdXNlRXZlbnQoKSAmJiBldnQtPnR5cGUoKSA9PSBldmVudE5h
bWVzKCkuY2xpY2tFdmVudCkgewogICAgICAgICAvLyByZWNvcmQgdGhlIG1vdXNlIHBvc2l0aW9u
IGZvciB3aGVuIHdlIGdldCB0aGUgRE9NQWN0aXZhdGUgZXZlbnQKSW5kZXg6IFdlYkNvcmUvaHRt
bC9IVE1MVGV4dEFyZWFFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRN
TFRleHRBcmVhRWxlbWVudC5jcHAJKHJldmlzaW9uIDQwNzE2KQorKysgV2ViQ29yZS9odG1sL0hU
TUxUZXh0QXJlYUVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOSw2ICszOSw5IEBACiAj
aW5jbHVkZSAiUmVuZGVyVGV4dENvbnRyb2xNdWx0aUxpbmUuaCIKICNpbmNsdWRlICJTZWxlY3Rp
b24uaCIKICNpbmNsdWRlICJUZXh0LmgiCisjaWYgRU5BQkxFKFdDU1MpCisjaW5jbHVkZSAiVGV4
dEV2ZW50LmgiCisjZW5kaWYKICNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKQEAgLTQ4LDYgKzUxLDcgQEAgdXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1l
czsKIHN0YXRpYyBjb25zdCBpbnQgZGVmYXVsdFJvd3MgPSAyOwogc3RhdGljIGNvbnN0IGludCBk
ZWZhdWx0Q29scyA9IDIwOwogCisjaWYgIUVOQUJMRShXQ1NTKQogc3RhdGljIGlubGluZSB2b2lk
IG5vdGlmeUZvcm1TdGF0ZUNoYW5nZWQoY29uc3QgSFRNTFRleHRBcmVhRWxlbWVudCogZWxlbWVu
dCkKIHsKICAgICBGcmFtZSogZnJhbWUgPSBlbGVtZW50LT5kb2N1bWVudCgpLT5mcmFtZSgpOwpA
QCAtNTUsMTggKzU5LDI3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBub3RpZnlGb3JtU3RhdGVDaGFu
Z2UKICAgICAgICAgcmV0dXJuOwogICAgIGZyYW1lLT5wYWdlKCktPmNocm9tZSgpLT5jbGllbnQo
KS0+Zm9ybVN0YXRlRGlkQ2hhbmdlKGVsZW1lbnQpOwogfQorI2VuZGlmCiAKIEhUTUxUZXh0QXJl
YUVsZW1lbnQ6OkhUTUxUZXh0QXJlYUVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFt
ZSwgRG9jdW1lbnQqIGRvY3VtZW50LCBIVE1MRm9ybUVsZW1lbnQqIGZvcm0pCiAgICAgOiBIVE1M
Rm9ybUNvbnRyb2xFbGVtZW50V2l0aFN0YXRlKHRhZ05hbWUsIGRvY3VtZW50LCBmb3JtKQogICAg
ICwgbV9yb3dzKGRlZmF1bHRSb3dzKQogICAgICwgbV9jb2xzKGRlZmF1bHRDb2xzKQogICAgICwg
bV93cmFwKFNvZnRXcmFwKQorI2lmIEVOQUJMRShXQ1NTKQorICAgICwgbV9kYXRhKHRoaXMsIHRo
aXMpCisjZWxzZQogICAgICwgbV9jYWNoZWRTZWxlY3Rpb25TdGFydCgtMSkKICAgICAsIG1fY2Fj
aGVkU2VsZWN0aW9uRW5kKC0xKQorI2VuZGlmCiB7CiAgICAgQVNTRVJUKGhhc1RhZ05hbWUodGV4
dGFyZWFUYWcpKTsKICAgICBzZXRWYWx1ZU1hdGNoZXNSZW5kZXJlcigpOworI2lmIEVOQUJMRShX
Q1NTKQorICAgIG5vdGlmeUZvcm1TdGF0ZUNoYW5nZWQobV9kYXRhLCBkb2N1bWVudCk7CisjZWxz
ZQogICAgIG5vdGlmeUZvcm1TdGF0ZUNoYW5nZWQodGhpcyk7CisjZW5kaWYKIH0KIAogY29uc3Qg
QXRvbWljU3RyaW5nJiBIVE1MVGV4dEFyZWFFbGVtZW50Ojp0eXBlKCkgY29uc3QKQEAgLTkwLDgg
KzEwMywxMyBAQCBpbnQgSFRNTFRleHRBcmVhRWxlbWVudDo6c2VsZWN0aW9uU3RhcnQoCiB7CiAg
ICAgaWYgKCFyZW5kZXJlcigpKQogICAgICAgICByZXR1cm4gMDsKKyNpZiBFTkFCTEUoV0NTUykK
KyAgICBpZiAoZG9jdW1lbnQoKS0+Zm9jdXNlZE5vZGUoKSAhPSB0aGlzICYmIG1fZGF0YS5jYWNo
ZWRTZWxlY3Rpb25TdGFydCgpICE9IC0xKQorICAgICAgICByZXR1cm4gbV9kYXRhLmNhY2hlZFNl
bGVjdGlvblN0YXJ0KCk7CisjZWxzZQogICAgIGlmIChkb2N1bWVudCgpLT5mb2N1c2VkTm9kZSgp
ICE9IHRoaXMgJiYgbV9jYWNoZWRTZWxlY3Rpb25TdGFydCA+PSAwKQogICAgICAgICByZXR1cm4g
bV9jYWNoZWRTZWxlY3Rpb25TdGFydDsKKyNlbmRpZgogICAgIHJldHVybiBzdGF0aWNfY2FzdDxS
ZW5kZXJUZXh0Q29udHJvbCo+KHJlbmRlcmVyKCkpLT5zZWxlY3Rpb25TdGFydCgpOwogfQogCkBA
IC05OSw4ICsxMTcsMTMgQEAgaW50IEhUTUxUZXh0QXJlYUVsZW1lbnQ6OnNlbGVjdGlvbkVuZCgp
CiB7CiAgICAgaWYgKCFyZW5kZXJlcigpKQogICAgICAgICByZXR1cm4gMDsKKyNpZiBFTkFCTEUo
V0NTUykKKyAgICBpZiAoZG9jdW1lbnQoKS0+Zm9jdXNlZE5vZGUoKSAhPSB0aGlzICYmIG1fZGF0
YS5jYWNoZWRTZWxlY3Rpb25FbmQoKSAhPSAtMSkKKyAgICAgICAgcmV0dXJuIG1fZGF0YS5jYWNo
ZWRTZWxlY3Rpb25FbmQoKTsKKyNlbHNlCiAgICAgaWYgKGRvY3VtZW50KCktPmZvY3VzZWROb2Rl
KCkgIT0gdGhpcyAmJiBtX2NhY2hlZFNlbGVjdGlvbkVuZCA+PSAwKQogICAgICAgICByZXR1cm4g
bV9jYWNoZWRTZWxlY3Rpb25FbmQ7CisjZW5kaWYKICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8UmVu
ZGVyVGV4dENvbnRyb2wqPihyZW5kZXJlcigpKS0+c2VsZWN0aW9uRW5kKCk7CiB9CiAKQEAgLTEy
OSw3ICsxNTIsMTEgQEAgdm9pZCBIVE1MVGV4dEFyZWFFbGVtZW50OjpzZXRTZWxlY3Rpb25SYQog
ewogICAgIGlmICghcmVuZGVyZXIoKSkKICAgICAgICAgcmV0dXJuOworI2lmIEVOQUJMRShXQ1NT
KQorICAgIElucHV0RWxlbWVudDo6dXBkYXRlU2VsZWN0aW9uUmFuZ2UobV9kYXRhLCBzdGFydCwg
ZW5kKTsKKyNlbHNlCiAgICAgc3RhdGljX2Nhc3Q8UmVuZGVyVGV4dENvbnRyb2wqPihyZW5kZXJl
cigpKS0+c2V0U2VsZWN0aW9uUmFuZ2Uoc3RhcnQsIGVuZCk7CisjZW5kaWYKIH0KIAogdm9pZCBI
VE1MVGV4dEFyZWFFbGVtZW50OjpjaGlsZHJlbkNoYW5nZWQoYm9vbCBjaGFuZ2VkQnlQYXJzZXIs
IE5vZGUqIGJlZm9yZUNoYW5nZSwgTm9kZSogYWZ0ZXJDaGFuZ2UsIGludCBjaGlsZENvdW50RGVs
dGEpCkBAIC0yMjgsNiArMjU1LDkgQEAgdm9pZCBIVE1MVGV4dEFyZWFFbGVtZW50Ojp1cGRhdGVG
b2N1c0FwcAogewogICAgIEFTU0VSVChyZW5kZXJlcigpKTsKICAgICAKKyNpZiBFTkFCTEUoV0NT
UykKKyAgICBJbnB1dEVsZW1lbnQ6OnVwZGF0ZUZvY3VzQXBwZWFyYW5jZShtX2RhdGEsIGRvY3Vt
ZW50KCksIHJlc3RvcmVQcmV2aW91c1NlbGVjdGlvbik7CisjZWxzZQogICAgIGlmICghcmVzdG9y
ZVByZXZpb3VzU2VsZWN0aW9uIHx8IG1fY2FjaGVkU2VsZWN0aW9uU3RhcnQgPCAwKSB7CiAjaWYg
RU5BQkxFKE9OX0ZJUlNUX1RFWFRBUkVBX0ZPQ1VTX1NFTEVDVF9BTEwpCiAgICAgICAgIC8vIERl
dmljZXMgd2l0aCB0cmFja2JhbGxzIG9yIGQtcGFkcyBtYXkgZm9jdXMgb24gYSB0ZXh0YXJlYSBp
biByb3V0ZQpAQCAtMjQ3LDEwICsyNzcsNDcgQEAgdm9pZCBIVE1MVGV4dEFyZWFFbGVtZW50Ojp1
cGRhdGVGb2N1c0FwcAogCiAgICAgaWYgKGRvY3VtZW50KCktPmZyYW1lKCkpCiAgICAgICAgIGRv
Y3VtZW50KCktPmZyYW1lKCktPnJldmVhbFNlbGVjdGlvbigpOworI2VuZGlmCit9CisKKyNpZiBF
TkFCTEUoV0NTUykKK3ZvaWQgSFRNTFRleHRBcmVhRWxlbWVudDo6c2V0VmFsdWVGcm9tUmVuZGVy
ZXIoY29uc3QgU3RyaW5nJiB2YWx1ZSkKK3sKKyAgICBJbnB1dEVsZW1lbnQ6OnNldFZhbHVlRnJv
bVJlbmRlcmVyKG1fZGF0YSwgZG9jdW1lbnQoKSwgdmFsdWUpOworfQorCitTdHJpbmcgSFRNTFRl
eHRBcmVhRWxlbWVudDo6Y29uc3RyYWluVmFsdWUoY29uc3QgU3RyaW5nJiBwcm9wb3NlZFZhbHVl
KSBjb25zdAoreworICAgIHJldHVybiBJbnB1dEVsZW1lbnQ6OmNvbnN0cmFpblZhbHVlKG1fZGF0
YSwgcHJvcG9zZWRWYWx1ZSwgbV9kYXRhLm1heExlbmd0aCgpKTsKIH0KIAordm9pZCBIVE1MVGV4
dEFyZWFFbGVtZW50OjpjYWNoZVNlbGVjdGlvbihpbnQgc3RhcnQsIGludCBlbmQpCit7CisgICAg
bV9kYXRhLnNldENhY2hlZFNlbGVjdGlvblN0YXJ0KHN0YXJ0KTsKKyAgICBtX2RhdGEuc2V0Q2Fj
aGVkU2VsZWN0aW9uRW5kKGVuZCk7Cit9CisKK3ZvaWQgSFRNTFRleHRBcmVhRWxlbWVudDo6ZGlz
cGF0Y2hGb2N1c0V2ZW50KCkKK3sKKyAgICBJbnB1dEVsZW1lbnQ6OmRpc3BhdGNoRm9jdXNFdmVu
dChtX2RhdGEsIGRvY3VtZW50KCkpOworICAgIEhUTUxGb3JtQ29udHJvbEVsZW1lbnRXaXRoU3Rh
dGU6OmRpc3BhdGNoRm9jdXNFdmVudCgpOworfQorIAordm9pZCBIVE1MVGV4dEFyZWFFbGVtZW50
OjpkaXNwYXRjaEJsdXJFdmVudCgpCit7CisgICAgSW5wdXRFbGVtZW50OjpkaXNwYXRjaEJsdXJF
dmVudChtX2RhdGEsIGRvY3VtZW50KCkpOworICAgIEhUTUxGb3JtQ29udHJvbEVsZW1lbnRXaXRo
U3RhdGU6OmRpc3BhdGNoQmx1ckV2ZW50KCk7Cit9CisjZW5kaWYKKwogdm9pZCBIVE1MVGV4dEFy
ZWFFbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVyKEV2ZW50KiBldmVudCkKIHsKKyNpZiBFTkFC
TEUoV0NTUykKKyAgICBpZiAoZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkudGV4dElucHV0
RXZlbnQgJiYgZXZlbnQtPmlzVGV4dEV2ZW50KCkgJiYgcmVuZGVyZXIoKSAKKyAgICAgICAgJiYg
IWlzQ29uZm9ybWVkVG9JbnB1dE1hc2sobV9kYXRhLCBzdGF0aWNfY2FzdDxUZXh0RXZlbnQqPihl
dmVudCktPmRhdGEoKVswXSwgc2VsZWN0aW9uU3RhcnQoKSwgc3RhdGljX2Nhc3Q8UmVuZGVyVGV4
dENvbnRyb2wqPihyZW5kZXJlcigpKS0+dGV4dCgpLmxlbmd0aCgpICsgMSkpCisgICAgICAgIHJl
dHVybjsKKyNlbmRpZgorCiAgICAgaWYgKHJlbmRlcmVyKCkgJiYgKGV2ZW50LT5pc01vdXNlRXZl
bnQoKSB8fCBldmVudC0+aXNEcmFnRXZlbnQoKSB8fCBldmVudC0+aXNXaGVlbEV2ZW50KCkgfHwg
ZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkuYmx1ckV2ZW50KSkKICAgICAgICAgc3RhdGlj
X2Nhc3Q8UmVuZGVyVGV4dENvbnRyb2xNdWx0aUxpbmUqPihyZW5kZXJlcigpKS0+Zm9yd2FyZEV2
ZW50KGV2ZW50KTsKIApAQCAtMjcwLDcgKzMzNywxMSBAQCB2b2lkIEhUTUxUZXh0QXJlYUVsZW1l
bnQ6OnVwZGF0ZVZhbHVlKCkgCiAgICAgQVNTRVJUKHJlbmRlcmVyKCkpOwogICAgIG1fdmFsdWUg
PSBzdGF0aWNfY2FzdDxSZW5kZXJUZXh0Q29udHJvbCo+KHJlbmRlcmVyKCkpLT50ZXh0KCk7CiAg
ICAgY29uc3RfY2FzdDxIVE1MVGV4dEFyZWFFbGVtZW50Kj4odGhpcyktPnNldFZhbHVlTWF0Y2hl
c1JlbmRlcmVyKCk7CisjaWYgRU5BQkxFKFdDU1MpCisgICAgbm90aWZ5Rm9ybVN0YXRlQ2hhbmdl
ZCgqKGNvbnN0X2Nhc3Q8SW5wdXRFbGVtZW50RGF0YSo+KCZtX2RhdGEpKSwgZG9jdW1lbnQoKSk7
CisjZWxzZQogICAgIG5vdGlmeUZvcm1TdGF0ZUNoYW5nZWQodGhpcyk7CisjZW5kaWYKIH0KIAog
U3RyaW5nIEhUTUxUZXh0QXJlYUVsZW1lbnQ6OnZhbHVlKCkgY29uc3QKQEAgLTMwNiw3ICszNzcs
MTEgQEAgdm9pZCBIVE1MVGV4dEFyZWFFbGVtZW50OjpzZXRWYWx1ZShjb25zdAogICAgIH0KIAog
ICAgIHNldENoYW5nZWQoKTsKKyNpZiBFTkFCTEUoV0NTUykKKyAgICBub3RpZnlGb3JtU3RhdGVD
aGFuZ2VkKG1fZGF0YSwgZG9jdW1lbnQoKSk7CisjZWxzZQogICAgIG5vdGlmeUZvcm1TdGF0ZUNo
YW5nZWQodGhpcyk7CisjZW5kaWYKIH0KIAogU3RyaW5nIEhUTUxUZXh0QXJlYUVsZW1lbnQ6OmRl
ZmF1bHRWYWx1ZSgpIGNvbnN0CkBAIC0zODMsOSArNDU4LDE3IEBAIHZvaWQgSFRNTFRleHRBcmVh
RWxlbWVudDo6c2V0Um93cyhpbnQgcm8KIAogU2VsZWN0aW9uIEhUTUxUZXh0QXJlYUVsZW1lbnQ6
OnNlbGVjdGlvbigpIGNvbnN0CiB7CisjaWYgRU5BQkxFKFdDU1MpCisgICAgaWYgKCFyZW5kZXJl
cigpIHx8IG1fZGF0YS5jYWNoZWRTZWxlY3Rpb25TdGFydCgpID09IC0xIHx8IG1fZGF0YS5jYWNo
ZWRTZWxlY3Rpb25FbmQoKSA9PSAtMSkKKyNlbHNlCiAgICAgaWYgKCFyZW5kZXJlcigpIHx8IG1f
Y2FjaGVkU2VsZWN0aW9uU3RhcnQgPCAwIHx8IG1fY2FjaGVkU2VsZWN0aW9uRW5kIDwgMCkKKyNl
bmRpZgogICAgICAgICByZXR1cm4gU2VsZWN0aW9uKCk7CisjaWYgRU5BQkxFKFdDU1MpCisgICAg
cmV0dXJuIHN0YXRpY19jYXN0PFJlbmRlclRleHRDb250cm9sKj4ocmVuZGVyZXIoKSktPnNlbGVj
dGlvbihtX2RhdGEuY2FjaGVkU2VsZWN0aW9uU3RhcnQoKSwgbV9kYXRhLmNhY2hlZFNlbGVjdGlv
bkVuZCgpKTsKKyNlbHNlCiAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFJlbmRlclRleHRDb250cm9s
Kj4ocmVuZGVyZXIoKSktPnNlbGVjdGlvbihtX2NhY2hlZFNlbGVjdGlvblN0YXJ0LCBtX2NhY2hl
ZFNlbGVjdGlvbkVuZCk7CisjZW5kaWYKIH0KIAogYm9vbCBIVE1MVGV4dEFyZWFFbGVtZW50Ojpz
aG91bGRVc2VJbnB1dE1ldGhvZCgpIGNvbnN0CkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTFRleHRB
cmVhRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MVGV4dEFyZWFFbGVt
ZW50LmgJKHJldmlzaW9uIDQwNzE2KQorKysgV2ViQ29yZS9odG1sL0hUTUxUZXh0QXJlYUVsZW1l
bnQuaAkod29ya2luZyBjb3B5KQpAQCAtMjUsMTIgKzI1LDE5IEBACiAjZGVmaW5lIEhUTUxUZXh0
QXJlYUVsZW1lbnRfaAogCiAjaW5jbHVkZSAiSFRNTEZvcm1Db250cm9sRWxlbWVudC5oIgorI2lm
IEVOQUJMRShXQ1NTKQorI2luY2x1ZGUgIklucHV0RWxlbWVudC5oIgorI2VuZGlmCiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgU2VsZWN0aW9uOwogCisjaWYgRU5BQkxFKFdDU1MpCitj
bGFzcyBIVE1MVGV4dEFyZWFFbGVtZW50IDogcHVibGljIEhUTUxGb3JtQ29udHJvbEVsZW1lbnRX
aXRoU3RhdGUsIHB1YmxpYyBJbnB1dEVsZW1lbnQgeworI2Vsc2UKIGNsYXNzIEhUTUxUZXh0QXJl
YUVsZW1lbnQgOiBwdWJsaWMgSFRNTEZvcm1Db250cm9sRWxlbWVudFdpdGhTdGF0ZSB7CisjZW5k
aWYKIHB1YmxpYzoKICAgICBIVE1MVGV4dEFyZWFFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUm
LCBEb2N1bWVudCosIEhUTUxGb3JtRWxlbWVudCogPSAwKTsKIApAQCAtNzAsNiArNzcsMjcgQEAg
cHVibGljOgogICAgIHZpcnR1YWwgYm9vbCBpc01vdXNlRm9jdXNhYmxlKCkgY29uc3Q7CiAgICAg
dmlydHVhbCBib29sIGlzS2V5Ym9hcmRGb2N1c2FibGUoS2V5Ym9hcmRFdmVudCopIGNvbnN0Owog
ICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVGb2N1c0FwcGVhcmFuY2UoYm9vbCByZXN0b3JlUHJldmlv
dXNTZWxlY3Rpb24pOworI2lmIEVOQUJMRShXQ1NTKQorICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRj
aEZvY3VzRXZlbnQoKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2hCbHVyRXZlbnQoKTsKKwor
ICAgIHZpcnR1YWwgYm9vbCBpc0NoZWNrZWQoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorICAg
IHZpcnR1YWwgYm9vbCBpc0F1dG9maWxsZWQoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfSAKKyAg
ICB2aXJ0dWFsIGJvb2wgaXNJbmRldGVybWluYXRlKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0K
KyAgICB2aXJ0dWFsIGJvb2wgaXNSYWRpb0J1dHRvbigpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9
CisgICAgdmlydHVhbCBib29sIGlzVGV4dEZpZWxkKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQor
ICAgIHZpcnR1YWwgYm9vbCBpc1NlYXJjaEZpZWxkKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0K
KyAgICB2aXJ0dWFsIGJvb2wgaXNJbnB1dFR5cGVIaWRkZW4oKSBjb25zdCB7IHJldHVybiBmYWxz
ZTsgfQorICAgIHZpcnR1YWwgYm9vbCBpc1Bhc3N3b3JkRmllbGQoKSBjb25zdCB7IHJldHVybiBm
YWxzZTsgfQorICAgIHZpcnR1YWwgYm9vbCBzZWFyY2hFdmVudHNTaG91bGRCZURpc3BhdGNoZWQo
KSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorICAgIHZpcnR1YWwgYm9vbCBwbGFjZWhvbGRlclNo
b3VsZEJlVmlzaWJsZSgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisKKyAgICB2aXJ0dWFsIGlu
dCBzaXplKCkgY29uc3QgeyByZXR1cm4gMDsgfQorICAgIHZpcnR1YWwgU3RyaW5nIHBsYWNlaG9s
ZGVyVmFsdWUoKSBjb25zdCB7IHJldHVybiBTdHJpbmcoKTsgfSAKKworICAgIHZpcnR1YWwgU3Ry
aW5nIGNvbnN0cmFpblZhbHVlKGNvbnN0IFN0cmluZyYpIGNvbnN0OworICAgIHZpcnR1YWwgdm9p
ZCBzZXRWYWx1ZUZyb21SZW5kZXJlcihjb25zdCBTdHJpbmcmKTsKKyNlbmRpZgogCiAgICAgU3Ry
aW5nIHZhbHVlKCkgY29uc3Q7CiAgICAgdm9pZCBzZXRWYWx1ZShjb25zdCBTdHJpbmcmKTsKQEAg
LTg2LDcgKzExNCwxMSBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRDb2xzKGludCk7CiAgICAgdm9p
ZCBzZXRSb3dzKGludCk7CiAgICAgCisjaWYgRU5BQkxFKFdDU1MpCisgICAgdm9pZCBjYWNoZVNl
bGVjdGlvbihpbnQgcywgaW50IGUpOworI2Vsc2UKICAgICB2b2lkIGNhY2hlU2VsZWN0aW9uKGlu
dCBzLCBpbnQgZSkgeyBtX2NhY2hlZFNlbGVjdGlvblN0YXJ0ID0gczsgbV9jYWNoZWRTZWxlY3Rp
b25FbmQgPSBlOyB9OworI2VuZGlmCiAgICAgU2VsZWN0aW9uIHNlbGVjdGlvbigpIGNvbnN0Owog
CiAgICAgdmlydHVhbCBib29sIHNob3VsZFVzZUlucHV0TWV0aG9kKCkgY29uc3Q7CkBAIC0xMDAs
OCArMTMyLDEyIEBAIHByaXZhdGU6CiAgICAgaW50IG1fY29sczsKICAgICBXcmFwTWV0aG9kIG1f
d3JhcDsKICAgICBtdXRhYmxlIFN0cmluZyBtX3ZhbHVlOworI2lmIEVOQUJMRShXQ1NTKQorICAg
IElucHV0RWxlbWVudERhdGEgbV9kYXRhOworI2Vsc2UKICAgICBpbnQgbV9jYWNoZWRTZWxlY3Rp
b25TdGFydDsKICAgICBpbnQgbV9jYWNoZWRTZWxlY3Rpb25FbmQ7CisjZW5kaWYKIH07CiAKIH0g
Ly9uYW1lc3BhY2UKSW5kZXg6IFdlYkNvcmUvd21sL1dNTElucHV0RWxlbWVudC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS93bWwvV01MSW5wdXRFbGVtZW50LmNwcAkocmV2aXNpb24gNDA3MTYp
CisrKyBXZWJDb3JlL3dtbC9XTUxJbnB1dEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00
MCw4ICs0MCwxMCBAQCBXTUxJbnB1dEVsZW1lbnQ6OldNTElucHV0RWxlbWVudChjb25zdCBRCiAg
ICAgOiBXTUxGb3JtQ29udHJvbEVsZW1lbnRXaXRoU3RhdGUodGFnTmFtZSwgZG9jKQogICAgICwg
bV9kYXRhKHRoaXMsIHRoaXMpCiAgICAgLCBtX2lzUGFzc3dvcmRGaWVsZChmYWxzZSkKKyNpZiAh
RU5BQkxFKFdDU1MpCiAgICAgLCBtX2lzRW1wdHlPayhmYWxzZSkKICAgICAsIG1fbnVtT2ZDaGFy
c0FsbG93ZWRCeU1hc2soMCkKKyNlbmRpZgogewogfQogCkBAIC01MSwxMSArNTMsMTMgQEAgV01M
SW5wdXRFbGVtZW50Ojp+V01MSW5wdXRFbGVtZW50KCkKICAgICAgICAgZG9jdW1lbnQoKS0+dW5y
ZWdpc3RlckZvckRvY3VtZW50QWN0aXZhdGlvbkNhbGxiYWNrcyh0aGlzKTsKIH0KIAorI2lmICFF
TkFCTEUoV0NTUykKIHN0YXRpYyBjb25zdCBBdG9taWNTdHJpbmcmIGZvcm1hdENvZGVzKCkKIHsK
ICAgICBERUZJTkVfU1RBVElDX0xPQ0FMKEF0b21pY1N0cmluZywgY29kZXMsICgiQWFOblh4TW0i
KSk7CiAgICAgcmV0dXJuIGNvZGVzOwogfQorI2VuZGlmCiAKIGJvb2wgV01MSW5wdXRFbGVtZW50
Ojppc0tleWJvYXJkRm9jdXNhYmxlKEtleWJvYXJkRXZlbnQqKSBjb25zdAogewpAQCAtNzUsMTkg
Kzc5LDI3IEBAIHZvaWQgV01MSW5wdXRFbGVtZW50OjpkaXNwYXRjaEZvY3VzRXZlbnQKIAogdm9p
ZCBXTUxJbnB1dEVsZW1lbnQ6OmRpc3BhdGNoQmx1ckV2ZW50KCkKIHsKKyNpZiBFTkFCTEUoV0NT
UykKKyAgICBJbnB1dEVsZW1lbnQ6OmRpc3BhdGNoQmx1ckV2ZW50KG1fZGF0YSwgZG9jdW1lbnQo
KSk7CisjZW5kaWYKKwogICAgIC8vIEZpcnN0bHkgY2hlY2sgaWYgaXQgaXMgYWxsb3dlZCB0byBs
ZWF2ZSB0aGlzIGlucHV0IGZpZWxkCiAgICAgU3RyaW5nIHZhbCA9IHZhbHVlKCk7CisjaWYgIUVO
QUJMRShXQ1NTKQogICAgIGlmICgoIW1faXNFbXB0eU9rICYmIHZhbC5pc0VtcHR5KCkpIHx8ICFp
c0NvbmZvcm1lZFRvSW5wdXRNYXNrKHZhbCkpIHsKICAgICAgICAgdXBkYXRlRm9jdXNBcHBlYXJh
bmNlKHRydWUpOwogICAgICAgICByZXR1cm47CiAgICAgfQorI2VuZGlmCiAKICAgICAvLyB1cGRh
dGUgdGhlIG5hbWUgdmFyaWFibGUgb2YgV01MIGlucHV0IGVsbWVuZXQKICAgICBTdHJpbmcgbmFt
ZVZhcmlhYmxlID0gbmFtZSgpOwogICAgIGlmICghbmFtZVZhcmlhYmxlLmlzRW1wdHkoKSkKICAg
ICAgICAgd21sUGFnZVN0YXRlRm9yRG9jdW1lbnQoZG9jdW1lbnQoKSktPnN0b3JlVmFyaWFibGUo
bmFtZVZhcmlhYmxlLCB2YWwpOyAKIAorI2lmICFFTkFCTEUoV0NTUykKICAgICBJbnB1dEVsZW1l
bnQ6OmRpc3BhdGNoQmx1ckV2ZW50KG1fZGF0YSwgZG9jdW1lbnQoKSk7CisjZW5kaWYKICAgICBX
TUxFbGVtZW50OjpkaXNwYXRjaEJsdXJFdmVudCgpOwogfQogCkBAIC0yMDEsOSArMjEzLDI1IEBA
IHZvaWQgV01MSW5wdXRFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnUKICAgICBlbHNlIGlmIChh
dHRyLT5uYW1lKCkgPT0gSFRNTE5hbWVzOjpzaXplQXR0cikKICAgICAgICAgSW5wdXRFbGVtZW50
OjpwYXJzZVNpemVBdHRyaWJ1dGUobV9kYXRhLCBhdHRyKTsKICAgICBlbHNlIGlmIChhdHRyLT5u
YW1lKCkgPT0gV01MTmFtZXM6OmZvcm1hdEF0dHIpCisjaWYgRU5BQkxFKFdDU1MpCisgICAgewor
ICAgICAgICBTdHJpbmcgaW5wdXRNYXNrID0gcGFyc2VWYWx1ZUZvcmJpZGRpbmdWYXJpYWJsZVJl
ZmVyZW5jZXMoYXR0ci0+dmFsdWUoKSk7CisgICAgICAgIG1fZGF0YS5zZXRJbnB1dEZvcm1hdE1h
c2sodmFsaWRhdGVJbnB1dE1hc2sobV9kYXRhLCBpbnB1dE1hc2spKTsgCisgICAgfQorI2Vsc2UK
ICAgICAgICAgbV9mb3JtYXRNYXNrID0gdmFsaWRhdGVJbnB1dE1hc2socGFyc2VWYWx1ZUZvcmJp
ZGRpbmdWYXJpYWJsZVJlZmVyZW5jZXMoYXR0ci0+dmFsdWUoKSkpOworI2VuZGlmCiAgICAgZWxz
ZSBpZiAoYXR0ci0+bmFtZSgpID09IFdNTE5hbWVzOjplbXB0eW9rQXR0cikKKyNpZiBFTkFCTEUo
V0NTUykKKyAgICB7CisgICAgICAgIGlmIChhdHRyLT52YWx1ZSgpID09ICJ0cnVlIikKKyAgICAg
ICAgICAgIG1fZGF0YS5zZXRJbnB1dFJlcXVpcmVtZW50U3RhdGUoSW5wdXRFbGVtZW50RGF0YTo6
SW5wdXROb3RSZXF1aXJlZCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG1fZGF0YS5zZXRJ
bnB1dFJlcXVpcmVtZW50U3RhdGUoSW5wdXRFbGVtZW50RGF0YTo6SW5wdXRSZXF1aXJlZCk7Cisg
ICAgfQorI2Vsc2UKICAgICAgICAgbV9pc0VtcHR5T2sgPSAoYXR0ci0+dmFsdWUoKSA9PSAidHJ1
ZSIpOworI2VuZGlmCiAgICAgZWxzZQogICAgICAgICBXTUxFbGVtZW50OjpwYXJzZU1hcHBlZEF0
dHJpYnV0ZShhdHRyKTsKIApAQCAtMjcxLDcgKzI5OSwxMSBAQCB2b2lkIFdNTElucHV0RWxlbWVu
dDo6ZGVmYXVsdEV2ZW50SGFuZGxlCiAgICAgICAgIFRleHRFdmVudCogdGV4dEV2ZW50ID0gc3Rh
dGljX2Nhc3Q8VGV4dEV2ZW50Kj4oZXZ0KTsKICAgICAgICAgaWYgKHRleHRFdmVudC0+ZGF0YSgp
ID09ICJcbiIpCiAgICAgICAgICAgICBjbGlja0RlZmF1bHRGb3JtQnV0dG9uID0gdHJ1ZTsKKyNp
ZiBFTkFCTEUoV0NTUykKKyAgICAgICAgZWxzZSBpZiAocmVuZGVyZXIoKSAmJiAhaXNDb25mb3Jt
ZWRUb0lucHV0TWFzayhtX2RhdGEsIHRleHRFdmVudC0+ZGF0YSgpWzBdLCBzZWxlY3Rpb25TdGFy
dCgpLCBzdGF0aWNfY2FzdDxSZW5kZXJUZXh0Q29udHJvbCo+KHJlbmRlcmVyKCkpLT50ZXh0KCku
bGVuZ3RoKCkgKyAxKSkKKyNlbHNlCiAgICAgICAgIGVsc2UgaWYgKHJlbmRlcmVyKCkgJiYgIWlz
Q29uZm9ybWVkVG9JbnB1dE1hc2sodGV4dEV2ZW50LT5kYXRhKClbMF0sIHN0YXRpY19jYXN0PFJl
bmRlclRleHRDb250cm9sKj4ocmVuZGVyZXIoKSktPnRleHQoKS5sZW5ndGgoKSArIDEpKQorI2Vu
ZGlmCiAgICAgICAgICAgICAvLyBJZiB0aGUgaW5wdXRlZCBjaGFyIGRvZXNuJ3QgY29uZm9ybSB0
byB0aGUgaW5wdXQgbWFzaywgc3RvcCBoYW5kbGluZyAKICAgICAgICAgICAgIHJldHVybjsKICAg
ICB9CkBAIC0zNjgsOSArNDAwLDE3IEBAIHZvaWQgV01MSW5wdXRFbGVtZW50Ojppbml0KCkKICAg
ICBpZiAoIW5hbWVWYXJpYWJsZS5pc0VtcHR5KCkpCiAgICAgICAgIHZhcmlhYmxlVmFsdWUgPSBw
YWdlU2F0ZS0+Z2V0VmFyaWFibGUobmFtZVZhcmlhYmxlKTsKIAorI2lmIEVOQUJMRShXQ1NTKQor
ICAgIGlmICh2YXJpYWJsZVZhbHVlLmlzRW1wdHkoKSB8fCAhaXNDb25mb3JtZWRUb0lucHV0TWFz
ayhtX2RhdGEsIHZhcmlhYmxlVmFsdWUpKSB7CisjZWxzZQogICAgIGlmICh2YXJpYWJsZVZhbHVl
LmlzRW1wdHkoKSB8fCAhaXNDb25mb3JtZWRUb0lucHV0TWFzayh2YXJpYWJsZVZhbHVlKSkgewor
I2VuZGlmCiAgICAgICAgIFN0cmluZyB2YWwgPSB2YWx1ZSgpOworI2lmIEVOQUJMRShXQ1NTKQor
ICAgICAgICBpZiAoaXNDb25mb3JtZWRUb0lucHV0TWFzayhtX2RhdGEsIHZhbCkpCisjZWxzZQog
ICAgICAgICBpZiAoaXNDb25mb3JtZWRUb0lucHV0TWFzayh2YWwpKQorI2VuZGlmCiAgICAgICAg
ICAgICB2YXJpYWJsZVZhbHVlID0gdmFsOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICB2YXJp
YWJsZVZhbHVlID0gIiI7CkBAIC0zNzksMTQgKzQxOSwyNyBAQCB2b2lkIFdNTElucHV0RWxlbWVu
dDo6aW5pdCgpCiAgICAgfQogICAgIHNldFZhbHVlKHZhcmlhYmxlVmFsdWUpOwogIAorI2lmICFF
TkFCTEUoV0NTUykKICAgICBpZiAoIWhhc0F0dHJpYnV0ZShXTUxOYW1lczo6ZW1wdHlva0F0dHIp
KSB7CiAgICAgICAgIGlmIChtX2Zvcm1hdE1hc2suaXNFbXB0eSgpIHx8IAogICAgICAgICAgICAg
Ly8gY2hlY2sgaWYgdGhlIGZvcm1hdCBjb2RlcyBpcyBqdXN0ICIqZiIKICAgICAgICAgICAgKG1f
Zm9ybWF0TWFzay5sZW5ndGgoKSA9PSAyICYmIG1fZm9ybWF0TWFza1swXSA9PSAnKicgJiYgZm9y
bWF0Q29kZXMoKS5maW5kKG1fZm9ybWF0TWFza1sxXSkgIT0gLTEpKQogICAgICAgICAgICAgbV9p
c0VtcHR5T2sgPSB0cnVlOwogICAgIH0KKyNlbmRpZgogfQogCisjaWYgRU5BQkxFKFdDU1MpCitp
bnQgV01MSW5wdXRFbGVtZW50OjpzZWxlY3Rpb25TdGFydCgpIGNvbnN0Cit7CisgICAgaWYgKGRv
Y3VtZW50KCktPmZvY3VzZWROb2RlKCkgIT0gdGhpcyAmJiBtX2RhdGEuY2FjaGVkU2VsZWN0aW9u
U3RhcnQoKSAhPSAtMSkKKyAgICAgICAgcmV0dXJuIG1fZGF0YS5jYWNoZWRTZWxlY3Rpb25TdGFy
dCgpOworICAgIGlmICghcmVuZGVyZXIoKSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgcmV0dXJu
IHN0YXRpY19jYXN0PFJlbmRlclRleHRDb250cm9sKj4ocmVuZGVyZXIoKSktPnNlbGVjdGlvblN0
YXJ0KCk7Cit9CisKKyNlbHNlCiBTdHJpbmcgV01MSW5wdXRFbGVtZW50Ojp2YWxpZGF0ZUlucHV0
TWFzayhjb25zdCBTdHJpbmcmIGlucHV0TWFzaykKIHsKICAgICBib29sIGlzVmFsaWQgPSB0cnVl
OwpAQCAtNTIwLDYgKzU3Myw3IEBAIHVuc2lnbmVkIFdNTElucHV0RWxlbWVudDo6Y3Vyc29yUG9z
aXRpb24KICAKICAgICByZXR1cm4gaW5kZXg7CiB9CisjZW5kaWYKIAogfQogCkluZGV4OiBXZWJD
b3JlL3dtbC9XTUxJbnB1dEVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3dtbC9XTUxJ
bnB1dEVsZW1lbnQuaAkocmV2aXNpb24gNDA3MTYpCisrKyBXZWJDb3JlL3dtbC9XTUxJbnB1dEVs
ZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtODcsMTkgKzg3LDI3IEBAIHB1YmxpYzoKICAgICB2
aXJ0dWFsIHZvaWQgd2lsbE1vdmVUb05ld093bmVyRG9jdW1lbnQoKTsKICAgICB2aXJ0dWFsIHZv
aWQgZGlkTW92ZVRvTmV3T3duZXJEb2N1bWVudCgpOwogCisjaWYgRU5BQkxFKFdDU1MpCisgICAg
aW50IHNlbGVjdGlvblN0YXJ0KCkgY29uc3Q7CisjZWxzZQogICAgIGJvb2wgaXNDb25mb3JtZWRU
b0lucHV0TWFzayhjb25zdCBTdHJpbmcmKTsKICAgICBib29sIGlzQ29uZm9ybWVkVG9JbnB1dE1h
c2soVUNoYXIsIHVuc2lnbmVkLCBib29sIGlzVXNlcklucHV0ID0gdHJ1ZSk7CisjZW5kaWYKIAog
cHJpdmF0ZToKICAgICB2b2lkIGluaXQoKTsKKyNpZiAhRU5BQkxFKFdDU1MpCiAgICAgU3RyaW5n
IHZhbGlkYXRlSW5wdXRNYXNrKGNvbnN0IFN0cmluZyYpOwogICAgIHVuc2lnbmVkIGN1cnNvclBv
c2l0aW9uVG9NYXNrSW5kZXgodW5zaWduZWQpOworI2VuZGlmCiAKICAgICBJbnB1dEVsZW1lbnRE
YXRhIG1fZGF0YTsKICAgICBib29sIG1faXNQYXNzd29yZEZpZWxkOworI2lmICFFTkFCTEUoV0NT
UykKICAgICBib29sIG1faXNFbXB0eU9rOwogICAgIFN0cmluZyBtX2Zvcm1hdE1hc2s7CiAgICAg
dW5zaWduZWQgbV9udW1PZkNoYXJzQWxsb3dlZEJ5TWFzazsKKyNlbmRpZgogfTsKIAogfQpJbmRl
eDogTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL0NoYW5n
ZUxvZwkocmV2aXNpb24gNDA3MTcpCisrKyBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHdvcmtpbmcg
Y29weSkKQEAgLTEsMyArMSwxNiBAQAorMjAwOS0wMi0wNiAgWWljaGFvIFlpbiAgPHlpY2hhby55
aW5AdG9yY2htb2JpbGUuY29tLmNuPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgICogZmFzdC93Y3NzOiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L3djc3Mv
aW5wdXRlbGVtZW50LWlucHV0Zm9ybWF0LnhodG1sOiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L3dj
c3MvaW5wdXRlbGVtZW50LWlucHV0cmVxdWlyZWQueGh0bWw6IEFkZGVkLgorICAgICAgICAqIGZh
c3Qvd2Nzcy9yZXNvdXJjZXM6IEFkZGVkLgorICAgICAgICAqIGZhc3Qvd2Nzcy9yZXNvdXJjZXMv
d2Nzc2lucHV0LmNzczogQWRkZWQuCisgICAgICAgICogZmFzdC93Y3NzL3RleHRhcmVhLWlucHV0
Zm9ybWF0LnhodG1sOiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L3djc3MvdGV4dGFyZWEtaW5wdXRy
ZXF1aXJlZC54aHRtbDogQWRkZWQuCisgICAgICAgICogZmFzdC93Y3NzL3djc3NpbnB1dC1pbi13
bWwud21sOiBBZGRlZC4KKwogMjAwOS0wMi0wNSAgQWxleGV5IFByb3NrdXJ5YWtvdiAgPGFwQHdl
YmtpdC5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4gQWRsZXIuCkluZGV4OiBMYXlv
dXRUZXN0cy9mYXN0L3djc3MvaW5wdXRlbGVtZW50LWlucHV0Zm9ybWF0LnhodG1sCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIExheW91dFRlc3RzL2Zhc3Qvd2Nzcy9pbnB1dGVsZW1lbnQtaW5wdXRmb3JtYXQueGh0
bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L3djc3MvaW5wdXRlbGVtZW50LWlu
cHV0Zm9ybWF0LnhodG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQ1IEBACis8P3htbCB2ZXJz
aW9uPSIxLjAiPz4KKzwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vV0FQRk9SVU0vL0RURCBYSFRN
TCBNb2JpbGUgMS4xLy9FTiIgImh0dHA6Ly93d3cud2FwZm9ydW0ub3JnL0RURC94aHRtbC1tb2Jp
bGUxMS5kdGQiPgorIAorPGh0bWwgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwi
PgorPGhlYWQ+Cis8dGl0bGU+V0NTUyBpbnB1dCBleHRlbnNpb24gdGVzdCBmb3IgJmx0O2lucHV0
Jmd0OyBlbGVtZW50PC90aXRsZT4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+CitpbnB1dCB7IC13
YXAtaW5wdXQtZm9ybWF0OiAnYUFuTic7fQorPC9zdHlsZT4KKzwvaGVhZD4KKworPGJvZHk+Cis8
aDI+IFRlc3QgZm9yIFdDU1MgaW5wdXQgZXh0ZW5zaW9uOiAtd2FwLWlucHV0LWZvcm1hdDwvaDI+
CisKKzxwPgorY2FzZSAxIChieSBkZWZhdWx0OiBmb3JtYXQ9J2FBbk4nKQorPGlucHV0IG5hbWU9
ImNhc2UxIiB0eXBlPSJ0ZXh0Ii8+Cis8YnIvPgorY2FzZSAyIChmb3JtYXQ9JzVhJykKKzxpbnB1
dCBuYW1lPSJjYXNlMiIgc3R5bGU9Ii13YXAtaW5wdXQtZm9ybWF0OiAnNWEnICIgLz4KKzxici8+
CitjYXNlIDMgKGZvcm1hdD0nKk4nKQorPGlucHV0IG5hbWU9ImNhc2UzIiB0eXBlPSJ0ZXh0IiBz
dHlsZT0iLXdhcC1pbnB1dC1mb3JtYXQ6ICcqTicgIiAvPgorPGJyLz4KK2Nhc2UgNCAoZm9ybWF0
PSdhQW5OeFhtTScpCis8aW5wdXQgbmFtZT0iY2FzZTQiIHR5cGU9InRleHQiIHN0eWxlPSItd2Fw
LWlucHV0LWZvcm1hdDogJ2FBbk54WG1NJyAiIC8+Cis8YnIvPgorY2FzZSA1IChmb3JtYXQ9J2Fc
LU5OKngnKQorPGlucHV0IG5hbWU9ImNhc2U1IiB0eXBlPSJ0ZXh0IiBzdHlsZT0iLXdhcC1pbnB1
dC1mb3JtYXQ6ICdhXFwtTk4qeCcgIiAvPgorPGJyLz4KK2Nhc2UgNiAoZm9ybWF0PSdOYVwrXC0z
TicpCis8aW5wdXQgbmFtZT0iY2FzZTYiIHN0eWxlPSItd2FwLWlucHV0LWZvcm1hdDogJ05hXFwr
XFwtM04nIi8+Cis8YnIvPgorY2FzZSA3IChmb3JtYXQ9JzVOJywgbWF4TGVuZ3RoPTMpCis8aW5w
dXQgbmFtZT0iY2FzZTciIHN0eWxlPSctd2FwLWlucHV0LWZvcm1hdDogIk5OTiInIG1heExlbmd0
aD0iMyIvPgorPGJyLz4KK2Nhc2UgOCAoZm9ybWF0PSc1YScsIGlucHV0IGlzIG5vdCByZXF1cmll
ZCkKKzxpbnB1dCB0eXBlPSJ0ZXh0IiBzdHlsZT0iLXdhcC1pbnB1dC1mb3JtYXQ6ICc1YSc7IC13
YXAtaW5wdXQtcmVxdWlyZWQ6IGZhbHNlOyIvPgorPGJyLz4KK2Nhc2UgOSAoZm9ybWF0PSc2TScg
cGFzc3dvcmQpCis8aW5wdXQgbmFtZT0icGFzc3dkIiB0eXBlPSJwYXNzd29yZCIgc3R5bGU9Ii13
YXAtaW5wdXQtZm9ybWF0OiAnNk0nIi8+Cis8YnIvPgorPC9wPgorPC9ib2R5PgorPC9odG1sPgpJ
bmRleDogTGF5b3V0VGVzdHMvZmFzdC93Y3NzL2lucHV0ZWxlbWVudC1pbnB1dHJlcXVpcmVkLnho
dG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3Qvd2Nzcy9pbnB1dGVsZW1lbnQtaW5w
dXRyZXF1aXJlZC54aHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3Qvd2Nzcy9p
bnB1dGVsZW1lbnQtaW5wdXRyZXF1aXJlZC54aHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwz
OCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIj8+Cis8IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1dB
UEZPUlVNLy9EVEQgWEhUTUwgTW9iaWxlIDEuMS8vRU4iICJodHRwOi8vd3d3LndhcGZvcnVtLm9y
Zy9EVEQveGh0bWwtbW9iaWxlMTEuZHRkIj4KKyAKKzxodG1sIHhtbG5zPSJodHRwOi8vd3d3Lncz
Lm9yZy8xOTk5L3hodG1sIj4KKzxoZWFkPgorPHRpdGxlPldDU1MgaW5wdXQgZXh0ZW5zaW9uIHRl
c3QgZm9yICZsdDtpbnB1dCZndDsgZWxlbWVudDwvdGl0bGU+Cis8bGluayByZWw9InN0eWxlc2hl
ZXQiIGhyZWY9InJlc291cmNlcy93Y3NzaW5wdXQuY3NzIiB0eXBlPSJ0ZXh0L2NzcyIvPgorPC9o
ZWFkPgorCis8Ym9keT4KKzxoMj4gVGVzdCBmb3IgV0NTUyBpbnB1dCBleHRlbnNpb246IC13YXAt
aW5wdXQtcmVxdWlyZWQgPC9oMj4KKzxwPgorPGI+Rm9yIHRoZSBmb2xsb3dpbmcgJmx0O2lucHV0
Jmd0OyBlbGVtZW50cywgaW5wdXQgaXMgcmVxdWlyZWQ6PC9iPgorPHAvPgorZm9ybWF0PU5hTTxp
bnB1dCBuYW1lPSJ4MSIgdmFsdWU9IiIgc3R5bGU9Ii13YXAtaW5wdXQtZm9ybWF0OiAnTmFNJyIv
PgorPGJyLz4KK2lucHV0UmVxdWlyZWQ9dHJ1ZTxpbnB1dCBuYW1lPSJ4MiIgc3R5bGU9Ii13YXAt
aW5wdXQtcmVxdWlyZWQ6IHRydWU7Ii8+IAorPGJyLz4KK2lucHV0UmVxdWlyZWQ9dHJ1ZTxpbnB1
dCBuYW1lPSJ4MyIgY2xhc3M9ImlucHV0cmVxdWlyZWQiLz4gCis8YnIvPgorZm9ybWF0PSpNO2lu
cHV0UmVxdWlyZWQ9dHJ1ZTxpbnB1dCBuYW1lPSJ4NCIgc3R5bGU9Ii13YXAtaW5wdXQtZm9ybWF0
OiAnKk0nOyAtd2FwLWlucHV0LXJlcXVpcmVkOiB0cnVlOyIvPgorPC9wPgorPGhyLz4KKzxwPgor
PGI+Rm9yIHRoZSBmb2xsb3dpbmcgJmx0O2lucHV0Jmd0OyBlbGVtZW50cywgaW5wdXQgaXMgbm90
IHJlcXVpcmVkOjwvYj4KKzxwLz4KK2RlZmF1bHQ8aW5wdXQgbmFtZT0ieDUiLz4gCis8YnIvPgor
Zm9ybWF0PSp4PGlucHV0IG5hbWU9Ing2IiBzdHlsZT0nLXdhcC1pbnB1dC1mb3JtYXQ6ICIqeCIn
Lz4gCis8YnIvPgoraW5wdXRSZXF1aXJlZD1mYWxzZTxpbnB1dCBuYW1lPSJ4NyIgc3R5bGU9Ii13
YXAtaW5wdXQtcmVxdWlyZWQ6IGZhbHNlOyIvPgorPGJyLz4KK2Zvcm1hdD1uKk07IGlucHV0UmVx
dWlyZWQ9ZmFsc2U8aW5wdXQgbmFtZT0ieDgiIHN0eWxlPSctd2FwLWlucHV0LXJlcXVpcmVkOiBm
YWxzZTsgLXdhcC1pbnB1dC1mb3JtYXQ6Im4qTSInLz4KKzxici8+Citmb3JtYXQ9NE47IGlucHV0
UmVxdWlyZWQ9ZmFsc2U8aW5wdXQgbmFtZT0ieDkiIHN0eWxlPSctd2FwLWlucHV0LXJlcXVpcmVk
OiBmYWxzZTsgLXdhcC1pbnB1dC1mb3JtYXQ6IjROIicvPgorPC9wPgorPC9ib2R5PgorPC9odG1s
PgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC93Y3NzL3RleHRhcmVhLWlucHV0Zm9ybWF0LnhodG1s
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3Qvd2Nzcy90ZXh0YXJlYS1pbnB1dGZvcm1h
dC54aHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3Qvd2Nzcy90ZXh0YXJlYS1p
bnB1dGZvcm1hdC54aHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw1MCBAQAorPD94bWwgdmVy
c2lvbj0iMS4wIj8+Cis8IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1dBUEZPUlVNLy9EVEQgWEhU
TUwgTW9iaWxlIDEuMS8vRU4iICJodHRwOi8vd3d3LndhcGZvcnVtLm9yZy9EVEQveGh0bWwtbW9i
aWxlMTEuZHRkIj4KKyAKKzxodG1sIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1s
Ij4KKzxoZWFkPgorPHRpdGxlPldDU1MgaW5wdXQgZXh0ZW5zaW9uIHRlc3QgZm9yICZsdDt0ZXh0
YXJlYSZndDsgZWxlbWVudDwvdGl0bGU+Cis8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9InJl
c291cmNlcy93Y3NzaW5wdXQuY3NzIiB0eXBlPSJ0ZXh0L2NzcyIvPgorPHN0eWxlIHR5cGU9InRl
eHQvY3NzIj4KK3RleHRhcmVhIHsgLXdhcC1pbnB1dC1mb3JtYXQ6ICdhQW5OJzt9Cis8L3N0eWxl
PgorPC9oZWFkPgorCis8Ym9keT4KKzxoMj4gVGVzdCBmb3IgV0NTUyBpbnB1dCBleHRlbnNpb246
IC13YXAtaW5wdXQtZm9ybWF0PC9oMj4KKworPHA+CitjYXNlIDEgKGJ5IGRlZmF1bHQ6IGZvcm1h
dD0nYUFuTicpCis8YnIvPgorPHRleHRhcmVhIG5hbWU9ImNhc2UxIi8+Cis8YnIvPgorY2FzZSAy
IChmb3JtYXQ9JzVhJykKKzxici8+Cis8dGV4dGFyZWEgbmFtZT0iY2FzZTIiIHN0eWxlPSItd2Fw
LWlucHV0LWZvcm1hdDogJzVhJyAiIC8+Cis8YnIvPgorY2FzZSAzIChmb3JtYXQ9JypOJyByb3dz
PScxJyBjb2xzPSc4JykgCis8YnIvPgorPHRleHRhcmVhIG5hbWU9ImNhc2UzIiByb3dzPSIxIiBj
b2xzPSI4IiBzdHlsZT0iLXdhcC1pbnB1dC1mb3JtYXQ6ICcqTicgIiAvPgorPGJyLz4KK2Nhc2Ug
NCAoZm9ybWF0PSdhQW5OeFhtTScpCis8YnIvPgorPHRleHRhcmVhIG5hbWU9ImNhc2U0IiBzdHls
ZT0iLXdhcC1pbnB1dC1mb3JtYXQ6ICdhQW5OeFhtTScgIiAvPgorPGJyLz4KK2Nhc2UgNSAoZm9y
bWF0PSdhXC1OTip4JykKKzxici8+Cis8dGV4dGFyZWEgbmFtZT0iY2FzZTUiIHN0eWxlPSItd2Fw
LWlucHV0LWZvcm1hdDogJ2FcXC1OTip4JyAiIC8+Cis8YnIvPgorY2FzZSA2IChmb3JtYXQ9J05h
XCtcLTNOJykKKzxici8+Cis8dGV4dGFyZWEgbmFtZT0iY2FzZTYiIHN0eWxlPSItd2FwLWlucHV0
LWZvcm1hdDogJ05hXFwrXFwtM04nIi8+Cis8YnIvPgorY2FzZSA3IChmb3JtYXQ9JzZBJywgaW5w
dXQgaXMgbm90IHJlcXVyaWVkKQorPGJyLz4KKzx0ZXh0YXJlYSBzdHlsZT0iLXdhcC1pbnB1dC1m
b3JtYXQ6ICc2QSc7IC13YXAtaW5wdXQtcmVxdWlyZWQ6IGZhbHNlOyIvPgorPGJyLz4KK2Nhc2Ug
OCAoZm9ybWF0PSdhQW5OJywgaW5wdXQgaXMgTm90IHJlcXVyaWVkKQorPGJyLz4KKzx0ZXh0YXJl
YSBjbGFzcz0idGV4dGFyZWEiLz4gCis8L3A+Cis8L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlv
dXRUZXN0cy9mYXN0L3djc3MvdGV4dGFyZWEtaW5wdXRyZXF1aXJlZC54aHRtbAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L3djc3MvdGV4dGFyZWEtaW5wdXRyZXF1aXJlZC54aHRtbAko
cmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3Qvd2Nzcy90ZXh0YXJlYS1pbnB1dHJlcXVp
cmVkLnhodG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDM4IEBACis8P3htbCB2ZXJzaW9uPSIx
LjAiPz4KKzwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vV0FQRk9SVU0vL0RURCBYSFRNTCBNb2Jp
bGUgMS4xLy9FTiIgImh0dHA6Ly93d3cud2FwZm9ydW0ub3JnL0RURC94aHRtbC1tb2JpbGUxMS5k
dGQiPgorIAorPGh0bWwgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiPgorPGhl
YWQ+Cis8dGl0bGU+V0NTUyBpbnB1dCBleHRlbnNpb24gdGVzdCBmb3IgJmx0O3RleHRhcmVhJmd0
OyBlbGVtZW50PC90aXRsZT4KKzxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0icmVzb3VyY2Vz
L3djc3NpbnB1dC5jc3MiIHR5cGU9InRleHQvY3NzIi8+Cis8L2hlYWQ+CisKKzxib2R5PgorPGgy
PiBUZXN0IGZvciBXQ1NTIGlucHV0IGV4dGVuc2lvbjogLXdhcC1pbnB1dC1yZXF1aXJlZCA8L2gy
PgorPHA+Cis8Yj5Gb3IgdGhlIGZvbGxvd2luZyAmbHQ7dGV4dGFyZWEmZ3Q7IGVsZW1lbnRzLCBp
bnB1dCBpcyByZXF1aXJlZDo8L2I+Cis8cC8+Citmb3JtYXQ9J05hTSc8dGV4dGFyZWEgbmFtZT0i
eDEiIHN0eWxlPSItd2FwLWlucHV0LWZvcm1hdDogJ05hTSciLz4KKzxici8+CitpbnB1dFJlcXVp
cmVkPXRydWU8dGV4dGFyZWEgbmFtZT0ieDIiIHN0eWxlPSItd2FwLWlucHV0LXJlcXVpcmVkOiB0
cnVlOyIvPiAKKzxici8+Citmb3JtYXQ9JypOJztpbnB1dFJlcXVpcmVkPXRydWU8dGV4dGFyZWEg
bmFtZT0ieDMiIHN0eWxlPSItd2FwLWlucHV0LWZvcm1hdDogJypOJzsgLXdhcC1pbnB1dC1yZXF1
aXJlZDogdHJ1ZTsiLz4KKzwvcD4KKzxoci8+Cis8cD4KKzxiPkZvciB0aGUgZm9sbG93aW5nICZs
dDt0ZXh0YXJlYSZndDsgZWxlbWVudHMsIHRleHRhcmVhIGlzIG5vdCByZXF1aXJlZDo8L2I+Cis8
cC8+CitkZWZhdWx0PHRleHRhcmVhIG5hbWU9Ing0Ii8+IAorPGJyLz4KK2Zvcm1hdD0nKngnPHRl
eHRhcmVhIG5hbWU9Ing1IiBzdHlsZT0nLXdhcC1pbnB1dC1mb3JtYXQ6ICIqeCInLz4gCis8YnIv
PgorZm9ybWF0PSczbic7aW5wdXRSZXF1aXJlZD1mYWxzZTx0ZXh0YXJlYSBuYW1lPSJ4NiIgY2xh
c3M9InRleHRhcmVhIi8+IAorPGJyLz4KK2lucHV0UmVxdWlyZWQ9ZmFsc2U8dGV4dGFyZWEgbmFt
ZT0ieDciIHN0eWxlPSItd2FwLWlucHV0LXJlcXVpcmVkOiBmYWxzZTsiLz4KKzxici8+Citmb3Jt
YXQ9J24qTSc7IGlucHV0UmVxdWlyZWQ9ZmFsc2U8dGV4dGFyZWEgbmFtZT0ieDgiIHN0eWxlPSct
d2FwLWlucHV0LXJlcXVpcmVkOiBmYWxzZTsgLXdhcC1pbnB1dC1mb3JtYXQ6Im4qTSInLz4KKzxi
ci8+Citmb3JtYXQ9JzROJzsgaW5wdXRSZXF1aXJlZD1mYWxzZTx0ZXh0YXJlYSBuYW1lPSJ4OSIg
c3R5bGU9Jy13YXAtaW5wdXQtcmVxdWlyZWQ6IGZhbHNlOyAtd2FwLWlucHV0LWZvcm1hdDoiNE4i
Jy8+Cis8L3A+Cis8L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L3djc3Mv
d2Nzc2lucHV0LWluLXdtbC53bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC93Y3Nz
L3djc3NpbnB1dC1pbi13bWwud21sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC93
Y3NzL3djc3NpbnB1dC1pbi13bWwud21sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDM1IEBACis8
P3htbCB2ZXJzaW9uPSIxLjAiPz4KKzwhRE9DVFlQRSB3bWwgUFVCTElDICItLy9XQVBGT1JVTS8v
RFREIFdNTCAxLjEvL0VOIgorImh0dHA6Ly93d3cud2FwZm9ydW0ub3JnL0RURC93bWxfMS4xLnht
bCI+CisgCis8d21sPgorPGNhcmQgdGl0bGU9IklucHV0Ij4KKzxoMj4gVGVzdCBmb3IgV0NTUyBp
bnB1dCBleHRlbnNpb24gaW4gV01MIGRvY3VtZW50PC9oMj4KKworPHA+CitjYXNlIDEgKGZvcm1h
dD0nNU4nKQorPGlucHV0IG5hbWU9ImNhc2UyIiBmb3JtYXQ9JzVOJy8+Cis8YnIvPgorY2FzZSAy
ICgtd2FwLWlucHV0LWZvcm1hdDonNWEnKQorPGlucHV0IG5hbWU9ImNhc2UyIiBzdHlsZT0iLXdh
cC1pbnB1dC1mb3JtYXQ6ICc1YScgIiAvPgorPGJyLz4KK2Nhc2UgMyAoLXdhcC1pbnB1dC1mb3Jt
YXQ6JypOJywgZW1wdHlvaz0nZmFsc2UnKQorPGlucHV0IG5hbWU9ImNhc2UzIiB0eXBlPSJ0ZXh0
IiBlbXB0eW9rPSJmYWxzZSIgc3R5bGU9Ii13YXAtaW5wdXQtZm9ybWF0OiAnKk4nIiAvPgorPGJy
Lz4KK2Nhc2UgNCAoLXdhcC1pbnB1dC1mb3JtYXQ6JypOJykKKzxpbnB1dCBuYW1lPSJjYXNlNCIg
dHlwZT0idGV4dCIgc3R5bGU9Ii13YXAtaW5wdXQtZm9ybWF0OiAnKk4nICIgLz4KKzxici8+Citj
YXNlIDUgKC13YXAtaW5wdXQtZm9ybWF0PSdhXC1OTip4JykKKzxpbnB1dCBuYW1lPSJjYXNlNSIg
dHlwZT0idGV4dCIgc3R5bGU9Ii13YXAtaW5wdXQtZm9ybWF0OiAnYVxcLU5OKngnICIgLz4KKzxi
ci8+CitjYXNlIDYgKGZvcm1hdD0nTmFcK1wtM04nKQorPGlucHV0IG5hbWU9ImNhc2U2IiBmb3Jt
YXQ9Ik5hXCtcLTNOIi8+Cis8YnIvPgorY2FzZSA3ICgtd2FwLWlucHV0LWZvcm1hdDonNm0nLCBt
YXhsZW5ndGg9JzMnKQorPGlucHV0IG5hbWU9ImNhc2U3IiBtYXhsZW5ndGg9IjMiIHN0eWxlPSIt
d2FwLWlucHV0LWZvcm1hdDogJzZtJzsiLz4KKzxici8+CitjYXNlIDggKC13YXAtaW5wdXQtZm9y
bWF0Oid3cm9uZ2Zvcm1hdCcpCis8aW5wdXQgbmFtZT0iY2FzZTgiIHN0eWxlPSItd2FwLWlucHV0
LWZvcm1hdDogJ3dyb25nZm9ybWF0JzsiLz4KKzwvcD4KKzwvY2FyZD4KKzwvd21sPgpJbmRleDog
TGF5b3V0VGVzdHMvZmFzdC93Y3NzL3Jlc291cmNlcy93Y3NzaW5wdXQuY3NzCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIExheW91dFRlc3RzL2Zhc3Qvd2Nzcy9yZXNvdXJjZXMvd2Nzc2lucHV0LmNzcwkocmV2aXNp
b24gMCkKKysrIExheW91dFRlc3RzL2Zhc3Qvd2Nzcy9yZXNvdXJjZXMvd2Nzc2lucHV0LmNzcwko
cmV2aXNpb24gMCkKQEAgLTAsMCArMSwyIEBACisuaW5wdXRyZXF1aXJlZCB7IC13YXAtaW5wdXQt
cmVxdWlyZWQ6IHRydWU7IH0gCisudGV4dGFyZWEgeyAtd2FwLWlucHV0LWZvcm1hdDogJzNuJzsg
LXdhcC1pbnB1dC1yZXF1aXJlZDogZmFsc2U7IH0K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>27653</attachid>
            <date>2009-02-13 03:49:35 -0800</date>
            <delta_ts>2009-05-14 00:08:22 -0700</delta_ts>
            <desc>updated patch for changed code</desc>
            <filename>addwcssinput_codechange.patch</filename>
            <type>text/plain</type>
            <size>37347</size>
            <attacher name="yichao.yin">yichao.yin</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0MDk2OSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsODEgQEAKKzIwMDktMDItMTMgIFlpY2hhbyBZaW4gIDx5aWNoYW8ueWluQHRvcmNo
bW9iaWxlLmNvbS5jbj4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBBZGQgV0NTUyBpbnB1dCBleHRlbnNpb24gc3VwcG9ydCB0byBXZWJraXQKKyAgICAg
ICAgV0NTUyBpbnB1dCBleHRlbnNpb24gaXMgb25lIG9mIHRoZSBXQVAgc3BlY2lmaWMgZXh0ZW5z
dGlvbnMgdG8gQ1NTMi4KKyAgICAgICAgSXQgY29uc2lzdHMgb2YgdHdvIFdDU1MgcHJvcGVydGll
czogLXdhcC1pbnB1dC1mb3JtYXQgYW5kIC13YXAtaW5wdXQtcmVxdWlyZWQKKyAgICAgICAgcmVm
ZXIgdG8gV0FQLTIzOS1XQ1NTLTIwMDExMDI2LWEucGRmCisKKyAgICAgICAgVGhpcyBjaGFuZ2Ug
ZGVwZW5kcyBvbiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjM0NTIg
CisKKyAgICAgICAgVGVzdHM6IGZhc3Qvd2Nzcy9pbnB1dGVsZW1lbnQtaW5wdXRmb3JtYXQueGh0
bWwKKyAgICAgICAgICAgICAgIGZhc3Qvd2Nzcy9pbnB1dGVsZW1lbnQtaW5wdXRyZXF1aXJlZC54
aHRtbAorICAgICAgICAgICAgICAgZmFzdC93Y3NzL3RleHRhcmVhLWlucHV0Zm9ybWF0LnhodG1s
CisgICAgICAgICAgICAgICBmYXN0L3djc3MvdGV4dGFyZWEtaW5wdXRyZXF1aXJlZC54aHRtbAor
CisgICAgICAgICogV2ViQ29yZS5wcm86CisgICAgICAgICogY3NzL0NTU1BhcnNlci5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpDU1NQYXJzZXI6OnBhcnNlVmFsdWUpOgorICAgICAgICAoV2ViQ29y
ZTo6Q1NTUGFyc2VyOjpwYXJzZVdDU1NJbnB1dFByb3BlcnR5KToKKyAgICAgICAgKiBjc3MvQ1NT
UGFyc2VyLmg6CisgICAgICAgICogY3NzL0NTU1Byb3BlcnR5TmFtZXMuaW46CisgICAgICAgICog
ZG9tL0lucHV0RWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpmb3JtYXRDb2Rlcyk6Cisg
ICAgICAgIChXZWJDb3JlOjpjdXJzb3JQb3NpdGlvblRvTWFza0luZGV4KToKKyAgICAgICAgKFdl
YkNvcmU6OklucHV0RWxlbWVudDo6aXNDb25mb3JtZWRUb0lucHV0TWFzayk6CisgICAgICAgIChX
ZWJDb3JlOjpJbnB1dEVsZW1lbnQ6OnZhbGlkYXRlSW5wdXRNYXNrKToKKyAgICAgICAgKFdlYkNv
cmU6OklucHV0RWxlbWVudDo6dXBkYXRlSW5wdXRQcm9wZXJ0aWVzRnJvbVdDU1MpOgorICAgICAg
ICAoV2ViQ29yZTo6SW5wdXRFbGVtZW50OjpkaXNwYXRjaEZvY3VzRXZlbnQpOgorICAgICAgICAo
V2ViQ29yZTo6SW5wdXRFbGVtZW50OjpkaXNwYXRjaEJsdXJFdmVudCk6CisgICAgICAgIChXZWJD
b3JlOjpJbnB1dEVsZW1lbnREYXRhOjpJbnB1dEVsZW1lbnREYXRhKToKKyAgICAgICAgKFdlYkNv
cmU6OnRvSW5wdXRFbGVtZW50KToKKyAgICAgICAgKiBkb20vSW5wdXRFbGVtZW50Lmg6CisgICAg
ICAgIChXZWJDb3JlOjpJbnB1dEVsZW1lbnREYXRhOjopOgorICAgICAgICAoV2ViQ29yZTo6SW5w
dXRFbGVtZW50RGF0YTo6aW5wdXRSZXF1aXJlbWVudFN0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6
OklucHV0RWxlbWVudERhdGE6OnNldElucHV0UmVxdWlyZW1lbnRTdGF0ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpJbnB1dEVsZW1lbnREYXRhOjppbnB1dEZvcm1hdE1hc2spOgorICAgICAgICAoV2Vi
Q29yZTo6SW5wdXRFbGVtZW50RGF0YTo6c2V0SW5wdXRGb3JtYXRNYXNrKToKKyAgICAgICAgKFdl
YkNvcmU6OklucHV0RWxlbWVudERhdGE6OmFsbG93ZWRJbnB1dENoYXJzTWF4TGVuZ3RoKToKKyAg
ICAgICAgKFdlYkNvcmU6OklucHV0RWxlbWVudERhdGE6OnNldEFsbG93ZWRJbnB1dENoYXJzTWF4
TGVuZ3RoKToKKyAgICAgICAgKiBodG1sL0hUTUxJbnB1dEVsZW1lbnQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6SFRNTElucHV0RWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxlcik6CisgICAgICAg
ICogaHRtbC9IVE1MVGV4dEFyZWFFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxU
ZXh0QXJlYUVsZW1lbnQ6OkhUTUxUZXh0QXJlYUVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6
SFRNTFRleHRBcmVhRWxlbWVudDo6c2VsZWN0aW9uU3RhcnQpOgorICAgICAgICAoV2ViQ29yZTo6
SFRNTFRleHRBcmVhRWxlbWVudDo6c2VsZWN0aW9uRW5kKToKKyAgICAgICAgKFdlYkNvcmU6OkhU
TUxUZXh0QXJlYUVsZW1lbnQ6OnNldFNlbGVjdGlvblJhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6
OkhUTUxUZXh0QXJlYUVsZW1lbnQ6OnVwZGF0ZUZvY3VzQXBwZWFyYW5jZSk6CisgICAgICAgIChX
ZWJDb3JlOjpIVE1MVGV4dEFyZWFFbGVtZW50OjpzZXRWYWx1ZUZyb21SZW5kZXJlcik6CisgICAg
ICAgIChXZWJDb3JlOjpIVE1MVGV4dEFyZWFFbGVtZW50Ojpjb25zdHJhaW5WYWx1ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpIVE1MVGV4dEFyZWFFbGVtZW50OjpjYWNoZVNlbGVjdGlvbik6CisgICAg
ICAgIChXZWJDb3JlOjpIVE1MVGV4dEFyZWFFbGVtZW50OjpkaXNwYXRjaEZvY3VzRXZlbnQpOgor
ICAgICAgICAoV2ViQ29yZTo6SFRNTFRleHRBcmVhRWxlbWVudDo6ZGlzcGF0Y2hCbHVyRXZlbnQp
OgorICAgICAgICAoV2ViQ29yZTo6SFRNTFRleHRBcmVhRWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFu
ZGxlcik6CisgICAgICAgIChXZWJDb3JlOjpIVE1MVGV4dEFyZWFFbGVtZW50Ojp1cGRhdGVWYWx1
ZSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MVGV4dEFyZWFFbGVtZW50OjpzZXRWYWx1ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpIVE1MVGV4dEFyZWFFbGVtZW50OjpzZWxlY3Rpb24pOgorICAgICAg
ICAqIGh0bWwvSFRNTFRleHRBcmVhRWxlbWVudC5oOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFRl
eHRBcmVhRWxlbWVudDo6SFRNTFRleHRBcmVhRWxlbWVudDo6aXNDaGVja2VkKToKKyAgICAgICAg
KFdlYkNvcmU6OkhUTUxUZXh0QXJlYUVsZW1lbnQ6OkhUTUxUZXh0QXJlYUVsZW1lbnQ6OmlzQXV0
b2ZpbGxlZCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MVGV4dEFyZWFFbGVtZW50OjpIVE1MVGV4
dEFyZWFFbGVtZW50Ojppc0luZGV0ZXJtaW5hdGUpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFRl
eHRBcmVhRWxlbWVudDo6SFRNTFRleHRBcmVhRWxlbWVudDo6aXNSYWRpb0J1dHRvbik6CisgICAg
ICAgIChXZWJDb3JlOjpIVE1MVGV4dEFyZWFFbGVtZW50OjpIVE1MVGV4dEFyZWFFbGVtZW50Ojpp
c1RleHRGaWVsZCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MVGV4dEFyZWFFbGVtZW50OjpIVE1M
VGV4dEFyZWFFbGVtZW50Ojppc1NlYXJjaEZpZWxkKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxU
ZXh0QXJlYUVsZW1lbnQ6OkhUTUxUZXh0QXJlYUVsZW1lbnQ6OmlzSW5wdXRUeXBlSGlkZGVuKToK
KyAgICAgICAgKFdlYkNvcmU6OkhUTUxUZXh0QXJlYUVsZW1lbnQ6OkhUTUxUZXh0QXJlYUVsZW1l
bnQ6OmlzUGFzc3dvcmRGaWVsZCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MVGV4dEFyZWFFbGVt
ZW50OjpIVE1MVGV4dEFyZWFFbGVtZW50OjpzZWFyY2hFdmVudHNTaG91bGRCZURpc3BhdGNoZWQp
OgorICAgICAgICAoV2ViQ29yZTo6SFRNTFRleHRBcmVhRWxlbWVudDo6SFRNTFRleHRBcmVhRWxl
bWVudDo6cGxhY2Vob2xkZXJTaG91bGRCZVZpc2libGUpOgorICAgICAgICAoV2ViQ29yZTo6SFRN
TFRleHRBcmVhRWxlbWVudDo6SFRNTFRleHRBcmVhRWxlbWVudDo6c2l6ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpIVE1MVGV4dEFyZWFFbGVtZW50OjpIVE1MVGV4dEFyZWFFbGVtZW50OjpwbGFjZWhv
bGRlclZhbHVlKToKKyAgICAgICAgKiB3bWwvV01MSW5wdXRFbGVtZW50LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OldNTElucHV0RWxlbWVudDo6V01MSW5wdXRFbGVtZW50KToKKyAgICAgICAgKFdl
YkNvcmU6OldNTElucHV0RWxlbWVudDo6ZGlzcGF0Y2hCbHVyRXZlbnQpOgorICAgICAgICAoV2Vi
Q29yZTo6V01MSW5wdXRFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpXTUxJbnB1dEVsZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRsZXIpOgorICAgICAgICAo
V2ViQ29yZTo6V01MSW5wdXRFbGVtZW50Ojppbml0KToKKyAgICAgICAgKiB3bWwvV01MSW5wdXRF
bGVtZW50Lmg6CisKIDIwMDktMDItMTIgIEtldmluIE9sbGl2aWVyICA8a2V2aW5vQHRoZW9sbGl2
aWVycy5jb20+CiAKICAgICAgICAgd3ggYnVpbGQgZml4LCB0eXBvIHdoaWxlIHR3ZWFraW5nIGxh
c3QgcGF0Y2ggZm9yIGNvbW1pdC4KSW5kZXg6IFdlYkNvcmUvV2ViQ29yZS5wcm8KPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9XZWJDb3JlLnBybwkocmV2aXNpb24gNDA4NDYpCisrKyBXZWJDb3JlL1dl
YkNvcmUucHJvCSh3b3JraW5nIGNvcHkpCkBAIC0xMDEsNiArMTAxLDcgQEAgQ09ORklHKFFURElS
X2J1aWxkKSB7CiAhY29udGFpbnMoREVGSU5FUywgRU5BQkxFX1hQQVRIPS4pOiBERUZJTkVTICs9
IEVOQUJMRV9YUEFUSD0xCiAjIWNvbnRhaW5zKERFRklORVMsIEVOQUJMRV9YQkw9Lik6IERFRklO
RVMgKz0gRU5BQkxFX1hCTD0xCiAhY29udGFpbnMoREVGSU5FUywgRU5BQkxFX1dNTD0uKTogREVG
SU5FUyArPSBFTkFCTEVfV01MPTAKKyFjb250YWlucyhERUZJTkVTLCBFTkFCTEVfWEhUTUxNUD0u
KTogREVGSU5FUyArPSBFTkFCTEVfWEhUTUxNUD0wCiAhY29udGFpbnMoREVGSU5FUywgRU5BQkxF
X1NWRz0uKTogREVGSU5FUyArPSBFTkFCTEVfU1ZHPTEKICFjb250YWlucyhERUZJTkVTLCBFTkFC
TEVfU1ZHX0ZPTlRTPS4pOiBERUZJTkVTICs9IEVOQUJMRV9TVkdfRk9OVFM9MQogIWNvbnRhaW5z
KERFRklORVMsIEVOQUJMRV9TVkdfRklMVEVSUz0uKTogREVGSU5FUyArPSBFTkFCTEVfU1ZHX0ZJ
TFRFUlM9MQpAQCAtMTQ3Niw2ICsxNDc3LDE1IEBAIGNvbnRhaW5zKERFRklORVMsIEVOQUJMRV9X
TUw9MSkgewogICAgIGFkZEV4dHJhQ29tcGlsZXJXaXRoSGVhZGVyKHdtbG5hbWVzX2IpCiB9CiAK
K2NvbnRhaW5zKERFRklORVMsIEVOQUJMRV9YSFRNTE1QPTEpIHsKKyAgICBGRUFUVVJFX0RFRklO
RVNfSkFWQVNDUklQVCArPSBFTkFCTEVfWEhUTUxNUD0xCisgICAgIWNvbnRhaW5zKERFRklORVMs
IEVOQUJMRV9XQ1NTPS4pOiBERUZJTkVTICs9IEVOQUJMRV9XQ1NTPTEKK30KKyAKK2NvbnRhaW5z
KERFRklORVMsIEVOQUJMRV9XQ1NTPTEpIHsKKyAgICBGRUFUVVJFX0RFRklORVNfSkFWQVNDUklQ
VCArPSBFTkFCTEVfV0NTUz0xCit9CisKIGNvbnRhaW5zKERFRklORVMsIEVOQUJMRV9TVkc9MSkg
ewogICAgIEZFQVRVUkVfREVGSU5FU19KQVZBU0NSSVBUICs9IEVOQUJMRV9TVkc9MQogCkluZGV4
OiBXZWJDb3JlL2Nzcy9DU1NQYXJzZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvY3NzL0NT
U1BhcnNlci5jcHAJKHJldmlzaW9uIDQwODQ2KQorKysgV2ViQ29yZS9jc3MvQ1NTUGFyc2VyLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTU4Myw2ICsxNTgzLDEyIEBAIGJvb2wgQ1NTUGFyc2VyOjpw
YXJzZVZhbHVlKGludCBwcm9wSWQsIGIKICAgICAgICAgY29uc3QgaW50IHByb3BlcnRpZXNbMl0g
PSB7IENTU1Byb3BlcnR5V2Via2l0VGV4dFN0cm9rZVdpZHRoLCBDU1NQcm9wZXJ0eVdlYmtpdFRl
eHRTdHJva2VDb2xvciB9OwogICAgICAgICByZXR1cm4gcGFyc2VTaG9ydGhhbmQocHJvcElkLCBw
cm9wZXJ0aWVzLCAyLCBpbXBvcnRhbnQpOwogICAgIH0KKyNpZiBFTkFCTEUoV0NTUykKKyAgICBj
YXNlIENTU1Byb3BlcnR5V2FwSW5wdXRGb3JtYXQ6CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdhcElu
cHV0UmVxdWlyZWQ6CisgICAgICAgIHBhcnNlZFZhbHVlID0gcGFyc2VXQ1NTSW5wdXRQcm9wZXJ0
eSgpOworICAgICAgICBicmVhazsKKyNlbmRpZiAKICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0
QW5pbWF0aW9uOgogICAgICAgICByZXR1cm4gcGFyc2VBbmltYXRpb25TaG9ydGhhbmQoaW1wb3J0
YW50KTsKICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0VHJhbnNpdGlvbjoKQEAgLTE2MjEsNiAr
MTYyNywyNiBAQCBib29sIENTU1BhcnNlcjo6cGFyc2VWYWx1ZShpbnQgcHJvcElkLCBiCiAgICAg
cmV0dXJuIGZhbHNlOwogfQogCisjaWYgRU5BQkxFKFdDU1MpCitQYXNzUmVmUHRyPENTU1ByaW1p
dGl2ZVZhbHVlPiBDU1NQYXJzZXI6OnBhcnNlV0NTU0lucHV0UHJvcGVydHkoKQoreworICAgIFJl
ZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gcGFyc2VkVmFsdWUgPSAwOworICAgIENTU1BhcnNlclZh
bHVlKiB2YWx1ZSA9IG1fdmFsdWVMaXN0LT5jdXJyZW50KCk7CisgICAgU3RyaW5nIGlucHV0UHJv
cGVydHk7CisgICAgd2hpbGUgKHZhbHVlKSB7CisgICAgICAgIGlmICh2YWx1ZS0+dW5pdCA9PSBD
U1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1NUUklORyB8fCB2YWx1ZS0+dW5pdCA9PSBDU1NQcmltaXRp
dmVWYWx1ZTo6Q1NTX0lERU5UKQorICAgICAgICAgICAgaW5wdXRQcm9wZXJ0eSA9IFN0cmluZyh2
YWx1ZS0+c3RyaW5nKTsKKyAKKyAgICAgICAgaWYgKCFpbnB1dFByb3BlcnR5LmlzRW1wdHkoKSkK
KyAgICAgICAgICAgcGFyc2VkVmFsdWUgPSBDU1NQcmltaXRpdmVWYWx1ZTo6Y3JlYXRlKGlucHV0
UHJvcGVydHksIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfU1RSSU5HKTsKKyAKKyAgICAgICAgdmFs
dWUgPSBtX3ZhbHVlTGlzdC0+bmV4dCgpOworICAgIH0KKyAKKyAgICByZXR1cm4gcGFyc2VkVmFs
dWU7Cit9CisjZW5kaWYKKwogdm9pZCBDU1NQYXJzZXI6OmFkZEZpbGxWYWx1ZShSZWZQdHI8Q1NT
VmFsdWU+JiBsdmFsLCBQYXNzUmVmUHRyPENTU1ZhbHVlPiBydmFsKQogewogICAgIGlmIChsdmFs
KSB7CkluZGV4OiBXZWJDb3JlL2Nzcy9DU1NQYXJzZXIuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L2Nzcy9DU1NQYXJzZXIuaAkocmV2aXNpb24gNDA4NDYpCisrKyBXZWJDb3JlL2Nzcy9DU1NQYXJz
ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMTMzLDYgKzEzMywxMCBAQCBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAgICAgICAgIFBhc3NSZWZQdHI8Q1NTVmFsdWU+IHBhcnNlU1ZHU3Ryb2tlRGFzaGFycmF5
KCk7CiAjZW5kaWYKIAorI2lmIEVOQUJMRShXQ1NTKSAgICAgICAKKyAgICAgICAgUGFzc1JlZlB0
cjxDU1NQcmltaXRpdmVWYWx1ZT4gcGFyc2VXQ1NTSW5wdXRQcm9wZXJ0eSgpOworI2VuZGlmCisK
ICAgICAgICAgLy8gQ1NTMyBQYXJzaW5nIFJvdXRpbmVzIChmb3IgcHJvcGVydGllcyBzcGVjaWZp
YyB0byBDU1MzKQogICAgICAgICBib29sIHBhcnNlU2hhZG93KGludCBwcm9wSWQsIGJvb2wgaW1w
b3J0YW50KTsKICAgICAgICAgYm9vbCBwYXJzZUJvcmRlckltYWdlKGludCBwcm9wSWQsIGJvb2wg
aW1wb3J0YW50LCBSZWZQdHI8Q1NTVmFsdWU+Jik7CkluZGV4OiBXZWJDb3JlL2Nzcy9DU1NQcm9w
ZXJ0eU5hbWVzLmluCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvY3NzL0NTU1Byb3BlcnR5TmFtZXMu
aW4JKHJldmlzaW9uIDQwODQ2KQorKysgV2ViQ29yZS9jc3MvQ1NTUHJvcGVydHlOYW1lcy5pbgko
d29ya2luZyBjb3B5KQpAQCAtMTQzLDYgKzE0Myw4IEBAIHdvcmQtc3BhY2luZwogd29yZC13cmFw
CiB6LWluZGV4CiB6b29tCistd2FwLWlucHV0LWZvcm1hdAorLXdhcC1pbnB1dC1yZXF1aXJlZAog
LXdlYmtpdC1hbmltYXRpb24KIC13ZWJraXQtYW5pbWF0aW9uLWRlbGF5CiAtd2Via2l0LWFuaW1h
dGlvbi1kaXJlY3Rpb24KSW5kZXg6IFdlYkNvcmUvZG9tL0lucHV0RWxlbWVudC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9kb20vSW5wdXRFbGVtZW50LmNwcAkocmV2aXNpb24gNDA4NDYpCisr
KyBXZWJDb3JlL2RvbS9JbnB1dEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MSw2ICs0
MSwxNSBAQAogI2luY2x1ZGUgIldNTE5hbWVzLmgiCiAjZW5kaWYKIAorI2lmIEVOQUJMRShXQ1NT
KQorI2luY2x1ZGUgIkNTU1Byb3BlcnR5TmFtZXMuaCIKKyNpbmNsdWRlICJDU1NSdWxlLmgiCisj
aW5jbHVkZSAiQ1NTUnVsZUxpc3QuaCIKKyNpbmNsdWRlICJDU1NTdHlsZVJ1bGUuaCIKKyNpbmNs
dWRlICJDU1NTdHlsZVNlbGVjdG9yLmgiCisjaW5jbHVkZSAiSFRNTFRleHRBcmVhRWxlbWVudC5o
IgorI2VuZGlmCisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogdXNpbmcgbmFtZXNwYWNlIEhUTUxO
YW1lczsKQEAgLTUyLDExICs2MSwyNDIgQEAgdXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKIGNv
bnN0IGludCBJbnB1dEVsZW1lbnQ6OnNfbWF4aW11bUxlbmd0aCA9IDUyNDI4ODsKIGNvbnN0IGlu
dCBJbnB1dEVsZW1lbnQ6OnNfZGVmYXVsdFNpemUgPSAyMDsKIAorI2lmIEVOQUJMRShXQ1NTKQor
c3RhdGljIGlubGluZSBjb25zdCBBdG9taWNTdHJpbmcmIGZvcm1hdENvZGVzKCkKK3sKKyAgICBE
RUZJTkVfU1RBVElDX0xPQ0FMKEF0b21pY1N0cmluZywgY29kZXMsICgiQWFOblh4TW0iKSk7Cisg
ICAgcmV0dXJuIGNvZGVzOworfQorCitzdGF0aWMgdW5zaWduZWQgY3Vyc29yUG9zaXRpb25Ub01h
c2tJbmRleChjb25zdCBTdHJpbmcmIGlucHV0Rm9ybWF0TWFzaywgdW5zaWduZWQgY3Vyc29yUG9z
aXRpb24pCit7CisgICAgVUNoYXIgbWFzazsKKyAgICBpbnQgaW5kZXggPSAtMTsKKyAgICBkbyB7
CisgICAgICAgIG1hc2sgPSBpbnB1dEZvcm1hdE1hc2tbKytpbmRleF07CisgICAgICAgIGlmICht
YXNrID09ICdcXCcpCisgICAgICAgICAgICArK2luZGV4OworICAgICAgICBlbHNlIGlmIChtYXNr
ID09ICcqJyB8fCAoV1RGOjppc0FTQ0lJRGlnaXQobWFzaykgJiYgbWFzayAhPSAnMCcpKSB7Cisg
ICAgICAgICAgICBpbmRleCA9IGlucHV0Rm9ybWF0TWFzay5sZW5ndGgoKSAtIDE7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0gd2hpbGUgKGN1cnNvclBvc2l0aW9uLS0pOwor
IAorICAgIHJldHVybiBpbmRleDsKK30KKworYm9vbCBJbnB1dEVsZW1lbnQ6OmlzQ29uZm9ybWVk
VG9JbnB1dE1hc2soY29uc3QgSW5wdXRFbGVtZW50RGF0YSYgZGF0YSwgY29uc3QgU3RyaW5nJiBp
bnB1dENoYXJzKQoreworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBpbnB1dENoYXJzLmxl
bmd0aCgpOyArK2kpCisgICAgICAgIGlmICghaXNDb25mb3JtZWRUb0lucHV0TWFzayhkYXRhLCBp
bnB1dENoYXJzW2ldLCBpLCBpICsgMSkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
cmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgSW5wdXRFbGVtZW50Ojppc0NvbmZvcm1lZFRvSW5wdXRN
YXNrKGNvbnN0IElucHV0RWxlbWVudERhdGEmIGRhdGEsIFVDaGFyIGluQ2hhciwgdW5zaWduZWQg
Y3Vyc29yUG9zaXRpb24sIHVuc2lnbmVkIGlucHV0Q2hhcnNDb3VudCkKK3sKKyAgICBTdHJpbmcg
aW5wdXRGb3JtYXRNYXNrID0gZGF0YS5pbnB1dEZvcm1hdE1hc2soKTsKKyAgICBpZiAoaW5wdXRG
b3JtYXRNYXNrLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBpZiAoaW5w
dXRDaGFyc0NvdW50ID4gZGF0YS5hbGxvd2VkSW5wdXRDaGFyc01heExlbmd0aCgpKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisgCisgICAgdW5zaWduZWQgbWFza0luZGV4ID0gY3Vyc29yUG9zaXRp
b25Ub01hc2tJbmRleChpbnB1dEZvcm1hdE1hc2ssIGN1cnNvclBvc2l0aW9uKTsKKyAgICBib29s
IG9rID0gdHJ1ZTsKKyAgICBVQ2hhciBtYXNrID0gaW5wdXRGb3JtYXRNYXNrW21hc2tJbmRleF07
CisgICAgLy8gTWF0Y2ggdGhlIGlucHV0ZWQgY2hhcmFjdGVyIHdpdGggaW5wdXQgbWFzaworICAg
IHN3aXRjaCAobWFzaykgeworICAgIGNhc2UgJ0EnOgorICAgICAgICBvayA9ICFXVEY6OmlzQVND
SUlEaWdpdChpbkNoYXIpICYmICFXVEY6OmlzQVNDSUlMb3dlcihpbkNoYXIpICYmIFdURjo6aXNB
U0NJSVByaW50YWJsZShpbkNoYXIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlICdhJzoKKyAg
ICAgICAgb2sgPSAhV1RGOjppc0FTQ0lJRGlnaXQoaW5DaGFyKSAmJiAhV1RGOjppc0FTQ0lJVXBw
ZXIoaW5DaGFyKSAmJiBXVEY6OmlzQVNDSUlQcmludGFibGUoaW5DaGFyKTsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSAnTic6CisgICAgICAgIG9rID0gV1RGOjppc0FTQ0lJRGlnaXQoaW5DaGFy
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSAnbic6CisgICAgICAgIG9rID0gIVdURjo6aXNB
U0NJSUFscGhhKGluQ2hhcikgJiYgV1RGOjppc0FTQ0lJUHJpbnRhYmxlKGluQ2hhcik7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgJ1gnOgorICAgICAgICBvayA9ICFXVEY6OmlzQVNDSUlMb3dl
cihpbkNoYXIpICYmIFdURjo6aXNBU0NJSVByaW50YWJsZShpbkNoYXIpOworICAgICAgICBicmVh
azsKKyAgICBjYXNlICd4JzoKKyAgICAgICAgb2sgPSAhV1RGOjppc0FTQ0lJVXBwZXIoaW5DaGFy
KSAmJiBXVEY6OmlzQVNDSUlQcmludGFibGUoaW5DaGFyKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSAnTSc6CisgICAgICAgIG9rID0gV1RGOjppc0FTQ0lJUHJpbnRhYmxlKGluQ2hhcik7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2UgJ20nOgorICAgICAgICBvayA9IFdURjo6aXNBU0NJSVBy
aW50YWJsZShpbkNoYXIpOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBv
ayA9IChtYXNrID09IGluQ2hhcik7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAKKyAgICByZXR1
cm4gb2s7Cit9CisKK1N0cmluZyBJbnB1dEVsZW1lbnQ6OnZhbGlkYXRlSW5wdXRNYXNrKElucHV0
RWxlbWVudERhdGEmIGRhdGEsIFN0cmluZyYgaW5wdXRNYXNrLCBib29sIGlzRnJvbVdDU1MpCit7
CisgICAgaWYgKGlzRnJvbVdDU1MpCisgICAgICAgIGlucHV0TWFzay5yZXBsYWNlKCJcXFxcIiwg
IlxcIik7CisgCisgICAgYm9vbCBpc1ZhbGlkID0gdHJ1ZTsKKyAgICBib29sIGhhc1dpbGRjYXJk
ID0gZmFsc2U7CisgICAgdW5zaWduZWQgZXNjYXBlQ2hhckNvdW50ID0gMDsKKyAgICB1bnNpZ25l
ZCBtYXNrTGVuZ3RoID0gaW5wdXRNYXNrLmxlbmd0aCgpOworICAgIFVDaGFyIGZvcm1hdENvZGU7
CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1hc2tMZW5ndGg7ICsraSkgeworICAgICAg
ICBmb3JtYXRDb2RlID0gaW5wdXRNYXNrW2ldOworICAgICAgICBpZiAoZm9ybWF0Q29kZXMoKS5m
aW5kKGZvcm1hdENvZGUpID09IC0xKSB7CisgICAgICAgICAgICBpZiAoZm9ybWF0Q29kZSA9PSAn
KicgfHwgKFdURjo6aXNBU0NJSURpZ2l0KGZvcm1hdENvZGUpICYmIGZvcm1hdENvZGUgIT0gJzAn
KSkgeworICAgICAgICAgICAgICAgIC8vIFZhbGlkYXRlIGNvZGVzIHdoaWNoIGVuZHMgd2l0aCAn
KmYnIG9yICduZicKKyAgICAgICAgICAgICAgICBmb3JtYXRDb2RlID0gaW5wdXRNYXNrWysraV07
CisgICAgICAgICAgICAgICAgaWYgKChpICsgMSAhPSBtYXNrTGVuZ3RoKSB8fCBmb3JtYXRDb2Rl
cygpLmZpbmQoZm9ybWF0Q29kZSkgPT0gLTEpIHsKKyAgICAgICAgICAgICAgICAgICAgaXNWYWxp
ZCA9IGZhbHNlOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgaGFzV2lsZGNhcmQgPSB0cnVlOworICAgICAgICAgICAgfSBlbHNl
IGlmIChmb3JtYXRDb2RlID09ICdcXCcpIHsKKyAgICAgICAgICAgICAgICAvL3NraXAgb3ZlciB0
aGUgbmV4dCBtYXNrIGNoYXJhY3RlcgorICAgICAgICAgICAgICAgICsraTsKKyAgICAgICAgICAg
ICAgICArK2VzY2FwZUNoYXJDb3VudDsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICAgICAgaXNWYWxpZCA9IGZhbHNlOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgfQorICAgICAgICB9CisgICAgfQorIAorICAgIGlmICghaXNWYWxpZCkKKyAgICAgICAgcmV0
dXJuIFN0cmluZygpOworIAorICAgIC8vIGNhbGN1bGF0ZSB0aGUgbnVtYmVyIG9mIGNoYXJhY3Rl
cnMgYWxsb3dlZCB0byBiZSBlbnRlcmVkIGJ5IGlucHV0IG1hc2sKKyAgICB1bnNpZ25lZCBhbGxv
d2VkTGVuZ3RoID0gbWFza0xlbmd0aDsKKyAgICBpZiAoZXNjYXBlQ2hhckNvdW50KQorICAgICAg
ICBhbGxvd2VkTGVuZ3RoIC09IGVzY2FwZUNoYXJDb3VudDsKKworICAgIGlmIChoYXNXaWxkY2Fy
ZCkgeworICAgICAgICBmb3JtYXRDb2RlID0gaW5wdXRNYXNrW21hc2tMZW5ndGggLSAyXTsKKyAg
ICAgICAgaWYgKGZvcm1hdENvZGUgPT0gJyonKQorICAgICAgICAgICAgYWxsb3dlZExlbmd0aCA9
IGRhdGEuYWxsb3dlZElucHV0Q2hhcnNNYXhMZW5ndGgoKTsKKyAgICAgICAgZWxzZSB7CisgICAg
ICAgICAgICB1bnNpZ25lZCBsZWZ0TGVuID0gU3RyaW5nKCZmb3JtYXRDb2RlKS50b0ludCgpOwor
ICAgICAgICAgICAgYWxsb3dlZExlbmd0aCA9IGxlZnRMZW4gKyBhbGxvd2VkTGVuZ3RoIC0gMjsK
KyAgICAgICAgfQorICAgIH0KKyAKKyAgICBpZiAoYWxsb3dlZExlbmd0aCA8IGRhdGEuYWxsb3dl
ZElucHV0Q2hhcnNNYXhMZW5ndGgoKSkKKyAgICAgICAgZGF0YS5zZXRBbGxvd2VkSW5wdXRDaGFy
c01heExlbmd0aChhbGxvd2VkTGVuZ3RoKTsKKyAKKyAgICByZXR1cm4gaW5wdXRNYXNrOworfQor
Cit2b2lkIElucHV0RWxlbWVudDo6dXBkYXRlSW5wdXRQcm9wZXJ0aWVzRnJvbVdDU1MoSW5wdXRF
bGVtZW50RGF0YSYgZGF0YSwgRG9jdW1lbnQqIGRvY3VtZW50KQoreworICAgIGlmICghZG9jdW1l
bnQpCisgICAgICAgIHJldHVybjsKKworICAgIFN0cmluZyBpbnB1dEZvcm1hdE1hc2sgPSBkYXRh
LmlucHV0Rm9ybWF0TWFzaygpOworICAgIElucHV0RWxlbWVudERhdGE6OklucHV0UmVxdWlyZW1l
bnRTdGF0ZSBpbnB1dFJlcXVpcmVtZW50U3RhdGUgPSBkYXRhLmlucHV0UmVxdWlyZW1lbnRTdGF0
ZSgpOworICAgIGlmICghaW5wdXRGb3JtYXRNYXNrLmlzRW1wdHkoKSAmJiBJbnB1dEVsZW1lbnRE
YXRhOjpOb25lICE9IGlucHV0UmVxdWlyZW1lbnRTdGF0ZSkKKyAgICAgICAgcmV0dXJuOworIAor
ICAgIC8vMSwgZ2V0IGlucHV0IHByb3BlcnR5IGZyb20gaW5saW5lIFdDU1MgZmlyc3QgCisgICAg
Q1NTU3R5bGVEZWNsYXJhdGlvbiogc3R5bGVEZWNsYXJhdGlvbiA9IGRhdGEuZWxlbWVudCgpLT5z
dHlsZSgpOworICAgIGlmIChzdHlsZURlY2xhcmF0aW9uKSB7CisgICAgICAgIGlmIChpbnB1dEZv
cm1hdE1hc2suaXNFbXB0eSgpKSB7CisgICAgICAgICAgICBpbnB1dEZvcm1hdE1hc2sgPSBzdHls
ZURlY2xhcmF0aW9uLT5nZXRQcm9wZXJ0eVZhbHVlKENTU1Byb3BlcnR5V2FwSW5wdXRGb3JtYXQp
OworICAgICAgICAgICAgaW5wdXRGb3JtYXRNYXNrLnJlcGxhY2UoJ1wnJywgJyAnKTsKKyAgICAg
ICAgICAgIGlucHV0Rm9ybWF0TWFzayA9IGlucHV0Rm9ybWF0TWFzay5zdHJpcFdoaXRlU3BhY2Uo
KTsKKyAgICAgICAgfQorIAorICAgICAgICBpZiAoSW5wdXRFbGVtZW50RGF0YTo6Tm9uZSA9PSBp
bnB1dFJlcXVpcmVtZW50U3RhdGUpIHsKKyAgICAgICAgICAgIFN0cmluZyBpbnB1dFJlcXVpcmVk
ID0gc3R5bGVEZWNsYXJhdGlvbi0+Z2V0UHJvcGVydHlWYWx1ZShDU1NQcm9wZXJ0eVdhcElucHV0
UmVxdWlyZWQpOworICAgICAgICAgICAgaWYgKCFpbnB1dFJlcXVpcmVkLmlzRW1wdHkoKSkKKyAg
ICAgICAgICAgICAgICBpbnB1dFJlcXVpcmVtZW50U3RhdGUgPSAoaW5wdXRSZXF1aXJlZCA9PSAi
dHJ1ZSIgPyBJbnB1dEVsZW1lbnREYXRhOjpJbnB1dFJlcXVpcmVkIDogSW5wdXRFbGVtZW50RGF0
YTo6SW5wdXROb3RSZXF1aXJlZCk7CisgICAgICAgIH0KKyAgICB9CisgCisgICAgLy8yLCBUcnkg
dG8gZ2V0IGlucHV0IHByb3BlcnR5IGZyb20gaW50ZXJuYWwgV0NTUyBhbmQgZXh0ZXJuYWwgV0NT
UyBpbiB0dXJuCisgICAgaWYgKGlucHV0Rm9ybWF0TWFzay5pc0VtcHR5KCkgfHwgSW5wdXRFbGVt
ZW50RGF0YTo6Tm9uZSA9PSBpbnB1dFJlcXVpcmVtZW50U3RhdGUpIHsKKyAgICAgICAgaWYgKGRv
Y3VtZW50LT5zdHlsZVNlbGVjdG9yKCkpIHsKKyAgICAgICAgICAgIFJlZlB0cjxDU1NSdWxlTGlz
dD4gcnVsZUxpc3QgPSBkb2N1bWVudC0+c3R5bGVTZWxlY3RvcigpLT5zdHlsZVJ1bGVzRm9yRWxl
bWVudChkYXRhLmVsZW1lbnQoKSwgZmFsc2UpOworICAgICAgICAgICAgaWYgKHJ1bGVMaXN0ICYm
IHJ1bGVMaXN0LT5sZW5ndGgoKSA+IDApIHsKKyAgICAgICAgICAgICAgICBDU1NSdWxlKiBydWxl
ID0gMDsKKyAgICAgICAgICAgICAgICBTdHJpbmcgY3NzVGV4dDsKKyAgICAgICAgICAgICAgICBm
b3IgKGludCBpID0gMDsgaSA8IHJ1bGVMaXN0LT5sZW5ndGgoKTsgKytpKSB7CisgICAgICAgICAg
ICAgICAgICAgIHJ1bGUgPSBydWxlTGlzdC0+aXRlbShpKTsKKyAgICAgICAgICAgICAgICAgICAg
aWYgKHJ1bGUtPmlzU3R5bGVSdWxlKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIENTU1N0
eWxlUnVsZSogY3NSdWxlID0gc3RhdGljX2Nhc3Q8Q1NTU3R5bGVSdWxlKj4ocnVsZSk7CisgICAg
ICAgICAgICAgICAgICAgICAgICBpZiAoY3NSdWxlLT5zdHlsZSgpKSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY3NzVGV4dCA9IGNzUnVsZS0+c3R5bGUoKS0+Y3NzVGV4dCgpOworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbmRleCA9IC0xOworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGlmIChpbnB1dEZvcm1hdE1hc2suaXNFbXB0eSgpKSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGluZGV4ID0gY3NzVGV4dC5maW5kKCItd2FwLWlucHV0LWZv
cm1hdCIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW5kZXggIT0gLTEp
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBwb3N0aW9uID0gY3Nz
VGV4dC5maW5kKCc6JywgaW5kZXgpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaW5wdXRGb3JtYXRNYXNrID0gY3NzVGV4dC5zdWJzdHJpbmcocG9zdGlvbiArIDEpOworIAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9zdGlvbiA9IGlucHV0Rm9ybWF0
TWFzay5maW5kKCc7Jyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1
dEZvcm1hdE1hc2sudHJ1bmNhdGUocG9zdGlvbik7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpbnB1dEZvcm1hdE1hc2sucmVwbGFjZSgnXCcnLCAnICcpOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXRGb3JtYXRNYXNrID0gaW5wdXRGb3JtYXRN
YXNrLnN0cmlwV2hpdGVTcGFjZSgpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKElucHV0RWxlbWVudERhdGE6Ok5vbmUgPT0gaW5wdXRSZXF1aXJlbWVudFN0YXRl
KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4ID0gY3NzVGV4dC5maW5k
KCItd2FwLWlucHV0LXJlcXVpcmVkIik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGlmIChpbmRleCAhPSAtMSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aW50IHBvc3Rpb24gPSBjc3NUZXh0LmZpbmQoJzonLCBpbmRleCk7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBTdHJpbmcgaW5wdXRSZXF1aXJlZCA9IGNzc1RleHQuc3Vic3Ry
aW5nKHBvc3Rpb24gKyAxKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBv
c3Rpb24gPSBpbnB1dFJlcXVpcmVkLmZpbmQoJzsnKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGlucHV0UmVxdWlyZWQudHJ1bmNhdGUocG9zdGlvbik7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dFJlcXVpcmVkID0gaW5wdXRSZXF1aXJlZC5z
dHJpcFdoaXRlU3BhY2UoKTsKKyAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGlmICghaW5wdXRSZXF1aXJlZC5pc0VtcHR5KCkpCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaW5wdXRSZXF1aXJlbWVudFN0YXRlID0gKGlucHV0UmVxdWlyZWQgPT0g
InRydWUiID8gSW5wdXRFbGVtZW50RGF0YTo6SW5wdXRSZXF1aXJlZCA6IElucHV0RWxlbWVudERh
dGE6OklucHV0Tm90UmVxdWlyZWQpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorIAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGlmICghaW5wdXRGb3JtYXRNYXNrLmlzRW1wdHkoKSAmJiBJbnB1dEVsZW1lbnREYXRh
OjpOb25lICE9IGlucHV0UmVxdWlyZW1lbnRTdGF0ZSkKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAg
ICB9CisgCisgICAgaWYgKGlucHV0Rm9ybWF0TWFzay5pc0VtcHR5KCkpCisgICAgICAgIGRhdGEu
c2V0SW5wdXRGb3JtYXRNYXNrKCIqTSIpOyAvLyBTZXQgaW5wdXQgbWFzayB0byAnKk0nIGJ5IGRl
ZmF1bHQgCisgICAgZWxzZQorICAgICAgICBkYXRhLnNldElucHV0Rm9ybWF0TWFzayh2YWxpZGF0
ZUlucHV0TWFzayhkYXRhLCBpbnB1dEZvcm1hdE1hc2ssIHRydWUpKTsKKyAKKyAgICAvLyBJZiAn
LXdhcC1pbnB1dC1yZXF1aXJlZCcgaXMgbm90IHNwZWNpZmllZCwgaW5wdXQgaXMgc3RpbGwgcmVx
dWlyZWQgd2hlbgorICAgIC8vIHRoZSBpbnB1dCBmb3JtYXQgaXMgbm90IGVtcHR5IGFuZCB0aGUg
Y29kZXMgaXMgbm90IGVxdWFsIHRvICIqZiIKKyAgICBpZiAoSW5wdXRFbGVtZW50RGF0YTo6Tm9u
ZSA9PSBpbnB1dFJlcXVpcmVtZW50U3RhdGUpIHsKKyAgICAgICAgaWYgKGlucHV0Rm9ybWF0TWFz
ay5pc0VtcHR5KCkgfHwgKGlucHV0Rm9ybWF0TWFzay5sZW5ndGgoKSA9PSAyICYmIGlucHV0Rm9y
bWF0TWFza1swXSA9PSAnKicpKQorICAgICAgICAgICAgZGF0YS5zZXRJbnB1dFJlcXVpcmVtZW50
U3RhdGUoSW5wdXRFbGVtZW50RGF0YTo6SW5wdXROb3RSZXF1aXJlZCk7CisgICAgICAgIGVsc2UK
KyAgICAgICAgICAgIGRhdGEuc2V0SW5wdXRSZXF1aXJlbWVudFN0YXRlKElucHV0RWxlbWVudERh
dGE6OklucHV0UmVxdWlyZWQpOworICAgIH0gZWxzZQorICAgICAgICBkYXRhLnNldElucHV0UmVx
dWlyZW1lbnRTdGF0ZShpbnB1dFJlcXVpcmVtZW50U3RhdGUpOworfQorI2VuZGlmCisKIHZvaWQg
SW5wdXRFbGVtZW50OjpkaXNwYXRjaEZvY3VzRXZlbnQoSW5wdXRFbGVtZW50RGF0YSYgZGF0YSwg
RG9jdW1lbnQqIGRvY3VtZW50KQogewogICAgIGlmICghZGF0YS5pbnB1dEVsZW1lbnQoKS0+aXNU
ZXh0RmllbGQoKSkKICAgICAgICAgcmV0dXJuOwogCisjaWYgRU5BQkxFKFdDU1MpCisgICAgdXBk
YXRlSW5wdXRQcm9wZXJ0aWVzRnJvbVdDU1MoZGF0YSwgZG9jdW1lbnQpOworI2VuZGlmCisKICAg
ICB1cGRhdGVQbGFjZWhvbGRlclZpc2liaWxpdHkoZGF0YSwgZG9jdW1lbnQpOwogCiAgICAgaWYg
KGRhdGEuaW5wdXRFbGVtZW50KCktPmlzUGFzc3dvcmRGaWVsZCgpICYmIGRvY3VtZW50LT5mcmFt
ZSgpKQpAQCAtNzIsNiArMzEyLDE0IEBAIHZvaWQgSW5wdXRFbGVtZW50OjpkaXNwYXRjaEJsdXJF
dmVudChJbnAKICAgICBpZiAoIWZyYW1lKQogICAgICAgICByZXR1cm47CiAKKyNpZiBFTkFCTEUo
V0NTUykKKyAgICBpZiAoZGF0YS5pbnB1dFJlcXVpcmVtZW50U3RhdGUoKSA9PSBJbnB1dEVsZW1l
bnREYXRhOjpJbnB1dFJlcXVpcmVkICYmIGRhdGEuZWxlbWVudCgpLT5yZW5kZXJlcigpKSB7Cisg
ICAgICAgIFN0cmluZyBpbnB1dGVkVGV4dCA9IHN0YXRpY19jYXN0PFJlbmRlclRleHRDb250cm9s
Kj4oZGF0YS5lbGVtZW50KCktPnJlbmRlcmVyKCkpLT50ZXh0KCk7CisgICAgICAgIGlmIChpbnB1
dGVkVGV4dC5pc0VtcHR5KCkgfHwgIWlzQ29uZm9ybWVkVG9JbnB1dE1hc2soZGF0YSwgaW5wdXRl
ZFRleHQpKQorICAgICAgICAgICAgZGF0YS5lbGVtZW50KCktPmZvY3VzKCk7IAorICAgIH0gCisj
ZW5kaWYKKwogICAgIHVwZGF0ZVBsYWNlaG9sZGVyVmlzaWJpbGl0eShkYXRhLCBkb2N1bWVudCk7
CiAKICAgICBpZiAoZGF0YS5pbnB1dEVsZW1lbnQoKS0+aXNQYXNzd29yZEZpZWxkKCkpCkBAIC0y
NzcsNiArNTI1LDEwIEBAIElucHV0RWxlbWVudERhdGE6OklucHV0RWxlbWVudERhdGEoSW5wdXQK
ICAgICAsIG1fbWF4TGVuZ3RoKElucHV0RWxlbWVudDo6c19tYXhpbXVtTGVuZ3RoKQogICAgICwg
bV9jYWNoZWRTZWxlY3Rpb25TdGFydCgtMSkKICAgICAsIG1fY2FjaGVkU2VsZWN0aW9uRW5kKC0x
KQorI2lmIEVOQUJMRShXQ1NTKQorICAgICwgbV9pbnB1dFJlcXVpcmVtZW50U3RhdGUoSW5wdXRF
bGVtZW50RGF0YTo6Tm9uZSkKKyAgICAsIG1fYWxsb3dlZElucHV0Q2hhcnNNYXhMZW5ndGgoSW5w
dXRFbGVtZW50OjpzX21heGltdW1MZW5ndGgpCisjZW5kaWYKIHsKICAgICBBU1NFUlQobV9pbnB1
dEVsZW1lbnQpOwogICAgIEFTU0VSVChtX2VsZW1lbnQpOwpAQCAtMjk1LDYgKzU0NywxMCBAQCBJ
bnB1dEVsZW1lbnQqIHRvSW5wdXRFbGVtZW50KEVsZW1lbnQqIGVsCiB7CiAgICAgaWYgKGVsZW1l
bnQtPmlzSFRNTEVsZW1lbnQoKSAmJiAoZWxlbWVudC0+aGFzVGFnTmFtZShpbnB1dFRhZykgfHwg
ZWxlbWVudC0+aGFzVGFnTmFtZShpc2luZGV4VGFnKSkpCiAgICAgICAgIHJldHVybiBzdGF0aWNf
Y2FzdDxIVE1MSW5wdXRFbGVtZW50Kj4oZWxlbWVudCk7CisjaWYgRU5BQkxFKFdDU1MpCisgICAg
ZWxzZSBpZiAoZWxlbWVudC0+aXNIVE1MRWxlbWVudCgpICYmIGVsZW1lbnQtPmhhc1RhZ05hbWUo
dGV4dGFyZWFUYWcpKQorICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8SFRNTFRleHRBcmVhRWxl
bWVudCo+KGVsZW1lbnQpOworI2VuZGlmCiAKICNpZiBFTkFCTEUoV01MKQogICAgIGlmIChlbGVt
ZW50LT5pc1dNTEVsZW1lbnQoKSAmJiBlbGVtZW50LT5oYXNUYWdOYW1lKFdNTE5hbWVzOjppbnB1
dFRhZykpCkluZGV4OiBXZWJDb3JlL2RvbS9JbnB1dEVsZW1lbnQuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL2RvbS9JbnB1dEVsZW1lbnQuaAkocmV2aXNpb24gNDA4NDYpCisrKyBXZWJDb3JlL2Rv
bS9JbnB1dEVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtNzcsNiArNzcsMTIgQEAgcHJvdGVj
dGVkOgogICAgIHN0YXRpYyB2b2lkIHBhcnNlTWF4TGVuZ3RoQXR0cmlidXRlKElucHV0RWxlbWVu
dERhdGEmLCBNYXBwZWRBdHRyaWJ1dGUqKTsKICAgICBzdGF0aWMgdm9pZCB1cGRhdGVWYWx1ZUlm
TmVlZGVkKElucHV0RWxlbWVudERhdGEmKTsKICAgICBzdGF0aWMgdm9pZCBub3RpZnlGb3JtU3Rh
dGVDaGFuZ2VkKElucHV0RWxlbWVudERhdGEmLCBEb2N1bWVudCopOworI2lmIEVOQUJMRShXQ1NT
KQorICAgIHN0YXRpYyBib29sIGlzQ29uZm9ybWVkVG9JbnB1dE1hc2soY29uc3QgSW5wdXRFbGVt
ZW50RGF0YSYsIGNvbnN0IFN0cmluZyYpOyAKKyAgICBzdGF0aWMgYm9vbCBpc0NvbmZvcm1lZFRv
SW5wdXRNYXNrKGNvbnN0IElucHV0RWxlbWVudERhdGEmLCBVQ2hhciwgdW5zaWduZWQsIHVuc2ln
bmVkKTsKKyAgICBzdGF0aWMgdm9pZCB1cGRhdGVJbnB1dFByb3BlcnRpZXNGcm9tV0NTUyhJbnB1
dEVsZW1lbnREYXRhJiwgRG9jdW1lbnQqKTsKKyAgICBzdGF0aWMgU3RyaW5nIHZhbGlkYXRlSW5w
dXRNYXNrKElucHV0RWxlbWVudERhdGEmLCBTdHJpbmcmLCBib29sIGlzRnJvbVdDU1MgPSBmYWxz
ZSk7CisjZW5kaWYKIH07CiAKIC8vIEhUTUwvV01MSW5wdXRFbGVtZW50IGhvbGQgdGhpcyBzdHJ1
Y3QgYXMgbWVtYmVyIHZhcmlhYmxlCkBAIC0xMTAsNiArMTE2LDE4IEBAIHB1YmxpYzoKICAgICBp
bnQgY2FjaGVkU2VsZWN0aW9uRW5kKCkgY29uc3QgeyByZXR1cm4gbV9jYWNoZWRTZWxlY3Rpb25F
bmQ7IH0KICAgICB2b2lkIHNldENhY2hlZFNlbGVjdGlvbkVuZChpbnQgdmFsdWUpIHsgbV9jYWNo
ZWRTZWxlY3Rpb25FbmQgPSB2YWx1ZTsgfQogCisjaWYgRU5BQkxFKFdDU1MpCisgICAgZW51bSBJ
bnB1dFJlcXVpcmVtZW50U3RhdGUgeyBOb25lID0gLTEsIElucHV0Tm90UmVxdWlyZWQsIElucHV0
UmVxdWlyZWQgfTsKKyAgICBJbnB1dFJlcXVpcmVtZW50U3RhdGUgaW5wdXRSZXF1aXJlbWVudFN0
YXRlKCkgY29uc3QgeyByZXR1cm4gbV9pbnB1dFJlcXVpcmVtZW50U3RhdGU7IH0KKyAgICB2b2lk
IHNldElucHV0UmVxdWlyZW1lbnRTdGF0ZShJbnB1dFJlcXVpcmVtZW50U3RhdGUgc3RhdGUpIHsg
bV9pbnB1dFJlcXVpcmVtZW50U3RhdGUgPSBzdGF0ZTsgfQorCisgICAgU3RyaW5nIGlucHV0Rm9y
bWF0TWFzaygpIGNvbnN0IHsgcmV0dXJuIG1faW5wdXRGb3JtYXRNYXNrOyB9CisgICAgdm9pZCBz
ZXRJbnB1dEZvcm1hdE1hc2soY29uc3QgU3RyaW5nJiBtYXNrKSB7IG1faW5wdXRGb3JtYXRNYXNr
ID0gbWFzazsgfQorCisgICAgdW5zaWduZWQgYWxsb3dlZElucHV0Q2hhcnNNYXhMZW5ndGgoKSBj
b25zdCB7IHJldHVybiBtX2FsbG93ZWRJbnB1dENoYXJzTWF4TGVuZ3RoOyB9CisgICAgdm9pZCBz
ZXRBbGxvd2VkSW5wdXRDaGFyc01heExlbmd0aCh1bnNpZ25lZCBtYXhMZW5ndGgpIHsgbV9hbGxv
d2VkSW5wdXRDaGFyc01heExlbmd0aCA9IG1heExlbmd0aDsgfQorI2VuZGlmCisKIHByaXZhdGU6
CiAgICAgSW5wdXRFbGVtZW50KiBtX2lucHV0RWxlbWVudDsKICAgICBFbGVtZW50KiBtX2VsZW1l
bnQ7CkBAIC0xMjAsNiArMTM4LDExIEBAIHByaXZhdGU6CiAgICAgaW50IG1fbWF4TGVuZ3RoOwog
ICAgIGludCBtX2NhY2hlZFNlbGVjdGlvblN0YXJ0OwogICAgIGludCBtX2NhY2hlZFNlbGVjdGlv
bkVuZDsKKyNpZiBFTkFCTEUoV0NTUykKKyAgICBTdHJpbmcgbV9pbnB1dEZvcm1hdE1hc2s7Cisg
ICAgSW5wdXRSZXF1aXJlbWVudFN0YXRlIG1faW5wdXRSZXF1aXJlbWVudFN0YXRlOworICAgIHVu
c2lnbmVkIG1fYWxsb3dlZElucHV0Q2hhcnNNYXhMZW5ndGg7CisjZW5kaWYKIH07CiAKIElucHV0
RWxlbWVudCogdG9JbnB1dEVsZW1lbnQoRWxlbWVudCopOwpJbmRleDogV2ViQ29yZS9odG1sL0hU
TUxJbnB1dEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MSW5wdXRF
bGVtZW50LmNwcAkocmV2aXNpb24gNDA4NDYpCisrKyBXZWJDb3JlL2h0bWwvSFRNTElucHV0RWxl
bWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwODQsOCArMTA4NCwxOSBAQCB2b2lkIEhUTUxJ
bnB1dEVsZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRsCiB7CiAgICAgYm9vbCBjbGlja0RlZmF1bHRG
b3JtQnV0dG9uID0gZmFsc2U7CiAKKyNpZiBFTkFCTEUoV0NTUykKKyAgICBpZiAoaXNUZXh0Rmll
bGQoKSAmJiBldnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkudGV4dElucHV0RXZlbnQgJiYgZXZ0
LT5pc1RleHRFdmVudCgpKSB7CisgICAgICAgIFRleHRFdmVudCogdGV4dEV2ZW50ID0gc3RhdGlj
X2Nhc3Q8VGV4dEV2ZW50Kj4oZXZ0KTsKKyAgICAgICAgaWYgKHRleHRFdmVudC0+ZGF0YSgpID09
ICJcbiIpCisgICAgICAgICAgICBjbGlja0RlZmF1bHRGb3JtQnV0dG9uID0gdHJ1ZTsKKyAgICAg
ICAgZWxzZSBpZiAocmVuZGVyZXIoKSAmJiAhaXNDb25mb3JtZWRUb0lucHV0TWFzayhtX2RhdGEs
IHRleHRFdmVudC0+ZGF0YSgpWzBdLCBzZWxlY3Rpb25TdGFydCgpLCBzdGF0aWNfY2FzdDxSZW5k
ZXJUZXh0Q29udHJvbCo+KHJlbmRlcmVyKCkpLT50ZXh0KCkubGVuZ3RoKCkgKyAxKSkKKyAgICAg
ICAgICAgIC8vIElmIHRoZSBpbnB1dGVkIGNoYXJhY3RlciBkb2Vzbid0IGNvbmZvcm0gdG8gdGhl
IGlucHV0IG1hc2ssIHN0b3AgaGFuZGxpbmcgCisgICAgICAgICAgICByZXR1cm47CisgICAgfQor
I2Vsc2UKICAgICBpZiAoaXNUZXh0RmllbGQoKSAmJiBldnQtPnR5cGUoKSA9PSBldmVudE5hbWVz
KCkudGV4dElucHV0RXZlbnQgJiYgZXZ0LT5pc1RleHRFdmVudCgpICYmIHN0YXRpY19jYXN0PFRl
eHRFdmVudCo+KGV2dCktPmRhdGEoKSA9PSAiXG4iKQogICAgICAgICBjbGlja0RlZmF1bHRGb3Jt
QnV0dG9uID0gdHJ1ZTsKKyNlbmRpZgogCiAgICAgaWYgKGlucHV0VHlwZSgpID09IElNQUdFICYm
IGV2dC0+aXNNb3VzZUV2ZW50KCkgJiYgZXZ0LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLmNsaWNr
RXZlbnQpIHsKICAgICAgICAgLy8gcmVjb3JkIHRoZSBtb3VzZSBwb3NpdGlvbiBmb3Igd2hlbiB3
ZSBnZXQgdGhlIERPTUFjdGl2YXRlIGV2ZW50CkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTFRleHRB
cmVhRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxUZXh0QXJlYUVs
ZW1lbnQuY3BwCShyZXZpc2lvbiA0MDg0NikKKysrIFdlYkNvcmUvaHRtbC9IVE1MVGV4dEFyZWFF
bGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDEsNiArNDEsMTAgQEAKICNpbmNsdWRlICJU
ZXh0LmgiCiAjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgogCisjaWYgRU5BQkxFKFdDU1Mp
CisjaW5jbHVkZSAiVGV4dEV2ZW50LmgiCisjZW5kaWYKKwogbmFtZXNwYWNlIFdlYkNvcmUgewog
CiB1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwpAQCAtNDgsNiArNTIsNyBAQCB1c2luZyBuYW1l
c3BhY2UgSFRNTE5hbWVzOwogc3RhdGljIGNvbnN0IGludCBkZWZhdWx0Um93cyA9IDI7CiBzdGF0
aWMgY29uc3QgaW50IGRlZmF1bHRDb2xzID0gMjA7CiAKKyNpZiAhRU5BQkxFKFdDU1MpCiBzdGF0
aWMgaW5saW5lIHZvaWQgbm90aWZ5Rm9ybVN0YXRlQ2hhbmdlZChjb25zdCBIVE1MVGV4dEFyZWFF
bGVtZW50KiBlbGVtZW50KQogewogICAgIEZyYW1lKiBmcmFtZSA9IGVsZW1lbnQtPmRvY3VtZW50
KCktPmZyYW1lKCk7CkBAIC01NSwxOCArNjAsMjcgQEAgc3RhdGljIGlubGluZSB2b2lkIG5vdGlm
eUZvcm1TdGF0ZUNoYW5nZQogICAgICAgICByZXR1cm47CiAgICAgZnJhbWUtPnBhZ2UoKS0+Y2hy
b21lKCktPmNsaWVudCgpLT5mb3JtU3RhdGVEaWRDaGFuZ2UoZWxlbWVudCk7CiB9CisjZW5kaWYK
IAogSFRNTFRleHRBcmVhRWxlbWVudDo6SFRNTFRleHRBcmVhRWxlbWVudChjb25zdCBRdWFsaWZp
ZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudCogZG9jdW1lbnQsIEhUTUxGb3JtRWxlbWVudCogZm9y
bSkKICAgICA6IEhUTUxGb3JtQ29udHJvbEVsZW1lbnRXaXRoU3RhdGUodGFnTmFtZSwgZG9jdW1l
bnQsIGZvcm0pCiAgICAgLCBtX3Jvd3MoZGVmYXVsdFJvd3MpCiAgICAgLCBtX2NvbHMoZGVmYXVs
dENvbHMpCiAgICAgLCBtX3dyYXAoU29mdFdyYXApCisjaWYgRU5BQkxFKFdDU1MpCisgICAgLCBt
X2RhdGEodGhpcywgdGhpcykKKyNlbHNlCiAgICAgLCBtX2NhY2hlZFNlbGVjdGlvblN0YXJ0KC0x
KQogICAgICwgbV9jYWNoZWRTZWxlY3Rpb25FbmQoLTEpCisjZW5kaWYKIHsKICAgICBBU1NFUlQo
aGFzVGFnTmFtZSh0ZXh0YXJlYVRhZykpOwogICAgIHNldFZhbHVlTWF0Y2hlc1JlbmRlcmVyKCk7
CisjaWYgRU5BQkxFKFdDU1MpCisgICAgbm90aWZ5Rm9ybVN0YXRlQ2hhbmdlZChtX2RhdGEsIGRv
Y3VtZW50KTsKKyNlbHNlCiAgICAgbm90aWZ5Rm9ybVN0YXRlQ2hhbmdlZCh0aGlzKTsKKyNlbmRp
ZgogfQogCiBjb25zdCBBdG9taWNTdHJpbmcmIEhUTUxUZXh0QXJlYUVsZW1lbnQ6OnR5cGUoKSBj
b25zdApAQCAtOTAsOCArMTA0LDEzIEBAIGludCBIVE1MVGV4dEFyZWFFbGVtZW50OjpzZWxlY3Rp
b25TdGFydCgKIHsKICAgICBpZiAoIXJlbmRlcmVyKCkpCiAgICAgICAgIHJldHVybiAwOworI2lm
IEVOQUJMRShXQ1NTKQorICAgIGlmIChkb2N1bWVudCgpLT5mb2N1c2VkTm9kZSgpICE9IHRoaXMg
JiYgbV9kYXRhLmNhY2hlZFNlbGVjdGlvblN0YXJ0KCkgIT0gLTEpCisgICAgICAgIHJldHVybiBt
X2RhdGEuY2FjaGVkU2VsZWN0aW9uU3RhcnQoKTsKKyNlbHNlCiAgICAgaWYgKGRvY3VtZW50KCkt
PmZvY3VzZWROb2RlKCkgIT0gdGhpcyAmJiBtX2NhY2hlZFNlbGVjdGlvblN0YXJ0ID49IDApCiAg
ICAgICAgIHJldHVybiBtX2NhY2hlZFNlbGVjdGlvblN0YXJ0OworI2VuZGlmCiAgICAgcmV0dXJu
IHN0YXRpY19jYXN0PFJlbmRlclRleHRDb250cm9sKj4ocmVuZGVyZXIoKSktPnNlbGVjdGlvblN0
YXJ0KCk7CiB9CiAKQEAgLTk5LDggKzExOCwxMyBAQCBpbnQgSFRNTFRleHRBcmVhRWxlbWVudDo6
c2VsZWN0aW9uRW5kKCkKIHsKICAgICBpZiAoIXJlbmRlcmVyKCkpCiAgICAgICAgIHJldHVybiAw
OworI2lmIEVOQUJMRShXQ1NTKQorICAgIGlmIChkb2N1bWVudCgpLT5mb2N1c2VkTm9kZSgpICE9
IHRoaXMgJiYgbV9kYXRhLmNhY2hlZFNlbGVjdGlvbkVuZCgpICE9IC0xKQorICAgICAgICByZXR1
cm4gbV9kYXRhLmNhY2hlZFNlbGVjdGlvbkVuZCgpOworI2Vsc2UKICAgICBpZiAoZG9jdW1lbnQo
KS0+Zm9jdXNlZE5vZGUoKSAhPSB0aGlzICYmIG1fY2FjaGVkU2VsZWN0aW9uRW5kID49IDApCiAg
ICAgICAgIHJldHVybiBtX2NhY2hlZFNlbGVjdGlvbkVuZDsKKyNlbmRpZgogICAgIHJldHVybiBz
dGF0aWNfY2FzdDxSZW5kZXJUZXh0Q29udHJvbCo+KHJlbmRlcmVyKCkpLT5zZWxlY3Rpb25FbmQo
KTsKIH0KIApAQCAtMTI5LDcgKzE1MywxMSBAQCB2b2lkIEhUTUxUZXh0QXJlYUVsZW1lbnQ6OnNl
dFNlbGVjdGlvblJhCiB7CiAgICAgaWYgKCFyZW5kZXJlcigpKQogICAgICAgICByZXR1cm47Cisj
aWYgRU5BQkxFKFdDU1MpCisgICAgSW5wdXRFbGVtZW50Ojp1cGRhdGVTZWxlY3Rpb25SYW5nZSht
X2RhdGEsIHN0YXJ0LCBlbmQpOworI2Vsc2UKICAgICBzdGF0aWNfY2FzdDxSZW5kZXJUZXh0Q29u
dHJvbCo+KHJlbmRlcmVyKCkpLT5zZXRTZWxlY3Rpb25SYW5nZShzdGFydCwgZW5kKTsKKyNlbmRp
ZgogfQogCiB2b2lkIEhUTUxUZXh0QXJlYUVsZW1lbnQ6OmNoaWxkcmVuQ2hhbmdlZChib29sIGNo
YW5nZWRCeVBhcnNlciwgTm9kZSogYmVmb3JlQ2hhbmdlLCBOb2RlKiBhZnRlckNoYW5nZSwgaW50
IGNoaWxkQ291bnREZWx0YSkKQEAgLTIyOCw2ICsyNTYsOSBAQCB2b2lkIEhUTUxUZXh0QXJlYUVs
ZW1lbnQ6OnVwZGF0ZUZvY3VzQXBwCiB7CiAgICAgQVNTRVJUKHJlbmRlcmVyKCkpOwogICAgIAor
I2lmIEVOQUJMRShXQ1NTKQorICAgIElucHV0RWxlbWVudDo6dXBkYXRlRm9jdXNBcHBlYXJhbmNl
KG1fZGF0YSwgZG9jdW1lbnQoKSwgcmVzdG9yZVByZXZpb3VzU2VsZWN0aW9uKTsKKyNlbHNlCiAg
ICAgaWYgKCFyZXN0b3JlUHJldmlvdXNTZWxlY3Rpb24gfHwgbV9jYWNoZWRTZWxlY3Rpb25TdGFy
dCA8IDApIHsKICNpZiBFTkFCTEUoT05fRklSU1RfVEVYVEFSRUFfRk9DVVNfU0VMRUNUX0FMTCkK
ICAgICAgICAgLy8gRGV2aWNlcyB3aXRoIHRyYWNrYmFsbHMgb3IgZC1wYWRzIG1heSBmb2N1cyBv
biBhIHRleHRhcmVhIGluIHJvdXRlCkBAIC0yNDcsMTAgKzI3OCw0NyBAQCB2b2lkIEhUTUxUZXh0
QXJlYUVsZW1lbnQ6OnVwZGF0ZUZvY3VzQXBwCiAKICAgICBpZiAoZG9jdW1lbnQoKS0+ZnJhbWUo
KSkKICAgICAgICAgZG9jdW1lbnQoKS0+ZnJhbWUoKS0+cmV2ZWFsU2VsZWN0aW9uKCk7CisjZW5k
aWYKK30KKworI2lmIEVOQUJMRShXQ1NTKQordm9pZCBIVE1MVGV4dEFyZWFFbGVtZW50OjpzZXRW
YWx1ZUZyb21SZW5kZXJlcihjb25zdCBTdHJpbmcmIHZhbHVlKQoreworICAgIElucHV0RWxlbWVu
dDo6c2V0VmFsdWVGcm9tUmVuZGVyZXIobV9kYXRhLCBkb2N1bWVudCgpLCB2YWx1ZSk7Cit9CisK
K1N0cmluZyBIVE1MVGV4dEFyZWFFbGVtZW50Ojpjb25zdHJhaW5WYWx1ZShjb25zdCBTdHJpbmcm
IHByb3Bvc2VkVmFsdWUpIGNvbnN0Cit7CisgICAgcmV0dXJuIElucHV0RWxlbWVudDo6Y29uc3Ry
YWluVmFsdWUobV9kYXRhLCBwcm9wb3NlZFZhbHVlLCBtX2RhdGEubWF4TGVuZ3RoKCkpOwogfQog
Cit2b2lkIEhUTUxUZXh0QXJlYUVsZW1lbnQ6OmNhY2hlU2VsZWN0aW9uKGludCBzdGFydCwgaW50
IGVuZCkKK3sKKyAgICBtX2RhdGEuc2V0Q2FjaGVkU2VsZWN0aW9uU3RhcnQoc3RhcnQpOworICAg
IG1fZGF0YS5zZXRDYWNoZWRTZWxlY3Rpb25FbmQoZW5kKTsKK30KKwordm9pZCBIVE1MVGV4dEFy
ZWFFbGVtZW50OjpkaXNwYXRjaEZvY3VzRXZlbnQoKQoreworICAgIElucHV0RWxlbWVudDo6ZGlz
cGF0Y2hGb2N1c0V2ZW50KG1fZGF0YSwgZG9jdW1lbnQoKSk7CisgICAgSFRNTEZvcm1Db250cm9s
RWxlbWVudFdpdGhTdGF0ZTo6ZGlzcGF0Y2hGb2N1c0V2ZW50KCk7Cit9CisgCit2b2lkIEhUTUxU
ZXh0QXJlYUVsZW1lbnQ6OmRpc3BhdGNoQmx1ckV2ZW50KCkKK3sKKyAgICBJbnB1dEVsZW1lbnQ6
OmRpc3BhdGNoQmx1ckV2ZW50KG1fZGF0YSwgZG9jdW1lbnQoKSk7CisgICAgSFRNTEZvcm1Db250
cm9sRWxlbWVudFdpdGhTdGF0ZTo6ZGlzcGF0Y2hCbHVyRXZlbnQoKTsKK30KKyNlbmRpZgorCiB2
b2lkIEhUTUxUZXh0QXJlYUVsZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRsZXIoRXZlbnQqIGV2ZW50
KQogeworI2lmIEVOQUJMRShXQ1NTKQorICAgIGlmIChldmVudC0+dHlwZSgpID09IGV2ZW50TmFt
ZXMoKS50ZXh0SW5wdXRFdmVudCAmJiBldmVudC0+aXNUZXh0RXZlbnQoKSAmJiByZW5kZXJlcigp
IAorICAgICAgICAmJiAhaXNDb25mb3JtZWRUb0lucHV0TWFzayhtX2RhdGEsIHN0YXRpY19jYXN0
PFRleHRFdmVudCo+KGV2ZW50KS0+ZGF0YSgpWzBdLCBzZWxlY3Rpb25TdGFydCgpLCBzdGF0aWNf
Y2FzdDxSZW5kZXJUZXh0Q29udHJvbCo+KHJlbmRlcmVyKCkpLT50ZXh0KCkubGVuZ3RoKCkgKyAx
KSkKKyAgICAgICAgcmV0dXJuOworI2VuZGlmCisKICAgICBpZiAocmVuZGVyZXIoKSAmJiAoZXZl
bnQtPmlzTW91c2VFdmVudCgpIHx8IGV2ZW50LT5pc0RyYWdFdmVudCgpIHx8IGV2ZW50LT5pc1do
ZWVsRXZlbnQoKSB8fCBldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5ibHVyRXZlbnQpKQog
ICAgICAgICBzdGF0aWNfY2FzdDxSZW5kZXJUZXh0Q29udHJvbE11bHRpTGluZSo+KHJlbmRlcmVy
KCkpLT5mb3J3YXJkRXZlbnQoZXZlbnQpOwogCkBAIC0yNzAsNyArMzM4LDExIEBAIHZvaWQgSFRN
TFRleHRBcmVhRWxlbWVudDo6dXBkYXRlVmFsdWUoKSAKICAgICBBU1NFUlQocmVuZGVyZXIoKSk7
CiAgICAgbV92YWx1ZSA9IHN0YXRpY19jYXN0PFJlbmRlclRleHRDb250cm9sKj4ocmVuZGVyZXIo
KSktPnRleHQoKTsKICAgICBjb25zdF9jYXN0PEhUTUxUZXh0QXJlYUVsZW1lbnQqPih0aGlzKS0+
c2V0VmFsdWVNYXRjaGVzUmVuZGVyZXIoKTsKKyNpZiBFTkFCTEUoV0NTUykKKyAgICBub3RpZnlG
b3JtU3RhdGVDaGFuZ2VkKCooY29uc3RfY2FzdDxJbnB1dEVsZW1lbnREYXRhKj4oJm1fZGF0YSkp
LCBkb2N1bWVudCgpKTsKKyNlbHNlCiAgICAgbm90aWZ5Rm9ybVN0YXRlQ2hhbmdlZCh0aGlzKTsK
KyNlbmRpZgogfQogCiBTdHJpbmcgSFRNTFRleHRBcmVhRWxlbWVudDo6dmFsdWUoKSBjb25zdApA
QCAtMzA2LDcgKzM3OCwxMSBAQCB2b2lkIEhUTUxUZXh0QXJlYUVsZW1lbnQ6OnNldFZhbHVlKGNv
bnN0CiAgICAgfQogCiAgICAgc2V0Q2hhbmdlZCgpOworI2lmIEVOQUJMRShXQ1NTKQorICAgIG5v
dGlmeUZvcm1TdGF0ZUNoYW5nZWQobV9kYXRhLCBkb2N1bWVudCgpKTsKKyNlbHNlCiAgICAgbm90
aWZ5Rm9ybVN0YXRlQ2hhbmdlZCh0aGlzKTsKKyNlbmRpZgogfQogCiBTdHJpbmcgSFRNTFRleHRB
cmVhRWxlbWVudDo6ZGVmYXVsdFZhbHVlKCkgY29uc3QKQEAgLTM4Myw5ICs0NTksMTcgQEAgdm9p
ZCBIVE1MVGV4dEFyZWFFbGVtZW50OjpzZXRSb3dzKGludCBybwogCiBWaXNpYmxlU2VsZWN0aW9u
IEhUTUxUZXh0QXJlYUVsZW1lbnQ6OnNlbGVjdGlvbigpIGNvbnN0CiB7CisjaWYgRU5BQkxFKFdD
U1MpCisgICAgaWYgKCFyZW5kZXJlcigpIHx8IG1fZGF0YS5jYWNoZWRTZWxlY3Rpb25TdGFydCgp
ID09IC0xIHx8IG1fZGF0YS5jYWNoZWRTZWxlY3Rpb25FbmQoKSA9PSAtMSkKKyNlbHNlCiAgICAg
aWYgKCFyZW5kZXJlcigpIHx8IG1fY2FjaGVkU2VsZWN0aW9uU3RhcnQgPCAwIHx8IG1fY2FjaGVk
U2VsZWN0aW9uRW5kIDwgMCkKKyNlbmRpZgogICAgICAgICByZXR1cm4gVmlzaWJsZVNlbGVjdGlv
bigpOworI2lmIEVOQUJMRShXQ1NTKQorICAgIHJldHVybiBzdGF0aWNfY2FzdDxSZW5kZXJUZXh0
Q29udHJvbCo+KHJlbmRlcmVyKCkpLT5zZWxlY3Rpb24obV9kYXRhLmNhY2hlZFNlbGVjdGlvblN0
YXJ0KCksIG1fZGF0YS5jYWNoZWRTZWxlY3Rpb25FbmQoKSk7CisjZWxzZQogICAgIHJldHVybiBz
dGF0aWNfY2FzdDxSZW5kZXJUZXh0Q29udHJvbCo+KHJlbmRlcmVyKCkpLT5zZWxlY3Rpb24obV9j
YWNoZWRTZWxlY3Rpb25TdGFydCwgbV9jYWNoZWRTZWxlY3Rpb25FbmQpOworI2VuZGlmCiB9CiAK
IGJvb2wgSFRNTFRleHRBcmVhRWxlbWVudDo6c2hvdWxkVXNlSW5wdXRNZXRob2QoKSBjb25zdApJ
bmRleDogV2ViQ29yZS9odG1sL0hUTUxUZXh0QXJlYUVsZW1lbnQuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL2h0bWwvSFRNTFRleHRBcmVhRWxlbWVudC5oCShyZXZpc2lvbiA0MDg0NikKKysrIFdl
YkNvcmUvaHRtbC9IVE1MVGV4dEFyZWFFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTI2LDEx
ICsyNiwxOSBAQAogCiAjaW5jbHVkZSAiSFRNTEZvcm1Db250cm9sRWxlbWVudC5oIgogCisjaWYg
RU5BQkxFKFdDU1MpCisjaW5jbHVkZSAiSW5wdXRFbGVtZW50LmgiCisjZW5kaWYKKwogbmFtZXNw
YWNlIFdlYkNvcmUgewogCiBjbGFzcyBWaXNpYmxlU2VsZWN0aW9uOwogCisjaWYgRU5BQkxFKFdD
U1MpCitjbGFzcyBIVE1MVGV4dEFyZWFFbGVtZW50IDogcHVibGljIEhUTUxGb3JtQ29udHJvbEVs
ZW1lbnRXaXRoU3RhdGUsIHB1YmxpYyBJbnB1dEVsZW1lbnQgeworI2Vsc2UKIGNsYXNzIEhUTUxU
ZXh0QXJlYUVsZW1lbnQgOiBwdWJsaWMgSFRNTEZvcm1Db250cm9sRWxlbWVudFdpdGhTdGF0ZSB7
CisjZW5kaWYKIHB1YmxpYzoKICAgICBIVE1MVGV4dEFyZWFFbGVtZW50KGNvbnN0IFF1YWxpZmll
ZE5hbWUmLCBEb2N1bWVudCosIEhUTUxGb3JtRWxlbWVudCogPSAwKTsKIApAQCAtNzAsNiArNzgs
MjcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgYm9vbCBpc01vdXNlRm9jdXNhYmxlKCkgY29uc3Q7
CiAgICAgdmlydHVhbCBib29sIGlzS2V5Ym9hcmRGb2N1c2FibGUoS2V5Ym9hcmRFdmVudCopIGNv
bnN0OwogICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVGb2N1c0FwcGVhcmFuY2UoYm9vbCByZXN0b3Jl
UHJldmlvdXNTZWxlY3Rpb24pOworI2lmIEVOQUJMRShXQ1NTKQorICAgIHZpcnR1YWwgdm9pZCBk
aXNwYXRjaEZvY3VzRXZlbnQoKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2hCbHVyRXZlbnQo
KTsKKworICAgIHZpcnR1YWwgYm9vbCBpc0NoZWNrZWQoKSBjb25zdCB7IHJldHVybiBmYWxzZTsg
fQorICAgIHZpcnR1YWwgYm9vbCBpc0F1dG9maWxsZWQoKSBjb25zdCB7IHJldHVybiBmYWxzZTsg
fSAKKyAgICB2aXJ0dWFsIGJvb2wgaXNJbmRldGVybWluYXRlKCkgY29uc3QgeyByZXR1cm4gZmFs
c2U7IH0KKyAgICB2aXJ0dWFsIGJvb2wgaXNSYWRpb0J1dHRvbigpIGNvbnN0IHsgcmV0dXJuIGZh
bHNlOyB9CisgICAgdmlydHVhbCBib29sIGlzVGV4dEZpZWxkKCkgY29uc3QgeyByZXR1cm4gdHJ1
ZTsgfQorICAgIHZpcnR1YWwgYm9vbCBpc1NlYXJjaEZpZWxkKCkgY29uc3QgeyByZXR1cm4gZmFs
c2U7IH0KKyAgICB2aXJ0dWFsIGJvb2wgaXNJbnB1dFR5cGVIaWRkZW4oKSBjb25zdCB7IHJldHVy
biBmYWxzZTsgfQorICAgIHZpcnR1YWwgYm9vbCBpc1Bhc3N3b3JkRmllbGQoKSBjb25zdCB7IHJl
dHVybiBmYWxzZTsgfQorICAgIHZpcnR1YWwgYm9vbCBzZWFyY2hFdmVudHNTaG91bGRCZURpc3Bh
dGNoZWQoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorICAgIHZpcnR1YWwgYm9vbCBwbGFjZWhv
bGRlclNob3VsZEJlVmlzaWJsZSgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisKKyAgICB2aXJ0
dWFsIGludCBzaXplKCkgY29uc3QgeyByZXR1cm4gMDsgfQorICAgIHZpcnR1YWwgU3RyaW5nIHBs
YWNlaG9sZGVyVmFsdWUoKSBjb25zdCB7IHJldHVybiBTdHJpbmcoKTsgfSAKKworICAgIHZpcnR1
YWwgU3RyaW5nIGNvbnN0cmFpblZhbHVlKGNvbnN0IFN0cmluZyYpIGNvbnN0OworICAgIHZpcnR1
YWwgdm9pZCBzZXRWYWx1ZUZyb21SZW5kZXJlcihjb25zdCBTdHJpbmcmKTsKKyNlbmRpZgogCiAg
ICAgU3RyaW5nIHZhbHVlKCkgY29uc3Q7CiAgICAgdm9pZCBzZXRWYWx1ZShjb25zdCBTdHJpbmcm
KTsKQEAgLTg2LDcgKzExNSwxMSBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRDb2xzKGludCk7CiAg
ICAgdm9pZCBzZXRSb3dzKGludCk7CiAgICAgCisjaWYgRU5BQkxFKFdDU1MpCisgICAgdm9pZCBj
YWNoZVNlbGVjdGlvbihpbnQgcywgaW50IGUpOworI2Vsc2UKICAgICB2b2lkIGNhY2hlU2VsZWN0
aW9uKGludCBzLCBpbnQgZSkgeyBtX2NhY2hlZFNlbGVjdGlvblN0YXJ0ID0gczsgbV9jYWNoZWRT
ZWxlY3Rpb25FbmQgPSBlOyB9OworI2VuZGlmCiAgICAgVmlzaWJsZVNlbGVjdGlvbiBzZWxlY3Rp
b24oKSBjb25zdDsKIAogICAgIHZpcnR1YWwgYm9vbCBzaG91bGRVc2VJbnB1dE1ldGhvZCgpIGNv
bnN0OwpAQCAtMTAwLDggKzEzMywxMiBAQCBwcml2YXRlOgogICAgIGludCBtX2NvbHM7CiAgICAg
V3JhcE1ldGhvZCBtX3dyYXA7CiAgICAgbXV0YWJsZSBTdHJpbmcgbV92YWx1ZTsKKyNpZiBFTkFC
TEUoV0NTUykKKyAgICBJbnB1dEVsZW1lbnREYXRhIG1fZGF0YTsKKyNlbHNlCiAgICAgaW50IG1f
Y2FjaGVkU2VsZWN0aW9uU3RhcnQ7CiAgICAgaW50IG1fY2FjaGVkU2VsZWN0aW9uRW5kOworI2Vu
ZGlmCiB9OwogCiB9IC8vbmFtZXNwYWNlCkluZGV4OiBXZWJDb3JlL3dtbC9XTUxJbnB1dEVsZW1l
bnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvd21sL1dNTElucHV0RWxlbWVudC5jcHAJKHJl
dmlzaW9uIDQwODQ2KQorKysgV2ViQ29yZS93bWwvV01MSW5wdXRFbGVtZW50LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNDAsOCArNDAsMTAgQEAgV01MSW5wdXRFbGVtZW50OjpXTUxJbnB1dEVsZW1l
bnQoY29uc3QgUQogICAgIDogV01MRm9ybUNvbnRyb2xFbGVtZW50V2l0aFN0YXRlKHRhZ05hbWUs
IGRvYykKICAgICAsIG1fZGF0YSh0aGlzLCB0aGlzKQogICAgICwgbV9pc1Bhc3N3b3JkRmllbGQo
ZmFsc2UpCisjaWYgIUVOQUJMRShXQ1NTKQogICAgICwgbV9pc0VtcHR5T2soZmFsc2UpCiAgICAg
LCBtX251bU9mQ2hhcnNBbGxvd2VkQnlNYXNrKDApCisjZW5kaWYKIHsKIH0KIApAQCAtNTEsMTEg
KzUzLDEzIEBAIFdNTElucHV0RWxlbWVudDo6fldNTElucHV0RWxlbWVudCgpCiAgICAgICAgIGRv
Y3VtZW50KCktPnVucmVnaXN0ZXJGb3JEb2N1bWVudEFjdGl2YXRpb25DYWxsYmFja3ModGhpcyk7
CiB9CiAKKyNpZiAhRU5BQkxFKFdDU1MpCiBzdGF0aWMgY29uc3QgQXRvbWljU3RyaW5nJiBmb3Jt
YXRDb2RlcygpCiB7CiAgICAgREVGSU5FX1NUQVRJQ19MT0NBTChBdG9taWNTdHJpbmcsIGNvZGVz
LCAoIkFhTm5YeE1tIikpOwogICAgIHJldHVybiBjb2RlczsKIH0KKyNlbmRpZgogCiBib29sIFdN
TElucHV0RWxlbWVudDo6aXNLZXlib2FyZEZvY3VzYWJsZShLZXlib2FyZEV2ZW50KikgY29uc3QK
IHsKQEAgLTc1LDE5ICs3OSwyNyBAQCB2b2lkIFdNTElucHV0RWxlbWVudDo6ZGlzcGF0Y2hGb2N1
c0V2ZW50CiAKIHZvaWQgV01MSW5wdXRFbGVtZW50OjpkaXNwYXRjaEJsdXJFdmVudCgpCiB7Cisj
aWYgRU5BQkxFKFdDU1MpCisgICAgSW5wdXRFbGVtZW50OjpkaXNwYXRjaEJsdXJFdmVudChtX2Rh
dGEsIGRvY3VtZW50KCkpOworI2VuZGlmCisKICAgICAvLyBGaXJzdGx5IGNoZWNrIGlmIGl0IGlz
IGFsbG93ZWQgdG8gbGVhdmUgdGhpcyBpbnB1dCBmaWVsZAogICAgIFN0cmluZyB2YWwgPSB2YWx1
ZSgpOworI2lmICFFTkFCTEUoV0NTUykKICAgICBpZiAoKCFtX2lzRW1wdHlPayAmJiB2YWwuaXNF
bXB0eSgpKSB8fCAhaXNDb25mb3JtZWRUb0lucHV0TWFzayh2YWwpKSB7CiAgICAgICAgIHVwZGF0
ZUZvY3VzQXBwZWFyYW5jZSh0cnVlKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KKyNlbmRpZgog
CiAgICAgLy8gdXBkYXRlIHRoZSBuYW1lIHZhcmlhYmxlIG9mIFdNTCBpbnB1dCBlbG1lbmV0CiAg
ICAgU3RyaW5nIG5hbWVWYXJpYWJsZSA9IG5hbWUoKTsKICAgICBpZiAoIW5hbWVWYXJpYWJsZS5p
c0VtcHR5KCkpCiAgICAgICAgIHdtbFBhZ2VTdGF0ZUZvckRvY3VtZW50KGRvY3VtZW50KCkpLT5z
dG9yZVZhcmlhYmxlKG5hbWVWYXJpYWJsZSwgdmFsKTsgCiAKKyNpZiAhRU5BQkxFKFdDU1MpCiAg
ICAgSW5wdXRFbGVtZW50OjpkaXNwYXRjaEJsdXJFdmVudChtX2RhdGEsIGRvY3VtZW50KCkpOwor
I2VuZGlmCiAgICAgV01MRWxlbWVudDo6ZGlzcGF0Y2hCbHVyRXZlbnQoKTsKIH0KIApAQCAtMjAx
LDkgKzIxMywyNSBAQCB2b2lkIFdNTElucHV0RWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1CiAg
ICAgZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IEhUTUxOYW1lczo6c2l6ZUF0dHIpCiAgICAgICAg
IElucHV0RWxlbWVudDo6cGFyc2VTaXplQXR0cmlidXRlKG1fZGF0YSwgYXR0cik7CiAgICAgZWxz
ZSBpZiAoYXR0ci0+bmFtZSgpID09IFdNTE5hbWVzOjpmb3JtYXRBdHRyKQorI2lmIEVOQUJMRShX
Q1NTKQorICAgIHsKKyAgICAgICAgU3RyaW5nIGlucHV0TWFzayA9IHBhcnNlVmFsdWVGb3JiaWRk
aW5nVmFyaWFibGVSZWZlcmVuY2VzKGF0dHItPnZhbHVlKCkpOworICAgICAgICBtX2RhdGEuc2V0
SW5wdXRGb3JtYXRNYXNrKHZhbGlkYXRlSW5wdXRNYXNrKG1fZGF0YSwgaW5wdXRNYXNrKSk7IAor
ICAgIH0KKyNlbHNlCiAgICAgICAgIG1fZm9ybWF0TWFzayA9IHZhbGlkYXRlSW5wdXRNYXNrKHBh
cnNlVmFsdWVGb3JiaWRkaW5nVmFyaWFibGVSZWZlcmVuY2VzKGF0dHItPnZhbHVlKCkpKTsKKyNl
bmRpZgogICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBXTUxOYW1lczo6ZW1wdHlva0F0dHIp
CisjaWYgRU5BQkxFKFdDU1MpCisgICAgeworICAgICAgICBpZiAoYXR0ci0+dmFsdWUoKSA9PSAi
dHJ1ZSIpCisgICAgICAgICAgICBtX2RhdGEuc2V0SW5wdXRSZXF1aXJlbWVudFN0YXRlKElucHV0
RWxlbWVudERhdGE6OklucHV0Tm90UmVxdWlyZWQpOworICAgICAgICBlbHNlCisgICAgICAgICAg
ICBtX2RhdGEuc2V0SW5wdXRSZXF1aXJlbWVudFN0YXRlKElucHV0RWxlbWVudERhdGE6OklucHV0
UmVxdWlyZWQpOworICAgIH0KKyNlbHNlCiAgICAgICAgIG1faXNFbXB0eU9rID0gKGF0dHItPnZh
bHVlKCkgPT0gInRydWUiKTsKKyNlbmRpZgogICAgIGVsc2UKICAgICAgICAgV01MRWxlbWVudDo6
cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cik7CiAKQEAgLTI3MSw3ICsyOTksMTEgQEAgdm9pZCBX
TUxJbnB1dEVsZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRsZQogICAgICAgICBUZXh0RXZlbnQqIHRl
eHRFdmVudCA9IHN0YXRpY19jYXN0PFRleHRFdmVudCo+KGV2dCk7CiAgICAgICAgIGlmICh0ZXh0
RXZlbnQtPmRhdGEoKSA9PSAiXG4iKQogICAgICAgICAgICAgY2xpY2tEZWZhdWx0Rm9ybUJ1dHRv
biA9IHRydWU7CisjaWYgRU5BQkxFKFdDU1MpCisgICAgICAgIGVsc2UgaWYgKHJlbmRlcmVyKCkg
JiYgIWlzQ29uZm9ybWVkVG9JbnB1dE1hc2sobV9kYXRhLCB0ZXh0RXZlbnQtPmRhdGEoKVswXSwg
c2VsZWN0aW9uU3RhcnQoKSwgc3RhdGljX2Nhc3Q8UmVuZGVyVGV4dENvbnRyb2wqPihyZW5kZXJl
cigpKS0+dGV4dCgpLmxlbmd0aCgpICsgMSkpCisjZWxzZQogICAgICAgICBlbHNlIGlmIChyZW5k
ZXJlcigpICYmICFpc0NvbmZvcm1lZFRvSW5wdXRNYXNrKHRleHRFdmVudC0+ZGF0YSgpWzBdLCBz
dGF0aWNfY2FzdDxSZW5kZXJUZXh0Q29udHJvbCo+KHJlbmRlcmVyKCkpLT50ZXh0KCkubGVuZ3Ro
KCkgKyAxKSkKKyNlbmRpZgogICAgICAgICAgICAgLy8gSWYgdGhlIGlucHV0ZWQgY2hhciBkb2Vz
bid0IGNvbmZvcm0gdG8gdGhlIGlucHV0IG1hc2ssIHN0b3AgaGFuZGxpbmcgCiAgICAgICAgICAg
ICByZXR1cm47CiAgICAgfQpAQCAtMzY4LDkgKzQwMCwxNyBAQCB2b2lkIFdNTElucHV0RWxlbWVu
dDo6aW5pdCgpCiAgICAgaWYgKCFuYW1lVmFyaWFibGUuaXNFbXB0eSgpKQogICAgICAgICB2YXJp
YWJsZVZhbHVlID0gcGFnZVNhdGUtPmdldFZhcmlhYmxlKG5hbWVWYXJpYWJsZSk7CiAKKyNpZiBF
TkFCTEUoV0NTUykKKyAgICBpZiAodmFyaWFibGVWYWx1ZS5pc0VtcHR5KCkgfHwgIWlzQ29uZm9y
bWVkVG9JbnB1dE1hc2sobV9kYXRhLCB2YXJpYWJsZVZhbHVlKSkgeworI2Vsc2UKICAgICBpZiAo
dmFyaWFibGVWYWx1ZS5pc0VtcHR5KCkgfHwgIWlzQ29uZm9ybWVkVG9JbnB1dE1hc2sodmFyaWFi
bGVWYWx1ZSkpIHsKKyNlbmRpZgogICAgICAgICBTdHJpbmcgdmFsID0gdmFsdWUoKTsKKyNpZiBF
TkFCTEUoV0NTUykKKyAgICAgICAgaWYgKGlzQ29uZm9ybWVkVG9JbnB1dE1hc2sobV9kYXRhLCB2
YWwpKQorI2Vsc2UKICAgICAgICAgaWYgKGlzQ29uZm9ybWVkVG9JbnB1dE1hc2sodmFsKSkKKyNl
bmRpZgogICAgICAgICAgICAgdmFyaWFibGVWYWx1ZSA9IHZhbDsKICAgICAgICAgZWxzZQogICAg
ICAgICAgICAgdmFyaWFibGVWYWx1ZSA9ICIiOwpAQCAtMzc5LDE0ICs0MTksMjUgQEAgdm9pZCBX
TUxJbnB1dEVsZW1lbnQ6OmluaXQoKQogICAgIH0KICAgICBzZXRWYWx1ZSh2YXJpYWJsZVZhbHVl
KTsKICAKLSAgICBpZiAoIWhhc0F0dHJpYnV0ZShXTUxOYW1lczo6ZW1wdHlva0F0dHIpKSB7Ci0g
ICAgICAgIGlmIChtX2Zvcm1hdE1hc2suaXNFbXB0eSgpIHx8IAotICAgICAgICAgICAgLy8gY2hl
Y2sgaWYgdGhlIGZvcm1hdCBjb2RlcyBpcyBqdXN0ICIqZiIKLSAgICAgICAgICAgKG1fZm9ybWF0
TWFzay5sZW5ndGgoKSA9PSAyICYmIG1fZm9ybWF0TWFza1swXSA9PSAnKicgJiYgZm9ybWF0Q29k
ZXMoKS5maW5kKG1fZm9ybWF0TWFza1sxXSkgIT0gLTEpKQotICAgICAgICAgICAgbV9pc0VtcHR5
T2sgPSB0cnVlOwotICAgIH0KKyNpZiAhRU5BQkxFKFdDU1MpCisgICAgaWYgKCFoYXNBdHRyaWJ1
dGUoV01MTmFtZXM6OmVtcHR5b2tBdHRyKQorICAgICAgICAvLyBDaGVjayBpZiB0aGUgZm9ybWF0
IGNvZGVzIGlzIGVtcHR5IG9yIGp1c3QgdGhlIGNvZGUgb2YgIipmIgorICAgICAgICAmJiAobV9m
b3JtYXRNYXNrLmlzRW1wdHkoKSB8fCAobV9mb3JtYXRNYXNrLmxlbmd0aCgpID09IDIgJiYgbV9m
b3JtYXRNYXNrWzBdID09ICcqJyAmJiBmb3JtYXRDb2RlcygpLmZpbmQobV9mb3JtYXRNYXNrWzFd
KSAhPSAtMSkpKQorICAgICAgICBtX2lzRW1wdHlPayA9IHRydWU7CisjZW5kaWYKIH0KIAorI2lm
IEVOQUJMRShXQ1NTKQoraW50IFdNTElucHV0RWxlbWVudDo6c2VsZWN0aW9uU3RhcnQoKSBjb25z
dAoreworICAgIGlmIChkb2N1bWVudCgpLT5mb2N1c2VkTm9kZSgpICE9IHRoaXMgJiYgbV9kYXRh
LmNhY2hlZFNlbGVjdGlvblN0YXJ0KCkgIT0gLTEpCisgICAgICAgIHJldHVybiBtX2RhdGEuY2Fj
aGVkU2VsZWN0aW9uU3RhcnQoKTsKKyAgICBpZiAoIXJlbmRlcmVyKCkpCisgICAgICAgIHJldHVy
biAwOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxSZW5kZXJUZXh0Q29udHJvbCo+KHJlbmRlcmVy
KCkpLT5zZWxlY3Rpb25TdGFydCgpOworfQorCisjZWxzZQogU3RyaW5nIFdNTElucHV0RWxlbWVu
dDo6dmFsaWRhdGVJbnB1dE1hc2soY29uc3QgU3RyaW5nJiBpbnB1dE1hc2spCiB7CiAgICAgYm9v
bCBpc1ZhbGlkID0gdHJ1ZTsKQEAgLTUyMCw2ICs1NzEsNyBAQCB1bnNpZ25lZCBXTUxJbnB1dEVs
ZW1lbnQ6OmN1cnNvclBvc2l0aW9uCiAgCiAgICAgcmV0dXJuIGluZGV4OwogfQorI2VuZGlmCiAK
IH0KIApJbmRleDogV2ViQ29yZS93bWwvV01MSW5wdXRFbGVtZW50LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS93bWwvV01MSW5wdXRFbGVtZW50LmgJKHJldmlzaW9uIDQwODQ2KQorKysgV2ViQ29y
ZS93bWwvV01MSW5wdXRFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTg3LDE5ICs4NywyNyBA
QCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHdpbGxNb3ZlVG9OZXdPd25lckRvY3VtZW50KCk7
CiAgICAgdmlydHVhbCB2b2lkIGRpZE1vdmVUb05ld093bmVyRG9jdW1lbnQoKTsKIAorI2lmIEVO
QUJMRShXQ1NTKQorICAgIGludCBzZWxlY3Rpb25TdGFydCgpIGNvbnN0OworI2Vsc2UKICAgICBi
b29sIGlzQ29uZm9ybWVkVG9JbnB1dE1hc2soY29uc3QgU3RyaW5nJik7CiAgICAgYm9vbCBpc0Nv
bmZvcm1lZFRvSW5wdXRNYXNrKFVDaGFyLCB1bnNpZ25lZCwgYm9vbCBpc1VzZXJJbnB1dCA9IHRy
dWUpOworI2VuZGlmCiAKIHByaXZhdGU6CiAgICAgdm9pZCBpbml0KCk7CisjaWYgIUVOQUJMRShX
Q1NTKQogICAgIFN0cmluZyB2YWxpZGF0ZUlucHV0TWFzayhjb25zdCBTdHJpbmcmKTsKICAgICB1
bnNpZ25lZCBjdXJzb3JQb3NpdGlvblRvTWFza0luZGV4KHVuc2lnbmVkKTsKKyNlbmRpZgogCiAg
ICAgSW5wdXRFbGVtZW50RGF0YSBtX2RhdGE7CiAgICAgYm9vbCBtX2lzUGFzc3dvcmRGaWVsZDsK
KyNpZiAhRU5BQkxFKFdDU1MpCiAgICAgYm9vbCBtX2lzRW1wdHlPazsKICAgICBTdHJpbmcgbV9m
b3JtYXRNYXNrOwogICAgIHVuc2lnbmVkIG1fbnVtT2ZDaGFyc0FsbG93ZWRCeU1hc2s7CisjZW5k
aWYKIH07CiAKIH0K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>27654</attachid>
            <date>2009-02-13 03:50:42 -0800</date>
            <delta_ts>2009-05-14 00:06:21 -0700</delta_ts>
            <desc>updated patch for layout test</desc>
            <filename>addwcssinput_layouttests.patch</filename>
            <type>text/plain</type>
            <size>11213</size>
            <attacher name="yichao.yin">yichao.yin</attacher>
            
              <data encoding="base64">SW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9D
aGFuZ2VMb2cJKHJldmlzaW9uIDQwOTY5KQorKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDMgKzEsMTkgQEAKKzIwMDktMDItMTMgIFlpY2hhbyBZaW4gIDx5aWNo
YW8ueWluQHRvcmNobW9iaWxlLmNvbS5jbj4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICAqIGZhc3Qvd2NzczogQWRkZWQuCisgICAgICAgICogZmFzdC93
Y3NzL2lucHV0ZWxlbWVudC1pbnB1dGZvcm1hdC54aHRtbDogQWRkZWQuCisgICAgICAgICogZmFz
dC93Y3NzL2lucHV0ZWxlbWVudC1pbnB1dHJlcXVpcmVkLnhodG1sOiBBZGRlZC4KKyAgICAgICAg
KiBmYXN0L3djc3MvcmVzb3VyY2VzOiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L3djc3MvcmVzb3Vy
Y2VzL3djc3NpbnB1dC5jc3M6IEFkZGVkLgorICAgICAgICAqIGZhc3Qvd2Nzcy90ZXh0YXJlYS1p
bnB1dGZvcm1hdC54aHRtbDogQWRkZWQuCisgICAgICAgICogZmFzdC93Y3NzL3RleHRhcmVhLWlu
cHV0cmVxdWlyZWQueGh0bWw6IEFkZGVkLgorICAgICAgICAqIGZhc3Qvd2Nzcy93Y3NzaW5wdXQt
aW4td21sLndtbDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3RrL1NraXBwZWQ6CisgICAg
ICAgICogcGxhdGZvcm0vbWFjL1NraXBwZWQ6CisgICAgICAgICogcGxhdGZvcm0vd2luL1NraXBw
ZWQ6CisKIDIwMDktMDItMTIgIEhvcmlhIE9sYXJ1ICA8b2xhcnVAYWRvYmUuY29tPgogCiAgICAg
ICAgIFJldmlld2VkIGJ5IE9saXZlciBIdW50LgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC93Y3Nz
L2lucHV0ZWxlbWVudC1pbnB1dGZvcm1hdC54aHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0
cy9mYXN0L3djc3MvaW5wdXRlbGVtZW50LWlucHV0Zm9ybWF0LnhodG1sCShyZXZpc2lvbiAwKQor
KysgTGF5b3V0VGVzdHMvZmFzdC93Y3NzL2lucHV0ZWxlbWVudC1pbnB1dGZvcm1hdC54aHRtbAko
cmV2aXNpb24gMCkKQEAgLTAsMCArMSw0NSBAQAorPD94bWwgdmVyc2lvbj0iMS4wIj8+Cis8IURP
Q1RZUEUgaHRtbCBQVUJMSUMgIi0vL1dBUEZPUlVNLy9EVEQgWEhUTUwgTW9iaWxlIDEuMS8vRU4i
ICJodHRwOi8vd3d3LndhcGZvcnVtLm9yZy9EVEQveGh0bWwtbW9iaWxlMTEuZHRkIj4KKyAKKzxo
dG1sIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIj4KKzxoZWFkPgorPHRpdGxl
PldDU1MgaW5wdXQgZXh0ZW5zaW9uIHRlc3QgZm9yICZsdDtpbnB1dCZndDsgZWxlbWVudDwvdGl0
bGU+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPgoraW5wdXQgeyAtd2FwLWlucHV0LWZvcm1hdDog
J2FBbk4nO30KKzwvc3R5bGU+Cis8L2hlYWQ+CisKKzxib2R5PgorPGgyPiBUZXN0IGZvciBXQ1NT
IGlucHV0IGV4dGVuc2lvbjogLXdhcC1pbnB1dC1mb3JtYXQ8L2gyPgorCis8cD4KK2Nhc2UgMSAo
YnkgZGVmYXVsdDogZm9ybWF0PSdhQW5OJykKKzxpbnB1dCBuYW1lPSJjYXNlMSIgdHlwZT0idGV4
dCIvPgorPGJyLz4KK2Nhc2UgMiAoZm9ybWF0PSc1YScpCis8aW5wdXQgbmFtZT0iY2FzZTIiIHN0
eWxlPSItd2FwLWlucHV0LWZvcm1hdDogJzVhJyAiIC8+Cis8YnIvPgorY2FzZSAzIChmb3JtYXQ9
JypOJykKKzxpbnB1dCBuYW1lPSJjYXNlMyIgdHlwZT0idGV4dCIgc3R5bGU9Ii13YXAtaW5wdXQt
Zm9ybWF0OiAnKk4nICIgLz4KKzxici8+CitjYXNlIDQgKGZvcm1hdD0nYUFuTnhYbU0nKQorPGlu
cHV0IG5hbWU9ImNhc2U0IiB0eXBlPSJ0ZXh0IiBzdHlsZT0iLXdhcC1pbnB1dC1mb3JtYXQ6ICdh
QW5OeFhtTScgIiAvPgorPGJyLz4KK2Nhc2UgNSAoZm9ybWF0PSdhXC1OTip4JykKKzxpbnB1dCBu
YW1lPSJjYXNlNSIgdHlwZT0idGV4dCIgc3R5bGU9Ii13YXAtaW5wdXQtZm9ybWF0OiAnYVxcLU5O
KngnICIgLz4KKzxici8+CitjYXNlIDYgKGZvcm1hdD0nTmFcK1wtM04nKQorPGlucHV0IG5hbWU9
ImNhc2U2IiBzdHlsZT0iLXdhcC1pbnB1dC1mb3JtYXQ6ICdOYVxcK1xcLTNOJyIvPgorPGJyLz4K
K2Nhc2UgNyAoZm9ybWF0PSc1TicsIG1heExlbmd0aD0zKQorPGlucHV0IG5hbWU9ImNhc2U3IiBz
dHlsZT0nLXdhcC1pbnB1dC1mb3JtYXQ6ICJOTk4iJyBtYXhMZW5ndGg9IjMiLz4KKzxici8+Citj
YXNlIDggKGZvcm1hdD0nNWEnLCBpbnB1dCBpcyBub3QgcmVxdXJpZWQpCis8aW5wdXQgdHlwZT0i
dGV4dCIgc3R5bGU9Ii13YXAtaW5wdXQtZm9ybWF0OiAnNWEnOyAtd2FwLWlucHV0LXJlcXVpcmVk
OiBmYWxzZTsiLz4KKzxici8+CitjYXNlIDkgKGZvcm1hdD0nNk0nIHBhc3N3b3JkKQorPGlucHV0
IG5hbWU9InBhc3N3ZCIgdHlwZT0icGFzc3dvcmQiIHN0eWxlPSItd2FwLWlucHV0LWZvcm1hdDog
JzZNJyIvPgorPGJyLz4KKzwvcD4KKzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IExheW91dFRlc3Rz
L2Zhc3Qvd2Nzcy9pbnB1dGVsZW1lbnQtaW5wdXRyZXF1aXJlZC54aHRtbAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBMYXlvdXRUZXN0cy9mYXN0L3djc3MvaW5wdXRlbGVtZW50LWlucHV0cmVxdWlyZWQueGh0bWwJ
KHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L3djc3MvaW5wdXRlbGVtZW50LWlucHV0
cmVxdWlyZWQueGh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMzggQEAKKzw/eG1sIHZlcnNp
b249IjEuMCI/PgorPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XQVBGT1JVTS8vRFREIFhIVE1M
IE1vYmlsZSAxLjEvL0VOIiAiaHR0cDovL3d3dy53YXBmb3J1bS5vcmcvRFREL3hodG1sLW1vYmls
ZTExLmR0ZCI+CisgCis8aHRtbCB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCI+
Cis8aGVhZD4KKzx0aXRsZT5XQ1NTIGlucHV0IGV4dGVuc2lvbiB0ZXN0IGZvciAmbHQ7aW5wdXQm
Z3Q7IGVsZW1lbnQ8L3RpdGxlPgorPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJyZXNvdXJj
ZXMvd2Nzc2lucHV0LmNzcyIgdHlwZT0idGV4dC9jc3MiLz4KKzwvaGVhZD4KKworPGJvZHk+Cis8
aDI+IFRlc3QgZm9yIFdDU1MgaW5wdXQgZXh0ZW5zaW9uOiAtd2FwLWlucHV0LXJlcXVpcmVkIDwv
aDI+Cis8cD4KKzxiPkZvciB0aGUgZm9sbG93aW5nICZsdDtpbnB1dCZndDsgZWxlbWVudHMsIGlu
cHV0IGlzIHJlcXVpcmVkOjwvYj4KKzxwLz4KK2Zvcm1hdD1OYU08aW5wdXQgbmFtZT0ieDEiIHZh
bHVlPSIiIHN0eWxlPSItd2FwLWlucHV0LWZvcm1hdDogJ05hTSciLz4KKzxici8+CitpbnB1dFJl
cXVpcmVkPXRydWU8aW5wdXQgbmFtZT0ieDIiIHN0eWxlPSItd2FwLWlucHV0LXJlcXVpcmVkOiB0
cnVlOyIvPiAKKzxici8+CitpbnB1dFJlcXVpcmVkPXRydWU8aW5wdXQgbmFtZT0ieDMiIGNsYXNz
PSJpbnB1dHJlcXVpcmVkIi8+IAorPGJyLz4KK2Zvcm1hdD0qTTtpbnB1dFJlcXVpcmVkPXRydWU8
aW5wdXQgbmFtZT0ieDQiIHN0eWxlPSItd2FwLWlucHV0LWZvcm1hdDogJypNJzsgLXdhcC1pbnB1
dC1yZXF1aXJlZDogdHJ1ZTsiLz4KKzwvcD4KKzxoci8+Cis8cD4KKzxiPkZvciB0aGUgZm9sbG93
aW5nICZsdDtpbnB1dCZndDsgZWxlbWVudHMsIGlucHV0IGlzIG5vdCByZXF1aXJlZDo8L2I+Cis8
cC8+CitkZWZhdWx0PGlucHV0IG5hbWU9Ing1Ii8+IAorPGJyLz4KK2Zvcm1hdD0qeDxpbnB1dCBu
YW1lPSJ4NiIgc3R5bGU9Jy13YXAtaW5wdXQtZm9ybWF0OiAiKngiJy8+IAorPGJyLz4KK2lucHV0
UmVxdWlyZWQ9ZmFsc2U8aW5wdXQgbmFtZT0ieDciIHN0eWxlPSItd2FwLWlucHV0LXJlcXVpcmVk
OiBmYWxzZTsiLz4KKzxici8+Citmb3JtYXQ9bipNOyBpbnB1dFJlcXVpcmVkPWZhbHNlPGlucHV0
IG5hbWU9Ing4IiBzdHlsZT0nLXdhcC1pbnB1dC1yZXF1aXJlZDogZmFsc2U7IC13YXAtaW5wdXQt
Zm9ybWF0OiJuKk0iJy8+Cis8YnIvPgorZm9ybWF0PTROOyBpbnB1dFJlcXVpcmVkPWZhbHNlPGlu
cHV0IG5hbWU9Ing5IiBzdHlsZT0nLXdhcC1pbnB1dC1yZXF1aXJlZDogZmFsc2U7IC13YXAtaW5w
dXQtZm9ybWF0OiI0TiInLz4KKzwvcD4KKzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IExheW91dFRl
c3RzL2Zhc3Qvd2Nzcy90ZXh0YXJlYS1pbnB1dGZvcm1hdC54aHRtbAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBM
YXlvdXRUZXN0cy9mYXN0L3djc3MvdGV4dGFyZWEtaW5wdXRmb3JtYXQueGh0bWwJKHJldmlzaW9u
IDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L3djc3MvdGV4dGFyZWEtaW5wdXRmb3JtYXQueGh0bWwJ
KHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNTAgQEAKKzw/eG1sIHZlcnNpb249IjEuMCI/PgorPCFE
T0NUWVBFIGh0bWwgUFVCTElDICItLy9XQVBGT1JVTS8vRFREIFhIVE1MIE1vYmlsZSAxLjEvL0VO
IiAiaHR0cDovL3d3dy53YXBmb3J1bS5vcmcvRFREL3hodG1sLW1vYmlsZTExLmR0ZCI+CisgCis8
aHRtbCB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCI+Cis8aGVhZD4KKzx0aXRs
ZT5XQ1NTIGlucHV0IGV4dGVuc2lvbiB0ZXN0IGZvciAmbHQ7dGV4dGFyZWEmZ3Q7IGVsZW1lbnQ8
L3RpdGxlPgorPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJyZXNvdXJjZXMvd2Nzc2lucHV0
LmNzcyIgdHlwZT0idGV4dC9jc3MiLz4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+Cit0ZXh0YXJl
YSB7IC13YXAtaW5wdXQtZm9ybWF0OiAnYUFuTic7fQorPC9zdHlsZT4KKzwvaGVhZD4KKworPGJv
ZHk+Cis8aDI+IFRlc3QgZm9yIFdDU1MgaW5wdXQgZXh0ZW5zaW9uOiAtd2FwLWlucHV0LWZvcm1h
dDwvaDI+CisKKzxwPgorY2FzZSAxIChieSBkZWZhdWx0OiBmb3JtYXQ9J2FBbk4nKQorPGJyLz4K
Kzx0ZXh0YXJlYSBuYW1lPSJjYXNlMSIvPgorPGJyLz4KK2Nhc2UgMiAoZm9ybWF0PSc1YScpCis8
YnIvPgorPHRleHRhcmVhIG5hbWU9ImNhc2UyIiBzdHlsZT0iLXdhcC1pbnB1dC1mb3JtYXQ6ICc1
YScgIiAvPgorPGJyLz4KK2Nhc2UgMyAoZm9ybWF0PScqTicgcm93cz0nMScgY29scz0nOCcpIAor
PGJyLz4KKzx0ZXh0YXJlYSBuYW1lPSJjYXNlMyIgcm93cz0iMSIgY29scz0iOCIgc3R5bGU9Ii13
YXAtaW5wdXQtZm9ybWF0OiAnKk4nICIgLz4KKzxici8+CitjYXNlIDQgKGZvcm1hdD0nYUFuTnhY
bU0nKQorPGJyLz4KKzx0ZXh0YXJlYSBuYW1lPSJjYXNlNCIgc3R5bGU9Ii13YXAtaW5wdXQtZm9y
bWF0OiAnYUFuTnhYbU0nICIgLz4KKzxici8+CitjYXNlIDUgKGZvcm1hdD0nYVwtTk4qeCcpCis8
YnIvPgorPHRleHRhcmVhIG5hbWU9ImNhc2U1IiBzdHlsZT0iLXdhcC1pbnB1dC1mb3JtYXQ6ICdh
XFwtTk4qeCcgIiAvPgorPGJyLz4KK2Nhc2UgNiAoZm9ybWF0PSdOYVwrXC0zTicpCis8YnIvPgor
PHRleHRhcmVhIG5hbWU9ImNhc2U2IiBzdHlsZT0iLXdhcC1pbnB1dC1mb3JtYXQ6ICdOYVxcK1xc
LTNOJyIvPgorPGJyLz4KK2Nhc2UgNyAoZm9ybWF0PSc2QScsIGlucHV0IGlzIG5vdCByZXF1cmll
ZCkKKzxici8+Cis8dGV4dGFyZWEgc3R5bGU9Ii13YXAtaW5wdXQtZm9ybWF0OiAnNkEnOyAtd2Fw
LWlucHV0LXJlcXVpcmVkOiBmYWxzZTsiLz4KKzxici8+CitjYXNlIDggKGZvcm1hdD0nYUFuTics
IGlucHV0IGlzIE5vdCByZXF1cmllZCkKKzxici8+Cis8dGV4dGFyZWEgY2xhc3M9InRleHRhcmVh
Ii8+IAorPC9wPgorPC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC93Y3Nz
L3RleHRhcmVhLWlucHV0cmVxdWlyZWQueGh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMv
ZmFzdC93Y3NzL3RleHRhcmVhLWlucHV0cmVxdWlyZWQueGh0bWwJKHJldmlzaW9uIDApCisrKyBM
YXlvdXRUZXN0cy9mYXN0L3djc3MvdGV4dGFyZWEtaW5wdXRyZXF1aXJlZC54aHRtbAkocmV2aXNp
b24gMCkKQEAgLTAsMCArMSwzOCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIj8+Cis8IURPQ1RZUEUg
aHRtbCBQVUJMSUMgIi0vL1dBUEZPUlVNLy9EVEQgWEhUTUwgTW9iaWxlIDEuMS8vRU4iICJodHRw
Oi8vd3d3LndhcGZvcnVtLm9yZy9EVEQveGh0bWwtbW9iaWxlMTEuZHRkIj4KKyAKKzxodG1sIHht
bG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIj4KKzxoZWFkPgorPHRpdGxlPldDU1Mg
aW5wdXQgZXh0ZW5zaW9uIHRlc3QgZm9yICZsdDt0ZXh0YXJlYSZndDsgZWxlbWVudDwvdGl0bGU+
Cis8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9InJlc291cmNlcy93Y3NzaW5wdXQuY3NzIiB0
eXBlPSJ0ZXh0L2NzcyIvPgorPC9oZWFkPgorCis8Ym9keT4KKzxoMj4gVGVzdCBmb3IgV0NTUyBp
bnB1dCBleHRlbnNpb246IC13YXAtaW5wdXQtcmVxdWlyZWQgPC9oMj4KKzxwPgorPGI+Rm9yIHRo
ZSBmb2xsb3dpbmcgJmx0O3RleHRhcmVhJmd0OyBlbGVtZW50cywgaW5wdXQgaXMgcmVxdWlyZWQ6
PC9iPgorPHAvPgorZm9ybWF0PSdOYU0nPHRleHRhcmVhIG5hbWU9IngxIiBzdHlsZT0iLXdhcC1p
bnB1dC1mb3JtYXQ6ICdOYU0nIi8+Cis8YnIvPgoraW5wdXRSZXF1aXJlZD10cnVlPHRleHRhcmVh
IG5hbWU9IngyIiBzdHlsZT0iLXdhcC1pbnB1dC1yZXF1aXJlZDogdHJ1ZTsiLz4gCis8YnIvPgor
Zm9ybWF0PScqTic7aW5wdXRSZXF1aXJlZD10cnVlPHRleHRhcmVhIG5hbWU9IngzIiBzdHlsZT0i
LXdhcC1pbnB1dC1mb3JtYXQ6ICcqTic7IC13YXAtaW5wdXQtcmVxdWlyZWQ6IHRydWU7Ii8+Cis8
L3A+Cis8aHIvPgorPHA+Cis8Yj5Gb3IgdGhlIGZvbGxvd2luZyAmbHQ7dGV4dGFyZWEmZ3Q7IGVs
ZW1lbnRzLCB0ZXh0YXJlYSBpcyBub3QgcmVxdWlyZWQ6PC9iPgorPHAvPgorZGVmYXVsdDx0ZXh0
YXJlYSBuYW1lPSJ4NCIvPiAKKzxici8+Citmb3JtYXQ9Jyp4Jzx0ZXh0YXJlYSBuYW1lPSJ4NSIg
c3R5bGU9Jy13YXAtaW5wdXQtZm9ybWF0OiAiKngiJy8+IAorPGJyLz4KK2Zvcm1hdD0nM24nO2lu
cHV0UmVxdWlyZWQ9ZmFsc2U8dGV4dGFyZWEgbmFtZT0ieDYiIGNsYXNzPSJ0ZXh0YXJlYSIvPiAK
Kzxici8+CitpbnB1dFJlcXVpcmVkPWZhbHNlPHRleHRhcmVhIG5hbWU9Ing3IiBzdHlsZT0iLXdh
cC1pbnB1dC1yZXF1aXJlZDogZmFsc2U7Ii8+Cis8YnIvPgorZm9ybWF0PSduKk0nOyBpbnB1dFJl
cXVpcmVkPWZhbHNlPHRleHRhcmVhIG5hbWU9Ing4IiBzdHlsZT0nLXdhcC1pbnB1dC1yZXF1aXJl
ZDogZmFsc2U7IC13YXAtaW5wdXQtZm9ybWF0OiJuKk0iJy8+Cis8YnIvPgorZm9ybWF0PSc0Tic7
IGlucHV0UmVxdWlyZWQ9ZmFsc2U8dGV4dGFyZWEgbmFtZT0ieDkiIHN0eWxlPSctd2FwLWlucHV0
LXJlcXVpcmVkOiBmYWxzZTsgLXdhcC1pbnB1dC1mb3JtYXQ6IjROIicvPgorPC9wPgorPC9ib2R5
PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC93Y3NzL3djc3NpbnB1dC1pbi13bWwu
d21sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3Qvd2Nzcy93Y3NzaW5wdXQtaW4td21s
LndtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3Qvd2Nzcy93Y3NzaW5wdXQtaW4t
d21sLndtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwzNSBAQAorPD94bWwgdmVyc2lvbj0iMS4w
Ij8+Cis8IURPQ1RZUEUgd21sIFBVQkxJQyAiLS8vV0FQRk9SVU0vL0RURCBXTUwgMS4xLy9FTiIK
KyJodHRwOi8vd3d3LndhcGZvcnVtLm9yZy9EVEQvd21sXzEuMS54bWwiPgorIAorPHdtbD4KKzxj
YXJkIHRpdGxlPSJJbnB1dCI+Cis8aDI+IFRlc3QgZm9yIFdDU1MgaW5wdXQgZXh0ZW5zaW9uIGlu
IFdNTCBkb2N1bWVudDwvaDI+CisKKzxwPgorY2FzZSAxIChmb3JtYXQ9JzVOJykKKzxpbnB1dCBu
YW1lPSJjYXNlMiIgZm9ybWF0PSc1TicvPgorPGJyLz4KK2Nhc2UgMiAoLXdhcC1pbnB1dC1mb3Jt
YXQ6JzVhJykKKzxpbnB1dCBuYW1lPSJjYXNlMiIgc3R5bGU9Ii13YXAtaW5wdXQtZm9ybWF0OiAn
NWEnICIgLz4KKzxici8+CitjYXNlIDMgKC13YXAtaW5wdXQtZm9ybWF0OicqTicsIGVtcHR5b2s9
J2ZhbHNlJykKKzxpbnB1dCBuYW1lPSJjYXNlMyIgdHlwZT0idGV4dCIgZW1wdHlvaz0iZmFsc2Ui
IHN0eWxlPSItd2FwLWlucHV0LWZvcm1hdDogJypOJyIgLz4KKzxici8+CitjYXNlIDQgKC13YXAt
aW5wdXQtZm9ybWF0OicqTicpCis8aW5wdXQgbmFtZT0iY2FzZTQiIHR5cGU9InRleHQiIHN0eWxl
PSItd2FwLWlucHV0LWZvcm1hdDogJypOJyAiIC8+Cis8YnIvPgorY2FzZSA1ICgtd2FwLWlucHV0
LWZvcm1hdD0nYVwtTk4qeCcpCis8aW5wdXQgbmFtZT0iY2FzZTUiIHR5cGU9InRleHQiIHN0eWxl
PSItd2FwLWlucHV0LWZvcm1hdDogJ2FcXC1OTip4JyAiIC8+Cis8YnIvPgorY2FzZSA2IChmb3Jt
YXQ9J05hXCtcLTNOJykKKzxpbnB1dCBuYW1lPSJjYXNlNiIgZm9ybWF0PSJOYVwrXC0zTiIvPgor
PGJyLz4KK2Nhc2UgNyAoLXdhcC1pbnB1dC1mb3JtYXQ6JzZtJywgbWF4bGVuZ3RoPSczJykKKzxp
bnB1dCBuYW1lPSJjYXNlNyIgbWF4bGVuZ3RoPSIzIiBzdHlsZT0iLXdhcC1pbnB1dC1mb3JtYXQ6
ICc2bSc7Ii8+Cis8YnIvPgorY2FzZSA4ICgtd2FwLWlucHV0LWZvcm1hdDond3Jvbmdmb3JtYXQn
KQorPGlucHV0IG5hbWU9ImNhc2U4IiBzdHlsZT0iLXdhcC1pbnB1dC1mb3JtYXQ6ICd3cm9uZ2Zv
cm1hdCc7Ii8+Cis8L3A+Cis8L2NhcmQ+Cis8L3dtbD4KSW5kZXg6IExheW91dFRlc3RzL2Zhc3Qv
d2Nzcy9yZXNvdXJjZXMvd2Nzc2lucHV0LmNzcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9m
YXN0L3djc3MvcmVzb3VyY2VzL3djc3NpbnB1dC5jc3MJKHJldmlzaW9uIDApCisrKyBMYXlvdXRU
ZXN0cy9mYXN0L3djc3MvcmVzb3VyY2VzL3djc3NpbnB1dC5jc3MJKHJldmlzaW9uIDApCkBAIC0w
LDAgKzEsMiBAQAorLmlucHV0cmVxdWlyZWQgeyAtd2FwLWlucHV0LXJlcXVpcmVkOiB0cnVlOyB9
IAorLnRleHRhcmVhIHsgLXdhcC1pbnB1dC1mb3JtYXQ6ICczbic7IC13YXAtaW5wdXQtcmVxdWly
ZWQ6IGZhbHNlOyB9CkluZGV4OiBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9ndGsvU2tpcHBlZAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9ndGsvU2tpcHBlZAkocmV2aXNpb24gNDA4
NDYpCisrKyBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9ndGsvU2tpcHBlZAkod29ya2luZyBjb3B5KQpA
QCAtMjIxNiwzICsyMjE2LDEwIEBAIHBsdWdpbnMvbmV0c2NhcGUtZG9tLWFjY2Vzcy5odG1sCiAj
IFRlc3RzIGluIHRyYW5zaXRpb25zLyBkaXJlY3RvcnkKICMgVGVzdHMgZ2VuZXJhdGluZyBuZXcg
cmVzdWx0cwogdHJhbnNpdGlvbnMvdHJhbnNpdGlvbi1kcnQtYXBpLmh0bWwKKworIyBUZXN0cyBm
b3IgV0NTUyBpbnB1dCBleHRlbnNpb24gd2hpY2ggaXMgbm90IHZlcmlmaWVkIG9uIEdUSworZmFz
dC93Y3NzL2lucHV0ZWxlbWVudC1pbnB1dGZvcm1hdC54aHRtbAorZmFzdC93Y3NzL2lucHV0ZWxl
bWVudC1pbnB1dHJlcXVpcmVkLnhodG1sCitmYXN0L3djc3MvdGV4dGFyZWEtaW5wdXRmb3JtYXQu
eGh0bWwKK2Zhc3Qvd2Nzcy90ZXh0YXJlYS1pbnB1dHJlcXVpcmVkLnhodG1sCitmYXN0L3djc3Mv
d2Nzc2lucHV0LWluLXdtbC53bWwKSW5kZXg6IExheW91dFRlc3RzL3BsYXRmb3JtL21hYy9Ta2lw
cGVkCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3BsYXRmb3JtL21hYy9Ta2lwcGVkCShyZXZp
c2lvbiA0MDg0NikKKysrIExheW91dFRlc3RzL3BsYXRmb3JtL21hYy9Ta2lwcGVkCSh3b3JraW5n
IGNvcHkpCkBAIC00NiwzICs0NiwxMCBAQCB0YWJsZXMvbW96aWxsYV9leHBlY3RlZF9mYWlsdXJl
cy9idWdzL2J1CiAKICMgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIx
OTEzIFJlcGFpbnQgcGl4ZWwgdGVzdCBmYWlsdXJlCiBmYXN0L3JlcGFpbnQvYm9keS1iYWNrZ3Jv
dW5kLWltYWdlLmh0bWwKKworIyBUZXN0cyBmb3IgV0NTUyBpbnB1dCBleHRlbnNpb24gd2hpY2gg
aXMgbm90IHZlcmlmaWVkIG9uIE1hYyAKK2Zhc3Qvd2Nzcy9pbnB1dGVsZW1lbnQtaW5wdXRmb3Jt
YXQueGh0bWwKK2Zhc3Qvd2Nzcy9pbnB1dGVsZW1lbnQtaW5wdXRyZXF1aXJlZC54aHRtbAorZmFz
dC93Y3NzL3RleHRhcmVhLWlucHV0Zm9ybWF0LnhodG1sCitmYXN0L3djc3MvdGV4dGFyZWEtaW5w
dXRyZXF1aXJlZC54aHRtbAorZmFzdC93Y3NzL3djc3NpbnB1dC1pbi13bWwud21sCkluZGV4OiBM
YXlvdXRUZXN0cy9wbGF0Zm9ybS93aW4vU2tpcHBlZAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0
cy9wbGF0Zm9ybS93aW4vU2tpcHBlZAkocmV2aXNpb24gNDA4NDYpCisrKyBMYXlvdXRUZXN0cy9w
bGF0Zm9ybS93aW4vU2tpcHBlZAkod29ya2luZyBjb3B5KQpAQCAtNDM2LDMgKzQzNiwxMCBAQCB0
cmFuc2l0aW9ucy90cmFuc2l0aW9uLWRydC1hcGkuaHRtbAogdHJhbnNpdGlvbnMvdHJhbnNpdGlv
bi1kcnQtYXBpLWRlbGF5Lmh0bWwKIHRyYW5zaXRpb25zL3RyYW5zaXRpb24tc2hvcnRoYW5kLWRl
bGF5Lmh0bWwKIHRyYW5zaXRpb25zL3plcm8tZHVyYXRpb24tbm9uLXplcm8tZGVsYXktZW5kLmh0
bWwKKworIyBUZXN0cyBmb3IgV0NTUyBpbnB1dCBleHRlbnNpb24gd2hpY2ggaXMgbm90IHZlcmlm
aWVkIG9uIFdpbmRvd3MgCitmYXN0L3djc3MvaW5wdXRlbGVtZW50LWlucHV0Zm9ybWF0LnhodG1s
CitmYXN0L3djc3MvaW5wdXRlbGVtZW50LWlucHV0cmVxdWlyZWQueGh0bWwKK2Zhc3Qvd2Nzcy90
ZXh0YXJlYS1pbnB1dGZvcm1hdC54aHRtbAorZmFzdC93Y3NzL3RleHRhcmVhLWlucHV0cmVxdWly
ZWQueGh0bWwKK2Zhc3Qvd2Nzcy93Y3NzaW5wdXQtaW4td21sLndtbAo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>30315</attachid>
            <date>2009-05-14 00:06:21 -0700</date>
            <delta_ts>2010-06-10 20:30:42 -0700</delta_ts>
            <desc>Updated patch for adding tests</desc>
            <filename>WCSSInputTests.patch</filename>
            <type>text/plain</type>
            <size>11481</size>
            <attacher name="yichao.yin">yichao.yin</attacher>
            
              <data encoding="base64">SW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9D
aGFuZ2VMb2cJKHJldmlzaW9uIDQzNjg3KQorKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDMgKzEsMjEgQEAKKzIwMDktMDUtMTQgIFlpY2hhbyBZaW4gIDx5aWNo
YW8ueWluQHRvcmNobW9iaWxlLmNvbS5jbj4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKyAgICAgICAgCisgICAgICAgIEFkZCB0ZXN0cyBmb3IgV0NTUyBpbnB1dCBleHRl
bnNpb24gc3VwcG9ydAorCisgICAgICAgICogZmFzdC93Y3NzOiBBZGRlZC4KKyAgICAgICAgKiBm
YXN0L3djc3MvaW5wdXRlbGVtZW50LWlucHV0Zm9ybWF0LnhodG1sOiBBZGRlZC4KKyAgICAgICAg
KiBmYXN0L3djc3MvaW5wdXRlbGVtZW50LWlucHV0cmVxdWlyZWQueGh0bWw6IEFkZGVkLgorICAg
ICAgICAqIGZhc3Qvd2Nzcy9yZXNvdXJjZXM6IEFkZGVkLgorICAgICAgICAqIGZhc3Qvd2Nzcy9y
ZXNvdXJjZXMvd2Nzc2lucHV0LmNzczogQWRkZWQuCisgICAgICAgICogZmFzdC93Y3NzL3RleHRh
cmVhLWlucHV0Zm9ybWF0LnhodG1sOiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L3djc3MvdGV4dGFy
ZWEtaW5wdXRyZXF1aXJlZC54aHRtbDogQWRkZWQuCisgICAgICAgICogZmFzdC93Y3NzL3djc3Np
bnB1dC1pbi13bWwud21sOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ndGsvU2tpcHBlZDoK
KyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvU2tpcHBlZDoKKyAgICAgICAgKiBwbGF0Zm9ybS93aW4v
U2tpcHBlZDoKKwogMjAwOS0wNS0xMyAgU2ltb24gRnJhc2VyICA8c2ltb24uZnJhc2VyQGFwcGxl
LmNvbT4KIAogICAgICAgICBObyByZXZpZXcuCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L3djc3Mv
aW5wdXRlbGVtZW50LWlucHV0Zm9ybWF0LnhodG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3Rz
L2Zhc3Qvd2Nzcy9pbnB1dGVsZW1lbnQtaW5wdXRmb3JtYXQueGh0bWwJKHJldmlzaW9uIDApCisr
KyBMYXlvdXRUZXN0cy9mYXN0L3djc3MvaW5wdXRlbGVtZW50LWlucHV0Zm9ybWF0LnhodG1sCShy
ZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQ1IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiPz4KKzwhRE9D
VFlQRSBodG1sIFBVQkxJQyAiLS8vV0FQRk9SVU0vL0RURCBYSFRNTCBNb2JpbGUgMS4xLy9FTiIg
Imh0dHA6Ly93d3cud2FwZm9ydW0ub3JnL0RURC94aHRtbC1tb2JpbGUxMS5kdGQiPgorIAorPGh0
bWwgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiPgorPGhlYWQ+Cis8dGl0bGU+
V0NTUyBpbnB1dCBleHRlbnNpb24gdGVzdCBmb3IgJmx0O2lucHV0Jmd0OyBlbGVtZW50PC90aXRs
ZT4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+CitpbnB1dCB7IC13YXAtaW5wdXQtZm9ybWF0OiAn
YUFuTic7fQorPC9zdHlsZT4KKzwvaGVhZD4KKworPGJvZHk+Cis8aDI+IFRlc3QgZm9yIFdDU1Mg
aW5wdXQgZXh0ZW5zaW9uOiAtd2FwLWlucHV0LWZvcm1hdDwvaDI+CisKKzxwPgorY2FzZSAxIChi
eSBkZWZhdWx0OiBmb3JtYXQ9J2FBbk4nKQorPGlucHV0IG5hbWU9ImNhc2UxIiB0eXBlPSJ0ZXh0
Ii8+Cis8YnIvPgorY2FzZSAyIChmb3JtYXQ9JzVhJykKKzxpbnB1dCBuYW1lPSJjYXNlMiIgc3R5
bGU9Ii13YXAtaW5wdXQtZm9ybWF0OiAnNWEnICIgLz4KKzxici8+CitjYXNlIDMgKGZvcm1hdD0n
Kk4nKQorPGlucHV0IG5hbWU9ImNhc2UzIiB0eXBlPSJ0ZXh0IiBzdHlsZT0iLXdhcC1pbnB1dC1m
b3JtYXQ6ICcqTicgIiAvPgorPGJyLz4KK2Nhc2UgNCAoZm9ybWF0PSdhQW5OeFhtTScpCis8aW5w
dXQgbmFtZT0iY2FzZTQiIHR5cGU9InRleHQiIHN0eWxlPSItd2FwLWlucHV0LWZvcm1hdDogJ2FB
bk54WG1NJyAiIC8+Cis8YnIvPgorY2FzZSA1IChmb3JtYXQ9J2FcLU5OKngnKQorPGlucHV0IG5h
bWU9ImNhc2U1IiB0eXBlPSJ0ZXh0IiBzdHlsZT0iLXdhcC1pbnB1dC1mb3JtYXQ6ICdhXFwtTk4q
eCcgIiAvPgorPGJyLz4KK2Nhc2UgNiAoZm9ybWF0PSdOYVwrXC0zTicpCis8aW5wdXQgbmFtZT0i
Y2FzZTYiIHN0eWxlPSItd2FwLWlucHV0LWZvcm1hdDogJ05hXFwrXFwtM04nIi8+Cis8YnIvPgor
Y2FzZSA3IChmb3JtYXQ9JzVOJywgbWF4TGVuZ3RoPTMpCis8aW5wdXQgbmFtZT0iY2FzZTciIHN0
eWxlPSctd2FwLWlucHV0LWZvcm1hdDogIk5OTiInIG1heExlbmd0aD0iMyIvPgorPGJyLz4KK2Nh
c2UgOCAoZm9ybWF0PSc1YScsIGlucHV0IGlzIG5vdCByZXF1cmllZCkKKzxpbnB1dCB0eXBlPSJ0
ZXh0IiBzdHlsZT0iLXdhcC1pbnB1dC1mb3JtYXQ6ICc1YSc7IC13YXAtaW5wdXQtcmVxdWlyZWQ6
IGZhbHNlOyIvPgorPGJyLz4KK2Nhc2UgOSAoZm9ybWF0PSc2TScgcGFzc3dvcmQpCis8aW5wdXQg
bmFtZT0icGFzc3dkIiB0eXBlPSJwYXNzd29yZCIgc3R5bGU9Ii13YXAtaW5wdXQtZm9ybWF0OiAn
Nk0nIi8+Cis8YnIvPgorPC9wPgorPC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMv
ZmFzdC93Y3NzL2lucHV0ZWxlbWVudC1pbnB1dHJlcXVpcmVkLnhodG1sCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IExheW91dFRlc3RzL2Zhc3Qvd2Nzcy9pbnB1dGVsZW1lbnQtaW5wdXRyZXF1aXJlZC54aHRtbAko
cmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3Qvd2Nzcy9pbnB1dGVsZW1lbnQtaW5wdXRy
ZXF1aXJlZC54aHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwzOCBAQAorPD94bWwgdmVyc2lv
bj0iMS4wIj8+Cis8IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1dBUEZPUlVNLy9EVEQgWEhUTUwg
TW9iaWxlIDEuMS8vRU4iICJodHRwOi8vd3d3LndhcGZvcnVtLm9yZy9EVEQveGh0bWwtbW9iaWxl
MTEuZHRkIj4KKyAKKzxodG1sIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIj4K
KzxoZWFkPgorPHRpdGxlPldDU1MgaW5wdXQgZXh0ZW5zaW9uIHRlc3QgZm9yICZsdDtpbnB1dCZn
dDsgZWxlbWVudDwvdGl0bGU+Cis8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9InJlc291cmNl
cy93Y3NzaW5wdXQuY3NzIiB0eXBlPSJ0ZXh0L2NzcyIvPgorPC9oZWFkPgorCis8Ym9keT4KKzxo
Mj4gVGVzdCBmb3IgV0NTUyBpbnB1dCBleHRlbnNpb246IC13YXAtaW5wdXQtcmVxdWlyZWQgPC9o
Mj4KKzxwPgorPGI+Rm9yIHRoZSBmb2xsb3dpbmcgJmx0O2lucHV0Jmd0OyBlbGVtZW50cywgaW5w
dXQgaXMgcmVxdWlyZWQ6PC9iPgorPHAvPgorZm9ybWF0PU5hTTxpbnB1dCBuYW1lPSJ4MSIgdmFs
dWU9IiIgc3R5bGU9Ii13YXAtaW5wdXQtZm9ybWF0OiAnTmFNJyIvPgorPGJyLz4KK2lucHV0UmVx
dWlyZWQ9dHJ1ZTxpbnB1dCBuYW1lPSJ4MiIgc3R5bGU9Ii13YXAtaW5wdXQtcmVxdWlyZWQ6IHRy
dWU7Ii8+IAorPGJyLz4KK2lucHV0UmVxdWlyZWQ9dHJ1ZTxpbnB1dCBuYW1lPSJ4MyIgY2xhc3M9
ImlucHV0cmVxdWlyZWQiLz4gCis8YnIvPgorZm9ybWF0PSpNO2lucHV0UmVxdWlyZWQ9dHJ1ZTxp
bnB1dCBuYW1lPSJ4NCIgc3R5bGU9Ii13YXAtaW5wdXQtZm9ybWF0OiAnKk0nOyAtd2FwLWlucHV0
LXJlcXVpcmVkOiB0cnVlOyIvPgorPC9wPgorPGhyLz4KKzxwPgorPGI+Rm9yIHRoZSBmb2xsb3dp
bmcgJmx0O2lucHV0Jmd0OyBlbGVtZW50cywgaW5wdXQgaXMgbm90IHJlcXVpcmVkOjwvYj4KKzxw
Lz4KK2RlZmF1bHQ8aW5wdXQgbmFtZT0ieDUiLz4gCis8YnIvPgorZm9ybWF0PSp4PGlucHV0IG5h
bWU9Ing2IiBzdHlsZT0nLXdhcC1pbnB1dC1mb3JtYXQ6ICIqeCInLz4gCis8YnIvPgoraW5wdXRS
ZXF1aXJlZD1mYWxzZTxpbnB1dCBuYW1lPSJ4NyIgc3R5bGU9Ii13YXAtaW5wdXQtcmVxdWlyZWQ6
IGZhbHNlOyIvPgorPGJyLz4KK2Zvcm1hdD1uKk07IGlucHV0UmVxdWlyZWQ9ZmFsc2U8aW5wdXQg
bmFtZT0ieDgiIHN0eWxlPSctd2FwLWlucHV0LXJlcXVpcmVkOiBmYWxzZTsgLXdhcC1pbnB1dC1m
b3JtYXQ6Im4qTSInLz4KKzxici8+Citmb3JtYXQ9NE47IGlucHV0UmVxdWlyZWQ9ZmFsc2U8aW5w
dXQgbmFtZT0ieDkiIHN0eWxlPSctd2FwLWlucHV0LXJlcXVpcmVkOiBmYWxzZTsgLXdhcC1pbnB1
dC1mb3JtYXQ6IjROIicvPgorPC9wPgorPC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVz
dHMvZmFzdC93Y3NzL3RleHRhcmVhLWlucHV0Zm9ybWF0LnhodG1sCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExh
eW91dFRlc3RzL2Zhc3Qvd2Nzcy90ZXh0YXJlYS1pbnB1dGZvcm1hdC54aHRtbAkocmV2aXNpb24g
MCkKKysrIExheW91dFRlc3RzL2Zhc3Qvd2Nzcy90ZXh0YXJlYS1pbnB1dGZvcm1hdC54aHRtbAko
cmV2aXNpb24gMCkKQEAgLTAsMCArMSw1MCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIj8+Cis8IURP
Q1RZUEUgaHRtbCBQVUJMSUMgIi0vL1dBUEZPUlVNLy9EVEQgWEhUTUwgTW9iaWxlIDEuMS8vRU4i
ICJodHRwOi8vd3d3LndhcGZvcnVtLm9yZy9EVEQveGh0bWwtbW9iaWxlMTEuZHRkIj4KKyAKKzxo
dG1sIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIj4KKzxoZWFkPgorPHRpdGxl
PldDU1MgaW5wdXQgZXh0ZW5zaW9uIHRlc3QgZm9yICZsdDt0ZXh0YXJlYSZndDsgZWxlbWVudDwv
dGl0bGU+Cis8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9InJlc291cmNlcy93Y3NzaW5wdXQu
Y3NzIiB0eXBlPSJ0ZXh0L2NzcyIvPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj4KK3RleHRhcmVh
IHsgLXdhcC1pbnB1dC1mb3JtYXQ6ICdhQW5OJzt9Cis8L3N0eWxlPgorPC9oZWFkPgorCis8Ym9k
eT4KKzxoMj4gVGVzdCBmb3IgV0NTUyBpbnB1dCBleHRlbnNpb246IC13YXAtaW5wdXQtZm9ybWF0
PC9oMj4KKworPHA+CitjYXNlIDEgKGJ5IGRlZmF1bHQ6IGZvcm1hdD0nYUFuTicpCis8YnIvPgor
PHRleHRhcmVhIG5hbWU9ImNhc2UxIj48L3RleHRhcmVhPgorPGJyLz4KK2Nhc2UgMiAoZm9ybWF0
PSc1YScpCis8YnIvPgorPHRleHRhcmVhIG5hbWU9ImNhc2UyIiBzdHlsZT0iLXdhcC1pbnB1dC1m
b3JtYXQ6ICc1YScgIj48L3RleHRhcmVhPgorPGJyLz4KK2Nhc2UgMyAoZm9ybWF0PScqTicgcm93
cz0nMScgY29scz0nOCcpIAorPGJyLz4KKzx0ZXh0YXJlYSBuYW1lPSJjYXNlMyIgcm93cz0iMSIg
Y29scz0iOCIgc3R5bGU9Ii13YXAtaW5wdXQtZm9ybWF0OiAnKk4nICI+PC90ZXh0YXJlYT4KKzxi
ci8+CitjYXNlIDQgKGZvcm1hdD0nYUFuTnhYbU0nKQorPGJyLz4KKzx0ZXh0YXJlYSBuYW1lPSJj
YXNlNCIgc3R5bGU9Ii13YXAtaW5wdXQtZm9ybWF0OiAnYUFuTnhYbU0nICI+PC90ZXh0YXJlYT4K
Kzxici8+CitjYXNlIDUgKGZvcm1hdD0nYVwtTk4qeCcpCis8YnIvPgorPHRleHRhcmVhIG5hbWU9
ImNhc2U1IiBzdHlsZT0iLXdhcC1pbnB1dC1mb3JtYXQ6ICdhXFwtTk4qeCcgIj48L3RleHRhcmVh
PgorPGJyLz4KK2Nhc2UgNiAoZm9ybWF0PSdOYVwrXC0zTicpCis8YnIvPgorPHRleHRhcmVhIG5h
bWU9ImNhc2U2IiBzdHlsZT0iLXdhcC1pbnB1dC1mb3JtYXQ6ICdOYVxcK1xcLTNOJyI+PC90ZXh0
YXJlYT4KKzxici8+CitjYXNlIDcgKGZvcm1hdD0nNkEnLCBpbnB1dCBpcyBub3QgcmVxdXJpZWQp
Cis8YnIvPgorPHRleHRhcmVhIHN0eWxlPSItd2FwLWlucHV0LWZvcm1hdDogJzZBJzsgLXdhcC1p
bnB1dC1yZXF1aXJlZDogZmFsc2U7Ij48L3RleHRhcmVhPgorPGJyLz4KK2Nhc2UgOCAoZm9ybWF0
PSdhQW5OJywgaW5wdXQgaXMgTm90IHJlcXVyaWVkKQorPGJyLz4KKzx0ZXh0YXJlYSBjbGFzcz0i
dGV4dGFyZWEiPjwvdGV4dGFyZWE+IAorPC9wPgorPC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5
b3V0VGVzdHMvZmFzdC93Y3NzL3RleHRhcmVhLWlucHV0cmVxdWlyZWQueGh0bWwKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gTGF5b3V0VGVzdHMvZmFzdC93Y3NzL3RleHRhcmVhLWlucHV0cmVxdWlyZWQueGh0bWwJ
KHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L3djc3MvdGV4dGFyZWEtaW5wdXRyZXF1
aXJlZC54aHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwzOCBAQAorPD94bWwgdmVyc2lvbj0i
MS4wIj8+Cis8IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1dBUEZPUlVNLy9EVEQgWEhUTUwgTW9i
aWxlIDEuMS8vRU4iICJodHRwOi8vd3d3LndhcGZvcnVtLm9yZy9EVEQveGh0bWwtbW9iaWxlMTEu
ZHRkIj4KKyAKKzxodG1sIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIj4KKzxo
ZWFkPgorPHRpdGxlPldDU1MgaW5wdXQgZXh0ZW5zaW9uIHRlc3QgZm9yICZsdDt0ZXh0YXJlYSZn
dDsgZWxlbWVudDwvdGl0bGU+Cis8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9InJlc291cmNl
cy93Y3NzaW5wdXQuY3NzIiB0eXBlPSJ0ZXh0L2NzcyIvPgorPC9oZWFkPgorCis8Ym9keT4KKzxo
Mj4gVGVzdCBmb3IgV0NTUyBpbnB1dCBleHRlbnNpb246IC13YXAtaW5wdXQtcmVxdWlyZWQgPC9o
Mj4KKzxwPgorPGI+Rm9yIHRoZSBmb2xsb3dpbmcgJmx0O3RleHRhcmVhJmd0OyBlbGVtZW50cywg
aW5wdXQgaXMgcmVxdWlyZWQ6PC9iPgorPHAvPgorZm9ybWF0PSdOYU0nPHRleHRhcmVhIG5hbWU9
IngxIiBzdHlsZT0iLXdhcC1pbnB1dC1mb3JtYXQ6ICdOYU0nIj48L3RleHRhcmVhPgorPGJyLz4K
K2lucHV0UmVxdWlyZWQ9dHJ1ZTx0ZXh0YXJlYSBuYW1lPSJ4MiIgc3R5bGU9Ii13YXAtaW5wdXQt
cmVxdWlyZWQ6IHRydWU7Ij48L3RleHRhcmVhPiAKKzxici8+Citmb3JtYXQ9JypOJztpbnB1dFJl
cXVpcmVkPXRydWU8dGV4dGFyZWEgbmFtZT0ieDMiIHN0eWxlPSItd2FwLWlucHV0LWZvcm1hdDog
JypOJzsgLXdhcC1pbnB1dC1yZXF1aXJlZDogdHJ1ZTsiPjwvdGV4dGFyZWE+Cis8L3A+Cis8aHIv
PgorPHA+Cis8Yj5Gb3IgdGhlIGZvbGxvd2luZyAmbHQ7dGV4dGFyZWEmZ3Q7IGVsZW1lbnRzLCB0
ZXh0YXJlYSBpcyBub3QgcmVxdWlyZWQ6PC9iPgorPHAvPgorZGVmYXVsdDx0ZXh0YXJlYSBuYW1l
PSJ4NCI+PC90ZXh0YXJlYT4gCis8YnIvPgorZm9ybWF0PScqeCc8dGV4dGFyZWEgbmFtZT0ieDUi
IHN0eWxlPSctd2FwLWlucHV0LWZvcm1hdDogIip4Iic+PC90ZXh0YXJlYT4gCis8YnIvPgorZm9y
bWF0PSczbic7aW5wdXRSZXF1aXJlZD1mYWxzZTx0ZXh0YXJlYSBuYW1lPSJ4NiIgY2xhc3M9InRl
eHRhcmVhIj48L3RleHRhcmVhPiAKKzxici8+CitpbnB1dFJlcXVpcmVkPWZhbHNlPHRleHRhcmVh
IG5hbWU9Ing3IiBzdHlsZT0iLXdhcC1pbnB1dC1yZXF1aXJlZDogZmFsc2U7Ij48L3RleHRhcmVh
PgorPGJyLz4KK2Zvcm1hdD0nbipNJzsgaW5wdXRSZXF1aXJlZD1mYWxzZTx0ZXh0YXJlYSBuYW1l
PSJ4OCIgc3R5bGU9Jy13YXAtaW5wdXQtcmVxdWlyZWQ6IGZhbHNlOyAtd2FwLWlucHV0LWZvcm1h
dDoibipNIic+PC90ZXh0YXJlYT4KKzxici8+Citmb3JtYXQ9JzROJzsgaW5wdXRSZXF1aXJlZD1m
YWxzZTx0ZXh0YXJlYSBuYW1lPSJ4OSIgc3R5bGU9Jy13YXAtaW5wdXQtcmVxdWlyZWQ6IGZhbHNl
OyAtd2FwLWlucHV0LWZvcm1hdDoiNE4iJz48L3RleHRhcmVhPgorPC9wPgorPC9ib2R5PgorPC9o
dG1sPgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC93Y3NzL3djc3NpbnB1dC1pbi13bWwud21sCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3Qvd2Nzcy93Y3NzaW5wdXQtaW4td21sLndtbAko
cmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3Qvd2Nzcy93Y3NzaW5wdXQtaW4td21sLndt
bAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwzNSBAQAorPD94bWwgdmVyc2lvbj0iMS4wIj8+Cis8
IURPQ1RZUEUgd21sIFBVQkxJQyAiLS8vV0FQRk9SVU0vL0RURCBXTUwgMS4xLy9FTiIKKyJodHRw
Oi8vd3d3LndhcGZvcnVtLm9yZy9EVEQvd21sXzEuMS54bWwiPgorIAorPHdtbD4KKzxjYXJkIHRp
dGxlPSJJbnB1dCI+Cis8aDI+IFRlc3QgZm9yIFdDU1MgaW5wdXQgZXh0ZW5zaW9uIGluIFdNTCBk
b2N1bWVudDwvaDI+CisKKzxwPgorY2FzZSAxIChmb3JtYXQ9JzVOJykKKzxpbnB1dCBuYW1lPSJj
YXNlMiIgZm9ybWF0PSc1TicvPgorPGJyLz4KK2Nhc2UgMiAoLXdhcC1pbnB1dC1mb3JtYXQ6JzVh
JykKKzxpbnB1dCBuYW1lPSJjYXNlMiIgc3R5bGU9Ii13YXAtaW5wdXQtZm9ybWF0OiAnNWEnICIg
Lz4KKzxici8+CitjYXNlIDMgKC13YXAtaW5wdXQtZm9ybWF0OicqTicsIGVtcHR5b2s9J2ZhbHNl
JykKKzxpbnB1dCBuYW1lPSJjYXNlMyIgdHlwZT0idGV4dCIgZW1wdHlvaz0iZmFsc2UiIHN0eWxl
PSItd2FwLWlucHV0LWZvcm1hdDogJypOJyIgLz4KKzxici8+CitjYXNlIDQgKC13YXAtaW5wdXQt
Zm9ybWF0OicqTicpCis8aW5wdXQgbmFtZT0iY2FzZTQiIHR5cGU9InRleHQiIHN0eWxlPSItd2Fw
LWlucHV0LWZvcm1hdDogJypOJyAiIC8+Cis8YnIvPgorY2FzZSA1ICgtd2FwLWlucHV0LWZvcm1h
dD0nYVwtTk4qeCcpCis8aW5wdXQgbmFtZT0iY2FzZTUiIHR5cGU9InRleHQiIHN0eWxlPSItd2Fw
LWlucHV0LWZvcm1hdDogJ2FcXC1OTip4JyAiIC8+Cis8YnIvPgorY2FzZSA2IChmb3JtYXQ9J05h
XCtcLTNOJykKKzxpbnB1dCBuYW1lPSJjYXNlNiIgZm9ybWF0PSJOYVwrXC0zTiIvPgorPGJyLz4K
K2Nhc2UgNyAoLXdhcC1pbnB1dC1mb3JtYXQ6JzZtJywgbWF4bGVuZ3RoPSczJykKKzxpbnB1dCBu
YW1lPSJjYXNlNyIgbWF4bGVuZ3RoPSIzIiBzdHlsZT0iLXdhcC1pbnB1dC1mb3JtYXQ6ICc2bSc7
Ii8+Cis8YnIvPgorY2FzZSA4ICgtd2FwLWlucHV0LWZvcm1hdDond3Jvbmdmb3JtYXQnKQorPGlu
cHV0IG5hbWU9ImNhc2U4IiBzdHlsZT0iLXdhcC1pbnB1dC1mb3JtYXQ6ICd3cm9uZ2Zvcm1hdCc7
Ii8+Cis8L3A+Cis8L2NhcmQ+Cis8L3dtbD4KSW5kZXg6IExheW91dFRlc3RzL2Zhc3Qvd2Nzcy9y
ZXNvdXJjZXMvd2Nzc2lucHV0LmNzcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L3dj
c3MvcmVzb3VyY2VzL3djc3NpbnB1dC5jc3MJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9m
YXN0L3djc3MvcmVzb3VyY2VzL3djc3NpbnB1dC5jc3MJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEs
MiBAQAorLmlucHV0cmVxdWlyZWQgeyAtd2FwLWlucHV0LXJlcXVpcmVkOiB0cnVlOyB9IAorLnRl
eHRhcmVhIHsgLXdhcC1pbnB1dC1mb3JtYXQ6ICczbic7IC13YXAtaW5wdXQtcmVxdWlyZWQ6IGZh
bHNlOyB9CkluZGV4OiBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9ndGsvU2tpcHBlZAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9ndGsvU2tpcHBlZAkocmV2aXNpb24gNDM2ODEpCisr
KyBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9ndGsvU2tpcHBlZAkod29ya2luZyBjb3B5KQpAQCAtNTk0
MiwzICs1OTQyLDEwIEBAIHdlYmFyY2hpdmUvdGVzdC1zY3JpcHQtc3JjLmh0bWwKIHdlYmFyY2hp
dmUvdGVzdC10YWJsZS1iYWNrZ3JvdW5kLmh0bWwKIHdlYmFyY2hpdmUvdGVzdC10ZC1iYWNrZ3Jv
dW5kLmh0bWwKIHdlYmFyY2hpdmUvdGVzdC14bWwtc3R5bGVzaGVldC54bWwKKworIyBUZXN0cyBm
b3IgV0NTUyBpbnB1dCBleHRlbnNpb24gd2hpY2ggaXMgbm90IHZlcmlmaWVkCitmYXN0L3djc3Mv
aW5wdXRlbGVtZW50LWlucHV0Zm9ybWF0LnhodG1sCitmYXN0L3djc3MvaW5wdXRlbGVtZW50LWlu
cHV0cmVxdWlyZWQueGh0bWwKK2Zhc3Qvd2Nzcy90ZXh0YXJlYS1pbnB1dGZvcm1hdC54aHRtbAor
ZmFzdC93Y3NzL3RleHRhcmVhLWlucHV0cmVxdWlyZWQueGh0bWwKK2Zhc3Qvd2Nzcy93Y3NzaW5w
dXQtaW4td21sLndtbApJbmRleDogTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL1NraXBwZWQKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL1NraXBwZWQJKHJldmlzaW9uIDQz
NjgxKQorKysgTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL1NraXBwZWQJKHdvcmtpbmcgY29weSkK
QEAgLTY2LDMgKzY2LDEwIEBAIHN2Zy9oaXhpZS9wZXJmLzAwMi54bWwKIAogIyA8cmRhcjovL3By
b2JsZW0vNjcxMDYyNT4gVGVzdCBtZWRpYS92aWRlby1lcnJvci1hYm9ydC5odG1sIGRvZXNuJ3Qg
d29yawogbWVkaWEvdmlkZW8tZXJyb3ItYWJvcnQuaHRtbAorCisjIFRlc3RzIGZvciBXQ1NTIGlu
cHV0IGV4dGVuc2lvbiB3aGljaCBpcyBub3QgdmVyaWZpZWQKK2Zhc3Qvd2Nzcy9pbnB1dGVsZW1l
bnQtaW5wdXRmb3JtYXQueGh0bWwKK2Zhc3Qvd2Nzcy9pbnB1dGVsZW1lbnQtaW5wdXRyZXF1aXJl
ZC54aHRtbAorZmFzdC93Y3NzL3RleHRhcmVhLWlucHV0Zm9ybWF0LnhodG1sCitmYXN0L3djc3Mv
dGV4dGFyZWEtaW5wdXRyZXF1aXJlZC54aHRtbAorZmFzdC93Y3NzL3djc3NpbnB1dC1pbi13bWwu
d21sCkluZGV4OiBMYXlvdXRUZXN0cy9wbGF0Zm9ybS93aW4vU2tpcHBlZAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBMYXlvdXRUZXN0cy9wbGF0Zm9ybS93aW4vU2tpcHBlZAkocmV2aXNpb24gNDM2ODEpCisrKyBM
YXlvdXRUZXN0cy9wbGF0Zm9ybS93aW4vU2tpcHBlZAkod29ya2luZyBjb3B5KQpAQCAtNTk1LDMg
KzU5NSwxMCBAQCBtZWRpYS92aWRlby1kb2N1bWVudC10eXBlcy5odG1sCiAjIEJ1ZyAyNTU4Mzog
TmV3IFNWRyByZWdyZXNzaW9uIHRlc3RzIGFkZGVkIGluIHI0MzI2OSBmYWlsIG9uIFdpbmRvd3Mg
PGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yNTU4Mz4KIHN2Zy90cmFu
c2Zvcm1zL3RleHQtd2l0aC1wYXR0ZXJuLWluc2lkZS10cmFuc2Zvcm1lZC1odG1sLnhodG1sCiBz
dmcvdHJhbnNmb3Jtcy90ZXh0LXdpdGgtcGF0dGVybi13aXRoLXN2Zy10cmFuc2Zvcm0uc3ZnCisK
KyMgVGVzdHMgZm9yIFdDU1MgaW5wdXQgZXh0ZW5zaW9uIHdoaWNoIGlzIG5vdCB2ZXJpZmllZAor
ZmFzdC93Y3NzL2lucHV0ZWxlbWVudC1pbnB1dGZvcm1hdC54aHRtbAorZmFzdC93Y3NzL2lucHV0
ZWxlbWVudC1pbnB1dHJlcXVpcmVkLnhodG1sCitmYXN0L3djc3MvdGV4dGFyZWEtaW5wdXRmb3Jt
YXQueGh0bWwKK2Zhc3Qvd2Nzcy90ZXh0YXJlYS1pbnB1dHJlcXVpcmVkLnhodG1sCitmYXN0L3dj
c3Mvd2Nzc2lucHV0LWluLXdtbC53bWwK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>30316</attachid>
            <date>2009-05-14 00:08:22 -0700</date>
            <delta_ts>2009-05-18 01:58:38 -0700</delta_ts>
            <desc>Updated patch about code changes</desc>
            <filename>WCSSInputChange.patch</filename>
            <type>text/plain</type>
            <size>37884</size>
            <attacher name="yichao.yin">yichao.yin</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0MzY4NykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsODQgQEAKKzIwMDktMDUtMTQgIFlpY2hhbyBZaW4gIDx5aWNoYW8ueWluQHRvcmNo
bW9iaWxlLmNvbS5jbj4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBBZGQgV0NTUyBpbnB1dCBleHRlbnNpb24gc3VwcG9ydCB0byBXZWJraXQKKyAgICAg
ICAgV0NTUyBpbnB1dCBleHRlbnNpb24gaXMgb25lIG9mIHRoZSBXQVAgc3BlY2lmaWMgZXh0ZW5z
dGlvbnMgdG8gQ1NTMi4KKyAgICAgICAgSXQgY29uc2lzdHMgb2YgdHdvIFdDU1MgcHJvcGVydGll
czogLXdhcC1pbnB1dC1mb3JtYXQgYW5kIC13YXAtaW5wdXQtcmVxdWlyZWQKKyAgICAgICAgcmVm
ZXIgdG8gV0FQLTIzOS1XQ1NTLTIwMDExMDI2LWEucGRmCisKKyAgICAgICAgVGhpcyBjaGFuZ2Ug
ZGVwZW5kcyBvbiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjM0NTIK
KworICAgICAgICBUZXN0czogZmFzdC93Y3NzL2lucHV0ZWxlbWVudC1pbnB1dGZvcm1hdC54aHRt
bAorICAgICAgICAgICAgICAgZmFzdC93Y3NzL2lucHV0ZWxlbWVudC1pbnB1dHJlcXVpcmVkLnho
dG1sCisgICAgICAgICAgICAgICBmYXN0L3djc3MvdGV4dGFyZWEtaW5wdXRmb3JtYXQueGh0bWwK
KyAgICAgICAgICAgICAgIGZhc3Qvd2Nzcy90ZXh0YXJlYS1pbnB1dHJlcXVpcmVkLnhodG1sCisK
KyAgICAgICAgKiBXZWJDb3JlLnBybzoKKyAgICAgICAgKiBjc3MvQ1NTUGFyc2VyLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkNTU1BhcnNlcjo6cGFyc2VWYWx1ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpDU1NQYXJzZXI6OnBhcnNlV0NTU0lucHV0UHJvcGVydHkpOgorICAgICAgICAqIGNzcy9DU1NQ
YXJzZXIuaDoKKyAgICAgICAgKiBjc3MvQ1NTUHJvcGVydHlOYW1lcy5pbjoKKyAgICAgICAgKiBk
b20vSW5wdXRFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmZvcm1hdENvZGVzKToKKyAg
ICAgICAgKFdlYkNvcmU6OmN1cnNvclBvc2l0aW9uVG9NYXNrSW5kZXgpOgorICAgICAgICAoV2Vi
Q29yZTo6SW5wdXRFbGVtZW50Ojppc0NvbmZvcm1lZFRvSW5wdXRNYXNrKToKKyAgICAgICAgKFdl
YkNvcmU6OklucHV0RWxlbWVudDo6dmFsaWRhdGVJbnB1dE1hc2spOgorICAgICAgICAoV2ViQ29y
ZTo6SW5wdXRFbGVtZW50Ojp1cGRhdGVJbnB1dFByb3BlcnRpZXNGcm9tV0NTUyk6CisgICAgICAg
IChXZWJDb3JlOjpJbnB1dEVsZW1lbnQ6OmRpc3BhdGNoRm9jdXNFdmVudCk6CisgICAgICAgIChX
ZWJDb3JlOjpJbnB1dEVsZW1lbnQ6OmRpc3BhdGNoQmx1ckV2ZW50KToKKyAgICAgICAgKFdlYkNv
cmU6OklucHV0RWxlbWVudERhdGE6OklucHV0RWxlbWVudERhdGEpOgorICAgICAgICAoV2ViQ29y
ZTo6dG9JbnB1dEVsZW1lbnQpOgorICAgICAgICAqIGRvbS9JbnB1dEVsZW1lbnQuaDoKKyAgICAg
ICAgKFdlYkNvcmU6OklucHV0RWxlbWVudERhdGE6Oik6CisgICAgICAgIChXZWJDb3JlOjpJbnB1
dEVsZW1lbnREYXRhOjppbnB1dFJlcXVpcmVtZW50U3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6
SW5wdXRFbGVtZW50RGF0YTo6c2V0SW5wdXRSZXF1aXJlbWVudFN0YXRlKToKKyAgICAgICAgKFdl
YkNvcmU6OklucHV0RWxlbWVudERhdGE6OmlucHV0Rm9ybWF0TWFzayk6CisgICAgICAgIChXZWJD
b3JlOjpJbnB1dEVsZW1lbnREYXRhOjpzZXRJbnB1dEZvcm1hdE1hc2spOgorICAgICAgICAoV2Vi
Q29yZTo6SW5wdXRFbGVtZW50RGF0YTo6YWxsb3dlZElucHV0Q2hhcnNNYXhMZW5ndGgpOgorICAg
ICAgICAoV2ViQ29yZTo6SW5wdXRFbGVtZW50RGF0YTo6c2V0QWxsb3dlZElucHV0Q2hhcnNNYXhM
ZW5ndGgpOgorICAgICAgICAqIGh0bWwvSFRNTElucHV0RWxlbWVudC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpIVE1MSW5wdXRFbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVyKToKKyAgICAgICAg
KiBodG1sL0hUTUxUZXh0QXJlYUVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFRl
eHRBcmVhRWxlbWVudDo6SFRNTFRleHRBcmVhRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpI
VE1MVGV4dEFyZWFFbGVtZW50OjpzZWxlY3Rpb25TdGFydCk6CisgICAgICAgIChXZWJDb3JlOjpI
VE1MVGV4dEFyZWFFbGVtZW50OjpzZWxlY3Rpb25FbmQpOgorICAgICAgICAoV2ViQ29yZTo6SFRN
TFRleHRBcmVhRWxlbWVudDo6c2V0U2VsZWN0aW9uUmFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6
SFRNTFRleHRBcmVhRWxlbWVudDo6dXBkYXRlRm9jdXNBcHBlYXJhbmNlKToKKyAgICAgICAgKFdl
YkNvcmU6OkhUTUxUZXh0QXJlYUVsZW1lbnQ6OnNldFZhbHVlRnJvbVJlbmRlcmVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OkhUTUxUZXh0QXJlYUVsZW1lbnQ6OmNvbnN0cmFpblZhbHVlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkhUTUxUZXh0QXJlYUVsZW1lbnQ6OmNhY2hlU2VsZWN0aW9uKToKKyAgICAg
ICAgKFdlYkNvcmU6OkhUTUxUZXh0QXJlYUVsZW1lbnQ6OmRpc3BhdGNoRm9jdXNFdmVudCk6Cisg
ICAgICAgIChXZWJDb3JlOjpIVE1MVGV4dEFyZWFFbGVtZW50OjpkaXNwYXRjaEJsdXJFdmVudCk6
CisgICAgICAgIChXZWJDb3JlOjpIVE1MVGV4dEFyZWFFbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5k
bGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxUZXh0QXJlYUVsZW1lbnQ6OnVwZGF0ZVZhbHVl
KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxUZXh0QXJlYUVsZW1lbnQ6OnNldFZhbHVlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkhUTUxUZXh0QXJlYUVsZW1lbnQ6OnNlbGVjdGlvbik6CisgICAgICAg
ICogaHRtbC9IVE1MVGV4dEFyZWFFbGVtZW50Lmg6CisgICAgICAgIChXZWJDb3JlOjpIVE1MVGV4
dEFyZWFFbGVtZW50OjpIVE1MVGV4dEFyZWFFbGVtZW50Ojppc0NoZWNrZWQpOgorICAgICAgICAo
V2ViQ29yZTo6SFRNTFRleHRBcmVhRWxlbWVudDo6SFRNTFRleHRBcmVhRWxlbWVudDo6aXNBdXRv
ZmlsbGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxUZXh0QXJlYUVsZW1lbnQ6OkhUTUxUZXh0
QXJlYUVsZW1lbnQ6OmlzSW5kZXRlcm1pbmF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MVGV4
dEFyZWFFbGVtZW50OjpIVE1MVGV4dEFyZWFFbGVtZW50Ojppc1JhZGlvQnV0dG9uKToKKyAgICAg
ICAgKFdlYkNvcmU6OkhUTUxUZXh0QXJlYUVsZW1lbnQ6OkhUTUxUZXh0QXJlYUVsZW1lbnQ6Omlz
VGV4dEZpZWxkKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxUZXh0QXJlYUVsZW1lbnQ6OkhUTUxU
ZXh0QXJlYUVsZW1lbnQ6OmlzU2VhcmNoRmllbGQpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFRl
eHRBcmVhRWxlbWVudDo6SFRNTFRleHRBcmVhRWxlbWVudDo6aXNJbnB1dFR5cGVIaWRkZW4pOgor
ICAgICAgICAoV2ViQ29yZTo6SFRNTFRleHRBcmVhRWxlbWVudDo6SFRNTFRleHRBcmVhRWxlbWVu
dDo6aXNQYXNzd29yZEZpZWxkKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxUZXh0QXJlYUVsZW1l
bnQ6OkhUTUxUZXh0QXJlYUVsZW1lbnQ6OnNlYXJjaEV2ZW50c1Nob3VsZEJlRGlzcGF0Y2hlZCk6
CisgICAgICAgIChXZWJDb3JlOjpIVE1MVGV4dEFyZWFFbGVtZW50OjpIVE1MVGV4dEFyZWFFbGVt
ZW50OjpwbGFjZWhvbGRlclNob3VsZEJlVmlzaWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1M
VGV4dEFyZWFFbGVtZW50OjpIVE1MVGV4dEFyZWFFbGVtZW50OjpzaXplKToKKyAgICAgICAgKFdl
YkNvcmU6OkhUTUxUZXh0QXJlYUVsZW1lbnQ6OkhUTUxUZXh0QXJlYUVsZW1lbnQ6OnBsYWNlaG9s
ZGVyVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFRleHRBcmVhRWxlbWVudDo6SFRNTFRl
eHRBcmVhRWxlbWVudDo6cGxhY2Vob2xkZXIpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFRleHRB
cmVhRWxlbWVudDo6SFRNTFRleHRBcmVhRWxlbWVudDo6c2V0UGxhY2Vob2xkZXIpOgorICAgICAg
ICAqIHdtbC9XTUxJbnB1dEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V01MSW5wdXRF
bGVtZW50OjpXTUxJbnB1dEVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6V01MSW5wdXRFbGVt
ZW50OjpkaXNwYXRjaEJsdXJFdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpXTUxJbnB1dEVsZW1l
bnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6OldNTElucHV0RWxl
bWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxlcik6CisgICAgICAgIChXZWJDb3JlOjpXTUxJbnB1dEVs
ZW1lbnQ6OmluaXQpOgorICAgICAgICAqIHdtbC9XTUxJbnB1dEVsZW1lbnQuaDoKKyAgICAgICAg
KFdlYkNvcmU6OldNTElucHV0RWxlbWVudDo6c2V0UGxhY2Vob2xkZXIpOgorCiAyMDA5LTA1LTEz
ICBBbmRlcnMgQ2FybHNzb24gIDxhbmRlcnNjYUBhcHBsZS5jb20+CiAKICAgICAgICAgRml4IGJ1
aWxkLgpJbmRleDogV2ViQ29yZS9XZWJDb3JlLnBybwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL1dl
YkNvcmUucHJvCShyZXZpc2lvbiA0MzY4MSkKKysrIFdlYkNvcmUvV2ViQ29yZS5wcm8JKHdvcmtp
bmcgY29weSkKQEAgLTEwNSw2ICsxMDUsNyBAQCBDT05GSUcoUVRESVJfYnVpbGQpIHsKICFjb250
YWlucyhERUZJTkVTLCBFTkFCTEVfREFTSEJPQVJEX1NVUFBPUlQ9Lik6IERFRklORVMgKz0gRU5B
QkxFX0RBU0hCT0FSRF9TVVBQT1JUPTAKICFjb250YWlucyhERUZJTkVTLCBFTkFCTEVfWFBBVEg9
Lik6IERFRklORVMgKz0gRU5BQkxFX1hQQVRIPTEKICMhY29udGFpbnMoREVGSU5FUywgRU5BQkxF
X1hCTD0uKTogREVGSU5FUyArPSBFTkFCTEVfWEJMPTEKKyFjb250YWlucyhERUZJTkVTLCBFTkFC
TEVfV0NTUz0uKTogREVGSU5FUyArPSBFTkFCTEVfV0NTUz0wCiAhY29udGFpbnMoREVGSU5FUywg
RU5BQkxFX1dNTD0uKTogREVGSU5FUyArPSBFTkFCTEVfV01MPTAKICFjb250YWlucyhERUZJTkVT
LCBFTkFCTEVfV09SS0VSUz0uKTogREVGSU5FUyArPSBFTkFCTEVfV09SS0VSUz0xCiAKQEAgLTE0
NzYsNiArMTQ3NywxNCBAQCBjb250YWlucyhERUZJTkVTLCBFTkFCTEVfWEJMPTEpIHsKICAgICBG
RUFUVVJFX0RFRklORVNfSkFWQVNDUklQVCArPSBFTkFCTEVfWEJMPTEKIH0KIAorY29udGFpbnMo
REVGSU5FUywgRU5BQkxFX1dDU1M9MSkgeworICAgIEZFQVRVUkVfREVGSU5FU19KQVZBU0NSSVBU
ICs9IEVOQUJMRV9XQ1NTPTEKKyAgICBjb250YWlucyhERUZJTkVTLCBFTkFCTEVfWEhUTUxNUD0w
KTogeworICAgICAgICBERUZJTkVTIC09IEVOQUJMRV9YSFRNTE1QPTAKKyAgICAgICAgREVGSU5F
UyArPSBFTkFCTEVfWEhUTUxNUD0xCisgICAgfQorfQorCiBjb250YWlucyhERUZJTkVTLCBFTkFC
TEVfV01MPTEpIHsKICAgICBTT1VSQ0VTICs9IFwKICAgICAgICAgd21sL1dNTEFFbGVtZW50LmNw
cCBcCkluZGV4OiBXZWJDb3JlL2Nzcy9DU1NQYXJzZXIuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvY3NzL0NTU1BhcnNlci5jcHAJKHJldmlzaW9uIDQzNjgxKQorKysgV2ViQ29yZS9jc3MvQ1NT
UGFyc2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTYxNCw2ICsxNjE0LDEyIEBAIGJvb2wgQ1NT
UGFyc2VyOjpwYXJzZVZhbHVlKGludCBwcm9wSWQsIGIKICAgICAgICAgY29uc3QgaW50IHByb3Bl
cnRpZXNbMl0gPSB7IENTU1Byb3BlcnR5V2Via2l0VGV4dFN0cm9rZVdpZHRoLCBDU1NQcm9wZXJ0
eVdlYmtpdFRleHRTdHJva2VDb2xvciB9OwogICAgICAgICByZXR1cm4gcGFyc2VTaG9ydGhhbmQo
cHJvcElkLCBwcm9wZXJ0aWVzLCAyLCBpbXBvcnRhbnQpOwogICAgIH0KKyNpZiBFTkFCTEUoV0NT
UykKKyAgICBjYXNlIENTU1Byb3BlcnR5V2FwSW5wdXRGb3JtYXQ6CisgICAgY2FzZSBDU1NQcm9w
ZXJ0eVdhcElucHV0UmVxdWlyZWQ6CisgICAgICAgIHBhcnNlZFZhbHVlID0gcGFyc2VXQ1NTSW5w
dXRQcm9wZXJ0eSgpOworICAgICAgICBicmVhazsKKyNlbmRpZiAKICAgICBjYXNlIENTU1Byb3Bl
cnR5V2Via2l0QW5pbWF0aW9uOgogICAgICAgICByZXR1cm4gcGFyc2VBbmltYXRpb25TaG9ydGhh
bmQoaW1wb3J0YW50KTsKICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0VHJhbnNpdGlvbjoKQEAg
LTE2NTMsNiArMTY1OSwyNiBAQCBib29sIENTU1BhcnNlcjo6cGFyc2VWYWx1ZShpbnQgcHJvcElk
LCBiCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCisjaWYgRU5BQkxFKFdDU1MpCitQYXNzUmVmUHRy
PENTU1ByaW1pdGl2ZVZhbHVlPiBDU1NQYXJzZXI6OnBhcnNlV0NTU0lucHV0UHJvcGVydHkoKQor
eworICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gcGFyc2VkVmFsdWUgPSAwOworICAgIENT
U1BhcnNlclZhbHVlKiB2YWx1ZSA9IG1fdmFsdWVMaXN0LT5jdXJyZW50KCk7CisgICAgU3RyaW5n
IGlucHV0UHJvcGVydHk7CisgICAgd2hpbGUgKHZhbHVlKSB7CisgICAgICAgIGlmICh2YWx1ZS0+
dW5pdCA9PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1NUUklORyB8fCB2YWx1ZS0+dW5pdCA9PSBD
U1NQcmltaXRpdmVWYWx1ZTo6Q1NTX0lERU5UKQorICAgICAgICAgICAgaW5wdXRQcm9wZXJ0eSA9
IFN0cmluZyh2YWx1ZS0+c3RyaW5nKTsKKyAKKyAgICAgICAgaWYgKCFpbnB1dFByb3BlcnR5Lmlz
RW1wdHkoKSkKKyAgICAgICAgICAgcGFyc2VkVmFsdWUgPSBDU1NQcmltaXRpdmVWYWx1ZTo6Y3Jl
YXRlKGlucHV0UHJvcGVydHksIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfU1RSSU5HKTsKKyAKKyAg
ICAgICAgdmFsdWUgPSBtX3ZhbHVlTGlzdC0+bmV4dCgpOworICAgIH0KKyAKKyAgICByZXR1cm4g
cGFyc2VkVmFsdWU7Cit9CisjZW5kaWYKKwogdm9pZCBDU1NQYXJzZXI6OmFkZEZpbGxWYWx1ZShS
ZWZQdHI8Q1NTVmFsdWU+JiBsdmFsLCBQYXNzUmVmUHRyPENTU1ZhbHVlPiBydmFsKQogewogICAg
IGlmIChsdmFsKSB7CkluZGV4OiBXZWJDb3JlL2Nzcy9DU1NQYXJzZXIuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL2Nzcy9DU1NQYXJzZXIuaAkocmV2aXNpb24gNDM2ODEpCisrKyBXZWJDb3JlL2Nz
cy9DU1NQYXJzZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMTM0LDYgKzEzNCwxMCBAQCBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAgICAgICAgIFBhc3NSZWZQdHI8Q1NTVmFsdWU+IHBhcnNlU1ZHU3Ryb2tl
RGFzaGFycmF5KCk7CiAjZW5kaWYKIAorI2lmIEVOQUJMRShXQ1NTKSAgICAgICAKKyAgICAgICAg
UGFzc1JlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gcGFyc2VXQ1NTSW5wdXRQcm9wZXJ0eSgpOwor
I2VuZGlmCisKICAgICAgICAgLy8gQ1NTMyBQYXJzaW5nIFJvdXRpbmVzIChmb3IgcHJvcGVydGll
cyBzcGVjaWZpYyB0byBDU1MzKQogICAgICAgICBib29sIHBhcnNlU2hhZG93KGludCBwcm9wSWQs
IGJvb2wgaW1wb3J0YW50KTsKICAgICAgICAgYm9vbCBwYXJzZUJvcmRlckltYWdlKGludCBwcm9w
SWQsIGJvb2wgaW1wb3J0YW50LCBSZWZQdHI8Q1NTVmFsdWU+Jik7CkluZGV4OiBXZWJDb3JlL2Nz
cy9DU1NQcm9wZXJ0eU5hbWVzLmluCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvY3NzL0NTU1Byb3Bl
cnR5TmFtZXMuaW4JKHJldmlzaW9uIDQzNjgxKQorKysgV2ViQ29yZS9jc3MvQ1NTUHJvcGVydHlO
YW1lcy5pbgkod29ya2luZyBjb3B5KQpAQCAtMTM2LDYgKzEzNiw4IEBAIHdvcmQtc3BhY2luZwog
d29yZC13cmFwCiB6LWluZGV4CiB6b29tCistd2FwLWlucHV0LWZvcm1hdAorLXdhcC1pbnB1dC1y
ZXF1aXJlZAogLXdlYmtpdC1hbmltYXRpb24KIC13ZWJraXQtYW5pbWF0aW9uLWRlbGF5CiAtd2Vi
a2l0LWFuaW1hdGlvbi1kaXJlY3Rpb24KSW5kZXg6IFdlYkNvcmUvZG9tL0lucHV0RWxlbWVudC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20vSW5wdXRFbGVtZW50LmNwcAkocmV2aXNpb24g
NDM2ODEpCisrKyBXZWJDb3JlL2RvbS9JbnB1dEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC00MSw2ICs0MSwxNSBAQAogI2luY2x1ZGUgIldNTE5hbWVzLmgiCiAjZW5kaWYKIAorI2lmIEVO
QUJMRShXQ1NTKQorI2luY2x1ZGUgIkNTU1Byb3BlcnR5TmFtZXMuaCIKKyNpbmNsdWRlICJDU1NS
dWxlLmgiCisjaW5jbHVkZSAiQ1NTUnVsZUxpc3QuaCIKKyNpbmNsdWRlICJDU1NTdHlsZVJ1bGUu
aCIKKyNpbmNsdWRlICJDU1NTdHlsZVNlbGVjdG9yLmgiCisjaW5jbHVkZSAiSFRNTFRleHRBcmVh
RWxlbWVudC5oIgorI2VuZGlmCisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogdXNpbmcgbmFtZXNw
YWNlIEhUTUxOYW1lczsKQEAgLTUyLDExICs2MSwyNDIgQEAgdXNpbmcgbmFtZXNwYWNlIEhUTUxO
YW1lczsKIGNvbnN0IGludCBJbnB1dEVsZW1lbnQ6OnNfbWF4aW11bUxlbmd0aCA9IDUyNDI4ODsK
IGNvbnN0IGludCBJbnB1dEVsZW1lbnQ6OnNfZGVmYXVsdFNpemUgPSAyMDsKIAorI2lmIEVOQUJM
RShXQ1NTKQorc3RhdGljIGlubGluZSBjb25zdCBBdG9taWNTdHJpbmcmIGZvcm1hdENvZGVzKCkK
K3sKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKEF0b21pY1N0cmluZywgY29kZXMsICgiQWFOblh4
TW0iKSk7CisgICAgcmV0dXJuIGNvZGVzOworfQorCitzdGF0aWMgdW5zaWduZWQgY3Vyc29yUG9z
aXRpb25Ub01hc2tJbmRleChjb25zdCBTdHJpbmcmIGlucHV0Rm9ybWF0TWFzaywgdW5zaWduZWQg
Y3Vyc29yUG9zaXRpb24pCit7CisgICAgVUNoYXIgbWFzazsKKyAgICBpbnQgaW5kZXggPSAtMTsK
KyAgICBkbyB7CisgICAgICAgIG1hc2sgPSBpbnB1dEZvcm1hdE1hc2tbKytpbmRleF07CisgICAg
ICAgIGlmIChtYXNrID09ICdcXCcpCisgICAgICAgICAgICArK2luZGV4OworICAgICAgICBlbHNl
IGlmIChtYXNrID09ICcqJyB8fCAoV1RGOjppc0FTQ0lJRGlnaXQobWFzaykgJiYgbWFzayAhPSAn
MCcpKSB7CisgICAgICAgICAgICBpbmRleCA9IGlucHV0Rm9ybWF0TWFzay5sZW5ndGgoKSAtIDE7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0gd2hpbGUgKGN1cnNvclBvc2l0
aW9uLS0pOworIAorICAgIHJldHVybiBpbmRleDsKK30KKworYm9vbCBJbnB1dEVsZW1lbnQ6Omlz
Q29uZm9ybWVkVG9JbnB1dE1hc2soY29uc3QgSW5wdXRFbGVtZW50RGF0YSYgZGF0YSwgY29uc3Qg
U3RyaW5nJiBpbnB1dENoYXJzKQoreworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBpbnB1
dENoYXJzLmxlbmd0aCgpOyArK2kpCisgICAgICAgIGlmICghaXNDb25mb3JtZWRUb0lucHV0TWFz
ayhkYXRhLCBpbnB1dENoYXJzW2ldLCBpLCBpICsgMSkpCisgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgSW5wdXRFbGVtZW50Ojppc0NvbmZvcm1l
ZFRvSW5wdXRNYXNrKGNvbnN0IElucHV0RWxlbWVudERhdGEmIGRhdGEsIFVDaGFyIGluQ2hhciwg
dW5zaWduZWQgY3Vyc29yUG9zaXRpb24sIHVuc2lnbmVkIGlucHV0Q2hhcnNDb3VudCkKK3sKKyAg
ICBTdHJpbmcgaW5wdXRGb3JtYXRNYXNrID0gZGF0YS5pbnB1dEZvcm1hdE1hc2soKTsKKyAgICBp
ZiAoaW5wdXRGb3JtYXRNYXNrLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAg
ICBpZiAoaW5wdXRDaGFyc0NvdW50ID4gZGF0YS5hbGxvd2VkSW5wdXRDaGFyc01heExlbmd0aCgp
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgCisgICAgdW5zaWduZWQgbWFza0luZGV4ID0gY3Vy
c29yUG9zaXRpb25Ub01hc2tJbmRleChpbnB1dEZvcm1hdE1hc2ssIGN1cnNvclBvc2l0aW9uKTsK
KyAgICBib29sIG9rID0gdHJ1ZTsKKyAgICBVQ2hhciBtYXNrID0gaW5wdXRGb3JtYXRNYXNrW21h
c2tJbmRleF07CisgICAgLy8gTWF0Y2ggdGhlIGlucHV0ZWQgY2hhcmFjdGVyIHdpdGggaW5wdXQg
bWFzaworICAgIHN3aXRjaCAobWFzaykgeworICAgIGNhc2UgJ0EnOgorICAgICAgICBvayA9ICFX
VEY6OmlzQVNDSUlEaWdpdChpbkNoYXIpICYmICFXVEY6OmlzQVNDSUlMb3dlcihpbkNoYXIpICYm
IFdURjo6aXNBU0NJSVByaW50YWJsZShpbkNoYXIpOworICAgICAgICBicmVhazsKKyAgICBjYXNl
ICdhJzoKKyAgICAgICAgb2sgPSAhV1RGOjppc0FTQ0lJRGlnaXQoaW5DaGFyKSAmJiAhV1RGOjpp
c0FTQ0lJVXBwZXIoaW5DaGFyKSAmJiBXVEY6OmlzQVNDSUlQcmludGFibGUoaW5DaGFyKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSAnTic6CisgICAgICAgIG9rID0gV1RGOjppc0FTQ0lJRGln
aXQoaW5DaGFyKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSAnbic6CisgICAgICAgIG9rID0g
IVdURjo6aXNBU0NJSUFscGhhKGluQ2hhcikgJiYgV1RGOjppc0FTQ0lJUHJpbnRhYmxlKGluQ2hh
cik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgJ1gnOgorICAgICAgICBvayA9ICFXVEY6Omlz
QVNDSUlMb3dlcihpbkNoYXIpICYmIFdURjo6aXNBU0NJSVByaW50YWJsZShpbkNoYXIpOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlICd4JzoKKyAgICAgICAgb2sgPSAhV1RGOjppc0FTQ0lJVXBw
ZXIoaW5DaGFyKSAmJiBXVEY6OmlzQVNDSUlQcmludGFibGUoaW5DaGFyKTsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSAnTSc6CisgICAgICAgIG9rID0gV1RGOjppc0FTQ0lJUHJpbnRhYmxlKGlu
Q2hhcik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgJ20nOgorICAgICAgICBvayA9IFdURjo6
aXNBU0NJSVByaW50YWJsZShpbkNoYXIpOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0Ogor
ICAgICAgICBvayA9IChtYXNrID09IGluQ2hhcik7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAK
KyAgICByZXR1cm4gb2s7Cit9CisKK1N0cmluZyBJbnB1dEVsZW1lbnQ6OnZhbGlkYXRlSW5wdXRN
YXNrKElucHV0RWxlbWVudERhdGEmIGRhdGEsIFN0cmluZyYgaW5wdXRNYXNrLCBib29sIGlzRnJv
bVdDU1MpCit7CisgICAgaWYgKGlzRnJvbVdDU1MpCisgICAgICAgIGlucHV0TWFzay5yZXBsYWNl
KCJcXFxcIiwgIlxcIik7CisgCisgICAgYm9vbCBpc1ZhbGlkID0gdHJ1ZTsKKyAgICBib29sIGhh
c1dpbGRjYXJkID0gZmFsc2U7CisgICAgdW5zaWduZWQgZXNjYXBlQ2hhckNvdW50ID0gMDsKKyAg
ICB1bnNpZ25lZCBtYXNrTGVuZ3RoID0gaW5wdXRNYXNrLmxlbmd0aCgpOworICAgIFVDaGFyIGZv
cm1hdENvZGU7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1hc2tMZW5ndGg7ICsraSkg
eworICAgICAgICBmb3JtYXRDb2RlID0gaW5wdXRNYXNrW2ldOworICAgICAgICBpZiAoZm9ybWF0
Q29kZXMoKS5maW5kKGZvcm1hdENvZGUpID09IC0xKSB7CisgICAgICAgICAgICBpZiAoZm9ybWF0
Q29kZSA9PSAnKicgfHwgKFdURjo6aXNBU0NJSURpZ2l0KGZvcm1hdENvZGUpICYmIGZvcm1hdENv
ZGUgIT0gJzAnKSkgeworICAgICAgICAgICAgICAgIC8vIFZhbGlkYXRlIGNvZGVzIHdoaWNoIGVu
ZHMgd2l0aCAnKmYnIG9yICduZicKKyAgICAgICAgICAgICAgICBmb3JtYXRDb2RlID0gaW5wdXRN
YXNrWysraV07CisgICAgICAgICAgICAgICAgaWYgKChpICsgMSAhPSBtYXNrTGVuZ3RoKSB8fCBm
b3JtYXRDb2RlcygpLmZpbmQoZm9ybWF0Q29kZSkgPT0gLTEpIHsKKyAgICAgICAgICAgICAgICAg
ICAgaXNWYWxpZCA9IGZhbHNlOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgaGFzV2lsZGNhcmQgPSB0cnVlOworICAgICAgICAg
ICAgfSBlbHNlIGlmIChmb3JtYXRDb2RlID09ICdcXCcpIHsKKyAgICAgICAgICAgICAgICAvL3Nr
aXAgb3ZlciB0aGUgbmV4dCBtYXNrIGNoYXJhY3RlcgorICAgICAgICAgICAgICAgICsraTsKKyAg
ICAgICAgICAgICAgICArK2VzY2FwZUNoYXJDb3VudDsKKyAgICAgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICAgICAgaXNWYWxpZCA9IGZhbHNlOworICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorIAorICAgIGlmICghaXNWYWxpZCkKKyAg
ICAgICAgcmV0dXJuIFN0cmluZygpOworIAorICAgIC8vIGNhbGN1bGF0ZSB0aGUgbnVtYmVyIG9m
IGNoYXJhY3RlcnMgYWxsb3dlZCB0byBiZSBlbnRlcmVkIGJ5IGlucHV0IG1hc2sKKyAgICB1bnNp
Z25lZCBhbGxvd2VkTGVuZ3RoID0gbWFza0xlbmd0aDsKKyAgICBpZiAoZXNjYXBlQ2hhckNvdW50
KQorICAgICAgICBhbGxvd2VkTGVuZ3RoIC09IGVzY2FwZUNoYXJDb3VudDsKKworICAgIGlmICho
YXNXaWxkY2FyZCkgeworICAgICAgICBmb3JtYXRDb2RlID0gaW5wdXRNYXNrW21hc2tMZW5ndGgg
LSAyXTsKKyAgICAgICAgaWYgKGZvcm1hdENvZGUgPT0gJyonKQorICAgICAgICAgICAgYWxsb3dl
ZExlbmd0aCA9IGRhdGEuYWxsb3dlZElucHV0Q2hhcnNNYXhMZW5ndGgoKTsKKyAgICAgICAgZWxz
ZSB7CisgICAgICAgICAgICB1bnNpZ25lZCBsZWZ0TGVuID0gU3RyaW5nKCZmb3JtYXRDb2RlKS50
b0ludCgpOworICAgICAgICAgICAgYWxsb3dlZExlbmd0aCA9IGxlZnRMZW4gKyBhbGxvd2VkTGVu
Z3RoIC0gMjsKKyAgICAgICAgfQorICAgIH0KKyAKKyAgICBpZiAoYWxsb3dlZExlbmd0aCA8IGRh
dGEuYWxsb3dlZElucHV0Q2hhcnNNYXhMZW5ndGgoKSkKKyAgICAgICAgZGF0YS5zZXRBbGxvd2Vk
SW5wdXRDaGFyc01heExlbmd0aChhbGxvd2VkTGVuZ3RoKTsKKyAKKyAgICByZXR1cm4gaW5wdXRN
YXNrOworfQorCit2b2lkIElucHV0RWxlbWVudDo6dXBkYXRlSW5wdXRQcm9wZXJ0aWVzRnJvbVdD
U1MoSW5wdXRFbGVtZW50RGF0YSYgZGF0YSwgRG9jdW1lbnQqIGRvY3VtZW50KQoreworICAgIGlm
ICghZG9jdW1lbnQpCisgICAgICAgIHJldHVybjsKKworICAgIFN0cmluZyBpbnB1dEZvcm1hdE1h
c2sgPSBkYXRhLmlucHV0Rm9ybWF0TWFzaygpOworICAgIElucHV0RWxlbWVudERhdGE6OklucHV0
UmVxdWlyZW1lbnRTdGF0ZSBpbnB1dFJlcXVpcmVtZW50U3RhdGUgPSBkYXRhLmlucHV0UmVxdWly
ZW1lbnRTdGF0ZSgpOworICAgIGlmICghaW5wdXRGb3JtYXRNYXNrLmlzRW1wdHkoKSAmJiBJbnB1
dEVsZW1lbnREYXRhOjpOb25lICE9IGlucHV0UmVxdWlyZW1lbnRTdGF0ZSkKKyAgICAgICAgcmV0
dXJuOworIAorICAgIC8vMSwgZ2V0IGlucHV0IHByb3BlcnR5IGZyb20gaW5saW5lIFdDU1MgZmly
c3QgCisgICAgQ1NTU3R5bGVEZWNsYXJhdGlvbiogc3R5bGVEZWNsYXJhdGlvbiA9IGRhdGEuZWxl
bWVudCgpLT5zdHlsZSgpOworICAgIGlmIChzdHlsZURlY2xhcmF0aW9uKSB7CisgICAgICAgIGlm
IChpbnB1dEZvcm1hdE1hc2suaXNFbXB0eSgpKSB7CisgICAgICAgICAgICBpbnB1dEZvcm1hdE1h
c2sgPSBzdHlsZURlY2xhcmF0aW9uLT5nZXRQcm9wZXJ0eVZhbHVlKENTU1Byb3BlcnR5V2FwSW5w
dXRGb3JtYXQpOworICAgICAgICAgICAgaW5wdXRGb3JtYXRNYXNrLnJlcGxhY2UoJ1wnJywgJyAn
KTsKKyAgICAgICAgICAgIGlucHV0Rm9ybWF0TWFzayA9IGlucHV0Rm9ybWF0TWFzay5zdHJpcFdo
aXRlU3BhY2UoKTsKKyAgICAgICAgfQorIAorICAgICAgICBpZiAoSW5wdXRFbGVtZW50RGF0YTo6
Tm9uZSA9PSBpbnB1dFJlcXVpcmVtZW50U3RhdGUpIHsKKyAgICAgICAgICAgIFN0cmluZyBpbnB1
dFJlcXVpcmVkID0gc3R5bGVEZWNsYXJhdGlvbi0+Z2V0UHJvcGVydHlWYWx1ZShDU1NQcm9wZXJ0
eVdhcElucHV0UmVxdWlyZWQpOworICAgICAgICAgICAgaWYgKCFpbnB1dFJlcXVpcmVkLmlzRW1w
dHkoKSkKKyAgICAgICAgICAgICAgICBpbnB1dFJlcXVpcmVtZW50U3RhdGUgPSAoaW5wdXRSZXF1
aXJlZCA9PSAidHJ1ZSIgPyBJbnB1dEVsZW1lbnREYXRhOjpJbnB1dFJlcXVpcmVkIDogSW5wdXRF
bGVtZW50RGF0YTo6SW5wdXROb3RSZXF1aXJlZCk7CisgICAgICAgIH0KKyAgICB9CisgCisgICAg
Ly8yLCBUcnkgdG8gZ2V0IGlucHV0IHByb3BlcnR5IGZyb20gaW50ZXJuYWwgV0NTUyBhbmQgZXh0
ZXJuYWwgV0NTUyBpbiB0dXJuCisgICAgaWYgKGlucHV0Rm9ybWF0TWFzay5pc0VtcHR5KCkgfHwg
SW5wdXRFbGVtZW50RGF0YTo6Tm9uZSA9PSBpbnB1dFJlcXVpcmVtZW50U3RhdGUpIHsKKyAgICAg
ICAgaWYgKGRvY3VtZW50LT5zdHlsZVNlbGVjdG9yKCkpIHsKKyAgICAgICAgICAgIFJlZlB0cjxD
U1NSdWxlTGlzdD4gcnVsZUxpc3QgPSBkb2N1bWVudC0+c3R5bGVTZWxlY3RvcigpLT5zdHlsZVJ1
bGVzRm9yRWxlbWVudChkYXRhLmVsZW1lbnQoKSwgZmFsc2UpOworICAgICAgICAgICAgaWYgKHJ1
bGVMaXN0ICYmIHJ1bGVMaXN0LT5sZW5ndGgoKSA+IDApIHsKKyAgICAgICAgICAgICAgICBDU1NS
dWxlKiBydWxlID0gMDsKKyAgICAgICAgICAgICAgICBTdHJpbmcgY3NzVGV4dDsKKyAgICAgICAg
ICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHJ1bGVMaXN0LT5sZW5ndGgoKTsgKytpKSB7Cisg
ICAgICAgICAgICAgICAgICAgIHJ1bGUgPSBydWxlTGlzdC0+aXRlbShpKTsKKyAgICAgICAgICAg
ICAgICAgICAgaWYgKHJ1bGUtPmlzU3R5bGVSdWxlKCkpIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIENTU1N0eWxlUnVsZSogY3NSdWxlID0gc3RhdGljX2Nhc3Q8Q1NTU3R5bGVSdWxlKj4ocnVs
ZSk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY3NSdWxlLT5zdHlsZSgpKSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY3NzVGV4dCA9IGNzUnVsZS0+c3R5bGUoKS0+Y3NzVGV4
dCgpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbmRleCA9IC0xOworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGlmIChpbnB1dEZvcm1hdE1hc2suaXNFbXB0eSgpKSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4ID0gY3NzVGV4dC5maW5kKCItd2Fw
LWlucHV0LWZvcm1hdCIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW5k
ZXggIT0gLTEpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBwb3N0
aW9uID0gY3NzVGV4dC5maW5kKCc6JywgaW5kZXgpOworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaW5wdXRGb3JtYXRNYXNrID0gY3NzVGV4dC5zdWJzdHJpbmcocG9zdGlvbiAr
IDEpOworIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9zdGlvbiA9IGlu
cHV0Rm9ybWF0TWFzay5maW5kKCc7Jyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpbnB1dEZvcm1hdE1hc2sudHJ1bmNhdGUocG9zdGlvbik7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpbnB1dEZvcm1hdE1hc2sucmVwbGFjZSgnXCcnLCAnICcpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXRGb3JtYXRNYXNrID0gaW5w
dXRGb3JtYXRNYXNrLnN0cmlwV2hpdGVTcGFjZSgpOworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKElucHV0RWxlbWVudERhdGE6Ok5vbmUgPT0gaW5wdXRSZXF1aXJl
bWVudFN0YXRlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4ID0gY3Nz
VGV4dC5maW5kKCItd2FwLWlucHV0LXJlcXVpcmVkIik7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGlmIChpbmRleCAhPSAtMSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaW50IHBvc3Rpb24gPSBjc3NUZXh0LmZpbmQoJzonLCBpbmRleCk7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcgaW5wdXRSZXF1aXJlZCA9IGNzc1Rl
eHQuc3Vic3RyaW5nKHBvc3Rpb24gKyAxKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHBvc3Rpb24gPSBpbnB1dFJlcXVpcmVkLmZpbmQoJzsnKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGlucHV0UmVxdWlyZWQudHJ1bmNhdGUocG9zdGlvbik7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dFJlcXVpcmVkID0gaW5wdXRS
ZXF1aXJlZC5zdHJpcFdoaXRlU3BhY2UoKTsKKyAKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGlmICghaW5wdXRSZXF1aXJlZC5pc0VtcHR5KCkpCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXRSZXF1aXJlbWVudFN0YXRlID0gKGlucHV0UmVx
dWlyZWQgPT0gInRydWUiID8gSW5wdXRFbGVtZW50RGF0YTo6SW5wdXRSZXF1aXJlZCA6IElucHV0
RWxlbWVudERhdGE6OklucHV0Tm90UmVxdWlyZWQpOworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorIAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGlmICghaW5wdXRGb3JtYXRNYXNrLmlzRW1wdHkoKSAmJiBJbnB1dEVs
ZW1lbnREYXRhOjpOb25lICE9IGlucHV0UmVxdWlyZW1lbnRTdGF0ZSkKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKyAgICB9CisgCisgICAgaWYgKGlucHV0Rm9ybWF0TWFzay5pc0VtcHR5KCkpCisgICAg
ICAgIGRhdGEuc2V0SW5wdXRGb3JtYXRNYXNrKCIqTSIpOyAvLyBTZXQgaW5wdXQgbWFzayB0byAn
Kk0nIGJ5IGRlZmF1bHQgCisgICAgZWxzZQorICAgICAgICBkYXRhLnNldElucHV0Rm9ybWF0TWFz
ayh2YWxpZGF0ZUlucHV0TWFzayhkYXRhLCBpbnB1dEZvcm1hdE1hc2ssIHRydWUpKTsKKyAKKyAg
ICAvLyBJZiAnLXdhcC1pbnB1dC1yZXF1aXJlZCcgaXMgbm90IHNwZWNpZmllZCwgaW5wdXQgaXMg
c3RpbGwgcmVxdWlyZWQgd2hlbgorICAgIC8vIHRoZSBpbnB1dCBmb3JtYXQgaXMgbm90IGVtcHR5
IGFuZCB0aGUgY29kZXMgaXMgbm90IGVxdWFsIHRvICIqZiIKKyAgICBpZiAoSW5wdXRFbGVtZW50
RGF0YTo6Tm9uZSA9PSBpbnB1dFJlcXVpcmVtZW50U3RhdGUpIHsKKyAgICAgICAgaWYgKGlucHV0
Rm9ybWF0TWFzay5pc0VtcHR5KCkgfHwgKGlucHV0Rm9ybWF0TWFzay5sZW5ndGgoKSA9PSAyICYm
IGlucHV0Rm9ybWF0TWFza1swXSA9PSAnKicpKQorICAgICAgICAgICAgZGF0YS5zZXRJbnB1dFJl
cXVpcmVtZW50U3RhdGUoSW5wdXRFbGVtZW50RGF0YTo6SW5wdXROb3RSZXF1aXJlZCk7CisgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgIGRhdGEuc2V0SW5wdXRSZXF1aXJlbWVudFN0YXRlKElucHV0
RWxlbWVudERhdGE6OklucHV0UmVxdWlyZWQpOworICAgIH0gZWxzZQorICAgICAgICBkYXRhLnNl
dElucHV0UmVxdWlyZW1lbnRTdGF0ZShpbnB1dFJlcXVpcmVtZW50U3RhdGUpOworfQorI2VuZGlm
CisKIHZvaWQgSW5wdXRFbGVtZW50OjpkaXNwYXRjaEZvY3VzRXZlbnQoSW5wdXRFbGVtZW50RGF0
YSYgZGF0YSwgRG9jdW1lbnQqIGRvY3VtZW50KQogewogICAgIGlmICghZGF0YS5pbnB1dEVsZW1l
bnQoKS0+aXNUZXh0RmllbGQoKSkKICAgICAgICAgcmV0dXJuOwogCisjaWYgRU5BQkxFKFdDU1Mp
CisgICAgdXBkYXRlSW5wdXRQcm9wZXJ0aWVzRnJvbVdDU1MoZGF0YSwgZG9jdW1lbnQpOworI2Vu
ZGlmCisKICAgICB1cGRhdGVQbGFjZWhvbGRlclZpc2liaWxpdHkoZGF0YSwgZG9jdW1lbnQpOwog
CiAgICAgaWYgKGRhdGEuaW5wdXRFbGVtZW50KCktPmlzUGFzc3dvcmRGaWVsZCgpICYmIGRvY3Vt
ZW50LT5mcmFtZSgpKQpAQCAtNzIsNiArMzEyLDE0IEBAIHZvaWQgSW5wdXRFbGVtZW50OjpkaXNw
YXRjaEJsdXJFdmVudChJbnAKICAgICBpZiAoIWZyYW1lKQogICAgICAgICByZXR1cm47CiAKKyNp
ZiBFTkFCTEUoV0NTUykKKyAgICBpZiAoZGF0YS5pbnB1dFJlcXVpcmVtZW50U3RhdGUoKSA9PSBJ
bnB1dEVsZW1lbnREYXRhOjpJbnB1dFJlcXVpcmVkICYmIGRhdGEuZWxlbWVudCgpLT5yZW5kZXJl
cigpKSB7CisgICAgICAgIFN0cmluZyBpbnB1dGVkVGV4dCA9IHN0YXRpY19jYXN0PFJlbmRlclRl
eHRDb250cm9sKj4oZGF0YS5lbGVtZW50KCktPnJlbmRlcmVyKCkpLT50ZXh0KCk7CisgICAgICAg
IGlmIChpbnB1dGVkVGV4dC5pc0VtcHR5KCkgfHwgIWlzQ29uZm9ybWVkVG9JbnB1dE1hc2soZGF0
YSwgaW5wdXRlZFRleHQpKQorICAgICAgICAgICAgZGF0YS5lbGVtZW50KCktPmZvY3VzKCk7IAor
ICAgIH0gCisjZW5kaWYKKwogICAgIHVwZGF0ZVBsYWNlaG9sZGVyVmlzaWJpbGl0eShkYXRhLCBk
b2N1bWVudCk7CiAKICAgICBpZiAoZGF0YS5pbnB1dEVsZW1lbnQoKS0+aXNQYXNzd29yZEZpZWxk
KCkpCkBAIC0yNzUsNiArNTIzLDEwIEBAIElucHV0RWxlbWVudERhdGE6OklucHV0RWxlbWVudERh
dGEoSW5wdXQKICAgICAsIG1fbWF4TGVuZ3RoKElucHV0RWxlbWVudDo6c19tYXhpbXVtTGVuZ3Ro
KQogICAgICwgbV9jYWNoZWRTZWxlY3Rpb25TdGFydCgtMSkKICAgICAsIG1fY2FjaGVkU2VsZWN0
aW9uRW5kKC0xKQorI2lmIEVOQUJMRShXQ1NTKQorICAgICwgbV9pbnB1dFJlcXVpcmVtZW50U3Rh
dGUoSW5wdXRFbGVtZW50RGF0YTo6Tm9uZSkKKyAgICAsIG1fYWxsb3dlZElucHV0Q2hhcnNNYXhM
ZW5ndGgoSW5wdXRFbGVtZW50OjpzX21heGltdW1MZW5ndGgpCisjZW5kaWYKIHsKICAgICBBU1NF
UlQobV9pbnB1dEVsZW1lbnQpOwogICAgIEFTU0VSVChtX2VsZW1lbnQpOwpAQCAtMjkzLDYgKzU0
NSwxMCBAQCBJbnB1dEVsZW1lbnQqIHRvSW5wdXRFbGVtZW50KEVsZW1lbnQqIGVsCiB7CiAgICAg
aWYgKGVsZW1lbnQtPmlzSFRNTEVsZW1lbnQoKSAmJiAoZWxlbWVudC0+aGFzVGFnTmFtZShpbnB1
dFRhZykgfHwgZWxlbWVudC0+aGFzVGFnTmFtZShpc2luZGV4VGFnKSkpCiAgICAgICAgIHJldHVy
biBzdGF0aWNfY2FzdDxIVE1MSW5wdXRFbGVtZW50Kj4oZWxlbWVudCk7CisjaWYgRU5BQkxFKFdD
U1MpCisgICAgZWxzZSBpZiAoZWxlbWVudC0+aXNIVE1MRWxlbWVudCgpICYmIGVsZW1lbnQtPmhh
c1RhZ05hbWUodGV4dGFyZWFUYWcpKQorICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8SFRNTFRl
eHRBcmVhRWxlbWVudCo+KGVsZW1lbnQpOworI2VuZGlmCiAKICNpZiBFTkFCTEUoV01MKQogICAg
IGlmIChlbGVtZW50LT5pc1dNTEVsZW1lbnQoKSAmJiBlbGVtZW50LT5oYXNUYWdOYW1lKFdNTE5h
bWVzOjppbnB1dFRhZykpCkluZGV4OiBXZWJDb3JlL2RvbS9JbnB1dEVsZW1lbnQuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL2RvbS9JbnB1dEVsZW1lbnQuaAkocmV2aXNpb24gNDM2ODEpCisrKyBX
ZWJDb3JlL2RvbS9JbnB1dEVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtNzksNiArNzksMTIg
QEAgcHJvdGVjdGVkOgogICAgIHN0YXRpYyB2b2lkIHBhcnNlTWF4TGVuZ3RoQXR0cmlidXRlKElu
cHV0RWxlbWVudERhdGEmLCBNYXBwZWRBdHRyaWJ1dGUqKTsKICAgICBzdGF0aWMgdm9pZCB1cGRh
dGVWYWx1ZUlmTmVlZGVkKElucHV0RWxlbWVudERhdGEmKTsKICAgICBzdGF0aWMgdm9pZCBub3Rp
ZnlGb3JtU3RhdGVDaGFuZ2VkKElucHV0RWxlbWVudERhdGEmLCBEb2N1bWVudCopOworI2lmIEVO
QUJMRShXQ1NTKQorICAgIHN0YXRpYyBib29sIGlzQ29uZm9ybWVkVG9JbnB1dE1hc2soY29uc3Qg
SW5wdXRFbGVtZW50RGF0YSYsIGNvbnN0IFN0cmluZyYpOyAKKyAgICBzdGF0aWMgYm9vbCBpc0Nv
bmZvcm1lZFRvSW5wdXRNYXNrKGNvbnN0IElucHV0RWxlbWVudERhdGEmLCBVQ2hhciwgdW5zaWdu
ZWQsIHVuc2lnbmVkKTsKKyAgICBzdGF0aWMgdm9pZCB1cGRhdGVJbnB1dFByb3BlcnRpZXNGcm9t
V0NTUyhJbnB1dEVsZW1lbnREYXRhJiwgRG9jdW1lbnQqKTsKKyAgICBzdGF0aWMgU3RyaW5nIHZh
bGlkYXRlSW5wdXRNYXNrKElucHV0RWxlbWVudERhdGEmLCBTdHJpbmcmLCBib29sIGlzRnJvbVdD
U1MgPSBmYWxzZSk7CisjZW5kaWYKIH07CiAKIC8vIEhUTUwvV01MSW5wdXRFbGVtZW50IGhvbGQg
dGhpcyBzdHJ1Y3QgYXMgbWVtYmVyIHZhcmlhYmxlCkBAIC0xMTIsNiArMTE4LDE4IEBAIHB1Ymxp
YzoKICAgICBpbnQgY2FjaGVkU2VsZWN0aW9uRW5kKCkgY29uc3QgeyByZXR1cm4gbV9jYWNoZWRT
ZWxlY3Rpb25FbmQ7IH0KICAgICB2b2lkIHNldENhY2hlZFNlbGVjdGlvbkVuZChpbnQgdmFsdWUp
IHsgbV9jYWNoZWRTZWxlY3Rpb25FbmQgPSB2YWx1ZTsgfQogCisjaWYgRU5BQkxFKFdDU1MpCisg
ICAgZW51bSBJbnB1dFJlcXVpcmVtZW50U3RhdGUgeyBOb25lID0gLTEsIElucHV0Tm90UmVxdWly
ZWQsIElucHV0UmVxdWlyZWQgfTsKKyAgICBJbnB1dFJlcXVpcmVtZW50U3RhdGUgaW5wdXRSZXF1
aXJlbWVudFN0YXRlKCkgY29uc3QgeyByZXR1cm4gbV9pbnB1dFJlcXVpcmVtZW50U3RhdGU7IH0K
KyAgICB2b2lkIHNldElucHV0UmVxdWlyZW1lbnRTdGF0ZShJbnB1dFJlcXVpcmVtZW50U3RhdGUg
c3RhdGUpIHsgbV9pbnB1dFJlcXVpcmVtZW50U3RhdGUgPSBzdGF0ZTsgfQorCisgICAgU3RyaW5n
IGlucHV0Rm9ybWF0TWFzaygpIGNvbnN0IHsgcmV0dXJuIG1faW5wdXRGb3JtYXRNYXNrOyB9Cisg
ICAgdm9pZCBzZXRJbnB1dEZvcm1hdE1hc2soY29uc3QgU3RyaW5nJiBtYXNrKSB7IG1faW5wdXRG
b3JtYXRNYXNrID0gbWFzazsgfQorCisgICAgdW5zaWduZWQgYWxsb3dlZElucHV0Q2hhcnNNYXhM
ZW5ndGgoKSBjb25zdCB7IHJldHVybiBtX2FsbG93ZWRJbnB1dENoYXJzTWF4TGVuZ3RoOyB9Cisg
ICAgdm9pZCBzZXRBbGxvd2VkSW5wdXRDaGFyc01heExlbmd0aCh1bnNpZ25lZCBtYXhMZW5ndGgp
IHsgbV9hbGxvd2VkSW5wdXRDaGFyc01heExlbmd0aCA9IG1heExlbmd0aDsgfQorI2VuZGlmCisK
IHByaXZhdGU6CiAgICAgSW5wdXRFbGVtZW50KiBtX2lucHV0RWxlbWVudDsKICAgICBFbGVtZW50
KiBtX2VsZW1lbnQ7CkBAIC0xMjIsNiArMTQwLDExIEBAIHByaXZhdGU6CiAgICAgaW50IG1fbWF4
TGVuZ3RoOwogICAgIGludCBtX2NhY2hlZFNlbGVjdGlvblN0YXJ0OwogICAgIGludCBtX2NhY2hl
ZFNlbGVjdGlvbkVuZDsKKyNpZiBFTkFCTEUoV0NTUykKKyAgICBTdHJpbmcgbV9pbnB1dEZvcm1h
dE1hc2s7CisgICAgSW5wdXRSZXF1aXJlbWVudFN0YXRlIG1faW5wdXRSZXF1aXJlbWVudFN0YXRl
OworICAgIHVuc2lnbmVkIG1fYWxsb3dlZElucHV0Q2hhcnNNYXhMZW5ndGg7CisjZW5kaWYKIH07
CiAKIElucHV0RWxlbWVudCogdG9JbnB1dEVsZW1lbnQoRWxlbWVudCopOwpJbmRleDogV2ViQ29y
ZS9odG1sL0hUTUxJbnB1dEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9I
VE1MSW5wdXRFbGVtZW50LmNwcAkocmV2aXNpb24gNDM2ODEpCisrKyBXZWJDb3JlL2h0bWwvSFRN
TElucHV0RWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExNTAsOCArMTE1MCwxOSBAQCB2
b2lkIEhUTUxJbnB1dEVsZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRsCiAKICAgICBib29sIGNsaWNr
RGVmYXVsdEZvcm1CdXR0b24gPSBmYWxzZTsKIAorI2lmIEVOQUJMRShXQ1NTKQorICAgIGlmIChp
c1RleHRGaWVsZCgpICYmIGV2dC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS50ZXh0SW5wdXRFdmVu
dCAmJiBldnQtPmlzVGV4dEV2ZW50KCkpIHsKKyAgICAgICAgVGV4dEV2ZW50KiB0ZXh0RXZlbnQg
PSBzdGF0aWNfY2FzdDxUZXh0RXZlbnQqPihldnQpOworICAgICAgICBpZiAodGV4dEV2ZW50LT5k
YXRhKCkgPT0gIlxuIikKKyAgICAgICAgICAgIGNsaWNrRGVmYXVsdEZvcm1CdXR0b24gPSB0cnVl
OworICAgICAgICBlbHNlIGlmIChyZW5kZXJlcigpICYmICFpc0NvbmZvcm1lZFRvSW5wdXRNYXNr
KG1fZGF0YSwgdGV4dEV2ZW50LT5kYXRhKClbMF0sIHNlbGVjdGlvblN0YXJ0KCksIHN0YXRpY19j
YXN0PFJlbmRlclRleHRDb250cm9sKj4ocmVuZGVyZXIoKSktPnRleHQoKS5sZW5ndGgoKSArIDEp
KQorICAgICAgICAgICAgLy8gSWYgdGhlIGlucHV0ZWQgY2hhcmFjdGVyIGRvZXNuJ3QgY29uZm9y
bSB0byB0aGUgaW5wdXQgbWFzaywgc3RvcCBoYW5kbGluZyAKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICB9CisjZWxzZQogICAgIGlmIChpc1RleHRGaWVsZCgpICYmIGV2dC0+dHlwZSgpID09IGV2
ZW50TmFtZXMoKS50ZXh0SW5wdXRFdmVudCAmJiBldnQtPmlzVGV4dEV2ZW50KCkgJiYgc3RhdGlj
X2Nhc3Q8VGV4dEV2ZW50Kj4oZXZ0KS0+ZGF0YSgpID09ICJcbiIpCiAgICAgICAgIGNsaWNrRGVm
YXVsdEZvcm1CdXR0b24gPSB0cnVlOworI2VuZGlmCiAKICAgICBpZiAoaW5wdXRUeXBlKCkgPT0g
SU1BR0UgJiYgZXZ0LT5pc01vdXNlRXZlbnQoKSAmJiBldnQtPnR5cGUoKSA9PSBldmVudE5hbWVz
KCkuY2xpY2tFdmVudCkgewogICAgICAgICAvLyByZWNvcmQgdGhlIG1vdXNlIHBvc2l0aW9uIGZv
ciB3aGVuIHdlIGdldCB0aGUgRE9NQWN0aXZhdGUgZXZlbnQKSW5kZXg6IFdlYkNvcmUvaHRtbC9I
VE1MVGV4dEFyZWFFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTFRl
eHRBcmVhRWxlbWVudC5jcHAJKHJldmlzaW9uIDQzNjgxKQorKysgV2ViQ29yZS9odG1sL0hUTUxU
ZXh0QXJlYUVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Myw2ICs0MywxMCBAQAogI2lu
Y2x1ZGUgIlZpc2libGVTZWxlY3Rpb24uaCIKICNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+
CiAKKyNpZiBFTkFCTEUoV0NTUykKKyNpbmNsdWRlICJUZXh0RXZlbnQuaCIKKyNlbmRpZgorCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKIHVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CkBAIC01MCw2
ICs1NCw3IEBAIHVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CiBzdGF0aWMgY29uc3QgaW50IGRl
ZmF1bHRSb3dzID0gMjsKIHN0YXRpYyBjb25zdCBpbnQgZGVmYXVsdENvbHMgPSAyMDsKIAorI2lm
ICFFTkFCTEUoV0NTUykKIHN0YXRpYyBpbmxpbmUgdm9pZCBub3RpZnlGb3JtU3RhdGVDaGFuZ2Vk
KGNvbnN0IEhUTUxUZXh0QXJlYUVsZW1lbnQqIGVsZW1lbnQpCiB7CiAgICAgRnJhbWUqIGZyYW1l
ID0gZWxlbWVudC0+ZG9jdW1lbnQoKS0+ZnJhbWUoKTsKQEAgLTU3LDE4ICs2MiwyNyBAQCBzdGF0
aWMgaW5saW5lIHZvaWQgbm90aWZ5Rm9ybVN0YXRlQ2hhbmdlCiAgICAgICAgIHJldHVybjsKICAg
ICBmcmFtZS0+cGFnZSgpLT5jaHJvbWUoKS0+Y2xpZW50KCktPmZvcm1TdGF0ZURpZENoYW5nZShl
bGVtZW50KTsKIH0KKyNlbmRpZgogCiBIVE1MVGV4dEFyZWFFbGVtZW50OjpIVE1MVGV4dEFyZWFF
bGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50KiBkb2N1bWVudCwg
SFRNTEZvcm1FbGVtZW50KiBmb3JtKQogICAgIDogSFRNTEZvcm1Db250cm9sRWxlbWVudFdpdGhT
dGF0ZSh0YWdOYW1lLCBkb2N1bWVudCwgZm9ybSkKICAgICAsIG1fcm93cyhkZWZhdWx0Um93cykK
ICAgICAsIG1fY29scyhkZWZhdWx0Q29scykKICAgICAsIG1fd3JhcChTb2Z0V3JhcCkKKyNpZiBF
TkFCTEUoV0NTUykKKyAgICAsIG1fZGF0YSh0aGlzLCB0aGlzKQorI2Vsc2UKICAgICAsIG1fY2Fj
aGVkU2VsZWN0aW9uU3RhcnQoLTEpCiAgICAgLCBtX2NhY2hlZFNlbGVjdGlvbkVuZCgtMSkKKyNl
bmRpZgogewogICAgIEFTU0VSVChoYXNUYWdOYW1lKHRleHRhcmVhVGFnKSk7CiAgICAgc2V0Rm9y
bUNvbnRyb2xWYWx1ZU1hdGNoZXNSZW5kZXJlcih0cnVlKTsKKyNpZiBFTkFCTEUoV0NTUykKKyAg
ICBub3RpZnlGb3JtU3RhdGVDaGFuZ2VkKG1fZGF0YSwgZG9jdW1lbnQpOworI2Vsc2UKICAgICBu
b3RpZnlGb3JtU3RhdGVDaGFuZ2VkKHRoaXMpOworI2VuZGlmCiB9CiAKIGNvbnN0IEF0b21pY1N0
cmluZyYgSFRNTFRleHRBcmVhRWxlbWVudDo6Zm9ybUNvbnRyb2xUeXBlKCkgY29uc3QKQEAgLTky
LDggKzEwNiwxMyBAQCBpbnQgSFRNTFRleHRBcmVhRWxlbWVudDo6c2VsZWN0aW9uU3RhcnQoCiB7
CiAgICAgaWYgKCFyZW5kZXJlcigpKQogICAgICAgICByZXR1cm4gMDsKKyNpZiBFTkFCTEUoV0NT
UykKKyAgICBpZiAoZG9jdW1lbnQoKS0+Zm9jdXNlZE5vZGUoKSAhPSB0aGlzICYmIG1fZGF0YS5j
YWNoZWRTZWxlY3Rpb25TdGFydCgpICE9IC0xKQorICAgICAgICByZXR1cm4gbV9kYXRhLmNhY2hl
ZFNlbGVjdGlvblN0YXJ0KCk7CisjZWxzZQogICAgIGlmIChkb2N1bWVudCgpLT5mb2N1c2VkTm9k
ZSgpICE9IHRoaXMgJiYgbV9jYWNoZWRTZWxlY3Rpb25TdGFydCA+PSAwKQogICAgICAgICByZXR1
cm4gbV9jYWNoZWRTZWxlY3Rpb25TdGFydDsKKyNlbmRpZgogICAgIHJldHVybiB0b1JlbmRlclRl
eHRDb250cm9sKHJlbmRlcmVyKCkpLT5zZWxlY3Rpb25TdGFydCgpOwogfQogCkBAIC0xMDEsOCAr
MTIwLDEzIEBAIGludCBIVE1MVGV4dEFyZWFFbGVtZW50OjpzZWxlY3Rpb25FbmQoKQogewogICAg
IGlmICghcmVuZGVyZXIoKSkKICAgICAgICAgcmV0dXJuIDA7CisjaWYgRU5BQkxFKFdDU1MpCisg
ICAgaWYgKGRvY3VtZW50KCktPmZvY3VzZWROb2RlKCkgIT0gdGhpcyAmJiBtX2RhdGEuY2FjaGVk
U2VsZWN0aW9uRW5kKCkgIT0gLTEpCisgICAgICAgIHJldHVybiBtX2RhdGEuY2FjaGVkU2VsZWN0
aW9uRW5kKCk7CisjZWxzZQogICAgIGlmIChkb2N1bWVudCgpLT5mb2N1c2VkTm9kZSgpICE9IHRo
aXMgJiYgbV9jYWNoZWRTZWxlY3Rpb25FbmQgPj0gMCkKICAgICAgICAgcmV0dXJuIG1fY2FjaGVk
U2VsZWN0aW9uRW5kOworI2VuZGlmCiAgICAgcmV0dXJuIHRvUmVuZGVyVGV4dENvbnRyb2wocmVu
ZGVyZXIoKSktPnNlbGVjdGlvbkVuZCgpOwogfQogCkBAIC0xMzEsNyArMTU1LDExIEBAIHZvaWQg
SFRNTFRleHRBcmVhRWxlbWVudDo6c2V0U2VsZWN0aW9uUmEKIHsKICAgICBpZiAoIXJlbmRlcmVy
KCkpCiAgICAgICAgIHJldHVybjsKKyNpZiBFTkFCTEUoV0NTUykKKyAgICBJbnB1dEVsZW1lbnQ6
OnVwZGF0ZVNlbGVjdGlvblJhbmdlKG1fZGF0YSwgc3RhcnQsIGVuZCk7CisjZWxzZQogICAgIHRv
UmVuZGVyVGV4dENvbnRyb2wocmVuZGVyZXIoKSktPnNldFNlbGVjdGlvblJhbmdlKHN0YXJ0LCBl
bmQpOworI2VuZGlmCiB9CiAKIHZvaWQgSFRNTFRleHRBcmVhRWxlbWVudDo6Y2hpbGRyZW5DaGFu
Z2VkKGJvb2wgY2hhbmdlZEJ5UGFyc2VyLCBOb2RlKiBiZWZvcmVDaGFuZ2UsIE5vZGUqIGFmdGVy
Q2hhbmdlLCBpbnQgY2hpbGRDb3VudERlbHRhKQpAQCAtMjMwLDYgKzI1OCw5IEBAIHZvaWQgSFRN
TFRleHRBcmVhRWxlbWVudDo6dXBkYXRlRm9jdXNBcHAKIHsKICAgICBBU1NFUlQocmVuZGVyZXIo
KSk7CiAgICAgCisjaWYgRU5BQkxFKFdDU1MpCisgICAgSW5wdXRFbGVtZW50Ojp1cGRhdGVGb2N1
c0FwcGVhcmFuY2UobV9kYXRhLCBkb2N1bWVudCgpLCByZXN0b3JlUHJldmlvdXNTZWxlY3Rpb24p
OworI2Vsc2UKICAgICBpZiAoIXJlc3RvcmVQcmV2aW91c1NlbGVjdGlvbiB8fCBtX2NhY2hlZFNl
bGVjdGlvblN0YXJ0IDwgMCkgewogI2lmIEVOQUJMRShPTl9GSVJTVF9URVhUQVJFQV9GT0NVU19T
RUxFQ1RfQUxMKQogICAgICAgICAvLyBEZXZpY2VzIHdpdGggdHJhY2tiYWxscyBvciBkLXBhZHMg
bWF5IGZvY3VzIG9uIGEgdGV4dGFyZWEgaW4gcm91dGUKQEAgLTI0OSwxMCArMjgwLDQ3IEBAIHZv
aWQgSFRNTFRleHRBcmVhRWxlbWVudDo6dXBkYXRlRm9jdXNBcHAKIAogICAgIGlmIChkb2N1bWVu
dCgpLT5mcmFtZSgpKQogICAgICAgICBkb2N1bWVudCgpLT5mcmFtZSgpLT5yZXZlYWxTZWxlY3Rp
b24oKTsKKyNlbmRpZgorfQorCisjaWYgRU5BQkxFKFdDU1MpCit2b2lkIEhUTUxUZXh0QXJlYUVs
ZW1lbnQ6OnNldFZhbHVlRnJvbVJlbmRlcmVyKGNvbnN0IFN0cmluZyYgdmFsdWUpCit7CisgICAg
SW5wdXRFbGVtZW50OjpzZXRWYWx1ZUZyb21SZW5kZXJlcihtX2RhdGEsIGRvY3VtZW50KCksIHZh
bHVlKTsKK30KKworU3RyaW5nIEhUTUxUZXh0QXJlYUVsZW1lbnQ6OmNvbnN0cmFpblZhbHVlKGNv
bnN0IFN0cmluZyYgcHJvcG9zZWRWYWx1ZSkgY29uc3QKK3sKKyAgICByZXR1cm4gSW5wdXRFbGVt
ZW50Ojpjb25zdHJhaW5WYWx1ZShtX2RhdGEsIHByb3Bvc2VkVmFsdWUsIG1fZGF0YS5tYXhMZW5n
dGgoKSk7CiB9CiAKK3ZvaWQgSFRNTFRleHRBcmVhRWxlbWVudDo6Y2FjaGVTZWxlY3Rpb24oaW50
IHN0YXJ0LCBpbnQgZW5kKQoreworICAgIG1fZGF0YS5zZXRDYWNoZWRTZWxlY3Rpb25TdGFydChz
dGFydCk7CisgICAgbV9kYXRhLnNldENhY2hlZFNlbGVjdGlvbkVuZChlbmQpOworfQorCit2b2lk
IEhUTUxUZXh0QXJlYUVsZW1lbnQ6OmRpc3BhdGNoRm9jdXNFdmVudCgpCit7CisgICAgSW5wdXRF
bGVtZW50OjpkaXNwYXRjaEZvY3VzRXZlbnQobV9kYXRhLCBkb2N1bWVudCgpKTsKKyAgICBIVE1M
Rm9ybUNvbnRyb2xFbGVtZW50V2l0aFN0YXRlOjpkaXNwYXRjaEZvY3VzRXZlbnQoKTsKK30KKyAK
K3ZvaWQgSFRNTFRleHRBcmVhRWxlbWVudDo6ZGlzcGF0Y2hCbHVyRXZlbnQoKQoreworICAgIElu
cHV0RWxlbWVudDo6ZGlzcGF0Y2hCbHVyRXZlbnQobV9kYXRhLCBkb2N1bWVudCgpKTsKKyAgICBI
VE1MRm9ybUNvbnRyb2xFbGVtZW50V2l0aFN0YXRlOjpkaXNwYXRjaEJsdXJFdmVudCgpOworfQor
I2VuZGlmCisKIHZvaWQgSFRNTFRleHRBcmVhRWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxlcihF
dmVudCogZXZlbnQpCiB7CisjaWYgRU5BQkxFKFdDU1MpCisgICAgaWYgKGV2ZW50LT50eXBlKCkg
PT0gZXZlbnROYW1lcygpLnRleHRJbnB1dEV2ZW50ICYmIGV2ZW50LT5pc1RleHRFdmVudCgpICYm
IHJlbmRlcmVyKCkgCisgICAgICAgICYmICFpc0NvbmZvcm1lZFRvSW5wdXRNYXNrKG1fZGF0YSwg
c3RhdGljX2Nhc3Q8VGV4dEV2ZW50Kj4oZXZlbnQpLT5kYXRhKClbMF0sIHNlbGVjdGlvblN0YXJ0
KCksIHN0YXRpY19jYXN0PFJlbmRlclRleHRDb250cm9sKj4ocmVuZGVyZXIoKSktPnRleHQoKS5s
ZW5ndGgoKSArIDEpKQorICAgICAgICByZXR1cm47CisjZW5kaWYKKwogICAgIGlmIChyZW5kZXJl
cigpICYmIChldmVudC0+aXNNb3VzZUV2ZW50KCkgfHwgZXZlbnQtPmlzRHJhZ0V2ZW50KCkgfHwg
ZXZlbnQtPmlzV2hlZWxFdmVudCgpIHx8IGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLmJs
dXJFdmVudCkpCiAgICAgICAgIHN0YXRpY19jYXN0PFJlbmRlclRleHRDb250cm9sTXVsdGlMaW5l
Kj4ocmVuZGVyZXIoKSktPmZvcndhcmRFdmVudChldmVudCk7CiAKQEAgLTI3Miw3ICszNDAsMTEg
QEAgdm9pZCBIVE1MVGV4dEFyZWFFbGVtZW50Ojp1cGRhdGVWYWx1ZSgpIAogICAgIEFTU0VSVChy
ZW5kZXJlcigpKTsKICAgICBtX3ZhbHVlID0gdG9SZW5kZXJUZXh0Q29udHJvbChyZW5kZXJlcigp
KS0+dGV4dCgpOwogICAgIGNvbnN0X2Nhc3Q8SFRNTFRleHRBcmVhRWxlbWVudCo+KHRoaXMpLT5z
ZXRGb3JtQ29udHJvbFZhbHVlTWF0Y2hlc1JlbmRlcmVyKHRydWUpOworI2lmIEVOQUJMRShXQ1NT
KQorICAgIG5vdGlmeUZvcm1TdGF0ZUNoYW5nZWQoKihjb25zdF9jYXN0PElucHV0RWxlbWVudERh
dGEqPigmbV9kYXRhKSksIGRvY3VtZW50KCkpOworI2Vsc2UKICAgICBub3RpZnlGb3JtU3RhdGVD
aGFuZ2VkKHRoaXMpOworI2VuZGlmCiB9CiAKIFN0cmluZyBIVE1MVGV4dEFyZWFFbGVtZW50Ojp2
YWx1ZSgpIGNvbnN0CkBAIC0zMDgsNyArMzgwLDExIEBAIHZvaWQgSFRNTFRleHRBcmVhRWxlbWVu
dDo6c2V0VmFsdWUoY29uc3QKICAgICB9CiAKICAgICBzZXROZWVkc1N0eWxlUmVjYWxjKCk7Cisj
aWYgRU5BQkxFKFdDU1MpCisgICAgbm90aWZ5Rm9ybVN0YXRlQ2hhbmdlZChtX2RhdGEsIGRvY3Vt
ZW50KCkpOworI2Vsc2UKICAgICBub3RpZnlGb3JtU3RhdGVDaGFuZ2VkKHRoaXMpOworI2VuZGlm
CiB9CiAKIFN0cmluZyBIVE1MVGV4dEFyZWFFbGVtZW50OjpkZWZhdWx0VmFsdWUoKSBjb25zdApA
QCAtMzg1LDkgKzQ2MSwxNyBAQCB2b2lkIEhUTUxUZXh0QXJlYUVsZW1lbnQ6OnNldFJvd3MoaW50
IHJvCiAKIFZpc2libGVTZWxlY3Rpb24gSFRNTFRleHRBcmVhRWxlbWVudDo6c2VsZWN0aW9uKCkg
Y29uc3QKIHsKKyNpZiBFTkFCTEUoV0NTUykKKyAgICBpZiAoIXJlbmRlcmVyKCkgfHwgbV9kYXRh
LmNhY2hlZFNlbGVjdGlvblN0YXJ0KCkgPT0gLTEgfHwgbV9kYXRhLmNhY2hlZFNlbGVjdGlvbkVu
ZCgpID09IC0xKQorI2Vsc2UKICAgICBpZiAoIXJlbmRlcmVyKCkgfHwgbV9jYWNoZWRTZWxlY3Rp
b25TdGFydCA8IDAgfHwgbV9jYWNoZWRTZWxlY3Rpb25FbmQgPCAwKQorI2VuZGlmCiAgICAgICAg
IHJldHVybiBWaXNpYmxlU2VsZWN0aW9uKCk7CisjaWYgRU5BQkxFKFdDU1MpCisgICAgcmV0dXJu
IHRvUmVuZGVyVGV4dENvbnRyb2wocmVuZGVyZXIoKSktPnNlbGVjdGlvbihtX2RhdGEuY2FjaGVk
U2VsZWN0aW9uU3RhcnQoKSwgbV9kYXRhLmNhY2hlZFNlbGVjdGlvbkVuZCgpKTsKKyNlbHNlCiAg
ICAgcmV0dXJuIHRvUmVuZGVyVGV4dENvbnRyb2wocmVuZGVyZXIoKSktPnNlbGVjdGlvbihtX2Nh
Y2hlZFNlbGVjdGlvblN0YXJ0LCBtX2NhY2hlZFNlbGVjdGlvbkVuZCk7CisjZW5kaWYKIH0KIAog
Ym9vbCBIVE1MVGV4dEFyZWFFbGVtZW50OjpzaG91bGRVc2VJbnB1dE1ldGhvZCgpIGNvbnN0Cklu
ZGV4OiBXZWJDb3JlL2h0bWwvSFRNTFRleHRBcmVhRWxlbWVudC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvaHRtbC9IVE1MVGV4dEFyZWFFbGVtZW50LmgJKHJldmlzaW9uIDQzNjgxKQorKysgV2Vi
Q29yZS9odG1sL0hUTUxUZXh0QXJlYUVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMjYsMTEg
KzI2LDE5IEBACiAKICNpbmNsdWRlICJIVE1MRm9ybUNvbnRyb2xFbGVtZW50LmgiCiAKKyNpZiBF
TkFCTEUoV0NTUykKKyNpbmNsdWRlICJJbnB1dEVsZW1lbnQuaCIKKyNlbmRpZgorCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKIGNsYXNzIFZpc2libGVTZWxlY3Rpb247CiAKKyNpZiBFTkFCTEUoV0NT
UykKK2NsYXNzIEhUTUxUZXh0QXJlYUVsZW1lbnQgOiBwdWJsaWMgSFRNTEZvcm1Db250cm9sRWxl
bWVudFdpdGhTdGF0ZSwgcHVibGljIElucHV0RWxlbWVudCB7CisjZWxzZQogY2xhc3MgSFRNTFRl
eHRBcmVhRWxlbWVudCA6IHB1YmxpYyBIVE1MRm9ybUNvbnRyb2xFbGVtZW50V2l0aFN0YXRlIHsK
KyNlbmRpZgogcHVibGljOgogICAgIEhUTUxUZXh0QXJlYUVsZW1lbnQoY29uc3QgUXVhbGlmaWVk
TmFtZSYsIERvY3VtZW50KiwgSFRNTEZvcm1FbGVtZW50KiA9IDApOwogCkBAIC03MCw2ICs3OCwz
MCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBib29sIGlzTW91c2VGb2N1c2FibGUoKSBjb25zdDsK
ICAgICB2aXJ0dWFsIGJvb2wgaXNLZXlib2FyZEZvY3VzYWJsZShLZXlib2FyZEV2ZW50KikgY29u
c3Q7CiAgICAgdmlydHVhbCB2b2lkIHVwZGF0ZUZvY3VzQXBwZWFyYW5jZShib29sIHJlc3RvcmVQ
cmV2aW91c1NlbGVjdGlvbik7CisjaWYgRU5BQkxFKFdDU1MpCisgICAgdmlydHVhbCB2b2lkIGRp
c3BhdGNoRm9jdXNFdmVudCgpOworICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRjaEJsdXJFdmVudCgp
OworCisgICAgdmlydHVhbCBib29sIGlzQ2hlY2tlZCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9
CisgICAgdmlydHVhbCBib29sIGlzQXV0b2ZpbGxlZCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9
IAorICAgIHZpcnR1YWwgYm9vbCBpc0luZGV0ZXJtaW5hdGUoKSBjb25zdCB7IHJldHVybiBmYWxz
ZTsgfQorICAgIHZpcnR1YWwgYm9vbCBpc1JhZGlvQnV0dG9uKCkgY29uc3QgeyByZXR1cm4gZmFs
c2U7IH0KKyAgICB2aXJ0dWFsIGJvb2wgaXNUZXh0RmllbGQoKSBjb25zdCB7IHJldHVybiB0cnVl
OyB9CisgICAgdmlydHVhbCBib29sIGlzU2VhcmNoRmllbGQoKSBjb25zdCB7IHJldHVybiBmYWxz
ZTsgfQorICAgIHZpcnR1YWwgYm9vbCBpc0lucHV0VHlwZUhpZGRlbigpIGNvbnN0IHsgcmV0dXJu
IGZhbHNlOyB9CisgICAgdmlydHVhbCBib29sIGlzUGFzc3dvcmRGaWVsZCgpIGNvbnN0IHsgcmV0
dXJuIGZhbHNlOyB9CisgICAgdmlydHVhbCBib29sIHNlYXJjaEV2ZW50c1Nob3VsZEJlRGlzcGF0
Y2hlZCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdmlydHVhbCBib29sIHBsYWNlaG9s
ZGVyU2hvdWxkQmVWaXNpYmxlKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKworICAgIHZpcnR1
YWwgaW50IHNpemUoKSBjb25zdCB7IHJldHVybiAwOyB9CisgICAgdmlydHVhbCBTdHJpbmcgcGxh
Y2Vob2xkZXJWYWx1ZSgpIGNvbnN0IHsgcmV0dXJuIFN0cmluZygpOyB9IAorCisgICAgdmlydHVh
bCBTdHJpbmcgcGxhY2Vob2xkZXIoKSBjb25zdCB7IHJldHVybiBTdHJpbmcoKTsgfQorICAgIHZp
cnR1YWwgdm9pZCBzZXRQbGFjZWhvbGRlcihjb25zdCBTdHJpbmcmKSB7fTsKKworICAgIHZpcnR1
YWwgU3RyaW5nIGNvbnN0cmFpblZhbHVlKGNvbnN0IFN0cmluZyYpIGNvbnN0OworICAgIHZpcnR1
YWwgdm9pZCBzZXRWYWx1ZUZyb21SZW5kZXJlcihjb25zdCBTdHJpbmcmKTsKKyNlbmRpZgogCiAg
ICAgU3RyaW5nIHZhbHVlKCkgY29uc3Q7CiAgICAgdm9pZCBzZXRWYWx1ZShjb25zdCBTdHJpbmcm
KTsKQEAgLTg2LDcgKzExOCwxMSBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRDb2xzKGludCk7CiAg
ICAgdm9pZCBzZXRSb3dzKGludCk7CiAgICAgCisjaWYgRU5BQkxFKFdDU1MpCisgICAgdm9pZCBj
YWNoZVNlbGVjdGlvbihpbnQgcywgaW50IGUpOworI2Vsc2UKICAgICB2b2lkIGNhY2hlU2VsZWN0
aW9uKGludCBzLCBpbnQgZSkgeyBtX2NhY2hlZFNlbGVjdGlvblN0YXJ0ID0gczsgbV9jYWNoZWRT
ZWxlY3Rpb25FbmQgPSBlOyB9OworI2VuZGlmCiAgICAgVmlzaWJsZVNlbGVjdGlvbiBzZWxlY3Rp
b24oKSBjb25zdDsKIAogICAgIHZpcnR1YWwgYm9vbCBzaG91bGRVc2VJbnB1dE1ldGhvZCgpIGNv
bnN0OwpAQCAtMTAwLDggKzEzNiwxMiBAQCBwcml2YXRlOgogICAgIGludCBtX2NvbHM7CiAgICAg
V3JhcE1ldGhvZCBtX3dyYXA7CiAgICAgbXV0YWJsZSBTdHJpbmcgbV92YWx1ZTsKKyNpZiBFTkFC
TEUoV0NTUykKKyAgICBJbnB1dEVsZW1lbnREYXRhIG1fZGF0YTsKKyNlbHNlCiAgICAgaW50IG1f
Y2FjaGVkU2VsZWN0aW9uU3RhcnQ7CiAgICAgaW50IG1fY2FjaGVkU2VsZWN0aW9uRW5kOworI2Vu
ZGlmCiB9OwogCiB9IC8vbmFtZXNwYWNlCkluZGV4OiBXZWJDb3JlL3dtbC9XTUxJbnB1dEVsZW1l
bnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvd21sL1dNTElucHV0RWxlbWVudC5jcHAJKHJl
dmlzaW9uIDQzNjgxKQorKysgV2ViQ29yZS93bWwvV01MSW5wdXRFbGVtZW50LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNDEsOCArNDEsMTAgQEAgV01MSW5wdXRFbGVtZW50OjpXTUxJbnB1dEVsZW1l
bnQoY29uc3QgUQogICAgIDogV01MRm9ybUNvbnRyb2xFbGVtZW50KHRhZ05hbWUsIGRvYykKICAg
ICAsIG1fZGF0YSh0aGlzLCB0aGlzKQogICAgICwgbV9pc1Bhc3N3b3JkRmllbGQoZmFsc2UpCisj
aWYgIUVOQUJMRShXQ1NTKQogICAgICwgbV9pc0VtcHR5T2soZmFsc2UpCiAgICAgLCBtX251bU9m
Q2hhcnNBbGxvd2VkQnlNYXNrKDApCisjZW5kaWYKIHsKIH0KIApAQCAtNTIsMTEgKzU0LDEzIEBA
IFdNTElucHV0RWxlbWVudDo6fldNTElucHV0RWxlbWVudCgpCiAgICAgICAgIGRvY3VtZW50KCkt
PnVucmVnaXN0ZXJGb3JEb2N1bWVudEFjdGl2YXRpb25DYWxsYmFja3ModGhpcyk7CiB9CiAKKyNp
ZiAhRU5BQkxFKFdDU1MpCiBzdGF0aWMgY29uc3QgQXRvbWljU3RyaW5nJiBmb3JtYXRDb2Rlcygp
CiB7CiAgICAgREVGSU5FX1NUQVRJQ19MT0NBTChBdG9taWNTdHJpbmcsIGNvZGVzLCAoIkFhTm5Y
eE1tIikpOwogICAgIHJldHVybiBjb2RlczsKIH0KKyNlbmRpZgogCiBib29sIFdNTElucHV0RWxl
bWVudDo6aXNLZXlib2FyZEZvY3VzYWJsZShLZXlib2FyZEV2ZW50KikgY29uc3QKIHsKQEAgLTc2
LDE5ICs4MCwyNyBAQCB2b2lkIFdNTElucHV0RWxlbWVudDo6ZGlzcGF0Y2hGb2N1c0V2ZW50CiAK
IHZvaWQgV01MSW5wdXRFbGVtZW50OjpkaXNwYXRjaEJsdXJFdmVudCgpCiB7CisjaWYgRU5BQkxF
KFdDU1MpCisgICAgSW5wdXRFbGVtZW50OjpkaXNwYXRjaEJsdXJFdmVudChtX2RhdGEsIGRvY3Vt
ZW50KCkpOworI2VuZGlmCisKICAgICAvLyBGaXJzdGx5IGNoZWNrIGlmIGl0IGlzIGFsbG93ZWQg
dG8gbGVhdmUgdGhpcyBpbnB1dCBmaWVsZAogICAgIFN0cmluZyB2YWwgPSB2YWx1ZSgpOworI2lm
ICFFTkFCTEUoV0NTUykKICAgICBpZiAoKCFtX2lzRW1wdHlPayAmJiB2YWwuaXNFbXB0eSgpKSB8
fCAhaXNDb25mb3JtZWRUb0lucHV0TWFzayh2YWwpKSB7CiAgICAgICAgIHVwZGF0ZUZvY3VzQXBw
ZWFyYW5jZSh0cnVlKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KKyNlbmRpZgogCiAgICAgLy8g
dXBkYXRlIHRoZSBuYW1lIHZhcmlhYmxlIG9mIFdNTCBpbnB1dCBlbG1lbmV0CiAgICAgU3RyaW5n
IG5hbWVWYXJpYWJsZSA9IGZvcm1Db250cm9sTmFtZSgpOwogICAgIGlmICghbmFtZVZhcmlhYmxl
LmlzRW1wdHkoKSkKICAgICAgICAgd21sUGFnZVN0YXRlRm9yRG9jdW1lbnQoZG9jdW1lbnQoKSkt
PnN0b3JlVmFyaWFibGUobmFtZVZhcmlhYmxlLCB2YWwpOyAKIAorI2lmICFFTkFCTEUoV0NTUykK
ICAgICBJbnB1dEVsZW1lbnQ6OmRpc3BhdGNoQmx1ckV2ZW50KG1fZGF0YSwgZG9jdW1lbnQoKSk7
CisjZW5kaWYKICAgICBXTUxFbGVtZW50OjpkaXNwYXRjaEJsdXJFdmVudCgpOwogfQogCkBAIC0y
MDIsOSArMjE0LDI1IEBAIHZvaWQgV01MSW5wdXRFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnUK
ICAgICBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gSFRNTE5hbWVzOjpzaXplQXR0cikKICAgICAg
ICAgSW5wdXRFbGVtZW50OjpwYXJzZVNpemVBdHRyaWJ1dGUobV9kYXRhLCBhdHRyKTsKICAgICBl
bHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gV01MTmFtZXM6OmZvcm1hdEF0dHIpCisjaWYgRU5BQkxF
KFdDU1MpCisgICAgeworICAgICAgICBTdHJpbmcgaW5wdXRNYXNrID0gcGFyc2VWYWx1ZUZvcmJp
ZGRpbmdWYXJpYWJsZVJlZmVyZW5jZXMoYXR0ci0+dmFsdWUoKSk7CisgICAgICAgIG1fZGF0YS5z
ZXRJbnB1dEZvcm1hdE1hc2sodmFsaWRhdGVJbnB1dE1hc2sobV9kYXRhLCBpbnB1dE1hc2spKTsg
CisgICAgfQorI2Vsc2UKICAgICAgICAgbV9mb3JtYXRNYXNrID0gdmFsaWRhdGVJbnB1dE1hc2so
cGFyc2VWYWx1ZUZvcmJpZGRpbmdWYXJpYWJsZVJlZmVyZW5jZXMoYXR0ci0+dmFsdWUoKSkpOwor
I2VuZGlmCiAgICAgZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IFdNTE5hbWVzOjplbXB0eW9rQXR0
cikKKyNpZiBFTkFCTEUoV0NTUykKKyAgICB7CisgICAgICAgIGlmIChhdHRyLT52YWx1ZSgpID09
ICJ0cnVlIikKKyAgICAgICAgICAgIG1fZGF0YS5zZXRJbnB1dFJlcXVpcmVtZW50U3RhdGUoSW5w
dXRFbGVtZW50RGF0YTo6SW5wdXROb3RSZXF1aXJlZCk7CisgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgIG1fZGF0YS5zZXRJbnB1dFJlcXVpcmVtZW50U3RhdGUoSW5wdXRFbGVtZW50RGF0YTo6SW5w
dXRSZXF1aXJlZCk7CisgICAgfQorI2Vsc2UKICAgICAgICAgbV9pc0VtcHR5T2sgPSAoYXR0ci0+
dmFsdWUoKSA9PSAidHJ1ZSIpOworI2VuZGlmCiAgICAgZWxzZQogICAgICAgICBXTUxFbGVtZW50
OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKTsKIApAQCAtMjcyLDcgKzMwMCwxMSBAQCB2b2lk
IFdNTElucHV0RWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxlCiAgICAgICAgIFRleHRFdmVudCog
dGV4dEV2ZW50ID0gc3RhdGljX2Nhc3Q8VGV4dEV2ZW50Kj4oZXZ0KTsKICAgICAgICAgaWYgKHRl
eHRFdmVudC0+ZGF0YSgpID09ICJcbiIpCiAgICAgICAgICAgICBjbGlja0RlZmF1bHRGb3JtQnV0
dG9uID0gdHJ1ZTsKKyNpZiBFTkFCTEUoV0NTUykKKyAgICAgICAgZWxzZSBpZiAocmVuZGVyZXIo
KSAmJiAhaXNDb25mb3JtZWRUb0lucHV0TWFzayhtX2RhdGEsIHRleHRFdmVudC0+ZGF0YSgpWzBd
LCBzZWxlY3Rpb25TdGFydCgpLCB0b1JlbmRlclRleHRDb250cm9sKHJlbmRlcmVyKCkpLT50ZXh0
KCkubGVuZ3RoKCkgKyAxKSkKKyNlbHNlCiAgICAgICAgIGVsc2UgaWYgKHJlbmRlcmVyKCkgJiYg
IWlzQ29uZm9ybWVkVG9JbnB1dE1hc2sodGV4dEV2ZW50LT5kYXRhKClbMF0sIHRvUmVuZGVyVGV4
dENvbnRyb2wocmVuZGVyZXIoKSktPnRleHQoKS5sZW5ndGgoKSArIDEpKQorI2VuZGlmCiAgICAg
ICAgICAgICAvLyBJZiB0aGUgaW5wdXRlZCBjaGFyIGRvZXNuJ3QgY29uZm9ybSB0byB0aGUgaW5w
dXQgbWFzaywgc3RvcCBoYW5kbGluZyAKICAgICAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC0z
NjksOSArNDAxLDE3IEBAIHZvaWQgV01MSW5wdXRFbGVtZW50Ojppbml0KCkKICAgICBpZiAoIW5h
bWVWYXJpYWJsZS5pc0VtcHR5KCkpCiAgICAgICAgIHZhcmlhYmxlVmFsdWUgPSBwYWdlU2F0ZS0+
Z2V0VmFyaWFibGUobmFtZVZhcmlhYmxlKTsKIAorI2lmIEVOQUJMRShXQ1NTKQorICAgIGlmICh2
YXJpYWJsZVZhbHVlLmlzRW1wdHkoKSB8fCAhaXNDb25mb3JtZWRUb0lucHV0TWFzayhtX2RhdGEs
IHZhcmlhYmxlVmFsdWUpKSB7CisjZWxzZQogICAgIGlmICh2YXJpYWJsZVZhbHVlLmlzRW1wdHko
KSB8fCAhaXNDb25mb3JtZWRUb0lucHV0TWFzayh2YXJpYWJsZVZhbHVlKSkgeworI2VuZGlmCiAg
ICAgICAgIFN0cmluZyB2YWwgPSB2YWx1ZSgpOworI2lmIEVOQUJMRShXQ1NTKQorICAgICAgICBp
ZiAoaXNDb25mb3JtZWRUb0lucHV0TWFzayhtX2RhdGEsIHZhbCkpCisjZWxzZQogICAgICAgICBp
ZiAoaXNDb25mb3JtZWRUb0lucHV0TWFzayh2YWwpKQorI2VuZGlmCiAgICAgICAgICAgICB2YXJp
YWJsZVZhbHVlID0gdmFsOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICB2YXJpYWJsZVZhbHVl
ID0gIiI7CkBAIC0zODAsMTQgKzQyMCwyNSBAQCB2b2lkIFdNTElucHV0RWxlbWVudDo6aW5pdCgp
CiAgICAgfQogICAgIHNldFZhbHVlKHZhcmlhYmxlVmFsdWUpOwogIAotICAgIGlmICghaGFzQXR0
cmlidXRlKFdNTE5hbWVzOjplbXB0eW9rQXR0cikpIHsKLSAgICAgICAgaWYgKG1fZm9ybWF0TWFz
ay5pc0VtcHR5KCkgfHwgCi0gICAgICAgICAgICAvLyBjaGVjayBpZiB0aGUgZm9ybWF0IGNvZGVz
IGlzIGp1c3QgIipmIgotICAgICAgICAgICAobV9mb3JtYXRNYXNrLmxlbmd0aCgpID09IDIgJiYg
bV9mb3JtYXRNYXNrWzBdID09ICcqJyAmJiBmb3JtYXRDb2RlcygpLmZpbmQobV9mb3JtYXRNYXNr
WzFdKSAhPSAtMSkpCi0gICAgICAgICAgICBtX2lzRW1wdHlPayA9IHRydWU7Ci0gICAgfQorI2lm
ICFFTkFCTEUoV0NTUykKKyAgICBpZiAoIWhhc0F0dHJpYnV0ZShXTUxOYW1lczo6ZW1wdHlva0F0
dHIpCisgICAgICAgIC8vIENoZWNrIGlmIHRoZSBmb3JtYXQgY29kZXMgaXMgZW1wdHkgb3IganVz
dCB0aGUgY29kZSBvZiAiKmYiCisgICAgICAgICYmIChtX2Zvcm1hdE1hc2suaXNFbXB0eSgpIHx8
IChtX2Zvcm1hdE1hc2subGVuZ3RoKCkgPT0gMiAmJiBtX2Zvcm1hdE1hc2tbMF0gPT0gJyonICYm
IGZvcm1hdENvZGVzKCkuZmluZChtX2Zvcm1hdE1hc2tbMV0pICE9IC0xKSkpCisgICAgICAgIG1f
aXNFbXB0eU9rID0gdHJ1ZTsKKyNlbmRpZgogfQogCisjaWYgRU5BQkxFKFdDU1MpCitpbnQgV01M
SW5wdXRFbGVtZW50OjpzZWxlY3Rpb25TdGFydCgpIGNvbnN0Cit7CisgICAgaWYgKGRvY3VtZW50
KCktPmZvY3VzZWROb2RlKCkgIT0gdGhpcyAmJiBtX2RhdGEuY2FjaGVkU2VsZWN0aW9uU3RhcnQo
KSAhPSAtMSkKKyAgICAgICAgcmV0dXJuIG1fZGF0YS5jYWNoZWRTZWxlY3Rpb25TdGFydCgpOwor
ICAgIGlmICghcmVuZGVyZXIoKSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIHN0YXRp
Y19jYXN0PFJlbmRlclRleHRDb250cm9sKj4ocmVuZGVyZXIoKSktPnNlbGVjdGlvblN0YXJ0KCk7
Cit9CisKKyNlbHNlCiBTdHJpbmcgV01MSW5wdXRFbGVtZW50Ojp2YWxpZGF0ZUlucHV0TWFzayhj
b25zdCBTdHJpbmcmIGlucHV0TWFzaykKIHsKICAgICBib29sIGlzVmFsaWQgPSB0cnVlOwpAQCAt
NTIxLDYgKzU3Miw3IEBAIHVuc2lnbmVkIFdNTElucHV0RWxlbWVudDo6Y3Vyc29yUG9zaXRpb24K
ICAKICAgICByZXR1cm4gaW5kZXg7CiB9CisjZW5kaWYKIAogfQogCkluZGV4OiBXZWJDb3JlL3dt
bC9XTUxJbnB1dEVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3dtbC9XTUxJbnB1dEVs
ZW1lbnQuaAkocmV2aXNpb24gNDM2ODEpCisrKyBXZWJDb3JlL3dtbC9XTUxJbnB1dEVsZW1lbnQu
aAkod29ya2luZyBjb3B5KQpAQCAtNTksNyArNTksNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBT
dHJpbmcgdmFsdWUoKSBjb25zdDsKICAgICB2aXJ0dWFsIHZvaWQgc2V0VmFsdWUoY29uc3QgU3Ry
aW5nJik7CiAgICAgdmlydHVhbCBTdHJpbmcgcGxhY2Vob2xkZXIoKSBjb25zdCB7IHJldHVybiBT
dHJpbmcoKTsgfQotICAgIHZpcnR1YWwgdm9pZCBzZXRQbGFjZWhvbGRlcihjb25zdHIgU3RyaW5n
JikgeyB9CisgICAgdmlydHVhbCB2b2lkIHNldFBsYWNlaG9sZGVyKGNvbnN0IFN0cmluZyYpIHsg
fQogICAgIHZpcnR1YWwgdm9pZCBzZXRWYWx1ZUZyb21SZW5kZXJlcihjb25zdCBTdHJpbmcmKTsK
IAogICAgIHZpcnR1YWwgYm9vbCBzYXZlRm9ybUNvbnRyb2xTdGF0ZShTdHJpbmcmIHZhbHVlKSBj
b25zdDsKQEAgLTg4LDE5ICs4OCwyNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHdpbGxN
b3ZlVG9OZXdPd25lckRvY3VtZW50KCk7CiAgICAgdmlydHVhbCB2b2lkIGRpZE1vdmVUb05ld093
bmVyRG9jdW1lbnQoKTsKIAorI2lmIEVOQUJMRShXQ1NTKQorICAgIGludCBzZWxlY3Rpb25TdGFy
dCgpIGNvbnN0OworI2Vsc2UKICAgICBib29sIGlzQ29uZm9ybWVkVG9JbnB1dE1hc2soY29uc3Qg
U3RyaW5nJik7CiAgICAgYm9vbCBpc0NvbmZvcm1lZFRvSW5wdXRNYXNrKFVDaGFyLCB1bnNpZ25l
ZCwgYm9vbCBpc1VzZXJJbnB1dCA9IHRydWUpOworI2VuZGlmCiAKIHByaXZhdGU6CiAgICAgdm9p
ZCBpbml0KCk7CisjaWYgIUVOQUJMRShXQ1NTKQogICAgIFN0cmluZyB2YWxpZGF0ZUlucHV0TWFz
ayhjb25zdCBTdHJpbmcmKTsKICAgICB1bnNpZ25lZCBjdXJzb3JQb3NpdGlvblRvTWFza0luZGV4
KHVuc2lnbmVkKTsKKyNlbmRpZgogCiAgICAgSW5wdXRFbGVtZW50RGF0YSBtX2RhdGE7CiAgICAg
Ym9vbCBtX2lzUGFzc3dvcmRGaWVsZDsKKyNpZiAhRU5BQkxFKFdDU1MpCiAgICAgYm9vbCBtX2lz
RW1wdHlPazsKICAgICBTdHJpbmcgbV9mb3JtYXRNYXNrOwogICAgIHVuc2lnbmVkIG1fbnVtT2ZD
aGFyc0FsbG93ZWRCeU1hc2s7CisjZW5kaWYKIH07CiAKIH0K
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>30443</attachid>
            <date>2009-05-18 01:58:38 -0700</date>
            <delta_ts>2009-05-22 22:16:37 -0700</delta_ts>
            <desc>Latest Updated patch for code change</desc>
            <filename>WCSSInputChange.patch</filename>
            <type>text/plain</type>
            <size>40745</size>
            <attacher name="yichao.yin">yichao.yin</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0MzgxOSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsODQgQEAKKzIwMDktMDUtMTggIFlpY2hhbyBZaW4gIDx5aWNoYW8ueWluQHRvcmNo
bW9iaWxlLmNvbS5jbj4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBBZGQgV0NTUyBpbnB1dCBleHRlbnNpb24gc3VwcG9ydCB0byBXZWJraXQKKyAgICAg
ICAgV0NTUyBpbnB1dCBleHRlbnNpb24gaXMgb25lIG9mIHRoZSBXQVAgc3BlY2lmaWMgZXh0ZW5z
dGlvbnMgdG8gQ1NTMi4KKyAgICAgICAgSXQgY29uc2lzdHMgb2YgdHdvIFdDU1MgcHJvcGVydGll
czogLXdhcC1pbnB1dC1mb3JtYXQgYW5kIC13YXAtaW5wdXQtcmVxdWlyZWQKKyAgICAgICAgcmVm
ZXIgdG8gV0FQLTIzOS1XQ1NTLTIwMDExMDI2LWEucGRmCisKKyAgICAgICAgVGhpcyBjaGFuZ2Ug
ZGVwZW5kcyBvbiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjM0NTIK
KworICAgICAgICBUZXN0czogZmFzdC93Y3NzL2lucHV0ZWxlbWVudC1pbnB1dGZvcm1hdC54aHRt
bAorICAgICAgICAgICAgICAgZmFzdC93Y3NzL2lucHV0ZWxlbWVudC1pbnB1dHJlcXVpcmVkLnho
dG1sCisgICAgICAgICAgICAgICBmYXN0L3djc3MvdGV4dGFyZWEtaW5wdXRmb3JtYXQueGh0bWwK
KyAgICAgICAgICAgICAgIGZhc3Qvd2Nzcy90ZXh0YXJlYS1pbnB1dHJlcXVpcmVkLnhodG1sCisK
KyAgICAgICAgKiBXZWJDb3JlLnBybzoKKyAgICAgICAgKiBjc3MvQ1NTUGFyc2VyLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkNTU1BhcnNlcjo6cGFyc2VWYWx1ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpDU1NQYXJzZXI6OnBhcnNlV0NTU0lucHV0UHJvcGVydHkpOgorICAgICAgICAqIGNzcy9DU1NQ
YXJzZXIuaDoKKyAgICAgICAgKiBjc3MvQ1NTUHJvcGVydHlOYW1lcy5pbjoKKyAgICAgICAgKiBk
b20vSW5wdXRFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmZvcm1hdENvZGVzKToKKyAg
ICAgICAgKFdlYkNvcmU6OmN1cnNvclBvc2l0aW9uVG9NYXNrSW5kZXgpOgorICAgICAgICAoV2Vi
Q29yZTo6SW5wdXRFbGVtZW50Ojppc0NvbmZvcm1lZFRvSW5wdXRNYXNrKToKKyAgICAgICAgKFdl
YkNvcmU6OklucHV0RWxlbWVudDo6dmFsaWRhdGVJbnB1dE1hc2spOgorICAgICAgICAoV2ViQ29y
ZTo6SW5wdXRFbGVtZW50Ojp1cGRhdGVJbnB1dFByb3BlcnRpZXNGcm9tV0NTUyk6CisgICAgICAg
IChXZWJDb3JlOjpJbnB1dEVsZW1lbnQ6OmRpc3BhdGNoRm9jdXNFdmVudCk6CisgICAgICAgIChX
ZWJDb3JlOjpJbnB1dEVsZW1lbnQ6OmRpc3BhdGNoQmx1ckV2ZW50KToKKyAgICAgICAgKFdlYkNv
cmU6OklucHV0RWxlbWVudERhdGE6OklucHV0RWxlbWVudERhdGEpOgorICAgICAgICAoV2ViQ29y
ZTo6dG9JbnB1dEVsZW1lbnQpOgorICAgICAgICAqIGRvbS9JbnB1dEVsZW1lbnQuaDoKKyAgICAg
ICAgKFdlYkNvcmU6OklucHV0RWxlbWVudERhdGE6Oik6CisgICAgICAgIChXZWJDb3JlOjpJbnB1
dEVsZW1lbnREYXRhOjppbnB1dFJlcXVpcmVtZW50U3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6
SW5wdXRFbGVtZW50RGF0YTo6c2V0SW5wdXRSZXF1aXJlbWVudFN0YXRlKToKKyAgICAgICAgKFdl
YkNvcmU6OklucHV0RWxlbWVudERhdGE6OmlucHV0Rm9ybWF0TWFzayk6CisgICAgICAgIChXZWJD
b3JlOjpJbnB1dEVsZW1lbnREYXRhOjpzZXRJbnB1dEZvcm1hdE1hc2spOgorICAgICAgICAoV2Vi
Q29yZTo6SW5wdXRFbGVtZW50RGF0YTo6YWxsb3dlZElucHV0Q2hhcnNNYXhMZW5ndGgpOgorICAg
ICAgICAoV2ViQ29yZTo6SW5wdXRFbGVtZW50RGF0YTo6c2V0QWxsb3dlZElucHV0Q2hhcnNNYXhM
ZW5ndGgpOgorICAgICAgICAqIGh0bWwvSFRNTElucHV0RWxlbWVudC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpIVE1MSW5wdXRFbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVyKToKKyAgICAgICAg
KiBodG1sL0hUTUxUZXh0QXJlYUVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFRl
eHRBcmVhRWxlbWVudDo6SFRNTFRleHRBcmVhRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpI
VE1MVGV4dEFyZWFFbGVtZW50OjpzZWxlY3Rpb25TdGFydCk6CisgICAgICAgIChXZWJDb3JlOjpI
VE1MVGV4dEFyZWFFbGVtZW50OjpzZWxlY3Rpb25FbmQpOgorICAgICAgICAoV2ViQ29yZTo6SFRN
TFRleHRBcmVhRWxlbWVudDo6c2V0U2VsZWN0aW9uUmFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6
SFRNTFRleHRBcmVhRWxlbWVudDo6dXBkYXRlRm9jdXNBcHBlYXJhbmNlKToKKyAgICAgICAgKFdl
YkNvcmU6OkhUTUxUZXh0QXJlYUVsZW1lbnQ6OnNldFZhbHVlRnJvbVJlbmRlcmVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OkhUTUxUZXh0QXJlYUVsZW1lbnQ6OmNvbnN0cmFpblZhbHVlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkhUTUxUZXh0QXJlYUVsZW1lbnQ6OmNhY2hlU2VsZWN0aW9uKToKKyAgICAg
ICAgKFdlYkNvcmU6OkhUTUxUZXh0QXJlYUVsZW1lbnQ6OmRpc3BhdGNoRm9jdXNFdmVudCk6Cisg
ICAgICAgIChXZWJDb3JlOjpIVE1MVGV4dEFyZWFFbGVtZW50OjpkaXNwYXRjaEJsdXJFdmVudCk6
CisgICAgICAgIChXZWJDb3JlOjpIVE1MVGV4dEFyZWFFbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5k
bGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxUZXh0QXJlYUVsZW1lbnQ6OnVwZGF0ZVZhbHVl
KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxUZXh0QXJlYUVsZW1lbnQ6OnNldFZhbHVlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkhUTUxUZXh0QXJlYUVsZW1lbnQ6OnNlbGVjdGlvbik6CisgICAgICAg
ICogaHRtbC9IVE1MVGV4dEFyZWFFbGVtZW50Lmg6CisgICAgICAgIChXZWJDb3JlOjpIVE1MVGV4
dEFyZWFFbGVtZW50OjpIVE1MVGV4dEFyZWFFbGVtZW50Ojppc0NoZWNrZWQpOgorICAgICAgICAo
V2ViQ29yZTo6SFRNTFRleHRBcmVhRWxlbWVudDo6SFRNTFRleHRBcmVhRWxlbWVudDo6aXNBdXRv
ZmlsbGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxUZXh0QXJlYUVsZW1lbnQ6OkhUTUxUZXh0
QXJlYUVsZW1lbnQ6OmlzSW5kZXRlcm1pbmF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MVGV4
dEFyZWFFbGVtZW50OjpIVE1MVGV4dEFyZWFFbGVtZW50Ojppc1JhZGlvQnV0dG9uKToKKyAgICAg
ICAgKFdlYkNvcmU6OkhUTUxUZXh0QXJlYUVsZW1lbnQ6OkhUTUxUZXh0QXJlYUVsZW1lbnQ6Omlz
VGV4dEZpZWxkKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxUZXh0QXJlYUVsZW1lbnQ6OkhUTUxU
ZXh0QXJlYUVsZW1lbnQ6OmlzU2VhcmNoRmllbGQpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFRl
eHRBcmVhRWxlbWVudDo6SFRNTFRleHRBcmVhRWxlbWVudDo6aXNJbnB1dFR5cGVIaWRkZW4pOgor
ICAgICAgICAoV2ViQ29yZTo6SFRNTFRleHRBcmVhRWxlbWVudDo6SFRNTFRleHRBcmVhRWxlbWVu
dDo6aXNQYXNzd29yZEZpZWxkKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxUZXh0QXJlYUVsZW1l
bnQ6OkhUTUxUZXh0QXJlYUVsZW1lbnQ6OnNlYXJjaEV2ZW50c1Nob3VsZEJlRGlzcGF0Y2hlZCk6
CisgICAgICAgIChXZWJDb3JlOjpIVE1MVGV4dEFyZWFFbGVtZW50OjpIVE1MVGV4dEFyZWFFbGVt
ZW50OjpwbGFjZWhvbGRlclNob3VsZEJlVmlzaWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1M
VGV4dEFyZWFFbGVtZW50OjpIVE1MVGV4dEFyZWFFbGVtZW50OjpzaXplKToKKyAgICAgICAgKFdl
YkNvcmU6OkhUTUxUZXh0QXJlYUVsZW1lbnQ6OkhUTUxUZXh0QXJlYUVsZW1lbnQ6OnBsYWNlaG9s
ZGVyVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFRleHRBcmVhRWxlbWVudDo6SFRNTFRl
eHRBcmVhRWxlbWVudDo6cGxhY2Vob2xkZXIpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFRleHRB
cmVhRWxlbWVudDo6SFRNTFRleHRBcmVhRWxlbWVudDo6c2V0UGxhY2Vob2xkZXIpOgorICAgICAg
ICAqIHdtbC9XTUxJbnB1dEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V01MSW5wdXRF
bGVtZW50OjpXTUxJbnB1dEVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6V01MSW5wdXRFbGVt
ZW50OjpkaXNwYXRjaEJsdXJFdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpXTUxJbnB1dEVsZW1l
bnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6OldNTElucHV0RWxl
bWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxlcik6CisgICAgICAgIChXZWJDb3JlOjpXTUxJbnB1dEVs
ZW1lbnQ6OmluaXQpOgorICAgICAgICAqIHdtbC9XTUxJbnB1dEVsZW1lbnQuaDoKKyAgICAgICAg
KFdlYkNvcmU6OldNTElucHV0RWxlbWVudDo6c2V0UGxhY2Vob2xkZXIpOgorCiAyMDA5LTA1LTE3
ICBHZW9yZ2UgU3RhaWtvcyAgPGdlb3JnZS5zdGFpa29zQHRvcmNobW9iaWxlLmNvbT4KIAogICAg
ICAgICBOb3QgcmV2aWV3ZWQgLSBidWlsZCBmaXguCkluZGV4OiBXZWJDb3JlL1dlYkNvcmUucHJv
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvV2ViQ29yZS5wcm8JKHJldmlzaW9uIDQzNjgxKQorKysg
V2ViQ29yZS9XZWJDb3JlLnBybwkod29ya2luZyBjb3B5KQpAQCAtMTA1LDYgKzEwNSw3IEBAIENP
TkZJRyhRVERJUl9idWlsZCkgewogIWNvbnRhaW5zKERFRklORVMsIEVOQUJMRV9EQVNIQk9BUkRf
U1VQUE9SVD0uKTogREVGSU5FUyArPSBFTkFCTEVfREFTSEJPQVJEX1NVUFBPUlQ9MAogIWNvbnRh
aW5zKERFRklORVMsIEVOQUJMRV9YUEFUSD0uKTogREVGSU5FUyArPSBFTkFCTEVfWFBBVEg9MQog
IyFjb250YWlucyhERUZJTkVTLCBFTkFCTEVfWEJMPS4pOiBERUZJTkVTICs9IEVOQUJMRV9YQkw9
MQorIWNvbnRhaW5zKERFRklORVMsIEVOQUJMRV9XQ1NTPS4pOiBERUZJTkVTICs9IEVOQUJMRV9X
Q1NTPTAKICFjb250YWlucyhERUZJTkVTLCBFTkFCTEVfV01MPS4pOiBERUZJTkVTICs9IEVOQUJM
RV9XTUw9MAogIWNvbnRhaW5zKERFRklORVMsIEVOQUJMRV9XT1JLRVJTPS4pOiBERUZJTkVTICs9
IEVOQUJMRV9XT1JLRVJTPTEKIApAQCAtMTQ3Niw2ICsxNDc3LDE0IEBAIGNvbnRhaW5zKERFRklO
RVMsIEVOQUJMRV9YQkw9MSkgewogICAgIEZFQVRVUkVfREVGSU5FU19KQVZBU0NSSVBUICs9IEVO
QUJMRV9YQkw9MQogfQogCitjb250YWlucyhERUZJTkVTLCBFTkFCTEVfV0NTUz0xKSB7CisgICAg
RkVBVFVSRV9ERUZJTkVTX0pBVkFTQ1JJUFQgKz0gRU5BQkxFX1dDU1M9MQorICAgIGNvbnRhaW5z
KERFRklORVMsIEVOQUJMRV9YSFRNTE1QPTApOiB7CisgICAgICAgIERFRklORVMgLT0gRU5BQkxF
X1hIVE1MTVA9MAorICAgICAgICBERUZJTkVTICs9IEVOQUJMRV9YSFRNTE1QPTEKKyAgICB9Cit9
CisKIGNvbnRhaW5zKERFRklORVMsIEVOQUJMRV9XTUw9MSkgewogICAgIFNPVVJDRVMgKz0gXAog
ICAgICAgICB3bWwvV01MQUVsZW1lbnQuY3BwIFwKSW5kZXg6IFdlYkNvcmUvY3NzL0NTU1BhcnNl
ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9jc3MvQ1NTUGFyc2VyLmNwcAkocmV2aXNpb24g
NDM2ODEpCisrKyBXZWJDb3JlL2Nzcy9DU1NQYXJzZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00
LDYgKzQsNyBAQAogICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAwNyBO
aWNob2xhcyBTaGFua3MgPHdlYmtpdEBuaWNrc2hhbmtzLmNvbT4KICAqIENvcHlyaWdodCAoQykg
MjAwOCBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA5
IFRvcmNoIE1vYmlsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIChodHRwOi8vd3d3LnRvcmNo
bW9iaWxlLmNvbS8pCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTE2MTQsNiArMTYxNSwxMiBAQCBi
b29sIENTU1BhcnNlcjo6cGFyc2VWYWx1ZShpbnQgcHJvcElkLCBiCiAgICAgICAgIGNvbnN0IGlu
dCBwcm9wZXJ0aWVzWzJdID0geyBDU1NQcm9wZXJ0eVdlYmtpdFRleHRTdHJva2VXaWR0aCwgQ1NT
UHJvcGVydHlXZWJraXRUZXh0U3Ryb2tlQ29sb3IgfTsKICAgICAgICAgcmV0dXJuIHBhcnNlU2hv
cnRoYW5kKHByb3BJZCwgcHJvcGVydGllcywgMiwgaW1wb3J0YW50KTsKICAgICB9CisjaWYgRU5B
QkxFKFdDU1MpCisgICAgY2FzZSBDU1NQcm9wZXJ0eVdhcElucHV0Rm9ybWF0OgorICAgIGNhc2Ug
Q1NTUHJvcGVydHlXYXBJbnB1dFJlcXVpcmVkOgorICAgICAgICBwYXJzZWRWYWx1ZSA9IHBhcnNl
V0NTU0lucHV0UHJvcGVydHkoKTsKKyAgICAgICAgYnJlYWs7CisjZW5kaWYgCiAgICAgY2FzZSBD
U1NQcm9wZXJ0eVdlYmtpdEFuaW1hdGlvbjoKICAgICAgICAgcmV0dXJuIHBhcnNlQW5pbWF0aW9u
U2hvcnRoYW5kKGltcG9ydGFudCk7CiAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFRyYW5zaXRp
b246CkBAIC0xNjUzLDYgKzE2NjAsMjYgQEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNlVmFsdWUoaW50
IHByb3BJZCwgYgogICAgIHJldHVybiBmYWxzZTsKIH0KIAorI2lmIEVOQUJMRShXQ1NTKQorUGFz
c1JlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gQ1NTUGFyc2VyOjpwYXJzZVdDU1NJbnB1dFByb3Bl
cnR5KCkKK3sKKyAgICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IHBhcnNlZFZhbHVlID0gMDsK
KyAgICBDU1NQYXJzZXJWYWx1ZSogdmFsdWUgPSBtX3ZhbHVlTGlzdC0+Y3VycmVudCgpOworICAg
IFN0cmluZyBpbnB1dFByb3BlcnR5OworICAgIHdoaWxlICh2YWx1ZSkgeworICAgICAgICBpZiAo
dmFsdWUtPnVuaXQgPT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19TVFJJTkcgfHwgdmFsdWUtPnVu
aXQgPT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19JREVOVCkKKyAgICAgICAgICAgIGlucHV0UHJv
cGVydHkgPSBTdHJpbmcodmFsdWUtPnN0cmluZyk7CisgCisgICAgICAgIGlmICghaW5wdXRQcm9w
ZXJ0eS5pc0VtcHR5KCkpCisgICAgICAgICAgIHBhcnNlZFZhbHVlID0gQ1NTUHJpbWl0aXZlVmFs
dWU6OmNyZWF0ZShpbnB1dFByb3BlcnR5LCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1NUUklORyk7
CisgCisgICAgICAgIHZhbHVlID0gbV92YWx1ZUxpc3QtPm5leHQoKTsKKyAgICB9CisgCisgICAg
cmV0dXJuIHBhcnNlZFZhbHVlOworfQorI2VuZGlmCisKIHZvaWQgQ1NTUGFyc2VyOjphZGRGaWxs
VmFsdWUoUmVmUHRyPENTU1ZhbHVlPiYgbHZhbCwgUGFzc1JlZlB0cjxDU1NWYWx1ZT4gcnZhbCkK
IHsKICAgICBpZiAobHZhbCkgewpJbmRleDogV2ViQ29yZS9jc3MvQ1NTUGFyc2VyLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9jc3MvQ1NTUGFyc2VyLmgJKHJldmlzaW9uIDQzNjgxKQorKysgV2Vi
Q29yZS9jc3MvQ1NTUGFyc2VyLmgJKHdvcmtpbmcgY29weSkKQEAgLTIsNiArMiw3IEBACiAgKiBD
b3B5cmlnaHQgKEMpIDIwMDMgTGFycyBLbm9sbCAoa25vbGxAa2RlLm9yZykKICAqIENvcHlyaWdo
dCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDggRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4K
KyAqIENvcHlyaWdodCAoQykgMjAwOSBUb3JjaCBNb2JpbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLiAoaHR0cDovL3d3dy50b3JjaG1vYmlsZS5jb20vKQogICoKICAqIFRoaXMgbGlicmFyeSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlm
eSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBA
IC0xMzQsNiArMTM1LDEwIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgUGFzc1JlZlB0
cjxDU1NWYWx1ZT4gcGFyc2VTVkdTdHJva2VEYXNoYXJyYXkoKTsKICNlbmRpZgogCisjaWYgRU5B
QkxFKFdDU1MpICAgICAgIAorICAgICAgICBQYXNzUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBw
YXJzZVdDU1NJbnB1dFByb3BlcnR5KCk7CisjZW5kaWYKKwogICAgICAgICAvLyBDU1MzIFBhcnNp
bmcgUm91dGluZXMgKGZvciBwcm9wZXJ0aWVzIHNwZWNpZmljIHRvIENTUzMpCiAgICAgICAgIGJv
b2wgcGFyc2VTaGFkb3coaW50IHByb3BJZCwgYm9vbCBpbXBvcnRhbnQpOwogICAgICAgICBib29s
IHBhcnNlQm9yZGVySW1hZ2UoaW50IHByb3BJZCwgYm9vbCBpbXBvcnRhbnQsIFJlZlB0cjxDU1NW
YWx1ZT4mKTsKSW5kZXg6IFdlYkNvcmUvY3NzL0NTU1Byb3BlcnR5TmFtZXMuaW4KPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9jc3MvQ1NTUHJvcGVydHlOYW1lcy5pbgkocmV2aXNpb24gNDM2ODEpCisr
KyBXZWJDb3JlL2Nzcy9DU1NQcm9wZXJ0eU5hbWVzLmluCSh3b3JraW5nIGNvcHkpCkBAIC0xMzYs
NiArMTM2LDggQEAgd29yZC1zcGFjaW5nCiB3b3JkLXdyYXAKIHotaW5kZXgKIHpvb20KKy13YXAt
aW5wdXQtZm9ybWF0Cistd2FwLWlucHV0LXJlcXVpcmVkCiAtd2Via2l0LWFuaW1hdGlvbgogLXdl
YmtpdC1hbmltYXRpb24tZGVsYXkKIC13ZWJraXQtYW5pbWF0aW9uLWRpcmVjdGlvbgpJbmRleDog
V2ViQ29yZS9kb20vSW5wdXRFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9J
bnB1dEVsZW1lbnQuY3BwCShyZXZpc2lvbiA0MzY4MSkKKysrIFdlYkNvcmUvZG9tL0lucHV0RWxl
bWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0
IChDKSAyMDA4IFRvcmNoIE1vYmlsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIChodHRwOi8v
d3d3LnRvcmNobW9iaWxlLmNvbS8pCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDkgVG9yY2gg
TW9iaWxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gKGh0dHA6Ly93d3cudG9yY2htb2JpbGUu
Y29tLykKICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtNDEsNiArNDEsMTUgQEAKICNpbmNsdWRlICJX
TUxOYW1lcy5oIgogI2VuZGlmCiAKKyNpZiBFTkFCTEUoV0NTUykKKyNpbmNsdWRlICJDU1NQcm9w
ZXJ0eU5hbWVzLmgiCisjaW5jbHVkZSAiQ1NTUnVsZS5oIgorI2luY2x1ZGUgIkNTU1J1bGVMaXN0
LmgiCisjaW5jbHVkZSAiQ1NTU3R5bGVSdWxlLmgiCisjaW5jbHVkZSAiQ1NTU3R5bGVTZWxlY3Rv
ci5oIgorI2luY2x1ZGUgIkhUTUxUZXh0QXJlYUVsZW1lbnQuaCIKKyNlbmRpZgorCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKIHVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CkBAIC01MiwxMSArNjEs
MjQyIEBAIHVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CiBjb25zdCBpbnQgSW5wdXRFbGVtZW50
OjpzX21heGltdW1MZW5ndGggPSA1MjQyODg7CiBjb25zdCBpbnQgSW5wdXRFbGVtZW50OjpzX2Rl
ZmF1bHRTaXplID0gMjA7CiAKKyNpZiBFTkFCTEUoV0NTUykKK3N0YXRpYyBpbmxpbmUgY29uc3Qg
QXRvbWljU3RyaW5nJiBmb3JtYXRDb2RlcygpCit7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChB
dG9taWNTdHJpbmcsIGNvZGVzLCAoIkFhTm5YeE1tIikpOworICAgIHJldHVybiBjb2RlczsKK30K
Kworc3RhdGljIHVuc2lnbmVkIGN1cnNvclBvc2l0aW9uVG9NYXNrSW5kZXgoY29uc3QgU3RyaW5n
JiBpbnB1dEZvcm1hdE1hc2ssIHVuc2lnbmVkIGN1cnNvclBvc2l0aW9uKQoreworICAgIFVDaGFy
IG1hc2s7CisgICAgaW50IGluZGV4ID0gLTE7CisgICAgZG8geworICAgICAgICBtYXNrID0gaW5w
dXRGb3JtYXRNYXNrWysraW5kZXhdOworICAgICAgICBpZiAobWFzayA9PSAnXFwnKQorICAgICAg
ICAgICAgKytpbmRleDsKKyAgICAgICAgZWxzZSBpZiAobWFzayA9PSAnKicgfHwgKFdURjo6aXNB
U0NJSURpZ2l0KG1hc2spICYmIG1hc2sgIT0gJzAnKSkgeworICAgICAgICAgICAgaW5kZXggPSBp
bnB1dEZvcm1hdE1hc2subGVuZ3RoKCkgLSAxOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IH0KKyAgICB9IHdoaWxlIChjdXJzb3JQb3NpdGlvbi0tKTsKKyAKKyAgICByZXR1cm4gaW5kZXg7
Cit9CisKK2Jvb2wgSW5wdXRFbGVtZW50Ojppc0NvbmZvcm1lZFRvSW5wdXRNYXNrKGNvbnN0IElu
cHV0RWxlbWVudERhdGEmIGRhdGEsIGNvbnN0IFN0cmluZyYgaW5wdXRDaGFycykKK3sKKyAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgaW5wdXRDaGFycy5sZW5ndGgoKTsgKytpKQorICAgICAg
ICBpZiAoIWlzQ29uZm9ybWVkVG9JbnB1dE1hc2soZGF0YSwgaW5wdXRDaGFyc1tpXSwgaSwgaSAr
IDEpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiB0cnVlOworfQorCiti
b29sIElucHV0RWxlbWVudDo6aXNDb25mb3JtZWRUb0lucHV0TWFzayhjb25zdCBJbnB1dEVsZW1l
bnREYXRhJiBkYXRhLCBVQ2hhciBpbkNoYXIsIHVuc2lnbmVkIGN1cnNvclBvc2l0aW9uLCB1bnNp
Z25lZCBpbnB1dENoYXJzQ291bnQpCit7CisgICAgU3RyaW5nIGlucHV0Rm9ybWF0TWFzayA9IGRh
dGEuaW5wdXRGb3JtYXRNYXNrKCk7CisgICAgaWYgKGlucHV0Rm9ybWF0TWFzay5pc0VtcHR5KCkp
CisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgaWYgKGlucHV0Q2hhcnNDb3VudCA+IGRhdGEu
YWxsb3dlZElucHV0Q2hhcnNNYXhMZW5ndGgoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworIAor
ICAgIHVuc2lnbmVkIG1hc2tJbmRleCA9IGN1cnNvclBvc2l0aW9uVG9NYXNrSW5kZXgoaW5wdXRG
b3JtYXRNYXNrLCBjdXJzb3JQb3NpdGlvbik7CisgICAgYm9vbCBvayA9IHRydWU7CisgICAgVUNo
YXIgbWFzayA9IGlucHV0Rm9ybWF0TWFza1ttYXNrSW5kZXhdOworICAgIC8vIE1hdGNoIHRoZSBp
bnB1dGVkIGNoYXJhY3RlciB3aXRoIGlucHV0IG1hc2sKKyAgICBzd2l0Y2ggKG1hc2spIHsKKyAg
ICBjYXNlICdBJzoKKyAgICAgICAgb2sgPSAhV1RGOjppc0FTQ0lJRGlnaXQoaW5DaGFyKSAmJiAh
V1RGOjppc0FTQ0lJTG93ZXIoaW5DaGFyKSAmJiBXVEY6OmlzQVNDSUlQcmludGFibGUoaW5DaGFy
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSAnYSc6CisgICAgICAgIG9rID0gIVdURjo6aXNB
U0NJSURpZ2l0KGluQ2hhcikgJiYgIVdURjo6aXNBU0NJSVVwcGVyKGluQ2hhcikgJiYgV1RGOjpp
c0FTQ0lJUHJpbnRhYmxlKGluQ2hhcik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgJ04nOgor
ICAgICAgICBvayA9IFdURjo6aXNBU0NJSURpZ2l0KGluQ2hhcik7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2UgJ24nOgorICAgICAgICBvayA9ICFXVEY6OmlzQVNDSUlBbHBoYShpbkNoYXIpICYm
IFdURjo6aXNBU0NJSVByaW50YWJsZShpbkNoYXIpOworICAgICAgICBicmVhazsKKyAgICBjYXNl
ICdYJzoKKyAgICAgICAgb2sgPSAhV1RGOjppc0FTQ0lJTG93ZXIoaW5DaGFyKSAmJiBXVEY6Omlz
QVNDSUlQcmludGFibGUoaW5DaGFyKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSAneCc6Cisg
ICAgICAgIG9rID0gIVdURjo6aXNBU0NJSVVwcGVyKGluQ2hhcikgJiYgV1RGOjppc0FTQ0lJUHJp
bnRhYmxlKGluQ2hhcik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgJ00nOgorICAgICAgICBv
ayA9IFdURjo6aXNBU0NJSVByaW50YWJsZShpbkNoYXIpOworICAgICAgICBicmVhazsKKyAgICBj
YXNlICdtJzoKKyAgICAgICAgb2sgPSBXVEY6OmlzQVNDSUlQcmludGFibGUoaW5DaGFyKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgb2sgPSAobWFzayA9PSBpbkNoYXIp
OworICAgICAgICBicmVhazsKKyAgICB9CisgCisgICAgcmV0dXJuIG9rOworfQorCitTdHJpbmcg
SW5wdXRFbGVtZW50Ojp2YWxpZGF0ZUlucHV0TWFzayhJbnB1dEVsZW1lbnREYXRhJiBkYXRhLCBT
dHJpbmcmIGlucHV0TWFzaywgYm9vbCBpc0Zyb21XQ1NTKQoreworICAgIGlmIChpc0Zyb21XQ1NT
KQorICAgICAgICBpbnB1dE1hc2sucmVwbGFjZSgiXFxcXCIsICJcXCIpOworIAorICAgIGJvb2wg
aXNWYWxpZCA9IHRydWU7CisgICAgYm9vbCBoYXNXaWxkY2FyZCA9IGZhbHNlOworICAgIHVuc2ln
bmVkIGVzY2FwZUNoYXJDb3VudCA9IDA7CisgICAgdW5zaWduZWQgbWFza0xlbmd0aCA9IGlucHV0
TWFzay5sZW5ndGgoKTsKKyAgICBVQ2hhciBmb3JtYXRDb2RlOworICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBtYXNrTGVuZ3RoOyArK2kpIHsKKyAgICAgICAgZm9ybWF0Q29kZSA9IGlucHV0
TWFza1tpXTsKKyAgICAgICAgaWYgKGZvcm1hdENvZGVzKCkuZmluZChmb3JtYXRDb2RlKSA9PSAt
MSkgeworICAgICAgICAgICAgaWYgKGZvcm1hdENvZGUgPT0gJyonIHx8IChXVEY6OmlzQVNDSUlE
aWdpdChmb3JtYXRDb2RlKSAmJiBmb3JtYXRDb2RlICE9ICcwJykpIHsKKyAgICAgICAgICAgICAg
ICAvLyBWYWxpZGF0ZSBjb2RlcyB3aGljaCBlbmRzIHdpdGggJypmJyBvciAnbmYnCisgICAgICAg
ICAgICAgICAgZm9ybWF0Q29kZSA9IGlucHV0TWFza1srK2ldOworICAgICAgICAgICAgICAgIGlm
ICgoaSArIDEgIT0gbWFza0xlbmd0aCkgfHwgZm9ybWF0Q29kZXMoKS5maW5kKGZvcm1hdENvZGUp
ID09IC0xKSB7CisgICAgICAgICAgICAgICAgICAgIGlzVmFsaWQgPSBmYWxzZTsKKyAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGhh
c1dpbGRjYXJkID0gdHJ1ZTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoZm9ybWF0Q29kZSA9PSAn
XFwnKSB7CisgICAgICAgICAgICAgICAgLy9za2lwIG92ZXIgdGhlIG5leHQgbWFzayBjaGFyYWN0
ZXIKKyAgICAgICAgICAgICAgICArK2k7CisgICAgICAgICAgICAgICAgKytlc2NhcGVDaGFyQ291
bnQ7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGlzVmFsaWQgPSBmYWxz
ZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAg
IH0KKyAKKyAgICBpZiAoIWlzVmFsaWQpCisgICAgICAgIHJldHVybiBTdHJpbmcoKTsKKyAKKyAg
ICAvLyBjYWxjdWxhdGUgdGhlIG51bWJlciBvZiBjaGFyYWN0ZXJzIGFsbG93ZWQgdG8gYmUgZW50
ZXJlZCBieSBpbnB1dCBtYXNrCisgICAgdW5zaWduZWQgYWxsb3dlZExlbmd0aCA9IG1hc2tMZW5n
dGg7CisgICAgaWYgKGVzY2FwZUNoYXJDb3VudCkKKyAgICAgICAgYWxsb3dlZExlbmd0aCAtPSBl
c2NhcGVDaGFyQ291bnQ7CisKKyAgICBpZiAoaGFzV2lsZGNhcmQpIHsKKyAgICAgICAgZm9ybWF0
Q29kZSA9IGlucHV0TWFza1ttYXNrTGVuZ3RoIC0gMl07CisgICAgICAgIGlmIChmb3JtYXRDb2Rl
ID09ICcqJykKKyAgICAgICAgICAgIGFsbG93ZWRMZW5ndGggPSBkYXRhLmFsbG93ZWRJbnB1dENo
YXJzTWF4TGVuZ3RoKCk7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgdW5zaWduZWQgbGVm
dExlbiA9IFN0cmluZygmZm9ybWF0Q29kZSkudG9JbnQoKTsKKyAgICAgICAgICAgIGFsbG93ZWRM
ZW5ndGggPSBsZWZ0TGVuICsgYWxsb3dlZExlbmd0aCAtIDI7CisgICAgICAgIH0KKyAgICB9Cisg
CisgICAgaWYgKGFsbG93ZWRMZW5ndGggPCBkYXRhLmFsbG93ZWRJbnB1dENoYXJzTWF4TGVuZ3Ro
KCkpCisgICAgICAgIGRhdGEuc2V0QWxsb3dlZElucHV0Q2hhcnNNYXhMZW5ndGgoYWxsb3dlZExl
bmd0aCk7CisgCisgICAgcmV0dXJuIGlucHV0TWFzazsKK30KKwordm9pZCBJbnB1dEVsZW1lbnQ6
OnVwZGF0ZUlucHV0UHJvcGVydGllc0Zyb21XQ1NTKElucHV0RWxlbWVudERhdGEmIGRhdGEsIERv
Y3VtZW50KiBkb2N1bWVudCkKK3sKKyAgICBpZiAoIWRvY3VtZW50KQorICAgICAgICByZXR1cm47
CisKKyAgICBTdHJpbmcgaW5wdXRGb3JtYXRNYXNrID0gZGF0YS5pbnB1dEZvcm1hdE1hc2soKTsK
KyAgICBJbnB1dEVsZW1lbnREYXRhOjpJbnB1dFJlcXVpcmVtZW50U3RhdGUgaW5wdXRSZXF1aXJl
bWVudFN0YXRlID0gZGF0YS5pbnB1dFJlcXVpcmVtZW50U3RhdGUoKTsKKyAgICBpZiAoIWlucHV0
Rm9ybWF0TWFzay5pc0VtcHR5KCkgJiYgSW5wdXRFbGVtZW50RGF0YTo6Tm9uZSAhPSBpbnB1dFJl
cXVpcmVtZW50U3RhdGUpCisgICAgICAgIHJldHVybjsKKyAKKyAgICAvLzEsIGdldCBpbnB1dCBw
cm9wZXJ0eSBmcm9tIGlubGluZSBXQ1NTIGZpcnN0IAorICAgIENTU1N0eWxlRGVjbGFyYXRpb24q
IHN0eWxlRGVjbGFyYXRpb24gPSBkYXRhLmVsZW1lbnQoKS0+c3R5bGUoKTsKKyAgICBpZiAoc3R5
bGVEZWNsYXJhdGlvbikgeworICAgICAgICBpZiAoaW5wdXRGb3JtYXRNYXNrLmlzRW1wdHkoKSkg
eworICAgICAgICAgICAgaW5wdXRGb3JtYXRNYXNrID0gc3R5bGVEZWNsYXJhdGlvbi0+Z2V0UHJv
cGVydHlWYWx1ZShDU1NQcm9wZXJ0eVdhcElucHV0Rm9ybWF0KTsKKyAgICAgICAgICAgIGlucHV0
Rm9ybWF0TWFzay5yZXBsYWNlKCdcJycsICcgJyk7CisgICAgICAgICAgICBpbnB1dEZvcm1hdE1h
c2sgPSBpbnB1dEZvcm1hdE1hc2suc3RyaXBXaGl0ZVNwYWNlKCk7CisgICAgICAgIH0KKyAKKyAg
ICAgICAgaWYgKElucHV0RWxlbWVudERhdGE6Ok5vbmUgPT0gaW5wdXRSZXF1aXJlbWVudFN0YXRl
KSB7CisgICAgICAgICAgICBTdHJpbmcgaW5wdXRSZXF1aXJlZCA9IHN0eWxlRGVjbGFyYXRpb24t
PmdldFByb3BlcnR5VmFsdWUoQ1NTUHJvcGVydHlXYXBJbnB1dFJlcXVpcmVkKTsKKyAgICAgICAg
ICAgIGlmICghaW5wdXRSZXF1aXJlZC5pc0VtcHR5KCkpCisgICAgICAgICAgICAgICAgaW5wdXRS
ZXF1aXJlbWVudFN0YXRlID0gKGlucHV0UmVxdWlyZWQgPT0gInRydWUiID8gSW5wdXRFbGVtZW50
RGF0YTo6SW5wdXRSZXF1aXJlZCA6IElucHV0RWxlbWVudERhdGE6OklucHV0Tm90UmVxdWlyZWQp
OworICAgICAgICB9CisgICAgfQorIAorICAgIC8vMiwgVHJ5IHRvIGdldCBpbnB1dCBwcm9wZXJ0
eSBmcm9tIGludGVybmFsIFdDU1MgYW5kIGV4dGVybmFsIFdDU1MgaW4gdHVybgorICAgIGlmIChp
bnB1dEZvcm1hdE1hc2suaXNFbXB0eSgpIHx8IElucHV0RWxlbWVudERhdGE6Ok5vbmUgPT0gaW5w
dXRSZXF1aXJlbWVudFN0YXRlKSB7CisgICAgICAgIGlmIChkb2N1bWVudC0+c3R5bGVTZWxlY3Rv
cigpKSB7CisgICAgICAgICAgICBSZWZQdHI8Q1NTUnVsZUxpc3Q+IHJ1bGVMaXN0ID0gZG9jdW1l
bnQtPnN0eWxlU2VsZWN0b3IoKS0+c3R5bGVSdWxlc0ZvckVsZW1lbnQoZGF0YS5lbGVtZW50KCks
IGZhbHNlKTsKKyAgICAgICAgICAgIGlmIChydWxlTGlzdCAmJiBydWxlTGlzdC0+bGVuZ3RoKCkg
PiAwKSB7CisgICAgICAgICAgICAgICAgQ1NTUnVsZSogcnVsZSA9IDA7CisgICAgICAgICAgICAg
ICAgU3RyaW5nIGNzc1RleHQ7CisgICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBy
dWxlTGlzdC0+bGVuZ3RoKCk7ICsraSkgeworICAgICAgICAgICAgICAgICAgICBydWxlID0gcnVs
ZUxpc3QtPml0ZW0oaSk7CisgICAgICAgICAgICAgICAgICAgIGlmIChydWxlLT5pc1N0eWxlUnVs
ZSgpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBDU1NTdHlsZVJ1bGUqIGNzUnVsZSA9IHN0
YXRpY19jYXN0PENTU1N0eWxlUnVsZSo+KHJ1bGUpOworICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKGNzUnVsZS0+c3R5bGUoKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNzc1Rl
eHQgPSBjc1J1bGUtPnN0eWxlKCktPmNzc1RleHQoKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpbnQgaW5kZXggPSAtMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW5w
dXRGb3JtYXRNYXNrLmlzRW1wdHkoKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpbmRleCA9IGNzc1RleHQuZmluZCgiLXdhcC1pbnB1dC1mb3JtYXQiKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKGluZGV4ICE9IC0xKSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpbnQgcG9zdGlvbiA9IGNzc1RleHQuZmluZCgnOicsIGluZGV4
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0Rm9ybWF0TWFzayA9
IGNzc1RleHQuc3Vic3RyaW5nKHBvc3Rpb24gKyAxKTsKKyAKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHBvc3Rpb24gPSBpbnB1dEZvcm1hdE1hc2suZmluZCgnOycpOworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXRGb3JtYXRNYXNrLnRydW5jYXRl
KHBvc3Rpb24pOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXRGb3Jt
YXRNYXNrLnJlcGxhY2UoJ1wnJywgJyAnKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGlucHV0Rm9ybWF0TWFzayA9IGlucHV0Rm9ybWF0TWFzay5zdHJpcFdoaXRlU3BhY2Uo
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChJbnB1dEVsZW1l
bnREYXRhOjpOb25lID09IGlucHV0UmVxdWlyZW1lbnRTdGF0ZSkgeworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpbmRleCA9IGNzc1RleHQuZmluZCgiLXdhcC1pbnB1dC1yZXF1aXJl
ZCIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW5kZXggIT0gLTEpIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBwb3N0aW9uID0gY3NzVGV4
dC5maW5kKCc6JywgaW5kZXgpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
U3RyaW5nIGlucHV0UmVxdWlyZWQgPSBjc3NUZXh0LnN1YnN0cmluZyhwb3N0aW9uICsgMSk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3N0aW9uID0gaW5wdXRSZXF1aXJl
ZC5maW5kKCc7Jyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dFJl
cXVpcmVkLnRydW5jYXRlKHBvc3Rpb24pOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaW5wdXRSZXF1aXJlZCA9IGlucHV0UmVxdWlyZWQuc3RyaXBXaGl0ZVNwYWNlKCk7Cisg
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWlucHV0UmVxdWlyZWQu
aXNFbXB0eSgpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0
UmVxdWlyZW1lbnRTdGF0ZSA9IChpbnB1dFJlcXVpcmVkID09ICJ0cnVlIiA/IElucHV0RWxlbWVu
dERhdGE6OklucHV0UmVxdWlyZWQgOiBJbnB1dEVsZW1lbnREYXRhOjpJbnB1dE5vdFJlcXVpcmVk
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIH0KKyAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWlucHV0Rm9y
bWF0TWFzay5pc0VtcHR5KCkgJiYgSW5wdXRFbGVtZW50RGF0YTo6Tm9uZSAhPSBpbnB1dFJlcXVp
cmVtZW50U3RhdGUpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorIAorICAgIGlmIChpbnB1
dEZvcm1hdE1hc2suaXNFbXB0eSgpKQorICAgICAgICBkYXRhLnNldElucHV0Rm9ybWF0TWFzaygi
Kk0iKTsgLy8gU2V0IGlucHV0IG1hc2sgdG8gJypNJyBieSBkZWZhdWx0IAorICAgIGVsc2UKKyAg
ICAgICAgZGF0YS5zZXRJbnB1dEZvcm1hdE1hc2sodmFsaWRhdGVJbnB1dE1hc2soZGF0YSwgaW5w
dXRGb3JtYXRNYXNrLCB0cnVlKSk7CisgCisgICAgLy8gSWYgJy13YXAtaW5wdXQtcmVxdWlyZWQn
IGlzIG5vdCBzcGVjaWZpZWQsIGlucHV0IGlzIHN0aWxsIHJlcXVpcmVkIHdoZW4KKyAgICAvLyB0
aGUgaW5wdXQgZm9ybWF0IGlzIG5vdCBlbXB0eSBhbmQgdGhlIGNvZGVzIGlzIG5vdCBlcXVhbCB0
byAiKmYiCisgICAgaWYgKElucHV0RWxlbWVudERhdGE6Ok5vbmUgPT0gaW5wdXRSZXF1aXJlbWVu
dFN0YXRlKSB7CisgICAgICAgIGlmIChpbnB1dEZvcm1hdE1hc2suaXNFbXB0eSgpIHx8IChpbnB1
dEZvcm1hdE1hc2subGVuZ3RoKCkgPT0gMiAmJiBpbnB1dEZvcm1hdE1hc2tbMF0gPT0gJyonKSkK
KyAgICAgICAgICAgIGRhdGEuc2V0SW5wdXRSZXF1aXJlbWVudFN0YXRlKElucHV0RWxlbWVudERh
dGE6OklucHV0Tm90UmVxdWlyZWQpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBkYXRhLnNl
dElucHV0UmVxdWlyZW1lbnRTdGF0ZShJbnB1dEVsZW1lbnREYXRhOjpJbnB1dFJlcXVpcmVkKTsK
KyAgICB9IGVsc2UKKyAgICAgICAgZGF0YS5zZXRJbnB1dFJlcXVpcmVtZW50U3RhdGUoaW5wdXRS
ZXF1aXJlbWVudFN0YXRlKTsKK30KKyNlbmRpZgorCiB2b2lkIElucHV0RWxlbWVudDo6ZGlzcGF0
Y2hGb2N1c0V2ZW50KElucHV0RWxlbWVudERhdGEmIGRhdGEsIERvY3VtZW50KiBkb2N1bWVudCkK
IHsKICAgICBpZiAoIWRhdGEuaW5wdXRFbGVtZW50KCktPmlzVGV4dEZpZWxkKCkpCiAgICAgICAg
IHJldHVybjsKIAorI2lmIEVOQUJMRShXQ1NTKQorICAgIHVwZGF0ZUlucHV0UHJvcGVydGllc0Zy
b21XQ1NTKGRhdGEsIGRvY3VtZW50KTsKKyNlbmRpZgorCiAgICAgdXBkYXRlUGxhY2Vob2xkZXJW
aXNpYmlsaXR5KGRhdGEsIGRvY3VtZW50KTsKIAogICAgIGlmIChkYXRhLmlucHV0RWxlbWVudCgp
LT5pc1Bhc3N3b3JkRmllbGQoKSAmJiBkb2N1bWVudC0+ZnJhbWUoKSkKQEAgLTcyLDYgKzMxMiwx
NCBAQCB2b2lkIElucHV0RWxlbWVudDo6ZGlzcGF0Y2hCbHVyRXZlbnQoSW5wCiAgICAgaWYgKCFm
cmFtZSkKICAgICAgICAgcmV0dXJuOwogCisjaWYgRU5BQkxFKFdDU1MpCisgICAgaWYgKGRhdGEu
aW5wdXRSZXF1aXJlbWVudFN0YXRlKCkgPT0gSW5wdXRFbGVtZW50RGF0YTo6SW5wdXRSZXF1aXJl
ZCAmJiBkYXRhLmVsZW1lbnQoKS0+cmVuZGVyZXIoKSkgeworICAgICAgICBTdHJpbmcgaW5wdXRl
ZFRleHQgPSBzdGF0aWNfY2FzdDxSZW5kZXJUZXh0Q29udHJvbCo+KGRhdGEuZWxlbWVudCgpLT5y
ZW5kZXJlcigpKS0+dGV4dCgpOworICAgICAgICBpZiAoaW5wdXRlZFRleHQuaXNFbXB0eSgpIHx8
ICFpc0NvbmZvcm1lZFRvSW5wdXRNYXNrKGRhdGEsIGlucHV0ZWRUZXh0KSkKKyAgICAgICAgICAg
IGRhdGEuZWxlbWVudCgpLT5mb2N1cygpOyAKKyAgICB9IAorI2VuZGlmCisKICAgICB1cGRhdGVQ
bGFjZWhvbGRlclZpc2liaWxpdHkoZGF0YSwgZG9jdW1lbnQpOwogCiAgICAgaWYgKGRhdGEuaW5w
dXRFbGVtZW50KCktPmlzUGFzc3dvcmRGaWVsZCgpKQpAQCAtMjc1LDYgKzUyMywxMCBAQCBJbnB1
dEVsZW1lbnREYXRhOjpJbnB1dEVsZW1lbnREYXRhKElucHV0CiAgICAgLCBtX21heExlbmd0aChJ
bnB1dEVsZW1lbnQ6OnNfbWF4aW11bUxlbmd0aCkKICAgICAsIG1fY2FjaGVkU2VsZWN0aW9uU3Rh
cnQoLTEpCiAgICAgLCBtX2NhY2hlZFNlbGVjdGlvbkVuZCgtMSkKKyNpZiBFTkFCTEUoV0NTUykK
KyAgICAsIG1faW5wdXRSZXF1aXJlbWVudFN0YXRlKElucHV0RWxlbWVudERhdGE6Ok5vbmUpCisg
ICAgLCBtX2FsbG93ZWRJbnB1dENoYXJzTWF4TGVuZ3RoKElucHV0RWxlbWVudDo6c19tYXhpbXVt
TGVuZ3RoKQorI2VuZGlmCiB7CiAgICAgQVNTRVJUKG1faW5wdXRFbGVtZW50KTsKICAgICBBU1NF
UlQobV9lbGVtZW50KTsKQEAgLTI5Myw2ICs1NDUsMTAgQEAgSW5wdXRFbGVtZW50KiB0b0lucHV0
RWxlbWVudChFbGVtZW50KiBlbAogewogICAgIGlmIChlbGVtZW50LT5pc0hUTUxFbGVtZW50KCkg
JiYgKGVsZW1lbnQtPmhhc1RhZ05hbWUoaW5wdXRUYWcpIHx8IGVsZW1lbnQtPmhhc1RhZ05hbWUo
aXNpbmRleFRhZykpKQogICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8SFRNTElucHV0RWxlbWVu
dCo+KGVsZW1lbnQpOworI2lmIEVOQUJMRShXQ1NTKQorICAgIGVsc2UgaWYgKGVsZW1lbnQtPmlz
SFRNTEVsZW1lbnQoKSAmJiBlbGVtZW50LT5oYXNUYWdOYW1lKHRleHRhcmVhVGFnKSkKKyAgICAg
ICAgcmV0dXJuIHN0YXRpY19jYXN0PEhUTUxUZXh0QXJlYUVsZW1lbnQqPihlbGVtZW50KTsKKyNl
bmRpZgogCiAjaWYgRU5BQkxFKFdNTCkKICAgICBpZiAoZWxlbWVudC0+aXNXTUxFbGVtZW50KCkg
JiYgZWxlbWVudC0+aGFzVGFnTmFtZShXTUxOYW1lczo6aW5wdXRUYWcpKQpJbmRleDogV2ViQ29y
ZS9kb20vSW5wdXRFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20vSW5wdXRFbGVt
ZW50LmgJKHJldmlzaW9uIDQzNjgxKQorKysgV2ViQ29yZS9kb20vSW5wdXRFbGVtZW50LmgJKHdv
cmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA4IFRv
cmNoIE1vYmlsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIChodHRwOi8vd3d3LnRvcmNobW9i
aWxlLmNvbS8pCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDkgVG9yY2ggTW9iaWxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4gKGh0dHA6Ly93d3cudG9yY2htb2JpbGUuY29tLykKICAqCiAg
KiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg
YW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYwpAQCAtNzksNiArNzksMTIgQEAgcHJvdGVjdGVkOgogICAgIHN0YXRpYyB2
b2lkIHBhcnNlTWF4TGVuZ3RoQXR0cmlidXRlKElucHV0RWxlbWVudERhdGEmLCBNYXBwZWRBdHRy
aWJ1dGUqKTsKICAgICBzdGF0aWMgdm9pZCB1cGRhdGVWYWx1ZUlmTmVlZGVkKElucHV0RWxlbWVu
dERhdGEmKTsKICAgICBzdGF0aWMgdm9pZCBub3RpZnlGb3JtU3RhdGVDaGFuZ2VkKElucHV0RWxl
bWVudERhdGEmLCBEb2N1bWVudCopOworI2lmIEVOQUJMRShXQ1NTKQorICAgIHN0YXRpYyBib29s
IGlzQ29uZm9ybWVkVG9JbnB1dE1hc2soY29uc3QgSW5wdXRFbGVtZW50RGF0YSYsIGNvbnN0IFN0
cmluZyYpOyAKKyAgICBzdGF0aWMgYm9vbCBpc0NvbmZvcm1lZFRvSW5wdXRNYXNrKGNvbnN0IElu
cHV0RWxlbWVudERhdGEmLCBVQ2hhciwgdW5zaWduZWQsIHVuc2lnbmVkKTsKKyAgICBzdGF0aWMg
dm9pZCB1cGRhdGVJbnB1dFByb3BlcnRpZXNGcm9tV0NTUyhJbnB1dEVsZW1lbnREYXRhJiwgRG9j
dW1lbnQqKTsKKyAgICBzdGF0aWMgU3RyaW5nIHZhbGlkYXRlSW5wdXRNYXNrKElucHV0RWxlbWVu
dERhdGEmLCBTdHJpbmcmLCBib29sIGlzRnJvbVdDU1MgPSBmYWxzZSk7CisjZW5kaWYKIH07CiAK
IC8vIEhUTUwvV01MSW5wdXRFbGVtZW50IGhvbGQgdGhpcyBzdHJ1Y3QgYXMgbWVtYmVyIHZhcmlh
YmxlCkBAIC0xMTIsNiArMTE4LDE4IEBAIHB1YmxpYzoKICAgICBpbnQgY2FjaGVkU2VsZWN0aW9u
RW5kKCkgY29uc3QgeyByZXR1cm4gbV9jYWNoZWRTZWxlY3Rpb25FbmQ7IH0KICAgICB2b2lkIHNl
dENhY2hlZFNlbGVjdGlvbkVuZChpbnQgdmFsdWUpIHsgbV9jYWNoZWRTZWxlY3Rpb25FbmQgPSB2
YWx1ZTsgfQogCisjaWYgRU5BQkxFKFdDU1MpCisgICAgZW51bSBJbnB1dFJlcXVpcmVtZW50U3Rh
dGUgeyBOb25lID0gLTEsIElucHV0Tm90UmVxdWlyZWQsIElucHV0UmVxdWlyZWQgfTsKKyAgICBJ
bnB1dFJlcXVpcmVtZW50U3RhdGUgaW5wdXRSZXF1aXJlbWVudFN0YXRlKCkgY29uc3QgeyByZXR1
cm4gbV9pbnB1dFJlcXVpcmVtZW50U3RhdGU7IH0KKyAgICB2b2lkIHNldElucHV0UmVxdWlyZW1l
bnRTdGF0ZShJbnB1dFJlcXVpcmVtZW50U3RhdGUgc3RhdGUpIHsgbV9pbnB1dFJlcXVpcmVtZW50
U3RhdGUgPSBzdGF0ZTsgfQorCisgICAgU3RyaW5nIGlucHV0Rm9ybWF0TWFzaygpIGNvbnN0IHsg
cmV0dXJuIG1faW5wdXRGb3JtYXRNYXNrOyB9CisgICAgdm9pZCBzZXRJbnB1dEZvcm1hdE1hc2so
Y29uc3QgU3RyaW5nJiBtYXNrKSB7IG1faW5wdXRGb3JtYXRNYXNrID0gbWFzazsgfQorCisgICAg
dW5zaWduZWQgYWxsb3dlZElucHV0Q2hhcnNNYXhMZW5ndGgoKSBjb25zdCB7IHJldHVybiBtX2Fs
bG93ZWRJbnB1dENoYXJzTWF4TGVuZ3RoOyB9CisgICAgdm9pZCBzZXRBbGxvd2VkSW5wdXRDaGFy
c01heExlbmd0aCh1bnNpZ25lZCBtYXhMZW5ndGgpIHsgbV9hbGxvd2VkSW5wdXRDaGFyc01heExl
bmd0aCA9IG1heExlbmd0aDsgfQorI2VuZGlmCisKIHByaXZhdGU6CiAgICAgSW5wdXRFbGVtZW50
KiBtX2lucHV0RWxlbWVudDsKICAgICBFbGVtZW50KiBtX2VsZW1lbnQ7CkBAIC0xMjIsNiArMTQw
LDExIEBAIHByaXZhdGU6CiAgICAgaW50IG1fbWF4TGVuZ3RoOwogICAgIGludCBtX2NhY2hlZFNl
bGVjdGlvblN0YXJ0OwogICAgIGludCBtX2NhY2hlZFNlbGVjdGlvbkVuZDsKKyNpZiBFTkFCTEUo
V0NTUykKKyAgICBTdHJpbmcgbV9pbnB1dEZvcm1hdE1hc2s7CisgICAgSW5wdXRSZXF1aXJlbWVu
dFN0YXRlIG1faW5wdXRSZXF1aXJlbWVudFN0YXRlOworICAgIHVuc2lnbmVkIG1fYWxsb3dlZElu
cHV0Q2hhcnNNYXhMZW5ndGg7CisjZW5kaWYKIH07CiAKIElucHV0RWxlbWVudCogdG9JbnB1dEVs
ZW1lbnQoRWxlbWVudCopOwpJbmRleDogV2ViQ29yZS9odG1sL0hUTUxJbnB1dEVsZW1lbnQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MSW5wdXRFbGVtZW50LmNwcAkocmV2aXNp
b24gNDM2ODEpCisrKyBXZWJDb3JlL2h0bWwvSFRNTElucHV0RWxlbWVudC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTUsNiArNSw3IEBACiAgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYs
IDIwMDcsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogICAgICAgICAg
IChDKSAyMDA2IEFsZXhleSBQcm9za3VyeWFrb3YgKGFwQG55cG9wLmNvbSkKICAqIENvcHlyaWdo
dCAoQykgMjAwNyBTYW11ZWwgV2VpbmlnIChzYW1Ad2Via2l0Lm9yZykKKyAqIENvcHlyaWdodCAo
QykgMjAwOSBUb3JjaCBNb2JpbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLiAoaHR0cDovL3d3
dy50b3JjaG1vYmlsZS5jb20vKQogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0xMTUwLDggKzExNTEs
MTkgQEAgdm9pZCBIVE1MSW5wdXRFbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kbAogCiAgICAgYm9v
bCBjbGlja0RlZmF1bHRGb3JtQnV0dG9uID0gZmFsc2U7CiAKKyNpZiBFTkFCTEUoV0NTUykKKyAg
ICBpZiAoaXNUZXh0RmllbGQoKSAmJiBldnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkudGV4dElu
cHV0RXZlbnQgJiYgZXZ0LT5pc1RleHRFdmVudCgpKSB7CisgICAgICAgIFRleHRFdmVudCogdGV4
dEV2ZW50ID0gc3RhdGljX2Nhc3Q8VGV4dEV2ZW50Kj4oZXZ0KTsKKyAgICAgICAgaWYgKHRleHRF
dmVudC0+ZGF0YSgpID09ICJcbiIpCisgICAgICAgICAgICBjbGlja0RlZmF1bHRGb3JtQnV0dG9u
ID0gdHJ1ZTsKKyAgICAgICAgZWxzZSBpZiAocmVuZGVyZXIoKSAmJiAhaXNDb25mb3JtZWRUb0lu
cHV0TWFzayhtX2RhdGEsIHRleHRFdmVudC0+ZGF0YSgpWzBdLCBzZWxlY3Rpb25TdGFydCgpLCBz
dGF0aWNfY2FzdDxSZW5kZXJUZXh0Q29udHJvbCo+KHJlbmRlcmVyKCkpLT50ZXh0KCkubGVuZ3Ro
KCkgKyAxKSkKKyAgICAgICAgICAgIC8vIElmIHRoZSBpbnB1dGVkIGNoYXJhY3RlciBkb2Vzbid0
IGNvbmZvcm0gdG8gdGhlIGlucHV0IG1hc2ssIHN0b3AgaGFuZGxpbmcgCisgICAgICAgICAgICBy
ZXR1cm47CisgICAgfQorI2Vsc2UKICAgICBpZiAoaXNUZXh0RmllbGQoKSAmJiBldnQtPnR5cGUo
KSA9PSBldmVudE5hbWVzKCkudGV4dElucHV0RXZlbnQgJiYgZXZ0LT5pc1RleHRFdmVudCgpICYm
IHN0YXRpY19jYXN0PFRleHRFdmVudCo+KGV2dCktPmRhdGEoKSA9PSAiXG4iKQogICAgICAgICBj
bGlja0RlZmF1bHRGb3JtQnV0dG9uID0gdHJ1ZTsKKyNlbmRpZgogCiAgICAgaWYgKGlucHV0VHlw
ZSgpID09IElNQUdFICYmIGV2dC0+aXNNb3VzZUV2ZW50KCkgJiYgZXZ0LT50eXBlKCkgPT0gZXZl
bnROYW1lcygpLmNsaWNrRXZlbnQpIHsKICAgICAgICAgLy8gcmVjb3JkIHRoZSBtb3VzZSBwb3Np
dGlvbiBmb3Igd2hlbiB3ZSBnZXQgdGhlIERPTUFjdGl2YXRlIGV2ZW50CkluZGV4OiBXZWJDb3Jl
L2h0bWwvSFRNTFRleHRBcmVhRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1s
L0hUTUxUZXh0QXJlYUVsZW1lbnQuY3BwCShyZXZpc2lvbiA0MzY4MSkKKysrIFdlYkNvcmUvaHRt
bC9IVE1MVGV4dEFyZWFFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNSw2ICs1LDcgQEAK
ICAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiAgICAgICAgICAgKEMpIDIwMDYgQWxleGV5IFByb3Nr
dXJ5YWtvdiAoYXBAbnlwb3AuY29tKQogICogQ29weXJpZ2h0IChDKSAyMDA3IFNhbXVlbCBXZWlu
aWcgKHNhbUB3ZWJraXQub3JnKQorICogQ29weXJpZ2h0IChDKSAyMDA5IFRvcmNoIE1vYmlsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIChodHRwOi8vd3d3LnRvcmNobW9iaWxlLmNvbS8pCiAg
KgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMKQEAgLTQzLDYgKzQ0LDEwIEBACiAjaW5jbHVkZSAiVmlzaWJsZVNl
bGVjdGlvbi5oIgogI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KIAorI2lmIEVOQUJMRShX
Q1NTKQorI2luY2x1ZGUgIlRleHRFdmVudC5oIgorI2VuZGlmCisKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAogdXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKQEAgLTUwLDYgKzU1LDcgQEAgdXNpbmcg
bmFtZXNwYWNlIEhUTUxOYW1lczsKIHN0YXRpYyBjb25zdCBpbnQgZGVmYXVsdFJvd3MgPSAyOwog
c3RhdGljIGNvbnN0IGludCBkZWZhdWx0Q29scyA9IDIwOwogCisjaWYgIUVOQUJMRShXQ1NTKQog
c3RhdGljIGlubGluZSB2b2lkIG5vdGlmeUZvcm1TdGF0ZUNoYW5nZWQoY29uc3QgSFRNTFRleHRB
cmVhRWxlbWVudCogZWxlbWVudCkKIHsKICAgICBGcmFtZSogZnJhbWUgPSBlbGVtZW50LT5kb2N1
bWVudCgpLT5mcmFtZSgpOwpAQCAtNTcsMTggKzYzLDI3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBu
b3RpZnlGb3JtU3RhdGVDaGFuZ2UKICAgICAgICAgcmV0dXJuOwogICAgIGZyYW1lLT5wYWdlKCkt
PmNocm9tZSgpLT5jbGllbnQoKS0+Zm9ybVN0YXRlRGlkQ2hhbmdlKGVsZW1lbnQpOwogfQorI2Vu
ZGlmCiAKIEhUTUxUZXh0QXJlYUVsZW1lbnQ6OkhUTUxUZXh0QXJlYUVsZW1lbnQoY29uc3QgUXVh
bGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQqIGRvY3VtZW50LCBIVE1MRm9ybUVsZW1lbnQq
IGZvcm0pCiAgICAgOiBIVE1MRm9ybUNvbnRyb2xFbGVtZW50V2l0aFN0YXRlKHRhZ05hbWUsIGRv
Y3VtZW50LCBmb3JtKQogICAgICwgbV9yb3dzKGRlZmF1bHRSb3dzKQogICAgICwgbV9jb2xzKGRl
ZmF1bHRDb2xzKQogICAgICwgbV93cmFwKFNvZnRXcmFwKQorI2lmIEVOQUJMRShXQ1NTKQorICAg
ICwgbV9kYXRhKHRoaXMsIHRoaXMpCisjZWxzZQogICAgICwgbV9jYWNoZWRTZWxlY3Rpb25TdGFy
dCgtMSkKICAgICAsIG1fY2FjaGVkU2VsZWN0aW9uRW5kKC0xKQorI2VuZGlmCiB7CiAgICAgQVNT
RVJUKGhhc1RhZ05hbWUodGV4dGFyZWFUYWcpKTsKICAgICBzZXRGb3JtQ29udHJvbFZhbHVlTWF0
Y2hlc1JlbmRlcmVyKHRydWUpOworI2lmIEVOQUJMRShXQ1NTKQorICAgIG5vdGlmeUZvcm1TdGF0
ZUNoYW5nZWQobV9kYXRhLCBkb2N1bWVudCk7CisjZWxzZQogICAgIG5vdGlmeUZvcm1TdGF0ZUNo
YW5nZWQodGhpcyk7CisjZW5kaWYKIH0KIAogY29uc3QgQXRvbWljU3RyaW5nJiBIVE1MVGV4dEFy
ZWFFbGVtZW50Ojpmb3JtQ29udHJvbFR5cGUoKSBjb25zdApAQCAtOTIsOCArMTA3LDEzIEBAIGlu
dCBIVE1MVGV4dEFyZWFFbGVtZW50OjpzZWxlY3Rpb25TdGFydCgKIHsKICAgICBpZiAoIXJlbmRl
cmVyKCkpCiAgICAgICAgIHJldHVybiAwOworI2lmIEVOQUJMRShXQ1NTKQorICAgIGlmIChkb2N1
bWVudCgpLT5mb2N1c2VkTm9kZSgpICE9IHRoaXMgJiYgbV9kYXRhLmNhY2hlZFNlbGVjdGlvblN0
YXJ0KCkgIT0gLTEpCisgICAgICAgIHJldHVybiBtX2RhdGEuY2FjaGVkU2VsZWN0aW9uU3RhcnQo
KTsKKyNlbHNlCiAgICAgaWYgKGRvY3VtZW50KCktPmZvY3VzZWROb2RlKCkgIT0gdGhpcyAmJiBt
X2NhY2hlZFNlbGVjdGlvblN0YXJ0ID49IDApCiAgICAgICAgIHJldHVybiBtX2NhY2hlZFNlbGVj
dGlvblN0YXJ0OworI2VuZGlmCiAgICAgcmV0dXJuIHRvUmVuZGVyVGV4dENvbnRyb2wocmVuZGVy
ZXIoKSktPnNlbGVjdGlvblN0YXJ0KCk7CiB9CiAKQEAgLTEwMSw4ICsxMjEsMTMgQEAgaW50IEhU
TUxUZXh0QXJlYUVsZW1lbnQ6OnNlbGVjdGlvbkVuZCgpCiB7CiAgICAgaWYgKCFyZW5kZXJlcigp
KQogICAgICAgICByZXR1cm4gMDsKKyNpZiBFTkFCTEUoV0NTUykKKyAgICBpZiAoZG9jdW1lbnQo
KS0+Zm9jdXNlZE5vZGUoKSAhPSB0aGlzICYmIG1fZGF0YS5jYWNoZWRTZWxlY3Rpb25FbmQoKSAh
PSAtMSkKKyAgICAgICAgcmV0dXJuIG1fZGF0YS5jYWNoZWRTZWxlY3Rpb25FbmQoKTsKKyNlbHNl
CiAgICAgaWYgKGRvY3VtZW50KCktPmZvY3VzZWROb2RlKCkgIT0gdGhpcyAmJiBtX2NhY2hlZFNl
bGVjdGlvbkVuZCA+PSAwKQogICAgICAgICByZXR1cm4gbV9jYWNoZWRTZWxlY3Rpb25FbmQ7Cisj
ZW5kaWYKICAgICByZXR1cm4gdG9SZW5kZXJUZXh0Q29udHJvbChyZW5kZXJlcigpKS0+c2VsZWN0
aW9uRW5kKCk7CiB9CiAKQEAgLTEzMSw3ICsxNTYsMTEgQEAgdm9pZCBIVE1MVGV4dEFyZWFFbGVt
ZW50OjpzZXRTZWxlY3Rpb25SYQogewogICAgIGlmICghcmVuZGVyZXIoKSkKICAgICAgICAgcmV0
dXJuOworI2lmIEVOQUJMRShXQ1NTKQorICAgIElucHV0RWxlbWVudDo6dXBkYXRlU2VsZWN0aW9u
UmFuZ2UobV9kYXRhLCBzdGFydCwgZW5kKTsKKyNlbHNlCiAgICAgdG9SZW5kZXJUZXh0Q29udHJv
bChyZW5kZXJlcigpKS0+c2V0U2VsZWN0aW9uUmFuZ2Uoc3RhcnQsIGVuZCk7CisjZW5kaWYKIH0K
IAogdm9pZCBIVE1MVGV4dEFyZWFFbGVtZW50OjpjaGlsZHJlbkNoYW5nZWQoYm9vbCBjaGFuZ2Vk
QnlQYXJzZXIsIE5vZGUqIGJlZm9yZUNoYW5nZSwgTm9kZSogYWZ0ZXJDaGFuZ2UsIGludCBjaGls
ZENvdW50RGVsdGEpCkBAIC0yMzAsNiArMjU5LDkgQEAgdm9pZCBIVE1MVGV4dEFyZWFFbGVtZW50
Ojp1cGRhdGVGb2N1c0FwcAogewogICAgIEFTU0VSVChyZW5kZXJlcigpKTsKICAgICAKKyNpZiBF
TkFCTEUoV0NTUykKKyAgICBJbnB1dEVsZW1lbnQ6OnVwZGF0ZUZvY3VzQXBwZWFyYW5jZShtX2Rh
dGEsIGRvY3VtZW50KCksIHJlc3RvcmVQcmV2aW91c1NlbGVjdGlvbik7CisjZWxzZQogICAgIGlm
ICghcmVzdG9yZVByZXZpb3VzU2VsZWN0aW9uIHx8IG1fY2FjaGVkU2VsZWN0aW9uU3RhcnQgPCAw
KSB7CiAjaWYgRU5BQkxFKE9OX0ZJUlNUX1RFWFRBUkVBX0ZPQ1VTX1NFTEVDVF9BTEwpCiAgICAg
ICAgIC8vIERldmljZXMgd2l0aCB0cmFja2JhbGxzIG9yIGQtcGFkcyBtYXkgZm9jdXMgb24gYSB0
ZXh0YXJlYSBpbiByb3V0ZQpAQCAtMjQ5LDEwICsyODEsNDcgQEAgdm9pZCBIVE1MVGV4dEFyZWFF
bGVtZW50Ojp1cGRhdGVGb2N1c0FwcAogCiAgICAgaWYgKGRvY3VtZW50KCktPmZyYW1lKCkpCiAg
ICAgICAgIGRvY3VtZW50KCktPmZyYW1lKCktPnJldmVhbFNlbGVjdGlvbigpOworI2VuZGlmCit9
CisKKyNpZiBFTkFCTEUoV0NTUykKK3ZvaWQgSFRNTFRleHRBcmVhRWxlbWVudDo6c2V0VmFsdWVG
cm9tUmVuZGVyZXIoY29uc3QgU3RyaW5nJiB2YWx1ZSkKK3sKKyAgICBJbnB1dEVsZW1lbnQ6OnNl
dFZhbHVlRnJvbVJlbmRlcmVyKG1fZGF0YSwgZG9jdW1lbnQoKSwgdmFsdWUpOworfQorCitTdHJp
bmcgSFRNTFRleHRBcmVhRWxlbWVudDo6Y29uc3RyYWluVmFsdWUoY29uc3QgU3RyaW5nJiBwcm9w
b3NlZFZhbHVlKSBjb25zdAoreworICAgIHJldHVybiBJbnB1dEVsZW1lbnQ6OmNvbnN0cmFpblZh
bHVlKG1fZGF0YSwgcHJvcG9zZWRWYWx1ZSwgbV9kYXRhLm1heExlbmd0aCgpKTsKIH0KIAordm9p
ZCBIVE1MVGV4dEFyZWFFbGVtZW50OjpjYWNoZVNlbGVjdGlvbihpbnQgc3RhcnQsIGludCBlbmQp
Cit7CisgICAgbV9kYXRhLnNldENhY2hlZFNlbGVjdGlvblN0YXJ0KHN0YXJ0KTsKKyAgICBtX2Rh
dGEuc2V0Q2FjaGVkU2VsZWN0aW9uRW5kKGVuZCk7Cit9CisKK3ZvaWQgSFRNTFRleHRBcmVhRWxl
bWVudDo6ZGlzcGF0Y2hGb2N1c0V2ZW50KCkKK3sKKyAgICBJbnB1dEVsZW1lbnQ6OmRpc3BhdGNo
Rm9jdXNFdmVudChtX2RhdGEsIGRvY3VtZW50KCkpOworICAgIEhUTUxGb3JtQ29udHJvbEVsZW1l
bnRXaXRoU3RhdGU6OmRpc3BhdGNoRm9jdXNFdmVudCgpOworfQorIAordm9pZCBIVE1MVGV4dEFy
ZWFFbGVtZW50OjpkaXNwYXRjaEJsdXJFdmVudCgpCit7CisgICAgSW5wdXRFbGVtZW50OjpkaXNw
YXRjaEJsdXJFdmVudChtX2RhdGEsIGRvY3VtZW50KCkpOworICAgIEhUTUxGb3JtQ29udHJvbEVs
ZW1lbnRXaXRoU3RhdGU6OmRpc3BhdGNoQmx1ckV2ZW50KCk7Cit9CisjZW5kaWYKKwogdm9pZCBI
VE1MVGV4dEFyZWFFbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVyKEV2ZW50KiBldmVudCkKIHsK
KyNpZiBFTkFCTEUoV0NTUykKKyAgICBpZiAoZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCku
dGV4dElucHV0RXZlbnQgJiYgZXZlbnQtPmlzVGV4dEV2ZW50KCkgJiYgcmVuZGVyZXIoKSAKKyAg
ICAgICAgJiYgIWlzQ29uZm9ybWVkVG9JbnB1dE1hc2sobV9kYXRhLCBzdGF0aWNfY2FzdDxUZXh0
RXZlbnQqPihldmVudCktPmRhdGEoKVswXSwgc2VsZWN0aW9uU3RhcnQoKSwgc3RhdGljX2Nhc3Q8
UmVuZGVyVGV4dENvbnRyb2wqPihyZW5kZXJlcigpKS0+dGV4dCgpLmxlbmd0aCgpICsgMSkpCisg
ICAgICAgIHJldHVybjsKKyNlbmRpZgorCiAgICAgaWYgKHJlbmRlcmVyKCkgJiYgKGV2ZW50LT5p
c01vdXNlRXZlbnQoKSB8fCBldmVudC0+aXNEcmFnRXZlbnQoKSB8fCBldmVudC0+aXNXaGVlbEV2
ZW50KCkgfHwgZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkuYmx1ckV2ZW50KSkKICAgICAg
ICAgc3RhdGljX2Nhc3Q8UmVuZGVyVGV4dENvbnRyb2xNdWx0aUxpbmUqPihyZW5kZXJlcigpKS0+
Zm9yd2FyZEV2ZW50KGV2ZW50KTsKIApAQCAtMjcyLDcgKzM0MSwxMSBAQCB2b2lkIEhUTUxUZXh0
QXJlYUVsZW1lbnQ6OnVwZGF0ZVZhbHVlKCkgCiAgICAgQVNTRVJUKHJlbmRlcmVyKCkpOwogICAg
IG1fdmFsdWUgPSB0b1JlbmRlclRleHRDb250cm9sKHJlbmRlcmVyKCkpLT50ZXh0KCk7CiAgICAg
Y29uc3RfY2FzdDxIVE1MVGV4dEFyZWFFbGVtZW50Kj4odGhpcyktPnNldEZvcm1Db250cm9sVmFs
dWVNYXRjaGVzUmVuZGVyZXIodHJ1ZSk7CisjaWYgRU5BQkxFKFdDU1MpCisgICAgbm90aWZ5Rm9y
bVN0YXRlQ2hhbmdlZCgqKGNvbnN0X2Nhc3Q8SW5wdXRFbGVtZW50RGF0YSo+KCZtX2RhdGEpKSwg
ZG9jdW1lbnQoKSk7CisjZWxzZQogICAgIG5vdGlmeUZvcm1TdGF0ZUNoYW5nZWQodGhpcyk7Cisj
ZW5kaWYKIH0KIAogU3RyaW5nIEhUTUxUZXh0QXJlYUVsZW1lbnQ6OnZhbHVlKCkgY29uc3QKQEAg
LTMwOCw3ICszODEsMTEgQEAgdm9pZCBIVE1MVGV4dEFyZWFFbGVtZW50OjpzZXRWYWx1ZShjb25z
dAogICAgIH0KIAogICAgIHNldE5lZWRzU3R5bGVSZWNhbGMoKTsKKyNpZiBFTkFCTEUoV0NTUykK
KyAgICBub3RpZnlGb3JtU3RhdGVDaGFuZ2VkKG1fZGF0YSwgZG9jdW1lbnQoKSk7CisjZWxzZQog
ICAgIG5vdGlmeUZvcm1TdGF0ZUNoYW5nZWQodGhpcyk7CisjZW5kaWYKIH0KIAogU3RyaW5nIEhU
TUxUZXh0QXJlYUVsZW1lbnQ6OmRlZmF1bHRWYWx1ZSgpIGNvbnN0CkBAIC0zODUsOSArNDYyLDE3
IEBAIHZvaWQgSFRNTFRleHRBcmVhRWxlbWVudDo6c2V0Um93cyhpbnQgcm8KIAogVmlzaWJsZVNl
bGVjdGlvbiBIVE1MVGV4dEFyZWFFbGVtZW50OjpzZWxlY3Rpb24oKSBjb25zdAogeworI2lmIEVO
QUJMRShXQ1NTKQorICAgIGlmICghcmVuZGVyZXIoKSB8fCBtX2RhdGEuY2FjaGVkU2VsZWN0aW9u
U3RhcnQoKSA9PSAtMSB8fCBtX2RhdGEuY2FjaGVkU2VsZWN0aW9uRW5kKCkgPT0gLTEpCisjZWxz
ZQogICAgIGlmICghcmVuZGVyZXIoKSB8fCBtX2NhY2hlZFNlbGVjdGlvblN0YXJ0IDwgMCB8fCBt
X2NhY2hlZFNlbGVjdGlvbkVuZCA8IDApCisjZW5kaWYKICAgICAgICAgcmV0dXJuIFZpc2libGVT
ZWxlY3Rpb24oKTsKKyNpZiBFTkFCTEUoV0NTUykKKyAgICByZXR1cm4gdG9SZW5kZXJUZXh0Q29u
dHJvbChyZW5kZXJlcigpKS0+c2VsZWN0aW9uKG1fZGF0YS5jYWNoZWRTZWxlY3Rpb25TdGFydCgp
LCBtX2RhdGEuY2FjaGVkU2VsZWN0aW9uRW5kKCkpOworI2Vsc2UKICAgICByZXR1cm4gdG9SZW5k
ZXJUZXh0Q29udHJvbChyZW5kZXJlcigpKS0+c2VsZWN0aW9uKG1fY2FjaGVkU2VsZWN0aW9uU3Rh
cnQsIG1fY2FjaGVkU2VsZWN0aW9uRW5kKTsKKyNlbmRpZgogfQogCiBib29sIEhUTUxUZXh0QXJl
YUVsZW1lbnQ6OnNob3VsZFVzZUlucHV0TWV0aG9kKCkgY29uc3QKSW5kZXg6IFdlYkNvcmUvaHRt
bC9IVE1MVGV4dEFyZWFFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxU
ZXh0QXJlYUVsZW1lbnQuaAkocmV2aXNpb24gNDM2ODEpCisrKyBXZWJDb3JlL2h0bWwvSFRNTFRl
eHRBcmVhRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zLDYgKzMsNyBAQAogICogICAgICAg
ICAgIChDKSAxOTk5IEFudHRpIEtvaXZpc3RvIChrb2l2aXN0b0BrZGUub3JnKQogICogICAgICAg
ICAgIChDKSAyMDAwIERpcmsgTXVlbGxlciAobXVlbGxlckBrZGUub3JnKQogICogQ29weXJpZ2h0
IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOSBUb3JjaCBNb2JpbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLiAoaHR0cDovL3d3dy50b3JjaG1vYmlsZS5jb20vKQogICoKICAqIFRoaXMgbGlicmFy
eSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
CkBAIC0yNiwxMSArMjcsMTkgQEAKIAogI2luY2x1ZGUgIkhUTUxGb3JtQ29udHJvbEVsZW1lbnQu
aCIKIAorI2lmIEVOQUJMRShXQ1NTKQorI2luY2x1ZGUgIklucHV0RWxlbWVudC5oIgorI2VuZGlm
CisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgVmlzaWJsZVNlbGVjdGlvbjsKIAorI2lm
IEVOQUJMRShXQ1NTKQorY2xhc3MgSFRNTFRleHRBcmVhRWxlbWVudCA6IHB1YmxpYyBIVE1MRm9y
bUNvbnRyb2xFbGVtZW50V2l0aFN0YXRlLCBwdWJsaWMgSW5wdXRFbGVtZW50IHsKKyNlbHNlCiBj
bGFzcyBIVE1MVGV4dEFyZWFFbGVtZW50IDogcHVibGljIEhUTUxGb3JtQ29udHJvbEVsZW1lbnRX
aXRoU3RhdGUgeworI2VuZGlmCiBwdWJsaWM6CiAgICAgSFRNTFRleHRBcmVhRWxlbWVudChjb25z
dCBRdWFsaWZpZWROYW1lJiwgRG9jdW1lbnQqLCBIVE1MRm9ybUVsZW1lbnQqID0gMCk7CiAKQEAg
LTcwLDYgKzc5LDMwIEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGJvb2wgaXNNb3VzZUZvY3VzYWJs
ZSgpIGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBpc0tleWJvYXJkRm9jdXNhYmxlKEtleWJvYXJk
RXZlbnQqKSBjb25zdDsKICAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlRm9jdXNBcHBlYXJhbmNlKGJv
b2wgcmVzdG9yZVByZXZpb3VzU2VsZWN0aW9uKTsKKyNpZiBFTkFCTEUoV0NTUykKKyAgICB2aXJ0
dWFsIHZvaWQgZGlzcGF0Y2hGb2N1c0V2ZW50KCk7CisgICAgdmlydHVhbCB2b2lkIGRpc3BhdGNo
Qmx1ckV2ZW50KCk7CisKKyAgICB2aXJ0dWFsIGJvb2wgaXNDaGVja2VkKCkgY29uc3QgeyByZXR1
cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFsIGJvb2wgaXNBdXRvZmlsbGVkKCkgY29uc3QgeyByZXR1
cm4gZmFsc2U7IH0gCisgICAgdmlydHVhbCBib29sIGlzSW5kZXRlcm1pbmF0ZSgpIGNvbnN0IHsg
cmV0dXJuIGZhbHNlOyB9CisgICAgdmlydHVhbCBib29sIGlzUmFkaW9CdXR0b24oKSBjb25zdCB7
IHJldHVybiBmYWxzZTsgfQorICAgIHZpcnR1YWwgYm9vbCBpc1RleHRGaWVsZCgpIGNvbnN0IHsg
cmV0dXJuIHRydWU7IH0KKyAgICB2aXJ0dWFsIGJvb2wgaXNTZWFyY2hGaWVsZCgpIGNvbnN0IHsg
cmV0dXJuIGZhbHNlOyB9CisgICAgdmlydHVhbCBib29sIGlzSW5wdXRUeXBlSGlkZGVuKCkgY29u
c3QgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFsIGJvb2wgaXNQYXNzd29yZEZpZWxkKCkg
Y29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFsIGJvb2wgc2VhcmNoRXZlbnRzU2hv
dWxkQmVEaXNwYXRjaGVkKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFsIGJv
b2wgcGxhY2Vob2xkZXJTaG91bGRCZVZpc2libGUoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQor
CisgICAgdmlydHVhbCBpbnQgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIDA7IH0KKyAgICB2aXJ0dWFs
IFN0cmluZyBwbGFjZWhvbGRlclZhbHVlKCkgY29uc3QgeyByZXR1cm4gU3RyaW5nKCk7IH0gCisK
KyAgICB2aXJ0dWFsIFN0cmluZyBwbGFjZWhvbGRlcigpIGNvbnN0IHsgcmV0dXJuIFN0cmluZygp
OyB9CisgICAgdmlydHVhbCB2b2lkIHNldFBsYWNlaG9sZGVyKGNvbnN0IFN0cmluZyYpIHt9Owor
CisgICAgdmlydHVhbCBTdHJpbmcgY29uc3RyYWluVmFsdWUoY29uc3QgU3RyaW5nJikgY29uc3Q7
CisgICAgdmlydHVhbCB2b2lkIHNldFZhbHVlRnJvbVJlbmRlcmVyKGNvbnN0IFN0cmluZyYpOwor
I2VuZGlmCiAKICAgICBTdHJpbmcgdmFsdWUoKSBjb25zdDsKICAgICB2b2lkIHNldFZhbHVlKGNv
bnN0IFN0cmluZyYpOwpAQCAtODYsNyArMTE5LDExIEBAIHB1YmxpYzoKICAgICB2b2lkIHNldENv
bHMoaW50KTsKICAgICB2b2lkIHNldFJvd3MoaW50KTsKICAgICAKKyNpZiBFTkFCTEUoV0NTUykK
KyAgICB2b2lkIGNhY2hlU2VsZWN0aW9uKGludCBzLCBpbnQgZSk7CisjZWxzZQogICAgIHZvaWQg
Y2FjaGVTZWxlY3Rpb24oaW50IHMsIGludCBlKSB7IG1fY2FjaGVkU2VsZWN0aW9uU3RhcnQgPSBz
OyBtX2NhY2hlZFNlbGVjdGlvbkVuZCA9IGU7IH07CisjZW5kaWYKICAgICBWaXNpYmxlU2VsZWN0
aW9uIHNlbGVjdGlvbigpIGNvbnN0OwogCiAgICAgdmlydHVhbCBib29sIHNob3VsZFVzZUlucHV0
TWV0aG9kKCkgY29uc3Q7CkBAIC0xMDAsOCArMTM3LDEyIEBAIHByaXZhdGU6CiAgICAgaW50IG1f
Y29sczsKICAgICBXcmFwTWV0aG9kIG1fd3JhcDsKICAgICBtdXRhYmxlIFN0cmluZyBtX3ZhbHVl
OworI2lmIEVOQUJMRShXQ1NTKQorICAgIElucHV0RWxlbWVudERhdGEgbV9kYXRhOworI2Vsc2UK
ICAgICBpbnQgbV9jYWNoZWRTZWxlY3Rpb25TdGFydDsKICAgICBpbnQgbV9jYWNoZWRTZWxlY3Rp
b25FbmQ7CisjZW5kaWYKIH07CiAKIH0gLy9uYW1lc3BhY2UKSW5kZXg6IFdlYkNvcmUvd21sL1dN
TElucHV0RWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS93bWwvV01MSW5wdXRFbGVt
ZW50LmNwcAkocmV2aXNpb24gNDM2ODEpCisrKyBXZWJDb3JlL3dtbC9XTUxJbnB1dEVsZW1lbnQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MSw4ICs0MSwxMCBAQCBXTUxJbnB1dEVsZW1lbnQ6OldN
TElucHV0RWxlbWVudChjb25zdCBRCiAgICAgOiBXTUxGb3JtQ29udHJvbEVsZW1lbnQodGFnTmFt
ZSwgZG9jKQogICAgICwgbV9kYXRhKHRoaXMsIHRoaXMpCiAgICAgLCBtX2lzUGFzc3dvcmRGaWVs
ZChmYWxzZSkKKyNpZiAhRU5BQkxFKFdDU1MpCiAgICAgLCBtX2lzRW1wdHlPayhmYWxzZSkKICAg
ICAsIG1fbnVtT2ZDaGFyc0FsbG93ZWRCeU1hc2soMCkKKyNlbmRpZgogewogfQogCkBAIC01Miwx
MSArNTQsMTMgQEAgV01MSW5wdXRFbGVtZW50Ojp+V01MSW5wdXRFbGVtZW50KCkKICAgICAgICAg
ZG9jdW1lbnQoKS0+dW5yZWdpc3RlckZvckRvY3VtZW50QWN0aXZhdGlvbkNhbGxiYWNrcyh0aGlz
KTsKIH0KIAorI2lmICFFTkFCTEUoV0NTUykKIHN0YXRpYyBjb25zdCBBdG9taWNTdHJpbmcmIGZv
cm1hdENvZGVzKCkKIHsKICAgICBERUZJTkVfU1RBVElDX0xPQ0FMKEF0b21pY1N0cmluZywgY29k
ZXMsICgiQWFOblh4TW0iKSk7CiAgICAgcmV0dXJuIGNvZGVzOwogfQorI2VuZGlmCiAKIGJvb2wg
V01MSW5wdXRFbGVtZW50Ojppc0tleWJvYXJkRm9jdXNhYmxlKEtleWJvYXJkRXZlbnQqKSBjb25z
dAogewpAQCAtNzYsMTkgKzgwLDI3IEBAIHZvaWQgV01MSW5wdXRFbGVtZW50OjpkaXNwYXRjaEZv
Y3VzRXZlbnQKIAogdm9pZCBXTUxJbnB1dEVsZW1lbnQ6OmRpc3BhdGNoQmx1ckV2ZW50KCkKIHsK
KyNpZiBFTkFCTEUoV0NTUykKKyAgICBJbnB1dEVsZW1lbnQ6OmRpc3BhdGNoQmx1ckV2ZW50KG1f
ZGF0YSwgZG9jdW1lbnQoKSk7CisjZW5kaWYKKwogICAgIC8vIEZpcnN0bHkgY2hlY2sgaWYgaXQg
aXMgYWxsb3dlZCB0byBsZWF2ZSB0aGlzIGlucHV0IGZpZWxkCiAgICAgU3RyaW5nIHZhbCA9IHZh
bHVlKCk7CisjaWYgIUVOQUJMRShXQ1NTKQogICAgIGlmICgoIW1faXNFbXB0eU9rICYmIHZhbC5p
c0VtcHR5KCkpIHx8ICFpc0NvbmZvcm1lZFRvSW5wdXRNYXNrKHZhbCkpIHsKICAgICAgICAgdXBk
YXRlRm9jdXNBcHBlYXJhbmNlKHRydWUpOwogICAgICAgICByZXR1cm47CiAgICAgfQorI2VuZGlm
CiAKICAgICAvLyB1cGRhdGUgdGhlIG5hbWUgdmFyaWFibGUgb2YgV01MIGlucHV0IGVsbWVuZXQK
ICAgICBTdHJpbmcgbmFtZVZhcmlhYmxlID0gZm9ybUNvbnRyb2xOYW1lKCk7CiAgICAgaWYgKCFu
YW1lVmFyaWFibGUuaXNFbXB0eSgpKQogICAgICAgICB3bWxQYWdlU3RhdGVGb3JEb2N1bWVudChk
b2N1bWVudCgpKS0+c3RvcmVWYXJpYWJsZShuYW1lVmFyaWFibGUsIHZhbCk7IAogCisjaWYgIUVO
QUJMRShXQ1NTKQogICAgIElucHV0RWxlbWVudDo6ZGlzcGF0Y2hCbHVyRXZlbnQobV9kYXRhLCBk
b2N1bWVudCgpKTsKKyNlbmRpZgogICAgIFdNTEVsZW1lbnQ6OmRpc3BhdGNoQmx1ckV2ZW50KCk7
CiB9CiAKQEAgLTIwMiw5ICsyMTQsMjUgQEAgdm9pZCBXTUxJbnB1dEVsZW1lbnQ6OnBhcnNlTWFw
cGVkQXR0cmlidQogICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBIVE1MTmFtZXM6OnNpemVB
dHRyKQogICAgICAgICBJbnB1dEVsZW1lbnQ6OnBhcnNlU2l6ZUF0dHJpYnV0ZShtX2RhdGEsIGF0
dHIpOwogICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBXTUxOYW1lczo6Zm9ybWF0QXR0cikK
KyNpZiBFTkFCTEUoV0NTUykKKyAgICB7CisgICAgICAgIFN0cmluZyBpbnB1dE1hc2sgPSBwYXJz
ZVZhbHVlRm9yYmlkZGluZ1ZhcmlhYmxlUmVmZXJlbmNlcyhhdHRyLT52YWx1ZSgpKTsKKyAgICAg
ICAgbV9kYXRhLnNldElucHV0Rm9ybWF0TWFzayh2YWxpZGF0ZUlucHV0TWFzayhtX2RhdGEsIGlu
cHV0TWFzaykpOyAKKyAgICB9CisjZWxzZQogICAgICAgICBtX2Zvcm1hdE1hc2sgPSB2YWxpZGF0
ZUlucHV0TWFzayhwYXJzZVZhbHVlRm9yYmlkZGluZ1ZhcmlhYmxlUmVmZXJlbmNlcyhhdHRyLT52
YWx1ZSgpKSk7CisjZW5kaWYKICAgICBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gV01MTmFtZXM6
OmVtcHR5b2tBdHRyKQorI2lmIEVOQUJMRShXQ1NTKQorICAgIHsKKyAgICAgICAgaWYgKGF0dHIt
PnZhbHVlKCkgPT0gInRydWUiKQorICAgICAgICAgICAgbV9kYXRhLnNldElucHV0UmVxdWlyZW1l
bnRTdGF0ZShJbnB1dEVsZW1lbnREYXRhOjpJbnB1dE5vdFJlcXVpcmVkKTsKKyAgICAgICAgZWxz
ZQorICAgICAgICAgICAgbV9kYXRhLnNldElucHV0UmVxdWlyZW1lbnRTdGF0ZShJbnB1dEVsZW1l
bnREYXRhOjpJbnB1dFJlcXVpcmVkKTsKKyAgICB9CisjZWxzZQogICAgICAgICBtX2lzRW1wdHlP
ayA9IChhdHRyLT52YWx1ZSgpID09ICJ0cnVlIik7CisjZW5kaWYKICAgICBlbHNlCiAgICAgICAg
IFdNTEVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpOwogCkBAIC0yNzIsNyArMzAw
LDExIEBAIHZvaWQgV01MSW5wdXRFbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kbGUKICAgICAgICAg
VGV4dEV2ZW50KiB0ZXh0RXZlbnQgPSBzdGF0aWNfY2FzdDxUZXh0RXZlbnQqPihldnQpOwogICAg
ICAgICBpZiAodGV4dEV2ZW50LT5kYXRhKCkgPT0gIlxuIikKICAgICAgICAgICAgIGNsaWNrRGVm
YXVsdEZvcm1CdXR0b24gPSB0cnVlOworI2lmIEVOQUJMRShXQ1NTKQorICAgICAgICBlbHNlIGlm
IChyZW5kZXJlcigpICYmICFpc0NvbmZvcm1lZFRvSW5wdXRNYXNrKG1fZGF0YSwgdGV4dEV2ZW50
LT5kYXRhKClbMF0sIHNlbGVjdGlvblN0YXJ0KCksIHRvUmVuZGVyVGV4dENvbnRyb2wocmVuZGVy
ZXIoKSktPnRleHQoKS5sZW5ndGgoKSArIDEpKQorI2Vsc2UKICAgICAgICAgZWxzZSBpZiAocmVu
ZGVyZXIoKSAmJiAhaXNDb25mb3JtZWRUb0lucHV0TWFzayh0ZXh0RXZlbnQtPmRhdGEoKVswXSwg
dG9SZW5kZXJUZXh0Q29udHJvbChyZW5kZXJlcigpKS0+dGV4dCgpLmxlbmd0aCgpICsgMSkpCisj
ZW5kaWYKICAgICAgICAgICAgIC8vIElmIHRoZSBpbnB1dGVkIGNoYXIgZG9lc24ndCBjb25mb3Jt
IHRvIHRoZSBpbnB1dCBtYXNrLCBzdG9wIGhhbmRsaW5nIAogICAgICAgICAgICAgcmV0dXJuOwog
ICAgIH0KQEAgLTM2OSw5ICs0MDEsMTcgQEAgdm9pZCBXTUxJbnB1dEVsZW1lbnQ6OmluaXQoKQog
ICAgIGlmICghbmFtZVZhcmlhYmxlLmlzRW1wdHkoKSkKICAgICAgICAgdmFyaWFibGVWYWx1ZSA9
IHBhZ2VTYXRlLT5nZXRWYXJpYWJsZShuYW1lVmFyaWFibGUpOwogCisjaWYgRU5BQkxFKFdDU1Mp
CisgICAgaWYgKHZhcmlhYmxlVmFsdWUuaXNFbXB0eSgpIHx8ICFpc0NvbmZvcm1lZFRvSW5wdXRN
YXNrKG1fZGF0YSwgdmFyaWFibGVWYWx1ZSkpIHsKKyNlbHNlCiAgICAgaWYgKHZhcmlhYmxlVmFs
dWUuaXNFbXB0eSgpIHx8ICFpc0NvbmZvcm1lZFRvSW5wdXRNYXNrKHZhcmlhYmxlVmFsdWUpKSB7
CisjZW5kaWYKICAgICAgICAgU3RyaW5nIHZhbCA9IHZhbHVlKCk7CisjaWYgRU5BQkxFKFdDU1Mp
CisgICAgICAgIGlmIChpc0NvbmZvcm1lZFRvSW5wdXRNYXNrKG1fZGF0YSwgdmFsKSkKKyNlbHNl
CiAgICAgICAgIGlmIChpc0NvbmZvcm1lZFRvSW5wdXRNYXNrKHZhbCkpCisjZW5kaWYKICAgICAg
ICAgICAgIHZhcmlhYmxlVmFsdWUgPSB2YWw7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIHZh
cmlhYmxlVmFsdWUgPSAiIjsKQEAgLTM4MCwxNCArNDIwLDI1IEBAIHZvaWQgV01MSW5wdXRFbGVt
ZW50Ojppbml0KCkKICAgICB9CiAgICAgc2V0VmFsdWUodmFyaWFibGVWYWx1ZSk7CiAgCi0gICAg
aWYgKCFoYXNBdHRyaWJ1dGUoV01MTmFtZXM6OmVtcHR5b2tBdHRyKSkgewotICAgICAgICBpZiAo
bV9mb3JtYXRNYXNrLmlzRW1wdHkoKSB8fCAKLSAgICAgICAgICAgIC8vIGNoZWNrIGlmIHRoZSBm
b3JtYXQgY29kZXMgaXMganVzdCAiKmYiCi0gICAgICAgICAgIChtX2Zvcm1hdE1hc2subGVuZ3Ro
KCkgPT0gMiAmJiBtX2Zvcm1hdE1hc2tbMF0gPT0gJyonICYmIGZvcm1hdENvZGVzKCkuZmluZCht
X2Zvcm1hdE1hc2tbMV0pICE9IC0xKSkKLSAgICAgICAgICAgIG1faXNFbXB0eU9rID0gdHJ1ZTsK
LSAgICB9CisjaWYgIUVOQUJMRShXQ1NTKQorICAgIGlmICghaGFzQXR0cmlidXRlKFdNTE5hbWVz
OjplbXB0eW9rQXR0cikKKyAgICAgICAgLy8gQ2hlY2sgaWYgdGhlIGZvcm1hdCBjb2RlcyBpcyBl
bXB0eSBvciBqdXN0IHRoZSBjb2RlIG9mICIqZiIKKyAgICAgICAgJiYgKG1fZm9ybWF0TWFzay5p
c0VtcHR5KCkgfHwgKG1fZm9ybWF0TWFzay5sZW5ndGgoKSA9PSAyICYmIG1fZm9ybWF0TWFza1sw
XSA9PSAnKicgJiYgZm9ybWF0Q29kZXMoKS5maW5kKG1fZm9ybWF0TWFza1sxXSkgIT0gLTEpKSkK
KyAgICAgICAgbV9pc0VtcHR5T2sgPSB0cnVlOworI2VuZGlmCiB9CiAKKyNpZiBFTkFCTEUoV0NT
UykKK2ludCBXTUxJbnB1dEVsZW1lbnQ6OnNlbGVjdGlvblN0YXJ0KCkgY29uc3QKK3sKKyAgICBp
ZiAoZG9jdW1lbnQoKS0+Zm9jdXNlZE5vZGUoKSAhPSB0aGlzICYmIG1fZGF0YS5jYWNoZWRTZWxl
Y3Rpb25TdGFydCgpICE9IC0xKQorICAgICAgICByZXR1cm4gbV9kYXRhLmNhY2hlZFNlbGVjdGlv
blN0YXJ0KCk7CisgICAgaWYgKCFyZW5kZXJlcigpKQorICAgICAgICByZXR1cm4gMDsKKyAgICBy
ZXR1cm4gc3RhdGljX2Nhc3Q8UmVuZGVyVGV4dENvbnRyb2wqPihyZW5kZXJlcigpKS0+c2VsZWN0
aW9uU3RhcnQoKTsKK30KKworI2Vsc2UKIFN0cmluZyBXTUxJbnB1dEVsZW1lbnQ6OnZhbGlkYXRl
SW5wdXRNYXNrKGNvbnN0IFN0cmluZyYgaW5wdXRNYXNrKQogewogICAgIGJvb2wgaXNWYWxpZCA9
IHRydWU7CkBAIC01MjEsNiArNTcyLDcgQEAgdW5zaWduZWQgV01MSW5wdXRFbGVtZW50OjpjdXJz
b3JQb3NpdGlvbgogIAogICAgIHJldHVybiBpbmRleDsKIH0KKyNlbmRpZgogCiB9CiAKSW5kZXg6
IFdlYkNvcmUvd21sL1dNTElucHV0RWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvd21s
L1dNTElucHV0RWxlbWVudC5oCShyZXZpc2lvbiA0MzY4MSkKKysrIFdlYkNvcmUvd21sL1dNTElu
cHV0RWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC01OSw3ICs1OSw3IEBAIHB1YmxpYzoKICAg
ICB2aXJ0dWFsIFN0cmluZyB2YWx1ZSgpIGNvbnN0OwogICAgIHZpcnR1YWwgdm9pZCBzZXRWYWx1
ZShjb25zdCBTdHJpbmcmKTsKICAgICB2aXJ0dWFsIFN0cmluZyBwbGFjZWhvbGRlcigpIGNvbnN0
IHsgcmV0dXJuIFN0cmluZygpOyB9Ci0gICAgdmlydHVhbCB2b2lkIHNldFBsYWNlaG9sZGVyKGNv
bnN0ciBTdHJpbmcmKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgc2V0UGxhY2Vob2xkZXIoY29uc3Qg
U3RyaW5nJikgeyB9CiAgICAgdmlydHVhbCB2b2lkIHNldFZhbHVlRnJvbVJlbmRlcmVyKGNvbnN0
IFN0cmluZyYpOwogCiAgICAgdmlydHVhbCBib29sIHNhdmVGb3JtQ29udHJvbFN0YXRlKFN0cmlu
ZyYgdmFsdWUpIGNvbnN0OwpAQCAtODgsMTkgKzg4LDI3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFs
IHZvaWQgd2lsbE1vdmVUb05ld093bmVyRG9jdW1lbnQoKTsKICAgICB2aXJ0dWFsIHZvaWQgZGlk
TW92ZVRvTmV3T3duZXJEb2N1bWVudCgpOwogCisjaWYgRU5BQkxFKFdDU1MpCisgICAgaW50IHNl
bGVjdGlvblN0YXJ0KCkgY29uc3Q7CisjZWxzZQogICAgIGJvb2wgaXNDb25mb3JtZWRUb0lucHV0
TWFzayhjb25zdCBTdHJpbmcmKTsKICAgICBib29sIGlzQ29uZm9ybWVkVG9JbnB1dE1hc2soVUNo
YXIsIHVuc2lnbmVkLCBib29sIGlzVXNlcklucHV0ID0gdHJ1ZSk7CisjZW5kaWYKIAogcHJpdmF0
ZToKICAgICB2b2lkIGluaXQoKTsKKyNpZiAhRU5BQkxFKFdDU1MpCiAgICAgU3RyaW5nIHZhbGlk
YXRlSW5wdXRNYXNrKGNvbnN0IFN0cmluZyYpOwogICAgIHVuc2lnbmVkIGN1cnNvclBvc2l0aW9u
VG9NYXNrSW5kZXgodW5zaWduZWQpOworI2VuZGlmCiAKICAgICBJbnB1dEVsZW1lbnREYXRhIG1f
ZGF0YTsKICAgICBib29sIG1faXNQYXNzd29yZEZpZWxkOworI2lmICFFTkFCTEUoV0NTUykKICAg
ICBib29sIG1faXNFbXB0eU9rOwogICAgIFN0cmluZyBtX2Zvcm1hdE1hc2s7CiAgICAgdW5zaWdu
ZWQgbV9udW1PZkNoYXJzQWxsb3dlZEJ5TWFzazsKKyNlbmRpZgogfTsKIAogfQo=
</data>
<flag name="review"
          id="15357"
          type_id="1"
          status="-"
          setter="sam"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>38967</attachid>
            <date>2009-09-02 22:45:22 -0700</date>
            <delta_ts>2010-01-19 14:41:42 -0800</delta_ts>
            <desc>re-submit the patch after porting to ToT and addressing the reviews comments </desc>
            <filename>wcss-input-23758.path</filename>
            <type>text/plain</type>
            <size>29311</size>
            <attacher name="Charles Wei">charles.wei</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0ODAwNCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNTAgQEAKKzIwMDktMDktMDIgIENoYXJsZXMgV2VpICA8Y2hhcmxlcy53ZWlAdG9y
Y2htb2JpbGUuY29tLmNuPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgIEFkZCBXQ1NTIGlucHV0IGV4dGVuc2lvbiBzdXBwb3J0IGZvciBXZWJLaXQgCisg
ICAgICAgIFdDU1MgaW5wdXQgZXh0ZW5zaW9uIGlzIG9uZSBvZiB0aGUgV0FQIHNwZWNpZmljIGV4
dGVuc2lvbnMgdG8gQ1NTMgorICAgICAgICBJdCBjb25zaXN0cyBvZiAyIG5ldyBDU1MgcHJvcGVy
dGllcywgLXdhcC1pbnB1dC1mb3JtYXQgYW5kIC13YXAtaW5wdXQtcmVxdWlyZWQKKyAgICAgICAg
Rm9yIG1vcmUgZHRhaWxzLCAgcmVmZXIgdG86IFdBUC0yMzktV0NTUy0yMDAxMTAyNi1hLnBkZgor
CisgICAgICAgIFRlc3RzOiBmYXN0L3djc3MvaW5wdXRlbGVtZW50LWlucHV0Zm9ybWF0LnhodG1s
CisgICAgICAgICAgICAgICBmYXN0L3djc3MvaW5wdXRlbGVtZW50LWlucHV0cmVxdWlyZWQueGh0
bWwKKworICAgICAgICAqIGNzcy9DU1NQYXJzZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q1NT
UGFyc2VyOjpwYXJzZVZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1BhcnNlcjo6cGFyc2VX
Q1NTSW5wdXRQcm9wZXJ0eSk6CisgICAgICAgICogY3NzL0NTU1BhcnNlci5oOgorICAgICAgICAq
IGNzcy9DU1NTdHlsZVNlbGVjdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNTU1N0eWxlU2Vs
ZWN0b3I6OmFwcGx5UHJvcGVydHkpOgorICAgICAgICAqIGNzcy9XQ1NTUHJvcGVydHlOYW1lcy5p
bjoKKyAgICAgICAgKiBkb20vSW5wdXRFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Oklu
cHV0RWxlbWVudDo6ZGlzcGF0Y2hGb2N1c0V2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OklucHV0
RWxlbWVudDo6ZGlzcGF0Y2hCbHVyRXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6SW5wdXRFbGVt
ZW50Ojpjb25zdHJhaW5WYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnB1dEVsZW1lbnQ6OmNv
bnN0cmFpblZhbHVlTGVuZ3RoKToKKyAgICAgICAgKFdlYkNvcmU6OklucHV0RWxlbWVudDo6aGFu
ZGxlQmVmb3JlVGV4dEluc2VydGVkRXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6SW5wdXRFbGVt
ZW50RGF0YTo6SW5wdXRFbGVtZW50RGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpmb3JtYXRDb2Rl
cyk6CisgICAgICAgIChXZWJDb3JlOjpjdXJzb3JQb3NpdGlvblRvTWFza0luZGV4KToKKyAgICAg
ICAgKFdlYkNvcmU6OklucHV0RWxlbWVudDo6aXNDb25mb3JtZWRUb0lucHV0TWFzayk6CisgICAg
ICAgIChXZWJDb3JlOjpJbnB1dEVsZW1lbnQ6OnZhbGlkYXRlSW5wdXRNYXNrKToKKyAgICAgICAg
KFdlYkNvcmU6OklucHV0RWxlbWVudDo6dXBkYXRlSW5wdXRQcm9wZXJ0aWVzRnJvbVdDU1MpOgor
ICAgICAgICAqIGRvbS9JbnB1dEVsZW1lbnQuaDoKKyAgICAgICAgKFdlYkNvcmU6OklucHV0RWxl
bWVudERhdGE6Oik6CisgICAgICAgIChXZWJDb3JlOjpJbnB1dEVsZW1lbnREYXRhOjppbnB1dFJl
cXVpcmVtZW50U3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6SW5wdXRFbGVtZW50RGF0YTo6c2V0
SW5wdXRSZXF1aXJlbWVudFN0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OklucHV0RWxlbWVudERh
dGE6OmlucHV0Rm9ybWF0TWFzayk6CisgICAgICAgIChXZWJDb3JlOjpJbnB1dEVsZW1lbnREYXRh
OjpzZXRJbnB1dEZvcm1hdE1hc2spOgorICAgICAgICAoV2ViQ29yZTo6SW5wdXRFbGVtZW50RGF0
YTo6YWxsb3dlZElucHV0Q2hhcnNNYXhMZW5ndGgpOgorICAgICAgICAoV2ViQ29yZTo6SW5wdXRF
bGVtZW50RGF0YTo6c2V0QWxsb3dlZElucHV0Q2hhcnNNYXhMZW5ndGgpOgorICAgICAgICAqIGh0
bWwvSFRNTElucHV0RWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MSW5wdXRFbGVt
ZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxJbnB1dEVs
ZW1lbnQ6OmNvbnN0cmFpblZhbHVlKToKKyAgICAgICAgKiBodG1sL0hUTUxJbnB1dEVsZW1lbnQu
aDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxJbnB1dEVsZW1lbnQ6OmRhdGEpOgorICAgICAgICAq
IHdtbC9XTUxJbnB1dEVsZW1lbnQuaDoKKyAgICAgICAgKFdlYkNvcmU6OldNTElucHV0RWxlbWVu
dDo6ZGF0YSk6CisKIDIwMDktMDktMDIgIEJyYWR5IEVpZHNvbiAgPGJlaWRzb25AYXBwbGUuY29t
PgogCiAgICAgICAgIFJldmlld2VkIGJ5IERhcmluIEFkbGVyLgpJbmRleDogV2ViQ29yZS9jc3Mv
Q1NTUGFyc2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2Nzcy9DU1NQYXJzZXIuY3BwCShy
ZXZpc2lvbiA0Nzk2MSkKKysrIFdlYkNvcmUvY3NzL0NTU1BhcnNlci5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTE2NTAsNiArMTY1MCwxMiBAQCBib29sIENTU1BhcnNlcjo6cGFyc2VWYWx1ZShpbnQg
cHJvcElkLCBiCiAgICAgICAgIGNvbnN0IGludCBwcm9wZXJ0aWVzWzJdID0geyBDU1NQcm9wZXJ0
eVdlYmtpdFRleHRTdHJva2VXaWR0aCwgQ1NTUHJvcGVydHlXZWJraXRUZXh0U3Ryb2tlQ29sb3Ig
fTsKICAgICAgICAgcmV0dXJuIHBhcnNlU2hvcnRoYW5kKHByb3BJZCwgcHJvcGVydGllcywgMiwg
aW1wb3J0YW50KTsKICAgICB9CisjaWYgRU5BQkxFKFdDU1MpCisgICAgY2FzZSBDU1NQcm9wZXJ0
eVdhcElucHV0Rm9ybWF0OgorICAgIGNhc2UgQ1NTUHJvcGVydHlXYXBJbnB1dFJlcXVpcmVkOgor
ICAgICAgICBwYXJzZWRWYWx1ZSA9IHBhcnNlV0NTU0lucHV0UHJvcGVydHkoKTsKKyAgICAgICAg
YnJlYWs7CisjZW5kaWYKICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0QW5pbWF0aW9uOgogICAg
ICAgICByZXR1cm4gcGFyc2VBbmltYXRpb25TaG9ydGhhbmQoaW1wb3J0YW50KTsKICAgICBjYXNl
IENTU1Byb3BlcnR5V2Via2l0VHJhbnNpdGlvbjoKQEAgLTE2OTEsNiArMTY5NywyNiBAQCBib29s
IENTU1BhcnNlcjo6cGFyc2VWYWx1ZShpbnQgcHJvcElkLCBiCiAgICAgcmV0dXJuIGZhbHNlOwog
fQogCisjaWYgRU5BQkxFKFdDU1MpCitQYXNzUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBDU1NQ
YXJzZXI6OnBhcnNlV0NTU0lucHV0UHJvcGVydHkoKQoreworICAgIFJlZlB0cjxDU1NQcmltaXRp
dmVWYWx1ZT4gcGFyc2VkVmFsdWUgPSAwOworICAgIENTU1BhcnNlclZhbHVlKiB2YWx1ZSA9IG1f
dmFsdWVMaXN0LT5jdXJyZW50KCk7CisgICAgU3RyaW5nIGlucHV0UHJvcGVydHk7CisgICAgd2hp
bGUgKHZhbHVlKSB7CisgICAgICAgIGlmICh2YWx1ZS0+dW5pdCA9PSBDU1NQcmltaXRpdmVWYWx1
ZTo6Q1NTX1NUUklORyB8fCB2YWx1ZS0+dW5pdCA9PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX0lE
RU5UKQorICAgICAgICAgICAgaW5wdXRQcm9wZXJ0eSA9IFN0cmluZyh2YWx1ZS0+c3RyaW5nKTsK
KworICAgICAgICBpZiAoIWlucHV0UHJvcGVydHkuaXNFbXB0eSgpKQorICAgICAgICAgICBwYXJz
ZWRWYWx1ZSA9IENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGUoaW5wdXRQcm9wZXJ0eSwgQ1NTUHJp
bWl0aXZlVmFsdWU6OkNTU19TVFJJTkcpOworCisgICAgICAgIHZhbHVlID0gbV92YWx1ZUxpc3Qt
Pm5leHQoKTsKKyAgICB9CisKKyAgICByZXR1cm4gcGFyc2VkVmFsdWU7Cit9CisjZW5kaWYKKwog
dm9pZCBDU1NQYXJzZXI6OmFkZEZpbGxWYWx1ZShSZWZQdHI8Q1NTVmFsdWU+JiBsdmFsLCBQYXNz
UmVmUHRyPENTU1ZhbHVlPiBydmFsKQogewogICAgIGlmIChsdmFsKSB7CkluZGV4OiBXZWJDb3Jl
L2Nzcy9DU1NQYXJzZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2Nzcy9DU1NQYXJzZXIuaAko
cmV2aXNpb24gNDc5NjEpCisrKyBXZWJDb3JlL2Nzcy9DU1NQYXJzZXIuaAkod29ya2luZyBjb3B5
KQpAQCAtMiw2ICsyLDcgQEAKICAqIENvcHlyaWdodCAoQykgMjAwMyBMYXJzIEtub2xsIChrbm9s
bEBrZGUub3JnKQogICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA4IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAwOCBFcmljIFNl
aWRlbCA8ZXJpY0B3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA5IFRvcmNoIE1vYmls
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIChodHRwOi8vd3d3LnRvcmNobW9iaWxlLmNvbS8p
CiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli
dXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTEzOCw2ICsxMzksMTAgQEAgbmFtZXNwYWNlIFdlYkNv
cmUgewogICAgICAgICBQYXNzUmVmUHRyPENTU1ZhbHVlPiBwYXJzZVNWR1N0cm9rZURhc2hhcnJh
eSgpOwogI2VuZGlmCiAKKyNpZiBFTkFCTEUoV0NTUykKKyAgICAgICAgUGFzc1JlZlB0cjxDU1NQ
cmltaXRpdmVWYWx1ZT4gcGFyc2VXQ1NTSW5wdXRQcm9wZXJ0eSgpOworI2VuZGlmCisKICAgICAg
ICAgLy8gQ1NTMyBQYXJzaW5nIFJvdXRpbmVzIChmb3IgcHJvcGVydGllcyBzcGVjaWZpYyB0byBD
U1MzKQogICAgICAgICBib29sIHBhcnNlU2hhZG93KGludCBwcm9wSWQsIGJvb2wgaW1wb3J0YW50
KTsKICAgICAgICAgYm9vbCBwYXJzZUJvcmRlckltYWdlKGludCBwcm9wSWQsIGJvb2wgaW1wb3J0
YW50LCBSZWZQdHI8Q1NTVmFsdWU+Jik7CkluZGV4OiBXZWJDb3JlL2Nzcy9DU1NTdHlsZVNlbGVj
dG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2Nzcy9DU1NTdHlsZVNlbGVjdG9yLmNwcAko
cmV2aXNpb24gNDc5NjEpCisrKyBXZWJDb3JlL2Nzcy9DU1NTdHlsZVNlbGVjdG9yLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNTIyMyw2ICs1MjIzLDEwIEBAIHZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6
YXBwbHlQcm9wZXJ0eShpbnQKICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0VGV4dERlY29yYXRp
b25zSW5FZmZlY3Q6CiAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFRleHRTdHJva2U6CiAgICAg
Y2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFZhcmlhYmxlRGVjbGFyYXRpb25CbG9jazoKKyNpZiBFTkFC
TEUoV0NTUykKKyAgICBjYXNlIENTU1Byb3BlcnR5V2FwSW5wdXRGb3JtYXQ6CisgICAgY2FzZSBD
U1NQcm9wZXJ0eVdhcElucHV0UmVxdWlyZWQ6CisjZW5kaWYKICAgICAgICAgcmV0dXJuOwogI2lm
IEVOQUJMRShTVkcpCiAgICAgZGVmYXVsdDoKSW5kZXg6IFdlYkNvcmUvY3NzL1dDU1NQcm9wZXJ0
eU5hbWVzLmluCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvY3NzL1dDU1NQcm9wZXJ0eU5hbWVzLmlu
CShyZXZpc2lvbiA0Nzk2MSkKKysrIFdlYkNvcmUvY3NzL1dDU1NQcm9wZXJ0eU5hbWVzLmluCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNSBAQAorLXdhcC1pbnB1dC1mb3JtYXQKKy13YXAtaW5w
dXQtcmVxdWlyZWQKIC13YXAtbWFycXVlZS1kaXIKIC13YXAtbWFycXVlZS1sb29wCiAtd2FwLW1h
cnF1ZWUtc3BlZWQKSW5kZXg6IFdlYkNvcmUvZG9tL0lucHV0RWxlbWVudC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9kb20vSW5wdXRFbGVtZW50LmNwcAkocmV2aXNpb24gNDc5NjEpCisrKyBX
ZWJDb3JlL2RvbS9JbnB1dEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBA
QAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCBUb3JjaCBNb2JpbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLiAoaHR0cDovL3d3dy50b3JjaG1vYmlsZS5jb20vKQorICogQ29weXJpZ2h0IChD
KSAyMDA4LCAyMDA5IFRvcmNoIE1vYmlsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIChodHRw
Oi8vd3d3LnRvcmNobW9iaWxlLmNvbS8pCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVy
IHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTQxLDYgKzQx
LDE0IEBACiAjaW5jbHVkZSAiV01MTmFtZXMuaCIKICNlbmRpZgogCisjaWYgRU5BQkxFKFdDU1Mp
CisjaW5jbHVkZSAiQ1NTUHJvcGVydHlOYW1lcy5oIgorI2luY2x1ZGUgIkNTU1J1bGUuaCIKKyNp
bmNsdWRlICJDU1NSdWxlTGlzdC5oIgorI2luY2x1ZGUgIkNTU1N0eWxlUnVsZS5oIgorI2luY2x1
ZGUgIkNTU1N0eWxlU2VsZWN0b3IuaCIKKyNlbmRpZgorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
IHVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CkBAIC01Nyw2ICs2NSwxMCBAQCB2b2lkIElucHV0
RWxlbWVudDo6ZGlzcGF0Y2hGb2N1c0V2ZW50KEluCiAgICAgaWYgKCFpbnB1dEVsZW1lbnQtPmlz
VGV4dEZpZWxkKCkpCiAgICAgICAgIHJldHVybjsKIAorI2lmIEVOQUJMRShXQ1NTKQorICAgIHVw
ZGF0ZUlucHV0UHJvcGVydGllc0Zyb21XQ1NTKGlucHV0RWxlbWVudC0+ZGF0YSgpLCBlbGVtZW50
LT5kb2N1bWVudCgpLCBlbGVtZW50KTsKKyNlbmRpZgorCiAgICAgdXBkYXRlUGxhY2Vob2xkZXJW
aXNpYmlsaXR5KGlucHV0RWxlbWVudCwgZWxlbWVudCk7CiAKICAgICBEb2N1bWVudCogZG9jdW1l
bnQgPSBlbGVtZW50LT5kb2N1bWVudCgpOwpAQCAtNzQsNiArODYsMTQgQEAgdm9pZCBJbnB1dEVs
ZW1lbnQ6OmRpc3BhdGNoQmx1ckV2ZW50KElucAogICAgIGlmICghZnJhbWUpCiAgICAgICAgIHJl
dHVybjsKIAorI2lmIEVOQUJMRShXQ1NTKQorICAgIGlmIChpbnB1dEVsZW1lbnQtPmRhdGEoKS5p
bnB1dFJlcXVpcmVtZW50U3RhdGUoKSA9PSBJbnB1dEVsZW1lbnREYXRhOjpJbnB1dFJlcXVpcmVk
ICYmIGVsZW1lbnQtPnJlbmRlcmVyKCkpIHsKKyAgICAgICAgU3RyaW5nIGlucHV0ZWRUZXh0ID0g
c3RhdGljX2Nhc3Q8UmVuZGVyVGV4dENvbnRyb2wqPihlbGVtZW50LT5yZW5kZXJlcigpKS0+dGV4
dCgpOworICAgICAgICBpZiAoaW5wdXRlZFRleHQuaXNFbXB0eSgpIHx8ICFpc0NvbmZvcm1lZFRv
SW5wdXRNYXNrKGlucHV0RWxlbWVudC0+ZGF0YSgpLCBpbnB1dGVkVGV4dCkpCisgICAgICAgICAg
ICBlbGVtZW50LT5mb2N1cygpOworICAgIH0KKyNlbmRpZgorCiAgICAgdXBkYXRlUGxhY2Vob2xk
ZXJWaXNpYmlsaXR5KGlucHV0RWxlbWVudCwgZWxlbWVudCk7CiAKICAgICBpZiAoaW5wdXRFbGVt
ZW50LT5pc1Bhc3N3b3JkRmllbGQoKSkKQEAgLTE3Niw3ICsxOTYsMjcgQEAgc3RhdGljIGludCBu
dW1DaGFyYWN0ZXJzSW5HcmFwaGVtZUNsdXN0ZQogICAgIHJldHVybiB0ZXh0QnJlYWtDdXJyZW50
KGl0KTsKIH0KIAotU3RyaW5nIElucHV0RWxlbWVudDo6Y29uc3RyYWluVmFsdWUoY29uc3QgSW5w
dXRFbGVtZW50KiBpbnB1dEVsZW1lbnQsIGNvbnN0IFN0cmluZyYgcHJvcG9zZWRWYWx1ZSwgaW50
IG1heExlbmd0aCkKK1N0cmluZyBJbnB1dEVsZW1lbnQ6OmNvbnN0cmFpblZhbHVlKGNvbnN0IElu
cHV0RWxlbWVudCogaW5wdXRFbGVtZW50LCBjb25zdCBTdHJpbmcmIHByb3Bvc2VkVmFsdWUsIGlu
dCBtYXhMZW5ndGgsIGNvbnN0IEVsZW1lbnQqIGVsZW1lbnQpCit7CisgICAgU3RyaW5nIHZhbHVl
ID0gY29uc3RyYWluVmFsdWVMZW5ndGgoaW5wdXRFbGVtZW50LCBwcm9wb3NlZFZhbHVlLCBtYXhM
ZW5ndGgpOworCisjaWYgIUVOQUJMRShXQ1NTKQorICAgIHJldHVybiB2YWx1ZTsKKyNlbHNlCisK
KyAgICBJbnB1dEVsZW1lbnREYXRhIGRhdGEgID0gKChJbnB1dEVsZW1lbnQqKWlucHV0RWxlbWVu
dCktPmRhdGEoKTsKKworICAgIGlmIChlbGVtZW50KQorICAgIHVwZGF0ZUlucHV0UHJvcGVydGll
c0Zyb21XQ1NTKGRhdGEsIGVsZW1lbnQtPmRvY3VtZW50KCksIGNvbnN0X2Nhc3Q8RWxlbWVudCo+
KGVsZW1lbnQpKTsKKworICAgIGlmIChJbnB1dEVsZW1lbnQ6OmlzQ29uZm9ybWVkVG9JbnB1dE1h
c2soZGF0YSwgdmFsdWUpKQorICAgICAgICByZXR1cm4gdmFsdWU7CisgICAgcmV0dXJuIGRhdGEu
dmFsdWUoKTsKKyNlbmRpZgorCit9CisKK1N0cmluZyBJbnB1dEVsZW1lbnQ6OmNvbnN0cmFpblZh
bHVlTGVuZ3RoKGNvbnN0IElucHV0RWxlbWVudCogaW5wdXRFbGVtZW50LCBjb25zdCBTdHJpbmcm
IHByb3Bvc2VkVmFsdWUsIGludCBtYXhMZW5ndGgpCiB7CiAgICAgU3RyaW5nIHN0cmluZyA9IHBy
b3Bvc2VkVmFsdWU7CiAgICAgaWYgKCFpbnB1dEVsZW1lbnQtPmlzVGV4dEZpZWxkKCkpCkBAIC0x
ODUsNyArMjI1LDcgQEAgU3RyaW5nIElucHV0RWxlbWVudDo6Y29uc3RyYWluVmFsdWUoY29ucwog
ICAgIHN0cmluZy5yZXBsYWNlKCJcclxuIiwgIiAiKTsKICAgICBzdHJpbmcucmVwbGFjZSgnXHIn
LCAnICcpOwogICAgIHN0cmluZy5yZXBsYWNlKCdcbicsICcgJyk7Ci0gICAgCisKICAgICBTdHJp
bmdJbXBsKiBzID0gc3RyaW5nLmltcGwoKTsKICAgICBpbnQgbmV3TGVuZ3RoID0gbnVtQ2hhcmFj
dGVyc0luR3JhcGhlbWVDbHVzdGVycyhzLCBtYXhMZW5ndGgpOwogICAgIGZvciAoaW50IGkgPSAw
OyBpIDwgbmV3TGVuZ3RoOyArK2kpIHsKQEAgLTE5Nyw3ICsyMzcsNyBAQCBTdHJpbmcgSW5wdXRF
bGVtZW50Ojpjb25zdHJhaW5WYWx1ZShjb25zCiAgICAgfQogCiAgICAgaWYgKG5ld0xlbmd0aCA8
IHN0YXRpY19jYXN0PGludD4oc3RyaW5nLmxlbmd0aCgpKSkKLSAgICAgICAgcmV0dXJuIHN0cmlu
Zy5sZWZ0KG5ld0xlbmd0aCk7CisgICAgICAgIHN0cmluZyA9IHN0cmluZy5sZWZ0KG5ld0xlbmd0
aCk7CiAKICAgICByZXR1cm4gc3RyaW5nOwogfQpAQCAtMjMxLDcgKzI3MSw3IEBAIHZvaWQgSW5w
dXRFbGVtZW50OjpoYW5kbGVCZWZvcmVUZXh0SW5zZXIKIAogICAgIC8vIFRydW5jYXRlIHRoZSBp
bnNlcnRlZCB0ZXh0IHRvIGF2b2lkIHZpb2xhdGluZyB0aGUgbWF4TGVuZ3RoIGFuZCBvdGhlciBj
b25zdHJhaW50cy4KICAgICBCZWZvcmVUZXh0SW5zZXJ0ZWRFdmVudCogdGV4dEV2ZW50ID0gc3Rh
dGljX2Nhc3Q8QmVmb3JlVGV4dEluc2VydGVkRXZlbnQqPihldmVudCk7Ci0gICAgdGV4dEV2ZW50
LT5zZXRUZXh0KGNvbnN0cmFpblZhbHVlKGlucHV0RWxlbWVudCwgdGV4dEV2ZW50LT50ZXh0KCks
IG1heE5ld0xlbmd0aCkpOworICAgIHRleHRFdmVudC0+c2V0VGV4dChjb25zdHJhaW5WYWx1ZUxl
bmd0aChpbnB1dEVsZW1lbnQsIHRleHRFdmVudC0+dGV4dCgpLCBtYXhOZXdMZW5ndGgpKTsKIH0K
IAogdm9pZCBJbnB1dEVsZW1lbnQ6OnBhcnNlU2l6ZUF0dHJpYnV0ZShJbnB1dEVsZW1lbnREYXRh
JiBkYXRhLCBFbGVtZW50KiBlbGVtZW50LCBNYXBwZWRBdHRyaWJ1dGUqIGF0dHJpYnV0ZSkKQEAg
LTI4Miw2ICszMjIsMTAgQEAgSW5wdXRFbGVtZW50RGF0YTo6SW5wdXRFbGVtZW50RGF0YSgpCiAg
ICAgLCBtX21heExlbmd0aChJbnB1dEVsZW1lbnQ6OnNfbWF4aW11bUxlbmd0aCkKICAgICAsIG1f
Y2FjaGVkU2VsZWN0aW9uU3RhcnQoLTEpCiAgICAgLCBtX2NhY2hlZFNlbGVjdGlvbkVuZCgtMSkK
KyNpZiBFTkFCTEUoV0NTUykKKyAgICAsIG1faW5wdXRSZXF1aXJlbWVudFN0YXRlKElucHV0RWxl
bWVudERhdGE6Ok5vbmUpCisgICAgLCBtX2FsbG93ZWRJbnB1dENoYXJzTWF4TGVuZ3RoKElucHV0
RWxlbWVudDo6c19tYXhpbXVtTGVuZ3RoKQorI2VuZGlmCiB7CiB9CiAKQEAgLTMwMyw0ICszNDcs
MjI4IEBAIElucHV0RWxlbWVudCogdG9JbnB1dEVsZW1lbnQoRWxlbWVudCogZWwKICAgICByZXR1
cm4gMDsKIH0KIAorI2lmIEVOQUJMRShXQ1NTKQorc3RhdGljIGlubGluZSBjb25zdCBBdG9taWNT
dHJpbmcmIGZvcm1hdENvZGVzKCkKK3sKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKEF0b21pY1N0
cmluZywgY29kZXMsICgiQWFOblh4TW0iKSk7CisgICAgcmV0dXJuIGNvZGVzOworfQorCitzdGF0
aWMgdW5zaWduZWQgY3Vyc29yUG9zaXRpb25Ub01hc2tJbmRleChjb25zdCBTdHJpbmcmIGlucHV0
Rm9ybWF0TWFzaywgdW5zaWduZWQgY3Vyc29yUG9zaXRpb24pCit7CisgICAgVUNoYXIgbWFzazsK
KyAgICBpbnQgaW5kZXggPSAtMTsKKyAgICBkbyB7CisgICAgICAgIG1hc2sgPSBpbnB1dEZvcm1h
dE1hc2tbKytpbmRleF07CisgICAgICAgIGlmIChtYXNrID09ICdcXCcpCisgICAgICAgICAgICAr
K2luZGV4OworICAgICAgICBlbHNlIGlmIChtYXNrID09ICcqJyB8fCAoaXNBU0NJSURpZ2l0KG1h
c2spICYmIG1hc2sgIT0gJzAnKSkgeworICAgICAgICAgICAgaW5kZXggPSBpbnB1dEZvcm1hdE1h
c2subGVuZ3RoKCkgLSAxOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9IHdo
aWxlIChjdXJzb3JQb3NpdGlvbi0tKTsKKworICAgIHJldHVybiBpbmRleDsKK30KKworYm9vbCBJ
bnB1dEVsZW1lbnQ6OmlzQ29uZm9ybWVkVG9JbnB1dE1hc2soY29uc3QgSW5wdXRFbGVtZW50RGF0
YSYgZGF0YSwgY29uc3QgU3RyaW5nJiBpbnB1dENoYXJzKQoreworICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBpbnB1dENoYXJzLmxlbmd0aCgpOyArK2kpCisgICAgICAgIGlmICghaXNDb25m
b3JtZWRUb0lucHV0TWFzayhkYXRhLCBpbnB1dENoYXJzW2ldLCBpLCBpICsgMSkpCisgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgSW5wdXRFbGVt
ZW50Ojppc0NvbmZvcm1lZFRvSW5wdXRNYXNrKGNvbnN0IElucHV0RWxlbWVudERhdGEmIGRhdGEs
IFVDaGFyIGluQ2hhciwgdW5zaWduZWQgY3Vyc29yUG9zaXRpb24sIHVuc2lnbmVkIGlucHV0Q2hh
cnNDb3VudCkKK3sKKyAgICBTdHJpbmcgaW5wdXRGb3JtYXRNYXNrID0gZGF0YS5pbnB1dEZvcm1h
dE1hc2soKTsKKyAgICBpZiAoaW5wdXRGb3JtYXRNYXNrLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0
dXJuIHRydWU7CisKKyAgICBpZiAoaW5wdXRDaGFyc0NvdW50ID4gZGF0YS5hbGxvd2VkSW5wdXRD
aGFyc01heExlbmd0aCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICB1bnNpZ25lZCBt
YXNrSW5kZXggPSBjdXJzb3JQb3NpdGlvblRvTWFza0luZGV4KGlucHV0Rm9ybWF0TWFzaywgY3Vy
c29yUG9zaXRpb24pOworICAgIGJvb2wgb2sgPSB0cnVlOworICAgIFVDaGFyIG1hc2sgPSBpbnB1
dEZvcm1hdE1hc2tbbWFza0luZGV4XTsKKyAgICAvLyBNYXRjaCB0aGUgaW5wdXRlZCBjaGFyYWN0
ZXIgd2l0aCBpbnB1dCBtYXNrCisgICAgc3dpdGNoIChtYXNrKSB7CisgICAgY2FzZSAnQSc6Cisg
ICAgICAgIG9rID0gIWlzQVNDSUlEaWdpdChpbkNoYXIpICYmICFpc0FTQ0lJTG93ZXIoaW5DaGFy
KSAmJiBpc0FTQ0lJUHJpbnRhYmxlKGluQ2hhcik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
J2EnOgorICAgICAgICBvayA9ICFpc0FTQ0lJRGlnaXQoaW5DaGFyKSAmJiAhaXNBU0NJSVVwcGVy
KGluQ2hhcikgJiYgaXNBU0NJSVByaW50YWJsZShpbkNoYXIpOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlICdOJzoKKyAgICAgICAgb2sgPSBpc0FTQ0lJRGlnaXQoaW5DaGFyKTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSAnbic6CisgICAgICAgIG9rID0gIWlzQVNDSUlBbHBoYShpbkNoYXIp
ICYmIGlzQVNDSUlQcmludGFibGUoaW5DaGFyKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSAn
WCc6CisgICAgICAgIG9rID0gIWlzQVNDSUlMb3dlcihpbkNoYXIpICYmIGlzQVNDSUlQcmludGFi
bGUoaW5DaGFyKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSAneCc6CisgICAgICAgIG9rID0g
IWlzQVNDSUlVcHBlcihpbkNoYXIpICYmIGlzQVNDSUlQcmludGFibGUoaW5DaGFyKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSAnTSc6CisgICAgY2FzZSAnbSc6CisgICAgICAgIG9rID0gaXNB
U0NJSVByaW50YWJsZShpbkNoYXIpOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAg
ICAgICBvayA9IChtYXNrID09IGluQ2hhcik7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAg
IHJldHVybiBvazsKK30KKworU3RyaW5nIElucHV0RWxlbWVudDo6dmFsaWRhdGVJbnB1dE1hc2so
SW5wdXRFbGVtZW50RGF0YSYgZGF0YSwgU3RyaW5nJiBpbnB1dE1hc2ssIGJvb2wgaXNGcm9tV0NT
UykKK3sKKyAgICBpZiAoaXNGcm9tV0NTUykKKyAgICAgICAgaW5wdXRNYXNrLnJlcGxhY2UoIlxc
XFwiLCAiXFwiKTsKKworICAgIGJvb2wgaXNWYWxpZCA9IHRydWU7CisgICAgYm9vbCBoYXNXaWxk
Y2FyZCA9IGZhbHNlOworICAgIHVuc2lnbmVkIGVzY2FwZUNoYXJDb3VudCA9IDA7CisgICAgdW5z
aWduZWQgbWFza0xlbmd0aCA9IGlucHV0TWFzay5sZW5ndGgoKTsKKyAgICBVQ2hhciBmb3JtYXRD
b2RlOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtYXNrTGVuZ3RoOyArK2kpIHsKKyAg
ICAgICAgZm9ybWF0Q29kZSA9IGlucHV0TWFza1tpXTsKKyAgICAgICAgaWYgKGZvcm1hdENvZGVz
KCkuZmluZChmb3JtYXRDb2RlKSA9PSAtMSkgeworICAgICAgICAgICAgaWYgKGZvcm1hdENvZGUg
PT0gJyonIHx8IChpc0FTQ0lJRGlnaXQoZm9ybWF0Q29kZSkgJiYgZm9ybWF0Q29kZSAhPSAnMCcp
KSB7CisgICAgICAgICAgICAgICAgLy8gVmFsaWRhdGUgY29kZXMgd2hpY2ggZW5kcyB3aXRoICcq
Zicgb3IgJ25mJworICAgICAgICAgICAgICAgIGZvcm1hdENvZGUgPSBpbnB1dE1hc2tbKytpXTsK
KyAgICAgICAgICAgICAgICBpZiAoKGkgKyAxICE9IG1hc2tMZW5ndGgpIHx8IGZvcm1hdENvZGVz
KCkuZmluZChmb3JtYXRDb2RlKSA9PSAtMSkgeworICAgICAgICAgICAgICAgICAgICBpc1ZhbGlk
ID0gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICBoYXNXaWxkY2FyZCA9IHRydWU7CisgICAgICAgICAgICB9IGVsc2Ug
aWYgKGZvcm1hdENvZGUgPT0gJ1xcJykgeworICAgICAgICAgICAgICAgIC8vc2tpcCBvdmVyIHRo
ZSBuZXh0IG1hc2sgY2hhcmFjdGVyCisgICAgICAgICAgICAgICAgKytpOworICAgICAgICAgICAg
ICAgICsrZXNjYXBlQ2hhckNvdW50OworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg
ICAgICBpc1ZhbGlkID0gZmFsc2U7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoIWlzVmFsaWQpCisgICAgICAgIHJldHVy
biBTdHJpbmcoKTsKKyAgICAvLyBjYWxjdWxhdGUgdGhlIG51bWJlciBvZiBjaGFyYWN0ZXJzIGFs
bG93ZWQgdG8gYmUgZW50ZXJlZCBieSBpbnB1dCBtYXNrCisgICAgdW5zaWduZWQgYWxsb3dlZExl
bmd0aCA9IG1hc2tMZW5ndGg7CisgICAgaWYgKGVzY2FwZUNoYXJDb3VudCkKKyAgICAgICAgYWxs
b3dlZExlbmd0aCAtPSBlc2NhcGVDaGFyQ291bnQ7CisKKyAgICBpZiAoaGFzV2lsZGNhcmQpIHsK
KyAgICAgICAgZm9ybWF0Q29kZSA9IGlucHV0TWFza1ttYXNrTGVuZ3RoIC0gMl07CisgICAgICAg
IGlmIChmb3JtYXRDb2RlID09ICcqJykKKyAgICAgICAgICAgIGFsbG93ZWRMZW5ndGggPSBkYXRh
LmFsbG93ZWRJbnB1dENoYXJzTWF4TGVuZ3RoKCk7CisgICAgICAgIGVsc2UgeworICAgICAgICAg
ICAgdW5zaWduZWQgbGVmdExlbiA9IFN0cmluZygmZm9ybWF0Q29kZSkudG9JbnQoKTsKKyAgICAg
ICAgICAgIGFsbG93ZWRMZW5ndGggPSBsZWZ0TGVuICsgYWxsb3dlZExlbmd0aCAtIDI7CisgICAg
ICAgIH0KKyAgICB9CisKKyAgICBpZiAoYWxsb3dlZExlbmd0aCA8IGRhdGEuYWxsb3dlZElucHV0
Q2hhcnNNYXhMZW5ndGgoKSkKKyAgICAgICAgZGF0YS5zZXRBbGxvd2VkSW5wdXRDaGFyc01heExl
bmd0aChhbGxvd2VkTGVuZ3RoKTsKKworICAgIHJldHVybiBpbnB1dE1hc2s7Cit9CisKK3ZvaWQg
SW5wdXRFbGVtZW50Ojp1cGRhdGVJbnB1dFByb3BlcnRpZXNGcm9tV0NTUyhJbnB1dEVsZW1lbnRE
YXRhJiBkYXRhLCBEb2N1bWVudCogZG9jdW1lbnQsIEVsZW1lbnQqIGVsZW1lbnQpCit7CisgICAg
aWYgKCFkb2N1bWVudCkKKyAgICAgICAgcmV0dXJuOworCisgICAgU3RyaW5nIGlucHV0Rm9ybWF0
TWFzayA9IGRhdGEuaW5wdXRGb3JtYXRNYXNrKCk7CisgICAgSW5wdXRFbGVtZW50RGF0YTo6SW5w
dXRSZXF1aXJlbWVudFN0YXRlIGlucHV0UmVxdWlyZW1lbnRTdGF0ZSA9IGRhdGEuaW5wdXRSZXF1
aXJlbWVudFN0YXRlKCk7CisgICAgaWYgKCFpbnB1dEZvcm1hdE1hc2suaXNFbXB0eSgpICYmIElu
cHV0RWxlbWVudERhdGE6Ok5vbmUgIT0gaW5wdXRSZXF1aXJlbWVudFN0YXRlKQorICAgICAgICBy
ZXR1cm47CisKKyAgICAvLzEsIGdldCBpbnB1dCBwcm9wZXJ0eSBmcm9tIGlubGluZSBXQ1NTIGZp
cnN0CisgICAgQ1NTU3R5bGVEZWNsYXJhdGlvbiogc3R5bGVEZWNsYXJhdGlvbiA9IGVsZW1lbnQt
PnN0eWxlKCk7CisgICAgaWYgKHN0eWxlRGVjbGFyYXRpb24pIHsKKyAgICAgICAgaWYgKGlucHV0
Rm9ybWF0TWFzay5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgIGlucHV0Rm9ybWF0TWFzayA9IHN0
eWxlRGVjbGFyYXRpb24tPmdldFByb3BlcnR5VmFsdWUoQ1NTUHJvcGVydHlXYXBJbnB1dEZvcm1h
dCk7CisgICAgICAgICAgICBpbnB1dEZvcm1hdE1hc2sucmVwbGFjZSgnXCcnLCAnICcpOworICAg
ICAgICAgICAgaW5wdXRGb3JtYXRNYXNrID0gaW5wdXRGb3JtYXRNYXNrLnN0cmlwV2hpdGVTcGFj
ZSgpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKElucHV0RWxlbWVudERhdGE6Ok5vbmUgPT0g
aW5wdXRSZXF1aXJlbWVudFN0YXRlKSB7CisgICAgICAgICAgICBTdHJpbmcgaW5wdXRSZXF1aXJl
ZCA9IHN0eWxlRGVjbGFyYXRpb24tPmdldFByb3BlcnR5VmFsdWUoQ1NTUHJvcGVydHlXYXBJbnB1
dFJlcXVpcmVkKTsKKyAgICAgICAgICAgIGlmICghaW5wdXRSZXF1aXJlZC5pc0VtcHR5KCkpCisg
ICAgICAgICAgICAgICAgaW5wdXRSZXF1aXJlbWVudFN0YXRlID0gKGlucHV0UmVxdWlyZWQgPT0g
InRydWUiID8gSW5wdXRFbGVtZW50RGF0YTo6SW5wdXRSZXF1aXJlZCA6IElucHV0RWxlbWVudERh
dGE6OklucHV0Tm90UmVxdWlyZWQpOworICAgICAgICB9CisgICAgfQorCisgICAgLy8yLCBUcnkg
dG8gZ2V0IGlucHV0IHByb3BlcnR5IGZyb20gaW50ZXJuYWwgV0NTUyBhbmQgZXh0ZXJuYWwgV0NT
UyBpbiB0dXJuCisgICAgaWYgKGlucHV0Rm9ybWF0TWFzay5pc0VtcHR5KCkgfHwgSW5wdXRFbGVt
ZW50RGF0YTo6Tm9uZSA9PSBpbnB1dFJlcXVpcmVtZW50U3RhdGUpIHsKKyAgICAgICAgaWYgKGRv
Y3VtZW50LT5zdHlsZVNlbGVjdG9yKCkpIHsKKyAgICAgICAgICAgIFJlZlB0cjxDU1NSdWxlTGlz
dD4gcnVsZUxpc3QgPSBkb2N1bWVudC0+c3R5bGVTZWxlY3RvcigpLT5zdHlsZVJ1bGVzRm9yRWxl
bWVudChlbGVtZW50LCBmYWxzZSk7CisgICAgICAgICAgICBpZiAocnVsZUxpc3QgJiYgcnVsZUxp
c3QtPmxlbmd0aCgpID4gMCkgeworICAgICAgICAgICAgICAgIENTU1J1bGUqIHJ1bGUgPSAwOwor
ICAgICAgICAgICAgICAgIFN0cmluZyBjc3NUZXh0OworICAgICAgICAgICAgICAgIGZvciAoaW50
IGkgPSAwOyBpIDwgcnVsZUxpc3QtPmxlbmd0aCgpOyArK2kpIHsKKyAgICAgICAgICAgICAgICAg
ICAgcnVsZSA9IHJ1bGVMaXN0LT5pdGVtKGkpOworICAgICAgICAgICAgICAgICAgICBpZiAocnVs
ZS0+aXNTdHlsZVJ1bGUoKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgQ1NTU3R5bGVSdWxl
KiBjc1J1bGUgPSBzdGF0aWNfY2FzdDxDU1NTdHlsZVJ1bGUqPihydWxlKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGlmIChjc1J1bGUtPnN0eWxlKCkpIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjc3NUZXh0ID0gY3NSdWxlLT5zdHlsZSgpLT5jc3NUZXh0KCk7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaW50IGluZGV4ID0gLTE7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKGlucHV0Rm9ybWF0TWFzay5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaW5kZXggPSBjc3NUZXh0LmZpbmQoIi13YXAtaW5wdXQtZm9ybWF0Iik7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbmRleCAhPSAtMSkgeworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHBvc3Rpb24gPSBjc3NUZXh0LmZp
bmQoJzonLCBpbmRleCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1
dEZvcm1hdE1hc2sgPSBjc3NUZXh0LnN1YnN0cmluZyhwb3N0aW9uICsgMSk7CisKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvc3Rpb24gPSBpbnB1dEZvcm1hdE1hc2suZmlu
ZCgnOycpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXRGb3JtYXRN
YXNrLnRydW5jYXRlKHBvc3Rpb24pOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaW5wdXRGb3JtYXRNYXNrLnJlcGxhY2UoJ1wnJywgJyAnKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGlucHV0Rm9ybWF0TWFzayA9IGlucHV0Rm9ybWF0TWFzay5zdHJp
cFdoaXRlU3BhY2UoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlm
IChJbnB1dEVsZW1lbnREYXRhOjpOb25lID09IGlucHV0UmVxdWlyZW1lbnRTdGF0ZSkgeworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRleCA9IGNzc1RleHQuZmluZCgiLXdhcC1p
bnB1dC1yZXF1aXJlZCIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW5k
ZXggIT0gLTEpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBwb3N0
aW9uID0gY3NzVGV4dC5maW5kKCc6JywgaW5kZXgpOworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgU3RyaW5nIGlucHV0UmVxdWlyZWQgPSBjc3NUZXh0LnN1YnN0cmluZyhwb3N0
aW9uICsgMSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3N0aW9uID0g
aW5wdXRSZXF1aXJlZC5maW5kKCc7Jyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpbnB1dFJlcXVpcmVkLnRydW5jYXRlKHBvc3Rpb24pOworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaW5wdXRSZXF1aXJlZCA9IGlucHV0UmVxdWlyZWQuc3RyaXBXaGl0
ZVNwYWNlKCk7CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghaW5w
dXRSZXF1aXJlZC5pc0VtcHR5KCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaW5wdXRSZXF1aXJlbWVudFN0YXRlID0gKGlucHV0UmVxdWlyZWQgPT0gInRydWUiID8g
SW5wdXRFbGVtZW50RGF0YTo6SW5wdXRSZXF1aXJlZCA6IElucHV0RWxlbWVudERhdGE6OklucHV0
Tm90UmVxdWlyZWQpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KCFpbnB1dEZvcm1hdE1hc2suaXNFbXB0eSgpICYmIElucHV0RWxlbWVudERhdGE6Ok5vbmUgIT0g
aW5wdXRSZXF1aXJlbWVudFN0YXRlKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAg
IGlmIChpbnB1dEZvcm1hdE1hc2suaXNFbXB0eSgpKQorICAgICAgICBkYXRhLnNldElucHV0Rm9y
bWF0TWFzaygiKk0iKTsgLy8gU2V0IGlucHV0IG1hc2sgdG8gJypNJyBieSBkZWZhdWx0CisgICAg
ZWxzZQorICAgICAgICBkYXRhLnNldElucHV0Rm9ybWF0TWFzayh2YWxpZGF0ZUlucHV0TWFzayhk
YXRhLCBpbnB1dEZvcm1hdE1hc2ssIHRydWUpKTsKKworICAgIC8vIElmICctd2FwLWlucHV0LXJl
cXVpcmVkJyBpcyBub3Qgc3BlY2lmaWVkLCBpbnB1dCBpcyBzdGlsbCByZXF1aXJlZCB3aGVuCisg
ICAgLy8gdGhlIGlucHV0IGZvcm1hdCBpcyBub3QgZW1wdHkgYW5kIHRoZSBjb2RlcyBpcyBub3Qg
ZXF1YWwgdG8gIipmIgorICAgIGlmIChJbnB1dEVsZW1lbnREYXRhOjpOb25lID09IGlucHV0UmVx
dWlyZW1lbnRTdGF0ZSkgeworICAgICAgICBpZiAoaW5wdXRGb3JtYXRNYXNrLmlzRW1wdHkoKSB8
fCAoaW5wdXRGb3JtYXRNYXNrLmxlbmd0aCgpID09IDIgJiYgaW5wdXRGb3JtYXRNYXNrWzBdID09
ICcqJykpCisgICAgICAgICAgICBkYXRhLnNldElucHV0UmVxdWlyZW1lbnRTdGF0ZShJbnB1dEVs
ZW1lbnREYXRhOjpJbnB1dE5vdFJlcXVpcmVkKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAg
ZGF0YS5zZXRJbnB1dFJlcXVpcmVtZW50U3RhdGUoSW5wdXRFbGVtZW50RGF0YTo6SW5wdXRSZXF1
aXJlZCk7CisgICAgfSBlbHNlCisgICAgICAgIGRhdGEuc2V0SW5wdXRSZXF1aXJlbWVudFN0YXRl
KGlucHV0UmVxdWlyZW1lbnRTdGF0ZSk7Cit9CisjZW5kaWYKKwogfQpJbmRleDogV2ViQ29yZS9k
b20vSW5wdXRFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20vSW5wdXRFbGVtZW50
LmgJKHJldmlzaW9uIDQ3OTYxKQorKysgV2ViQ29yZS9kb20vSW5wdXRFbGVtZW50LmgJKHdvcmtp
bmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA4IFRvcmNo
IE1vYmlsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIChodHRwOi8vd3d3LnRvcmNobW9iaWxl
LmNvbS8pCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDkgVG9yY2ggTW9iaWxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4gKGh0dHA6Ly93d3cudG9yY2htb2JpbGUuY29tLykKICAqCiAgKiBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYwpAQCAtNTksNiArNTksNyBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIHZvaWQg
Y2FjaGVTZWxlY3Rpb24oaW50IHN0YXJ0LCBpbnQgZW5kKSA9IDA7CiAgICAgdmlydHVhbCB2b2lk
IHNlbGVjdCgpID0gMDsKKyAgICB2aXJ0dWFsIElucHV0RWxlbWVudERhdGEmIGRhdGEoKSA9IDA7
CiAKICAgICBzdGF0aWMgY29uc3QgaW50IHNfbWF4aW11bUxlbmd0aDsKICAgICBzdGF0aWMgY29u
c3QgaW50IHNfZGVmYXVsdFNpemU7CkBAIC03MiwxMiArNzMsMjAgQEAgcHJvdGVjdGVkOgogICAg
IHN0YXRpYyB2b2lkIHVwZGF0ZVNlbGVjdGlvblJhbmdlKElucHV0RWxlbWVudCosIEVsZW1lbnQq
LCBpbnQgc3RhcnQsIGludCBlbmQpOwogICAgIHN0YXRpYyB2b2lkIGFib3V0VG9VbmxvYWQoSW5w
dXRFbGVtZW50KiwgRWxlbWVudCopOwogICAgIHN0YXRpYyB2b2lkIHNldFZhbHVlRnJvbVJlbmRl
cmVyKElucHV0RWxlbWVudERhdGEmLCBJbnB1dEVsZW1lbnQqLCBFbGVtZW50KiwgY29uc3QgU3Ry
aW5nJik7Ci0gICAgc3RhdGljIFN0cmluZyBjb25zdHJhaW5WYWx1ZShjb25zdCBJbnB1dEVsZW1l
bnQqLCBjb25zdCBTdHJpbmcmIHByb3Bvc2VkVmFsdWUsIGludCBtYXhMZW5ndGgpOworICAgIHN0
YXRpYyBTdHJpbmcgY29uc3RyYWluVmFsdWVMZW5ndGgoY29uc3QgSW5wdXRFbGVtZW50KiwgY29u
c3QgU3RyaW5nJiBwcm9wb3NlZFZhbHVlLCBpbnQgbWF4TGVuZ3RoKTsKKyAgICBzdGF0aWMgU3Ry
aW5nIGNvbnN0cmFpblZhbHVlKGNvbnN0IElucHV0RWxlbWVudCosIGNvbnN0IFN0cmluZyYgcHJv
cG9zZWRWYWx1ZSwgaW50IG1heExlbmd0aCwgY29uc3QgRWxlbWVudCogZWxlbWVudCA9IDApOwog
ICAgIHN0YXRpYyB2b2lkIGhhbmRsZUJlZm9yZVRleHRJbnNlcnRlZEV2ZW50KElucHV0RWxlbWVu
dERhdGEmLCBJbnB1dEVsZW1lbnQqLCBEb2N1bWVudCosIEV2ZW50Kik7CiAgICAgc3RhdGljIHZv
aWQgcGFyc2VTaXplQXR0cmlidXRlKElucHV0RWxlbWVudERhdGEmLCBFbGVtZW50KiwgTWFwcGVk
QXR0cmlidXRlKik7CiAgICAgc3RhdGljIHZvaWQgcGFyc2VNYXhMZW5ndGhBdHRyaWJ1dGUoSW5w
dXRFbGVtZW50RGF0YSYsIElucHV0RWxlbWVudCosIEVsZW1lbnQqLCBNYXBwZWRBdHRyaWJ1dGUq
KTsKICAgICBzdGF0aWMgdm9pZCB1cGRhdGVWYWx1ZUlmTmVlZGVkKElucHV0RWxlbWVudERhdGEm
LCBJbnB1dEVsZW1lbnQqKTsKICAgICBzdGF0aWMgdm9pZCBub3RpZnlGb3JtU3RhdGVDaGFuZ2Vk
KEVsZW1lbnQqKTsKKyNpZiBFTkFCTEUoV0NTUykKKyAgICBzdGF0aWMgYm9vbCBpc0NvbmZvcm1l
ZFRvSW5wdXRNYXNrKGNvbnN0IElucHV0RWxlbWVudERhdGEmLCBjb25zdCBTdHJpbmcmKTsKKyAg
ICBzdGF0aWMgYm9vbCBpc0NvbmZvcm1lZFRvSW5wdXRNYXNrKGNvbnN0IElucHV0RWxlbWVudERh
dGEmLCBVQ2hhciwgdW5zaWduZWQsIHVuc2lnbmVkKTsKKyAgICBzdGF0aWMgdm9pZCB1cGRhdGVJ
bnB1dFByb3BlcnRpZXNGcm9tV0NTUyhJbnB1dEVsZW1lbnREYXRhJiwgRG9jdW1lbnQqLCBFbGVt
ZW50Kik7CisgICAgc3RhdGljIFN0cmluZyB2YWxpZGF0ZUlucHV0TWFzayhJbnB1dEVsZW1lbnRE
YXRhJiwgU3RyaW5nJiwgYm9vbCBpc0Zyb21XQ1NTID0gZmFsc2UpOworI2VuZGlmCisKIH07CiAK
IC8vIEhUTUwvV01MSW5wdXRFbGVtZW50IGhvbGQgdGhpcyBzdHJ1Y3QgYXMgbWVtYmVyIHZhcmlh
YmxlCkBAIC0xMDQsNiArMTEzLDE4IEBAIHB1YmxpYzoKICAgICBpbnQgY2FjaGVkU2VsZWN0aW9u
RW5kKCkgY29uc3QgeyByZXR1cm4gbV9jYWNoZWRTZWxlY3Rpb25FbmQ7IH0KICAgICB2b2lkIHNl
dENhY2hlZFNlbGVjdGlvbkVuZChpbnQgdmFsdWUpIHsgbV9jYWNoZWRTZWxlY3Rpb25FbmQgPSB2
YWx1ZTsgfQogCisjaWYgRU5BQkxFKFdDU1MpCisgICAgZW51bSBJbnB1dFJlcXVpcmVtZW50U3Rh
dGUgeyBOb25lID0gLTEsIElucHV0Tm90UmVxdWlyZWQsIElucHV0UmVxdWlyZWQgfTsKKyAgICBJ
bnB1dFJlcXVpcmVtZW50U3RhdGUgaW5wdXRSZXF1aXJlbWVudFN0YXRlKCkgY29uc3QgeyByZXR1
cm4gbV9pbnB1dFJlcXVpcmVtZW50U3RhdGU7IH0KKyAgICB2b2lkIHNldElucHV0UmVxdWlyZW1l
bnRTdGF0ZShJbnB1dFJlcXVpcmVtZW50U3RhdGUgc3RhdGUpIHsgbV9pbnB1dFJlcXVpcmVtZW50
U3RhdGUgPSBzdGF0ZTsgfQorCisgICAgU3RyaW5nIGlucHV0Rm9ybWF0TWFzaygpIGNvbnN0IHsg
cmV0dXJuIG1faW5wdXRGb3JtYXRNYXNrOyB9CisgICAgdm9pZCBzZXRJbnB1dEZvcm1hdE1hc2so
Y29uc3QgU3RyaW5nJiBtYXNrKSB7IG1faW5wdXRGb3JtYXRNYXNrID0gbWFzazsgfQorCisgICAg
dW5zaWduZWQgYWxsb3dlZElucHV0Q2hhcnNNYXhMZW5ndGgoKSBjb25zdCB7IHJldHVybiBtX2Fs
bG93ZWRJbnB1dENoYXJzTWF4TGVuZ3RoOyB9CisgICAgdm9pZCBzZXRBbGxvd2VkSW5wdXRDaGFy
c01heExlbmd0aCh1bnNpZ25lZCBtYXhMZW5ndGgpIHsgbV9hbGxvd2VkSW5wdXRDaGFyc01heExl
bmd0aCA9IG1heExlbmd0aDsgfQorI2VuZGlmCisKIHByaXZhdGU6CiAgICAgQXRvbWljU3RyaW5n
IG1fbmFtZTsKICAgICBTdHJpbmcgbV92YWx1ZTsKQEAgLTExMSw2ICsxMzIsMTEgQEAgcHJpdmF0
ZToKICAgICBpbnQgbV9tYXhMZW5ndGg7CiAgICAgaW50IG1fY2FjaGVkU2VsZWN0aW9uU3RhcnQ7
CiAgICAgaW50IG1fY2FjaGVkU2VsZWN0aW9uRW5kOworI2lmIEVOQUJMRShXQ1NTKQorICAgIFN0
cmluZyBtX2lucHV0Rm9ybWF0TWFzazsKKyAgICBJbnB1dFJlcXVpcmVtZW50U3RhdGUgbV9pbnB1
dFJlcXVpcmVtZW50U3RhdGU7CisgICAgdW5zaWduZWQgbV9hbGxvd2VkSW5wdXRDaGFyc01heExl
bmd0aDsKKyNlbmRpZgogfTsKIAogSW5wdXRFbGVtZW50KiB0b0lucHV0RWxlbWVudChFbGVtZW50
Kik7CkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTElucHV0RWxlbWVudC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9odG1sL0hUTUxJbnB1dEVsZW1lbnQuY3BwCShyZXZpc2lvbiA0Nzk2MSkKKysr
IFdlYkNvcmUvaHRtbC9IVE1MSW5wdXRFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNSw2
ICs1LDcgQEAKICAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiAgICAgICAgICAgKEMpIDIwMDYgQWxl
eGV5IFByb3NrdXJ5YWtvdiAoYXBAbnlwb3AuY29tKQogICogQ29weXJpZ2h0IChDKSAyMDA3IFNh
bXVlbCBXZWluaWcgKHNhbUB3ZWJraXQub3JnKQorICogQ29weXJpZ2h0IChDKSAyMDA5IFRvcmNo
IE1vYmlsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIChodHRwOi8vd3d3LnRvcmNobW9iaWxl
LmNvbS8pCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk
aXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTEyNTAsOCArMTI1MSwxNSBAQCB2b2lkIEhU
TUxJbnB1dEVsZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRsCiAKICAgICBib29sIGNsaWNrRGVmYXVs
dEZvcm1CdXR0b24gPSBmYWxzZTsKIAotICAgIGlmIChpc1RleHRGaWVsZCgpICYmIGV2dC0+dHlw
ZSgpID09IGV2ZW50TmFtZXMoKS50ZXh0SW5wdXRFdmVudCAmJiBldnQtPmlzVGV4dEV2ZW50KCkg
JiYgc3RhdGljX2Nhc3Q8VGV4dEV2ZW50Kj4oZXZ0KS0+ZGF0YSgpID09ICJcbiIpCi0gICAgICAg
IGNsaWNrRGVmYXVsdEZvcm1CdXR0b24gPSB0cnVlOworICAgIGlmIChpc1RleHRGaWVsZCgpICYm
IGV2dC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS50ZXh0SW5wdXRFdmVudCAmJiBldnQtPmlzVGV4
dEV2ZW50KCkpIHsKKyAgICAgICAgVGV4dEV2ZW50KiB0ZXh0RXZlbnQgPSBzdGF0aWNfY2FzdDxU
ZXh0RXZlbnQqPihldnQpOworICAgICAgICBpZiAodGV4dEV2ZW50LT5kYXRhKCkgPT0gIlxuIikK
KyAgICAgICAgICAgIGNsaWNrRGVmYXVsdEZvcm1CdXR0b24gPSB0cnVlOworI2lmIEVOQUJMRShX
Q1NTKQorICAgICAgICBlbHNlIGlmIChyZW5kZXJlcigpICYmICFpc0NvbmZvcm1lZFRvSW5wdXRN
YXNrKG1fZGF0YSwgdGV4dEV2ZW50LT5kYXRhKClbMF0sIHNlbGVjdGlvblN0YXJ0KCksIHN0YXRp
Y19jYXN0PFJlbmRlclRleHRDb250cm9sKj4ocmVuZGVyZXIoKSktPnRleHQoKS5sZW5ndGgoKSAr
IDEpKQorICAgICAgICAgICAgcmV0dXJuOworI2VuZGlmCisgICAgfQogCiAgICAgaWYgKGlucHV0
VHlwZSgpID09IElNQUdFICYmIGV2dC0+aXNNb3VzZUV2ZW50KCkgJiYgZXZ0LT50eXBlKCkgPT0g
ZXZlbnROYW1lcygpLmNsaWNrRXZlbnQpIHsKICAgICAgICAgLy8gcmVjb3JkIHRoZSBtb3VzZSBw
b3NpdGlvbiBmb3Igd2hlbiB3ZSBnZXQgdGhlIERPTUFjdGl2YXRlIGV2ZW50CkBAIC0xNjUwLDcg
KzE2NTgsNyBAQCBGaWxlTGlzdCogSFRNTElucHV0RWxlbWVudDo6ZmlsZXMoKQogCiBTdHJpbmcg
SFRNTElucHV0RWxlbWVudDo6Y29uc3RyYWluVmFsdWUoY29uc3QgU3RyaW5nJiBwcm9wb3NlZFZh
bHVlKSBjb25zdAogewotICAgIHJldHVybiBJbnB1dEVsZW1lbnQ6OmNvbnN0cmFpblZhbHVlKHRo
aXMsIHByb3Bvc2VkVmFsdWUsIG1fZGF0YS5tYXhMZW5ndGgoKSk7CisgICAgcmV0dXJuIElucHV0
RWxlbWVudDo6Y29uc3RyYWluVmFsdWUodGhpcywgcHJvcG9zZWRWYWx1ZSwgbV9kYXRhLm1heExl
bmd0aCgpLCB0aGlzKTsKIH0KIAogYm9vbCBIVE1MSW5wdXRFbGVtZW50OjpuZWVkc0FjdGl2YXRp
b25DYWxsYmFjaygpCkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTElucHV0RWxlbWVudC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MSW5wdXRFbGVtZW50LmgJKHJldmlzaW9uIDQ3OTYx
KQorKysgV2ViQ29yZS9odG1sL0hUTUxJbnB1dEVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAt
MjMwLDYgKzIzMCw4IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGJvb2wgd2lsbFZhbGlkYXRlKCkg
Y29uc3Q7CiAKICAgICB2aXJ0dWFsIGJvb2wgcGxhY2Vob2xkZXJTaG91bGRCZVZpc2libGUoKSBj
b25zdDsKKworICAgIHZpcnR1YWwgSW5wdXRFbGVtZW50RGF0YSYgZGF0YSgpIHsgcmV0dXJuIG1f
ZGF0YTsgfQogICAgIAogcHJvdGVjdGVkOgogICAgIHZpcnR1YWwgdm9pZCB3aWxsTW92ZVRvTmV3
T3duZXJEb2N1bWVudCgpOwpJbmRleDogV2ViQ29yZS93bWwvV01MSW5wdXRFbGVtZW50LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS93bWwvV01MSW5wdXRFbGVtZW50LmgJKHJldmlzaW9uIDQ3OTYx
KQorKysgV2ViQ29yZS93bWwvV01MSW5wdXRFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTg3
LDkgKzg3LDEyIEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgd2lsbE1vdmVUb05ld093bmVy
RG9jdW1lbnQoKTsKICAgICB2aXJ0dWFsIHZvaWQgZGlkTW92ZVRvTmV3T3duZXJEb2N1bWVudCgp
OwogCisgICAgdmlydHVhbCBJbnB1dEVsZW1lbnREYXRhJiBkYXRhKCkgeyByZXR1cm4gbV9kYXRh
OyB9CisKICAgICBib29sIGlzQ29uZm9ybWVkVG9JbnB1dE1hc2soY29uc3QgU3RyaW5nJik7CiAg
ICAgYm9vbCBpc0NvbmZvcm1lZFRvSW5wdXRNYXNrKFVDaGFyLCB1bnNpZ25lZCwgYm9vbCBpc1Vz
ZXJJbnB1dCA9IHRydWUpOwogCisKIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIFdNTENhcmRF
bGVtZW50OwogICAgIHZvaWQgaW5pdGlhbGl6ZSgpOwpJbmRleDogTGF5b3V0VGVzdHMvQ2hhbmdl
TG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL0NoYW5nZUxvZwkocmV2aXNpb24gNDgwMDQp
CisrKyBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxMyBA
QAorMjAwOS0wOS0wMiAgQ2hhcmxlcyBXZWkgIDxjaGFybGVzLndlaUB0b3JjaG1vYmlsZS5jb20u
Y24+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRk
IHRlc3QgY2FzZXMgZm9yIFdDU1MgaW5wdXQgZXh0ZW5zaW9uIC13YXAtaW5wdXQtZm9ybWF0IGFu
ZCAtd2FwLWlucHV0LXJlcXVpcmVkCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0yMzc1OAorCisgICAgICAgICogZmFzdC93Y3NzL2lucHV0ZWxlbWVudC1p
bnB1dGZvcm1hdC54aHRtbDogQWRkZWQuCisgICAgICAgICogZmFzdC93Y3NzL2lucHV0ZWxlbWVu
dC1pbnB1dHJlcXVpcmVkLnhodG1sOiBBZGRlZC4KKwogMjAwOS0wOS0wMiAgUnlvc3VrZSBOaXdh
ICA8cm5pd2FAd2Via2l0Lm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBFcmljIFNlaWRlbC4K
SW5kZXg6IExheW91dFRlc3RzL2Zhc3Qvd2Nzcy9pbnB1dGVsZW1lbnQtaW5wdXRmb3JtYXQueGh0
bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC93Y3NzL2lucHV0ZWxlbWVudC1pbnB1
dGZvcm1hdC54aHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3Qvd2Nzcy9pbnB1
dGVsZW1lbnQtaW5wdXRmb3JtYXQueGh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNDUgQEAK
Kzw/eG1sIHZlcnNpb249IjEuMCI/PgorPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XQVBGT1JV
TS8vRFREIFhIVE1MIE1vYmlsZSAxLjEvL0VOIiAiaHR0cDovL3d3dy53YXBmb3J1bS5vcmcvRFRE
L3hodG1sLW1vYmlsZTExLmR0ZCI+CisgCis8aHRtbCB4bWxucz0iaHR0cDovL3d3dy53My5vcmcv
MTk5OS94aHRtbCI+Cis8aGVhZD4KKzx0aXRsZT5XQ1NTIGlucHV0IGV4dGVuc2lvbiB0ZXN0IGZv
ciAmbHQ7aW5wdXQmZ3Q7IGVsZW1lbnQ8L3RpdGxlPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj4K
K2lucHV0IHsgLXdhcC1pbnB1dC1mb3JtYXQ6ICdhQW5OJzt9Cis8L3N0eWxlPgorPC9oZWFkPgor
Cis8Ym9keT4KKzxoMj4gVGVzdCBmb3IgV0NTUyBpbnB1dCBleHRlbnNpb246IC13YXAtaW5wdXQt
Zm9ybWF0PC9oMj4KKworPHA+CitjYXNlIDEgKGJ5IGRlZmF1bHQ6IGZvcm1hdD0nYUFuTicpCis8
aW5wdXQgbmFtZT0iY2FzZTEiIHR5cGU9InRleHQiLz4KKzxici8+CitjYXNlIDIgKGZvcm1hdD0n
NWEnKQorPGlucHV0IG5hbWU9ImNhc2UyIiBzdHlsZT0iLXdhcC1pbnB1dC1mb3JtYXQ6ICc1YScg
IiAvPgorPGJyLz4KK2Nhc2UgMyAoZm9ybWF0PScqTicpCis8aW5wdXQgbmFtZT0iY2FzZTMiIHR5
cGU9InRleHQiIHN0eWxlPSItd2FwLWlucHV0LWZvcm1hdDogJypOJyAiIC8+Cis8YnIvPgorY2Fz
ZSA0IChmb3JtYXQ9J2FBbk54WG1NJykKKzxpbnB1dCBuYW1lPSJjYXNlNCIgdHlwZT0idGV4dCIg
c3R5bGU9Ii13YXAtaW5wdXQtZm9ybWF0OiAnYUFuTnhYbU0nICIgLz4KKzxici8+CitjYXNlIDUg
KGZvcm1hdD0nYVwtTk4qeCcpCis8aW5wdXQgbmFtZT0iY2FzZTUiIHR5cGU9InRleHQiIHN0eWxl
PSItd2FwLWlucHV0LWZvcm1hdDogJ2FcXC1OTip4JyAiIC8+Cis8YnIvPgorY2FzZSA2IChmb3Jt
YXQ9J05hXCtcLTNOJykKKzxpbnB1dCBuYW1lPSJjYXNlNiIgc3R5bGU9Ii13YXAtaW5wdXQtZm9y
bWF0OiAnTmFcXCtcXC0zTiciLz4KKzxici8+CitjYXNlIDcgKGZvcm1hdD0nNU4nLCBtYXhMZW5n
dGg9MykKKzxpbnB1dCBuYW1lPSJjYXNlNyIgc3R5bGU9Jy13YXAtaW5wdXQtZm9ybWF0OiAiTk5O
IicgbWF4TGVuZ3RoPSIzIi8+Cis8YnIvPgorY2FzZSA4IChmb3JtYXQ9JzVhJywgaW5wdXQgaXMg
bm90IHJlcXVyaWVkKQorPGlucHV0IHR5cGU9InRleHQiIHN0eWxlPSItd2FwLWlucHV0LWZvcm1h
dDogJzVhJzsgLXdhcC1pbnB1dC1yZXF1aXJlZDogZmFsc2U7Ii8+Cis8YnIvPgorY2FzZSA5IChm
b3JtYXQ9JzZNJyBwYXNzd29yZCkKKzxpbnB1dCBuYW1lPSJwYXNzd2QiIHR5cGU9InBhc3N3b3Jk
IiBzdHlsZT0iLXdhcC1pbnB1dC1mb3JtYXQ6ICc2TSciLz4KKzxici8+Cis8L3A+Cis8L2JvZHk+
Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L3djc3MvaW5wdXRlbGVtZW50LWlucHV0
cmVxdWlyZWQueGh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC93Y3NzL2lucHV0
ZWxlbWVudC1pbnB1dHJlcXVpcmVkLnhodG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMv
ZmFzdC93Y3NzL2lucHV0ZWxlbWVudC1pbnB1dHJlcXVpcmVkLnhodG1sCShyZXZpc2lvbiAwKQpA
QCAtMCwwICsxLDM4IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiPz4KKzwhRE9DVFlQRSBodG1sIFBV
QkxJQyAiLS8vV0FQRk9SVU0vL0RURCBYSFRNTCBNb2JpbGUgMS4xLy9FTiIgImh0dHA6Ly93d3cu
d2FwZm9ydW0ub3JnL0RURC94aHRtbC1tb2JpbGUxMS5kdGQiPgorIAorPGh0bWwgeG1sbnM9Imh0
dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiPgorPGhlYWQ+Cis8dGl0bGU+V0NTUyBpbnB1dCBl
eHRlbnNpb24gdGVzdCBmb3IgJmx0O2lucHV0Jmd0OyBlbGVtZW50PC90aXRsZT4KKzxsaW5rIHJl
bD0ic3R5bGVzaGVldCIgaHJlZj0icmVzb3VyY2VzL3djc3NpbnB1dC5jc3MiIHR5cGU9InRleHQv
Y3NzIi8+Cis8L2hlYWQ+CisKKzxib2R5PgorPGgyPiBUZXN0IGZvciBXQ1NTIGlucHV0IGV4dGVu
c2lvbjogLXdhcC1pbnB1dC1yZXF1aXJlZCA8L2gyPgorPHA+Cis8Yj5Gb3IgdGhlIGZvbGxvd2lu
ZyAmbHQ7aW5wdXQmZ3Q7IGVsZW1lbnRzLCBpbnB1dCBpcyByZXF1aXJlZDo8L2I+Cis8cC8+Citm
b3JtYXQ9TmFNPGlucHV0IG5hbWU9IngxIiB2YWx1ZT0iIiBzdHlsZT0iLXdhcC1pbnB1dC1mb3Jt
YXQ6ICdOYU0nIi8+Cis8YnIvPgoraW5wdXRSZXF1aXJlZD10cnVlPGlucHV0IG5hbWU9IngyIiBz
dHlsZT0iLXdhcC1pbnB1dC1yZXF1aXJlZDogdHJ1ZTsiLz4gCis8YnIvPgoraW5wdXRSZXF1aXJl
ZD10cnVlPGlucHV0IG5hbWU9IngzIiBjbGFzcz0iaW5wdXRyZXF1aXJlZCIvPiAKKzxici8+Citm
b3JtYXQ9Kk07aW5wdXRSZXF1aXJlZD10cnVlPGlucHV0IG5hbWU9Ing0IiBzdHlsZT0iLXdhcC1p
bnB1dC1mb3JtYXQ6ICcqTSc7IC13YXAtaW5wdXQtcmVxdWlyZWQ6IHRydWU7Ii8+Cis8L3A+Cis8
aHIvPgorPHA+Cis8Yj5Gb3IgdGhlIGZvbGxvd2luZyAmbHQ7aW5wdXQmZ3Q7IGVsZW1lbnRzLCBp
bnB1dCBpcyBub3QgcmVxdWlyZWQ6PC9iPgorPHAvPgorZGVmYXVsdDxpbnB1dCBuYW1lPSJ4NSIv
PiAKKzxici8+Citmb3JtYXQ9Kng8aW5wdXQgbmFtZT0ieDYiIHN0eWxlPSctd2FwLWlucHV0LWZv
cm1hdDogIip4IicvPiAKKzxici8+CitpbnB1dFJlcXVpcmVkPWZhbHNlPGlucHV0IG5hbWU9Ing3
IiBzdHlsZT0iLXdhcC1pbnB1dC1yZXF1aXJlZDogZmFsc2U7Ii8+Cis8YnIvPgorZm9ybWF0PW4q
TTsgaW5wdXRSZXF1aXJlZD1mYWxzZTxpbnB1dCBuYW1lPSJ4OCIgc3R5bGU9Jy13YXAtaW5wdXQt
cmVxdWlyZWQ6IGZhbHNlOyAtd2FwLWlucHV0LWZvcm1hdDoibipNIicvPgorPGJyLz4KK2Zvcm1h
dD00TjsgaW5wdXRSZXF1aXJlZD1mYWxzZTxpbnB1dCBuYW1lPSJ4OSIgc3R5bGU9Jy13YXAtaW5w
dXQtcmVxdWlyZWQ6IGZhbHNlOyAtd2FwLWlucHV0LWZvcm1hdDoiNE4iJy8+Cis8L3A+Cis8L2Jv
ZHk+Cis8L2h0bWw+Cg==
</data>
<flag name="review"
          id="19973"
          type_id="1"
          status="-"
          setter="eric"
    />
          </attachment>
      

    </bug>

</bugzilla>