<?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>23493</bug_id>
          
          <creation_ts>2009-01-22 20:23:59 -0800</creation_ts>
          <short_desc>Introduce FormControlElementWithState abstraction</short_desc>
          <delta_ts>2009-01-23 18:01:11 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>XML</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>20393</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Nikolas Zimmermann">zimmermann</reporter>
          <assigned_to name="Nikolas Zimmermann">zimmermann</assigned_to>
          <cc>eric</cc>
    
    <cc>staikos</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>106686</commentid>
    <comment_count>0</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2009-01-22 20:23:59 -0800</bug_when>
    <thetext>Introduce a shared FormControlElementWithState abstraction, and rework Document to operate on this class instead of HTMLFormControlElementWithState, to support save/restore state of form control elements from non-HTML languages, ie. WML.

WML needs some more tweaks to be able to use that abstraction -&gt; most noticeable: WMLOptionElement inheriting from WMLEventHandlingElement &amp; FormControlElement. Obviously WMLOptionElement can&apos;t inherit from the new WMLFormControlElement(WithState), as it inherits from WMLElement and FormControlElement(WithState). The easiest way to solve is to remove the WMLElement base-class from WMLEventHandlingElement, and make it behave just like the current FormControlElement does - this way we can let WMLOptionElement / WMLOptGroupElement / WMLInputElement all inherit from WMLFormControlElement.

See the attached patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>106688</commentid>
    <comment_count>1</comment_count>
      <attachid>26955</attachid>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2009-01-22 20:27:31 -0800</bug_when>
    <thetext>Created attachment 26955
Initial patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>106827</commentid>
    <comment_count>2</comment_count>
      <attachid>26955</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-01-23 17:41:25 -0800</bug_when>
    <thetext>Comment on attachment 26955
Initial patch

  if (!element-&gt;isFormControlElement())
 37         return false;

Seems a bit strange when it&apos;s supposed to return a FormControlElement*

Strange indent:
FormControlElementWithState* toFormControlElementWithState(Element* element)
 59 {
 60 	if (!element-&gt;isFormControlElementWithState())
 61 		return 0;
 62

Tabs?
 {
260      doc-&gt;registerFormElementWithState(this);
 260 	FormControlElementWithState::registerFormControlElementWithState(this, document());
261261 }

It&apos;s a little confusing that there are both member and free versions of the toFormControlElement function.

I&apos;m not sure what the EventHandlingElement changes are for.

In general this looks fine though.  Please be sure to fix the tabs/indent.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>106831</commentid>
    <comment_count>3</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2009-01-23 17:55:07 -0800</bug_when>
    <thetext>(In reply to comment #2)
&gt; (From update of attachment 26955 [review])
&gt;   if (!element-&gt;isFormControlElement())
&gt;  37         return false;
&gt; 
&gt; Seems a bit strange when it&apos;s supposed to return a FormControlElement*
Oops, changed to return 0;

&gt; Strange indent:
&gt; FormControlElementWithState* toFormControlElementWithState(Element* element)
&gt;  59 {
&gt;  60     if (!element-&gt;isFormControlElementWithState())
&gt;  61             return 0;
&gt;  62
&gt; 
&gt; Tabs?
&gt;  {
&gt; 260      doc-&gt;registerFormElementWithState(this);
&gt;  260    FormControlElementWithState::registerFormControlElementWithState(this,
&gt; document());
&gt; 261261 }
Yes tabs, fixed.

&gt; It&apos;s a little confusing that there are both member and free versions of the
&gt; toFormControlElement function.
The free version of toFormControlElement() casts Element* to FormControlElement*.
The member version FormControlElementWithState::toFormControlElement() handles conversion of FormControlElementWithState -&gt; FormControlElement (FormControlElementWithState does not inherit from FormControlElement, that&apos;s why I&apos;ve used this special version here).

&gt; 
&gt; I&apos;m not sure what the EventHandlingElement changes are for.
The ChangeLog covers this, no?

&gt; 
&gt; In general this looks fine though.  Please be sure to fix the tabs/indent.
Thanks for the review, landing soon.
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>106835</commentid>
    <comment_count>4</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2009-01-23 18:01:11 -0800</bug_when>
    <thetext>Landed in r40204.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>26955</attachid>
            <date>2009-01-22 20:27:31 -0800</date>
            <delta_ts>2009-01-23 17:41:25 -0800</delta_ts>
            <desc>Initial patch</desc>
            <filename>AddFormControlElementWithStateAbstraction.diff</filename>
            <type>text/plain</type>
            <size>60377</size>
            <attacher name="Nikolas Zimmermann">zimmermann</attacher>
            
              <data encoding="base64">SW5kZXg6IENoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBDaGFuZ2VMb2cJKHJldmlzaW9uIDQwMTQ5
KQorKysgQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTE2IEBACisyMDA5LTAx
LTIyICBOaWtvbGFzIFppbW1lcm1hbm4gIDxuaWtvbGFzLnppbW1lcm1hbm5AdG9yY2htb2JpbGUu
Y29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFk
ZCBhIGJhc2UgY2xhc3MgZm9yIFdNTCBmb3JtIGNvbnRyb2wgZWxlbWVudHM6IFdNTEZvcm1Db250
cm9sRWxlbWVudCAoYXMgaXQncyBkZXNpZ25lZCBpbiBIVE1MIGFzIHdlbGwpLgorICAgICAgICBX
TUxGb3JtQ29udHJvbEVsZW1lbnQgaW5oZXJpdHMgZnJvbSBXTUxFbGVtZW50IGFuZCBGb3JtQ29u
dHJvbEVsZW1lbnQgKGp1c3QgbGlrZSB0aGUgSFRNTEZvcm1Db250cm9sRWxlbWVudCBlcXVpdmFs
ZW50KS4KKworICAgICAgICBXTUxJbnB1dEVsZW1lbnQgLyBXTUxPcHRpb25FbGVtZW50IC8gV01M
T3B0R3JvdXBFbGVtZW50IGFyZSBzdXBwb3NlZCB0byBpbmhlcml0IGZyb20gdGhlIG5ldyBXTUxG
b3JtQ29udHJvbEVsZW1lbnQgY2xhc3MuCisgICAgICAgIE5vdyBXTUxJbnB1dEVsZW1lbnQgJiBX
TUxPcHRHcm91cEVsZW1lbnQgb25seSBpbmhlcml0IGZyb20gV01MRWxlbWVudCBhbmQgRm9ybUNv
bnRyb2xFbGVtZW50LCBidXQgV01MT3B0aW9uRWxlbWVudCBpbmhlcml0cworICAgICAgICBmcm9t
IFdNTEV2ZW50SGFuZGxpbmdFbGVtZW50ICh3aGljaCBpbiB0dXJuIGluaGVyaXRzIGZyb20gV01M
RWxlbWVudCkgYW5kIEZvcm1Db250cm9sRWxlbWVudC4gSW4gb3JkZXIgdG8gaW50cm9kdWNlIGEg
c2hhcmVkCisgICAgICAgIGJhc2UgY2xhc3MsIFdNTEV2ZW50SGFuZGxpbmdFbGVtZW50IGlzIG5v
IGxvbmdlciBhbGxvd2VkIHRvIGluaGVyaXQgZnJvbSBXTUxFbGVtZW50IGRpcmVjdGx5LiBJbnN0
ZWFkIGl0IHNob3VsZCB0dXJuIGludG8KKyAgICAgICAgYW5vdGhlciBiYXNlIGNsYXNzLCBqdXN0
IGxpa2UgRm9ybUNvbnRyb2xFbGVtZW50LgorCisgICAgICAgIEFkZCBhIGJhc2UgY2xhc3MgZm9y
IGZvcm0gY29udHJvbCBlbGVtZW50cyAnd2l0aCBzdGF0ZSc6IEZvcm1Db250cm9sRWxlbWVudFdp
dGhTdGF0ZSwgc2VydmluZyBhcyBiYXNlIGNsYXNzIGZvcgorICAgICAgICBIVE1MRm9ybUNvbnRy
b2xFbGVtZW50V2l0aFN0YXRlIGFuZCBXTUxGb3JtQ29udHJvbEVsZW1lbnRXaXRoU3RhdGUuIC0+
IE1ha2UgRG9jdW1lbnQgb3BlcmF0ZSBvbiBGb3JtQ29udHJvbEVsZW1lbnRXaXRoU3RhdGUKKyAg
ICAgICAgb2JqZWN0cyBpbnN0ZWFkIG9mIEhUTUxGb3JtQ29udHJvbEVsZW1lbnRXaXRoU3RhdGUg
b2JqZWN0cywgdG8gc3VwcG9ydCBzYXZlL3Jlc3RvcmUgY29udHJvbCBzdGF0ZSBmb3Igbm9uIEhU
TUxGb3JtQ29udHJvbEVsZW1lbnRzLgorCisgICAgICAgIFJlbmFtZSBpc0dlbmVyaWNGb3JtRWxl
bWVudCgpIHRvIGlzRm9ybUNvbnRyb2xFbGVtZW50KCksIGFuZCBtb3ZlIGl0IHRvIEVsZW1lbnQu
aAorICAgICAgICBBZGQgbmV3IHZpcnR1YWwgZnVuY3Rpb24gaXNGb3JtQ29udHJvbEVsZW1lbnRX
aXRoU3RhdGUoKSB0byBFbGVtZW50LmguCisKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5hbToKKyAg
ICAgICAgKiBXZWJDb3JlLm9yZGVyOgorICAgICAgICAqIFdlYkNvcmUucHJvOgorICAgICAgICAq
IFdlYkNvcmUuc2NvbnM6CisgICAgICAgICogV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2o6
CisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAq
IFdlYkNvcmVTb3VyY2VzLmJrbDoKKyAgICAgICAgKiBkb20vRG9jdW1lbnQuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6RG9jdW1lbnQ6OmZvcm1FbGVtZW50c1N0YXRlKToKKyAgICAgICAgKiBkb20v
RG9jdW1lbnQuaDoKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjpyZWdpc3RlckZvcm1FbGVt
ZW50V2l0aFN0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50Ojp1bnJlZ2lzdGVyRm9y
bUVsZW1lbnRXaXRoU3RhdGUpOgorICAgICAgICAqIGRvbS9FbGVtZW50Lmg6CisgICAgICAgIChX
ZWJDb3JlOjpFbGVtZW50Ojppc0Zvcm1Db250cm9sRWxlbWVudCk6CisgICAgICAgIChXZWJDb3Jl
OjpFbGVtZW50Ojppc0Zvcm1Db250cm9sRWxlbWVudFdpdGhTdGF0ZSk6CisgICAgICAgICogZG9t
L0Zvcm1Db250cm9sRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjp0b0Zvcm1Db250cm9s
RWxlbWVudCk6CisgICAgICAgICogZG9tL0Zvcm1Db250cm9sRWxlbWVudC5oOgorICAgICAgICAq
IGRvbS9Gb3JtQ29udHJvbEVsZW1lbnRXaXRoU3RhdGUuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkZvcm1Db250cm9sRWxlbWVudFdpdGhTdGF0ZTo6cmVnaXN0ZXJGb3JtQ29udHJvbEVs
ZW1lbnRXaXRoU3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6Rm9ybUNvbnRyb2xFbGVtZW50V2l0
aFN0YXRlOjp1bnJlZ2lzdGVyRm9ybUNvbnRyb2xFbGVtZW50V2l0aFN0YXRlKToKKyAgICAgICAg
KFdlYkNvcmU6OkZvcm1Db250cm9sRWxlbWVudFdpdGhTdGF0ZTo6ZmluaXNoUGFyc2luZ0NoaWxk
cmVuKToKKyAgICAgICAgKFdlYkNvcmU6OnRvRm9ybUNvbnRyb2xFbGVtZW50V2l0aFN0YXRlKToK
KyAgICAgICAgKiBkb20vRm9ybUNvbnRyb2xFbGVtZW50V2l0aFN0YXRlLmg6IEFkZGVkLgorICAg
ICAgICAoV2ViQ29yZTo6Rm9ybUNvbnRyb2xFbGVtZW50V2l0aFN0YXRlOjp+Rm9ybUNvbnRyb2xF
bGVtZW50V2l0aFN0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkZvcm1Db250cm9sRWxlbWVudFdp
dGhTdGF0ZTo6Rm9ybUNvbnRyb2xFbGVtZW50V2l0aFN0YXRlKToKKyAgICAgICAgKiBodG1sL0hU
TUxFbGVtZW50Lmg6CisgICAgICAgICogaHRtbC9IVE1MRm9ybUNvbnRyb2xFbGVtZW50LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkhUTUxGb3JtQ29udHJvbEVsZW1lbnRXaXRoU3RhdGU6OkhUTUxG
b3JtQ29udHJvbEVsZW1lbnRXaXRoU3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEZvcm1D
b250cm9sRWxlbWVudFdpdGhTdGF0ZTo6fkhUTUxGb3JtQ29udHJvbEVsZW1lbnRXaXRoU3RhdGUp
OgorICAgICAgICAoV2ViQ29yZTo6SFRNTEZvcm1Db250cm9sRWxlbWVudFdpdGhTdGF0ZTo6d2ls
bE1vdmVUb05ld093bmVyRG9jdW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEZvcm1Db250
cm9sRWxlbWVudFdpdGhTdGF0ZTo6ZGlkTW92ZVRvTmV3T3duZXJEb2N1bWVudCk6CisgICAgICAg
ICogaHRtbC9IVE1MRm9ybUNvbnRyb2xFbGVtZW50Lmg6CisgICAgICAgIChXZWJDb3JlOjpIVE1M
Rm9ybUNvbnRyb2xFbGVtZW50Ojppc0Zvcm1Db250cm9sRWxlbWVudCk6CisgICAgICAgIChXZWJD
b3JlOjpIVE1MRm9ybUNvbnRyb2xFbGVtZW50V2l0aFN0YXRlOjppc0Zvcm1Db250cm9sRWxlbWVu
dFdpdGhTdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRm9ybUNvbnRyb2xFbGVtZW50V2l0
aFN0YXRlOjp0b0Zvcm1Db250cm9sRWxlbWVudCk6CisgICAgICAgICogaHRtbC9IVE1MRm9ybUVs
ZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEZvcm1FbGVtZW50Ojpmb3JtRWxlbWVu
dEluZGV4KToKKyAgICAgICAgKiBodG1sL0hUTUxMYWJlbEVsZW1lbnQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6SFRNTExhYmVsRWxlbWVudDo6Y29ycmVzcG9uZGluZ0NvbnRyb2wpOgorICAgICAg
ICAqIGh0bWwvSFRNTExlZ2VuZEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTExl
Z2VuZEVsZW1lbnQ6OmZvcm1FbGVtZW50KToKKyAgICAgICAgKiBwYWdlL0ZyYW1lLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkZyYW1lOjpzZWFyY2hGb3JMYWJlbHNCZWZvcmVFbGVtZW50KToKKyAg
ICAgICAgKFdlYkNvcmU6OnNjYW5Gb3JGb3JtKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lOjpj
dXJyZW50Rm9ybSk6CisgICAgICAgICogcGFnZS9tYWMvRnJhbWVNYWMubW06CisgICAgICAgIChX
ZWJDb3JlOjpGcmFtZTo6c2VhcmNoRm9yTGFiZWxzQmVmb3JlRWxlbWVudCk6CisgICAgICAgICog
d21sL1dNTENhcmRFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldNTENhcmRFbGVtZW50
OjpXTUxDYXJkRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpXTUxDYXJkRWxlbWVudDo6cGFy
c2VNYXBwZWRBdHRyaWJ1dGUpOgorICAgICAgICAoV2ViQ29yZTo6V01MQ2FyZEVsZW1lbnQ6Omlu
c2VydGVkSW50b0RvY3VtZW50KToKKyAgICAgICAgKiB3bWwvV01MQ2FyZEVsZW1lbnQuaDoKKyAg
ICAgICAgKiB3bWwvV01MRG9FbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldNTERvRWxl
bWVudDo6aW5zZXJ0ZWRJbnRvRG9jdW1lbnQpOgorICAgICAgICAqIHdtbC9XTUxFbGVtZW50Lmg6
CisgICAgICAgIChXZWJDb3JlOjpXTUxFbGVtZW50Ojppc1dNTEVsZW1lbnQpOgorICAgICAgICAq
IHdtbC9XTUxFdmVudEhhbmRsaW5nRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXTUxF
dmVudEhhbmRsaW5nRWxlbWVudDo6V01MRXZlbnRIYW5kbGluZ0VsZW1lbnQpOgorICAgICAgICAo
V2ViQ29yZTo6V01MRXZlbnRIYW5kbGluZ0VsZW1lbnQ6OnJlZ2lzdGVyRG9FbGVtZW50KToKKyAg
ICAgICAgKFdlYkNvcmU6OnRvV01MRXZlbnRIYW5kbGluZ0VsZW1lbnQpOgorICAgICAgICAqIHdt
bC9XTUxFdmVudEhhbmRsaW5nRWxlbWVudC5oOgorICAgICAgICAqIHdtbC9XTUxGb3JtQ29udHJv
bEVsZW1lbnQuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OldNTEZvcm1Db250cm9sRWxl
bWVudDo6V01MRm9ybUNvbnRyb2xFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OldNTEZvcm1D
b250cm9sRWxlbWVudDo6fldNTEZvcm1Db250cm9sRWxlbWVudCk6CisgICAgICAgIChXZWJDb3Jl
OjpXTUxGb3JtQ29udHJvbEVsZW1lbnRXaXRoU3RhdGU6OldNTEZvcm1Db250cm9sRWxlbWVudFdp
dGhTdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpXTUxGb3JtQ29udHJvbEVsZW1lbnRXaXRoU3Rh
dGU6On5XTUxGb3JtQ29udHJvbEVsZW1lbnRXaXRoU3RhdGUpOgorICAgICAgICAqIHdtbC9XTUxG
b3JtQ29udHJvbEVsZW1lbnQuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpXTUxGb3JtQ29u
dHJvbEVsZW1lbnQ6OmlzRm9ybUNvbnRyb2xFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OldN
TEZvcm1Db250cm9sRWxlbWVudDo6dmFsdWVNYXRjaGVzUmVuZGVyZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6V01MRm9ybUNvbnRyb2xFbGVtZW50OjpzZXRWYWx1ZU1hdGNoZXNSZW5kZXJlcik6Cisg
ICAgICAgIChXZWJDb3JlOjpXTUxGb3JtQ29udHJvbEVsZW1lbnQ6Om5hbWUpOgorICAgICAgICAo
V2ViQ29yZTo6V01MRm9ybUNvbnRyb2xFbGVtZW50V2l0aFN0YXRlOjppc0Zvcm1Db250cm9sRWxl
bWVudFdpdGhTdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpXTUxGb3JtQ29udHJvbEVsZW1lbnRX
aXRoU3RhdGU6OnRvRm9ybUNvbnRyb2xFbGVtZW50KToKKyAgICAgICAgKiB3bWwvV01MSW5wdXRF
bGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldNTElucHV0RWxlbWVudDo6V01MSW5wdXRF
bGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OldNTElucHV0RWxlbWVudDo6dHlwZSk6CisgICAg
ICAgICogd21sL1dNTElucHV0RWxlbWVudC5oOgorICAgICAgICAqIHdtbC9XTUxPbkV2ZW50RWxl
bWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXTUxPbkV2ZW50RWxlbWVudDo6cmVnaXN0ZXJU
YXNrKToKKyAgICAgICAgKiB3bWwvV01MT3B0R3JvdXBFbGVtZW50LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OldNTE9wdEdyb3VwRWxlbWVudDo6V01MT3B0R3JvdXBFbGVtZW50KToKKyAgICAgICAg
KFdlYkNvcmU6OldNTE9wdEdyb3VwRWxlbWVudDo6dHlwZSk6CisgICAgICAgICogd21sL1dNTE9w
dEdyb3VwRWxlbWVudC5oOgorICAgICAgICAqIHdtbC9XTUxPcHRpb25FbGVtZW50LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OldNTE9wdGlvbkVsZW1lbnQ6OldNTE9wdGlvbkVsZW1lbnQpOgorICAg
ICAgICAoV2ViQ29yZTo6V01MT3B0aW9uRWxlbWVudDo6dHlwZSk6CisgICAgICAgICogd21sL1dN
TE9wdGlvbkVsZW1lbnQuaDoKKyAgICAgICAgKiB3bWwvV01MVGVtcGxhdGVFbGVtZW50LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OldNTFRlbXBsYXRlRWxlbWVudDo6V01MVGVtcGxhdGVFbGVtZW50
KToKKyAgICAgICAgKFdlYkNvcmU6OldNTFRlbXBsYXRlRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRy
aWJ1dGUpOgorICAgICAgICAqIHdtbC9XTUxUZW1wbGF0ZUVsZW1lbnQuaDoKKwogMjAwOS0wMS0y
MiAgRGF2aWQgSHlhdHQgIDxoeWF0dEBhcHBsZS5jb20+CiAKICAgICAgICAgTW92ZSB0aGUgbV93
aWR0aENoYW5nZWQgYml0IG9uIFJlbmRlclRhYmxlQ2VsbCBpbnRvIFJlbmRlckZsb3cncyBzZXQg
b2YgYml0cy4gIExldCBpbnRyaW5zaWNQYWRkaW5nVG9wIGFuZApJbmRleDogR05VbWFrZWZpbGUu
YW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gR05VbWFrZWZpbGUuYW0JKHJldmlzaW9uIDQwMTQ5KQorKysgR05V
bWFrZWZpbGUuYW0JKHdvcmtpbmcgY29weSkKQEAgLTU5Niw2ICs1OTYsOCBAQCB3ZWJjb3JlX3Nv
dXJjZXMgKz0gXAogCVdlYkNvcmUvZG9tL0V4Y2VwdGlvbkJhc2UuaCBcCiAJV2ViQ29yZS9kb20v
RXhjZXB0aW9uQ29kZS5jcHAgXAogCVdlYkNvcmUvZG9tL0V4Y2VwdGlvbkNvZGUuaCBcCisJV2Vi
Q29yZS9kb20vRm9ybUNvbnRyb2xFbGVtZW50V2l0aFN0YXRlLmNwcCBcCisJV2ViQ29yZS9kb20v
Rm9ybUNvbnRyb2xFbGVtZW50V2l0aFN0YXRlLmggXAogCVdlYkNvcmUvZG9tL0Zvcm1Db250cm9s
RWxlbWVudC5jcHAgXAogCVdlYkNvcmUvZG9tL0Zvcm1Db250cm9sRWxlbWVudC5oIFwKIAlXZWJD
b3JlL2RvbS9JbnB1dEVsZW1lbnQuY3BwIFwKQEAgLTIyMjIsNiArMjIyNCw3IEBAIHdlYmNvcmVf
c291cmNlcyArPSBcCiAJV2ViQ29yZS93bWwvV01MRXJyb3JIYW5kbGluZy5jcHAgXAogCVdlYkNv
cmUvd21sL1dNTEV2ZW50SGFuZGxpbmdFbGVtZW50LmNwcCBcCiAJV2ViQ29yZS93bWwvV01MRmll
bGRTZXRFbGVtZW50LmNwcCBcCisJV2ViQ29yZS93bWwvV01MRm9ybUNvbnRyb2xFbGVtZW50LmNw
cCBcCiAJV2ViQ29yZS93bWwvV01MR29FbGVtZW50LmNwcCBcCiAJV2ViQ29yZS93bWwvV01MSW1h
Z2VFbGVtZW50LmNwcCBcCiAJV2ViQ29yZS93bWwvV01MSW1hZ2VMb2FkZXIuY3BwIFwKSW5kZXg6
IFdlYkNvcmUub3JkZXIKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS5vcmRlcgkocmV2aXNpb24gNDAx
NDkpCisrKyBXZWJDb3JlLm9yZGVyCSh3b3JraW5nIGNvcHkpCkBAIC00NTg5LDcgKzQ1ODksNyBA
QCBfX1pOM1dURjZWZWN0b3JJUE43V2ViQ29yZTE3UmVndWxhckV4cHJlCiBfX1pOM1dURjZWZWN0
b3JJUE43V2ViQ29yZTE3UmVndWxhckV4cHJlc3Npb25FTG0wRUUxNXJlc2VydmVDYXBhY2l0eUVt
CiAtW1dlYkNvcmVGcmFtZUJyaWRnZSBzZWFyY2hGb3JMYWJlbHM6YmVmb3JlRWxlbWVudDpdCiBf
X1pON1dlYkNvcmU1RnJhbWUyOHNlYXJjaEZvckxhYmVsc0JlZm9yZUVsZW1lbnRFUDdOU0FycmF5
UE5TXzdFbGVtZW50RQotX19aTks3V2ViQ29yZTExSFRNTEVsZW1lbnQyMGlzR2VuZXJpY0Zvcm1F
bGVtZW50RXYKK19fWk5LN1dlYkNvcmU3RWxlbWVudDIwaXNGb3JtQ29udHJvbEVsZW1lbnRFdgog
X19aTjdXZWJDb3JlNUZyYW1lMjRzZWFyY2hGb3JMYWJlbHNBYm92ZUNlbGxFUE5TXzE3UmVndWxh
ckV4cHJlc3Npb25FUE5TXzIwSFRNTFRhYmxlQ2VsbEVsZW1lbnRFCiBfX1pOSzdXZWJDb3JlMTdS
ZWd1bGFyRXhwcmVzc2lvbjlzZWFyY2hSZXZFUktOU18xNkRlcHJlY2F0ZWRTdHJpbmdFCiBfX1pO
SzdXZWJDb3JlMjJIVE1MR2VuZXJpY0Zvcm1FbGVtZW50MjBpc0dlbmVyaWNGb3JtRWxlbWVudEV2
CkluZGV4OiBXZWJDb3JlLnBybwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlLnBybwkocmV2aXNpb24g
NDAxNDkpCisrKyBXZWJDb3JlLnBybwkod29ya2luZyBjb3B5KQpAQCAtNTgyLDYgKzU4Miw3IEBA
IFNPVVJDRVMgKz0gXAogICAgIGRvbS9FdmVudFRhcmdldE5vZGUuY3BwIFwKICAgICBkb20vRXhj
ZXB0aW9uQmFzZS5jcHAgXAogICAgIGRvbS9FeGNlcHRpb25Db2RlLmNwcCBcCisgICAgZG9tL0Zv
cm1Db250cm9sRWxlbWVudFdpdGhTdGF0ZS5jcHAgXAogICAgIGRvbS9Gb3JtQ29udHJvbEVsZW1l
bnQuY3BwIFwKICAgICBkb20vSW5wdXRFbGVtZW50LmNwcCBcCiAgICAgZG9tL0tleWJvYXJkRXZl
bnQuY3BwIFwKQEAgLTE0MTgsNiArMTQxOSw3IEBAIGNvbnRhaW5zKERFRklORVMsIEVOQUJMRV9X
TUw9MSkgewogICAgICAgICB3bWwvV01MRWxlbWVudC5jcHAgXAogICAgICAgICB3bWwvV01MRXJy
b3JIYW5kbGluZy5jcHAgXAogICAgICAgICB3bWwvV01MRXZlbnRIYW5kbGluZ0VsZW1lbnQuY3Bw
IFwKKyAgICAgICAgd21sL1dNTEZvcm1Db250cm9sRWxlbWVudC5jcHAgXAogICAgICAgICB3bWwv
V01MRmllbGRTZXRFbGVtZW50LmNwcCBcCiAgICAgICAgIHdtbC9XTUxHb0VsZW1lbnQuY3BwIFwK
ICAgICAgICAgd21sL1dNTEltYWdlRWxlbWVudC5jcHAgXApJbmRleDogV2ViQ29yZS5zY29ucwo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlLnNjb25zCShyZXZpc2lvbiA0MDE0OSkKKysrIFdlYkNvcmUu
c2NvbnMJKHdvcmtpbmcgY29weSkKQEAgLTk1LDYgKzk1LDcgQEAgc291cmNlc1snZG9tJ10gPSBb
CiAgICAgJ2RvbS9FdmVudFRhcmdldE5vZGUuY3BwJywKICAgICAnZG9tL0V4Y2VwdGlvbkJhc2Uu
Y3BwJywKICAgICAnZG9tL0V4Y2VwdGlvbkNvZGUuY3BwJywKKyAgICAnZG9tL0Zvcm1Db250cm9s
RWxlbWVudFdpdGhTdGF0ZS5jcHAnLAogICAgICdkb20vRm9ybUNvbnRyb2xFbGVtZW50LmNwcCcs
CiAgICAgJ2RvbS9JbnB1dEVsZW1lbnQuY3BwJywKICAgICAnZG9tL0tleWJvYXJkRXZlbnQuY3Bw
JywKSW5kZXg6IFdlYkNvcmVTb3VyY2VzLmJrbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlU291cmNl
cy5ia2wJKHJldmlzaW9uIDQwMTQ5KQorKysgV2ViQ29yZVNvdXJjZXMuYmtsCSh3b3JraW5nIGNv
cHkpCkBAIC00MTIsNiArNDEyLDcgQEAgVGhpcyBmaWxlIGNvbnRhaW5zIHRoZSBsaXN0IG9mIGZp
bGVzIG5lZQogICAgICAgICBkb20vRXZlbnRUYXJnZXROb2RlLmNwcAogICAgICAgICBkb20vRXhj
ZXB0aW9uQmFzZS5jcHAKICAgICAgICAgZG9tL0V4Y2VwdGlvbkNvZGUuY3BwCisgICAgICAgIGRv
bS9Gb3JtQ29udHJvbEVsZW1lbnRXaXRoU3RhdGUuY3BwCiAgICAgICAgIGRvbS9Gb3JtQ29udHJv
bEVsZW1lbnQuY3BwCiAgICAgICAgIGRvbS9JbnB1dEVsZW1lbnQuY3BwCiAgICAgICAgIGRvbS9L
ZXlib2FyZEV2ZW50LmNwcApJbmRleDogV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oJKHJldmlzaW9uIDQwMTQ5
KQorKysgV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oJKHdvcmtpbmcgY29weSkKQEAgLTEx
Mzg2LDYgKzExMzg2LDIyIEBACiAJCQkJPg0KIAkJCTwvRmlsZT4NCiAJCQk8RmlsZQ0KKwkJCQlS
ZWxhdGl2ZVBhdGg9Ii4uXGRvbVxGb3JtQ29udHJvbEVsZW1lbnRXaXRoU3RhdGUuY3BwIg0KKwkJ
CQk+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iUmVsZWFzZV9QR098V2lu
MzIiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wi
DQorCQkJCQkJV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPSJ0cnVlIg0KKwkJCQkJLz4NCisJCQkJ
PC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRp
dmVQYXRoPSIuLlxkb21cRm9ybUNvbnRyb2xFbGVtZW50V2l0aFN0YXRlLmgiDQorCQkJCT4NCisJ
CQk8L0ZpbGU+DQorCQkJPEZpbGUNCiAJCQkJUmVsYXRpdmVQYXRoPSIuLlxkb21cRm9ybUNvbnRy
b2xFbGVtZW50LmNwcCINCiAJCQkJPg0KIAkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCkBAIC0xNjcw
Niw2ICsxNjcyMiwxNCBAQAogCQkJCT4NCiAJCQk8L0ZpbGU+DQogCQkJPEZpbGUNCisJCQkJUmVs
YXRpdmVQYXRoPSIuLlx3bWxcV01MRm9ybUNvbnRyb2xFbGVtZW50LmNwcCINCisJCQkJPg0KKwkJ
CTwvRmlsZT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHdtbFxXTUxGb3JtQ29u
dHJvbEVsZW1lbnQuaCINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KIAkJCQlSZWxh
dGl2ZVBhdGg9Ii4uXHdtbFxXTUxGaWVsZFNldEVsZW1lbnQuY3BwIg0KIAkJCQk+DQogCQkJPC9G
aWxlPg0KSW5kZXg6IFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDQwMTQ5KQor
KysgV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC02
NSw2ICs2NSw4IEBACiAJCTA4NERCQUEyMEVEMzlEMzYwMDM4QzIyNiAvKiBXTUxWYXJpYWJsZXMu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA4NERCQTlF
MEVEMzlEMzYwMDM4QzIyNiAvKiBXTUxWYXJpYWJsZXMuaCAqLzsgfTsKIAkJMDg1NzczMzUwRjA4
NDYwMTAwODA1ODNFIC8qIEZvcm1Db250cm9sRWxlbWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDg1NzczMzQwRjA4NDYwMTAwODA1ODNFIC8qIEZv
cm1Db250cm9sRWxlbWVudC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CiAJCTA4NTkxQUE1MEYwODVDNEUwMDlCQUNCMSAvKiBJbnB1dEVsZW1lbnQuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA4NTkxQUE0MEYw
ODVDNEUwMDlCQUNCMSAvKiBJbnB1dEVsZW1lbnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwODVBRkRDODBGMjk3NzM1MDA2MUYyQjMgLyogV01M
Rm9ybUNvbnRyb2xFbGVtZW50LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDA4NUFGREM2MEYyOTc3MzUwMDYxRjJCMyAvKiBXTUxGb3JtQ29udHJvbEVs
ZW1lbnQuY3BwICovOyB9OworCQkwODVBRkRDOTBGMjk3NzM1MDA2MUYyQjMgLyogV01MRm9ybUNv
bnRyb2xFbGVtZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwODVBRkRDNzBGMjk3NzM1MDA2MUYyQjMgLyogV01MRm9ybUNvbnRyb2xFbGVtZW50Lmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoKTsgfTsgfTsKIAkJMDg1QjkyQkEwRUZERTcz
RDAwRTYxMjNDIC8qIEZvcm1EYXRhQnVpbGRlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwODVCOTJCODBFRkRFNzNEMDBFNjEyM0MgLyogRm9ybURh
dGFCdWlsZGVyLmNwcCAqLzsgfTsKIAkJMDg1QjkyQkIwRUZERTczRDAwRTYxMjNDIC8qIEZvcm1E
YXRhQnVpbGRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMDg1QjkyQjkwRUZERTczRDAwRTYxMjNDIC8qIEZvcm1EYXRhQnVpbGRlci5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTA4NjVDQ0U2MEVEREY1
MUIwMERGOUVDMyAvKiBXTUxOb29wRWxlbWVudC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwODY1Q0NFNDBFRERGNTFCMDBERjlFQzMgLyogV01MTm9v
cEVsZW1lbnQuY3BwICovOyB9OwpAQCAtMTEzLDYgKzExNSw4IEBACiAJCTA4QTQ4NDc3MEU1Mjcy
QzUwMEMzRkU3NiAvKiBTY3JpcHRFbGVtZW50LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA4QTQ4NDc1MEU1MjcyQzUwMEMzRkU3NiAvKiBTY3JpcHRF
bGVtZW50LmNwcCAqLzsgfTsKIAkJMDhBNDg0NzgwRTUyNzJDNTAwQzNGRTc2IC8qIFNjcmlwdEVs
ZW1lbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA4
QTQ4NDc2MEU1MjcyQzUwMEMzRkU3NiAvKiBTY3JpcHRFbGVtZW50LmggKi87IH07CiAJCTA4QTQ4
QTZFMEU4NkNGNkQwMEUyMjVERCAvKiBKU1NWR0VsZW1lbnRJbnN0YW5jZUN1c3RvbS5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwOEE0OEE2RDBFODZD
RjZEMDBFMjI1REQgLyogSlNTVkdFbGVtZW50SW5zdGFuY2VDdXN0b20uY3BwICovOyB9OworCQkw
OEI5M0Y3NTBGMjkzNDgxMDAwNzIwQzIgLyogRm9ybUNvbnRyb2xFbGVtZW50V2l0aFN0YXRlLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA4QjkzRjcz
MEYyOTM0ODEwMDA3MjBDMiAvKiBGb3JtQ29udHJvbEVsZW1lbnRXaXRoU3RhdGUuY3BwICovOyB9
OworCQkwOEI5M0Y3NjBGMjkzNDgxMDAwNzIwQzIgLyogRm9ybUNvbnRyb2xFbGVtZW50V2l0aFN0
YXRlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwOEI5
M0Y3NDBGMjkzNDgxMDAwNzIwQzIgLyogRm9ybUNvbnRyb2xFbGVtZW50V2l0aFN0YXRlLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMDhCRkRGQzQw
RjA5OUU3MDAwN0RDMkJGIC8qIEZvcm1Db250cm9sRWxlbWVudC5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwOEJGREZDMzBGMDk5RTcwMDA3REMyQkYg
LyogRm9ybUNvbnRyb2xFbGVtZW50LmNwcCAqLzsgfTsKIAkJMDhDNEM1MTgwRUYxOUE0MDAwRTQ4
NDBGIC8qIFdNTEltYWdlRWxlbWVudC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwOEM0QzUxNDBFRjE5QTQwMDBFNDg0MEYgLyogV01MSW1hZ2VFbGVt
ZW50LmNwcCAqLzsgfTsKIAkJMDhDNEM1MTkwRUYxOUE0MDAwRTQ4NDBGIC8qIFdNTEltYWdlRWxl
bWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDhD
NEM1MTUwRUYxOUE0MDAwRTQ4NDBGIC8qIFdNTEltYWdlRWxlbWVudC5oICovOyB9OwpAQCAtNDkx
MSw2ICs0OTE1LDggQEAKIAkJMDg0REJBOUUwRUQzOUQzNjAwMzhDMjI2IC8qIFdNTFZhcmlhYmxl
cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXTUxWYXJpYWJsZXMuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMDg1NzczMzQwRjA4NDYwMTAwODA1ODNFIC8qIEZv
cm1Db250cm9sRWxlbWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBGb3Jt
Q29udHJvbEVsZW1lbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMDg1OTFBQTQw
RjA4NUM0RTAwOUJBQ0IxIC8qIElucHV0RWxlbWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBJbnB1dEVsZW1lbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
MDg1QUZEQzYwRjI5NzczNTAwNjFGMkIzIC8qIFdNTEZvcm1Db250cm9sRWxlbWVudC5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXTUxGb3JtQ29udHJvbEVsZW1lbnQu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwODVBRkRDNzBGMjk3NzM1MDA2MUYy
QjMgLyogV01MRm9ybUNvbnRyb2xFbGVtZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFdNTEZvcm1Db250cm9sRWxlbWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkwODVCOTJCODBFRkRFNzNEMDBFNjEyM0MgLyogRm9ybURhdGFCdWlsZGVyLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZvcm1EYXRhQnVpbGRlci5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTA4NUI5MkI5MEVGREU3M0QwMEU2MTIzQyAvKiBG
b3JtRGF0YUJ1aWxkZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRm9ybURh
dGFCdWlsZGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTA4NjVDQ0U0MEVEREY1
MUIwMERGOUVDMyAvKiBXTUxOb29wRWxlbWVudC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBXTUxOb29wRWxlbWVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CkBAIC00OTQ3LDYgKzQ5NTMsOCBAQAogCQkwOEE0ODQ3NTBFNTI3MkM1MDBDM0ZFNzYgLyog
U2NyaXB0RWxlbWVudC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBT
Y3JpcHRFbGVtZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMDhBNDg0NzYw
RTUyNzJDNTAwQzNGRTc2IC8qIFNjcmlwdEVsZW1lbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gU2NyaXB0RWxlbWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkwOEE0OEE2RDBFODZDRjZEMDBFMjI1REQgLyogSlNTVkdFbGVtZW50SW5zdGFuY2VDdXN0b20u
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNTVkdFbGVtZW50SW5z
dGFuY2VDdXN0b20uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwOEI5M0Y3MzBG
MjkzNDgxMDAwNzIwQzIgLyogRm9ybUNvbnRyb2xFbGVtZW50V2l0aFN0YXRlLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZvcm1Db250cm9sRWxlbWVudFdpdGhTdGF0
ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTA4QjkzRjc0MEYyOTM0ODEwMDA3
MjBDMiAvKiBGb3JtQ29udHJvbEVsZW1lbnRXaXRoU3RhdGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gRm9ybUNvbnRyb2xFbGVtZW50V2l0aFN0YXRlLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTA4QkZERkMzMEYwOTlFNzAwMDdEQzJCRiAvKiBGb3JtQ29udHJv
bEVsZW1lbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRm9ybUNv
bnRyb2xFbGVtZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMDhDNEM1MTQw
RUYxOUE0MDAwRTQ4NDBGIC8qIFdNTEltYWdlRWxlbWVudC5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBXTUxJbWFnZUVsZW1lbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkwOEM0QzUxNTBFRjE5QTQwMDBFNDg0MEYgLyogV01MSW1hZ2VFbGVtZW50
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdNTEltYWdlRWxlbWVudC5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtOTcxNSw2ICs5NzIzLDggQEAKIAkJCQkwODE4
QUVFMTBFREI4NkJDMDA2NDdCNjYgLyogV01MRXZlbnRIYW5kbGluZ0VsZW1lbnQuaCAqLywKIAkJ
CQkwOEU2RTBFRjBFRkY0MkJBMDAwMjlGQkYgLyogV01MRmllbGRTZXRFbGVtZW50LmNwcCAqLywK
IAkJCQkwOEU2RTBGMDBFRkY0MkJBMDAwMjlGQkYgLyogV01MRmllbGRTZXRFbGVtZW50LmggKi8s
CisJCQkJMDg1QUZEQzYwRjI5NzczNTAwNjFGMkIzIC8qIFdNTEZvcm1Db250cm9sRWxlbWVudC5j
cHAgKi8sCisJCQkJMDg1QUZEQzcwRjI5NzczNTAwNjFGMkIzIC8qIFdNTEZvcm1Db250cm9sRWxl
bWVudC5oICovLAogCQkJCTA4ODA3QjZBMEVENzA5QUIwMDNGNjk3NSAvKiBXTUxHb0VsZW1lbnQu
Y3BwICovLAogCQkJCTA4ODA3QjZCMEVENzA5QUIwMDNGNjk3NSAvKiBXTUxHb0VsZW1lbnQuaCAq
LywKIAkJCQkwOEM0QzUxNDBFRjE5QTQwMDBFNDg0MEYgLyogV01MSW1hZ2VFbGVtZW50LmNwcCAq
LywKQEAgLTE0MjY3LDYgKzE0Mjc3LDggQEAKIAkJCQk5MzVGQkNGMTA5QkExNDNCMDBFMjMwQjEg
LyogRXhjZXB0aW9uQ29kZS5oICovLAogCQkJCTA4QkZERkMzMEYwOTlFNzAwMDdEQzJCRiAvKiBG
b3JtQ29udHJvbEVsZW1lbnQuY3BwICovLAogCQkJCTA4NTc3MzM0MEYwODQ2MDEwMDgwNTgzRSAv
KiBGb3JtQ29udHJvbEVsZW1lbnQuaCAqLywKKwkJCQkwOEI5M0Y3MzBGMjkzNDgxMDAwNzIwQzIg
LyogRm9ybUNvbnRyb2xFbGVtZW50V2l0aFN0YXRlLmNwcCAqLywKKwkJCQkwOEI5M0Y3NDBGMjkz
NDgxMDAwNzIwQzIgLyogRm9ybUNvbnRyb2xFbGVtZW50V2l0aFN0YXRlLmggKi8sCiAJCQkJMEJB
NUQzODUwRjI0MEZCNDAwOUI4NzBCIC8qIEdlbmVyaWNXb3JrZXJUYXNrLmggKi8sCiAJCQkJMDg3
MDBCRTYwRjA4NkM1MzAwOTE5NDE5IC8qIElucHV0RWxlbWVudC5jcHAgKi8sCiAJCQkJMDg1OTFB
QTQwRjA4NUM0RTAwOUJBQ0IxIC8qIElucHV0RWxlbWVudC5oICovLApAQCAtMTU0MTQsNiArMTU0
MjYsNyBAQAogCQkJCTM3ODRDMzRCMEUxMUFBMzQwMDdEOEQ0OCAvKiBGb250VHJhaXRzTWFzay5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQTgwRTZDRUQwQTE5ODlDQTAwN0ZCOEM1IC8qIEZvbnRWYWx1
ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMDg1NzczMzUwRjA4NDYwMTAwODA1ODNFIC8qIEZvcm1D
b250cm9sRWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMDhCOTNGNzYwRjI5MzQ4MTAwMDcy
MEMyIC8qIEZvcm1Db250cm9sRWxlbWVudFdpdGhTdGF0ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
NTE0Qzc2NzAwQ0U5MjNBMTAwN0VGM0NEIC8qIEZvcm1EYXRhLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkwODVCOTJCQjBFRkRFNzNEMDBFNjEyM0MgLyogRm9ybURhdGFCdWlsZGVyLmggaW4gSGVhZGVy
cyAqLywKIAkJCQlBODEzNkQzODA5NzNBOEU3MDBENzQ0NjMgLyogRm9ybURhdGFMaXN0LmggaW4g
SGVhZGVycyAqLywKQEAgLTE2NTA2LDYgKzE2NTE5LDcgQEAKIAkJCQkwOEUxOTI1NDBFREUwQzNB
MDA4N0I3ODAgLyogV01MRXJyb3JIYW5kbGluZy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMDgxOEFF
RTMwRURCODZCQzAwNjQ3QjY2IC8qIFdNTEV2ZW50SGFuZGxpbmdFbGVtZW50LmggaW4gSGVhZGVy
cyAqLywKIAkJCQkwOEU2RTBGMjBFRkY0MkJBMDAwMjlGQkYgLyogV01MRmllbGRTZXRFbGVtZW50
LmggaW4gSGVhZGVycyAqLywKKwkJCQkwODVBRkRDOTBGMjk3NzM1MDA2MUYyQjMgLyogV01MRm9y
bUNvbnRyb2xFbGVtZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQkwODgwN0I3NzBFRDcwOUFCMDAz
RjY5NzUgLyogV01MR29FbGVtZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQkwOEM0QzUxOTBFRjE5
QTQwMDBFNDg0MEYgLyogV01MSW1hZ2VFbGVtZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQkwOEM0
QzUxQjBFRjE5QTQwMDBFNDg0MEYgLyogV01MSW1hZ2VMb2FkZXIuaCBpbiBIZWFkZXJzICovLApA
QCAtMTczOTQsNiArMTc0MDgsNyBAQAogCQkJCUIyQUZGQzgyMEQwMEE1QzEwMDMwMDc0RCAvKiBG
b250UGxhdGZvcm1EYXRhTWFjLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJQTgwRTZDRjEwQTE5ODlD
QTAwN0ZCOEM1IC8qIEZvbnRWYWx1ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwOEJGREZDNDBG
MDk5RTcwMDA3REMyQkYgLyogRm9ybUNvbnRyb2xFbGVtZW50LmNwcCBpbiBTb3VyY2VzICovLAor
CQkJCTA4QjkzRjc1MEYyOTM0ODEwMDA3MjBDMiAvKiBGb3JtQ29udHJvbEVsZW1lbnRXaXRoU3Rh
dGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTE0Qzc2NkYwQ0U5MjNBMTAwN0VGM0NEIC8qIEZv
cm1EYXRhLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTA4NUI5MkJBMEVGREU3M0QwMEU2MTIzQyAv
KiBGb3JtRGF0YUJ1aWxkZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTgxMzZEMzkwOTczQThF
NzAwRDc0NDYzIC8qIEZvcm1EYXRhTGlzdC5jcHAgaW4gU291cmNlcyAqLywKQEAgLTE4NDg3LDYg
KzE4NTAyLDcgQEAKIAkJCQkwOEUxOTI1MzBFREUwQzNBMDA4N0I3ODAgLyogV01MRXJyb3JIYW5k
bGluZy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwODE4QUVFMjBFREI4NkJDMDA2NDdCNjYgLyog
V01MRXZlbnRIYW5kbGluZ0VsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMDhFNkUwRjEw
RUZGNDJCQTAwMDI5RkJGIC8qIFdNTEZpZWxkU2V0RWxlbWVudC5jcHAgaW4gU291cmNlcyAqLywK
KwkJCQkwODVBRkRDODBGMjk3NzM1MDA2MUYyQjMgLyogV01MRm9ybUNvbnRyb2xFbGVtZW50LmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTA4ODA3Qjc2MEVENzA5QUIwMDNGNjk3NSAvKiBXTUxHb0Vs
ZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMDhDNEM1MTgwRUYxOUE0MDAwRTQ4NDBGIC8q
IFdNTEltYWdlRWxlbWVudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwOEM0QzUxQTBFRjE5QTQw
MDBFNDg0MEYgLyogV01MSW1hZ2VMb2FkZXIuY3BwIGluIFNvdXJjZXMgKi8sCkluZGV4OiBkb20v
RG9jdW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGRvbS9Eb2N1bWVudC5jcHAJKHJldmlzaW9uIDQw
MTQ5KQorKysgZG9tL0RvY3VtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzg5MiwxNCArMzg5
MiwxNyBAQCBWZWN0b3I8U3RyaW5nPiBEb2N1bWVudDo6Zm9ybUVsZW1lbnRzU3RhCiB7CiAgICAg
VmVjdG9yPFN0cmluZz4gc3RhdGVWZWN0b3I7CiAgICAgc3RhdGVWZWN0b3IucmVzZXJ2ZUNhcGFj
aXR5KG1fZm9ybUVsZW1lbnRzV2l0aFN0YXRlLnNpemUoKSAqIDMpOwotICAgIHR5cGVkZWYgTGlz
dEhhc2hTZXQ8SFRNTEZvcm1Db250cm9sRWxlbWVudFdpdGhTdGF0ZSo+Ojpjb25zdF9pdGVyYXRv
ciBJdGVyYXRvcjsKKyAgICB0eXBlZGVmIExpc3RIYXNoU2V0PEZvcm1Db250cm9sRWxlbWVudFdp
dGhTdGF0ZSo+Ojpjb25zdF9pdGVyYXRvciBJdGVyYXRvcjsKICAgICBJdGVyYXRvciBlbmQgPSBt
X2Zvcm1FbGVtZW50c1dpdGhTdGF0ZS5lbmQoKTsKICAgICBmb3IgKEl0ZXJhdG9yIGl0ID0gbV9m
b3JtRWxlbWVudHNXaXRoU3RhdGUuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAg
IEhUTUxGb3JtQ29udHJvbEVsZW1lbnRXaXRoU3RhdGUqIGUgPSAqaXQ7CisgICAgICAgIEZvcm1D
b250cm9sRWxlbWVudFdpdGhTdGF0ZSogZSA9ICppdDsKICAgICAgICAgU3RyaW5nIHZhbHVlOwog
ICAgICAgICBpZiAoZS0+c2F2ZVN0YXRlKHZhbHVlKSkgewotICAgICAgICAgICAgc3RhdGVWZWN0
b3IuYXBwZW5kKGUtPm5hbWUoKS5zdHJpbmcoKSk7Ci0gICAgICAgICAgICBzdGF0ZVZlY3Rvci5h
cHBlbmQoZS0+dHlwZSgpLnN0cmluZygpKTsKKyAgICAgICAgICAgIEZvcm1Db250cm9sRWxlbWVu
dCogZm9ybUNvbnRyb2xFbGVtZW50ID0gZS0+dG9Gb3JtQ29udHJvbEVsZW1lbnQoKTsKKyAgICAg
ICAgICAgIEFTU0VSVChmb3JtQ29udHJvbEVsZW1lbnQpOworCisgICAgICAgICAgICBzdGF0ZVZl
Y3Rvci5hcHBlbmQoZm9ybUNvbnRyb2xFbGVtZW50LT5uYW1lKCkuc3RyaW5nKCkpOworICAgICAg
ICAgICAgc3RhdGVWZWN0b3IuYXBwZW5kKGZvcm1Db250cm9sRWxlbWVudC0+dHlwZSgpLnN0cmlu
ZygpKTsKICAgICAgICAgICAgIHN0YXRlVmVjdG9yLmFwcGVuZCh2YWx1ZSk7CiAgICAgICAgIH0K
ICAgICB9CkluZGV4OiBkb20vRG9jdW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBkb20vRG9jdW1lbnQu
aAkocmV2aXNpb24gNDAxNDkpCisrKyBkb20vRG9jdW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAt
NzQsMTIgKzc0LDEyIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICBjbGFzcyBFbnRpdHlSZWZl
cmVuY2U7CiAgICAgY2xhc3MgRXZlbnQ7CiAgICAgY2xhc3MgRXZlbnRMaXN0ZW5lcjsKKyAgICBj
bGFzcyBGb3JtQ29udHJvbEVsZW1lbnRXaXRoU3RhdGU7CiAgICAgY2xhc3MgRnJhbWU7CiAgICAg
Y2xhc3MgRnJhbWVWaWV3OwogICAgIGNsYXNzIEhUTUxDYW52YXNFbGVtZW50OwogICAgIGNsYXNz
IEhUTUxEb2N1bWVudDsKICAgICBjbGFzcyBIVE1MRWxlbWVudDsKLSAgICBjbGFzcyBIVE1MRm9y
bUNvbnRyb2xFbGVtZW50V2l0aFN0YXRlOwogICAgIGNsYXNzIEhUTUxGb3JtRWxlbWVudDsKICAg
ICBjbGFzcyBIVE1MSGVhZEVsZW1lbnQ7CiAgICAgY2xhc3MgSFRNTElucHV0RWxlbWVudDsKQEAg
LTM3Myw4ICszNzMsOCBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRVc2VzQmVmb3JlQWZ0ZXJSdWxl
cyhib29sIGIpIHsgbV91c2VzQmVmb3JlQWZ0ZXJSdWxlcyA9IGI7IH0KIAogICAgIC8vIE1hY2hp
bmVyeSBmb3Igc2F2aW5nIGFuZCByZXN0b3Jpbmcgc3RhdGUgd2hlbiB5b3UgbGVhdmUgYW5kIHRo
ZW4gZ28gYmFjayB0byBhIHBhZ2UuCi0gICAgdm9pZCByZWdpc3RlckZvcm1FbGVtZW50V2l0aFN0
YXRlKEhUTUxGb3JtQ29udHJvbEVsZW1lbnRXaXRoU3RhdGUqIGUpIHsgbV9mb3JtRWxlbWVudHNX
aXRoU3RhdGUuYWRkKGUpOyB9Ci0gICAgdm9pZCB1bnJlZ2lzdGVyRm9ybUVsZW1lbnRXaXRoU3Rh
dGUoSFRNTEZvcm1Db250cm9sRWxlbWVudFdpdGhTdGF0ZSogZSkgeyBtX2Zvcm1FbGVtZW50c1dp
dGhTdGF0ZS5yZW1vdmUoZSk7IH0KKyAgICB2b2lkIHJlZ2lzdGVyRm9ybUVsZW1lbnRXaXRoU3Rh
dGUoRm9ybUNvbnRyb2xFbGVtZW50V2l0aFN0YXRlKiBlKSB7IG1fZm9ybUVsZW1lbnRzV2l0aFN0
YXRlLmFkZChlKTsgfQorICAgIHZvaWQgdW5yZWdpc3RlckZvcm1FbGVtZW50V2l0aFN0YXRlKEZv
cm1Db250cm9sRWxlbWVudFdpdGhTdGF0ZSogZSkgeyBtX2Zvcm1FbGVtZW50c1dpdGhTdGF0ZS5y
ZW1vdmUoZSk7IH0KICAgICBWZWN0b3I8U3RyaW5nPiBmb3JtRWxlbWVudHNTdGF0ZSgpIGNvbnN0
OwogICAgIHZvaWQgc2V0U3RhdGVGb3JOZXdGb3JtRWxlbWVudHMoY29uc3QgVmVjdG9yPFN0cmlu
Zz4mKTsKICAgICBib29sIGhhc1N0YXRlRm9yTmV3Rm9ybUVsZW1lbnRzKCkgY29uc3Q7CkBAIC04
ODcsNyArODg3LDcgQEAgcHJpdmF0ZToKICAgICBSZWdpc3RlcmVkRXZlbnRMaXN0ZW5lclZlY3Rv
ciBtX3dpbmRvd0V2ZW50TGlzdGVuZXJzOwogCiAgICAgdHlwZWRlZiBIYXNoTWFwPEZvcm1FbGVt
ZW50S2V5LCBWZWN0b3I8U3RyaW5nPiwgRm9ybUVsZW1lbnRLZXlIYXNoLCBGb3JtRWxlbWVudEtl
eUhhc2hUcmFpdHM+IEZvcm1FbGVtZW50U3RhdGVNYXA7Ci0gICAgTGlzdEhhc2hTZXQ8SFRNTEZv
cm1Db250cm9sRWxlbWVudFdpdGhTdGF0ZSo+IG1fZm9ybUVsZW1lbnRzV2l0aFN0YXRlOworICAg
IExpc3RIYXNoU2V0PEZvcm1Db250cm9sRWxlbWVudFdpdGhTdGF0ZSo+IG1fZm9ybUVsZW1lbnRz
V2l0aFN0YXRlOwogICAgIEZvcm1FbGVtZW50U3RhdGVNYXAgbV9zdGF0ZUZvck5ld0Zvcm1FbGVt
ZW50czsKICAgICAKICAgICBDb2xvciBtX2xpbmtDb2xvcjsKSW5kZXg6IGRvbS9FbGVtZW50LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gZG9tL0VsZW1lbnQuaAkocmV2aXNpb24gNDAxNDkpCisrKyBkb20vRWxl
bWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMjAsNiArMTIwLDggQEAgcHVibGljOgogCiAgICAg
dm9pZCBub3JtYWxpemVBdHRyaWJ1dGVzKCk7CiAKKyAgICB2aXJ0dWFsIGJvb2wgaXNGb3JtQ29u
dHJvbEVsZW1lbnQoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorICAgIHZpcnR1YWwgYm9vbCBp
c0Zvcm1Db250cm9sRWxlbWVudFdpdGhTdGF0ZSgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAg
ICAgdmlydHVhbCBib29sIGlzSW5wdXRUeXBlSGlkZGVuKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7
IH0KICAgICB2aXJ0dWFsIGJvb2wgaXNQYXNzd29yZEZpZWxkKCkgY29uc3QgeyByZXR1cm4gZmFs
c2U7IH0KIApJbmRleDogZG9tL0Zvcm1Db250cm9sRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
ZG9tL0Zvcm1Db250cm9sRWxlbWVudC5jcHAJKHJldmlzaW9uIDQwMTQ5KQorKysgZG9tL0Zvcm1D
b250cm9sRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICog
Q29weXJpZ2h0IChDKSAyMDA4IFRvcmNoIE1vYmlsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
IChodHRwOi8vd3d3LnRvcmNobW9iaWxlLmNvbS8pCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIw
MDkgVG9yY2ggTW9iaWxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gKGh0dHA6Ly93d3cudG9y
Y2htb2JpbGUuY29tLykKICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMjYsMjIgKzI2LDIyIEBACiAj
aW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KIAogI2lmIEVOQUJMRShXTUwpCi0jaW5jbHVkZSAi
V01MSW5wdXRFbGVtZW50LmgiCi0jaW5jbHVkZSAiV01MTmFtZXMuaCIKKyNpbmNsdWRlICJXTUxG
b3JtQ29udHJvbEVsZW1lbnQuaCIKICNlbmRpZgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIEZv
cm1Db250cm9sRWxlbWVudCogdG9Gb3JtQ29udHJvbEVsZW1lbnQoRWxlbWVudCogZWxlbWVudCkK
IHsKLSAgICBpZiAoZWxlbWVudC0+aXNIVE1MRWxlbWVudCgpKSB7Ci0gICAgICAgIGlmIChzdGF0
aWNfY2FzdDxIVE1MRWxlbWVudCo+KGVsZW1lbnQpLT5pc0dlbmVyaWNGb3JtRWxlbWVudCgpKQot
ICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEhUTUxGb3JtQ29udHJvbEVsZW1lbnQqPihl
bGVtZW50KTsKLSAgICB9CisgICAgaWYgKCFlbGVtZW50LT5pc0Zvcm1Db250cm9sRWxlbWVudCgp
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAoZWxlbWVudC0+aXNIVE1MRWxlbWVu
dCgpKQorICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8SFRNTEZvcm1Db250cm9sRWxlbWVudCo+
KGVsZW1lbnQpOwogCiAjaWYgRU5BQkxFKFdNTCkKLSAgICBpZiAoZWxlbWVudC0+aXNXTUxFbGVt
ZW50KCkgJiYgZWxlbWVudC0+aGFzVGFnTmFtZShXTUxOYW1lczo6aW5wdXRUYWcpKQotICAgICAg
ICByZXR1cm4gc3RhdGljX2Nhc3Q8V01MSW5wdXRFbGVtZW50Kj4oZWxlbWVudCk7CisgICAgaWYg
KGVsZW1lbnQtPmlzV01MRWxlbWVudCgpKQorICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8V01M
Rm9ybUNvbnRyb2xFbGVtZW50Kj4oZWxlbWVudCk7CiAjZW5kaWYKIAogICAgIHJldHVybiAwOwpJ
bmRleDogZG9tL0Zvcm1Db250cm9sRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGRvbS9Gb3JtQ29u
dHJvbEVsZW1lbnQuaAkocmV2aXNpb24gNDAxNDkpCisrKyBkb20vRm9ybUNvbnRyb2xFbGVtZW50
LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAy
MDA4IFRvcmNoIE1vYmlsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIChodHRwOi8vd3d3LnRv
cmNobW9iaWxlLmNvbS8pCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDkgVG9yY2ggTW9iaWxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gKGh0dHA6Ly93d3cudG9yY2htb2JpbGUuY29tLykK
ICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMjMsNiArMjMsNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKK2NsYXNzIEF0b21pY1N0cmluZzsKIGNsYXNzIEVsZW1lbnQ7CiAKIGNsYXNzIEZvcm1D
b250cm9sRWxlbWVudCB7CkBAIC0zMiw2ICszMyw5IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGJv
b2wgdmFsdWVNYXRjaGVzUmVuZGVyZXIoKSBjb25zdCA9IDA7CiAgICAgdmlydHVhbCB2b2lkIHNl
dFZhbHVlTWF0Y2hlc1JlbmRlcmVyKGJvb2wgdmFsdWUgPSB0cnVlKSA9IDA7CiAKKyAgICB2aXJ0
dWFsIGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSgpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIGNv
bnN0IEF0b21pY1N0cmluZyYgdHlwZSgpIGNvbnN0ID0gMDsKKwogcHJvdGVjdGVkOgogICAgIEZv
cm1Db250cm9sRWxlbWVudCgpIHsgfQogfTsKSW5kZXg6IGRvbS9Gb3JtQ29udHJvbEVsZW1lbnRX
aXRoU3RhdGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGRvbS9Gb3JtQ29udHJvbEVsZW1lbnRXaXRoU3Rh
dGUuY3BwCShyZXZpc2lvbiAwKQorKysgZG9tL0Zvcm1Db250cm9sRWxlbWVudFdpdGhTdGF0ZS5j
cHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNzQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MDkgVG9yY2ggTW9iaWxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gKGh0dHA6Ly93d3cudG9y
Y2htb2JpbGUuY29tLykKKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNo
ZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIg
b2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisg
KgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2ls
bCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0
aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSBy
ZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UK
KyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJ
ZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1
MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAx
LCBVU0EuCisgKgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJGb3JtQ29u
dHJvbEVsZW1lbnRXaXRoU3RhdGUuaCIKKworI2luY2x1ZGUgIkRvY3VtZW50LmgiCisjaW5jbHVk
ZSAiRWxlbWVudC5oIgorI2luY2x1ZGUgIkhUTUxGb3JtQ29udHJvbEVsZW1lbnQuaCIKKyNpbmNs
dWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgorCisjaWYgRU5BQkxFKFdNTCkKKyNpbmNsdWRlICJXTUxG
b3JtQ29udHJvbEVsZW1lbnQuaCIKKyNlbmRpZgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3Zv
aWQgRm9ybUNvbnRyb2xFbGVtZW50V2l0aFN0YXRlOjpyZWdpc3RlckZvcm1Db250cm9sRWxlbWVu
dFdpdGhTdGF0ZShGb3JtQ29udHJvbEVsZW1lbnRXaXRoU3RhdGUqIGVsZW1lbnQsIERvY3VtZW50
KiBkb2N1bWVudCkKK3sKKyAgICBkb2N1bWVudC0+cmVnaXN0ZXJGb3JtRWxlbWVudFdpdGhTdGF0
ZShlbGVtZW50KTsKK30KKwordm9pZCBGb3JtQ29udHJvbEVsZW1lbnRXaXRoU3RhdGU6OnVucmVn
aXN0ZXJGb3JtQ29udHJvbEVsZW1lbnRXaXRoU3RhdGUoRm9ybUNvbnRyb2xFbGVtZW50V2l0aFN0
YXRlKiBlbGVtZW50LCBEb2N1bWVudCogZG9jdW1lbnQpCit7CisgICAgZG9jdW1lbnQtPnVucmVn
aXN0ZXJGb3JtRWxlbWVudFdpdGhTdGF0ZShlbGVtZW50KTsKK30KKwordm9pZCBGb3JtQ29udHJv
bEVsZW1lbnRXaXRoU3RhdGU6OmZpbmlzaFBhcnNpbmdDaGlsZHJlbihGb3JtQ29udHJvbEVsZW1l
bnRXaXRoU3RhdGUqIGVsZW1lbnQsIERvY3VtZW50KiBkb2N1bWVudCkKK3sKKyAgICBpZiAoIWRv
Y3VtZW50LT5oYXNTdGF0ZUZvck5ld0Zvcm1FbGVtZW50cygpKQorICAgICAgICByZXR1cm47CisK
KyAgICBGb3JtQ29udHJvbEVsZW1lbnQqIGZvcm1Db250cm9sRWxlbWVudCA9IGVsZW1lbnQtPnRv
Rm9ybUNvbnRyb2xFbGVtZW50KCk7CisgICAgQVNTRVJUKGZvcm1Db250cm9sRWxlbWVudCk7CisK
KyAgICBTdHJpbmcgc3RhdGU7CisgICAgaWYgKGRvY3VtZW50LT50YWtlU3RhdGVGb3JGb3JtRWxl
bWVudChmb3JtQ29udHJvbEVsZW1lbnQtPm5hbWUoKS5pbXBsKCksIGZvcm1Db250cm9sRWxlbWVu
dC0+dHlwZSgpLmltcGwoKSwgc3RhdGUpKQorICAgICAgICBlbGVtZW50LT5yZXN0b3JlU3RhdGUo
c3RhdGUpOworfQorCitGb3JtQ29udHJvbEVsZW1lbnRXaXRoU3RhdGUqIHRvRm9ybUNvbnRyb2xF
bGVtZW50V2l0aFN0YXRlKEVsZW1lbnQqIGVsZW1lbnQpCit7CisJaWYgKCFlbGVtZW50LT5pc0Zv
cm1Db250cm9sRWxlbWVudFdpdGhTdGF0ZSgpKQorCQlyZXR1cm4gMDsKKworCWlmIChlbGVtZW50
LT5pc0hUTUxFbGVtZW50KCkpCisJCXJldHVybiBzdGF0aWNfY2FzdDxIVE1MRm9ybUNvbnRyb2xF
bGVtZW50V2l0aFN0YXRlKj4oZWxlbWVudCk7CisKKyNpZiBFTkFCTEUoV01MKQorICAgIGlmIChl
bGVtZW50LT5pc1dNTEVsZW1lbnQoKSkKKwkJcmV0dXJuIHN0YXRpY19jYXN0PFdNTEZvcm1Db250
cm9sRWxlbWVudFdpdGhTdGF0ZSo+KGVsZW1lbnQpOworI2VuZGlmCisKKyAgICByZXR1cm4gMDsK
K30KKworfQpJbmRleDogZG9tL0Zvcm1Db250cm9sRWxlbWVudFdpdGhTdGF0ZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIGRvbS9Gb3JtQ29udHJvbEVsZW1lbnRXaXRoU3RhdGUuaAkocmV2aXNpb24gMCkKKysr
IGRvbS9Gb3JtQ29udHJvbEVsZW1lbnRXaXRoU3RhdGUuaAkocmV2aXNpb24gMCkKQEAgLTAsMCAr
MSw1MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBUb3JjaCBNb2JpbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLiAoaHR0cDovL3d3dy50b3JjaG1vYmlsZS5jb20vKQorICoKKyAqIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlv
dXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlz
dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRI
T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisg
KiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBT
ZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl
dGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJh
cnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGgg
Rmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqCisgKi8KKworI2lmbmRl
ZiBGb3JtQ29udHJvbEVsZW1lbnRXaXRoU3RhdGVfaAorI2RlZmluZSBGb3JtQ29udHJvbEVsZW1l
bnRXaXRoU3RhdGVfaAorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIERvY3VtZW50Owor
Y2xhc3MgRWxlbWVudDsKK2NsYXNzIEZvcm1Db250cm9sRWxlbWVudDsKK2NsYXNzIFN0cmluZzsK
KworY2xhc3MgRm9ybUNvbnRyb2xFbGVtZW50V2l0aFN0YXRlIHsgCitwdWJsaWM6CisgICAgdmly
dHVhbCB+Rm9ybUNvbnRyb2xFbGVtZW50V2l0aFN0YXRlKCkgeyB9CisKKyAgICB2aXJ0dWFsIGJv
b2wgc2F2ZVN0YXRlKFN0cmluZyYgdmFsdWUpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQg
cmVzdG9yZVN0YXRlKGNvbnN0IFN0cmluZyYgdmFsdWUpID0gMDsKKworICAgIC8vIEV2ZXJ5IEZv
cm1Db250cm9sRWxlbWVudFdpdGhTdGF0ZSBjbGFzcywgaXMgYWxzbyBhIEZvcm1Db250cm9sRWxl
bWVudCBjbGFzcyBieSBkZWZpbml0aW9uLgorICAgIHZpcnR1YWwgRm9ybUNvbnRyb2xFbGVtZW50
KiB0b0Zvcm1Db250cm9sRWxlbWVudCgpID0gMDsKKworcHJvdGVjdGVkOgorICAgIEZvcm1Db250
cm9sRWxlbWVudFdpdGhTdGF0ZSgpIHsgfQorCisgICAgc3RhdGljIHZvaWQgcmVnaXN0ZXJGb3Jt
Q29udHJvbEVsZW1lbnRXaXRoU3RhdGUoRm9ybUNvbnRyb2xFbGVtZW50V2l0aFN0YXRlKiwgRG9j
dW1lbnQqKTsKKyAgICBzdGF0aWMgdm9pZCB1bnJlZ2lzdGVyRm9ybUNvbnRyb2xFbGVtZW50V2l0
aFN0YXRlKEZvcm1Db250cm9sRWxlbWVudFdpdGhTdGF0ZSosIERvY3VtZW50Kik7CisgICAgc3Rh
dGljIHZvaWQgZmluaXNoUGFyc2luZ0NoaWxkcmVuKEZvcm1Db250cm9sRWxlbWVudFdpdGhTdGF0
ZSosIERvY3VtZW50Kik7Cit9OworCitGb3JtQ29udHJvbEVsZW1lbnRXaXRoU3RhdGUqIHRvRm9y
bUNvbnRyb2xFbGVtZW50V2l0aFN0YXRlKEVsZW1lbnQqKTsKKworfQorCisjZW5kaWYKSW5kZXg6
IGh0bWwvSFRNTEVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBodG1sL0hUTUxFbGVtZW50LmgJKHJl
dmlzaW9uIDQwMTQ5KQorKysgaHRtbC9IVE1MRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC04
NSw4ICs4NSw2IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgdm9pZCBhY2Nlc3NLZXlBY3Rpb24o
Ym9vbCBzZW5kVG9BbnlFbGVtZW50KTsKIAotICAgIHZpcnR1YWwgYm9vbCBpc0dlbmVyaWNGb3Jt
RWxlbWVudCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9Ci0KICAgICB2aXJ0dWFsIEhUTUxUYWdT
dGF0dXMgZW5kVGFnUmVxdWlyZW1lbnQoKSBjb25zdDsKICAgICB2aXJ0dWFsIGludCB0YWdQcmlv
cml0eSgpIGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBjaGlsZEFsbG93ZWQoTm9kZSogbmV3Q2hp
bGQpOyAvLyBFcnJvci1jaGVja2luZyBkdXJpbmcgcGFyc2luZyB0aGF0IGNoZWNrcyB0aGUgRFRE
CkluZGV4OiBodG1sL0hUTUxGb3JtQ29udHJvbEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGh0
bWwvSFRNTEZvcm1Db250cm9sRWxlbWVudC5jcHAJKHJldmlzaW9uIDQwMTQ5KQorKysgaHRtbC9I
VE1MRm9ybUNvbnRyb2xFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjU3LDIzICsyNTcs
MjMgQEAgdm9pZCBIVE1MRm9ybUNvbnRyb2xFbGVtZW50OjpyZW1vdmVGcm9tRgogSFRNTEZvcm1D
b250cm9sRWxlbWVudFdpdGhTdGF0ZTo6SFRNTEZvcm1Db250cm9sRWxlbWVudFdpdGhTdGF0ZShj
b25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudCogZG9jLCBIVE1MRm9ybUVsZW1l
bnQqIGYpCiAgICAgOiBIVE1MRm9ybUNvbnRyb2xFbGVtZW50KHRhZ05hbWUsIGRvYywgZikKIHsK
LSAgICBkb2MtPnJlZ2lzdGVyRm9ybUVsZW1lbnRXaXRoU3RhdGUodGhpcyk7CisJRm9ybUNvbnRy
b2xFbGVtZW50V2l0aFN0YXRlOjpyZWdpc3RlckZvcm1Db250cm9sRWxlbWVudFdpdGhTdGF0ZSh0
aGlzLCBkb2N1bWVudCgpKTsKIH0KIAogSFRNTEZvcm1Db250cm9sRWxlbWVudFdpdGhTdGF0ZTo6
fkhUTUxGb3JtQ29udHJvbEVsZW1lbnRXaXRoU3RhdGUoKQogewotICAgIGRvY3VtZW50KCktPnVu
cmVnaXN0ZXJGb3JtRWxlbWVudFdpdGhTdGF0ZSh0aGlzKTsKKwlGb3JtQ29udHJvbEVsZW1lbnRX
aXRoU3RhdGU6OnVucmVnaXN0ZXJGb3JtQ29udHJvbEVsZW1lbnRXaXRoU3RhdGUodGhpcywgZG9j
dW1lbnQoKSk7CiB9CiAKIHZvaWQgSFRNTEZvcm1Db250cm9sRWxlbWVudFdpdGhTdGF0ZTo6d2ls
bE1vdmVUb05ld093bmVyRG9jdW1lbnQoKQogewotICAgIGRvY3VtZW50KCktPnVucmVnaXN0ZXJG
b3JtRWxlbWVudFdpdGhTdGF0ZSh0aGlzKTsKKwlGb3JtQ29udHJvbEVsZW1lbnRXaXRoU3RhdGU6
OnVucmVnaXN0ZXJGb3JtQ29udHJvbEVsZW1lbnRXaXRoU3RhdGUodGhpcywgZG9jdW1lbnQoKSk7
CiAgICAgSFRNTEZvcm1Db250cm9sRWxlbWVudDo6d2lsbE1vdmVUb05ld093bmVyRG9jdW1lbnQo
KTsKIH0KIAogdm9pZCBIVE1MRm9ybUNvbnRyb2xFbGVtZW50V2l0aFN0YXRlOjpkaWRNb3ZlVG9O
ZXdPd25lckRvY3VtZW50KCkKIHsKLSAgICBkb2N1bWVudCgpLT5yZWdpc3RlckZvcm1FbGVtZW50
V2l0aFN0YXRlKHRoaXMpOworCUZvcm1Db250cm9sRWxlbWVudFdpdGhTdGF0ZTo6cmVnaXN0ZXJG
b3JtQ29udHJvbEVsZW1lbnRXaXRoU3RhdGUodGhpcywgZG9jdW1lbnQoKSk7CiAgICAgSFRNTEZv
cm1Db250cm9sRWxlbWVudDo6ZGlkTW92ZVRvTmV3T3duZXJEb2N1bWVudCgpOwogfQogCkluZGV4
OiBodG1sL0hUTUxGb3JtQ29udHJvbEVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBodG1sL0hUTUxG
b3JtQ29udHJvbEVsZW1lbnQuaAkocmV2aXNpb24gNDAxNDkpCisrKyBodG1sL0hUTUxGb3JtQ29u
dHJvbEVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMjUsNiArMjUsNyBAQAogI2RlZmluZSBI
VE1MRm9ybUNvbnRyb2xFbGVtZW50X2gKIAogI2luY2x1ZGUgIkZvcm1Db250cm9sRWxlbWVudC5o
IgorI2luY2x1ZGUgIkZvcm1Db250cm9sRWxlbWVudFdpdGhTdGF0ZS5oIgogI2luY2x1ZGUgIkhU
TUxFbGVtZW50LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTgwLDcgKzgxLDcgQEAgcHVi
bGljOgogICAgIHZpcnR1YWwgY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lKCkgY29uc3Q7CiAgICAg
dm9pZCBzZXROYW1lKGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSk7CiAKLSAgICB2aXJ0dWFsIGJv
b2wgaXNHZW5lcmljRm9ybUVsZW1lbnQoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CisgICAgdmly
dHVhbCBib29sIGlzRm9ybUNvbnRyb2xFbGVtZW50KCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQog
ICAgIHZpcnR1YWwgYm9vbCBpc1JhZGlvQnV0dG9uKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0K
IAogICAgIC8qIE92ZXJyaWRlIGluIGRlcml2ZWQgY2xhc3NlcyB0byBnZXQgdGhlIGVuY29kZWQg
bmFtZT12YWx1ZSBwYWlyIGZvciBzdWJtaXR0aW5nLgpAQCAtMTEwLDIxICsxMTEsMTkgQEAgcHJp
dmF0ZToKICAgICBib29sIG1fdmFsdWVNYXRjaGVzUmVuZGVyZXI7CiB9OwogCi1jbGFzcyBIVE1M
Rm9ybUNvbnRyb2xFbGVtZW50V2l0aFN0YXRlIDogcHVibGljIEhUTUxGb3JtQ29udHJvbEVsZW1l
bnQgeworY2xhc3MgSFRNTEZvcm1Db250cm9sRWxlbWVudFdpdGhTdGF0ZSA6IHB1YmxpYyBIVE1M
Rm9ybUNvbnRyb2xFbGVtZW50LCBwdWJsaWMgRm9ybUNvbnRyb2xFbGVtZW50V2l0aFN0YXRlICB7
CiBwdWJsaWM6CiAgICAgSFRNTEZvcm1Db250cm9sRWxlbWVudFdpdGhTdGF0ZShjb25zdCBRdWFs
aWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudCosIEhUTUxGb3JtRWxlbWVudCopOwogICAgIHZp
cnR1YWwgfkhUTUxGb3JtQ29udHJvbEVsZW1lbnRXaXRoU3RhdGUoKTsKIAotICAgIHZpcnR1YWwg
dm9pZCBmaW5pc2hQYXJzaW5nQ2hpbGRyZW4oKTsKKyAgICB2aXJ0dWFsIGJvb2wgaXNGb3JtQ29u
dHJvbEVsZW1lbnRXaXRoU3RhdGUoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CiAKLSAgICB2aXJ0
dWFsIGJvb2wgc2F2ZVN0YXRlKFN0cmluZyYgdmFsdWUpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFs
IEZvcm1Db250cm9sRWxlbWVudCogdG9Gb3JtQ29udHJvbEVsZW1lbnQoKSB7IHJldHVybiB0aGlz
OyB9CisgICAgdmlydHVhbCB2b2lkIGZpbmlzaFBhcnNpbmdDaGlsZHJlbigpOwogCiBwcm90ZWN0
ZWQ6CiAgICAgdmlydHVhbCB2b2lkIHdpbGxNb3ZlVG9OZXdPd25lckRvY3VtZW50KCk7CiAgICAg
dmlydHVhbCB2b2lkIGRpZE1vdmVUb05ld093bmVyRG9jdW1lbnQoKTsKLQotcHJpdmF0ZToKLSAg
ICB2aXJ0dWFsIHZvaWQgcmVzdG9yZVN0YXRlKGNvbnN0IFN0cmluZyYgdmFsdWUpID0gMDsKIH07
CiAKIH0gLy9uYW1lc3BhY2UKSW5kZXg6IGh0bWwvSFRNTEZvcm1FbGVtZW50LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBodG1sL0hUTUxGb3JtRWxlbWVudC5jcHAJKHJldmlzaW9uIDQwMTQ5KQorKysgaHRt
bC9IVE1MRm9ybUVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MzIsNyArNDMyLDcgQEAg
dW5zaWduZWQgSFRNTEZvcm1FbGVtZW50Ojpmb3JtRWxlbWVudEluZAogICAgICAgICAgICAgaWYg
KG5vZGUgPT0gZSkKICAgICAgICAgICAgICAgICByZXR1cm4gaTsKICAgICAgICAgICAgIGlmIChu
b2RlLT5pc0hUTUxFbGVtZW50KCkKLSAgICAgICAgICAgICAgICAgICAgJiYgc3RhdGljX2Nhc3Q8
SFRNTEVsZW1lbnQqPihub2RlKS0+aXNHZW5lcmljRm9ybUVsZW1lbnQoKQorICAgICAgICAgICAg
ICAgICAgICAmJiBzdGF0aWNfY2FzdDxFbGVtZW50Kj4obm9kZSktPmlzRm9ybUNvbnRyb2xFbGVt
ZW50KCkKICAgICAgICAgICAgICAgICAgICAgJiYgc3RhdGljX2Nhc3Q8SFRNTEZvcm1Db250cm9s
RWxlbWVudCo+KG5vZGUpLT5mb3JtKCkgPT0gdGhpcykKICAgICAgICAgICAgICAgICArK2k7CiAg
ICAgICAgIH0KSW5kZXg6IGh0bWwvSFRNTExhYmVsRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
aHRtbC9IVE1MTGFiZWxFbGVtZW50LmNwcAkocmV2aXNpb24gNDAxNDkpCisrKyBodG1sL0hUTUxM
YWJlbEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01OSw3ICs1OSw3IEBAIEhUTUxFbGVt
ZW50KiBIVE1MTGFiZWxFbGVtZW50Ojpjb3JyZXNwb24KICAgICAgICAgd2hpbGUgKChub2RlID0g
bm9kZS0+dHJhdmVyc2VOZXh0Tm9kZSh0aGlzKSkpIHsKICAgICAgICAgICAgIGlmIChub2RlLT5p
c0hUTUxFbGVtZW50KCkpIHsKICAgICAgICAgICAgICAgICBIVE1MRWxlbWVudCogZWxlbWVudCA9
IHN0YXRpY19jYXN0PEhUTUxFbGVtZW50Kj4obm9kZSk7Ci0gICAgICAgICAgICAgICAgaWYgKGVs
ZW1lbnQtPmlzR2VuZXJpY0Zvcm1FbGVtZW50KCkpCisgICAgICAgICAgICAgICAgaWYgKGVsZW1l
bnQtPmlzRm9ybUNvbnRyb2xFbGVtZW50KCkpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBl
bGVtZW50OwogICAgICAgICAgICAgfQogICAgICAgICB9CkluZGV4OiBodG1sL0hUTUxMZWdlbmRF
bGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBodG1sL0hUTUxMZWdlbmRFbGVtZW50LmNwcAkocmV2
aXNpb24gNDAxNDkpCisrKyBodG1sL0hUTUxMZWdlbmRFbGVtZW50LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtOTcsNyArOTcsNyBAQCBFbGVtZW50ICpIVE1MTGVnZW5kRWxlbWVudDo6Zm9ybUVsZW1l
bnQoCiAgICAgd2hpbGUgKChub2RlID0gbm9kZS0+dHJhdmVyc2VOZXh0Tm9kZShmaWVsZHNldCkp
KSB7CiAgICAgICAgIGlmIChub2RlLT5pc0hUTUxFbGVtZW50KCkpIHsKICAgICAgICAgICAgIEhU
TUxFbGVtZW50ICplbGVtZW50ID0gc3RhdGljX2Nhc3Q8SFRNTEVsZW1lbnQgKj4obm9kZSk7Ci0g
ICAgICAgICAgICBpZiAoIWVsZW1lbnQtPmhhc0xvY2FsTmFtZShsZWdlbmRUYWcpICYmIGVsZW1l
bnQtPmlzR2VuZXJpY0Zvcm1FbGVtZW50KCkpCisgICAgICAgICAgICBpZiAoIWVsZW1lbnQtPmhh
c0xvY2FsTmFtZShsZWdlbmRUYWcpICYmIGVsZW1lbnQtPmlzRm9ybUNvbnRyb2xFbGVtZW50KCkp
CiAgICAgICAgICAgICAgICAgcmV0dXJuIGVsZW1lbnQ7CiAgICAgICAgIH0KICAgICB9CkluZGV4
OiBwYWdlL0ZyYW1lLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBwYWdlL0ZyYW1lLmNwcAkocmV2aXNpb24g
NDAxNDkpCisrKyBwYWdlL0ZyYW1lLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDMzLDggKzQzMyw3
IEBAIFN0cmluZyBGcmFtZTo6c2VhcmNoRm9yTGFiZWxzQmVmb3JlRWxlbWUKICAgICAgICAgIG4g
PSBuLT50cmF2ZXJzZVByZXZpb3VzTm9kZSgpKQogICAgIHsKICAgICAgICAgaWYgKG4tPmhhc1Rh
Z05hbWUoZm9ybVRhZykKLSAgICAgICAgICAgIHx8IChuLT5pc0hUTUxFbGVtZW50KCkKLSAgICAg
ICAgICAgICAgICAmJiBzdGF0aWNfY2FzdDxIVE1MRWxlbWVudCo+KG4pLT5pc0dlbmVyaWNGb3Jt
RWxlbWVudCgpKSkKKyAgICAgICAgICAgIHx8IChuLT5pc0hUTUxFbGVtZW50KCkgJiYgc3RhdGlj
X2Nhc3Q8RWxlbWVudCo+KG4pLT5pc0Zvcm1Db250cm9sRWxlbWVudCgpKSkKICAgICAgICAgewog
ICAgICAgICAgICAgLy8gV2UgaGl0IGFub3RoZXIgZm9ybSBlbGVtZW50IG9yIHRoZSBzdGFydCBv
ZiB0aGUgZm9ybSAtIGJhaWwgb3V0CiAgICAgICAgICAgICBicmVhazsKQEAgLTEyMjcsNyArMTIy
Niw3IEBAIHN0YXRpYyBIVE1MRm9ybUVsZW1lbnQgKnNjYW5Gb3JGb3JtKE5vZGUKICAgICBmb3Ig
KG4gPSBzdGFydDsgbjsgbiA9IG4tPnRyYXZlcnNlTmV4dE5vZGUoKSkgewogICAgICAgICBpZiAo
bi0+aGFzVGFnTmFtZShmb3JtVGFnKSkKICAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxI
VE1MRm9ybUVsZW1lbnQqPihuKTsKLSAgICAgICAgZWxzZSBpZiAobi0+aXNIVE1MRWxlbWVudCgp
ICYmIHN0YXRpY19jYXN0PEhUTUxFbGVtZW50Kj4obiktPmlzR2VuZXJpY0Zvcm1FbGVtZW50KCkp
CisgICAgICAgIGVsc2UgaWYgKG4tPmlzSFRNTEVsZW1lbnQoKSAmJiBzdGF0aWNfY2FzdDxFbGVt
ZW50Kj4obiktPmlzRm9ybUNvbnRyb2xFbGVtZW50KCkpCiAgICAgICAgICAgICByZXR1cm4gc3Rh
dGljX2Nhc3Q8SFRNTEZvcm1Db250cm9sRWxlbWVudCo+KG4pLT5mb3JtKCk7CiAgICAgICAgIGVs
c2UgaWYgKG4tPmhhc1RhZ05hbWUoZnJhbWVUYWcpIHx8IG4tPmhhc1RhZ05hbWUoaWZyYW1lVGFn
KSkgewogICAgICAgICAgICAgTm9kZSAqY2hpbGREb2MgPSBzdGF0aWNfY2FzdDxIVE1MRnJhbWVF
bGVtZW50QmFzZSo+KG4pLT5jb250ZW50RG9jdW1lbnQoKTsKQEAgLTEyNTEsOCArMTI1MCw3IEBA
IEhUTUxGb3JtRWxlbWVudCAqRnJhbWU6OmN1cnJlbnRGb3JtKCkgY28KICAgICBmb3IgKG4gPSBz
dGFydDsgbjsgbiA9IG4tPnBhcmVudE5vZGUoKSkgewogICAgICAgICBpZiAobi0+aGFzVGFnTmFt
ZShmb3JtVGFnKSkKICAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxIVE1MRm9ybUVsZW1l
bnQqPihuKTsKLSAgICAgICAgZWxzZSBpZiAobi0+aXNIVE1MRWxlbWVudCgpCi0gICAgICAgICAg
ICAgICAgICAgJiYgc3RhdGljX2Nhc3Q8SFRNTEVsZW1lbnQqPihuKS0+aXNHZW5lcmljRm9ybUVs
ZW1lbnQoKSkKKyAgICAgICAgZWxzZSBpZiAobi0+aXNIVE1MRWxlbWVudCgpICYmIHN0YXRpY19j
YXN0PEVsZW1lbnQqPihuKS0+aXNGb3JtQ29udHJvbEVsZW1lbnQoKSkKICAgICAgICAgICAgIHJl
dHVybiBzdGF0aWNfY2FzdDxIVE1MRm9ybUNvbnRyb2xFbGVtZW50Kj4obiktPmZvcm0oKTsKICAg
ICB9CiAgICAgCkluZGV4OiBwYWdlL21hYy9GcmFtZU1hYy5tbQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBwYWdl
L21hYy9GcmFtZU1hYy5tbQkocmV2aXNpb24gNDAxNDkpCisrKyBwYWdlL21hYy9GcmFtZU1hYy5t
bQkod29ya2luZyBjb3B5KQpAQCAtMTk2LDggKzE5Niw3IEBAIE5TU3RyaW5nKiBGcmFtZTo6c2Vh
cmNoRm9yTGFiZWxzQmVmb3JlRWwKICAgICAgICAgIG4gPSBuLT50cmF2ZXJzZVByZXZpb3VzTm9k
ZSgpKQogICAgIHsKICAgICAgICAgaWYgKG4tPmhhc1RhZ05hbWUoZm9ybVRhZykKLSAgICAgICAg
ICAgIHx8IChuLT5pc0hUTUxFbGVtZW50KCkKLSAgICAgICAgICAgICAgICAmJiBzdGF0aWNfY2Fz
dDxIVE1MRWxlbWVudCo+KG4pLT5pc0dlbmVyaWNGb3JtRWxlbWVudCgpKSkKKyAgICAgICAgICAg
IHx8IChuLT5pc0hUTUxFbGVtZW50KCkgJiYgc3RhdGljX2Nhc3Q8RWxlbWVudCo+KG4pLT5pc0Zv
cm1Db250cm9sRWxlbWVudCgpKSkKICAgICAgICAgewogICAgICAgICAgICAgLy8gV2UgaGl0IGFu
b3RoZXIgZm9ybSBlbGVtZW50IG9yIHRoZSBzdGFydCBvZiB0aGUgZm9ybSAtIGJhaWwgb3V0CiAg
ICAgICAgICAgICBicmVhazsKSW5kZXg6IHdtbC9XTUxDYXJkRWxlbWVudC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gd21sL1dNTENhcmRFbGVtZW50LmNwcAkocmV2aXNpb24gNDAxNDkpCisrKyB3bWwvV01M
Q2FyZEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENv
cHlyaWdodCAoQykgMjAwOCBUb3JjaCBNb2JpbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLiAo
aHR0cDovL3d3dy50b3JjaG1vYmlsZS5jb20vKQorICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDA5
IFRvcmNoIE1vYmlsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIChodHRwOi8vd3d3LnRvcmNo
bW9iaWxlLmNvbS8pCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTQxLDcgKzQxLDcgQEAgbmFtZXNw
YWNlIFdlYkNvcmUgewogdXNpbmcgbmFtZXNwYWNlIFdNTE5hbWVzOwogCiBXTUxDYXJkRWxlbWVu
dDo6V01MQ2FyZEVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQq
IGRvYykKLSAgICA6IFdNTEV2ZW50SGFuZGxpbmdFbGVtZW50KHRhZ05hbWUsIGRvYykKKyAgICA6
IFdNTEVsZW1lbnQodGFnTmFtZSwgZG9jKQogICAgICwgbV9pc05ld0NvbnRleHQoZmFsc2UpCiAg
ICAgLCBtX2lzT3JkZXJlZChmYWxzZSkKICAgICAsIG1faXNWaXNpYmxlKGZhbHNlKQpAQCAtMjE2
LDcgKzIxNiw3IEBAIHZvaWQgV01MQ2FyZEVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXQKICAg
ICBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gb3JkZXJlZEF0dHIpCiAgICAgICAgIG1faXNPcmRl
cmVkID0gKGF0dHItPnZhbHVlKCkgPT0gInRydWUiKTsKICAgICBlbHNlIHsKLSAgICAgICAgV01M
RXZlbnRIYW5kbGluZ0VsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpOworICAgICAg
ICBXTUxFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKTsKICAgICAgICAgcmV0dXJu
OwogICAgIH0KIApAQCAtMjMyLDcgKzIzMiw3IEBAIHZvaWQgV01MQ2FyZEVsZW1lbnQ6OnBhcnNl
TWFwcGVkQXR0cmlidXQKIAogdm9pZCBXTUxDYXJkRWxlbWVudDo6aW5zZXJ0ZWRJbnRvRG9jdW1l
bnQoKQogewotICAgIFdNTEV2ZW50SGFuZGxpbmdFbGVtZW50OjppbnNlcnRlZEludG9Eb2N1bWVu
dCgpOworICAgIFdNTEVsZW1lbnQ6Omluc2VydGVkSW50b0RvY3VtZW50KCk7CiAKICAgICAvLyBU
aGUgZmlyc3QgY2FyZCBpbnNlcnRlZCBpbnRvIGEgZG9jdW1lbnQsIGlzIHZpc2libGUgYnkgZGVm
YXVsdC4KICAgICBpZiAoIW1faXNWaXNpYmxlKSB7CkluZGV4OiB3bWwvV01MQ2FyZEVsZW1lbnQu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSB3bWwvV01MQ2FyZEVsZW1lbnQuaAkocmV2aXNpb24gNDAxNDkpCisr
KyB3bWwvV01MQ2FyZEVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDggVG9yY2ggTW9iaWxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4gKGh0dHA6Ly93d3cudG9yY2htb2JpbGUuY29tLykKKyAqIENvcHlyaWdodCAoQykgMjAw
OCwgMjAwOSBUb3JjaCBNb2JpbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLiAoaHR0cDovL3d3
dy50b3JjaG1vYmlsZS5jb20vKQogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0zMSw3ICszMSw3IEBA
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNzIFdNTFRlbXBsYXRlRWxlbWVudDsKIGNsYXNzIFdN
TFRpbWVyRWxlbWVudDsKIAotY2xhc3MgV01MQ2FyZEVsZW1lbnQgOiBwdWJsaWMgV01MRXZlbnRI
YW5kbGluZ0VsZW1lbnQgeworY2xhc3MgV01MQ2FyZEVsZW1lbnQgOiBwdWJsaWMgV01MRWxlbWVu
dCwgcHVibGljIFdNTEV2ZW50SGFuZGxpbmdFbGVtZW50IHsKIHB1YmxpYzoKICAgICBXTUxDYXJk
RWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiwgRG9jdW1lbnQqKTsKICAgICB2aXJ0dWFsIH5X
TUxDYXJkRWxlbWVudCgpOwpJbmRleDogd21sL1dNTERvRWxlbWVudC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gd21sL1dNTERvRWxlbWVudC5jcHAJKHJldmlzaW9uIDQwMTQ5KQorKysgd21sL1dNTERvRWxl
bWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKioKLSAqIENvcHlyaWdo
dCAoQykgMjAwOCBUb3JjaCBNb2JpbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLiAoaHR0cDov
L3d3dy50b3JjaG1vYmlsZS5jb20vKQorICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDA5IFRvcmNo
IE1vYmlsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIChodHRwOi8vd3d3LnRvcmNobW9iaWxl
LmNvbS8pCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk
aXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTExOSwxMSArMTE5LDggQEAgdm9pZCBXTUxE
b0VsZW1lbnQ6Omluc2VydGVkSW50b0RvY3VtZW50KAogICAgIGlmICghcGFyZW50IHx8ICFwYXJl
bnQtPmlzV01MRWxlbWVudCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBXTUxFbGVtZW50KiBw
YXJlbnRFbGVtZW50ID0gc3RhdGljX2Nhc3Q8V01MRWxlbWVudCo+KHBhcmVudCk7Ci0gICAgaWYg
KCFwYXJlbnRFbGVtZW50LT5pc1dNTEV2ZW50SGFuZGxpbmdFbGVtZW50KCkpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIHN0YXRpY19jYXN0PFdNTEV2ZW50SGFuZGxpbmdFbGVtZW50Kj4ocGFyZW50
RWxlbWVudCktPnJlZ2lzdGVyRG9FbGVtZW50KHRoaXMpOworICAgIGlmIChXTUxFdmVudEhhbmRs
aW5nRWxlbWVudCogZXZlbnRIYW5kbGluZ0VsZW1lbnQgPSB0b1dNTEV2ZW50SGFuZGxpbmdFbGVt
ZW50KHN0YXRpY19jYXN0PFdNTEVsZW1lbnQqPihwYXJlbnQpKSkKKyAgICAgICAgZXZlbnRIYW5k
bGluZ0VsZW1lbnQtPnJlZ2lzdGVyRG9FbGVtZW50KHRoaXMsIGRvY3VtZW50KCkpOwogfQogCiBS
ZW5kZXJPYmplY3QqIFdNTERvRWxlbWVudDo6Y3JlYXRlUmVuZGVyZXIoUmVuZGVyQXJlbmEqIGFy
ZW5hLCBSZW5kZXJTdHlsZSogc3R5bGUpCkluZGV4OiB3bWwvV01MRWxlbWVudC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIHdtbC9XTUxFbGVtZW50LmgJKHJldmlzaW9uIDQwMTQ5KQorKysgd21sL1dNTEVsZW1l
bnQuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMDggVG9yY2ggTW9iaWxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gKGh0dHA6Ly93d3cu
dG9yY2htb2JpbGUuY29tLykKKyAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSBUb3JjaCBNb2Jp
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLiAoaHR0cDovL3d3dy50b3JjaG1vYmlsZS5jb20v
KQogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0zMiw3ICszMiw2IEBAIHB1YmxpYzoKICAgICBXTUxF
bGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50Kik7CiAKICAgICB2
aXJ0dWFsIGJvb2wgaXNXTUxFbGVtZW50KCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQotICAgIHZp
cnR1YWwgYm9vbCBpc1dNTEV2ZW50SGFuZGxpbmdFbGVtZW50KCkgY29uc3QgeyByZXR1cm4gZmFs
c2U7IH0KICAgICB2aXJ0dWFsIGJvb2wgaXNXTUxUYXNrRWxlbWVudCgpIGNvbnN0IHsgcmV0dXJu
IGZhbHNlOyB9CiAKICAgICB2aXJ0dWFsIGJvb2wgbWFwVG9FbnRyeShjb25zdCBRdWFsaWZpZWRO
YW1lJiBhdHRyTmFtZSwgTWFwcGVkQXR0cmlidXRlRW50cnkmIHJlc3VsdCkgY29uc3Q7CkluZGV4
OiB3bWwvV01MRXZlbnRIYW5kbGluZ0VsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHdtbC9XTUxF
dmVudEhhbmRsaW5nRWxlbWVudC5jcHAJKHJldmlzaW9uIDQwMTQ5KQorKysgd21sL1dNTEV2ZW50
SGFuZGxpbmdFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qKgot
ICogQ29weXJpZ2h0IChDKSAyMDA4IFRvcmNoIE1vYmlsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuIChodHRwOi8vd3d3LnRvcmNobW9iaWxlLmNvbS8pCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgs
IDIwMDkgVG9yY2ggTW9iaWxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gKGh0dHA6Ly93d3cu
dG9yY2htb2JpbGUuY29tLykKICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMjMsMTcgKzIzLDE5IEBA
CiAjaWYgRU5BQkxFKFdNTCkKICNpbmNsdWRlICJXTUxFdmVudEhhbmRsaW5nRWxlbWVudC5oIgog
CisjaW5jbHVkZSAiV01MQ2FyZEVsZW1lbnQuaCIKICNpbmNsdWRlICJXTUxEb0VsZW1lbnQuaCIK
ICNpbmNsdWRlICJXTUxJbnRyaW5zaWNFdmVudEhhbmRsZXIuaCIKKyNpbmNsdWRlICJXTUxPcHRp
b25FbGVtZW50LmgiCiAjaW5jbHVkZSAiV01MVGFza0VsZW1lbnQuaCIKKyNpbmNsdWRlICJXTUxU
ZW1wbGF0ZUVsZW1lbnQuaCIKICNpbmNsdWRlICJXTUxOYW1lcy5oIgogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKIHVzaW5nIG5hbWVzcGFjZSBXTUxOYW1lczsKIAotV01MRXZlbnRIYW5kbGluZ0Vs
ZW1lbnQ6OldNTEV2ZW50SGFuZGxpbmdFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05h
bWUsIERvY3VtZW50KiBkb2MpCi0gICAgOiBXTUxFbGVtZW50KHRhZ05hbWUsIGRvYykKK1dNTEV2
ZW50SGFuZGxpbmdFbGVtZW50OjpXTUxFdmVudEhhbmRsaW5nRWxlbWVudCgpCiB7CiB9CiAKQEAg
LTQ3LDE0ICs0OSwxNCBAQCB2b2lkIFdNTEV2ZW50SGFuZGxpbmdFbGVtZW50OjpjcmVhdGVFdmVu
CiAgICAgICAgIG1fZXZlbnRIYW5kbGVyLnNldChuZXcgV01MSW50cmluc2ljRXZlbnRIYW5kbGVy
KTsKIH0KIAotdm9pZCBXTUxFdmVudEhhbmRsaW5nRWxlbWVudDo6cmVnaXN0ZXJEb0VsZW1lbnQo
V01MRG9FbGVtZW50KiBkb0VsZW1lbnQpCit2b2lkIFdNTEV2ZW50SGFuZGxpbmdFbGVtZW50Ojpy
ZWdpc3RlckRvRWxlbWVudChXTUxEb0VsZW1lbnQqIGRvRWxlbWVudCwgRG9jdW1lbnQqIGRvY3Vt
ZW50KQogewogICAgIFZlY3RvcjxXTUxEb0VsZW1lbnQqPjo6aXRlcmF0b3IgaXQgPSBtX2RvRWxl
bWVudHMuYmVnaW4oKTsKICAgICBWZWN0b3I8V01MRG9FbGVtZW50Kj46Oml0ZXJhdG9yIGVuZCA9
IG1fZG9FbGVtZW50cy5lbmQoKTsKIAogICAgIGZvciAoOyBpdCAhPSBlbmQ7ICsraXQpIHsKICAg
ICAgICAgaWYgKCgqaXQpLT5uYW1lKCkgPT0gZG9FbGVtZW50LT5uYW1lKCkpIHsKLSAgICAgICAg
ICAgIHJlcG9ydFdNTEVycm9yKGRvY3VtZW50KCksIFdNTEVycm9yRHVwbGljYXRlZERvRWxlbWVu
dCk7CisgICAgICAgICAgICByZXBvcnRXTUxFcnJvcihkb2N1bWVudCwgV01MRXJyb3JEdXBsaWNh
dGVkRG9FbGVtZW50KTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgIH0KQEAg
LTYzLDYgKzY1LDIxIEBAIHZvaWQgV01MRXZlbnRIYW5kbGluZ0VsZW1lbnQ6OnJlZ2lzdGVyRG8K
ICAgICBkb0VsZW1lbnQtPnNldEFjdGl2ZSh0cnVlKTsKIH0KIAorV01MRXZlbnRIYW5kbGluZ0Vs
ZW1lbnQqIHRvV01MRXZlbnRIYW5kbGluZ0VsZW1lbnQoV01MRWxlbWVudCogZWxlbWVudCkKK3sK
KyAgICBpZiAoIWVsZW1lbnQtPmlzV01MRWxlbWVudCgpKQorICAgICAgICByZXR1cm4gMDsKKwor
ICAgIGlmIChlbGVtZW50LT5oYXNUYWdOYW1lKGNhcmRUYWcpKQorICAgICAgICByZXR1cm4gc3Rh
dGljX2Nhc3Q8V01MQ2FyZEVsZW1lbnQqPihlbGVtZW50KTsKKyAgICBlbHNlIGlmIChlbGVtZW50
LT5oYXNUYWdOYW1lKG9wdGlvblRhZykpCisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxXTUxP
cHRpb25FbGVtZW50Kj4oZWxlbWVudCk7CisgICAgZWxzZSBpZiAoZWxlbWVudC0+aGFzVGFnTmFt
ZSh0ZW1wbGF0ZVRhZykpCisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxXTUxUZW1wbGF0ZUVs
ZW1lbnQqPihlbGVtZW50KTsKKworICAgIHJldHVybiAwOworfQorCiB9CiAKICNlbmRpZgpJbmRl
eDogd21sL1dNTEV2ZW50SGFuZGxpbmdFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gd21sL1dNTEV2
ZW50SGFuZGxpbmdFbGVtZW50LmgJKHJldmlzaW9uIDQwMTQ5KQorKysgd21sL1dNTEV2ZW50SGFu
ZGxpbmdFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKioKLSAqIENv
cHlyaWdodCAoQykgMjAwOCBUb3JjaCBNb2JpbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLiAo
aHR0cDovL3d3dy50b3JjaG1vYmlsZS5jb20vKQorICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDA5
IFRvcmNoIE1vYmlsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIChodHRwOi8vd3d3LnRvcmNo
bW9iaWxlLmNvbS8pCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTIyLDcgKzIyLDYgQEAKICNkZWZp
bmUgV01MRXZlbnRIYW5kbGluZ0VsZW1lbnRfaAogCiAjaWYgRU5BQkxFKFdNTCkKLSNpbmNsdWRl
ICJXTUxFbGVtZW50LmgiCiAjaW5jbHVkZSAiV01MSW50cmluc2ljRXZlbnRIYW5kbGVyLmgiCiAK
ICNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CkBAIC0zMCwyNiArMjksMjcgQEAKIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCitjbGFzcyBXTUxFbGVtZW50OwogY2xhc3MgV01MRG9FbGVtZW50OwogCi1j
bGFzcyBXTUxFdmVudEhhbmRsaW5nRWxlbWVudCA6IHB1YmxpYyBXTUxFbGVtZW50IHsKK2NsYXNz
IFdNTEV2ZW50SGFuZGxpbmdFbGVtZW50IHsKIHB1YmxpYzoKLSAgICBXTUxFdmVudEhhbmRsaW5n
RWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudCopOwotICAgIHZp
cnR1YWwgfldNTEV2ZW50SGFuZGxpbmdFbGVtZW50KCk7Ci0KLSAgICB2aXJ0dWFsIGJvb2wgaXNX
TUxFdmVudEhhbmRsaW5nRWxlbWVudCgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KKyAgICBXTUxF
dmVudEhhbmRsaW5nRWxlbWVudCgpOworICAgIH5XTUxFdmVudEhhbmRsaW5nRWxlbWVudCgpOwog
CiAgICAgV01MSW50cmluc2ljRXZlbnRIYW5kbGVyKiBldmVudEhhbmRsZXIoKSBjb25zdCB7IHJl
dHVybiBtX2V2ZW50SGFuZGxlci5nZXQoKTsgfQogICAgIHZvaWQgY3JlYXRlRXZlbnRIYW5kbGVy
SWZOZWVkZWQoKTsKIAogICAgIFZlY3RvcjxXTUxEb0VsZW1lbnQqPiYgZG9FbGVtZW50cygpIHsg
cmV0dXJuIG1fZG9FbGVtZW50czsgfQotICAgIHZvaWQgcmVnaXN0ZXJEb0VsZW1lbnQoV01MRG9F
bGVtZW50Kik7CisgICAgdm9pZCByZWdpc3RlckRvRWxlbWVudChXTUxEb0VsZW1lbnQqLCBEb2N1
bWVudCopOwogCiBwcml2YXRlOgogICAgIE93blB0cjxXTUxJbnRyaW5zaWNFdmVudEhhbmRsZXI+
IG1fZXZlbnRIYW5kbGVyOwogICAgIFZlY3RvcjxXTUxEb0VsZW1lbnQqPiBtX2RvRWxlbWVudHM7
CiB9OwogCitXTUxFdmVudEhhbmRsaW5nRWxlbWVudCogdG9XTUxFdmVudEhhbmRsaW5nRWxlbWVu
dChXTUxFbGVtZW50Kik7CisKIH0KIAogI2VuZGlmCkluZGV4OiB3bWwvV01MRm9ybUNvbnRyb2xF
bGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSB3bWwvV01MRm9ybUNvbnRyb2xFbGVtZW50LmNwcAko
cmV2aXNpb24gMCkKKysrIHdtbC9XTUxGb3JtQ29udHJvbEVsZW1lbnQuY3BwCShyZXZpc2lvbiAw
KQpAQCAtMCwwICsxLDUxIEBACisvKioKKyAqIENvcHlyaWdodCAoQykgMjAwOSBUb3JjaCBNb2Jp
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLiAoaHR0cDovL3d3dy50b3JjaG1vYmlsZS5jb20v
KQorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5z
ZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxp
YnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwK
KyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdh
cnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
IGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29w
eSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0
aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUg
dG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0
cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqCisg
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgRU5BQkxFKFdNTCkKKyNpbmNsdWRlICJX
TUxGb3JtQ29udHJvbEVsZW1lbnQuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisvLyBXTUxG
b3JtQ29udHJvbEVsZW1lbnQKK1dNTEZvcm1Db250cm9sRWxlbWVudDo6V01MRm9ybUNvbnRyb2xF
bGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50KiBkb2N1bWVudCkK
KyAgICA6IFdNTEVsZW1lbnQodGFnTmFtZSwgZG9jdW1lbnQpCisgICAgLCBtX3ZhbHVlTWF0Y2hl
c1JlbmRlcmVyKGZhbHNlKQoreworfQorCitXTUxGb3JtQ29udHJvbEVsZW1lbnQ6On5XTUxGb3Jt
Q29udHJvbEVsZW1lbnQoKQoreworfQorCisvLyBXTUxGb3JtQ29udHJvbEVsZW1lbnRXaXRoU3Rh
dGUKK1dNTEZvcm1Db250cm9sRWxlbWVudFdpdGhTdGF0ZTo6V01MRm9ybUNvbnRyb2xFbGVtZW50
V2l0aFN0YXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50KiBkb2N1bWVu
dCkKKyAgICA6IFdNTEZvcm1Db250cm9sRWxlbWVudCh0YWdOYW1lLCBkb2N1bWVudCkKK3sKK30K
KworV01MRm9ybUNvbnRyb2xFbGVtZW50V2l0aFN0YXRlOjp+V01MRm9ybUNvbnRyb2xFbGVtZW50
V2l0aFN0YXRlKCkKK3sKK30KKworfQorCisjZW5kaWYKSW5kZXg6IHdtbC9XTUxGb3JtQ29udHJv
bEVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSB3bWwvV01MRm9ybUNvbnRyb2xFbGVtZW50LmgJKHJl
dmlzaW9uIDApCisrKyB3bWwvV01MRm9ybUNvbnRyb2xFbGVtZW50LmgJKHJldmlzaW9uIDApCkBA
IC0wLDAgKzEsNTkgQEAKKy8qKgorICogQ29weXJpZ2h0IChDKSAyMDA5IFRvcmNoIE1vYmlsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIChodHRwOi8vd3d3LnRvcmNobW9iaWxlLmNvbS8pCisg
KgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBv
ciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFy
eSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICog
YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu
dHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9y
IG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRo
aXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwor
ICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0
LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICoKKyAqLwor
CisjaWZuZGVmIFdNTEZvcm1Db250cm9sRWxlbWVudF9oCisjZGVmaW5lIFdNTEZvcm1Db250cm9s
RWxlbWVudF9oCisKKyNpZiBFTkFCTEUoV01MKQorI2luY2x1ZGUgIkZvcm1Db250cm9sRWxlbWVu
dFdpdGhTdGF0ZS5oIgorI2luY2x1ZGUgIkZvcm1Db250cm9sRWxlbWVudC5oIgorI2luY2x1ZGUg
IldNTEVsZW1lbnQuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBXTUxGb3JtQ29u
dHJvbEVsZW1lbnQgOiBwdWJsaWMgV01MRWxlbWVudCwgcHVibGljIEZvcm1Db250cm9sRWxlbWVu
dCB7CitwdWJsaWM6CisgICAgV01MRm9ybUNvbnRyb2xFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5h
bWUmIHRhZ05hbWUsIERvY3VtZW50KiBkb2N1bWVudCk7CisgICAgdmlydHVhbCB+V01MRm9ybUNv
bnRyb2xFbGVtZW50KCk7CisKKyAgICB2aXJ0dWFsIGJvb2wgaXNGb3JtQ29udHJvbEVsZW1lbnQo
KSBjb25zdCB7IHJldHVybiB0cnVlOyB9CisKKyAgICB2aXJ0dWFsIGJvb2wgdmFsdWVNYXRjaGVz
UmVuZGVyZXIoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlTWF0Y2hlc1JlbmRlcmVyOyB9CisgICAg
dmlydHVhbCB2b2lkIHNldFZhbHVlTWF0Y2hlc1JlbmRlcmVyKGJvb2wgYiA9IHRydWUpIHsgbV92
YWx1ZU1hdGNoZXNSZW5kZXJlciA9IGI7IH0KKworICAgIHZpcnR1YWwgY29uc3QgQXRvbWljU3Ry
aW5nJiBuYW1lKCkgY29uc3QgeyByZXR1cm4gZW1wdHlBdG9tOyB9CisKK3ByaXZhdGU6CisgICAg
Ym9vbCBtX3ZhbHVlTWF0Y2hlc1JlbmRlcmVyOworfTsKKworY2xhc3MgV01MRm9ybUNvbnRyb2xF
bGVtZW50V2l0aFN0YXRlIDogcHVibGljIFdNTEZvcm1Db250cm9sRWxlbWVudCwgcHVibGljIEZv
cm1Db250cm9sRWxlbWVudFdpdGhTdGF0ZSB7CitwdWJsaWM6CisgICAgV01MRm9ybUNvbnRyb2xF
bGVtZW50V2l0aFN0YXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50Kik7
CisgICAgdmlydHVhbCB+V01MRm9ybUNvbnRyb2xFbGVtZW50V2l0aFN0YXRlKCk7CisKKyAgICB2
aXJ0dWFsIGJvb2wgaXNGb3JtQ29udHJvbEVsZW1lbnRXaXRoU3RhdGUoKSBjb25zdCB7IHJldHVy
biB0cnVlOyB9CisgICAgdmlydHVhbCBGb3JtQ29udHJvbEVsZW1lbnQqIHRvRm9ybUNvbnRyb2xF
bGVtZW50KCkgeyByZXR1cm4gdGhpczsgfQorfTsKKworfQorCisjZW5kaWYKKyNlbmRpZgpJbmRl
eDogd21sL1dNTElucHV0RWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gd21sL1dNTElucHV0RWxl
bWVudC5jcHAJKHJldmlzaW9uIDQwMTQ5KQorKysgd21sL1dNTElucHV0RWxlbWVudC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTM1LDEwICszNSw5IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIFdN
TElucHV0RWxlbWVudDo6V01MSW5wdXRFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05h
bWUsIERvY3VtZW50KiBkb2MpCi0gICAgOiBXTUxFbGVtZW50KHRhZ05hbWUsIGRvYykKKyAgICA6
IFdNTEZvcm1Db250cm9sRWxlbWVudFdpdGhTdGF0ZSh0YWdOYW1lLCBkb2MpCiAgICAgLCBtX2Rh
dGEodGhpcywgdGhpcykKICAgICAsIG1faXNQYXNzd29yZEZpZWxkKGZhbHNlKQotICAgICwgbV92
YWx1ZU1hdGNoZXNSZW5kZXJlcihmYWxzZSkKIHsKIH0KIApAQCAtMTAxLDYgKzEwMCwxOCBAQCBp
bnQgV01MSW5wdXRFbGVtZW50OjpzaXplKCkgY29uc3QKICAgICByZXR1cm4gbV9kYXRhLnNpemUo
KTsKIH0KIAorY29uc3QgQXRvbWljU3RyaW5nJiBXTUxJbnB1dEVsZW1lbnQ6OnR5cGUoKSBjb25z
dAoreworICAgIC8vIG5lZWRzIHRvIGJlIGxvd2VyY2FzZSBhY2NvcmRpbmcgdG8gRE9NIHNwZWMK
KyAgICBpZiAobV9pc1Bhc3N3b3JkRmllbGQpIHsKKyAgICAgICAgREVGSU5FX1NUQVRJQ19MT0NB
TChjb25zdCBBdG9taWNTdHJpbmcsIHBhc3N3b3JkLCAoInBhc3N3b3JkIikpOworICAgICAgICBy
ZXR1cm4gcGFzc3dvcmQ7CisgICAgfQorCisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChjb25zdCBB
dG9taWNTdHJpbmcsIHRleHQsICgidGV4dCIpKTsKKyAgICByZXR1cm4gdGV4dDsKK30KKwogY29u
c3QgQXRvbWljU3RyaW5nJiBXTUxJbnB1dEVsZW1lbnQ6Om5hbWUoKSBjb25zdAogewogICAgIHJl
dHVybiBtX2RhdGEubmFtZSgpOwpJbmRleDogd21sL1dNTElucHV0RWxlbWVudC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIHdtbC9XTUxJbnB1dEVsZW1lbnQuaAkocmV2aXNpb24gNDAxNDkpCisrKyB3bWwvV01M
SW5wdXRFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTIyLDIyICsyMiwxOCBAQAogI2RlZmlu
ZSBXTUxJbnB1dEVsZW1lbnRfaAogCiAjaWYgRU5BQkxFKFdNTCkKLSNpbmNsdWRlICJGb3JtQ29u
dHJvbEVsZW1lbnQuaCIKKyNpbmNsdWRlICJXTUxGb3JtQ29udHJvbEVsZW1lbnQuaCIKICNpbmNs
dWRlICJJbnB1dEVsZW1lbnQuaCIKLSNpbmNsdWRlICJXTUxFbGVtZW50LmgiCiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAogY2xhc3MgRm9ybURhdGFMaXN0OwogCi1jbGFzcyBXTUxJbnB1dEVsZW1l
bnQgOiBwdWJsaWMgV01MRWxlbWVudCwgcHVibGljIEZvcm1Db250cm9sRWxlbWVudCwgcHVibGlj
IElucHV0RWxlbWVudCB7CitjbGFzcyBXTUxJbnB1dEVsZW1lbnQgOiBwdWJsaWMgV01MRm9ybUNv
bnRyb2xFbGVtZW50V2l0aFN0YXRlLCBwdWJsaWMgSW5wdXRFbGVtZW50IHsKIHB1YmxpYzoKICAg
ICBXTUxJbnB1dEVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQq
KTsKICAgICB2aXJ0dWFsIH5XTUxJbnB1dEVsZW1lbnQoKTsKIAotICAgIHZpcnR1YWwgYm9vbCB2
YWx1ZU1hdGNoZXNSZW5kZXJlcigpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWVNYXRjaGVzUmVuZGVy
ZXI7IH0KLSAgICB2aXJ0dWFsIHZvaWQgc2V0VmFsdWVNYXRjaGVzUmVuZGVyZXIoYm9vbCBiID0g
dHJ1ZSkgeyBtX3ZhbHVlTWF0Y2hlc1JlbmRlcmVyID0gYjsgfQotCiAgICAgdmlydHVhbCBib29s
IGlzS2V5Ym9hcmRGb2N1c2FibGUoS2V5Ym9hcmRFdmVudCopIGNvbnN0OwogICAgIHZpcnR1YWwg
Ym9vbCBpc01vdXNlRm9jdXNhYmxlKCkgY29uc3Q7CiAgICAgdmlydHVhbCB2b2lkIGRpc3BhdGNo
Rm9jdXNFdmVudCgpOwpAQCAtNTcsNiArNTMsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBib29s
IHNlYXJjaEV2ZW50c1Nob3VsZEJlRGlzcGF0Y2hlZCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9
CiAKICAgICB2aXJ0dWFsIGludCBzaXplKCkgY29uc3Q7CisgICAgdmlydHVhbCBjb25zdCBBdG9t
aWNTdHJpbmcmIHR5cGUoKSBjb25zdDsKICAgICB2aXJ0dWFsIGNvbnN0IEF0b21pY1N0cmluZyYg
bmFtZSgpIGNvbnN0OwogICAgIHZpcnR1YWwgU3RyaW5nIHZhbHVlKCkgY29uc3Q7CiAgICAgdmly
dHVhbCB2b2lkIHNldFZhbHVlKGNvbnN0IFN0cmluZyYpOwpAQCAtOTIsNyArODksNiBAQCBwdWJs
aWM6CiBwcml2YXRlOgogICAgIElucHV0RWxlbWVudERhdGEgbV9kYXRhOwogICAgIGJvb2wgbV9p
c1Bhc3N3b3JkRmllbGQ7Ci0gICAgYm9vbCBtX3ZhbHVlTWF0Y2hlc1JlbmRlcmVyOwogfTsKIAog
fQpJbmRleDogd21sL1dNTE9uRXZlbnRFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSB3bWwvV01M
T25FdmVudEVsZW1lbnQuY3BwCShyZXZpc2lvbiA0MDE0OSkKKysrIHdtbC9XTUxPbkV2ZW50RWxl
bWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKioKLSAqIENvcHlyaWdo
dCAoQykgMjAwOCBUb3JjaCBNb2JpbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLiAoaHR0cDov
L3d3dy50b3JjaG1vYmlsZS5jb20vKQorICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDA5IFRvcmNo
IE1vYmlsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIChodHRwOi8vd3d3LnRvcmNobW9iaWxl
LmNvbS8pCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk
aXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTcxLDExICs3MSwxMCBAQCB2b2lkIFdNTE9u
RXZlbnRFbGVtZW50OjpyZWdpc3RlclRhc2soV01MCiAgICAgaWYgKCFwYXJlbnQgfHwgIXBhcmVu
dC0+aXNXTUxFbGVtZW50KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIFdNTEVsZW1lbnQqIHBh
cmVudEVsZW1lbnQgPSBzdGF0aWNfY2FzdDxXTUxFbGVtZW50Kj4ocGFyZW50KTsKLSAgICBpZiAo
IXBhcmVudEVsZW1lbnQtPmlzV01MRXZlbnRIYW5kbGluZ0VsZW1lbnQoKSkKKyAgICBXTUxFdmVu
dEhhbmRsaW5nRWxlbWVudCogZXZlbnRIYW5kbGluZ0VsZW1lbnQgPSB0b1dNTEV2ZW50SGFuZGxp
bmdFbGVtZW50KHN0YXRpY19jYXN0PFdNTEVsZW1lbnQqPihwYXJlbnQpKTsKKyAgICBpZiAoIWV2
ZW50SGFuZGxpbmdFbGVtZW50KQogICAgICAgICByZXR1cm47CiAKLSAgICBXTUxFdmVudEhhbmRs
aW5nRWxlbWVudCogZXZlbnRIYW5kbGluZ0VsZW1lbnQgPSBzdGF0aWNfY2FzdDxXTUxFdmVudEhh
bmRsaW5nRWxlbWVudCo+KHBhcmVudEVsZW1lbnQpOwogICAgIGV2ZW50SGFuZGxpbmdFbGVtZW50
LT5jcmVhdGVFdmVudEhhbmRsZXJJZk5lZWRlZCgpOwogCiAgICAgUmVmUHRyPFdNTEludHJpbnNp
Y0V2ZW50PiBldmVudCA9IFdNTEludHJpbnNpY0V2ZW50OjpjcmVhdGVXaXRoVGFzayh0YXNrKTsK
SW5kZXg6IHdtbC9XTUxPcHRHcm91cEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHdtbC9XTUxP
cHRHcm91cEVsZW1lbnQuY3BwCShyZXZpc2lvbiA0MDE0OSkKKysrIHdtbC9XTUxPcHRHcm91cEVs
ZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw4ICszMyw3IEBAIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIHVzaW5nIG5hbWVzcGFjZSBXTUxOYW1lczsKIAogV01MT3B0R3JvdXBFbGVtZW50OjpX
TUxPcHRHcm91cEVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQq
IGRvYykKLSAgICA6IFdNTEVsZW1lbnQodGFnTmFtZSwgZG9jKQotICAgICwgbV92YWx1ZU1hdGNo
ZXNSZW5kZXJlcihmYWxzZSkKKyAgICA6IFdNTEZvcm1Db250cm9sRWxlbWVudCh0YWdOYW1lLCBk
b2MpCiB7CiB9CiAKQEAgLTQyLDYgKzQxLDEyIEBAIFdNTE9wdEdyb3VwRWxlbWVudDo6fldNTE9w
dEdyb3VwRWxlbWVudCgKIHsKIH0KIAorY29uc3QgQXRvbWljU3RyaW5nJiBXTUxPcHRHcm91cEVs
ZW1lbnQ6OnR5cGUoKSBjb25zdAoreworICAgIERFRklORV9TVEFUSUNfTE9DQUwoY29uc3QgQXRv
bWljU3RyaW5nLCBvcHRncm91cCwgKCJvcHRncm91cCIpKTsKKyAgICByZXR1cm4gb3B0Z3JvdXA7
Cit9CisKIGJvb2wgV01MT3B0R3JvdXBFbGVtZW50OjppbnNlcnRCZWZvcmUoUGFzc1JlZlB0cjxO
b2RlPiBuZXdDaGlsZCwgTm9kZSogcmVmQ2hpbGQsIEV4Y2VwdGlvbkNvZGUmIGVjLCBib29sIHNo
b3VsZExhenlBdHRhY2gpCiB7CiAgICAgYm9vbCByZXN1bHQgPSBXTUxFbGVtZW50OjppbnNlcnRC
ZWZvcmUobmV3Q2hpbGQsIHJlZkNoaWxkLCBlYywgc2hvdWxkTGF6eUF0dGFjaCk7CkluZGV4OiB3
bWwvV01MT3B0R3JvdXBFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gd21sL1dNTE9wdEdyb3VwRWxl
bWVudC5oCShyZXZpc2lvbiA0MDE0OSkKKysrIHdtbC9XTUxPcHRHcm91cEVsZW1lbnQuaAkod29y
a2luZyBjb3B5KQpAQCAtMjIsMjEgKzIyLDE5IEBACiAjZGVmaW5lIFdNTE9wdEdyb3VwRWxlbWVu
dF9oCiAKICNpZiBFTkFCTEUoV01MKQotI2luY2x1ZGUgIkZvcm1Db250cm9sRWxlbWVudC5oIgor
I2luY2x1ZGUgIldNTEZvcm1Db250cm9sRWxlbWVudC5oIgogI2luY2x1ZGUgIk9wdGlvbkdyb3Vw
RWxlbWVudC5oIgotI2luY2x1ZGUgIldNTEVsZW1lbnQuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCi1jbGFzcyBXTUxPcHRHcm91cEVsZW1lbnQgOiBwdWJsaWMgV01MRWxlbWVudCwgcHVibGlj
IEZvcm1Db250cm9sRWxlbWVudCwgcHVibGljIE9wdGlvbkdyb3VwRWxlbWVudCB7CitjbGFzcyBX
TUxPcHRHcm91cEVsZW1lbnQgOiBwdWJsaWMgV01MRm9ybUNvbnRyb2xFbGVtZW50LCBwdWJsaWMg
T3B0aW9uR3JvdXBFbGVtZW50IHsKIHB1YmxpYzoKICAgICBXTUxPcHRHcm91cEVsZW1lbnQoY29u
c3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQqKTsKICAgICB2aXJ0dWFsIH5XTUxP
cHRHcm91cEVsZW1lbnQoKTsKIAogICAgIFN0cmluZyB0aXRsZSgpIGNvbnN0IHsgcmV0dXJuIG1f
dGl0bGU7IH0KIAotICAgIHZpcnR1YWwgYm9vbCB2YWx1ZU1hdGNoZXNSZW5kZXJlcigpIGNvbnN0
IHsgcmV0dXJuIG1fdmFsdWVNYXRjaGVzUmVuZGVyZXI7IH0KLSAgICB2aXJ0dWFsIHZvaWQgc2V0
VmFsdWVNYXRjaGVzUmVuZGVyZXIoYm9vbCBiID0gdHJ1ZSkgeyBtX3ZhbHVlTWF0Y2hlc1JlbmRl
cmVyID0gYjsgfQorICAgIHZpcnR1YWwgY29uc3QgQXRvbWljU3RyaW5nJiB0eXBlKCkgY29uc3Q7
CiAKICAgICB2aXJ0dWFsIGJvb2wgcmVuZGVyZXJJc05lZWRlZChSZW5kZXJTdHlsZSopIHsgcmV0
dXJuIGZhbHNlOyB9CiAKQEAgLTYxLDcgKzU5LDYgQEAgcHJpdmF0ZToKICAgICB2b2lkIHJlY2Fs
Y1NlbGVjdE9wdGlvbnMoKTsKIAogcHJpdmF0ZToKLSAgICBib29sIG1fdmFsdWVNYXRjaGVzUmVu
ZGVyZXI7CiAgICAgU3RyaW5nIG1fdGl0bGU7CiAgICAgUmVmUHRyPFJlbmRlclN0eWxlPiBtX3N0
eWxlOwogfTsKSW5kZXg6IHdtbC9XTUxPcHRpb25FbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSB3
bWwvV01MT3B0aW9uRWxlbWVudC5jcHAJKHJldmlzaW9uIDQwMTQ5KQorKysgd21sL1dNTE9wdGlv
bkVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw5ICszMiw4IEBAIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIHVzaW5nIG5hbWVzcGFjZSBXTUxOYW1lczsKIAogV01MT3B0aW9uRWxlbWVudDo6
V01MT3B0aW9uRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudCog
ZG9jKQotICAgIDogV01MRXZlbnRIYW5kbGluZ0VsZW1lbnQodGFnTmFtZSwgZG9jKQorICAgIDog
V01MRm9ybUNvbnRyb2xFbGVtZW50KHRhZ05hbWUsIGRvYykKICAgICAsIG1fZGF0YSh0aGlzKQot
ICAgICwgbV92YWx1ZU1hdGNoZXNSZW5kZXJlcihmYWxzZSkKIHsKIH0KIApAQCAtNDIsNiArNDEs
MTIgQEAgV01MT3B0aW9uRWxlbWVudDo6fldNTE9wdGlvbkVsZW1lbnQoKQogewogfQogCitjb25z
dCBBdG9taWNTdHJpbmcmIFdNTE9wdGlvbkVsZW1lbnQ6OnR5cGUoKSBjb25zdAoreworICAgIERF
RklORV9TVEFUSUNfTE9DQUwoY29uc3QgQXRvbWljU3RyaW5nLCBvcHRpb24sICgib3B0aW9uIikp
OworICAgIHJldHVybiBvcHRpb247Cit9CisKIC8vIEZJWE1FOiBBY3RpdmF0ZSBvbmNlIFdNTFNl
bGVjdEVsZW1lbnQgaXMgYXZhaWxhYmxlIAogI2lmIDAKIHN0YXRpYyBpbmxpbmUgV01MRWxlbWVu
dCogb3duZXJTZWxlY3RFbGVtZW50KCkKSW5kZXg6IHdtbC9XTUxPcHRpb25FbGVtZW50LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gd21sL1dNTE9wdGlvbkVsZW1lbnQuaAkocmV2aXNpb24gNDAxNDkpCisrKyB3
bWwvV01MT3B0aW9uRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMiwxOSArMjIsMTggQEAK
ICNkZWZpbmUgV01MT3B0aW9uRWxlbWVudF9oCiAKICNpZiBFTkFCTEUoV01MKQotI2luY2x1ZGUg
IkZvcm1Db250cm9sRWxlbWVudC5oIgogI2luY2x1ZGUgIk9wdGlvbkVsZW1lbnQuaCIKKyNpbmNs
dWRlICJXTUxGb3JtQ29udHJvbEVsZW1lbnQuaCIKICNpbmNsdWRlICJXTUxFdmVudEhhbmRsaW5n
RWxlbWVudC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIFdNTE9wdGlvbkVsZW1l
bnQgOiBwdWJsaWMgV01MRXZlbnRIYW5kbGluZ0VsZW1lbnQsIHB1YmxpYyBGb3JtQ29udHJvbEVs
ZW1lbnQsIHB1YmxpYyBPcHRpb25FbGVtZW50IHsKK2NsYXNzIFdNTE9wdGlvbkVsZW1lbnQgOiBw
dWJsaWMgV01MRm9ybUNvbnRyb2xFbGVtZW50LCBwdWJsaWMgV01MRXZlbnRIYW5kbGluZ0VsZW1l
bnQsIHB1YmxpYyBPcHRpb25FbGVtZW50IHsKIHB1YmxpYzoKICAgICBXTUxPcHRpb25FbGVtZW50
KGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50Kik7CiAgICAgdmlydHVhbCB+
V01MT3B0aW9uRWxlbWVudCgpOwogCi0gICAgdmlydHVhbCBib29sIHZhbHVlTWF0Y2hlc1JlbmRl
cmVyKCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZU1hdGNoZXNSZW5kZXJlcjsgfQotICAgIHZpcnR1
YWwgdm9pZCBzZXRWYWx1ZU1hdGNoZXNSZW5kZXJlcihib29sIGIgPSB0cnVlKSB7IG1fdmFsdWVN
YXRjaGVzUmVuZGVyZXIgPSBiOyB9CisgICAgdmlydHVhbCBjb25zdCBBdG9taWNTdHJpbmcmIHR5
cGUoKSBjb25zdDsKIAogICAgIHZpcnR1YWwgYm9vbCByZW5kZXJlcklzTmVlZGVkKFJlbmRlclN0
eWxlKikgeyByZXR1cm4gZmFsc2U7IH0KIApAQCAtNjAsNyArNTksNiBAQCBwcml2YXRlOgogCiBw
cml2YXRlOgogICAgIE9wdGlvbkVsZW1lbnREYXRhIG1fZGF0YTsKLSAgICBib29sIG1fdmFsdWVN
YXRjaGVzUmVuZGVyZXI7CiAgICAgUmVmUHRyPFJlbmRlclN0eWxlPiBtX3N0eWxlOwogfTsKIApJ
bmRleDogd21sL1dNTFRlbXBsYXRlRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gd21sL1dNTFRl
bXBsYXRlRWxlbWVudC5jcHAJKHJldmlzaW9uIDQwMTQ5KQorKysgd21sL1dNTFRlbXBsYXRlRWxl
bWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0
IChDKSAyMDA4IFRvcmNoIE1vYmlsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIChodHRwOi8v
d3d3LnRvcmNobW9iaWxlLmNvbS8pCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDkgVG9yY2gg
TW9iaWxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gKGh0dHA6Ly93d3cudG9yY2htb2JpbGUu
Y29tLykKICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMzQsNyArMzQsNyBAQCBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiB1c2luZyBuYW1lc3BhY2UgV01MTmFtZXM7CiAKIFdNTFRlbXBsYXRlRWxlbWVudDo6
V01MVGVtcGxhdGVFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50
KiBkb2MpCi0gICAgOiBXTUxFdmVudEhhbmRsaW5nRWxlbWVudCh0YWdOYW1lLCBkb2MpCisgICAg
OiBXTUxFbGVtZW50KHRhZ05hbWUsIGRvYykKIHsKIH0KIApAQCAtNTMsNyArNTMsNyBAQCB2b2lk
IFdNTFRlbXBsYXRlRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyCiAgICAgZWxzZSBpZiAoYXR0ci0+
bmFtZSgpID09IG9udGltZXJBdHRyKQogICAgICAgICBldmVudFR5cGUgPSBXTUxJbnRyaW5zaWNF
dmVudE9uVGltZXI7CiAgICAgZWxzZSB7Ci0gICAgICAgIFdNTEV2ZW50SGFuZGxpbmdFbGVtZW50
OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKTsKKyAgICAgICAgV01MRWxlbWVudDo6cGFyc2VN
YXBwZWRBdHRyaWJ1dGUoYXR0cik7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKSW5kZXg6IHdt
bC9XTUxUZW1wbGF0ZUVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSB3bWwvV01MVGVtcGxhdGVFbGVt
ZW50LmgJKHJldmlzaW9uIDQwMTQ5KQorKysgd21sL1dNTFRlbXBsYXRlRWxlbWVudC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCBUb3Jj
aCBNb2JpbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLiAoaHR0cDovL3d3dy50b3JjaG1vYmls
ZS5jb20vKQorICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDA5IFRvcmNoIE1vYmlsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuIChodHRwOi8vd3d3LnRvcmNobW9iaWxlLmNvbS8pCiAgKgogICog
VGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMKQEAgLTIyLDExICsyMiwxMiBAQAogI2RlZmluZSBXTUxUZW1wbGF0ZUVsZW1l
bnRfaAogCiAjaWYgRU5BQkxFKFdNTCkKKyNpbmNsdWRlICJXTUxFbGVtZW50LmgiCiAjaW5jbHVk
ZSAiV01MRXZlbnRIYW5kbGluZ0VsZW1lbnQuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1j
bGFzcyBXTUxUZW1wbGF0ZUVsZW1lbnQgOiBwdWJsaWMgV01MRXZlbnRIYW5kbGluZ0VsZW1lbnQg
eworY2xhc3MgV01MVGVtcGxhdGVFbGVtZW50IDogcHVibGljIFdNTEVsZW1lbnQsIHB1YmxpYyBX
TUxFdmVudEhhbmRsaW5nRWxlbWVudCB7CiBwdWJsaWM6CiAgICAgV01MVGVtcGxhdGVFbGVtZW50
KGNvbnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVudCopOwogICAgIHZpcnR1YWwgfldNTFRlbXBs
YXRlRWxlbWVudCgpOwo=
</data>
<flag name="review"
          id="12913"
          type_id="1"
          status="+"
          setter="eric"
    />
          </attachment>
      

    </bug>

</bugzilla>