<?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>12273</bug_id>
          
          <creation_ts>2007-01-14 15:49:33 -0800</creation_ts>
          <short_desc>REGRESSION: File input value invisible after removing and re-appending</short_desc>
          <delta_ts>2007-01-22 17:00:45 -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>Forms</component>
          <version>420+</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>OS X 10.4</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>HasReduction, Regression</keywords>
          <priority>P1</priority>
          <bug_severity>Major</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Jeremy Nicoll">jnicoll</reporter>
          <assigned_to name="Darin Adler">darin</assigned_to>
          <cc>ap</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>34977</commentid>
    <comment_count>0</comment_count>
    <who name="Jeremy Nicoll">jnicoll</who>
    <bug_when>2007-01-14 15:49:33 -0800</bug_when>
    <thetext>The current version of Safari does not reset the value of a file input object if it is reassigned to another form object like so:

  var f = document.getElementById(&apos;upload_file_ele&apos;);
  f.parentNode.removeChild(f);
  document.getElementById(&apos;form2&apos;).appendChild(f);

However, the latest nightly of WebKit resets the value so that the file input will read &quot;No file selected.&quot;  This will cause issues for me in the future as I am developing an AJAX script that depends on the behavior of Safari as it currently stands because it monitors the upload of each file individually, and I have to assign each file input to a seperate form object in order to do so.  There is a similar behavior which is present in the latest versions of Safari and Webkit which are not present in Firefox or Opera, in which if the cloneNode(true) method is invoked on a file input element then the value is not cloned.  This was the first way I tried to solve my before-mentioned problem.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>34974</commentid>
    <comment_count>1</comment_count>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2007-01-14 15:53:45 -0800</bug_when>
    <thetext>Jeremy, please attach a stand-alone test case of this issue to this bug.  Thanks!

</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>34941</commentid>
    <comment_count>2</comment_count>
    <who name="Jeremy Nicoll">jnicoll</who>
    <bug_when>2007-01-14 17:44:31 -0800</bug_when>
    <thetext>  Just to clarify, the desired behavior is that the value of the fine input element NOT be cleared when cloned or moved to another parent.

Scenario 1 (works in Safari, not in latest Webkit):

&lt;script type=&quot;text/javascript&quot;&gt;
	function press_this () {
		var f = document.getElementById(&apos;upload_1&apos;);
		f.parentNode.removeChild(f);
		document.getElementById(&apos;form2&apos;).appendChild(f);
	}
&lt;/script&gt;

&lt;form action=&quot;test.php&quot; method=&quot;POST&quot; enctype=&quot;multipart/form-data&quot;&gt;
	&lt;input type=&quot;file&quot; name=&quot;upload&quot; id=&quot;upload_1&quot;/&gt;
&lt;/form&gt;

&lt;input type=&quot;button&quot; onclick=&quot;press_this();&quot;/&gt;
&lt;form action=&quot;test.php&quot; method=&quot;POST&quot; id=&quot;form2&quot; enctype=&quot;multipart/form-data&quot;&gt;

&lt;/form&gt;	
---------------------------------------
If you select a file, and then press the button, the selected file is gone in the element.


Scenario 2 (works in neither):

&lt;script type=&quot;text/javascript&quot;&gt;
	function press_this () {
		var f = document.getElementById(&apos;upload_1&apos;);
		var f2 = f.cloneNode(true);
		document.getElementById(&apos;form2&apos;).appendChild(f2);
	}
&lt;/script&gt;

&lt;form action=&quot;test.php&quot; method=&quot;POST&quot; enctype=&quot;multipart/form-data&quot;&gt;
	&lt;input type=&quot;file&quot; name=&quot;upload&quot; id=&quot;upload_1&quot;/&gt;
&lt;/form&gt;

&lt;input type=&quot;button&quot; onclick=&quot;press_this();&quot;/&gt;
&lt;form action=&quot;test.php&quot; method=&quot;POST&quot; id=&quot;form2&quot; enctype=&quot;multipart/form-data&quot;&gt;

&lt;/form&gt;	
--------------------------------
   The selected value is not copied with cloneNode() in either Safari or the Webkit nightly.
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>34836</commentid>
    <comment_count>3</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2007-01-15 06:44:25 -0800</bug_when>
    <thetext>Confirming the first case as a regression (-&gt;P1).

The second case is somewhat more questionable, since IE 7 also doesn&apos;t clone the file input value. It&apos;s likely that we will need to discuss it separately, may I ask you to file a new bug for it?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>34773</commentid>
    <comment_count>4</comment_count>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2007-01-15 09:02:30 -0800</bug_when>
    <thetext>(In reply to comment #3)
&gt; The second case is somewhat more questionable, since IE 7 also doesn&apos;t clone
&gt; the file input value. It&apos;s likely that we will need to discuss it separately,
&gt; may I ask you to file a new bug for it?

See Bug 12279.

</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>34774</commentid>
    <comment_count>5</comment_count>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2007-01-15 09:03:07 -0800</bug_when>
    <thetext>(In reply to comment #4)
&gt; (In reply to comment #3)
&gt; &gt; The second case is somewhat more questionable, since IE 7 also doesn&apos;t clone
&gt; &gt; the file input value. It&apos;s likely that we will need to discuss it separately,
&gt; &gt; may I ask you to file a new bug for it?
&gt; See Bug 12279.

Bah!  See Bug 12285 instead.
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>34760</commentid>
    <comment_count>6</comment_count>
      <attachid>12474</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2007-01-15 22:42:27 -0800</bug_when>
    <thetext>Created attachment 12474
scenario 1 as mentioned below</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>34738</commentid>
    <comment_count>7</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2007-01-15 22:43:41 -0800</bug_when>
    <thetext>Looking with the DOM inspector shows that the file input value is there after removing and appending. It&apos;s just not being displayed. I think if you upload the form you&apos;ll see the same thing. So retitling the bug for the actual symptom.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>34739</commentid>
    <comment_count>8</comment_count>
      <attachid>12475</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2007-01-15 23:04:12 -0800</bug_when>
    <thetext>Created attachment 12475
patch with change log</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>34742</commentid>
    <comment_count>9</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2007-01-15 23:11:11 -0800</bug_when>
    <thetext>*** Bug 12285 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>34743</commentid>
    <comment_count>10</comment_count>
      <attachid>12475</attachid>
    <who name="">mitz</who>
    <bug_when>2007-01-15 23:13:37 -0800</bug_when>
    <thetext>Comment on attachment 12475
patch with change log

Amusing:
- * Copyright (C) 2006 Apple Computer, Inc.
+ * Copyright (C) 2006, 2007 Apple Inc.
[...]
+ * 3.  Neither the name of Apple Computer, Inc. (&quot;Apple&quot;) nor the names of</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>34744</commentid>
    <comment_count>11</comment_count>
      <attachid>12475</attachid>
    <who name="Adam Roben (:aroben)">aroben</who>
    <bug_when>2007-01-15 23:22:35 -0800</bug_when>
    <thetext>Comment on attachment 12475
patch with change log

+        private instead, and made a coupld function members const.

Typo: &quot;coupld&quot;

r=me. Thanks for cleaning this up!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>34724</commentid>
    <comment_count>12</comment_count>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2007-01-16 03:24:50 -0800</bug_when>
    <thetext>Added keyword to make this easier to find.

</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>34625</commentid>
    <comment_count>13</comment_count>
    <who name="Jeremy Nicoll">jnicoll</who>
    <bug_when>2007-01-16 07:51:07 -0800</bug_when>
    <thetext>Thank you for all your hard work!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>33383</commentid>
    <comment_count>14</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2007-01-22 14:28:17 -0800</bug_when>
    <thetext>Is a regression test possible for this patch?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>33349</commentid>
    <comment_count>15</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2007-01-22 16:31:06 -0800</bug_when>
    <thetext>(In reply to comment #14)
&gt; Is a regression test possible for this patch?

Not without adding something to WebCore and/or DumpRenderTree. For security reasons, you can&apos;t set an &lt;input type=file&gt; from JavaScript.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>33344</commentid>
    <comment_count>16</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2007-01-22 17:00:45 -0800</bug_when>
    <thetext>Committed revision 19035.
</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>12474</attachid>
            <date>2007-01-15 22:42:27 -0800</date>
            <delta_ts>2007-01-15 22:42:27 -0800</delta_ts>
            <desc>scenario 1 as mentioned below</desc>
            <filename>scenario-1.html</filename>
            <type>text/html</type>
            <size>529</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">PHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgogICAgICAgIGZ1bmN0aW9uIHByZXNzX3Ro
aXMgKCkgewogICAgICAgICAgICAgICAgdmFyIGYgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgn
dXBsb2FkXzEnKTsKICAgICAgICAgICAgICAgIGYucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChmKTsK
ICAgICAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdmb3JtMicpLmFwcGVuZENo
aWxkKGYpOwogICAgICAgIH0KPC9zY3JpcHQ+Cgo8Zm9ybSBhY3Rpb249InRlc3QucGhwIiBtZXRo
b2Q9IlBPU1QiIGVuY3R5cGU9Im11bHRpcGFydC9mb3JtLWRhdGEiPgogICAgICAgIDxpbnB1dCB0
eXBlPSJmaWxlIiBuYW1lPSJ1cGxvYWQiIGlkPSJ1cGxvYWRfMSIvPgo8L2Zvcm0+Cgo8aW5wdXQg
dHlwZT0iYnV0dG9uIiBvbmNsaWNrPSJwcmVzc190aGlzKCk7Ii8+Cjxmb3JtIGFjdGlvbj0idGVz
dC5waHAiIG1ldGhvZD0iUE9TVCIgaWQ9ImZvcm0yIiBlbmN0eXBlPSJtdWx0aXBhcnQvZm9ybS1k
YXRhIj4KCjwvZm9ybT4gCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>12475</attachid>
            <date>2007-01-15 23:04:12 -0800</date>
            <delta_ts>2007-01-15 23:22:35 -0800</delta_ts>
            <desc>patch with change log</desc>
            <filename>FileInputInvisibleFilenamePatch.txt</filename>
            <type>text/plain</type>
            <size>35041</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ01ha2VMaXN0cy50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9DTWFr
ZUxpc3RzLnR4dAkocmV2aXNpb24gMTg4NzYpCisrKyBXZWJDb3JlL0NNYWtlTGlzdHMudHh0CSh3
b3JraW5nIGNvcHkpCkBAIC05OTIsNiArOTkyLDcgQEAgc2V0KFdlYkNvcmVfU1JDUwogICAgIHBs
YXRmb3JtL0RlcHJlY2F0ZWRTdHJpbmcuY3BwCiAgICAgcGxhdGZvcm0vRGVwcmVjYXRlZFN0cmlu
Z0xpc3QuY3BwCiAgICAgcGxhdGZvcm0vRGVwcmVjYXRlZFZhbHVlTGlzdEltcGwuY3BwCisgICAg
cGxhdGZvcm0vRmlsZUNob29zZXIuY3BwCiAgICAgcGxhdGZvcm0vRm9udENhY2hlLmNwcAogICAg
IHBsYXRmb3JtL0ZvbnQuY3BwCiAgICAgcGxhdGZvcm0vRm9udERhdGEuY3BwCkluZGV4OiBXZWJD
b3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24g
MTg4NzkpCisrKyBXZWJDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDgx
IEBACisyMDA3LTAxLTE1ICBEYXJpbiBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAtIGZpeCBodHRwOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjI3MworICAgICAgICAgIFJFR1JFU1NJT046
IEZpbGUgaW5wdXQgdmFsdWUgaW52aXNpYmxlIGFmdGVyIHJlbW92aW5nIGFuZCByZS1hcHBlbmRp
bmcKKworICAgICAgICAtIG1hZGUgbW9yZSBvZiB0aGUgZmlsZSBjaG9vc2VyIGNvZGUgY3Jvc3Mt
cGxhdGZvcm0KKworICAgICAgICAtIGZpeGVkIGFuIE9iamVjdGl2ZS1DIGdhcmJhZ2UgY29sbGVj
dGlvbiBwcm9ibGVtIGluIEZpbGVDaG9vc2VyCisKKyAgICAgICAgLSB0cmllZCB0byByZW1vdmUg
bGF5ZXJpbmcgdmlvbGF0aW9ucyB3aGVyZSBGaWxlQ2hvb3NlciBpbiB0aGUgcGxhdGZvcm0KKyAg
ICAgICAgICBkaXJlY3Rvcnkga25vd3MgYWJvdXQgdGhlIHJlbmRlcmluZyBhbmQgRE9NIHRyZWVz
IChidXQgd2Fzbid0IGFibGUgdG8KKyAgICAgICAgICBkbyBpdCBlbnRpcmVseSkKKworICAgICAg
ICAqIHBsYXRmb3JtL0ZpbGVDaG9vc2VyLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpG
aWxlQ2hvb3Nlcjo6Y3JlYXRlKTogQ2hhbmdlZCBwYXJhbWV0ZXJzLgorICAgICAgICAoV2ViQ29y
ZTo6RmlsZUNob29zZXI6OmNob29zZUZpbGUpOiBDaGFuZ2VkIHRvIGNhbGwgY2hvb3NlSWNvbiBm
dW5jdGlvbi4KKyAgICAgICAgKFdlYkNvcmU6OkZpbGVDaG9vc2VyOjpjaG9vc2VJY29uKTogQWRk
ZWQuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9GaWxlQ2hvb3Nlci5oOiBBZGRlZCBGaWxlQ2hvb3Nl
ckNsaWVudCBzbyB0aGlzIGZpbGUgZG9lc24ndCBoYXZlCisgICAgICAgIHRvIGtub3cgYWJvdXQg
UmVuZGVyRmlsZVVwbG9hZENvbnRyb2wuIFVzZWQgUmV0YWluUHRyIGluc3RlYWQgb2YgcmV0YWlu
L3JlbGVhc2UKKyAgICAgICAgc28gdGhpcyB3b3JrcyBwcm9wZXJseSB3aXRoIE9iamVjdGl2ZS1D
IEdDLiBSZXBsYWNlZCBkaXNjb25uZWN0VXBsb2FkQ29udHJvbAorICAgICAgICB3aXRoIGRpc2Nv
bm5lY3RDbGllbnQsIHdoaWNoIGhhcyBhIHNpbXBsZSBpbmxpbmUgaW1wbGVtZW50YXRpb24uIE1v
dmVkIHRoZQorICAgICAgICBEb2N1bWVudCBwYXJhbWV0ZXIgZnJvbSB0aGUgY29uc3RydWN0b3Ig
dG8gb3BlbkZpbGVDaG9vc2VyLCBhbG9uZyB3aXRoIGEgY29tbWVudAorICAgICAgICBhYm91dCB3
aHkgaXQgc2hvdWxkIG5vdCBiZSB0aGVyZS4gQWRkZWQgYSBmaWxlbmFtZSBwYXJhbWV0ZXIgdG8g
dGhlIGNvbnN0cnVjdG9yCisgICAgICAgIGZvciB0aGUgaW5pdGlhbCBmaWxlbmFtZS4gQWRkZWQg
YSBmb250IHBhcmFtZXRlciB0byBiYXNlbmFtZUZvcldpZHRoIHNvIHdlIGRvbid0CisgICAgICAg
IGRlcGVuZCBvbiBoYXZpbmcgYSBwb2ludGVyIHRvIHRoZSByZW5kZXJlci4gUmVtb3ZlZCB0aGUg
dXBsb2FkQ29udHJvbCgpIGFuZAorICAgICAgICBkb2N1bWVudCgpIGZ1bmN0aW9ucyBzaW5jZSBu
byBvbmUgY2FsbHMgZWl0aGVyIG9mIHRoZW0uCisKKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvRmls
ZUNob29zZXJNYWMubW06IFJlbW92ZWQgY29kZSB0aGF0IGlzIG5vdyBjcm9zcy1wbGF0Zm9ybS4K
KyAgICAgICAgKC1bT3BlblBhbmVsQ29udHJvbGxlciBiZWdpblNoZWV0V2l0aEZyYW1lOl0pOiBB
ZGRlZCBmcmFtZSBwYXJhbWV0ZXIsIGluc3RlYWQKKyAgICAgICAgb2Ygc3RvcmluZyBhIGRvY3Vt
ZW50IHBvaW50ZXIgaW4gdGhlIEZpbGVDaG9vc2VyLgorICAgICAgICAoV2ViQ29yZTo6RmlsZUNo
b29zZXI6OkZpbGVDaG9vc2VyKTogVXBkYXRlZCBmb3IgY2hhbmdlZCBwYXJhbWV0ZXJzLiBBbHNv
IGFkZGVkCisgICAgICAgIGNvZGUgdG8gY2hvb3NlIHRoZSBpY29uIGJhc2VkIG9uIHRoZSBpbml0
aWFsIGZpbGVuYW1lLiBQYXNzIHRoZSBhZG9wdCBwYXJhbWV0ZXIKKyAgICAgICAgdG8gdGhlIGNv
bnN0cnVjdG9yIG9mIHRoZSBSZXRhaW5QdHIuCisgICAgICAgIChXZWJDb3JlOjpGaWxlQ2hvb3Nl
cjo6fkZpbGVDaG9vc2VyKTogUmVtb3ZlZCB0aGUgcmVsZWFzZSBjYWxsLCBzaW5jZSB0aGUKKyAg
ICAgICAgUmV0YWluUHRyIHdpbGwgdGFrZSBjYXJlIG9mIGl0LiBBZGRlZCBhIGNhbGwgdG8gZGlz
Y29ubmVjdEZpbGVDaG9vc2VyIGhlcmUuCisgICAgICAgIFRoZXJlJ3Mgbm8gbmVlZCB0byBkaXNj
b25uZWN0IGF0IGRpc2Nvbm5lY3RDbGllbnQgdGltZSwgYW5kIHRoYXQgbGV0cyB1cyBoYXZlCisg
ICAgICAgIG9uZSBtb3JlIGNyb3NzLXBsYXRmb3JtIGZ1bmN0aW9uLgorICAgICAgICAoV2ViQ29y
ZTo6RmlsZUNob29zZXI6Om9wZW5GaWxlQ2hvb3Nlcik6IEFkZGVkIGRvY3VtZW50IHBhcmFtZXRl
ci4gQWRkZWQgY29kZQorICAgICAgICB0byBnZXQgdGhlIGZyYW1lIGZyb20gdGhlIGRvY3VtZW50
LiBBbmQgYWRkZWQgYSBuaWwgY2hlY2sgc2luY2UgdGhlcmUncyBubworICAgICAgICBpcm9uY2xh
ZCBndWFyYW50ZWUgdGhlIGRvY3VtZW50IHdvbid0IGhhdmUgb3V0bGl2ZWQgaXRzIGZyYW1lLgor
ICAgICAgICAoV2ViQ29yZTo6RmlsZUNob29zZXI6OmJhc2VuYW1lRm9yV2lkdGgpOiBBZGRlZCBm
b250IHBhcmFtZXRlci4gVXNlIHRoYXQgaW5zdGVhZAorICAgICAgICBvZiBnb2luZyBhdCB0aGUg
dXBsb2FkIGNvbnRyb2wncyBzdHlsZS4gVGhlIGNhbGxlciBjYW4gaGFuZGxlIHRoYXQgbm93Lgor
CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckZpbGVVcGxvYWRDb250cm9sLmg6IFJlbW92ZWQg
dW5uZWNlc3NhcnkgaW5jbHVkZXMuCisgICAgICAgIE1hZGUgY2xhc3MgaW5oZXJpdCBwcml2YXRl
bHkgZnJvbSBGaWxlQ2hvb3NlckNsaWVudC4gQ2hhbmdlZCBjb25zdHJ1Y3RvcgorICAgICAgICBw
YXJhbWV0ZXIgdG8gSFRNTElucHV0RWxlbWVudCByYXRoZXIgdGhhbiBOb2RlLiBNYWRlIHByb3Rl
Y3RlZCBtZW1iZXJzIGJlCisgICAgICAgIHByaXZhdGUgaW5zdGVhZCwgYW5kIG1hZGUgYSBjb3Vw
bGQgZnVuY3Rpb24gbWVtYmVycyBjb25zdC4KKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyRmls
ZVVwbG9hZENvbnRyb2wuY3BwOiBNb3ZlZCBjb25zdGFudHMgdG8gdGhlIHRvcCBvZiB0aGUgZmls
ZSwKKyAgICAgICAgYnV0IGFmdGVyIHRoZSAidXNpbmcgbmFtZXNwYWNlIgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyRmlsZVVwbG9hZENvbnRyb2w6OlJlbmRlckZpbGVVcGxvYWRDb250cm9sKTog
VXBkYXRlZCBmb3IgY2hhbmdlcworICAgICAgICB0byB0aGUgRmlsZUNob29zZXI6OmNyZWF0ZSBm
dW5jdGlvbiBhbmQgdGhlIHBhcmFtZXRlciB0eXBlcy4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ckZpbGVVcGxvYWRDb250cm9sOjp+UmVuZGVyRmlsZVVwbG9hZENvbnRyb2wpOiBSZW1vdmVkIHVu
bmVlZGVkCisgICAgICAgIG51bGwgY2hlY2sgLS0gdGhlcmUncyBubyBjYXNlIHdoZXJlIHRoZSBG
aWxlQ2hvb3NlciBmYWlscyB0byBiZSBjcmVhdGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
RmlsZVVwbG9hZENvbnRyb2w6OmNsaWNrKTogUGFzcyBkb2N1bWVudCB0byBvcGVuRmlsZUNob29z
ZXIuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJGaWxlVXBsb2FkQ29udHJvbDo6dXBkYXRlRnJv
bUVsZW1lbnQpOiBUd2Vha2VkIGNvZGUgYSBiaXQgYnkKKyAgICAgICAgdXNpbmcgdXBkYXRlRnJv
bUVsZW1lbnQgYW5kIHNldFZhbHVlIGluc3RlYWQgb2YgY2FzdGluZyB0aGUgcmVuZGVyZXIgdG8g
YQorICAgICAgICBSZW5kZXJCdXR0b24gYW5kIGNhbGxpbmcgc2V0VGV4dCBkaXJlY3RseS4gUHV0
IHNldElucHV0VHlwZSBjYWxsIGhlcmUuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJGaWxlVXBs
b2FkQ29udHJvbDo6bWF4RmlsZW5hbWVXaWR0aCk6IE1hZGUgY29uc3QuIEJyb2tlIGxvbmcgbGlu
ZS4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckZpbGVVcGxvYWRDb250cm9sOjpjcmVhdGVCdXR0
b25TdHlsZSk6IE1hZGUgY29uc3QuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJGaWxlVXBsb2Fk
Q29udHJvbDo6cGFpbnRPYmplY3QpOiBNb3ZlZCBidXR0b25TaGFkb3dIZWlnaHQgY29uc3RhbnQK
KyAgICAgICAgdG8gdGhlIHRvcCBvZiB0aGUgZmlsZS4gQ2FsbCBpc0VtcHR5IGluc3RlYWQgb2Yg
Y2hlY2tpbmcgd2lkdGggYW5kIGhlaWdodCBvZgorICAgICAgICBJbnRSZWN0IGZvciAwLiBDb21w
dXRlZCBmb250IHRvIHBhc3MgdG8gRmlsZUNob29zZXI6OmJhc2VuYW1lRm9yV2lkdGguIEJyb2tl
CisgICAgICAgIGxvbmcgbGluZXMuCisgICAgICAgIChXZWJDb3JlOjpIVE1MRmlsZVVwbG9hZElu
bmVyQnV0dG9uRWxlbWVudDo6SFRNTEZpbGVVcGxvYWRJbm5lckJ1dHRvbkVsZW1lbnQpOgorICAg
ICAgICBNb3ZlZCB0aGUgc2V0SW5wdXRUeXBlIGNhbGwgdG8gdGhlIGNhbGxlcjsgY29uY2VwdCBo
ZXJlIGlzIHRoYXQgdGhpcyBjbGFzcyBpcworICAgICAgICBhcyBzaW1wbGUgYXMgcG9zc2libGUs
IHJhdGhlciB0aGFuIGRvaW5nIGFzIG11Y2ggb2YgdGhlIGJ1dHRvbiBqb2IgYXMgcG9zc2libGUu
CisKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6IEFkZGVkIEZp
bGVDaG9vc2VyLmNwcC4KKyAgICAgICAgKiBXZWJDb3JlLnBybzogRGl0dG8uCisgICAgICAgICog
Q01ha2VMaXN0cy50eHQ6IERpdHRvLgorICAgICAgICAqIFdlYkNvcmVTb3VyY2VzLmJrbDogRGl0
dG8uCisKKyAgICAgICAgKiBwbGF0Zm9ybS9nZGsvVGVtcG9yYXJ5TGlua1N0dWJzLmNwcDogVXBk
YXRlZCBzdHVicy4KKyAgICAgICAgKiBwbGF0Zm9ybS9xdC9GaWxlQ2hvb3NlclF0LmNwcDogVXBk
YXRlZCBzdHVicy4KKwogMjAwNy0wMS0xNSAgRXJpYyBTZWlkZWwgIDxlcmljQHdlYmtpdC5vcmc+
CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgaHlhdHQuCkluZGV4OiBXZWJDb3JlL1dlYkNvcmUucHJv
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvV2ViQ29yZS5wcm8JKHJldmlzaW9uIDE4ODc2KQorKysg
V2ViQ29yZS9XZWJDb3JlLnBybwkod29ya2luZyBjb3B5KQpAQCAtNTUyLDYgKzU1Miw3IEBAIFNP
VVJDRVMgKz0gXAogICAgIHBsYXRmb3JtL3F0L01pbWVUeXBlUmVnaXN0cnlRdC5jcHAgXAogICAg
IHBsYXRmb3JtL3F0L1NvdW5kUXQuY3BwIFwKICAgICBwbGF0Zm9ybS9xdC9GaWxlQ2hvb3NlclF0
LmNwcCBcCisgICAgcGxhdGZvcm0vRmlsZUNob29zZXIuY3BwIFwKICAgICBwbGF0Zm9ybS9ncmFw
aGljcy9xdC9JY29uUXQuY3BwIFwKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9xdC9JbWFnZUJ1ZmZl
clF0LmNwcCBcCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvcXQvQWZmaW5lVHJhbnNmb3JtUXQuY3Bw
IFwKSW5kZXg6IFdlYkNvcmUvV2ViQ29yZVNvdXJjZXMuYmtsCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvV2ViQ29yZVNvdXJjZXMuYmtsCShyZXZpc2lvbiAxODg3NikKKysrIFdlYkNvcmUvV2ViQ29y
ZVNvdXJjZXMuYmtsCSh3b3JraW5nIGNvcHkpCkBAIC0xNDMsNiArMTQzLDcgQEAKICAgICAgICAg
cGxhdGZvcm0vRGVwcmVjYXRlZFN0cmluZy5jcHAKICAgICAgICAgcGxhdGZvcm0vRGVwcmVjYXRl
ZFN0cmluZ0xpc3QuY3BwCiAgICAgICAgIHBsYXRmb3JtL0RlcHJlY2F0ZWRWYWx1ZUxpc3RJbXBs
LmNwcAorICAgICAgICBwbGF0Zm9ybS9GaWxlQ2hvb3Nlci5jcHAKICAgICAgICAgcGxhdGZvcm0v
Rm9udC5jcHAKICAgICAgICAgcGxhdGZvcm0vRm9udENhY2hlLmNwcAogICAgICAgICBwbGF0Zm9y
bS9Gb250RGF0YS5jcHAKSW5kZXg6IFdlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qCShyZXZpc2lvbiAxODg3NikKKysrIFdlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0xNDQ2LDYgKzE0NDYsNyBAQAogCQk5MzMw
OUVBNDA5OUVCNzhDMDA1NkU1ODEgLyogVGltZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTMzMDlFQTEwOTlFQjc4QzAwNTZFNTgxIC8qIFRpbWVy
LmNwcCAqLzsgfTsKIAkJOTMzNTRBM0MwQjI0RjhDOTAwM0Y2REVBIC8qIFVJRXZlbnRXaXRoS2V5
U3RhdGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
OTMzNTRBM0IwQjI0RjhDOTAwM0Y2REVBIC8qIFVJRXZlbnRXaXRoS2V5U3RhdGUuY3BwICovOyB9
OwogCQk5MzQ3MDZBQjBBQUNEODA5MDAyQzFENDMgLyogVGV4dERlY29kZXIuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzMkNBNzQyMEFBQTE5OEUwMEFE
MUZBRCAvKiBUZXh0RGVjb2Rlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CisJCTkzNEZFOUU1MEI1Q0E1MzkwMDNFNEE3MyAvKiBGaWxlQ2hvb3Nlci5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5MzRGRTlF
NDBCNUNBNTM5MDAzRTRBNzMgLyogRmlsZUNob29zZXIuY3BwICovOyB9OwogCQk5MzUyMDcxOTA5
QkQzQkE1MDBGMjAzOEQgLyogU3RhdGljQ29uc3RydWN0b3JzLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5MzUyMDcxNzA5QkQzQkE1MDBGMjAzOEQgLyog
U3RhdGljQ29uc3RydWN0b3JzLmggKi87IH07CiAJCTkzNTIwNzFBMDlCRDNCQTUwMEYyMDM4RCAv
KiBUZXh0Qm91bmRhcmllcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gOTM1MjA3MTgwOUJEM0JBNTAwRjIwMzhEIC8qIFRleHRCb3VuZGFyaWVzLmggKi87
IH07CiAJCTkzNTIwNzFEMDlCRDNCQkIwMEYyMDM4RCAvKiBUZXh0Qm91bmRhcmllcy5tbSBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzNTIwNzFCMDlCRDNC
QkIwMEYyMDM4RCAvKiBUZXh0Qm91bmRhcmllcy5tbSAqLzsgfTsKQEAgLTQ0NTcsNiArNDQ1OCw3
IEBACiAJCTkzMzA5RUEwMDk5RUI3OEMwMDU2RTU4MSAvKiBTaGFyZWRUaW1lci5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTaGFyZWRUaW1lci5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQk5MzMwOUVBMTA5OUVCNzhDMDA1NkU1ODEgLyogVGltZXIuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVGltZXIuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk5MzM1NEEzQjBCMjRGOEM5MDAzRjZERUEgLyogVUlFdmVudFdpdGhL
ZXlTdGF0ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBVSUV2ZW50
V2l0aEtleVN0YXRlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJOTM0RkU5RTQw
QjVDQTUzOTAwM0U0QTczIC8qIEZpbGVDaG9vc2VyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IEZpbGVDaG9vc2VyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJOTM1MjA3MTcwOUJEM0JBNTAwRjIwMzhEIC8qIFN0YXRpY0NvbnN0cnVjdG9ycy5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTdGF0aWNDb25zdHJ1Y3RvcnMuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTM1MjA3MTgwOUJEM0JBNTAwRjIwMzhEIC8qIFRl
eHRCb3VuZGFyaWVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFRleHRCb3Vu
ZGFyaWVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTkzNTIwNzFCMDlCRDNCQkIw
MEYyMDM4RCAvKiBUZXh0Qm91bmRhcmllcy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9i
amNwcDsgcGF0aCA9IFRleHRCb3VuZGFyaWVzLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwpAQCAtODkyNyw2ICs4OTI5LDcgQEAKIAkJCQlGNTg3ODZDMjAyREUzQjg2MDFFQTQxMjIgLyog
RGVwcmVjYXRlZFZhbHVlTGlzdC5oICovLAogCQkJCUY1ODc4NTNDMDJERTM3NTkwMUVBNDEyMiAv
KiBEZXByZWNhdGVkVmFsdWVMaXN0SW1wbC5jcHAgKi8sCiAJCQkJRjU4Nzg1M0IwMkRFMzc1OTAx
RUE0MTIyIC8qIERlcHJlY2F0ZWRWYWx1ZUxpc3RJbXBsLmggKi8sCisJCQkJOTM0RkU5RTQwQjVD
QTUzOTAwM0U0QTczIC8qIEZpbGVDaG9vc2VyLmNwcCAqLywKIAkJCQkwNjZDNzcyQTBBQjYwM0I3
MDAyMzhDQzQgLyogRmlsZUNob29zZXIuaCAqLywKIAkJCQlCQzZENkREMDA5QUY5MDY2MDBGNTk3
NTkgLyogRm9udC5jcHAgKi8sCiAJCQkJQkM2RDZERDEwOUFGOTA2NjAwRjU5NzU5IC8qIEZvbnQu
aCAqLywKQEAgLTEyMjg3LDYgKzEyMjkwLDcgQEAKIAkJCQk1MTBGNzM2MTBCNTZDMDg4MDBBMzAw
MkEgLyogQ3JlZGVudGlhbC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1MTBGNzM2MzBCNTZDMDg4
MDBBMzAwMkEgLyogUHJvdGVjdGlvblNwYWNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTFBMkE2
ODIzMEI1QkVERTcwMDAyQTQ4MCAvKiBQcm9ncmVzc1RyYWNrZXIuY3BwIGluIFNvdXJjZXMgKi8s
CisJCQkJOTM0RkU5RTUwQjVDQTUzOTAwM0U0QTczIC8qIEZpbGVDaG9vc2VyLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAw
OwogCQl9OwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9GaWxlQ2hvb3Nlci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9GaWxlQ2hvb3Nlci5jcHAJKHJldmlzaW9uIDApCisrKyBX
ZWJDb3JlL3BsYXRmb3JtL0ZpbGVDaG9vc2VyLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw2
MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgor
ICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLiAKKyAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFw
cGxlIENvbXB1dGVyLCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCisgKiAgICAgaXRz
IGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMg
ZGVyaXZlZAorICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9y
IHdyaXR0ZW4gcGVybWlzc2lvbi4gCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
IElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI2ltcG9ydCAiY29uZmlnLmgiCisjaW1wb3J0ICJGaWxlQ2hvb3Nlci5oIgorCisj
aW1wb3J0ICJJY29uLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKyAgICAKK1Bhc3NSZWZQdHI8
RmlsZUNob29zZXI+IEZpbGVDaG9vc2VyOjpjcmVhdGUoRmlsZUNob29zZXJDbGllbnQqIGNsaWVu
dCwgY29uc3QgU3RyaW5nJiBmaWxlbmFtZSkKK3sKKyAgICByZXR1cm4gbmV3IEZpbGVDaG9vc2Vy
KGNsaWVudCwgZmlsZW5hbWUpOworfQorCit2b2lkIEZpbGVDaG9vc2VyOjpjaG9vc2VGaWxlKGNv
bnN0IFN0cmluZyYgZmlsZW5hbWUpCit7CisgICAgaWYgKG1fZmlsZW5hbWUgPT0gZmlsZW5hbWUp
CisgICAgICAgIHJldHVybjsKKyAgICBtX2ZpbGVuYW1lID0gZmlsZW5hbWU7CisgICAgbV9pY29u
ID0gY2hvb3NlSWNvbihmaWxlbmFtZSk7CisgICAgaWYgKG1fY2xpZW50KQorICAgICAgICBtX2Ns
aWVudC0+dmFsdWVDaGFuZ2VkKCk7Cit9CisKK1Bhc3NSZWZQdHI8SWNvbj4gRmlsZUNob29zZXI6
OmNob29zZUljb24oY29uc3QgU3RyaW5nJiBmaWxlbmFtZSkKK3sKKyAgICAvLyBGSVhNRTogU2hv
dWxkIHRoZSBzcGVjaWFsIGNhc2VzIGJlIGluIEljb246Om5ld0ljb25Gb3JGaWxlPworICAgIC8v
IE5lZWQgdW5zaWduZWQgMCBoZXJlIHRvIGRpc2FtYmlndWF0ZSBTdHJpbmc6Om9wZXJhdG9yW10g
ZnJvbSBvcGVyYXRvcihOU1N0cmluZyosIGludClbXQorICAgIGlmIChmaWxlbmFtZS5pc0VtcHR5
KCkgfHwgZmlsZW5hbWVbMFVdICE9ICcvJykKKyAgICAgICAgcmV0dXJuIDA7CisgICAgcmV0dXJu
IEljb246Om5ld0ljb25Gb3JGaWxlKGZpbGVuYW1lKTsKK30KKworfQoKUHJvcGVydHkgY2hhbmdl
cyBvbjogV2ViQ29yZS9wbGF0Zm9ybS9GaWxlQ2hvb3Nlci5jcHAKX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpOYW1lOiBz
dm46ZW9sLXN0eWxlCiAgICsgbmF0aXZlCgpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9GaWxlQ2hv
b3Nlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vRmlsZUNob29zZXIuaAkocmV2
aXNpb24gMTg4NzYpCisrKyBXZWJDb3JlL3BsYXRmb3JtL0ZpbGVDaG9vc2VyLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTEsMzEgKzEsNDAgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYgQXBwbGUg
Q29tcHV0ZXIsIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNyBBcHBsZSBJbmMuCiAg
KgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBv
ciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CiAgKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVk
IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkg
V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hB
TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBH
TlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgor
ICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLiAKKyAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFw
cGxlIENvbXB1dGVyLCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCisgKiAgICAgaXRz
IGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMg
ZGVyaXZlZAorICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9y
IHdyaXR0ZW4gcGVybWlzc2lvbi4gCiAgKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEg
Y29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcg
d2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3Jp
dGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQ
bGFjZSAtIFN1aXRlIDMzMCwKLSAqIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMg
SVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKgogICovCiAKICNpZm5kZWYgRmlsZUNob29zZXJf
aAogI2RlZmluZSBGaWxlQ2hvb3Nlcl9oCiAKLSNpbmNsdWRlICJJY29uLmgiCiAjaW5jbHVkZSAi
UGxhdGZvcm1TdHJpbmcuaCIKICNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CiAKICNpZiBQTEFURk9S
TShNQUMpCisjaW5jbHVkZSAiUmV0YWluUHRyLmgiCiAjaWZkZWYgX19PQkpDX18KIEBjbGFzcyBP
cGVuUGFuZWxDb250cm9sbGVyOwogI2Vsc2UKQEAgLTM2LDM3ICs0NSw0NSBAQCBjbGFzcyBPcGVu
UGFuZWxDb250cm9sbGVyOwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBEb2N1bWVudDsK
LWNsYXNzIFJlbmRlckZpbGVVcGxvYWRDb250cm9sOwotY2xhc3MgU3RyaW5nOworY2xhc3MgRm9u
dDsKK2NsYXNzIEljb247CisKK2NsYXNzIEZpbGVDaG9vc2VyQ2xpZW50IHsKK3B1YmxpYzoKKyAg
ICB2aXJ0dWFsIH5GaWxlQ2hvb3NlckNsaWVudCgpIHsgfQorICAgIHZpcnR1YWwgdm9pZCB2YWx1
ZUNoYW5nZWQoKSA9IDA7Cit9OwogCiBjbGFzcyBGaWxlQ2hvb3NlciA6IHB1YmxpYyBTaGFyZWQ8
RmlsZUNob29zZXI+IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxGaWxlQ2hvb3Nl
cj4gY3JlYXRlKERvY3VtZW50KiwgUmVuZGVyRmlsZVVwbG9hZENvbnRyb2wqKTsKKyAgICBzdGF0
aWMgUGFzc1JlZlB0cjxGaWxlQ2hvb3Nlcj4gY3JlYXRlKEZpbGVDaG9vc2VyQ2xpZW50KiwgY29u
c3QgU3RyaW5nJiBpbml0aWFsRmlsZW5hbWUpOwogICAgIH5GaWxlQ2hvb3NlcigpOwotICAgIAot
ICAgIHZvaWQgb3BlbkZpbGVDaG9vc2VyKCk7Ci0gICAgCisKKyAgICB2b2lkIGRpc2Nvbm5lY3RD
bGllbnQoKSB7IG1fY2xpZW50ID0gMDsgfQorCisgICAgLy8gRklYTUU6IEl0J3MgYSBsYXllcmlu
ZyB2aW9sYXRpb24gdGhhdCB3ZSBwYXNzIGEgRG9jdW1lbnQgaW4gaGVyZS4KKyAgICAvLyBUaGUg
cGxhdGZvcm0gZGlyZWN0b3J5IGlzIHVuZGVybmVhdGggdGhlIERPTSwgc28gaXQgY2FuJ3QgdXNl
IHRoZSBET00uCisgICAgLy8gQmVjYXVzZSBvZiBVSSBkZWxlZ2F0ZXMsIGl0J3Mgbm90IGNsZWFy
IHRoYXQgdGhpcyBjbGFzcyBiZWxvbmdzIGluIHRoZSBwbGF0Zm9ybQorICAgIC8vIGxheWVyIGF0
IGFsbC4gSXQgbWlnaHQgbmVlZCB0byBnbyBhbG9uZ3NpZGUgdGhlIENocm9tZSBjbGFzcyBpbnN0
ZWFkLgorICAgIHZvaWQgb3BlbkZpbGVDaG9vc2VyKERvY3VtZW50Kik7CisKICAgICBjb25zdCBT
dHJpbmcmIGZpbGVuYW1lKCkgY29uc3QgeyByZXR1cm4gbV9maWxlbmFtZTsgfQotICAgIFN0cmlu
ZyBiYXNlbmFtZUZvcldpZHRoKGludCB3aWR0aCkgY29uc3Q7Ci0gICAgCisgICAgU3RyaW5nIGJh
c2VuYW1lRm9yV2lkdGgoY29uc3QgRm9udCYsIGludCB3aWR0aCkgY29uc3Q7CisKICAgICBJY29u
KiBpY29uKCkgY29uc3QgeyByZXR1cm4gbV9pY29uLmdldCgpOyB9Ci0gICAgUmVuZGVyRmlsZVVw
bG9hZENvbnRyb2wqIHVwbG9hZENvbnRyb2woKSBjb25zdCB7IHJldHVybiBtX3VwbG9hZENvbnRy
b2w7IH0KLSAgICBEb2N1bWVudCogZG9jdW1lbnQoKSB7IHJldHVybiBtX2RvY3VtZW50OyB9Ci0g
ICAgCi0gICAgdm9pZCBkaXNjb25uZWN0VXBsb2FkQ29udHJvbCgpOwogCiAgICAgdm9pZCBjaG9v
c2VGaWxlKGNvbnN0IFN0cmluZyYgZmlsZW5hbWUpOwotICAgIAorCiBwcml2YXRlOgotICAgIERv
Y3VtZW50KiBtX2RvY3VtZW50OworICAgIEZpbGVDaG9vc2VyKEZpbGVDaG9vc2VyQ2xpZW50Kiwg
Y29uc3QgU3RyaW5nJiBpbml0aWFsRmlsZW5hbWUpOworICAgIHN0YXRpYyBQYXNzUmVmUHRyPElj
b24+IGNob29zZUljb24oY29uc3QgU3RyaW5nJiBmaWxlbmFtZSk7CisKKyAgICBGaWxlQ2hvb3Nl
ckNsaWVudCogbV9jbGllbnQ7CiAgICAgU3RyaW5nIG1fZmlsZW5hbWU7CiAgICAgUmVmUHRyPElj
b24+IG1faWNvbjsKLSAgICBSZW5kZXJGaWxlVXBsb2FkQ29udHJvbCogbV91cGxvYWRDb250cm9s
OwogCi0gICAgRmlsZUNob29zZXIoRG9jdW1lbnQqLCBSZW5kZXJGaWxlVXBsb2FkQ29udHJvbCop
OwotICAgIAogI2lmIFBMQVRGT1JNKE1BQykKLSAgICBPcGVuUGFuZWxDb250cm9sbGVyKiBtX2Nv
bnRyb2xsZXI7CisgICAgUmV0YWluUHRyPE9wZW5QYW5lbENvbnRyb2xsZXI+IG1fY29udHJvbGxl
cjsKICNlbmRpZgogfTsKIApJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9nZGsvVGVtcG9yYXJ5TGlu
a1N0dWJzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dkay9UZW1wb3JhcnlM
aW5rU3R1YnMuY3BwCShyZXZpc2lvbiAxODg3NikKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ2RrL1Rl
bXBvcmFyeUxpbmtTdHVicy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMzMSwxMyArMzMxLDEwIEBA
IHZvaWQgUGxhdGZvcm1TY3JvbGxiYXI6OnVwZGF0ZVRodW1iUG9zaXQKIHZvaWQgUGxhdGZvcm1T
Y3JvbGxiYXI6OnVwZGF0ZVRodW1iUHJvcG9ydGlvbigpIHsgfQogdm9pZCBQbGF0Zm9ybVNjcm9s
bGJhcjo6c2V0UmVjdChjb25zdCBJbnRSZWN0JikgeyB9CiAKLUZpbGVDaG9vc2VyOjpGaWxlQ2hv
b3NlcihEb2N1bWVudCosIFJlbmRlckZpbGVVcGxvYWRDb250cm9sKikgeyBub3RJbXBsZW1lbnRl
ZCgpOyB9CitGaWxlQ2hvb3Nlcjo6RmlsZUNob29zZXIoRmlsZUNob29zZXJDbGllbnQqLCBjb25z
dCBTdHJpbmcmKSB7IG5vdEltcGxlbWVudGVkKCk7IH0KIEZpbGVDaG9vc2VyOjp+RmlsZUNob29z
ZXIoKSB7IG5vdEltcGxlbWVudGVkKCk7IH0KLVBhc3NSZWZQdHI8RmlsZUNob29zZXI+IEZpbGVD
aG9vc2VyOjpjcmVhdGUoRG9jdW1lbnQqLCBSZW5kZXJGaWxlVXBsb2FkQ29udHJvbCopIHsgbm90
SW1wbGVtZW50ZWQoKTsgcmV0dXJuIDA7IH0KLXZvaWQgRmlsZUNob29zZXI6Om9wZW5GaWxlQ2hv
b3NlcigpIHsgbm90SW1wbGVtZW50ZWQoKTsgfQotU3RyaW5nIEZpbGVDaG9vc2VyOjpiYXNlbmFt
ZUZvcldpZHRoKGludCB3aWR0aCkgY29uc3QgeyBub3RJbXBsZW1lbnRlZCgpOyByZXR1cm4gU3Ry
aW5nKCk7IH0KLXZvaWQgRmlsZUNob29zZXI6OmRpc2Nvbm5lY3RVcGxvYWRDb250cm9sKCkgeyBu
b3RJbXBsZW1lbnRlZCgpOyB9Ci12b2lkIEZpbGVDaG9vc2VyOjpjaG9vc2VGaWxlKGNvbnN0IFN0
cmluZyYgZmlsZW5hbWUpIHsgbm90SW1wbGVtZW50ZWQoKTsgfQordm9pZCBGaWxlQ2hvb3Nlcjo6
b3BlbkZpbGVDaG9vc2VyKERvY3VtZW50KikgeyBub3RJbXBsZW1lbnRlZCgpOyB9CitTdHJpbmcg
RmlsZUNob29zZXI6OmJhc2VuYW1lRm9yV2lkdGgoY29uc3QgRm9udCYsIGludCB3aWR0aCkgY29u
c3QgeyBub3RJbXBsZW1lbnRlZCgpOyByZXR1cm4gU3RyaW5nKCk7IH0KIAogQ29sb3IgV2ViQ29y
ZTo6Zm9jdXNSaW5nQ29sb3IoKSB7IHJldHVybiAweEZGMDAwMEZGOyB9CiB2b2lkIFdlYkNvcmU6
OnNldEZvY3VzUmluZ0NvbG9yQ2hhbmdlRnVuY3Rpb24odm9pZCAoKikoKSkgeyB9CkluZGV4OiBX
ZWJDb3JlL3BsYXRmb3JtL21hYy9GaWxlQ2hvb3Nlck1hYy5tbQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL3BsYXRmb3JtL21hYy9GaWxlQ2hvb3Nlck1hYy5tbQkocmV2aXNpb24gMTg4NzYpCisrKyBX
ZWJDb3JlL3BsYXRmb3JtL21hYy9GaWxlQ2hvb3Nlck1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAt
MSwzMyArMSw0MCBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNiBBcHBsZSBDb21wdXRlciwg
SW5jLgorICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3IEFwcGxlIEluYy4KICAqCi0gKiBUaGlz
IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
Ci0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3Vy
IG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKICAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhv
cGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsg
d2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkg
b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKiAxLiAgUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuIAorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uIAorICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0
ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKKyAqICAgICBpdHMgY29udHJpYnV0
b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisg
KiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBw
ZXJtaXNzaW9uLiAKICAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMg
bGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICog
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3Vp
dGUgMzMwLAotICogQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KICAqCiAgKi8KIAogI2ltcG9ydCAiY29uZmlnLmgiCiAjaW1wb3J0ICJG
aWxlQ2hvb3Nlci5oIgogCi0jaW1wb3J0IDxBcHBLaXQvTlNPcGVuUGFuZWwuaD4KICNpbXBvcnQg
IkRvY3VtZW50LmgiCiAjaW1wb3J0ICJGb250RGF0YS5oIgogI2ltcG9ydCAiRnJhbWVNYWMuaCIK
ICNpbXBvcnQgIkljb24uaCIKICNpbXBvcnQgIkxvY2FsaXplZFN0cmluZ3MuaCIKLSNpbXBvcnQg
IlJlbmRlckZpbGVVcGxvYWRDb250cm9sLmgiCiAjaW1wb3J0ICJXZWJDb3JlRnJhbWVCcmlkZ2Uu
aCIKICNpbXBvcnQgIldlYkNvcmVTdHJpbmdUcnVuY2F0b3IuaCIKIApAQCAtMzksNyArNDYsNyBA
QCB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIH0KIC0gKGlkKWluaXRXaXRoRmlsZUNob29zZXI6
KEZpbGVDaG9vc2VyICopZmlsZUNob29zZXI7CiAtICh2b2lkKWRpc2Nvbm5lY3RGaWxlQ2hvb3Nl
cjsKLS0gKHZvaWQpYmVnaW5TaGVldDsKKy0gKHZvaWQpYmVnaW5TaGVldFdpdGhGcmFtZTooRnJh
bWUqKWZyYW1lOwogQGVuZAogCiBAaW1wbGVtZW50YXRpb24gT3BlblBhbmVsQ29udHJvbGxlcgpA
QCAtNDksNyArNTYsNyBAQCB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKICAgICBzZWxmID0gW3N1
cGVyIGluaXRdOwogICAgIGlmICghc2VsZikKICAgICAgICAgcmV0dXJuIG5pbDsKLSAgICAKKwog
ICAgIF9maWxlQ2hvb3NlciA9IGZpbGVDaG9vc2VyOwogICAgIHJldHVybiBzZWxmOwogfQpAQCAt
NTksMTIgKzY2LDEyIEBAIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogICAgIF9maWxlQ2hvb3Nl
ciA9IDA7CiB9CiAKLS0gKHZvaWQpYmVnaW5TaGVldAorLSAodm9pZCliZWdpblNoZWV0V2l0aEZy
YW1lOihGcmFtZSopZnJhbWUKIHsKICAgICBpZiAoIV9maWxlQ2hvb3NlcikKICAgICAgICAgcmV0
dXJuOwogICAgIAotICAgIF9icmlkZ2UgPSBNYWMoX2ZpbGVDaG9vc2VyLT5kb2N1bWVudCgpLT5m
cmFtZSgpKS0+YnJpZGdlKCk7CisgICAgX2JyaWRnZSA9IE1hYyhmcmFtZSktPmJyaWRnZSgpOwog
ICAgIFtfYnJpZGdlIHJldGFpbl07CiAgICAgW19icmlkZ2UgcnVuT3BlblBhbmVsRm9yRmlsZUJ1
dHRvbldpdGhSZXN1bHRMaXN0ZW5lcjpzZWxmXTsKIH0KQEAgLTg1LDY0ICs5MiwzOCBAQCB1c2lu
ZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIAotUGFzc1Jl
ZlB0cjxGaWxlQ2hvb3Nlcj4gRmlsZUNob29zZXI6OmNyZWF0ZShEb2N1bWVudCogZG9jdW1lbnQs
IFJlbmRlckZpbGVVcGxvYWRDb250cm9sKiB1cGxvYWRDb250cm9sKQotewotICAgIHJldHVybiBu
ZXcgRmlsZUNob29zZXIoZG9jdW1lbnQsIHVwbG9hZENvbnRyb2wpOwotfQotCi1GaWxlQ2hvb3Nl
cjo6RmlsZUNob29zZXIoRG9jdW1lbnQqIGRvY3VtZW50LCBSZW5kZXJGaWxlVXBsb2FkQ29udHJv
bCogdXBsb2FkQ29udHJvbCkKLSAgICA6IG1fZG9jdW1lbnQoZG9jdW1lbnQpCi0gICAgLCBtX2lj
b24oMCkKLSAgICAsIG1fdXBsb2FkQ29udHJvbCh1cGxvYWRDb250cm9sKQotICAgICwgbV9jb250
cm9sbGVyKFtbT3BlblBhbmVsQ29udHJvbGxlciBhbGxvY10gaW5pdFdpdGhGaWxlQ2hvb3Nlcjp0
aGlzXSkKK0ZpbGVDaG9vc2VyOjpGaWxlQ2hvb3NlcihGaWxlQ2hvb3NlckNsaWVudCogY2xpZW50
LCBjb25zdCBTdHJpbmcmIGZpbGVuYW1lKQorICAgIDogbV9jbGllbnQoY2xpZW50KQorICAgICwg
bV9maWxlbmFtZShmaWxlbmFtZSkKKyAgICAsIG1faWNvbihjaG9vc2VJY29uKGZpbGVuYW1lKSkK
KyAgICAsIG1fY29udHJvbGxlcihBZG9wdCwgW1tPcGVuUGFuZWxDb250cm9sbGVyIGFsbG9jXSBp
bml0V2l0aEZpbGVDaG9vc2VyOnRoaXNdKQogewogfQogCiBGaWxlQ2hvb3Nlcjo6fkZpbGVDaG9v
c2VyKCkKIHsKLSAgICBbbV9jb250cm9sbGVyIHJlbGVhc2VdOworICAgIFttX2NvbnRyb2xsZXIu
Z2V0KCkgZGlzY29ubmVjdEZpbGVDaG9vc2VyXTsKIH0KIAotdm9pZCBGaWxlQ2hvb3Nlcjo6b3Bl
bkZpbGVDaG9vc2VyKCkKK3ZvaWQgRmlsZUNob29zZXI6Om9wZW5GaWxlQ2hvb3NlcihEb2N1bWVu
dCogZG9jdW1lbnQpCiB7Ci0gICAgW21fY29udHJvbGxlciBiZWdpblNoZWV0XTsKKyAgICBpZiAo
RnJhbWUqIGZyYW1lID0gZG9jdW1lbnQtPmZyYW1lKCkpCisgICAgICAgIFttX2NvbnRyb2xsZXIu
Z2V0KCkgYmVnaW5TaGVldFdpdGhGcmFtZTpmcmFtZV07CiB9CiAKLVN0cmluZyBGaWxlQ2hvb3Nl
cjo6YmFzZW5hbWVGb3JXaWR0aChpbnQgd2lkdGgpIGNvbnN0CitTdHJpbmcgRmlsZUNob29zZXI6
OmJhc2VuYW1lRm9yV2lkdGgoY29uc3QgRm9udCYgZm9udCwgaW50IHdpZHRoKSBjb25zdAogewog
ICAgIGlmICh3aWR0aCA8PSAwKQogICAgICAgICByZXR1cm4gU3RyaW5nKCk7Ci0gICAgCisKICAg
ICBTdHJpbmcgc3RyVG9UcnVuY2F0ZTsKICAgICBpZiAobV9maWxlbmFtZS5pc0VtcHR5KCkpCiAg
ICAgICAgIHN0clRvVHJ1bmNhdGUgPSBmaWxlQnV0dG9uTm9GaWxlU2VsZWN0ZWRMYWJlbCgpOwog
ICAgIGVsc2UKICAgICAgICAgc3RyVG9UcnVuY2F0ZSA9IFtbTlNGaWxlTWFuYWdlciBkZWZhdWx0
TWFuYWdlcl0gZGlzcGxheU5hbWVBdFBhdGg6bV9maWxlbmFtZV07Ci0gICAgCi0gICAgcmV0dXJu
IFtXZWJDb3JlU3RyaW5nVHJ1bmNhdG9yIGNlbnRlclRydW5jYXRlU3RyaW5nOnN0clRvVHJ1bmNh
dGUKLSAgICAgICAgICAgIHRvV2lkdGg6d2lkdGggd2l0aEZvbnQ6bV91cGxvYWRDb250cm9sLT5z
dHlsZSgpLT5mb250KCkucHJpbWFyeUZvbnQoKS0+Z2V0TlNGb250KCldOwotfQogCi12b2lkIEZp
bGVDaG9vc2VyOjpkaXNjb25uZWN0VXBsb2FkQ29udHJvbCgpCi17Ci0gICAgaWYgKG1fY29udHJv
bGxlcikKLSAgICAgICAgW21fY29udHJvbGxlciBkaXNjb25uZWN0RmlsZUNob29zZXJdOwotfQot
Ci12b2lkIEZpbGVDaG9vc2VyOjpjaG9vc2VGaWxlKGNvbnN0IFN0cmluZyYgZmlsZW5hbWUpCi17
Ci0gICAgaWYgKG1fZmlsZW5hbWUgPT0gZmlsZW5hbWUpCi0gICAgICAgIHJldHVybjsKLSAgICAK
LSAgICBtX2ZpbGVuYW1lID0gZmlsZW5hbWU7Ci0gICAgCi0gICAgLy8gTmVlZCB1bnNpZ25lZCAw
IGhlcmUgdG8gZGlzYW1iaWd1YXRlIFN0cmluZzo6b3BlcmF0b3JbXSBmcm9tIG9wZXJhdG9yKE5T
U3RyaW5nKiwgaW50KVtdCi0gICAgaWYgKCFtX2ZpbGVuYW1lLmxlbmd0aCgpIHx8IG1fZmlsZW5h
bWVbMFVdICE9ICcvJykKLSAgICAgICAgbV9pY29uID0gMDsKLSAgICBlbHNlCi0gICAgICAgIG1f
aWNvbiA9IEljb246Om5ld0ljb25Gb3JGaWxlKG1fZmlsZW5hbWUpOwotICAgIAotICAgIHVwbG9h
ZENvbnRyb2woKS0+dmFsdWVDaGFuZ2VkKCk7CisgICAgcmV0dXJuIFtXZWJDb3JlU3RyaW5nVHJ1
bmNhdG9yIGNlbnRlclRydW5jYXRlU3RyaW5nOnN0clRvVHJ1bmNhdGUKKyAgICAgICAgdG9XaWR0
aDp3aWR0aCB3aXRoRm9udDpmb250LnByaW1hcnlGb250KCktPmdldE5TRm9udCgpXTsKIH0KIAog
fQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9xdC9GaWxlQ2hvb3NlclF0LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL3F0L0ZpbGVDaG9vc2VyUXQuY3BwCShyZXZpc2lvbiAxODg3
NikKKysrIFdlYkNvcmUvcGxhdGZvcm0vcXQvRmlsZUNob29zZXJRdC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTI1LDQzICsyNSwyOCBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUZpbGVDaG9v
c2VyOjpGaWxlQ2hvb3NlcihEb2N1bWVudCosIFJlbmRlckZpbGVVcGxvYWRDb250cm9sKikKK0Zp
bGVDaG9vc2VyOjpGaWxlQ2hvb3NlcihGaWxlQ2hvb3NlckNsaWVudCogY2xpZW50LCBjb25zdCBT
dHJpbmcmIGZpbGVuYW1lKQorICAgIDogbV9jbGllbnQoY2xpZW50KQorICAgICwgbV9maWxlbmFt
ZShmaWxlbmFtZSkKKyAgICAsIG1faWNvbihjaG9vc2VJY29uKGZpbGVuYW1lKSkKIHsKLSAgICBu
b3RJbXBsZW1lbnRlZCgpOwogfQogCiBGaWxlQ2hvb3Nlcjo6fkZpbGVDaG9vc2VyKCkKIHsKLSAg
ICBub3RJbXBsZW1lbnRlZCgpOwogfQogCi1QYXNzUmVmUHRyPEZpbGVDaG9vc2VyPiBGaWxlQ2hv
b3Nlcjo6Y3JlYXRlKERvY3VtZW50KiwgUmVuZGVyRmlsZVVwbG9hZENvbnRyb2wqKQordm9pZCBG
aWxlQ2hvb3Nlcjo6b3BlbkZpbGVDaG9vc2VyKERvY3VtZW50KikKIHsKICAgICBub3RJbXBsZW1l
bnRlZCgpOwotICAgIHJldHVybiAwOwogfQogCi12b2lkIEZpbGVDaG9vc2VyOjpvcGVuRmlsZUNo
b29zZXIoKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLVN0cmluZyBGaWxlQ2hvb3Nl
cjo6YmFzZW5hbWVGb3JXaWR0aChpbnQgd2lkdGgpIGNvbnN0CitTdHJpbmcgRmlsZUNob29zZXI6
OmJhc2VuYW1lRm9yV2lkdGgoY29uc3QgRm9udCYsIGludCB3aWR0aCkgY29uc3QKIHsKICAgICBu
b3RJbXBsZW1lbnRlZCgpOwogICAgIHJldHVybiBTdHJpbmcoKTsKIH0KIAotdm9pZCBGaWxlQ2hv
b3Nlcjo6ZGlzY29ubmVjdFVwbG9hZENvbnRyb2woKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7
Ci19Ci0KLXZvaWQgRmlsZUNob29zZXI6OmNob29zZUZpbGUoY29uc3QgU3RyaW5nJiBmaWxlbmFt
ZSkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCiB9CiAKIC8vIHZpbTogdHM9NCBzdz00
IGV0CkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGaWxlVXBsb2FkQ29udHJvbC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRmlsZVVwbG9hZENvbnRyb2wu
Y3BwCShyZXZpc2lvbiAxODg3NikKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZpbGVVcGxv
YWRDb250cm9sLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDUgQEAKLS8qKgotICoKLSAq
IENvcHlyaWdodCAoQykgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLgorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAwNiwgMjAwNyBBcHBsZSBJbmMuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTM5LDMy
ICszOCwzMCBAQCB1c2luZyBuYW1lc3BhY2Ugc3RkOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
K3VzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CisKIGNvbnN0IGludCBhZnRlckJ1dHRvblNwYWNp
bmcgPSA0OwogY29uc3QgaW50IGljb25IZWlnaHQgPSAxNjsKIGNvbnN0IGludCBpY29uV2lkdGgg
PSAxNjsKIGNvbnN0IGludCBpY29uRmlsZW5hbWVTcGFjaW5nID0gMjsKIGNvbnN0IGludCBkZWZh
dWx0V2lkdGhOdW1DaGFycyA9IDM0OwotCi11c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOworY29u
c3QgaW50IGJ1dHRvblNoYWRvd0hlaWdodCA9IDI7CiAKIGNsYXNzIEhUTUxGaWxlVXBsb2FkSW5u
ZXJCdXR0b25FbGVtZW50IDogcHVibGljIEhUTUxJbnB1dEVsZW1lbnQgewogcHVibGljOgotICAg
IEhUTUxGaWxlVXBsb2FkSW5uZXJCdXR0b25FbGVtZW50KERvY3VtZW50KiwgTm9kZSogc2hhZG93
UGFyZW50ID0gMCk7Ci0gICAgCi0gICAgdmlydHVhbCBSZW5kZXJPYmplY3QqIGNyZWF0ZVJlbmRl
cmVyKFJlbmRlckFyZW5hKiwgUmVuZGVyU3R5bGUqKTsKLSAgICAKKyAgICBIVE1MRmlsZVVwbG9h
ZElubmVyQnV0dG9uRWxlbWVudChEb2N1bWVudCosIE5vZGUqIHNoYWRvd1BhcmVudCk7CisKICAg
ICB2aXJ0dWFsIGJvb2wgaXNTaGFkb3dOb2RlKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQotICAg
IAogICAgIHZpcnR1YWwgTm9kZSogc2hhZG93UGFyZW50Tm9kZSgpIHsgcmV0dXJuIG1fc2hhZG93
UGFyZW50OyB9Ci0gICAgCisKIHByaXZhdGU6CiAgICAgTm9kZSogbV9zaGFkb3dQYXJlbnQ7ICAg
IAogfTsKIAotUmVuZGVyRmlsZVVwbG9hZENvbnRyb2w6OlJlbmRlckZpbGVVcGxvYWRDb250cm9s
KE5vZGUqIG5vZGUpCi0gICAgOiBSZW5kZXJCbG9jayhub2RlKQorUmVuZGVyRmlsZVVwbG9hZENv
bnRyb2w6OlJlbmRlckZpbGVVcGxvYWRDb250cm9sKEhUTUxJbnB1dEVsZW1lbnQqIGlucHV0KQor
ICAgIDogUmVuZGVyQmxvY2soaW5wdXQpCiAgICAgLCBtX2J1dHRvbigwKQotICAgICwgbV9maWxl
Q2hvb3NlcihGaWxlQ2hvb3Nlcjo6Y3JlYXRlKGRvY3VtZW50KCksIHRoaXMpKQorICAgICwgbV9m
aWxlQ2hvb3NlcihGaWxlQ2hvb3Nlcjo6Y3JlYXRlKHRoaXMsIGlucHV0LT52YWx1ZSgpKSkKIHsK
IH0KIApAQCAtNzIsOCArNjksNyBAQCBSZW5kZXJGaWxlVXBsb2FkQ29udHJvbDo6flJlbmRlckZp
bGVVcGxvCiB7CiAgICAgaWYgKG1fYnV0dG9uKQogICAgICAgICBtX2J1dHRvbi0+ZGV0YWNoKCk7
Ci0gICAgaWYgKG1fZmlsZUNob29zZXIpCi0gICAgICAgIG1fZmlsZUNob29zZXItPmRpc2Nvbm5l
Y3RVcGxvYWRDb250cm9sKCk7CisgICAgbV9maWxlQ2hvb3Nlci0+ZGlzY29ubmVjdENsaWVudCgp
OwogfQogCiB2b2lkIFJlbmRlckZpbGVVcGxvYWRDb250cm9sOjpzZXRTdHlsZShSZW5kZXJTdHls
ZSogbmV3U3R5bGUpCkBAIC0xMDAsMzUgKzk2LDQwIEBAIHZvaWQgUmVuZGVyRmlsZVVwbG9hZENv
bnRyb2w6OnZhbHVlQ2hhbmcKIAogdm9pZCBSZW5kZXJGaWxlVXBsb2FkQ29udHJvbDo6Y2xpY2so
KQogewotICAgIG1fZmlsZUNob29zZXItPm9wZW5GaWxlQ2hvb3NlcigpOworICAgIG1fZmlsZUNo
b29zZXItPm9wZW5GaWxlQ2hvb3Nlcihub2RlKCktPmRvY3VtZW50KCkpOwogfQogCiB2b2lkIFJl
bmRlckZpbGVVcGxvYWRDb250cm9sOjp1cGRhdGVGcm9tRWxlbWVudCgpCiB7CiAgICAgaWYgKCFt
X2J1dHRvbikgewogICAgICAgICBtX2J1dHRvbiA9IG5ldyBIVE1MRmlsZVVwbG9hZElubmVyQnV0
dG9uRWxlbWVudChkb2N1bWVudCgpLCBub2RlKCkpOworICAgICAgICBtX2J1dHRvbi0+c2V0SW5w
dXRUeXBlKCJidXR0b24iKTsKKyAgICAgICAgbV9idXR0b24tPnNldFZhbHVlKGZpbGVCdXR0b25D
aG9vc2VGaWxlTGFiZWwoKSk7CiAgICAgICAgIFJlbmRlclN0eWxlKiBidXR0b25TdHlsZSA9IGNy
ZWF0ZUJ1dHRvblN0eWxlKHN0eWxlKCkpOwotICAgICAgICBtX2J1dHRvbi0+c2V0UmVuZGVyZXIo
bV9idXR0b24tPmNyZWF0ZVJlbmRlcmVyKHJlbmRlckFyZW5hKCksIGJ1dHRvblN0eWxlKSk7Ci0g
ICAgICAgIG1fYnV0dG9uLT5yZW5kZXJlcigpLT5zZXRTdHlsZShidXR0b25TdHlsZSk7Ci0gICAg
ICAgIHN0YXRpY19jYXN0PFJlbmRlckJ1dHRvbio+KG1fYnV0dG9uLT5yZW5kZXJlcigpKS0+c2V0
VGV4dChmaWxlQnV0dG9uQ2hvb3NlRmlsZUxhYmVsKCkpOworICAgICAgICBSZW5kZXJPYmplY3Qq
IHJlbmRlcmVyID0gbV9idXR0b24tPmNyZWF0ZVJlbmRlcmVyKHJlbmRlckFyZW5hKCksIGJ1dHRv
blN0eWxlKTsKKyAgICAgICAgbV9idXR0b24tPnNldFJlbmRlcmVyKHJlbmRlcmVyKTsKKyAgICAg
ICAgcmVuZGVyZXItPnNldFN0eWxlKGJ1dHRvblN0eWxlKTsKKyAgICAgICAgcmVuZGVyZXItPnVw
ZGF0ZUZyb21FbGVtZW50KCk7CiAgICAgICAgIG1fYnV0dG9uLT5zZXRBdHRhY2hlZCgpOwogICAg
ICAgICBtX2J1dHRvbi0+c2V0SW5Eb2N1bWVudCh0cnVlKTsKLSAgICAgICAgCisKICAgICAgICAg
YWRkQ2hpbGQobV9idXR0b24tPnJlbmRlcmVyKCkpOwogICAgIH0KKwogICAgIG1fYnV0dG9uLT5z
ZXREaXNhYmxlZCghdGhlbWUoKS0+aXNFbmFibGVkKHRoaXMpKTsKIH0KIAotaW50IFJlbmRlckZp
bGVVcGxvYWRDb250cm9sOjptYXhGaWxlbmFtZVdpZHRoKCkKK2ludCBSZW5kZXJGaWxlVXBsb2Fk
Q29udHJvbDo6bWF4RmlsZW5hbWVXaWR0aCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1heCgwLCBj
b250ZW50V2lkdGgoKSAtIG1fYnV0dG9uLT5yZW5kZXJlcigpLT53aWR0aCgpIC0gYWZ0ZXJCdXR0
b25TcGFjaW5nIC0gKG1fZmlsZUNob29zZXItPmljb24oKSA/IGljb25XaWR0aCArIGljb25GaWxl
bmFtZVNwYWNpbmcgOiAwKSk7CisgICAgcmV0dXJuIG1heCgwLCBjb250ZW50V2lkdGgoKSAtIG1f
YnV0dG9uLT5yZW5kZXJlcigpLT53aWR0aCgpIC0gYWZ0ZXJCdXR0b25TcGFjaW5nCisgICAgICAg
IC0gKG1fZmlsZUNob29zZXItPmljb24oKSA/IGljb25XaWR0aCArIGljb25GaWxlbmFtZVNwYWNp
bmcgOiAwKSk7CiB9CiAKLVJlbmRlclN0eWxlKiBSZW5kZXJGaWxlVXBsb2FkQ29udHJvbDo6Y3Jl
YXRlQnV0dG9uU3R5bGUoUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlKQorUmVuZGVyU3R5bGUqIFJl
bmRlckZpbGVVcGxvYWRDb250cm9sOjpjcmVhdGVCdXR0b25TdHlsZShSZW5kZXJTdHlsZSogcGFy
ZW50U3R5bGUpIGNvbnN0CiB7CiAgICAgUmVuZGVyU3R5bGUqIHN0eWxlID0gZ2V0UHNldWRvU3R5
bGUoUmVuZGVyU3R5bGU6OkZJTEVfVVBMT0FEX0JVVFRPTik7CiAgICAgaWYgKCFzdHlsZSkKLSAg
ICAgICAgc3R5bGUgPSBuZXcgKHJlbmRlckFyZW5hKCkpIFJlbmRlclN0eWxlKCk7CisgICAgICAg
IHN0eWxlID0gbmV3IChyZW5kZXJBcmVuYSgpKSBSZW5kZXJTdHlsZTsKIAogICAgIGlmIChwYXJl
bnRTdHlsZSkKICAgICAgICAgc3R5bGUtPmluaGVyaXRGcm9tKHBhcmVudFN0eWxlKTsKQEAgLTE0
MiwyNSArMTQzLDI0IEBAIFJlbmRlclN0eWxlKiBSZW5kZXJGaWxlVXBsb2FkQ29udHJvbDo6Y3IK
IAogdm9pZCBSZW5kZXJGaWxlVXBsb2FkQ29udHJvbDo6cGFpbnRPYmplY3QoUGFpbnRJbmZvJiBw
YWludEluZm8sIGludCB0eCwgaW50IHR5KQogewotICAgIGNvbnN0IGludCBidXR0b25TaGFkb3dI
ZWlnaHQgPSAyOwotICAgIAogICAgIC8vIFB1c2ggYSBjbGlwLgogICAgIGlmIChwYWludEluZm8u
cGhhc2UgPT0gUGFpbnRQaGFzZUZvcmVncm91bmQgfHwgcGFpbnRJbmZvLnBoYXNlID09IFBhaW50
UGhhc2VDaGlsZEJsb2NrQmFja2dyb3VuZHMpIHsKICAgICAgICAgSW50UmVjdCBjbGlwUmVjdCh0
eCArIGJvcmRlckxlZnQoKSwgdHkgKyBib3JkZXJUb3AoKSwKICAgICAgICAgICAgICAgICAgICAg
ICAgICB3aWR0aCgpIC0gYm9yZGVyTGVmdCgpIC0gYm9yZGVyUmlnaHQoKSwgaGVpZ2h0KCkgLSBi
b3JkZXJCb3R0b20oKSAtIGJvcmRlclRvcCgpICsgYnV0dG9uU2hhZG93SGVpZ2h0KTsKLSAgICAg
ICAgaWYgKGNsaXBSZWN0LndpZHRoKCkgPT0gMCB8fCBjbGlwUmVjdC5oZWlnaHQoKSA9PSAwKQor
ICAgICAgICBpZiAoY2xpcFJlY3QuaXNFbXB0eSgpKQogICAgICAgICAgICAgcmV0dXJuOwogICAg
ICAgICBwYWludEluZm8uY29udGV4dC0+c2F2ZSgpOwogICAgICAgICBwYWludEluZm8uY29udGV4
dC0+Y2xpcChjbGlwUmVjdCk7CiAgICAgfQogCiAgICAgaWYgKHBhaW50SW5mby5waGFzZSA9PSBQ
YWludFBoYXNlRm9yZWdyb3VuZCkgewotICAgICAgICBjb25zdCBTdHJpbmcmIGRpc3BsYXllZEZp
bGVuYW1lID0gbV9maWxlQ2hvb3Nlci0+YmFzZW5hbWVGb3JXaWR0aChtYXhGaWxlbmFtZVdpZHRo
KCkpOworICAgICAgICBjb25zdCBTdHJpbmcmIGRpc3BsYXllZEZpbGVuYW1lID0gbV9maWxlQ2hv
b3Nlci0+YmFzZW5hbWVGb3JXaWR0aChzdHlsZSgpLT5mb250KCksIG1heEZpbGVuYW1lV2lkdGgo
KSk7CiAgICAgICAgIFRleHRSdW4gdGV4dFJ1bihkaXNwbGF5ZWRGaWxlbmFtZS5jaGFyYWN0ZXJz
KCksIGRpc3BsYXllZEZpbGVuYW1lLmxlbmd0aCgpKTsKIAogICAgICAgICAvLyBEZXRlcm1pbmUg
d2hlcmUgdGhlIGZpbGVuYW1lIHNob3VsZCBiZSBwbGFjZWQKICAgICAgICAgaW50IGNvbnRlbnRM
ZWZ0ID0gdHggKyBib3JkZXJMZWZ0KCkgKyBwYWRkaW5nTGVmdCgpOwotICAgICAgICBpbnQgYnV0
dG9uQW5kSWNvbldpZHRoID0gbV9idXR0b24tPnJlbmRlcmVyKCktPndpZHRoKCkgKyBhZnRlckJ1
dHRvblNwYWNpbmcgKyAobV9maWxlQ2hvb3Nlci0+aWNvbigpID8gaWNvbldpZHRoICsgaWNvbkZp
bGVuYW1lU3BhY2luZyA6IDApOworICAgICAgICBpbnQgYnV0dG9uQW5kSWNvbldpZHRoID0gbV9i
dXR0b24tPnJlbmRlcmVyKCktPndpZHRoKCkgKyBhZnRlckJ1dHRvblNwYWNpbmcKKyAgICAgICAg
ICAgICsgKG1fZmlsZUNob29zZXItPmljb24oKSA/IGljb25XaWR0aCArIGljb25GaWxlbmFtZVNw
YWNpbmcgOiAwKTsKICAgICAgICAgaW50IHRleHRYOwogICAgICAgICBpZiAoc3R5bGUoKS0+ZGly
ZWN0aW9uKCkgPT0gTFRSKQogICAgICAgICAgICAgdGV4dFggPSBjb250ZW50TGVmdCArIGJ1dHRv
bkFuZEljb25XaWR0aDsKQEAgLTE2OCw3ICsxNjgsOSBAQCB2b2lkIFJlbmRlckZpbGVVcGxvYWRD
b250cm9sOjpwYWludE9iamVjCiAgICAgICAgICAgICB0ZXh0WCA9IGNvbnRlbnRMZWZ0ICsgY29u
dGVudFdpZHRoKCkgLSBidXR0b25BbmRJY29uV2lkdGggLSBzdHlsZSgpLT5mb250KCkud2lkdGgo
dGV4dFJ1bik7CiAgICAgICAgIC8vIFdlIHdhbnQgdG8gbWF0Y2ggdGhlIGJ1dHRvbidzIGJhc2Vs
aW5lCiAgICAgICAgIFJlbmRlckJ1dHRvbiogYnV0dG9uUmVuZGVyZXIgPSBzdGF0aWNfY2FzdDxS
ZW5kZXJCdXR0b24qPihtX2J1dHRvbi0+cmVuZGVyZXIoKSk7Ci0gICAgICAgIGludCB0ZXh0WSA9
IGJ1dHRvblJlbmRlcmVyLT5hYnNvbHV0ZUJvdW5kaW5nQm94UmVjdCgpLnkoKSArIGJ1dHRvblJl
bmRlcmVyLT5tYXJnaW5Ub3AoKSArIGJ1dHRvblJlbmRlcmVyLT5ib3JkZXJUb3AoKSArIGJ1dHRv
blJlbmRlcmVyLT5wYWRkaW5nVG9wKCkgKyBidXR0b25SZW5kZXJlci0+YmFzZWxpbmVQb3NpdGlv
bih0cnVlLCBmYWxzZSk7CisgICAgICAgIGludCB0ZXh0WSA9IGJ1dHRvblJlbmRlcmVyLT5hYnNv
bHV0ZUJvdW5kaW5nQm94UmVjdCgpLnkoKQorICAgICAgICAgICAgKyBidXR0b25SZW5kZXJlci0+
bWFyZ2luVG9wKCkgKyBidXR0b25SZW5kZXJlci0+Ym9yZGVyVG9wKCkgKyBidXR0b25SZW5kZXJl
ci0+cGFkZGluZ1RvcCgpCisgICAgICAgICAgICArIGJ1dHRvblJlbmRlcmVyLT5iYXNlbGluZVBv
c2l0aW9uKHRydWUsIGZhbHNlKTsKIAogICAgICAgICBwYWludEluZm8uY29udGV4dC0+c2V0Rm9u
dChzdHlsZSgpLT5mb250KCkpOwogICAgICAgICBwYWludEluZm8uY29udGV4dC0+c2V0RmlsbENv
bG9yKHN0eWxlKCktPmNvbG9yKCkpOwpAQCAtMjM3LDEyICsyMzksNiBAQCBIVE1MRmlsZVVwbG9h
ZElubmVyQnV0dG9uRWxlbWVudDo6SFRNTEZpCiAgICAgOiBIVE1MSW5wdXRFbGVtZW50KGRvYykK
ICAgICAsIG1fc2hhZG93UGFyZW50KHNoYWRvd1BhcmVudCkKIHsKLSAgICBzZXRJbnB1dFR5cGUo
ImJ1dHRvbiIpOwotfQotCi1SZW5kZXJPYmplY3QqIEhUTUxGaWxlVXBsb2FkSW5uZXJCdXR0b25F
bGVtZW50OjpjcmVhdGVSZW5kZXJlcihSZW5kZXJBcmVuYSogYXJlbmEsIFJlbmRlclN0eWxlKiBz
dHlsZSkKLXsKLSAgICByZXR1cm4gSFRNTElucHV0RWxlbWVudDo6Y3JlYXRlUmVuZGVyZXIoYXJl
bmEsIHN0eWxlKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyRmlsZVVwbG9hZENvbnRyb2wuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJGaWxlVXBsb2FkQ29udHJvbC5oCShyZXZpc2lvbiAxODg3NikKKysr
IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZpbGVVcGxvYWRDb250cm9sLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA2IEFwcGxlIENvbXB1
dGVyCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcgQXBwbGUgSW5jLgogICoKICAqIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
ICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljCkBAIC0yMiwyMiArMjIsMTkgQEAKICNkZWZpbmUgUmVuZGVyRmlsZVVwbG9hZENvbnRy
b2xfaAogCiAjaW5jbHVkZSAiRmlsZUNob29zZXIuaCIKLSNpbmNsdWRlICJIVE1MSW5wdXRFbGVt
ZW50LmgiCiAjaW5jbHVkZSAiUmVuZGVyQmxvY2suaCIKLSNpbmNsdWRlICJTaGFyZWQuaCIKIAog
bmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBIVE1MRmlsZVVwbG9hZElubmVyQnV0dG9uRWxl
bWVudDsKLS8vY2xhc3MgUmVuZGVyRmlsZVVwbG9hZElubmVyRmlsZUJsb2NrOworY2xhc3MgSFRN
TElucHV0RWxlbWVudDsKICAgICAKLS8vIFJlbmRlckZpbGVVcGxvYWRDb250cm9scyBjb250YWlu
IGEgUmVuZGVyQnV0dG9uIChmb3Igb3BlbmluZyB0aGUgZmlsZSBjaG9vc2VyKSwgYW5kCi0vLyBz
dWZmaWNpZW50IHNwYWNlIHRvIGRyYXcgYSBmaWxlIGljb24gYW5kIGZpbGVuYW1lLiBUaGUgUmVu
ZGVyQnV0dG9uIGhhcyBhbgotLy8gSFRNTEZpbGVVcGxvYWRJbm5lckJ1dHRvbkVsZW1lbnQgc2hh
ZG93IG5vZGUgYXNzb2NpYXRlZCB3aXRoIGl0IHRvIHJlY2VpdmUgY2xpY2svaG92ZXIgZXZlbnRz
LgorLy8gRWFjaCBSZW5kZXJGaWxlVXBsb2FkQ29udHJvbCBjb250YWlucyBhIFJlbmRlckJ1dHRv
biAoZm9yIG9wZW5pbmcgdGhlIGZpbGUgY2hvb3NlciksIGFuZAorLy8gc3VmZmljaWVudCBzcGFj
ZSB0byBkcmF3IGEgZmlsZSBpY29uIGFuZCBmaWxlbmFtZS4gVGhlIFJlbmRlckJ1dHRvbiBoYXMg
YSBzaGFkb3cgbm9kZQorLy8gYXNzb2NpYXRlZCB3aXRoIGl0IHRvIHJlY2VpdmUgY2xpY2svaG92
ZXIgZXZlbnRzLgogCi1jbGFzcyBSZW5kZXJGaWxlVXBsb2FkQ29udHJvbCA6IHB1YmxpYyBSZW5k
ZXJCbG9jayB7CitjbGFzcyBSZW5kZXJGaWxlVXBsb2FkQ29udHJvbCA6IHB1YmxpYyBSZW5kZXJC
bG9jaywgcHJpdmF0ZSBGaWxlQ2hvb3NlckNsaWVudCB7CiBwdWJsaWM6Ci0gICAgUmVuZGVyRmls
ZVVwbG9hZENvbnRyb2woTm9kZSopOworICAgIFJlbmRlckZpbGVVcGxvYWRDb250cm9sKEhUTUxJ
bnB1dEVsZW1lbnQqKTsKICAgICB+UmVuZGVyRmlsZVVwbG9hZENvbnRyb2woKTsKIAogICAgIHZp
cnR1YWwgY29uc3QgY2hhciogcmVuZGVyTmFtZSgpIGNvbnN0IHsgcmV0dXJuICJSZW5kZXJGaWxl
VXBsb2FkQ29udHJvbCI7IH0KQEAgLTUxLDExICs0OCwxMSBAQCBwdWJsaWM6CiAKICAgICB2b2lk
IHZhbHVlQ2hhbmdlZCgpOwogCi1wcm90ZWN0ZWQ6Ci0gICAgaW50IG1heEZpbGVuYW1lV2lkdGgo
KTsKLSAgICBSZW5kZXJTdHlsZSogY3JlYXRlQnV0dG9uU3R5bGUoUmVuZGVyU3R5bGUqIHBhcmVu
dFN0eWxlID0gMCk7Citwcml2YXRlOgorICAgIGludCBtYXhGaWxlbmFtZVdpZHRoKCkgY29uc3Q7
CisgICAgUmVuZGVyU3R5bGUqIGNyZWF0ZUJ1dHRvblN0eWxlKFJlbmRlclN0eWxlKiBwYXJlbnRT
dHlsZSkgY29uc3Q7CiAKLSAgICBSZWZQdHI8SFRNTEZpbGVVcGxvYWRJbm5lckJ1dHRvbkVsZW1l
bnQ+IG1fYnV0dG9uOworICAgIFJlZlB0cjxIVE1MSW5wdXRFbGVtZW50PiBtX2J1dHRvbjsKICAg
ICBSZWZQdHI8RmlsZUNob29zZXI+IG1fZmlsZUNob29zZXI7CiB9OwogCg==
</data>
<flag name="review"
          id="4711"
          type_id="1"
          status="+"
          setter="aroben"
    />
          </attachment>
      

    </bug>

</bugzilla>